@serve.zone/interfaces 21.1.0 → 22.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.
@@ -1,6 +1,18 @@
1
1
  import { canonicalizeStrictJson, createCanonicalJsonSha256Hex, deepFreezeValue, strictCanonicalJsonRules, } from '../private/canonicaljson.js';
2
- import { coreMailCredentialVerifierPolicy, } from './coremail.js';
2
+ import { coreMailCredentialVerifierPolicy, coreMailLimits, coreMailTransferProtocol, coreMailTransferTokenPolicy, coreMailWorkloadOperationPolicy, } from './coremail.js';
3
3
  export const coreMailCanonicalJsonRules = strictCanonicalJsonRules;
4
+ export const resolveCoreMailWorkloadOperations = (stateArg, capabilitiesArg) => {
5
+ const operations = new Set();
6
+ for (const capability of ['outbound', 'inbound']) {
7
+ if (!capabilitiesArg.includes(capability)) {
8
+ continue;
9
+ }
10
+ for (const operation of coreMailWorkloadOperationPolicy[stateArg][capability]) {
11
+ operations.add(operation);
12
+ }
13
+ }
14
+ return Object.freeze([...operations]);
15
+ };
4
16
  export const coreMailContractLimits = Object.freeze({
5
17
  maximumIdentifierBytes: 128,
6
18
  maximumEnvironmentKeyBytes: 128,
@@ -10,6 +22,16 @@ export const coreMailContractLimits = Object.freeze({
10
22
  maximumCredentialsPerAuthority: 16,
11
23
  maximumAllowedSendersPerBinding: 1_000,
12
24
  maximumInboundRecipientsPerBinding: 10_000,
25
+ maximumMessagesPerMinute: 100_000,
26
+ maximumMessagesPerDay: 10_000_000,
27
+ maximumPendingInbound: 1_000_000,
28
+ maximumDisplayNameBytes: 256,
29
+ maximumSubjectBytes: 768,
30
+ maximumHeaderCount: 32,
31
+ maximumHeaderValueBytes: 768,
32
+ maximumFilenameBytes: 512,
33
+ maximumContentIdBytes: 256,
34
+ maximumBearerTokenBytes: 1_024,
13
35
  });
14
36
  export class CoreMailContractError extends Error {
15
37
  constructor(reasonArg) {
@@ -94,6 +116,8 @@ const requireString = (valueArg, pathArg, maximumBytesArg) => {
94
116
  return valueArg;
95
117
  };
96
118
  const identifierRegex = /^[A-Za-z0-9](?:[A-Za-z0-9._:-]{0,126}[A-Za-z0-9])?$/;
119
+ 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}$/;
120
+ const contentTypeRegex = /^[a-z0-9!#$&^_.+-]+\/[a-z0-9!#$&^_.+-]+(?:; ?[a-z0-9!#$&^_.+-]+=(?:"[^"\r\n]{1,100}"|[a-z0-9!#$&^_.+-]+))*$/i;
97
121
  const requireIdentifier = (valueArg, pathArg) => {
98
122
  const value = requireString(valueArg, pathArg, coreMailContractLimits.maximumIdentifierBytes);
99
123
  if (!identifierRegex.test(value)) {
@@ -101,9 +125,32 @@ const requireIdentifier = (valueArg, pathArg) => {
101
125
  }
102
126
  return value;
103
127
  };
104
- const requireSafeInteger = (valueArg, pathArg, minimumArg) => {
105
- if (!Number.isSafeInteger(valueArg) || valueArg < minimumArg) {
106
- return fail(`${pathArg} must be a safe integer greater than or equal to ${minimumArg}`);
128
+ const requireUuid = (valueArg, pathArg) => {
129
+ if (typeof valueArg !== 'string' || !uuidRegex.test(valueArg)) {
130
+ return fail(`${pathArg} must be a canonical UUID`);
131
+ }
132
+ return valueArg;
133
+ };
134
+ const requireContentType = (valueArg, pathArg) => {
135
+ if (typeof valueArg !== 'string' || !contentTypeRegex.test(valueArg)) {
136
+ return fail(`${pathArg} must be a canonical content type`);
137
+ }
138
+ return valueArg;
139
+ };
140
+ const requireDisplayText = (valueArg, pathArg, maximumBytesArg, allowEmptyArg = false) => {
141
+ if (typeof valueArg !== 'string'
142
+ || (!allowEmptyArg && valueArg.length === 0)
143
+ || /[\u0000-\u001f\u007f]/.test(valueArg)
144
+ || new TextEncoder().encode(valueArg).byteLength > maximumBytesArg) {
145
+ return fail(`${pathArg} must be bounded display text`);
146
+ }
147
+ return valueArg;
148
+ };
149
+ const requireSafeInteger = (valueArg, pathArg, minimumArg, maximumArg = Number.MAX_SAFE_INTEGER) => {
150
+ if (!Number.isSafeInteger(valueArg)
151
+ || valueArg < minimumArg
152
+ || valueArg > maximumArg) {
153
+ return fail(`${pathArg} must be a safe integer between ${minimumArg} and ${maximumArg}`);
107
154
  }
108
155
  return valueArg;
109
156
  };
@@ -196,6 +243,60 @@ const normalizeCredentialSet = (valueArg, pathArg) => {
196
243
  return credentials.sort((leftArg, rightArg) => leftArg.version - rightArg.version
197
244
  || compareStrings(leftArg.credentialId, rightArg.credentialId));
198
245
  };
246
+ const requireEnvironmentKey = (valueArg, pathArg) => {
247
+ const value = requireString(valueArg, pathArg, coreMailContractLimits.maximumEnvironmentKeyBytes);
248
+ if (!/^[A-Z][A-Z0-9_]{0,127}$/.test(value)) {
249
+ fail(`${pathArg} must be a canonical environment key`);
250
+ }
251
+ return value;
252
+ };
253
+ export const normalizeCoreMailRuntimeKeyReference = (valueArg, pathArg = 'runtimeKey') => {
254
+ const record = readRecord(valueArg, pathArg);
255
+ assertKeys(record, pathArg, ['keyId', 'version', 'state', 'secretKey'], ['acceptUntil']);
256
+ const state = record.state === 'current' || record.state === 'retiring'
257
+ ? record.state
258
+ : fail(`${pathArg}.state must be current or retiring`);
259
+ if (state === 'current' && Object.hasOwn(record, 'acceptUntil')) {
260
+ fail(`${pathArg}.acceptUntil is forbidden for a current key`);
261
+ }
262
+ if (state === 'retiring' && !Object.hasOwn(record, 'acceptUntil')) {
263
+ fail(`${pathArg}.acceptUntil is required for a retiring key`);
264
+ }
265
+ const normalized = {
266
+ keyId: requireIdentifier(record.keyId, `${pathArg}.keyId`),
267
+ version: requireSafeInteger(record.version, `${pathArg}.version`, 1),
268
+ state,
269
+ secretKey: requireEnvironmentKey(record.secretKey, `${pathArg}.secretKey`),
270
+ };
271
+ if (state === 'retiring') {
272
+ normalized.acceptUntil = requireSafeInteger(record.acceptUntil, `${pathArg}.acceptUntil`, 1);
273
+ }
274
+ return deepFreezeValue(normalized);
275
+ };
276
+ const normalizeRuntimeKeySet = (valueArg, pathArg) => {
277
+ const keys = readArray(valueArg, pathArg, coreMailContractLimits.maximumCredentialsPerAuthority).map((entryArg, indexArg) => normalizeCoreMailRuntimeKeyReference(entryArg, `${pathArg}[${indexArg}]`));
278
+ if (keys.length === 0 || keys.filter((entryArg) => entryArg.state === 'current').length !== 1) {
279
+ fail(`${pathArg} must contain exactly one current key`);
280
+ }
281
+ const keyIds = new Set();
282
+ const versions = new Set();
283
+ const secretKeys = new Set();
284
+ for (const key of keys) {
285
+ if (keyIds.has(key.keyId)
286
+ || versions.has(key.version)
287
+ || secretKeys.has(key.secretKey)) {
288
+ fail(`${pathArg} contains a duplicate keyId, version, or secretKey`);
289
+ }
290
+ keyIds.add(key.keyId);
291
+ versions.add(key.version);
292
+ secretKeys.add(key.secretKey);
293
+ }
294
+ const current = keys.find((entryArg) => entryArg.state === 'current');
295
+ if (keys.some((entryArg) => entryArg.state === 'retiring' && entryArg.version >= current.version)) {
296
+ fail(`${pathArg} current key must have the greatest version`);
297
+ }
298
+ return keys.sort((leftArg, rightArg) => leftArg.version - rightArg.version || compareStrings(leftArg.keyId, rightArg.keyId));
299
+ };
199
300
  const mailboxLocalPartRegex = /^[a-z0-9!#$%&'*+/=?^_`{|}~.-]+$/;
200
301
  const mailboxDomainLabelRegex = /^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$/;
201
302
  const requireCanonicalMailbox = (valueArg, pathArg) => {
@@ -219,6 +320,579 @@ const requireCanonicalMailbox = (valueArg, pathArg) => {
219
320
  }
220
321
  return value;
221
322
  };
323
+ const normalizeMailbox = (valueArg, pathArg) => {
324
+ const record = readRecord(valueArg, pathArg);
325
+ assertKeys(record, pathArg, ['address'], ['displayName']);
326
+ const normalized = {
327
+ address: requireCanonicalMailbox(record.address, `${pathArg}.address`),
328
+ };
329
+ if (Object.hasOwn(record, 'displayName')) {
330
+ normalized.displayName = requireDisplayText(record.displayName, `${pathArg}.displayName`, coreMailContractLimits.maximumDisplayNameBytes);
331
+ }
332
+ return normalized;
333
+ };
334
+ const normalizeMailboxArray = (valueArg, pathArg, allowEmptyArg) => {
335
+ const values = readArray(valueArg, pathArg, coreMailLimits.recipientCount);
336
+ if (!allowEmptyArg && values.length === 0) {
337
+ fail(`${pathArg} must not be empty`);
338
+ }
339
+ const normalized = values.map((entryArg, indexArg) => normalizeMailbox(entryArg, `${pathArg}[${indexArg}]`));
340
+ if (new Set(normalized.map((entryArg) => entryArg.address)).size !== normalized.length) {
341
+ fail(`${pathArg} must contain unique mailbox addresses`);
342
+ }
343
+ return normalized;
344
+ };
345
+ export const normalizeCoreMailEnvelope = (valueArg, pathArg = 'envelope') => {
346
+ const record = readRecord(valueArg, pathArg);
347
+ assertKeys(record, pathArg, ['mailFrom', 'rcptTo']);
348
+ const mailFrom = record.mailFrom === ''
349
+ ? ''
350
+ : requireCanonicalMailbox(record.mailFrom, `${pathArg}.mailFrom`);
351
+ const rcptTo = readArray(record.rcptTo, `${pathArg}.rcptTo`, coreMailLimits.recipientCount).map((entryArg, indexArg) => requireCanonicalMailbox(entryArg, `${pathArg}.rcptTo[${indexArg}]`));
352
+ if (rcptTo.length === 0 || new Set(rcptTo).size !== rcptTo.length) {
353
+ fail(`${pathArg}.rcptTo must contain unique recipients`);
354
+ }
355
+ return deepFreezeValue({ mailFrom, rcptTo });
356
+ };
357
+ const forbiddenHeaderNames = new Set([
358
+ 'bcc',
359
+ 'cc',
360
+ 'content-transfer-encoding',
361
+ 'content-type',
362
+ 'date',
363
+ 'delivered-to',
364
+ 'dkim-signature',
365
+ 'domainkey-signature',
366
+ 'from',
367
+ 'message-id',
368
+ 'mime-version',
369
+ 'received',
370
+ 'received-spf',
371
+ 'reply-to',
372
+ 'return-path',
373
+ 'sender',
374
+ 'subject',
375
+ 'to',
376
+ 'x-original-to',
377
+ ]);
378
+ const isTransportOwnedHeader = (nameArg) => forbiddenHeaderNames.has(nameArg)
379
+ || nameArg === 'authentication-results'
380
+ || nameArg.startsWith('arc-')
381
+ || nameArg.startsWith('resent-')
382
+ || nameArg.startsWith('x-coremail-');
383
+ const normalizeContentDescriptor = (valueArg, pathArg) => {
384
+ const record = readRecord(valueArg, pathArg);
385
+ assertKeys(record, pathArg, ['partId', 'kind', 'contentType', 'sha256', 'lengthBytes'], ['filename', 'contentId']);
386
+ const kind = record.kind === 'text'
387
+ || record.kind === 'html'
388
+ || record.kind === 'attachment'
389
+ ? record.kind
390
+ : fail(`${pathArg}.kind is invalid`);
391
+ const maximumBytes = kind === 'text'
392
+ ? coreMailLimits.textPartBytes
393
+ : kind === 'html'
394
+ ? coreMailLimits.htmlPartBytes
395
+ : coreMailLimits.attachmentBytes;
396
+ const normalized = {
397
+ partId: requireIdentifier(record.partId, `${pathArg}.partId`),
398
+ kind,
399
+ contentType: requireContentType(record.contentType, `${pathArg}.contentType`),
400
+ sha256: normalizeCoreMailSha256(record.sha256, `${pathArg}.sha256`),
401
+ lengthBytes: requireSafeInteger(record.lengthBytes, `${pathArg}.lengthBytes`, 0, maximumBytes),
402
+ };
403
+ if (Object.hasOwn(record, 'filename')) {
404
+ normalized.filename = requireDisplayText(record.filename, `${pathArg}.filename`, coreMailContractLimits.maximumFilenameBytes);
405
+ }
406
+ if (Object.hasOwn(record, 'contentId')) {
407
+ normalized.contentId = requireDisplayText(record.contentId, `${pathArg}.contentId`, coreMailContractLimits.maximumContentIdBytes);
408
+ }
409
+ return normalized;
410
+ };
411
+ export const normalizeCoreMailOutboundMessageDescriptor = (valueArg, pathArg = 'message') => {
412
+ const record = readRecord(valueArg, pathArg);
413
+ assertKeys(record, pathArg, ['sender', 'recipients', 'subject', 'parts'], ['replyTo', 'headers']);
414
+ const recipientsRecord = readRecord(record.recipients, `${pathArg}.recipients`);
415
+ assertKeys(recipientsRecord, `${pathArg}.recipients`, ['to'], ['cc', 'bcc']);
416
+ const to = normalizeMailboxArray(recipientsRecord.to, `${pathArg}.recipients.to`, false);
417
+ const cc = Object.hasOwn(recipientsRecord, 'cc')
418
+ ? normalizeMailboxArray(recipientsRecord.cc, `${pathArg}.recipients.cc`, true)
419
+ : undefined;
420
+ const bcc = Object.hasOwn(recipientsRecord, 'bcc')
421
+ ? normalizeMailboxArray(recipientsRecord.bcc, `${pathArg}.recipients.bcc`, true)
422
+ : undefined;
423
+ const recipientAddresses = [...to, ...(cc || []), ...(bcc || [])]
424
+ .map((entryArg) => entryArg.address);
425
+ if (recipientAddresses.length > coreMailLimits.recipientCount
426
+ || new Set(recipientAddresses).size !== recipientAddresses.length) {
427
+ fail(`${pathArg}.recipients must contain at most ${coreMailLimits.recipientCount} unique addresses`);
428
+ }
429
+ const parts = readArray(record.parts, `${pathArg}.parts`, coreMailLimits.attachmentCount + 2).map((entryArg, indexArg) => normalizeContentDescriptor(entryArg, `${pathArg}.parts[${indexArg}]`));
430
+ if (parts.length === 0
431
+ || new Set(parts.map((entryArg) => entryArg.partId)).size !== parts.length
432
+ || parts.filter((entryArg) => entryArg.kind === 'text').length > 1
433
+ || parts.filter((entryArg) => entryArg.kind === 'html').length > 1
434
+ || parts.filter((entryArg) => entryArg.kind === 'attachment').length > coreMailLimits.attachmentCount
435
+ || parts.filter((entryArg) => entryArg.kind === 'attachment')
436
+ .reduce((totalArg, entryArg) => totalArg + entryArg.lengthBytes, 0)
437
+ > coreMailLimits.aggregateAttachmentBytes) {
438
+ fail(`${pathArg}.parts is invalid`);
439
+ }
440
+ let headers;
441
+ if (Object.hasOwn(record, 'headers')) {
442
+ const seenHeaderNames = new Set();
443
+ headers = readArray(record.headers, `${pathArg}.headers`, coreMailContractLimits.maximumHeaderCount).map((entryArg, indexArg) => {
444
+ const headerPath = `${pathArg}.headers[${indexArg}]`;
445
+ const headerRecord = readRecord(entryArg, headerPath);
446
+ assertKeys(headerRecord, headerPath, ['name', 'value']);
447
+ if (typeof headerRecord.name !== 'string'
448
+ || !/^[A-Za-z][A-Za-z0-9-]{0,62}$/.test(headerRecord.name)) {
449
+ return fail(`${headerPath}.name is invalid`);
450
+ }
451
+ const lowerName = headerRecord.name.toLowerCase();
452
+ if (isTransportOwnedHeader(lowerName) || seenHeaderNames.has(lowerName)) {
453
+ return fail(`${headerPath}.name is transport-owned or duplicated`);
454
+ }
455
+ seenHeaderNames.add(lowerName);
456
+ return {
457
+ name: headerRecord.name,
458
+ value: requireDisplayText(headerRecord.value, `${headerPath}.value`, coreMailContractLimits.maximumHeaderValueBytes, true),
459
+ };
460
+ });
461
+ }
462
+ const normalized = {
463
+ sender: normalizeMailbox(record.sender, `${pathArg}.sender`),
464
+ recipients: {
465
+ to,
466
+ ...(cc ? { cc } : {}),
467
+ ...(bcc ? { bcc } : {}),
468
+ },
469
+ subject: requireDisplayText(record.subject, `${pathArg}.subject`, coreMailContractLimits.maximumSubjectBytes, true),
470
+ parts,
471
+ };
472
+ if (Object.hasOwn(record, 'replyTo')) {
473
+ normalized.replyTo = normalizeMailbox(record.replyTo, `${pathArg}.replyTo`);
474
+ }
475
+ if (headers) {
476
+ normalized.headers = headers;
477
+ }
478
+ return deepFreezeValue(normalized);
479
+ };
480
+ export const normalizeCoreMailInboundPageLimit = (valueArg) => requireSafeInteger(valueArg, 'inboundPageLimit', 1, coreMailLimits.inboundPageSize);
481
+ const coreMailErrorCodes = new Set([
482
+ 'AUTHENTICATION_FAILED',
483
+ 'AUTHENTICATION_EXPIRED',
484
+ 'AUTHORITY_REVOKED',
485
+ 'CAPABILITY_DENIED',
486
+ 'NOT_FOUND',
487
+ 'INVALID_REQUEST',
488
+ 'INVALID_MAILBOX',
489
+ 'INVALID_SENDER',
490
+ 'INVALID_RECIPIENT',
491
+ 'INVALID_HEADER',
492
+ 'PAYLOAD_LIMIT_EXCEEDED',
493
+ 'QUOTA_EXCEEDED',
494
+ 'IDEMPOTENCY_CONFLICT',
495
+ 'STATE_CONFLICT',
496
+ 'TRANSFER_GRANT_EXPIRED',
497
+ 'TRANSFER_GRANT_REPLAYED',
498
+ 'TRANSFER_LENGTH_MISMATCH',
499
+ 'TRANSFER_DIGEST_MISMATCH',
500
+ 'TRANSFER_ENCODING_UNSUPPORTED',
501
+ 'OBJECT_INTEGRITY_CONFLICT',
502
+ 'DELIVERY_NOT_FETCHED',
503
+ 'DELIVERY_DEFERRED',
504
+ 'DELIVERY_FAILED',
505
+ 'DELIVERY_DEAD_LETTERED',
506
+ 'GATEWAY_UNAVAILABLE',
507
+ 'RECONCILIATION_FENCE_MISMATCH',
508
+ ]);
509
+ export const normalizeCoreMailErrorData = (valueArg, pathArg = 'error') => {
510
+ const record = readRecord(valueArg, pathArg);
511
+ assertKeys(record, pathArg, ['code', 'retryable'], ['retryAfterMs']);
512
+ if (typeof record.code !== 'string' || !coreMailErrorCodes.has(record.code)) {
513
+ fail(`${pathArg}.code is invalid`);
514
+ }
515
+ if (typeof record.retryable !== 'boolean') {
516
+ fail(`${pathArg}.retryable must be boolean`);
517
+ }
518
+ const normalized = {
519
+ code: record.code,
520
+ retryable: record.retryable,
521
+ };
522
+ if (Object.hasOwn(record, 'retryAfterMs')) {
523
+ if (!record.retryable) {
524
+ fail(`${pathArg}.retryAfterMs requires retryable to be true`);
525
+ }
526
+ normalized.retryAfterMs = requireSafeInteger(record.retryAfterMs, `${pathArg}.retryAfterMs`, 1);
527
+ }
528
+ return deepFreezeValue(normalized);
529
+ };
530
+ export const normalizeCoreMailTransferGrant = (valueArg, pathArg = 'transferGrant') => {
531
+ const record = readRecord(valueArg, pathArg);
532
+ assertKeys(record, pathArg, [
533
+ 'grantId',
534
+ 'method',
535
+ 'path',
536
+ 'bearerToken',
537
+ 'sha256',
538
+ 'lengthBytes',
539
+ 'contentType',
540
+ 'issuedAt',
541
+ 'expiresAt',
542
+ ]);
543
+ const grantId = requireUuid(record.grantId, `${pathArg}.grantId`);
544
+ const method = record.method === 'PUT' || record.method === 'GET'
545
+ ? record.method
546
+ : fail(`${pathArg}.method must be PUT or GET`);
547
+ const path = requireString(record.path, `${pathArg}.path`, 128);
548
+ if (path !== `${coreMailTransferProtocol.pathPrefix}${grantId}`) {
549
+ fail(`${pathArg}.path must match its grantId`);
550
+ }
551
+ const bearerToken = requireString(record.bearerToken, `${pathArg}.bearerToken`, coreMailContractLimits.maximumBearerTokenBytes);
552
+ let decodedToken;
553
+ try {
554
+ decodedToken = globalThis.atob(`${bearerToken.replace(/-/g, '+').replace(/_/g, '/')}${'='.repeat((4 - (bearerToken.length % 4)) % 4)}`);
555
+ }
556
+ catch {
557
+ return fail(`${pathArg}.bearerToken must use ${coreMailTransferTokenPolicy.format}`);
558
+ }
559
+ const canonicalToken = globalThis.btoa(decodedToken)
560
+ .replace(/\+/g, '-')
561
+ .replace(/\//g, '_')
562
+ .replace(/=+$/u, '');
563
+ if (decodedToken.length !== coreMailTransferTokenPolicy.decodedBytes
564
+ || bearerToken.length !== coreMailTransferTokenPolicy.encodedCharacters
565
+ || canonicalToken !== bearerToken) {
566
+ fail(`${pathArg}.bearerToken must use ${coreMailTransferTokenPolicy.format}`);
567
+ }
568
+ const issuedAt = requireSafeInteger(record.issuedAt, `${pathArg}.issuedAt`, 1);
569
+ const expiresAt = requireSafeInteger(record.expiresAt, `${pathArg}.expiresAt`, 1);
570
+ if (expiresAt - issuedAt !== coreMailLimits.transferGrantTtlMs) {
571
+ fail(`${pathArg} must use the fixed transfer grant lifetime`);
572
+ }
573
+ return deepFreezeValue({
574
+ grantId,
575
+ method,
576
+ path,
577
+ bearerToken,
578
+ sha256: normalizeCoreMailSha256(record.sha256, `${pathArg}.sha256`),
579
+ lengthBytes: requireSafeInteger(record.lengthBytes, `${pathArg}.lengthBytes`, 0, coreMailLimits.serializedMimeBytes),
580
+ contentType: requireContentType(record.contentType, `${pathArg}.contentType`),
581
+ issuedAt,
582
+ expiresAt,
583
+ });
584
+ };
585
+ export const normalizeCoreMailUploadGrant = (valueArg, pathArg = 'uploadGrant') => {
586
+ const grant = normalizeCoreMailTransferGrant(valueArg, pathArg);
587
+ if (grant.method !== 'PUT') {
588
+ fail(`${pathArg}.method must be PUT`);
589
+ }
590
+ return grant;
591
+ };
592
+ export const normalizeCoreMailDownloadGrant = (valueArg, pathArg = 'downloadGrant') => {
593
+ const grant = normalizeCoreMailTransferGrant(valueArg, pathArg);
594
+ if (grant.method !== 'GET') {
595
+ fail(`${pathArg}.method must be GET`);
596
+ }
597
+ return grant;
598
+ };
599
+ const normalizePartStatus = (valueArg, pathArg) => {
600
+ const record = readRecord(valueArg, pathArg);
601
+ assertKeys(record, pathArg, ['partId', 'state', 'sha256', 'lengthBytes']);
602
+ const state = record.state === 'missing'
603
+ || record.state === 'uploading'
604
+ || record.state === 'complete'
605
+ || record.state === 'failed'
606
+ ? record.state
607
+ : fail(`${pathArg}.state is invalid`);
608
+ return {
609
+ partId: requireIdentifier(record.partId, `${pathArg}.partId`),
610
+ state,
611
+ sha256: normalizeCoreMailSha256(record.sha256, `${pathArg}.sha256`),
612
+ lengthBytes: requireSafeInteger(record.lengthBytes, `${pathArg}.lengthBytes`, 0, coreMailLimits.attachmentBytes),
613
+ };
614
+ };
615
+ const assertOutboundStateFields = (stateArg, valueArg, pathArg) => {
616
+ if (stateArg === 'deferred') {
617
+ if (valueArg.nextAttemptAt === undefined
618
+ || !valueArg.error?.retryable
619
+ || valueArg.terminalAt !== undefined
620
+ || valueArg.deliveredAt !== undefined) {
621
+ fail(`${pathArg} deferred state fields are inconsistent`);
622
+ }
623
+ return;
624
+ }
625
+ if (stateArg === 'failed' || stateArg === 'deadLettered') {
626
+ if (valueArg.terminalAt === undefined
627
+ || !valueArg.error
628
+ || valueArg.error.retryable
629
+ || valueArg.nextAttemptAt !== undefined
630
+ || valueArg.deliveredAt !== undefined) {
631
+ fail(`${pathArg} terminal failure fields are inconsistent`);
632
+ }
633
+ return;
634
+ }
635
+ if (stateArg === 'delivered') {
636
+ if (valueArg.terminalAt === undefined
637
+ || valueArg.deliveredAt !== valueArg.terminalAt
638
+ || valueArg.error !== undefined
639
+ || valueArg.nextAttemptAt !== undefined) {
640
+ fail(`${pathArg} delivered state fields are inconsistent`);
641
+ }
642
+ return;
643
+ }
644
+ if (valueArg.error !== undefined
645
+ || valueArg.terminalAt !== undefined
646
+ || valueArg.deliveredAt !== undefined
647
+ || valueArg.nextAttemptAt !== undefined) {
648
+ fail(`${pathArg} state contains fields reserved for deferred or terminal outcomes`);
649
+ }
650
+ };
651
+ const submissionStates = new Set([
652
+ 'preparing',
653
+ 'uploading',
654
+ 'ready',
655
+ 'accepted',
656
+ 'queued',
657
+ 'delivering',
658
+ 'delivered',
659
+ 'deferred',
660
+ 'failed',
661
+ 'deadLettered',
662
+ ]);
663
+ export const normalizeCoreMailSubmission = (valueArg, pathArg = 'submission') => {
664
+ const record = readRecord(valueArg, pathArg);
665
+ assertKeys(record, pathArg, [
666
+ 'submissionId',
667
+ 'idempotencyKey',
668
+ 'submissionDigest',
669
+ 'state',
670
+ 'parts',
671
+ 'attempts',
672
+ 'createdAt',
673
+ 'updatedAt',
674
+ ], [
675
+ 'transportMessageId',
676
+ 'nextAttemptAt',
677
+ 'error',
678
+ 'acceptedAt',
679
+ 'deliveredAt',
680
+ 'terminalAt',
681
+ ]);
682
+ if (typeof record.state !== 'string' || !submissionStates.has(record.state)) {
683
+ fail(`${pathArg}.state is invalid`);
684
+ }
685
+ const parts = readArray(record.parts, `${pathArg}.parts`, coreMailLimits.attachmentCount + 2).map((entryArg, indexArg) => normalizePartStatus(entryArg, `${pathArg}.parts[${indexArg}]`));
686
+ if (parts.length === 0
687
+ || new Set(parts.map((entryArg) => entryArg.partId)).size !== parts.length) {
688
+ fail(`${pathArg}.parts must contain unique part identities`);
689
+ }
690
+ const normalized = {
691
+ submissionId: requireIdentifier(record.submissionId, `${pathArg}.submissionId`),
692
+ idempotencyKey: requireString(record.idempotencyKey, `${pathArg}.idempotencyKey`, 256),
693
+ submissionDigest: normalizeCoreMailSha256(record.submissionDigest, `${pathArg}.submissionDigest`),
694
+ state: record.state,
695
+ parts,
696
+ attempts: requireSafeInteger(record.attempts, `${pathArg}.attempts`, 0),
697
+ createdAt: requireSafeInteger(record.createdAt, `${pathArg}.createdAt`, 1),
698
+ updatedAt: requireSafeInteger(record.updatedAt, `${pathArg}.updatedAt`, 1),
699
+ };
700
+ for (const key of [
701
+ 'nextAttemptAt',
702
+ 'acceptedAt',
703
+ 'deliveredAt',
704
+ 'terminalAt',
705
+ ]) {
706
+ if (Object.hasOwn(record, key)) {
707
+ normalized[key] = requireSafeInteger(record[key], `${pathArg}.${key}`, 1);
708
+ }
709
+ }
710
+ if (Object.hasOwn(record, 'transportMessageId')) {
711
+ normalized.transportMessageId = requireIdentifier(record.transportMessageId, `${pathArg}.transportMessageId`);
712
+ }
713
+ if (Object.hasOwn(record, 'error')) {
714
+ normalized.error = normalizeCoreMailErrorData(record.error, `${pathArg}.error`);
715
+ }
716
+ assertOutboundStateFields(normalized.state, normalized, pathArg);
717
+ const hasTransportIdentity = normalized.transportMessageId !== undefined;
718
+ const hasAcceptedAt = normalized.acceptedAt !== undefined;
719
+ if (hasTransportIdentity !== hasAcceptedAt) {
720
+ fail(`${pathArg}.transportMessageId and acceptedAt must appear together`);
721
+ }
722
+ if (normalized.state === 'accepted'
723
+ || normalized.state === 'queued'
724
+ || normalized.state === 'delivering'
725
+ || normalized.state === 'delivered'
726
+ || normalized.state === 'deferred'
727
+ || normalized.state === 'deadLettered') {
728
+ if (!hasTransportIdentity) {
729
+ fail(`${pathArg} state requires transport acceptance fields`);
730
+ }
731
+ }
732
+ else if ((normalized.state === 'preparing'
733
+ || normalized.state === 'uploading'
734
+ || normalized.state === 'ready')
735
+ && hasTransportIdentity) {
736
+ fail(`${pathArg} state must not contain transport acceptance fields`);
737
+ }
738
+ if (normalized.updatedAt < normalized.createdAt
739
+ || (normalized.acceptedAt !== undefined
740
+ && (normalized.acceptedAt < normalized.createdAt
741
+ || normalized.acceptedAt > normalized.updatedAt))
742
+ || (normalized.terminalAt !== undefined
743
+ && (normalized.terminalAt < (normalized.acceptedAt || normalized.createdAt)
744
+ || normalized.terminalAt > normalized.updatedAt))
745
+ || (normalized.nextAttemptAt !== undefined
746
+ && normalized.nextAttemptAt < normalized.updatedAt)) {
747
+ fail(`${pathArg} timestamps are not chronologically ordered`);
748
+ }
749
+ if ((normalized.state === 'ready'
750
+ || normalized.state === 'accepted'
751
+ || normalized.state === 'queued'
752
+ || normalized.state === 'delivering'
753
+ || normalized.state === 'delivered'
754
+ || normalized.state === 'deferred'
755
+ || normalized.state === 'deadLettered'
756
+ || (normalized.state === 'failed' && hasTransportIdentity))
757
+ && normalized.parts.some((entryArg) => entryArg.state !== 'complete')) {
758
+ fail(`${pathArg} state requires every part to be complete`);
759
+ }
760
+ return deepFreezeValue(normalized);
761
+ };
762
+ export const normalizeCoreMailGatewayOutboundStatus = (valueArg, pathArg = 'gatewayStatus') => {
763
+ const record = readRecord(valueArg, pathArg);
764
+ assertKeys(record, pathArg, ['transportMessageId', 'state', 'attempts', 'updatedAt'], ['nextAttemptAt', 'error', 'smtpCode', 'deliveredAt', 'terminalAt']);
765
+ if (record.state !== 'accepted'
766
+ && record.state !== 'queued'
767
+ && record.state !== 'delivering'
768
+ && record.state !== 'delivered'
769
+ && record.state !== 'deferred'
770
+ && record.state !== 'failed'
771
+ && record.state !== 'deadLettered') {
772
+ fail(`${pathArg}.state is invalid`);
773
+ }
774
+ const normalized = {
775
+ transportMessageId: requireIdentifier(record.transportMessageId, `${pathArg}.transportMessageId`),
776
+ state: record.state,
777
+ attempts: requireSafeInteger(record.attempts, `${pathArg}.attempts`, 0),
778
+ updatedAt: requireSafeInteger(record.updatedAt, `${pathArg}.updatedAt`, 1),
779
+ };
780
+ for (const key of ['nextAttemptAt', 'deliveredAt', 'terminalAt']) {
781
+ if (Object.hasOwn(record, key)) {
782
+ normalized[key] = requireSafeInteger(record[key], `${pathArg}.${key}`, 1);
783
+ }
784
+ }
785
+ if (Object.hasOwn(record, 'smtpCode')) {
786
+ normalized.smtpCode = requireSafeInteger(record.smtpCode, `${pathArg}.smtpCode`, 100, 599);
787
+ }
788
+ if (Object.hasOwn(record, 'error')) {
789
+ normalized.error = normalizeCoreMailErrorData(record.error, `${pathArg}.error`);
790
+ }
791
+ assertOutboundStateFields(normalized.state, normalized, pathArg);
792
+ if ((normalized.deliveredAt !== undefined && normalized.deliveredAt > normalized.updatedAt)
793
+ || (normalized.terminalAt !== undefined && normalized.terminalAt > normalized.updatedAt)
794
+ || (normalized.nextAttemptAt !== undefined && normalized.nextAttemptAt < normalized.updatedAt)) {
795
+ fail(`${pathArg} timestamps are not chronologically ordered`);
796
+ }
797
+ return deepFreezeValue(normalized);
798
+ };
799
+ export const normalizeCoreMailInboundDelivery = (valueArg, pathArg = 'inboundDelivery') => {
800
+ const record = readRecord(valueArg, pathArg);
801
+ assertKeys(record, pathArg, [
802
+ 'deliveryId',
803
+ 'transportDeliveryId',
804
+ 'state',
805
+ 'envelope',
806
+ 'rawMime',
807
+ 'receivedAt',
808
+ 'updatedAt',
809
+ ], ['messageId', 'subject', 'acknowledgedAt', 'acknowledgedOutcome']);
810
+ const state = record.state === 'pending'
811
+ || record.state === 'fetching'
812
+ || record.state === 'fetched'
813
+ || record.state === 'acknowledged'
814
+ ? record.state
815
+ : fail(`${pathArg}.state is invalid`);
816
+ const rawMime = readRecord(record.rawMime, `${pathArg}.rawMime`);
817
+ assertKeys(rawMime, `${pathArg}.rawMime`, ['sha256', 'lengthBytes', 'contentType']);
818
+ if (rawMime.contentType !== 'message/rfc822') {
819
+ fail(`${pathArg}.rawMime.contentType must be message/rfc822`);
820
+ }
821
+ const normalized = {
822
+ deliveryId: requireIdentifier(record.deliveryId, `${pathArg}.deliveryId`),
823
+ transportDeliveryId: requireIdentifier(record.transportDeliveryId, `${pathArg}.transportDeliveryId`),
824
+ state,
825
+ envelope: normalizeCoreMailEnvelope(record.envelope, `${pathArg}.envelope`),
826
+ rawMime: {
827
+ sha256: normalizeCoreMailSha256(rawMime.sha256, `${pathArg}.rawMime.sha256`),
828
+ lengthBytes: requireSafeInteger(rawMime.lengthBytes, `${pathArg}.rawMime.lengthBytes`, 1, coreMailLimits.serializedMimeBytes),
829
+ contentType: 'message/rfc822',
830
+ },
831
+ receivedAt: requireSafeInteger(record.receivedAt, `${pathArg}.receivedAt`, 1),
832
+ updatedAt: requireSafeInteger(record.updatedAt, `${pathArg}.updatedAt`, 1),
833
+ };
834
+ if (Object.hasOwn(record, 'messageId')) {
835
+ normalized.messageId = requireDisplayText(record.messageId, `${pathArg}.messageId`, 998);
836
+ }
837
+ if (Object.hasOwn(record, 'subject')) {
838
+ normalized.subject = requireDisplayText(record.subject, `${pathArg}.subject`, coreMailContractLimits.maximumSubjectBytes, true);
839
+ }
840
+ if (state === 'acknowledged') {
841
+ if (!Object.hasOwn(record, 'acknowledgedAt')
842
+ || (record.acknowledgedOutcome !== 'processed' && record.acknowledgedOutcome !== 'discarded')) {
843
+ fail(`${pathArg} acknowledged state fields are incomplete`);
844
+ }
845
+ normalized.acknowledgedAt = requireSafeInteger(record.acknowledgedAt, `${pathArg}.acknowledgedAt`, 1);
846
+ normalized.acknowledgedOutcome = record.acknowledgedOutcome;
847
+ }
848
+ else if (Object.hasOwn(record, 'acknowledgedAt')
849
+ || Object.hasOwn(record, 'acknowledgedOutcome')) {
850
+ fail(`${pathArg} nonacknowledged state contains acknowledgement fields`);
851
+ }
852
+ if (normalized.updatedAt < normalized.receivedAt
853
+ || (normalized.acknowledgedAt !== undefined
854
+ && (normalized.acknowledgedAt < normalized.receivedAt
855
+ || normalized.acknowledgedAt > normalized.updatedAt))) {
856
+ fail(`${pathArg} timestamps are not chronologically ordered`);
857
+ }
858
+ return deepFreezeValue(normalized);
859
+ };
860
+ export const normalizeCoreMailInboundCursor = (valueArg, pathArg = 'inboundCursor') => {
861
+ const cursor = requireString(valueArg, pathArg, coreMailLimits.cursorBytes);
862
+ let decodedCursor;
863
+ try {
864
+ decodedCursor = globalThis.atob(`${cursor.replace(/-/g, '+').replace(/_/g, '/')}${'='.repeat((4 - (cursor.length % 4)) % 4)}`);
865
+ }
866
+ catch {
867
+ return fail(`${pathArg} must be a canonical opaque base64url value`);
868
+ }
869
+ const canonicalCursor = globalThis.btoa(decodedCursor)
870
+ .replace(/\+/g, '-')
871
+ .replace(/\//g, '_')
872
+ .replace(/=+$/u, '');
873
+ if (decodedCursor.length < coreMailLimits.cursorMinimumDecodedBytes
874
+ || canonicalCursor !== cursor) {
875
+ fail(`${pathArg} must be a canonical opaque base64url value`);
876
+ }
877
+ return cursor;
878
+ };
879
+ export const normalizeCoreMailInboundDeliveryPage = (valueArg, pathArg = 'inboundDeliveryPage') => {
880
+ const record = readRecord(valueArg, pathArg);
881
+ assertKeys(record, pathArg, ['deliveries'], ['nextCursor']);
882
+ const deliveries = readArray(record.deliveries, `${pathArg}.deliveries`, coreMailLimits.inboundPageSize).map((entryArg, indexArg) => normalizeCoreMailInboundDelivery(entryArg, `${pathArg}.deliveries[${indexArg}]`));
883
+ if (new Set(deliveries.map((entryArg) => entryArg.deliveryId)).size !== deliveries.length) {
884
+ fail(`${pathArg}.deliveries must contain unique delivery identities`);
885
+ }
886
+ const normalized = { deliveries };
887
+ if (Object.hasOwn(record, 'nextCursor')) {
888
+ normalized.nextCursor = normalizeCoreMailInboundCursor(record.nextCursor, `${pathArg}.nextCursor`);
889
+ }
890
+ if (new TextEncoder().encode(JSON.stringify(normalized)).byteLength
891
+ > coreMailLimits.inboundPageBytes) {
892
+ fail(`${pathArg} exceeds the inbound page byte budget`);
893
+ }
894
+ return deepFreezeValue(normalized);
895
+ };
222
896
  const normalizeUniqueSortedStrings = (valueArg, pathArg, maximumLengthArg, normalizeEntryArg) => {
223
897
  const values = readArray(valueArg, pathArg, maximumLengthArg).map((entryArg, indexArg) => normalizeEntryArg(entryArg, `${pathArg}[${indexArg}]`));
224
898
  if (new Set(values).size !== values.length) {
@@ -240,19 +914,15 @@ const normalizeCapabilities = (valueArg, pathArg) => {
240
914
  };
241
915
  const normalizeLimits = (valueArg, pathArg) => {
242
916
  const record = readRecord(valueArg, pathArg);
243
- assertKeys(record, pathArg, [], ['messagesPerMinute', 'messagesPerDay', 'maxPendingInbound']);
244
- if (Object.keys(record).length === 0) {
245
- fail(`${pathArg} must not be empty`);
246
- }
917
+ assertKeys(record, pathArg, ['messagesPerMinute', 'messagesPerDay', 'maxPendingInbound']);
918
+ const maxima = {
919
+ messagesPerMinute: coreMailContractLimits.maximumMessagesPerMinute,
920
+ messagesPerDay: coreMailContractLimits.maximumMessagesPerDay,
921
+ maxPendingInbound: coreMailContractLimits.maximumPendingInbound,
922
+ };
247
923
  const normalized = {};
248
- for (const key of [
249
- 'messagesPerMinute',
250
- 'messagesPerDay',
251
- 'maxPendingInbound',
252
- ]) {
253
- if (Object.hasOwn(record, key)) {
254
- normalized[key] = requireSafeInteger(record[key], `${pathArg}.${key}`, 1);
255
- }
924
+ for (const key of Object.keys(maxima)) {
925
+ normalized[key] = requireSafeInteger(record[key], `${pathArg}.${key}`, 1, maxima[key]);
256
926
  }
257
927
  return normalized;
258
928
  };
@@ -269,13 +939,16 @@ const normalizeBinding = (valueArg, pathArg) => {
269
939
  'credentials',
270
940
  'allowedSenders',
271
941
  'inboundRecipients',
272
- ], ['defaultSender', 'limits']);
273
- if (record.schemaVersion !== 1) {
274
- fail(`${pathArg}.schemaVersion must be 1`);
942
+ 'limits',
943
+ ], ['defaultSender']);
944
+ if (record.schemaVersion !== 2) {
945
+ fail(`${pathArg}.schemaVersion must be 2`);
275
946
  }
276
- const state = record.state === 'active' || record.state === 'disabled'
947
+ const state = record.state === 'active'
948
+ || record.state === 'draining'
949
+ || record.state === 'disabled'
277
950
  ? record.state
278
- : fail(`${pathArg}.state must be active or disabled`);
951
+ : fail(`${pathArg}.state must be active, draining, or disabled`);
279
952
  const capabilities = normalizeCapabilities(record.capabilities, `${pathArg}.capabilities`);
280
953
  const allowedSenders = normalizeUniqueSortedStrings(record.allowedSenders, `${pathArg}.allowedSenders`, coreMailContractLimits.maximumAllowedSendersPerBinding, requireCanonicalMailbox);
281
954
  const inboundRecipients = normalizeUniqueSortedStrings(record.inboundRecipients, `${pathArg}.inboundRecipients`, coreMailContractLimits.maximumInboundRecipientsPerBinding, requireCanonicalMailbox);
@@ -286,7 +959,7 @@ const normalizeBinding = (valueArg, pathArg) => {
286
959
  fail(`${pathArg}.inboundRecipients requires the inbound capability`);
287
960
  }
288
961
  const normalized = {
289
- schemaVersion: 1,
962
+ schemaVersion: 2,
290
963
  bindingId: requireIdentifier(record.bindingId, `${pathArg}.bindingId`),
291
964
  serviceId: requireIdentifier(record.serviceId, `${pathArg}.serviceId`),
292
965
  tenantId: requireIdentifier(record.tenantId, `${pathArg}.tenantId`),
@@ -296,6 +969,7 @@ const normalizeBinding = (valueArg, pathArg) => {
296
969
  credentials: normalizeCredentialSet(record.credentials, `${pathArg}.credentials`),
297
970
  allowedSenders,
298
971
  inboundRecipients,
972
+ limits: normalizeLimits(record.limits, `${pathArg}.limits`),
299
973
  };
300
974
  if (Object.hasOwn(record, 'defaultSender')) {
301
975
  normalized.defaultSender = requireCanonicalMailbox(record.defaultSender, `${pathArg}.defaultSender`);
@@ -303,9 +977,6 @@ const normalizeBinding = (valueArg, pathArg) => {
303
977
  fail(`${pathArg}.defaultSender must be present in allowedSenders`);
304
978
  }
305
979
  }
306
- if (Object.hasOwn(record, 'limits')) {
307
- normalized.limits = normalizeLimits(record.limits, `${pathArg}.limits`);
308
- }
309
980
  return normalized;
310
981
  };
311
982
  const requireCanonicalUrl = (valueArg, pathArg, protocolArg, originOnlyArg) => {
@@ -337,23 +1008,26 @@ const requireCanonicalUrl = (valueArg, pathArg, protocolArg, originOnlyArg) => {
337
1008
  };
338
1009
  const normalizeGateway = (valueArg, pathArg) => {
339
1010
  const record = readRecord(valueArg, pathArg);
340
- assertKeys(record, pathArg, ['endpointUrl', 'credentialId', 'credentialVersion', 'credentialSecretKey']);
341
- const credentialSecretKey = requireString(record.credentialSecretKey, `${pathArg}.credentialSecretKey`, coreMailContractLimits.maximumEnvironmentKeyBytes);
342
- if (!/^[A-Z][A-Z0-9_]{0,127}$/.test(credentialSecretKey)) {
343
- fail(`${pathArg}.credentialSecretKey must be a canonical environment key`);
344
- }
1011
+ assertKeys(record, pathArg, [
1012
+ 'endpointUrl',
1013
+ 'coreMailTransferOrigin',
1014
+ 'credentialId',
1015
+ 'credentialVersion',
1016
+ 'credentialSecretKey',
1017
+ ]);
345
1018
  return {
346
1019
  endpointUrl: requireCanonicalUrl(record.endpointUrl, `${pathArg}.endpointUrl`, 'wss:', false),
1020
+ coreMailTransferOrigin: requireCanonicalUrl(record.coreMailTransferOrigin, `${pathArg}.coreMailTransferOrigin`, 'https:', true),
347
1021
  credentialId: requireIdentifier(record.credentialId, `${pathArg}.credentialId`),
348
1022
  credentialVersion: requireSafeInteger(record.credentialVersion, `${pathArg}.credentialVersion`, 1),
349
- credentialSecretKey,
1023
+ credentialSecretKey: requireEnvironmentKey(record.credentialSecretKey, `${pathArg}.credentialSecretKey`),
350
1024
  };
351
1025
  };
352
1026
  export const normalizeCoreMailDesiredState = (valueArg) => {
353
1027
  const record = readRecord(valueArg, 'desiredState');
354
- assertKeys(record, 'desiredState', ['schemaVersion', 'configEpoch', 'bindings', 'gateway']);
355
- if (record.schemaVersion !== 1) {
356
- fail('desiredState.schemaVersion must be 1');
1028
+ assertKeys(record, 'desiredState', ['schemaVersion', 'configEpoch', 'bindings', 'gateway', 'cursorKeys']);
1029
+ if (record.schemaVersion !== 2) {
1030
+ fail('desiredState.schemaVersion must be 2');
357
1031
  }
358
1032
  const bindings = readArray(record.bindings, 'desiredState.bindings', coreMailContractLimits.maximumBindings).map((entryArg, indexArg) => normalizeBinding(entryArg, `desiredState.bindings[${indexArg}]`));
359
1033
  const bindingIds = new Set();
@@ -374,11 +1048,101 @@ export const normalizeCoreMailDesiredState = (valueArg) => {
374
1048
  }
375
1049
  bindings.sort((leftArg, rightArg) => compareStrings(leftArg.bindingId, rightArg.bindingId));
376
1050
  return deepFreezeValue({
377
- schemaVersion: 1,
1051
+ schemaVersion: 2,
378
1052
  configEpoch: requireSafeInteger(record.configEpoch, 'desiredState.configEpoch', 1),
379
1053
  bindings,
380
1054
  gateway: normalizeGateway(record.gateway, 'desiredState.gateway'),
1055
+ cursorKeys: normalizeRuntimeKeySet(record.cursorKeys, 'desiredState.cursorKeys'),
1056
+ });
1057
+ };
1058
+ export const normalizeCoreMailReplicaIdentity = (valueArg, pathArg = 'replica') => {
1059
+ const record = readRecord(valueArg, pathArg);
1060
+ assertKeys(record, pathArg, ['taskId', 'serviceId', 'rolloutId', 'rolloutGeneration', 'imageDigest']);
1061
+ return deepFreezeValue({
1062
+ taskId: requireIdentifier(record.taskId, `${pathArg}.taskId`),
1063
+ serviceId: requireIdentifier(record.serviceId, `${pathArg}.serviceId`),
1064
+ rolloutId: requireIdentifier(record.rolloutId, `${pathArg}.rolloutId`),
1065
+ rolloutGeneration: requireSafeInteger(record.rolloutGeneration, `${pathArg}.rolloutGeneration`, 1),
1066
+ imageDigest: normalizeCoreMailSha256(record.imageDigest, `${pathArg}.imageDigest`),
1067
+ });
1068
+ };
1069
+ const normalizeBindingReconciliationStatus = (valueArg, pathArg) => {
1070
+ const record = readRecord(valueArg, pathArg);
1071
+ assertKeys(record, pathArg, [
1072
+ 'bindingId',
1073
+ 'revision',
1074
+ 'state',
1075
+ 'pendingInboundCount',
1076
+ 'activeSessionsByCredential',
1077
+ ]);
1078
+ const state = record.state === 'active'
1079
+ || record.state === 'draining'
1080
+ || record.state === 'disabled'
1081
+ ? record.state
1082
+ : fail(`${pathArg}.state must be active, draining, or disabled`);
1083
+ const activeSessionsByCredential = readArray(record.activeSessionsByCredential, `${pathArg}.activeSessionsByCredential`, coreMailContractLimits.maximumCredentialsPerAuthority).map((entryArg, indexArg) => {
1084
+ const entryPath = `${pathArg}.activeSessionsByCredential[${indexArg}]`;
1085
+ const entry = readRecord(entryArg, entryPath);
1086
+ assertKeys(entry, entryPath, ['credentialId', 'version', 'count']);
1087
+ return {
1088
+ credentialId: requireIdentifier(entry.credentialId, `${entryPath}.credentialId`),
1089
+ version: requireSafeInteger(entry.version, `${entryPath}.version`, 1),
1090
+ count: requireSafeInteger(entry.count, `${entryPath}.count`, 1),
1091
+ };
381
1092
  });
1093
+ if (new Set(activeSessionsByCredential.map((entryArg) => `${entryArg.credentialId}:${entryArg.version}`)).size !== activeSessionsByCredential.length) {
1094
+ fail(`${pathArg}.activeSessionsByCredential contains duplicate identities`);
1095
+ }
1096
+ activeSessionsByCredential.sort((leftArg, rightArg) => leftArg.version - rightArg.version
1097
+ || compareStrings(leftArg.credentialId, rightArg.credentialId));
1098
+ return {
1099
+ bindingId: requireIdentifier(record.bindingId, `${pathArg}.bindingId`),
1100
+ revision: requireSafeInteger(record.revision, `${pathArg}.revision`, 1),
1101
+ state,
1102
+ pendingInboundCount: requireSafeInteger(record.pendingInboundCount, `${pathArg}.pendingInboundCount`, 0, coreMailContractLimits.maximumPendingInbound),
1103
+ activeSessionsByCredential,
1104
+ };
1105
+ };
1106
+ export const normalizeCoreMailReconciliationStatus = (valueArg, pathArg = 'reconciliationStatus') => {
1107
+ const record = readRecord(valueArg, pathArg);
1108
+ assertKeys(record, pathArg, [
1109
+ 'replica',
1110
+ 'state',
1111
+ 'appliedConfigEpoch',
1112
+ 'appliedDesiredStateDigest',
1113
+ 'bindings',
1114
+ 'updatedAt',
1115
+ ], ['errorCode']);
1116
+ const state = record.state === 'applying'
1117
+ || record.state === 'ready'
1118
+ || record.state === 'failed'
1119
+ ? record.state
1120
+ : fail(`${pathArg}.state must be applying, ready, or failed`);
1121
+ const bindings = readArray(record.bindings, `${pathArg}.bindings`, coreMailContractLimits.maximumBindings).map((entryArg, indexArg) => normalizeBindingReconciliationStatus(entryArg, `${pathArg}.bindings[${indexArg}]`));
1122
+ if (new Set(bindings.map((entryArg) => entryArg.bindingId)).size !== bindings.length) {
1123
+ fail(`${pathArg}.bindings contains duplicate binding identities`);
1124
+ }
1125
+ bindings.sort((leftArg, rightArg) => compareStrings(leftArg.bindingId, rightArg.bindingId));
1126
+ const hasErrorCode = Object.hasOwn(record, 'errorCode');
1127
+ if ((state === 'failed') !== hasErrorCode) {
1128
+ fail(`${pathArg}.errorCode must appear exactly for failed state`);
1129
+ }
1130
+ const normalized = {
1131
+ replica: normalizeCoreMailReplicaIdentity(record.replica, `${pathArg}.replica`),
1132
+ state,
1133
+ appliedConfigEpoch: requireSafeInteger(record.appliedConfigEpoch, `${pathArg}.appliedConfigEpoch`, 1),
1134
+ appliedDesiredStateDigest: normalizeCoreMailSha256(record.appliedDesiredStateDigest, `${pathArg}.appliedDesiredStateDigest`),
1135
+ bindings,
1136
+ updatedAt: requireSafeInteger(record.updatedAt, `${pathArg}.updatedAt`, 1),
1137
+ };
1138
+ if (hasErrorCode) {
1139
+ if (typeof record.errorCode !== 'string'
1140
+ || !coreMailErrorCodes.has(record.errorCode)) {
1141
+ fail(`${pathArg}.errorCode is invalid`);
1142
+ }
1143
+ normalized.errorCode = record.errorCode;
1144
+ }
1145
+ return deepFreezeValue(normalized);
382
1146
  };
383
1147
  export const canonicalizeCoreMailDesiredState = (valueArg) => {
384
1148
  return canonicalizeStrictJson(normalizeCoreMailDesiredState(valueArg), fail, 'CoreMail desired state');
@@ -416,4 +1180,4 @@ export const normalizeCoreMailGatewayPeerDesiredState = (valueArg) => {
416
1180
  credentials: normalizeCredentialSet(record.credentials, 'gatewayPeer.credentials'),
417
1181
  });
418
1182
  };
419
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZW1haWwucnVudGltZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL2RhdGEvY29yZW1haWwucnVudGltZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLDRCQUE0QixFQUM1QixlQUFlLEVBQ2Ysd0JBQXdCLEdBQ3pCLE1BQU0sNkJBQTZCLENBQUM7QUFDckMsT0FBTyxFQUNMLGdDQUFnQyxHQVNqQyxNQUFNLGVBQWUsQ0FBQztBQUV2QixNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRyx3QkFBd0IsQ0FBQztBQUVuRSxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ2xELHNCQUFzQixFQUFFLEdBQUc7SUFDM0IsMEJBQTBCLEVBQUUsR0FBRztJQUMvQixvQkFBb0IsRUFBRSxLQUFLO0lBQzNCLG1CQUFtQixFQUFFLEdBQUc7SUFDeEIsZUFBZSxFQUFFLE1BQU07SUFDdkIsOEJBQThCLEVBQUUsRUFBRTtJQUNsQywrQkFBK0IsRUFBRSxLQUFLO0lBQ3RDLGtDQUFrQyxFQUFFLE1BQU07Q0FDbEMsQ0FBQyxDQUFDO0FBRVosTUFBTSxPQUFPLHFCQUFzQixTQUFRLEtBQUs7SUFDOUMsWUFBbUIsU0FBaUI7UUFDbEMsS0FBSyxDQUFDLDRCQUE0QixTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQy9DLElBQUksQ0FBQyxJQUFJLEdBQUcsdUJBQXVCLENBQUM7SUFDdEMsQ0FBQztDQUNGO0FBSUQsTUFBTSxJQUFJLEdBQUcsQ0FBQyxTQUFpQixFQUFTLEVBQUU7SUFDeEMsTUFBTSxJQUFJLHFCQUFxQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzdDLENBQUMsQ0FBQztBQUVGLE1BQU0sY0FBYyxHQUFHLENBQUMsT0FBZSxFQUFFLFFBQWdCLEVBQVUsRUFBRSxDQUNuRSxPQUFPLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxD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
1183
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZW1haWwucnVudGltZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL2RhdGEvY29yZW1haWwucnVudGltZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLDRCQUE0QixFQUM1QixlQUFlLEVBQ2Ysd0JBQXdCLEdBQ3pCLE1BQU0sNkJBQTZCLENBQUM7QUFDckMsT0FBTyxFQUNMLGdDQUFnQyxFQUNoQyxjQUFjLEVBQ2Qsd0JBQXdCLEVBQ3hCLDJCQUEyQixFQUMzQiwrQkFBK0IsR0E2QmhDLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFHLHdCQUF3QixDQUFDO0FBRW5FLE1BQU0sQ0FBQyxNQUFNLGlDQUFpQyxHQUFHLENBQy9DLFFBQStCLEVBQy9CLGVBQStDLEVBQ1IsRUFBRTtJQUN6QyxNQUFNLFVBQVUsR0FBRyxJQUFJLEdBQUcsRUFBOEIsQ0FBQztJQUN6RCxLQUFLLE1BQU0sVUFBVSxJQUFJLENBQUMsVUFBVSxFQUFFLFNBQVMsQ0FBVSxFQUFFLENBQUM7UUFDMUQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUMxQyxTQUFTO1FBQ1gsQ0FBQztRQUNELEtBQUssTUFBTSxTQUFTLElBQUksK0JBQStCLENBQUMsUUFBUSxDQUFDLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUM5RSxVQUFVLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzVCLENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDO0FBQ3hDLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDbEQsc0JBQXNCLEVBQUUsR0FBRztJQUMzQiwwQkFBMEIsRUFBRSxH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