@serve.zone/coremail 1.2.0 → 32.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/.smartconfig.json +1 -0
  2. package/changelog.md +50 -0
  3. package/dist_ts/00_commitinfo_data.js +4 -4
  4. package/dist_ts/classes.auth.d.ts +19 -0
  5. package/dist_ts/classes.auth.js +58 -1
  6. package/dist_ts/classes.coremail.d.ts +3 -0
  7. package/dist_ts/classes.coremail.js +11 -4
  8. package/dist_ts/classes.gateway.d.ts +21 -1
  9. package/dist_ts/classes.gateway.js +115 -68
  10. package/dist_ts/classes.inbound.d.ts +10 -1
  11. package/dist_ts/classes.inbound.js +45 -7
  12. package/dist_ts/classes.maintenance.js +16 -1
  13. package/dist_ts/classes.models.d.ts +24 -2
  14. package/dist_ts/classes.models.js +72 -2
  15. package/dist_ts/classes.server.d.ts +6 -12
  16. package/dist_ts/classes.server.js +18 -78
  17. package/dist_ts/classes.smtpsubmission.d.ts +85 -0
  18. package/dist_ts/classes.smtpsubmission.js +379 -0
  19. package/dist_ts/classes.storage.d.ts +9 -0
  20. package/dist_ts/classes.storage.js +44 -1
  21. package/dist_ts/classes.submissions.d.ts +27 -1
  22. package/dist_ts/classes.submissions.js +164 -14
  23. package/dist_ts/coremail.cursor.js +1 -15
  24. package/dist_ts/coremail.errors.d.ts +18 -0
  25. package/dist_ts/coremail.errors.js +84 -0
  26. package/dist_ts/coremail.log.d.ts +1 -1
  27. package/dist_ts/coremail.log.js +3 -6
  28. package/dist_ts/coremail.mime.d.ts +15 -0
  29. package/dist_ts/coremail.mime.js +76 -1
  30. package/dist_ts/coremail.persistence.d.ts +38 -1
  31. package/dist_ts/coremail.persistence.js +123 -40
  32. package/dist_ts/coremail.stats.d.ts +72 -0
  33. package/dist_ts/coremail.stats.js +242 -0
  34. package/dist_ts/coremail.validation.d.ts +15 -2
  35. package/dist_ts/coremail.validation.js +26 -79
  36. package/dist_ts/interfaces.d.ts +18 -0
  37. package/dist_ts/plugins.d.ts +1 -0
  38. package/dist_ts/plugins.js +2 -1
  39. package/package.json +6 -5
  40. package/readme.md +66 -8
  41. package/ts/00_commitinfo_data.ts +3 -3
  42. package/ts/classes.auth.ts +77 -0
  43. package/ts/classes.coremail.ts +20 -0
  44. package/ts/classes.gateway.ts +142 -71
  45. package/ts/classes.inbound.ts +71 -6
  46. package/ts/classes.maintenance.ts +14 -0
  47. package/ts/classes.models.ts +67 -1
  48. package/ts/classes.server.ts +22 -86
  49. package/ts/classes.smtpsubmission.ts +466 -0
  50. package/ts/classes.storage.ts +54 -0
  51. package/ts/classes.submissions.ts +247 -12
  52. package/ts/coremail.cursor.ts +2 -18
  53. package/ts/coremail.errors.ts +111 -0
  54. package/ts/coremail.log.ts +3 -6
  55. package/ts/coremail.mime.ts +89 -0
  56. package/ts/coremail.persistence.ts +195 -48
  57. package/ts/coremail.stats.ts +342 -0
  58. package/ts/coremail.validation.ts +31 -104
  59. package/ts/interfaces.ts +20 -0
  60. package/ts/plugins.ts +1 -0
@@ -1,12 +1,36 @@
1
1
  import * as plugins from './plugins.js';
2
+ import { CoreMailAuthorizationError, CoreMailCapabilityDeniedError, } from './classes.auth.js';
2
3
  import {} from './classes.models.js';
3
4
  import { CoreMailStorage, createSha256 } from './classes.storage.js';
4
5
  import { CoreMailTransferService } from './classes.transfer.js';
5
- import { createCoreMailSubmissionDigest, normalizeCoreMailOutboundMessage, } from './coremail.validation.js';
6
+ import { assertCoreMailSenderAllowed, createCoreMailRawOutboundMessage, createCoreMailSubmissionDigest, normalizeCoreMailEnvelope, normalizeCoreMailOutboundMessage, } from './coremail.validation.js';
6
7
  import { createCoreMailMime } from './coremail.mime.js';
7
8
  import { createCoreMailOutboundQuotaDescriptors, ensureCoreMailQuotaCounter, incrementCoreMailQuotaCounter, withCoreMailTransaction, } from './coremail.quota.js';
9
+ import { ensureCoreMailStatCounter, createCoreMailStatDescriptor, incrementCoreMailStatCounter, } from './coremail.stats.js';
8
10
  import { requireCoreMailIdentifier, requireCoreMailUuid, } from './coremail.selectors.js';
9
11
  const maximumPartBytes = plugins.serveZoneInterfaces.data.coreMailLimits.attachmentBytes;
