@serve.zone/coremail 1.1.0 → 1.3.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/changelog.md +43 -0
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/classes.auth.d.ts +19 -0
- package/dist_ts/classes.auth.js +58 -1
- package/dist_ts/classes.coremail.d.ts +3 -0
- package/dist_ts/classes.coremail.js +11 -4
- package/dist_ts/classes.gateway.d.ts +11 -1
- package/dist_ts/classes.gateway.js +101 -63
- package/dist_ts/classes.inbound.d.ts +10 -1
- package/dist_ts/classes.inbound.js +45 -7
- package/dist_ts/classes.maintenance.js +16 -1
- package/dist_ts/classes.models.d.ts +24 -2
- package/dist_ts/classes.models.js +72 -2
- package/dist_ts/classes.server.d.ts +6 -2
- package/dist_ts/classes.server.js +18 -68
- package/dist_ts/classes.smtpsubmission.d.ts +85 -0
- package/dist_ts/classes.smtpsubmission.js +379 -0
- package/dist_ts/classes.storage.d.ts +9 -0
- package/dist_ts/classes.storage.js +44 -1
- package/dist_ts/classes.submissions.d.ts +27 -1
- package/dist_ts/classes.submissions.js +164 -14
- package/dist_ts/coremail.errors.d.ts +18 -0
- package/dist_ts/coremail.errors.js +84 -0
- package/dist_ts/coremail.log.d.ts +1 -1
- package/dist_ts/coremail.log.js +1 -1
- package/dist_ts/coremail.mime.d.ts +15 -0
- package/dist_ts/coremail.mime.js +76 -1
- package/dist_ts/coremail.persistence.d.ts +38 -1
- package/dist_ts/coremail.persistence.js +124 -40
- package/dist_ts/coremail.stats.d.ts +72 -0
- package/dist_ts/coremail.stats.js +242 -0
- package/dist_ts/coremail.validation.d.ts +15 -2
- package/dist_ts/coremail.validation.js +26 -78
- package/dist_ts/interfaces.d.ts +18 -0
- package/dist_ts/plugins.d.ts +1 -0
- package/dist_ts/plugins.js +2 -1
- package/package.json +12 -11
- package/readme.md +51 -2
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/classes.auth.ts +77 -0
- package/ts/classes.coremail.ts +20 -0
- package/ts/classes.gateway.ts +121 -66
- package/ts/classes.inbound.ts +71 -6
- package/ts/classes.maintenance.ts +14 -0
- package/ts/classes.models.ts +67 -1
- package/ts/classes.server.ts +23 -80
- package/ts/classes.smtpsubmission.ts +466 -0
- package/ts/classes.storage.ts +54 -0
- package/ts/classes.submissions.ts +247 -12
- package/ts/coremail.errors.ts +111 -0
- package/ts/coremail.log.ts +1 -0
- package/ts/coremail.mime.ts +89 -0
- package/ts/coremail.persistence.ts +196 -48
- package/ts/coremail.stats.ts +342 -0
- package/ts/coremail.validation.ts +31 -103
- package/ts/interfaces.ts +20 -0
- package/ts/plugins.ts +1 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as plugins from './plugins.js';
|
|
2
|
-
import type { ISubmissionPartRecord, TTransferGrantPurpose } from './interfaces.js';
|
|
2
|
+
import type { ISubmissionPartRecord, TCoreMailSubmissionSource, TTransferGrantPurpose } from './interfaces.js';
|
|
3
3
|
type TCoreMailSha256 = plugins.serveZoneInterfaces.data.TCoreMailSha256;
|
|
4
4
|
export interface ICoreMailStateRecord {
|
|
5
5
|
stateId: string;
|
|
@@ -35,6 +35,34 @@ export interface ICoreMailQuotaCounterRecord {
|
|
|
35
35
|
createdAt: number;
|
|
36
36
|
updatedAt: number;
|
|
37
37
|
}
|
|
38
|
+
/**
|
|
39
|
+
* Per-binding, per-UTC-day outbound and inbound counters.
|
|
40
|
+
*
|
|
41
|
+
* Counted events are durable transitions, not requests: a replayed transition
|
|
42
|
+
* contributes nothing. Rows are retained for 90 days by the maintenance sweep.
|
|
43
|
+
*/
|
|
44
|
+
export interface ICoreMailStatCounterRecord {
|
|
45
|
+
statId: TCoreMailSha256;
|
|
46
|
+
tenantId: string;
|
|
47
|
+
serviceId: string;
|
|
48
|
+
bindingId: string;
|
|
49
|
+
/** UTC midnight of the counted day, in milliseconds. */
|
|
50
|
+
dayUtc: number;
|
|
51
|
+
submittedApi: number;
|
|
52
|
+
submittedSmtp: number;
|
|
53
|
+
delivered: number;
|
|
54
|
+
deferred: number;
|
|
55
|
+
failed: number;
|
|
56
|
+
deadLettered: number;
|
|
57
|
+
received: number;
|
|
58
|
+
acknowledgedProcessed: number;
|
|
59
|
+
acknowledgedDiscarded: number;
|
|
60
|
+
createdAt: number;
|
|
61
|
+
updatedAt: number;
|
|
62
|
+
}
|
|
63
|
+
/** Counter names an increment may target. */
|
|
64
|
+
export declare const coreMailStatKinds: readonly ["submittedApi", "submittedSmtp", "delivered", "deferred", "failed", "deadLettered", "received", "acknowledgedProcessed", "acknowledgedDiscarded"];
|
|
65
|
+
export type TCoreMailStatKind = (typeof coreMailStatKinds)[number];
|
|
38
66
|
export interface ICoreMailTransferGrantRecord {
|
|
39
67
|
grantId: string;
|
|
40
68
|
authorityKind: 'control' | 'gateway' | 'workload';
|
|
@@ -64,6 +92,14 @@ export interface ICoreMailSubmissionRecord {
|
|
|
64
92
|
idempotencyKey: string;
|
|
65
93
|
submissionDigest: TCoreMailSha256;
|
|
66
94
|
state: plugins.serveZoneInterfaces.data.TCoreMailSubmissionState;
|
|
95
|
+
/** Absent on records persisted before the discriminator existed; read as 'api'. */
|
|
96
|
+
source?: TCoreMailSubmissionSource;
|
|
97
|
+
/**
|
|
98
|
+
* Set once, in the same transition that first publishes the immutable MIME.
|
|
99
|
+
* Its presence is what makes the submitted-counter increment exactly-once
|
|
100
|
+
* across an interrupted publication that finalization later repeats.
|
|
101
|
+
*/
|
|
102
|
+
statsSubmittedCountedAt?: number;
|
|
67
103
|
message: plugins.serveZoneInterfaces.data.ICoreMailOutboundMessageDescriptor;
|
|
68
104
|
parts: ISubmissionPartRecord[];
|
|
69
105
|
mimeObjectKey?: string;
|
|
@@ -141,6 +177,7 @@ export declare const assertCoreMailStateRecord: (valueArg: unknown) => asserts v
|
|
|
141
177
|
export declare const assertCoreMailDesiredSnapshotRecord: (valueArg: unknown) => asserts valueArg is ICoreMailDesiredSnapshotRecord;
|
|
142
178
|
export declare const assertCoreMailQuotaCounterRecord: (valueArg: unknown) => asserts valueArg is ICoreMailQuotaCounterRecord;
|
|
143
179
|
export declare const assertCoreMailTransferGrantRecord: (valueArg: unknown) => asserts valueArg is ICoreMailTransferGrantRecord;
|
|
180
|
+
export declare const assertCoreMailStatCounterRecord: (valueArg: unknown) => asserts valueArg is ICoreMailStatCounterRecord;
|
|
144
181
|
export declare const assertCoreMailSubmissionRecord: (valueArg: unknown) => asserts valueArg is ICoreMailSubmissionRecord;
|
|
145
182
|
export declare const assertCoreMailInboundDeliveryRecord: (valueArg: unknown) => asserts valueArg is ICoreMailInboundDeliveryRecord;
|
|
146
183
|
export declare const assertCoreMailRecipientHandleRecord: (valueArg: unknown) => asserts valueArg is ICoreMailRecipientHandleRecord;
|
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
import * as plugins from './plugins.js';
|
|
2
|
-
import {
|
|
2
|
+
import { createCoreMailRawOutboundMessage, normalizeCoreMailEnvelope, normalizeCoreMailOutboundMessage, } from './coremail.validation.js';
|
|
3
|
+
/** Counter names an increment may target. */
|
|
4
|
+
export const coreMailStatKinds = [
|
|
5
|
+
'submittedApi',
|
|
6
|
+
'submittedSmtp',
|
|
7
|
+
'delivered',
|
|
8
|
+
'deferred',
|
|
9
|
+
'failed',
|
|
10
|
+
'deadLettered',
|
|
11
|
+
'received',
|
|
12
|
+
'acknowledgedProcessed',
|
|
13
|
+
'acknowledgedDiscarded',
|
|
14
|
+
];
|
|
3
15
|
const identifierRegex = /^[A-Za-z0-9](?:[A-Za-z0-9._:-]{0,126}[A-Za-z0-9])?$/;
|
|
4
16
|
const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/;
|
|
5
17
|
const objectKeyRegex = /^[A-Za-z0-9][A-Za-z0-9._/-]{0,1023}$/;
|
|
@@ -309,6 +321,31 @@ export const assertCoreMailTransferGrantRecord = (valueArg) => {
|
|
|
309
321
|
throw new Error('Consumed CoreMailTransferGrant has no completion time.');
|
|
310
322
|
}
|
|
311
323
|
};
|
|
324
|
+
export const assertCoreMailStatCounterRecord = (valueArg) => {
|
|
325
|
+
const value = requireRecord(valueArg, [
|
|
326
|
+
'statId',
|
|
327
|
+
'tenantId',
|
|
328
|
+
'serviceId',
|
|
329
|
+
'bindingId',
|
|
330
|
+
'dayUtc',
|
|
331
|
+
...coreMailStatKinds,
|
|
332
|
+
'createdAt',
|
|
333
|
+
'updatedAt',
|
|
334
|
+
], [], 'CoreMailStatCounter');
|
|
335
|
+
requireSha256(value.statId, 'CoreMailStatCounter.statId');
|
|
336
|
+
requireIdentifier(value.tenantId, 'CoreMailStatCounter.tenantId');
|
|
337
|
+
requireIdentifier(value.serviceId, 'CoreMailStatCounter.serviceId');
|
|
338
|
+
requireIdentifier(value.bindingId, 'CoreMailStatCounter.bindingId');
|
|
339
|
+
const dayUtc = requireInteger(value.dayUtc, 'CoreMailStatCounter.dayUtc');
|
|
340
|
+
if (dayUtc % 86_400_000 !== 0) {
|
|
341
|
+
throw new Error('CoreMailStatCounter.dayUtc must be a UTC day boundary.');
|
|
342
|
+
}
|
|
343
|
+
for (const kind of coreMailStatKinds) {
|
|
344
|
+
requireInteger(value[kind], `CoreMailStatCounter.${kind}`);
|
|
345
|
+
}
|
|
346
|
+
requireInteger(value.createdAt, 'CoreMailStatCounter.createdAt');
|
|
347
|
+
requireInteger(value.updatedAt, 'CoreMailStatCounter.updatedAt');
|
|
348
|
+
};
|
|
312
349
|
export const assertCoreMailSubmissionRecord = (valueArg) => {
|
|
313
350
|
const value = requireRecord(valueArg, [
|
|
314
351
|
'submissionId',
|
|
@@ -326,6 +363,8 @@ export const assertCoreMailSubmissionRecord = (valueArg) => {
|
|
|
326
363
|
'createdAt',
|
|
327
364
|
'updatedAt',
|
|
328
365
|
], [
|
|
366
|
+
'source',
|
|
367
|
+
'statsSubmittedCountedAt',
|
|
329
368
|
'mimeObjectKey',
|
|
330
369
|
'mimeSha256',
|
|
331
370
|
'mimeLengthBytes',
|
|
@@ -367,44 +406,84 @@ export const assertCoreMailSubmissionRecord = (valueArg) => {
|
|
|
367
406
|
if (!submissionStates.has(String(value.state))) {
|
|
368
407
|
throw new Error('CoreMailSubmission.state is invalid.');
|
|
369
408
|
}
|
|
409
|
+
if (value.source !== undefined
|
|
410
|
+
&& value.source !== 'api'
|
|
411
|
+
&& value.source !== 'smtp') {
|
|
412
|
+
throw new Error('CoreMailSubmission.source is invalid.');
|
|
413
|
+
}
|
|
414
|
+
// Records persisted before the discriminator existed are API submissions.
|
|
415
|
+
const source = value.source === undefined
|
|
416
|
+
? 'api'
|
|
417
|
+
: value.source;
|
|
370
418
|
const messageRecord = requireRecord(value.message, ['sender', 'recipients', 'subject', 'parts'], ['replyTo', 'headers'], 'CoreMailSubmission.message');
|
|
371
419
|
const sender = requireRecord(messageRecord.sender, ['address'], ['displayName'], 'CoreMailSubmission.message.sender');
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
420
|
+
if (source === 'smtp') {
|
|
421
|
+
// An SMTP submission carries opaque exact bytes owned by the immutable
|
|
422
|
+
// MIME tuple. It has no CoreMail-composed body, so it has no part
|
|
423
|
+
// descriptors and no part objects to upload — the non-empty and
|
|
424
|
+
// parts-match-intent rules below do not apply to it.
|
|
425
|
+
const recipients = requireRecord(messageRecord.recipients, ['to'], [], 'CoreMailSubmission.message.recipients');
|
|
426
|
+
if (!Array.isArray(recipients.to)
|
|
427
|
+
|| messageRecord.subject !== ''
|
|
428
|
+
|| !Array.isArray(messageRecord.parts)
|
|
429
|
+
|| messageRecord.parts.length !== 0
|
|
430
|
+
|| Object.hasOwn(messageRecord, 'replyTo')
|
|
431
|
+
|| Object.hasOwn(messageRecord, 'headers')
|
|
432
|
+
|| Object.hasOwn(sender, 'displayName')) {
|
|
433
|
+
throw new Error('CoreMailSubmission raw message is invalid.');
|
|
434
|
+
}
|
|
435
|
+
const envelope = normalizeCoreMailEnvelope({
|
|
436
|
+
mailFrom: sender.address,
|
|
437
|
+
rcptTo: recipients.to.map((recipientArg) => requireRecord(recipientArg, ['address'], [], 'CoreMailSubmission.message.recipients.to[]').address),
|
|
438
|
+
});
|
|
439
|
+
if (envelope.mailFrom === '') {
|
|
440
|
+
throw new Error('CoreMailSubmission raw message has no envelope sender.');
|
|
441
|
+
}
|
|
442
|
+
requireNormalized(value.message, createCoreMailRawOutboundMessage(envelope), 'CoreMailSubmission.message');
|
|
443
|
+
if (!Array.isArray(value.parts) || value.parts.length !== 0) {
|
|
444
|
+
throw new Error('CoreMailSubmission raw parts must be empty.');
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
else {
|
|
448
|
+
const normalizedMessage = normalizeCoreMailOutboundMessage(value.message, {
|
|
449
|
+
schemaVersion: 2,
|
|
450
|
+
bindingId: String(value.bindingId),
|
|
451
|
+
serviceId: String(value.serviceId),
|
|
452
|
+
tenantId: String(value.tenantId),
|
|
453
|
+
revision: Number(value.bindingRevision),
|
|
454
|
+
state: 'active',
|
|
455
|
+
capabilities: ['outbound'],
|
|
456
|
+
credentials: [],
|
|
457
|
+
allowedSenders: [String(sender.address)],
|
|
458
|
+
inboundRecipients: [],
|
|
459
|
+
limits: {
|
|
460
|
+
messagesPerMinute: 1,
|
|
461
|
+
messagesPerDay: 1,
|
|
462
|
+
maxPendingInbound: 1,
|
|
463
|
+
},
|
|
464
|
+
});
|
|
465
|
+
requireNormalized(value.message, normalizedMessage, 'CoreMailSubmission.message');
|
|
466
|
+
if (!Array.isArray(value.parts) || value.parts.length === 0) {
|
|
467
|
+
throw new Error('CoreMailSubmission.parts is invalid.');
|
|
468
|
+
}
|
|
469
|
+
value.parts.forEach((partArg, indexArg) => assertPart(partArg, `CoreMailSubmission.parts[${indexArg}]`));
|
|
470
|
+
const parts = value.parts;
|
|
471
|
+
if (new Set(parts.map((partArg) => partArg.partId)).size !== parts.length
|
|
472
|
+
|| canonicalJson(parts.map((partArg) => ({
|
|
473
|
+
partId: partArg.partId,
|
|
474
|
+
kind: partArg.kind,
|
|
475
|
+
contentType: partArg.contentType,
|
|
476
|
+
...(partArg.filename === undefined
|
|
477
|
+
? {}
|
|
478
|
+
: { filename: partArg.filename }),
|
|
479
|
+
...(partArg.contentId === undefined
|
|
480
|
+
? {}
|
|
481
|
+
: { contentId: partArg.contentId }),
|
|
482
|
+
sha256: partArg.sha256,
|
|
483
|
+
lengthBytes: partArg.lengthBytes,
|
|
484
|
+
}))) !== canonicalJson(normalizedMessage.parts)) {
|
|
485
|
+
throw new Error('CoreMailSubmission parts do not match message intent.');
|
|
486
|
+
}
|
|
408
487
|
}
|
|
409
488
|
requireInteger(value.attempts, 'CoreMailSubmission.attempts');
|
|
410
489
|
requireInteger(value.createdAt, 'CoreMailSubmission.createdAt');
|
|
@@ -426,6 +505,10 @@ export const assertCoreMailSubmissionRecord = (valueArg) => {
|
|
|
426
505
|
if (mimeFieldCount !== 0 && mimeFieldCount !== 3) {
|
|
427
506
|
throw new Error('CoreMailSubmission immutable MIME tuple is incomplete.');
|
|
428
507
|
}
|
|
508
|
+
if (source === 'smtp' && mimeFieldCount !== 3) {
|
|
509
|
+
// The exact bytes are an SMTP submission's only content.
|
|
510
|
+
throw new Error('CoreMailSubmission raw submission has no immutable MIME.');
|
|
511
|
+
}
|
|
429
512
|
if (value.transportMessageId !== undefined) {
|
|
430
513
|
requireIdentifier(value.transportMessageId, 'CoreMailSubmission.transportMessageId');
|
|
431
514
|
}
|
|
@@ -433,6 +516,7 @@ export const assertCoreMailSubmissionRecord = (valueArg) => {
|
|
|
433
516
|
requireUuid(value.transportGrantId, 'CoreMailSubmission.transportGrantId');
|
|
434
517
|
}
|
|
435
518
|
for (const [key, entry] of [
|
|
519
|
+
['statsSubmittedCountedAt', value.statsSubmittedCountedAt],
|
|
436
520
|
['gatewayStatusUpdatedAt', value.gatewayStatusUpdatedAt],
|
|
437
521
|
['mimePublishedAt', value.mimePublishedAt],
|
|
438
522
|
['nextAttemptAt', value.nextAttemptAt],
|
|
@@ -652,8 +736,8 @@ export const assertCoreMailInboundHandoffRecord = (valueArg) => {
|
|
|
652
736
|
if (new Set(value.routingHandles).size !== value.routingHandles.length) {
|
|
653
737
|
throw new Error('CoreMailInboundHandoff.routingHandles contains duplicates.');
|
|
654
738
|
}
|
|
655
|
-
requireNormalized(value.message, normalizeCoreMailGatewayMessage(value.message), 'CoreMailInboundHandoff.message');
|
|
656
|
-
requireNormalized(value.source, normalizeCoreMailConnectionInfo(value.source), 'CoreMailInboundHandoff.source');
|
|
739
|
+
requireNormalized(value.message, plugins.serveZoneInterfaces.data.normalizeCoreMailGatewayMessage(value.message), 'CoreMailInboundHandoff.message');
|
|
740
|
+
requireNormalized(value.source, plugins.serveZoneInterfaces.data.normalizeCoreMailConnectionInfo(value.source), 'CoreMailInboundHandoff.source');
|
|
657
741
|
if (value.state !== 'prepared'
|
|
658
742
|
&& value.state !== 'uploaded'
|
|
659
743
|
&& value.state !== 'completed'
|
|
@@ -692,4 +776,4 @@ export const assertCoreMailInboundHandoffRecord = (valueArg) => {
|
|
|
692
776
|
throw new Error('CoreMailInboundHandoff completion tuple is invalid.');
|
|
693
777
|
}
|
|
694
778
|
};
|
|
695
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZW1haWwucGVyc2lzdGVuY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9jb3JlbWFpbC5wZXJzaXN0ZW5jZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUN4QyxPQUFPLEVBQ0wsK0JBQStCLEVBQy9CLHlCQUF5QixFQUN6QiwrQkFBK0IsRUFDL0IsZ0NBQWdDLEdBQ2pDLE1BQU0sMEJBQTBCLENBQUM7QUF3SmxDLE1BQU0sZUFBZSxHQUNuQixxREFBcUQsQ0FBQztBQUN4RCxNQUFNLFNBQVMsR0FDYiwyRUFBMkUsQ0FBQztBQUM5RSxNQUFNLGNBQWMsR0FBRyxzQ0FBc0MsQ0FBQztBQUM5RCxNQUFNLGdCQUFnQixHQUNwQiw4R0FBOEcsQ0FBQztBQUVqSCxNQUFNLGFBQWEsR0FBRyxDQUNwQixRQUFpQixFQUNqQixXQUFxQixFQUNyQixXQUFxQixFQUNyQixRQUFnQixFQUNTLEVBQUU7SUFDM0IsSUFDRSxDQUFDLFFBQVE7V0FDTixPQUFPLFFBQVEsS0FBSyxRQUFRO1dBQzVCLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDO1dBQ3ZCLENBQ0QsTUFBTSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsS0FBSyxNQUFNLENBQUMsU0FBUztlQUNqRCxNQUFNLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxLQUFLLElBQUksQ0FDNUMsRUFDRCxDQUFDO1FBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLFFBQVEsMEJBQTBCLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBQ0QsTUFBTSxLQUFLLEdBQUcsUUFBbUMsQ0FBQztJQUNsRCxNQUFNLE9BQU8sR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsV0FBVyxFQUFFLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQztJQUMxRCxJQUNFLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFD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
|
|
779
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZW1haWwucGVyc2lzdGVuY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9jb3JlbWFpbC5wZXJzaXN0ZW5jZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUN4QyxPQUFPLEVBQ0wsZ0NBQWdDLEVBQ2hDLHlCQUF5QixFQUN6QixnQ0FBZ0MsR0FDakMsTUFBTSwwQkFBMEIsQ0FBQztBQXdFbEMsNkNBQTZDO0FBQzdDLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHO0lBQy9CLGNBQWM7SUFDZCxlQUFlO0lBQ2YsV0FBVztJQUNYLFVBQVU7SUFDVixRQUFRO0lBQ1IsY0FBYztJQUNkLFVBQVU7SUFDVix1QkFBdUI7SUFDdkIsdUJBQXVCO0NBQ2YsQ0FBQztBQXVIWCxNQUFNLGVBQWUsR0FDbkIscURBQXFELENBQUM7QUFDeEQsTUFBTSxTQUFTLEdBQ2IsMkVBQTJFLENBQUM7QUFDOUUsTUFBTSxjQUFjLEdBQUcsc0NBQXNDLENBQUM7QUFDOUQsTUFBTSxnQkFBZ0IsR0FDcEIsOEdBQThHLENBQUM7QUFFakgsTUFBTSxhQUFhLEdBQUcsQ0FDcEIsUUFBaUIsRUFDakIsV0FBcUIsRUFDckIsV0FBcUIsRUFDckIsUUFBZ0IsRUFDUyxFQUFFO0lBQzNCLElBQ0UsQ0FBQyxRQUFRO1dBQ04sT0FBTyxRQUFRLEtBQUssUUFBUTtXQUM1QixLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztXQUN2QixDQUNELE1BQU0sQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLEtBQUssTUFBTSxDQUFDLFNBQVM7ZUFDakQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsS0FBSyxJQUFJLENBQzVDLEVBQ0QsQ0FBQztRQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxRQUFRLDBCQUEwQixDQUFDLENBQUM7SUFDekQsQ0FBQztJQUNELE1BQU0sS0FBSyxHQUFHLFFBQW1DLENB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
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import * as plugins from './plugins.js';
|
|
2
|
+
import type { ICoreMailModels } from './classes.models.js';
|
|
3
|
+
import { type ICoreMailStatCounterRecord, type TCoreMailStatKind } from './coremail.persistence.js';
|
|
4
|
+
/** How long a counted day is retained before the maintenance sweep drops it. */
|
|
5
|
+
export declare const coreMailStatRetentionMs: number;
|
|
6
|
+
export interface ICoreMailStatAuthority {
|
|
7
|
+
tenantId: string;
|
|
8
|
+
serviceId: string;
|
|
9
|
+
bindingId: string;
|
|
10
|
+
}
|
|
11
|
+
export interface ICoreMailStatDescriptor extends ICoreMailStatAuthority {
|
|
12
|
+
statId: plugins.serveZoneInterfaces.data.TCoreMailSha256;
|
|
13
|
+
dayUtc: number;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* The counter row an event at `nowArg` belongs to.
|
|
17
|
+
*
|
|
18
|
+
* Counters are keyed by binding rather than binding revision: a revision bump
|
|
19
|
+
* is a configuration change, not a new tenant, and a day's totals must survive
|
|
20
|
+
* one.
|
|
21
|
+
*/
|
|
22
|
+
export declare const createCoreMailStatDescriptor: (authorityArg: ICoreMailStatAuthority, nowArg: number) => ICoreMailStatDescriptor;
|
|
23
|
+
/** Create the day's row if it does not exist yet. Safe to call concurrently. */
|
|
24
|
+
export declare const ensureCoreMailStatCounter: (modelsArg: ICoreMailModels, descriptorArg: ICoreMailStatDescriptor) => Promise<void>;
|
|
25
|
+
/**
|
|
26
|
+
* Add one to a counter through the revision-fenced transition primitive, so
|
|
27
|
+
* the read and the write are one atomic compare-and-set. Call this inside the
|
|
28
|
+
* transaction that carries the counted state transition; then the event and
|
|
29
|
+
* its count commit together or not at all.
|
|
30
|
+
*/
|
|
31
|
+
export declare const incrementCoreMailStatCounter: (modelsArg: ICoreMailModels, descriptorArg: ICoreMailStatDescriptor, kindArg: TCoreMailStatKind, updatedAtArg: number, sessionArg?: plugins.smartdata.SmartdataSession) => Promise<void>;
|
|
32
|
+
/**
|
|
33
|
+
* Ensure the day's row exists, then count one event on it.
|
|
34
|
+
*
|
|
35
|
+
* For a counted transition that runs inside a transaction, call
|
|
36
|
+
* `ensureCoreMailStatCounter` before opening it and
|
|
37
|
+
* `incrementCoreMailStatCounter` with the session inside it — the same order
|
|
38
|
+
* the quota counters use, so the row insert never contends with the
|
|
39
|
+
* transaction that increments it.
|
|
40
|
+
*/
|
|
41
|
+
export declare const countCoreMailStat: (modelsArg: ICoreMailModels, authorityArg: ICoreMailStatAuthority, kindArg: TCoreMailStatKind, nowArg: number, sessionArg?: plugins.smartdata.SmartdataSession) => Promise<ICoreMailStatDescriptor>;
|
|
42
|
+
/** Maximum rows one statistics page may return. */
|
|
43
|
+
export declare const coreMailStatPageMaximum = 200;
|
|
44
|
+
/** `YYYY-MM-DD` to the UTC midnight milliseconds the counter rows are keyed by. */
|
|
45
|
+
export declare const parseCoreMailStatDay: (valueArg: unknown, labelArg: string) => number;
|
|
46
|
+
export declare const formatCoreMailStatDay: (dayUtcArg: number) => string;
|
|
47
|
+
export interface ICoreMailStatCursorPosition {
|
|
48
|
+
dayUtc: number;
|
|
49
|
+
statId: plugins.serveZoneInterfaces.data.TCoreMailSha256;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Opaque composite cursor over `(dayUtc, statId)`.
|
|
53
|
+
*
|
|
54
|
+
* It carries no authority: the control session is what authorizes the read,
|
|
55
|
+
* and every filter is re-applied on the next page, so a replayed cursor can
|
|
56
|
+
* only ever resume the same ordered scan.
|
|
57
|
+
*/
|
|
58
|
+
export declare const encodeCoreMailStatCursor: (positionArg: ICoreMailStatCursorPosition) => string;
|
|
59
|
+
export declare const decodeCoreMailStatCursor: (valueArg: unknown) => ICoreMailStatCursorPosition;
|
|
60
|
+
/** Project one counter row onto the wire contract. */
|
|
61
|
+
export declare const toCoreMailServiceMailStatistics: (counterArg: ICoreMailStatCounterRecord) => plugins.serveZoneInterfaces.data.ICoreMailServiceMailStatistics;
|
|
62
|
+
/** One ordered, bounded page of per-service daily counters. */
|
|
63
|
+
export declare const listCoreMailServiceMailStatistics: (modelsArg: ICoreMailModels, requestArg: {
|
|
64
|
+
fromDayUtc: string;
|
|
65
|
+
toDayUtc: string;
|
|
66
|
+
serviceIds?: string[];
|
|
67
|
+
cursor?: string;
|
|
68
|
+
limit: number;
|
|
69
|
+
}) => Promise<{
|
|
70
|
+
statistics: plugins.serveZoneInterfaces.data.ICoreMailServiceMailStatistics[];
|
|
71
|
+
nextCursor?: string;
|
|
72
|
+
}>;
|