@serve.zone/dcrouter 11.0.4 → 11.0.5

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 (118) hide show
  1. package/dist_serve/bundle.js +1 -1
  2. package/package.json +1 -1
  3. package/ts/00_commitinfo_data.ts +1 -1
  4. package/ts_web/00_commitinfo_data.ts +1 -1
  5. package/dist_ts/00_commitinfo_data.d.ts +0 -8
  6. package/dist_ts/00_commitinfo_data.js +0 -9
  7. package/dist_ts/cache/classes.cache.cleaner.d.ts +0 -47
  8. package/dist_ts/cache/classes.cache.cleaner.js +0 -130
  9. package/dist_ts/cache/documents/classes.cached.email.d.ts +0 -125
  10. package/dist_ts/cache/documents/classes.cached.email.js +0 -337
  11. package/dist_ts/cache/documents/classes.cached.ip.reputation.d.ts +0 -119
  12. package/dist_ts/cache/documents/classes.cached.ip.reputation.js +0 -323
  13. package/dist_ts/cache/documents/index.d.ts +0 -2
  14. package/dist_ts/cache/documents/index.js +0 -3
  15. package/dist_ts/cache/index.d.ts +0 -4
  16. package/dist_ts/cache/index.js +0 -7
  17. package/dist_ts/classes.cert-provision-scheduler.d.ts +0 -53
  18. package/dist_ts/classes.cert-provision-scheduler.js +0 -110
  19. package/dist_ts/classes.dcrouter.d.ts +0 -337
  20. package/dist_ts/classes.dcrouter.js +0 -1405
  21. package/dist_ts/classes.storage-cert-manager.d.ts +0 -18
  22. package/dist_ts/classes.storage-cert-manager.js +0 -43
  23. package/dist_ts/config/classes.api-token-manager.d.ts +0 -46
  24. package/dist_ts/config/classes.api-token-manager.js +0 -150
  25. package/dist_ts/config/classes.route-config-manager.d.ts +0 -35
  26. package/dist_ts/config/classes.route-config-manager.js +0 -231
  27. package/dist_ts/config/index.d.ts +0 -3
  28. package/dist_ts/config/index.js +0 -5
  29. package/dist_ts/config/validator.d.ts +0 -104
  30. package/dist_ts/config/validator.js +0 -152
  31. package/dist_ts/errors/base.errors.d.ts +0 -224
  32. package/dist_ts/errors/base.errors.js +0 -320
  33. package/dist_ts/errors/error-handler.d.ts +0 -98
  34. package/dist_ts/errors/error-handler.js +0 -282
  35. package/dist_ts/errors/error.codes.d.ts +0 -115
  36. package/dist_ts/errors/error.codes.js +0 -136
  37. package/dist_ts/errors/index.d.ts +0 -54
  38. package/dist_ts/errors/index.js +0 -136
  39. package/dist_ts/errors/reputation.errors.d.ts +0 -183
  40. package/dist_ts/errors/reputation.errors.js +0 -292
  41. package/dist_ts/index.d.ts +0 -7
  42. package/dist_ts/index.js +0 -11
  43. package/dist_ts/logger.d.ts +0 -21
  44. package/dist_ts/logger.js +0 -81
  45. package/dist_ts/monitoring/classes.metricscache.d.ts +0 -32
  46. package/dist_ts/monitoring/classes.metricscache.js +0 -63
  47. package/dist_ts/monitoring/classes.metricsmanager.d.ts +0 -178
  48. package/dist_ts/monitoring/classes.metricsmanager.js +0 -642
  49. package/dist_ts/monitoring/index.d.ts +0 -1
  50. package/dist_ts/monitoring/index.js +0 -2
  51. package/dist_ts/opsserver/classes.opsserver.d.ts +0 -37
  52. package/dist_ts/opsserver/classes.opsserver.js +0 -85
  53. package/dist_ts/opsserver/handlers/admin.handler.d.ts +0 -31
  54. package/dist_ts/opsserver/handlers/admin.handler.js +0 -180
  55. package/dist_ts/opsserver/handlers/api-token.handler.d.ts +0 -6
  56. package/dist_ts/opsserver/handlers/api-token.handler.js +0 -62
  57. package/dist_ts/opsserver/handlers/certificate.handler.d.ts +0 -32
  58. package/dist_ts/opsserver/handlers/certificate.handler.js +0 -421
  59. package/dist_ts/opsserver/handlers/config.handler.d.ts +0 -7
  60. package/dist_ts/opsserver/handlers/config.handler.js +0 -192
  61. package/dist_ts/opsserver/handlers/email-ops.handler.d.ts +0 -30
  62. package/dist_ts/opsserver/handlers/email-ops.handler.js +0 -227
  63. package/dist_ts/opsserver/handlers/index.d.ts +0 -11
  64. package/dist_ts/opsserver/handlers/index.js +0 -12
  65. package/dist_ts/opsserver/handlers/logs.handler.d.ts +0 -25
  66. package/dist_ts/opsserver/handlers/logs.handler.js +0 -256
  67. package/dist_ts/opsserver/handlers/radius.handler.d.ts +0 -6
  68. package/dist_ts/opsserver/handlers/radius.handler.js +0 -295
  69. package/dist_ts/opsserver/handlers/remoteingress.handler.d.ts +0 -6
  70. package/dist_ts/opsserver/handlers/remoteingress.handler.js +0 -156
  71. package/dist_ts/opsserver/handlers/route-management.handler.d.ts +0 -14
  72. package/dist_ts/opsserver/handlers/route-management.handler.js +0 -117
  73. package/dist_ts/opsserver/handlers/security.handler.d.ts +0 -9
  74. package/dist_ts/opsserver/handlers/security.handler.js +0 -231
  75. package/dist_ts/opsserver/handlers/stats.handler.d.ts +0 -11
  76. package/dist_ts/opsserver/handlers/stats.handler.js +0 -399
  77. package/dist_ts/opsserver/helpers/guards.d.ts +0 -27
  78. package/dist_ts/opsserver/helpers/guards.js +0 -43
  79. package/dist_ts/opsserver/index.d.ts +0 -1
  80. package/dist_ts/opsserver/index.js +0 -2
  81. package/dist_ts/paths.d.ts +0 -26
  82. package/dist_ts/paths.js +0 -45
  83. package/dist_ts/plugins.d.ts +0 -79
  84. package/dist_ts/plugins.js +0 -113
  85. package/dist_ts/radius/classes.accounting.manager.d.ts +0 -218
  86. package/dist_ts/radius/classes.accounting.manager.js +0 -417
  87. package/dist_ts/radius/classes.radius.server.d.ts +0 -171
  88. package/dist_ts/radius/classes.radius.server.js +0 -385
  89. package/dist_ts/radius/classes.vlan.manager.d.ts +0 -128
  90. package/dist_ts/radius/classes.vlan.manager.js +0 -279
  91. package/dist_ts/radius/index.d.ts +0 -13
  92. package/dist_ts/radius/index.js +0 -14
  93. package/dist_ts/remoteingress/classes.remoteingress-manager.d.ts +0 -82
  94. package/dist_ts/remoteingress/classes.remoteingress-manager.js +0 -227
  95. package/dist_ts/remoteingress/classes.tunnel-manager.d.ts +0 -59
  96. package/dist_ts/remoteingress/classes.tunnel-manager.js +0 -165
  97. package/dist_ts/remoteingress/index.d.ts +0 -2
  98. package/dist_ts/remoteingress/index.js +0 -3
  99. package/dist_ts/security/classes.contentscanner.d.ts +0 -164
  100. package/dist_ts/security/classes.contentscanner.js +0 -642
  101. package/dist_ts/security/classes.ipreputationchecker.d.ts +0 -160
  102. package/dist_ts/security/classes.ipreputationchecker.js +0 -537
  103. package/dist_ts/security/classes.securitylogger.d.ts +0 -144
  104. package/dist_ts/security/classes.securitylogger.js +0 -233
  105. package/dist_ts/security/index.d.ts +0 -3
  106. package/dist_ts/security/index.js +0 -4
  107. package/dist_ts/sms/classes.smsservice.d.ts +0 -15
  108. package/dist_ts/sms/classes.smsservice.js +0 -72
  109. package/dist_ts/sms/config/sms.config.d.ts +0 -93
  110. package/dist_ts/sms/config/sms.config.js +0 -2
  111. package/dist_ts/sms/config/sms.schema.d.ts +0 -5
  112. package/dist_ts/sms/config/sms.schema.js +0 -121
  113. package/dist_ts/sms/index.d.ts +0 -1
  114. package/dist_ts/sms/index.js +0 -2
  115. package/dist_ts/storage/classes.storagemanager.d.ts +0 -83
  116. package/dist_ts/storage/classes.storagemanager.js +0 -350
  117. package/dist_ts/storage/index.d.ts +0 -1
  118. package/dist_ts/storage/index.js +0 -3
