@serve.zone/dcrouter 17.1.4 → 17.1.6
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/deno.json +1 -1
- package/dist_serve/bundle.js +559 -559
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/classes.dcrouter.js +9 -3
- package/dist_ts/db/documents/classes.ip-intelligence.doc.d.ts +10 -0
- package/dist_ts/db/documents/classes.ip-intelligence.doc.js +63 -1
- package/dist_ts/dns/classes.dns-server-runtime.d.ts +1 -0
- package/dist_ts/dns/classes.dns-server-runtime.js +8 -4
- package/dist_ts/dns/manager.dns.js +23 -6
- package/dist_ts/email/classes.email-domain.manager.js +27 -15
- package/dist_ts/email/classes.mail-dns-sync.d.ts +19 -2
- package/dist_ts/email/classes.mail-dns-sync.js +158 -32
- package/dist_ts/email/index.d.ts +1 -0
- package/dist_ts/email/index.js +2 -1
- package/dist_ts/email/mail-dns-status.d.ts +5 -0
- package/dist_ts/email/mail-dns-status.js +31 -0
- package/dist_ts/monitoring/classes.metricscache.d.ts +2 -0
- package/dist_ts/monitoring/classes.metricscache.js +28 -6
- package/dist_ts/monitoring/classes.metricsmanager.d.ts +10 -0
- package/dist_ts/monitoring/classes.metricsmanager.js +99 -31
- package/dist_ts/opsserver/handlers/security.handler.js +24 -6
- package/dist_ts/opsserver/handlers/stats.handler.js +2 -3
- package/dist_ts/remoteingress/classes.hub-lifecycle.js +2 -2
- package/dist_ts/security/classes.security-policy-manager.d.ts +17 -0
- package/dist_ts/security/classes.security-policy-manager.js +171 -26
- package/dist_ts_interfaces/requests/stats.d.ts +7 -0
- package/dist_ts_migrations/index.js +395 -9
- package/dist_ts_web/00_commitinfo_data.js +1 -1
- package/dist_ts_web/appstate/network.js +11 -2
- package/dist_ts_web/appstate/ui.js +1 -8
- package/package.json +3 -3
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/classes.dcrouter.ts +11 -2
- package/ts/db/documents/classes.ip-intelligence.doc.ts +75 -0
- package/ts/dns/classes.dns-server-runtime.ts +9 -3
- package/ts/dns/manager.dns.ts +22 -5
- package/ts/email/classes.email-domain.manager.ts +23 -16
- package/ts/email/classes.mail-dns-sync.ts +172 -38
- package/ts/email/index.ts +1 -0
- package/ts/email/mail-dns-status.ts +35 -0
- package/ts/monitoring/classes.metricscache.ts +36 -8
- package/ts/monitoring/classes.metricsmanager.ts +113 -32
- package/ts/opsserver/handlers/security.handler.ts +35 -6
- package/ts/opsserver/handlers/stats.handler.ts +1 -2
- package/ts/remoteingress/classes.hub-lifecycle.ts +3 -1
- package/ts/security/classes.security-policy-manager.ts +193 -26
- package/ts_web/00_commitinfo_data.ts +1 -1
- package/ts_web/appstate/network.ts +12 -1
- package/ts_web/appstate/ui.ts +0 -9
package/dist_ts/email/index.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ export * from './classes.email-domain.manager.js';
|
|
|
3
3
|
export * from './classes.email-route-builder.js';
|
|
4
4
|
export * from './classes.mail-dns-sync.js';
|
|
5
5
|
export * from './mail-dns-txt-policy.js';
|
|
6
|
+
export * from './mail-dns-status.js';
|
|
6
7
|
export * from './reconcile-mail-dns-singleton.js';
|
|
7
8
|
export * from './classes.mail-egress-coordinator.js';
|
|
8
9
|
export * from './classes.mail-edge-eligibility.js';
|
package/dist_ts/email/index.js
CHANGED
|
@@ -3,6 +3,7 @@ export * from './classes.email-domain.manager.js';
|
|
|
3
3
|
export * from './classes.email-route-builder.js';
|
|
4
4
|
export * from './classes.mail-dns-sync.js';
|
|
5
5
|
export * from './mail-dns-txt-policy.js';
|
|
6
|
+
export * from './mail-dns-status.js';
|
|
6
7
|
export * from './reconcile-mail-dns-singleton.js';
|
|
7
8
|
export * from './classes.mail-egress-coordinator.js';
|
|
8
9
|
export * from './classes.mail-edge-eligibility.js';
|
|
@@ -12,4 +13,4 @@ export * from './classes.smartmta-storage-manager.js';
|
|
|
12
13
|
export * from './smartmta-storage-policy.js';
|
|
13
14
|
export * from './classes.workapp-mail-manager.js';
|
|
14
15
|
export * from './email-dns-records.js';
|
|
15
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9lbWFpbC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG1DQUFtQyxDQUFDO0FBQ2xELGNBQWMsbUNBQW1DLENBQUM7QUFDbEQsY0FBYyxrQ0FBa0MsQ0FBQztBQUNqRCxjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLG1DQUFtQyxDQUFDO0FBQ2xELGNBQWMsc0NBQXNDLENBQUM7QUFDckQsY0FBYyxvQ0FBb0MsQ0FBQztBQUNuRCxjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMsNENBQTRDLENBQUM7QUFDM0QsY0FBYyx1Q0FBdUMsQ0FBQztBQUN0RCxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsbUNBQW1DLENBQUM7QUFDbEQsY0FBYyx3QkFBd0IsQ0FBQyJ9
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { IEmailDnsRecordIntent, TDnsRecordStatus } from '../../dist_ts_interfaces/data/email-domain.js';
|
|
2
|
+
/** Project one durable reconciliation intent into the operator-facing DNS status. */
|
|
3
|
+
export declare function projectMailDnsIntentStatus(intent: IEmailDnsRecordIntent | undefined): TDnsRecordStatus;
|
|
4
|
+
/** Aggregate matching intents with deterministic operator-facing precedence. */
|
|
5
|
+
export declare function projectMailDnsIntentAggregateStatus(intents: IEmailDnsRecordIntent[], predicate: (intent: IEmailDnsRecordIntent) => boolean): TDnsRecordStatus;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/** Project one durable reconciliation intent into the operator-facing DNS status. */
|
|
2
|
+
export function projectMailDnsIntentStatus(intent) {
|
|
3
|
+
if (!intent)
|
|
4
|
+
return 'unchecked';
|
|
5
|
+
if (intent.verificationOutcome === 'duplicate'
|
|
6
|
+
|| intent.verificationOutcome === 'conflict'
|
|
7
|
+
|| intent.verificationOutcome === 'invalid'
|
|
8
|
+
|| intent.status === 'conflict'
|
|
9
|
+
|| intent.status === 'failed')
|
|
10
|
+
return 'invalid';
|
|
11
|
+
if (intent.verificationOutcome === 'missing')
|
|
12
|
+
return 'missing';
|
|
13
|
+
if (intent.verificationOutcome === 'valid' && intent.status === 'valid')
|
|
14
|
+
return 'valid';
|
|
15
|
+
return 'unchecked';
|
|
16
|
+
}
|
|
17
|
+
/** Aggregate matching intents with deterministic operator-facing precedence. */
|
|
18
|
+
export function projectMailDnsIntentAggregateStatus(intents, predicate) {
|
|
19
|
+
const selected = intents.filter(predicate);
|
|
20
|
+
if (selected.length === 0)
|
|
21
|
+
return 'unchecked';
|
|
22
|
+
const statuses = selected.map(projectMailDnsIntentStatus);
|
|
23
|
+
if (statuses.includes('invalid'))
|
|
24
|
+
return 'invalid';
|
|
25
|
+
if (statuses.includes('missing'))
|
|
26
|
+
return 'missing';
|
|
27
|
+
if (statuses.includes('unchecked'))
|
|
28
|
+
return 'unchecked';
|
|
29
|
+
return 'valid';
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbC1kbnMtc3RhdHVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdHMvZW1haWwvbWFpbC1kbnMtc3RhdHVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUtBLHFGQUFxRjtBQUNyRixNQUFNLFVBQVUsMEJBQTBCLENBQ3hDLE1BQXlDO0lBRXpDLElBQUksQ0FBQyxNQUFNO1FBQUUsT0FBTyxXQUFXLENBQUM7SUFDaEMsSUFDRSxNQUFNLENBQUMsbUJBQW1CLEtBQUssV0FBVztXQUN2QyxNQUFNLENBQUMsbUJBQW1CLEtBQUssVUFBVTtXQUN6QyxNQUFNLENBQUMsbUJBQW1CLEtBQUssU0FBUztXQUN4QyxNQUFNLENBQUMsTUFBTSxLQUFLLFVBQVU7V0FDNUIsTUFBTSxDQUFDLE1BQU0sS0FBSyxRQUFRO1FBQzdCLE9BQU8sU0FBUyxDQUFDO0lBQ25CLElBQUksTUFBTSxDQUFDLG1CQUFtQixLQUFLLFNBQVM7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUMvRCxJQUFJLE1BQU0sQ0FBQyxtQkFBbUIsS0FBSyxPQUFPLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxPQUFPO1FBQUUsT0FBTyxPQUFPLENBQUM7SUFDeEYsT0FBTyxXQUFXLENBQUM7QUFDckIsQ0FBQztBQUVELGdGQUFnRjtBQUNoRixNQUFNLFVBQVUsbUNBQW1DLENBQ2pELE9BQWdDLEVBQ2hDLFNBQXFEO0lBRXJELE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDM0MsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUM7UUFBRSxPQUFPLFdBQVcsQ0FBQztJQUM5QyxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLDBCQUEwQixDQUFDLENBQUM7SUFDMUQsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQztRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQ25ELElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUM7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUNuRCxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDO1FBQUUsT0FBTyxXQUFXLENBQUM7SUFDdkQsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQyJ9
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export class MetricsCache {
|
|
2
2
|
cache = new Map();
|
|
3
|
+
inFlight = new Map();
|
|
3
4
|
defaultTTL;
|
|
4
5
|
constructor(defaultTTL = 500) {
|
|
5
6
|
this.defaultTTL = defaultTTL;
|
|
@@ -11,19 +12,38 @@ export class MetricsCache {
|
|
|
11
12
|
const cached = this.cache.get(key);
|
|
12
13
|
const now = Date.now();
|
|
13
14
|
const actualTTL = ttl ?? this.defaultTTL;
|
|
14
|
-
if (cached && (now - cached.timestamp) <
|
|
15
|
+
if (cached && (now - cached.timestamp) < cached.ttl) {
|
|
15
16
|
return cached.data;
|
|
16
17
|
}
|
|
18
|
+
if (cached) {
|
|
19
|
+
this.cache.delete(key);
|
|
20
|
+
}
|
|
21
|
+
const pending = this.inFlight.get(key);
|
|
22
|
+
if (pending) {
|
|
23
|
+
return pending;
|
|
24
|
+
}
|
|
17
25
|
const result = computeFn();
|
|
18
26
|
// Handle both sync and async compute functions
|
|
19
27
|
if (result instanceof Promise) {
|
|
20
|
-
|
|
21
|
-
|
|
28
|
+
let inFlightPromise;
|
|
29
|
+
inFlightPromise = result.then((data) => {
|
|
30
|
+
if (this.inFlight.get(key) === inFlightPromise) {
|
|
31
|
+
this.inFlight.delete(key);
|
|
32
|
+
this.cache.set(key, { data, timestamp: Date.now(), ttl: actualTTL });
|
|
33
|
+
}
|
|
22
34
|
return data;
|
|
35
|
+
}, (error) => {
|
|
36
|
+
if (this.inFlight.get(key) === inFlightPromise) {
|
|
37
|
+
this.inFlight.delete(key);
|
|
38
|
+
this.cache.delete(key);
|
|
39
|
+
}
|
|
40
|
+
throw error;
|
|
23
41
|
});
|
|
42
|
+
this.inFlight.set(key, inFlightPromise);
|
|
43
|
+
return inFlightPromise;
|
|
24
44
|
}
|
|
25
45
|
else {
|
|
26
|
-
this.cache.set(key, { data: result, timestamp: now });
|
|
46
|
+
this.cache.set(key, { data: result, timestamp: now, ttl: actualTTL });
|
|
27
47
|
return result;
|
|
28
48
|
}
|
|
29
49
|
}
|
|
@@ -32,12 +52,14 @@ export class MetricsCache {
|
|
|
32
52
|
*/
|
|
33
53
|
invalidate(key) {
|
|
34
54
|
this.cache.delete(key);
|
|
55
|
+
this.inFlight.delete(key);
|
|
35
56
|
}
|
|
36
57
|
/**
|
|
37
58
|
* Clear all cache entries
|
|
38
59
|
*/
|
|
39
60
|
clear() {
|
|
40
61
|
this.cache.clear();
|
|
62
|
+
this.inFlight.clear();
|
|
41
63
|
}
|
|
42
64
|
/**
|
|
43
65
|
* Get cache statistics
|
|
@@ -54,10 +76,10 @@ export class MetricsCache {
|
|
|
54
76
|
cleanup() {
|
|
55
77
|
const now = Date.now();
|
|
56
78
|
for (const [key, entry] of this.cache.entries()) {
|
|
57
|
-
if (now - entry.timestamp >
|
|
79
|
+
if (now - entry.timestamp > entry.ttl) {
|
|
58
80
|
this.cache.delete(key);
|
|
59
81
|
}
|
|
60
82
|
}
|
|
61
83
|
}
|
|
62
84
|
}
|
|
63
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
85
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5tZXRyaWNzY2FjaGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9tb25pdG9yaW5nL2NsYXNzZXMubWV0cmljc2NhY2hlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU1BLE1BQU0sT0FBTyxZQUFZO0lBQ2YsS0FBSyxHQUFHLElBQUksR0FBRyxFQUE0QixDQUFDO0lBQzVDLFFBQVEsR0FBRyxJQUFJLEdBQUcsRUFBd0IsQ0FBQztJQUNsQyxVQUFVLENBQVM7SUFFcEMsWUFBWSxhQUFxQixHQUFHO1FBQ2xDLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO0lBQy9CLENBQUM7SUFFRDs7T0FFRztJQUNJLEdBQUcsQ0FBSSxHQUFXLEVBQUUsU0FBK0IsRUFBRSxHQUFZO1FBQ3RFLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ25DLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN2QixNQUFNLFNBQVMsR0FBRyxHQUFHLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUV6QyxJQUFJLE1BQU0sSUFBSSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ3BELE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQztRQUNyQixDQUFDO1FBRUQsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNYLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3pCLENBQUM7UUFFRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQTJCLENBQUM7UUFDakUsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNaLE9BQU8sT0FBTyxDQUFDO1FBQ2pCLENBQUM7UUFFRCxNQUFNLE1BQU0sR0FBRyxTQUFT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
|
|
@@ -6,6 +6,7 @@ export declare class MetricsManager {
|
|
|
6
6
|
private smartMetrics;
|
|
7
7
|
private dcRouter;
|
|
8
8
|
private resetInterval?;
|
|
9
|
+
private observedIpSamplerInterval?;
|
|
9
10
|
private metricsCache;
|
|
10
11
|
private readonly MAX_TOP_DOMAINS;
|
|
11
12
|
private emailMetrics;
|
|
@@ -101,6 +102,7 @@ export declare class MetricsManager {
|
|
|
101
102
|
}[];
|
|
102
103
|
}>;
|
|
103
104
|
getActiveConnectionSnapshots(options?: plugins.smartproxy.IActiveConnectionSnapshotOptions): Promise<plugins.smartproxy.IActiveConnectionSnapshot[]>;
|
|
105
|
+
getActiveConnectionSnapshotPage(options?: plugins.smartproxy.IActiveConnectionSnapshotOptions): Promise<plugins.smartproxy.IActiveConnectionSnapshotPage>;
|
|
104
106
|
getConnectionInfo(): Promise<{
|
|
105
107
|
type: string;
|
|
106
108
|
count: number;
|
|
@@ -118,8 +120,15 @@ export declare class MetricsManager {
|
|
|
118
120
|
trackSpamDetected(sender?: string): void;
|
|
119
121
|
trackMalwareDetected(source?: string): void;
|
|
120
122
|
trackPhishingDetected(source?: string): void;
|
|
123
|
+
/**
|
|
124
|
+
* Feed IP intelligence from maintained data-plane counters, independently of
|
|
125
|
+
* dashboard reads. Startup order is intentionally tolerated: until both
|
|
126
|
+
* SmartProxy and SecurityPolicyManager exist, the sample is a no-op.
|
|
127
|
+
*/
|
|
128
|
+
private sampleObservedIps;
|
|
121
129
|
getNetworkStats(): Promise<{
|
|
122
130
|
connectionsByIP: Map<string, number>;
|
|
131
|
+
activeConnections: number;
|
|
123
132
|
throughputRate: {
|
|
124
133
|
bytesInPerSecond: number;
|
|
125
134
|
bytesOutPerSecond: number;
|
|
@@ -165,6 +174,7 @@ export declare class MetricsManager {
|
|
|
165
174
|
backendProtocols: null;
|
|
166
175
|
} | {
|
|
167
176
|
connectionsByIP: Map<string, number>;
|
|
177
|
+
activeConnections: number;
|
|
168
178
|
throughputRate: {
|
|
169
179
|
bytesInPerSecond: number;
|
|
170
180
|
bytesOutPerSecond: number;
|