@serve.zone/dcrouter 16.4.1 → 17.0.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 (82) 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 +5 -1
  5. package/dist_ts/classes.dcrouter.js +42 -9
  6. package/dist_ts/db/documents/classes.dns-record.doc.d.ts +4 -0
  7. package/dist_ts/db/documents/classes.dns-record.doc.js +33 -2
  8. package/dist_ts/db/documents/classes.email-domain.doc.d.ts +5 -1
  9. package/dist_ts/db/documents/classes.email-domain.doc.js +26 -2
  10. package/dist_ts/db/documents/classes.smartmta-storage.doc.d.ts +8 -0
  11. package/dist_ts/db/documents/classes.smartmta-storage.doc.js +91 -0
  12. package/dist_ts/db/documents/index.d.ts +1 -0
  13. package/dist_ts/db/documents/index.js +2 -1
  14. package/dist_ts/dns/manager.dns.d.ts +6 -0
  15. package/dist_ts/dns/manager.dns.js +81 -32
  16. package/dist_ts/dns/providers/cloudflare.provider.d.ts +2 -0
  17. package/dist_ts/dns/providers/cloudflare.provider.js +45 -28
  18. package/dist_ts/email/classes.email-domain.manager.d.ts +43 -38
  19. package/dist_ts/email/classes.email-domain.manager.js +391 -324
  20. package/dist_ts/email/classes.email-settings.manager.js +2 -1
  21. package/dist_ts/email/classes.mail-dns-sync.d.ts +58 -17
  22. package/dist_ts/email/classes.mail-dns-sync.js +857 -141
  23. package/dist_ts/email/classes.mail-edge-eligibility.d.ts +55 -0
  24. package/dist_ts/email/classes.mail-edge-eligibility.js +168 -0
  25. package/dist_ts/email/classes.mail-egress-coordinator.d.ts +3 -1
  26. package/dist_ts/email/classes.mail-egress-coordinator.js +43 -22
  27. package/dist_ts/email/classes.smartmta-blob-storage-manager.d.ts +27 -0
  28. package/dist_ts/email/classes.smartmta-blob-storage-manager.js +109 -0
  29. package/dist_ts/email/classes.smartmta-storage-manager.d.ts +6 -8
  30. package/dist_ts/email/classes.smartmta-storage-manager.js +63 -86
  31. package/dist_ts/email/classes.workapp-mail-manager.d.ts +3 -0
  32. package/dist_ts/email/classes.workapp-mail-manager.js +63 -14
  33. package/dist_ts/email/index.d.ts +3 -0
  34. package/dist_ts/email/index.js +4 -1
  35. package/dist_ts/email/smartmta-storage-policy.d.ts +9 -0
  36. package/dist_ts/email/smartmta-storage-policy.js +58 -0
  37. package/dist_ts/opsserver/handlers/email-domain.handler.d.ts +1 -0
  38. package/dist_ts/opsserver/handlers/email-domain.handler.js +138 -22
  39. package/dist_ts/opsserver/handlers/stats.handler.js +3 -5
  40. package/dist_ts/plugins.d.ts +2 -1
  41. package/dist_ts/plugins.js +3 -2
  42. package/dist_ts/remoteingress/classes.hub-lifecycle.js +2 -1
  43. package/dist_ts/remoteingress/classes.tunnel-manager.d.ts +6 -0
  44. package/dist_ts/remoteingress/classes.tunnel-manager.js +40 -2
  45. package/dist_ts_interfaces/data/dns-record.d.ts +6 -0
  46. package/dist_ts_interfaces/data/email-domain.d.ts +81 -0
  47. package/dist_ts_interfaces/requests/email-domains.d.ts +25 -17
  48. package/dist_ts_migrations/index.d.ts +2 -0
  49. package/dist_ts_migrations/index.js +441 -16
  50. package/dist_ts_web/00_commitinfo_data.js +1 -1
  51. package/dist_ts_web/appstate/email-domains.d.ts +16 -0
  52. package/dist_ts_web/appstate/email-domains.js +140 -19
  53. package/dist_ts_web/elements/email/ops-view-email-domains.d.ts +1 -0
  54. package/dist_ts_web/elements/email/ops-view-email-domains.js +36 -13
  55. package/package.json +4 -3
  56. package/readme.md +13 -1
  57. package/ts/00_commitinfo_data.ts +1 -1
  58. package/ts/classes.dcrouter.ts +55 -11
  59. package/ts/db/documents/classes.dns-record.doc.ts +20 -0
  60. package/ts/db/documents/classes.email-domain.doc.ts +14 -0
  61. package/ts/db/documents/classes.smartmta-storage.doc.ts +25 -0
  62. package/ts/db/documents/index.ts +1 -0
  63. package/ts/dns/manager.dns.ts +89 -29
  64. package/ts/dns/providers/cloudflare.provider.ts +46 -27
  65. package/ts/email/classes.email-domain.manager.ts +416 -368
  66. package/ts/email/classes.email-settings.manager.ts +1 -0
  67. package/ts/email/classes.mail-dns-sync.ts +913 -146
  68. package/ts/email/classes.mail-edge-eligibility.ts +205 -0
  69. package/ts/email/classes.mail-egress-coordinator.ts +46 -23
  70. package/ts/email/classes.smartmta-blob-storage-manager.ts +138 -0
  71. package/ts/email/classes.smartmta-storage-manager.ts +86 -83
  72. package/ts/email/classes.workapp-mail-manager.ts +82 -16
  73. package/ts/email/index.ts +3 -0
  74. package/ts/email/smartmta-storage-policy.ts +73 -0
  75. package/ts/opsserver/handlers/email-domain.handler.ts +154 -21
  76. package/ts/opsserver/handlers/stats.handler.ts +2 -4
  77. package/ts/plugins.ts +2 -1
  78. package/ts/remoteingress/classes.hub-lifecycle.ts +1 -0
  79. package/ts/remoteingress/classes.tunnel-manager.ts +53 -7
  80. package/ts_web/00_commitinfo_data.ts +1 -1
  81. package/ts_web/appstate/email-domains.ts +187 -18
  82. package/ts_web/elements/email/ops-view-email-domains.ts +44 -12