@@ -1,399 +0,0 @@
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
- import { SecurityLogger } from '../../security/classes.securitylogger.js';
5
- export class StatsHandler {
6
- opsServerRef;
7
- constructor(opsServerRef) {
8
- this.opsServerRef = opsServerRef;
9
- this.registerHandlers();
10
- }
11
- registerHandlers() {
12
- // All stats endpoints register directly on viewRouter (valid identity required via middleware)
13
- const router = this.opsServerRef.viewRouter;
14
- // Server Statistics Handler
15
- router.addTypedHandler(new plugins.typedrequest.TypedHandler('getServerStatistics', async (dataArg, toolsArg) => {
16
- const stats = await this.collectServerStats();
17
- return {
18
- stats: {
19
- uptime: stats.uptime,
20
- startTime: Date.now() - (stats.uptime * 1000),
21
- memoryUsage: stats.memoryUsage,
22
- cpuUsage: stats.cpuUsage,
23
- activeConnections: stats.activeConnections,
24
- totalConnections: stats.totalConnections,
25
- requestsPerSecond: stats.requestsPerSecond,
26
- throughput: stats.throughput,
27
- },
28
- history: dataArg.includeHistory ? stats.history : undefined,
29
- };
30
- }));
31
- // Email Statistics Handler
32
- router.addTypedHandler(new plugins.typedrequest.TypedHandler('getEmailStatistics', async (dataArg, toolsArg) => {
33
- const emailServer = this.opsServerRef.dcRouterRef.emailServer;
34
- if (!emailServer) {
35
- return {
36
- stats: {
37
- sent: 0,
38
- received: 0,
39
- bounced: 0,
40
- queued: 0,
41
- failed: 0,
42
- averageDeliveryTime: 0,
43
- deliveryRate: 0,
44
- bounceRate: 0,
45
- },
46
- };
47
- }
48
- const stats = await this.collectEmailStats();
49
- return {
50
- stats: {
51
- sent: stats.sentToday,
52
- received: stats.receivedToday,
53
- bounced: Math.floor(stats.sentToday * stats.bounceRate / 100),
54
- queued: stats.queueSize,
55
- failed: 0,
56
- averageDeliveryTime: 0,
57
- deliveryRate: stats.deliveryRate,
58
- bounceRate: stats.bounceRate,
59
- },
60
- domainBreakdown: dataArg.includeDetails ? stats.domainBreakdown : undefined,
61
- };
62
- }));
63
- // DNS Statistics Handler
64
- router.addTypedHandler(new plugins.typedrequest.TypedHandler('getDnsStatistics', async (dataArg, toolsArg) => {
65
- const dnsServer = this.opsServerRef.dcRouterRef.dnsServer;
66
- if (!dnsServer) {
67
- return {
68
- stats: {
69
- totalQueries: 0,
70
- cacheHits: 0,
71
- cacheMisses: 0,
72
- cacheHitRate: 0,
73
- activeDomains: 0,
74
- averageResponseTime: 0,
75
- queryTypes: {},
76
- },
77
- };
78
- }
79
- const stats = await this.collectDnsStats();
80
- return {
81
- stats: {
82
- totalQueries: stats.totalQueries,
83
- cacheHits: stats.cacheHits,
84
- cacheMisses: stats.cacheMisses,
85
- cacheHitRate: stats.cacheHitRate,
86
- activeDomains: stats.topDomains.length,
87
- averageResponseTime: 0,
88
- queryTypes: stats.queryTypes,
89
- },
90
- domainBreakdown: dataArg.includeQueryTypes ? stats.domainBreakdown : undefined,
91
- };
92
- }));
93
- // Queue Status Handler
94
- router.addTypedHandler(new plugins.typedrequest.TypedHandler('getQueueStatus', async (dataArg, toolsArg) => {
95
- const emailServer = this.opsServerRef.dcRouterRef.emailServer;
96
- const queues = [];
97
- if (emailServer) {
98
- const status = await this.getQueueStatus();
99
- queues.push({
100
- name: dataArg.queueName || 'default',
101
- size: status.pending,
102
- processing: status.active,
103
- failed: status.failed,
104
- retrying: status.retrying,
105
- averageProcessingTime: 0,
106
- });
107
- }
108
- return {
109
- queues,
110
- totalItems: queues.reduce((sum, q) => sum + q.size + q.processing + q.failed + q.retrying, 0),
111
- };
112
- }));
113
- // Health Status Handler
114
- router.addTypedHandler(new plugins.typedrequest.TypedHandler('getHealthStatus', async (dataArg, toolsArg) => {
115
- const health = await this.checkHealthStatus();
116
- return {
117
- health: {
118
- healthy: health.healthy,
119
- uptime: process.uptime(),
120
- services: health.services.reduce((acc, service) => {
121
- acc[service.name] = {
122
- status: service.status,
123
- message: service.message,
124
- lastCheck: Date.now(),
125
- };
126
- return acc;
127
- }, {}),
128
- version: '2.12.0', // TODO: Get from package.json
129
- },
130
- };
131
- }));
132
- // Combined Metrics Handler - More efficient for frontend polling
133
- router.addTypedHandler(new plugins.typedrequest.TypedHandler('getCombinedMetrics', async (dataArg, toolsArg) => {
134
- const sections = dataArg.sections || {
135
- server: true,
136
- email: true,
137
- dns: true,
138
- security: true,
139
- network: true,
140
- };
141
- const metrics = {};
142
- // Run all metrics collection in parallel
143
- const promises = [];
144
- if (sections.server) {
145
- promises.push(this.collectServerStats().then(stats => {
146
- metrics.server = {
147
- uptime: stats.uptime,
148
- startTime: Date.now() - (stats.uptime * 1000),
149
- memoryUsage: stats.memoryUsage,
150
- cpuUsage: stats.cpuUsage,
151
- activeConnections: stats.activeConnections,
152
- totalConnections: stats.totalConnections,
153
- requestsPerSecond: stats.requestsPerSecond,
154
- throughput: stats.throughput,
155
- };
156
- }));
157
- }
158
- if (sections.email) {
159
- promises.push(this.collectEmailStats().then(stats => {
160
- // Get time-series data from MetricsManager
161
- const timeSeries = this.opsServerRef.dcRouterRef.metricsManager
162
- ? this.opsServerRef.dcRouterRef.metricsManager.getEmailTimeSeries(24)
163
- : undefined;
164
- metrics.email = {
165
- sent: stats.sentToday,
166
- received: stats.receivedToday,
167
- bounced: Math.floor(stats.sentToday * stats.bounceRate / 100),
168
- queued: stats.queueSize,
169
- failed: 0,
170
- averageDeliveryTime: 0,
171
- deliveryRate: stats.deliveryRate,
172
- bounceRate: stats.bounceRate,
173
- timeSeries,
174
- };
175
- }));
176
- }
177
- if (sections.dns) {
178
- promises.push(this.collectDnsStats().then(stats => {
179
- // Get time-series data from MetricsManager
180
- const timeSeries = this.opsServerRef.dcRouterRef.metricsManager
181
- ? this.opsServerRef.dcRouterRef.metricsManager.getDnsTimeSeries(24)
182
- : undefined;
183
- metrics.dns = {
184
- totalQueries: stats.totalQueries,
185
- cacheHits: stats.cacheHits,
186
- cacheMisses: stats.cacheMisses,
187
- cacheHitRate: stats.cacheHitRate,
188
- activeDomains: stats.topDomains.length,
189
- averageResponseTime: 0,
190
- queryTypes: stats.queryTypes,
191
- timeSeries,
192
- recentQueries: stats.recentQueries,
193
- };
194
- }));
195
- }
196
- if (sections.security && this.opsServerRef.dcRouterRef.metricsManager) {
197
- promises.push(this.opsServerRef.dcRouterRef.metricsManager.getSecurityStats().then(stats => {
198
- // Get recent events from the SecurityLogger singleton
199
- const securityLogger = SecurityLogger.getInstance();
200
- const recentEvents = securityLogger.getRecentEvents(50).map((evt) => ({
201
- timestamp: evt.timestamp,
202
- level: evt.level,
203
- type: evt.type,
204
- message: evt.message,
205
- details: evt.details,
206
- ipAddress: evt.ipAddress,
207
- domain: evt.domain,
208
- success: evt.success,
209
- }));
210
- metrics.security = {
211
- blockedIPs: stats.blockedIPs,
212
- reputationScores: {},
213
- spamDetected: stats.spamDetected,
214
- malwareDetected: stats.malwareDetected,
215
- phishingDetected: stats.phishingDetected,
216
- authenticationFailures: stats.authFailures,
217
- suspiciousActivities: stats.totalThreatsBlocked,
218
- recentEvents,
219
- };
220
- }));
221
- }
222
- if (sections.network && this.opsServerRef.dcRouterRef.metricsManager) {
223
- promises.push((async () => {
224
- const stats = await this.opsServerRef.dcRouterRef.metricsManager.getNetworkStats();
225
- const serverStats = await this.collectServerStats();
226
- // Build per-IP bandwidth lookup from throughputByIP
227
- const ipBandwidth = new Map();
228
- if (stats.throughputByIP) {
229
- for (const [ip, tp] of stats.throughputByIP) {
230
- ipBandwidth.set(ip, { in: tp.in, out: tp.out });
231
- }
232
- }
233
- metrics.network = {
234
- totalBandwidth: {
235
- in: stats.throughputRate.bytesInPerSecond,
236
- out: stats.throughputRate.bytesOutPerSecond,
237
- },
238
- totalBytes: {
239
- in: stats.totalDataTransferred.bytesIn,
240
- out: stats.totalDataTransferred.bytesOut,
241
- },
242
- activeConnections: serverStats.activeConnections,
243
- connectionDetails: [],
244
- topEndpoints: stats.topIPs.map(ip => ({
245
- endpoint: ip.ip,
246
- requests: ip.count,
247
- bandwidth: ipBandwidth.get(ip.ip) || { in: 0, out: 0 },
248
- })),
249
- throughputHistory: stats.throughputHistory || [],
250
- requestsPerSecond: stats.requestsPerSecond || 0,
251
- requestsTotal: stats.requestsTotal || 0,
252
- };
253
- })());
254
- }
255
- await Promise.all(promises);
256
- return {
257
- metrics,
258
- timestamp: Date.now(),
259
- };
260
- }));
261
- }
262
- async collectServerStats() {
263
- // Get metrics from MetricsManager if available
264
- if (this.opsServerRef.dcRouterRef.metricsManager) {
265
- const serverStats = await this.opsServerRef.dcRouterRef.metricsManager.getServerStats();
266
- return {
267
- uptime: serverStats.uptime,
268
- cpuUsage: serverStats.cpuUsage,
269
- memoryUsage: serverStats.memoryUsage,
270
- requestsPerSecond: serverStats.requestsPerSecond,
271
- activeConnections: serverStats.activeConnections,
272
- totalConnections: serverStats.totalConnections,
273
- throughput: serverStats.throughput,
274
- history: [], // TODO: Implement history tracking
275
- };
276
- }
277
- // Fallback to basic stats if MetricsManager not available
278
- const uptime = process.uptime();
279
- const memUsage = process.memoryUsage();
280
- const cpuUsage = plugins.os.loadavg()[0] * 100 / plugins.os.cpus().length;
281
- return {
282
- uptime,
283
- cpuUsage: {
284
- user: cpuUsage * 0.7,
285
- system: cpuUsage * 0.3,
286
- },
287
- memoryUsage: {
288
- heapUsed: memUsage.heapUsed,
289
- heapTotal: memUsage.heapTotal,
290
- external: memUsage.external,
291
- rss: memUsage.rss,
292
- },
293
- requestsPerSecond: 0,
294
- activeConnections: 0,
295
- totalConnections: 0,
296
- throughput: { bytesIn: 0, bytesOut: 0, bytesInPerSecond: 0, bytesOutPerSecond: 0 },
297
- history: [],
298
- };
299
- }
300
- async collectEmailStats() {
301
- // Get metrics from MetricsManager if available
302
- if (this.opsServerRef.dcRouterRef.metricsManager) {
303
- const emailStats = await this.opsServerRef.dcRouterRef.metricsManager.getEmailStats();
304
- return {
305
- sentToday: emailStats.sentToday,
306
- receivedToday: emailStats.receivedToday,
307
- bounceRate: emailStats.bounceRate,
308
- deliveryRate: emailStats.deliveryRate,
309
- queueSize: emailStats.queueSize,
310
- };
311
- }
312
- // Fallback if MetricsManager not available
313
- return {
314
- sentToday: 0,
315
- receivedToday: 0,
316
- bounceRate: 0,
317
- deliveryRate: 100,
318
- queueSize: 0,
319
- };
320
- }
321
- async collectDnsStats() {
322
- // Get metrics from MetricsManager if available
323
- if (this.opsServerRef.dcRouterRef.metricsManager) {
324
- const dnsStats = await this.opsServerRef.dcRouterRef.metricsManager.getDnsStats();
325
- return {
326
- queriesPerSecond: dnsStats.queriesPerSecond,
327
- totalQueries: dnsStats.totalQueries,
328
- cacheHits: dnsStats.cacheHits,
329
- cacheMisses: dnsStats.cacheMisses,
330
- cacheHitRate: dnsStats.cacheHitRate,
331
- topDomains: dnsStats.topDomains,
332
- queryTypes: dnsStats.queryTypes,
333
- recentQueries: dnsStats.recentQueries,
334
- };
335
- }
336
- // Fallback if MetricsManager not available
337
- return {
338
- queriesPerSecond: 0,
339
- totalQueries: 0,
340
- cacheHits: 0,
341
- cacheMisses: 0,
342
- cacheHitRate: 0,
343
- topDomains: [],
344
- queryTypes: {},
345
- };
346
- }
347
- async getQueueStatus() {
348
- // TODO: Implement actual queue status collection
349
- return {
350
- pending: 0,
351
- active: 0,
352
- failed: 0,
353
- retrying: 0,
354
- items: [],
355
- };
356
- }
357
- async checkHealthStatus() {
358
- const services = [];
359
- // Check HTTP Proxy
360
- if (this.opsServerRef.dcRouterRef.smartProxy) {
361
- services.push({
362
- name: 'HTTP/HTTPS Proxy',
363
- status: 'healthy',
364
- });
365
- }
366
- // Check Email Server
367
- if (this.opsServerRef.dcRouterRef.emailServer) {
368
- services.push({
369
- name: 'Email Server',
370
- status: 'healthy',
371
- });
372
- }
373
- // Check DNS Server
374
- if (this.opsServerRef.dcRouterRef.dnsServer) {
375
- services.push({
376
- name: 'DNS Server',
377
- status: 'healthy',
378
- });
379
- }
380
- // Check OpsServer
381
- services.push({
382
- name: 'OpsServer',
383
- status: 'healthy',
384
- });
385
- const healthy = services.every(s => s.status === 'healthy');
386
- return {
387
- healthy,
388
- services,
389
- checks: [
390
- {
391
- name: 'Memory Usage',
392
- passed: process.memoryUsage().heapUsed < (plugins.os.totalmem() * 0.9),
393
- message: 'Memory usage within limits',
394
- },
395
- ],
396
- };
397
- }
398
- }
399
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdHMuaGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RzL29wc3NlcnZlci9oYW5kbGVycy9zdGF0cy5oYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sa0JBQWtCLENBQUM7QUFFNUMsT0FBTyxLQUFLLFVBQVUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM5RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBRTFFLE1BQU0sT0FBTyxZQUFZO0lBQ0g7SUFBcEIsWUFBb0IsWUFBdUI7UUFBdkIsaUJBQVksR0FBWixZQUFZLENBQVc7UUFDekMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVPLGdCQUFnQjtRQUN0QiwrRkFBK0Y7UUFDL0YsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUM7UUFFNUMsNEJBQTRCO1FBQzVCLE1BQU0sQ0FBQyxlQUFlLENBQ3BCLElBQUksT0FBTyxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQ25DLHFCQUFxQixFQUNyQixLQUFLLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxFQUFFO1lBQzFCLE1BQU0sS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDOUMsT0FBTztnQkFDTCxLQUFLLEVBQUU7b0JBQ0wsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNO29CQUNwQixTQUFTLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7b0JBQzdDLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVztvQkFDOUIsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRO29CQUN4QixpQkFBaUIsRUFBRSxLQUFLLENBQUMs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
@@ -1,27 +0,0 @@
1
- import * as plugins from '../../plugins.js';
2
- import type { AdminHandler } from '../handlers/admin.handler.js';
3
- import * as interfaces from '../../../dist_ts_interfaces/index.js';
4
- /**
5
- * Helper function to use identity guards in handlers
6
- *
7
- * @example
8
- * // In a handler:
9
- * await passGuards(toolsArg, this.opsServerRef.adminHandler.validIdentityGuard, dataArg);
10
- */
11
- export declare function passGuards<T extends {
12
- identity?: any;
13
- }>(toolsArg: any, guard: plugins.smartguard.Guard<T>, dataArg: T): Promise<void>;
14
- /**
15
- * Helper to check admin identity in handlers and middleware.
16
- * Accepts both optional and required identity for flexibility.
17
- */
18
- export declare function requireAdminIdentity(adminHandler: AdminHandler, dataArg: {
19
- identity?: interfaces.data.IIdentity;
20
- }): Promise<void>;
21
- /**
22
- * Helper to check valid identity in handlers and middleware.
23
- * Accepts both optional and required identity for flexibility.
24
- */
25
- export declare function requireValidIdentity(adminHandler: AdminHandler, dataArg: {
26
- identity?: interfaces.data.IIdentity;
27
- }): Promise<void>;
@@ -1,43 +0,0 @@
1
- import * as plugins from '../../plugins.js';
2
- import * as interfaces from '../../../dist_ts_interfaces/index.js';
3
- /**
4
- * Helper function to use identity guards in handlers
5
- *
6
- * @example
7
- * // In a handler:
8
- * await passGuards(toolsArg, this.opsServerRef.adminHandler.validIdentityGuard, dataArg);
9
- */
10
- export async function passGuards(toolsArg, guard, dataArg) {
11
- const result = await guard.exec(dataArg);
12
- if (!result) {
13
- const failedHint = await guard.getFailedHint(dataArg);
14
- throw new plugins.typedrequest.TypedResponseError(failedHint || 'Guard check failed');
15
- }
16
- }
17
- /**
18
- * Helper to check admin identity in handlers and middleware.
19
- * Accepts both optional and required identity for flexibility.
20
- */
21
- export async function requireAdminIdentity(adminHandler, dataArg) {
22
- if (!dataArg.identity) {
23
- throw new plugins.typedrequest.TypedResponseError('No identity provided');
24
- }
25
- const passed = await adminHandler.adminIdentityGuard.exec({ identity: dataArg.identity });
26
- if (!passed) {
27
- throw new plugins.typedrequest.TypedResponseError('Admin access required');
28
- }
29
- }
30
- /**
31
- * Helper to check valid identity in handlers and middleware.
32
- * Accepts both optional and required identity for flexibility.
33
- */
34
- export async function requireValidIdentity(adminHandler, dataArg) {
35
- if (!dataArg.identity) {
36
- throw new plugins.typedrequest.TypedResponseError('No identity provided');
37
- }
38
- const passed = await adminHandler.validIdentityGuard.exec({ identity: dataArg.identity });
39
- if (!passed) {
40
- throw new plugins.typedrequest.TypedResponseError('Valid identity required');
41
- }
42
- }
43
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3VhcmRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdHMvb3Bzc2VydmVyL2hlbHBlcnMvZ3VhcmRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sa0JBQWtCLENBQUM7QUFFNUMsT0FBTyxLQUFLLFVBQVUsTUFBTSxpQ0FBaUMsQ0FBQztBQUU5RDs7Ozs7O0dBTUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLFVBQVUsQ0FDOUIsUUFBYSxFQUNiLEtBQWtDLEVBQ2xDLE9BQVU7SUFFVixNQUFNLE1BQU0sR0FBRyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDekMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ1osTUFBTSxVQUFVLEdBQUcsTUFBTSxLQUFLLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3RELE1BQU0sSUFBSSxPQUFPLENBQUMsWUFBWSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsSUFBSSxvQkFBb0IsQ0FBQyxDQUFDO0lBQ3hGLENBQUM7QUFDSCxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxvQkFBb0IsQ0FDeEMsWUFBMEIsRUFDMUIsT0FBaUQ7SUFFakQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN0QixNQUFNLElBQUksT0FBTyxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBQzVFLENBQUM7SUFFRCxNQUFNLE1BQU0sR0FBRyxNQUFNLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDMUYsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ1osTUFBTSxJQUFJLE9BQU8sQ0FBQyxZQUFZLENBQUMsa0JBQWtCLENBQUMsdUJBQXVCLENBQUMsQ0FBQztJQUM3RSxDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsb0JBQW9CLENBQ3hDLFlBQTBCLEVBQzFCLE9BQWlEO0lBRWpELElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDdEIsTUFBTSxJQUFJLE9BQU8sQ0FBQyxZQUFZLENBQUMsa0JBQWtCLENBQUMsc0JBQXNCLENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBRUQsTUFBTSxNQUFNLEdBQUcsTUFBTSxZQUFZLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQzFGLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNaLE1BQU0sSUFBSSxPQUFPLENBQUMsWUFBWSxDQUFDLGtCQUFrQixDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDL0UsQ0FBQztBQUNILENBQUMifQ==
@@ -1 +0,0 @@
1
- export * from './classes.opsserver.js';
@@ -1,2 +0,0 @@
1
- export * from './classes.opsserver.js';
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9vcHNzZXJ2ZXIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyx3QkFBd0IsQ0FBQyJ9
@@ -1,26 +0,0 @@
1
- export declare const packageDir: string;
2
- export declare const distServe: string;
3
- export declare const dcrouterHomeDir: string;
4
- export declare const dataDir: string;
5
- export declare const defaultTsmDbPath: string;
6
- export declare const dnsRecordsDir: string;
7
- /**
8
- * Resolve all data paths from a given baseDir.
9
- * When no baseDir is provided, falls back to ~/.serve.zone/dcrouter.
10
- * Specific overrides (e.g. DATA_DIR env) take precedence.
11
- */
12
- export declare function resolvePaths(baseDir?: string): {
13
- dcrouterHomeDir: string;
14
- dataDir: string;
15
- defaultTsmDbPath: string;
16
- defaultStoragePath: string;
17
- dnsRecordsDir: string;
18
- };
19
- /**
20
- * Ensure only the data directories that are actually used exist.
21
- */
22
- export declare function ensureDataDirectories(resolvedPaths: ReturnType<typeof resolvePaths>): void;
23
- /**
24
- * Legacy wrapper — delegates to ensureDataDirectories with module-level defaults.
25
- */
26
- export declare function ensureDirectories(): void;
package/dist_ts/paths.js DELETED
@@ -1,45 +0,0 @@
1
- import * as plugins from './plugins.js';
2
- // Code/asset paths (not affected by baseDir)
3
- export const packageDir = plugins.path.join(plugins.smartpath.get.dirnameFromImportMetaUrl(import.meta.url), '../');
4
- export const distServe = plugins.path.join(packageDir, './dist_serve');
5
- // Default base for all dcrouter data (always user-writable)
6
- export const dcrouterHomeDir = plugins.path.join(plugins.os.homedir(), '.serve.zone', 'dcrouter');
7
- // Configure data directory with environment variable or default to ~/.serve.zone/dcrouter/data
8
- const DEFAULT_DATA_PATH = plugins.path.join(dcrouterHomeDir, 'data');
9
- export const dataDir = process.env.DATA_DIR
10
- ? process.env.DATA_DIR
11
- : DEFAULT_DATA_PATH;
12
- // Default TsmDB path for CacheDb
13
- export const defaultTsmDbPath = plugins.path.join(dcrouterHomeDir, 'tsmdb');
14
- // DNS records directory (only surviving MTA directory reference)
15
- export const dnsRecordsDir = plugins.path.join(dataDir, 'dns');
16
- /**
17
- * Resolve all data paths from a given baseDir.
18
- * When no baseDir is provided, falls back to ~/.serve.zone/dcrouter.
19
- * Specific overrides (e.g. DATA_DIR env) take precedence.
20
- */
21
- export function resolvePaths(baseDir) {
22
- const root = baseDir ?? plugins.path.join(plugins.os.homedir(), '.serve.zone', 'dcrouter');
23
- const resolvedDataDir = process.env.DATA_DIR ?? plugins.path.join(root, 'data');
24
- return {
25
- dcrouterHomeDir: root,
26
- dataDir: resolvedDataDir,
27
- defaultTsmDbPath: plugins.path.join(root, 'tsmdb'),
28
- defaultStoragePath: plugins.path.join(root, 'storage'),
29
- dnsRecordsDir: plugins.path.join(resolvedDataDir, 'dns'),
30
- };
31
- }
32
- /**
33
- * Ensure only the data directories that are actually used exist.
34
- */
35
- export function ensureDataDirectories(resolvedPaths) {
36
- plugins.fsUtils.ensureDirSync(resolvedPaths.dataDir);
37
- plugins.fsUtils.ensureDirSync(resolvedPaths.dnsRecordsDir);
38
- }
39
- /**
40
- * Legacy wrapper — delegates to ensureDataDirectories with module-level defaults.
41
- */
42
- export function ensureDirectories() {
43
- ensureDataDirectories(resolvePaths());
44
- }
45
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF0aHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9wYXRocy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUV4Qyw2Q0FBNkM7QUFDN0MsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUN6QyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUMvRCxLQUFLLENBQ04sQ0FBQztBQUNGLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsY0FBYyxDQUFDLENBQUM7QUFFdkUsNERBQTREO0FBQzVELE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLGFBQWEsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUVsRywrRkFBK0Y7QUFDL0YsTUFBTSxpQkFBaUIsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDckUsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUTtJQUN6QyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRO0lBQ3RCLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQztBQUV0QixpQ0FBaUM7QUFDakMsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBRTVFLGlFQUFpRTtBQUNqRSxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBRS9EOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsWUFBWSxDQUFDLE9BQWdCO0lBQzNDLE1BQU0sSUFBSSxHQUFHLE9BQU8sSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLGFBQWEsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUMzRixNQUFNLGVBQWUsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDaEYsT0FBTztRQUNMLGVBQWUsRUFBRSxJQUFJO1FBQ3JCLE9BQU8sRUFBRSxlQUFlO1FBQ3hCLGdCQUFnQixFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUM7UUFDbEQsa0JBQWtCLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQztRQUN0RCxhQUFhLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLEtBQUssQ0FBQztLQUN6RCxDQUFDO0FBQ0osQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLHFCQUFxQixDQUFDLGFBQThDO0lBQ2xGLE9BQU8sQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNyRCxPQUFPLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDN0QsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLGlCQUFpQjtJQUMvQixxQkFBcUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO0FBQ3hDLENBQUMifQ==
@@ -1,79 +0,0 @@
1
- import * as dns from 'dns';
2
- import * as fs from 'fs';
3
- import * as crypto from 'crypto';
4
- import * as http from 'http';
5
- import * as net from 'net';
6
- import * as os from 'os';
7
- import * as path from 'path';
8
- import * as tls from 'tls';
9
- import * as util from 'util';
10
- export { dns, fs, crypto, http, net, os, path, tls, util, };
11
- import * as servezoneInterfaces from '@serve.zone/interfaces';
12
- import * as remoteingress from '@serve.zone/remoteingress';
13
- export { servezoneInterfaces, remoteingress, };
14
- import * as typedrequest from '@api.global/typedrequest';
15
- import * as typedserver from '@api.global/typedserver';
16
- import * as typedsocket from '@api.global/typedsocket';
17
- export { typedrequest, typedserver, typedsocket, };
18
- import * as projectinfo from '@push.rocks/projectinfo';
19
- import * as qenv from '@push.rocks/qenv';
20
- import * as smartacme from '@push.rocks/smartacme';
21
- import * as smartdata from '@push.rocks/smartdata';
22
- import * as smartdns from '@push.rocks/smartdns';
23
- import * as smartfile from '@push.rocks/smartfile';
24
- import * as smartguard from '@push.rocks/smartguard';
25
- import * as smartjwt from '@push.rocks/smartjwt';
26
- import * as smartlog from '@push.rocks/smartlog';
27
- import * as smartmetrics from '@push.rocks/smartmetrics';
28
- import * as smartmta from '@push.rocks/smartmta';
29
- import * as smartmongo from '@push.rocks/smartmongo';
30
- import * as smartnetwork from '@push.rocks/smartnetwork';
31
- import * as smartpath from '@push.rocks/smartpath';
32
- import * as smartproxy from '@push.rocks/smartproxy';
33
- import * as smartpromise from '@push.rocks/smartpromise';
34
- import * as smartradius from '@push.rocks/smartradius';
35
- import * as smartrequest from '@push.rocks/smartrequest';
36
- import * as smartrx from '@push.rocks/smartrx';
37
- import * as smartunique from '@push.rocks/smartunique';
38
- export { projectinfo, qenv, smartacme, smartdata, smartdns, smartfile, smartguard, smartjwt, smartlog, smartmetrics, smartmongo, smartmta, smartnetwork, smartpath, smartproxy, smartpromise, smartradius, smartrequest, smartrx, smartunique };
39
- export type TLogLevel = 'error' | 'warn' | 'info' | 'success' | 'debug';
40
- import * as cloudflare from '@apiclient.xyz/cloudflare';
41
- export { cloudflare, };
42
- import * as tsclass from '@tsclass/tsclass';
43
- export { tsclass, };
44
- import * as uuid from 'uuid';
45
- export { uuid, };
46
- export declare const fsUtils: {
47
- /**
48
- * Ensure a directory exists, creating it recursively if needed (sync)
49
- */
50
- ensureDirSync: (dirPath: string) => void;
51
- /**
52
- * Ensure a directory exists, creating it recursively if needed (async)
53
- */
54
- ensureDir: (dirPath: string) => Promise<void>;
55
- /**
56
- * Write JSON content to a file synchronously
57
- */
58
- toFsSync: (content: any, filePath: string) => void;
59
- /**
60
- * Write JSON content to a file asynchronously
61
- */
62
- toFs: (content: any, filePath: string) => Promise<void>;
63
- /**
64
- * Check if a file or directory exists
65
- */
66
- fileExistsSync: (filePath: string) => boolean;
67
- /**
68
- * Check if a file or directory exists (async)
69
- */
70
- fileExists: (filePath: string) => Promise<boolean>;
71
- /**
72
- * Read a JSON file synchronously
73
- */
74
- toObjectSync: <T = any>(filePath: string) => T;
75
- /**
76
- * Read a JSON file asynchronously
77
- */
78
- toObject: <T = any>(filePath: string) => Promise<T>;
79
- };