@serve.zone/dcrouter 16.4.0 → 16.5.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.
Files changed (61) hide show
  1. package/deno.json +1 -1
  2. package/dist_serve/bundle.js +852 -852
  3. package/dist_ts/00_commitinfo_data.js +1 -1
  4. package/dist_ts/classes.dcrouter.d.ts +2 -1
  5. package/dist_ts/classes.dcrouter.js +20 -4
  6. package/dist_ts/db/documents/classes.cached.email.js +2 -2
  7. package/dist_ts/db/documents/classes.dns-record.doc.d.ts +4 -0
  8. package/dist_ts/db/documents/classes.dns-record.doc.js +33 -2
  9. package/dist_ts/db/documents/classes.email-domain.doc.d.ts +5 -1
  10. package/dist_ts/db/documents/classes.email-domain.doc.js +26 -2
  11. package/dist_ts/dns/manager.dns.d.ts +6 -0
  12. package/dist_ts/dns/manager.dns.js +81 -32
  13. package/dist_ts/dns/providers/cloudflare.provider.d.ts +2 -0
  14. package/dist_ts/dns/providers/cloudflare.provider.js +45 -28
  15. package/dist_ts/email/classes.email-domain.manager.d.ts +43 -38
  16. package/dist_ts/email/classes.email-domain.manager.js +391 -324
  17. package/dist_ts/email/classes.mail-dns-sync.d.ts +58 -17
  18. package/dist_ts/email/classes.mail-dns-sync.js +857 -141
  19. package/dist_ts/email/classes.mail-edge-eligibility.d.ts +55 -0
  20. package/dist_ts/email/classes.mail-edge-eligibility.js +168 -0
  21. package/dist_ts/email/classes.mail-egress-coordinator.d.ts +3 -1
  22. package/dist_ts/email/classes.mail-egress-coordinator.js +43 -22
  23. package/dist_ts/email/classes.workapp-mail-manager.d.ts +3 -0
  24. package/dist_ts/email/classes.workapp-mail-manager.js +58 -12
  25. package/dist_ts/email/index.d.ts +1 -0
  26. package/dist_ts/email/index.js +2 -1
  27. package/dist_ts/opsserver/handlers/email-domain.handler.d.ts +1 -0
  28. package/dist_ts/opsserver/handlers/email-domain.handler.js +138 -22
  29. package/dist_ts/remoteingress/classes.hub-lifecycle.js +2 -1
  30. package/dist_ts/remoteingress/classes.tunnel-manager.d.ts +6 -0
  31. package/dist_ts/remoteingress/classes.tunnel-manager.js +40 -2
  32. package/dist_ts_interfaces/data/dns-record.d.ts +6 -0
  33. package/dist_ts_interfaces/data/email-domain.d.ts +81 -0
  34. package/dist_ts_interfaces/requests/email-domains.d.ts +25 -17
  35. package/dist_ts_migrations/index.js +185 -9
  36. package/dist_ts_web/00_commitinfo_data.js +1 -1
  37. package/dist_ts_web/appstate/email-domains.d.ts +16 -0
  38. package/dist_ts_web/appstate/email-domains.js +140 -19
  39. package/dist_ts_web/elements/email/ops-view-email-domains.d.ts +1 -0
  40. package/dist_ts_web/elements/email/ops-view-email-domains.js +36 -13
  41. package/package.json +7 -7
  42. package/readme.md +13 -1
  43. package/ts/00_commitinfo_data.ts +1 -1
  44. package/ts/classes.dcrouter.ts +22 -3
  45. package/ts/db/documents/classes.cached.email.ts +1 -0
  46. package/ts/db/documents/classes.dns-record.doc.ts +20 -0
  47. package/ts/db/documents/classes.email-domain.doc.ts +14 -0
  48. package/ts/dns/manager.dns.ts +89 -29
  49. package/ts/dns/providers/cloudflare.provider.ts +46 -27
  50. package/ts/email/classes.email-domain.manager.ts +416 -368
  51. package/ts/email/classes.mail-dns-sync.ts +913 -146
  52. package/ts/email/classes.mail-edge-eligibility.ts +205 -0
  53. package/ts/email/classes.mail-egress-coordinator.ts +46 -23
  54. package/ts/email/classes.workapp-mail-manager.ts +69 -13
  55. package/ts/email/index.ts +1 -0
  56. package/ts/opsserver/handlers/email-domain.handler.ts +154 -21
  57. package/ts/remoteingress/classes.hub-lifecycle.ts +1 -0
  58. package/ts/remoteingress/classes.tunnel-manager.ts +53 -7
  59. package/ts_web/00_commitinfo_data.ts +1 -1
  60. package/ts_web/appstate/email-domains.ts +187 -18
  61. package/ts_web/elements/email/ops-view-email-domains.ts +44 -12
@@ -1,23 +1,35 @@
1
1
  import type { IEmailDomainConfig } from '@push.rocks/smartmta';
