@serve.zone/dcrouter 11.0.6 → 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 +3358 -3358
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts_web/00_commitinfo_data.js +1 -1
- package/package.json +3 -3
- 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/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
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export const commitinfo = {
|
|
5
5
|
name: '@serve.zone/dcrouter',
|
|
6
|
-
version: '11.0.
|
|
6
|
+
version: '11.0.9',
|
|
7
7
|
description: 'A multifaceted routing service handling mail and SMS delivery functions.'
|
|
8
8
|
};
|
|
9
9
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSxzQkFBc0I7SUFDNUIsT0FBTyxFQUFFLFFBQVE7SUFDakIsV0FBVyxFQUFFLDBFQUEwRTtDQUN4RixDQUFBIn0=
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export const commitinfo = {
|
|
5
5
|
name: '@serve.zone/dcrouter',
|
|
6
|
-
version: '11.0.
|
|
6
|
+
version: '11.0.9',
|
|
7
7
|
description: 'A multifaceted routing service handling mail and SMS delivery functions.'
|
|
8
8
|
};
|
|
9
9
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHNfd2ViLzAwX2NvbW1pdGluZm9fZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRztJQUN4QixJQUFJLEVBQUUsc0JBQXNCO0lBQzVCLE9BQU8sRUFBRSxRQUFRO0lBQ2pCLFdBQVcsRUFBRSwwRUFBMEU7Q0FDeEYsQ0FBQSJ9
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@serve.zone/dcrouter",
|
|
3
3
|
"private": false,
|
|
4
|
-
"version": "11.0.
|
|
4
|
+
"version": "11.0.9",
|
|
5
5
|
"description": "A multifaceted routing service handling mail and SMS delivery functions.",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"exports": {
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"watch": "tswatch"
|
|
20
20
|
},
|
|
21
21
|
"devDependencies": {
|
|
22
|
-
"@git.zone/tsbuild": "^4.1.
|
|
22
|
+
"@git.zone/tsbuild": "^4.1.4",
|
|
23
23
|
"@git.zone/tsbundle": "^2.9.0",
|
|
24
24
|
"@git.zone/tsrun": "^2.0.1",
|
|
25
25
|
"@git.zone/tstest": "^3.2.0",
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
"@apiclient.xyz/cloudflare": "^7.1.0",
|
|
35
35
|
"@design.estate/dees-catalog": "^3.43.3",
|
|
36
36
|
"@design.estate/dees-element": "^2.1.6",
|
|
37
|
-
"@push.rocks/lik": "^6.
|
|
37
|
+
"@push.rocks/lik": "^6.3.1",
|
|
38
38
|
"@push.rocks/projectinfo": "^5.0.2",
|
|
39
39
|
"@push.rocks/qenv": "^6.1.3",
|
|
40
40
|
"@push.rocks/smartacme": "^9.1.3",
|
package/ts/00_commitinfo_data.ts
CHANGED
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import { CacheDb } from './classes.cachedb.js';
|
|
2
|
-
/**
|
|
3
|
-
* Configuration for the cache cleaner
|
|
4
|
-
*/
|
|
5
|
-
export interface ICacheCleanerOptions {
|
|
6
|
-
/** Cleanup interval in milliseconds (default: 1 hour) */
|
|
7
|
-
intervalMs?: number;
|
|
8
|
-
/** Enable verbose logging */
|
|
9
|
-
verbose?: boolean;
|
|
10
|
-
}
|
|
11
|
-
/**
|
|
12
|
-
* CacheCleaner - Periodically removes expired documents from the cache
|
|
13
|
-
*
|
|
14
|
-
* Runs on a configurable interval (default: hourly) and queries each
|
|
15
|
-
* collection for documents where expiresAt < now(), then deletes them.
|
|
16
|
-
*/
|
|
17
|
-
export declare class CacheCleaner {
|
|
18
|
-
private cleanupInterval;
|
|
19
|
-
private isRunning;
|
|
20
|
-
private options;
|
|
21
|
-
private cacheDb;
|
|
22
|
-
constructor(cacheDb: CacheDb, options?: ICacheCleanerOptions);
|
|
23
|
-
/**
|
|
24
|
-
* Start the periodic cleanup process
|
|
25
|
-
*/
|
|
26
|
-
start(): void;
|
|
27
|
-
/**
|
|
28
|
-
* Stop the periodic cleanup process
|
|
29
|
-
*/
|
|
30
|
-
stop(): void;
|
|
31
|
-
/**
|
|
32
|
-
* Run a single cleanup cycle
|
|
33
|
-
*/
|
|
34
|
-
runCleanup(): Promise<void>;
|
|
35
|
-
/**
|
|
36
|
-
* Clean expired documents from a specific collection using smartdata API
|
|
37
|
-
*/
|
|
38
|
-
private cleanExpiredDocuments;
|
|
39
|
-
/**
|
|
40
|
-
* Check if the cleaner is running
|
|
41
|
-
*/
|
|
42
|
-
isActive(): boolean;
|
|
43
|
-
/**
|
|
44
|
-
* Get the cleanup interval in milliseconds
|
|
45
|
-
*/
|
|
46
|
-
getIntervalMs(): number;
|
|
47
|
-
}
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
export * from './classes.cached.email.js';
|
|
2
|
-
export * from './classes.cached.ip.reputation.js';
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90cy9jYWNoZS9kb2N1bWVudHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLG1DQUFtQyxDQUFDIn0=
|
package/dist_ts/cache/index.d.ts
DELETED
package/dist_ts/cache/index.js
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
// Core cache infrastructure
|
|
2
|
-
export * from './classes.cachedb.js';
|
|
3
|
-
export * from './classes.cached.document.js';
|
|
4
|
-
export * from './classes.cache.cleaner.js';
|
|
5
|
-
// Document classes
|
|
6
|
-
export * from './documents/index.js';
|
|
7
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9jYWNoZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSw0QkFBNEI7QUFDNUIsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsNEJBQTRCLENBQUM7QUFFM0MsbUJBQW1CO0FBQ25CLGNBQWMsc0JBQXNCLENBQUMifQ==
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
import type { StorageManager } from '../storage/index.js';
|
|
2
|
-
import type { IStoredApiToken, IApiTokenInfo, TApiTokenScope } from '../../dist_ts_interfaces/data/route-management.js';
|
|
3
|
-
export declare class ApiTokenManager {
|
|
4
|
-
private storageManager;
|
|
5
|
-
private tokens;
|
|
6
|
-
constructor(storageManager: StorageManager);
|
|
7
|
-
initialize(): Promise<void>;
|
|
8
|
-
/**
|
|
9
|
-
* Create a new API token. Returns the raw token value (shown once).
|
|
10
|
-
*/
|
|
11
|
-
createToken(name: string, scopes: TApiTokenScope[], expiresInDays: number | null, createdBy: string): Promise<{
|
|
12
|
-
id: string;
|
|
13
|
-
rawToken: string;
|
|
14
|
-
}>;
|
|
15
|
-
/**
|
|
16
|
-
* Validate a raw token string. Returns the stored token if valid, null otherwise.
|
|
17
|
-
* Also updates lastUsedAt.
|
|
18
|
-
*/
|
|
19
|
-
validateToken(rawToken: string): Promise<IStoredApiToken | null>;
|
|
20
|
-
/**
|
|
21
|
-
* Check if a token has a specific scope.
|
|
22
|
-
*/
|
|
23
|
-
hasScope(token: IStoredApiToken, scope: TApiTokenScope): boolean;
|
|
24
|
-
/**
|
|
25
|
-
* List all tokens (safe info only, no hashes).
|
|
26
|
-
*/
|
|
27
|
-
listTokens(): IApiTokenInfo[];
|
|
28
|
-
/**
|
|
29
|
-
* Revoke (delete) a token.
|
|
30
|
-
*/
|
|
31
|
-
revokeToken(id: string): Promise<boolean>;
|
|
32
|
-
/**
|
|
33
|
-
* Roll (regenerate) a token's secret while keeping its identity.
|
|
34
|
-
* Returns the new raw token value (shown once).
|
|
35
|
-
*/
|
|
36
|
-
rollToken(id: string): Promise<{
|
|
37
|
-
id: string;
|
|
38
|
-
rawToken: string;
|
|
39
|
-
} | null>;
|
|
40
|
-
/**
|
|
41
|
-
* Enable or disable a token.
|
|
42
|
-
*/
|
|
43
|
-
toggleToken(id: string, enabled: boolean): Promise<boolean>;
|
|
44
|
-
private loadTokens;
|
|
45
|
-
private persistToken;
|
|
46
|
-
}
|
|
@@ -1,150 +0,0 @@
|
|
|
1
|
-
import * as plugins from '../plugins.js';
|
|
2
|
-
import { logger } from '../logger.js';
|
|
3
|
-
const TOKENS_PREFIX = '/config-api/tokens/';
|
|
4
|
-
const TOKEN_PREFIX_STR = 'dcr_';
|
|
5
|
-
export class ApiTokenManager {
|
|
6
|
-
storageManager;
|
|
7
|
-
tokens = new Map();
|
|
8
|
-
constructor(storageManager) {
|
|
9
|
-
this.storageManager = storageManager;
|
|
10
|
-
}
|
|
11
|
-
async initialize() {
|
|
12
|
-
await this.loadTokens();
|
|
13
|
-
if (this.tokens.size > 0) {
|
|
14
|
-
logger.log('info', `Loaded ${this.tokens.size} API token(s) from storage`);
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
// =========================================================================
|
|
18
|
-
// Token lifecycle
|
|
19
|
-
// =========================================================================
|
|
20
|
-
/**
|
|
21
|
-
* Create a new API token. Returns the raw token value (shown once).
|
|
22
|
-
*/
|
|
23
|
-
async createToken(name, scopes, expiresInDays, createdBy) {
|
|
24
|
-
const id = plugins.uuid.v4();
|
|
25
|
-
const randomBytes = plugins.crypto.randomBytes(32);
|
|
26
|
-
const rawPayload = `${id}:${randomBytes.toString('base64url')}`;
|
|
27
|
-
const rawToken = `${TOKEN_PREFIX_STR}${rawPayload}`;
|
|
28
|
-
const tokenHash = plugins.crypto.createHash('sha256').update(rawToken).digest('hex');
|
|
29
|
-
const now = Date.now();
|
|
30
|
-
const stored = {
|
|
31
|
-
id,
|
|
32
|
-
name,
|
|
33
|
-
tokenHash,
|
|
34
|
-
scopes,
|
|
35
|
-
createdAt: now,
|
|
36
|
-
expiresAt: expiresInDays != null ? now + expiresInDays * 86400000 : null,
|
|
37
|
-
lastUsedAt: null,
|
|
38
|
-
createdBy,
|
|
39
|
-
enabled: true,
|
|
40
|
-
};
|
|
41
|
-
this.tokens.set(id, stored);
|
|
42
|
-
await this.persistToken(stored);
|
|
43
|
-
logger.log('info', `API token '${name}' created (id: ${id})`);
|
|
44
|
-
return { id, rawToken };
|
|
45
|
-
}
|
|
46
|
-
/**
|
|
47
|
-
* Validate a raw token string. Returns the stored token if valid, null otherwise.
|
|
48
|
-
* Also updates lastUsedAt.
|
|
49
|
-
*/
|
|
50
|
-
async validateToken(rawToken) {
|
|
51
|
-
if (!rawToken.startsWith(TOKEN_PREFIX_STR))
|
|
52
|
-
return null;
|
|
53
|
-
const hash = plugins.crypto.createHash('sha256').update(rawToken).digest('hex');
|
|
54
|
-
for (const stored of this.tokens.values()) {
|
|
55
|
-
if (stored.tokenHash === hash) {
|
|
56
|
-
if (!stored.enabled)
|
|
57
|
-
return null;
|
|
58
|
-
if (stored.expiresAt !== null && stored.expiresAt < Date.now())
|
|
59
|
-
return null;
|
|
60
|
-
// Update lastUsedAt (fire and forget)
|
|
61
|
-
stored.lastUsedAt = Date.now();
|
|
62
|
-
this.persistToken(stored).catch(() => { });
|
|
63
|
-
return stored;
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
return null;
|
|
67
|
-
}
|
|
68
|
-
/**
|
|
69
|
-
* Check if a token has a specific scope.
|
|
70
|
-
*/
|
|
71
|
-
hasScope(token, scope) {
|
|
72
|
-
return token.scopes.includes(scope);
|
|
73
|
-
}
|
|
74
|
-
/**
|
|
75
|
-
* List all tokens (safe info only, no hashes).
|
|
76
|
-
*/
|
|
77
|
-
listTokens() {
|
|
78
|
-
const result = [];
|
|
79
|
-
for (const stored of this.tokens.values()) {
|
|
80
|
-
result.push({
|
|
81
|
-
id: stored.id,
|
|
82
|
-
name: stored.name,
|
|
83
|
-
scopes: stored.scopes,
|
|
84
|
-
createdAt: stored.createdAt,
|
|
85
|
-
expiresAt: stored.expiresAt,
|
|
86
|
-
lastUsedAt: stored.lastUsedAt,
|
|
87
|
-
enabled: stored.enabled,
|
|
88
|
-
});
|
|
89
|
-
}
|
|
90
|
-
return result;
|
|
91
|
-
}
|
|
92
|
-
/**
|
|
93
|
-
* Revoke (delete) a token.
|
|
94
|
-
*/
|
|
95
|
-
async revokeToken(id) {
|
|
96
|
-
if (!this.tokens.has(id))
|
|
97
|
-
return false;
|
|
98
|
-
const token = this.tokens.get(id);
|
|
99
|
-
this.tokens.delete(id);
|
|
100
|
-
await this.storageManager.delete(`${TOKENS_PREFIX}${id}.json`);
|
|
101
|
-
logger.log('info', `API token '${token.name}' revoked (id: ${id})`);
|
|
102
|
-
return true;
|
|
103
|
-
}
|
|
104
|
-
/**
|
|
105
|
-
* Roll (regenerate) a token's secret while keeping its identity.
|
|
106
|
-
* Returns the new raw token value (shown once).
|
|
107
|
-
*/
|
|
108
|
-
async rollToken(id) {
|
|
109
|
-
const stored = this.tokens.get(id);
|
|
110
|
-
if (!stored)
|
|
111
|
-
return null;
|
|
112
|
-
const randomBytes = plugins.crypto.randomBytes(32);
|
|
113
|
-
const rawPayload = `${id}:${randomBytes.toString('base64url')}`;
|
|
114
|
-
const rawToken = `${TOKEN_PREFIX_STR}${rawPayload}`;
|
|
115
|
-
stored.tokenHash = plugins.crypto.createHash('sha256').update(rawToken).digest('hex');
|
|
116
|
-
await this.persistToken(stored);
|
|
117
|
-
logger.log('info', `API token '${stored.name}' rolled (id: ${id})`);
|
|
118
|
-
return { id, rawToken };
|
|
119
|
-
}
|
|
120
|
-
/**
|
|
121
|
-
* Enable or disable a token.
|
|
122
|
-
*/
|
|
123
|
-
async toggleToken(id, enabled) {
|
|
124
|
-
const stored = this.tokens.get(id);
|
|
125
|
-
if (!stored)
|
|
126
|
-
return false;
|
|
127
|
-
stored.enabled = enabled;
|
|
128
|
-
await this.persistToken(stored);
|
|
129
|
-
logger.log('info', `API token '${stored.name}' ${enabled ? 'enabled' : 'disabled'} (id: ${id})`);
|
|
130
|
-
return true;
|
|
131
|
-
}
|
|
132
|
-
// =========================================================================
|
|
133
|
-
// Private
|
|
134
|
-
// =========================================================================
|
|
135
|
-
async loadTokens() {
|
|
136
|
-
const keys = await this.storageManager.list(TOKENS_PREFIX);
|
|
137
|
-
for (const key of keys) {
|
|
138
|
-
if (!key.endsWith('.json'))
|
|
139
|
-
continue;
|
|
140
|
-
const stored = await this.storageManager.getJSON(key);
|
|
141
|
-
if (stored?.id) {
|
|
142
|
-
this.tokens.set(stored.id, stored);
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
async persistToken(stored) {
|
|
147
|
-
await this.storageManager.setJSON(`${TOKENS_PREFIX}${stored.id}.json`, stored);
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5hcGktdG9rZW4tbWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3RzL2NvbmZpZy9jbGFzc2VzLmFwaS10b2tlbi1tYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFRdEMsTUFBTSxhQUFhLEdBQUcscUJBQXFCLENBQUM7QUFDNUMsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLENBQUM7QUFFaEMsTUFBTSxPQUFPLGVBQWU7SUFHTjtJQUZaLE1BQU0sR0FBRyxJQUFJLEdBQUcsRUFBMkIsQ0FBQztJQUVwRCxZQUFvQixjQUE4QjtRQUE5QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7SUFBRyxDQUFDO0lBRS9DLEtBQUssQ0FBQyxVQUFVO1FBQ3JCLE1BQU0sSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3hCLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDekIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsVUFBVSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksNEJBQTRCLENBQUMsQ0FBQztRQUM3RSxDQUFDO0lBQ0gsQ0FBQztJQUVELDRFQUE0RTtJQUM1RSxrQkFBa0I7SUFDbEIsNEVBQTRFO0lBRTVFOztPQUVHO0lBQ0ksS0FBSyxDQUFDLFdBQVcsQ0FDdEIsSUFBWSxFQUNaLE1BQXdCLEVBQ3hCLGFBQTRCLEVBQzVCLFNBQWlCO1FBRWpCLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDN0IsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDbkQsTUFBTSxVQUFVLEdBQUcsR0FBRyxFQUFFLElB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
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import * as plugins from '../plugins.js';
|
|
2
|
-
import type { StorageManager } from '../storage/index.js';
|
|
3
|
-
import type { IMergedRoute, IRouteWarning } from '../../dist_ts_interfaces/data/route-management.js';
|
|
4
|
-
export declare class RouteConfigManager {
|
|
5
|
-
private storageManager;
|
|
6
|
-
private getHardcodedRoutes;
|
|
7
|
-
private getSmartProxy;
|
|
8
|
-
private storedRoutes;
|
|
9
|
-
private overrides;
|
|
10
|
-
private warnings;
|
|
11
|
-
constructor(storageManager: StorageManager, getHardcodedRoutes: () => plugins.smartproxy.IRouteConfig[], getSmartProxy: () => plugins.smartproxy.SmartProxy | undefined);
|
|
12
|
-
/**
|
|
13
|
-
* Load persisted routes and overrides, compute warnings, apply to SmartProxy.
|
|
14
|
-
*/
|
|
15
|
-
initialize(): Promise<void>;
|
|
16
|
-
getMergedRoutes(): {
|
|
17
|
-
routes: IMergedRoute[];
|
|
18
|
-
warnings: IRouteWarning[];
|
|
19
|
-
};
|
|
20
|
-
createRoute(route: plugins.smartproxy.IRouteConfig, createdBy: string, enabled?: boolean): Promise<string>;
|
|
21
|
-
updateRoute(id: string, patch: {
|
|
22
|
-
route?: Partial<plugins.smartproxy.IRouteConfig>;
|
|
23
|
-
enabled?: boolean;
|
|
24
|
-
}): Promise<boolean>;
|
|
25
|
-
deleteRoute(id: string): Promise<boolean>;
|
|
26
|
-
toggleRoute(id: string, enabled: boolean): Promise<boolean>;
|
|
27
|
-
setOverride(routeName: string, enabled: boolean, updatedBy: string): Promise<void>;
|
|
28
|
-
removeOverride(routeName: string): Promise<boolean>;
|
|
29
|
-
private loadStoredRoutes;
|
|
30
|
-
private loadOverrides;
|
|
31
|
-
private persistRoute;
|
|
32
|
-
private computeWarnings;
|
|
33
|
-
private logWarnings;
|
|
34
|
-
private applyRoutes;
|
|
35
|
-
}
|
|
@@ -1,231 +0,0 @@
|
|
|
1
|
-
import * as plugins from '../plugins.js';
|
|
2
|
-
import { logger } from '../logger.js';
|
|
3
|
-
const ROUTES_PREFIX = '/config-api/routes/';
|
|
4
|
-
const OVERRIDES_PREFIX = '/config-api/overrides/';
|
|
5
|
-
export class RouteConfigManager {
|
|
6
|
-
storageManager;
|
|
7
|
-
getHardcodedRoutes;
|
|
8
|
-
getSmartProxy;
|
|
9
|
-
storedRoutes = new Map();
|
|
10
|
-
overrides = new Map();
|
|
11
|
-
warnings = [];
|
|
12
|
-
constructor(storageManager, getHardcodedRoutes, getSmartProxy) {
|
|
13
|
-
this.storageManager = storageManager;
|
|
14
|
-
this.getHardcodedRoutes = getHardcodedRoutes;
|
|
15
|
-
this.getSmartProxy = getSmartProxy;
|
|
16
|
-
}
|
|
17
|
-
/**
|
|
18
|
-
* Load persisted routes and overrides, compute warnings, apply to SmartProxy.
|
|
19
|
-
*/
|
|
20
|
-
async initialize() {
|
|
21
|
-
await this.loadStoredRoutes();
|
|
22
|
-
await this.loadOverrides();
|
|
23
|
-
this.computeWarnings();
|
|
24
|
-
this.logWarnings();
|
|
25
|
-
await this.applyRoutes();
|
|
26
|
-
}
|
|
27
|
-
// =========================================================================
|
|
28
|
-
// Merged view
|
|
29
|
-
// =========================================================================
|
|
30
|
-
getMergedRoutes() {
|
|
31
|
-
const merged = [];
|
|
32
|
-
// Hardcoded routes
|
|
33
|
-
for (const route of this.getHardcodedRoutes()) {
|
|
34
|
-
const name = route.name || '';
|
|
35
|
-
const override = this.overrides.get(name);
|
|
36
|
-
merged.push({
|
|
37
|
-
route,
|
|
38
|
-
source: 'hardcoded',
|
|
39
|
-
enabled: override ? override.enabled : true,
|
|
40
|
-
overridden: !!override,
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
|
-
// Programmatic routes
|
|
44
|
-
for (const stored of this.storedRoutes.values()) {
|
|
45
|
-
merged.push({
|
|
46
|
-
route: stored.route,
|
|
47
|
-
source: 'programmatic',
|
|
48
|
-
enabled: stored.enabled,
|
|
49
|
-
overridden: false,
|
|
50
|
-
storedRouteId: stored.id,
|
|
51
|
-
createdAt: stored.createdAt,
|
|
52
|
-
updatedAt: stored.updatedAt,
|
|
53
|
-
});
|
|
54
|
-
}
|
|
55
|
-
return { routes: merged, warnings: [...this.warnings] };
|
|
56
|
-
}
|
|
57
|
-
// =========================================================================
|
|
58
|
-
// Programmatic route CRUD
|
|
59
|
-
// =========================================================================
|
|
60
|
-
async createRoute(route, createdBy, enabled = true) {
|
|
61
|
-
const id = plugins.uuid.v4();
|
|
62
|
-
const now = Date.now();
|
|
63
|
-
// Ensure route has a name
|
|
64
|
-
if (!route.name) {
|
|
65
|
-
route.name = `programmatic-${id.slice(0, 8)}`;
|
|
66
|
-
}
|
|
67
|
-
const stored = {
|
|
68
|
-
id,
|
|
69
|
-
route,
|
|
70
|
-
enabled,
|
|
71
|
-
createdAt: now,
|
|
72
|
-
updatedAt: now,
|
|
73
|
-
createdBy,
|
|
74
|
-
};
|
|
75
|
-
this.storedRoutes.set(id, stored);
|
|
76
|
-
await this.persistRoute(stored);
|
|
77
|
-
await this.applyRoutes();
|
|
78
|
-
return id;
|
|
79
|
-
}
|
|
80
|
-
async updateRoute(id, patch) {
|
|
81
|
-
const stored = this.storedRoutes.get(id);
|
|
82
|
-
if (!stored)
|
|
83
|
-
return false;
|
|
84
|
-
if (patch.route) {
|
|
85
|
-
stored.route = { ...stored.route, ...patch.route };
|
|
86
|
-
}
|
|
87
|
-
if (patch.enabled !== undefined) {
|
|
88
|
-
stored.enabled = patch.enabled;
|
|
89
|
-
}
|
|
90
|
-
stored.updatedAt = Date.now();
|
|
91
|
-
await this.persistRoute(stored);
|
|
92
|
-
await this.applyRoutes();
|
|
93
|
-
return true;
|
|
94
|
-
}
|
|
95
|
-
async deleteRoute(id) {
|
|
96
|
-
if (!this.storedRoutes.has(id))
|
|
97
|
-
return false;
|
|
98
|
-
this.storedRoutes.delete(id);
|
|
99
|
-
await this.storageManager.delete(`${ROUTES_PREFIX}${id}.json`);
|
|
100
|
-
await this.applyRoutes();
|
|
101
|
-
return true;
|
|
102
|
-
}
|
|
103
|
-
async toggleRoute(id, enabled) {
|
|
104
|
-
return this.updateRoute(id, { enabled });
|
|
105
|
-
}
|
|
106
|
-
// =========================================================================
|
|
107
|
-
// Hardcoded route overrides
|
|
108
|
-
// =========================================================================
|
|
109
|
-
async setOverride(routeName, enabled, updatedBy) {
|
|
110
|
-
const override = {
|
|
111
|
-
routeName,
|
|
112
|
-
enabled,
|
|
113
|
-
updatedAt: Date.now(),
|
|
114
|
-
updatedBy,
|
|
115
|
-
};
|
|
116
|
-
this.overrides.set(routeName, override);
|
|
117
|
-
await this.storageManager.setJSON(`${OVERRIDES_PREFIX}${routeName}.json`, override);
|
|
118
|
-
this.computeWarnings();
|
|
119
|
-
await this.applyRoutes();
|
|
120
|
-
}
|
|
121
|
-
async removeOverride(routeName) {
|
|
122
|
-
if (!this.overrides.has(routeName))
|
|
123
|
-
return false;
|
|
124
|
-
this.overrides.delete(routeName);
|
|
125
|
-
await this.storageManager.delete(`${OVERRIDES_PREFIX}${routeName}.json`);
|
|
126
|
-
this.computeWarnings();
|
|
127
|
-
await this.applyRoutes();
|
|
128
|
-
return true;
|
|
129
|
-
}
|
|
130
|
-
// =========================================================================
|
|
131
|
-
// Private: persistence
|
|
132
|
-
// =========================================================================
|
|
133
|
-
async loadStoredRoutes() {
|
|
134
|
-
const keys = await this.storageManager.list(ROUTES_PREFIX);
|
|
135
|
-
for (const key of keys) {
|
|
136
|
-
if (!key.endsWith('.json'))
|
|
137
|
-
continue;
|
|
138
|
-
const stored = await this.storageManager.getJSON(key);
|
|
139
|
-
if (stored?.id) {
|
|
140
|
-
this.storedRoutes.set(stored.id, stored);
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
if (this.storedRoutes.size > 0) {
|
|
144
|
-
logger.log('info', `Loaded ${this.storedRoutes.size} programmatic route(s) from storage`);
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
async loadOverrides() {
|
|
148
|
-
const keys = await this.storageManager.list(OVERRIDES_PREFIX);
|
|
149
|
-
for (const key of keys) {
|
|
150
|
-
if (!key.endsWith('.json'))
|
|
151
|
-
continue;
|
|
152
|
-
const override = await this.storageManager.getJSON(key);
|
|
153
|
-
if (override?.routeName) {
|
|
154
|
-
this.overrides.set(override.routeName, override);
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
if (this.overrides.size > 0) {
|
|
158
|
-
logger.log('info', `Loaded ${this.overrides.size} route override(s) from storage`);
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
async persistRoute(stored) {
|
|
162
|
-
await this.storageManager.setJSON(`${ROUTES_PREFIX}${stored.id}.json`, stored);
|
|
163
|
-
}
|
|
164
|
-
// =========================================================================
|
|
165
|
-
// Private: warnings
|
|
166
|
-
// =========================================================================
|
|
167
|
-
computeWarnings() {
|
|
168
|
-
this.warnings = [];
|
|
169
|
-
const hardcodedNames = new Set(this.getHardcodedRoutes().map((r) => r.name || ''));
|
|
170
|
-
// Check overrides
|
|
171
|
-
for (const [routeName, override] of this.overrides) {
|
|
172
|
-
if (!hardcodedNames.has(routeName)) {
|
|
173
|
-
this.warnings.push({
|
|
174
|
-
type: 'orphaned-override',
|
|
175
|
-
routeName,
|
|
176
|
-
message: `Orphaned override for route '${routeName}' — hardcoded route no longer exists`,
|
|
177
|
-
});
|
|
178
|
-
}
|
|
179
|
-
else if (!override.enabled) {
|
|
180
|
-
this.warnings.push({
|
|
181
|
-
type: 'disabled-hardcoded',
|
|
182
|
-
routeName,
|
|
183
|
-
message: `Route '${routeName}' is disabled via API override`,
|
|
184
|
-
});
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
// Check disabled programmatic routes
|
|
188
|
-
for (const stored of this.storedRoutes.values()) {
|
|
189
|
-
if (!stored.enabled) {
|
|
190
|
-
const name = stored.route.name || stored.id;
|
|
191
|
-
this.warnings.push({
|
|
192
|
-
type: 'disabled-programmatic',
|
|
193
|
-
routeName: name,
|
|
194
|
-
message: `Programmatic route '${name}' (id: ${stored.id}) is disabled`,
|
|
195
|
-
});
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
logWarnings() {
|
|
200
|
-
for (const w of this.warnings) {
|
|
201
|
-
logger.log('warn', w.message);
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
// =========================================================================
|
|
205
|
-
// Private: apply merged routes to SmartProxy
|
|
206
|
-
// =========================================================================
|
|
207
|
-
async applyRoutes() {
|
|
208
|
-
const smartProxy = this.getSmartProxy();
|
|
209
|
-
if (!smartProxy)
|
|
210
|
-
return;
|
|
211
|
-
const enabledRoutes = [];
|
|
212
|
-
// Add enabled hardcoded routes (respecting overrides)
|
|
213
|
-
for (const route of this.getHardcodedRoutes()) {
|
|
214
|
-
const name = route.name || '';
|
|
215
|
-
const override = this.overrides.get(name);
|
|
216
|
-
if (override && !override.enabled) {
|
|
217
|
-
continue; // Skip disabled hardcoded route
|
|
218
|
-
}
|
|
219
|
-
enabledRoutes.push(route);
|
|
220
|
-
}
|
|
221
|
-
// Add enabled programmatic routes
|
|
222
|
-
for (const stored of this.storedRoutes.values()) {
|
|
223
|
-
if (stored.enabled) {
|
|
224
|
-
enabledRoutes.push(stored.route);
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
await smartProxy.updateRoutes(enabledRoutes);
|
|
228
|
-
logger.log('info', `Applied ${enabledRoutes.length} routes to SmartProxy (${this.storedRoutes.size} programmatic, ${this.overrides.size} overrides)`);
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5yb3V0ZS1jb25maWctbWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3RzL2NvbmZpZy9jbGFzc2VzLnJvdXRlLWNvbmZpZy1tYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFTdEMsTUFBTSxhQUFhLEdBQUcscUJBQXFCLENBQUM7QUFDNUMsTUFBTSxnQkFBZ0IsR0FBRyx3QkFBd0IsQ0FBQztBQUVsRCxNQUFNLE9BQU8sa0JBQWtCO0lBTW5CO0lBQ0E7SUFDQTtJQVBGLFlBQVksR0FBRyxJQUFJLEdBQUcsRUFBd0IsQ0FBQztJQUMvQyxTQUFTLEdBQUcsSUFBSSxHQUFHLEVBQTBCLENBQUM7SUFDOUMsUUFBUSxHQUFvQixFQUFFLENBQUM7SUFFdkMsWUFDVSxjQUE4QixFQUM5QixrQkFBMkQsRUFDM0QsYUFBOEQ7UUFGOUQsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBeUM7UUFDM0Qsa0JBQWEsR0FBYixhQUFhLENBQWlEO0lBQ3JFLENBQUM7SUFFSjs7T0FFRztJQUNJLEtBQUssQ0FBQyxVQUFVO1FBQ3JCLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDOUIsTUFBTSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNuQixNQUFNLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsNEVBQTRFO0lBQzVFLGNBQWM7SUFDZCw0RUFBNEU7SUFFckUsZUFBZTtRQUNwQixNQUFNLE1BQU0sR0FBbUIsRUFBRSxDQUFDO1FBRWxDLG1CQUFtQjtRQUNuQixLQUFLLE1B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
|
package/dist_ts/config/index.js
DELETED
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
// Export validation tools only
|
|
2
|
-
export * from './validator.js';
|
|
3
|
-
export { RouteConfigManager } from './classes.route-config-manager.js';
|
|
4
|
-
export { ApiTokenManager } from './classes.api-token-manager.js';
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9jb25maWcvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBQy9CLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDdkUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDIn0=
|