@@ -3,7 +3,7 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@serve.zone/dcrouter',
6
- version: '16.4.1',
6
+ version: '17.0.0',
7
7
  description: 'A multifaceted routing service handling mail and SMS delivery functions.'
8
8
  };
9
9
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHNfd2ViLzAwX2NvbW1pdGluZm9fZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRztJQUN4QixJQUFJLEVBQUUsc0JBQXNCO0lBQzVCLE9BQU8sRUFBRSxRQUFRO0lBQ2pCLFdBQVcsRUFBRSwwRUFBMEU7Q0FDeEYsQ0FBQSJ9
@@ -1,12 +1,20 @@
1
1
  import * as plugins from '../plugins.js';
2
2
  import * as interfaces from '../../dist_ts_interfaces/index.js';
3
+ export type TEmailDomainOperationName = 'create' | 'update' | 'delete' | 'validate' | 'provision' | 'reconcile' | 'rotate';
4
+ export interface IEmailDomainOperationState extends interfaces.requests.IEmailDomainActionResult {
5
+ operation: TEmailDomainOperationName;
6
+ completedAt: number;
7
+ }
3
8
  export interface IEmailDomainsState {
4
9
  domains: interfaces.data.IEmailDomain[];
5
10
  settings: interfaces.data.IEmailServerSettings | null;
6
11
  isLoading: boolean;
12
+ error: string | null;
13
+ lastOperation: IEmailDomainOperationState | null;
7
14
  lastUpdated: number;
8
15
  }
9
16
  export declare const emailDomainsStatePart: plugins.deesElement.domtools.plugins.smartstate.StatePart<string, IEmailDomainsState>;
17
+ export declare const formatEmailDomainOperationMessage: (operationArg: IEmailDomainOperationState, fallbackMessageArg: string) => string;
10
18
  export declare const fetchEmailDomainsAction: plugins.deesElement.domtools.plugins.smartstate.StateAction<IEmailDomainsState, unknown>;
11
19
  export declare const createEmailDomainAction: plugins.deesElement.domtools.plugins.smartstate.StateAction<IEmailDomainsState, {
12
20
  linkedDomainId: string;
@@ -15,6 +23,14 @@ export declare const createEmailDomainAction: plugins.deesElement.domtools.plugi
15
23
  dkimKeySize?: number;
16
24
  rotateKeys?: boolean;
17
25
  rotationIntervalDays?: number;
26
+ remoteIngress?: interfaces.data.IEmailDomainRemoteIngress;
27
+ }>;
28
+ export declare const updateEmailDomainAction: plugins.deesElement.domtools.plugins.smartstate.StateAction<IEmailDomainsState, {
29
+ id: string;
30
+ rotateKeys?: boolean;
31
+ rotationIntervalDays?: number;
32
+ rateLimits?: interfaces.data.IEmailDomain["rateLimits"];
33
+ remoteIngress?: interfaces.data.IEmailDomainRemoteIngress | null;
18
34
  }>;
19
35
  export declare const updateEmailServerSettingsAction: plugins.deesElement.domtools.plugins.smartstate.StateAction<IEmailDomainsState, interfaces.data.TEmailServerSettingsUpdate>;
20
36
  export declare const deleteEmailDomainAction: plugins.deesElement.domtools.plugins.smartstate.StateAction<IEmailDomainsState, string>;
@@ -6,8 +6,62 @@ export const emailDomainsStatePart = await appState.getStatePart('emailDomains',
6
6
  domains: [],
7
7
  settings: null,
8
8
  isLoading: false,
9
+ error: null,
10
+ lastOperation: null,
9
11
  lastUpdated: 0,
10
12
  }, 'soft');
