@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.
- package/changelog.md +11 -0
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/data/coremail.d.ts +83 -9
- package/dist_ts/data/coremail.js +67 -1
- package/dist_ts/data/coremail.runtime.d.ts +27 -1
- package/dist_ts/data/coremail.runtime.js +800 -36
- package/dist_ts/requests/coremail.d.ts +12 -5
- package/package.json +1 -1
- package/readme.md +57 -10
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/data/coremail.runtime.ts +1212 -38
- package/ts/data/coremail.ts +120 -8
- package/ts/requests/coremail.ts +13 -4
|
@@ -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
|
|
105
|
-
if (
|
|
106
|
-
return fail(`${pathArg} must be a
|
|
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, [
|
|
244
|
-
|
|
245
|
-
|
|
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
|
-
|
|
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
|
-
|
|
273
|
-
|
|
274
|
-
|
|
942
|
+
'limits',
|
|
943
|
+
], ['defaultSender']);
|
|
944
|
+
if (record.schemaVersion !== 2) {
|
|
945
|
+
fail(`${pathArg}.schemaVersion must be 2`);
|
|
275
946
|
}
|
|
276
|
-
const state = record.state === 'active'
|
|
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:
|
|
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, [
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
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 !==
|
|
356
|
-
fail('desiredState.schemaVersion must be
|
|
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:
|
|
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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
|