@serve.zone/dcrouter 13.7.0 → 13.8.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 +707 -563
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/acme/index.d.ts +1 -0
- package/dist_ts/acme/index.js +2 -0
- package/dist_ts/acme/manager.acme-config.d.ts +48 -0
- package/dist_ts/acme/manager.acme-config.js +156 -0
- package/dist_ts/classes.dcrouter.d.ts +2 -0
- package/dist_ts/classes.dcrouter.js +58 -20
- package/dist_ts/db/documents/classes.acme-config.doc.d.ts +22 -0
- package/dist_ts/db/documents/classes.acme-config.doc.js +121 -0
- package/dist_ts/db/documents/index.d.ts +1 -0
- package/dist_ts/db/documents/index.js +3 -1
- package/dist_ts/opsserver/classes.opsserver.d.ts +1 -0
- package/dist_ts/opsserver/classes.opsserver.js +3 -1
- package/dist_ts/opsserver/handlers/acme-config.handler.d.ts +16 -0
- package/dist_ts/opsserver/handlers/acme-config.handler.js +77 -0
- package/dist_ts/opsserver/handlers/index.d.ts +1 -0
- package/dist_ts/opsserver/handlers/index.js +2 -1
- package/dist_ts_interfaces/data/acme-config.d.ts +25 -0
- package/dist_ts_interfaces/data/acme-config.js +2 -0
- package/dist_ts_interfaces/data/index.d.ts +1 -0
- package/dist_ts_interfaces/data/index.js +2 -1
- package/dist_ts_interfaces/data/route-management.d.ts +1 -1
- package/dist_ts_interfaces/requests/acme-config.d.ts +42 -0
- package/dist_ts_interfaces/requests/acme-config.js +2 -0
- package/dist_ts_interfaces/requests/index.d.ts +1 -0
- package/dist_ts_interfaces/requests/index.js +2 -1
- package/dist_ts_web/00_commitinfo_data.js +1 -1
- package/dist_ts_web/appstate.d.ts +15 -0
- package/dist_ts_web/appstate.js +60 -1
- package/dist_ts_web/elements/domains/ops-view-certificates.d.ts +3 -0
- package/dist_ts_web/elements/domains/ops-view-certificates.js +208 -4
- package/package.json +1 -1
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/acme/index.ts +1 -0
- package/ts/acme/manager.acme-config.ts +182 -0
- package/ts/classes.dcrouter.ts +72 -25
- package/ts/db/documents/classes.acme-config.doc.ts +49 -0
- package/ts/db/documents/index.ts +3 -0
- package/ts/opsserver/classes.opsserver.ts +2 -0
- package/ts/opsserver/handlers/acme-config.handler.ts +94 -0
- package/ts/opsserver/handlers/index.ts +2 -1
- package/ts_web/00_commitinfo_data.ts +1 -1
- package/ts_web/appstate.ts +88 -0
- package/ts_web/elements/domains/ops-view-certificates.ts +205 -2
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export const commitinfo = {
|
|
5
5
|
name: '@serve.zone/dcrouter',
|
|
6
|
-
version: '13.
|
|
6
|
+
version: '13.8.0',
|
|
7
7
|
description: 'A multifaceted routing service handling mail and SMS delivery functions.'
|
|
8
8
|
};
|
|
9
9
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSxzQkFBc0I7SUFDNUIsT0FBTyxFQUFFLFFBQVE7SUFDakIsV0FBVyxFQUFFLDBFQUEwRTtDQUN4RixDQUFBIn0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './manager.acme-config.js';
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { IDcRouterOptions } from '../classes.dcrouter.js';
|
|
2
|
+
import type { IAcmeConfig } from '../../dist_ts_interfaces/data/acme-config.js';
|
|
3
|
+
/**
|
|
4
|
+
* AcmeConfigManager — owns the singleton ACME configuration in the DB.
|
|
5
|
+
*
|
|
6
|
+
* Lifecycle:
|
|
7
|
+
* - `start()` — loads from the DB; if empty, seeds from legacy constructor
|
|
8
|
+
* fields (`tls.contactEmail`, `smartProxyConfig.acme.*`) on first boot.
|
|
9
|
+
* - `getConfig()` — returns the in-memory cached `IAcmeConfig` (or null)
|
|
10
|
+
* - `updateConfig(args, updatedBy)` — upserts and refreshes the cache
|
|
11
|
+
*
|
|
12
|
+
* Reload semantics: updates take effect on the next dcrouter restart because
|
|
13
|
+
* `SmartAcme` is instantiated once in `setupSmartProxy()`. `renewThresholdDays`
|
|
14
|
+
* applies immediately to the next renewal check. See
|
|
15
|
+
* `ts_web/elements/domains/ops-view-certificates.ts` for the UI warning.
|
|
16
|
+
*/
|
|
17
|
+
export declare class AcmeConfigManager {
|
|
18
|
+
private options;
|
|
19
|
+
private cached;
|
|
20
|
+
constructor(options: IDcRouterOptions);
|
|
21
|
+
start(): Promise<void>;
|
|
22
|
+
stop(): Promise<void>;
|
|
23
|
+
/**
|
|
24
|
+
* Returns the current ACME config, or null if not configured.
|
|
25
|
+
* In-memory — does not hit the DB.
|
|
26
|
+
*/
|
|
27
|
+
getConfig(): IAcmeConfig | null;
|
|
28
|
+
/**
|
|
29
|
+
* True if there is an enabled ACME config. Used by `setupSmartProxy()` to
|
|
30
|
+
* decide whether to instantiate SmartAcme.
|
|
31
|
+
*/
|
|
32
|
+
hasEnabledConfig(): boolean;
|
|
33
|
+
/**
|
|
34
|
+
* Upsert the ACME config. All fields are optional; missing fields are
|
|
35
|
+
* preserved from the existing row (or defaulted if there is no row yet).
|
|
36
|
+
*/
|
|
37
|
+
updateConfig(args: Partial<Omit<IAcmeConfig, 'updatedAt' | 'updatedBy'>>, updatedBy: string): Promise<IAcmeConfig>;
|
|
38
|
+
/**
|
|
39
|
+
* Build a seed object from the legacy constructor fields. Returns null
|
|
40
|
+
* if the user has not provided any of them.
|
|
41
|
+
*
|
|
42
|
+
* Supports BOTH `tls.contactEmail` (short form) and `smartProxyConfig.acme`
|
|
43
|
+
* (full form). `smartProxyConfig.acme` wins when both are present.
|
|
44
|
+
*/
|
|
45
|
+
private deriveSeedFromOptions;
|
|
46
|
+
private createSeedDoc;
|
|
47
|
+
private toPlain;
|
|
48
|
+
}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import { logger } from '../logger.js';
|
|
2
|
+
import { AcmeConfigDoc } from '../db/documents/index.js';
|
|
3
|
+
/**
|
|
4
|
+
* AcmeConfigManager — owns the singleton ACME configuration in the DB.
|
|
5
|
+
*
|
|
6
|
+
* Lifecycle:
|
|
7
|
+
* - `start()` — loads from the DB; if empty, seeds from legacy constructor
|
|
8
|
+
* fields (`tls.contactEmail`, `smartProxyConfig.acme.*`) on first boot.
|
|
9
|
+
* - `getConfig()` — returns the in-memory cached `IAcmeConfig` (or null)
|
|
10
|
+
* - `updateConfig(args, updatedBy)` — upserts and refreshes the cache
|
|
11
|
+
*
|
|
12
|
+
* Reload semantics: updates take effect on the next dcrouter restart because
|
|
13
|
+
* `SmartAcme` is instantiated once in `setupSmartProxy()`. `renewThresholdDays`
|
|
14
|
+
* applies immediately to the next renewal check. See
|
|
15
|
+
* `ts_web/elements/domains/ops-view-certificates.ts` for the UI warning.
|
|
16
|
+
*/
|
|
17
|
+
export class AcmeConfigManager {
|
|
18
|
+
options;
|
|
19
|
+
cached = null;
|
|
20
|
+
constructor(options) {
|
|
21
|
+
this.options = options;
|
|
22
|
+
}
|
|
23
|
+
async start() {
|
|
24
|
+
logger.log('info', 'AcmeConfigManager: starting');
|
|
25
|
+
let doc = await AcmeConfigDoc.load();
|
|
26
|
+
if (!doc) {
|
|
27
|
+
// First-boot path: seed from legacy constructor fields if present.
|
|
28
|
+
const seed = this.deriveSeedFromOptions();
|
|
29
|
+
if (seed) {
|
|
30
|
+
doc = await this.createSeedDoc(seed);
|
|
31
|
+
logger.log('info', `AcmeConfigManager: seeded from constructor legacy fields (accountEmail=${seed.accountEmail}, useProduction=${seed.useProduction})`);
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
logger.log('info', 'AcmeConfigManager: no AcmeConfig in DB and no legacy constructor fields — ACME disabled until configured via Domains > Certificates > Settings.');
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
else if (this.deriveSeedFromOptions()) {
|
|
38
|
+
logger.log('warn', 'AcmeConfigManager: ignoring constructor tls.contactEmail / smartProxyConfig.acme — DB already has AcmeConfigDoc. Manage via Domains > Certificates > Settings.');
|
|
39
|
+
}
|
|
40
|
+
this.cached = doc ? this.toPlain(doc) : null;
|
|
41
|
+
if (this.cached) {
|
|
42
|
+
logger.log('info', `AcmeConfigManager: loaded ACME config (accountEmail=${this.cached.accountEmail}, enabled=${this.cached.enabled}, useProduction=${this.cached.useProduction})`);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
async stop() {
|
|
46
|
+
this.cached = null;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Returns the current ACME config, or null if not configured.
|
|
50
|
+
* In-memory — does not hit the DB.
|
|
51
|
+
*/
|
|
52
|
+
getConfig() {
|
|
53
|
+
return this.cached;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* True if there is an enabled ACME config. Used by `setupSmartProxy()` to
|
|
57
|
+
* decide whether to instantiate SmartAcme.
|
|
58
|
+
*/
|
|
59
|
+
hasEnabledConfig() {
|
|
60
|
+
return this.cached !== null && this.cached.enabled;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Upsert the ACME config. All fields are optional; missing fields are
|
|
64
|
+
* preserved from the existing row (or defaulted if there is no row yet).
|
|
65
|
+
*/
|
|
66
|
+
async updateConfig(args, updatedBy) {
|
|
67
|
+
let doc = await AcmeConfigDoc.load();
|
|
68
|
+
const now = Date.now();
|
|
69
|
+
if (!doc) {
|
|
70
|
+
doc = new AcmeConfigDoc();
|
|
71
|
+
doc.configId = 'acme-config';
|
|
72
|
+
doc.accountEmail = args.accountEmail ?? '';
|
|
73
|
+
doc.enabled = args.enabled ?? true;
|
|
74
|
+
doc.useProduction = args.useProduction ?? true;
|
|
75
|
+
doc.autoRenew = args.autoRenew ?? true;
|
|
76
|
+
doc.renewThresholdDays = args.renewThresholdDays ?? 30;
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
if (args.accountEmail !== undefined)
|
|
80
|
+
doc.accountEmail = args.accountEmail;
|
|
81
|
+
if (args.enabled !== undefined)
|
|
82
|
+
doc.enabled = args.enabled;
|
|
83
|
+
if (args.useProduction !== undefined)
|
|
84
|
+
doc.useProduction = args.useProduction;
|
|
85
|
+
if (args.autoRenew !== undefined)
|
|
86
|
+
doc.autoRenew = args.autoRenew;
|
|
87
|
+
if (args.renewThresholdDays !== undefined)
|
|
88
|
+
doc.renewThresholdDays = args.renewThresholdDays;
|
|
89
|
+
}
|
|
90
|
+
doc.updatedAt = now;
|
|
91
|
+
doc.updatedBy = updatedBy;
|
|
92
|
+
await doc.save();
|
|
93
|
+
this.cached = this.toPlain(doc);
|
|
94
|
+
return this.cached;
|
|
95
|
+
}
|
|
96
|
+
// ==========================================================================
|
|
97
|
+
// Internal helpers
|
|
98
|
+
// ==========================================================================
|
|
99
|
+
/**
|
|
100
|
+
* Build a seed object from the legacy constructor fields. Returns null
|
|
101
|
+
* if the user has not provided any of them.
|
|
102
|
+
*
|
|
103
|
+
* Supports BOTH `tls.contactEmail` (short form) and `smartProxyConfig.acme`
|
|
104
|
+
* (full form). `smartProxyConfig.acme` wins when both are present.
|
|
105
|
+
*/
|
|
106
|
+
deriveSeedFromOptions() {
|
|
107
|
+
const acme = this.options.smartProxyConfig?.acme;
|
|
108
|
+
const tls = this.options.tls;
|
|
109
|
+
// Prefer the explicit smartProxyConfig.acme block if present.
|
|
110
|
+
if (acme?.accountEmail) {
|
|
111
|
+
return {
|
|
112
|
+
accountEmail: acme.accountEmail,
|
|
113
|
+
enabled: acme.enabled !== false,
|
|
114
|
+
useProduction: acme.useProduction !== false,
|
|
115
|
+
autoRenew: acme.autoRenew !== false,
|
|
116
|
+
renewThresholdDays: acme.renewThresholdDays ?? 30,
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
// Fall back to the short tls.contactEmail form.
|
|
120
|
+
if (tls?.contactEmail) {
|
|
121
|
+
return {
|
|
122
|
+
accountEmail: tls.contactEmail,
|
|
123
|
+
enabled: true,
|
|
124
|
+
useProduction: true,
|
|
125
|
+
autoRenew: true,
|
|
126
|
+
renewThresholdDays: 30,
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
return null;
|
|
130
|
+
}
|
|
131
|
+
async createSeedDoc(seed) {
|
|
132
|
+
const doc = new AcmeConfigDoc();
|
|
133
|
+
doc.configId = 'acme-config';
|
|
134
|
+
doc.accountEmail = seed.accountEmail;
|
|
135
|
+
doc.enabled = seed.enabled;
|
|
136
|
+
doc.useProduction = seed.useProduction;
|
|
137
|
+
doc.autoRenew = seed.autoRenew;
|
|
138
|
+
doc.renewThresholdDays = seed.renewThresholdDays;
|
|
139
|
+
doc.updatedAt = Date.now();
|
|
140
|
+
doc.updatedBy = 'seed';
|
|
141
|
+
await doc.save();
|
|
142
|
+
return doc;
|
|
143
|
+
}
|
|
144
|
+
toPlain(doc) {
|
|
145
|
+
return {
|
|
146
|
+
accountEmail: doc.accountEmail,
|
|
147
|
+
enabled: doc.enabled,
|
|
148
|
+
useProduction: doc.useProduction,
|
|
149
|
+
autoRenew: doc.autoRenew,
|
|
150
|
+
renewThresholdDays: doc.renewThresholdDays,
|
|
151
|
+
updatedAt: doc.updatedAt,
|
|
152
|
+
updatedBy: doc.updatedBy,
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFuYWdlci5hY21lLWNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3RzL2FjbWUvbWFuYWdlci5hY21lLWNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUl6RDs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsTUFBTSxPQUFPLGlCQUFpQjtJQUdSO0lBRlosTUFBTSxHQUF1QixJQUFJLENBQUM7SUFFMUMsWUFBb0IsT0FBeUI7UUFBekIsWUFBTyxHQUFQLE9BQU8sQ0FBa0I7SUFBRyxDQUFDO0lBRTFDLEtBQUssQ0FBQyxLQUFLO1FBQ2hCLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLDZCQUE2QixDQUFDLENBQUM7UUFDbEQsSUFBSSxHQUFHLEdBQUcsTUFBTSxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFckMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ1QsbUVBQW1FO1lBQ25FLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1lBQzFDLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQ1QsR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDckMsTUFBTSxDQUFDLEdBQUcsQ0FDUixNQUFNLEVBQ04sMEVBQTBFLElBQUksQ0FBQyxZQUFZLG1CQUFtQixJQUFJLENBQUMsYUFBYSxHQUFHLENBQ3BJLENBQUM7WUFDSixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sTUFBTSxDQUFDLEdBQUcsQ0FDUixNQUFNLEVBQ04saUpBQWlKLENBQ2xKLENBQUM7WUFDSixDQUFDO1FBQ0gsQ0FBQzthQUFNLElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUFFLEVBQUUsQ0FBQztZQUN4QyxNQUFNLENBQUMs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
|
|
@@ -11,6 +11,7 @@ import { VpnManager } from './vpn/index.js';
|
|
|
11
11
|
import { RouteConfigManager, ApiTokenManager, ReferenceResolver, TargetProfileManager } from './config/index.js';
|
|
12
12
|
import { type IHttp3Config } from './http3/index.js';
|
|
13
13
|
import { DnsManager } from './dns/manager.dns.js';
|
|
14
|
+
import { AcmeConfigManager } from './acme/manager.acme-config.js';
|
|
14
15
|
export interface IDcRouterOptions {
|
|
15
16
|
/** Base directory for all dcrouter data. Defaults to ~/.serve.zone/dcrouter */
|
|
16
17
|
baseDir?: string;
|
|
@@ -220,6 +221,7 @@ export declare class DcRouter {
|
|
|
220
221
|
referenceResolver?: ReferenceResolver;
|
|
221
222
|
targetProfileManager?: TargetProfileManager;
|
|
222
223
|
dnsManager?: DnsManager;
|
|
224
|
+
acmeConfigManager?: AcmeConfigManager;
|
|
223
225
|
detectedPublicIp: string | null;
|
|
224
226
|
private dnsLogWindowSecond;
|
|
225
227
|
private dnsLogWindowCount;
|