13
+ const createOperationState = (operationArg, responseArg) => ({
14
+ operation: operationArg,
15
+ completedAt: Date.now(),
16
+ ...responseArg,
17
+ });
18
+ const createFailedOperationState = (operationArg, errorArg, fallbackMessageArg) => ({
19
+ operation: operationArg,
20
+ completedAt: Date.now(),
21
+ success: false,
22
+ message: errorArg instanceof Error ? errorArg.message : fallbackMessageArg,
23
+ code: 'EMAIL_DOMAIN_REQUEST_FAILED',
24
+ errors: [
25
+ {
26
+ code: 'EMAIL_DOMAIN_REQUEST_FAILED',
27
+ message: errorArg instanceof Error ? errorArg.message : fallbackMessageArg,
28
+ retryable: true,
29
+ },
30
+ ],
31
+ });
32
+ export const formatEmailDomainOperationMessage = (operationArg, fallbackMessageArg) => {
33
+ const primaryMessage = operationArg.message || fallbackMessageArg;
34
+ const messageParts = [
35
+ operationArg.code ? `${primaryMessage} [${operationArg.code}]` : primaryMessage,
36
+ ];
37
+ for (const error of operationArg.errors || []) {
38
+ const location = error.recordKey ? `${error.recordKey}: ` : '';
39
+ const detail = `${location}${error.message} [${error.code}]`;
40
+ const duplicatesPrimary = !error.recordKey &&
41
+ error.message === primaryMessage &&
42
+ error.code === operationArg.code;
43
+ if (!duplicatesPrimary && !messageParts.includes(detail)) {
44
+ messageParts.push(detail);
45
+ }
46
+ }
47
+ if (operationArg.lifecycleStatus && operationArg.lifecycleStatus !== 'active') {
48
+ messageParts.push(`Lifecycle: ${operationArg.lifecycleStatus}`);
49
+ }
50
+ if (operationArg.capability === 'unsupported' && !messageParts.some((part) => part.includes('unsupported'))) {
51
+ messageParts.push('Required capability is unsupported');
52
+ }
53
+ if (operationArg.retryAt) {
54
+ messageParts.push(`Retry scheduled for ${operationArg.retryAt}`);
55
+ }
56
+ return messageParts.join(' — ');
57
+ };
58
+ const applyOperationState = (stateArg, operationArg, fallbackMessageArg) => ({
59
+ ...stateArg,
60
+ error: operationArg.success
61
+ ? null
62
+ : formatEmailDomainOperationMessage(operationArg, fallbackMessageArg),
63
+ lastOperation: operationArg,
64
+ });
11
65
  export const fetchEmailDomainsAction = emailDomainsStatePart.createAction(async (statePartArg) => {
12
66
  const context = getActionContext();
13
67
  const currentState = statePartArg.getState();
@@ -23,23 +77,60 @@ export const fetchEmailDomainsAction = emailDomainsStatePart.createAction(async
23
77
  domains: response.domains,
24
78
  settings: settingsResponse.settings,
25
79
  isLoading: false,
80
+ error: null,
26
81
  lastUpdated: Date.now(),
27
82
  };
28
83
  }
29
- catch {
30
- return { ...currentState, isLoading: false };
84
+ catch (error) {
85
+ return {
86
+ ...currentState,
87
+ isLoading: false,
88
+ error: error instanceof Error ? error.message : 'Failed to fetch email domains',
89
+ };
31
90
  }
32
91
  });
