@serve.zone/dcrouter 13.9.2 → 13.11.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 (56) hide show
  1. package/dist_serve/bundle.js +1306 -1180
  2. package/dist_ts/00_commitinfo_data.js +2 -2
  3. package/dist_ts/classes.dcrouter.d.ts +2 -0
  4. package/dist_ts/classes.dcrouter.js +15 -1
  5. package/dist_ts/db/documents/classes.email-domain.doc.d.ts +16 -0
  6. package/dist_ts/db/documents/classes.email-domain.doc.js +118 -0
  7. package/dist_ts/db/documents/index.d.ts +1 -0
  8. package/dist_ts/db/documents/index.js +3 -1
  9. package/dist_ts/email/classes.email-domain.manager.d.ts +45 -0
  10. package/dist_ts/email/classes.email-domain.manager.js +272 -0
  11. package/dist_ts/email/index.d.ts +1 -0
  12. package/dist_ts/email/index.js +2 -0
  13. package/dist_ts/opsserver/classes.opsserver.d.ts +1 -0
  14. package/dist_ts/opsserver/classes.opsserver.js +3 -1
  15. package/dist_ts/opsserver/handlers/email-domain.handler.d.ts +16 -0
  16. package/dist_ts/opsserver/handlers/email-domain.handler.js +149 -0
  17. package/dist_ts/opsserver/handlers/index.d.ts +1 -0
  18. package/dist_ts/opsserver/handlers/index.js +2 -1
  19. package/dist_ts_interfaces/data/email-domain.d.ts +68 -0
  20. package/dist_ts_interfaces/data/email-domain.js +2 -0
  21. package/dist_ts_interfaces/data/index.d.ts +1 -0
  22. package/dist_ts_interfaces/data/index.js +2 -1
  23. package/dist_ts_interfaces/requests/email-domains.d.ts +140 -0
  24. package/dist_ts_interfaces/requests/email-domains.js +2 -0
  25. package/dist_ts_interfaces/requests/index.d.ts +1 -0
  26. package/dist_ts_interfaces/requests/index.js +2 -1
  27. package/dist_ts_web/00_commitinfo_data.js +2 -2
  28. package/dist_ts_web/appstate.d.ts +20 -0
  29. package/dist_ts_web/appstate.js +81 -1
  30. package/dist_ts_web/elements/domains/ops-view-certificates.js +17 -96
  31. package/dist_ts_web/elements/email/index.d.ts +1 -0
  32. package/dist_ts_web/elements/email/index.js +2 -1
  33. package/dist_ts_web/elements/email/ops-view-email-domains.d.ts +19 -0
  34. package/dist_ts_web/elements/email/ops-view-email-domains.js +403 -0
  35. package/dist_ts_web/elements/email/ops-view-email-security.d.ts +1 -1
  36. package/dist_ts_web/elements/email/ops-view-email-security.js +39 -58
  37. package/dist_ts_web/elements/ops-dashboard.js +3 -1
  38. package/dist_ts_web/router.js +2 -2
  39. package/package.json +2 -2
  40. package/ts/00_commitinfo_data.ts +1 -1
  41. package/ts/classes.dcrouter.ts +17 -0
  42. package/ts/db/documents/classes.email-domain.doc.ts +53 -0
  43. package/ts/db/documents/index.ts +3 -0
  44. package/ts/email/classes.email-domain.manager.ts +316 -0
  45. package/ts/email/index.ts +1 -0
  46. package/ts/opsserver/classes.opsserver.ts +2 -0
  47. package/ts/opsserver/handlers/email-domain.handler.ts +194 -0
  48. package/ts/opsserver/handlers/index.ts +2 -1
  49. package/ts_web/00_commitinfo_data.ts +1 -1
  50. package/ts_web/appstate.ts +123 -0
  51. package/ts_web/elements/domains/ops-view-certificates.ts +16 -95
  52. package/ts_web/elements/email/index.ts +1 -0
  53. package/ts_web/elements/email/ops-view-email-domains.ts +389 -0
  54. package/ts_web/elements/email/ops-view-email-security.ts +38 -57
  55. package/ts_web/elements/ops-dashboard.ts +2 -0
  56. package/ts_web/router.ts +1 -1
