@serve.zone/dcrouter 11.13.0 → 11.14.0
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 +2 -2
- package/package.json +1 -1
- package/readme.md +107 -3
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts_web/00_commitinfo_data.ts +1 -1
- package/ts_web/readme.md +17 -0
- package/ts_web/router.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/classes.cached.document.d.ts +0 -76
- package/dist_ts/cache/classes.cached.document.js +0 -100
- package/dist_ts/cache/classes.cachedb.d.ts +0 -60
- package/dist_ts/cache/classes.cachedb.js +0 -126
- 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 -54
- package/dist_ts/classes.cert-provision-scheduler.js +0 -118
- package/dist_ts/classes.dcrouter.d.ts +0 -386
- package/dist_ts/classes.dcrouter.js +0 -1682
- 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 -38
- package/dist_ts/config/classes.route-config-manager.js +0 -256
- 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/http3/http3-route-augmentation.d.ts +0 -50
- package/dist_ts/http3/http3-route-augmentation.js +0 -98
- package/dist_ts/http3/index.d.ts +0 -1
- package/dist_ts/http3/index.js +0 -2
- package/dist_ts/index.d.ts +0 -8
- package/dist_ts/index.js +0 -29
- 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 -184
- package/dist_ts/monitoring/classes.metricsmanager.js +0 -744
- 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 -38
- package/dist_ts/opsserver/classes.opsserver.js +0 -87
- 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 -12
- package/dist_ts/opsserver/handlers/index.js +0 -13
- 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 -233
- package/dist_ts/opsserver/handlers/stats.handler.d.ts +0 -11
- package/dist_ts/opsserver/handlers/stats.handler.js +0 -403
- package/dist_ts/opsserver/handlers/vpn.handler.d.ts +0 -6
- package/dist_ts/opsserver/handlers/vpn.handler.js +0 -199
- 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 -81
- package/dist_ts/plugins.js +0 -115
- package/dist_ts/radius/classes.accounting.manager.d.ts +0 -231
- package/dist_ts/radius/classes.accounting.manager.js +0 -462
- package/dist_ts/radius/classes.radius.server.d.ts +0 -171
- package/dist_ts/radius/classes.radius.server.js +0 -386
- 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 -94
- package/dist_ts/remoteingress/classes.remoteingress-manager.js +0 -271
- 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 -235
- 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 -348
- package/dist_ts/storage/index.d.ts +0 -1
- package/dist_ts/storage/index.js +0 -3
- package/dist_ts/vpn/classes.vpn-manager.d.ts +0 -113
- package/dist_ts/vpn/classes.vpn-manager.js +0 -297
- package/dist_ts/vpn/index.d.ts +0 -1
- package/dist_ts/vpn/index.js +0 -2
- package/dist_ts_apiclient/classes.apitoken.d.ts +0 -41
- package/dist_ts_apiclient/classes.apitoken.js +0 -115
- package/dist_ts_apiclient/classes.certificate.d.ts +0 -57
- package/dist_ts_apiclient/classes.certificate.js +0 -69
- package/dist_ts_apiclient/classes.config.d.ts +0 -7
- package/dist_ts_apiclient/classes.config.js +0 -11
- package/dist_ts_apiclient/classes.dcrouterapiclient.d.ts +0 -41
- package/dist_ts_apiclient/classes.dcrouterapiclient.js +0 -81
- package/dist_ts_apiclient/classes.email.d.ts +0 -30
- package/dist_ts_apiclient/classes.email.js +0 -52
- package/dist_ts_apiclient/classes.logs.d.ts +0 -21
- package/dist_ts_apiclient/classes.logs.js +0 -14
- package/dist_ts_apiclient/classes.radius.d.ts +0 -59
- package/dist_ts_apiclient/classes.radius.js +0 -95
- package/dist_ts_apiclient/classes.remoteingress.d.ts +0 -54
- package/dist_ts_apiclient/classes.remoteingress.js +0 -136
- package/dist_ts_apiclient/classes.route.d.ts +0 -42
- package/dist_ts_apiclient/classes.route.js +0 -154
- package/dist_ts_apiclient/classes.stats.d.ts +0 -47
- package/dist_ts_apiclient/classes.stats.js +0 -38
- package/dist_ts_apiclient/index.d.ts +0 -10
- package/dist_ts_apiclient/index.js +0 -14
- package/dist_ts_apiclient/plugins.d.ts +0 -3
- package/dist_ts_apiclient/plugins.js +0 -5
- package/dist_ts_web/00_commitinfo_data.d.ts +0 -8
- package/dist_ts_web/00_commitinfo_data.js +0 -9
- package/dist_ts_web/appstate.d.ts +0 -238
- package/dist_ts_web/appstate.js +0 -1174
- package/dist_ts_web/elements/index.d.ts +0 -13
- package/dist_ts_web/elements/index.js +0 -14
- package/dist_ts_web/elements/ops-dashboard.d.ts +0 -23
- package/dist_ts_web/elements/ops-dashboard.js +0 -323
- package/dist_ts_web/elements/ops-view-apitokens.d.ts +0 -13
- package/dist_ts_web/elements/ops-view-apitokens.js +0 -371
- package/dist_ts_web/elements/ops-view-certificates.d.ts +0 -22
- package/dist_ts_web/elements/ops-view-certificates.js +0 -528
- package/dist_ts_web/elements/ops-view-config.d.ts +0 -19
- package/dist_ts_web/elements/ops-view-config.js +0 -339
- package/dist_ts_web/elements/ops-view-emails.d.ts +0 -21
- package/dist_ts_web/elements/ops-view-emails.js +0 -165
- package/dist_ts_web/elements/ops-view-logs.d.ts +0 -13
- package/dist_ts_web/elements/ops-view-logs.js +0 -159
- package/dist_ts_web/elements/ops-view-network.d.ts +0 -71
- package/dist_ts_web/elements/ops-view-network.js +0 -764
- package/dist_ts_web/elements/ops-view-overview.d.ts +0 -22
- package/dist_ts_web/elements/ops-view-overview.js +0 -456
- package/dist_ts_web/elements/ops-view-remoteingress.d.ts +0 -20
- package/dist_ts_web/elements/ops-view-remoteingress.js +0 -494
- package/dist_ts_web/elements/ops-view-routes.d.ts +0 -12
- package/dist_ts_web/elements/ops-view-routes.js +0 -404
- package/dist_ts_web/elements/ops-view-security.d.ts +0 -21
- package/dist_ts_web/elements/ops-view-security.js +0 -574
- package/dist_ts_web/elements/ops-view-vpn.d.ts +0 -14
- package/dist_ts_web/elements/ops-view-vpn.js +0 -369
- package/dist_ts_web/elements/shared/css.d.ts +0 -1
- package/dist_ts_web/elements/shared/css.js +0 -10
- package/dist_ts_web/elements/shared/index.d.ts +0 -2
- package/dist_ts_web/elements/shared/index.js +0 -3
- package/dist_ts_web/elements/shared/ops-sectionheading.d.ts +0 -5
- package/dist_ts_web/elements/shared/ops-sectionheading.js +0 -82
- package/dist_ts_web/index.d.ts +0 -1
- package/dist_ts_web/index.js +0 -10
- package/dist_ts_web/plugins.d.ts +0 -6
- package/dist_ts_web/plugins.js +0 -11
- package/dist_ts_web/router.d.ts +0 -19
- package/dist_ts_web/router.js +0 -91
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import * as plugins from './plugins.js';
|
|
2
|
-
import { StorageManager } from './storage/index.js';
|
|
3
|
-
/**
|
|
4
|
-
* ICertManager implementation backed by StorageManager.
|
|
5
|
-
* Persists SmartAcme certificates under a /certs/ key prefix so they
|
|
6
|
-
* survive process restarts without re-hitting ACME.
|
|
7
|
-
*/
|
|
8
|
-
export declare class StorageBackedCertManager implements plugins.smartacme.ICertManager {
|
|
9
|
-
private storageManager;
|
|
10
|
-
private keyPrefix;
|
|
11
|
-
constructor(storageManager: StorageManager);
|
|
12
|
-
init(): Promise<void>;
|
|
13
|
-
retrieveCertificate(domainName: string): Promise<plugins.smartacme.Cert | null>;
|
|
14
|
-
storeCertificate(cert: plugins.smartacme.Cert): Promise<void>;
|
|
15
|
-
deleteCertificate(domainName: string): Promise<void>;
|
|
16
|
-
close(): Promise<void>;
|
|
17
|
-
wipe(): Promise<void>;
|
|
18
|
-
}
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
import * as plugins from './plugins.js';
|
|
2
|
-
import { StorageManager } from './storage/index.js';
|
|
3
|
-
/**
|
|
4
|
-
* ICertManager implementation backed by StorageManager.
|
|
5
|
-
* Persists SmartAcme certificates under a /certs/ key prefix so they
|
|
6
|
-
* survive process restarts without re-hitting ACME.
|
|
7
|
-
*/
|
|
8
|
-
export class StorageBackedCertManager {
|
|
9
|
-
storageManager;
|
|
10
|
-
keyPrefix = '/certs/';
|
|
11
|
-
constructor(storageManager) {
|
|
12
|
-
this.storageManager = storageManager;
|
|
13
|
-
}
|
|
14
|
-
async init() { }
|
|
15
|
-
async retrieveCertificate(domainName) {
|
|
16
|
-
const data = await this.storageManager.getJSON(this.keyPrefix + domainName);
|
|
17
|
-
if (!data)
|
|
18
|
-
return null;
|
|
19
|
-
return new plugins.smartacme.Cert(data);
|
|
20
|
-
}
|
|
21
|
-
async storeCertificate(cert) {
|
|
22
|
-
await this.storageManager.setJSON(this.keyPrefix + cert.domainName, {
|
|
23
|
-
id: cert.id,
|
|
24
|
-
domainName: cert.domainName,
|
|
25
|
-
created: cert.created,
|
|
26
|
-
privateKey: cert.privateKey,
|
|
27
|
-
publicKey: cert.publicKey,
|
|
28
|
-
csr: cert.csr,
|
|
29
|
-
validUntil: cert.validUntil,
|
|
30
|
-
});
|
|
31
|
-
}
|
|
32
|
-
async deleteCertificate(domainName) {
|
|
33
|
-
await this.storageManager.delete(this.keyPrefix + domainName);
|
|
34
|
-
}
|
|
35
|
-
async close() { }
|
|
36
|
-
async wipe() {
|
|
37
|
-
const keys = await this.storageManager.list(this.keyPrefix);
|
|
38
|
-
for (const key of keys) {
|
|
39
|
-
await this.storageManager.delete(key);
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5zdG9yYWdlLWNlcnQtbWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL2NsYXNzZXMuc3RvcmFnZS1jZXJ0LW1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFDeEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXBEOzs7O0dBSUc7QUFDSCxNQUFNLE9BQU8sd0JBQXdCO0lBR2Y7SUFGWixTQUFTLEdBQUcsU0FBUyxDQUFDO0lBRTlCLFlBQW9CLGNBQThCO1FBQTlCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtJQUFHLENBQUM7SUFFdEQsS0FBSyxDQUFDLElBQUksS0FBbUIsQ0FBQztJQUU5QixLQUFLLENBQUMsbUJBQW1CLENBQUMsVUFBa0I7UUFDMUMsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLFVBQVUsQ0FBQyxDQUFDO1FBQzVFLElBQUksQ0FBQyxJQUFJO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDdkIsT0FBTyxJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRCxLQUFLLENBQUMsZ0JBQWdCLENBQUMsSUFBNEI7UUFDakQsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDbEUsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFO1lBQ1gsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO1lBQzNCLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztZQUNyQixVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7WUFDM0IsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO1lBQ3pCLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRztZQUNiLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTtTQUM1QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsS0FBSyxDQUFDLGlCQUFpQixDQUFDLFVBQWtCO1FBQ3hDLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxVQUFVLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRUQsS0FBSyxDQUFDLEtBQUssS0FBbUIsQ0FBQztJQUUvQixLQUFLLENBQUMsSUFBSTtRQUNSLE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzVELEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7WUFDdkIsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN4QyxDQUFDO0lBQ0gsQ0FBQztDQUNGIn0=
|
|
@@ -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,38 +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
|
-
import { type IHttp3Config } from '../http3/index.js';
|
|
5
|
-
export declare class RouteConfigManager {
|
|
6
|
-
private storageManager;
|
|
7
|
-
private getHardcodedRoutes;
|
|
8
|
-
private getSmartProxy;
|
|
9
|
-
private getHttp3Config?;
|
|
10
|
-
private getVpnSubnet?;
|
|
11
|
-
private storedRoutes;
|
|
12
|
-
private overrides;
|
|
13
|
-
private warnings;
|
|
14
|
-
constructor(storageManager: StorageManager, getHardcodedRoutes: () => plugins.smartproxy.IRouteConfig[], getSmartProxy: () => plugins.smartproxy.SmartProxy | undefined, getHttp3Config?: (() => IHttp3Config | undefined) | undefined, getVpnSubnet?: (() => string | undefined) | undefined);
|
|
15
|
-
/**
|
|
16
|
-
* Load persisted routes and overrides, compute warnings, apply to SmartProxy.
|
|
17
|
-
*/
|
|
18
|
-
initialize(): Promise<void>;
|
|
19
|
-
getMergedRoutes(): {
|
|
20
|
-
routes: IMergedRoute[];
|
|
21
|
-
warnings: IRouteWarning[];
|
|
22
|
-
};
|
|
23
|
-
createRoute(route: plugins.smartproxy.IRouteConfig, createdBy: string, enabled?: boolean): Promise<string>;
|
|
24
|
-
updateRoute(id: string, patch: {
|
|
25
|
-
route?: Partial<plugins.smartproxy.IRouteConfig>;
|
|
26
|
-
enabled?: boolean;
|
|
27
|
-
}): Promise<boolean>;
|
|
28
|
-
deleteRoute(id: string): Promise<boolean>;
|
|
29
|
-
toggleRoute(id: string, enabled: boolean): Promise<boolean>;
|
|
30
|
-
setOverride(routeName: string, enabled: boolean, updatedBy: string): Promise<void>;
|
|
31
|
-
removeOverride(routeName: string): Promise<boolean>;
|
|
32
|
-
private loadStoredRoutes;
|
|
33
|
-
private loadOverrides;
|
|
34
|
-
private persistRoute;
|
|
35
|
-
private computeWarnings;
|
|
36
|
-
private logWarnings;
|
|
37
|
-
private applyRoutes;
|
|
38
|
-
}
|
|
@@ -1,256 +0,0 @@
|
|
|
1
|
-
import * as plugins from '../plugins.js';
|
|
2
|
-
import { logger } from '../logger.js';
|
|
3
|
-
import { augmentRouteWithHttp3 } from '../http3/index.js';
|
|
4
|
-
const ROUTES_PREFIX = '/config-api/routes/';
|
|
5
|
-
const OVERRIDES_PREFIX = '/config-api/overrides/';
|
|
6
|
-
export class RouteConfigManager {
|
|
7
|
-
storageManager;
|
|
8
|
-
getHardcodedRoutes;
|
|
9
|
-
getSmartProxy;
|
|
10
|
-
getHttp3Config;
|
|
11
|
-
getVpnSubnet;
|
|
12
|
-
storedRoutes = new Map();
|
|
13
|
-
overrides = new Map();
|
|
14
|
-
warnings = [];
|
|
15
|
-
constructor(storageManager, getHardcodedRoutes, getSmartProxy, getHttp3Config, getVpnSubnet) {
|
|
16
|
-
this.storageManager = storageManager;
|
|
17
|
-
this.getHardcodedRoutes = getHardcodedRoutes;
|
|
18
|
-
this.getSmartProxy = getSmartProxy;
|
|
19
|
-
this.getHttp3Config = getHttp3Config;
|
|
20
|
-
this.getVpnSubnet = getVpnSubnet;
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* Load persisted routes and overrides, compute warnings, apply to SmartProxy.
|
|
24
|
-
*/
|
|
25
|
-
async initialize() {
|
|
26
|
-
await this.loadStoredRoutes();
|
|
27
|
-
await this.loadOverrides();
|
|
28
|
-
this.computeWarnings();
|
|
29
|
-
this.logWarnings();
|
|
30
|
-
await this.applyRoutes();
|
|
31
|
-
}
|
|
32
|
-
// =========================================================================
|
|
33
|
-
// Merged view
|
|
34
|
-
// =========================================================================
|
|
35
|
-
getMergedRoutes() {
|
|
36
|
-
const merged = [];
|
|
37
|
-
// Hardcoded routes
|
|
38
|
-
for (const route of this.getHardcodedRoutes()) {
|
|
39
|
-
const name = route.name || '';
|
|
40
|
-
const override = this.overrides.get(name);
|
|
41
|
-
merged.push({
|
|
42
|
-
route,
|
|
43
|
-
source: 'hardcoded',
|
|
44
|
-
enabled: override ? override.enabled : true,
|
|
45
|
-
overridden: !!override,
|
|
46
|
-
});
|
|
47
|
-
}
|
|
48
|
-
// Programmatic routes
|
|
49
|
-
for (const stored of this.storedRoutes.values()) {
|
|
50
|
-
merged.push({
|
|
51
|
-
route: stored.route,
|
|
52
|
-
source: 'programmatic',
|
|
53
|
-
enabled: stored.enabled,
|
|
54
|
-
overridden: false,
|
|
55
|
-
storedRouteId: stored.id,
|
|
56
|
-
createdAt: stored.createdAt,
|
|
57
|
-
updatedAt: stored.updatedAt,
|
|
58
|
-
});
|
|
59
|
-
}
|
|
60
|
-
return { routes: merged, warnings: [...this.warnings] };
|
|
61
|
-
}
|
|
62
|
-
// =========================================================================
|
|
63
|
-
// Programmatic route CRUD
|
|
64
|
-
// =========================================================================
|
|
65
|
-
async createRoute(route, createdBy, enabled = true) {
|
|
66
|
-
const id = plugins.uuid.v4();
|
|
67
|
-
const now = Date.now();
|
|
68
|
-
// Ensure route has a name
|
|
69
|
-
if (!route.name) {
|
|
70
|
-
route.name = `programmatic-${id.slice(0, 8)}`;
|
|
71
|
-
}
|
|
72
|
-
const stored = {
|
|
73
|
-
id,
|
|
74
|
-
route,
|
|
75
|
-
enabled,
|
|
76
|
-
createdAt: now,
|
|
77
|
-
updatedAt: now,
|
|
78
|
-
createdBy,
|
|
79
|
-
};
|
|
80
|
-
this.storedRoutes.set(id, stored);
|
|
81
|
-
await this.persistRoute(stored);
|
|
82
|
-
await this.applyRoutes();
|
|
83
|
-
return id;
|
|
84
|
-
}
|
|
85
|
-
async updateRoute(id, patch) {
|
|
86
|
-
const stored = this.storedRoutes.get(id);
|
|
87
|
-
if (!stored)
|
|
88
|
-
return false;
|
|
89
|
-
if (patch.route) {
|
|
90
|
-
stored.route = { ...stored.route, ...patch.route };
|
|
91
|
-
}
|
|
92
|
-
if (patch.enabled !== undefined) {
|
|
93
|
-
stored.enabled = patch.enabled;
|
|
94
|
-
}
|
|
95
|
-
stored.updatedAt = Date.now();
|
|
96
|
-
await this.persistRoute(stored);
|
|
97
|
-
await this.applyRoutes();
|
|
98
|
-
return true;
|
|
99
|
-
}
|
|
100
|
-
async deleteRoute(id) {
|
|
101
|
-
if (!this.storedRoutes.has(id))
|
|
102
|
-
return false;
|
|
103
|
-
this.storedRoutes.delete(id);
|
|
104
|
-
await this.storageManager.delete(`${ROUTES_PREFIX}${id}.json`);
|
|
105
|
-
await this.applyRoutes();
|
|
106
|
-
return true;
|
|
107
|
-
}
|
|
108
|
-
async toggleRoute(id, enabled) {
|
|
109
|
-
return this.updateRoute(id, { enabled });
|
|
110
|
-
}
|
|
111
|
-
// =========================================================================
|
|
112
|
-
// Hardcoded route overrides
|
|
113
|
-
// =========================================================================
|
|
114
|
-
async setOverride(routeName, enabled, updatedBy) {
|
|
115
|
-
const override = {
|
|
116
|
-
routeName,
|
|
117
|
-
enabled,
|
|
118
|
-
updatedAt: Date.now(),
|
|
119
|
-
updatedBy,
|
|
120
|
-
};
|
|
121
|
-
this.overrides.set(routeName, override);
|
|
122
|
-
await this.storageManager.setJSON(`${OVERRIDES_PREFIX}${routeName}.json`, override);
|
|
123
|
-
this.computeWarnings();
|
|
124
|
-
await this.applyRoutes();
|
|
125
|
-
}
|
|
126
|
-
async removeOverride(routeName) {
|
|
127
|
-
if (!this.overrides.has(routeName))
|
|
128
|
-
return false;
|
|
129
|
-
this.overrides.delete(routeName);
|
|
130
|
-
await this.storageManager.delete(`${OVERRIDES_PREFIX}${routeName}.json`);
|
|
131
|
-
this.computeWarnings();
|
|
132
|
-
await this.applyRoutes();
|
|
133
|
-
return true;
|
|
134
|
-
}
|
|
135
|
-
// =========================================================================
|
|
136
|
-
// Private: persistence
|
|
137
|
-
// =========================================================================
|
|
138
|
-
async loadStoredRoutes() {
|
|
139
|
-
const keys = await this.storageManager.list(ROUTES_PREFIX);
|
|
140
|
-
for (const key of keys) {
|
|
141
|
-
if (!key.endsWith('.json'))
|
|
142
|
-
continue;
|
|
143
|
-
const stored = await this.storageManager.getJSON(key);
|
|
144
|
-
if (stored?.id) {
|
|
145
|
-
this.storedRoutes.set(stored.id, stored);
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
if (this.storedRoutes.size > 0) {
|
|
149
|
-
logger.log('info', `Loaded ${this.storedRoutes.size} programmatic route(s) from storage`);
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
async loadOverrides() {
|
|
153
|
-
const keys = await this.storageManager.list(OVERRIDES_PREFIX);
|
|
154
|
-
for (const key of keys) {
|
|
155
|
-
if (!key.endsWith('.json'))
|
|
156
|
-
continue;
|
|
157
|
-
const override = await this.storageManager.getJSON(key);
|
|
158
|
-
if (override?.routeName) {
|
|
159
|
-
this.overrides.set(override.routeName, override);
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
if (this.overrides.size > 0) {
|
|
163
|
-
logger.log('info', `Loaded ${this.overrides.size} route override(s) from storage`);
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
async persistRoute(stored) {
|
|
167
|
-
await this.storageManager.setJSON(`${ROUTES_PREFIX}${stored.id}.json`, stored);
|
|
168
|
-
}
|
|
169
|
-
// =========================================================================
|
|
170
|
-
// Private: warnings
|
|
171
|
-
// =========================================================================
|
|
172
|
-
computeWarnings() {
|
|
173
|
-
this.warnings = [];
|
|
174
|
-
const hardcodedNames = new Set(this.getHardcodedRoutes().map((r) => r.name || ''));
|
|
175
|
-
// Check overrides
|
|
176
|
-
for (const [routeName, override] of this.overrides) {
|
|
177
|
-
if (!hardcodedNames.has(routeName)) {
|
|
178
|
-
this.warnings.push({
|
|
179
|
-
type: 'orphaned-override',
|
|
180
|
-
routeName,
|
|
181
|
-
message: `Orphaned override for route '${routeName}' — hardcoded route no longer exists`,
|
|
182
|
-
});
|
|
183
|
-
}
|
|
184
|
-
else if (!override.enabled) {
|
|
185
|
-
this.warnings.push({
|
|
186
|
-
type: 'disabled-hardcoded',
|
|
187
|
-
routeName,
|
|
188
|
-
message: `Route '${routeName}' is disabled via API override`,
|
|
189
|
-
});
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
// Check disabled programmatic routes
|
|
193
|
-
for (const stored of this.storedRoutes.values()) {
|
|
194
|
-
if (!stored.enabled) {
|
|
195
|
-
const name = stored.route.name || stored.id;
|
|
196
|
-
this.warnings.push({
|
|
197
|
-
type: 'disabled-programmatic',
|
|
198
|
-
routeName: name,
|
|
199
|
-
message: `Programmatic route '${name}' (id: ${stored.id}) is disabled`,
|
|
200
|
-
});
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
logWarnings() {
|
|
205
|
-
for (const w of this.warnings) {
|
|
206
|
-
logger.log('warn', w.message);
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
// =========================================================================
|
|
210
|
-
// Private: apply merged routes to SmartProxy
|
|
211
|
-
// =========================================================================
|
|
212
|
-
async applyRoutes() {
|
|
213
|
-
const smartProxy = this.getSmartProxy();
|
|
214
|
-
if (!smartProxy)
|
|
215
|
-
return;
|
|
216
|
-
const enabledRoutes = [];
|
|
217
|
-
// Add enabled hardcoded routes (respecting overrides)
|
|
218
|
-
for (const route of this.getHardcodedRoutes()) {
|
|
219
|
-
const name = route.name || '';
|
|
220
|
-
const override = this.overrides.get(name);
|
|
221
|
-
if (override && !override.enabled) {
|
|
222
|
-
continue; // Skip disabled hardcoded route
|
|
223
|
-
}
|
|
224
|
-
enabledRoutes.push(route);
|
|
225
|
-
}
|
|
226
|
-
// Add enabled programmatic routes (with HTTP/3 augmentation if enabled)
|
|
227
|
-
const http3Config = this.getHttp3Config?.();
|
|
228
|
-
const vpnSubnet = this.getVpnSubnet?.();
|
|
229
|
-
for (const stored of this.storedRoutes.values()) {
|
|
230
|
-
if (stored.enabled) {
|
|
231
|
-
let route = stored.route;
|
|
232
|
-
if (http3Config && http3Config.enabled !== false) {
|
|
233
|
-
route = augmentRouteWithHttp3(route, { enabled: true, ...http3Config });
|
|
234
|
-
}
|
|
235
|
-
// Inject VPN security for programmatic routes with vpn.required
|
|
236
|
-
if (vpnSubnet) {
|
|
237
|
-
const dcRoute = route;
|
|
238
|
-
if (dcRoute.vpn?.required) {
|
|
239
|
-
const existing = route.security?.ipAllowList || [];
|
|
240
|
-
route = {
|
|
241
|
-
...route,
|
|
242
|
-
security: {
|
|
243
|
-
...route.security,
|
|
244
|
-
ipAllowList: [...existing, vpnSubnet],
|
|
245
|
-
},
|
|
246
|
-
};
|
|
247
|
-
}
|
|
248
|
-
}
|
|
249
|
-
enabledRoutes.push(route);
|
|
250
|
-
}
|
|
251
|
-
}
|
|
252
|
-
await smartProxy.updateRoutes(enabledRoutes);
|
|
253
|
-
logger.log('info', `Applied ${enabledRoutes.length} routes to SmartProxy (${this.storedRoutes.size} programmatic, ${this.overrides.size} overrides)`);
|
|
254
|
-
}
|
|
255
|
-
}
|
|
256
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5yb3V0ZS1jb25maWctbWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3RzL2NvbmZpZy9jbGFzc2VzLnJvdXRlLWNvbmZpZy1tYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFTdEMsT0FBTyxFQUFxQixxQkFBcUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRTdFLE1BQU0sYUFBYSxHQUFHLHFCQUFxQixDQUFDO0FBQzVDLE1BQU0sZ0JBQWdCLEdBQUcsd0JBQXdCLENBQUM7QUFFbEQsTUFBTSxPQUFPLGtCQUFrQjtJQU1uQjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBVEYsWUFBWSxHQUFHLElBQUksR0FBRyxFQUF3QixDQUFDO0lBQy9DLFNBQVMsR0FBRyxJQUFJLEdBQUcsRUFBMEIsQ0FBQztJQUM5QyxRQUFRLEdBQW9CLEVBQUUsQ0FBQztJQUV2QyxZQUNVLGNBQThCLEVBQzlCLGtCQUEyRCxFQUMzRCxhQUE4RCxFQUM5RCxjQUErQyxFQUMvQyxZQUF1QztRQUp2QyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUF5QztRQUMzRCxrQkFBYSxHQUFiLGFBQWEsQ0FBaUQ7UUFDOUQsbUJBQWMsR0FBZCxjQUFjLENBQWlDO1FBQy9DLGlCQUFZLEdBQVosWUFBWSxDQUEyQjtJQUM5QyxDQUFDO0lBRUo7O09BRUc7SUFDSSxLQUFLLENBQUMsVUFBVTtRQUNyQixNQUFNLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzlCLE1BQU0sSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbkIsTUFBTSxJQUFJ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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=
|