@serve.zone/dcrouter 5.0.2 → 5.0.3
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 +30539 -0
- package/dist_serve/bundle.js.map +7 -0
- package/dist_serve/index.html +1 -0
- package/dist_ts/00_commitinfo_data.d.ts +8 -0
- package/dist_ts/00_commitinfo_data.js +9 -0
- package/dist_ts/cache/classes.cache.cleaner.d.ts +47 -0
- package/dist_ts/cache/classes.cache.cleaner.js +130 -0
- package/dist_ts/cache/classes.cached.document.d.ts +76 -0
- package/dist_ts/cache/classes.cached.document.js +100 -0
- package/dist_ts/cache/classes.cachedb.d.ts +60 -0
- package/dist_ts/cache/classes.cachedb.js +125 -0
- package/dist_ts/cache/documents/classes.cached.email.d.ts +125 -0
- package/dist_ts/cache/documents/classes.cached.email.js +337 -0
- package/dist_ts/cache/documents/classes.cached.ip.reputation.d.ts +119 -0
- package/dist_ts/cache/documents/classes.cached.ip.reputation.js +323 -0
- package/dist_ts/cache/documents/index.d.ts +2 -0
- package/dist_ts/cache/documents/index.js +3 -0
- package/dist_ts/cache/index.d.ts +4 -0
- package/dist_ts/cache/index.js +7 -0
- package/dist_ts/classes.dcrouter.d.ts +276 -0
- package/dist_ts/classes.dcrouter.js +1033 -0
- package/dist_ts/config/index.d.ts +1 -0
- package/dist_ts/config/index.js +3 -0
- package/dist_ts/config/validator.d.ts +104 -0
- package/dist_ts/config/validator.js +152 -0
- package/dist_ts/errors/base.errors.d.ts +224 -0
- package/dist_ts/errors/base.errors.js +320 -0
- package/dist_ts/errors/error-handler.d.ts +98 -0
- package/dist_ts/errors/error-handler.js +282 -0
- package/dist_ts/errors/error.codes.d.ts +115 -0
- package/dist_ts/errors/error.codes.js +136 -0
- package/dist_ts/errors/index.d.ts +54 -0
- package/dist_ts/errors/index.js +136 -0
- package/dist_ts/errors/reputation.errors.d.ts +183 -0
- package/dist_ts/errors/reputation.errors.js +292 -0
- package/dist_ts/index.d.ts +6 -0
- package/dist_ts/index.js +9 -0
- package/dist_ts/logger.d.ts +17 -0
- package/dist_ts/logger.js +76 -0
- package/dist_ts/monitoring/classes.metricscache.d.ts +32 -0
- package/dist_ts/monitoring/classes.metricscache.js +63 -0
- package/dist_ts/monitoring/classes.metricsmanager.d.ts +112 -0
- package/dist_ts/monitoring/classes.metricsmanager.js +446 -0
- package/dist_ts/monitoring/index.d.ts +1 -0
- package/dist_ts/monitoring/index.js +2 -0
- package/dist_ts/opsserver/classes.opsserver.d.ts +22 -0
- package/dist_ts/opsserver/classes.opsserver.js +56 -0
- package/dist_ts/opsserver/handlers/admin.handler.d.ts +31 -0
- package/dist_ts/opsserver/handlers/admin.handler.js +180 -0
- package/dist_ts/opsserver/handlers/config.handler.d.ts +9 -0
- package/dist_ts/opsserver/handlers/config.handler.js +67 -0
- package/dist_ts/opsserver/handlers/email-ops.handler.d.ts +12 -0
- package/dist_ts/opsserver/handlers/email-ops.handler.js +219 -0
- package/dist_ts/opsserver/handlers/index.d.ts +7 -0
- package/dist_ts/opsserver/handlers/index.js +8 -0
- package/dist_ts/opsserver/handlers/logs.handler.d.ts +10 -0
- package/dist_ts/opsserver/handlers/logs.handler.js +122 -0
- package/dist_ts/opsserver/handlers/radius.handler.d.ts +8 -0
- package/dist_ts/opsserver/handlers/radius.handler.js +296 -0
- package/dist_ts/opsserver/handlers/security.handler.d.ts +11 -0
- package/dist_ts/opsserver/handlers/security.handler.js +217 -0
- package/dist_ts/opsserver/handlers/stats.handler.d.ts +13 -0
- package/dist_ts/opsserver/handlers/stats.handler.js +366 -0
- package/dist_ts/opsserver/helpers/guards.d.ts +25 -0
- package/dist_ts/opsserver/helpers/guards.js +41 -0
- package/dist_ts/opsserver/index.d.ts +1 -0
- package/dist_ts/opsserver/index.js +2 -0
- package/dist_ts/paths.d.ts +14 -0
- package/dist_ts/paths.js +39 -0
- package/dist_ts/plugins.d.ts +78 -0
- package/dist_ts/plugins.js +112 -0
- package/dist_ts/radius/classes.accounting.manager.d.ts +218 -0
- package/dist_ts/radius/classes.accounting.manager.js +417 -0
- package/dist_ts/radius/classes.radius.server.d.ts +171 -0
- package/dist_ts/radius/classes.radius.server.js +385 -0
- package/dist_ts/radius/classes.vlan.manager.d.ts +128 -0
- package/dist_ts/radius/classes.vlan.manager.js +272 -0
- package/dist_ts/radius/index.d.ts +13 -0
- package/dist_ts/radius/index.js +14 -0
- package/dist_ts/security/classes.contentscanner.d.ts +160 -0
- package/dist_ts/security/classes.contentscanner.js +637 -0
- package/dist_ts/security/classes.ipreputationchecker.d.ts +150 -0
- package/dist_ts/security/classes.ipreputationchecker.js +512 -0
- package/dist_ts/security/classes.securitylogger.d.ts +140 -0
- package/dist_ts/security/classes.securitylogger.js +235 -0
- package/dist_ts/security/index.d.ts +3 -0
- package/dist_ts/security/index.js +4 -0
- package/dist_ts/sms/classes.smsservice.d.ts +15 -0
- package/dist_ts/sms/classes.smsservice.js +72 -0
- package/dist_ts/sms/config/sms.config.d.ts +93 -0
- package/dist_ts/sms/config/sms.config.js +2 -0
- package/dist_ts/sms/config/sms.schema.d.ts +5 -0
- package/dist_ts/sms/config/sms.schema.js +121 -0
- package/dist_ts/sms/index.d.ts +1 -0
- package/dist_ts/sms/index.js +2 -0
- package/dist_ts/storage/classes.storagemanager.d.ts +82 -0
- package/dist_ts/storage/classes.storagemanager.js +344 -0
- package/dist_ts/storage/index.d.ts +1 -0
- package/dist_ts/storage/index.js +3 -0
- package/dist_ts_interfaces/data/auth.d.ts +8 -0
- package/dist_ts_interfaces/data/auth.js +2 -0
- package/dist_ts_interfaces/data/index.d.ts +2 -0
- package/dist_ts_interfaces/data/index.js +3 -0
- package/dist_ts_interfaces/data/stats.d.ts +120 -0
- package/dist_ts_interfaces/data/stats.js +2 -0
- package/{ts_interfaces/index.ts → dist_ts_interfaces/index.d.ts} +1 -5
- package/dist_ts_interfaces/index.js +8 -0
- package/{ts_interfaces/plugins.ts → dist_ts_interfaces/plugins.d.ts} +1 -5
- package/dist_ts_interfaces/plugins.js +4 -0
- package/dist_ts_interfaces/requests/admin.d.ts +31 -0
- package/dist_ts_interfaces/requests/admin.js +3 -0
- package/dist_ts_interfaces/requests/combined.stats.d.ts +24 -0
- package/dist_ts_interfaces/requests/combined.stats.js +2 -0
- package/dist_ts_interfaces/requests/config.d.ts +13 -0
- package/dist_ts_interfaces/requests/config.js +3 -0
- package/dist_ts_interfaces/requests/email-ops.d.ts +139 -0
- package/dist_ts_interfaces/requests/email-ops.js +3 -0
- package/{ts_interfaces/requests/index.ts → dist_ts_interfaces/requests/index.d.ts} +1 -1
- package/dist_ts_interfaces/requests/index.js +8 -0
- package/dist_ts_interfaces/requests/logs.d.ts +34 -0
- package/dist_ts_interfaces/requests/logs.js +4 -0
- package/dist_ts_interfaces/requests/radius.d.ts +268 -0
- package/dist_ts_interfaces/requests/radius.js +3 -0
- package/dist_ts_interfaces/requests/stats.d.ts +131 -0
- package/dist_ts_interfaces/requests/stats.js +4 -0
- package/dist_ts_web/00_commitinfo_data.d.ts +8 -0
- package/dist_ts_web/00_commitinfo_data.js +9 -0
- package/dist_ts_web/appstate.d.ts +96 -0
- package/dist_ts_web/appstate.js +587 -0
- package/dist_ts_web/elements/index.d.ts +8 -0
- package/dist_ts_web/elements/index.js +9 -0
- package/dist_ts_web/elements/ops-dashboard.d.ts +23 -0
- package/dist_ts_web/elements/ops-dashboard.js +271 -0
- package/dist_ts_web/elements/ops-view-config.d.ts +17 -0
- package/dist_ts_web/elements/ops-view-config.js +414 -0
- package/dist_ts_web/elements/ops-view-emails.d.ts +44 -0
- package/dist_ts_web/elements/ops-view-emails.js +880 -0
- package/dist_ts_web/elements/ops-view-logs.d.ts +13 -0
- package/dist_ts_web/elements/ops-view-logs.js +249 -0
- package/dist_ts_web/elements/ops-view-network.d.ts +65 -0
- package/dist_ts_web/elements/ops-view-network.js +579 -0
- package/dist_ts_web/elements/ops-view-overview.d.ts +14 -0
- package/dist_ts_web/elements/ops-view-overview.js +344 -0
- package/dist_ts_web/elements/ops-view-security.d.ts +21 -0
- package/dist_ts_web/elements/ops-view-security.js +568 -0
- package/dist_ts_web/elements/shared/css.d.ts +1 -0
- package/dist_ts_web/elements/shared/css.js +10 -0
- package/dist_ts_web/elements/shared/index.d.ts +2 -0
- package/dist_ts_web/elements/shared/index.js +3 -0
- package/dist_ts_web/elements/shared/ops-sectionheading.d.ts +5 -0
- package/dist_ts_web/elements/shared/ops-sectionheading.js +82 -0
- package/dist_ts_web/index.d.ts +1 -0
- package/dist_ts_web/index.js +10 -0
- package/dist_ts_web/plugins.d.ts +4 -0
- package/dist_ts_web/plugins.js +7 -0
- package/dist_ts_web/router.d.ts +25 -0
- package/dist_ts_web/router.js +165 -0
- package/package.json +14 -2
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts_web/00_commitinfo_data.ts +1 -1
- package/.dockerignore +0 -1
- package/.gitea/workflows/docker_nottags.yaml +0 -71
- package/.gitea/workflows/docker_tags.yaml +0 -106
- package/.playwright-mcp/dcrouter-scrollbar-issue.png +0 -0
- package/.playwright-mcp/page-2026-02-01T23-10-23-737Z.png +0 -0
- package/.playwright-mcp/page-2026-02-01T23-11-19-449Z.png +0 -0
- package/.playwright-mcp/page-2026-02-01T23-12-03-126Z.png +0 -0
- package/.playwright-mcp/page-2026-02-01T23-12-15-576Z.png +0 -0
- package/.vscode/launch.json +0 -11
- package/.vscode/settings.json +0 -26
- package/Dockerfile +0 -46
- package/changelog.md +0 -350
- package/cli.child.js +0 -4
- package/cli.child.ts +0 -4
- package/cli.ts.js +0 -5
- package/html/index.html +0 -121
- package/test/readme.md +0 -443
- package/test/test.config.md +0 -175
- package/test/test.contentscanner.ts +0 -265
- package/test/test.dcrouter.email.ts +0 -159
- package/test/test.dns-server-config.ts +0 -140
- package/test/test.dns-socket-handler.ts +0 -148
- package/test/test.errors.ts +0 -274
- package/test/test.ipreputationchecker.ts +0 -179
- package/test/test.jwt-auth.ts +0 -131
- package/test/test.opsserver-api.ts +0 -84
- package/test/test.protected-endpoint.ts +0 -120
- package/test/test.storagemanager.ts +0 -289
- package/test_watch/devserver.ts +0 -35
- package/ts_interfaces/data/auth.ts +0 -8
- package/ts_interfaces/data/index.ts +0 -2
- package/ts_interfaces/data/stats.ts +0 -131
- package/ts_interfaces/readme.md +0 -205
- package/ts_interfaces/requests/admin.ts +0 -46
- package/ts_interfaces/requests/combined.stats.ts +0 -25
- package/ts_interfaces/requests/config.ts +0 -18
- package/ts_interfaces/requests/email-ops.ts +0 -239
- package/ts_interfaces/requests/logs.ts +0 -44
- package/ts_interfaces/requests/radius.ts +0 -329
- package/ts_interfaces/requests/stats.ts +0 -162
- package/ts_interfaces/tspublish.json +0 -3
- package/tsconfig.json +0 -12
|
@@ -0,0 +1,344 @@
|
|
|
1
|
+
import * as plugins from '../plugins.js';
|
|
2
|
+
import { logger } from '../logger.js';
|
|
3
|
+
// Promisify filesystem operations
|
|
4
|
+
const readFile = plugins.util.promisify(plugins.fs.readFile);
|
|
5
|
+
const writeFile = plugins.util.promisify(plugins.fs.writeFile);
|
|
6
|
+
const unlink = plugins.util.promisify(plugins.fs.unlink);
|
|
7
|
+
const rename = plugins.util.promisify(plugins.fs.rename);
|
|
8
|
+
const readdir = plugins.util.promisify(plugins.fs.readdir);
|
|
9
|
+
/**
|
|
10
|
+
* Central storage manager for DcRouter
|
|
11
|
+
* Provides unified key-value storage with multiple backend support
|
|
12
|
+
*/
|
|
13
|
+
export class StorageManager {
|
|
14
|
+
backend;
|
|
15
|
+
memoryStore = new Map();
|
|
16
|
+
config;
|
|
17
|
+
fsBasePath;
|
|
18
|
+
constructor(config) {
|
|
19
|
+
this.config = config || {};
|
|
20
|
+
// Check if both fsPath and custom functions are provided
|
|
21
|
+
if (config?.fsPath && (config?.readFunction || config?.writeFunction)) {
|
|
22
|
+
console.warn('⚠️ WARNING: Both fsPath and custom read/write functions are configured.\n' +
|
|
23
|
+
' Using custom read/write functions. fsPath will be ignored.');
|
|
24
|
+
}
|
|
25
|
+
// Determine backend based on configuration
|
|
26
|
+
if (config?.readFunction && config?.writeFunction) {
|
|
27
|
+
this.backend = 'custom';
|
|
28
|
+
}
|
|
29
|
+
else if (config?.fsPath) {
|
|
30
|
+
// Set up internal read/write functions for filesystem
|
|
31
|
+
this.backend = 'custom'; // Use custom backend with internal functions
|
|
32
|
+
this.fsBasePath = plugins.path.resolve(config.fsPath);
|
|
33
|
+
this.ensureDirectory(this.fsBasePath);
|
|
34
|
+
// Set up internal filesystem read/write functions
|
|
35
|
+
this.config.readFunction = async (key) => {
|
|
36
|
+
return this.fsRead(key);
|
|
37
|
+
};
|
|
38
|
+
this.config.writeFunction = async (key, value) => {
|
|
39
|
+
await this.fsWrite(key, value);
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
this.backend = 'memory';
|
|
44
|
+
this.showMemoryWarning();
|
|
45
|
+
}
|
|
46
|
+
logger.log('info', `StorageManager initialized with ${this.backend} backend`);
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Show warning when using memory backend
|
|
50
|
+
*/
|
|
51
|
+
showMemoryWarning() {
|
|
52
|
+
console.warn('⚠️ WARNING: StorageManager is using in-memory storage.\n' +
|
|
53
|
+
' Data will be lost when the process restarts.\n' +
|
|
54
|
+
' Configure storage.fsPath or storage functions for persistence.');
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Ensure directory exists for filesystem backend
|
|
58
|
+
*/
|
|
59
|
+
async ensureDirectory(dirPath) {
|
|
60
|
+
try {
|
|
61
|
+
await plugins.fsUtils.ensureDir(dirPath);
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
logger.log('error', `Failed to create storage directory: ${error.message}`);
|
|
65
|
+
throw error;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Validate and sanitize storage key
|
|
70
|
+
*/
|
|
71
|
+
validateKey(key) {
|
|
72
|
+
if (!key || typeof key !== 'string') {
|
|
73
|
+
throw new Error('Storage key must be a non-empty string');
|
|
74
|
+
}
|
|
75
|
+
// Ensure key starts with /
|
|
76
|
+
if (!key.startsWith('/')) {
|
|
77
|
+
key = '/' + key;
|
|
78
|
+
}
|
|
79
|
+
// Remove any dangerous path elements
|
|
80
|
+
key = key.replace(/\.\./g, '').replace(/\/+/g, '/');
|
|
81
|
+
return key;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Convert key to filesystem path
|
|
85
|
+
*/
|
|
86
|
+
keyToPath(key) {
|
|
87
|
+
if (!this.fsBasePath) {
|
|
88
|
+
throw new Error('Filesystem base path not configured');
|
|
89
|
+
}
|
|
90
|
+
// Remove leading slash and convert to path
|
|
91
|
+
const relativePath = key.substring(1);
|
|
92
|
+
return plugins.path.join(this.fsBasePath, relativePath);
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Internal filesystem read function
|
|
96
|
+
*/
|
|
97
|
+
async fsRead(key) {
|
|
98
|
+
const filePath = this.keyToPath(key);
|
|
99
|
+
try {
|
|
100
|
+
const content = await readFile(filePath, 'utf8');
|
|
101
|
+
return content;
|
|
102
|
+
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
if (error.code === 'ENOENT') {
|
|
105
|
+
return null;
|
|
106
|
+
}
|
|
107
|
+
throw error;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Internal filesystem write function
|
|
112
|
+
*/
|
|
113
|
+
async fsWrite(key, value) {
|
|
114
|
+
const filePath = this.keyToPath(key);
|
|
115
|
+
const dir = plugins.path.dirname(filePath);
|
|
116
|
+
// Ensure directory exists
|
|
117
|
+
await plugins.fsUtils.ensureDir(dir);
|
|
118
|
+
// Write atomically with temp file
|
|
119
|
+
const tempPath = `${filePath}.tmp`;
|
|
120
|
+
await writeFile(tempPath, value, 'utf8');
|
|
121
|
+
await rename(tempPath, filePath);
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Get value by key
|
|
125
|
+
*/
|
|
126
|
+
async get(key) {
|
|
127
|
+
key = this.validateKey(key);
|
|
128
|
+
try {
|
|
129
|
+
switch (this.backend) {
|
|
130
|
+
case 'custom': {
|
|
131
|
+
if (!this.config.readFunction) {
|
|
132
|
+
throw new Error('Read function not configured');
|
|
133
|
+
}
|
|
134
|
+
try {
|
|
135
|
+
return await this.config.readFunction(key);
|
|
136
|
+
}
|
|
137
|
+
catch (error) {
|
|
138
|
+
// Assume null if read fails (key doesn't exist)
|
|
139
|
+
return null;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
case 'memory': {
|
|
143
|
+
return this.memoryStore.get(key) || null;
|
|
144
|
+
}
|
|
145
|
+
default:
|
|
146
|
+
throw new Error(`Unknown backend: ${this.backend}`);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
catch (error) {
|
|
150
|
+
logger.log('error', `Storage get error for key ${key}: ${error.message}`);
|
|
151
|
+
throw error;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Set value by key
|
|
156
|
+
*/
|
|
157
|
+
async set(key, value) {
|
|
158
|
+
key = this.validateKey(key);
|
|
159
|
+
if (typeof value !== 'string') {
|
|
160
|
+
throw new Error('Storage value must be a string');
|
|
161
|
+
}
|
|
162
|
+
try {
|
|
163
|
+
switch (this.backend) {
|
|
164
|
+
case 'filesystem': {
|
|
165
|
+
const filePath = this.keyToPath(key);
|
|
166
|
+
const dirPath = plugins.path.dirname(filePath);
|
|
167
|
+
// Ensure directory exists
|
|
168
|
+
await plugins.fsUtils.ensureDir(dirPath);
|
|
169
|
+
// Write atomically
|
|
170
|
+
const tempPath = filePath + '.tmp';
|
|
171
|
+
await writeFile(tempPath, value, 'utf8');
|
|
172
|
+
await rename(tempPath, filePath);
|
|
173
|
+
break;
|
|
174
|
+
}
|
|
175
|
+
case 'custom': {
|
|
176
|
+
if (!this.config.writeFunction) {
|
|
177
|
+
throw new Error('Write function not configured');
|
|
178
|
+
}
|
|
179
|
+
await this.config.writeFunction(key, value);
|
|
180
|
+
break;
|
|
181
|
+
}
|
|
182
|
+
case 'memory': {
|
|
183
|
+
this.memoryStore.set(key, value);
|
|
184
|
+
break;
|
|
185
|
+
}
|
|
186
|
+
default:
|
|
187
|
+
throw new Error(`Unknown backend: ${this.backend}`);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
catch (error) {
|
|
191
|
+
logger.log('error', `Storage set error for key ${key}: ${error.message}`);
|
|
192
|
+
throw error;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Delete value by key
|
|
197
|
+
*/
|
|
198
|
+
async delete(key) {
|
|
199
|
+
key = this.validateKey(key);
|
|
200
|
+
try {
|
|
201
|
+
switch (this.backend) {
|
|
202
|
+
case 'filesystem': {
|
|
203
|
+
const filePath = this.keyToPath(key);
|
|
204
|
+
try {
|
|
205
|
+
await unlink(filePath);
|
|
206
|
+
}
|
|
207
|
+
catch (error) {
|
|
208
|
+
if (error.code !== 'ENOENT') {
|
|
209
|
+
throw error;
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
break;
|
|
213
|
+
}
|
|
214
|
+
case 'custom': {
|
|
215
|
+
// Try to delete by setting empty value
|
|
216
|
+
if (this.config.writeFunction) {
|
|
217
|
+
await this.config.writeFunction(key, '');
|
|
218
|
+
}
|
|
219
|
+
break;
|
|
220
|
+
}
|
|
221
|
+
case 'memory': {
|
|
222
|
+
this.memoryStore.delete(key);
|
|
223
|
+
break;
|
|
224
|
+
}
|
|
225
|
+
default:
|
|
226
|
+
throw new Error(`Unknown backend: ${this.backend}`);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
catch (error) {
|
|
230
|
+
logger.log('error', `Storage delete error for key ${key}: ${error.message}`);
|
|
231
|
+
throw error;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* List keys by prefix
|
|
236
|
+
*/
|
|
237
|
+
async list(prefix) {
|
|
238
|
+
prefix = prefix ? this.validateKey(prefix) : '/';
|
|
239
|
+
try {
|
|
240
|
+
switch (this.backend) {
|
|
241
|
+
case 'custom': {
|
|
242
|
+
// If we have fsBasePath, this is actually filesystem backend
|
|
243
|
+
if (this.fsBasePath) {
|
|
244
|
+
const basePath = this.keyToPath(prefix);
|
|
245
|
+
const keys = [];
|
|
246
|
+
const walkDir = async (dir, baseDir) => {
|
|
247
|
+
try {
|
|
248
|
+
const entries = await readdir(dir, { withFileTypes: true });
|
|
249
|
+
for (const entry of entries) {
|
|
250
|
+
const fullPath = plugins.path.join(dir, entry.name);
|
|
251
|
+
if (entry.isDirectory()) {
|
|
252
|
+
await walkDir(fullPath, baseDir);
|
|
253
|
+
}
|
|
254
|
+
else if (entry.isFile()) {
|
|
255
|
+
// Convert path back to key
|
|
256
|
+
const relativePath = plugins.path.relative(this.fsBasePath, fullPath);
|
|
257
|
+
const key = '/' + relativePath.replace(/\\/g, '/');
|
|
258
|
+
if (key.startsWith(prefix)) {
|
|
259
|
+
keys.push(key);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
catch (error) {
|
|
265
|
+
if (error.code !== 'ENOENT') {
|
|
266
|
+
throw error;
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
};
|
|
270
|
+
await walkDir(basePath, basePath);
|
|
271
|
+
return keys.sort();
|
|
272
|
+
}
|
|
273
|
+
else {
|
|
274
|
+
// True custom backends need to implement their own listing
|
|
275
|
+
logger.log('warn', 'List operation not supported for custom backend');
|
|
276
|
+
return [];
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
case 'memory': {
|
|
280
|
+
const keys = [];
|
|
281
|
+
for (const key of this.memoryStore.keys()) {
|
|
282
|
+
if (key.startsWith(prefix)) {
|
|
283
|
+
keys.push(key);
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
return keys.sort();
|
|
287
|
+
}
|
|
288
|
+
default:
|
|
289
|
+
throw new Error(`Unknown backend: ${this.backend}`);
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
catch (error) {
|
|
293
|
+
logger.log('error', `Storage list error for prefix ${prefix}: ${error.message}`);
|
|
294
|
+
throw error;
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
/**
|
|
298
|
+
* Check if key exists
|
|
299
|
+
*/
|
|
300
|
+
async exists(key) {
|
|
301
|
+
key = this.validateKey(key);
|
|
302
|
+
try {
|
|
303
|
+
const value = await this.get(key);
|
|
304
|
+
return value !== null;
|
|
305
|
+
}
|
|
306
|
+
catch (error) {
|
|
307
|
+
return false;
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
/**
|
|
311
|
+
* Get storage backend type
|
|
312
|
+
*/
|
|
313
|
+
getBackend() {
|
|
314
|
+
// If we're using custom backend with fsBasePath, report it as filesystem
|
|
315
|
+
if (this.backend === 'custom' && this.fsBasePath) {
|
|
316
|
+
return 'filesystem';
|
|
317
|
+
}
|
|
318
|
+
return this.backend;
|
|
319
|
+
}
|
|
320
|
+
/**
|
|
321
|
+
* JSON helper: Get and parse JSON value
|
|
322
|
+
*/
|
|
323
|
+
async getJSON(key) {
|
|
324
|
+
const value = await this.get(key);
|
|
325
|
+
if (value === null) {
|
|
326
|
+
return null;
|
|
327
|
+
}
|
|
328
|
+
try {
|
|
329
|
+
return JSON.parse(value);
|
|
330
|
+
}
|
|
331
|
+
catch (error) {
|
|
332
|
+
logger.log('error', `Failed to parse JSON for key ${key}: ${error.message}`);
|
|
333
|
+
throw error;
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
/**
|
|
337
|
+
* JSON helper: Set value as JSON
|
|
338
|
+
*/
|
|
339
|
+
async setJSON(key, value) {
|
|
340
|
+
const jsonString = JSON.stringify(value, null, 2);
|
|
341
|
+
await this.set(key, jsonString);
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5zdG9yYWdlbWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3RzL3N0b3JhZ2UvY2xhc3Nlcy5zdG9yYWdlbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRXRDLGtDQUFrQztBQUNsQyxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzdELE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDL0QsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN6RCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3pELE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUM7QUFtQjNEOzs7R0FHRztBQUNILE1BQU0sT0FBTyxjQUFjO0lBQ2pCLE9BQU8sQ0FBaUI7SUFDeEIsV0FBVyxHQUF3QixJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQzdDLE1BQU0sQ0FBaUI7SUFDdkIsVUFBVSxDQUFVO0lBRTVCLFlBQVksTUFBdUI7UUFDakMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLElBQUksRUFBRSxDQUFDO1FBRTNCLHlEQUF5RDtRQUN6RCxJQUFJLE1BQU0sRUFBRSxNQUFNLElBQUksQ0FBQyxN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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './classes.storagemanager.js';
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
// Storage module exports
|
|
2
|
+
export * from './classes.storagemanager.js';
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9zdG9yYWdlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHlCQUF5QjtBQUN6QixjQUFjLDZCQUE2QixDQUFDIn0=
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export * from './auth.js';
|
|
2
|
+
export * from './stats.js';
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90c19pbnRlcmZhY2VzL2RhdGEvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxXQUFXLENBQUM7QUFDMUIsY0FBYyxZQUFZLENBQUMifQ==
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
export interface IServerStats {
|
|
2
|
+
uptime: number;
|
|
3
|
+
startTime: number;
|
|
4
|
+
memoryUsage: {
|
|
5
|
+
heapUsed: number;
|
|
6
|
+
heapTotal: number;
|
|
7
|
+
external: number;
|
|
8
|
+
rss: number;
|
|
9
|
+
maxMemoryMB?: number;
|
|
10
|
+
actualUsageBytes?: number;
|
|
11
|
+
actualUsagePercentage?: number;
|
|
12
|
+
};
|
|
13
|
+
cpuUsage: {
|
|
14
|
+
user: number;
|
|
15
|
+
system: number;
|
|
16
|
+
};
|
|
17
|
+
activeConnections: number;
|
|
18
|
+
totalConnections: number;
|
|
19
|
+
}
|
|
20
|
+
export interface IEmailStats {
|
|
21
|
+
sent: number;
|
|
22
|
+
received: number;
|
|
23
|
+
bounced: number;
|
|
24
|
+
queued: number;
|
|
25
|
+
failed: number;
|
|
26
|
+
averageDeliveryTime: number;
|
|
27
|
+
deliveryRate: number;
|
|
28
|
+
bounceRate: number;
|
|
29
|
+
}
|
|
30
|
+
export interface IDnsStats {
|
|
31
|
+
totalQueries: number;
|
|
32
|
+
cacheHits: number;
|
|
33
|
+
cacheMisses: number;
|
|
34
|
+
cacheHitRate: number;
|
|
35
|
+
activeDomains: number;
|
|
36
|
+
averageResponseTime: number;
|
|
37
|
+
queryTypes: {
|
|
38
|
+
[key: string]: number;
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
export interface IRateLimitInfo {
|
|
42
|
+
domain: string;
|
|
43
|
+
currentRate: number;
|
|
44
|
+
limit: number;
|
|
45
|
+
remaining: number;
|
|
46
|
+
resetTime: number;
|
|
47
|
+
blocked: boolean;
|
|
48
|
+
}
|
|
49
|
+
export interface ISecurityMetrics {
|
|
50
|
+
blockedIPs: string[];
|
|
51
|
+
reputationScores: {
|
|
52
|
+
[domain: string]: number;
|
|
53
|
+
};
|
|
54
|
+
spamDetected: number;
|
|
55
|
+
malwareDetected: number;
|
|
56
|
+
phishingDetected: number;
|
|
57
|
+
authenticationFailures: number;
|
|
58
|
+
suspiciousActivities: number;
|
|
59
|
+
}
|
|
60
|
+
export interface ILogEntry {
|
|
61
|
+
timestamp: number;
|
|
62
|
+
level: 'debug' | 'info' | 'warn' | 'error';
|
|
63
|
+
category: 'smtp' | 'dns' | 'security' | 'system' | 'email';
|
|
64
|
+
message: string;
|
|
65
|
+
metadata?: any;
|
|
66
|
+
}
|
|
67
|
+
export interface IConnectionInfo {
|
|
68
|
+
id: string;
|
|
69
|
+
remoteAddress: string;
|
|
70
|
+
localAddress: string;
|
|
71
|
+
startTime: number;
|
|
72
|
+
protocol: 'smtp' | 'smtps' | 'http' | 'https';
|
|
73
|
+
state: 'connecting' | 'connected' | 'authenticated' | 'transmitting' | 'closing';
|
|
74
|
+
bytesReceived: number;
|
|
75
|
+
bytesSent: number;
|
|
76
|
+
}
|
|
77
|
+
export interface IQueueStatus {
|
|
78
|
+
name: string;
|
|
79
|
+
size: number;
|
|
80
|
+
processing: number;
|
|
81
|
+
failed: number;
|
|
82
|
+
retrying: number;
|
|
83
|
+
averageProcessingTime: number;
|
|
84
|
+
}
|
|
85
|
+
export interface IHealthStatus {
|
|
86
|
+
healthy: boolean;
|
|
87
|
+
uptime: number;
|
|
88
|
+
services: {
|
|
89
|
+
[service: string]: {
|
|
90
|
+
status: 'healthy' | 'degraded' | 'unhealthy';
|
|
91
|
+
message?: string;
|
|
92
|
+
lastCheck: number;
|
|
93
|
+
};
|
|
94
|
+
};
|
|
95
|
+
version?: string;
|
|
96
|
+
}
|
|
97
|
+
export interface INetworkMetrics {
|
|
98
|
+
totalBandwidth: {
|
|
99
|
+
in: number;
|
|
100
|
+
out: number;
|
|
101
|
+
};
|
|
102
|
+
activeConnections: number;
|
|
103
|
+
connectionDetails: IConnectionDetails[];
|
|
104
|
+
topEndpoints: Array<{
|
|
105
|
+
endpoint: string;
|
|
106
|
+
requests: number;
|
|
107
|
+
bandwidth: {
|
|
108
|
+
in: number;
|
|
109
|
+
out: number;
|
|
110
|
+
};
|
|
111
|
+
}>;
|
|
112
|
+
}
|
|
113
|
+
export interface IConnectionDetails {
|
|
114
|
+
remoteAddress: string;
|
|
115
|
+
protocol: 'http' | 'https' | 'smtp' | 'smtps';
|
|
116
|
+
state: 'connecting' | 'connected' | 'established' | 'closing';
|
|
117
|
+
startTime: number;
|
|
118
|
+
bytesIn: number;
|
|
119
|
+
bytesOut: number;
|
|
120
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export * from './plugins.js';
|
|
2
|
+
// Data types
|
|
3
|
+
import * as data from './data/index.js';
|
|
4
|
+
export { data };
|
|
5
|
+
// Request interfaces
|
|
6
|
+
import * as requests from './requests/index.js';
|
|
7
|
+
export { requests };
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90c19pbnRlcmZhY2VzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsY0FBYyxDQUFDO0FBRTdCLGFBQWE7QUFDYixPQUFPLEtBQUssSUFBSSxNQUFNLGlCQUFpQixDQUFDO0FBQ3hDLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUVoQixxQkFBcUI7QUFDckIsT0FBTyxLQUFLLFFBQVEsTUFBTSxxQkFBcUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsUUFBUSxFQUFFLENBQUMifQ==
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
// @apiglobal scope
|
|
2
|
+
import * as typedrequestInterfaces from '@api.global/typedrequest-interfaces';
|
|
3
|
+
export { typedrequestInterfaces };
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzX2ludGVyZmFjZXMvcGx1Z2lucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxtQkFBbUI7QUFDbkIsT0FBTyxLQUFLLHNCQUFzQixNQUFNLHFDQUFxQyxDQUFDO0FBRTlFLE9BQU8sRUFDTCxzQkFBc0IsRUFDdkIsQ0FBQSJ9
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import * as plugins from '../plugins.js';
|
|
2
|
+
import * as authInterfaces from '../data/auth.js';
|
|
3
|
+
export interface IReq_AdminLoginWithUsernameAndPassword extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_AdminLoginWithUsernameAndPassword> {
|
|
4
|
+
method: 'adminLoginWithUsernameAndPassword';
|
|
5
|
+
request: {
|
|
6
|
+
username: string;
|
|
7
|
+
password: string;
|
|
8
|
+
};
|
|
9
|
+
response: {
|
|
10
|
+
identity?: authInterfaces.IIdentity;
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
export interface IReq_AdminLogout extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_AdminLogout> {
|
|
14
|
+
method: 'adminLogout';
|
|
15
|
+
request: {
|
|
16
|
+
identity: authInterfaces.IIdentity;
|
|
17
|
+
};
|
|
18
|
+
response: {
|
|
19
|
+
success: boolean;
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
export interface IReq_VerifyIdentity extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_VerifyIdentity> {
|
|
23
|
+
method: 'verifyIdentity';
|
|
24
|
+
request: {
|
|
25
|
+
identity: authInterfaces.IIdentity;
|
|
26
|
+
};
|
|
27
|
+
response: {
|
|
28
|
+
valid: boolean;
|
|
29
|
+
identity?: authInterfaces.IIdentity;
|
|
30
|
+
};
|
|
31
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import * as plugins from '../plugins.js';
|
|
2
|
+
import * as authInterfaces from '../data/auth.js';
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRtaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90c19pbnRlcmZhY2VzL3JlcXVlc3RzL2FkbWluLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sS0FBSyxjQUFjLE1BQU0saUJBQWlCLENBQUMifQ==
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type * as data from '../data/index.js';
|
|
2
|
+
export interface IReq_GetCombinedMetrics {
|
|
3
|
+
method: 'getCombinedMetrics';
|
|
4
|
+
request: {
|
|
5
|
+
identity: data.IIdentity;
|
|
6
|
+
sections?: {
|
|
7
|
+
server?: boolean;
|
|
8
|
+
email?: boolean;
|
|
9
|
+
dns?: boolean;
|
|
10
|
+
security?: boolean;
|
|
11
|
+
network?: boolean;
|
|
12
|
+
};
|
|
13
|
+
};
|
|
14
|
+
response: {
|
|
15
|
+
metrics: {
|
|
16
|
+
server?: data.IServerStats;
|
|
17
|
+
email?: data.IEmailStats;
|
|
18
|
+
dns?: data.IDnsStats;
|
|
19
|
+
security?: data.ISecurityMetrics;
|
|
20
|
+
network?: data.INetworkMetrics;
|
|
21
|
+
};
|
|
22
|
+
timestamp: number;
|
|
23
|
+
};
|
|
24
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import * as plugins from '../plugins.js';
|
|
2
|
+
import * as authInterfaces from '../data/auth.js';
|
|
3
|
+
export interface IReq_GetConfiguration extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_GetConfiguration> {
|
|
4
|
+
method: 'getConfiguration';
|
|
5
|
+
request: {
|
|
6
|
+
identity?: authInterfaces.IIdentity;
|
|
7
|
+
section?: string;
|
|
8
|
+
};
|
|
9
|
+
response: {
|
|
10
|
+
config: any;
|
|
11
|
+
section?: string;
|
|
12
|
+
};
|
|
13
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import * as plugins from '../plugins.js';
|
|
2
|
+
import * as authInterfaces from '../data/auth.js';
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHNfaW50ZXJmYWNlcy9yZXF1ZXN0cy9jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxLQUFLLGNBQWMsTUFBTSxpQkFBaUIsQ0FBQyJ9
|