@@ -0,0 +1,68 @@
1
+ /**
2
+ * DNS record validation status for a single email-related record (MX, SPF, DKIM, DMARC).
3
+ */
4
+ export type TDnsRecordStatus = 'valid' | 'missing' | 'invalid' | 'unchecked';
5
+ /**
6
+ * An email domain managed by dcrouter.
7
+ *
8
+ * Each email domain is linked to an existing dcrouter DNS domain (dcrouter-hosted
9
+ * or provider-managed). The DNS management path is inherited from the linked domain
10
+ * — no separate DNS mode is needed.
11
+ */
12
+ export interface IEmailDomain {
13
+ id: string;
14
+ /** Fully qualified domain name (e.g. 'example.com'). */
15
+ domain: string;
16
+ /** ID of the linked dcrouter DNS domain — determines how DNS records are managed. */
17
+ linkedDomainId: string;
18
+ /** DKIM configuration and key state. */
19
+ dkim: IEmailDomainDkim;
20
+ /** Optional per-domain rate limits. */
21
+ rateLimits?: IEmailDomainRateLimits;
22
+ /** DNS record validation status — populated by validateDns(). */
23
+ dnsStatus: IEmailDomainDnsStatus;
24
+ createdAt: string;
25
+ updatedAt: string;
26
+ }
27
+ export interface IEmailDomainDkim {
28
+ /** DKIM selector (default: 'default'). */
29
+ selector: string;
30
+ /** RSA key size in bits (default: 2048). */
31
+ keySize: number;
32
+ /** Base64-encoded public key — populated after key generation. */
33
+ publicKey?: string;
34
+ /** Whether automatic key rotation is enabled. */
35
+ rotateKeys: boolean;
36
+ /** Days between key rotations (default: 90). */
37
+ rotationIntervalDays: number;
38
+ /** ISO date of last key rotation. */
39
+ lastRotatedAt?: string;
40
+ }
41
+ export interface IEmailDomainRateLimits {
42
+ outbound?: {
43
+ messagesPerMinute?: number;
44
+ messagesPerHour?: number;
45
+ messagesPerDay?: number;
46
+ };
47
+ inbound?: {
48
+ messagesPerMinute?: number;
49
+ connectionsPerIp?: number;
50
+ recipientsPerMessage?: number;
51
+ };
52
+ }
53
+ export interface IEmailDomainDnsStatus {
54
+ mx: TDnsRecordStatus;
55
+ spf: TDnsRecordStatus;
56
+ dkim: TDnsRecordStatus;
57
+ dmarc: TDnsRecordStatus;
58
+ lastCheckedAt?: string;
59
+ }
60
+ /**
61
+ * A single required DNS record for an email domain — used for display / copy-paste.
62
+ */
63
+ export interface IEmailDnsRecord {
64
+ type: 'MX' | 'TXT';
65
+ name: string;
66
+ value: string;
67
+ status: TDnsRecordStatus;
68
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1haWwtZG9tYWluLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHNfaW50ZXJmYWNlcy9kYXRhL2VtYWlsLWRvbWFpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIn0=
@@ -8,3 +8,4 @@ export * from './dns-provider.js';
8
8
  export * from './domain.js';
9
9
  export * from './dns-record.js';
10
10
  export * from './acme-config.js';
11
+ export * from './email-domain.js';
@@ -8,4 +8,5 @@ export * from './dns-provider.js';
8
8
  export * from './domain.js';
9
9
  export * from './dns-record.js';
10
10
  export * from './acme-config.js';
11
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90c19pbnRlcmZhY2VzL2RhdGEvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxXQUFXLENBQUM7QUFDMUIsY0FBYyxZQUFZLENBQUM7QUFDM0IsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxVQUFVLENBQUM7QUFDekIsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMsa0JBQWtCLENBQUMifQ==
11
+ export * from './email-domain.js';
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90c19pbnRlcmZhY2VzL2RhdGEvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxXQUFXLENBQUM7QUFDMUIsY0FBYyxZQUFZLENBQUM7QUFDM0IsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxVQUFVLENBQUM7QUFDekIsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyxtQkFBbUIsQ0FBQyJ9
@@ -0,0 +1,140 @@
1
+ import * as plugins from '../plugins.js';
2
+ import type * as authInterfaces from '../data/auth.js';
3
+ import type { IEmailDomain, IEmailDnsRecord } from '../data/email-domain.js';
4
+ /**
5
+ * List all email domains.
6
+ */
7
+ export interface IReq_GetEmailDomains extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_GetEmailDomains> {
8
+ method: 'getEmailDomains';
9
+ request: {
10
+ identity?: authInterfaces.IIdentity;
11
+ apiToken?: string;
12
+ };
13
+ response: {
14
+ domains: IEmailDomain[];
15
+ };
16
+ }
17
+ /**
18
+ * Get a single email domain by id.
19
+ */
20
+ export interface IReq_GetEmailDomain extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_GetEmailDomain> {
21
+ method: 'getEmailDomain';
22
+ request: {
23
+ identity?: authInterfaces.IIdentity;
24
+ apiToken?: string;
25
+ id: string;
26
+ };
27
+ response: {
28
+ domain: IEmailDomain | null;
29
+ };
30
+ }
31
+ /**
32
+ * Create an email domain. Links to an existing dcrouter DNS domain.
33
+ * Generates DKIM keys and computes the required DNS records.
34
+ */
35
+ export interface IReq_CreateEmailDomain extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_CreateEmailDomain> {
36
+ method: 'createEmailDomain';
37
+ request: {
38
+ identity?: authInterfaces.IIdentity;
39
+ apiToken?: string;
40
+ /** ID of the existing dcrouter DNS domain to link to. */
41
+ linkedDomainId: string;
42
+ /** DKIM selector (default: 'default'). */
43
+ dkimSelector?: string;
44
+ /** RSA key size (default: 2048). */
45
+ dkimKeySize?: number;
46
+ /** Enable automatic key rotation (default: false). */
47
+ rotateKeys?: boolean;
48
+ /** Days between rotations (default: 90). */
49
+ rotationIntervalDays?: number;
50
+ };
51
+ response: {
52
+ success: boolean;
53
+ domain?: IEmailDomain;
54
+ message?: string;
55
+ };
56
+ }
57
+ /**
58
+ * Update an email domain's configuration.
59
+ */
60
+ export interface IReq_UpdateEmailDomain extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_UpdateEmailDomain> {
61
+ method: 'updateEmailDomain';
62
+ request: {
63
+ identity?: authInterfaces.IIdentity;
64
+ apiToken?: string;
65
+ id: string;
66
+ rotateKeys?: boolean;
67
+ rotationIntervalDays?: number;
68
+ rateLimits?: IEmailDomain['rateLimits'];
69
+ };
70
+ response: {
71
+ success: boolean;
72
+ message?: string;
73
+ };
74
+ }
75
+ /**
76
+ * Delete an email domain.
77
+ */
78
+ export interface IReq_DeleteEmailDomain extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_DeleteEmailDomain> {
79
+ method: 'deleteEmailDomain';
80
+ request: {
81
+ identity?: authInterfaces.IIdentity;
82
+ apiToken?: string;
83
+ id: string;
84
+ };
85
+ response: {
86
+ success: boolean;
87
+ message?: string;
88
+ };
89
+ }
90
+ /**
91
+ * Trigger DNS validation for an email domain.
92
+ * Performs live lookups for MX, SPF, DKIM, and DMARC records.
93
+ */
94
+ export interface IReq_ValidateEmailDomain extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_ValidateEmailDomain> {
95
+ method: 'validateEmailDomain';
96
+ request: {
97
+ identity?: authInterfaces.IIdentity;
98
+ apiToken?: string;
99
+ id: string;
100
+ };
101
+ response: {
102
+ success: boolean;
103
+ domain?: IEmailDomain;
104
+ records?: IEmailDnsRecord[];
105
+ message?: string;
106
+ };
107
+ }
108
+ /**
109
+ * Get the required DNS records for an email domain (for display / copy-paste).
110
+ */
111
+ export interface IReq_GetEmailDomainDnsRecords extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_GetEmailDomainDnsRecords> {
112
+ method: 'getEmailDomainDnsRecords';
113
+ request: {
114
+ identity?: authInterfaces.IIdentity;
115
+ apiToken?: string;
116
+ id: string;
117
+ };
118
+ response: {
119
+ records: IEmailDnsRecord[];
120
+ };
121
+ }
122
+ /**
123
+ * Auto-provision DNS records for an email domain.
124
+ * Creates any missing MX, SPF, DKIM, and DMARC records via the linked
125
+ * domain's DNS path (dcrouter zone or provider API).
126
+ */
127
+ export interface IReq_ProvisionEmailDomainDns extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_ProvisionEmailDomainDns> {
128
+ method: 'provisionEmailDomainDns';
129
+ request: {
130
+ identity?: authInterfaces.IIdentity;
131
+ apiToken?: string;
132
+ id: string;
133
+ };
134
+ response: {
135
+ success: boolean;
136
+ /** Number of records created. */
137
+ provisioned?: number;
138
+ message?: string;
139
+ };
140
+ }
@@ -0,0 +1,2 @@
1
+ import * as plugins from '../plugins.js';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1haWwtZG9tYWlucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzX2ludGVyZmFjZXMvcmVxdWVzdHMvZW1haWwtZG9tYWlucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGVBQWUsQ0FBQyJ9
@@ -18,3 +18,4 @@ export * from './dns-providers.js';
18
18
  export * from './domains.js';
19
19
  export * from './dns-records.js';
20
20
  export * from './acme-config.js';
21
+ export * from './email-domains.js';
@@ -18,4 +18,5 @@ export * from './dns-providers.js';
18
18
  export * from './domains.js';
19
19
  export * from './dns-records.js';
20
20
  export * from './acme-config.js';
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90c19pbnRlcmZhY2VzL3JlcXVlc3RzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsWUFBWSxDQUFDO0FBQzNCLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsV0FBVyxDQUFDO0FBQzFCLGNBQWMsWUFBWSxDQUFDO0FBQzNCLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMsVUFBVSxDQUFDO0FBQ3pCLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsWUFBWSxDQUFDO0FBQzNCLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLGtCQUFrQixDQUFDIn0=
21
+ export * from './email-domains.js';
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90c19pbnRlcmZhY2VzL3JlcXVlc3RzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsWUFBWSxDQUFDO0FBQzNCLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsV0FBVyxDQUFDO0FBQzFCLGNBQWMsWUFBWSxDQUFDO0FBQzNCLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMsVUFBVSxDQUFDO0FBQ3pCLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsWUFBWSxDQUFDO0FBQzNCLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsb0JBQW9CLENBQUMifQ==
@@ -3,7 +3,7 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@serve.zone/dcrouter',
6
- version: '13.9.2',
6
+ version: '13.11.0',
7
7
  description: 'A multifaceted routing service handling mail and SMS delivery functions.'
8
8
  };
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHNfd2ViLzAwX2NvbW1pdGluZm9fZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRztJQUN4QixJQUFJLEVBQUUsc0JBQXNCO0lBQzVCLE9BQU8sRUFBRSxRQUFRO0lBQ2pCLFdBQVcsRUFBRSwwRUFBMEU7Q0FDeEYsQ0FBQSJ9
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHNfd2ViLzAwX2NvbW1pdGluZm9fZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRztJQUN4QixJQUFJLEVBQUUsc0JBQXNCO0lBQzVCLE9BQU8sRUFBRSxTQUFTO0lBQ2xCLFdBQVcsRUFBRSwwRUFBMEU7Q0FDeEYsQ0FBQSJ9
@@ -447,3 +447,23 @@ export declare const toggleApiTokenAction: plugins.deesElement.domtools.plugins.
447
447
  id: string;