2
- import type { IEmailDomain, IEmailDnsRecord, IEmailDomainRemoteIngress } from '../../dist_ts_interfaces/data/email-domain.js';
2
+ import { EmailDomainDoc } from '../db/documents/classes.email-domain.doc.js';
3
+ import type { IEmailDomain, IEmailDnsRecord, IEmailDomainRemoteIngress, IEmailDomainOperationError, TEmailDomainLifecycleStatus } from '../../dist_ts_interfaces/data/email-domain.js';
4
+ export interface IEmailDomainManagerActionResult {
5
+ success: boolean;
6
+ message?: string;
7
+ lifecycleStatus?: TEmailDomainLifecycleStatus;
8
+ code?: string;
9
+ errors?: IEmailDomainOperationError[];
10
+ retryAt?: string;
11
+ capability?: 'supported' | 'unsupported';
12
+ domain?: IEmailDomain;
13
+ records?: IEmailDnsRecord[];
14
+ provisioned?: number;
15
+ }
3
16
  /**
4
- * EmailDomainManager — orchestrates email domain setup.
5
- *
6
- * Wires smartmta's DKIMCreator (key generation) with dcrouter's DnsManager
7
- * (record creation for dcrouter-hosted and provider-managed zones) to provide
8
- * a single entry point for setting up an email domain from A to Z.
17
+ * Persists managed email domains and projects them into SmartMTA. DNS mutation
18
+ * is delegated exclusively to MailDnsSync.
9
19
  */
10
20
  export declare class EmailDomainManager {
11
21
  private dcRouter;
12
22
  private baseEmailDomains;
13
- private dnsClient?;
23
+ private mutationChain;
24
+ /** Explicit upstream capability marker; absence is deliberately fail-closed. */
25
+ private get selectorCorrectSigningCapability();
14
26
  constructor(dcRouterRef: any);
15
27
  setBaseEmailDomains(domains: IEmailDomainConfig[] | undefined): void;
16
- private get dnsManager();
17
28
  private get dkimCreator();
18
- private get emailHostname();
19
29
  start(): Promise<void>;
20
30
  stop(): Promise<void>;
31
+ supportsSelectorCorrectSigning(): boolean;
32
+ private runMutationExclusive;
21
33
  getAll(): Promise<IEmailDomain[]>;
22
34
  getById(id: string): Promise<IEmailDomain | null>;
23
35
  getByDomain(domainName: string): Promise<IEmailDomain | null>;
@@ -35,37 +47,30 @@ export declare class EmailDomainManager {
35
47
  rotateKeys?: boolean;
36
48
  rotationIntervalDays?: number;
37
49
  rateLimits?: IEmailDomain['rateLimits'];
38
- /** null clears the pin. */
39
50
  remoteIngress?: IEmailDomainRemoteIngress | null;
40
- }): Promise<void>;
41
- /**
42
- * Normalize a per-domain edge pin. Pins may reference edges that are not
43
- * registered yet — that only warns, so pins can precede edge registration.
44
- */
45
- private normalizeRemoteIngressPin;
46
- /** Enabled edges pinned for this domain (empty when unpinned). */
47
- private resolvePinnedEdges;
48
- deleteEmailDomain(id: string): Promise<void>;
49
- /**
50
- * Compute the 4 required DNS records for an email domain.
51
- */
51
+ }): Promise<IEmailDomainManagerActionResult>;
52
+ deleteEmailDomain(id: string): Promise<IEmailDomainManagerActionResult>;
52
53
  getRequiredDnsRecords(id: string): Promise<IEmailDnsRecord[]>;
53
- /**
54
- * Auto-create missing DNS records via the linked domain's DNS path.
55
- */
56
- provisionDnsRecords(id: string): Promise<number>;
57
- /**
58
- * Validate DNS records via live lookups.
59
- */
60
- validateDns(id: string): Promise<IEmailDnsRecord[]>;
61
- private recordMatchesRequired;
62
- /** Lazy shared smartdns client; the Rust bridge spawns on first non-system lookup. */
63
- private getDnsClient;
64
- /** 'pref exchange' normalized for comparison: numeric pref, lowercased exchange, no trailing dot. */
65
- private normalizeMxValue;
66
- private checkMx;
67
- private checkARecords;
68
- private checkTxtRecord;
54
+ provisionDnsRecords(id: string): Promise<IEmailDomainManagerActionResult>;
55
+ validateDns(id: string): Promise<IEmailDomainManagerActionResult>;
56
+ getOutboundReadiness(domainName: string): Promise<{
57
+ ready: boolean;
58
+ reason?: string;
59
+ edgeIds: string[];
60
+ selector?: string;
61
+ }>;
62
+ requestDkimRotation(id: string): Promise<IEmailDomainManagerActionResult>;
63
+ /** Called by the reconciler before planning so scheduled external rotation is durable first. */
64
+ stageDkimRotationIfDue(id: string): Promise<EmailDomainDoc | undefined>;
65
+ private stageDkimRotation;
66
+ private normalizeRemoteIngressPin;
67
+ private extractDkimPublicKey;
68
+ private getActiveDkim;
69
+ private invalidateReconciliation;
70
+ private capabilityError;
71
+ private unsupportedResult;
72
+ private hasDnsMutationFailure;
73
+ private resultForDoc;
69
74
  private docToInterface;
70
75
  private isDomainAlreadyConfigured;
71
76
  private findLinkedDnsDomain;