@serve.zone/interfaces 25.1.0 → 25.2.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.
@@ -0,0 +1,315 @@
1
+ import { deepFreezeValue } from './private/canonicaljson.js';
2
+ const sha1 = '1111111111111111111111111111111111111111111111111111111111111111';
3
+ const sha2 = '2222222222222222222222222222222222222222222222222222222222222222';
4
+ const sha3 = '3333333333333333333333333333333333333333333333333333333333333333';
5
+ const sha4 = '4444444444444444444444444444444444444444444444444444444444444444';
6
+ const sha5 = '5555555555555555555555555555555555555555555555555555555555555555';
7
+ const sha6 = '6666666666666666666666666666666666666666666666666666666666666666';
8
+ const sha7 = '7777777777777777777777777777777777777777777777777777777777777777';
9
+ const sha8 = '8888888888888888888888888888888888888888888888888888888888888888';
10
+ const sha9 = '9999999999999999999999999999999999999999999999999999999999999999';
11
+ const shaa = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa';
12
+ const shab = 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb';
13
+ const stateC = 'hmac-sha256:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc';
14
+ const stateD = 'hmac-sha256:dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd';
15
+ const authorityMetadata = {
16
+ schemaVersion: 1,
17
+ operationId: 'settle-operation-1',
18
+ authorityId: 'authority-1',
19
+ keyId: 'settlement-key-1',
20
+ keyVersion: 1,
21
+ settlementId: 'settlement-1',
22
+ issuedAt: 1_700_000_000_000,
23
+ expiresAt: 1_700_003_600_000,
24
+ maintenanceImageDigest: `sha256:${sha1}`,
25
+ sourceImageDigest: `sha256:${sha2}`,
26
+ targetImageDigest: `sha256:${sha3}`,
27
+ targetVersion: '18.2.0',
28
+ targetManifestSha256: sha4,
29
+ targetConfigSha256: sha5,
30
+ backupId: 'backup-1',
31
+ backupSnapshotIdSha256: sha6,
32
+ backupProofSha256: sha7,
33
+ runId: 'run-1',
34
+ rehearsalId: 'rehearsal-1',
35
+ scratchServiceId: 'service-cloudly-scratch',
36
+ allocationId: 'allocation-1',
37
+ allocationGeneration: 2,
38
+ allocationBindingSha256: sha8,
39
+ allocationReceiptSha256: sha9,
40
+ sourceDataSha256: shaa,
41
+ restoredDataSha256: shaa,
42
+ digestProofSha256: shab,
43
+ };
44
+ const authorityReference = {
45
+ operationId: authorityMetadata.operationId,
46
+ authorityId: authorityMetadata.authorityId,
47
+ keyId: authorityMetadata.keyId,
48
+ keyVersion: authorityMetadata.keyVersion,
49
+ authorityMetadataSha256: 'da410b15675f0387a5266aecba70984c944cd45a9183e275438b299b42e42659',
50
+ };
51
+ const rehearsalBinding = {
52
+ schemaVersion: 1,
53
+ kind: 'cloudly-legacy-deployment-settlement-rehearsal-binding',
54
+ settlementId: 'settlement-1',
55
+ runId: 'run-1',
56
+ rehearsalId: 'rehearsal-1',
57
+ scratchServiceId: 'service-cloudly-scratch',
58
+ allocationId: 'allocation-1',
59
+ allocationGeneration: 2,
60
+ allocationBindingSha256: sha8,
61
+ allocationReceiptSha256: sha9,
62
+ backupId: 'backup-1',
63
+ backupSnapshotIdSha256: sha6,
64
+ backupProofSha256: sha7,
65
+ sourceDataSha256: shaa,
66
+ restoredDataSha256: shaa,
67
+ digestProofSha256: shab,
68
+ targetImageDigest: `sha256:${sha3}`,
69
+ targetVersion: '18.2.0',
70
+ targetManifestSha256: sha4,
71
+ targetConfigSha256: sha5,
72
+ };
73
+ const classificationCounts = {
74
+ 'image-recorded-not-current': 1,
75
+ 'image-recorded-current-failed': 0,
76
+ 'rolling-out-current-failed': 0,
77
+ 'rolling-out-superseded': 0,
78
+ };
79
+ const counts = {
80
+ operationCount: 1,
81
+ routeClaimsStabilized: 1,
82
+ routeClaimsRemoved: 0,
83
+ resourceClaimsRemoved: 1,
84
+ };
85
+ const plan = {
86
+ schemaVersion: 1,
87
+ kind: 'cloudly-legacy-deployment-settlement-plan',
88
+ authority: authorityReference,
89
+ settlementId: 'settlement-1',
90
+ effectiveAt: 1_700_000_100_000,
91
+ sourceStateHmac: stateC,
92
+ finalStateHmac: stateD,
93
+ sourceCensus: {
94
+ operations: 3,
95
+ services: 2,
96
+ images: 2,
97
+ releases: 2,
98
+ rolloutOperations: 1,
99
+ routeClaims: 1,
100
+ resourceClaims: 1,
101
+ },
102
+ entries: [{
103
+ operationId: 'deployment-operation-1',
104
+ serviceId: 'service-1',
105
+ sourceRevision: 4,
106
+ sourceState: 'image-recorded',
107
+ classification: 'image-recorded-not-current',
108
+ finalRevision: 7,
109
+ sourceDocumentHmac: 'hmac-sha256:eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee',
110
+ finalDocumentHmac: 'hmac-sha256:ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff',
111
+ routeClaimsStabilized: 1,
112
+ routeClaimsRemoved: 0,
113
+ resourceClaimsRemoved: 1,
114
+ }],
115
+ classificationCounts,
116
+ operationCount: 1,
117
+ };
118
+ const planSha256 = 'e2a1b29678884c9a8629ba3e5887f4c0115c3ef49aed533695b2aa871505037e';
119
+ const productionRequest = {
120
+ schemaVersion: 1,
121
+ kind: 'cloudly-legacy-deployment-settlement-production-request',
122
+ authority: authorityReference,
123
+ plan,
124
+ planSha256,
125
+ rehearsalBinding,
126
+ rehearsalBindingSha256: '98749a1fb41e2f802a0bbeeeb8925de50a15f52b8f2865d1c977c9fbcbcb8dfe',
127
+ requestedAt: 1_700_000_150_000,
128
+ };
129
+ const productionRequestSha256 = 'c91e4bd00f508eeaaf13587d842be76987845d3771d08fbcc30da97012cc9226';
130
+ const checkResult = {
131
+ schemaVersion: 1,
132
+ kind: 'cloudly-legacy-deployment-settlement-check-result',
133
+ status: 'ready',
134
+ requestSha256: productionRequestSha256,
135
+ planSha256,
136
+ settlementId: 'settlement-1',
137
+ sourceStateHmac: stateC,
138
+ finalStateHmac: stateD,
139
+ transactionSupported: true,
140
+ disposition: 'unapplied',
141
+ counts,
142
+ classificationCounts,
143
+ checkedAt: 1_700_000_200_000,
144
+ };
145
+ const applyResult = {
146
+ schemaVersion: 1,
147
+ kind: 'cloudly-legacy-deployment-settlement-apply-result',
148
+ status: 'completed',
149
+ requestSha256: productionRequestSha256,
150
+ planSha256,
151
+ settlementId: 'settlement-1',
152
+ sourceStateHmac: stateC,
153
+ finalStateHmac: stateD,
154
+ transactionSupported: true,
155
+ disposition: 'applied',
156
+ counts,
157
+ classificationCounts,
158
+ completedAt: 1_700_000_300_000,
159
+ };
160
+ const stableOutcome = {
161
+ schemaVersion: 1,
162
+ kind: 'cloudly-legacy-deployment-settlement-stable-outcome',
163
+ settlementId: 'settlement-1',
164
+ runId: 'run-1',
165
+ rehearsalBindingSha256: '98749a1fb41e2f802a0bbeeeb8925de50a15f52b8f2865d1c977c9fbcbcb8dfe',
166
+ effectiveAt: 1_700_000_100_000,
167
+ planSha256,
168
+ sourceStateHmac: stateC,
169
+ finalStateHmac: stateD,
170
+ settlements: [{
171
+ operationId: plan.entries[0].operationId,
172
+ finalRevision: plan.entries[0].finalRevision,
173
+ finalDocumentHmac: plan.entries[0].finalDocumentHmac,
174
+ }],
175
+ counts,
176
+ classificationCounts,
177
+ };
178
+ const scratchReceipt = {
179
+ schemaVersion: 1,
180
+ kind: 'cloudly-legacy-deployment-settlement-scratch-receipt',
181
+ authority: authorityReference,
182
+ requestSha256: productionRequestSha256,
183
+ stableOutcome,
184
+ stableOutcomeSha256: 'ee9f3c7a270ee9bd72778e86376c40407ab47b599552e15c60838f3ab100c818',
185
+ transactionCommitted: true,
186
+ disposition: 'applied',
187
+ completedAt: 1_700_000_400_000,
188
+ payloadSha256: '6d28df2da5250974d2b658199c82a2b8b9e1e243cf7db3b9f4eeb28c3d2ed688',
189
+ mac: 'uFe5SRsh-5Xp3mM1-2qPZ7ntkbtxNfEe0SVEd77wGrk',
190
+ };
191
+ const productionReceipt = {
192
+ schemaVersion: 1,
193
+ kind: 'cloudly-legacy-deployment-settlement-production-receipt',
194
+ authority: authorityReference,
195
+ requestSha256: productionRequestSha256,
196
+ scratchReceipt,
197
+ scratchReceiptSha256: '83a9b1ea56ed3042dee608c853dd896a692934cc4d816ed816f42af7a5902b11',
198
+ stableOutcome,
199
+ stableOutcomeSha256: scratchReceipt.stableOutcomeSha256,
200
+ transactionCommitted: true,
201
+ disposition: 'applied',
202
+ completedAt: 1_700_000_500_000,
203
+ payloadSha256: '62cd50e10baa7afacf4ac741b20d2757cee1ece7f2d11eef8066c0f92951958c',
204
+ mac: 'YuIpApcgi4olohdEtXKVzn-QoZTFNFZ06yaulxiy3JU',
205
+ };
206
+ const authenticatedRehearsalBinding = {
207
+ schemaVersion: 1,
208
+ kind: 'authenticated-cloudly-legacy-deployment-settlement-rehearsal-binding',
209
+ authority: authorityReference,
210
+ payload: rehearsalBinding,
211
+ payloadSha256: '98749a1fb41e2f802a0bbeeeb8925de50a15f52b8f2865d1c977c9fbcbcb8dfe',
212
+ mac: 'fKbvRIW0hawgxzkhqCfnVOUJZVNXA5oLyqbFvb_djsI',
213
+ };
214
+ const authenticatedPlan = {
215
+ schemaVersion: 1,
216
+ kind: 'authenticated-cloudly-legacy-deployment-settlement-plan',
217
+ authority: authorityReference,
218
+ payload: plan,
219
+ payloadSha256: planSha256,
220
+ mac: '6_EzTk_wtq89TA6SN3aGQR0FjF3Pm0D20ZNP505REcA',
221
+ };
222
+ const authenticatedProductionRequest = {
223
+ schemaVersion: 1,
224
+ kind: 'authenticated-cloudly-legacy-deployment-settlement-production-request',
225
+ authority: authorityReference,
226
+ payload: productionRequest,
227
+ payloadSha256: productionRequestSha256,
228
+ mac: 'pSqhl4omrgIR51jiVc3kuj396cSR-HQE1GOE6wrY--0',
229
+ };
230
+ const authenticatedCheckResult = {
231
+ schemaVersion: 1,
232
+ kind: 'authenticated-cloudly-legacy-deployment-settlement-check-result',
233
+ authority: authorityReference,
234
+ payload: checkResult,
235
+ payloadSha256: '0ef262687d1a67299072f4adc3115340119311df671f3222309e8007373739cf',
236
+ mac: 'XGMYSDcMy3eLrAI44h966_c5uHb1PW8mooPytgNvF0k',
237
+ };
238
+ const authenticatedApplyResult = {
239
+ schemaVersion: 1,
240
+ kind: 'authenticated-cloudly-legacy-deployment-settlement-apply-result',
241
+ authority: authorityReference,
242
+ payload: applyResult,
243
+ payloadSha256: 'e2c0c1e9f8cf7892b077580a41658c95e09b6a190266b5b8e75a46244f32fe6d',
244
+ mac: 'UvGiM-WXOlH5S3_eDMfobJfN9XggFf8L_34xYCBNo0k',
245
+ };
246
+ const authenticatedStableOutcome = {
247
+ schemaVersion: 1,
248
+ kind: 'authenticated-cloudly-legacy-deployment-settlement-stable-outcome',
249
+ authority: authorityReference,
250
+ payload: stableOutcome,
251
+ payloadSha256: 'ee9f3c7a270ee9bd72778e86376c40407ab47b599552e15c60838f3ab100c818',
252
+ mac: 'fFbr-sSnZLBzpv1FEAfVBsNVxAcFqyzClX8UcPeUD30',
253
+ };
254
+ export const cloudlyLegacyDeploymentSettlementGoldenVectors = deepFreezeValue({
255
+ version: 1,
256
+ authority: {
257
+ metadata: authorityMetadata,
258
+ reference: authorityReference,
259
+ metadataCanonicalSha256: 'da410b15675f0387a5266aecba70984c944cd45a9183e275438b299b42e42659',
260
+ aadSha256: 'c161a176588e3f247ac791e6d17c1b0b585fb43e74a5b993875a3dc571265313',
261
+ },
262
+ rehearsalBinding: {
263
+ input: rehearsalBinding,
264
+ canonicalSha256: '98749a1fb41e2f802a0bbeeeb8925de50a15f52b8f2865d1c977c9fbcbcb8dfe',
265
+ authenticatedInput: authenticatedRehearsalBinding,
266
+ authenticatedCanonicalSha256: '25e157858eb6e8fa0991f9c0912db93809fe7b9393653ab3da1ca0cd19767221',
267
+ hmac: authenticatedRehearsalBinding.mac,
268
+ },
269
+ plan: {
270
+ input: plan,
271
+ canonicalSha256: planSha256,
272
+ authenticatedInput: authenticatedPlan,
273
+ authenticatedCanonicalSha256: 'cb49cc46c65ff2ad5ca9441b714d3deab51ea91ab30ce8c703a16e1cbe326995',
274
+ hmac: authenticatedPlan.mac,
275
+ },
276
+ productionRequest: {
277
+ input: productionRequest,
278
+ canonicalSha256: productionRequestSha256,
279
+ authenticatedInput: authenticatedProductionRequest,
280
+ authenticatedCanonicalSha256: 'fe97347b4ccd6734fe84f6ef9bf3371acb8d3cb86f2264be73793120019fc892',
281
+ hmac: authenticatedProductionRequest.mac,
282
+ },
283
+ checkResult: {
284
+ input: checkResult,
285
+ canonicalSha256: '0ef262687d1a67299072f4adc3115340119311df671f3222309e8007373739cf',
286
+ authenticatedInput: authenticatedCheckResult,
287
+ authenticatedCanonicalSha256: 'b1a7a0b4db36113084ff984508ff409b4f2964b4974a2ed50ece41f2b525e62d',
288
+ hmac: authenticatedCheckResult.mac,
289
+ },
290
+ applyResult: {
291
+ input: applyResult,
292
+ canonicalSha256: 'e2c0c1e9f8cf7892b077580a41658c95e09b6a190266b5b8e75a46244f32fe6d',
293
+ authenticatedInput: authenticatedApplyResult,
294
+ authenticatedCanonicalSha256: 'dcf178cbcb59805517bee0f15ea95abec36bdae5508ead497c99acaccd2d314d',
295
+ hmac: authenticatedApplyResult.mac,
296
+ },
297
+ stableOutcome: {
298
+ input: stableOutcome,
299
+ canonicalSha256: 'ee9f3c7a270ee9bd72778e86376c40407ab47b599552e15c60838f3ab100c818',
300
+ authenticatedInput: authenticatedStableOutcome,
301
+ authenticatedCanonicalSha256: '985df2f46389cb4afa7b37c1f005a15869faae8ee6e010a249d47edf39819ee9',
302
+ hmac: authenticatedStableOutcome.mac,
303
+ },
304
+ scratchReceipt: {
305
+ input: scratchReceipt,
306
+ canonicalSha256: '83a9b1ea56ed3042dee608c853dd896a692934cc4d816ed816f42af7a5902b11',
307
+ hmac: scratchReceipt.mac,
308
+ },
309
+ productionReceipt: {
310
+ input: productionReceipt,
311
+ canonicalSha256: '9b4221bfd6335ad6f0095151f778933567a916e0691fc56c40893f2cb44f1a50',
312
+ hmac: productionReceipt.mac,
313
+ },
314
+ });
315
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS5jbG91ZGx5bGVnYWN5ZGVwbG95bWVudHNldHRsZW1lbnQuZ29sZGVuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvcnVudGltZS5jbG91ZGx5bGVnYWN5ZGVwbG95bWVudHNldHRsZW1lbnQuZ29sZGVuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQXdFN0QsTUFBTSxJQUFJLEdBQUcsa0VBQWtFLENBQUM7QUFDaEYsTUFBTSxJQUFJLEdBQUcsa0VBQWtFLENBQUM7QUFDaEYsTUFBTSxJQUFJLEdBQUcsa0VBQWtFLENBQUM7QUFDaEYsTUFBTSxJQUFJLEdBQUcsa0VBQWtFLENBQUM7QUFDaEYsTUFBTSxJQUFJLEdBQUcsa0VBQWtFLENBQUM7QUFDaEYsTUFBTSxJQUFJLEdBQUcsa0VBQWtFLENBQUM7QUFDaEYsTUFBTSxJQUFJLEdBQUcsa0VBQWtFLENBQUM7QUFDaEYsTUFBTSxJQUFJLEdBQUcsa0VBQWtFLENBQUM7QUFDaEYsTUFBTSxJQUFJLEdBQUcsa0VBQWtFLENBQUM7QUFDaEYsTUFBTSxJQUFJLEdBQUcsa0VBQWtFLENBQUM7QUFDaEYsTUFBTSxJQUFJLEdBQUcsa0VBQWtFLENBQUM7QUFDaEYsTUFBTSxNQUFNLEdBQUcsOEVBQXVGLENBQUM7QUFDdkcsTUFBTSxNQUFNLEdBQUcsOEVBQXVGLENBQUM7QUFFdkcsTUFBTSxpQkFBaUIsR0FBMEQ7SUFDL0UsYUFBYSxFQUFFLENBQUM7SUFDaEIsV0FBVyxFQUFFLG9CQUFvQjtJQUNqQyxXQUFXLEVBQUUsYUFBYTtJQUMxQixLQUFLLEVBQUUsa0JBQWtCO0lBQ3pCLFVBQVUsRUFBRSxDQUFDO0lBQ2IsWUFBWSxFQUFFLGNBQWM7SUFDNUIsUUFBUSxFQUFFLGlCQUFpQjtJQUMzQixTQUFTLEVBQUUsaUJBQWlCO0lBQzVCLHNCQUFzQixFQUFFLFVBQVUsSUFBSSxFQUFFO0lBQ3hDLGlCQUFp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