@serve.zone/dcrouter 16.4.1 → 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.
- package/deno.json +1 -1
- package/dist_serve/bundle.js +852 -852
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/classes.dcrouter.d.ts +2 -1
- package/dist_ts/classes.dcrouter.js +20 -4
- package/dist_ts/db/documents/classes.dns-record.doc.d.ts +4 -0
- package/dist_ts/db/documents/classes.dns-record.doc.js +33 -2
- package/dist_ts/db/documents/classes.email-domain.doc.d.ts +5 -1
- package/dist_ts/db/documents/classes.email-domain.doc.js +26 -2
- package/dist_ts/dns/manager.dns.d.ts +6 -0
- package/dist_ts/dns/manager.dns.js +81 -32
- package/dist_ts/dns/providers/cloudflare.provider.d.ts +2 -0
- package/dist_ts/dns/providers/cloudflare.provider.js +45 -28
- package/dist_ts/email/classes.email-domain.manager.d.ts +43 -38
- package/dist_ts/email/classes.email-domain.manager.js +391 -324
- package/dist_ts/email/classes.mail-dns-sync.d.ts +58 -17
- package/dist_ts/email/classes.mail-dns-sync.js +857 -141
- package/dist_ts/email/classes.mail-edge-eligibility.d.ts +55 -0
- package/dist_ts/email/classes.mail-edge-eligibility.js +168 -0
- package/dist_ts/email/classes.mail-egress-coordinator.d.ts +3 -1
- package/dist_ts/email/classes.mail-egress-coordinator.js +43 -22
- package/dist_ts/email/classes.workapp-mail-manager.d.ts +3 -0
- package/dist_ts/email/classes.workapp-mail-manager.js +58 -12
- package/dist_ts/email/index.d.ts +1 -0
- package/dist_ts/email/index.js +2 -1
- package/dist_ts/opsserver/handlers/email-domain.handler.d.ts +1 -0
- package/dist_ts/opsserver/handlers/email-domain.handler.js +138 -22
- package/dist_ts/remoteingress/classes.hub-lifecycle.js +2 -1
- package/dist_ts/remoteingress/classes.tunnel-manager.d.ts +6 -0
- package/dist_ts/remoteingress/classes.tunnel-manager.js +40 -2
- package/dist_ts_interfaces/data/dns-record.d.ts +6 -0
- package/dist_ts_interfaces/data/email-domain.d.ts +81 -0
- package/dist_ts_interfaces/requests/email-domains.d.ts +25 -17
- package/dist_ts_migrations/index.js +152 -9
- package/dist_ts_web/00_commitinfo_data.js +1 -1
- package/dist_ts_web/appstate/email-domains.d.ts +16 -0
- package/dist_ts_web/appstate/email-domains.js +140 -19
- package/dist_ts_web/elements/email/ops-view-email-domains.d.ts +1 -0
- package/dist_ts_web/elements/email/ops-view-email-domains.js +36 -13
- package/package.json +3 -3
- package/readme.md +13 -1
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/classes.dcrouter.ts +22 -3
- package/ts/db/documents/classes.dns-record.doc.ts +20 -0
- package/ts/db/documents/classes.email-domain.doc.ts +14 -0
- package/ts/dns/manager.dns.ts +89 -29
- package/ts/dns/providers/cloudflare.provider.ts +46 -27
- package/ts/email/classes.email-domain.manager.ts +416 -368
- package/ts/email/classes.mail-dns-sync.ts +913 -146
- package/ts/email/classes.mail-edge-eligibility.ts +205 -0
- package/ts/email/classes.mail-egress-coordinator.ts +46 -23
- package/ts/email/classes.workapp-mail-manager.ts +69 -13
- package/ts/email/index.ts +1 -0
- package/ts/opsserver/handlers/email-domain.handler.ts +154 -21
- package/ts/remoteingress/classes.hub-lifecycle.ts +1 -0
- package/ts/remoteingress/classes.tunnel-manager.ts +53 -7
- package/ts_web/00_commitinfo_data.ts +1 -1
- package/ts_web/appstate/email-domains.ts +187 -18
- package/ts_web/elements/email/ops-view-email-domains.ts +44 -12
|
@@ -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 {
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
523
|
-
|
|
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
|
+
"version": "16.5.0",
|
|
5
5
|
"description": "A multifaceted routing service handling mail and SMS delivery functions.",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"bin": {
|
|
@@ -48,7 +48,7 @@
|
|
|
48
48
|
"@push.rocks/smartmcp": "^0.2.0",
|
|
49
49
|
"@push.rocks/smartmetrics": "^3.0.3",
|
|
50
50
|
"@push.rocks/smartmigration": "1.4.1",
|
|
51
|
-
"@push.rocks/smartmta": "^6.5.
|
|
51
|
+
"@push.rocks/smartmta": "^6.5.2",
|
|
52
52
|
"@push.rocks/smartnetwork": "^4.8.0",
|
|
53
53
|
"@push.rocks/smartpath": "^6.0.0",
|
|
54
54
|
"@push.rocks/smartpromise": "^4.2.4",
|
|
@@ -62,7 +62,7 @@
|
|
|
62
62
|
"@push.rocks/taskbuffer": "^8.0.2",
|
|
63
63
|
"@serve.zone/catalog": "^2.14.0",
|
|
64
64
|
"@serve.zone/interfaces": "^11.2.0",
|
|
65
|
-
"@serve.zone/remoteingress": "^
|
|
65
|
+
"@serve.zone/remoteingress": "^5.0.0",
|
|
66
66
|
"@tsclass/tsclass": "^9.5.1",
|
|
67
67
|
"@types/qrcode": "^1.5.6",
|
|
68
68
|
"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 `
|
|
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
|
|
package/ts/00_commitinfo_data.ts
CHANGED
package/ts/classes.dcrouter.ts
CHANGED
|
@@ -37,7 +37,7 @@ import { DnsManager } from './dns/manager.dns.js';
|
|
|
37
37
|
import { DnsServerRuntime } from './dns/classes.dns-server-runtime.js';
|
|
38
38
|
import { AcmeConfigManager } from './acme/manager.acme-config.js';
|
|
39
39
|
import { SmartAcmeLifecycle } from './acme/classes.smartacme-lifecycle.js';
|
|
40
|
-
import { AcceptedEmailSpool, EmailDomainManager, EmailRouteBuilder, EmailSettingsManager, MailDnsSync, MailEgressCoordinator, SmartMtaStorageManager, WorkAppMailManager, type TSmartMtaQueueItemLike } from './email/index.js';
|
|
40
|
+
import { AcceptedEmailSpool, EmailDomainManager, EmailRouteBuilder, EmailSettingsManager, MailDnsSync, MailEdgeEligibility, MailEgressCoordinator, ReleasedRemoteIngressEgressIdentitySource, SmartMtaStorageManager, WorkAppMailManager, type TSmartMtaQueueItemLike } from './email/index.js';
|
|
41
41
|
import type { IRoute } from '../ts_interfaces/data/route-management.js';
|
|
42
42
|
import type { IEmailOutboundEgressStatus, IEmailPortConfig, IEmailServerSettings, IEmailServerSettingsSeed, TEmailOutboundMode, TEmailServerSettingsUpdate } from '../ts_interfaces/data/email-settings.js';
|
|
43
43
|
import type { IDcRouterRouteConfig, IRemoteIngressHubSettings, IRemoteIngressPerformanceConfig, TRemoteIngressHubSettingsUpdate } from '../ts_interfaces/data/remoteingress.js';
|
|
@@ -311,6 +311,7 @@ export class DcRouter {
|
|
|
311
311
|
public acceptedEmailSpool: AcceptedEmailSpool;
|
|
312
312
|
public mailEgressCoordinator: MailEgressCoordinator;
|
|
313
313
|
public mailDnsSync: MailDnsSync;
|
|
314
|
+
public mailEdgeEligibility: MailEdgeEligibility;
|
|
314
315
|
public securityPolicyManager?: SecurityPolicyManager;
|
|
315
316
|
|
|
316
317
|
// Auto-discovered public IP (populated by generateAuthoritativeRecords)
|
|
@@ -377,8 +378,10 @@ export class DcRouter {
|
|
|
377
378
|
);
|
|
378
379
|
this.workAppMailManager = new WorkAppMailManager(this);
|
|
379
380
|
this.acceptedEmailSpool = new AcceptedEmailSpool(this);
|
|
380
|
-
|
|
381
|
-
this.
|
|
381
|
+
const mailEgressIdentitySource = new ReleasedRemoteIngressEgressIdentitySource(this);
|
|
382
|
+
this.mailEdgeEligibility = new MailEdgeEligibility(this, mailEgressIdentitySource);
|
|
383
|
+
this.mailEgressCoordinator = new MailEgressCoordinator(this, this.mailEdgeEligibility);
|
|
384
|
+
this.mailDnsSync = new MailDnsSync(this, this.mailEdgeEligibility);
|
|
382
385
|
this.smartAcmeLifecycle = new SmartAcmeLifecycle(this);
|
|
383
386
|
this.vpnAccessResolver = new VpnAccessResolver(this);
|
|
384
387
|
this.remoteIngressHubLifecycle = new RemoteIngressHubLifecycle(this);
|
|
@@ -803,6 +806,22 @@ export class DcRouter {
|
|
|
803
806
|
})
|
|
804
807
|
.withRetry({ maxRetries: 3, baseDelayMs: 2000, maxDelayMs: 30_000 }),
|
|
805
808
|
);
|
|
809
|
+
|
|
810
|
+
// Mail DNS reconciliation starts last: it needs persistence, provider
|
|
811
|
+
// state, the SMTP DKIM creator, and live tunnel topology. Earlier events
|
|
812
|
+
// only mark the reconciler dirty and are consumed here.
|
|
813
|
+
this.serviceManager.addService(
|
|
814
|
+
new plugins.taskbuffer.Service('MailDnsSync')
|
|
815
|
+
.optional()
|
|
816
|
+
.dependsOn('DnsManager', 'EmailDomainManager', 'EmailServer', 'RemoteIngress')
|
|
817
|
+
.withStart(async () => {
|
|
818
|
+
await this.mailDnsSync.start();
|
|
819
|
+
})
|
|
820
|
+
.withStop(async () => {
|
|
821
|
+
await this.mailDnsSync.stop();
|
|
822
|
+
})
|
|
823
|
+
.withRetry({ maxRetries: 1, baseDelayMs: 1000 }),
|
|
824
|
+
);
|
|
806
825
|
}
|
|
807
826
|
|
|
808
827
|
// VPN Server: optional, depends on SmartProxy
|
|
@@ -44,6 +44,26 @@ export class DnsRecordDoc extends plugins.smartdata.SmartDataDbDoc<DnsRecordDoc,
|
|
|
44
44
|
@plugins.smartdata.svDb()
|
|
45
45
|
public createdBy!: string;
|
|
46
46
|
|
|
47
|
+
@plugins.smartdata.svDb()
|
|
48
|
+
public managedBy?: string;
|
|
49
|
+
|
|
50
|
+
@plugins.smartdata.svDb()
|
|
51
|
+
public managedOwnerId?: string;
|
|
52
|
+
|
|
53
|
+
@plugins.smartdata.svDb()
|
|
54
|
+
public managedRecordKey?: string;
|
|
55
|
+
|
|
56
|
+
public async createSavableObject(): Promise<DnsRecordDoc> {
|
|
57
|
+
const savable = await super.createSavableObject() as DnsRecordDoc;
|
|
58
|
+
// SmartData persists decorated `undefined` values through `$set`. Managed
|
|
59
|
+
// metadata must be truly absent so partial indexes and ownership checks do
|
|
60
|
+
// not accidentally classify operator/provider records as reconciler-owned.
|
|
61
|
+
if (!this.managedBy) delete (savable as any).managedBy;
|
|
62
|
+
if (!this.managedOwnerId) delete (savable as any).managedOwnerId;
|
|
63
|
+
if (!this.managedRecordKey) delete (savable as any).managedRecordKey;
|
|
64
|
+
return savable;
|
|
65
|
+
}
|
|
66
|
+
|
|
47
67
|
constructor() {
|
|
48
68
|
super();
|
|
49
69
|
}
|
|
@@ -5,6 +5,8 @@ import type {
|
|
|
5
5
|
IEmailDomainRateLimits,
|
|
6
6
|
IEmailDomainDnsStatus,
|
|
7
7
|
IEmailDomainRemoteIngress,
|
|
8
|
+
IEmailDomainReconciliation,
|
|
9
|
+
IEmailDkimMaterial,
|
|
8
10
|
} from '../../../ts_interfaces/data/email-domain.js';
|
|
9
11
|
|
|
10
12
|
const getDb = () => DcRouterDb.getInstance().getDb();
|
|
@@ -36,6 +38,18 @@ export class EmailDomainDoc extends plugins.smartdata.SmartDataDbDoc<EmailDomain
|
|
|
36
38
|
@plugins.smartdata.svDb()
|
|
37
39
|
public dnsStatus!: IEmailDomainDnsStatus;
|
|
38
40
|
|
|
41
|
+
@plugins.smartdata.svDb()
|
|
42
|
+
public reconciliation?: IEmailDomainReconciliation;
|
|
43
|
+
|
|
44
|
+
@plugins.smartdata.svDb()
|
|
45
|
+
public activeDkim?: IEmailDkimMaterial;
|
|
46
|
+
|
|
47
|
+
@plugins.smartdata.svDb()
|
|
48
|
+
public pendingDkim?: IEmailDkimMaterial;
|
|
49
|
+
|
|
50
|
+
@plugins.smartdata.svDb()
|
|
51
|
+
public retiringDkim?: IEmailDkimMaterial[];
|
|
52
|
+
|
|
39
53
|
@plugins.smartdata.svDb()
|
|
40
54
|
public createdAt!: string;
|
|
41
55
|
|