12
+ const maximumRawMimeBytes = plugins.serveZoneInterfaces.data.coreMailLimits.serializedMimeBytes;
13
+ /**
14
+ * The operation that authorizes creating a new outbound submission. An SMTP
15
+ * submission creates one without a typed request, so it is gated by exactly
16
+ * the rule `CoreMailAuthService.requireWorkloadSession` applies to its API
17
+ * counterpart.
18
+ */
19
+ const rawSubmissionOperation = 'coreMailPrepareOutboundSubmission';
20
+ const assertRawSubmissionAuthority = (sessionArg, bindingArg) => {
21
+ if (bindingArg.tenantId !== sessionArg.tenantId
22
+ || bindingArg.serviceId !== sessionArg.serviceId
23
+ || bindingArg.bindingId !== sessionArg.bindingId
24
+ || bindingArg.revision !== sessionArg.bindingRevision
25
+ || bindingArg.state !== sessionArg.bindingState) {
26
+ throw new CoreMailAuthorizationError();
27
+ }
28
+ const allowedOperations = plugins.serveZoneInterfaces.data.resolveCoreMailWorkloadOperations(bindingArg.state, bindingArg.capabilities);
29
+ if (!allowedOperations.includes(rawSubmissionOperation)
30
+ || !sessionArg.allowedOperations.includes(rawSubmissionOperation)) {
31
+ throw new CoreMailCapabilityDeniedError();
32
+ }
33
+ };
10
34
  const authorityFilter = (sessionArg, submissionIdArg) => ({
11
35
  tenantId: requireCoreMailIdentifier(sessionArg.tenantId, 'session.tenantId'),
12
36
  serviceId: requireCoreMailIdentifier(sessionArg.serviceId, 'session.serviceId'),
@@ -27,6 +51,11 @@ const toPublicSubmission = (submissionArg) => plugins.serveZoneInterfaces.data.n
27
51
  idempotencyKey: submissionArg.idempotencyKey,
28
52
  submissionDigest: submissionArg.submissionDigest,
29
53
  state: submissionArg.state,
54
+ // Records written before the discriminator existed are API submissions,
55
+ // and the wire type omits the field for exactly that case.
56
+ ...(submissionArg.source === undefined || submissionArg.source === 'api'
57
+ ? {}
58
+ : { source: submissionArg.source }),
30
59
  parts: submissionArg.parts.map((partArg) => ({
31
60
  partId: partArg.partId,
32
61
  state: partArg.state,
@@ -99,6 +128,7 @@ export class CoreMailSubmissionService {
99
128
  idempotencyKey: requestArg.idempotencyKey,
100
129
  submissionDigest,
101
130
  state: 'preparing',
131
+ source: 'api',
102
132
  message,
103
133
  parts,
104
134
  attempts: 0,
@@ -159,6 +189,101 @@ export class CoreMailSubmissionService {
159
189
  return { submission: toPublicSubmission(concurrent), replayed: true };
160
190
  }
161
191
  }
192
+ /**
193
+ * Accept an exact-byte SMTP submission from an authenticated MSA session.
194
+ *
195
+ * CoreMail never parses, rewrites, or re-encodes `rawMime`. The bytes become
196
+ * the submission's immutable MIME directly, so the existing outbound worker
197
+ * and gateway hand an SMTP submission off exactly as they hand off an API
198
+ * submission that `finalize()` has published.
199
+ *
200
+ * The write order mirrors `finalize()`: the record that owns the object key
201
+ * is committed first and only becomes worker-visible once the bytes are
202
+ * durably stored, so a failure between the two steps leaves a retirable
203
+ * record rather than an object no record refers to.
204
+ */
205
+ async submitRaw(sessionArg, bindingArg, inputArg) {
206
+ assertRawSubmissionAuthority(sessionArg, bindingArg);
207
+ const envelope = normalizeCoreMailEnvelope({
208
+ mailFrom: inputArg.envelope.from,
209
+ rcptTo: inputArg.envelope.to,
210
+ });
211
+ if (envelope.mailFrom === '') {
212
+ throw new Error('CoreMail raw submission requires an envelope sender.');
213
+ }
214
+ assertCoreMailSenderAllowed(envelope.mailFrom, bindingArg);
215
+ // Buffer is a Uint8Array subclass, so a listener may hand either over.
216
+ if (!(inputArg.rawMime instanceof Uint8Array)
217
+ || inputArg.rawMime.byteLength === 0) {
218
+ throw new Error('CoreMail raw submission requires nonempty RFC822 bytes.');
219
+ }
220
+ if (inputArg.rawMime.byteLength > maximumRawMimeBytes) {
221
+ throw new Error('CoreMail raw submission exceeds its byte budget.');
222
+ }
223
+ const rawMime = new Uint8Array(inputArg.rawMime);
224
+ const message = createCoreMailRawOutboundMessage(envelope);
225
+ const idempotencyKey = `smtp:${plugins.nodeCrypto.randomUUID()}`;
226
+ const submissionDigest = createCoreMailSubmissionDigest(idempotencyKey, message);
227
+ const submissionId = plugins.nodeCrypto.randomUUID();
228
+ const mimeObjectKey = `outbound-mime/${submissionId}/${submissionDigest.slice(7)}`;
229
+ const mimeSha256 = createSha256(rawMime);
230
+ const createdAt = this.now();
231
+ const submission = {
232
+ submissionId,
233
+ tenantId: sessionArg.tenantId,
234
+ serviceId: sessionArg.serviceId,
235
+ bindingId: sessionArg.bindingId,
236
+ bindingRevision: sessionArg.bindingRevision,
237
+ revision: 0,
238
+ idempotencyKey,
239
+ submissionDigest,
240
+ state: 'ready',
241
+ source: 'smtp',
242
+ message,
243
+ parts: [],
244
+ mimeObjectKey,
245
+ mimeSha256,
246
+ mimeLengthBytes: rawMime.byteLength,
247
+ attempts: 0,
248
+ createdAt,
249
+ updatedAt: createdAt,
250
+ };
251
+ const quotaNow = this.now();
252
+ const quota = createCoreMailOutboundQuotaDescriptors({
253
+ tenantId: sessionArg.tenantId,
254
+ serviceId: sessionArg.serviceId,
255
+ bindingId: sessionArg.bindingId,
256
+ bindingRevision: sessionArg.bindingRevision,
257
+ }, quotaNow);
258
+ await ensureCoreMailQuotaCounter(this.models, quota.minute);
259
+ await ensureCoreMailQuotaCounter(this.models, quota.day);
260
+ await withCoreMailTransaction(this.database, async (transactionArg) => {
261
+ await incrementCoreMailQuotaCounter(this.models, quota.day, bindingArg.limits.messagesPerDay, quotaNow, transactionArg, quota.dayRetryAfterMs);
262
+ await incrementCoreMailQuotaCounter(this.models, quota.minute, bindingArg.limits.messagesPerMinute, quotaNow, transactionArg, quota.minuteRetryAfterMs);
263
+ const inserted = await this.models.Submission.exact.insert(submission, { session: transactionArg });
264
+ if (inserted.status === 'conflict') {
265
+ throw new Error('CoreMail submission identity conflicts with persisted intent.');
266
+ }
267
+ return { submissionId };
268
+ });
269
+ const committed = await this.models.Submission.exact.findStoredOne({
270
+ ...authorityFilter(sessionArg, submissionId),
271
+ });
272
+ if (!committed || committed.submissionDigest !== submissionDigest) {
273
+ throw new Error('CoreMail committed submission is unavailable.');
274
+ }
275
+ const published = await this.storage.putBytesExact(mimeObjectKey, rawMime, 'message/rfc822', maximumRawMimeBytes, AbortSignal.timeout(plugins.serveZoneInterfaces.data.coreMailLimits.transferOverallTimeoutMs));
276
+ if (published.sha256 !== mimeSha256
277
+ || published.lengthBytes !== rawMime.byteLength) {
278
+ throw new Error('CoreMail published MIME integrity conflicts.');
279
+ }
280
+ const queuedAt = this.now();
281
+ const handoff = await this.publishSubmission(committed, 'submittedSmtp', queuedAt);
282
+ if (handoff.status !== 'transitioned') {
283
+ throw new Error('CoreMail raw submission publication fence changed.');
284
+ }
285
+ return { submissionId, submissionDigest };
286
+ }
162
287
  async preparePartUpload(sessionArg, requestArg) {
163
288
  const submission = await this.requireSubmission(sessionArg, requestArg.submissionId);
164
289
  if (submission.state !== 'preparing'
@@ -339,18 +464,7 @@ export class CoreMailSubmissionService {
339
464
  throw new Error('CoreMail published MIME integrity conflicts.');
340
465
  }
341
466
  const queuedAt = this.now();
342
- const update = await this.models.Submission.exact.transition({
343
- current: claim.document,
344
- change: (modelArg) => {
345
- modelArg.mimePublishedAt = queuedAt;
346
- modelArg.workerRetryAt = queuedAt;
347
- modelArg.updatedAt = queuedAt;
348
- modelArg.revision += 1;
349
- delete modelArg.leaseOwnerTaskId;
350
- delete modelArg.leaseToken;
351
- delete modelArg.leaseExpiresAt;
352
- },
353
- });
467
+ const update = await this.publishSubmission(claim.document, 'submittedApi', queuedAt);
354
468
  if (update.status !== 'transitioned') {
355
469
  const replay = await this.requireSubmission(sessionArg, submission.submissionId).catch(() => undefined);
356
470
  if (replay?.submissionDigest === submission.submissionDigest
@@ -367,6 +481,42 @@ export class CoreMailSubmissionService {
367
481
  submission: toPublicSubmission(update.document),
368
482
  };
369
483
  }
484
+ /**
485
+ * Publish an owned immutable MIME and hand the submission to the worker.
486
+ *
487
+ * The submitted counter is incremented in the same transaction as the
488
+ * transition that publishes, and only when `statsSubmittedCountedAt` is
489
+ * still absent. An interrupted publication that finalization later repeats
490
+ * therefore republishes without counting a second submission.
491
+ */
492
+ async publishSubmission(currentArg, kindArg, queuedAtArg) {
493
+ const alreadyCounted = currentArg.statsSubmittedCountedAt !== undefined;
494
+ const descriptor = createCoreMailStatDescriptor(currentArg, queuedAtArg);
495
+ if (!alreadyCounted) {
496
+ await ensureCoreMailStatCounter(this.models, descriptor);
497
+ }
498
+ return await withCoreMailTransaction(this.database, async (transactionArg) => {
499
+ const transitioned = await this.models.Submission.exact.transition({
500
+ current: currentArg,
501
+ change: (modelArg) => {
502
+ modelArg.mimePublishedAt = queuedAtArg;
503
+ modelArg.workerRetryAt = queuedAtArg;
504
+ modelArg.updatedAt = queuedAtArg;
505
+ modelArg.revision += 1;
506
+ if (!alreadyCounted) {
507
+ modelArg.statsSubmittedCountedAt = queuedAtArg;
508
+ }
509
+ delete modelArg.leaseOwnerTaskId;
510
+ delete modelArg.leaseToken;
511
+ delete modelArg.leaseExpiresAt;
512
+ },
513
+ }, { session: transactionArg });
514
+ if (transitioned.status === 'transitioned' && !alreadyCounted) {
515
+ await incrementCoreMailStatCounter(this.models, descriptor, kindArg, queuedAtArg, transactionArg);
516
+ }
517
+ return transitioned;
518
+ });
519
+ }
370
520
  async get(sessionArg, requestArg) {
371
521
  return {
372
522
  submission: toPublicSubmission(await this.requireSubmission(sessionArg, requestArg.submissionId)),
@@ -382,4 +532,4 @@ export class CoreMailSubmissionService {
382
532
  return submission;
383
533
  }
384
534
  }
385
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5zdWJtaXNzaW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL2NsYXNzZXMuc3VibWlzc2lvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFDeEMsT0FBTyxFQUF3QixNQUFNLHFCQUFxQixDQUFDO0FBQzNELE9BQU8sRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDckUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDaEUsT0FBTyxFQUNMLDhCQUE4QixFQUM5QixnQ0FBZ0MsR0FDakMsTUFBTSwwQkFBMEIsQ0FBQztBQUNsQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN4RCxPQUFPLEVBQ0wsc0NBQXNDLEVBQ3RDLDBCQUEwQixFQUMxQiw2QkFBNkIsRUFDN0IsdUJBQXVCLEdBQ3hCLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUNMLHlCQUF5QixFQUN6QixtQkFBbUIsR0FDcEIsTUFBTSx5QkFBeUIsQ0FBQztBQWFqQyxNQUFNLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQztBQUV6RixNQUFNLGVBQWUsR0FBRyxDQUN0QixVQUFvQyxFQUNwQyxlQUFtQyxFQUNuQyxFQUFFLENBQUMsQ0FBQztJQUNKLFFBQVEsRUFBRSx5QkFBeUIsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLGtCQUFrQixDQUFDO0lBQzVFLFNBQVMsRUFBRSx5QkFBeUIsQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLG1CQUFtQixDQUFDO0lBQy9FLFNBQVMsRUFBRSx5QkFBeUIsQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLG1CQUFtQixDQUFDO0lBQy9FLGVBQWUsRUFBRSxVQUFVLENBQUMsZUFBZTtJQUMzQyxHQUFHLENBQUMsZUFBZSxLQUFLLFNBQVM7UUFDL0IsQ0FBQyxDQUFDLEVBQUU7UUFDSixDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsbUJBQW1CLENBQUMsZUFBZSxFQUFFLGNBQWMsQ0FBQyxFQUFFLENBQUM7Q0FDNUUsQ0FBQyxDQUFDO0FBRUgsTUFBTSxpQkFBaUIsR0FBRyxDQUN4QixVQUFvQyxFQUNoQixFQUFFLENBQUMsQ0FBQztJQUN4QixJQUFJLEVBQUUsVUFBVTtJQUNoQixRQUFRLEVBQUUsVUFBVSxDQUFDLFFBQVE7SUFDN0IsU0FBUyxFQUFFLFVBQVUsQ0FBQyxTQUFTO0lBQy9CLFNBQVMsRUFBRSxVQUFVLENBQUMsU0FBUztDQUNoQyxDQUFDLENBQUM7QUFFSCxNQUFNLGtCQUFrQixHQUFHLENBQ3pCLGFBQXdDLEVBQzNCLEVBQUUsQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLDJCQUEyQixDQUFDO0lBQzNFLFlBQVksRUFBRSxhQUFhLENBQUMsWUFBWTtJQUN4QyxjQUFjLEVBQUUsYUFBYSxDQUFDLGNBQWM7SUFDNUMsZ0JBQWdCLEVBQUUsYUFBYSxDQUFDLGdCQUFnQjtJQUNoRCxLQUFLLEVBQUUsYUFBYSxDQUFDLEtBQUs7SUFDMUIsS0FBSyxFQUFFLGFBQWEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzNDLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTTtRQUN0QixLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUs7UUFDcEIsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO1FBQ3RCLFdBQVcsRUFBRSxPQUFPLENBQUMsV0FBVztLQUNqQyxDQUFDLENBQUM7SUFDSCxHQUFHLENBQUMsYUFBYSxDQUFDLGtCQUFrQjtRQUNsQyxDQUFDLENBQUMsRUFBRSxrQkFBa0IsRUFBRSxhQUFhLENBQUMsa0JBQWtCLEVBQUU7UUFDMUQsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNQLFFBQVEsRUFBRSxhQUFhLENBQUMsUUFBUTtJQUNoQyxHQUFHLENBQUMsYUFBYSxDQUFDLGFBQWEsS0FBSyxTQUFTO1dBQ3hDLGFBQWEsQ0FBQyxLQUFLLEtBQUssVUFBVTtRQUNyQyxDQUFDLENBQUMsRUFBRTtRQUNKLENBQUMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxhQUFhLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDbkQsR0FBRyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUM1RSxHQUFHLENBQUMsYUFBYSxDQUFDLFVBQVUsS0FBSyxTQUFTO1FBQ3hDLENBQUMsQ0FBQyxFQUFFO1FBQ0osQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLGFBQWEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUM3QyxHQUFHLENBQUMsYUFBYSxDQUFDLFdBQVcsS0FBSyxTQUFTO1FBQ3pDLENBQUMsQ0FBQyxFQUFFO1FBQ0osQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLGFBQWEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUMvQyxHQUFHLENBQUMsYUFBYSxDQUFDLFVBQVUsS0FBSyxTQUFTO1FBQ3hDLENBQUMsQ0FBQyxFQUFFO1FBQ0osQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLGFBQWEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUM3QyxTQUFTLEVBQUUsYUFBYSxDQUFDLFNBQVM7SUFDbEMsU0FBUyxFQUFFLGFBQWEsQ0FBQyxTQUFTO0NBQ25DLENBQUMsQ0FBQztBQUVMLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxRQUFpQixFQUFXLEVBQUUsQ0FDdEQsUUFBUSxZQUFZLE9BQU8sQ0FBQyxTQUFTLENBQUMsOEJBQThCO09BQ2pFLFFBQVEsQ0FBQyxJQUFJLEtBQUssaUJBQWlCLENBQUM7QUFFekMsTUFBTSxPQUFPLHlCQUF5QjtJQUVqQjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBTG5CLFlBQ21CLFFBQXVDLEVBQ3ZDLE1BQXVCLEVBQ3ZCLE9BQXdCLEVBQ3hCLFNBQWtDLEVBQ2xDLE1BQW9CLElBQUksQ0FBQyxHQUFHO1FBSjVCLGFBQVEsR0FBUixRQUFRLENBQStCO1FBQ3ZDLFdBQU0sR0FBTixNQUFNLENBQWlCO1FBQ3ZCLFlBQU8sR0FBUCxPQUFPLENBQWlCO1FBQ3hCLGNBQVMsR0FBVCxTQUFTLENBQXlCO1FBQ2xDLFFBQUcsR0FBSCxHQUFHLENBQXlCO0lBQzVDLENBQUM7SUFFRyxLQUFLLENBQUMsT0FBTyxDQUNsQixVQUFvQyxFQUNwQyxVQUFvQixFQUNwQixVQUNpRztRQUVqRyxNQUFNLE9BQU8sR0FBRyxnQ0FBZ0MsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ2pGLE1BQU0sZ0JBQWdCLEdBQUcsOEJBQThCLENBQ3JELFVBQVUsQ0FBQyxjQUFjLEVBQ3pCLE9BQU8sQ0FDUixDQUFDO1FBQ0YsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDO1lBQzlELEdBQUcsZUFBZSxDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUM7WUFDekMsY0FBYyxFQUFFLFVBQVUsQ0FBQyxjQUFjO1NBQzFDLENBQUMsQ0FBQztRQUNILElBQUksTUFBTSxFQUFFLENBQUM7WUFDWCxJQUFJLE1BQU0sQ0FBQyxnQkFBZ0IsS0FBSyxnQkFBZ0IsRUFBRSxDQUFDO2dCQUNqRCxNQUFNLElBQUksS0FBSyxDQUFDLDJEQUEyRCxDQUFDLENBQUM7WUFDL0UsQ0FBQztZQUNELE9BQU8sRUFBRSxVQUFVLEVBQUUsa0JBQWtCLENBQUMsTUFBTSxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDO1FBQ3BFLENBQUM7UUFFRCxNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3JELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUM3QixNQUFNLEtBQUssR0FBNEIsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDckUsR0FBRyxPQUFPO1lBQ1YsU0FBUyxFQUFFLGtCQUFrQixZQUFZLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsRUFBRTtZQUM5RSxLQUFLLEVBQUUsU0FBUztTQUNqQixDQUFDLENBQUMsQ0FBQztRQUNKLE1BQU0sVUFBVSxHQUE4QjtZQUM1QyxZQUFZO1lBQ1osUUFBUSxFQUFFLFVBQVUsQ0FBQyxRQUFRO1lBQzdCLFNBQVMsRUFBRSxVQUFVLENBQUMsU0FBUztZQUMvQixTQUFTLEVBQUUsVUFBVSxDQUFDLFNBQVM7WUFDL0IsZUFBZSxFQUFFLFVBQVUsQ0FBQyxlQUFlO1lBQzNDLFFBQVEsRUFBRSxDQUFDO1lBQ1gsY0FBYyxFQUFFLFVBQVUsQ0FBQyxjQUFjO1lBQ3pDLGdCQUFnQjtZQUNoQixLQUFLLEVBQUUsV0FBVztZQUNsQixPQUFPO1lBQ1AsS0FBSztZQUNMLFFBQVEsRUFBRSxDQUFDO1lBQ1gsU0FBUztZQUNULFNBQVMsRUFBRSxTQUFTO1NBQ3JCLENBQUM7UUFDRixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDNUIsTUFBTSxLQUFLLEdBQUcsc0NBQXNDLENBQUM7WUFDbkQsUUFBUSxFQUFFLFVBQVUsQ0FBQyxRQUFRO1lBQzdCLFNBQVMsRUFBRSxVQUFVLENBQUMsU0FBUztZQUMvQixTQUFTLEVBQUUsVUFBVSxDQUFDLFNBQVM7WUFDL0IsZUFBZSxFQUFFLFVBQVUsQ0FBQyxlQUFlO1NBQzVDLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDYixNQUFNLDBCQUEwQixDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzVELE1BQU0sMEJBQTBCLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDO1lBQ0gsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLHVCQUF1QixDQUNyRCxJQUFJLENBQUMsUUFBUSxFQUNiLEtBQUssRUFBRSxjQUFjLEVBQUUsRUFBRTtnQkFDdkIsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQ3hFO29CQUNFLEdBQUcsZUFBZSxDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUM7b0JBQ3pDLGNBQWMsRUFBRSxVQUFVLENBQUMsY0FBYztpQkFDMUMsRUFDRCxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsQ0FDNUIsQ0FBQztnQkFDRixJQUFJLGlCQUFpQixFQUFFLENBQUM7b0JBQ3RCLElBQUksaUJBQWlCLENBQUMsZ0JBQWdCLEtBQUssZ0JBQWdCLEVBQUUsQ0FBQzt3QkFDNUQsTUFBTSxJQUFJLEtBQUssQ0FBQywyREFBMkQsQ0FBQyxDQUFDO29CQUMvRSxDQUFDO29CQUNELE9BQU8sRUFBRSxZQUFZLEVBQUUsaUJBQWlCLENBQUMsWUFBWSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQztnQkFDMUUsQ0FBQztnQkFDRCxNQUFNLDZCQUE2QixDQUNqQyxJQUFJLENBQUMsTUFBTSxFQUNYLEtBQUssQ0FBQyxHQUFHLEVBQ1QsVUFBVSxDQUFDLE1BQU0sQ0FBQyxjQUFjLEVBQ2hDLFFBQVEsRUFDUixjQUFjLEVBQ2QsS0FBSyxDQUFDLGVBQWUsQ0FDdEIsQ0FBQztnQkFDRixNQUFNLDZCQUE2QixDQUNqQyxJQUFJLENBQUMsTUFBTSxFQUNYLEtBQUssQ0FBQyxNQUFNLEVBQ1osVUFBVSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsRUFDbkMsUUFBUSxFQUNSLGNBQWMsRUFDZCxLQUFLLENBQUMsa0JBQWtCLENBQ3pCLENBQUM7Z0JBQ0YsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUN4RCxVQUFVLEVBQ1YsRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLENBQzVCLENBQUM7Z0JBQ0YsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLFVBQVUsRUFBRSxDQUFDO29CQUNuQyxNQUFNLElBQUksS0FBSyxDQUFDLCtEQUErRCxDQUFDLENBQUM7Z0JBQ25GLENBQUM7Z0JBQ0QsT0FBTyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLE1BQU0sS0FBSyxtQkFBbUIsRUFBRSxDQUFDO1lBQzdFLENBQUMsQ0FDRixDQUFDO1lBQ0YsTUFBTSxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDO2dCQUNqRSxHQUFHLGVBQWUsQ0FBQyxVQUFVLEVBQUUsaUJBQWlCLENBQUMsWUFBWSxDQUFDO2FBQy9ELENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxTQUFTLElBQUksU0FBUyxDQUFDLGdCQUFnQixLQUFLLGdCQUFnQixFQUFFLENBQUM7Z0JBQ2xFLE1BQU0sSUFBSSxLQUFLLENBQUMsK0NBQStDLENBQUMsQ0FBQztZQUNuRSxDQUFDO1lBQ0QsT0FBTztnQkFDTCxVQUFVLEVBQUUsa0JBQWtCLENBQUMsU0FBUyxDQUFDO2dCQUN6QyxRQUFRLEVBQUUsaUJBQWlCLENBQUMsUUFBUTthQUNyQyxDQUFDO1FBQ0osQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDN0IsTUFBTSxLQUFLLENBQUM7WUFDZCxDQUFDO1lBQ0QsTUFBTSxVQUFVLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDO2dCQUNsRSxHQUFHLGVBQWUsQ0FBQyxVQUFVLEVBQUUsU0FBUyxDQUFDO2dCQUN6QyxjQUFjLEVBQUUsVUFBVSxDQUFDLGNBQWM7YUFDMUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLFVBQVUsSUFBSSxVQUFVLENBQUMsZ0JBQWdCLEtBQUssZ0JBQWdCLEVBQUUsQ0FBQztnQkFDcEUsTUFBTSxJQUFJLEtBQUssQ0FBQywyREFBMkQsQ0FBQyxDQUFDO1lBQy9FLENBQUM7WUFDRCxPQUFPLEVBQUUsVUFBVSxFQUFFLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUN4RSxDQUFDO0lBQ0gsQ0FBQztJQUVNLEtBQUssQ0FBQyxpQkFBaUIsQ0FDNUIsVUFBb0MsRUFDcEMsVUFDaUc7UUFFakcsTUFBTSxVQUFVLEdBQUcsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQzdDLFVBQVUsRUFDVixVQUFVLENBQUMsWUFBWSxDQUN4QixDQUFDO1FBQ0YsSUFDRSxVQUFVLENBQUMsS0FBSyxLQUFLLFdBQVc7ZUFDN0IsVUFBVSxDQUFDLEtBQUssS0FBSyxXQUFXO2VBQ2hDLFVBQVUsQ0FBQyxLQUFLLEtBQUssT0FBTyxFQUMvQixDQUFDO1lBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyxxREFBcUQsQ0FBQyxDQUFDO1FBQ3pFLENBQUM7UUFDRCxNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FDMUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEtBQUsseUJBQXlCLENBQ3ZELFVBQVUsQ0FBQyxNQUFNLEVBQ2pCLFFBQVEsQ0FDVCxDQUNGLENBQUM7UUFDRixJQUFJLFNBQVMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNsQixNQUFNLElBQUksS0FBSyxDQUFDLDBDQUEwQyxDQUFDLENBQUM7UUFDOUQsQ0FBQztRQUNELE1BQU0sSUFBSSxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDekMsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQzlCLE1BQU0sSUFBSSxLQUFLLENBQUMsK0NBQStDLENBQUMsQ0FBQztRQUNuRSxDQUFDO1FBQ0QsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQztZQUM1QyxTQUFTLEVBQUUsaUJBQWlCLENBQUMsVUFBVSxDQUFDO1lBQ3hDLE9BQU8sRUFBRSxzQkFBc0I7WUFDL0IsTUFBTSxFQUFFLEtBQUs7WUFDYixjQUFjLEVBQUUsSUFBSSxDQUFDLE1BQU07WUFDM0IsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO1lBQzdCLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztZQUM3QixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7U0FDMUIsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FDdkQsUUFBUSxLQUFLLFNBQVM7WUFDcEIsQ0FBQyxDQUFDLEVBQUUsR0FBRyxPQUFPLEVBQUUsS0FBSyxFQUFFLFdBQW9CLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUU7WUFDckUsQ0FBQyxDQUFDLE9BQU8sQ0FDWixDQUFDO1FBQ0YsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzdCLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQztZQUMzRCxPQUFPLEVBQUUsVUFBVTtZQUNuQixNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRTtnQkFDbkIsUUFBUSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7Z0JBQ3ZCLFFBQVEsQ0FBQyxLQUFLLEdBQUcsV0FBVyxDQUFDO2dCQUM3QixRQUFRLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztnQkFDL0IsUUFBUSxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUM7WUFDekIsQ0FBQztTQUNGLENBQUMsQ0FBQztRQUNILElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxjQUFjLEVBQUUsQ0FBQztZQUNyQyxNQUFNLElBQUksS0FBSyxDQUFDLGdEQUFnRCxDQUFDLENBQUM7UUFDcEUsQ0FBQztRQUNELE9BQU87WUFDTCxLQUFLLEVBQUUsS0FBOEQ7U0FDdEUsQ0FBQztJQUNKLENBQUM7SUFFTSxLQUFLLENBQUMsa0JBQWtCLENBQzdCLFVBQW9DLEVBQ3BDLFVBQ2tHO1FBRWxHLE1BQU0sVUFBVSxHQUFHLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUM3QyxVQUFVLEVBQ1YsVUFBVSxDQUFDLFlBQVksQ0FDeEIsQ0FBQztRQUNGLE1BQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUMxQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sS0FBSyx5QkFBeUIsQ0FDdkQsVUFBVSxDQUFDLE1BQU0sRUFDakIsUUFBUSxDQUNULENBQ0YsQ0FBQztRQUNGLElBQUksU0FBUyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2xCLE1BQU0sSUFBSSxLQUFLLENBQUMsMENBQTBDLENBQUMsQ0FBQztRQUM5RCxDQUFDO1FBQ0QsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN6QyxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUNyRSxVQUFVLENBQUMsTUFBTSxDQUNsQixDQUFDO1FBQ0YsSUFDRSxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUssV0FBVyxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssVUFBVSxDQUFDO2VBQ3RELElBQUksQ0FBQyxNQUFNLEtBQUssTUFBTTtlQUN0QixJQUFJLENBQUMsV0FBVyxLQUFLLFVBQVUsQ0FBQyxXQUFXLEVBQzlDLENBQUM7WUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLGlEQUFpRCxDQUFDLENBQUM7UUFDckUsQ0FBQztRQUNELE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUM7WUFDbEMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxPQUFPO1lBQzNCLFNBQVMsRUFBRSxpQkFBaUIsQ0FBQyxVQUFVLENBQUM7WUFDeEMsT0FBTyxFQUFFLHNCQUFzQjtZQUMvQixjQUFjLEVBQUUsSUFBSSxDQUFDLE1BQU07WUFDM0IsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO1lBQzdCLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztTQUMxQixDQUFDLENBQUM7UUFDSCxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDOUIsT0FBTyxFQUFFLFVBQVUsRUFBRSxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1FBQ3hELENBQUM7UUFDRCxNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUN2RCxRQUFRLEtBQUssU0FBUztZQUNwQixDQUFDLENBQUM7Z0JBQ0UsR0FBRyxPQUFPO2dCQUNWLEtBQUssRUFBRSxVQUFtQjtnQkFDMUIsT0FBTyxFQUFFLFVBQVUsQ0FBQyxPQUFPO2FBQzVCO1lBQ0gsQ0FBQyxDQUFDLE9BQU8sQ0FDWixDQUFDO1FBQ0YsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssS0FBSyxVQUFVLENBQUMsQ0FBQztRQUMzRSxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDN0IsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDO1lBQzNELE9BQU8sRUFBRSxVQUFVO1lBQ25CLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRSxFQUFFO2dCQUNuQixRQUFRLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztnQkFDdkIsUUFBUSxDQUFDLEtBQUssR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDO2dCQUNyRCxRQUFRLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztnQkFDL0IsUUFBUSxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUM7WUFDekIsQ0FBQztTQUNGLENBQUMsQ0FBQztRQUNILElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxjQUFjLEVBQUUsQ0FBQztZQUNyQyxNQUFNLElBQUksS0FBSyxDQUFDLG9EQUFvRCxDQUFDLENBQUM7UUFDeEUsQ0FBQztRQUNELE9BQU87WUFDTCxVQUFVLEVBQUUsa0JBQWtCLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztTQUNoRCxDQUFDO0lBQ0osQ0FBQztJQUVNLEtBQUssQ0FBQyxRQUFRLENBQ25CLFVBQW9DLEVBQ3BDLFVBQ2tHO1FBRWxHLE1BQU0sVUFBVSxHQUFHLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUM3QyxVQUFVLEVBQ1YsVUFBVSxDQUFDLFlBQVksQ0FDeEIsQ0FBQztRQUNGLElBQ0UsVUFBVSxDQUFDLEtBQUssS0FBSyxVQUFVO2VBQzVCLFVBQVUsQ0FBQyxLQUFLLEtBQUssUUFBUTtlQUM3QixVQUFVLENBQUMsS0FBSyxLQUFLLFlBQVk7ZUFDakMsVUFBVSxDQUFDLEtBQUssS0FBSyxXQUFXO2VBQ2hDLFVBQVUsQ0FBQyxLQUFLLEtBQUssVUFBVTtlQUMvQixVQUFVLENBQUMsS0FBSyxLQUFLLFFBQVE7ZUFDN0IsVUFBVSxDQUFDLEtBQUssS0FBSyxjQUFjLEVBQ3RDLENBQUM7WUFDRCxPQUFPLEVBQUUsVUFBVSxFQUFFLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7UUFDeEQsQ0FBQztRQUNELElBQ0UsVUFBVSxDQUFDLEtBQUssS0FBSyxPQUFPO2VBQ3pCLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEtBQUssVUFBVSxDQUFDLEVBQ3JFLENBQUM7WUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLG9EQUFvRCxDQUFDLENBQUM7UUFDeEUsQ0FBQztRQUNELElBQ0UsVUFBVSxDQUFDLGFBQWE7ZUFDckIsVUFBVSxDQUFDLFVBQVU7ZUFDckIsVUFBVSxDQUFDLGVBQWUsS0FBSyxTQUFTO2VBQ3hDLFVBQVUsQ0FBQyxlQUFlLEtBQUssU0FBUztlQUN4QyxDQUNELFVBQVUsQ0FBQyxhQUFhLEtBQUssU0FBUzttQkFDbkMsQ0FDRCxVQUFVLENBQUMsZ0JBQWdCLEtBQUssU0FBUzt1QkFDdEMsVUFBVSxDQUFDLGdCQUFnQixLQUFLLHNCQUFzQjt1QkFDdEQsVUFBVSxDQUFDLGNBQWMsS0FBSyxTQUFTO3VCQUN2QyxVQUFVLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FDMUMsQ0FDRixFQUNELENBQUM7WUFDRCxPQUFPLEVBQUUsVUFBVSxFQUFFLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7UUFDeEQsQ0FBQztRQUNELE1BQU0sT0FBTyxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FDL0IsVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN2QyxVQUFVLEVBQUUsT0FBTztZQUNuQixLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUN4QyxPQUFPLENBQUMsU0FBUyxFQUNqQixPQUFPLENBQUMsV0FBVyxFQUNuQixPQUFPLENBQUMsTUFBTSxFQUNkLGdCQUFnQixDQUNqQjtTQUNGLENBQUMsQ0FBQyxDQUNKLENBQUM7UUFDRixNQUFNLFNBQVMsR0FBRyxrQkFBa0IsQ0FDbEMsVUFBVSxDQUFDLFlBQVksRUFDdkIsVUFBVSxDQUFDLGdCQUFnQixFQUMzQixVQUFVLENBQUMsU0FBUyxFQUNwQixVQUFVLENBQUMsT0FBTyxFQUNsQixPQUFPLENBQ1IsQ0FBQztRQUNGLE1BQU0sYUFBYSxHQUNqQixpQkFBaUIsVUFBVSxDQUFDLFlBQVksSUFBSSxVQUFVLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDckYsTUFBTSxVQUFVLEdBQUcsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzNDLE1BQU0sZUFBZSxHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUM7UUFDN0MsSUFBSSxlQUFlLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUMxRixNQUFNLElBQUksS0FBSyxDQUFDLG1EQUFtRCxDQUFDLENBQUM7UUFDdkUsQ0FBQztRQUNELElBQ0UsVUFBVSxDQUFDLGFBQWEsS0FBSyxTQUFTO2VBQ25DLENBQ0QsVUFBVSxDQUFDLGFBQWEsS0FBSyxhQUFhO21CQUN2QyxVQUFVLENBQUMsVUFBVSxLQUFLLFVBQVU7bUJBQ3BDLFVBQVUsQ0FBQyxlQUFlLEtBQUssZUFBZSxDQUNsRCxFQUNELENBQUM7WUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLCtDQUErQyxDQUFDLENBQUM7UUFDbkUsQ0FBQztRQUNELElBQ0UsVUFBVSxDQUFDLGFBQWEsS0FBSyxhQUFhO2VBQ3ZDLFVBQVUsQ0FBQyxjQUFjLEtBQUssU0FBUztlQUN2QyxVQUFVLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFDekMsQ0FBQztZQUNELElBQUksVUFBVSxDQUFDLGdCQUFnQixLQUFLLHNCQUFzQixFQUFFLENBQUM7Z0JBQzNELE9BQU8sRUFBRSxVQUFVLEVBQUUsa0JBQWtCLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUN4RCxDQUFDO1lBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQywwREFBMEQsQ0FBQyxDQUFDO1FBQzlFLENBQUM7UUFDRCxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ25ELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUMzQixNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUM7WUFDMUQsT0FBTyxFQUFFLFVBQVU7WUFDbkIsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLEVBQUU7Z0JBQ25CLFFBQVEsQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO2dCQUN2QyxRQUFRLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztnQkFDakMsUUFBUSxDQUFDLGVBQWUsR0FBRyxlQUFlLENBQUM7Z0JBQzNDLFFBQVEsQ0FBQyxnQkFBZ0IsR0FBRyxzQkFBc0IsQ0FBQztnQkFDbkQsUUFBUSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7Z0JBQ2pDLFFBQVEsQ0FBQyxjQUFjLEdBQUcsT0FBTztzQkFDN0IsT0FBTyxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsd0JBQXdCO3NCQUN4RSxDQUFDLEdBQUcsTUFBTSxDQUFDO2dCQUNmLFFBQVEsQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDO2dCQUM3QixRQUFRLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQztnQkFDdkIsT0FBTyxRQUFRLENBQUMsZUFBZSxDQUFDO2dCQUNoQyxPQUFPLFFBQVEsQ0FBQyxhQUFhLENBQUM7WUFDaEMsQ0FBQztTQUNGLENBQUMsQ0FBQztRQUNILElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxjQUFjLEVBQUUsQ0FBQztZQUNwQyxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FDekMsVUFBVSxFQUNWLFVBQVUsQ0FBQyxZQUFZLENBQ3hCLENBQUM7WUFDRixJQUNFLE1BQU0sQ0FBQyxnQkFBZ0IsS0FBSyxVQUFVLENBQUMsZ0JBQWdCO21CQUNwRCxNQUFNLENBQUMsYUFBYSxLQUFLLGFBQWE7bUJBQ3RDLE1BQU0sQ0FBQyxVQUFVLEtBQUssVUFBVTttQkFDaEMsTUFBTSxDQUFDLGVBQWUsS0FBSyxlQUFlO21CQUMxQyxDQUNELE1BQU0sQ0FBQyxhQUFhLEtBQUssU0FBUzt1QkFDL0IsTUFBTSxDQUFDLGdCQUFnQixLQUFLLHNCQUFzQixDQUN0RCxFQUNELENBQUM7Z0JBQ0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ3BELENBQUM7WUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLGlEQUFpRCxDQUFDLENBQUM7UUFDckUsQ0FBQztRQUNELE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQzNDLGFBQWEsRUFDYixTQUFTLEVBQ1QsZ0JBQWdCLEVBQ2hCLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLG1CQUFtQixFQUNuRSxXQUFXLENBQUMsT0FBTyxDQUNqQixPQUFPLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyx3QkFBd0IsQ0FDekUsQ0FDRixDQUFDO1FBQ0YsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLFVBQVUsSUFBSSxJQUFJLENBQUMsV0FBVyxLQUFLLGVBQWUsRUFBRSxDQUFDO1lBQ3ZFLE1BQU0sSUFBSSxLQUFLLENBQUMsOENBQThDLENBQUMsQ0FBQztRQUNsRSxDQUFDO1FBQ0QsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzVCLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQztZQUMzRCxPQUFPLEVBQUUsS0FBSyxDQUFDLFFBQVE7WUFDdkIsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLEVBQUU7Z0JBQ25CLFFBQVEsQ0FBQyxlQUFlLEdBQUcsUUFBUSxDQUFDO2dCQUNwQyxRQUFRLENBQUMsYUFBYSxHQUFHLFFBQVEsQ0FBQztnQkFDbEMsUUFBUSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUM7Z0JBQzlCLFFBQVEsQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDO2dCQUN2QixPQUFPLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQztnQkFDakMsT0FBTyxRQUFRLENBQUMsVUFBVSxDQUFDO2dCQUMzQixPQUFPLFFBQVEsQ0FBQyxjQUFjLENBQUM7WUFDakMsQ0FBQztTQUNGLENBQUMsQ0FBQztRQUNILElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxjQUFjLEVBQUUsQ0FBQztZQUNyQyxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FDekMsVUFBVSxFQUNWLFVBQVUsQ0FBQyxZQUFZLENBQ3hCLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3pCLElBQ0UsTUFBTSxFQUFFLGdCQUFnQixLQUFLLFVBQVUsQ0FBQyxnQkFBZ0I7bUJBQ3JELE1BQU0sQ0FBQyxhQUFhLEtBQUssYUFBYTttQkFDdEMsTUFBTSxDQUFDLFVBQVUsS0FBSyxJQUFJLENBQUMsTUFBTTttQkFDakMsTUFBTSxDQUFDLGVBQWUsS0FBSyxJQUFJLENBQUMsV0FBVzttQkFDM0MsQ0FDRCxNQUFNLENBQUMsYUFBYSxLQUFLLFNBQVM7dUJBQy9CLE1BQU0sQ0FBQyxnQkFBZ0IsS0FBSyxzQkFBc0IsQ0FDdEQsRUFDRCxDQUFDO2dCQUNELE9BQU8sRUFBRSxVQUFVLEVBQUUsa0JBQWtCLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNwRCxDQUFDO1lBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyxpREFBaUQsQ0FBQyxDQUFDO1FBQ3JFLENBQUM7UUFDRCxPQUFPO1lBQ0wsVUFBVSxFQUFFLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUM7U0FDaEQsQ0FBQztJQUNKLENBQUM7SUFFTSxLQUFLLENBQUMsR0FBRyxDQUNkLFVBQW9DLEVBQ3BDLFVBQzZGO1FBRTdGLE9BQU87WUFDTCxVQUFVLEVBQUUsa0JBQWtCLENBQzVCLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsWUFBWSxDQUFDLENBQ2xFO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFFTyxLQUFLLENBQUMsaUJBQWlCLENBQzdCLFVBQW9DLEVBQ3BDLGVBQXVCO1FBRXZCLE1BQU0sVUFBVSxHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQztZQUNsRSxHQUFHLGVBQWUsQ0FBQyxVQUFVLEVBQUUsZUFBZSxDQUFDO1NBQ2hELENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNoQixNQUFNLElBQUksS0FBSyxDQUFDLHFDQUFxQyxDQUFDLENBQUM7UUFDekQsQ0FBQztRQUNELE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7Q0FDRiJ9
535
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5zdWJtaXNzaW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL2NsYXNzZXMuc3VibWlzc2lvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFDeEMsT0FBTyxFQUNMLDBCQUEwQixFQUMxQiw2QkFBNkIsR0FDOUIsTUFBTSxtQkFBbUIsQ0FBQztBQUMzQixPQUFPLEVBQXdCLE1BQU0scUJBQXFCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNoRSxPQUFPLEVBQ0wsMkJBQTJCLEVBQzNCLGdDQUFnQyxFQUNoQyw4QkFBOEIsRUFDOUIseUJBQXlCLEVBQ3pCLGdDQUFnQyxHQUNqQyxNQUFNLDBCQUEwQixDQUFDO0FBQ2xDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3hELE9BQU8sRUFDTCxzQ0FBc0MsRUFDdEMsMEJBQTBCLEVBQzFCLDZCQUE2QixFQUM3Qix1QkFBdUIsR0FDeEIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQ0wseUJBQXlCLEVBQ3pCLDRCQUE0QixFQUM1Qiw0QkFBNEIsR0FDN0IsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQ0wseUJBQXlCLEVBQ3pCLG1CQUFtQixHQUNwQixNQUFNLHlCQUF5QixDQUFDO0FBY2pDLE1BQU0sZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDO0FBQ3pGLE1BQU0sbUJBQW1CLEdBQ3ZCLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLG1CQUFtQixDQUFDO0FBRXRFOzs7OztHQUtHO0FBQ0gsTUFBTSxzQkFBc0IsR0FB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
@@ -3,7 +3,6 @@ import { requireCoreMailIdentifier, requireCoreMailSafeInteger, requireCoreMailU
3
3
  const maximumCursorAgeMs = 24 * 60 * 60 * 1_000;
4
4
  const maximumFutureSkewMs = 1_000;
5
5
  const payloadKeys = new Set([
6
- 'version',
7
6
  'tenantId',
8
7
  'serviceId',
9
8
  'bindingId',
@@ -13,14 +12,12 @@ const payloadKeys = new Set([
13
12
  'deliveryId',
14
13
  ]);
15
14
  const envelopeKeys = new Set([
16
- 'version',
17
15
  'keyId',
18
16
  'keyVersion',
19
17
  'payload',
20
18
  'signature',
21
19
  ]);
22
20
  const canonicalPayload = (payloadArg) => JSON.stringify({
23
- version: payloadArg.version,
24
21
  tenantId: payloadArg.tenantId,
25
22
  serviceId: payloadArg.serviceId,
26
23
  bindingId: payloadArg.bindingId,
@@ -30,7 +27,6 @@ const canonicalPayload = (payloadArg) => JSON.stringify({
30
27
  deliveryId: payloadArg.deliveryId,
31
28
  });
32
29
  const canonicalEnvelope = (envelopeArg) => JSON.stringify({
33
- version: envelopeArg.version,
34
30
  keyId: envelopeArg.keyId,
35
31
  keyVersion: envelopeArg.keyVersion,
36
32
  payload: envelopeArg.payload,
@@ -67,11 +63,7 @@ const parseCanonicalRecord = (encodedArg, keysArg) => {
67
63
  };
68
64
  const parsePayload = (encodedArg) => {
69
65
  const value = parseCanonicalRecord(encodedArg, payloadKeys);
70
- if (value.version !== 1) {
71
- throw new Error('CoreMail inbound cursor version is unsupported.');
72
- }
73
66
  const payload = {
74
- version: 1,
75
67
  tenantId: requireCoreMailIdentifier(value.tenantId, 'cursor.tenantId'),
76
68
  serviceId: requireCoreMailIdentifier(value.serviceId, 'cursor.serviceId'),
77
69
  bindingId: requireCoreMailIdentifier(value.bindingId, 'cursor.bindingId'),
@@ -111,7 +103,6 @@ export class CoreMailInboundCursorCodec {
111
103
  }
112
104
  const authority = requireAuthority(authorityArg);
113
105
  const payload = {
114
- version: 1,
115
106
  ...authority,
116
107
  snapshotAt: requireCoreMailSafeInteger(positionArg.snapshotAt, 'cursor.snapshotAt'),
117
108
  receivedAt: requireCoreMailSafeInteger(positionArg.receivedAt, 'cursor.receivedAt'),
@@ -122,7 +113,6 @@ export class CoreMailInboundCursorCodec {
122
113
  }
123
114
  const encodedPayload = Buffer.from(canonicalPayload(payload), 'utf8').toString('base64url');
124
115
  const envelope = {
125
- version: 1,
126
116
  keyId: currentKey.keyId,
127
117
  keyVersion: currentKey.version,
128
118
  payload: encodedPayload,
@@ -133,9 +123,6 @@ export class CoreMailInboundCursorCodec {
133
123
  decode(cursorArg, authorityArg, nowArg, keysArg) {
134
124
  const cursor = plugins.serveZoneInterfaces.data.normalizeCoreMailInboundCursor(cursorArg);
135
125
  const value = parseCanonicalRecord(cursor, envelopeKeys);
136
- if (value.version !== 1) {
137
- throw new Error('CoreMail inbound cursor version is unsupported.');
138
- }
139
126
  const now = requireCoreMailSafeInteger(nowArg, 'cursor.now');
140
127
  const keyId = requireCoreMailIdentifier(value.keyId, 'cursor.keyId');
141
128
  const keyVersion = requireCoreMailSafeInteger(value.keyVersion, 'cursor.keyVersion', 1);
@@ -143,7 +130,6 @@ export class CoreMailInboundCursorCodec {
143
130
  throw new Error('CoreMail inbound cursor is invalid.');
144
131
  }
145
132
  const envelope = {
146
- version: 1,
147
133
  keyId,
148
134
  keyVersion,
149
135
  payload: value.payload,
@@ -188,4 +174,4 @@ export class CoreMailInboundCursorCodec {
188
174
  };
189
175
  }
190
176
  }
191
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZW1haWwuY3Vyc29yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvY29yZW1haWwuY3Vyc29yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBQ3hDLE9BQU8sRUFDTCx5QkFBeUIsRUFDekIsMEJBQTBCLEVBQzFCLG1CQUFtQixHQUNwQixNQUFNLHlCQUF5QixDQUFDO0FBOEJqQyxNQUFNLGtCQUFrQixHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQztBQUNoRCxNQUFNLG1CQUFtQixHQUFHLEtBQUssQ0FBQztBQUNsQyxNQUFNLFdBQVcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUMxQixTQUFTO0lBQ1QsVUFBVTtJQUNWLFdBQVc7SUFDWCxXQUFXO0lBQ1gsaUJBQWlCO0lBQ2pCLFlBQVk7SUFDWixZQUFZO0lBQ1osWUFBWTtDQUNiLENBQUMsQ0FBQztBQUNILE1BQU0sWUFBWSxHQUFHLElBQUksR0FBRyxDQUFDO0lBQzNCLFNBQVM7SUFDVCxPQUFPO0lBQ1AsWUFBWTtJQUNaLFNBQVM7SUFDVCxXQUFXO0NBQ1osQ0FBQyxDQUFDO0FBRUgsTUFBTSxnQkFBZ0IsR0FBRyxDQUN2QixVQUF5QyxFQUNqQyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUMxQixPQUFPLEVBQUUsVUFBVSxDQUFDLE9BQU87SUFDM0IsUUFBUSxFQUFFLFVBQVUsQ0FBQyxRQUFRO0lBQzdCLFNBQVMsRUFBRSxVQUFVLENBQUMsU0FBUztJQUMvQixTQUFTLEVBQUUsVUFBVSxDQUFDLFNBQVM7SUFDL0IsZUFBZSxFQUFFLFVBQVUsQ0FBQyxlQUFlO0lBQzNDLFVBQVUsRUFBRSxVQUFVLENBQUMsVUFBVTtJQUNqQyxVQUFVLEVBQUUsVUFBVSxDQUFDLFVBQVU7SUFDakMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxVQUFVO0NBQ2xDLENBQUMsQ0FBQztBQUVILE1B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
177
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZW1haWwuY3Vyc29yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvY29yZW1haWwuY3Vyc29yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBQ3hDLE9BQU8sRUFDTCx5QkFBeUIsRUFDekIsMEJBQTBCLEVBQzFCLG1CQUFtQixHQUNwQixNQUFNLHlCQUF5QixDQUFDO0FBNEJqQyxNQUFNLGtCQUFrQixHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQztBQUNoRCxNQUFNLG1CQUFtQixHQUFHLEtBQUssQ0FBQztBQUNsQyxNQUFNLFdBQVcsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUMxQixVQUFVO0lBQ1YsV0FBVztJQUNYLFdBQVc7SUFDWCxpQkFBaUI7SUFDakIsWUFBWTtJQUNaLFlBQVk7SUFDWixZQUFZO0NBQ2IsQ0FBQyxDQUFDO0FBQ0gsTUFBTSxZQUFZLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDM0IsT0FBTztJQUNQLFlBQVk7SUFDWixTQUFTO0lBQ1QsV0FBVztDQUNaLENBQUMsQ0FBQztBQUVILE1BQU0sZ0JBQWdCLEdBQUcsQ0FDdkIsVUFBeUMsRUFDakMsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDMUIsUUFBUSxFQUFFLFVBQVUsQ0FBQyxRQUFRO0lBQzdCLFNBQVMsRUFBRSxVQUFVLENBQUMsU0FBUztJQUMvQixTQUFTLEVBQUUsVUFBVSxDQUFDLFNBQVM7SUFDL0IsZUFBZSxFQUFFLFVBQVUsQ0FBQyxlQUFlO0lBQzNDLFVBQVUsRUFBRSxVQUFVLENBQUMsVUFBVTtJQUNqQyxVQUFVLEVBQUUsVUFBVSxDQUFDLFVBQVU7SUFDakMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxVQUFVO0NBQ2xDLENBQUMsQ0FBQztBQUVILE1BQU0saUJBQWlCLEdBQUcsQ0FDeEIsV0FBMkMsRUFDbkMsRUFBRSxDQUFDLElBQUksQ0FB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
@@ -0,0 +1,18 @@
1
+ import * as plugins from './plugins.js';
2
+ export declare const privacySafeError: (errorArg: unknown) => plugins.typedrequest.TypedResponseError;
3
+ /**
4
+ * Register one typed handler with uniform failure redaction.
5
+ *
6
+ * Both peer-facing routers use this. The workload socket and the gateway
7
+ * socket are different peers, but a caller on either side has to be able to
8
+ * tell `QUOTA_EXCEEDED` from `STATE_CONFLICT`, so both must answer with the
9
+ * typed `ICoreMailErrorData` envelope rather than an opaque message.
10
+ *
11
+ * `handlerArg` is typed as typedrequest's own `THandlerFunction` rather than
12
+ * a hand-written signature: since typedrequest 8 both sides are wrapped in
13
+ * the `TReverseVirtualStreamDirections` mapped type, which does not reduce
14
+ * inside a generic wrapper, so any restatement of the shape stops being
15
+ * assignable. Concrete `IReq_*` types reduce normally, which is why the call
16
+ * sites need no change.
17
+ */
18
+ export declare const addPrivacySafeTypedHandler: <TRequest extends plugins.typedrequestInterfaces.ITypedRequest>(routerArg: plugins.typedrequest.TypedRouter, scopeArg: "server" | "gateway", methodArg: TRequest["method"], handlerArg: plugins.typedrequest.THandlerFunction<TRequest>) => void;
@@ -0,0 +1,84 @@
1
+ import * as plugins from './plugins.js';
2
+ import { CoreMailAuthenticationError, CoreMailAuthorizationError, CoreMailCapabilityDeniedError, } from './classes.auth.js';
3
+ import { CoreMailQuotaExceededError } from './coremail.quota.js';
4
+ import { logCoreMailFailure } from './coremail.log.js';
5
+ export const privacySafeError = (errorArg) => {
6
+ let code = 'INVALID_REQUEST';
7
+ let retryable = false;
8
+ if (errorArg instanceof CoreMailAuthenticationError) {
9
+ code = 'AUTHENTICATION_FAILED';
10
+ }
11
+ else if (errorArg instanceof CoreMailCapabilityDeniedError) {
12
+ code = 'CAPABILITY_DENIED';
13
+ }
14
+ else if (errorArg instanceof CoreMailAuthorizationError) {
15
+ code = 'AUTHORITY_REVOKED';
16
+ }
17
+ else if (errorArg instanceof CoreMailQuotaExceededError) {
18
+ return new plugins.typedrequest.TypedResponseError('CoreMail request rejected.', {
19
+ code: 'QUOTA_EXCEEDED',
20
+ retryable: true,
21
+ ...(errorArg.retryAfterMs === undefined
22
+ ? {}
23
+ : { retryAfterMs: errorArg.retryAfterMs }),
24
+ });
25
+ }
26
+ else if (errorArg instanceof plugins.serveZoneInterfaces.data.CoreMailContractError) {
27
+ code = errorArg.code;
28
+ }
29
+ else if (errorArg instanceof Error
30
+ && errorArg.message.includes('gateway')
31
+ && errorArg.message.includes('unavailable')) {
32
+ code = 'GATEWAY_UNAVAILABLE';
33
+ retryable = true;
34
+ }
35
+ else if (errorArg instanceof Error
36
+ && errorArg.message.includes('idempotency')) {
37
+ code = 'IDEMPOTENCY_CONFLICT';
38
+ }
39
+ else if (errorArg instanceof Error
40
+ && errorArg.message.includes('fence')) {
41
+ code = 'STATE_CONFLICT';
42
+ retryable = true;
43
+ }
44
+ else if (errorArg instanceof Error
45
+ && (errorArg.message.includes('byte budget')
46
+ || errorArg.message.includes('content budget')
47
+ || errorArg.message.includes('exceeds'))) {
48
+ code = 'PAYLOAD_LIMIT_EXCEEDED';
49
+ }
50
+ return new plugins.typedrequest.TypedResponseError('CoreMail request rejected.', {
51
+ code,
52
+ retryable,
53
+ });
54
+ };
55
+ /**
56
+ * Register one typed handler with uniform failure redaction.
57
+ *
58
+ * Both peer-facing routers use this. The workload socket and the gateway
59
+ * socket are different peers, but a caller on either side has to be able to
60
+ * tell `QUOTA_EXCEEDED` from `STATE_CONFLICT`, so both must answer with the
61
+ * typed `ICoreMailErrorData` envelope rather than an opaque message.
62
+ *
63
+ * `handlerArg` is typed as typedrequest's own `THandlerFunction` rather than
64
+ * a hand-written signature: since typedrequest 8 both sides are wrapped in
65
+ * the `TReverseVirtualStreamDirections` mapped type, which does not reduce
66
+ * inside a generic wrapper, so any restatement of the shape stops being
67
+ * assignable. Concrete `IReq_*` types reduce normally, which is why the call
68
+ * sites need no change.
69
+ */
70
+ export const addPrivacySafeTypedHandler = (routerArg, scopeArg, methodArg, handlerArg) => {
71
+ routerArg.addTypedHandler(new plugins.typedrequest.TypedHandler(methodArg, async (requestArg, toolsArg) => {
72
+ try {
73
+ return await handlerArg(requestArg, toolsArg);
74
+ }
75
+ catch (error) {
76
+ const safeError = privacySafeError(error);
77
+ if (safeError.errorData?.code === 'INVALID_REQUEST') {
78
+ await logCoreMailFailure(scopeArg, 'UNEXPECTED_HANDLER_FAILURE', error, { method: methodArg }).catch(() => undefined);
79
+ }
80
+ throw safeError;
81
+ }
82
+ }));
83
+ };
84
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZW1haWwuZXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvY29yZW1haWwuZXJyb3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBQ3hDLE9BQU8sRUFDTCwyQkFBMkIsRUFDM0IsMEJBQTBCLEVBQzFCLDZCQUE2QixHQUM5QixNQUFNLG1CQUFtQixDQUFDO0FBQzNCLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBSXZELE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLENBQzlCLFFBQWlCLEVBQ3dCLEVBQUU7SUFDM0MsSUFBSSxJQUFJLEdBQWUsaUJBQWlCLENBQUM7SUFDekMsSUFBSSxTQUFTLEdBQUcsS0FBSyxDQUFDO0lBQ3RCLElBQUksUUFBUSxZQUFZLDJCQUEyQixFQUFFLENBQUM7UUFDcEQsSUFBSSxHQUFHLHVCQUF1QixDQUFDO0lBQ2pDLENBQUM7U0FBTSxJQUFJLFFBQVEsWUFBWSw2QkFBNkIsRUFBRSxDQUFDO1FBQzdELElBQUksR0FBRyxtQkFBbUIsQ0FBQztJQUM3QixDQUFDO1NBQU0sSUFBSSxRQUFRLFlBQVksMEJBQTBCLEVBQUUsQ0FBQztRQUMxRCxJQUFJLEdBQUcsbUJBQW1CLENBQUM7SUFDN0IsQ0FBQztTQUFNLElBQUksUUFBUSxZQUFZLDBCQUEwQixFQUFFLENBQUM7UUFDMUQsT0FBTyxJQUFJLE9BQU8sQ0FBQyxZQUFZLENBQUMsa0JBQWtCLENBQUMsNEJBQTRCLEVBQUU7WUFDL0UsSUFBSSxFQUFFLGdCQUFnQjtZQUN0QixTQUFTLEVBQUUsSUFBSTtZQUNmLEdBQUcsQ0FBQyxRQUFRLENBQUMsWUFBWSxLQUFLLFNBQVM7Z0JBQ3JDLENBQUMsQ0FBQyxFQUFFO2dCQUNKLENBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxR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
@@ -5,4 +5,4 @@ export interface ICoreMailSanitizedError {
5
5
  message: string;
6
6
  }
7
7
  export declare const sanitizeErrorForLog: (errorArg: unknown) => ICoreMailSanitizedError;
8
- export declare const logCoreMailFailure: (componentArg: "auth" | "desired-state" | "gateway" | "lifecycle" | "retention" | "server" | "transfer" | "worker", codeArg: string, errorArg?: unknown, contextArg?: Record<string, string | number>) => Promise<void>;
8
+ export declare const logCoreMailFailure: (componentArg: "auth" | "desired-state" | "gateway" | "lifecycle" | "retention" | "server" | "smtp" | "transfer" | "worker", codeArg: string, errorArg?: unknown, contextArg?: Record<string, string | number>) => Promise<void>;
@@ -1,9 +1,6 @@
1
1
  import * as plugins from './plugins.js';
2
- export const coreMailLogger = plugins.smartlog.Smartlog.createForCommitinfo({
3
- name: '@serve.zone/coremail',
4
- version: '1.0.0',
5
- description: 'Authenticated mail persistence and delivery orchestration for serve.zone workloads.',
6
- });
2
+ import { commitinfo } from './00_commitinfo_data.js';
3
+ export const coreMailLogger = plugins.smartlog.Smartlog.createForCommitinfo(commitinfo);
7
4
  coreMailLogger.enableConsole();
8
5
  const redactUrlCredentials = (valueArg) => valueArg.replace(/:\/\/[^\s/@]+@/g, '://[redacted]@');
9
6
  export const sanitizeErrorForLog = (errorArg) => {
@@ -26,4 +23,4 @@ export const logCoreMailFailure = async (componentArg, codeArg, errorArg, contex
26
23
  ...(contextArg === undefined ? {} : { context: contextArg }),
27
24
  });
28
25
  };
29
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZW1haWwubG9nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvY29yZW1haWwubG9nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBRXhDLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQztJQUMxRSxJQUFJLEVBQUUsc0JBQXNCO0lBQzVCLE9BQU8sRUFBRSxPQUFPO0lBQ2hCLFdBQVcsRUFDVCxxRkFBcUY7Q0FDeEYsQ0FBQyxDQUFDO0FBRUgsY0FBYyxDQUFDLGFBQWEsRUFBRSxDQUFDO0FBRS9CLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxRQUFnQixFQUFVLEVBQUUsQ0FDeEQsUUFBUSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0FBT3hELE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLENBQ2pDLFFBQWlCLEVBQ1EsRUFBRTtJQUMzQixJQUFJLFFBQVEsWUFBWSxLQUFLLEVBQUUsQ0FBQztRQUM5QixPQUFPO1lBQ0wsSUFBSSxFQUFFLFFBQVEsQ0FBQyxJQUFJO1lBQ25CLE9BQU8sRUFBRSxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUM7U0FDOUQsQ0FBQztJQUNKLENBQUM7SUFDRCxPQUFPO1FBQ0wsSUFBSSxFQUFFLGNBQWM7UUFDcEIsT0FBTyxFQUFFLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDO0tBQzlELENBQUM7QUFDSixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxLQUFLLEVBQ3JDLFlBUVksRUFDWixPQUFlLEVBQ2YsUUFBa0IsRUFDbEIsVUFBNEMsRUFDN0IsRUFBRTtJQUNqQixNQUFNLGNBQWMsQ0FBQyxHQUFHLENBQ3RCLE1BQU0sRUFDTiw0QkFBNEIsRUFDNUI7UUFDRSxTQUFTLEVBQUUsWUFBWTtRQUN2QixJQUFJLEVBQUUsT0FBTztRQUNiLEdBQUcsQ0FBQyxRQUFRLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7UUFDM0UsR0FBRyxDQUFDLFVBQVUsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLENBQUM7S0FDN0QsQ0FDRixDQUFDO0FBQ0osQ0FBQyxDQUFDIn0=
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZW1haWwubG9nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvY29yZW1haWwubG9nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUVyRCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsbUJBQW1CLENBQUMsVUFBVSxDQUFDLENBQUM7QUFFeEYsY0FBYyxDQUFDLGFBQWEsRUFBRSxDQUFDO0FBRS9CLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxRQUFnQixFQUFVLEVBQUUsQ0FDeEQsUUFBUSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0FBT3hELE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLENBQ2pDLFFBQWlCLEVBQ1EsRUFBRTtJQUMzQixJQUFJLFFBQVEsWUFBWSxLQUFLLEVBQUUsQ0FBQztRQUM5QixPQUFPO1lBQ0wsSUFBSSxFQUFFLFFBQVEsQ0FBQyxJQUFJO1lBQ25CLE9BQU8sRUFBRSxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUM7U0FDOUQsQ0FBQztJQUNKLENBQUM7SUFDRCxPQUFPO1FBQ0wsSUFBSSxFQUFFLGNBQWM7UUFDcEIsT0FBTyxFQUFFLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDO0tBQzlELENBQUM7QUFDSixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxLQUFLLEVBQ3JDLFlBU1ksRUFDWixPQUFlLEVBQ2YsUUFBa0IsRUFDbEIsVUFBNEMsRUFDN0IsRUFBRTtJQUNqQixNQUFNLGNBQWMsQ0FBQyxHQUFHLENBQ3RCLE1BQU0sRUFDTiw0QkFBNEIsRUFDNUI7UUFDRSxTQUFTLEVBQUUsWUFBWTtRQUN2QixJQUFJLEVBQUUsT0FBTztRQUNiLEdBQUcsQ0FBQyxRQUFRLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7UUFDM0UsR0FBRyxDQUFDLFVBQVUsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLENBQUM7S0FDN0QsQ0FDRixDQUFDO0FBQ0osQ0FBQyxDQUFDIn0=
@@ -5,4 +5,19 @@ export declare const createCoreMailMime: (submissionIdArg: string, submissionDig
5
5
  descriptor: ISubmissionPartRecord;
6
6
  bytes: Uint8Array;
7
7
  }>) => Uint8Array;
8
+ /** Bytes of a stored message that are read to find its headers. */
9
+ export declare const coreMailHeaderScanBytes: number;
10
+ /**
11
+ * Read `Message-ID` and `Subject` out of an RFC 5322 header block.
12
+ *
13
+ * `bytesArg` is a bounded prefix of the stored message, so a header block that
14
+ * does not end inside it is treated as absent rather than guessed at. Folded
15
+ * continuation lines are unfolded, `Subject` encoded-words are decoded when
16
+ * that is possible without a dependency, and both values are trimmed to the
17
+ * byte budgets the delivery record enforces.
18
+ */
19
+ export declare const parseCoreMailMessageHeaders: (bytesArg: Uint8Array) => {
20
+ messageId?: string;
21
+ subject?: string;
22
+ };
8
23
  export {};