@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.
Files changed (33) hide show
  1. package/deno.json +1 -1
  2. package/dist_ts/00_commitinfo_data.js +2 -2
  3. package/dist_ts/acme/manager.acme-config.d.ts +1 -14
  4. package/dist_ts/acme/manager.acme-config.js +4 -65
  5. package/dist_ts/classes.dcrouter.d.ts +7 -2
  6. package/dist_ts/classes.dcrouter.js +115 -48
  7. package/dist_ts/config/classes.api-token-manager.js +3 -3
  8. package/dist_ts/config/classes.route-config-manager.d.ts +2 -1
  9. package/dist_ts/config/classes.route-config-manager.js +8 -3
  10. package/dist_ts/db/documents/classes.acme-config.doc.d.ts +1 -3
  11. package/dist_ts/db/documents/classes.acme-config.doc.js +2 -4
  12. package/dist_ts/dns/manager.dns.d.ts +0 -13
  13. package/dist_ts/dns/manager.dns.js +1 -81
  14. package/dist_ts/opsserver/handlers/certificate.handler.d.ts +0 -9
  15. package/dist_ts/opsserver/handlers/certificate.handler.js +1 -40
  16. package/dist_ts/opsserver/handlers/config.handler.js +12 -20
  17. package/dist_ts/opsserver/handlers/email-settings.handler.js +2 -2
  18. package/dist_ts_interfaces/data/acme-config.d.ts +1 -3
  19. package/dist_ts_interfaces/requests/certificate.d.ts +0 -12
  20. package/dist_ts_migrations/index.js +2 -2
  21. package/dist_ts_web/00_commitinfo_data.js +2 -2
  22. package/package.json +2 -2
  23. package/ts/00_commitinfo_data.ts +1 -1
  24. package/ts/acme/manager.acme-config.ts +3 -77
  25. package/ts/classes.dcrouter.ts +134 -49
  26. package/ts/config/classes.api-token-manager.ts +2 -2
  27. package/ts/config/classes.route-config-manager.ts +5 -1
  28. package/ts/db/documents/classes.acme-config.doc.ts +1 -3
  29. package/ts/dns/manager.dns.ts +0 -103
  30. package/ts/opsserver/handlers/certificate.handler.ts +0 -47
  31. package/ts/opsserver/handlers/config.handler.ts +11 -19
  32. package/ts/opsserver/handlers/email-settings.handler.ts +1 -1
  33. 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
- // Resolve proxy IPs: fall back to SmartProxy's runtime proxyIPs if not in opts
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 (opts.smartProxyConfig?.acme) {
64
- const acme = opts.smartProxyConfig.acme;
57
+ if (acmeConfig) {
65
58
  acmeInfo = {
66
- enabled: acme.enabled !== false,
67
- accountEmail: acme.accountEmail || '',
68
- useProduction: acme.useProduction !== false,
69
- autoRenew: acme.autoRenew !== false,
70
- renewThresholdDays: acme.renewThresholdDays || 30,
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 (opts.smartProxyConfig?.acme?.enabled !== false && opts.smartProxyConfig?.acme) {
145
+ } else if (acmeConfig?.enabled) {
154
146
  tlsSource = 'acme';
155
147
  }
156
148
 
157
149
  const tls: interfaces.requests.IConfigData['tls'] = {
158
- contactEmail: opts.tls?.contactEmail || opts.smartProxyConfig?.acme?.accountEmail || null,
150
+ contactEmail: acmeConfig?.accountEmail || null,
159
151
  domain: opts.tls?.domain || null,
160
152
  source: tlsSource,
161
153
  certPath: opts.tls?.certPath || null,
@@ -66,7 +66,7 @@ export class EmailSettingsHandler {
66
66
  routeCount: emailConfig?.routes?.length || 0,
67
67
  authUserCount: emailConfig?.auth?.users?.length || 0,
68
68
  updatedAt: 0,
69
- updatedBy: 'legacy-options',
69
+ updatedBy: 'runtime-options',
70
70
  };
71
71
  }
72
72
  }
@@ -3,6 +3,6 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@serve.zone/dcrouter',
6
- version: '13.45.0',
6
+ version: '14.0.1',
7
7
  description: 'A multifaceted routing service handling mail and SMS delivery functions.'
8
8
  }