448
448
  enabled: boolean;
449
449
  }>;
450
+ export interface IEmailDomainsState {
451
+ domains: interfaces.data.IEmailDomain[];
452
+ isLoading: boolean;
453
+ lastUpdated: number;
454
+ }
455
+ export declare const emailDomainsStatePart: plugins.deesElement.domtools.plugins.smartstate.StatePart<string, IEmailDomainsState>;
456
+ export declare const fetchEmailDomainsAction: plugins.deesElement.domtools.plugins.smartstate.StateAction<IEmailDomainsState, unknown>;
457
+ export declare const createEmailDomainAction: plugins.deesElement.domtools.plugins.smartstate.StateAction<IEmailDomainsState, {
458
+ linkedDomainId: string;
459
+ dkimSelector?: string;
460
+ dkimKeySize?: number;
461
+ rotateKeys?: boolean;
462
+ rotationIntervalDays?: number;
463
+ }>;
464
+ export declare const deleteEmailDomainAction: plugins.deesElement.domtools.plugins.smartstate.StateAction<IEmailDomainsState, string>;
465
+ export declare const validateEmailDomainAction: plugins.deesElement.domtools.plugins.smartstate.StateAction<IEmailDomainsState, string>;
466
+ export declare const provisionEmailDomainDnsAction: plugins.deesElement.domtools.plugins.smartstate.StateAction<IEmailDomainsState, string>;
467
+ export declare function fetchEmailDomainDnsRecords(id: string): Promise<{
468
+ records: interfaces.data.IEmailDnsRecord[];
469
+ }>;