@serve.zone/interfaces 30.12.0 → 30.14.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.
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZW1haWwuYWRtaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9yZXF1ZXN0cy9jb3JlbWFpbC5hZG1pbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIn0=
@@ -1,5 +1,5 @@
1
1
  import type * as plugins from '../plugins.js';
2
- import type { ICoreMailEnvelope, ICoreMailInboundDeliveryPage, ICoreMailDownloadGrant, ICoreMailGatewayMessageDescriptor, ICoreMailGatewayOutboundStatus, ICoreMailInboundDelivery, ICoreMailOutboundMessageDescriptor, ICoreMailRecipientResolution, ICoreMailReconciliationStatus, ICoreMailReplicaIdentity, ICoreMailSubmission, ICoreMailUploadGrant, TCoreMailInboundAckOutcome, TCoreMailSha256, TCoreMailWorkloadOperation } from '../data/coremail.js';
2
+ import type { ICoreMailEnvelope, ICoreMailInboundDeliveryPage, ICoreMailDownloadGrant, ICoreMailGatewayMessageDescriptor, ICoreMailGatewayOutboundStatus, ICoreMailInboundDelivery, ICoreMailOutboundMessageDescriptor, ICoreMailRecipientResolution, ICoreMailReconciliationStatus, ICoreMailReplicaIdentity, ICoreMailServiceMailStatistics, ICoreMailSubmission, ICoreMailUploadGrant, TCoreMailInboundAckOutcome, TCoreMailSha256, TCoreMailWorkloadOperation } from '../data/coremail.js';
3
3
  import type { IMailConnectionInfo } from '../data/mail.js';
4
4
  export interface IReq_CoreMailAuthenticateWorkload extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_CoreMailAuthenticateWorkload> {
5
5
  method: 'coreMailAuthenticateWorkload';
@@ -164,6 +164,29 @@ export interface IReq_CoreMailGetReconciliationStatus extends plugins.typedreque
164
164
  status: ICoreMailReconciliationStatus;
165
165
  };
166
166
  }
167
+ /**
168
+ * Control-session read of per-service mail counters. Authority comes from the
169
+ * authenticated control session; the request carries no tenant or binding
170
+ * authority of its own.
171
+ */
172
+ export interface IReq_CoreMailGetServiceMailStatistics extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_CoreMailGetServiceMailStatistics> {
173
+ method: 'coreMailGetServiceMailStatistics';
174
+ request: {
175
+ /** Inclusive first UTC calendar day, `YYYY-MM-DD`. */
176
+ fromDayUtc: string;
177
+ /** Inclusive last UTC calendar day, `YYYY-MM-DD`. */
178
+ toDayUtc: string;
179
+ /** Optional service filter. Omitted means every service known to this CoreMail. */
180
+ serviceIds?: string[];
181
+ /** Opaque CoreMail-owned composite cursor. */
182
+ cursor?: string;
183
+ limit: number;
184
+ };
185
+ response: {
186
+ statistics: ICoreMailServiceMailStatistics[];
187
+ nextCursor?: string;
188
+ };
189
+ }
167
190
  export interface IReq_CoreMailGatewayAuthenticate extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_CoreMailGatewayAuthenticate> {
168
191
  method: 'coreMailGatewayAuthenticate';
169
192
  request: {
@@ -179,6 +202,13 @@ export interface IReq_CoreMailGatewayAuthenticate extends plugins.typedrequestIn
179
202
  coreMailTransferOrigin: string;
180
203
  };
181
204
  }
205
+ /**
206
+ * CoreMail binds every issued routing handle to a digest of the exact
207
+ * normalized `envelope` and `source` sent here. The following
208
+ * `coreMailGatewayPrepareInboundHandoff` call must therefore resend
209
+ * byte-identical values: the full `rcptTo` set in the same order, the same
210
+ * `mailFrom`, and the same connection source fields.
211
+ */
182
212
  export interface IReq_CoreMailGatewayResolveRecipients extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_CoreMailGatewayResolveRecipients> {
183
213
  method: 'coreMailGatewayResolveRecipients';
184
214
  request: {
@@ -190,6 +220,13 @@ export interface IReq_CoreMailGatewayResolveRecipients extends plugins.typedrequ
190
220
  resolutions: ICoreMailRecipientResolution[];
191
221
  };
192
222
  }