33
92
  export const createEmailDomainAction = emailDomainsStatePart.createAction(async (statePartArg, args, actionContext) => {
34
93
  const context = getActionContext();
35
94
  const currentState = statePartArg.getState();
95
+ if (!context.identity) {
96
+ const operation = createFailedOperationState('create', new Error('Not authenticated'), 'Not authenticated');
97
+ return applyOperationState(currentState, operation, 'Failed to create email domain');
98
+ }
36
99
  try {
37
100
  const request = new plugins.domtools.plugins.typedrequest.TypedRequest('/typedrequest', 'createEmailDomain');
38
- await request.fire({ identity: context.identity, ...args });
39
- return await actionContext.dispatch(fetchEmailDomainsAction, null);
101
+ const response = await request.fire({ identity: context.identity, ...args });
102
+ const operation = createOperationState('create', response);
103
+ if (!response.success) {
104
+ return applyOperationState(currentState, operation, 'Failed to create email domain');
105
+ }
106
+ const refreshedState = await actionContext.dispatch(fetchEmailDomainsAction, null);
107
+ return applyOperationState(refreshedState, operation, 'Email domain created');
40
108
  }
41
- catch {
42
- return currentState;
109
+ catch (error) {
110
+ const operation = createFailedOperationState('create', error, 'Failed to create email domain');
111
+ return applyOperationState(currentState, operation, 'Failed to create email domain');
112
+ }
113
+ });
114
+ export const updateEmailDomainAction = emailDomainsStatePart.createAction(async (statePartArg, args, actionContext) => {
115
+ const context = getActionContext();
116
+ const currentState = statePartArg.getState();
117
+ if (!context.identity) {
118
+ const operation = createFailedOperationState('update', new Error('Not authenticated'), 'Not authenticated');
119
+ return applyOperationState(currentState, operation, 'Failed to update email domain');
120
+ }
121
+ try {
122
+ const request = new plugins.domtools.plugins.typedrequest.TypedRequest('/typedrequest', 'updateEmailDomain');
123
+ const response = await request.fire({ identity: context.identity, ...args });
124
+ const operation = createOperationState('update', response);
125
+ if (!response.success) {
126
+ return applyOperationState(currentState, operation, 'Failed to update email domain');
127
+ }
128
+ const refreshedState = await actionContext.dispatch(fetchEmailDomainsAction, null);
129
+ return applyOperationState(refreshedState, operation, 'Email domain updated');
130
+ }
131
+ catch (error) {
132
+ const operation = createFailedOperationState('update', error, 'Failed to update email domain');
133
+ return applyOperationState(currentState, operation, 'Failed to update email domain');
43
134
  }
44
135
  });
45
136
  export const updateEmailServerSettingsAction = emailDomainsStatePart.createAction(async (statePartArg, settings, actionContext) => {
@@ -60,37 +151,67 @@ export const updateEmailServerSettingsAction = emailDomainsStatePart.createActio
60
151
  export const deleteEmailDomainAction = emailDomainsStatePart.createAction(async (statePartArg, id, actionContext) => {
61
152
  const context = getActionContext();
62
153
  const currentState = statePartArg.getState();
154
+ if (!context.identity) {
155
+ const operation = createFailedOperationState('delete', new Error('Not authenticated'), 'Not authenticated');
156
+ return applyOperationState(currentState, operation, 'Failed to delete email domain');
157
+ }
63
158
  try {
64
159
  const request = new plugins.domtools.plugins.typedrequest.TypedRequest('/typedrequest', 'deleteEmailDomain');
65
- await request.fire({ identity: context.identity, id });
66
- return await actionContext.dispatch(fetchEmailDomainsAction, null);
160
+ const response = await request.fire({ identity: context.identity, id });
161
+ const operation = createOperationState('delete', response);
162
+ if (!response.success) {
163
+ return applyOperationState(currentState, operation, 'Failed to delete email domain');
164
+ }
165
+ const refreshedState = await actionContext.dispatch(fetchEmailDomainsAction, null);
166
+ return applyOperationState(refreshedState, operation, 'Email domain deleted');
67
167
  }
68
- catch {
69
- return currentState;
168
+ catch (error) {
169
+ const operation = createFailedOperationState('delete', error, 'Failed to delete email domain');
170
+ return applyOperationState(currentState, operation, 'Failed to delete email domain');
70
171
  }
71
172
  });
72
173
  export const validateEmailDomainAction = emailDomainsStatePart.createAction(async (statePartArg, id, actionContext) => {
73
174
  const context = getActionContext();
74
175
  const currentState = statePartArg.getState();
176
+ if (!context.identity) {
177
+ const operation = createFailedOperationState('validate', new Error('Not authenticated'), 'Not authenticated');
178
+ return applyOperationState(currentState, operation, 'Failed to validate email domain DNS');
179
+ }
75
180
  try {
76
181
  const request = new plugins.domtools.plugins.typedrequest.TypedRequest('/typedrequest', 'validateEmailDomain');
77
- await request.fire({ identity: context.identity, id });
78
- return await actionContext.dispatch(fetchEmailDomainsAction, null);
182
+ const response = await request.fire({ identity: context.identity, id });
183
+ const operation = createOperationState('validate', response);
184
+ if (!response.success) {
185
+ return applyOperationState(currentState, operation, 'Failed to validate email domain DNS');
186
+ }
187
+ const refreshedState = await actionContext.dispatch(fetchEmailDomainsAction, null);
188
+ return applyOperationState(refreshedState, operation, 'Email domain DNS validated');
79
189
  }
80
- catch {
81
- return currentState;
190
+ catch (error) {
191
+ const operation = createFailedOperationState('validate', error, 'Failed to validate email domain DNS');
192
+ return applyOperationState(currentState, operation, 'Failed to validate email domain DNS');
82
193
  }
83
194
  });
84
195
  export const provisionEmailDomainDnsAction = emailDomainsStatePart.createAction(async (statePartArg, id, actionContext) => {
85
196
  const context = getActionContext();
86
197
  const currentState = statePartArg.getState();
198
+ if (!context.identity) {
199
+ const operation = createFailedOperationState('provision', new Error('Not authenticated'), 'Not authenticated');
200
+ return applyOperationState(currentState, operation, 'Failed to provision email domain DNS');
201
+ }
87
202
  try {
88
203
  const request = new plugins.domtools.plugins.typedrequest.TypedRequest('/typedrequest', 'provisionEmailDomainDns');
89
- await request.fire({ identity: context.identity, id });
90
- return await actionContext.dispatch(fetchEmailDomainsAction, null);
204
+ const response = await request.fire({ identity: context.identity, id });
205
+ const operation = createOperationState('provision', response);
206
+ if (!response.success) {
207
+ return applyOperationState(currentState, operation, 'Failed to provision email domain DNS');
208
+ }
209
+ const refreshedState = await actionContext.dispatch(fetchEmailDomainsAction, null);
210
+ return applyOperationState(refreshedState, operation, 'Email domain DNS provisioned');
91
211
  }
92
- catch {
93
- return currentState;
212
+ catch (error) {
213
+ const operation = createFailedOperationState('provision', error, 'Failed to provision email domain DNS');
214
+ return applyOperationState(currentState, operation, 'Failed to provision email domain DNS');
94
215
  }
95
216
  });
96
217
  // ============================================================================
@@ -101,4 +222,4 @@ export async function fetchEmailDomainDnsRecords(id) {
101
222
  const request = new plugins.domtools.plugins.typedrequest.TypedRequest('/typedrequest', 'getEmailDomainDnsRecords');
102
223
  return request.fire({ identity: context.identity, id });
103
224
  }
104
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1haWwtZG9tYWlucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3RzX3dlYi9hcHBzdGF0ZS9lbWFpbC1kb21haW5zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sS0FBSyxVQUFVLE1BQU0sOEJBQThCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN2QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFjOUMsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsTUFBTSxRQUFRLENBQUMsWUFBWSxDQUM5RCxjQUFjLEVBQ2Q7SUFDRSxPQUFPLEVBQUUsRUFBRTtJQUNYLFFBQVEsRUFBRSxJQUFJO0lBQ2QsU0FBUyxFQUFFLEtBQUs7SUFDaEIsV0FBVyxFQUFFLENBQUM7Q0FDZixFQUNELE1BQU0sQ0FDUCxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcscUJBQXFCLENBQUMsWUFBWSxDQUN2RSxLQUFLLEVBQUUsWUFBWSxFQUErQixFQUFFO0lBQ2xELE1BQU0sT0FBTyxHQUFHLGdCQUFnQixFQUFFLENBQUM7SUFDbkMsTUFBTSxZQUFZLEdBQUcsWUFBWSxDQUFDLFFBQVEsRUFBRyxDQUFDO0lBQzlDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUTtRQUFFLE9BQU8sWUFBWSxDQUFDO0lBRTNDLElBQUksQ0FBQztRQUNILE1BQU0sT0FBTyxHQUFHLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FFcEUsZUFBZSxFQUFFLGlCQUFpQixDQUFDLENBQUM7UUFDdEMsTUFBTSxlQUFlLEdBQUcsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUU1RSxlQUFlLEVBQUUsd0JBQXdCLENBQUMs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
225
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1haWwtZG9tYWlucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3RzX3dlYi9hcHBzdGF0ZS9lbWFpbC1kb21haW5zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sS0FBSyxVQUFVLE1BQU0sOEJBQThCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN2QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUE4QjlDLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLE1BQU0sUUFBUSxDQUFDLFlBQVksQ0FDOUQsY0FBYyxFQUNkO0lBQ0UsT0FBTyxFQUFFLEVBQUU7SUFDWCxRQUFRLEVBQUUsSUFBSTtJQUNkLFNBQVMsRUFBRSxLQUFLO0lBQ2hCLEtBQUssRUFBRSxJQUFJO0lBQ1gsYUFBYSxFQUFFLElBQUk7SUFDbkIsV0FBVyxFQUFFLENBQUM7Q0FDZixFQUNELE1BQU0sQ0FDUCxDQUFDO0FBRUYsTUFBTSxvQkFBb0IsR0FBRyxDQUMzQixZQUF1QyxFQUN2QyxXQUF5RCxFQUM3QixFQUFFLENBQUMsQ0FBQztJQUNoQyxTQUFTLEVBQUUsWUFBWTtJQUN2QixXQUFXLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRTtJQUN2QixHQUFHLFdBQVc7Q0FDZixDQUFDLENBQUM7QUFFSCxNQUFNLDBCQUEwQixHQUFHLENBQ2pDLFlBQXVDLEVBQ3ZDLFFBQWlCLEVBQ2pCLGtCQUEwQixFQUNFLEVBQUUsQ0FBQyxDQUFDO0lBQ2hDLFNBQVMsRUFBRSxZQUFZO0lBQ3ZCLFdBQVcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFO0lBQ3ZCLE9BQU8sRUFBRSxLQUFLO0lBQ2QsT0FBTyxFQUFFLFFBQVEsWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLGtCQUFr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
@@ -14,6 +14,7 @@ export declare class OpsViewEmailDomains extends DeesElement {
14
14
  render(): TemplateResult;
15
15
  private renderDnsStatus;
16
16
  private renderSourceBadge;
17
+ private showOperationToast;
17
18
  private parsePortList;
18
19
  private parsePortMapping;
19
20
  private formatPortMapping;
@@ -248,9 +248,8 @@ let OpsViewEmailDomains = (() => {
248
248
  type: ['inRow', 'contextmenu'],
249
249
  actionFunc: async (actionData) => {
250
250
  const d = actionData.item;
251
- await appstate.emailDomainsStatePart.dispatchAction(appstate.validateEmailDomainAction, d.id);
252
- const { DeesToast } = await import('@design.estate/dees-catalog');
253
- DeesToast.show({ message: `DNS validated for ${d.domain}`, type: 'success', duration: 2500 });
251
+ const nextState = await appstate.emailDomainsStatePart.dispatchAction(appstate.validateEmailDomainAction, d.id);
252
+ await this.showOperationToast(nextState, `DNS validated for ${d.domain}`);
254
253
  },
255
254
  },
256
255
  {
@@ -259,9 +258,8 @@ let OpsViewEmailDomains = (() => {
259
258
  type: ['inRow', 'contextmenu'],
260
259
  actionFunc: async (actionData) => {
261
260
  const d = actionData.item;
262
- await appstate.emailDomainsStatePart.dispatchAction(appstate.provisionEmailDomainDnsAction, d.id);
263
- const { DeesToast } = await import('@design.estate/dees-catalog');
264
- DeesToast.show({ message: `DNS records provisioned for ${d.domain}`, type: 'success', duration: 2500 });
261
+ const nextState = await appstate.emailDomainsStatePart.dispatchAction(appstate.provisionEmailDomainDnsAction, d.id);
262
+ await this.showOperationToast(nextState, `DNS records provisioned for ${d.domain}`);
265
263
  },
266
264
  },
267
265
  {
@@ -279,7 +277,8 @@ let OpsViewEmailDomains = (() => {
279
277
  type: ['inRow', 'contextmenu'],
280
278
  actionFunc: async (actionData) => {
281
279
  const d = actionData.item;
282
- await appstate.emailDomainsStatePart.dispatchAction(appstate.deleteEmailDomainAction, d.id);
280
+ const nextState = await appstate.emailDomainsStatePart.dispatchAction(appstate.deleteEmailDomainAction, d.id);
281
+ await this.showOperationToast(nextState, `Email domain ${d.domain} deleted`);
283
282
  },
284
283
  },
285
284
  ]}
@@ -300,6 +299,27 @@ let OpsViewEmailDomains = (() => {
300
299
  : this.domainsState.providers.find((p) => p.id === domain.providerId)?.name || 'provider';
301
300
  return html `<span class="sourceBadge">${label}</span>`;
302
301
  }
302
+ async showOperationToast(stateArg, successMessageArg) {
303
+ const { DeesToast } = await import('@design.estate/dees-catalog');
304
+ const operation = stateArg.lastOperation;
305
+ if (!operation) {
306
+ DeesToast.show({
307
+ message: stateArg.error || 'Email domain operation returned no result',
308
+ type: 'error',
309
+ duration: 5000,
310
+ });
311
+ return false;
312
+ }
313
+ const isPending = operation.success &&
314
+ operation.lifecycleStatus !== undefined &&
315
+ operation.lifecycleStatus !== 'active';
316
+ DeesToast.show({
317
+ message: appstate.formatEmailDomainOperationMessage(operation, successMessageArg),
318
+ type: operation.success ? (isPending ? 'warning' : 'success') : 'error',
319
+ duration: operation.success && !isPending ? 3000 : 6000,
320
+ });
321
+ return operation.success;
322
+ }
303
323
  parsePortList(value) {
304
324
  return value
305
325
  .split(',')
@@ -464,14 +484,16 @@ let OpsViewEmailDomains = (() => {
464
484
  ? parseInt(data.dkimKeySize.key, 10)
465
485
  : parseInt(data.dkimKeySize || '2048', 10);
466
486
  const subdomain = data.subdomain?.trim() || undefined;
467
- await appstate.emailDomainsStatePart.dispatchAction(appstate.createEmailDomainAction, {
487
+ const nextState = await appstate.emailDomainsStatePart.dispatchAction(appstate.createEmailDomainAction, {
468
488
  linkedDomainId,
469
489
  subdomain,
470
490
  dkimSelector: data.dkimSelector || 'default',
471
491
  dkimKeySize: keySize,
472
492
  rotateKeys: Boolean(data.rotateKeys),
473
493
  });
474
- m.destroy();
494
+ const wasAccepted = await this.showOperationToast(nextState, `Email domain created`);
495
+ if (wasAccepted)
496
+ m.destroy();
475
497
  },
476
498
  },
477
499
  ],
@@ -518,9 +540,10 @@ let OpsViewEmailDomains = (() => {
518
540
  {
519
541
  name: 'Auto-Provision All',
520
542
  action: async (m) => {
521
- await appstate.emailDomainsStatePart.dispatchAction(appstate.provisionEmailDomainDnsAction, emailDomain.id);
522
- DeesToast.show({ message: 'DNS records provisioned', type: 'success', duration: 2500 });
523
- m.destroy();
543
+ const nextState = await appstate.emailDomainsStatePart.dispatchAction(appstate.provisionEmailDomainDnsAction, emailDomain.id);
544
+ const wasAccepted = await this.showOperationToast(nextState, `DNS records provisioned for ${emailDomain.domain}`);
545
+ if (wasAccepted)
546
+ m.destroy();
524
547
  },
525
548
  },
526
549
  { name: 'Close', action: async (m) => m.destroy() },
@@ -534,4 +557,4 @@ let OpsViewEmailDomains = (() => {
534
557
  return OpsViewEmailDomains = _classThis;
535
558
  })();
536
559
  export { OpsViewEmailDomains };
537
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BzLXZpZXctZW1haWwtZG9tYWlucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RzX3dlYi9lbGVtZW50cy9lbWFpbC9vcHMtdmlldy1lbWFpbC1kb21haW5zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQ0wsV0FBVyxFQUNYLElBQUksRUFDSixhQUFhLEVBRWIsR0FBRyxFQUNILEtBQUssRUFDTCxVQUFVLEdBQ1gsTUFBTSw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEtBQUssUUFBUSxNQUFNLG1CQUFtQixDQUFDO0FBQzlDLE9BQU8sS0FBSyxVQUFVLE1BQU0sc0NBQXNDLENBQUM7QUFDbkUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQy9DLE9BQU8sRUFBbUIsTUFBTSw2QkFBNkIsQ0FBQztJQVNqRCxtQkFBbUI7NEJBRC9CLGFBQWEsQ0FBQyx3QkFBd0IsQ0FBQzs7OztzQkFDQyxXQUFXOzs7Ozs7O21DQUFuQixTQUFRLFdBQVc7Ozs7NkNBQ2pELEtBQUssRUFBRTt3Q0FJUCxLQUFLLEVBQUU7WUFIUix3TUFBUyxpQkFBaUIsNkJBQWpCLGlCQUFpQiw2R0FDbUI7WUFHN0MseUxBQVMsWUFBWSw2QkFBWixZQUFZLG1HQUFpRTtZQU54Riw2S0EwZkM7Ozs7UUF4ZkMsK0ZBQ0UsUUFBUSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsRUFBRyxFQUFDO1FBRDdDLElBQVMsaUJBQWlCLHVEQUNtQjtRQUQ3QyxJQUFTLGlCQUFpQiw2REFDbUI7UUFHN0MscUpBQWdELFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUcsR0FBQztRQUF0RixJQUFTLFlBQVksa0RBQWlFO1FBQXRGLElBQVMsWUFBWSx3REFBaUU7UUFFdEY7WUFDRSxLQUFLLEVBQUUsQ0FBQzs7WUFDUixNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMscUJB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
560
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BzLXZpZXctZW1haWwtZG9tYWlucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RzX3dlYi9lbGVtZW50cy9lbWFpbC9vcHMtdmlldy1lbWFpbC1kb21haW5zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQ0wsV0FBVyxFQUNYLElBQUksRUFDSixhQUFhLEVBRWIsR0FBRyxFQUNILEtBQUssRUFDTCxVQUFVLEdBQ1gsTUFBTSw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEtBQUssUUFBUSxNQUFNLG1CQUFtQixDQUFDO0FBQzlDLE9BQU8sS0FBSyxVQUFVLE1BQU0sc0NBQXNDLENBQUM7QUFDbkUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQy9DLE9BQU8sRUFBbUIsTUFBTSw2QkFBNkIsQ0FBQztJQVNqRCxtQkFBbUI7NEJBRC9CLGFBQWEsQ0FBQyx3QkFBd0IsQ0FBQzs7OztzQkFDQyxXQUFXOzs7Ozs7O21DQUFuQixTQUFRLFdBQVc7Ozs7NkNBQ2pELEtBQUssRUFBRTt3Q0FJUCxLQUFLLEVBQUU7WUFIUix3TUFBUyxpQkFBaUIsNkJBQWpCLGlCQUFpQiw2R0FDbUI7WUFHN0MseUxBQVMsWUFBWSw2QkFBWixZQUFZLG1HQUFpRTtZQU54Riw2S0EwaEJDOzs7O1FBeGhCQywrRkFDRSxRQUFRLENBQUMscUJBQXFCLENBQUMsUUFBUSxFQUFHLEVBQUM7UUFEN0MsSUFBUyxpQkFBaUIsdURBQ21CO1FBRDdDLElBQVMsaUJBQWlCLDZEQUNtQjtRQUc3QyxxSkFBZ0QsUUFBUSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRyxHQUFDO1FBQXRGLElBQVMsWUFBWSxrREFBaUU7UUFBdEYsSUFBUyxZQUFZLHdEQUFpRTtRQUV0RjtZQUNFLEtBQUssRUFBRSxDQUFDOztZQUNSLE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxx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
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@serve.zone/dcrouter",
3
3
  "private": false,
4
- "version": "16.4.1",
4
+ "version": "17.0.0",
5
5
  "description": "A multifaceted routing service handling mail and SMS delivery functions.",
6
6
  "type": "module",
7
7
  "bin": {
@@ -37,6 +37,7 @@
37
37
  "@push.rocks/projectinfo": "^5.1.0",
38
38
  "@push.rocks/qenv": "^6.1.4",
39
39
  "@push.rocks/smartacme": "^9.5.0",
40
+ "@push.rocks/smartbucket": "^4.6.1",
40
41
  "@push.rocks/smartchallenge": "^1.1.0",
41
42
  "@push.rocks/smartdata": "^7.2.0",
42
43
  "@push.rocks/smartdb": "^2.12.3",
@@ -48,7 +49,7 @@
48
49
  "@push.rocks/smartmcp": "^0.2.0",
49
50
  "@push.rocks/smartmetrics": "^3.0.3",
50
51
  "@push.rocks/smartmigration": "1.4.1",
51
- "@push.rocks/smartmta": "^6.5.1",
52
+ "@push.rocks/smartmta": "^7.0.0",
52
53
  "@push.rocks/smartnetwork": "^4.8.0",
53
54
  "@push.rocks/smartpath": "^6.0.0",
54
55
  "@push.rocks/smartpromise": "^4.2.4",
@@ -62,7 +63,7 @@
62
63
  "@push.rocks/taskbuffer": "^8.0.2",
63
64
  "@serve.zone/catalog": "^2.14.0",
64
65
  "@serve.zone/interfaces": "^11.2.0",
65
- "@serve.zone/remoteingress": "^4.25.0",
66
+ "@serve.zone/remoteingress": "^5.0.0",
66
67
  "@tsclass/tsclass": "^9.5.1",
67
68
  "@types/qrcode": "^1.5.6",
68
69
  "lru-cache": "^11.5.1",
package/readme.md CHANGED
@@ -414,7 +414,19 @@ Supported egress policy fields:
414
414
  | `deniedCidrs` | CIDRs denied after edge-side DNS resolution. |
415
415
  | `maxConcurrentStreams` | Optional concurrent outbound SMTP stream cap for the edge. |
416
416
 
417
- RemoteIngress status responses include `capabilities` and `egressEnabled` so automation can verify whether a connected edge can be selected for SMTP egress. The dcrouter selector currently requires a connected QUIC edge advertising `egressTcpV1`; `quicWithFallback` edges are eligible only while they are not using TCP fallback.
417
+ RemoteIngress status responses include `capabilities`, `egressEnabled`, and source-bound egress identity. A mail edge is eligible only when it is enabled, carries the `mail` tag, permits destination port `25`, is connected with a fresh heartbeat, uses native QUIC without TCP fallback, advertises both `egressTcpV1` and `egressIdentityV1`, and reports a fresh non-stale `localSocketBind` identity. That identity must match the edge's declared `publicIp` or `publicIpV6`, the edge must have a `mailHostname`, its PTR must resolve exactly to that hostname, and the hostname's A/AAAA set must contain the source address. Domain edge filters narrow this pool and remain fail-closed when they match nothing.
418
+
419
+ RemoteIngress v5 edge runtimes must configure `egressSourceIpv4` and/or `egressSourceIpv6` with concrete addresses assigned to the edge host. The equivalent CLI flags are `--egress-source-ipv4` and `--egress-source-ipv6`; the environment variables are `REMOTEINGRESS_EGRESS_SOURCE_IPV4` and `REMOTEINGRESS_EGRESS_SOURCE_IPV6`. These addresses must match dcrouter's declared edge IPs. Every outbound socket is bound to the matching family, and a missing or unbindable family fails closed. There is no OS-selected address or direct-hub fallback in `remoteIngress` mode.
420
+
421
+ Managed email domains use the durable lifecycle `pending -> active | failed -> deleting`; the document is removed only after deletion cleanup completes. Creation must obtain a usable DKIM key before persistence, then automatically reconciles and validates MX, SPF, DKIM, DMARC, and direct per-edge A/AAAA records. Inbound acceptance is independent and remains available while outbound SMTP credentials and sending are gated until the domain has a validated `activeRevision` and a live eligible edge.
422
+
423
+ One eligible edge publishes one priority 10 MX target. Two or more eligible edges publish distinct stable priority 10 and priority 20 targets, each backed directly by A/AAAA rather than CNAME. SPF uses `-all` and authorizes every IPv4/IPv6 source identity required by the active or make-before-break transition revision. Activation requires the complete MX RRset, all record intents, and exact PTR plus forward-confirmed A/AAAA validation. Topology replacement validates the desired state before activation, then removes stale owned records.
424
+
425
+ The reconciler is globally serialized and coalesces concurrent triggers. It runs at startup, every five minutes, and after relevant domain, DNS, DKIM, topology, or egress-identity changes. Provider state is refreshed on each pass; only records marked `managedBy: 'mail-dns-reconciler'` are mutated or deleted. Unmanaged SPF, DMARC, DKIM, or MX conflicts fail visibly instead of being overwritten. Each domain persists desired and active revisions, per-record intent status, provider/validation errors, attempt and validation timestamps, capability state, and `retryAt`. Provider/API failures propagate through the email-domain API and never become false provisioning success.
426
+
427
+ DKIM generation failure is atomic. Automatic rotation defaults to 90 days with a 30-day retiring-selector overlap. dcrouter publishes and validates a staged selector, requires SmartMTA's selector-correct signing capability, promotes it for signing only after the DNS revision validates, retains the previous selector for the overlap, and later removes the owned record.
428
+
429
+ The additive public contracts include `IEmailDomainActionResult`, `IEmailDomain.reconciliation`, lifecycle/error/capability/retry fields, active/pending/retiring DKIM material, DNS intents and revisions, and edge identities. For mutation requests, `success: true` means the operation was accepted and durably recorded; `lifecycleStatus: 'pending'` or `'deleting'` still means activation or cleanup has not completed.
418
430
 
419
431
  ## OCI / Container Bootstrap
420
432
 
@@ -3,6 +3,6 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@serve.zone/dcrouter',
6
- version: '16.4.1',
6
+ version: '17.0.0',
7
7
  description: 'A multifaceted routing service handling mail and SMS delivery functions.'
8
8
  }