@serve.zone/interfaces 32.13.0 → 32.15.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.
@@ -2,6 +2,9 @@ import type { TSha256Digest } from './immutableimage.js';
2
2
  import type { IClusterRuntimeReference, TClusterRuntimePhase } from './clusterruntime.js';
3
3
  import type { IRuntimeAssignmentReference, IRuntimeAuthorityReference } from './runtimeassignment.js';
4
4
  import type { IRuntimeSessionBinding } from './runtimesession.js';
5
+ import type { IRuntimeStorageClaim, IRuntimeStorageClaimIntent } from './runtimestorageclaim.js';
6
+ import type { IAppStoreFilesystemStorageRequest } from '../appstore/types.js';
7
+ import type { ISecretVersionReference } from './secret.js';
5
8
  /**
6
9
  * A server-owned accepted record reference. It contains no bearer, secret, or proof boolean.
7
10
  * Consumers dereference it against the current owner record before applying policy.
@@ -209,6 +212,97 @@ export interface IFleetCutoverVolumeHandoffIntent {
209
212
  acceptedAt: number;
210
213
  digest: TSha256Digest;
211
214
  }
215
+ export interface IFleetCutoverPersistentVolumeMountDescriptor extends IFleetCutoverMountDescriptor {
216
+ type: 'volume';
217
+ classification: 'persistent-volume';
218
+ readOnly: false;
219
+ }
220
+ /**
221
+ * Cloudly-owned desired handoff prepared from authenticated legacy observations. Observed Docker
222
+ * source identity is not physical storage lineage; Corestore proves lineage later under the held
223
+ * native attachment fence.
224
+ */
225
+ export interface IFleetCutoverPreparedVolumeHandoffIntent {
226
+ id: string;
227
+ generation: number;
228
+ clusterId: string;
229
+ nodeId: string;
230
+ serviceId: string;
231
+ volumeId: string;
232
+ observedMount: IFleetCutoverPersistentVolumeMountDescriptor;
233
+ claimIntent: IRuntimeStorageClaimIntent;
234
+ runtime: IClusterRuntimeReference & {
235
+ phase: 'draining';
236
+ };
237
+ scope: IFleetCutoverAcceptedEvidenceReference;
238
+ targetSet: IFleetCutoverTargetSetReference;
239
+ legacyStorageEvidence: IFleetCutoverAcceptedEvidenceReference;
240
+ sourceNodeObservation: IFleetCutoverAcceptedEvidenceReference;
241
+ acceptedAt: number;
242
+ digest: TSha256Digest;
243
+ }
244
+ export interface IFleetCutoverPreparedVolumeHandoffUpsert {
245
+ nodeId: string;
246
+ serviceId: string;
247
+ mountIdentityDigest: TSha256Digest;
248
+ request: IAppStoreFilesystemStorageRequest & {
249
+ accessMode: 'ReadWriteOnce';
250
+ reclaimPolicy: 'retain';
251
+ };
252
+ }
253
+ /** One bounded CAS mutation; the durable aggregate may contain many such 32-entry batches. */
254
+ export interface IFleetCutoverPreparedVolumeHandoffMutation {
255
+ mutationId: string;
256
+ clusterId: string;
257
+ currentRuntime: IClusterRuntimeReference & {
258
+ phase: 'draining';
259
+ };
260
+ scope: IFleetCutoverAcceptedEvidenceReference;
261
+ targetSet: IFleetCutoverTargetSetReference;
262
+ expectedAggregate: IFleetCutoverAcceptedEvidenceReference | null;
263
+ upserts: IFleetCutoverPreparedVolumeHandoffUpsert[];
264
+ removals: IFleetCutoverAcceptedEvidenceReference[];
265
+ }
266
+ /**
267
+ * Revisioned header for one complete expected set. It intentionally contains no page references:
268
+ * immutable pages bind back to this exact revision, avoiding an aggregate/page digest cycle.
269
+ */
270
+ export interface IFleetCutoverPreparedVolumeHandoffAggregate {
271
+ id: string;
272
+ generation: number;
273
+ previous: IFleetCutoverAcceptedEvidenceReference | null;
274
+ clusterId: string;
275
+ runtime: IClusterRuntimeReference & {
276
+ phase: 'draining';
277
+ };
278
+ scope: IFleetCutoverAcceptedEvidenceReference;
279
+ targetSet: IFleetCutoverTargetSetReference;
280
+ state: 'incomplete' | 'complete';
281
+ requiredHandoffCount: number;
282
+ handoffCount: number;
283
+ pageCount: number;
284
+ handoffSetDigest: TSha256Digest;
285
+ acceptedAt: number;
286
+ digest: TSha256Digest;
287
+ }
288
+ /** One immutable 1..32-entry page pinned to one aggregate revision. */
289
+ export interface IFleetCutoverPreparedVolumeHandoffPage {
290
+ id: string;
291
+ generation: 1;
292
+ aggregate: IFleetCutoverAcceptedEvidenceReference;
293
+ pageIndex: number;
294
+ handoffs: IFleetCutoverPreparedVolumeHandoffPageReference[];
295
+ handoffSetPageDigest: TSha256Digest;
296
+ digest: TSha256Digest;
297
+ }
298
+ /** Immutable page membership commits both the handoff revision and its owning physical node. */
299
+ export interface IFleetCutoverPreparedVolumeHandoffPageReference extends IFleetCutoverAcceptedEvidenceReference {
300
+ nodeId: string;
301
+ }
302
+ export interface IFleetCutoverPreparedVolumeHandoffPageSetEntry {
303
+ pageIndex: number;
304
+ handoffSetPageDigest: TSha256Digest;
305
+ }
212
306
  interface IFleetCutoverVolumeFenceBase {
213
307
  id: string;
214
308
  generation: number;
@@ -257,6 +351,43 @@ export interface IFleetCutoverCorestoreAdoptionReceipt {
257
351
  acceptedAt: number;
258
352
  digest: TSha256Digest;
259
353
  }
354
+ /** Current-session Cloudly grant for one post-Pallet adoption attempt. */
355
+ export interface IFleetCutoverStorageAdoptionGrant {
356
+ id: string;
357
+ generation: number;
358
+ previous: IFleetCutoverAcceptedEvidenceReference | null;
359
+ clusterId: string;
360
+ nodeId: string;
361
+ serviceId: string;
362
+ volumeId: string;
363
+ observedMount: IFleetCutoverPersistentVolumeMountDescriptor;
364
+ runtime: IClusterRuntimeReference & {
365
+ phase: 'pallet';
366
+ };
367
+ session: IRuntimeSessionBinding;
368
+ handoffIntent: IFleetCutoverAcceptedEvidenceReference;
369
+ palletFence: IFleetCutoverAcceptedEvidenceReference;
370
+ acceptedAt: number;
371
+ digest: TSha256Digest;
372
+ }
373
+ /** Exact result Pallet persists only after revalidating the current grant following adoption. */
374
+ export interface IFleetCutoverStorageAdoptionBundle {
375
+ grant: IFleetCutoverStorageAdoptionGrant;
376
+ fence: Extract<TFleetCutoverVolumeFence, {
377
+ state: 'consumed';
378
+ }>;
379
+ adoption: IFleetCutoverCorestoreAdoptionReceipt;
380
+ claim: IRuntimeStorageClaim;
381
+ }
382
+ /** One authenticated Spark reporter's complete bounded subset of a full immutable aggregate page. */
383
+ export interface IFleetCutoverHeldVolumeFenceEvidencePage {
384
+ aggregate: IFleetCutoverAcceptedEvidenceReference;
385
+ page: IFleetCutoverPreparedVolumeHandoffPage;
386
+ nodeId: string;
387
+ fences: Extract<TFleetCutoverVolumeFence, {
388
+ state: 'held';
389
+ }>[];
390
+ }
260
391
  export interface IFleetCutoverCoreflowRetirementEvidence {
261
392
  id: string;
262
393
  generation: number;
@@ -302,6 +433,50 @@ export interface IFleetCutoverCoreflowRetirementEvidence {
302
433
  acceptedAt: number;
303
434
  digest: TSha256Digest;
304
435
  }
436
+ /**
437
+ * Administrator intent to prepare the one explicitly designated ingress service. The caller
438
+ * supplies only compare-and-swap inputs; Cloudly owns credential generation and acceptance.
439
+ */
440
+ export interface IFleetCutoverIngressPreparationRequest {
441
+ mutationId: string;
442
+ clusterId: string;
443
+ ingressServiceId: string;
444
+ currentRuntime: IClusterRuntimeReference & {
445
+ phase: 'pallet';
446
+ };
447
+ scope: IFleetCutoverAcceptedEvidenceReference;
448
+ targetSet: IFleetCutoverTargetSetReference;
449
+ expectedSpecRevision: number;
450
+ /** Null for creation; the exact current designation for same-service credential rotation. */
451
+ expectedDesignation: IFleetCutoverAcceptedEvidenceReference | null;
452
+ }
453
+ /** Public identity of the active ingress credential generation; it contains no credential value. */
454
+ export interface IFleetCutoverIngressCredentialReference {
455
+ credentialId: string;
456
+ generation: number;
457
+ secretVersion: ISecretVersionReference;
458
+ }
459
+ /**
460
+ * Cloudly's accepted pre-assignment designation. This grants no assignment, session,
461
+ * registration, publication, port-transfer, or post-registration ingress authority.
462
+ */
463
+ export interface IFleetCutoverIngressDesignation {
464
+ id: string;
465
+ generation: number;
466
+ previous: IFleetCutoverAcceptedEvidenceReference | null;
467
+ clusterId: string;
468
+ runtime: IClusterRuntimeReference & {
469
+ phase: 'pallet';
470
+ };
471
+ scope: IFleetCutoverAcceptedEvidenceReference;
472
+ targetSet: IFleetCutoverTargetSetReference;
473
+ ingressServiceId: string;
474
+ preparedSpecRevision: number;
475
+ credential: IFleetCutoverIngressCredentialReference;
476
+ actorId: string;
477
+ acceptedAt: number;
478
+ digest: TSha256Digest;
479
+ }
305
480
  export interface IFleetCutoverIngressAuthority {
306
481
  id: string;
307
482
  generation: number;
@@ -379,6 +554,11 @@ export declare const fleetCutoverContract: Readonly<{
379
554
  readonly maximumNodes: 1024;
380
555
  readonly maximumContainersPerNode: 512;
381
556
  readonly maximumMountsPerOwner: 32;
557
+ readonly maximumPreparedVolumeHandoffMutationEntries: 32;
558
+ /** Every admitted task has one node placement and at most 32 mounts: 4096 * 32. */
559
+ readonly maximumPreparedVolumeHandoffs: number;
560
+ readonly maximumPreparedVolumeHandoffPages: number;
561
+ readonly maximumHeldVolumeFenceEvidenceBytes: 131072;
382
562
  readonly maximumClassifications: 512;
383
563
  readonly observationFreshnessMs: 300000;
384
564
  readonly mountSourceIdentityDigestDomain: "serve.zone/fleet-cutover-mount-source-identity";
@@ -390,9 +570,16 @@ export declare const fleetCutoverContract: Readonly<{
390
570
  readonly censusDigestDomain: "serve.zone/fleet-cutover-census";
391
571
  readonly scopeDigestDomain: "serve.zone/fleet-cutover-scope";
392
572
  readonly volumeHandoffDigestDomain: "serve.zone/fleet-cutover-volume-handoff";
573
+ readonly preparedVolumeHandoffDigestDomain: "serve.zone/fleet-cutover-prepared-volume-handoff";
574
+ readonly preparedVolumeHandoffAggregateDigestDomain: "serve.zone/fleet-cutover-prepared-volume-handoff-aggregate";
575
+ readonly preparedVolumeHandoffPageContentDigestDomain: "serve.zone/fleet-cutover-prepared-volume-handoff-page-content";
576
+ readonly preparedVolumeHandoffPageDigestDomain: "serve.zone/fleet-cutover-prepared-volume-handoff-page";
577
+ readonly preparedVolumeHandoffSetDigestDomain: "serve.zone/fleet-cutover-prepared-volume-handoff-set";
393
578
  readonly volumeFenceDigestDomain: "serve.zone/fleet-cutover-volume-fence";
394
579
  readonly corestoreAdoptionDigestDomain: "serve.zone/fleet-cutover-corestore-adoption";
580
+ readonly storageAdoptionGrantDigestDomain: "serve.zone/fleet-cutover-storage-adoption-grant";
395
581
  readonly coreflowRetirementDigestDomain: "serve.zone/fleet-cutover-coreflow-retirement";
582
+ readonly ingressDesignationDigestDomain: "serve.zone/fleet-cutover-ingress-designation";
396
583
  readonly ingressAuthorityDigestDomain: "serve.zone/fleet-cutover-ingress-authority";
397
584
  readonly legalPhaseTransitions: Readonly<{
398
585
  swarm: "draining";
@@ -421,6 +608,12 @@ export declare const fleetCutoverEvidenceReferenceOf: (valueArg: {
421
608
  generation: number;
422
609
  digest: TSha256Digest;
423
610
  }) => IFleetCutoverAcceptedEvidenceReference;
611
+ export declare const fleetCutoverPreparedVolumeHandoffPageReferenceOf: (valueArg: {
612
+ id: string;
613
+ generation: number;
614
+ digest: TSha256Digest;
615
+ nodeId: string;
616
+ }) => IFleetCutoverPreparedVolumeHandoffPageReference;
424
617
  export declare const snapshotFleetCutoverAcceptedEvidenceReference: (valueArg: unknown) => IFleetCutoverAcceptedEvidenceReference;
425
618
  export declare const snapshotFleetCutoverScope: (valueArg: unknown) => IFleetCutoverScope;
426
619
  export declare const computeFleetCutoverScopeDigest: (valueArg: unknown) => Promise<TSha256Digest>;
@@ -429,6 +622,26 @@ export declare const snapshotFleetCutoverScopeClassificationRequest: (valueArg:
429
622
  export declare const snapshotFleetCutoverTargetSetReference: (valueArg: unknown) => IFleetCutoverTargetSetReference;
430
623
  export declare const snapshotFleetCutoverVolumeHandoffIntent: (valueArg: unknown) => IFleetCutoverVolumeHandoffIntent;
431
624
  export declare const computeFleetCutoverVolumeHandoffDigest: (valueArg: unknown) => Promise<TSha256Digest>;
625
+ export declare const snapshotFleetCutoverPreparedVolumeHandoffIntent: (valueArg: unknown) => IFleetCutoverPreparedVolumeHandoffIntent;
626
+ export declare const computeFleetCutoverPreparedVolumeHandoffDigest: (valueArg: unknown) => Promise<TSha256Digest>;
627
+ export declare const validateFleetCutoverPreparedVolumeHandoffIntent: (valueArg: unknown) => Promise<string[]>;
628
+ export declare const snapshotFleetCutoverPreparedVolumeHandoffMutation: (valueArg: unknown) => IFleetCutoverPreparedVolumeHandoffMutation;
629
+ export declare const snapshotFleetCutoverPreparedVolumeHandoffAggregate: (valueArg: unknown) => IFleetCutoverPreparedVolumeHandoffAggregate;
630
+ export declare const computeFleetCutoverPreparedVolumeHandoffAggregateDigest: (valueArg: unknown) => Promise<TSha256Digest>;
631
+ export declare const validateFleetCutoverPreparedVolumeHandoffAggregate: (valueArg: unknown) => Promise<string[]>;
632
+ export declare const snapshotFleetCutoverPreparedVolumeHandoffPage: (valueArg: unknown) => IFleetCutoverPreparedVolumeHandoffPage;
633
+ export declare const computeFleetCutoverPreparedVolumeHandoffPageContentDigest: (pageIndexArg: unknown, handoffsArg: unknown) => Promise<TSha256Digest>;
634
+ export declare const computeFleetCutoverPreparedVolumeHandoffPageDigest: (valueArg: unknown) => Promise<TSha256Digest>;
635
+ export declare const validateFleetCutoverPreparedVolumeHandoffPage: (valueArg: unknown) => Promise<string[]>;
636
+ export declare const computeFleetCutoverPreparedVolumeHandoffSetDigest: (entriesArg: unknown) => Promise<TSha256Digest>;
637
+ /**
638
+ * Full pinned-set proof. The caller must supply every page for the exact aggregate revision; a
639
+ * node-local subset or a mixed revision can never satisfy this binder.
640
+ */
641
+ export declare const bindFleetCutoverPreparedVolumeHandoffPages: (aggregateArg: unknown, pagesArg: unknown) => Promise<{
642
+ aggregate: IFleetCutoverPreparedVolumeHandoffAggregate;
643
+ pages: IFleetCutoverPreparedVolumeHandoffPage[];
644
+ }>;
432
645
  export declare const snapshotFleetCutoverVolumeFence: (valueArg: unknown) => TFleetCutoverVolumeFence;
433
646
  export declare const computeFleetCutoverVolumeFenceDigest: (valueArg: unknown) => Promise<TSha256Digest>;
434
647
  export declare const snapshotFleetCutoverCorestoreAdoptionReceipt: (valueArg: unknown) => IFleetCutoverCorestoreAdoptionReceipt;
@@ -438,12 +651,47 @@ export declare const bindFleetCutoverAdoptionToVolumeFence: (adoptionArg: unknow
438
651
  adoption: IFleetCutoverCorestoreAdoptionReceipt;
439
652
  fence: TFleetCutoverVolumeFence;
440
653
  };
654
+ /**
655
+ * Joins the accepted adoption result to the full handoff and provider-ready claim content.
656
+ * Native attachment fencing and accepted-record dereferencing remain owner checks.
657
+ */
658
+ export declare const bindFleetCutoverAdoptionToStorageClaim: (adoptionArg: unknown, handoffArg: unknown, claimArg: unknown) => Promise<{
659
+ adoption: IFleetCutoverCorestoreAdoptionReceipt;
660
+ handoff: IFleetCutoverPreparedVolumeHandoffIntent;
661
+ claim: IRuntimeStorageClaim;
662
+ }>;
441
663
  export declare const validateFleetCutoverVolumeHandoffIntent: (valueArg: unknown) => Promise<string[]>;
442
664
  export declare const validateFleetCutoverVolumeFence: (valueArg: unknown) => Promise<string[]>;
443
665
  export declare const validateFleetCutoverCorestoreAdoptionReceipt: (valueArg: unknown) => Promise<string[]>;
666
+ export declare const snapshotFleetCutoverStorageAdoptionGrant: (valueArg: unknown) => IFleetCutoverStorageAdoptionGrant;
667
+ export declare const computeFleetCutoverStorageAdoptionGrantDigest: (valueArg: unknown) => Promise<TSha256Digest>;
668
+ export declare const validateFleetCutoverStorageAdoptionGrant: (valueArg: unknown) => Promise<string[]>;
669
+ /** Content join only; the controller must still prove this is the live current session and phase. */
670
+ export declare const bindFleetCutoverStorageAdoptionGrant: (grantArg: unknown, handoffArg: unknown, heldFenceArg: unknown) => Promise<{
671
+ grant: IFleetCutoverStorageAdoptionGrant;
672
+ handoff: IFleetCutoverPreparedVolumeHandoffIntent;
673
+ fence: Extract<TFleetCutoverVolumeFence, {
674
+ state: "held";
675
+ }>;
676
+ }>;
677
+ export declare const snapshotFleetCutoverStorageAdoptionBundle: (valueArg: unknown) => IFleetCutoverStorageAdoptionBundle;
678
+ /**
679
+ * Binds the complete post-adoption content. Physical lineage remains the provider-produced
680
+ * adoption digest and is deliberately never equated to the observed Docker source identity.
681
+ */
682
+ export declare const bindFleetCutoverStorageAdoptionBundle: (valueArg: unknown, handoffArg: unknown) => Promise<{
683
+ bundle: IFleetCutoverStorageAdoptionBundle;
684
+ handoff: IFleetCutoverPreparedVolumeHandoffIntent;
685
+ }>;
686
+ export declare const snapshotFleetCutoverHeldVolumeFenceEvidencePage: (valueArg: unknown) => IFleetCutoverHeldVolumeFenceEvidencePage;
687
+ export declare const validateFleetCutoverHeldVolumeFenceEvidencePage: (valueArg: unknown) => Promise<string[]>;
444
688
  export declare const snapshotFleetCutoverCoreflowRetirementEvidence: (valueArg: unknown) => IFleetCutoverCoreflowRetirementEvidence;
445
689
  export declare const computeFleetCutoverCoreflowRetirementDigest: (valueArg: unknown) => Promise<TSha256Digest>;
446
690
  export declare const validateFleetCutoverCoreflowRetirementEvidence: (valueArg: unknown) => Promise<string[]>;
691
+ export declare const snapshotFleetCutoverIngressPreparationRequest: (valueArg: unknown) => IFleetCutoverIngressPreparationRequest;
692
+ export declare const snapshotFleetCutoverIngressDesignation: (valueArg: unknown) => IFleetCutoverIngressDesignation;
693
+ export declare const computeFleetCutoverIngressDesignationDigest: (valueArg: unknown) => Promise<TSha256Digest>;
694
+ export declare const validateFleetCutoverIngressDesignation: (valueArg: unknown) => Promise<string[]>;
447
695
  export declare const snapshotFleetCutoverIngressAuthority: (valueArg: unknown) => IFleetCutoverIngressAuthority;
448
696
  export declare const computeFleetCutoverIngressAuthorityDigest: (valueArg: unknown) => Promise<TSha256Digest>;
449
697
  export declare const validateFleetCutoverIngressAuthority: (valueArg: unknown) => Promise<string[]>;