@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.
- package/dist_serve/bundle.js +1 -1
- package/package.json +1 -1
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts_web/00_commitinfo_data.ts +1 -1
- package/dist_ts/00_commitinfo_data.d.ts +0 -8
- package/dist_ts/00_commitinfo_data.js +0 -9
- 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.email.d.ts +0 -125
- package/dist_ts/cache/documents/classes.cached.email.js +0 -337
- 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/classes.cert-provision-scheduler.d.ts +0 -53
- package/dist_ts/classes.cert-provision-scheduler.js +0 -110
- package/dist_ts/classes.dcrouter.d.ts +0 -337
- package/dist_ts/classes.dcrouter.js +0 -1405
- package/dist_ts/classes.storage-cert-manager.d.ts +0 -18
- package/dist_ts/classes.storage-cert-manager.js +0 -43
- 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-handler.d.ts +0 -98
- package/dist_ts/errors/error-handler.js +0 -282
- package/dist_ts/errors/error.codes.d.ts +0 -115
- package/dist_ts/errors/error.codes.js +0 -136
- package/dist_ts/errors/index.d.ts +0 -54
- package/dist_ts/errors/index.js +0 -136
- package/dist_ts/errors/reputation.errors.d.ts +0 -183
- package/dist_ts/errors/reputation.errors.js +0 -292
- package/dist_ts/index.d.ts +0 -7
- package/dist_ts/index.js +0 -11
- package/dist_ts/logger.d.ts +0 -21
- package/dist_ts/logger.js +0 -81
- 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/paths.d.ts +0 -26
- package/dist_ts/paths.js +0 -45
- package/dist_ts/plugins.d.ts +0 -79
- package/dist_ts/plugins.js +0 -113
- 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/sms/classes.smsservice.d.ts +0 -15
- package/dist_ts/sms/classes.smsservice.js +0 -72
- package/dist_ts/sms/config/sms.config.d.ts +0 -93
- package/dist_ts/sms/config/sms.config.js +0 -2
- package/dist_ts/sms/config/sms.schema.d.ts +0 -5
- package/dist_ts/sms/config/sms.schema.js +0 -121
- package/dist_ts/sms/index.d.ts +0 -1
- package/dist_ts/sms/index.js +0 -2
- 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,59 +0,0 @@
|
|
|
1
|
-
import type { IRemoteIngressStatus } from '../../dist_ts_interfaces/data/remoteingress.js';
|
|
2
|
-
import type { RemoteIngressManager } from './classes.remoteingress-manager.js';
|
|
3
|
-
export interface ITunnelManagerConfig {
|
|
4
|
-
tunnelPort?: number;
|
|
5
|
-
targetHost?: string;
|
|
6
|
-
tls?: {
|
|
7
|
-
certPem?: string;
|
|
8
|
-
keyPem?: string;
|
|
9
|
-
};
|
|
10
|
-
}
|
|
11
|
-
/**
|
|
12
|
-
* Manages the RemoteIngressHub instance and tracks connected edge statuses.
|
|
13
|
-
*/
|
|
14
|
-
export declare class TunnelManager {
|
|
15
|
-
private hub;
|
|
16
|
-
private manager;
|
|
17
|
-
private config;
|
|
18
|
-
private edgeStatuses;
|
|
19
|
-
private reconcileInterval;
|
|
20
|
-
constructor(manager: RemoteIngressManager, config?: ITunnelManagerConfig);
|
|
21
|
-
/**
|
|
22
|
-
* Start the tunnel hub and load allowed edges.
|
|
23
|
-
*/
|
|
24
|
-
start(): Promise<void>;
|
|
25
|
-
/**
|
|
26
|
-
* Stop the tunnel hub.
|
|
27
|
-
*/
|
|
28
|
-
stop(): Promise<void>;
|
|
29
|
-
/**
|
|
30
|
-
* Reconcile TS-side edge statuses with the authoritative Rust hub status.
|
|
31
|
-
* Overwrites event-derived activeTunnels with the real activeStreams count.
|
|
32
|
-
*/
|
|
33
|
-
private reconcile;
|
|
34
|
-
/**
|
|
35
|
-
* Sync allowed edges from the manager to the hub.
|
|
36
|
-
* Call this after creating/deleting/updating edges.
|
|
37
|
-
*/
|
|
38
|
-
syncAllowedEdges(): Promise<void>;
|
|
39
|
-
/**
|
|
40
|
-
* Get runtime statuses for all known edges.
|
|
41
|
-
*/
|
|
42
|
-
getEdgeStatuses(): IRemoteIngressStatus[];
|
|
43
|
-
/**
|
|
44
|
-
* Get status for a specific edge.
|
|
45
|
-
*/
|
|
46
|
-
getEdgeStatus(edgeId: string): IRemoteIngressStatus | undefined;
|
|
47
|
-
/**
|
|
48
|
-
* Get the count of connected edges.
|
|
49
|
-
*/
|
|
50
|
-
getConnectedCount(): number;
|
|
51
|
-
/**
|
|
52
|
-
* Get the public IPs of all connected edges.
|
|
53
|
-
*/
|
|
54
|
-
getConnectedEdgeIps(): string[];
|
|
55
|
-
/**
|
|
56
|
-
* Get the total number of active tunnels across all edges.
|
|
57
|
-
*/
|
|
58
|
-
getTotalActiveTunnels(): number;
|
|
59
|
-
}
|
|
@@ -1,165 +0,0 @@
|
|
|
1
|
-
import * as plugins from '../plugins.js';
|
|
2
|
-
/**
|
|
3
|
-
* Manages the RemoteIngressHub instance and tracks connected edge statuses.
|
|
4
|
-
*/
|
|
5
|
-
export class TunnelManager {
|
|
6
|
-
hub;
|
|
7
|
-
manager;
|
|
8
|
-
config;
|
|
9
|
-
edgeStatuses = new Map();
|
|
10
|
-
reconcileInterval = null;
|
|
11
|
-
constructor(manager, config = {}) {
|
|
12
|
-
this.manager = manager;
|
|
13
|
-
this.config = config;
|
|
14
|
-
this.hub = new plugins.remoteingress.RemoteIngressHub();
|
|
15
|
-
// Listen for edge connect/disconnect events
|
|
16
|
-
this.hub.on('edgeConnected', (data) => {
|
|
17
|
-
this.edgeStatuses.set(data.edgeId, {
|
|
18
|
-
edgeId: data.edgeId,
|
|
19
|
-
connected: true,
|
|
20
|
-
publicIp: data.peerAddr || null,
|
|
21
|
-
activeTunnels: 0,
|
|
22
|
-
lastHeartbeat: Date.now(),
|
|
23
|
-
connectedAt: Date.now(),
|
|
24
|
-
});
|
|
25
|
-
});
|
|
26
|
-
this.hub.on('edgeDisconnected', (data) => {
|
|
27
|
-
this.edgeStatuses.delete(data.edgeId);
|
|
28
|
-
});
|
|
29
|
-
this.hub.on('streamOpened', (data) => {
|
|
30
|
-
const existing = this.edgeStatuses.get(data.edgeId);
|
|
31
|
-
if (existing) {
|
|
32
|
-
existing.activeTunnels++;
|
|
33
|
-
existing.lastHeartbeat = Date.now();
|
|
34
|
-
}
|
|
35
|
-
});
|
|
36
|
-
this.hub.on('streamClosed', (data) => {
|
|
37
|
-
const existing = this.edgeStatuses.get(data.edgeId);
|
|
38
|
-
if (existing && existing.activeTunnels > 0) {
|
|
39
|
-
existing.activeTunnels--;
|
|
40
|
-
}
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* Start the tunnel hub and load allowed edges.
|
|
45
|
-
*/
|
|
46
|
-
async start() {
|
|
47
|
-
await this.hub.start({
|
|
48
|
-
tunnelPort: this.config.tunnelPort ?? 8443,
|
|
49
|
-
targetHost: this.config.targetHost ?? '127.0.0.1',
|
|
50
|
-
tls: this.config.tls,
|
|
51
|
-
});
|
|
52
|
-
// Send allowed edges to the hub
|
|
53
|
-
await this.syncAllowedEdges();
|
|
54
|
-
// Periodically reconcile with authoritative Rust hub status
|
|
55
|
-
this.reconcileInterval = setInterval(() => {
|
|
56
|
-
this.reconcile().catch(() => { });
|
|
57
|
-
}, 15_000);
|
|
58
|
-
}
|
|
59
|
-
/**
|
|
60
|
-
* Stop the tunnel hub.
|
|
61
|
-
*/
|
|
62
|
-
async stop() {
|
|
63
|
-
if (this.reconcileInterval) {
|
|
64
|
-
clearInterval(this.reconcileInterval);
|
|
65
|
-
this.reconcileInterval = null;
|
|
66
|
-
}
|
|
67
|
-
// Remove event listeners before stopping to prevent leaks
|
|
68
|
-
this.hub.removeAllListeners();
|
|
69
|
-
await this.hub.stop();
|
|
70
|
-
this.edgeStatuses.clear();
|
|
71
|
-
}
|
|
72
|
-
/**
|
|
73
|
-
* Reconcile TS-side edge statuses with the authoritative Rust hub status.
|
|
74
|
-
* Overwrites event-derived activeTunnels with the real activeStreams count.
|
|
75
|
-
*/
|
|
76
|
-
async reconcile() {
|
|
77
|
-
const hubStatus = await this.hub.getStatus();
|
|
78
|
-
if (!hubStatus || !hubStatus.connectedEdges)
|
|
79
|
-
return;
|
|
80
|
-
const rustEdgeIds = new Set();
|
|
81
|
-
for (const rustEdge of hubStatus.connectedEdges) {
|
|
82
|
-
rustEdgeIds.add(rustEdge.edgeId);
|
|
83
|
-
const existing = this.edgeStatuses.get(rustEdge.edgeId);
|
|
84
|
-
if (existing) {
|
|
85
|
-
existing.activeTunnels = rustEdge.activeStreams;
|
|
86
|
-
existing.lastHeartbeat = Date.now();
|
|
87
|
-
// Update peer address if available from Rust hub
|
|
88
|
-
if (rustEdge.peerAddr) {
|
|
89
|
-
existing.publicIp = rustEdge.peerAddr;
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
else {
|
|
93
|
-
// Missed edgeConnected event — add entry
|
|
94
|
-
this.edgeStatuses.set(rustEdge.edgeId, {
|
|
95
|
-
edgeId: rustEdge.edgeId,
|
|
96
|
-
connected: true,
|
|
97
|
-
publicIp: rustEdge.peerAddr || null,
|
|
98
|
-
activeTunnels: rustEdge.activeStreams,
|
|
99
|
-
lastHeartbeat: Date.now(),
|
|
100
|
-
connectedAt: rustEdge.connectedAt * 1000,
|
|
101
|
-
});
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
// Remove entries for edges no longer connected in Rust (missed edgeDisconnected)
|
|
105
|
-
for (const edgeId of this.edgeStatuses.keys()) {
|
|
106
|
-
if (!rustEdgeIds.has(edgeId)) {
|
|
107
|
-
this.edgeStatuses.delete(edgeId);
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
/**
|
|
112
|
-
* Sync allowed edges from the manager to the hub.
|
|
113
|
-
* Call this after creating/deleting/updating edges.
|
|
114
|
-
*/
|
|
115
|
-
async syncAllowedEdges() {
|
|
116
|
-
const edges = this.manager.getAllowedEdges();
|
|
117
|
-
await this.hub.updateAllowedEdges(edges);
|
|
118
|
-
}
|
|
119
|
-
/**
|
|
120
|
-
* Get runtime statuses for all known edges.
|
|
121
|
-
*/
|
|
122
|
-
getEdgeStatuses() {
|
|
123
|
-
return Array.from(this.edgeStatuses.values());
|
|
124
|
-
}
|
|
125
|
-
/**
|
|
126
|
-
* Get status for a specific edge.
|
|
127
|
-
*/
|
|
128
|
-
getEdgeStatus(edgeId) {
|
|
129
|
-
return this.edgeStatuses.get(edgeId);
|
|
130
|
-
}
|
|
131
|
-
/**
|
|
132
|
-
* Get the count of connected edges.
|
|
133
|
-
*/
|
|
134
|
-
getConnectedCount() {
|
|
135
|
-
let count = 0;
|
|
136
|
-
for (const status of this.edgeStatuses.values()) {
|
|
137
|
-
if (status.connected)
|
|
138
|
-
count++;
|
|
139
|
-
}
|
|
140
|
-
return count;
|
|
141
|
-
}
|
|
142
|
-
/**
|
|
143
|
-
* Get the public IPs of all connected edges.
|
|
144
|
-
*/
|
|
145
|
-
getConnectedEdgeIps() {
|
|
146
|
-
const ips = [];
|
|
147
|
-
for (const status of this.edgeStatuses.values()) {
|
|
148
|
-
if (status.connected && status.publicIp) {
|
|
149
|
-
ips.push(status.publicIp);
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
return ips;
|
|
153
|
-
}
|
|
154
|
-
/**
|
|
155
|
-
* Get the total number of active tunnels across all edges.
|
|
156
|
-
*/
|
|
157
|
-
getTotalActiveTunnels() {
|
|
158
|
-
let total = 0;
|
|
159
|
-
for (const status of this.edgeStatuses.values()) {
|
|
160
|
-
total += status.activeTunnels;
|
|
161
|
-
}
|
|
162
|
-
return total;
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy50dW5uZWwtbWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3RzL3JlbW90ZWluZ3Jlc3MvY2xhc3Nlcy50dW5uZWwtbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGVBQWUsQ0FBQztBQWF6Qzs7R0FFRztBQUNILE1BQU0sT0FBTyxhQUFhO0lBQ2hCLEdBQUcsQ0FBOEQ7SUFDakUsT0FBTyxDQUF1QjtJQUM5QixNQUFNLENBQXVCO0lBQzdCLFlBQVksR0FBc0MsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUM1RCxpQkFBaUIsR0FBMEMsSUFBSSxDQUFDO0lBRXhFLFlBQVksT0FBNkIsRUFBRSxTQUErQixFQUFFO1FBQzFFLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxPQUFPLENBQUMsYUFBYSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFFeEQsNENBQTRDO1FBQzVDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLGVBQWUsRUFBRSxDQUFDLElBQTBDLEVBQUUsRUFBRTtZQUMxRSxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO2dCQUNqQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07Z0JBQ25CLFNBQVMsRUFBRSxJQUFJO2dCQUNmLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUk7Z0JBQy9CLGFBQWEsRUFBRSxDQUFDO2dCQUNoQixhQUFhLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRTtnQkFDekIsV0FBVyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUU7YUFDeEIsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLElBQXdCLEVBQUUsRUFBRTtZQUMzRCxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDeEMsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxJQUEwQyxFQUFFLEVBQUU7WUFDekUsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3BELElBQUksUUFBUSxFQUFFLENBQUM7Z0JBQ2IsUUFBUSxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUN6QixRQUFRLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUN0QyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxJQUEwQyxFQUFFLEVBQUU7WUFDekUsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3BELElBQUksUUFBUSxJQUFJLFFBQVEsQ0FBQyxhQUFhLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQzNDLFFBQVEsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUMzQixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLLENBQUMsS0FBSztRQUNoQixNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDO1lBQ25CLFVBQVUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsSUFBSSxJQUFJO1lBQzFDLFVBQVUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsSUFBSSxXQUFXO1lBQ2pELEdBQUcsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUc7U0FDckIsQ0FBQyxDQUFDO1FBRUgsZ0NBQWdDO1FBQ2hDLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFFOUIsNERBQTREO1FBQzVELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxXQUFXLENBQUMsR0FBRyxFQUFFO1lBQ3hDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDLENBQUM7UUFDbkMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2IsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSyxDQUFDLElBQUk7UUFDZixJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQzNCLGFBQWEsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUN0QyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO1FBQ2hDLENBQUM7UUFDRCwwREFBMEQ7UUFDMUQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzlCLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRDs7O09BR0c7SUFDSyxLQUFLLENBQUMsU0FBUztRQUNyQixNQUFNLFNBQVMsR0FBRyxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDN0MsSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjO1lBQUUsT0FBTztRQUVwRCxNQUFNLFdBQVcsR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO1FBRXRDLEtBQUssTUFBTSxRQUFRLElBQUksU0FBUyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ2hELFdBQVcsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2pDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN4RCxJQUFJLFFBQVEsRUFBRSxDQUFDO2dCQUNiLFFBQVEsQ0FBQyxhQUFhLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQztnQkFDaEQsUUFBUSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQ3BDLGlEQUFpRDtnQkFDakQsSUFBSSxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQ3RCLFFBQVEsQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQztnQkFDeEMsQ0FBQztZQUNILENBQUM7aUJBQU0sQ0FBQztnQkFDTix5Q0FBeUM7Z0JBQ3pDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUU7b0JBQ3JDLE1BQU0sRUFBRSxRQUFRLENBQUMsTUFBTTtvQkFDdkIsU0FBUyxFQUFFLElBQUk7b0JBQ2YsUUFBUSxFQUFFLFFBQVEsQ0FBQyxRQUFRLElBQUksSUFBSTtvQkFDbkMsYUFBYSxFQUFFLFFBQVEsQ0FBQyxhQUFhO29CQUNyQyxhQUFhLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRTtvQkFDekIsV0FBVyxFQUFFLFFBQVEsQ0FBQyxXQUFXLEdBQUcsSUFBSTtpQkFDekMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztRQUNILENBQUM7UUFFRCxpRkFBaUY7UUFDakYsS0FBSyxNQUFNLE1BQU0sSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7WUFDOUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztnQkFDN0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDbkMsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksS0FBSyxDQUFDLGdCQUFnQjtRQUMzQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQzdDLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxlQUFlO1FBQ3BCLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVEOztPQUVHO0lBQ0ksYUFBYSxDQUFDLE1BQWM7UUFDakMsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxpQkFBaUI7UUFDdEIsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ2QsS0FBSyxNQUFNLE1BQU0sSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7WUFDaEQsSUFBSSxNQUFNLENBQUMsU0FBUztnQkFBRSxLQUFLLEVBQUUsQ0FBQztRQUNoQyxDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQ7O09BRUc7SUFDSSxtQkFBbUI7UUFDeEIsTUFBTSxHQUFHLEdBQWEsRUFBRSxDQUFDO1FBQ3pCLEtBQUssTUFBTSxNQUFNLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO1lBQ2hELElBQUksTUFBTSxDQUFDLFNBQVMsSUFBSSxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ3hDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzVCLENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRUQ7O09BRUc7SUFDSSxxQkFBcUI7UUFDMUIsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ2QsS0FBSyxNQUFNLE1BQU0sSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7WUFDaEQsS0FBSyxJQUFJLE1BQU0sQ0FBQyxhQUFhLENBQUM7UUFDaEMsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztDQUNGIn0=
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
export * from './classes.remoteingress-manager.js';
|
|
2
|
-
export * from './classes.tunnel-manager.js';
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9yZW1vdGVpbmdyZXNzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsb0NBQW9DLENBQUM7QUFDbkQsY0FBYyw2QkFBNkIsQ0FBQyJ9
|
|
@@ -1,164 +0,0 @@
|
|
|
1
|
-
import { Email } from '@push.rocks/smartmta';
|
|
2
|
-
/**
|
|
3
|
-
* Scan result information
|
|
4
|
-
*/
|
|
5
|
-
export interface IScanResult {
|
|
6
|
-
isClean: boolean;
|
|
7
|
-
threatType?: string;
|
|
8
|
-
threatDetails?: string;
|
|
9
|
-
threatScore: number;
|
|
10
|
-
scannedElements: string[];
|
|
11
|
-
timestamp: number;
|
|
12
|
-
}
|
|
13
|
-
/**
|
|
14
|
-
* Options for content scanner configuration
|
|
15
|
-
*/
|
|
16
|
-
export interface IContentScannerOptions {
|
|
17
|
-
maxCacheSize?: number;
|
|
18
|
-
cacheTTL?: number;
|
|
19
|
-
scanSubject?: boolean;
|
|
20
|
-
scanBody?: boolean;
|
|
21
|
-
scanAttachments?: boolean;
|
|
22
|
-
maxAttachmentSizeToScan?: number;
|
|
23
|
-
scanAttachmentNames?: boolean;
|
|
24
|
-
blockExecutables?: boolean;
|
|
25
|
-
blockMacros?: boolean;
|
|
26
|
-
customRules?: Array<{
|
|
27
|
-
pattern: string | RegExp;
|
|
28
|
-
type: string;
|
|
29
|
-
score: number;
|
|
30
|
-
description: string;
|
|
31
|
-
}>;
|
|
32
|
-
minThreatScore?: number;
|
|
33
|
-
highThreatScore?: number;
|
|
34
|
-
}
|
|
35
|
-
/**
|
|
36
|
-
* Threat categories
|
|
37
|
-
*/
|
|
38
|
-
export declare enum ThreatCategory {
|
|
39
|
-
SPAM = "spam",
|
|
40
|
-
PHISHING = "phishing",
|
|
41
|
-
MALWARE = "malware",
|
|
42
|
-
EXECUTABLE = "executable",
|
|
43
|
-
SUSPICIOUS_LINK = "suspicious_link",
|
|
44
|
-
MALICIOUS_MACRO = "malicious_macro",
|
|
45
|
-
XSS = "xss",
|
|
46
|
-
SENSITIVE_DATA = "sensitive_data",
|
|
47
|
-
BLACKLISTED_CONTENT = "blacklisted_content",
|
|
48
|
-
CUSTOM_RULE = "custom_rule"
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* Content Scanner for detecting malicious email content
|
|
52
|
-
*/
|
|
53
|
-
export declare class ContentScanner {
|
|
54
|
-
private static instance;
|
|
55
|
-
private scanCache;
|
|
56
|
-
private options;
|
|
57
|
-
private static readonly MALICIOUS_PATTERNS;
|
|
58
|
-
private static readonly EXECUTABLE_EXTENSIONS;
|
|
59
|
-
private static readonly MACRO_DOCUMENT_EXTENSIONS;
|
|
60
|
-
/**
|
|
61
|
-
* Default options for the content scanner
|
|
62
|
-
*/
|
|
63
|
-
private static readonly DEFAULT_OPTIONS;
|
|
64
|
-
/**
|
|
65
|
-
* Constructor for the ContentScanner
|
|
66
|
-
* @param options Configuration options
|
|
67
|
-
*/
|
|
68
|
-
constructor(options?: IContentScannerOptions);
|
|
69
|
-
/**
|
|
70
|
-
* Get the singleton instance of the scanner
|
|
71
|
-
* @param options Configuration options
|
|
72
|
-
* @returns Singleton scanner instance
|
|
73
|
-
*/
|
|
74
|
-
static getInstance(options?: IContentScannerOptions): ContentScanner;
|
|
75
|
-
/**
|
|
76
|
-
* Reset the singleton instance (for shutdown/testing)
|
|
77
|
-
*/
|
|
78
|
-
static resetInstance(): void;
|
|
79
|
-
/**
|
|
80
|
-
* Scan an email for malicious content
|
|
81
|
-
* @param email The email to scan
|
|
82
|
-
* @returns Scan result
|
|
83
|
-
*/
|
|
84
|
-
scanEmail(email: Email): Promise<IScanResult>;
|
|
85
|
-
/**
|
|
86
|
-
* Generate a cache key from an email
|
|
87
|
-
* @param email The email to generate a key for
|
|
88
|
-
* @returns Cache key
|
|
89
|
-
*/
|
|
90
|
-
private generateCacheKey;
|
|
91
|
-
/**
|
|
92
|
-
* Scan email subject for threats
|
|
93
|
-
* @param subject The subject to scan
|
|
94
|
-
* @param result The scan result to update
|
|
95
|
-
*/
|
|
96
|
-
private scanSubject;
|
|
97
|
-
/**
|
|
98
|
-
* Scan plain text content for threats
|
|
99
|
-
* @param text The text content to scan
|
|
100
|
-
* @param result The scan result to update
|
|
101
|
-
*/
|
|
102
|
-
private scanTextContent;
|
|
103
|
-
/**
|
|
104
|
-
* Scan HTML content for threats
|
|
105
|
-
* @param html The HTML content to scan
|
|
106
|
-
* @param result The scan result to update
|
|
107
|
-
*/
|
|
108
|
-
private scanHtmlContent;
|
|
109
|
-
/**
|
|
110
|
-
* Scan an attachment for threats
|
|
111
|
-
* @param attachment The attachment to scan
|
|
112
|
-
* @param result The scan result to update
|
|
113
|
-
*/
|
|
114
|
-
private scanAttachment;
|
|
115
|
-
/**
|
|
116
|
-
* Extract links from HTML content
|
|
117
|
-
* @param html HTML content
|
|
118
|
-
* @returns Array of extracted links
|
|
119
|
-
*/
|
|
120
|
-
private extractLinksFromHtml;
|
|
121
|
-
/**
|
|
122
|
-
* Extract plain text from HTML
|
|
123
|
-
* @param html HTML content
|
|
124
|
-
* @returns Extracted text
|
|
125
|
-
*/
|
|
126
|
-
private extractTextFromHtml;
|
|
127
|
-
/**
|
|
128
|
-
* Extract text from a binary buffer for scanning
|
|
129
|
-
* @param buffer Binary content
|
|
130
|
-
* @returns Extracted text (may be partial)
|
|
131
|
-
*/
|
|
132
|
-
private extractTextFromBuffer;
|
|
133
|
-
/**
|
|
134
|
-
* Check if an Office document likely contains macros
|
|
135
|
-
* This is a simplified check - real implementation would use specialized libraries
|
|
136
|
-
* @param attachment The attachment to check
|
|
137
|
-
* @returns Whether the file likely contains macros
|
|
138
|
-
*/
|
|
139
|
-
private likelyContainsMacros;
|
|
140
|
-
/**
|
|
141
|
-
* Map a pattern category to a threat type
|
|
142
|
-
* @param category The pattern category
|
|
143
|
-
* @returns The corresponding threat type
|
|
144
|
-
*/
|
|
145
|
-
private mapCategoryToThreatType;
|
|
146
|
-
/**
|
|
147
|
-
* Log a high threat finding to the security logger
|
|
148
|
-
* @param email The email containing the threat
|
|
149
|
-
* @param result The scan result
|
|
150
|
-
*/
|
|
151
|
-
private logHighThreatFound;
|
|
152
|
-
/**
|
|
153
|
-
* Log a threat finding to the security logger
|
|
154
|
-
* @param email The email containing the threat
|
|
155
|
-
* @param result The scan result
|
|
156
|
-
*/
|
|
157
|
-
private logThreatFound;
|
|
158
|
-
/**
|
|
159
|
-
* Get threat level description based on score
|
|
160
|
-
* @param score Threat score
|
|
161
|
-
* @returns Threat level description
|
|
162
|
-
*/
|
|
163
|
-
static getThreatLevel(score: number): 'none' | 'low' | 'medium' | 'high';
|
|
164
|
-
}
|