223
+ /**
224
+ * The handoff is validated against the routing handles issued by
225
+ * `coreMailGatewayResolveRecipients`. `message.envelope` and `source` must be
226
+ * byte-identical to the resolve-time values, including the full `rcptTo` set in
227
+ * the same order, because CoreMail recomputes the envelope digest the handles
228
+ * are bound to.
229
+ */
193
230
  export interface IReq_CoreMailGatewayPrepareInboundHandoff extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_CoreMailGatewayPrepareInboundHandoff> {
194
231
  method: 'coreMailGatewayPrepareInboundHandoff';
195
232
  request: {
@@ -246,6 +283,12 @@ export interface IReq_CoreMailGatewayCompleteOutboundHandoff extends plugins.typ
246
283
  replayed: boolean;
247
284
  };
248
285
  }
286
+ /**
287
+ * Status polling for one accepted transport message. `status.updatedAt` must be
288
+ * monotonic per `transportMessageId`. A `transportMessageId` that is
289
+ * permanently unknown to the gateway must be answered with a terminal `failed`
290
+ * status rather than an error, because CoreMail retries errors indefinitely.
291
+ */
249
292
  export interface IReq_CoreMailGatewayGetOutboundStatus extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_CoreMailGatewayGetOutboundStatus> {
250
293
  method: 'coreMailGatewayGetOutboundStatus';
251
294
  request: {
@@ -7,6 +7,7 @@ import * as certificateRequests from './certificate.js';
7
7
  import * as clusterRequests from './cluster.js';
8
8
  import * as configRequests from './config.js';
9
9
  import * as coreMailRequests from './coremail.js';
10
+ import * as coreMailAdminRequests from './coremail.admin.js';
10
11
  import * as corestoreRequests from './corestore.js';
11
12
  import * as deploymentRequests from './deployment.js';
12
13
  import * as dnsRequests from './dns.js';
@@ -34,7 +35,7 @@ import * as statusRequests from './status.js';
34
35
  import * as taskRequests from './task.js';
35
36
  import * as versionRequests from './version.js';
36
37
  import * as webPushRequests from './webpush.js';
37
- export { adminRequests as admin, appStoreRequests as appstore, baremetalRequests as baremetal, baseOsRequests as baseos, backupRequests as backup, certificateRequests as certificate, clusterRequests as cluster, configRequests as config, coreMailRequests as coremail, corestoreRequests as corestore, deploymentRequests as deployment, dnsRequests as dns, domainRequests as domain, externalRegistryRequests as externalRegistry, gatewayRequests as gateway, hostedAppRequests as hostedapp, identityRequests as identity, imageRequests as image, informRequests as inform, logRequests as log, mailRequests as mail, migrationRequests as migration, networkRequests as network, nodeRequests as node, palletRequests as pallet, platformRequests as platform, routingRequests as routing, runtimeSessionRequests as runtimesession, secretRequests as secret, serverRequests as server, serviceRequests as service, settingsRequests as settings, statusRequests as status, taskRequests as task, versionRequests as version, webPushRequests as webpush, };
38
+ export { adminRequests as admin, appStoreRequests as appstore, baremetalRequests as baremetal, baseOsRequests as baseos, backupRequests as backup, certificateRequests as certificate, clusterRequests as cluster, configRequests as config, coreMailRequests as coremail, coreMailAdminRequests as coremailAdmin, corestoreRequests as corestore, deploymentRequests as deployment, dnsRequests as dns, domainRequests as domain, externalRegistryRequests as externalRegistry, gatewayRequests as gateway, hostedAppRequests as hostedapp, identityRequests as identity, imageRequests as image, informRequests as inform, logRequests as log, mailRequests as mail, migrationRequests as migration, networkRequests as network, nodeRequests as node, palletRequests as pallet, platformRequests as platform, routingRequests as routing, runtimeSessionRequests as runtimesession, secretRequests as secret, serverRequests as server, serviceRequests as service, settingsRequests as settings, statusRequests as status, taskRequests as task, versionRequests as version, webPushRequests as webpush, };
38
39
  export * from './inform.js';
39
40
  export * from './hostedapp.js';
40
41
  export * from './mail.js';
@@ -8,6 +8,7 @@ import * as certificateRequests from './certificate.js';
8
8
  import * as clusterRequests from './cluster.js';
9
9
  import * as configRequests from './config.js';
10
10
  import * as coreMailRequests from './coremail.js';
11
+ import * as coreMailAdminRequests from './coremail.admin.js';
11
12
  import * as corestoreRequests from './corestore.js';
12
13
  import * as deploymentRequests from './deployment.js';
13
14
  import * as dnsRequests from './dns.js';
@@ -35,9 +36,9 @@ import * as statusRequests from './status.js';
35
36
  import * as taskRequests from './task.js';
36
37
  import * as versionRequests from './version.js';
37
38
  import * as webPushRequests from './webpush.js';
38
- export { adminRequests as admin, appStoreRequests as appstore, baremetalRequests as baremetal, baseOsRequests as baseos, backupRequests as backup, certificateRequests as certificate, clusterRequests as cluster, configRequests as config, coreMailRequests as coremail, corestoreRequests as corestore, deploymentRequests as deployment, dnsRequests as dns, domainRequests as domain, externalRegistryRequests as externalRegistry, gatewayRequests as gateway, hostedAppRequests as hostedapp, identityRequests as identity, imageRequests as image, informRequests as inform, logRequests as log, mailRequests as mail, migrationRequests as migration, networkRequests as network, nodeRequests as node, palletRequests as pallet, platformRequests as platform, routingRequests as routing, runtimeSessionRequests as runtimesession, secretRequests as secret, serverRequests as server, serviceRequests as service, settingsRequests as settings, statusRequests as status, taskRequests as task, versionRequests as version, webPushRequests as webpush, };
39
+ export { adminRequests as admin, appStoreRequests as appstore, baremetalRequests as baremetal, baseOsRequests as baseos, backupRequests as backup, certificateRequests as certificate, clusterRequests as cluster, configRequests as config, coreMailRequests as coremail, coreMailAdminRequests as coremailAdmin, corestoreRequests as corestore, deploymentRequests as deployment, dnsRequests as dns, domainRequests as domain, externalRegistryRequests as externalRegistry, gatewayRequests as gateway, hostedAppRequests as hostedapp, identityRequests as identity, imageRequests as image, informRequests as inform, logRequests as log, mailRequests as mail, migrationRequests as migration, networkRequests as network, nodeRequests as node, palletRequests as pallet, platformRequests as platform, routingRequests as routing, runtimeSessionRequests as runtimesession, secretRequests as secret, serverRequests as server, serviceRequests as service, settingsRequests as settings, statusRequests as status, taskRequests as task, versionRequests as version, webPushRequests as webpush, };
39
40
  export * from './inform.js';
40
41
  export * from './hostedapp.js';
41
42
  export * from './mail.js';
42
43
  export * from './webpush.js';
43
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9yZXF1ZXN0cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGVBQWUsQ0FBQztBQUV6QyxPQUFPLEtBQUssYUFBYSxNQUFNLFlBQVksQ0FBQztBQUM1QyxPQUFPLEtBQUssZ0JBQWdCLE1BQU0sZUFBZSxDQUFDO0FBQ2xELE9BQU8sS0FBSyxpQkFBaUIsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRCxPQUFPLEtBQUssY0FBYyxNQUFNLGFBQWEsQ0FBQztBQUM5QyxPQUFPLEtBQUssY0FBYyxNQUFNLGFBQWEsQ0FBQztBQUM5QyxPQUFPLEtBQUssbUJBQW1CLE1BQU0sa0JBQWtCLENBQUM7QUFDeEQsT0FBTyxLQUFLLGVBQWUsTUFBTSxjQUFjLENBQUM7QUFDaEQsT0FBTyxLQUFLLGNBQWMsTUFBTSxhQUFhLENBQUM7QUFDOUMsT0FBTyxLQUFLLGdCQUFnQixNQUFNLGVBQWUsQ0FBQztBQUNsRCxPQUFPLEtBQUssaUJBQWlCLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEQsT0FBTyxLQUFLLGtCQUFrQixNQUFNLGlCQUFpQixDQUFDO0FBQ3RELE9BQU8sS0FBSyxXQUFXLE1BQU0sVUFBVSxDQUFDO0FBQ3hDLE9BQU8sS0FBSyxjQUFjLE1BQU0sYUFBYSxDQUFDO0FBQzlDLE9BQU8sS0FBSyx3QkFBd0IsTUFBTSx1QkFBdUIsQ0FBQztBQUNsRSxPQUFPLEtBQUssZUFBZSxNQUFNLGNBQWMsQ0FBQztBQUNoRCxPQUFPLEtBQUssaUJBQWlCLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEQsT0FBTyxLQUFLLGdCQUFnQixNQUFNLGVBQWUsQ0FBQztBQUNsRCxPQUFPLEtBQUssYUFBYSxNQUFNLFlBQVksQ0FBQztBQUM1QyxPQUFPLEtBQUssY0FBYyxNQUFNLGFBQWEsQ0FBQztBQUM5QyxPQUFPLEtBQUssV0FBVyxNQUFNLFVBQVUsQ0FBQztBQUN4QyxPQUFPLEtBQUssWUFBWSxNQUFNLFdBQVcsQ0FBQztBQUMxQyxPQUFPLEtBQUssaUJBQWlCLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEQsT0FBTyxLQUFLLGVBQWUsTUFBTSxjQUFjLENBQUM7QUFDaEQsT0FBTyxLQUFLLFlBQVksTUFBTSxXQUFXLENBQUM7QUFDMUMsT0FBTyxLQUFLLGNBQWMsTUFBTSxhQUFhLENBQUM7QUFDOUMsT0FBTyxLQUFLLGdCQUFnQixNQUFNLGVBQWUsQ0FBQztBQUNsRCxPQUFPLEtBQUssZUFBZSxNQUFNLGNBQWMsQ0FBQztBQUNoRCxPQUFPLEtBQUssc0JBQXNCLE1BQU0scUJBQXFCLENBQUM7QUFDOUQsT0FBTyxLQUFLLGNBQWMsTUFBTSxhQUFhLENBQUM7QUFDOUMsT0FBTyxLQUFLLGNBQWMsTUFBTSxhQUFhLENBQUM7QUFDOUMsT0FBTyxLQUFLLGVBQWUsTUFBTSxjQUFjLENBQUM7QUFDaEQsT0FBTyxLQUFLLGdCQUFnQixNQUFNLGVBQWUsQ0FBQztBQUNsRCxPQUFPLEtBQUssY0FBYyxNQUFNLGFBQWEsQ0FBQztBQUM5QyxPQUFPLEtBQUssWUFBWSxNQUFNLFdBQVcsQ0FBQztBQUMxQyxPQUFPLEtBQUssZUFBZSxNQUFNLGNBQWMsQ0FBQztBQUNoRCxPQUFPLEtBQUssZUFBZSxNQUFNLGNBQWMsQ0FBQztBQUVoRCxPQUFPLEVBQ0wsYUFBYSxJQUFJLEtBQUssRUFDdEIsZ0JBQWdCLElBQUksUUFBUSxFQUM1QixpQkFBaUIsSUFBSSxTQUFTLEVBQzlCLGNBQWMsSUFBSSxNQUFNLEVBQ3hCLGNBQWMsSUFBSSxNQUFNLEVBQ3hCLG1CQUFtQixJQUFJLFdBQVcsRUFDbEMsZUFBZSxJQUFJLE9BQU8sRUFDMUIsY0FBYyxJQUFJLE1BQU0sRUFDeEIsZ0JBQWdCLElBQUksUUFBUSxFQUM1QixpQkFBaUIsSUFBSSxTQUFTLEVBQzlCLGtCQUFrQixJQUFJLFVBQVUsRUFDaEMsV0FBVyxJQUFJLEdBQUcsRUFDbEIsY0FBYyxJQUFJLE1BQU0sRUFDeEIsd0JBQXdCLElBQUksZ0JBQWdCLEVBQzVDLGVBQWUsSUFBSSxPQUFPLEVBQzFCLGlCQUFpQixJQUFJLFNBQVMsRUFDOUIsZ0JBQWdCLElBQUksUUFBUSxFQUM1QixhQUFhLElBQUksS0FBSyxFQUN0QixjQUFjLElBQUksTUFBTSxFQUN4QixXQUFXLElBQUksR0FBRyxFQUNsQixZQUFZLElBQUksSUFBSSxFQUNwQixpQkFBaUIsSUFBSSxTQUFTLEVBQzlCLGVBQWUsSUFBSSxPQUFPLEVBQzFCLFlBQVksSUFBSSxJQUFJLEVBQ3BCLGNBQWMsSUFBSSxNQUFNLEVBQ3hCLGdCQUFnQixJQUFJLFFBQVEsRUFDNUIsZUFBZSxJQUFJLE9BQU8sRUFDMUIsc0JBQXNCLElBQUksY0FBYyxFQUN4QyxjQUFjLElBQUksTUFBTSxFQUN4QixjQUFjLElBQUksTUFBTSxFQUN4QixlQUFlLElBQUksT0FBTyxFQUMxQixnQkFBZ0IsSUFBSSxRQUFRLEVBQzVCLGNBQWMsSUFBSSxNQUFNLEVBQ3hCLFlBQVksSUFBSSxJQUFJLEVBQ3BCLGVBQWUsSUFBSSxPQUFPLEVBQzFCLGVBQWUsSUFBSSxPQUFPLEdBQzNCLENBQUM7QUFFRixjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsV0FBVyxDQUFDO0FBQzFCLGNBQWMsY0FBYyxDQUFDIn0=
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9yZXF1ZXN0cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGVBQWUsQ0FBQztBQUV6QyxPQUFPLEtBQUssYUFBYSxNQUFNLFlBQVksQ0FBQztBQUM1QyxPQUFPLEtBQUssZ0JBQWdCLE1BQU0sZUFBZSxDQUFDO0FBQ2xELE9BQU8sS0FBSyxpQkFBaUIsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRCxPQUFPLEtBQUssY0FBYyxNQUFNLGFBQWEsQ0FBQztBQUM5QyxPQUFPLEtBQUssY0FBYyxNQUFNLGFBQWEsQ0FBQztBQUM5QyxPQUFPLEtBQUssbUJBQW1CLE1BQU0sa0JBQWtCLENBQUM7QUFDeEQsT0FBTyxLQUFLLGVBQWUsTUFBTSxjQUFjLENBQUM7QUFDaEQsT0FBTyxLQUFLLGNBQWMsTUFBTSxhQUFhLENBQUM7QUFDOUMsT0FBTyxLQUFLLGdCQUFnQixNQUFNLGVBQWUsQ0FBQztBQUNsRCxPQUFPLEtBQUsscUJBQXFCLE1BQU0scUJBQXFCLENBQUM7QUFDN0QsT0FBTyxLQUFLLGlCQUFpQixNQUFNLGdCQUFnQixDQUFDO0FBQ3BELE9BQU8sS0FBSyxrQkFBa0IsTUFBTSxpQkFBaUIsQ0FBQztBQUN0RCxPQUFPLEtBQUssV0FBVyxNQUFNLFVBQVUsQ0FBQztBQUN4QyxPQUFPLEtBQUssY0FBYyxNQUFNLGFBQWEsQ0FBQztBQUM5QyxPQUFPLEtBQUssd0JBQXdCLE1BQU0sdUJBQXVCLENBQUM7QUFDbEUsT0FBTyxLQUFLLGVBQWUsTUFBTSxjQUFjLENBQUM7QUFDaEQsT0FBTyxLQUFLLGlCQUFpQixNQUFNLGdCQUFnQixDQUFDO0FBQ3BELE9BQU8sS0FBSyxnQkFBZ0IsTUFBTSxlQUFlLENBQUM7QUFDbEQsT0FBTyxLQUFLLGFBQWEsTUFBTSxZQUFZLENBQUM7QUFDNUMsT0FBTyxLQUFLLGNBQWMsTUFBTSxhQUFhLENBQUM7QUFDOUMsT0FBTyxLQUFLLFdBQVcsTUFBTSxVQUFVLENBQUM7QUFDeEMsT0FBTyxLQUFLLFlBQVksTUFBTSxXQUFXLENBQUM7QUFDMUMsT0FBTyxLQUFLLGlCQUFpQixNQUFNLGdCQUFnQixDQUFDO0FBQ3BELE9BQU8sS0FBSyxlQUFlLE1BQU0sY0FBYyxDQUFDO0FBQ2hELE9BQU8sS0FBSyxZQUFZLE1BQU0sV0FBVyxDQUFDO0FBQzFDLE9BQU8sS0FBSyxjQUFjLE1BQU0sYUFBYSxDQUFDO0FBQzlDLE9BQU8sS0FBSyxnQkFBZ0IsTUFBTSxlQUFlLENBQUM7QUFDbEQsT0FBTyxLQUFLLGVBQWUsTUFBTSxjQUFjLENBQUM7QUFDaEQsT0FBTyxLQUFLLHNCQUFzQixNQUFNLHFCQUFxQixDQUFDO0FBQzlELE9BQU8sS0FBSyxjQUFjLE1BQU0sYUFBYSxDQUFDO0FBQzlDLE9BQU8sS0FBSyxjQUFjLE1BQU0sYUFBYSxDQUFDO0FBQzlDLE9BQU8sS0FBSyxlQUFlLE1BQU0sY0FBYyxDQUFDO0FBQ2hELE9BQU8sS0FBSyxnQkFBZ0IsTUFBTSxlQUFlLENBQUM7QUFDbEQsT0FBTyxLQUFLLGNBQWMsTUFBTSxhQUFhLENBQUM7QUFDOUMsT0FBTyxLQUFLLFlBQVksTUFBTSxXQUFXLENBQUM7QUFDMUMsT0FBTyxLQUFLLGVBQWUsTUFBTSxjQUFjLENBQUM7QUFDaEQsT0FBTyxLQUFLLGVBQWUsTUFBTSxjQUFjLENBQUM7QUFFaEQsT0FBTyxFQUNMLGFBQWEsSUFBSSxLQUFLLEVBQ3RCLGdCQUFnQixJQUFJLFFBQVEsRUFDNUIsaUJBQWlCLElBQUksU0FBUyxFQUM5QixjQUFjLElBQUksTUFBTSxFQUN4QixjQUFjLElBQUksTUFBTSxFQUN4QixtQkFBbUIsSUFBSSxXQUFXLEVBQ2xDLGVBQWUsSUFBSSxPQUFPLEVBQzFCLGNBQWMsSUFBSSxNQUFNLEVBQ3hCLGdCQUFnQixJQUFJLFFBQVEsRUFDNUIscUJBQXFCLElBQUksYUFBYSxFQUN0QyxpQkFBaUIsSUFBSSxTQUFTLEVBQzlCLGtCQUFrQixJQUFJLFVBQVUsRUFDaEMsV0FBVyxJQUFJLEdBQUcsRUFDbEIsY0FBYyxJQUFJLE1BQU0sRUFDeEIsd0JBQXdCLElBQUksZ0JBQWdCLEVBQzVDLGVBQWUsSUFBSSxPQUFPLEVBQzFCLGlCQUFpQixJQUFJLFNBQVMsRUFDOUIsZ0JBQWdCLElBQUksUUFBUSxFQUM1QixhQUFhLElBQUksS0FBSyxFQUN0QixjQUFjLElBQUksTUFBTSxFQUN4QixXQUFXLElBQUksR0FBRyxFQUNsQixZQUFZLElBQUksSUFBSSxFQUNwQixpQkFBaUIsSUFBSSxTQUFTLEVBQzlCLGVBQWUsSUFBSSxPQUFPLEVBQzFCLFlBQVksSUFBSSxJQUFJLEVBQ3BCLGNBQWMsSUFBSSxNQUFNLEVBQ3hCLGdCQUFnQixJQUFJLFFBQVEsRUFDNUIsZUFBZSxJQUFJLE9BQU8sRUFDMUIsc0JBQXNCLElBQUksY0FBYyxFQUN4QyxjQUFjLElBQUksTUFBTSxFQUN4QixjQUFjLElBQUksTUFBTSxFQUN4QixlQUFlLElBQUksT0FBTyxFQUMxQixnQkFBZ0IsSUFBSSxRQUFRLEVBQzVCLGNBQWMsSUFBSSxNQUFNLEVBQ3hCLFlBQVksSUFBSSxJQUFJLEVBQ3BCLGVBQWUsSUFBSSxPQUFPLEVBQzFCLGVBQWUsSUFBSSxPQUFPLEdBQzNCLENBQUM7QUFFRixjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsV0FBVyxDQUFDO0FBQzFCLGNBQWMsY0FBYyxDQUFDIn0=
@@ -1,4 +1,5 @@
1
1
  import * as plugins from '../plugins.js';
2
+ import type { ICoreMailGatewayPeerDesiredState } from '../data/coremail.js';
2
3
  import type { IIdentity } from '../data/user.js';
3
4
  import type { IMailAddressBinding, IMailCredentialOneTimeSecret, IMailConnectionInfo, IMailDeliveryJournalEvent, IMailDeliveryStatus, IMailDomainAuthority, IMailEnvelope, IMailInboundMessagePayload, IMailOutboundIdentity, IMailOutboundMessagePayload, IMailRecipientResolution, IMailResourceOwner, IMailSpoolItem, IWorkAppMailBinding, TMailSubmissionErrorCode } from '../data/mail.js';
4
5
  export interface IMailControlRequestAuth {
@@ -89,6 +90,55 @@ export interface IReq_DeleteMailAddressBinding extends plugins.typedrequestInter
89
90
  message?: string;
90
91
  };
91
92
  }
93
+ /**
94
+ * dcrouter-owned CoreMail gateway peer state.
95
+ *
96
+ * `peer.transferOrigin` must equal the `gateway.coreMailTransferOrigin` carried
97
+ * in that CoreMail service's own desired state. The producer (Cloudly or
98
+ * Onebox) is the single owner of that string: dcrouter never infers it from a
99
+ * socket, Host header, TypedSocket tag, or peer input.
100
+ */
101
+ export interface IReq_ListCoreMailGatewayPeers extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_ListCoreMailGatewayPeers> {
102
+ method: 'listCoreMailGatewayPeers';
103
+ request: {
104
+ auth: IMailControlRequestAuth;
105
+ owner: IMailResourceOwner;
106
+ };
107
+ response: {
108
+ peers: ICoreMailGatewayPeerDesiredState[];
109
+ };
110
+ }
111
+ /**
112
+ * Creates or replaces one CoreMail gateway peer. On success the accepted peer is
113
+ * returned in its stored form so the producer can compare the exact applied
114
+ * state. `owner` is required (not partial) because a peer is producer-owned
115
+ * provisioning state, never a filtered listing.
116
+ */
117
+ export interface IReq_SyncCoreMailGatewayPeer extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_SyncCoreMailGatewayPeer> {
118
+ method: 'syncCoreMailGatewayPeer';
119
+ request: {
120
+ auth: IMailControlRequestAuth;
121
+ owner: IMailResourceOwner;
122
+ peer: ICoreMailGatewayPeerDesiredState;
123
+ };
124
+ response: {
125
+ success: boolean;
126
+ peer?: ICoreMailGatewayPeerDesiredState;
127
+ message?: string;
128
+ };
129
+ }
130
+ export interface IReq_DeleteCoreMailGatewayPeer extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_DeleteCoreMailGatewayPeer> {
131
+ method: 'deleteCoreMailGatewayPeer';
132
+ request: {
133
+ auth: IMailControlRequestAuth;
134
+ owner: IMailResourceOwner;
135
+ coreMailServiceId: string;
136
+ };
137
+ response: {
138
+ success: boolean;
139
+ message?: string;
140
+ };
141
+ }
92
142
  export interface IReq_ListWorkAppMailBindings extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_ListWorkAppMailBindings> {
93
143
  method: 'listWorkAppMailBindings';
94
144
  request: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@serve.zone/interfaces",
3
- "version": "30.12.0",
3
+ "version": "30.14.0",
4
4
  "private": false,
5
5
  "description": "Shared TypeScript interfaces and TypedRequest contracts for the serve.zone ecosystem.",
6
6
  "exports": {
@@ -30,7 +30,7 @@
30
30
  "@git.zone/tsbuild": "^4.4.3",
31
31
  "@git.zone/tsdoc": "^2.2.0",
32
32
  "@git.zone/tsrun": "^2.0.6",
33
- "@git.zone/tstest": "6.0.0",
33
+ "@git.zone/tstest": "6.1.0",
34
34
  "@types/node": "26.5.0"
35
35
  },
36
36
  "files": [
package/readme.md CHANGED
@@ -1217,6 +1217,17 @@ may continue its next configured resolver. Consumers must apply
1217
1217
  `data.normalizeCoreMailRecipientResolutions()` against the exact requested
1218
1218
  recipient set before acting on a peer response.
1219
1219
 
1220
+ CoreMail binds every issued routing handle to a digest of the exact normalized
1221
+ `envelope` and `source` sent at resolve time. A following
1222
+ `coreMailGatewayPrepareInboundHandoff` must resend byte-identical values,
1223
+ including the complete `rcptTo` set in the same order. Both peers use
1224
+ `data.normalizeCoreMailGatewayMessage` and
1225
+ `data.normalizeCoreMailConnectionInfo` so the digested bytes come from one
1226
+ shared implementation. Outbound status is monotonic per `transportMessageId`,
1227
+ and a permanently unknown `transportMessageId` is answered with a terminal
1228
+ `failed` status rather than an error, because CoreMail retries errors
1229
+ indefinitely.
1230
+
1220
1231
  Large content never travels inside TypedRequest JSON. Outbound body parts and
1221
1232
  attachments use prepare/upload/complete operations with short-lived one-time
1222
1233
  HTTP transfer grants. Inbound delivery uses bounded delivery listing followed
@@ -1245,6 +1256,23 @@ credential-lifecycle inconsistencies. CoreMail credential verifiers use the
1245
1256
  versioned `argon2id-v1` format and the exact policy exported as
1246
1257
  `data.coreMailCredentialVerifierPolicy`.
1247
1258
 
1259
+ `data.ICoreMailDesiredState.smtp` is the optional CoreMail SMTP submission
1260
+ listener (MSA). It carries the listener port, the advertised EHLO hostname, and
1261
+ the runtime secret keys holding certificate and private-key PEM text; plaintext
1262
+ PEM material never appears in desired state. SMTP AUTH uses the binding
1263
+ identity directly: the username is the `bindingId` and the password is any
1264
+ current or retiring credential secret of that binding. The listener stays
1265
+ unavailable until the referenced PEM material resolves. Omitting `smtp` keeps
1266
+ the exact canonical bytes and digest of an API-only CoreMail. Accepted
1267
+ submissions report their entry point through the optional
1268
+ `ICoreMailSubmission.source`, either `api` or `smtp`.
1269
+
1270
+ `data.ICoreMailServiceMailStatistics` reports per-service outbound and inbound
1271
+ counters for one UTC calendar day. Control sessions read them through
1272
+ `coreMailGetServiceMailStatistics` using an inclusive day range, an optional
1273
+ service filter, and an opaque cursor. Apply
1274
+ `data.normalizeCoreMailServiceMailStatistics` before using reported counters.
1275
+
1248
1276
  `data.ICoreMailControlBootstrap` is installed before ordinary reconciliation.
1249
1277
  It contains the CoreMail service identity and verifier metadata only. The
1250
1278
  matching plaintext control credential is delivered exclusively to Coreflow
@@ -1269,7 +1297,13 @@ CoreMail transfer origin associated with an authenticated CoreMail service.
1269
1297
  The same origin is carried in CoreMail desired state and returned by workload
1270
1298
  and gateway authentication. It must never be inferred from a socket, Host
1271
1299
  header, TypedSocket tag, or unrestricted peer input. CoreMail compares both
1272
- authoritative views before handing over a path-only transfer grant.
1300
+ authoritative views before handing over a path-only transfer grant. Cloudly and
1301
+ Onebox provision that peer state through `listCoreMailGatewayPeers`,
1302
+ `syncCoreMailGatewayPeer`, and `deleteCoreMailGatewayPeer` on the gateway-client
1303
+ mail surface, and the producer is the single owner of `peer.transferOrigin`. A
1304
+ mail inbound target may point at a CoreMail service using `type: 'coreMail'`
1305
+ with `coreMail.coreMailServiceId`, mirrored by the `coreMail` member of
1306
+ `IServiceMailInboundConfig.targetType`.
1273
1307
 
1274
1308
  Inbound delivery pagination uses an opaque CoreMail-owned `cursor`, is bounded
1275
1309
  by `data.coreMailLimits.inboundPageSize`, and returns `nextCursor` only when
@@ -1316,6 +1350,41 @@ current task roster. Apply `data.normalizeCoreMailReconciliationStatus` before
1316
1350
  using pending-inbound or composite active-session counts for drain and rotation
1317
1351
  decisions.
1318
1352
 
1353
+ #### CoreMail control-plane settings and operator RPCs
1354
+
1355
+ `data.ICloudlySettings` carries the CoreMail control plane: `coreMailEnabled`,
1356
+ `coreMailServiceId`, the canonical `coreMailControlEndpointUrl`
1357
+ (`https://host/socket`), the path-free `coreMailTransferOrigin`, dcrouter's
1358
+ `coreMailGatewayEndpointUrl` (`wss://…`), the composite
1359
+ `coreMailControlCredentialId`/`coreMailControlCredentialVersion`, the submission
1360
+ listener's `coreMailSmtpHost`, `coreMailSmtpPort` and `coreMailSmtpTlsMode`, and
1361
+ the `coreMailDefault*` binding quota defaults. No credential or PEM value is
1362
+ part of settings: `data.cloudlySystemSecretKeys` publishes
1363
+ `coreMailControlCredentialSecret`, `coreMailGatewayCredentialSecret`,
1364
+ `coreMailSmtpTlsCertificatePem`, and `coreMailSmtpTlsPrivateKeyPem` as the
1365
+ stable keys of the removed values. The submission listener's PEM material is
1366
+ operator-supplied in v1; automatic issuance is a later workstream.
1367
+
1368
+ Secrets that Cloudly manages for CoreMail use the `coremail` management source
1369
+ and a `coremail:<identifier>` management scope, validated by the existing
1370
+ `data.validateSecretManagementScope` and secret-metadata validators.
1371
+
1372
+ `IServiceMailConfig.coreMail` publishes the service's CoreMail binding as public
1373
+ metadata only: binding and composite credential identity, the `argon2id-v1`
1374
+ verification hash, the binding state, and any `retiring` predecessor with its
1375
+ `acceptUntil`. Plaintext never appears there, and the field is excluded from
1376
+ `data.TServiceWritableData`, so only the control plane writes it while the rest
1377
+ of `mail` stays caller-writable. `IServiceMailConfig.allowedSenders` makes the
1378
+ outbound sender allowlist explicit instead of inferring it from per-address
1379
+ `outbound.enabled`.
1380
+
1381
+ `requests.coremailAdmin` carries the identity-authenticated operator surface:
1382
+ `getCoreMailServiceMailStatistics` for per-service daily counters,
1383
+ `getCoreMailControlStatus` for the applied config epoch, desired-state digest
1384
+ and last reconciliation status, and `listServiceMailTargets` for the mail target
1385
+ inventory (`data.IServiceMailTargetSummary` with
1386
+ `data.IServiceMailTargetAddressSummary` rows).
1387
+
1319
1388
  Request groups are exported by product area:
1320
1389
 
1321
1390
  - `requests.admin`
@@ -1327,6 +1396,7 @@ Request groups are exported by product area:
1327
1396
  - `requests.cluster`
1328
1397
  - `requests.config`
1329
1398
  - `requests.coremail`
1399
+ - `requests.coremailAdmin`
1330
1400
  - `requests.corestore`
1331
1401
  - `requests.deployment`
1332
1402
  - `requests.dns`
@@ -3,6 +3,6 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@serve.zone/interfaces',
6
- version: '30.12.0',
6
+ version: '30.14.0',
7
7
  description: 'Shared TypeScript interfaces and TypedRequest contracts for the serve.zone ecosystem.'
8
8
  }