@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.
Files changed (57) hide show
  1. package/changelog.md +43 -0
  2. package/dist_ts/00_commitinfo_data.js +1 -1
  3. package/dist_ts/classes.auth.d.ts +19 -0
  4. package/dist_ts/classes.auth.js +58 -1
  5. package/dist_ts/classes.coremail.d.ts +3 -0
  6. package/dist_ts/classes.coremail.js +11 -4
  7. package/dist_ts/classes.gateway.d.ts +11 -1
  8. package/dist_ts/classes.gateway.js +101 -63
  9. package/dist_ts/classes.inbound.d.ts +10 -1
  10. package/dist_ts/classes.inbound.js +45 -7
  11. package/dist_ts/classes.maintenance.js +16 -1
  12. package/dist_ts/classes.models.d.ts +24 -2
  13. package/dist_ts/classes.models.js +72 -2
  14. package/dist_ts/classes.server.d.ts +6 -2
  15. package/dist_ts/classes.server.js +18 -68
  16. package/dist_ts/classes.smtpsubmission.d.ts +85 -0
  17. package/dist_ts/classes.smtpsubmission.js +379 -0
  18. package/dist_ts/classes.storage.d.ts +9 -0
  19. package/dist_ts/classes.storage.js +44 -1
  20. package/dist_ts/classes.submissions.d.ts +27 -1
  21. package/dist_ts/classes.submissions.js +164 -14
  22. package/dist_ts/coremail.errors.d.ts +18 -0
  23. package/dist_ts/coremail.errors.js +84 -0
  24. package/dist_ts/coremail.log.d.ts +1 -1
  25. package/dist_ts/coremail.log.js +1 -1
  26. package/dist_ts/coremail.mime.d.ts +15 -0
  27. package/dist_ts/coremail.mime.js +76 -1
  28. package/dist_ts/coremail.persistence.d.ts +38 -1
  29. package/dist_ts/coremail.persistence.js +124 -40
  30. package/dist_ts/coremail.stats.d.ts +72 -0
  31. package/dist_ts/coremail.stats.js +242 -0
  32. package/dist_ts/coremail.validation.d.ts +15 -2
  33. package/dist_ts/coremail.validation.js +26 -78
  34. package/dist_ts/interfaces.d.ts +18 -0
  35. package/dist_ts/plugins.d.ts +1 -0
  36. package/dist_ts/plugins.js +2 -1
  37. package/package.json +12 -11
  38. package/readme.md +51 -2
  39. package/ts/00_commitinfo_data.ts +1 -1
  40. package/ts/classes.auth.ts +77 -0
  41. package/ts/classes.coremail.ts +20 -0
  42. package/ts/classes.gateway.ts +121 -66
  43. package/ts/classes.inbound.ts +71 -6
  44. package/ts/classes.maintenance.ts +14 -0
  45. package/ts/classes.models.ts +67 -1
  46. package/ts/classes.server.ts +23 -80
  47. package/ts/classes.smtpsubmission.ts +466 -0
  48. package/ts/classes.storage.ts +54 -0
  49. package/ts/classes.submissions.ts +247 -12
  50. package/ts/coremail.errors.ts +111 -0
  51. package/ts/coremail.log.ts +1 -0
  52. package/ts/coremail.mime.ts +89 -0
  53. package/ts/coremail.persistence.ts +196 -48
  54. package/ts/coremail.stats.ts +342 -0
  55. package/ts/coremail.validation.ts +31 -103
  56. package/ts/interfaces.ts +20 -0
  57. 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 { normalizeCoreMailConnectionInfo, normalizeCoreMailEnvelope, normalizeCoreMailGatewayMessage, normalizeCoreMailOutboundMessage, } from './coremail.validation.js';
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
- const normalizedMessage = normalizeCoreMailOutboundMessage(value.message, {
373
- schemaVersion: 2,
374
- bindingId: String(value.bindingId),
375
- serviceId: String(value.serviceId),
376
- tenantId: String(value.tenantId),
377
- revision: Number(value.bindingRevision),
378
- state: 'active',
379
- capabilities: ['outbound'],
380
- credentials: [],
381
- allowedSenders: [String(sender.address)],
382
- inboundRecipients: [],
383
- limits: {
384
- messagesPerMinute: 1,
385
- messagesPerDay: 1,
386
- maxPendingInbound: 1,
387
- },
388
- });
389
- requireNormalized(value.message, normalizedMessage, 'CoreMailSubmission.message');
390
- if (!Array.isArray(value.parts) || value.parts.length === 0) {
391
- throw new Error('CoreMailSubmission.parts is invalid.');
392
- }
393
- value.parts.forEach((partArg, indexArg) => assertPart(partArg, `CoreMailSubmission.parts[${indexArg}]`));
394
- const parts = value.parts;
395
- if (new Set(parts.map((partArg) => partArg.partId)).size !== parts.length
396
- || canonicalJson(parts.map((partArg) => ({
397
- partId: partArg.partId,
398
- kind: partArg.kind,
399
- contentType: partArg.contentType,
400
- ...(partArg.filename === undefined ? {} : { filename: partArg.filename }),
401
- ...(partArg.contentId === undefined
402
- ? {}
403
- : { contentId: partArg.contentId }),
404
- sha256: partArg.sha256,
405
- lengthBytes: partArg.lengthBytes,
406
- }))) !== canonicalJson(normalizedMessage.parts)) {
407
- throw new Error('CoreMailSubmission parts do not match message intent.');
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
+ }>;