@serve.zone/dcrouter 13.45.0 → 14.0.1
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/deno.json +1 -1
- package/dist_ts/00_commitinfo_data.js +2 -2
- package/dist_ts/acme/manager.acme-config.d.ts +1 -14
- package/dist_ts/acme/manager.acme-config.js +4 -65
- package/dist_ts/classes.dcrouter.d.ts +7 -2
- package/dist_ts/classes.dcrouter.js +115 -48
- package/dist_ts/config/classes.api-token-manager.js +3 -3
- package/dist_ts/config/classes.route-config-manager.d.ts +2 -1
- package/dist_ts/config/classes.route-config-manager.js +8 -3
- package/dist_ts/db/documents/classes.acme-config.doc.d.ts +1 -3
- package/dist_ts/db/documents/classes.acme-config.doc.js +2 -4
- package/dist_ts/dns/manager.dns.d.ts +0 -13
- package/dist_ts/dns/manager.dns.js +1 -81
- package/dist_ts/opsserver/handlers/certificate.handler.d.ts +0 -9
- package/dist_ts/opsserver/handlers/certificate.handler.js +1 -40
- package/dist_ts/opsserver/handlers/config.handler.js +12 -20
- package/dist_ts/opsserver/handlers/email-settings.handler.js +2 -2
- package/dist_ts_interfaces/data/acme-config.d.ts +1 -3
- package/dist_ts_interfaces/requests/certificate.d.ts +0 -12
- package/dist_ts_migrations/index.js +2 -2
- package/dist_ts_web/00_commitinfo_data.js +2 -2
- package/package.json +2 -2
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/acme/manager.acme-config.ts +3 -77
- package/ts/classes.dcrouter.ts +134 -49
- package/ts/config/classes.api-token-manager.ts +2 -2
- package/ts/config/classes.route-config-manager.ts +5 -1
- package/ts/db/documents/classes.acme-config.doc.ts +1 -3
- package/ts/dns/manager.dns.ts +0 -103
- package/ts/opsserver/handlers/certificate.handler.ts +0 -47
- package/ts/opsserver/handlers/config.handler.ts +11 -19
- package/ts/opsserver/handlers/email-settings.handler.ts +1 -1
- package/ts_web/00_commitinfo_data.ts +1 -1
|
@@ -61,17 +61,6 @@ export class CertificateHandler {
|
|
|
61
61
|
)
|
|
62
62
|
);
|
|
63
63
|
|
|
64
|
-
// Legacy route-based reprovision (backward compat)
|
|
65
|
-
router.addTypedHandler(
|
|
66
|
-
new plugins.typedrequest.TypedHandler<interfaces.requests.IReq_ReprovisionCertificate>(
|
|
67
|
-
'reprovisionCertificate',
|
|
68
|
-
async (dataArg) => {
|
|
69
|
-
await this.requireAuth(dataArg, 'certificates:write');
|
|
70
|
-
return this.reprovisionCertificateByRoute(dataArg.routeName);
|
|
71
|
-
}
|
|
72
|
-
)
|
|
73
|
-
);
|
|
74
|
-
|
|
75
64
|
// Domain-based reprovision (preferred)
|
|
76
65
|
router.addTypedHandler(
|
|
77
66
|
new plugins.typedrequest.TypedHandler<interfaces.requests.IReq_ReprovisionCertificateDomain>(
|
|
@@ -336,42 +325,6 @@ export class CertificateHandler {
|
|
|
336
325
|
return summary;
|
|
337
326
|
}
|
|
338
327
|
|
|
339
|
-
/**
|
|
340
|
-
* Legacy route-based reprovisioning. Kept for backward compatibility with
|
|
341
|
-
* older clients that send `reprovisionCertificate` typed-requests.
|
|
342
|
-
*
|
|
343
|
-
* Like reprovisionCertificateDomain, this triggers the full route apply
|
|
344
|
-
* pipeline rather than smartProxy.provisionCertificate(routeName) — which
|
|
345
|
-
* is a no-op when certProvisionFunction is set (Rust ACME disabled).
|
|
346
|
-
*/
|
|
347
|
-
private async reprovisionCertificateByRoute(routeName: string): Promise<{ success: boolean; message?: string }> {
|
|
348
|
-
const dcRouter = this.opsServerRef.dcRouterRef;
|
|
349
|
-
const smartProxy = dcRouter.smartProxy;
|
|
350
|
-
|
|
351
|
-
if (!smartProxy) {
|
|
352
|
-
return { success: false, message: 'SmartProxy is not running' };
|
|
353
|
-
}
|
|
354
|
-
|
|
355
|
-
// Clear event-based status for domains in this route so the
|
|
356
|
-
// certificate-issued event can refresh them
|
|
357
|
-
for (const [domain, entry] of dcRouter.certificateStatusMap) {
|
|
358
|
-
if (entry.routeNames.includes(routeName)) {
|
|
359
|
-
dcRouter.certificateStatusMap.delete(domain);
|
|
360
|
-
}
|
|
361
|
-
}
|
|
362
|
-
|
|
363
|
-
try {
|
|
364
|
-
if (dcRouter.routeConfigManager) {
|
|
365
|
-
await dcRouter.routeConfigManager.applyRoutes();
|
|
366
|
-
} else {
|
|
367
|
-
await smartProxy.updateRoutes(smartProxy.routeManager.getRoutes());
|
|
368
|
-
}
|
|
369
|
-
return { success: true, message: `Certificate reprovisioning triggered for route '${routeName}'` };
|
|
370
|
-
} catch (err: unknown) {
|
|
371
|
-
return { success: false, message: (err as Error).message || 'Failed to reprovision certificate' };
|
|
372
|
-
}
|
|
373
|
-
}
|
|
374
|
-
|
|
375
328
|
/**
|
|
376
329
|
* Domain-based reprovisioning — clears backoff first, refreshes the smartacme
|
|
377
330
|
* cert (when forceRenew is set), then re-applies routes so the running Rust
|
|
@@ -39,14 +39,7 @@ export class ConfigHandler {
|
|
|
39
39
|
? 'custom'
|
|
40
40
|
: 'filesystem';
|
|
41
41
|
|
|
42
|
-
|
|
43
|
-
let proxyIps = opts.proxyIps || [];
|
|
44
|
-
if (proxyIps.length === 0 && dcRouter.smartProxy) {
|
|
45
|
-
const spSettings = (dcRouter.smartProxy as any).settings;
|
|
46
|
-
if (spSettings?.proxyIPs?.length > 0) {
|
|
47
|
-
proxyIps = spSettings.proxyIPs;
|
|
48
|
-
}
|
|
49
|
-
}
|
|
42
|
+
const proxyIps = opts.proxyIps || [];
|
|
50
43
|
|
|
51
44
|
const system: interfaces.requests.IConfigData['system'] = {
|
|
52
45
|
baseDir: resolvedPaths.dcrouterHomeDir,
|
|
@@ -59,15 +52,15 @@ export class ConfigHandler {
|
|
|
59
52
|
};
|
|
60
53
|
|
|
61
54
|
// --- SmartProxy ---
|
|
55
|
+
const acmeConfig = dcRouter.acmeConfigManager?.getConfig();
|
|
62
56
|
let acmeInfo: interfaces.requests.IConfigData['smartProxy']['acme'] = null;
|
|
63
|
-
if (
|
|
64
|
-
const acme = opts.smartProxyConfig.acme;
|
|
57
|
+
if (acmeConfig) {
|
|
65
58
|
acmeInfo = {
|
|
66
|
-
enabled:
|
|
67
|
-
accountEmail:
|
|
68
|
-
useProduction:
|
|
69
|
-
autoRenew:
|
|
70
|
-
renewThresholdDays:
|
|
59
|
+
enabled: acmeConfig.enabled,
|
|
60
|
+
accountEmail: acmeConfig.accountEmail,
|
|
61
|
+
useProduction: acmeConfig.useProduction,
|
|
62
|
+
autoRenew: acmeConfig.autoRenew,
|
|
63
|
+
renewThresholdDays: acmeConfig.renewThresholdDays,
|
|
71
64
|
};
|
|
72
65
|
}
|
|
73
66
|
|
|
@@ -127,8 +120,7 @@ export class ConfigHandler {
|
|
|
127
120
|
ttl: r.ttl,
|
|
128
121
|
}));
|
|
129
122
|
|
|
130
|
-
// dnsChallenge: true when at least one DnsProviderDoc exists in the DB
|
|
131
|
-
// (replaces the legacy `dnsChallenge.cloudflareApiKey` constructor field).
|
|
123
|
+
// dnsChallenge: true when at least one DnsProviderDoc exists in the DB.
|
|
132
124
|
let dnsChallengeEnabled = false;
|
|
133
125
|
try {
|
|
134
126
|
dnsChallengeEnabled = (await dcRouter.dnsManager?.hasAnyManagedDomain()) ?? false;
|
|
@@ -150,12 +142,12 @@ export class ConfigHandler {
|
|
|
150
142
|
let tlsSource: 'acme' | 'static' | 'none' = 'none';
|
|
151
143
|
if (opts.tls?.certPath && opts.tls?.keyPath) {
|
|
152
144
|
tlsSource = 'static';
|
|
153
|
-
} else if (
|
|
145
|
+
} else if (acmeConfig?.enabled) {
|
|
154
146
|
tlsSource = 'acme';
|
|
155
147
|
}
|
|
156
148
|
|
|
157
149
|
const tls: interfaces.requests.IConfigData['tls'] = {
|
|
158
|
-
contactEmail:
|
|
150
|
+
contactEmail: acmeConfig?.accountEmail || null,
|
|
159
151
|
domain: opts.tls?.domain || null,
|
|
160
152
|
source: tlsSource,
|
|
161
153
|
certPath: opts.tls?.certPath || null,
|