@serve.zone/dcrouter 11.0.8 → 11.0.9
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.
- package/dist_serve/bundle.js +1 -1
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts_web/00_commitinfo_data.js +1 -1
- package/package.json +2 -2
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts_web/00_commitinfo_data.ts +1 -1
- package/dist_ts/cache/classes.cache.cleaner.d.ts +0 -47
- package/dist_ts/cache/classes.cache.cleaner.js +0 -130
- package/dist_ts/cache/documents/classes.cached.ip.reputation.d.ts +0 -119
- package/dist_ts/cache/documents/classes.cached.ip.reputation.js +0 -323
- package/dist_ts/cache/documents/index.d.ts +0 -2
- package/dist_ts/cache/documents/index.js +0 -3
- package/dist_ts/cache/index.d.ts +0 -4
- package/dist_ts/cache/index.js +0 -7
- package/dist_ts/config/classes.api-token-manager.d.ts +0 -46
- package/dist_ts/config/classes.api-token-manager.js +0 -150
- package/dist_ts/config/classes.route-config-manager.d.ts +0 -35
- package/dist_ts/config/classes.route-config-manager.js +0 -231
- package/dist_ts/config/index.d.ts +0 -3
- package/dist_ts/config/index.js +0 -5
- package/dist_ts/config/validator.d.ts +0 -104
- package/dist_ts/config/validator.js +0 -152
- package/dist_ts/errors/base.errors.d.ts +0 -224
- package/dist_ts/errors/base.errors.js +0 -320
- package/dist_ts/errors/error.codes.d.ts +0 -115
- package/dist_ts/errors/error.codes.js +0 -136
- package/dist_ts/monitoring/classes.metricscache.d.ts +0 -32
- package/dist_ts/monitoring/classes.metricscache.js +0 -63
- package/dist_ts/monitoring/classes.metricsmanager.d.ts +0 -178
- package/dist_ts/monitoring/classes.metricsmanager.js +0 -642
- package/dist_ts/monitoring/index.d.ts +0 -1
- package/dist_ts/monitoring/index.js +0 -2
- package/dist_ts/opsserver/classes.opsserver.d.ts +0 -37
- package/dist_ts/opsserver/classes.opsserver.js +0 -85
- package/dist_ts/opsserver/handlers/admin.handler.d.ts +0 -31
- package/dist_ts/opsserver/handlers/admin.handler.js +0 -180
- package/dist_ts/opsserver/handlers/api-token.handler.d.ts +0 -6
- package/dist_ts/opsserver/handlers/api-token.handler.js +0 -62
- package/dist_ts/opsserver/handlers/certificate.handler.d.ts +0 -32
- package/dist_ts/opsserver/handlers/certificate.handler.js +0 -421
- package/dist_ts/opsserver/handlers/config.handler.d.ts +0 -7
- package/dist_ts/opsserver/handlers/config.handler.js +0 -192
- package/dist_ts/opsserver/handlers/email-ops.handler.d.ts +0 -30
- package/dist_ts/opsserver/handlers/email-ops.handler.js +0 -227
- package/dist_ts/opsserver/handlers/index.d.ts +0 -11
- package/dist_ts/opsserver/handlers/index.js +0 -12
- package/dist_ts/opsserver/handlers/logs.handler.d.ts +0 -25
- package/dist_ts/opsserver/handlers/logs.handler.js +0 -256
- package/dist_ts/opsserver/handlers/radius.handler.d.ts +0 -6
- package/dist_ts/opsserver/handlers/radius.handler.js +0 -295
- package/dist_ts/opsserver/handlers/remoteingress.handler.d.ts +0 -6
- package/dist_ts/opsserver/handlers/remoteingress.handler.js +0 -156
- package/dist_ts/opsserver/handlers/route-management.handler.d.ts +0 -14
- package/dist_ts/opsserver/handlers/route-management.handler.js +0 -117
- package/dist_ts/opsserver/handlers/security.handler.d.ts +0 -9
- package/dist_ts/opsserver/handlers/security.handler.js +0 -231
- package/dist_ts/opsserver/handlers/stats.handler.d.ts +0 -11
- package/dist_ts/opsserver/handlers/stats.handler.js +0 -399
- package/dist_ts/opsserver/helpers/guards.d.ts +0 -27
- package/dist_ts/opsserver/helpers/guards.js +0 -43
- package/dist_ts/opsserver/index.d.ts +0 -1
- package/dist_ts/opsserver/index.js +0 -2
- package/dist_ts/radius/classes.accounting.manager.d.ts +0 -218
- package/dist_ts/radius/classes.accounting.manager.js +0 -417
- package/dist_ts/radius/classes.radius.server.d.ts +0 -171
- package/dist_ts/radius/classes.radius.server.js +0 -385
- package/dist_ts/radius/classes.vlan.manager.d.ts +0 -128
- package/dist_ts/radius/classes.vlan.manager.js +0 -279
- package/dist_ts/radius/index.d.ts +0 -13
- package/dist_ts/radius/index.js +0 -14
- package/dist_ts/remoteingress/classes.remoteingress-manager.d.ts +0 -82
- package/dist_ts/remoteingress/classes.remoteingress-manager.js +0 -227
- package/dist_ts/remoteingress/classes.tunnel-manager.d.ts +0 -59
- package/dist_ts/remoteingress/classes.tunnel-manager.js +0 -165
- package/dist_ts/remoteingress/index.d.ts +0 -2
- package/dist_ts/remoteingress/index.js +0 -3
- package/dist_ts/security/classes.contentscanner.d.ts +0 -164
- package/dist_ts/security/classes.contentscanner.js +0 -642
- package/dist_ts/security/classes.ipreputationchecker.d.ts +0 -160
- package/dist_ts/security/classes.ipreputationchecker.js +0 -537
- package/dist_ts/security/classes.securitylogger.d.ts +0 -144
- package/dist_ts/security/classes.securitylogger.js +0 -233
- package/dist_ts/security/index.d.ts +0 -3
- package/dist_ts/security/index.js +0 -4
- package/dist_ts/storage/classes.storagemanager.d.ts +0 -83
- package/dist_ts/storage/classes.storagemanager.js +0 -350
- package/dist_ts/storage/index.d.ts +0 -1
- package/dist_ts/storage/index.js +0 -3
|
@@ -1,136 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Platform Service Error Codes
|
|
3
|
-
*
|
|
4
|
-
* This file contains all error codes used across the platform service.
|
|
5
|
-
*
|
|
6
|
-
* Format: PREFIX_ERROR_TYPE
|
|
7
|
-
* - PREFIX: Component/domain prefix (e.g., EMAIL, MTA, SMS)
|
|
8
|
-
* - ERROR_TYPE: Specific error type within the domain
|
|
9
|
-
*/
|
|
10
|
-
// General platform errors (PLATFORM_*)
|
|
11
|
-
export const PLATFORM_INITIALIZATION_ERROR = 'PLATFORM_INITIALIZATION_ERROR';
|
|
12
|
-
export const PLATFORM_CONFIGURATION_ERROR = 'PLATFORM_CONFIGURATION_ERROR';
|
|
13
|
-
export const PLATFORM_OPERATION_ERROR = 'PLATFORM_OPERATION_ERROR';
|
|
14
|
-
export const PLATFORM_NOT_IMPLEMENTED = 'PLATFORM_NOT_IMPLEMENTED';
|
|
15
|
-
export const PLATFORM_NOT_SUPPORTED = 'PLATFORM_NOT_SUPPORTED';
|
|
16
|
-
export const PLATFORM_SERVICE_UNAVAILABLE = 'PLATFORM_SERVICE_UNAVAILABLE';
|
|
17
|
-
// Email service errors (EMAIL_*)
|
|
18
|
-
export const EMAIL_SERVICE_ERROR = 'EMAIL_SERVICE_ERROR';
|
|
19
|
-
export const EMAIL_TEMPLATE_ERROR = 'EMAIL_TEMPLATE_ERROR';
|
|
20
|
-
export const EMAIL_VALIDATION_ERROR = 'EMAIL_VALIDATION_ERROR';
|
|
21
|
-
export const EMAIL_SEND_ERROR = 'EMAIL_SEND_ERROR';
|
|
22
|
-
export const EMAIL_RECEIVE_ERROR = 'EMAIL_RECEIVE_ERROR';
|
|
23
|
-
export const EMAIL_ATTACHMENT_ERROR = 'EMAIL_ATTACHMENT_ERROR';
|
|
24
|
-
export const EMAIL_PARSE_ERROR = 'EMAIL_PARSE_ERROR';
|
|
25
|
-
export const EMAIL_RATE_LIMIT_EXCEEDED = 'EMAIL_RATE_LIMIT_EXCEEDED';
|
|
26
|
-
// MTA-specific errors (MTA_*)
|
|
27
|
-
export const MTA_CONNECTION_ERROR = 'MTA_CONNECTION_ERROR';
|
|
28
|
-
export const MTA_AUTHENTICATION_ERROR = 'MTA_AUTHENTICATION_ERROR';
|
|
29
|
-
export const MTA_DELIVERY_ERROR = 'MTA_DELIVERY_ERROR';
|
|
30
|
-
export const MTA_CONFIGURATION_ERROR = 'MTA_CONFIGURATION_ERROR';
|
|
31
|
-
export const MTA_DNS_ERROR = 'MTA_DNS_ERROR';
|
|
32
|
-
export const MTA_TIMEOUT_ERROR = 'MTA_TIMEOUT_ERROR';
|
|
33
|
-
export const MTA_PROTOCOL_ERROR = 'MTA_PROTOCOL_ERROR';
|
|
34
|
-
// Bounce management errors (BOUNCE_*)
|
|
35
|
-
export const BOUNCE_PROCESSING_ERROR = 'BOUNCE_PROCESSING_ERROR';
|
|
36
|
-
export const BOUNCE_STORAGE_ERROR = 'BOUNCE_STORAGE_ERROR';
|
|
37
|
-
export const BOUNCE_CLASSIFICATION_ERROR = 'BOUNCE_CLASSIFICATION_ERROR';
|
|
38
|
-
// Email authentication errors (AUTH_*)
|
|
39
|
-
export const AUTH_SPF_ERROR = 'AUTH_SPF_ERROR';
|
|
40
|
-
export const AUTH_DKIM_ERROR = 'AUTH_DKIM_ERROR';
|
|
41
|
-
export const AUTH_DMARC_ERROR = 'AUTH_DMARC_ERROR';
|
|
42
|
-
export const AUTH_KEY_ERROR = 'AUTH_KEY_ERROR';
|
|
43
|
-
// Content scanning errors (SCAN_*)
|
|
44
|
-
export const SCAN_ANALYSIS_ERROR = 'SCAN_ANALYSIS_ERROR';
|
|
45
|
-
export const SCAN_MALWARE_DETECTED = 'SCAN_MALWARE_DETECTED';
|
|
46
|
-
export const SCAN_PHISHING_DETECTED = 'SCAN_PHISHING_DETECTED';
|
|
47
|
-
export const SCAN_CONTENT_REJECTED = 'SCAN_CONTENT_REJECTED';
|
|
48
|
-
// IP and reputation errors (REPUTATION_*)
|
|
49
|
-
export const REPUTATION_CHECK_ERROR = 'REPUTATION_CHECK_ERROR';
|
|
50
|
-
export const REPUTATION_DATA_ERROR = 'REPUTATION_DATA_ERROR';
|
|
51
|
-
export const REPUTATION_BLOCKLIST_ERROR = 'REPUTATION_BLOCKLIST_ERROR';
|
|
52
|
-
export const REPUTATION_UPDATE_ERROR = 'REPUTATION_UPDATE_ERROR';
|
|
53
|
-
// IP warmup errors (WARMUP_*)
|
|
54
|
-
export const WARMUP_ALLOCATION_ERROR = 'WARMUP_ALLOCATION_ERROR';
|
|
55
|
-
export const WARMUP_LIMIT_EXCEEDED = 'WARMUP_LIMIT_EXCEEDED';
|
|
56
|
-
export const WARMUP_SCHEDULE_ERROR = 'WARMUP_SCHEDULE_ERROR';
|
|
57
|
-
// Network and connectivity errors (NETWORK_*)
|
|
58
|
-
export const NETWORK_CONNECTION_ERROR = 'NETWORK_CONNECTION_ERROR';
|
|
59
|
-
export const NETWORK_TIMEOUT = 'NETWORK_TIMEOUT';
|
|
60
|
-
export const NETWORK_DNS_ERROR = 'NETWORK_DNS_ERROR';
|
|
61
|
-
export const NETWORK_TLS_ERROR = 'NETWORK_TLS_ERROR';
|
|
62
|
-
// Queue and processing errors (QUEUE_*)
|
|
63
|
-
export const QUEUE_FULL_ERROR = 'QUEUE_FULL_ERROR';
|
|
64
|
-
export const QUEUE_PROCESSING_ERROR = 'QUEUE_PROCESSING_ERROR';
|
|
65
|
-
export const QUEUE_PERSISTENCE_ERROR = 'QUEUE_PERSISTENCE_ERROR';
|
|
66
|
-
export const QUEUE_ITEM_NOT_FOUND = 'QUEUE_ITEM_NOT_FOUND';
|
|
67
|
-
// DcRouter errors (DCR_*)
|
|
68
|
-
export const DCR_ROUTING_ERROR = 'DCR_ROUTING_ERROR';
|
|
69
|
-
export const DCR_CONFIGURATION_ERROR = 'DCR_CONFIGURATION_ERROR';
|
|
70
|
-
export const DCR_PROXY_ERROR = 'DCR_PROXY_ERROR';
|
|
71
|
-
export const DCR_DOMAIN_ERROR = 'DCR_DOMAIN_ERROR';
|
|
72
|
-
// SMS service errors (SMS_*)
|
|
73
|
-
export const SMS_SERVICE_ERROR = 'SMS_SERVICE_ERROR';
|
|
74
|
-
export const SMS_SEND_ERROR = 'SMS_SEND_ERROR';
|
|
75
|
-
export const SMS_VALIDATION_ERROR = 'SMS_VALIDATION_ERROR';
|
|
76
|
-
export const SMS_RATE_LIMIT_EXCEEDED = 'SMS_RATE_LIMIT_EXCEEDED';
|
|
77
|
-
// Storage errors (STORAGE_*)
|
|
78
|
-
export const STORAGE_WRITE_ERROR = 'STORAGE_WRITE_ERROR';
|
|
79
|
-
export const STORAGE_READ_ERROR = 'STORAGE_READ_ERROR';
|
|
80
|
-
export const STORAGE_DELETE_ERROR = 'STORAGE_DELETE_ERROR';
|
|
81
|
-
export const STORAGE_QUOTA_EXCEEDED = 'STORAGE_QUOTA_EXCEEDED';
|
|
82
|
-
// Rule management errors (RULE_*)
|
|
83
|
-
export const RULE_VALIDATION_ERROR = 'RULE_VALIDATION_ERROR';
|
|
84
|
-
export const RULE_EXECUTION_ERROR = 'RULE_EXECUTION_ERROR';
|
|
85
|
-
export const RULE_NOT_FOUND = 'RULE_NOT_FOUND';
|
|
86
|
-
// Type definitions for error severity
|
|
87
|
-
export var ErrorSeverity;
|
|
88
|
-
(function (ErrorSeverity) {
|
|
89
|
-
/** Critical errors that require immediate attention */
|
|
90
|
-
ErrorSeverity["CRITICAL"] = "CRITICAL";
|
|
91
|
-
/** High-impact errors that may affect service functioning */
|
|
92
|
-
ErrorSeverity["HIGH"] = "HIGH";
|
|
93
|
-
/** Medium-impact errors that cause partial degradation */
|
|
94
|
-
ErrorSeverity["MEDIUM"] = "MEDIUM";
|
|
95
|
-
/** Low-impact errors that have minimal or local impact */
|
|
96
|
-
ErrorSeverity["LOW"] = "LOW";
|
|
97
|
-
/** Informational errors that are not problematic */
|
|
98
|
-
ErrorSeverity["INFO"] = "INFO";
|
|
99
|
-
})(ErrorSeverity || (ErrorSeverity = {}));
|
|
100
|
-
// Type definitions for error categories
|
|
101
|
-
export var ErrorCategory;
|
|
102
|
-
(function (ErrorCategory) {
|
|
103
|
-
/** Errors related to configuration */
|
|
104
|
-
ErrorCategory["CONFIGURATION"] = "CONFIGURATION";
|
|
105
|
-
/** Errors related to network connectivity */
|
|
106
|
-
ErrorCategory["CONNECTIVITY"] = "CONNECTIVITY";
|
|
107
|
-
/** Errors related to authentication/authorization */
|
|
108
|
-
ErrorCategory["AUTHENTICATION"] = "AUTHENTICATION";
|
|
109
|
-
/** Errors related to data validation */
|
|
110
|
-
ErrorCategory["VALIDATION"] = "VALIDATION";
|
|
111
|
-
/** Errors related to resource availability */
|
|
112
|
-
ErrorCategory["RESOURCE"] = "RESOURCE";
|
|
113
|
-
/** Errors related to service operations */
|
|
114
|
-
ErrorCategory["OPERATION"] = "OPERATION";
|
|
115
|
-
/** Errors related to third-party integrations */
|
|
116
|
-
ErrorCategory["INTEGRATION"] = "INTEGRATION";
|
|
117
|
-
/** Errors related to security */
|
|
118
|
-
ErrorCategory["SECURITY"] = "SECURITY";
|
|
119
|
-
/** Errors related to data storage */
|
|
120
|
-
ErrorCategory["STORAGE"] = "STORAGE";
|
|
121
|
-
/** Errors that don't fit into other categories */
|
|
122
|
-
ErrorCategory["OTHER"] = "OTHER";
|
|
123
|
-
})(ErrorCategory || (ErrorCategory = {}));
|
|
124
|
-
// Type definitions for error recoverability
|
|
125
|
-
export var ErrorRecoverability;
|
|
126
|
-
(function (ErrorRecoverability) {
|
|
127
|
-
/** Error cannot be automatically recovered from */
|
|
128
|
-
ErrorRecoverability["NON_RECOVERABLE"] = "NON_RECOVERABLE";
|
|
129
|
-
/** Error might be recoverable with retry */
|
|
130
|
-
ErrorRecoverability["MAYBE_RECOVERABLE"] = "MAYBE_RECOVERABLE";
|
|
131
|
-
/** Error is definitely recoverable with retries */
|
|
132
|
-
ErrorRecoverability["RECOVERABLE"] = "RECOVERABLE";
|
|
133
|
-
/** Error is transient and should resolve without action */
|
|
134
|
-
ErrorRecoverability["TRANSIENT"] = "TRANSIENT";
|
|
135
|
-
})(ErrorRecoverability || (ErrorRecoverability = {}));
|
|
136
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3IuY29kZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9lcnJvcnMvZXJyb3IuY29kZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7O0dBUUc7QUFFSCx1Q0FBdUM7QUFDdkMsTUFBTSxDQUFDLE1BQU0sNkJBQTZCLEdBQUcsK0JBQStCLENBQUM7QUFDN0UsTUFBTSxDQUFDLE1BQU0sNEJBQTRCLEdBQUcsOEJBQThCLENBQUM7QUFDM0UsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsMEJBQTBCLENBQUM7QUFDbkUsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsMEJBQTBCLENBQUM7QUFDbkUsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsd0JBQXdCLENBQUM7QUFDL0QsTUFBTSxDQUFDLE1BQU0sNEJBQTRCLEdBQUcsOEJBQThCLENBQUM7QUFFM0UsaUNBQWlDO0FBQ2pDLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLHFCQUFxQixDQUFDO0FBQ3pELE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLHNCQUFzQixDQUFDO0FBQzNELE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLHdCQUF3QixDQUFDO0FBQy9ELE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLGtCQUFrQixDQUFDO0FBQ25ELE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLHFCQUFxQixDQUFDO0FBQ3pELE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLHdCQUF3QixDQUFDO0FBQy9ELE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLG1CQUFtQixDQUFDO0FBQ3JELE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUFHLDJCQUEyQixDQUFDO0FBRXJFLDhCQUE4QjtBQUM5QixNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxzQkFBc0IsQ0FBQztBQUMzRCxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRywwQkFBMEIsQ0FBQztB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
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
export interface ICacheEntry<T> {
|
|
2
|
-
data: T;
|
|
3
|
-
timestamp: number;
|
|
4
|
-
}
|
|
5
|
-
export declare class MetricsCache {
|
|
6
|
-
private cache;
|
|
7
|
-
private readonly defaultTTL;
|
|
8
|
-
constructor(defaultTTL?: number);
|
|
9
|
-
/**
|
|
10
|
-
* Get cached data or compute and cache it
|
|
11
|
-
*/
|
|
12
|
-
get<T>(key: string, computeFn: () => T | Promise<T>, ttl?: number): T | Promise<T>;
|
|
13
|
-
/**
|
|
14
|
-
* Invalidate a specific cache entry
|
|
15
|
-
*/
|
|
16
|
-
invalidate(key: string): void;
|
|
17
|
-
/**
|
|
18
|
-
* Clear all cache entries
|
|
19
|
-
*/
|
|
20
|
-
clear(): void;
|
|
21
|
-
/**
|
|
22
|
-
* Get cache statistics
|
|
23
|
-
*/
|
|
24
|
-
getStats(): {
|
|
25
|
-
size: number;
|
|
26
|
-
keys: string[];
|
|
27
|
-
};
|
|
28
|
-
/**
|
|
29
|
-
* Clean up expired entries
|
|
30
|
-
*/
|
|
31
|
-
cleanup(): void;
|
|
32
|
-
}
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
export class MetricsCache {
|
|
2
|
-
cache = new Map();
|
|
3
|
-
defaultTTL;
|
|
4
|
-
constructor(defaultTTL = 500) {
|
|
5
|
-
this.defaultTTL = defaultTTL;
|
|
6
|
-
}
|
|
7
|
-
/**
|
|
8
|
-
* Get cached data or compute and cache it
|
|
9
|
-
*/
|
|
10
|
-
get(key, computeFn, ttl) {
|
|
11
|
-
const cached = this.cache.get(key);
|
|
12
|
-
const now = Date.now();
|
|
13
|
-
const actualTTL = ttl ?? this.defaultTTL;
|
|
14
|
-
if (cached && (now - cached.timestamp) < actualTTL) {
|
|
15
|
-
return cached.data;
|
|
16
|
-
}
|
|
17
|
-
const result = computeFn();
|
|
18
|
-
// Handle both sync and async compute functions
|
|
19
|
-
if (result instanceof Promise) {
|
|
20
|
-
return result.then(data => {
|
|
21
|
-
this.cache.set(key, { data, timestamp: now });
|
|
22
|
-
return data;
|
|
23
|
-
});
|
|
24
|
-
}
|
|
25
|
-
else {
|
|
26
|
-
this.cache.set(key, { data: result, timestamp: now });
|
|
27
|
-
return result;
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* Invalidate a specific cache entry
|
|
32
|
-
*/
|
|
33
|
-
invalidate(key) {
|
|
34
|
-
this.cache.delete(key);
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* Clear all cache entries
|
|
38
|
-
*/
|
|
39
|
-
clear() {
|
|
40
|
-
this.cache.clear();
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* Get cache statistics
|
|
44
|
-
*/
|
|
45
|
-
getStats() {
|
|
46
|
-
return {
|
|
47
|
-
size: this.cache.size,
|
|
48
|
-
keys: Array.from(this.cache.keys())
|
|
49
|
-
};
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* Clean up expired entries
|
|
53
|
-
*/
|
|
54
|
-
cleanup() {
|
|
55
|
-
const now = Date.now();
|
|
56
|
-
for (const [key, entry] of this.cache.entries()) {
|
|
57
|
-
if (now - entry.timestamp > this.defaultTTL) {
|
|
58
|
-
this.cache.delete(key);
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5tZXRyaWNzY2FjaGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9tb25pdG9yaW5nL2NsYXNzZXMubWV0cmljc2NhY2hlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUtBLE1BQU0sT0FBTyxZQUFZO0lBQ2YsS0FBSyxHQUFHLElBQUksR0FBRyxFQUE0QixDQUFDO0lBQ25DLFVBQVUsQ0FBUztJQUVwQyxZQUFZLGFBQXFCLEdBQUc7UUFDbEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7SUFDL0IsQ0FBQztJQUVEOztPQUVHO0lBQ0ksR0FBRyxDQUFJLEdBQVcsRUFBRSxTQUErQixFQUFFLEdBQVk7UUFDdEUsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbkMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLE1BQU0sU0FBUyxHQUFHLEdBQUcsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDO1FBRXpDLElBQUksTUFBTSxJQUFJLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxTQUFTLEVBQUUsQ0FBQztZQUNuRCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDckIsQ0FBQztRQUVELE1BQU0sTUFBTSxHQUFHLFNBQVMsRUFBRSxDQUFDO1FBRTNCLCtDQUErQztRQUMvQyxJQUFJLE1BQU0sWUFBWSxPQUFPLEVBQUUsQ0FBQztZQUM5QixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ3hCLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztnQkFDOUMsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUN0RCxPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ksVUFBVSxDQUFDLEdBQVc7UUFDM0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSztRQUNWLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVEOztPQUVHO0lBQ0ksUUFBUTtRQUNiLE9BQU87WUFDTCxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJO1lBQ3JCLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDcEMsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNJLE9BQU87UUFDWixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDdkIsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztZQUNoRCxJQUFJLEdBQUcsR0FBRyxLQUFLLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDNUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDekIsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0NBQ0YifQ==
|
|
@@ -1,178 +0,0 @@
|
|
|
1
|
-
import { DcRouter } from '../classes.dcrouter.js';
|
|
2
|
-
export declare class MetricsManager {
|
|
3
|
-
private metricsLogger;
|
|
4
|
-
private smartMetrics;
|
|
5
|
-
private dcRouter;
|
|
6
|
-
private resetInterval?;
|
|
7
|
-
private metricsCache;
|
|
8
|
-
private readonly MAX_TOP_DOMAINS;
|
|
9
|
-
private emailMetrics;
|
|
10
|
-
private dnsMetrics;
|
|
11
|
-
private emailMinuteBuckets;
|
|
12
|
-
private dnsMinuteBuckets;
|
|
13
|
-
private securityMetrics;
|
|
14
|
-
constructor(dcRouter: DcRouter);
|
|
15
|
-
start(): Promise<void>;
|
|
16
|
-
stop(): Promise<void>;
|
|
17
|
-
getServerStats(): Promise<{
|
|
18
|
-
uptime: number;
|
|
19
|
-
startTime: number;
|
|
20
|
-
memoryUsage: {
|
|
21
|
-
heapUsed: number;
|
|
22
|
-
heapTotal: number;
|
|
23
|
-
external: number;
|
|
24
|
-
rss: number;
|
|
25
|
-
maxMemoryMB: number;
|
|
26
|
-
actualUsageBytes: number;
|
|
27
|
-
actualUsagePercentage: number;
|
|
28
|
-
};
|
|
29
|
-
cpuUsage: {
|
|
30
|
-
user: number;
|
|
31
|
-
system: number;
|
|
32
|
-
};
|
|
33
|
-
activeConnections: any;
|
|
34
|
-
totalConnections: number;
|
|
35
|
-
requestsPerSecond: number;
|
|
36
|
-
throughput: {
|
|
37
|
-
bytesIn: number;
|
|
38
|
-
bytesOut: number;
|
|
39
|
-
bytesInPerSecond: number;
|
|
40
|
-
bytesOutPerSecond: number;
|
|
41
|
-
};
|
|
42
|
-
}>;
|
|
43
|
-
getEmailStats(): Promise<{
|
|
44
|
-
sentToday: number;
|
|
45
|
-
receivedToday: number;
|
|
46
|
-
failedToday: number;
|
|
47
|
-
bounceRate: number;
|
|
48
|
-
deliveryRate: number;
|
|
49
|
-
queueSize: number;
|
|
50
|
-
averageDeliveryTime: number;
|
|
51
|
-
topRecipients: {
|
|
52
|
-
email: string;
|
|
53
|
-
count: number;
|
|
54
|
-
}[];
|
|
55
|
-
recentActivity: {
|
|
56
|
-
timestamp: number;
|
|
57
|
-
type: string;
|
|
58
|
-
details: string;
|
|
59
|
-
}[];
|
|
60
|
-
}>;
|
|
61
|
-
getDnsStats(): Promise<{
|
|
62
|
-
queriesPerSecond: number;
|
|
63
|
-
totalQueries: number;
|
|
64
|
-
cacheHits: number;
|
|
65
|
-
cacheMisses: number;
|
|
66
|
-
cacheHitRate: number;
|
|
67
|
-
topDomains: {
|
|
68
|
-
domain: string;
|
|
69
|
-
count: number;
|
|
70
|
-
}[];
|
|
71
|
-
queryTypes: Record<string, number>;
|
|
72
|
-
averageResponseTime: number;
|
|
73
|
-
activeDomains: number;
|
|
74
|
-
recentQueries: {
|
|
75
|
-
timestamp: number;
|
|
76
|
-
domain: string;
|
|
77
|
-
type: string;
|
|
78
|
-
answered: boolean;
|
|
79
|
-
responseTimeMs: number;
|
|
80
|
-
}[];
|
|
81
|
-
}>;
|
|
82
|
-
/**
|
|
83
|
-
* Sync security metrics from the SecurityLogger singleton (last 24h).
|
|
84
|
-
* Called before returning security stats so counters reflect real events.
|
|
85
|
-
*/
|
|
86
|
-
private syncFromSecurityLogger;
|
|
87
|
-
getSecurityStats(): Promise<{
|
|
88
|
-
blockedIPs: number;
|
|
89
|
-
authFailures: number;
|
|
90
|
-
spamDetected: number;
|
|
91
|
-
malwareDetected: number;
|
|
92
|
-
phishingDetected: number;
|
|
93
|
-
totalThreatsBlocked: number;
|
|
94
|
-
recentIncidents: {
|
|
95
|
-
timestamp: number;
|
|
96
|
-
type: string;
|
|
97
|
-
severity: string;
|
|
98
|
-
details: string;
|
|
99
|
-
}[];
|
|
100
|
-
}>;
|
|
101
|
-
getConnectionInfo(): Promise<any[]>;
|
|
102
|
-
trackEmailSent(recipient?: string, deliveryTimeMs?: number): void;
|
|
103
|
-
trackEmailReceived(sender?: string): void;
|
|
104
|
-
trackEmailFailed(recipient?: string, reason?: string): void;
|
|
105
|
-
trackEmailBounced(recipient?: string): void;
|
|
106
|
-
updateQueueSize(size: number): void;
|
|
107
|
-
trackDnsQuery(queryType: string, domain: string, cacheHit: boolean, responseTimeMs?: number, answered?: boolean): void;
|
|
108
|
-
trackBlockedIP(ip?: string, reason?: string): void;
|
|
109
|
-
trackAuthFailure(username?: string, ip?: string): void;
|
|
110
|
-
trackSpamDetected(sender?: string): void;
|
|
111
|
-
trackMalwareDetected(source?: string): void;
|
|
112
|
-
trackPhishingDetected(source?: string): void;
|
|
113
|
-
getNetworkStats(): Promise<{
|
|
114
|
-
connectionsByIP: Map<string, number>;
|
|
115
|
-
throughputRate: {
|
|
116
|
-
bytesInPerSecond: number;
|
|
117
|
-
bytesOutPerSecond: number;
|
|
118
|
-
};
|
|
119
|
-
topIPs: Array<{
|
|
120
|
-
ip: string;
|
|
121
|
-
count: number;
|
|
122
|
-
}>;
|
|
123
|
-
totalDataTransferred: {
|
|
124
|
-
bytesIn: number;
|
|
125
|
-
bytesOut: number;
|
|
126
|
-
};
|
|
127
|
-
throughputHistory: Array<{
|
|
128
|
-
timestamp: number;
|
|
129
|
-
in: number;
|
|
130
|
-
out: number;
|
|
131
|
-
}>;
|
|
132
|
-
throughputByIP: Map<string, {
|
|
133
|
-
in: number;
|
|
134
|
-
out: number;
|
|
135
|
-
}>;
|
|
136
|
-
requestsPerSecond: number;
|
|
137
|
-
requestsTotal: number;
|
|
138
|
-
}>;
|
|
139
|
-
private static minuteKey;
|
|
140
|
-
private incrementEmailBucket;
|
|
141
|
-
private incrementDnsBucket;
|
|
142
|
-
/**
|
|
143
|
-
* Increment the per-second query counter in the ring buffer.
|
|
144
|
-
* Zeros any stale slots between the last write and the current second.
|
|
145
|
-
*/
|
|
146
|
-
private incrementQueryRing;
|
|
147
|
-
/**
|
|
148
|
-
* Sum query counts from the ring buffer for the last N seconds.
|
|
149
|
-
*/
|
|
150
|
-
private getQueryRingSum;
|
|
151
|
-
private pruneOldBuckets;
|
|
152
|
-
/**
|
|
153
|
-
* Get email time-series data for the last N hours, aggregated per minute.
|
|
154
|
-
*/
|
|
155
|
-
getEmailTimeSeries(hours?: number): {
|
|
156
|
-
sent: Array<{
|
|
157
|
-
timestamp: number;
|
|
158
|
-
value: number;
|
|
159
|
-
}>;
|
|
160
|
-
received: Array<{
|
|
161
|
-
timestamp: number;
|
|
162
|
-
value: number;
|
|
163
|
-
}>;
|
|
164
|
-
failed: Array<{
|
|
165
|
-
timestamp: number;
|
|
166
|
-
value: number;
|
|
167
|
-
}>;
|
|
168
|
-
};
|
|
169
|
-
/**
|
|
170
|
-
* Get DNS time-series data for the last N hours, aggregated per minute.
|
|
171
|
-
*/
|
|
172
|
-
getDnsTimeSeries(hours?: number): {
|
|
173
|
-
queries: Array<{
|
|
174
|
-
timestamp: number;
|
|
175
|
-
value: number;
|
|
176
|
-
}>;
|
|
177
|
-
};
|
|
178
|
-
}
|