@serve.zone/interfaces 27.2.0 → 27.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/changelog.md +10 -0
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/runtime.cloudlylegacydeploymentsettlement.d.ts +513 -5
- package/dist_ts/runtime.cloudlylegacydeploymentsettlement.js +1931 -8
- package/dist_ts/runtime.corestore.d.ts +89 -0
- package/dist_ts/runtime.corestore.js +306 -2
- package/package.json +1 -1
- package/readme.md +78 -1
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/runtime.cloudlylegacydeploymentsettlement.ts +3751 -17
- package/ts/runtime.corestore.ts +608 -0
|
@@ -22,6 +22,9 @@ export const cloudlyLegacyDeploymentSettlementDomains = Object.freeze({
|
|
|
22
22
|
stableOutcomeHmac: 'serve.zone/cloudly-legacy-deployment-settlement/stable-outcome-hmac-v1\0',
|
|
23
23
|
scratchReceiptHmac: 'serve.zone/cloudly-legacy-deployment-settlement/scratch-receipt-hmac-v1\0',
|
|
24
24
|
productionReceiptHmac: 'serve.zone/cloudly-legacy-deployment-settlement/production-receipt-hmac-v1\0',
|
|
25
|
+
productionExecutionAuthorizationHmac: 'serve.zone/cloudly-legacy-deployment-settlement/production-execution-authorization-hmac-v1\0',
|
|
26
|
+
productionReceiptV2Hmac: 'serve.zone/cloudly-legacy-deployment-settlement/production-receipt-hmac-v2\0',
|
|
27
|
+
resolutionHmac: 'serve.zone/cloudly-legacy-deployment-settlement/resolution-recovery-attestation-hmac-v1\0',
|
|
25
28
|
});
|
|
26
29
|
/** Safe error surface: code and schema path are finite and never contain values. */
|
|
27
30
|
export class CloudlyLegacyDeploymentSettlementCodecError extends Error {
|
|
@@ -62,6 +65,38 @@ const authorityMetadataKeys = [
|
|
|
62
65
|
'restoredDataSha256',
|
|
63
66
|
'digestProofSha256',
|
|
64
67
|
];
|
|
68
|
+
const authorityMetadataOptionalKeys = [
|
|
69
|
+
'executionProtocol',
|
|
70
|
+
'sourceAuthority',
|
|
71
|
+
'sourceAuthenticatedPlanSha256',
|
|
72
|
+
'sourceRequestBundleSha256',
|
|
73
|
+
'scratchReceiptSha256',
|
|
74
|
+
];
|
|
75
|
+
const authorityMetadataCrossAuthorityKeys = [
|
|
76
|
+
'schemaVersion',
|
|
77
|
+
'operationId',
|
|
78
|
+
'keyVersion',
|
|
79
|
+
'settlementId',
|
|
80
|
+
'maintenanceImageDigest',
|
|
81
|
+
'sourceImageDigest',
|
|
82
|
+
'targetImageDigest',
|
|
83
|
+
'targetVersion',
|
|
84
|
+
'targetManifestSha256',
|
|
85
|
+
'targetConfigSha256',
|
|
86
|
+
'backupId',
|
|
87
|
+
'backupSnapshotIdSha256',
|
|
88
|
+
'backupProofSha256',
|
|
89
|
+
'runId',
|
|
90
|
+
'rehearsalId',
|
|
91
|
+
'scratchServiceId',
|
|
92
|
+
'allocationId',
|
|
93
|
+
'allocationGeneration',
|
|
94
|
+
'allocationBindingSha256',
|
|
95
|
+
'allocationReceiptSha256',
|
|
96
|
+
'sourceDataSha256',
|
|
97
|
+
'restoredDataSha256',
|
|
98
|
+
'digestProofSha256',
|
|
99
|
+
];
|
|
65
100
|
const classificationKeys = [
|
|
66
101
|
'image-recorded-not-current',
|
|
67
102
|
'image-recorded-current-failed',
|
|
@@ -258,7 +293,8 @@ const normalizeAuthorityReferenceInternal = (valueArg, pathArg) => {
|
|
|
258
293
|
export const normalizeCloudlyLegacyDeploymentSettlementAuthorityReference = (valueArg) => finalize(normalizeAuthorityReferenceInternal(valueArg, 'authorityReference'), cloudlyLegacyDeploymentSettlementLimits.maximumAuthorityBytes, 'authorityReference');
|
|
259
294
|
const normalizeAuthorityMetadataInternal = (valueArg, pathArg) => {
|
|
260
295
|
const value = readRecord(valueArg, pathArg);
|
|
261
|
-
|
|
296
|
+
const optionalKeys = authorityMetadataOptionalKeys.filter((keyArg) => Object.hasOwn(value, keyArg));
|
|
297
|
+
assertExactKeys(value, [...authorityMetadataKeys, ...optionalKeys], pathArg);
|
|
262
298
|
if (value.schemaVersion !== 1 || value.keyVersion !== 1) {
|
|
263
299
|
fail('INVALID_VALUE', `${pathArg}.schemaVersion`);
|
|
264
300
|
}
|
|
@@ -274,11 +310,35 @@ const normalizeAuthorityMetadataInternal = (valueArg, pathArg) => {
|
|
|
274
310
|
if (sourceDataSha256 !== restoredDataSha256) {
|
|
275
311
|
fail('CROSS_FIELD_MISMATCH', `${pathArg}.restoredDataSha256`);
|
|
276
312
|
}
|
|
277
|
-
|
|
313
|
+
const predecessorKeys = authorityMetadataOptionalKeys.filter((keyArg) => (keyArg !== 'executionProtocol'));
|
|
314
|
+
const hasExecutionProtocol = Object.hasOwn(value, 'executionProtocol');
|
|
315
|
+
const predecessorKeyCount = predecessorKeys.filter((keyArg) => Object.hasOwn(value, keyArg)).length;
|
|
316
|
+
if (hasExecutionProtocol && value.executionProtocol !== 'fenced-attempt-v1') {
|
|
317
|
+
fail('INVALID_VALUE', `${pathArg}.executionProtocol`);
|
|
318
|
+
}
|
|
319
|
+
if (predecessorKeyCount !== 0 && predecessorKeyCount !== predecessorKeys.length) {
|
|
320
|
+
fail('INVALID_SCHEMA', `${pathArg}.sourceAuthority`);
|
|
321
|
+
}
|
|
322
|
+
if (predecessorKeyCount > 0 && !hasExecutionProtocol) {
|
|
323
|
+
fail('CROSS_FIELD_MISMATCH', `${pathArg}.executionProtocol`);
|
|
324
|
+
}
|
|
325
|
+
const operationId = readIdentifier(value.operationId, `${pathArg}.operationId`);
|
|
326
|
+
const authorityId = readIdentifier(value.authorityId, `${pathArg}.authorityId`);
|
|
327
|
+
const keyId = readIdentifier(value.keyId, `${pathArg}.keyId`);
|
|
328
|
+
const sourceAuthority = predecessorKeyCount === 0
|
|
329
|
+
? undefined
|
|
330
|
+
: normalizeAuthorityReferenceInternal(value.sourceAuthority, `${pathArg}.sourceAuthority`);
|
|
331
|
+
if (sourceAuthority
|
|
332
|
+
&& (sourceAuthority.operationId !== operationId
|
|
333
|
+
|| sourceAuthority.authorityId === authorityId
|
|
334
|
+
|| sourceAuthority.keyId === keyId)) {
|
|
335
|
+
fail('CROSS_FIELD_MISMATCH', `${pathArg}.sourceAuthority`);
|
|
336
|
+
}
|
|
337
|
+
const common = {
|
|
278
338
|
schemaVersion: 1,
|
|
279
|
-
operationId
|
|
280
|
-
authorityId
|
|
281
|
-
keyId
|
|
339
|
+
operationId,
|
|
340
|
+
authorityId,
|
|
341
|
+
keyId,
|
|
282
342
|
keyVersion: 1,
|
|
283
343
|
settlementId: readIdentifier(value.settlementId, `${pathArg}.settlementId`),
|
|
284
344
|
issuedAt,
|
|
@@ -303,6 +363,23 @@ const normalizeAuthorityMetadataInternal = (valueArg, pathArg) => {
|
|
|
303
363
|
restoredDataSha256,
|
|
304
364
|
digestProofSha256: readSha256(value.digestProofSha256, `${pathArg}.digestProofSha256`),
|
|
305
365
|
};
|
|
366
|
+
if (!hasExecutionProtocol) {
|
|
367
|
+
return common;
|
|
368
|
+
}
|
|
369
|
+
if (!sourceAuthority) {
|
|
370
|
+
return {
|
|
371
|
+
...common,
|
|
372
|
+
executionProtocol: 'fenced-attempt-v1',
|
|
373
|
+
};
|
|
374
|
+
}
|
|
375
|
+
return {
|
|
376
|
+
...common,
|
|
377
|
+
executionProtocol: 'fenced-attempt-v1',
|
|
378
|
+
sourceAuthority,
|
|
379
|
+
sourceAuthenticatedPlanSha256: readSha256(value.sourceAuthenticatedPlanSha256, `${pathArg}.sourceAuthenticatedPlanSha256`),
|
|
380
|
+
sourceRequestBundleSha256: readSha256(value.sourceRequestBundleSha256, `${pathArg}.sourceRequestBundleSha256`),
|
|
381
|
+
scratchReceiptSha256: readSha256(value.scratchReceiptSha256, `${pathArg}.scratchReceiptSha256`),
|
|
382
|
+
};
|
|
306
383
|
};
|
|
307
384
|
export const normalizeCloudlyLegacyDeploymentSettlementAuthorityMetadata = (valueArg) => finalize(normalizeAuthorityMetadataInternal(valueArg, 'authorityMetadata'), cloudlyLegacyDeploymentSettlementLimits.maximumAuthorityBytes, 'authorityMetadata');
|
|
308
385
|
export const encodeCloudlyLegacyDeploymentSettlementAuthorityMetadata = (valueArg) => encodeNormalized(normalizeCloudlyLegacyDeploymentSettlementAuthorityMetadata(valueArg), 'authorityMetadata');
|
|
@@ -327,6 +404,49 @@ export const normalizeCloudlyLegacyDeploymentSettlementAuthorityReferenceForMeta
|
|
|
327
404
|
}
|
|
328
405
|
return reference;
|
|
329
406
|
};
|
|
407
|
+
const normalizeFencedSourceAuthorityMetadata = (metadataArg, pathArg) => {
|
|
408
|
+
const metadata = normalizeCloudlyLegacyDeploymentSettlementAuthorityMetadata(metadataArg);
|
|
409
|
+
if (metadata.executionProtocol !== 'fenced-attempt-v1'
|
|
410
|
+
|| Object.hasOwn(metadata, 'sourceAuthority')) {
|
|
411
|
+
fail('CROSS_FIELD_MISMATCH', pathArg);
|
|
412
|
+
}
|
|
413
|
+
return metadata;
|
|
414
|
+
};
|
|
415
|
+
const normalizeProductionAuthorityMetadataPair = (productionMetadataArg, sourceMetadataArg) => {
|
|
416
|
+
const productionMetadata = normalizeCloudlyLegacyDeploymentSettlementAuthorityMetadata(productionMetadataArg);
|
|
417
|
+
const sourceMetadata = normalizeFencedSourceAuthorityMetadata(sourceMetadataArg, 'sourceAuthorityMetadata');
|
|
418
|
+
if (productionMetadata.executionProtocol !== 'fenced-attempt-v1'
|
|
419
|
+
|| !Object.hasOwn(productionMetadata, 'sourceAuthority')) {
|
|
420
|
+
fail('CROSS_FIELD_MISMATCH', 'productionAuthorityMetadata');
|
|
421
|
+
}
|
|
422
|
+
const fencedSourceMetadata = sourceMetadata;
|
|
423
|
+
const fencedProductionMetadata = productionMetadata;
|
|
424
|
+
const sourceAuthority = createCloudlyLegacyDeploymentSettlementAuthorityReference(fencedSourceMetadata);
|
|
425
|
+
const productionAuthority = createCloudlyLegacyDeploymentSettlementAuthorityReference(fencedProductionMetadata);
|
|
426
|
+
const sourceContext = Object.fromEntries(authorityMetadataCrossAuthorityKeys.map((keyArg) => [
|
|
427
|
+
keyArg,
|
|
428
|
+
fencedSourceMetadata[keyArg],
|
|
429
|
+
]));
|
|
430
|
+
const productionContext = Object.fromEntries(authorityMetadataCrossAuthorityKeys.map((keyArg) => [
|
|
431
|
+
keyArg,
|
|
432
|
+
fencedProductionMetadata[keyArg],
|
|
433
|
+
]));
|
|
434
|
+
if (canonicalize(fencedProductionMetadata.sourceAuthority, 'productionMetadata.sourceAuthority')
|
|
435
|
+
!== canonicalize(sourceAuthority, 'sourceMetadata.authority')
|
|
436
|
+
|| canonicalize(productionAuthority, 'productionMetadata.authority')
|
|
437
|
+
=== canonicalize(sourceAuthority, 'sourceMetadata.authority')
|
|
438
|
+
|| fencedProductionMetadata.authorityId === fencedSourceMetadata.authorityId
|
|
439
|
+
|| fencedProductionMetadata.keyId === fencedSourceMetadata.keyId
|
|
440
|
+
|| canonicalize(productionContext, 'productionMetadata.context')
|
|
441
|
+
!== canonicalize(sourceContext, 'sourceMetadata.context')) {
|
|
442
|
+
fail('CROSS_FIELD_MISMATCH', 'productionAuthorityMetadata.sourceAuthority');
|
|
443
|
+
}
|
|
444
|
+
return {
|
|
445
|
+
productionMetadata: fencedProductionMetadata,
|
|
446
|
+
sourceMetadata: fencedSourceMetadata,
|
|
447
|
+
};
|
|
448
|
+
};
|
|
449
|
+
export const normalizeCloudlyLegacyDeploymentSettlementProductionAuthorityMetadataForSourceAuthority = (productionMetadataArg, sourceMetadataArg) => (normalizeProductionAuthorityMetadataPair(productionMetadataArg, sourceMetadataArg).productionMetadata);
|
|
330
450
|
export const normalizeCloudlyLegacyDeploymentSettlementAuthorityHandoffPlaintext = (valueArg) => {
|
|
331
451
|
const value = readRecord(valueArg, 'authorityHandoffPlaintext');
|
|
332
452
|
assertExactKeys(value, [
|
|
@@ -353,8 +473,13 @@ export const normalizeCloudlyLegacyDeploymentSettlementAuthorityHandoffPlaintext
|
|
|
353
473
|
fail('INVALID_VALUE', 'authorityHandoffPlaintext.hmacKeyPlaintext');
|
|
354
474
|
}
|
|
355
475
|
const keyBytes = Buffer.from(keyValue, 'base64url');
|
|
356
|
-
|
|
357
|
-
|
|
476
|
+
try {
|
|
477
|
+
if (keyBytes.byteLength !== 32 || keyBytes.toString('base64url') !== keyValue) {
|
|
478
|
+
fail('INVALID_VALUE', 'authorityHandoffPlaintext.hmacKeyPlaintext.value');
|
|
479
|
+
}
|
|
480
|
+
}
|
|
481
|
+
finally {
|
|
482
|
+
keyBytes.fill(0);
|
|
358
483
|
}
|
|
359
484
|
return finalize({
|
|
360
485
|
schemaVersion: 1,
|
|
@@ -365,6 +490,55 @@ export const normalizeCloudlyLegacyDeploymentSettlementAuthorityHandoffPlaintext
|
|
|
365
490
|
}, cloudlyLegacyDeploymentSettlementLimits.maximumAuthorityBytes, 'authorityHandoffPlaintext');
|
|
366
491
|
};
|
|
367
492
|
export const encodeCloudlyLegacyDeploymentSettlementAuthorityHandoffPlaintext = (valueArg) => encodeNormalized(normalizeCloudlyLegacyDeploymentSettlementAuthorityHandoffPlaintext(valueArg), 'authorityHandoffPlaintext');
|
|
493
|
+
/**
|
|
494
|
+
* Private in-process stdio handoff verification only. Do not persist or log the
|
|
495
|
+
* handoff or returned verifier; discard both as soon as the stdio exchange ends.
|
|
496
|
+
*/
|
|
497
|
+
export const createCloudlyLegacyDeploymentSettlementStdioHandoffHmacVerifier = (handoffArg) => {
|
|
498
|
+
const handoff = normalizeCloudlyLegacyDeploymentSettlementAuthorityHandoffPlaintext(handoffArg);
|
|
499
|
+
const authorityCanonical = canonicalize(handoff.authorityReference, 'stdioHandoffHmacVerifier.authority');
|
|
500
|
+
const keyValue = handoff.hmacKeyPlaintext.value;
|
|
501
|
+
return (inputArg) => {
|
|
502
|
+
let keyBytes;
|
|
503
|
+
let suppliedMacBytes;
|
|
504
|
+
let expectedMacBytes;
|
|
505
|
+
try {
|
|
506
|
+
if (!(inputArg.hmacInput instanceof Uint8Array)
|
|
507
|
+
|| canonicalize(inputArg.authority, 'stdioHandoffHmacVerifier.input.authority')
|
|
508
|
+
!== authorityCanonical
|
|
509
|
+
|| !macPattern.test(inputArg.mac)) {
|
|
510
|
+
return false;
|
|
511
|
+
}
|
|
512
|
+
const domainBytes = Buffer.from(inputArg.domain, 'utf8');
|
|
513
|
+
const hmacInputBytes = Buffer.from(inputArg.hmacInput);
|
|
514
|
+
if (hmacInputBytes.byteLength < domainBytes.byteLength
|
|
515
|
+
|| !hmacInputBytes.subarray(0, domainBytes.byteLength).equals(domainBytes)) {
|
|
516
|
+
return false;
|
|
517
|
+
}
|
|
518
|
+
keyBytes = Buffer.from(keyValue, 'base64url');
|
|
519
|
+
suppliedMacBytes = Buffer.from(inputArg.mac, 'base64url');
|
|
520
|
+
if (keyBytes.byteLength !== 32
|
|
521
|
+
|| keyBytes.toString('base64url') !== keyValue
|
|
522
|
+
|| suppliedMacBytes.byteLength !== 32
|
|
523
|
+
|| suppliedMacBytes.toString('base64url') !== inputArg.mac) {
|
|
524
|
+
return false;
|
|
525
|
+
}
|
|
526
|
+
expectedMacBytes = plugins.crypto
|
|
527
|
+
.createHmac('sha256', keyBytes)
|
|
528
|
+
.update(hmacInputBytes)
|
|
529
|
+
.digest();
|
|
530
|
+
return plugins.crypto.timingSafeEqual(expectedMacBytes, suppliedMacBytes);
|
|
531
|
+
}
|
|
532
|
+
catch {
|
|
533
|
+
return false;
|
|
534
|
+
}
|
|
535
|
+
finally {
|
|
536
|
+
keyBytes?.fill(0);
|
|
537
|
+
suppliedMacBytes?.fill(0);
|
|
538
|
+
expectedMacBytes?.fill(0);
|
|
539
|
+
}
|
|
540
|
+
};
|
|
541
|
+
};
|
|
368
542
|
const normalizeClassificationCounts = (valueArg, pathArg) => {
|
|
369
543
|
const value = readRecord(valueArg, pathArg);
|
|
370
544
|
assertExactKeys(value, classificationKeys, pathArg);
|
|
@@ -1375,5 +1549,1754 @@ export const normalizeCloudlyLegacyDeploymentSettlementProductionReceiptStructur
|
|
|
1375
1549
|
}
|
|
1376
1550
|
return receipt;
|
|
1377
1551
|
};
|
|
1552
|
+
const requestBundleKeys = [
|
|
1553
|
+
'schemaVersion',
|
|
1554
|
+
'kind',
|
|
1555
|
+
'authenticatedRehearsalBinding',
|
|
1556
|
+
'authenticatedRequest',
|
|
1557
|
+
];
|
|
1558
|
+
export const normalizeCloudlyLegacyDeploymentSettlementRequestBundle = (valueArg) => {
|
|
1559
|
+
const value = readRecord(valueArg, 'requestBundle');
|
|
1560
|
+
assertExactKeys(value, requestBundleKeys, 'requestBundle');
|
|
1561
|
+
if (value.schemaVersion !== 1
|
|
1562
|
+
|| value.kind !== 'cloudly-legacy-deployment-settlement-request-bundle') {
|
|
1563
|
+
fail('INVALID_VALUE', 'requestBundle.kind');
|
|
1564
|
+
}
|
|
1565
|
+
const authenticatedRehearsalBinding = normalizeCloudlyLegacyDeploymentSettlementAuthenticatedRehearsalBindingStructure(value.authenticatedRehearsalBinding);
|
|
1566
|
+
const authenticatedRequest = normalizeCloudlyLegacyDeploymentSettlementAuthenticatedProductionRequestStructure(value.authenticatedRequest);
|
|
1567
|
+
if (canonicalize(authenticatedRehearsalBinding.authority, 'requestBundle.binding.authority')
|
|
1568
|
+
!== canonicalize(authenticatedRequest.authority, 'requestBundle.request.authority')
|
|
1569
|
+
|| canonicalize(authenticatedRehearsalBinding.payload, 'requestBundle.binding.payload') !== canonicalize(authenticatedRequest.payload.rehearsalBinding, 'requestBundle.request.rehearsalBinding')
|
|
1570
|
+
|| authenticatedRehearsalBinding.payloadSha256
|
|
1571
|
+
!== authenticatedRequest.payload.rehearsalBindingSha256) {
|
|
1572
|
+
fail('CROSS_FIELD_MISMATCH', 'requestBundle.authenticatedRehearsalBinding');
|
|
1573
|
+
}
|
|
1574
|
+
return finalize({
|
|
1575
|
+
schemaVersion: 1,
|
|
1576
|
+
kind: 'cloudly-legacy-deployment-settlement-request-bundle',
|
|
1577
|
+
authenticatedRehearsalBinding,
|
|
1578
|
+
authenticatedRequest,
|
|
1579
|
+
}, cloudlyLegacyDeploymentSettlementLimits.maximumAuthenticatedArtifactBytes * 2, 'requestBundle');
|
|
1580
|
+
};
|
|
1581
|
+
export const encodeCloudlyLegacyDeploymentSettlementRequestBundle = (valueArg) => encodeNormalized(normalizeCloudlyLegacyDeploymentSettlementRequestBundle(valueArg), 'requestBundle');
|
|
1582
|
+
export const digestCloudlyLegacyDeploymentSettlementRequestBundle = (valueArg) => digestBytes(encodeCloudlyLegacyDeploymentSettlementRequestBundle(valueArg));
|
|
1583
|
+
const executionAttemptIdentityKeys = [
|
|
1584
|
+
'schemaVersion',
|
|
1585
|
+
'kind',
|
|
1586
|
+
'attemptId',
|
|
1587
|
+
'purpose',
|
|
1588
|
+
'operationId',
|
|
1589
|
+
'settlementId',
|
|
1590
|
+
'executionAuthority',
|
|
1591
|
+
'sourceAuthority',
|
|
1592
|
+
'authenticatedPlanSha256',
|
|
1593
|
+
'requestBundleSha256',
|
|
1594
|
+
'scratchReceiptSha256',
|
|
1595
|
+
];
|
|
1596
|
+
const executionAttemptIdentitySeed = (valueArg) => ({
|
|
1597
|
+
schemaVersion: valueArg.schemaVersion,
|
|
1598
|
+
kind: valueArg.kind,
|
|
1599
|
+
purpose: valueArg.purpose,
|
|
1600
|
+
operationId: valueArg.operationId,
|
|
1601
|
+
settlementId: valueArg.settlementId,
|
|
1602
|
+
executionAuthority: valueArg.executionAuthority,
|
|
1603
|
+
sourceAuthority: valueArg.sourceAuthority,
|
|
1604
|
+
authenticatedPlanSha256: valueArg.authenticatedPlanSha256,
|
|
1605
|
+
requestBundleSha256: valueArg.requestBundleSha256,
|
|
1606
|
+
scratchReceiptSha256: valueArg.scratchReceiptSha256,
|
|
1607
|
+
});
|
|
1608
|
+
const createExecutionAttemptId = (valueArg) => `settlement-attempt-${digestBytes(encodeNormalized(executionAttemptIdentitySeed(valueArg), 'executionAttemptIdentity.seed')).slice(0, 40)}`;
|
|
1609
|
+
const normalizeExecutionAttemptIdentityInternal = (valueArg, pathArg) => {
|
|
1610
|
+
const value = readRecord(valueArg, pathArg);
|
|
1611
|
+
assertExactKeys(value, executionAttemptIdentityKeys, pathArg);
|
|
1612
|
+
if (value.schemaVersion !== 1
|
|
1613
|
+
|| value.kind !== 'cloudly-legacy-deployment-settlement-execution-attempt-identity') {
|
|
1614
|
+
fail('INVALID_VALUE', `${pathArg}.kind`);
|
|
1615
|
+
}
|
|
1616
|
+
const purpose = readLiteral(value.purpose, ['scratch-rehearsal', 'production'], `${pathArg}.purpose`);
|
|
1617
|
+
const operationId = readIdentifier(value.operationId, `${pathArg}.operationId`);
|
|
1618
|
+
const executionAuthority = normalizeAuthorityReferenceInternal(value.executionAuthority, `${pathArg}.executionAuthority`);
|
|
1619
|
+
const sourceAuthority = normalizeAuthorityReferenceInternal(value.sourceAuthority, `${pathArg}.sourceAuthority`);
|
|
1620
|
+
const usesSameAuthority = canonicalize(executionAuthority, `${pathArg}.executionAuthority`)
|
|
1621
|
+
=== canonicalize(sourceAuthority, `${pathArg}.sourceAuthority`);
|
|
1622
|
+
if (executionAuthority.operationId !== operationId
|
|
1623
|
+
|| sourceAuthority.operationId !== operationId
|
|
1624
|
+
|| (purpose === 'scratch-rehearsal') !== usesSameAuthority) {
|
|
1625
|
+
fail('CROSS_FIELD_MISMATCH', `${pathArg}.executionAuthority`);
|
|
1626
|
+
}
|
|
1627
|
+
const scratchReceiptSha256 = value.scratchReceiptSha256 === null
|
|
1628
|
+
? null
|
|
1629
|
+
: readSha256(value.scratchReceiptSha256, `${pathArg}.scratchReceiptSha256`);
|
|
1630
|
+
if ((purpose === 'production') !== (scratchReceiptSha256 !== null)) {
|
|
1631
|
+
fail('CROSS_FIELD_MISMATCH', `${pathArg}.scratchReceiptSha256`);
|
|
1632
|
+
}
|
|
1633
|
+
const identityWithoutId = {
|
|
1634
|
+
schemaVersion: 1,
|
|
1635
|
+
kind: 'cloudly-legacy-deployment-settlement-execution-attempt-identity',
|
|
1636
|
+
purpose,
|
|
1637
|
+
operationId,
|
|
1638
|
+
settlementId: readIdentifier(value.settlementId, `${pathArg}.settlementId`),
|
|
1639
|
+
executionAuthority,
|
|
1640
|
+
sourceAuthority,
|
|
1641
|
+
authenticatedPlanSha256: readSha256(value.authenticatedPlanSha256, `${pathArg}.authenticatedPlanSha256`),
|
|
1642
|
+
requestBundleSha256: readSha256(value.requestBundleSha256, `${pathArg}.requestBundleSha256`),
|
|
1643
|
+
scratchReceiptSha256,
|
|
1644
|
+
};
|
|
1645
|
+
const attemptId = readIdentifier(value.attemptId, `${pathArg}.attemptId`);
|
|
1646
|
+
if (attemptId !== createExecutionAttemptId(identityWithoutId)) {
|
|
1647
|
+
fail('CROSS_FIELD_MISMATCH', `${pathArg}.attemptId`);
|
|
1648
|
+
}
|
|
1649
|
+
return { ...identityWithoutId, attemptId };
|
|
1650
|
+
};
|
|
1651
|
+
export function createCloudlyLegacyDeploymentSettlementExecutionAttemptIdentity(valueArg) {
|
|
1652
|
+
const seed = {
|
|
1653
|
+
schemaVersion: 1,
|
|
1654
|
+
kind: 'cloudly-legacy-deployment-settlement-execution-attempt-identity',
|
|
1655
|
+
purpose: valueArg.purpose,
|
|
1656
|
+
operationId: valueArg.operationId,
|
|
1657
|
+
settlementId: valueArg.settlementId,
|
|
1658
|
+
executionAuthority: valueArg.executionAuthority,
|
|
1659
|
+
sourceAuthority: valueArg.sourceAuthority,
|
|
1660
|
+
authenticatedPlanSha256: valueArg.authenticatedPlanSha256,
|
|
1661
|
+
requestBundleSha256: valueArg.requestBundleSha256,
|
|
1662
|
+
scratchReceiptSha256: valueArg.scratchReceiptSha256,
|
|
1663
|
+
};
|
|
1664
|
+
return normalizeCloudlyLegacyDeploymentSettlementExecutionAttemptIdentity({
|
|
1665
|
+
...seed,
|
|
1666
|
+
attemptId: createExecutionAttemptId(seed),
|
|
1667
|
+
});
|
|
1668
|
+
}
|
|
1669
|
+
export const normalizeCloudlyLegacyDeploymentSettlementExecutionAttemptIdentity = (valueArg) => finalize(normalizeExecutionAttemptIdentityInternal(valueArg, 'executionAttemptIdentity'), cloudlyLegacyDeploymentSettlementLimits.maximumAuthorityBytes, 'executionAttemptIdentity');
|
|
1670
|
+
export const encodeCloudlyLegacyDeploymentSettlementExecutionAttemptIdentity = (valueArg) => encodeNormalized(normalizeCloudlyLegacyDeploymentSettlementExecutionAttemptIdentity(valueArg), 'executionAttemptIdentity');
|
|
1671
|
+
export const digestCloudlyLegacyDeploymentSettlementExecutionAttemptIdentity = (valueArg) => digestBytes(encodeCloudlyLegacyDeploymentSettlementExecutionAttemptIdentity(valueArg));
|
|
1672
|
+
const normalizeExecutionAttemptObservationInternal = (valueArg, pathArg) => {
|
|
1673
|
+
const value = readRecord(valueArg, pathArg);
|
|
1674
|
+
const state = readLiteral(value.state, ['prepared', 'committed', 'aborted'], `${pathArg}.state`);
|
|
1675
|
+
assertExactKeys(value, [
|
|
1676
|
+
'schemaVersion',
|
|
1677
|
+
'kind',
|
|
1678
|
+
'identity',
|
|
1679
|
+
'state',
|
|
1680
|
+
'preparedAt',
|
|
1681
|
+
...(state === 'committed' ? ['resolvedAt', 'receiptSchemaVersion', 'receiptSha256'] : []),
|
|
1682
|
+
...(state === 'aborted' ? ['resolvedAt'] : []),
|
|
1683
|
+
], pathArg);
|
|
1684
|
+
if (value.schemaVersion !== 1
|
|
1685
|
+
|| value.kind !== 'cloudly-legacy-deployment-settlement-execution-attempt-observation') {
|
|
1686
|
+
fail('INVALID_VALUE', `${pathArg}.kind`);
|
|
1687
|
+
}
|
|
1688
|
+
const identity = normalizeExecutionAttemptIdentityInternal(value.identity, `${pathArg}.identity`);
|
|
1689
|
+
const preparedAt = readInteger(value.preparedAt, `${pathArg}.preparedAt`, 1);
|
|
1690
|
+
if (state === 'prepared') {
|
|
1691
|
+
return {
|
|
1692
|
+
schemaVersion: 1,
|
|
1693
|
+
kind: 'cloudly-legacy-deployment-settlement-execution-attempt-observation',
|
|
1694
|
+
identity,
|
|
1695
|
+
state,
|
|
1696
|
+
preparedAt,
|
|
1697
|
+
};
|
|
1698
|
+
}
|
|
1699
|
+
const resolvedAt = readInteger(value.resolvedAt, `${pathArg}.resolvedAt`, preparedAt);
|
|
1700
|
+
if (state === 'aborted') {
|
|
1701
|
+
return {
|
|
1702
|
+
schemaVersion: 1,
|
|
1703
|
+
kind: 'cloudly-legacy-deployment-settlement-execution-attempt-observation',
|
|
1704
|
+
identity,
|
|
1705
|
+
state,
|
|
1706
|
+
preparedAt,
|
|
1707
|
+
resolvedAt,
|
|
1708
|
+
};
|
|
1709
|
+
}
|
|
1710
|
+
if (value.receiptSchemaVersion !== 1 && value.receiptSchemaVersion !== 2) {
|
|
1711
|
+
fail('INVALID_VALUE', `${pathArg}.receiptSchemaVersion`);
|
|
1712
|
+
}
|
|
1713
|
+
const receiptSchemaVersion = value.receiptSchemaVersion;
|
|
1714
|
+
return {
|
|
1715
|
+
schemaVersion: 1,
|
|
1716
|
+
kind: 'cloudly-legacy-deployment-settlement-execution-attempt-observation',
|
|
1717
|
+
identity,
|
|
1718
|
+
state,
|
|
1719
|
+
preparedAt,
|
|
1720
|
+
resolvedAt,
|
|
1721
|
+
receiptSchemaVersion,
|
|
1722
|
+
receiptSha256: readSha256(value.receiptSha256, `${pathArg}.receiptSha256`),
|
|
1723
|
+
};
|
|
1724
|
+
};
|
|
1725
|
+
export const normalizeCloudlyLegacyDeploymentSettlementExecutionAttemptObservation = (valueArg) => finalize(normalizeExecutionAttemptObservationInternal(valueArg, 'executionAttemptObservation'), cloudlyLegacyDeploymentSettlementLimits.maximumAuthorityBytes, 'executionAttemptObservation');
|
|
1726
|
+
export const encodeCloudlyLegacyDeploymentSettlementExecutionAttemptObservation = (valueArg) => encodeNormalized(normalizeCloudlyLegacyDeploymentSettlementExecutionAttemptObservation(valueArg), 'executionAttemptObservation');
|
|
1727
|
+
export const digestCloudlyLegacyDeploymentSettlementExecutionAttemptObservation = (valueArg) => digestBytes(encodeCloudlyLegacyDeploymentSettlementExecutionAttemptObservation(valueArg));
|
|
1728
|
+
const productionExecutionAuthorizationPayloadKeys = [
|
|
1729
|
+
'schemaVersion',
|
|
1730
|
+
'kind',
|
|
1731
|
+
'authority',
|
|
1732
|
+
'sourceAuthority',
|
|
1733
|
+
'executionAttempt',
|
|
1734
|
+
'authenticatedPlanSha256',
|
|
1735
|
+
'requestBundleSha256',
|
|
1736
|
+
'scratchReceiptSha256',
|
|
1737
|
+
'maintenanceImageDigest',
|
|
1738
|
+
'operationId',
|
|
1739
|
+
'settlementId',
|
|
1740
|
+
'runId',
|
|
1741
|
+
'rehearsalId',
|
|
1742
|
+
'scratchServiceId',
|
|
1743
|
+
'allocationId',
|
|
1744
|
+
'allocationGeneration',
|
|
1745
|
+
'allocationBindingSha256',
|
|
1746
|
+
'allocationReceiptSha256',
|
|
1747
|
+
'sourceImageDigest',
|
|
1748
|
+
'targetImageDigest',
|
|
1749
|
+
'requestedAt',
|
|
1750
|
+
'approvedAt',
|
|
1751
|
+
];
|
|
1752
|
+
const unsignedProductionExecutionAuthorizationKeys = [
|
|
1753
|
+
...productionExecutionAuthorizationPayloadKeys,
|
|
1754
|
+
'payloadSha256',
|
|
1755
|
+
];
|
|
1756
|
+
const productionExecutionAuthorizationKeys = [
|
|
1757
|
+
...unsignedProductionExecutionAuthorizationKeys,
|
|
1758
|
+
'mac',
|
|
1759
|
+
];
|
|
1760
|
+
const productionExecutionAuthorizationPayload = (valueArg) => Object.fromEntries(productionExecutionAuthorizationPayloadKeys.map((keyArg) => [
|
|
1761
|
+
keyArg,
|
|
1762
|
+
valueArg[keyArg],
|
|
1763
|
+
]));
|
|
1764
|
+
const normalizeProductionExecutionAuthorizationPayloadInternal = (valueArg, pathArg) => {
|
|
1765
|
+
const value = readRecord(valueArg, pathArg);
|
|
1766
|
+
assertExactKeys(value, productionExecutionAuthorizationPayloadKeys, pathArg);
|
|
1767
|
+
if (value.schemaVersion !== 1
|
|
1768
|
+
|| value.kind
|
|
1769
|
+
!== 'cloudly-legacy-deployment-settlement-production-execution-authorization') {
|
|
1770
|
+
fail('INVALID_VALUE', `${pathArg}.kind`);
|
|
1771
|
+
}
|
|
1772
|
+
const authority = normalizeAuthorityReferenceInternal(value.authority, `${pathArg}.authority`);
|
|
1773
|
+
const sourceAuthority = normalizeAuthorityReferenceInternal(value.sourceAuthority, `${pathArg}.sourceAuthority`);
|
|
1774
|
+
const executionAttempt = normalizeExecutionAttemptIdentityInternal(value.executionAttempt, `${pathArg}.executionAttempt`);
|
|
1775
|
+
const operationId = readIdentifier(value.operationId, `${pathArg}.operationId`);
|
|
1776
|
+
const settlementId = readIdentifier(value.settlementId, `${pathArg}.settlementId`);
|
|
1777
|
+
const authenticatedPlanSha256 = readSha256(value.authenticatedPlanSha256, `${pathArg}.authenticatedPlanSha256`);
|
|
1778
|
+
const requestBundleSha256 = readSha256(value.requestBundleSha256, `${pathArg}.requestBundleSha256`);
|
|
1779
|
+
const scratchReceiptSha256 = readSha256(value.scratchReceiptSha256, `${pathArg}.scratchReceiptSha256`);
|
|
1780
|
+
if (executionAttempt.purpose !== 'production'
|
|
1781
|
+
|| executionAttempt.operationId !== operationId
|
|
1782
|
+
|| executionAttempt.settlementId !== settlementId
|
|
1783
|
+
|| authority.authorityId === sourceAuthority.authorityId
|
|
1784
|
+
|| authority.keyId === sourceAuthority.keyId
|
|
1785
|
+
|| canonicalize(authority, `${pathArg}.authority`)
|
|
1786
|
+
=== canonicalize(sourceAuthority, `${pathArg}.sourceAuthority`)
|
|
1787
|
+
|| canonicalize(executionAttempt.executionAuthority, `${pathArg}.attempt.executionAuthority`)
|
|
1788
|
+
!== canonicalize(authority, `${pathArg}.authority`)
|
|
1789
|
+
|| canonicalize(executionAttempt.sourceAuthority, `${pathArg}.attempt.sourceAuthority`)
|
|
1790
|
+
!== canonicalize(sourceAuthority, `${pathArg}.sourceAuthority`)
|
|
1791
|
+
|| executionAttempt.authenticatedPlanSha256 !== authenticatedPlanSha256
|
|
1792
|
+
|| executionAttempt.requestBundleSha256 !== requestBundleSha256
|
|
1793
|
+
|| executionAttempt.scratchReceiptSha256 !== scratchReceiptSha256) {
|
|
1794
|
+
fail('CROSS_FIELD_MISMATCH', `${pathArg}.executionAttempt`);
|
|
1795
|
+
}
|
|
1796
|
+
const requestedAt = readInteger(value.requestedAt, `${pathArg}.requestedAt`, 1);
|
|
1797
|
+
const approvedAt = readInteger(value.approvedAt, `${pathArg}.approvedAt`, requestedAt);
|
|
1798
|
+
return {
|
|
1799
|
+
schemaVersion: 1,
|
|
1800
|
+
kind: 'cloudly-legacy-deployment-settlement-production-execution-authorization',
|
|
1801
|
+
authority,
|
|
1802
|
+
sourceAuthority,
|
|
1803
|
+
executionAttempt: executionAttempt,
|
|
1804
|
+
authenticatedPlanSha256,
|
|
1805
|
+
requestBundleSha256,
|
|
1806
|
+
scratchReceiptSha256,
|
|
1807
|
+
maintenanceImageDigest: readOciDigest(value.maintenanceImageDigest, `${pathArg}.maintenanceImageDigest`),
|
|
1808
|
+
operationId,
|
|
1809
|
+
settlementId,
|
|
1810
|
+
runId: readIdentifier(value.runId, `${pathArg}.runId`),
|
|
1811
|
+
rehearsalId: readIdentifier(value.rehearsalId, `${pathArg}.rehearsalId`),
|
|
1812
|
+
scratchServiceId: readIdentifier(value.scratchServiceId, `${pathArg}.scratchServiceId`),
|
|
1813
|
+
allocationId: readIdentifier(value.allocationId, `${pathArg}.allocationId`),
|
|
1814
|
+
allocationGeneration: readInteger(value.allocationGeneration, `${pathArg}.allocationGeneration`, 1),
|
|
1815
|
+
allocationBindingSha256: readSha256(value.allocationBindingSha256, `${pathArg}.allocationBindingSha256`),
|
|
1816
|
+
allocationReceiptSha256: readSha256(value.allocationReceiptSha256, `${pathArg}.allocationReceiptSha256`),
|
|
1817
|
+
sourceImageDigest: readOciDigest(value.sourceImageDigest, `${pathArg}.sourceImageDigest`),
|
|
1818
|
+
targetImageDigest: readOciDigest(value.targetImageDigest, `${pathArg}.targetImageDigest`),
|
|
1819
|
+
requestedAt,
|
|
1820
|
+
approvedAt,
|
|
1821
|
+
};
|
|
1822
|
+
};
|
|
1823
|
+
const normalizeUnsignedProductionExecutionAuthorizationInternal = (valueArg, pathArg) => {
|
|
1824
|
+
const value = readRecord(valueArg, pathArg);
|
|
1825
|
+
assertExactKeys(value, unsignedProductionExecutionAuthorizationKeys, pathArg);
|
|
1826
|
+
const payloadInput = Object.fromEntries(productionExecutionAuthorizationPayloadKeys.map((keyArg) => [keyArg, value[keyArg]]));
|
|
1827
|
+
const payload = normalizeProductionExecutionAuthorizationPayloadInternal(payloadInput, `${pathArg}.payload`);
|
|
1828
|
+
const payloadSha256 = readSha256(value.payloadSha256, `${pathArg}.payloadSha256`);
|
|
1829
|
+
if (payloadSha256 !== digestBytes(encodeNormalized(productionExecutionAuthorizationPayload(payload), `${pathArg}.payload`))) {
|
|
1830
|
+
fail('CROSS_FIELD_MISMATCH', `${pathArg}.payloadSha256`);
|
|
1831
|
+
}
|
|
1832
|
+
return { ...payload, payloadSha256 };
|
|
1833
|
+
};
|
|
1834
|
+
export const normalizeCloudlyLegacyDeploymentSettlementProductionExecutionAuthorization = (valueArg) => {
|
|
1835
|
+
const value = readRecord(valueArg, 'productionExecutionAuthorization');
|
|
1836
|
+
assertExactKeys(value, productionExecutionAuthorizationKeys, 'productionExecutionAuthorization');
|
|
1837
|
+
const unsignedInput = Object.fromEntries(unsignedProductionExecutionAuthorizationKeys.map((keyArg) => [keyArg, value[keyArg]]));
|
|
1838
|
+
return finalize({
|
|
1839
|
+
...normalizeUnsignedProductionExecutionAuthorizationInternal(unsignedInput, 'productionExecutionAuthorization.unsigned'),
|
|
1840
|
+
mac: readMac(value.mac, 'productionExecutionAuthorization.mac'),
|
|
1841
|
+
}, cloudlyLegacyDeploymentSettlementLimits.maximumReceiptBytes, 'productionExecutionAuthorization');
|
|
1842
|
+
};
|
|
1843
|
+
export const digestCloudlyLegacyDeploymentSettlementProductionExecutionAuthorizationPayload = (valueArg) => digestBytes(encodeNormalized(productionExecutionAuthorizationPayload(normalizeProductionExecutionAuthorizationPayloadInternal(valueArg, 'productionExecutionAuthorizationPayload')), 'productionExecutionAuthorizationPayload'));
|
|
1844
|
+
export const encodeCloudlyLegacyDeploymentSettlementProductionExecutionAuthorization = (valueArg) => encodeNormalized(normalizeCloudlyLegacyDeploymentSettlementProductionExecutionAuthorization(valueArg), 'productionExecutionAuthorization');
|
|
1845
|
+
export const digestCloudlyLegacyDeploymentSettlementProductionExecutionAuthorization = (valueArg) => digestBytes(encodeCloudlyLegacyDeploymentSettlementProductionExecutionAuthorization(valueArg));
|
|
1846
|
+
export const encodeCloudlyLegacyDeploymentSettlementProductionExecutionAuthorizationHmacInput = (valueArg) => frame(cloudlyLegacyDeploymentSettlementDomains.productionExecutionAuthorizationHmac, encodeNormalized(finalize(normalizeUnsignedProductionExecutionAuthorizationInternal(valueArg, 'unsignedProductionExecutionAuthorization'), cloudlyLegacyDeploymentSettlementLimits.maximumReceiptBytes, 'unsignedProductionExecutionAuthorization'), 'productionExecutionAuthorization.authenticated'));
|
|
1847
|
+
export const normalizeCloudlyLegacyDeploymentSettlementRequestBundleForAuthority = async (bundleArg, authenticatedPlanArg, metadataArg, verifierArg) => {
|
|
1848
|
+
const metadata = normalizeCloudlyLegacyDeploymentSettlementAuthorityMetadata(metadataArg);
|
|
1849
|
+
const plan = await normalizeAuthenticatedCloudlyLegacyDeploymentSettlementPlanForAuthority(authenticatedPlanArg, metadata, verifierArg);
|
|
1850
|
+
const bundle = normalizeCloudlyLegacyDeploymentSettlementRequestBundle(bundleArg);
|
|
1851
|
+
await normalizeAuthenticatedCloudlyLegacyDeploymentSettlementRehearsalBindingForAuthority(bundle.authenticatedRehearsalBinding, metadata, verifierArg);
|
|
1852
|
+
await normalizeAuthenticatedCloudlyLegacyDeploymentSettlementProductionRequestForAuthority(bundle.authenticatedRequest, metadata, verifierArg);
|
|
1853
|
+
if (canonicalize(plan.payload, 'requestBundle.plan')
|
|
1854
|
+
!== canonicalize(bundle.authenticatedRequest.payload.plan, 'requestBundle.request.plan')
|
|
1855
|
+
|| plan.payloadSha256 !== bundle.authenticatedRequest.payload.planSha256) {
|
|
1856
|
+
fail('CROSS_FIELD_MISMATCH', 'requestBundle.authenticatedRequest.plan');
|
|
1857
|
+
}
|
|
1858
|
+
return bundle;
|
|
1859
|
+
};
|
|
1860
|
+
const assertProductionAuthorizationMetadata = (authorizationArg, productionMetadataArg, sourceMetadataArg) => {
|
|
1861
|
+
assertAuthorityReferenceMatchesMetadata(authorizationArg.authority, productionMetadataArg, 'productionExecutionAuthorization.authority');
|
|
1862
|
+
assertAuthorityReferenceMatchesMetadata(authorizationArg.sourceAuthority, sourceMetadataArg, 'productionExecutionAuthorization.sourceAuthority');
|
|
1863
|
+
if (canonicalize(productionMetadataArg.sourceAuthority, 'productionMetadata.sourceAuthority')
|
|
1864
|
+
!== canonicalize(authorizationArg.sourceAuthority, 'authorization.sourceAuthority')
|
|
1865
|
+
|| productionMetadataArg.sourceAuthenticatedPlanSha256
|
|
1866
|
+
!== authorizationArg.authenticatedPlanSha256
|
|
1867
|
+
|| productionMetadataArg.sourceRequestBundleSha256 !== authorizationArg.requestBundleSha256
|
|
1868
|
+
|| productionMetadataArg.scratchReceiptSha256 !== authorizationArg.scratchReceiptSha256
|
|
1869
|
+
|| authorizationArg.operationId !== productionMetadataArg.operationId
|
|
1870
|
+
|| authorizationArg.operationId !== sourceMetadataArg.operationId
|
|
1871
|
+
|| authorizationArg.settlementId !== productionMetadataArg.settlementId
|
|
1872
|
+
|| authorizationArg.settlementId !== sourceMetadataArg.settlementId
|
|
1873
|
+
|| authorizationArg.runId !== productionMetadataArg.runId
|
|
1874
|
+
|| authorizationArg.runId !== sourceMetadataArg.runId
|
|
1875
|
+
|| authorizationArg.rehearsalId !== productionMetadataArg.rehearsalId
|
|
1876
|
+
|| authorizationArg.rehearsalId !== sourceMetadataArg.rehearsalId
|
|
1877
|
+
|| authorizationArg.scratchServiceId !== productionMetadataArg.scratchServiceId
|
|
1878
|
+
|| authorizationArg.scratchServiceId !== sourceMetadataArg.scratchServiceId
|
|
1879
|
+
|| authorizationArg.allocationId !== productionMetadataArg.allocationId
|
|
1880
|
+
|| authorizationArg.allocationId !== sourceMetadataArg.allocationId
|
|
1881
|
+
|| authorizationArg.allocationGeneration !== productionMetadataArg.allocationGeneration
|
|
1882
|
+
|| authorizationArg.allocationGeneration !== sourceMetadataArg.allocationGeneration
|
|
1883
|
+
|| authorizationArg.allocationBindingSha256 !== productionMetadataArg.allocationBindingSha256
|
|
1884
|
+
|| authorizationArg.allocationBindingSha256 !== sourceMetadataArg.allocationBindingSha256
|
|
1885
|
+
|| authorizationArg.allocationReceiptSha256 !== productionMetadataArg.allocationReceiptSha256
|
|
1886
|
+
|| authorizationArg.allocationReceiptSha256 !== sourceMetadataArg.allocationReceiptSha256
|
|
1887
|
+
|| authorizationArg.maintenanceImageDigest !== productionMetadataArg.maintenanceImageDigest
|
|
1888
|
+
|| authorizationArg.sourceImageDigest !== productionMetadataArg.sourceImageDigest
|
|
1889
|
+
|| authorizationArg.sourceImageDigest !== sourceMetadataArg.sourceImageDigest
|
|
1890
|
+
|| authorizationArg.targetImageDigest !== productionMetadataArg.targetImageDigest
|
|
1891
|
+
|| authorizationArg.targetImageDigest !== sourceMetadataArg.targetImageDigest) {
|
|
1892
|
+
fail('CROSS_FIELD_MISMATCH', 'productionExecutionAuthorization.authorityMetadata');
|
|
1893
|
+
}
|
|
1894
|
+
assertAuthorityTimestamp(authorizationArg.requestedAt, productionMetadataArg, 'productionExecutionAuthorization.requestedAt');
|
|
1895
|
+
assertAuthorityTimestamp(authorizationArg.approvedAt, productionMetadataArg, 'productionExecutionAuthorization.approvedAt');
|
|
1896
|
+
};
|
|
1897
|
+
const assertProductionAuthorizationArtifacts = (authorizationArg, productionMetadataArg, sourceMetadataArg, authenticatedPlanArg, requestBundleArg, scratchReceiptArg) => {
|
|
1898
|
+
if (authorizationArg.authenticatedPlanSha256
|
|
1899
|
+
!== digestAuthenticatedCloudlyLegacyDeploymentSettlementPlan(authenticatedPlanArg)
|
|
1900
|
+
|| authorizationArg.requestBundleSha256
|
|
1901
|
+
!== digestCloudlyLegacyDeploymentSettlementRequestBundle(requestBundleArg)
|
|
1902
|
+
|| authorizationArg.scratchReceiptSha256
|
|
1903
|
+
!== digestCloudlyLegacyDeploymentSettlementScratchReceipt(scratchReceiptArg)
|
|
1904
|
+
|| productionMetadataArg.issuedAt < scratchReceiptArg.completedAt
|
|
1905
|
+
|| authorizationArg.requestedAt < scratchReceiptArg.completedAt
|
|
1906
|
+
|| authorizationArg.requestedAt < productionMetadataArg.issuedAt
|
|
1907
|
+
|| authorizationArg.approvedAt < authorizationArg.requestedAt) {
|
|
1908
|
+
fail('CROSS_FIELD_MISMATCH', 'productionExecutionAuthorization.sourceProof');
|
|
1909
|
+
}
|
|
1910
|
+
assertProductionAuthorizationMetadata(authorizationArg, productionMetadataArg, sourceMetadataArg);
|
|
1911
|
+
};
|
|
1912
|
+
export const normalizeCloudlyLegacyDeploymentSettlementProductionExecutionAuthorizationForAuthorities = async (authorizationArg, productionMetadataArg, sourceMetadataArg, authenticatedPlanArg, requestBundleArg, scratchReceiptArg, verifierArg) => {
|
|
1913
|
+
const { productionMetadata, sourceMetadata, } = normalizeProductionAuthorityMetadataPair(productionMetadataArg, sourceMetadataArg);
|
|
1914
|
+
const plan = await normalizeAuthenticatedCloudlyLegacyDeploymentSettlementPlanForAuthority(authenticatedPlanArg, sourceMetadata, verifierArg);
|
|
1915
|
+
const requestBundle = await normalizeCloudlyLegacyDeploymentSettlementRequestBundleForAuthority(requestBundleArg, plan, sourceMetadata, verifierArg);
|
|
1916
|
+
const scratchReceipt = await normalizeCloudlyLegacyDeploymentSettlementScratchReceiptForAuthority(scratchReceiptArg, sourceMetadata, requestBundle.authenticatedRequest, verifierArg);
|
|
1917
|
+
const authorization = normalizeCloudlyLegacyDeploymentSettlementProductionExecutionAuthorization(authorizationArg);
|
|
1918
|
+
assertProductionAuthorizationArtifacts(authorization, productionMetadata, sourceMetadata, plan, requestBundle, scratchReceipt);
|
|
1919
|
+
await requireConsumerVerifiedHmac(authorization.authority, cloudlyLegacyDeploymentSettlementDomains.productionExecutionAuthorizationHmac, encodeCloudlyLegacyDeploymentSettlementProductionExecutionAuthorizationHmacInput(withoutArtifactMac(authorization)), authorization.mac, verifierArg, 'productionExecutionAuthorization.mac');
|
|
1920
|
+
return authorization;
|
|
1921
|
+
};
|
|
1922
|
+
const productionReceiptV2PayloadKeys = [
|
|
1923
|
+
'schemaVersion',
|
|
1924
|
+
'kind',
|
|
1925
|
+
'authority',
|
|
1926
|
+
'sourceAuthority',
|
|
1927
|
+
'executionAttempt',
|
|
1928
|
+
'productionAuthorization',
|
|
1929
|
+
'productionAuthorizationSha256',
|
|
1930
|
+
'requestSha256',
|
|
1931
|
+
'requestBundleSha256',
|
|
1932
|
+
'scratchReceipt',
|
|
1933
|
+
'scratchReceiptSha256',
|
|
1934
|
+
'stableOutcome',
|
|
1935
|
+
'stableOutcomeSha256',
|
|
1936
|
+
'transactionCommitted',
|
|
1937
|
+
'disposition',
|
|
1938
|
+
'completedAt',
|
|
1939
|
+
];
|
|
1940
|
+
const unsignedProductionReceiptV2Keys = [...productionReceiptV2PayloadKeys, 'payloadSha256'];
|
|
1941
|
+
const productionReceiptV2Keys = [...unsignedProductionReceiptV2Keys, 'mac'];
|
|
1942
|
+
const productionReceiptV2Payload = (valueArg) => Object.fromEntries(productionReceiptV2PayloadKeys.map((keyArg) => [
|
|
1943
|
+
keyArg,
|
|
1944
|
+
valueArg[keyArg],
|
|
1945
|
+
]));
|
|
1946
|
+
const normalizeProductionReceiptV2PayloadInternal = (valueArg, pathArg) => {
|
|
1947
|
+
const value = readRecord(valueArg, pathArg);
|
|
1948
|
+
assertExactKeys(value, productionReceiptV2PayloadKeys, pathArg);
|
|
1949
|
+
if (value.schemaVersion !== 2
|
|
1950
|
+
|| value.kind !== 'cloudly-legacy-deployment-settlement-production-receipt'
|
|
1951
|
+
|| value.transactionCommitted !== true) {
|
|
1952
|
+
fail('INVALID_VALUE', `${pathArg}.kind`);
|
|
1953
|
+
}
|
|
1954
|
+
const authority = normalizeAuthorityReferenceInternal(value.authority, `${pathArg}.authority`);
|
|
1955
|
+
const sourceAuthority = normalizeAuthorityReferenceInternal(value.sourceAuthority, `${pathArg}.sourceAuthority`);
|
|
1956
|
+
const executionAttempt = normalizeExecutionAttemptIdentityInternal(value.executionAttempt, `${pathArg}.executionAttempt`);
|
|
1957
|
+
const productionAuthorization = normalizeCloudlyLegacyDeploymentSettlementProductionExecutionAuthorization(value.productionAuthorization);
|
|
1958
|
+
const productionAuthorizationSha256 = readSha256(value.productionAuthorizationSha256, `${pathArg}.productionAuthorizationSha256`);
|
|
1959
|
+
const requestBundleSha256 = readSha256(value.requestBundleSha256, `${pathArg}.requestBundleSha256`);
|
|
1960
|
+
const scratchReceipt = normalizeScratchReceiptInternal(value.scratchReceipt, `${pathArg}.scratchReceipt`);
|
|
1961
|
+
const scratchReceiptSha256 = readSha256(value.scratchReceiptSha256, `${pathArg}.scratchReceiptSha256`);
|
|
1962
|
+
const stableOutcome = normalizeStableOutcomeInternal(value.stableOutcome, `${pathArg}.stableOutcome`);
|
|
1963
|
+
const stableOutcomeSha256 = readSha256(value.stableOutcomeSha256, `${pathArg}.stableOutcomeSha256`);
|
|
1964
|
+
const requestSha256 = readSha256(value.requestSha256, `${pathArg}.requestSha256`);
|
|
1965
|
+
const disposition = readLiteral(value.disposition, ['applied', 'exact-replay', 'no-op'], `${pathArg}.disposition`);
|
|
1966
|
+
const dispositionMatchesScratch = disposition === scratchReceipt.disposition
|
|
1967
|
+
|| (scratchReceipt.disposition === 'applied' && disposition === 'exact-replay');
|
|
1968
|
+
if (canonicalize(authority, `${pathArg}.authority`)
|
|
1969
|
+
!== canonicalize(productionAuthorization.authority, `${pathArg}.authorization.authority`)
|
|
1970
|
+
|| canonicalize(sourceAuthority, `${pathArg}.sourceAuthority`)
|
|
1971
|
+
!== canonicalize(productionAuthorization.sourceAuthority, `${pathArg}.authorization.sourceAuthority`)
|
|
1972
|
+
|| canonicalize(executionAttempt, `${pathArg}.executionAttempt`)
|
|
1973
|
+
!== canonicalize(productionAuthorization.executionAttempt, `${pathArg}.authorization.attempt`)
|
|
1974
|
+
|| productionAuthorizationSha256
|
|
1975
|
+
!== digestCloudlyLegacyDeploymentSettlementProductionExecutionAuthorization(productionAuthorization)
|
|
1976
|
+
|| requestBundleSha256 !== productionAuthorization.requestBundleSha256
|
|
1977
|
+
|| scratchReceiptSha256 !== productionAuthorization.scratchReceiptSha256
|
|
1978
|
+
|| scratchReceiptSha256
|
|
1979
|
+
!== digestCloudlyLegacyDeploymentSettlementScratchReceipt(scratchReceipt)
|
|
1980
|
+
|| canonicalize(sourceAuthority, `${pathArg}.sourceAuthority`)
|
|
1981
|
+
!== canonicalize(scratchReceipt.authority, `${pathArg}.scratchReceipt.authority`)
|
|
1982
|
+
|| requestSha256 !== scratchReceipt.requestSha256
|
|
1983
|
+
|| !dispositionMatchesScratch
|
|
1984
|
+
|| canonicalize(stableOutcome, `${pathArg}.stableOutcome`)
|
|
1985
|
+
!== canonicalize(scratchReceipt.stableOutcome, `${pathArg}.scratchReceipt.stableOutcome`)
|
|
1986
|
+
|| stableOutcomeSha256 !== scratchReceipt.stableOutcomeSha256
|
|
1987
|
+
|| stableOutcomeSha256
|
|
1988
|
+
!== digestCloudlyLegacyDeploymentSettlementStableOutcome(stableOutcome)) {
|
|
1989
|
+
fail('CROSS_FIELD_MISMATCH', `${pathArg}.productionAuthorization`);
|
|
1990
|
+
}
|
|
1991
|
+
return {
|
|
1992
|
+
schemaVersion: 2,
|
|
1993
|
+
kind: 'cloudly-legacy-deployment-settlement-production-receipt',
|
|
1994
|
+
authority,
|
|
1995
|
+
sourceAuthority,
|
|
1996
|
+
executionAttempt: executionAttempt,
|
|
1997
|
+
productionAuthorization,
|
|
1998
|
+
productionAuthorizationSha256,
|
|
1999
|
+
requestSha256,
|
|
2000
|
+
requestBundleSha256,
|
|
2001
|
+
scratchReceipt,
|
|
2002
|
+
scratchReceiptSha256,
|
|
2003
|
+
stableOutcome,
|
|
2004
|
+
stableOutcomeSha256,
|
|
2005
|
+
transactionCommitted: true,
|
|
2006
|
+
disposition,
|
|
2007
|
+
completedAt: readInteger(value.completedAt, `${pathArg}.completedAt`, productionAuthorization.approvedAt),
|
|
2008
|
+
};
|
|
2009
|
+
};
|
|
2010
|
+
const normalizeUnsignedProductionReceiptV2Internal = (valueArg, pathArg) => {
|
|
2011
|
+
const value = readRecord(valueArg, pathArg);
|
|
2012
|
+
assertExactKeys(value, unsignedProductionReceiptV2Keys, pathArg);
|
|
2013
|
+
const payloadInput = Object.fromEntries(productionReceiptV2PayloadKeys.map((keyArg) => [keyArg, value[keyArg]]));
|
|
2014
|
+
const payload = normalizeProductionReceiptV2PayloadInternal(payloadInput, `${pathArg}.payload`);
|
|
2015
|
+
const payloadSha256 = readSha256(value.payloadSha256, `${pathArg}.payloadSha256`);
|
|
2016
|
+
if (payloadSha256 !== digestBytes(encodeNormalized(productionReceiptV2Payload(payload), `${pathArg}.payload`))) {
|
|
2017
|
+
fail('CROSS_FIELD_MISMATCH', `${pathArg}.payloadSha256`);
|
|
2018
|
+
}
|
|
2019
|
+
return { ...payload, payloadSha256 };
|
|
2020
|
+
};
|
|
2021
|
+
export const digestCloudlyLegacyDeploymentSettlementProductionReceiptPayloadV2 = (valueArg) => digestBytes(encodeNormalized(productionReceiptV2Payload(normalizeProductionReceiptV2PayloadInternal(valueArg, 'productionReceiptPayloadV2')), 'productionReceiptPayloadV2'));
|
|
2022
|
+
export const normalizeCloudlyLegacyDeploymentSettlementProductionReceiptV2 = (valueArg) => {
|
|
2023
|
+
const value = readRecord(valueArg, 'productionReceiptV2');
|
|
2024
|
+
assertExactKeys(value, productionReceiptV2Keys, 'productionReceiptV2');
|
|
2025
|
+
const unsignedInput = Object.fromEntries(unsignedProductionReceiptV2Keys.map((keyArg) => [keyArg, value[keyArg]]));
|
|
2026
|
+
return finalize({
|
|
2027
|
+
...normalizeUnsignedProductionReceiptV2Internal(unsignedInput, 'productionReceiptV2.unsigned'),
|
|
2028
|
+
mac: readMac(value.mac, 'productionReceiptV2.mac'),
|
|
2029
|
+
}, cloudlyLegacyDeploymentSettlementLimits.maximumReceiptBytes * 3, 'productionReceiptV2');
|
|
2030
|
+
};
|
|
2031
|
+
export const normalizeCloudlyLegacyDeploymentSettlementProductionReceiptAnyVersion = (valueArg) => {
|
|
2032
|
+
const value = readRecord(valueArg, 'productionReceipt');
|
|
2033
|
+
return value.schemaVersion === 2
|
|
2034
|
+
? normalizeCloudlyLegacyDeploymentSettlementProductionReceiptV2(value)
|
|
2035
|
+
: normalizeCloudlyLegacyDeploymentSettlementProductionReceipt(value);
|
|
2036
|
+
};
|
|
2037
|
+
export const encodeCloudlyLegacyDeploymentSettlementProductionReceiptV2 = (valueArg) => encodeNormalized(normalizeCloudlyLegacyDeploymentSettlementProductionReceiptV2(valueArg), 'productionReceiptV2');
|
|
2038
|
+
export const digestCloudlyLegacyDeploymentSettlementProductionReceiptV2 = (valueArg) => digestBytes(encodeCloudlyLegacyDeploymentSettlementProductionReceiptV2(valueArg));
|
|
2039
|
+
export const encodeCloudlyLegacyDeploymentSettlementProductionReceiptV2HmacInput = (valueArg) => frame(cloudlyLegacyDeploymentSettlementDomains.productionReceiptV2Hmac, encodeNormalized(finalize(normalizeUnsignedProductionReceiptV2Internal(valueArg, 'unsignedProductionReceiptV2'), cloudlyLegacyDeploymentSettlementLimits.maximumReceiptBytes * 3, 'unsignedProductionReceiptV2'), 'productionReceiptV2.authenticated'));
|
|
2040
|
+
export const normalizeCloudlyLegacyDeploymentSettlementProductionReceiptV2ForAuthorities = async (receiptArg, productionMetadataArg, sourceMetadataArg, authenticatedPlanArg, requestBundleArg, verifierArg) => {
|
|
2041
|
+
const { productionMetadata, sourceMetadata, } = normalizeProductionAuthorityMetadataPair(productionMetadataArg, sourceMetadataArg);
|
|
2042
|
+
const receipt = normalizeCloudlyLegacyDeploymentSettlementProductionReceiptV2(receiptArg);
|
|
2043
|
+
const requestBundle = normalizeCloudlyLegacyDeploymentSettlementRequestBundle(requestBundleArg);
|
|
2044
|
+
await normalizeCloudlyLegacyDeploymentSettlementProductionExecutionAuthorizationForAuthorities(receipt.productionAuthorization, productionMetadata, sourceMetadata, authenticatedPlanArg, requestBundle, receipt.scratchReceipt, verifierArg);
|
|
2045
|
+
await normalizeCloudlyLegacyDeploymentSettlementScratchReceiptForAuthority(receipt.scratchReceipt, sourceMetadata, requestBundle.authenticatedRequest, verifierArg);
|
|
2046
|
+
assertAuthorityReferenceMatchesMetadata(receipt.authority, productionMetadata, 'productionReceiptV2.authority');
|
|
2047
|
+
assertAuthorityTimestamp(receipt.completedAt, productionMetadata, 'productionReceiptV2.completedAt');
|
|
2048
|
+
await requireConsumerVerifiedHmac(receipt.authority, cloudlyLegacyDeploymentSettlementDomains.productionReceiptV2Hmac, encodeCloudlyLegacyDeploymentSettlementProductionReceiptV2HmacInput(withoutArtifactMac(receipt)), receipt.mac, verifierArg, 'productionReceiptV2.mac');
|
|
2049
|
+
return receipt;
|
|
2050
|
+
};
|
|
2051
|
+
const normalizeCommittedResolutionReceipt = (valueArg, pathArg) => {
|
|
2052
|
+
const value = readRecord(valueArg, pathArg);
|
|
2053
|
+
if (value.kind === 'cloudly-legacy-deployment-settlement-scratch-receipt') {
|
|
2054
|
+
return normalizeCloudlyLegacyDeploymentSettlementScratchReceipt(value);
|
|
2055
|
+
}
|
|
2056
|
+
if (value.kind !== 'cloudly-legacy-deployment-settlement-production-receipt') {
|
|
2057
|
+
fail('INVALID_VALUE', `${pathArg}.kind`);
|
|
2058
|
+
}
|
|
2059
|
+
if (value.schemaVersion !== 2) {
|
|
2060
|
+
fail('INVALID_VALUE', `${pathArg}.schemaVersion`);
|
|
2061
|
+
}
|
|
2062
|
+
return normalizeCloudlyLegacyDeploymentSettlementProductionReceiptV2(value);
|
|
2063
|
+
};
|
|
2064
|
+
/** Structural only; this function does not authenticate receipt MACs. */
|
|
2065
|
+
export const normalizeCloudlyLegacyDeploymentSettlementResolutionBundle = (valueArg) => {
|
|
2066
|
+
const value = readRecord(valueArg, 'resolutionBundle');
|
|
2067
|
+
const outcome = readLiteral(value.outcome, ['committed', 'unapplied'], 'resolutionBundle.outcome');
|
|
2068
|
+
const mode = readLiteral(value.mode, [
|
|
2069
|
+
'committed-schema1',
|
|
2070
|
+
'committed-schema2',
|
|
2071
|
+
'aborted-prepared',
|
|
2072
|
+
'observed-aborted',
|
|
2073
|
+
'absent-tombstone',
|
|
2074
|
+
'legacy-no-op',
|
|
2075
|
+
], 'resolutionBundle.mode');
|
|
2076
|
+
const committed = outcome === 'committed';
|
|
2077
|
+
assertExactKeys(value, [
|
|
2078
|
+
'schemaVersion',
|
|
2079
|
+
'kind',
|
|
2080
|
+
'executionAttempt',
|
|
2081
|
+
'observedAt',
|
|
2082
|
+
'sourceAuthorityStatus',
|
|
2083
|
+
'executionAuthorityStatus',
|
|
2084
|
+
'outcome',
|
|
2085
|
+
'mode',
|
|
2086
|
+
'attemptObservation',
|
|
2087
|
+
...(committed ? ['originalReceipt', 'originalReceiptSha256'] : []),
|
|
2088
|
+
], 'resolutionBundle');
|
|
2089
|
+
if (value.schemaVersion !== 1
|
|
2090
|
+
|| value.kind !== 'cloudly-legacy-deployment-settlement-resolution-bundle') {
|
|
2091
|
+
fail('INVALID_VALUE', 'resolutionBundle.kind');
|
|
2092
|
+
}
|
|
2093
|
+
const executionAttempt = normalizeExecutionAttemptIdentityInternal(value.executionAttempt, 'resolutionBundle.executionAttempt');
|
|
2094
|
+
const observedAt = readInteger(value.observedAt, 'resolutionBundle.observedAt', 1);
|
|
2095
|
+
const sourceAuthorityStatus = readLiteral(value.sourceAuthorityStatus, ['active', 'expired'], 'resolutionBundle.sourceAuthorityStatus');
|
|
2096
|
+
const executionAuthorityStatus = readLiteral(value.executionAuthorityStatus, ['active', 'expired'], 'resolutionBundle.executionAuthorityStatus');
|
|
2097
|
+
if (canonicalize(executionAttempt.sourceAuthority, 'resolutionBundle.sourceAuthority')
|
|
2098
|
+
=== canonicalize(executionAttempt.executionAuthority, 'resolutionBundle.executionAuthority')
|
|
2099
|
+
&& sourceAuthorityStatus !== executionAuthorityStatus) {
|
|
2100
|
+
fail('CROSS_FIELD_MISMATCH', 'resolutionBundle.executionAuthorityStatus');
|
|
2101
|
+
}
|
|
2102
|
+
if (committed) {
|
|
2103
|
+
if (mode !== 'committed-schema1' && mode !== 'committed-schema2') {
|
|
2104
|
+
fail('CROSS_FIELD_MISMATCH', 'resolutionBundle.mode');
|
|
2105
|
+
}
|
|
2106
|
+
const attemptObservation = normalizeExecutionAttemptObservationInternal(value.attemptObservation, 'resolutionBundle.attemptObservation');
|
|
2107
|
+
if (attemptObservation.state !== 'committed') {
|
|
2108
|
+
fail('CROSS_FIELD_MISMATCH', 'resolutionBundle.attemptObservation');
|
|
2109
|
+
}
|
|
2110
|
+
const committedObservation = attemptObservation;
|
|
2111
|
+
if (canonicalize(committedObservation.identity, 'resolutionBundle.observation.identity')
|
|
2112
|
+
!== canonicalize(executionAttempt, 'resolutionBundle.executionAttempt')) {
|
|
2113
|
+
fail('CROSS_FIELD_MISMATCH', 'resolutionBundle.attemptObservation');
|
|
2114
|
+
}
|
|
2115
|
+
const originalReceipt = normalizeCommittedResolutionReceipt(value.originalReceipt, 'resolutionBundle.originalReceipt');
|
|
2116
|
+
const receiptSchemaVersion = originalReceipt.schemaVersion;
|
|
2117
|
+
const originalReceiptSha256 = readSha256(value.originalReceiptSha256, 'resolutionBundle.originalReceiptSha256');
|
|
2118
|
+
const expectedReceiptSha256 = originalReceipt.kind
|
|
2119
|
+
=== 'cloudly-legacy-deployment-settlement-scratch-receipt'
|
|
2120
|
+
? digestCloudlyLegacyDeploymentSettlementScratchReceipt(originalReceipt)
|
|
2121
|
+
: originalReceipt.schemaVersion === 2
|
|
2122
|
+
? digestCloudlyLegacyDeploymentSettlementProductionReceiptV2(originalReceipt)
|
|
2123
|
+
: digestCloudlyLegacyDeploymentSettlementProductionReceipt(originalReceipt);
|
|
2124
|
+
const receiptExecutionAuthority = originalReceipt.authority;
|
|
2125
|
+
const receiptSourceAuthority = originalReceipt.schemaVersion === 2
|
|
2126
|
+
? originalReceipt.sourceAuthority
|
|
2127
|
+
: originalReceipt.authority;
|
|
2128
|
+
if ((mode === 'committed-schema1') !== (receiptSchemaVersion === 1)
|
|
2129
|
+
|| committedObservation.receiptSchemaVersion !== receiptSchemaVersion
|
|
2130
|
+
|| committedObservation.receiptSha256 !== originalReceiptSha256
|
|
2131
|
+
|| originalReceiptSha256 !== expectedReceiptSha256
|
|
2132
|
+
|| committedObservation.resolvedAt !== originalReceipt.completedAt
|
|
2133
|
+
|| observedAt < committedObservation.resolvedAt
|
|
2134
|
+
|| canonicalize(receiptExecutionAuthority, 'resolutionBundle.receipt.executionAuthority')
|
|
2135
|
+
!== canonicalize(executionAttempt.executionAuthority, 'resolutionBundle.executionAuthority')
|
|
2136
|
+
|| canonicalize(receiptSourceAuthority, 'resolutionBundle.receipt.sourceAuthority')
|
|
2137
|
+
!== canonicalize(executionAttempt.sourceAuthority, 'resolutionBundle.sourceAuthority')
|
|
2138
|
+
|| (originalReceipt.schemaVersion === 2
|
|
2139
|
+
&& canonicalize(originalReceipt.executionAttempt, 'resolutionBundle.receipt.executionAttempt')
|
|
2140
|
+
!== canonicalize(executionAttempt, 'resolutionBundle.executionAttempt'))
|
|
2141
|
+
|| (executionAttempt.purpose === 'scratch-rehearsal')
|
|
2142
|
+
!== (originalReceipt.kind
|
|
2143
|
+
=== 'cloudly-legacy-deployment-settlement-scratch-receipt')) {
|
|
2144
|
+
fail('CROSS_FIELD_MISMATCH', 'resolutionBundle.originalReceipt');
|
|
2145
|
+
}
|
|
2146
|
+
let result;
|
|
2147
|
+
if (mode === 'committed-schema1'
|
|
2148
|
+
&& originalReceipt.kind === 'cloudly-legacy-deployment-settlement-scratch-receipt') {
|
|
2149
|
+
const scratchAttempt = executionAttempt;
|
|
2150
|
+
result = {
|
|
2151
|
+
schemaVersion: 1,
|
|
2152
|
+
kind: 'cloudly-legacy-deployment-settlement-resolution-bundle',
|
|
2153
|
+
executionAttempt: scratchAttempt,
|
|
2154
|
+
observedAt,
|
|
2155
|
+
sourceAuthorityStatus,
|
|
2156
|
+
executionAuthorityStatus,
|
|
2157
|
+
outcome,
|
|
2158
|
+
mode,
|
|
2159
|
+
attemptObservation: {
|
|
2160
|
+
...committedObservation,
|
|
2161
|
+
identity: scratchAttempt,
|
|
2162
|
+
receiptSchemaVersion: 1,
|
|
2163
|
+
},
|
|
2164
|
+
originalReceipt,
|
|
2165
|
+
originalReceiptSha256,
|
|
2166
|
+
};
|
|
2167
|
+
}
|
|
2168
|
+
else {
|
|
2169
|
+
const productionAttempt = executionAttempt;
|
|
2170
|
+
result = {
|
|
2171
|
+
schemaVersion: 1,
|
|
2172
|
+
kind: 'cloudly-legacy-deployment-settlement-resolution-bundle',
|
|
2173
|
+
executionAttempt: productionAttempt,
|
|
2174
|
+
observedAt,
|
|
2175
|
+
sourceAuthorityStatus,
|
|
2176
|
+
executionAuthorityStatus,
|
|
2177
|
+
outcome,
|
|
2178
|
+
mode: 'committed-schema2',
|
|
2179
|
+
attemptObservation: {
|
|
2180
|
+
...committedObservation,
|
|
2181
|
+
identity: productionAttempt,
|
|
2182
|
+
receiptSchemaVersion: 2,
|
|
2183
|
+
},
|
|
2184
|
+
originalReceipt: originalReceipt,
|
|
2185
|
+
originalReceiptSha256,
|
|
2186
|
+
};
|
|
2187
|
+
}
|
|
2188
|
+
return finalize(result, cloudlyLegacyDeploymentSettlementLimits.maximumReceiptBytes * 4, 'resolutionBundle');
|
|
2189
|
+
}
|
|
2190
|
+
if (mode === 'committed-schema1' || mode === 'committed-schema2') {
|
|
2191
|
+
fail('CROSS_FIELD_MISMATCH', 'resolutionBundle.mode');
|
|
2192
|
+
}
|
|
2193
|
+
if (mode === 'aborted-prepared'
|
|
2194
|
+
|| mode === 'observed-aborted'
|
|
2195
|
+
|| mode === 'absent-tombstone') {
|
|
2196
|
+
const attemptObservation = normalizeExecutionAttemptObservationInternal(value.attemptObservation, 'resolutionBundle.attemptObservation');
|
|
2197
|
+
if (attemptObservation.state !== 'aborted') {
|
|
2198
|
+
fail('CROSS_FIELD_MISMATCH', 'resolutionBundle.attemptObservation');
|
|
2199
|
+
}
|
|
2200
|
+
const abortedObservation = attemptObservation;
|
|
2201
|
+
if (canonicalize(abortedObservation.identity, 'resolutionBundle.observation.identity')
|
|
2202
|
+
!== canonicalize(executionAttempt, 'resolutionBundle.executionAttempt')
|
|
2203
|
+
|| observedAt < abortedObservation.resolvedAt) {
|
|
2204
|
+
fail('CROSS_FIELD_MISMATCH', 'resolutionBundle.attemptObservation');
|
|
2205
|
+
}
|
|
2206
|
+
if (mode === 'absent-tombstone') {
|
|
2207
|
+
const result = {
|
|
2208
|
+
schemaVersion: 1,
|
|
2209
|
+
kind: 'cloudly-legacy-deployment-settlement-resolution-bundle',
|
|
2210
|
+
executionAttempt,
|
|
2211
|
+
observedAt,
|
|
2212
|
+
sourceAuthorityStatus,
|
|
2213
|
+
executionAuthorityStatus,
|
|
2214
|
+
outcome,
|
|
2215
|
+
mode,
|
|
2216
|
+
attemptObservation: abortedObservation,
|
|
2217
|
+
};
|
|
2218
|
+
return finalize(result, cloudlyLegacyDeploymentSettlementLimits.maximumReceiptBytes, 'resolutionBundle');
|
|
2219
|
+
}
|
|
2220
|
+
const result = mode === 'aborted-prepared'
|
|
2221
|
+
? {
|
|
2222
|
+
schemaVersion: 1,
|
|
2223
|
+
kind: 'cloudly-legacy-deployment-settlement-resolution-bundle',
|
|
2224
|
+
executionAttempt,
|
|
2225
|
+
observedAt,
|
|
2226
|
+
sourceAuthorityStatus,
|
|
2227
|
+
executionAuthorityStatus,
|
|
2228
|
+
outcome,
|
|
2229
|
+
mode,
|
|
2230
|
+
attemptObservation: abortedObservation,
|
|
2231
|
+
}
|
|
2232
|
+
: {
|
|
2233
|
+
schemaVersion: 1,
|
|
2234
|
+
kind: 'cloudly-legacy-deployment-settlement-resolution-bundle',
|
|
2235
|
+
executionAttempt,
|
|
2236
|
+
observedAt,
|
|
2237
|
+
sourceAuthorityStatus,
|
|
2238
|
+
executionAuthorityStatus,
|
|
2239
|
+
outcome,
|
|
2240
|
+
mode,
|
|
2241
|
+
attemptObservation: abortedObservation,
|
|
2242
|
+
};
|
|
2243
|
+
return finalize(result, cloudlyLegacyDeploymentSettlementLimits.maximumReceiptBytes, 'resolutionBundle');
|
|
2244
|
+
}
|
|
2245
|
+
if (value.attemptObservation !== null) {
|
|
2246
|
+
fail('CROSS_FIELD_MISMATCH', 'resolutionBundle.attemptObservation');
|
|
2247
|
+
}
|
|
2248
|
+
if (executionAttempt.purpose !== 'scratch-rehearsal') {
|
|
2249
|
+
fail('CROSS_FIELD_MISMATCH', 'resolutionBundle.executionAttempt');
|
|
2250
|
+
}
|
|
2251
|
+
const scratchExecutionAttempt = executionAttempt;
|
|
2252
|
+
const result = {
|
|
2253
|
+
schemaVersion: 1,
|
|
2254
|
+
kind: 'cloudly-legacy-deployment-settlement-resolution-bundle',
|
|
2255
|
+
executionAttempt: scratchExecutionAttempt,
|
|
2256
|
+
observedAt,
|
|
2257
|
+
sourceAuthorityStatus,
|
|
2258
|
+
executionAuthorityStatus,
|
|
2259
|
+
outcome,
|
|
2260
|
+
mode: 'legacy-no-op',
|
|
2261
|
+
attemptObservation: null,
|
|
2262
|
+
};
|
|
2263
|
+
return finalize(result, cloudlyLegacyDeploymentSettlementLimits.maximumReceiptBytes, 'resolutionBundle');
|
|
2264
|
+
};
|
|
2265
|
+
export const encodeCloudlyLegacyDeploymentSettlementResolutionBundle = (valueArg) => encodeNormalized(normalizeCloudlyLegacyDeploymentSettlementResolutionBundle(valueArg), 'resolutionBundle');
|
|
2266
|
+
export const digestCloudlyLegacyDeploymentSettlementResolutionBundle = (valueArg) => digestBytes(encodeCloudlyLegacyDeploymentSettlementResolutionBundle(valueArg));
|
|
2267
|
+
const unsignedAuthenticatedResolutionKeys = [
|
|
2268
|
+
'schemaVersion',
|
|
2269
|
+
'kind',
|
|
2270
|
+
'authority',
|
|
2271
|
+
'payload',
|
|
2272
|
+
'payloadSha256',
|
|
2273
|
+
];
|
|
2274
|
+
const authenticatedResolutionKeys = [...unsignedAuthenticatedResolutionKeys, 'mac'];
|
|
2275
|
+
const normalizeUnsignedAuthenticatedResolutionInternal = (valueArg, pathArg) => {
|
|
2276
|
+
const value = readRecord(valueArg, pathArg);
|
|
2277
|
+
assertExactKeys(value, unsignedAuthenticatedResolutionKeys, pathArg);
|
|
2278
|
+
if (value.schemaVersion !== 1
|
|
2279
|
+
|| value.kind !== 'authenticated-cloudly-legacy-deployment-settlement-resolution') {
|
|
2280
|
+
fail('INVALID_VALUE', `${pathArg}.kind`);
|
|
2281
|
+
}
|
|
2282
|
+
const authority = normalizeAuthorityReferenceInternal(value.authority, `${pathArg}.authority`);
|
|
2283
|
+
const payload = normalizeCloudlyLegacyDeploymentSettlementResolutionBundle(value.payload);
|
|
2284
|
+
const payloadSha256 = readSha256(value.payloadSha256, `${pathArg}.payloadSha256`);
|
|
2285
|
+
if (canonicalize(authority, `${pathArg}.authority`)
|
|
2286
|
+
!== canonicalize(payload.executionAttempt.executionAuthority, `${pathArg}.payload.authority`)
|
|
2287
|
+
|| payloadSha256 !== digestCloudlyLegacyDeploymentSettlementResolutionBundle(payload)) {
|
|
2288
|
+
fail('CROSS_FIELD_MISMATCH', `${pathArg}.payload`);
|
|
2289
|
+
}
|
|
2290
|
+
return {
|
|
2291
|
+
schemaVersion: 1,
|
|
2292
|
+
kind: 'authenticated-cloudly-legacy-deployment-settlement-resolution',
|
|
2293
|
+
authority,
|
|
2294
|
+
payload,
|
|
2295
|
+
payloadSha256,
|
|
2296
|
+
};
|
|
2297
|
+
};
|
|
2298
|
+
/** Structural only; this function does not authenticate the recovery-attestation MAC. */
|
|
2299
|
+
export const normalizeCloudlyLegacyDeploymentSettlementAuthenticatedResolutionStructure = (valueArg) => {
|
|
2300
|
+
const value = readRecord(valueArg, 'authenticatedResolution');
|
|
2301
|
+
assertExactKeys(value, authenticatedResolutionKeys, 'authenticatedResolution');
|
|
2302
|
+
return finalize({
|
|
2303
|
+
...normalizeUnsignedAuthenticatedResolutionInternal(Object.fromEntries(unsignedAuthenticatedResolutionKeys.map((keyArg) => [
|
|
2304
|
+
keyArg,
|
|
2305
|
+
value[keyArg],
|
|
2306
|
+
])), 'authenticatedResolution.unsigned'),
|
|
2307
|
+
mac: readMac(value.mac, 'authenticatedResolution.mac'),
|
|
2308
|
+
}, cloudlyLegacyDeploymentSettlementLimits.maximumReceiptBytes * 5, 'authenticatedResolution');
|
|
2309
|
+
};
|
|
2310
|
+
export const encodeAuthenticatedCloudlyLegacyDeploymentSettlementResolution = (valueArg) => encodeNormalized(normalizeCloudlyLegacyDeploymentSettlementAuthenticatedResolutionStructure(valueArg), 'authenticatedResolution');
|
|
2311
|
+
export const digestAuthenticatedCloudlyLegacyDeploymentSettlementResolution = (valueArg) => digestBytes(encodeAuthenticatedCloudlyLegacyDeploymentSettlementResolution(valueArg));
|
|
2312
|
+
export const encodeCloudlyLegacyDeploymentSettlementResolutionHmacInput = (valueArg) => frame(cloudlyLegacyDeploymentSettlementDomains.resolutionHmac, encodeNormalized(finalize(normalizeUnsignedAuthenticatedResolutionInternal(valueArg, 'unsignedAuthenticatedResolution'), cloudlyLegacyDeploymentSettlementLimits.maximumReceiptBytes * 5, 'unsignedAuthenticatedResolution'), 'authenticatedResolution.authenticated'));
|
|
2313
|
+
const normalizeExecutionAttemptAuthorityMetadata = (attemptArg, sourceMetadataArg, executionMetadataArg) => {
|
|
2314
|
+
const sourceMetadata = normalizeFencedSourceAuthorityMetadata(sourceMetadataArg, 'executionAttempt.sourceAuthorityMetadata');
|
|
2315
|
+
const executionMetadata = normalizeCloudlyLegacyDeploymentSettlementAuthorityMetadata(executionMetadataArg);
|
|
2316
|
+
assertAuthorityReferenceMatchesMetadata(attemptArg.sourceAuthority, sourceMetadata, 'executionAttempt.sourceAuthority');
|
|
2317
|
+
assertAuthorityReferenceMatchesMetadata(attemptArg.executionAuthority, executionMetadata, 'executionAttempt.executionAuthority');
|
|
2318
|
+
const splitProductionAuthority = canonicalize(attemptArg.sourceAuthority, 'executionAttempt.sourceAuthority') !== canonicalize(attemptArg.executionAuthority, 'executionAttempt.executionAuthority');
|
|
2319
|
+
if (attemptArg.purpose === 'scratch-rehearsal') {
|
|
2320
|
+
if (splitProductionAuthority) {
|
|
2321
|
+
fail('CROSS_FIELD_MISMATCH', 'executionAttempt.executionAuthority');
|
|
2322
|
+
}
|
|
2323
|
+
normalizeFencedSourceAuthorityMetadata(executionMetadata, 'executionAttempt.executionAuthorityMetadata');
|
|
2324
|
+
}
|
|
2325
|
+
else {
|
|
2326
|
+
if (!splitProductionAuthority) {
|
|
2327
|
+
fail('CROSS_FIELD_MISMATCH', 'executionAttempt.executionAuthority');
|
|
2328
|
+
}
|
|
2329
|
+
const productionMetadata = normalizeProductionAuthorityMetadataPair(executionMetadata, sourceMetadata).productionMetadata;
|
|
2330
|
+
if (productionMetadata.sourceAuthenticatedPlanSha256
|
|
2331
|
+
!== attemptArg.authenticatedPlanSha256
|
|
2332
|
+
|| productionMetadata.sourceRequestBundleSha256 !== attemptArg.requestBundleSha256
|
|
2333
|
+
|| productionMetadata.scratchReceiptSha256 !== attemptArg.scratchReceiptSha256) {
|
|
2334
|
+
fail('CROSS_FIELD_MISMATCH', 'executionAttempt.productionAuthorityMetadata');
|
|
2335
|
+
}
|
|
2336
|
+
}
|
|
2337
|
+
return { sourceMetadata, executionMetadata, splitProductionAuthority };
|
|
2338
|
+
};
|
|
2339
|
+
const authorityStatusAt = (observedAtArg, metadataArg, pathArg) => {
|
|
2340
|
+
if (observedAtArg < metadataArg.issuedAt) {
|
|
2341
|
+
fail('CROSS_FIELD_MISMATCH', pathArg);
|
|
2342
|
+
}
|
|
2343
|
+
return observedAtArg < metadataArg.expiresAt ? 'active' : 'expired';
|
|
2344
|
+
};
|
|
2345
|
+
const normalizeExecutionAttemptProofArtifacts = async (argsArg) => {
|
|
2346
|
+
const metadata = normalizeExecutionAttemptAuthorityMetadata(argsArg.executionAttempt, argsArg.sourceMetadata, argsArg.executionMetadata);
|
|
2347
|
+
const authenticatedPlan = await normalizeAuthenticatedCloudlyLegacyDeploymentSettlementPlanForAuthority(argsArg.authenticatedPlan, metadata.sourceMetadata, argsArg.verifier);
|
|
2348
|
+
const requestBundle = await normalizeCloudlyLegacyDeploymentSettlementRequestBundleForAuthority(argsArg.requestBundle, authenticatedPlan, metadata.sourceMetadata, argsArg.verifier);
|
|
2349
|
+
let scratchReceipt = null;
|
|
2350
|
+
let productionAuthorization = null;
|
|
2351
|
+
if (argsArg.executionAttempt.purpose === 'production') {
|
|
2352
|
+
if (argsArg.scratchReceipt === null) {
|
|
2353
|
+
fail('INVALID_SCHEMA', 'executionAttempt.scratchReceipt');
|
|
2354
|
+
}
|
|
2355
|
+
scratchReceipt = await normalizeCloudlyLegacyDeploymentSettlementScratchReceiptForAuthority(argsArg.scratchReceipt, metadata.sourceMetadata, requestBundle.authenticatedRequest, argsArg.verifier);
|
|
2356
|
+
if (metadata.splitProductionAuthority) {
|
|
2357
|
+
if (argsArg.productionAuthorization === null) {
|
|
2358
|
+
if (argsArg.requireProductionAuthorization) {
|
|
2359
|
+
fail('INVALID_SCHEMA', 'executionAttempt.productionAuthorization');
|
|
2360
|
+
}
|
|
2361
|
+
}
|
|
2362
|
+
else {
|
|
2363
|
+
productionAuthorization =
|
|
2364
|
+
await normalizeCloudlyLegacyDeploymentSettlementProductionExecutionAuthorizationForAuthorities(argsArg.productionAuthorization, metadata.executionMetadata, metadata.sourceMetadata, authenticatedPlan, requestBundle, scratchReceipt, argsArg.verifier);
|
|
2365
|
+
}
|
|
2366
|
+
}
|
|
2367
|
+
else if (argsArg.productionAuthorization !== null) {
|
|
2368
|
+
fail('INVALID_SCHEMA', 'executionAttempt.productionAuthorization');
|
|
2369
|
+
}
|
|
2370
|
+
}
|
|
2371
|
+
else if (argsArg.scratchReceipt !== null || argsArg.productionAuthorization !== null) {
|
|
2372
|
+
fail('INVALID_SCHEMA', 'executionAttempt.sourceProof');
|
|
2373
|
+
}
|
|
2374
|
+
const expectedScratchReceiptSha256 = scratchReceipt
|
|
2375
|
+
? digestCloudlyLegacyDeploymentSettlementScratchReceipt(scratchReceipt)
|
|
2376
|
+
: null;
|
|
2377
|
+
if (argsArg.executionAttempt.authenticatedPlanSha256
|
|
2378
|
+
!== digestAuthenticatedCloudlyLegacyDeploymentSettlementPlan(authenticatedPlan)
|
|
2379
|
+
|| argsArg.executionAttempt.requestBundleSha256
|
|
2380
|
+
!== digestCloudlyLegacyDeploymentSettlementRequestBundle(requestBundle)
|
|
2381
|
+
|| argsArg.executionAttempt.scratchReceiptSha256 !== expectedScratchReceiptSha256) {
|
|
2382
|
+
fail('CROSS_FIELD_MISMATCH', 'executionAttempt.sourceProof');
|
|
2383
|
+
}
|
|
2384
|
+
return {
|
|
2385
|
+
...metadata,
|
|
2386
|
+
authenticatedPlan,
|
|
2387
|
+
requestBundle,
|
|
2388
|
+
scratchReceipt,
|
|
2389
|
+
productionAuthorization,
|
|
2390
|
+
};
|
|
2391
|
+
};
|
|
2392
|
+
const normalizeAuthenticatedApplyResultForExecutionAuthority = async (resultArg, executionMetadataArg, requestArg, productionAuthorizationArg, verifierArg) => {
|
|
2393
|
+
const executionMetadata = normalizeCloudlyLegacyDeploymentSettlementAuthorityMetadata(executionMetadataArg);
|
|
2394
|
+
const request = normalizeCloudlyLegacyDeploymentSettlementAuthenticatedProductionRequestStructure(requestArg);
|
|
2395
|
+
const result = normalizeCloudlyLegacyDeploymentSettlementAuthenticatedApplyResultStructure(resultArg);
|
|
2396
|
+
assertAuthorityReferenceMatchesMetadata(result.authority, executionMetadata, 'applyResult.authority');
|
|
2397
|
+
assertSummaryMatchesProductionRequest(result.payload, request.payload, 'applyResult.payload');
|
|
2398
|
+
const resultAt = result.payload.status === 'completed'
|
|
2399
|
+
? result.payload.completedAt
|
|
2400
|
+
: result.payload.rejectedAt;
|
|
2401
|
+
const resultAtPath = result.payload.status === 'completed'
|
|
2402
|
+
? 'applyResult.payload.completedAt'
|
|
2403
|
+
: 'applyResult.payload.rejectedAt';
|
|
2404
|
+
if (canonicalize(result.authority, 'applyResult.authority')
|
|
2405
|
+
!== canonicalize(productionAuthorizationArg.authority, 'productionAuthorization.authority')
|
|
2406
|
+
|| resultAt < request.payload.requestedAt
|
|
2407
|
+
|| resultAt < productionAuthorizationArg.approvedAt) {
|
|
2408
|
+
fail('CROSS_FIELD_MISMATCH', resultAtPath);
|
|
2409
|
+
}
|
|
2410
|
+
assertAuthorityTimestamp(resultAt, executionMetadata, resultAtPath);
|
|
2411
|
+
await requireConsumerVerifiedHmac(result.authority, cloudlyLegacyDeploymentSettlementDomains.applyResultHmac, encodeCloudlyLegacyDeploymentSettlementApplyResultHmacInput(withoutArtifactMac(result)), result.mac, verifierArg, 'applyResult.mac');
|
|
2412
|
+
return result;
|
|
2413
|
+
};
|
|
2414
|
+
const normalizeAuthenticatedCheckResultForExecutionAuthority = async (resultArg, executionMetadataArg, requestArg, productionAuthorizationArg, verifierArg) => {
|
|
2415
|
+
const executionMetadata = normalizeCloudlyLegacyDeploymentSettlementAuthorityMetadata(executionMetadataArg);
|
|
2416
|
+
const request = normalizeCloudlyLegacyDeploymentSettlementAuthenticatedProductionRequestStructure(requestArg);
|
|
2417
|
+
const result = normalizeCloudlyLegacyDeploymentSettlementAuthenticatedCheckResultStructure(resultArg);
|
|
2418
|
+
assertAuthorityReferenceMatchesMetadata(result.authority, executionMetadata, 'checkResult.authority');
|
|
2419
|
+
assertSummaryMatchesProductionRequest(result.payload, request.payload, 'checkResult.payload');
|
|
2420
|
+
if (canonicalize(result.authority, 'checkResult.authority')
|
|
2421
|
+
!== canonicalize(productionAuthorizationArg.authority, 'productionAuthorization.authority')
|
|
2422
|
+
|| result.payload.checkedAt < request.payload.requestedAt
|
|
2423
|
+
|| result.payload.checkedAt < productionAuthorizationArg.approvedAt) {
|
|
2424
|
+
fail('CROSS_FIELD_MISMATCH', 'checkResult.payload.checkedAt');
|
|
2425
|
+
}
|
|
2426
|
+
assertAuthorityTimestamp(result.payload.checkedAt, executionMetadata, 'checkResult.checkedAt');
|
|
2427
|
+
await requireConsumerVerifiedHmac(result.authority, cloudlyLegacyDeploymentSettlementDomains.checkResultHmac, encodeCloudlyLegacyDeploymentSettlementCheckResultHmacInput(withoutArtifactMac(result)), result.mac, verifierArg, 'checkResult.mac');
|
|
2428
|
+
return result;
|
|
2429
|
+
};
|
|
2430
|
+
/** Artifact/status binding only; trust the authenticated recovery attestation instead. */
|
|
2431
|
+
export const normalizeCloudlyLegacyDeploymentSettlementResolutionBundleForAuthorities = async (bundleArg, sourceMetadataArg, executionMetadataArg, authenticatedPlanArg, requestBundleArg, scratchReceiptArg, productionAuthorizationArg, verifierArg) => {
|
|
2432
|
+
const bundle = normalizeCloudlyLegacyDeploymentSettlementResolutionBundle(bundleArg);
|
|
2433
|
+
const artifacts = await normalizeExecutionAttemptProofArtifacts({
|
|
2434
|
+
executionAttempt: bundle.executionAttempt,
|
|
2435
|
+
sourceMetadata: sourceMetadataArg,
|
|
2436
|
+
executionMetadata: executionMetadataArg,
|
|
2437
|
+
authenticatedPlan: authenticatedPlanArg,
|
|
2438
|
+
requestBundle: requestBundleArg,
|
|
2439
|
+
scratchReceipt: scratchReceiptArg,
|
|
2440
|
+
productionAuthorization: productionAuthorizationArg,
|
|
2441
|
+
requireProductionAuthorization: true,
|
|
2442
|
+
verifier: verifierArg,
|
|
2443
|
+
});
|
|
2444
|
+
if (bundle.sourceAuthorityStatus !== authorityStatusAt(bundle.observedAt, artifacts.sourceMetadata, 'resolutionBundle.sourceAuthorityStatus')) {
|
|
2445
|
+
fail('CROSS_FIELD_MISMATCH', 'resolutionBundle.sourceAuthorityStatus');
|
|
2446
|
+
}
|
|
2447
|
+
if (bundle.executionAuthorityStatus !== authorityStatusAt(bundle.observedAt, artifacts.executionMetadata, 'resolutionBundle.executionAuthorityStatus')) {
|
|
2448
|
+
fail('CROSS_FIELD_MISMATCH', 'resolutionBundle.executionAuthorityStatus');
|
|
2449
|
+
}
|
|
2450
|
+
if (bundle.executionAttempt.purpose === 'production') {
|
|
2451
|
+
const productionAuthorization = artifacts.productionAuthorization
|
|
2452
|
+
?? fail('CROSS_FIELD_MISMATCH', 'resolutionBundle.productionAuthorization');
|
|
2453
|
+
const attemptObservation = bundle.attemptObservation
|
|
2454
|
+
?? fail('CROSS_FIELD_MISMATCH', 'resolutionBundle.attemptObservation');
|
|
2455
|
+
if (attemptObservation.preparedAt < productionAuthorization.approvedAt
|
|
2456
|
+
|| attemptObservation.resolvedAt < productionAuthorization.approvedAt
|
|
2457
|
+
|| bundle.observedAt < productionAuthorization.approvedAt) {
|
|
2458
|
+
fail('CROSS_FIELD_MISMATCH', 'resolutionBundle.attemptObservation.preparedAt');
|
|
2459
|
+
}
|
|
2460
|
+
}
|
|
2461
|
+
if (bundle.outcome === 'committed') {
|
|
2462
|
+
const receipt = bundle.originalReceipt;
|
|
2463
|
+
if (receipt.kind === 'cloudly-legacy-deployment-settlement-scratch-receipt') {
|
|
2464
|
+
await normalizeCloudlyLegacyDeploymentSettlementScratchReceiptForAuthority(receipt, artifacts.sourceMetadata, artifacts.requestBundle.authenticatedRequest, verifierArg);
|
|
2465
|
+
}
|
|
2466
|
+
else if (receipt.schemaVersion === 2) {
|
|
2467
|
+
if (!artifacts.splitProductionAuthority || !artifacts.productionAuthorization) {
|
|
2468
|
+
fail('CROSS_FIELD_MISMATCH', 'resolutionBundle.originalReceipt.authority');
|
|
2469
|
+
}
|
|
2470
|
+
await normalizeCloudlyLegacyDeploymentSettlementProductionReceiptV2ForAuthorities(receipt, artifacts.executionMetadata, artifacts.sourceMetadata, artifacts.authenticatedPlan, artifacts.requestBundle, verifierArg);
|
|
2471
|
+
if (canonicalize(receipt.productionAuthorization, 'resolutionBundle.originalReceipt.productionAuthorization') !== canonicalize(artifacts.productionAuthorization, 'resolutionBundle.productionAuthorization')) {
|
|
2472
|
+
fail('CROSS_FIELD_MISMATCH', 'resolutionBundle.originalReceipt.productionAuthorization');
|
|
2473
|
+
}
|
|
2474
|
+
}
|
|
2475
|
+
else {
|
|
2476
|
+
if (artifacts.splitProductionAuthority) {
|
|
2477
|
+
fail('CROSS_FIELD_MISMATCH', 'resolutionBundle.originalReceipt.authority');
|
|
2478
|
+
}
|
|
2479
|
+
await normalizeCloudlyLegacyDeploymentSettlementProductionReceiptForAuthority(receipt, artifacts.sourceMetadata, artifacts.requestBundle.authenticatedRequest, verifierArg);
|
|
2480
|
+
}
|
|
2481
|
+
if (receipt.kind === 'cloudly-legacy-deployment-settlement-production-receipt'
|
|
2482
|
+
&& artifacts.scratchReceipt
|
|
2483
|
+
&& digestCloudlyLegacyDeploymentSettlementScratchReceipt(receipt.scratchReceipt)
|
|
2484
|
+
!== digestCloudlyLegacyDeploymentSettlementScratchReceipt(artifacts.scratchReceipt)) {
|
|
2485
|
+
fail('CROSS_FIELD_MISMATCH', 'resolutionBundle.originalReceipt.scratchReceipt');
|
|
2486
|
+
}
|
|
2487
|
+
}
|
|
2488
|
+
return bundle;
|
|
2489
|
+
};
|
|
2490
|
+
export const normalizeAuthenticatedCloudlyLegacyDeploymentSettlementResolutionForAuthorities = async (attestationArg, sourceMetadataArg, executionMetadataArg, authenticatedPlanArg, requestBundleArg, scratchReceiptArg, productionAuthorizationArg, verifierArg) => {
|
|
2491
|
+
const attestation = normalizeCloudlyLegacyDeploymentSettlementAuthenticatedResolutionStructure(attestationArg);
|
|
2492
|
+
const executionMetadata = normalizeCloudlyLegacyDeploymentSettlementAuthorityMetadata(executionMetadataArg);
|
|
2493
|
+
assertAuthorityReferenceMatchesMetadata(attestation.authority, executionMetadata, 'authenticatedResolution.authority');
|
|
2494
|
+
await requireConsumerVerifiedHmac(attestation.authority, cloudlyLegacyDeploymentSettlementDomains.resolutionHmac, encodeCloudlyLegacyDeploymentSettlementResolutionHmacInput(withoutArtifactMac(attestation)), attestation.mac, verifierArg, 'authenticatedResolution.mac');
|
|
2495
|
+
const payload = await normalizeCloudlyLegacyDeploymentSettlementResolutionBundleForAuthorities(attestation.payload, sourceMetadataArg, executionMetadata, authenticatedPlanArg, requestBundleArg, scratchReceiptArg, productionAuthorizationArg, verifierArg);
|
|
2496
|
+
if (canonicalize(attestation.payload, 'authenticatedResolution.payload')
|
|
2497
|
+
!== canonicalize(payload, 'authenticatedResolution.verifiedPayload')) {
|
|
2498
|
+
fail('CROSS_FIELD_MISMATCH', 'authenticatedResolution.payload');
|
|
2499
|
+
}
|
|
2500
|
+
return attestation;
|
|
2501
|
+
};
|
|
2502
|
+
const normalizeSettlementExecutionBundleCommon = (valueArg, pathArg, purposeArg) => {
|
|
2503
|
+
const value = readRecord(valueArg, pathArg);
|
|
2504
|
+
const hasReceipt = Object.hasOwn(value, 'receipt');
|
|
2505
|
+
assertExactKeys(value, [
|
|
2506
|
+
'schemaVersion',
|
|
2507
|
+
'kind',
|
|
2508
|
+
'purpose',
|
|
2509
|
+
'executionAttempt',
|
|
2510
|
+
'authenticatedResult',
|
|
2511
|
+
...(hasReceipt ? ['receipt'] : []),
|
|
2512
|
+
], pathArg);
|
|
2513
|
+
if (value.kind !== 'cloudly-legacy-deployment-settlement-execution-bundle'
|
|
2514
|
+
|| value.purpose !== purposeArg) {
|
|
2515
|
+
fail('INVALID_VALUE', `${pathArg}.kind`);
|
|
2516
|
+
}
|
|
2517
|
+
const executionAttempt = normalizeExecutionAttemptIdentityInternal(value.executionAttempt, `${pathArg}.executionAttempt`);
|
|
2518
|
+
const authenticatedResult = normalizeCloudlyLegacyDeploymentSettlementAuthenticatedApplyResultStructure(value.authenticatedResult);
|
|
2519
|
+
if (executionAttempt.purpose !== purposeArg
|
|
2520
|
+
|| canonicalize(authenticatedResult.authority, `${pathArg}.result.authority`)
|
|
2521
|
+
!== canonicalize(executionAttempt.executionAuthority, `${pathArg}.attempt.authority`)
|
|
2522
|
+
|| (authenticatedResult.payload.status === 'completed') !== hasReceipt) {
|
|
2523
|
+
fail('CROSS_FIELD_MISMATCH', `${pathArg}.authenticatedResult`);
|
|
2524
|
+
}
|
|
2525
|
+
return { value, executionAttempt, authenticatedResult, hasReceipt };
|
|
2526
|
+
};
|
|
2527
|
+
/** Structural only; this function does not authenticate result or receipt MACs. */
|
|
2528
|
+
export const normalizeCloudlyLegacyDeploymentSettlementScratchExecutionBundle = (valueArg) => {
|
|
2529
|
+
const normalized = normalizeSettlementExecutionBundleCommon(valueArg, 'scratchExecutionBundle', 'scratch-rehearsal');
|
|
2530
|
+
if (normalized.value.schemaVersion !== 1) {
|
|
2531
|
+
fail('INVALID_VALUE', 'scratchExecutionBundle.schemaVersion');
|
|
2532
|
+
}
|
|
2533
|
+
const receipt = normalized.hasReceipt
|
|
2534
|
+
? normalizeCloudlyLegacyDeploymentSettlementScratchReceipt(normalized.value.receipt)
|
|
2535
|
+
: undefined;
|
|
2536
|
+
if (receipt
|
|
2537
|
+
&& (canonicalize(receipt.authority, 'scratchExecutionBundle.receipt.authority')
|
|
2538
|
+
!== canonicalize(normalized.executionAttempt.executionAuthority, 'scratchExecutionBundle.attempt.authority')
|
|
2539
|
+
|| normalized.authenticatedResult.payload.status !== 'completed'
|
|
2540
|
+
|| normalized.authenticatedResult.payload.requestSha256 !== receipt.requestSha256
|
|
2541
|
+
|| (normalized.authenticatedResult.payload.disposition !== receipt.disposition
|
|
2542
|
+
&& !(receipt.disposition === 'applied'
|
|
2543
|
+
&& normalized.authenticatedResult.payload.disposition === 'exact-replay')))) {
|
|
2544
|
+
fail('CROSS_FIELD_MISMATCH', 'scratchExecutionBundle.receipt');
|
|
2545
|
+
}
|
|
2546
|
+
const executionAttempt = normalized.executionAttempt;
|
|
2547
|
+
const result = receipt
|
|
2548
|
+
? {
|
|
2549
|
+
schemaVersion: 1,
|
|
2550
|
+
kind: 'cloudly-legacy-deployment-settlement-execution-bundle',
|
|
2551
|
+
purpose: 'scratch-rehearsal',
|
|
2552
|
+
executionAttempt,
|
|
2553
|
+
authenticatedResult: normalized.authenticatedResult,
|
|
2554
|
+
receipt,
|
|
2555
|
+
}
|
|
2556
|
+
: {
|
|
2557
|
+
schemaVersion: 1,
|
|
2558
|
+
kind: 'cloudly-legacy-deployment-settlement-execution-bundle',
|
|
2559
|
+
purpose: 'scratch-rehearsal',
|
|
2560
|
+
executionAttempt,
|
|
2561
|
+
authenticatedResult: normalized.authenticatedResult,
|
|
2562
|
+
};
|
|
2563
|
+
return finalize(result, cloudlyLegacyDeploymentSettlementLimits.maximumReceiptBytes * 2, 'scratchExecutionBundle');
|
|
2564
|
+
};
|
|
2565
|
+
/** Structural only; this function does not authenticate result or receipt MACs. */
|
|
2566
|
+
export const normalizeCloudlyLegacyDeploymentSettlementProductionExecutionBundleV2 = (valueArg) => {
|
|
2567
|
+
const normalized = normalizeSettlementExecutionBundleCommon(valueArg, 'productionExecutionBundleV2', 'production');
|
|
2568
|
+
if (normalized.value.schemaVersion !== 2) {
|
|
2569
|
+
fail('INVALID_VALUE', 'productionExecutionBundleV2.schemaVersion');
|
|
2570
|
+
}
|
|
2571
|
+
const receipt = normalized.hasReceipt
|
|
2572
|
+
? normalizeCloudlyLegacyDeploymentSettlementProductionReceiptV2(normalized.value.receipt)
|
|
2573
|
+
: undefined;
|
|
2574
|
+
if (receipt
|
|
2575
|
+
&& (canonicalize(receipt.executionAttempt, 'productionExecutionBundleV2.receipt.attempt')
|
|
2576
|
+
!== canonicalize(normalized.executionAttempt, 'productionExecutionBundleV2.executionAttempt')
|
|
2577
|
+
|| normalized.authenticatedResult.payload.status !== 'completed'
|
|
2578
|
+
|| normalized.authenticatedResult.payload.requestSha256 !== receipt.requestSha256
|
|
2579
|
+
|| (normalized.authenticatedResult.payload.disposition !== receipt.disposition
|
|
2580
|
+
&& !(receipt.disposition === 'applied'
|
|
2581
|
+
&& normalized.authenticatedResult.payload.disposition === 'exact-replay')))) {
|
|
2582
|
+
fail('CROSS_FIELD_MISMATCH', 'productionExecutionBundleV2.receipt');
|
|
2583
|
+
}
|
|
2584
|
+
const executionAttempt = normalized.executionAttempt;
|
|
2585
|
+
const result = receipt
|
|
2586
|
+
? {
|
|
2587
|
+
schemaVersion: 2,
|
|
2588
|
+
kind: 'cloudly-legacy-deployment-settlement-execution-bundle',
|
|
2589
|
+
purpose: 'production',
|
|
2590
|
+
executionAttempt,
|
|
2591
|
+
authenticatedResult: normalized.authenticatedResult,
|
|
2592
|
+
receipt,
|
|
2593
|
+
}
|
|
2594
|
+
: {
|
|
2595
|
+
schemaVersion: 2,
|
|
2596
|
+
kind: 'cloudly-legacy-deployment-settlement-execution-bundle',
|
|
2597
|
+
purpose: 'production',
|
|
2598
|
+
executionAttempt,
|
|
2599
|
+
authenticatedResult: normalized.authenticatedResult,
|
|
2600
|
+
};
|
|
2601
|
+
return finalize(result, cloudlyLegacyDeploymentSettlementLimits.maximumReceiptBytes * 4, 'productionExecutionBundleV2');
|
|
2602
|
+
};
|
|
2603
|
+
export const encodeCloudlyLegacyDeploymentSettlementScratchExecutionBundle = (valueArg) => encodeNormalized(normalizeCloudlyLegacyDeploymentSettlementScratchExecutionBundle(valueArg), 'scratchExecutionBundle');
|
|
2604
|
+
export const encodeCloudlyLegacyDeploymentSettlementProductionExecutionBundleV2 = (valueArg) => encodeNormalized(normalizeCloudlyLegacyDeploymentSettlementProductionExecutionBundleV2(valueArg), 'productionExecutionBundleV2');
|
|
2605
|
+
export const normalizeCloudlyLegacyDeploymentSettlementScratchExecutionBundleForAuthority = async (bundleArg, sourceMetadataArg, authenticatedPlanArg, requestBundleArg, verifierArg) => {
|
|
2606
|
+
const bundle = normalizeCloudlyLegacyDeploymentSettlementScratchExecutionBundle(bundleArg);
|
|
2607
|
+
const artifacts = await normalizeExecutionAttemptProofArtifacts({
|
|
2608
|
+
executionAttempt: bundle.executionAttempt,
|
|
2609
|
+
sourceMetadata: sourceMetadataArg,
|
|
2610
|
+
executionMetadata: sourceMetadataArg,
|
|
2611
|
+
authenticatedPlan: authenticatedPlanArg,
|
|
2612
|
+
requestBundle: requestBundleArg,
|
|
2613
|
+
scratchReceipt: null,
|
|
2614
|
+
productionAuthorization: null,
|
|
2615
|
+
requireProductionAuthorization: false,
|
|
2616
|
+
verifier: verifierArg,
|
|
2617
|
+
});
|
|
2618
|
+
await normalizeAuthenticatedCloudlyLegacyDeploymentSettlementApplyResultForAuthority(bundle.authenticatedResult, artifacts.sourceMetadata, artifacts.requestBundle.authenticatedRequest, verifierArg);
|
|
2619
|
+
if (bundle.receipt) {
|
|
2620
|
+
await normalizeCloudlyLegacyDeploymentSettlementScratchReceiptForAuthority(bundle.receipt, artifacts.sourceMetadata, artifacts.requestBundle.authenticatedRequest, verifierArg);
|
|
2621
|
+
}
|
|
2622
|
+
return bundle;
|
|
2623
|
+
};
|
|
2624
|
+
export const normalizeCloudlyLegacyDeploymentSettlementProductionExecutionBundleV2ForAuthorities = async (bundleArg, productionAuthorizationArg, productionMetadataArg, sourceMetadataArg, authenticatedPlanArg, requestBundleArg, scratchReceiptArg, verifierArg) => {
|
|
2625
|
+
const bundle = normalizeCloudlyLegacyDeploymentSettlementProductionExecutionBundleV2(bundleArg);
|
|
2626
|
+
const artifacts = await normalizeExecutionAttemptProofArtifacts({
|
|
2627
|
+
executionAttempt: bundle.executionAttempt,
|
|
2628
|
+
sourceMetadata: sourceMetadataArg,
|
|
2629
|
+
executionMetadata: productionMetadataArg,
|
|
2630
|
+
authenticatedPlan: authenticatedPlanArg,
|
|
2631
|
+
requestBundle: requestBundleArg,
|
|
2632
|
+
scratchReceipt: scratchReceiptArg,
|
|
2633
|
+
productionAuthorization: productionAuthorizationArg,
|
|
2634
|
+
requireProductionAuthorization: true,
|
|
2635
|
+
verifier: verifierArg,
|
|
2636
|
+
});
|
|
2637
|
+
const productionAuthorization = artifacts.productionAuthorization
|
|
2638
|
+
?? fail('CROSS_FIELD_MISMATCH', 'productionExecutionBundleV2.executionAuthority');
|
|
2639
|
+
if (!artifacts.splitProductionAuthority) {
|
|
2640
|
+
fail('CROSS_FIELD_MISMATCH', 'productionExecutionBundleV2.executionAuthority');
|
|
2641
|
+
}
|
|
2642
|
+
await normalizeAuthenticatedApplyResultForExecutionAuthority(bundle.authenticatedResult, artifacts.executionMetadata, artifacts.requestBundle.authenticatedRequest, productionAuthorization, verifierArg);
|
|
2643
|
+
if (bundle.receipt) {
|
|
2644
|
+
await normalizeCloudlyLegacyDeploymentSettlementProductionReceiptV2ForAuthorities(bundle.receipt, artifacts.executionMetadata, artifacts.sourceMetadata, artifacts.authenticatedPlan, artifacts.requestBundle, verifierArg);
|
|
2645
|
+
if (canonicalize(bundle.receipt.productionAuthorization, 'productionExecutionBundleV2.receipt.productionAuthorization') !== canonicalize(artifacts.productionAuthorization, 'productionExecutionBundleV2.productionAuthorization')) {
|
|
2646
|
+
fail('CROSS_FIELD_MISMATCH', 'productionExecutionBundleV2.productionAuthorization');
|
|
2647
|
+
}
|
|
2648
|
+
}
|
|
2649
|
+
return bundle;
|
|
2650
|
+
};
|
|
2651
|
+
export const cloudlyLegacyDeploymentSettlementStdioLimits = Object.freeze({
|
|
2652
|
+
maximumMongoDescriptorBytes: 16 * 1024,
|
|
2653
|
+
maximumPrivateArtifactAggregateBytes: 4 * 1024 * 1024,
|
|
2654
|
+
maximumRequestFrameBytes: 5 * 1024 * 1024,
|
|
2655
|
+
maximumResponseFrameBytes: 4 * 1024 * 1024,
|
|
2656
|
+
});
|
|
2657
|
+
export const cloudlyLegacyDeploymentSettlementStdioCommands = Object.freeze([
|
|
2658
|
+
'settlement-plan',
|
|
2659
|
+
'settlement-request',
|
|
2660
|
+
'settlement-scratch-check',
|
|
2661
|
+
'settlement-scratch-apply',
|
|
2662
|
+
'settlement-scratch-resolve',
|
|
2663
|
+
'settlement-production-authorize',
|
|
2664
|
+
'settlement-production-check',
|
|
2665
|
+
'settlement-production-apply',
|
|
2666
|
+
'settlement-production-resolve',
|
|
2667
|
+
]);
|
|
2668
|
+
export const cloudlyLegacyDeploymentSettlementStdioErrorMetadata = Object.freeze({
|
|
2669
|
+
INVALID_FRAME: Object.freeze({ retryable: false }),
|
|
2670
|
+
INVALID_REQUEST: Object.freeze({ retryable: false }),
|
|
2671
|
+
AUTHORITY_INVALID: Object.freeze({ retryable: false }),
|
|
2672
|
+
AUTHORITY_EXPIRED: Object.freeze({ retryable: true }),
|
|
2673
|
+
REQUEST_MISMATCH: Object.freeze({ retryable: false }),
|
|
2674
|
+
PLAN_MISMATCH: Object.freeze({ retryable: false }),
|
|
2675
|
+
SOURCE_STATE_MISMATCH: Object.freeze({ retryable: false }),
|
|
2676
|
+
FINAL_STATE_MISMATCH: Object.freeze({ retryable: true }),
|
|
2677
|
+
TRANSACTIONS_UNSUPPORTED: Object.freeze({ retryable: false }),
|
|
2678
|
+
OPERATION_DRIFT: Object.freeze({ retryable: false }),
|
|
2679
|
+
CLAIM_DRIFT: Object.freeze({ retryable: false }),
|
|
2680
|
+
CLASSIFICATION_MISMATCH: Object.freeze({ retryable: false }),
|
|
2681
|
+
ATTEMPT_CONFLICT: Object.freeze({ retryable: false }),
|
|
2682
|
+
ATTEMPT_NOT_FOUND: Object.freeze({ retryable: false }),
|
|
2683
|
+
INTERNAL_ERROR: Object.freeze({ retryable: true }),
|
|
2684
|
+
});
|
|
2685
|
+
const stdioRequestKeys = ['schemaVersion', 'kind', 'requestId', 'command', 'payload'];
|
|
2686
|
+
const stdioResponseSuccessKeys = [
|
|
2687
|
+
'schemaVersion',
|
|
2688
|
+
'kind',
|
|
2689
|
+
'requestId',
|
|
2690
|
+
'command',
|
|
2691
|
+
'ok',
|
|
2692
|
+
'payload',
|
|
2693
|
+
];
|
|
2694
|
+
const stdioResponseErrorKeys = [
|
|
2695
|
+
'schemaVersion',
|
|
2696
|
+
'kind',
|
|
2697
|
+
'requestId',
|
|
2698
|
+
'command',
|
|
2699
|
+
'ok',
|
|
2700
|
+
'error',
|
|
2701
|
+
];
|
|
2702
|
+
const normalizeSettlementMongoDescriptor = (valueArg, pathArg) => {
|
|
2703
|
+
const value = readRecord(valueArg, pathArg);
|
|
2704
|
+
assertExactKeys(value, ['mongoDbUrl', 'mongoDbName', 'mongoDbUser', 'mongoDbPass'], pathArg);
|
|
2705
|
+
for (const key of ['mongoDbUrl', 'mongoDbName', 'mongoDbUser', 'mongoDbPass']) {
|
|
2706
|
+
if (typeof value[key] !== 'string'
|
|
2707
|
+
|| value[key].length === 0
|
|
2708
|
+
|| Buffer.byteLength(value[key], 'utf8')
|
|
2709
|
+
> cloudlyLegacyDeploymentSettlementStdioLimits.maximumMongoDescriptorBytes
|
|
2710
|
+
|| /[\u0000-\u0020\u007f]/u.test(value[key])) {
|
|
2711
|
+
fail('INVALID_VALUE', `${pathArg}.${key}`);
|
|
2712
|
+
}
|
|
2713
|
+
}
|
|
2714
|
+
const descriptor = value;
|
|
2715
|
+
let url;
|
|
2716
|
+
let mongoDbName;
|
|
2717
|
+
let mongoDbUser;
|
|
2718
|
+
let mongoDbPass;
|
|
2719
|
+
try {
|
|
2720
|
+
url = new URL(descriptor.mongoDbUrl);
|
|
2721
|
+
mongoDbName = decodeURIComponent(url.pathname.slice(1));
|
|
2722
|
+
mongoDbUser = decodeURIComponent(url.username);
|
|
2723
|
+
mongoDbPass = decodeURIComponent(url.password);
|
|
2724
|
+
}
|
|
2725
|
+
catch {
|
|
2726
|
+
return fail('INVALID_VALUE', `${pathArg}.mongoDbUrl`);
|
|
2727
|
+
}
|
|
2728
|
+
const queryKeys = [...new Set(url.searchParams.keys())].sort();
|
|
2729
|
+
if (url.protocol !== 'mongodb:'
|
|
2730
|
+
|| !url.hostname
|
|
2731
|
+
|| !url.port
|
|
2732
|
+
|| url.hash !== ''
|
|
2733
|
+
|| mongoDbName !== descriptor.mongoDbName
|
|
2734
|
+
|| mongoDbUser !== descriptor.mongoDbUser
|
|
2735
|
+
|| mongoDbPass !== descriptor.mongoDbPass
|
|
2736
|
+
|| JSON.stringify(queryKeys) !== JSON.stringify(['authSource', 'directConnection'])
|
|
2737
|
+
|| url.searchParams.getAll('authSource').length !== 1
|
|
2738
|
+
|| url.searchParams.get('authSource') !== descriptor.mongoDbName
|
|
2739
|
+
|| url.searchParams.getAll('directConnection').length !== 1
|
|
2740
|
+
|| url.searchParams.get('directConnection') !== 'true') {
|
|
2741
|
+
fail('CROSS_FIELD_MISMATCH', pathArg);
|
|
2742
|
+
}
|
|
2743
|
+
const output = {
|
|
2744
|
+
mongoDbUrl: descriptor.mongoDbUrl,
|
|
2745
|
+
mongoDbName: descriptor.mongoDbName,
|
|
2746
|
+
mongoDbUser: descriptor.mongoDbUser,
|
|
2747
|
+
mongoDbPass: descriptor.mongoDbPass,
|
|
2748
|
+
};
|
|
2749
|
+
if (Buffer.byteLength(canonicalize(output, pathArg), 'utf8')
|
|
2750
|
+
> cloudlyLegacyDeploymentSettlementStdioLimits.maximumMongoDescriptorBytes) {
|
|
2751
|
+
fail('LIMIT_EXCEEDED', pathArg);
|
|
2752
|
+
}
|
|
2753
|
+
return output;
|
|
2754
|
+
};
|
|
2755
|
+
export const normalizeCloudlyLegacyDeploymentSettlementMongoDescriptor = (valueArg) => finalize(normalizeSettlementMongoDescriptor(valueArg, 'mongoDescriptor'), cloudlyLegacyDeploymentSettlementStdioLimits.maximumMongoDescriptorBytes, 'mongoDescriptor');
|
|
2756
|
+
const assertStdioArtifactAggregate = (valueArg, pathArg) => {
|
|
2757
|
+
if (Buffer.byteLength(canonicalize(valueArg, pathArg), 'utf8')
|
|
2758
|
+
> cloudlyLegacyDeploymentSettlementStdioLimits.maximumPrivateArtifactAggregateBytes) {
|
|
2759
|
+
fail('LIMIT_EXCEEDED', pathArg);
|
|
2760
|
+
}
|
|
2761
|
+
};
|
|
2762
|
+
const assertDistinctStdioHandoffKeyMaterial = (sourceHandoffArg, executionHandoffArg, pathArg) => {
|
|
2763
|
+
const sourceKey = Buffer.from(sourceHandoffArg.hmacKeyPlaintext.value, 'base64url');
|
|
2764
|
+
const executionKey = Buffer.from(executionHandoffArg.hmacKeyPlaintext.value, 'base64url');
|
|
2765
|
+
let equal = false;
|
|
2766
|
+
try {
|
|
2767
|
+
equal = plugins.crypto.timingSafeEqual(sourceKey, executionKey);
|
|
2768
|
+
}
|
|
2769
|
+
finally {
|
|
2770
|
+
sourceKey.fill(0);
|
|
2771
|
+
executionKey.fill(0);
|
|
2772
|
+
}
|
|
2773
|
+
if (equal) {
|
|
2774
|
+
fail('CROSS_FIELD_MISMATCH', pathArg);
|
|
2775
|
+
}
|
|
2776
|
+
};
|
|
2777
|
+
const assertExecutionAttemptMatchesStdioArtifacts = (argsArg) => {
|
|
2778
|
+
const sourceReference = argsArg.sourceHandoff.authorityReference;
|
|
2779
|
+
const executionReference = argsArg.executionHandoff.authorityReference;
|
|
2780
|
+
const sourceMetadata = normalizeFencedSourceAuthorityMetadata(argsArg.sourceHandoff.authorityMetadata, `${argsArg.path}.sourceAuthorityMetadata`);
|
|
2781
|
+
if (argsArg.purpose === 'production') {
|
|
2782
|
+
assertDistinctStdioHandoffKeyMaterial(argsArg.sourceHandoff, argsArg.executionHandoff, `${argsArg.path}.authorityKeySeparation`);
|
|
2783
|
+
normalizeProductionAuthorityMetadataPair(argsArg.executionHandoff.authorityMetadata, sourceMetadata);
|
|
2784
|
+
}
|
|
2785
|
+
else {
|
|
2786
|
+
normalizeFencedSourceAuthorityMetadata(argsArg.executionHandoff.authorityMetadata, `${argsArg.path}.executionAuthorityMetadata`);
|
|
2787
|
+
}
|
|
2788
|
+
normalizeCloudlyLegacyDeploymentSettlementPlanForAuthority(argsArg.authenticatedPlan.payload, sourceMetadata);
|
|
2789
|
+
normalizeCloudlyLegacyDeploymentSettlementProductionRequestForAuthority(argsArg.requestBundle.authenticatedRequest.payload, sourceMetadata);
|
|
2790
|
+
if (argsArg.scratchReceipt) {
|
|
2791
|
+
normalizeCloudlyLegacyDeploymentSettlementScratchReceiptStructureForRequest(argsArg.scratchReceipt, argsArg.requestBundle.authenticatedRequest);
|
|
2792
|
+
}
|
|
2793
|
+
if (canonicalize(argsArg.authenticatedPlan.authority, `${argsArg.path}.plan.authority`)
|
|
2794
|
+
!== canonicalize(sourceReference, `${argsArg.path}.sourceAuthority`)
|
|
2795
|
+
|| canonicalize(argsArg.requestBundle.authenticatedRequest.authority, `${argsArg.path}.request.authority`) !== canonicalize(sourceReference, `${argsArg.path}.sourceAuthority`)
|
|
2796
|
+
|| canonicalize(argsArg.requestBundle.authenticatedRehearsalBinding.authority, `${argsArg.path}.binding.authority`) !== canonicalize(sourceReference, `${argsArg.path}.sourceAuthority`)
|
|
2797
|
+
|| canonicalize(argsArg.authenticatedPlan.payload, `${argsArg.path}.plan.payload`)
|
|
2798
|
+
!== canonicalize(argsArg.requestBundle.authenticatedRequest.payload.plan, `${argsArg.path}.request.plan`)
|
|
2799
|
+
|| argsArg.authenticatedPlan.payloadSha256
|
|
2800
|
+
!== argsArg.requestBundle.authenticatedRequest.payload.planSha256
|
|
2801
|
+
|| (argsArg.scratchReceipt !== undefined
|
|
2802
|
+
&& (canonicalize(argsArg.scratchReceipt.authority, `${argsArg.path}.scratch.authority`)
|
|
2803
|
+
!== canonicalize(sourceReference, `${argsArg.path}.sourceAuthority`)
|
|
2804
|
+
|| argsArg.scratchReceipt.requestSha256
|
|
2805
|
+
!== argsArg.requestBundle.authenticatedRequest.payloadSha256))) {
|
|
2806
|
+
fail('CROSS_FIELD_MISMATCH', `${argsArg.path}.sourceArtifacts`);
|
|
2807
|
+
}
|
|
2808
|
+
const scratchReceiptSha256 = argsArg.scratchReceipt
|
|
2809
|
+
? digestCloudlyLegacyDeploymentSettlementScratchReceipt(argsArg.scratchReceipt)
|
|
2810
|
+
: null;
|
|
2811
|
+
if (argsArg.attempt.purpose !== argsArg.purpose
|
|
2812
|
+
|| argsArg.attempt.operationId !== argsArg.executionHandoff.authorityMetadata.operationId
|
|
2813
|
+
|| argsArg.attempt.settlementId !== argsArg.executionHandoff.authorityMetadata.settlementId
|
|
2814
|
+
|| canonicalize(argsArg.attempt.sourceAuthority, `${argsArg.path}.attempt.sourceAuthority`)
|
|
2815
|
+
!== canonicalize(sourceReference, `${argsArg.path}.sourceAuthority`)
|
|
2816
|
+
|| canonicalize(argsArg.attempt.executionAuthority, `${argsArg.path}.attempt.executionAuthority`)
|
|
2817
|
+
!== canonicalize(executionReference, `${argsArg.path}.executionAuthority`)
|
|
2818
|
+
|| argsArg.attempt.authenticatedPlanSha256
|
|
2819
|
+
!== digestAuthenticatedCloudlyLegacyDeploymentSettlementPlan(argsArg.authenticatedPlan)
|
|
2820
|
+
|| argsArg.attempt.requestBundleSha256
|
|
2821
|
+
!== digestCloudlyLegacyDeploymentSettlementRequestBundle(argsArg.requestBundle)
|
|
2822
|
+
|| argsArg.attempt.scratchReceiptSha256 !== scratchReceiptSha256) {
|
|
2823
|
+
fail('CROSS_FIELD_MISMATCH', `${argsArg.path}.executionAttempt`);
|
|
2824
|
+
}
|
|
2825
|
+
if (argsArg.purpose === 'production') {
|
|
2826
|
+
const productionMetadata = argsArg.executionHandoff.authorityMetadata;
|
|
2827
|
+
if (!productionMetadata.sourceAuthority
|
|
2828
|
+
|| canonicalize(productionMetadata.sourceAuthority, `${argsArg.path}.metadata.sourceAuthority`)
|
|
2829
|
+
!== canonicalize(sourceReference, `${argsArg.path}.sourceAuthority`)
|
|
2830
|
+
|| productionMetadata.sourceAuthenticatedPlanSha256
|
|
2831
|
+
!== argsArg.attempt.authenticatedPlanSha256
|
|
2832
|
+
|| productionMetadata.sourceRequestBundleSha256 !== argsArg.attempt.requestBundleSha256
|
|
2833
|
+
|| productionMetadata.scratchReceiptSha256 !== scratchReceiptSha256) {
|
|
2834
|
+
fail('CROSS_FIELD_MISMATCH', `${argsArg.path}.productionAuthorityHandoff`);
|
|
2835
|
+
}
|
|
2836
|
+
}
|
|
2837
|
+
};
|
|
2838
|
+
const normalizeScratchStdioPayload = (valueArg, pathArg, resolveArg) => {
|
|
2839
|
+
const value = readRecord(valueArg, pathArg);
|
|
2840
|
+
assertExactKeys(value, [
|
|
2841
|
+
'mongoDescriptor',
|
|
2842
|
+
'authorityHandoff',
|
|
2843
|
+
'authenticatedPlan',
|
|
2844
|
+
'requestBundle',
|
|
2845
|
+
'executionAttempt',
|
|
2846
|
+
...(resolveArg ? ['observedAt'] : []),
|
|
2847
|
+
], pathArg);
|
|
2848
|
+
const authorityHandoff = normalizeCloudlyLegacyDeploymentSettlementAuthorityHandoffPlaintext(value.authorityHandoff);
|
|
2849
|
+
const authenticatedPlan = normalizeCloudlyLegacyDeploymentSettlementAuthenticatedPlanStructure(value.authenticatedPlan);
|
|
2850
|
+
const requestBundle = normalizeCloudlyLegacyDeploymentSettlementRequestBundle(value.requestBundle);
|
|
2851
|
+
const executionAttempt = normalizeExecutionAttemptIdentityInternal(value.executionAttempt, `${pathArg}.executionAttempt`);
|
|
2852
|
+
assertExecutionAttemptMatchesStdioArtifacts({
|
|
2853
|
+
attempt: executionAttempt,
|
|
2854
|
+
purpose: 'scratch-rehearsal',
|
|
2855
|
+
sourceHandoff: authorityHandoff,
|
|
2856
|
+
executionHandoff: authorityHandoff,
|
|
2857
|
+
authenticatedPlan,
|
|
2858
|
+
requestBundle,
|
|
2859
|
+
path: pathArg,
|
|
2860
|
+
});
|
|
2861
|
+
const output = {
|
|
2862
|
+
mongoDescriptor: normalizeSettlementMongoDescriptor(value.mongoDescriptor, `${pathArg}.mongoDescriptor`),
|
|
2863
|
+
authorityHandoff,
|
|
2864
|
+
authenticatedPlan,
|
|
2865
|
+
requestBundle,
|
|
2866
|
+
executionAttempt: executionAttempt,
|
|
2867
|
+
...(resolveArg
|
|
2868
|
+
? { observedAt: readInteger(value.observedAt, `${pathArg}.observedAt`, 1) }
|
|
2869
|
+
: {}),
|
|
2870
|
+
};
|
|
2871
|
+
assertStdioArtifactAggregate(output, pathArg);
|
|
2872
|
+
return output;
|
|
2873
|
+
};
|
|
2874
|
+
const normalizeProductionStdioPayload = (valueArg, pathArg, resolveArg) => {
|
|
2875
|
+
const value = readRecord(valueArg, pathArg);
|
|
2876
|
+
assertExactKeys(value, [
|
|
2877
|
+
'mongoDescriptor',
|
|
2878
|
+
'sourceAuthorityHandoff',
|
|
2879
|
+
'productionAuthorityHandoff',
|
|
2880
|
+
'authenticatedPlan',
|
|
2881
|
+
'requestBundle',
|
|
2882
|
+
'scratchReceipt',
|
|
2883
|
+
'productionAuthorization',
|
|
2884
|
+
'executionAttempt',
|
|
2885
|
+
...(resolveArg ? ['observedAt'] : []),
|
|
2886
|
+
], pathArg);
|
|
2887
|
+
const sourceAuthorityHandoff = normalizeCloudlyLegacyDeploymentSettlementAuthorityHandoffPlaintext(value.sourceAuthorityHandoff);
|
|
2888
|
+
const productionAuthorityHandoff = normalizeCloudlyLegacyDeploymentSettlementAuthorityHandoffPlaintext(value.productionAuthorityHandoff);
|
|
2889
|
+
const authenticatedPlan = normalizeCloudlyLegacyDeploymentSettlementAuthenticatedPlanStructure(value.authenticatedPlan);
|
|
2890
|
+
const requestBundle = normalizeCloudlyLegacyDeploymentSettlementRequestBundle(value.requestBundle);
|
|
2891
|
+
const scratchReceipt = normalizeCloudlyLegacyDeploymentSettlementScratchReceipt(value.scratchReceipt);
|
|
2892
|
+
const productionAuthorization = normalizeCloudlyLegacyDeploymentSettlementProductionExecutionAuthorization(value.productionAuthorization);
|
|
2893
|
+
const executionAttempt = normalizeExecutionAttemptIdentityInternal(value.executionAttempt, `${pathArg}.executionAttempt`);
|
|
2894
|
+
assertExecutionAttemptMatchesStdioArtifacts({
|
|
2895
|
+
attempt: executionAttempt,
|
|
2896
|
+
purpose: 'production',
|
|
2897
|
+
sourceHandoff: sourceAuthorityHandoff,
|
|
2898
|
+
executionHandoff: productionAuthorityHandoff,
|
|
2899
|
+
authenticatedPlan,
|
|
2900
|
+
requestBundle,
|
|
2901
|
+
scratchReceipt,
|
|
2902
|
+
path: pathArg,
|
|
2903
|
+
});
|
|
2904
|
+
if (canonicalize(productionAuthorization.executionAttempt, `${pathArg}.authorization.attempt`)
|
|
2905
|
+
!== canonicalize(executionAttempt, `${pathArg}.executionAttempt`)) {
|
|
2906
|
+
fail('CROSS_FIELD_MISMATCH', `${pathArg}.productionAuthorization`);
|
|
2907
|
+
}
|
|
2908
|
+
const metadata = normalizeProductionAuthorityMetadataPair(productionAuthorityHandoff.authorityMetadata, sourceAuthorityHandoff.authorityMetadata);
|
|
2909
|
+
assertProductionAuthorizationArtifacts(productionAuthorization, metadata.productionMetadata, metadata.sourceMetadata, authenticatedPlan, requestBundle, scratchReceipt);
|
|
2910
|
+
const output = {
|
|
2911
|
+
mongoDescriptor: normalizeSettlementMongoDescriptor(value.mongoDescriptor, `${pathArg}.mongoDescriptor`),
|
|
2912
|
+
sourceAuthorityHandoff,
|
|
2913
|
+
productionAuthorityHandoff,
|
|
2914
|
+
authenticatedPlan,
|
|
2915
|
+
requestBundle,
|
|
2916
|
+
scratchReceipt,
|
|
2917
|
+
productionAuthorization,
|
|
2918
|
+
executionAttempt: executionAttempt,
|
|
2919
|
+
...(resolveArg
|
|
2920
|
+
? { observedAt: readInteger(value.observedAt, `${pathArg}.observedAt`, 1) }
|
|
2921
|
+
: {}),
|
|
2922
|
+
};
|
|
2923
|
+
assertStdioArtifactAggregate(output, pathArg);
|
|
2924
|
+
return output;
|
|
2925
|
+
};
|
|
2926
|
+
/** Structural only; use the authority-aware variant before trusting artifacts. */
|
|
2927
|
+
export const normalizeCloudlyLegacyDeploymentSettlementStdioRequest = (valueArg) => {
|
|
2928
|
+
const value = readRecord(valueArg, 'stdioRequest');
|
|
2929
|
+
assertExactKeys(value, stdioRequestKeys, 'stdioRequest');
|
|
2930
|
+
assertStdioArtifactAggregate(value.payload, 'stdioRequest.payload');
|
|
2931
|
+
if (value.schemaVersion !== 1
|
|
2932
|
+
|| value.kind !== 'cloudly-legacy-deployment-settlement-stdio-request') {
|
|
2933
|
+
fail('INVALID_VALUE', 'stdioRequest.kind');
|
|
2934
|
+
}
|
|
2935
|
+
const requestId = readIdentifier(value.requestId, 'stdioRequest.requestId');
|
|
2936
|
+
const command = readLiteral(value.command, cloudlyLegacyDeploymentSettlementStdioCommands, 'stdioRequest.command');
|
|
2937
|
+
const payloadPath = 'stdioRequest.payload';
|
|
2938
|
+
let payload;
|
|
2939
|
+
if (command === 'settlement-plan') {
|
|
2940
|
+
const input = readRecord(value.payload, payloadPath);
|
|
2941
|
+
assertExactKeys(input, ['mongoDescriptor', 'authorityHandoff', 'effectiveAt'], payloadPath);
|
|
2942
|
+
const authorityHandoff = normalizeCloudlyLegacyDeploymentSettlementAuthorityHandoffPlaintext(input.authorityHandoff);
|
|
2943
|
+
const sourceMetadata = normalizeFencedSourceAuthorityMetadata(authorityHandoff.authorityMetadata, `${payloadPath}.authorityHandoff.authorityMetadata`);
|
|
2944
|
+
const effectiveAt = readInteger(input.effectiveAt, `${payloadPath}.effectiveAt`, 1);
|
|
2945
|
+
assertAuthorityTimestamp(effectiveAt, sourceMetadata, `${payloadPath}.effectiveAt`);
|
|
2946
|
+
payload = {
|
|
2947
|
+
mongoDescriptor: normalizeSettlementMongoDescriptor(input.mongoDescriptor, `${payloadPath}.mongoDescriptor`),
|
|
2948
|
+
authorityHandoff,
|
|
2949
|
+
effectiveAt,
|
|
2950
|
+
};
|
|
2951
|
+
}
|
|
2952
|
+
else if (command === 'settlement-request') {
|
|
2953
|
+
const input = readRecord(value.payload, payloadPath);
|
|
2954
|
+
assertExactKeys(input, ['authorityHandoff', 'authenticatedPlan', 'requestedAt'], payloadPath);
|
|
2955
|
+
const authorityHandoff = normalizeCloudlyLegacyDeploymentSettlementAuthorityHandoffPlaintext(input.authorityHandoff);
|
|
2956
|
+
const sourceMetadata = normalizeFencedSourceAuthorityMetadata(authorityHandoff.authorityMetadata, `${payloadPath}.authorityHandoff.authorityMetadata`);
|
|
2957
|
+
const authenticatedPlan = normalizeCloudlyLegacyDeploymentSettlementAuthenticatedPlanStructure(input.authenticatedPlan);
|
|
2958
|
+
assertAuthorityReferenceMatchesMetadata(authenticatedPlan.authority, sourceMetadata, `${payloadPath}.authenticatedPlan.authority`);
|
|
2959
|
+
normalizeCloudlyLegacyDeploymentSettlementPlanForAuthority(authenticatedPlan.payload, sourceMetadata);
|
|
2960
|
+
const requestedAt = readInteger(input.requestedAt, `${payloadPath}.requestedAt`, 1);
|
|
2961
|
+
assertAuthorityTimestamp(requestedAt, sourceMetadata, `${payloadPath}.requestedAt`);
|
|
2962
|
+
if (requestedAt < authenticatedPlan.payload.effectiveAt) {
|
|
2963
|
+
fail('CROSS_FIELD_MISMATCH', `${payloadPath}.requestedAt`);
|
|
2964
|
+
}
|
|
2965
|
+
payload = {
|
|
2966
|
+
authorityHandoff,
|
|
2967
|
+
authenticatedPlan,
|
|
2968
|
+
requestedAt,
|
|
2969
|
+
};
|
|
2970
|
+
}
|
|
2971
|
+
else if (command === 'settlement-scratch-check'
|
|
2972
|
+
|| command === 'settlement-scratch-apply') {
|
|
2973
|
+
payload = normalizeScratchStdioPayload(value.payload, payloadPath, false);
|
|
2974
|
+
}
|
|
2975
|
+
else if (command === 'settlement-scratch-resolve') {
|
|
2976
|
+
payload = normalizeScratchStdioPayload(value.payload, payloadPath, true);
|
|
2977
|
+
}
|
|
2978
|
+
else if (command === 'settlement-production-authorize') {
|
|
2979
|
+
const input = readRecord(value.payload, payloadPath);
|
|
2980
|
+
assertExactKeys(input, [
|
|
2981
|
+
'sourceAuthorityHandoff',
|
|
2982
|
+
'productionAuthorityHandoff',
|
|
2983
|
+
'authenticatedPlan',
|
|
2984
|
+
'requestBundle',
|
|
2985
|
+
'scratchReceipt',
|
|
2986
|
+
'executionAttempt',
|
|
2987
|
+
'requestedAt',
|
|
2988
|
+
'approvedAt',
|
|
2989
|
+
], payloadPath);
|
|
2990
|
+
const sourceAuthorityHandoff = normalizeCloudlyLegacyDeploymentSettlementAuthorityHandoffPlaintext(input.sourceAuthorityHandoff);
|
|
2991
|
+
const productionAuthorityHandoff = normalizeCloudlyLegacyDeploymentSettlementAuthorityHandoffPlaintext(input.productionAuthorityHandoff);
|
|
2992
|
+
const authenticatedPlan = normalizeCloudlyLegacyDeploymentSettlementAuthenticatedPlanStructure(input.authenticatedPlan);
|
|
2993
|
+
const requestBundle = normalizeCloudlyLegacyDeploymentSettlementRequestBundle(input.requestBundle);
|
|
2994
|
+
const scratchReceipt = normalizeCloudlyLegacyDeploymentSettlementScratchReceipt(input.scratchReceipt);
|
|
2995
|
+
const executionAttempt = normalizeExecutionAttemptIdentityInternal(input.executionAttempt, `${payloadPath}.executionAttempt`);
|
|
2996
|
+
assertExecutionAttemptMatchesStdioArtifacts({
|
|
2997
|
+
attempt: executionAttempt,
|
|
2998
|
+
purpose: 'production',
|
|
2999
|
+
sourceHandoff: sourceAuthorityHandoff,
|
|
3000
|
+
executionHandoff: productionAuthorityHandoff,
|
|
3001
|
+
authenticatedPlan,
|
|
3002
|
+
requestBundle,
|
|
3003
|
+
scratchReceipt,
|
|
3004
|
+
path: payloadPath,
|
|
3005
|
+
});
|
|
3006
|
+
const requestedAt = readInteger(input.requestedAt, `${payloadPath}.requestedAt`, 1);
|
|
3007
|
+
const metadata = normalizeProductionAuthorityMetadataPair(productionAuthorityHandoff.authorityMetadata, sourceAuthorityHandoff.authorityMetadata);
|
|
3008
|
+
const approvedAt = readInteger(input.approvedAt, `${payloadPath}.approvedAt`, requestedAt);
|
|
3009
|
+
assertAuthorityTimestamp(requestedAt, metadata.productionMetadata, `${payloadPath}.requestedAt`);
|
|
3010
|
+
assertAuthorityTimestamp(approvedAt, metadata.productionMetadata, `${payloadPath}.approvedAt`);
|
|
3011
|
+
if (metadata.productionMetadata.issuedAt < scratchReceipt.completedAt
|
|
3012
|
+
|| requestedAt < scratchReceipt.completedAt) {
|
|
3013
|
+
fail('CROSS_FIELD_MISMATCH', `${payloadPath}.requestedAt`);
|
|
3014
|
+
}
|
|
3015
|
+
payload = {
|
|
3016
|
+
sourceAuthorityHandoff,
|
|
3017
|
+
productionAuthorityHandoff,
|
|
3018
|
+
authenticatedPlan,
|
|
3019
|
+
requestBundle,
|
|
3020
|
+
scratchReceipt,
|
|
3021
|
+
executionAttempt: executionAttempt,
|
|
3022
|
+
requestedAt,
|
|
3023
|
+
approvedAt,
|
|
3024
|
+
};
|
|
3025
|
+
}
|
|
3026
|
+
else if (command === 'settlement-production-resolve') {
|
|
3027
|
+
payload = normalizeProductionStdioPayload(value.payload, payloadPath, true);
|
|
3028
|
+
}
|
|
3029
|
+
else {
|
|
3030
|
+
payload = normalizeProductionStdioPayload(value.payload, payloadPath, false);
|
|
3031
|
+
}
|
|
3032
|
+
assertStdioArtifactAggregate(payload, payloadPath);
|
|
3033
|
+
return finalize({
|
|
3034
|
+
schemaVersion: 1,
|
|
3035
|
+
kind: 'cloudly-legacy-deployment-settlement-stdio-request',
|
|
3036
|
+
requestId,
|
|
3037
|
+
command,
|
|
3038
|
+
payload,
|
|
3039
|
+
}, cloudlyLegacyDeploymentSettlementStdioLimits.maximumRequestFrameBytes - 1, 'stdioRequest');
|
|
3040
|
+
};
|
|
3041
|
+
const createCloudlyLegacyDeploymentSettlementStdioRequestHmacVerifier = (requestArg) => {
|
|
3042
|
+
if (requestArg.command === 'settlement-plan'
|
|
3043
|
+
|| requestArg.command === 'settlement-request'
|
|
3044
|
+
|| requestArg.command === 'settlement-scratch-check'
|
|
3045
|
+
|| requestArg.command === 'settlement-scratch-apply'
|
|
3046
|
+
|| requestArg.command === 'settlement-scratch-resolve') {
|
|
3047
|
+
return createCloudlyLegacyDeploymentSettlementStdioHandoffHmacVerifier(requestArg.payload.authorityHandoff);
|
|
3048
|
+
}
|
|
3049
|
+
const sourceVerifier = createCloudlyLegacyDeploymentSettlementStdioHandoffHmacVerifier(requestArg.payload.sourceAuthorityHandoff);
|
|
3050
|
+
const executionVerifier = createCloudlyLegacyDeploymentSettlementStdioHandoffHmacVerifier(requestArg.payload.productionAuthorityHandoff);
|
|
3051
|
+
return async (inputArg) => (await sourceVerifier(inputArg) || await executionVerifier(inputArg));
|
|
3052
|
+
};
|
|
3053
|
+
export const normalizeCloudlyLegacyDeploymentSettlementStdioRequestForAuthorities = async (valueArg) => {
|
|
3054
|
+
const request = normalizeCloudlyLegacyDeploymentSettlementStdioRequest(valueArg);
|
|
3055
|
+
const verifier = createCloudlyLegacyDeploymentSettlementStdioRequestHmacVerifier(request);
|
|
3056
|
+
if (request.command === 'settlement-plan') {
|
|
3057
|
+
return request;
|
|
3058
|
+
}
|
|
3059
|
+
if (request.command === 'settlement-request') {
|
|
3060
|
+
await normalizeAuthenticatedCloudlyLegacyDeploymentSettlementPlanForAuthority(request.payload.authenticatedPlan, request.payload.authorityHandoff.authorityMetadata, verifier);
|
|
3061
|
+
return request;
|
|
3062
|
+
}
|
|
3063
|
+
if (request.command === 'settlement-scratch-check'
|
|
3064
|
+
|| request.command === 'settlement-scratch-apply'
|
|
3065
|
+
|| request.command === 'settlement-scratch-resolve') {
|
|
3066
|
+
await normalizeExecutionAttemptProofArtifacts({
|
|
3067
|
+
executionAttempt: request.payload.executionAttempt,
|
|
3068
|
+
sourceMetadata: request.payload.authorityHandoff.authorityMetadata,
|
|
3069
|
+
executionMetadata: request.payload.authorityHandoff.authorityMetadata,
|
|
3070
|
+
authenticatedPlan: request.payload.authenticatedPlan,
|
|
3071
|
+
requestBundle: request.payload.requestBundle,
|
|
3072
|
+
scratchReceipt: null,
|
|
3073
|
+
productionAuthorization: null,
|
|
3074
|
+
requireProductionAuthorization: false,
|
|
3075
|
+
verifier,
|
|
3076
|
+
});
|
|
3077
|
+
return request;
|
|
3078
|
+
}
|
|
3079
|
+
await normalizeExecutionAttemptProofArtifacts({
|
|
3080
|
+
executionAttempt: request.payload.executionAttempt,
|
|
3081
|
+
sourceMetadata: request.payload.sourceAuthorityHandoff.authorityMetadata,
|
|
3082
|
+
executionMetadata: request.payload.productionAuthorityHandoff.authorityMetadata,
|
|
3083
|
+
authenticatedPlan: request.payload.authenticatedPlan,
|
|
3084
|
+
requestBundle: request.payload.requestBundle,
|
|
3085
|
+
scratchReceipt: request.payload.scratchReceipt,
|
|
3086
|
+
productionAuthorization: request.command === 'settlement-production-authorize'
|
|
3087
|
+
? null
|
|
3088
|
+
: request.payload.productionAuthorization,
|
|
3089
|
+
requireProductionAuthorization: request.command !== 'settlement-production-authorize',
|
|
3090
|
+
verifier,
|
|
3091
|
+
});
|
|
3092
|
+
return request;
|
|
3093
|
+
};
|
|
3094
|
+
const normalizeStdioSuccessPayload = (commandArg, valueArg) => {
|
|
3095
|
+
const path = 'stdioResponse.payload';
|
|
3096
|
+
const value = readRecord(valueArg, path);
|
|
3097
|
+
if (commandArg === 'settlement-plan') {
|
|
3098
|
+
assertExactKeys(value, ['authenticatedPlan'], path);
|
|
3099
|
+
return {
|
|
3100
|
+
authenticatedPlan: normalizeCloudlyLegacyDeploymentSettlementAuthenticatedPlanStructure(value.authenticatedPlan),
|
|
3101
|
+
};
|
|
3102
|
+
}
|
|
3103
|
+
if (commandArg === 'settlement-request') {
|
|
3104
|
+
assertExactKeys(value, ['requestBundle'], path);
|
|
3105
|
+
return { requestBundle: normalizeCloudlyLegacyDeploymentSettlementRequestBundle(value.requestBundle) };
|
|
3106
|
+
}
|
|
3107
|
+
if (commandArg === 'settlement-scratch-check'
|
|
3108
|
+
|| commandArg === 'settlement-production-check') {
|
|
3109
|
+
assertExactKeys(value, ['authenticatedResult'], path);
|
|
3110
|
+
return {
|
|
3111
|
+
authenticatedResult: normalizeCloudlyLegacyDeploymentSettlementAuthenticatedCheckResultStructure(value.authenticatedResult),
|
|
3112
|
+
};
|
|
3113
|
+
}
|
|
3114
|
+
if (commandArg === 'settlement-scratch-apply') {
|
|
3115
|
+
assertExactKeys(value, ['executionBundle'], path);
|
|
3116
|
+
return {
|
|
3117
|
+
executionBundle: normalizeCloudlyLegacyDeploymentSettlementScratchExecutionBundle(value.executionBundle),
|
|
3118
|
+
};
|
|
3119
|
+
}
|
|
3120
|
+
if (commandArg === 'settlement-production-apply') {
|
|
3121
|
+
assertExactKeys(value, ['executionBundle'], path);
|
|
3122
|
+
return {
|
|
3123
|
+
executionBundle: normalizeCloudlyLegacyDeploymentSettlementProductionExecutionBundleV2(value.executionBundle),
|
|
3124
|
+
};
|
|
3125
|
+
}
|
|
3126
|
+
if (commandArg === 'settlement-production-authorize') {
|
|
3127
|
+
assertExactKeys(value, ['productionAuthorization'], path);
|
|
3128
|
+
return {
|
|
3129
|
+
productionAuthorization: normalizeCloudlyLegacyDeploymentSettlementProductionExecutionAuthorization(value.productionAuthorization),
|
|
3130
|
+
};
|
|
3131
|
+
}
|
|
3132
|
+
assertExactKeys(value, ['authenticatedResolution'], path);
|
|
3133
|
+
return {
|
|
3134
|
+
authenticatedResolution: normalizeCloudlyLegacyDeploymentSettlementAuthenticatedResolutionStructure(value.authenticatedResolution),
|
|
3135
|
+
};
|
|
3136
|
+
};
|
|
3137
|
+
const createCloudlyLegacyDeploymentSettlementStdioSafeError = (codeArg) => ({
|
|
3138
|
+
code: codeArg,
|
|
3139
|
+
retryable: cloudlyLegacyDeploymentSettlementStdioErrorMetadata[codeArg].retryable,
|
|
3140
|
+
});
|
|
3141
|
+
/** Structural only; use the request-authority-aware variant before trusting artifacts. */
|
|
3142
|
+
export const normalizeCloudlyLegacyDeploymentSettlementStdioResponse = (valueArg) => {
|
|
3143
|
+
const value = readRecord(valueArg, 'stdioResponse');
|
|
3144
|
+
if (typeof value.ok !== 'boolean')
|
|
3145
|
+
fail('INVALID_VALUE', 'stdioResponse.ok');
|
|
3146
|
+
assertExactKeys(value, value.ok ? stdioResponseSuccessKeys : stdioResponseErrorKeys, 'stdioResponse');
|
|
3147
|
+
if (value.schemaVersion !== 1
|
|
3148
|
+
|| value.kind !== 'cloudly-legacy-deployment-settlement-stdio-response') {
|
|
3149
|
+
fail('INVALID_VALUE', 'stdioResponse.kind');
|
|
3150
|
+
}
|
|
3151
|
+
if (value.ok) {
|
|
3152
|
+
assertStdioArtifactAggregate(value.payload, 'stdioResponse.payload');
|
|
3153
|
+
}
|
|
3154
|
+
const requestId = readIdentifier(value.requestId, 'stdioResponse.requestId');
|
|
3155
|
+
const command = readLiteral(value.command, cloudlyLegacyDeploymentSettlementStdioCommands, 'stdioResponse.command');
|
|
3156
|
+
if (value.ok) {
|
|
3157
|
+
const payload = normalizeStdioSuccessPayload(command, value.payload);
|
|
3158
|
+
assertStdioArtifactAggregate(payload, 'stdioResponse.payload');
|
|
3159
|
+
return finalize({
|
|
3160
|
+
schemaVersion: 1,
|
|
3161
|
+
kind: 'cloudly-legacy-deployment-settlement-stdio-response',
|
|
3162
|
+
requestId,
|
|
3163
|
+
command,
|
|
3164
|
+
ok: true,
|
|
3165
|
+
payload,
|
|
3166
|
+
}, cloudlyLegacyDeploymentSettlementStdioLimits.maximumResponseFrameBytes - 1, 'stdioResponse');
|
|
3167
|
+
}
|
|
3168
|
+
const error = readRecord(value.error, 'stdioResponse.error');
|
|
3169
|
+
assertExactKeys(error, ['code', 'retryable'], 'stdioResponse.error');
|
|
3170
|
+
if (typeof error.code !== 'string'
|
|
3171
|
+
|| !Object.hasOwn(cloudlyLegacyDeploymentSettlementStdioErrorMetadata, error.code)) {
|
|
3172
|
+
fail('INVALID_VALUE', 'stdioResponse.error.code');
|
|
3173
|
+
}
|
|
3174
|
+
const code = error.code;
|
|
3175
|
+
if (error.retryable !== cloudlyLegacyDeploymentSettlementStdioErrorMetadata[code].retryable) {
|
|
3176
|
+
fail('CROSS_FIELD_MISMATCH', 'stdioResponse.error.retryable');
|
|
3177
|
+
}
|
|
3178
|
+
return finalize({
|
|
3179
|
+
schemaVersion: 1,
|
|
3180
|
+
kind: 'cloudly-legacy-deployment-settlement-stdio-response',
|
|
3181
|
+
requestId,
|
|
3182
|
+
command,
|
|
3183
|
+
ok: false,
|
|
3184
|
+
error: createCloudlyLegacyDeploymentSettlementStdioSafeError(code),
|
|
3185
|
+
}, cloudlyLegacyDeploymentSettlementStdioLimits.maximumResponseFrameBytes - 1, 'stdioResponse');
|
|
3186
|
+
};
|
|
3187
|
+
export const normalizeCloudlyLegacyDeploymentSettlementStdioResponseForRequestAuthorities = async (responseArg, requestArg) => {
|
|
3188
|
+
const request = await normalizeCloudlyLegacyDeploymentSettlementStdioRequestForAuthorities(requestArg);
|
|
3189
|
+
const verifier = createCloudlyLegacyDeploymentSettlementStdioRequestHmacVerifier(request);
|
|
3190
|
+
const response = normalizeCloudlyLegacyDeploymentSettlementStdioResponse(responseArg);
|
|
3191
|
+
if (response.requestId !== request.requestId || response.command !== request.command) {
|
|
3192
|
+
fail('CROSS_FIELD_MISMATCH', 'stdioResponse.request');
|
|
3193
|
+
}
|
|
3194
|
+
if (!response.ok) {
|
|
3195
|
+
return response;
|
|
3196
|
+
}
|
|
3197
|
+
if (request.command === 'settlement-plan') {
|
|
3198
|
+
const success = response;
|
|
3199
|
+
const plan = await normalizeAuthenticatedCloudlyLegacyDeploymentSettlementPlanForAuthority(success.payload.authenticatedPlan, request.payload.authorityHandoff.authorityMetadata, verifier);
|
|
3200
|
+
if (plan.payload.effectiveAt !== request.payload.effectiveAt) {
|
|
3201
|
+
fail('CROSS_FIELD_MISMATCH', 'stdioResponse.payload.authenticatedPlan.effectiveAt');
|
|
3202
|
+
}
|
|
3203
|
+
return response;
|
|
3204
|
+
}
|
|
3205
|
+
if (request.command === 'settlement-request') {
|
|
3206
|
+
const success = response;
|
|
3207
|
+
const requestBundle = await normalizeCloudlyLegacyDeploymentSettlementRequestBundleForAuthority(success.payload.requestBundle, request.payload.authenticatedPlan, request.payload.authorityHandoff.authorityMetadata, verifier);
|
|
3208
|
+
if (requestBundle.authenticatedRequest.payload.requestedAt
|
|
3209
|
+
!== request.payload.requestedAt) {
|
|
3210
|
+
fail('CROSS_FIELD_MISMATCH', 'stdioResponse.payload.requestBundle.requestedAt');
|
|
3211
|
+
}
|
|
3212
|
+
return response;
|
|
3213
|
+
}
|
|
3214
|
+
if (request.command === 'settlement-scratch-check') {
|
|
3215
|
+
const success = response;
|
|
3216
|
+
await normalizeAuthenticatedCloudlyLegacyDeploymentSettlementCheckResultForAuthority(success.payload.authenticatedResult, request.payload.authorityHandoff.authorityMetadata, request.payload.requestBundle.authenticatedRequest, verifier);
|
|
3217
|
+
return response;
|
|
3218
|
+
}
|
|
3219
|
+
if (request.command === 'settlement-scratch-apply') {
|
|
3220
|
+
const success = response;
|
|
3221
|
+
await normalizeCloudlyLegacyDeploymentSettlementScratchExecutionBundleForAuthority(success.payload.executionBundle, request.payload.authorityHandoff.authorityMetadata, request.payload.authenticatedPlan, request.payload.requestBundle, verifier);
|
|
3222
|
+
return response;
|
|
3223
|
+
}
|
|
3224
|
+
if (request.command === 'settlement-scratch-resolve') {
|
|
3225
|
+
const success = response;
|
|
3226
|
+
const resolution = await normalizeAuthenticatedCloudlyLegacyDeploymentSettlementResolutionForAuthorities(success.payload.authenticatedResolution, request.payload.authorityHandoff.authorityMetadata, request.payload.authorityHandoff.authorityMetadata, request.payload.authenticatedPlan, request.payload.requestBundle, null, null, verifier);
|
|
3227
|
+
if (resolution.payload.observedAt !== request.payload.observedAt) {
|
|
3228
|
+
fail('CROSS_FIELD_MISMATCH', 'stdioResponse.payload.authenticatedResolution.observedAt');
|
|
3229
|
+
}
|
|
3230
|
+
return response;
|
|
3231
|
+
}
|
|
3232
|
+
if (request.command === 'settlement-production-authorize') {
|
|
3233
|
+
const success = response;
|
|
3234
|
+
const authorization = await normalizeCloudlyLegacyDeploymentSettlementProductionExecutionAuthorizationForAuthorities(success.payload.productionAuthorization, request.payload.productionAuthorityHandoff.authorityMetadata, request.payload.sourceAuthorityHandoff.authorityMetadata, request.payload.authenticatedPlan, request.payload.requestBundle, request.payload.scratchReceipt, verifier);
|
|
3235
|
+
if (authorization.requestedAt !== request.payload.requestedAt
|
|
3236
|
+
|| authorization.approvedAt !== request.payload.approvedAt) {
|
|
3237
|
+
fail('CROSS_FIELD_MISMATCH', 'stdioResponse.payload.productionAuthorization.timestamp');
|
|
3238
|
+
}
|
|
3239
|
+
return response;
|
|
3240
|
+
}
|
|
3241
|
+
if (request.command === 'settlement-production-check') {
|
|
3242
|
+
const success = response;
|
|
3243
|
+
await normalizeAuthenticatedCheckResultForExecutionAuthority(success.payload.authenticatedResult, request.payload.productionAuthorityHandoff.authorityMetadata, request.payload.requestBundle.authenticatedRequest, request.payload.productionAuthorization, verifier);
|
|
3244
|
+
return response;
|
|
3245
|
+
}
|
|
3246
|
+
if (request.command === 'settlement-production-apply') {
|
|
3247
|
+
const success = response;
|
|
3248
|
+
await normalizeCloudlyLegacyDeploymentSettlementProductionExecutionBundleV2ForAuthorities(success.payload.executionBundle, request.payload.productionAuthorization, request.payload.productionAuthorityHandoff.authorityMetadata, request.payload.sourceAuthorityHandoff.authorityMetadata, request.payload.authenticatedPlan, request.payload.requestBundle, request.payload.scratchReceipt, verifier);
|
|
3249
|
+
return response;
|
|
3250
|
+
}
|
|
3251
|
+
const success = response;
|
|
3252
|
+
const resolution = await normalizeAuthenticatedCloudlyLegacyDeploymentSettlementResolutionForAuthorities(success.payload.authenticatedResolution, request.payload.sourceAuthorityHandoff.authorityMetadata, request.payload.productionAuthorityHandoff.authorityMetadata, request.payload.authenticatedPlan, request.payload.requestBundle, request.payload.scratchReceipt, request.payload.productionAuthorization, verifier);
|
|
3253
|
+
if (resolution.payload.observedAt !== request.payload.observedAt) {
|
|
3254
|
+
fail('CROSS_FIELD_MISMATCH', 'stdioResponse.payload.authenticatedResolution.observedAt');
|
|
3255
|
+
}
|
|
3256
|
+
return response;
|
|
3257
|
+
};
|
|
3258
|
+
const encodeStdioFrame = (valueArg, maximumBytesArg, pathArg) => {
|
|
3259
|
+
const payload = encodeNormalized(valueArg, pathArg);
|
|
3260
|
+
if (payload.byteLength + 1 > maximumBytesArg)
|
|
3261
|
+
fail('LIMIT_EXCEEDED', pathArg);
|
|
3262
|
+
const output = new Uint8Array(payload.byteLength + 1);
|
|
3263
|
+
output.set(payload);
|
|
3264
|
+
output[payload.byteLength] = 0x0a;
|
|
3265
|
+
return output;
|
|
3266
|
+
};
|
|
3267
|
+
export const encodeCloudlyLegacyDeploymentSettlementStdioRequestFrame = (valueArg) => encodeStdioFrame(normalizeCloudlyLegacyDeploymentSettlementStdioRequest(valueArg), cloudlyLegacyDeploymentSettlementStdioLimits.maximumRequestFrameBytes, 'stdioRequest');
|
|
3268
|
+
export const encodeCloudlyLegacyDeploymentSettlementStdioResponseFrame = (valueArg) => encodeStdioFrame(normalizeCloudlyLegacyDeploymentSettlementStdioResponse(valueArg), cloudlyLegacyDeploymentSettlementStdioLimits.maximumResponseFrameBytes, 'stdioResponse');
|
|
3269
|
+
const decodeStdioFrame = (frameArg, maximumBytesArg, pathArg, normalizeArg, encodeArg) => {
|
|
3270
|
+
if (!(frameArg instanceof Uint8Array)
|
|
3271
|
+
|| frameArg.byteLength < 3
|
|
3272
|
+
|| frameArg.byteLength > maximumBytesArg
|
|
3273
|
+
|| frameArg.at(-1) !== 0x0a
|
|
3274
|
+
|| frameArg.subarray(0, -1).some((byteArg) => byteArg === 0x0a || byteArg === 0x0d)) {
|
|
3275
|
+
fail('INVALID_DATA', pathArg);
|
|
3276
|
+
}
|
|
3277
|
+
const payloadBytes = new Uint8Array(frameArg.subarray(0, -1));
|
|
3278
|
+
let text;
|
|
3279
|
+
try {
|
|
3280
|
+
text = new TextDecoder('utf-8', { fatal: true }).decode(payloadBytes);
|
|
3281
|
+
}
|
|
3282
|
+
catch {
|
|
3283
|
+
return fail('INVALID_DATA', pathArg);
|
|
3284
|
+
}
|
|
3285
|
+
let value;
|
|
3286
|
+
try {
|
|
3287
|
+
value = JSON.parse(text);
|
|
3288
|
+
}
|
|
3289
|
+
catch {
|
|
3290
|
+
return fail('INVALID_DATA', pathArg);
|
|
3291
|
+
}
|
|
3292
|
+
const normalized = normalizeArg(value);
|
|
3293
|
+
const canonicalFrame = encodeArg(normalized);
|
|
3294
|
+
if (!Buffer.from(canonicalFrame).equals(Buffer.from(frameArg))) {
|
|
3295
|
+
fail('INVALID_DATA', pathArg);
|
|
3296
|
+
}
|
|
3297
|
+
return normalized;
|
|
3298
|
+
};
|
|
3299
|
+
export const decodeCloudlyLegacyDeploymentSettlementStdioRequestFrame = (frameArg) => decodeStdioFrame(frameArg, cloudlyLegacyDeploymentSettlementStdioLimits.maximumRequestFrameBytes, 'stdioRequestFrame', normalizeCloudlyLegacyDeploymentSettlementStdioRequest, encodeCloudlyLegacyDeploymentSettlementStdioRequestFrame);
|
|
3300
|
+
export const decodeCloudlyLegacyDeploymentSettlementStdioResponseFrame = (frameArg) => decodeStdioFrame(frameArg, cloudlyLegacyDeploymentSettlementStdioLimits.maximumResponseFrameBytes, 'stdioResponseFrame', normalizeCloudlyLegacyDeploymentSettlementStdioResponse, encodeCloudlyLegacyDeploymentSettlementStdioResponseFrame);
|
|
1378
3301
|
export { cloudlyLegacyDeploymentSettlementGoldenVectors } from './runtime.cloudlylegacydeploymentsettlement.golden.js';
|
|
1379
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS5jbG91ZGx5bGVnYWN5ZGVwbG95bWVudHNldHRsZW1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9ydW50aW1lLmNsb3VkbHlsZWdhY3lkZXBsb3ltZW50c2V0dGxlbWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLHNCQUFzQixDQUFDO0FBRWhELE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsZUFBZSxHQUNoQixNQUFNLDRCQUE0QixDQUFDO0FBRXBDLE1BQU0sQ0FBQyxNQUFNLHVDQUF1QyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDbkUsdUJBQXVCLEVBQUUsR0FBRztJQUM1QixzQkFBc0IsRUFBRSxJQUFJO0lBQzVCLGlCQUFpQixFQUFFLEdBQUc7SUFDdEIsZ0JBQWdCLEVBQUUsR0FBRyxHQUFHLElBQUk7SUFDNUIsc0JBQXNCLEVBQUUsRUFBRSxHQUFHLElBQUk7SUFDakMsbUJBQW1CLEVBQUUsR0FBRyxHQUFHLElBQUk7SUFDL0IscUJBQXFCLEVBQUUsRUFBRSxHQUFHLElBQUk7SUFDaEMsaUNBQWlDLEVBQUUsR0FBRyxHQUFHLElBQUk7SUFDN0MsMEJBQTBCLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSTtJQUMvQyxxQkFBcUIsRUFBRSxFQUFFO0NBQzFCLENBQUMsQ0FBQztBQUVILE1BQU0sQ0FBQyxNQUFNLHdDQUF3QyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDcEUsWUFBWSxFQUNWLG9FQUFvRTtJQUN0RSxvQkFBb0IsRUFDbEIsNkVBQTZFO0lBQy9FLFFBQVEsRUFDTixnRUFBZ0U7SUFDbEUscUJBQXFCLEVBQ25CLDhFQUE4RTtJQUNoRixlQUFlLEVBQ2Isd0VBQXdFO0lBQzFFLGVBQWUsRUFDYix3RUFBd0U7SUFDMUUsaUJBQWlCLEVBQ2YsMEVBQTBFO0lBQzVFLGtCQUFrQixFQUNoQiwyRUFBMkU7SUFDN0UscUJB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
|
|
3302
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS5jbG91ZGx5bGVnYWN5ZGVwbG95bWVudHNldHRsZW1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9ydW50aW1lLmNsb3VkbHlsZWdhY3lkZXBsb3ltZW50c2V0dGxlbWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLHNCQUFzQixDQUFDO0FBRWhELE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsZUFBZSxHQUNoQixNQUFNLDRCQUE0QixDQUFDO0FBRXBDLE1BQU0sQ0FBQyxNQUFNLHVDQUF1QyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDbkUsdUJBQXVCLEVBQUUsR0FBRztJQUM1QixzQkFBc0IsRUFBRSxJQUFJO0lBQzVCLGlCQUFpQixFQUFFLEdBQUc7SUFDdEIsZ0JBQWdCLEVBQUUsR0FBRyxHQUFHLElBQUk7SUFDNUIsc0JBQXNCLEVBQUUsRUFBRSxHQUFHLElBQUk7SUFDakMsbUJBQW1CLEVBQUUsR0FBRyxHQUFHLElBQUk7SUFDL0IscUJBQXFCLEVBQUUsRUFBRSxHQUFHLElBQUk7SUFDaEMsaUNBQWlDLEVBQUUsR0FBRyxHQUFHLElBQUk7SUFDN0MsMEJBQTBCLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSTtJQUMvQyxxQkFBcUIsRUFBRSxFQUFFO0NBQzFCLENBQUMsQ0FBQztBQUVILE1BQU0sQ0FBQyxNQUFNLHdDQUF3QyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDcEUsWUFBWSxFQUNWLG9FQUFvRTtJQUN0RSxvQkFBb0IsRUFDbEIsNkVBQTZFO0lBQy9FLFFBQVEsRUFDTixnRUFBZ0U7SUFDbEUscUJBQXFCLEVBQ25CLDhFQUE4RTtJQUNoRixlQUFlLEVBQ2Isd0VBQXdFO0lBQzFFLGVBQWUsRUFDYix3RUFBd0U7SUFDMUUsaUJBQWlCLEVBQ2YsMEVBQTBFO0lBQzVFLGtCQUFrQixFQUNoQiwyRUFBMkU7SUFDN0UscUJB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
|