@serve.zone/interfaces 32.14.0 → 32.16.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 +27 -0
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/data/clusternode.d.ts +35 -3
- package/dist_ts/data/clusternode.js +141 -3
- package/dist_ts/data/fleetcutover.d.ts +263 -0
- package/dist_ts/data/fleetcutover.js +784 -7
- package/dist_ts/data/runtimestorageclaim.d.ts +43 -0
- package/dist_ts/data/runtimestorageclaim.js +88 -4
- package/dist_ts/requests/fleetcutover.d.ts +70 -6
- package/dist_ts/requests/runtimesession.d.ts +47 -0
- package/package.json +1 -1
- package/readme.md +118 -16
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/data/clusternode.ts +209 -2
- package/ts/data/fleetcutover.ts +1156 -5
- package/ts/data/runtimestorageclaim.ts +122 -3
- package/ts/requests/fleetcutover.ts +80 -5
- package/ts/requests/runtimesession.ts +57 -0
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { TSha256Digest } from './immutableimage.js';
|
|
2
2
|
import type { IRuntimeAssignment, IRuntimeAuthorityReference, IRuntimeController } from './runtimeassignment.js';
|
|
3
3
|
import type { IResolvedFilesystemStorageBinding } from '../platform/storage.js';
|
|
4
|
+
import type { IAppStoreFilesystemStorageRequest } from '../appstore/types.js';
|
|
4
5
|
/** Only immutable, portable fields of a ready Corestore filesystem binding. */
|
|
5
6
|
export interface IRuntimeStorageClaimBinding extends Pick<IResolvedFilesystemStorageBinding, 'id' | 'serviceId' | 'requestId' | 'requestDigest' | 'generation' | 'observedGeneration' | 'policy' | 'resourceRef' | 'mountPath'> {
|
|
6
7
|
kind: 'filesystem';
|
|
@@ -11,6 +12,35 @@ export interface IRuntimeStorageClaimBinding extends Pick<IResolvedFilesystemSto
|
|
|
11
12
|
topology: 'singleNode';
|
|
12
13
|
};
|
|
13
14
|
}
|
|
15
|
+
/**
|
|
16
|
+
* Cloudly's requested filesystem binding identity before the storage provider reports readiness.
|
|
17
|
+
* Provider-produced observation, resource and capability fields cannot be stated in this shape.
|
|
18
|
+
*/
|
|
19
|
+
export interface IRuntimeStorageClaimRequestedFilesystemBinding {
|
|
20
|
+
serviceId: string;
|
|
21
|
+
request: IAppStoreFilesystemStorageRequest & {
|
|
22
|
+
accessMode: 'ReadWriteOnce';
|
|
23
|
+
reclaimPolicy: 'retain';
|
|
24
|
+
};
|
|
25
|
+
requestDigest: string;
|
|
26
|
+
}
|
|
27
|
+
/** Cloudly-owned claim identity and desired request before a provider-produced ready binding exists. */
|
|
28
|
+
export interface IRuntimeStorageClaimIntent {
|
|
29
|
+
id: string;
|
|
30
|
+
generation: number;
|
|
31
|
+
previous: IRuntimeAuthorityReference | null;
|
|
32
|
+
controller: IRuntimeController & {
|
|
33
|
+
kind: 'cloudly';
|
|
34
|
+
};
|
|
35
|
+
organizationId: string;
|
|
36
|
+
clusterId: string;
|
|
37
|
+
nodeId: string;
|
|
38
|
+
runtimeNamespace: string;
|
|
39
|
+
serviceId: string;
|
|
40
|
+
requestedBinding: IRuntimeStorageClaimRequestedFilesystemBinding;
|
|
41
|
+
reclaimPolicy: 'retain';
|
|
42
|
+
digest: TSha256Digest;
|
|
43
|
+
}
|
|
14
44
|
/** Cloudly authority for one retained, node-local volume; no host path or attachment attempt. */
|
|
15
45
|
export interface IRuntimeStorageClaim {
|
|
16
46
|
id: string;
|
|
@@ -29,14 +59,27 @@ export interface IRuntimeStorageClaim {
|
|
|
29
59
|
digest: TSha256Digest;
|
|
30
60
|
}
|
|
31
61
|
export declare const runtimeStorageClaimContract: Readonly<{
|
|
62
|
+
readonly intentDigestDomain: "serve.zone/runtime-storage-claim-intent";
|
|
32
63
|
readonly digestDomain: "serve.zone/runtime-storage-claim";
|
|
33
64
|
readonly accessMode: "ReadWriteOnce";
|
|
34
65
|
readonly reclaimPolicy: "retain";
|
|
35
66
|
}>;
|
|
67
|
+
/** Detached exact-schema snapshot. This shape deliberately cannot state provider readiness. */
|
|
68
|
+
export declare const snapshotRuntimeStorageClaimIntent: (valueArg: unknown) => IRuntimeStorageClaimIntent;
|
|
69
|
+
export declare const computeRuntimeStorageClaimIntentDigest: (valueArg: unknown) => Promise<TSha256Digest>;
|
|
70
|
+
export declare const validateRuntimeStorageClaimIntent: (valueArg: unknown) => Promise<string[]>;
|
|
36
71
|
/** Detached exact-schema snapshot. Digest and authoritative provider readiness are separate checks. */
|
|
37
72
|
export declare const snapshotRuntimeStorageClaim: (valueArg: unknown) => IRuntimeStorageClaim;
|
|
38
73
|
export declare const computeRuntimeStorageClaimDigest: (valueArg: unknown) => Promise<TSha256Digest>;
|
|
39
74
|
export declare const validateRuntimeStorageClaim: (valueArg: unknown) => Promise<string[]>;
|
|
75
|
+
/**
|
|
76
|
+
* Joins Cloudly-owned identity and request facts to a provider-produced ready binding.
|
|
77
|
+
* This content check does not authenticate either producer or grant attachment authority.
|
|
78
|
+
*/
|
|
79
|
+
export declare const bindRuntimeStorageClaimToIntent: (claimArg: unknown, intentArg: unknown) => Promise<{
|
|
80
|
+
claim: IRuntimeStorageClaim;
|
|
81
|
+
intent: IRuntimeStorageClaimIntent;
|
|
82
|
+
}>;
|
|
40
83
|
/** Content binding only; controller authentication, provider checks and attachment fencing remain owner-owned. */
|
|
41
84
|
export declare const bindRuntimeStorageClaimToAssignment: (claimArg: unknown, assignmentArg: unknown, expectedClusterIdArg: unknown) => Promise<{
|
|
42
85
|
claim: IRuntimeStorageClaim;
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { snapshotRuntimeAssignment, validateRuntimeAssignment } from './runtimeassignment.js';
|
|
2
2
|
import { normalizeServiceAbsolutePath } from './service.js';
|
|
3
|
+
import { createStorageRequestSha256, normalizeStorageRequest } from '../platform/storage.js';
|
|
3
4
|
import { canonicalizeStrictJson, createCanonicalJsonSha256Hex } from '../private/canonicaljson.js';
|
|
4
5
|
import { isClusterNodeId } from '../private/nodeidentifier.js';
|
|
5
6
|
export const runtimeStorageClaimContract = Object.freeze({
|
|
7
|
+
intentDigestDomain: 'serve.zone/runtime-storage-claim-intent',
|
|
6
8
|
digestDomain: 'serve.zone/runtime-storage-claim',
|
|
7
9
|
accessMode: 'ReadWriteOnce',
|
|
8
10
|
reclaimPolicy: 'retain',
|
|
@@ -41,6 +43,10 @@ const digest = (valueArg) => {
|
|
|
41
43
|
requireValue(typeof valueArg === 'string' && /^sha256:[a-f0-9]{64}$/.test(valueArg));
|
|
42
44
|
return valueArg;
|
|
43
45
|
};
|
|
46
|
+
const requestDigest = (valueArg) => {
|
|
47
|
+
requireValue(typeof valueArg === 'string' && /^[a-f0-9]{64}$/.test(valueArg));
|
|
48
|
+
return valueArg;
|
|
49
|
+
};
|
|
44
50
|
const reference = (valueArg) => {
|
|
45
51
|
const value = record(valueArg, ['id', 'generation', 'digest']);
|
|
46
52
|
return { id: assignmentId(value.id), generation: generation(value.generation), digest: digest(value.digest) };
|
|
@@ -56,25 +62,69 @@ const mountPath = (valueArg) => {
|
|
|
56
62
|
&& !valueArg.startsWith('/run/secrets/') && !'/run/secrets'.startsWith(`${valueArg}/`));
|
|
57
63
|
return valueArg;
|
|
58
64
|
};
|
|
65
|
+
const requestedBinding = (valueArg) => {
|
|
66
|
+
const value = record(valueArg, ['serviceId', 'request', 'requestDigest']);
|
|
67
|
+
const request = normalizeStorageRequest(value.request);
|
|
68
|
+
requireValue(request.kind === 'filesystem' && request.accessMode === 'ReadWriteOnce'
|
|
69
|
+
&& request.reclaimPolicy === 'retain' && mountPath(request.mountPath) === request.mountPath);
|
|
70
|
+
return { serviceId: assignmentId(value.serviceId),
|
|
71
|
+
request: request,
|
|
72
|
+
requestDigest: requestDigest(value.requestDigest) };
|
|
73
|
+
};
|
|
59
74
|
const binding = (valueArg) => {
|
|
60
75
|
const value = record(valueArg, ['id', 'serviceId', 'requestId', 'requestDigest', 'kind',
|
|
61
76
|
'generation', 'observedGeneration', 'status', 'policy', 'resourceRef', 'mountPath',
|
|
62
77
|
'accessMode', 'capabilities']);
|
|
63
78
|
requireValue(value.kind === 'filesystem' && value.status === 'ready'
|
|
64
|
-
&& value.accessMode === 'ReadWriteOnce'
|
|
65
|
-
&& typeof value.requestDigest === 'string' && /^[a-f0-9]{64}$/.test(value.requestDigest));
|
|
79
|
+
&& value.accessMode === 'ReadWriteOnce');
|
|
66
80
|
const policy = record(value.policy, ['classId', 'revision']);
|
|
67
81
|
const capabilities = record(value.capabilities, ['durability', 'topology']);
|
|
68
82
|
requireValue(capabilities.durability === 'persistent' && capabilities.topology === 'singleNode');
|
|
69
83
|
const bindingGeneration = generation(value.generation);
|
|
70
84
|
requireValue(generation(value.observedGeneration) === bindingGeneration);
|
|
71
85
|
return { id: id(value.id), serviceId: assignmentId(value.serviceId), requestId: id(value.requestId),
|
|
72
|
-
requestDigest: value.requestDigest, kind: 'filesystem', generation: bindingGeneration,
|
|
86
|
+
requestDigest: requestDigest(value.requestDigest), kind: 'filesystem', generation: bindingGeneration,
|
|
73
87
|
observedGeneration: bindingGeneration, status: 'ready',
|
|
74
88
|
policy: { classId: id(policy.classId), revision: id(policy.revision) },
|
|
75
89
|
resourceRef: id(value.resourceRef), mountPath: mountPath(value.mountPath),
|
|
76
90
|
accessMode: 'ReadWriteOnce', capabilities: { durability: 'persistent', topology: 'singleNode' } };
|
|
77
91
|
};
|
|
92
|
+
/** Detached exact-schema snapshot. This shape deliberately cannot state provider readiness. */
|
|
93
|
+
export const snapshotRuntimeStorageClaimIntent = (valueArg) => {
|
|
94
|
+
const value = record(valueArg, ['id', 'generation', 'previous', 'controller', 'organizationId',
|
|
95
|
+
'clusterId', 'nodeId', 'runtimeNamespace', 'serviceId', 'requestedBinding', 'reclaimPolicy', 'digest']);
|
|
96
|
+
const claimId = assignmentId(value.id), claimGeneration = generation(value.generation);
|
|
97
|
+
const previous = value.previous === null ? null : reference(value.previous);
|
|
98
|
+
requireValue(claimGeneration === 1 ? previous === null
|
|
99
|
+
: previous?.id === claimId && previous.generation === claimGeneration - 1);
|
|
100
|
+
requireValue(isClusterNodeId(value.nodeId) && value.reclaimPolicy === 'retain');
|
|
101
|
+
const claimBinding = requestedBinding(value.requestedBinding), serviceId = assignmentId(value.serviceId);
|
|
102
|
+
requireValue(claimBinding.serviceId === serviceId);
|
|
103
|
+
return { id: claimId, generation: claimGeneration, previous, controller: controller(value.controller),
|
|
104
|
+
organizationId: assignmentId(value.organizationId), clusterId: id(value.clusterId),
|
|
105
|
+
nodeId: value.nodeId, runtimeNamespace: assignmentId(value.runtimeNamespace), serviceId,
|
|
106
|
+
requestedBinding: claimBinding, reclaimPolicy: 'retain', digest: digest(value.digest) };
|
|
107
|
+
};
|
|
108
|
+
export const computeRuntimeStorageClaimIntentDigest = async (valueArg) => {
|
|
109
|
+
const { digest: _digest, ...payload } = snapshotRuntimeStorageClaimIntent(valueArg);
|
|
110
|
+
return `sha256:${await createCanonicalJsonSha256Hex(canonicalizeStrictJson({
|
|
111
|
+
domain: runtimeStorageClaimContract.intentDigestDomain, payload,
|
|
112
|
+
}, fail), fail)}`;
|
|
113
|
+
};
|
|
114
|
+
export const validateRuntimeStorageClaimIntent = async (valueArg) => {
|
|
115
|
+
try {
|
|
116
|
+
const intent = snapshotRuntimeStorageClaimIntent(valueArg);
|
|
117
|
+
if (intent.requestedBinding.requestDigest
|
|
118
|
+
!== await createStorageRequestSha256(intent.requestedBinding.request)) {
|
|
119
|
+
return ['runtime storage claim intent request digest does not match'];
|
|
120
|
+
}
|
|
121
|
+
return intent.digest === await computeRuntimeStorageClaimIntentDigest(intent)
|
|
122
|
+
? [] : ['runtime storage claim intent digest does not match'];
|
|
123
|
+
}
|
|
124
|
+
catch {
|
|
125
|
+
return ['runtime storage claim intent must use its exact canonical schema'];
|
|
126
|
+
}
|
|
127
|
+
};
|
|
78
128
|
/** Detached exact-schema snapshot. Digest and authoritative provider readiness are separate checks. */
|
|
79
129
|
export const snapshotRuntimeStorageClaim = (valueArg) => {
|
|
80
130
|
const value = record(valueArg, ['id', 'generation', 'previous', 'controller', 'organizationId',
|
|
@@ -107,6 +157,40 @@ export const validateRuntimeStorageClaim = async (valueArg) => {
|
|
|
107
157
|
return ['runtime storage claim must use its exact canonical schema'];
|
|
108
158
|
}
|
|
109
159
|
};
|
|
160
|
+
/**
|
|
161
|
+
* Joins Cloudly-owned identity and request facts to a provider-produced ready binding.
|
|
162
|
+
* This content check does not authenticate either producer or grant attachment authority.
|
|
163
|
+
*/
|
|
164
|
+
export const bindRuntimeStorageClaimToIntent = async (claimArg, intentArg) => {
|
|
165
|
+
const claim = snapshotRuntimeStorageClaim(claimArg);
|
|
166
|
+
const intent = snapshotRuntimeStorageClaimIntent(intentArg);
|
|
167
|
+
if ((await validateRuntimeStorageClaim(claim)).length
|
|
168
|
+
|| (await validateRuntimeStorageClaimIntent(intent)).length)
|
|
169
|
+
fail();
|
|
170
|
+
const claimPrevious = claim.previous, intentPrevious = intent.previous;
|
|
171
|
+
requireValue(claim.id === intent.id
|
|
172
|
+
&& claim.generation === intent.generation
|
|
173
|
+
&& (claimPrevious === null
|
|
174
|
+
? intentPrevious === null
|
|
175
|
+
: intentPrevious !== null
|
|
176
|
+
&& claimPrevious.id === intentPrevious.id
|
|
177
|
+
&& claimPrevious.generation === intentPrevious.generation
|
|
178
|
+
&& claimPrevious.digest === intentPrevious.digest)
|
|
179
|
+
&& claim.controller.id === intent.controller.id
|
|
180
|
+
&& claim.controller.epoch === intent.controller.epoch
|
|
181
|
+
&& claim.organizationId === intent.organizationId
|
|
182
|
+
&& claim.clusterId === intent.clusterId
|
|
183
|
+
&& claim.nodeId === intent.nodeId
|
|
184
|
+
&& claim.runtimeNamespace === intent.runtimeNamespace
|
|
185
|
+
&& claim.serviceId === intent.serviceId
|
|
186
|
+
&& claim.binding.serviceId === intent.requestedBinding.serviceId
|
|
187
|
+
&& claim.binding.requestId === intent.requestedBinding.request.id
|
|
188
|
+
&& claim.binding.requestDigest === intent.requestedBinding.requestDigest
|
|
189
|
+
&& claim.binding.mountPath === intent.requestedBinding.request.mountPath
|
|
190
|
+
&& claim.binding.accessMode === intent.requestedBinding.request.accessMode
|
|
191
|
+
&& claim.reclaimPolicy === intent.reclaimPolicy);
|
|
192
|
+
return { claim, intent };
|
|
193
|
+
};
|
|
110
194
|
/** Content binding only; controller authentication, provider checks and attachment fencing remain owner-owned. */
|
|
111
195
|
export const bindRuntimeStorageClaimToAssignment = async (claimArg, assignmentArg, expectedClusterIdArg) => {
|
|
112
196
|
const claim = snapshotRuntimeStorageClaim(claimArg);
|
|
@@ -126,4 +210,4 @@ export const bindRuntimeStorageClaimToAssignment = async (claimArg, assignmentAr
|
|
|
126
210
|
&& assignment.serviceId === claim.serviceId);
|
|
127
211
|
return { claim, assignment };
|
|
128
212
|
};
|
|
129
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZXN0b3JhZ2VjbGFpbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL2RhdGEvcnVudGltZXN0b3JhZ2VjbGFpbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUseUJBQXlCLEVBQUUseUJBQXlCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM5RixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFNUQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLDRCQUE0QixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDbkcsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBNEIvRCxNQUFNLENBQUMsTUFBTSwyQkFBMkIsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ3ZELFlBQVksRUFBRSxrQ0FBa0M7SUFDaEQsVUFBVSxFQUFFLGVBQWU7SUFDM0IsYUFBYSxFQUFFLFFBQVE7Q0FDZixDQUFDLENBQUM7QUFFWixNQUFNLElBQUksR0FBRyxHQUFVLEVBQUUsR0FBRyxNQUFNLElBQUksS0FBSyxDQUFDLDBDQUEwQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0YsU0FBUyxZQUFZLENBQUMsWUFBcUIsSUFBMEIsSUFBSSxDQUFDLFlBQVk7SUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDakcsTUFBTSxNQUFNLEdBQUcsQ0FBQyxRQUFpQixFQUFFLE9BQTBCLEVBQTJCLEVBQUU7SUFDeEYsWUFBWSxDQUFDLFFBQVEsS0FBSyxJQUFJLElBQUksT0FBTyxRQUFRLEtBQUssUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQzVGLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbEQsWUFBWSxDQUFDLFNBQVMsS0FBSyxNQUFNLENBQUMsU0FBUyxJQUFJLFNBQVMs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
|
|
213
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZXN0b3JhZ2VjbGFpbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL2RhdGEvcnVudGltZXN0b3JhZ2VjbGFpbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUseUJBQXlCLEVBQUUseUJBQXlCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM5RixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFHNUQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLHVCQUF1QixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDN0YsT0FBTyxFQUFFLHNCQUFzQixFQUFFLDRCQUE0QixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDbkcsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBeUQvRCxNQUFNLENBQUMsTUFBTSwyQkFBMkIsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ3ZELGtCQUFrQixFQUFFLHlDQUF5QztJQUM3RCxZQUFZLEVBQUUsa0NBQWtDO0lBQ2hELFVBQVUsRUFBRSxlQUFlO0lBQzNCLGFBQWEsRUFBRSxRQUFRO0NBQ2YsQ0FBQyxDQUFDO0FBRVosTUFBTSxJQUFJLEdBQUcsR0FBVSxFQUFFLEdBQUcsTUFBTSxJQUFJLEtBQUssQ0FBQywwQ0FBMEMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNGLFNBQVMsWUFBWSxDQUFDLFlBQXFCLElBQTBCLElBQUksQ0FBQyxZQUFZO0lBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2pHLE1BQU0sTUFBTSxHQUFHLENBQUMsUUFBaUIsRUFBRSxPQUEwQixFQUEyQixFQUFFO0lBQ3hGLFlBQVksQ0FBQyxRQUFRLEtBQUssSUFBSSxJQUFJLE9BQU8sUUFBUSxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUM1RixNQUFNLFNBQVMsR0FBRyxNQUFN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
|
|
@@ -2,7 +2,8 @@ import * as plugins from '../plugins.js';
|
|
|
2
2
|
import type { IIdentityCredential } from '../data/user.js';
|
|
3
3
|
import type { IClusterRuntime } from '../data/clusterruntime.js';
|
|
4
4
|
import type { IServiceRuntimeSpec } from '../data/serviceruntime.js';
|
|
5
|
-
import type { IFleetCutoverAcceptedEvidenceReference, IFleetCutoverCorestoreAdoptionReceipt, IFleetCutoverIngressDesignation, IFleetCutoverIngressPreparationRequest, IFleetCutoverIngressAuthority, IFleetCutoverScope, IFleetCutoverScopeClassificationRequest, IFleetCutoverVolumeHandoffIntent, TFleetCutoverPhaseAdvance, TFleetCutoverRuntimeSpecRelease, TFleetCutoverVolumeFence } from '../data/fleetcutover.js';
|
|
5
|
+
import type { IFleetCutoverAcceptedEvidenceReference, IFleetCutoverCorestoreAdoptionReceipt, IFleetCutoverPreparedVolumeHandoffAggregate, IFleetCutoverPreparedVolumeHandoffIntent, IFleetCutoverPreparedVolumeHandoffMutation, IFleetCutoverStorageAdoptionBundle, IFleetCutoverIngressDesignation, IFleetCutoverIngressPreparationRequest, IFleetCutoverIngressAuthority, IFleetCutoverScope, IFleetCutoverScopeClassificationRequest, IFleetCutoverVolumeHandoffIntent, TFleetCutoverPhaseAdvance, TFleetCutoverRuntimeSpecRelease, TFleetCutoverVolumeFence } from '../data/fleetcutover.js';
|
|
6
|
+
import type { IRuntimeStorageClaim } from '../data/runtimestorageclaim.js';
|
|
6
7
|
export interface IReq_Any_Cloudly_GetFleetCutoverScope extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_Any_Cloudly_GetFleetCutoverScope> {
|
|
7
8
|
method: 'getFleetCutoverScope';
|
|
8
9
|
request: {
|
|
@@ -28,6 +29,23 @@ export interface IReq_Admin_Cloudly_ClassifyFleetCutoverScope extends plugins.ty
|
|
|
28
29
|
scope: IFleetCutoverScope;
|
|
29
30
|
};
|
|
30
31
|
}
|
|
32
|
+
/**
|
|
33
|
+
* Admin CAS input selects authenticated legacy mounts and desired filesystem requests. Cloudly
|
|
34
|
+
* derives every owner identity and evidence reference, then rewrites one complete aggregate
|
|
35
|
+
* revision without truncating untouched entries.
|
|
36
|
+
*/
|
|
37
|
+
export interface IReq_Admin_Cloudly_PrepareFleetCutoverVolumeHandoffs extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_Admin_Cloudly_PrepareFleetCutoverVolumeHandoffs> {
|
|
38
|
+
method: 'prepareFleetCutoverVolumeHandoffs';
|
|
39
|
+
request: {
|
|
40
|
+
identity: IIdentityCredential;
|
|
41
|
+
mutation: IFleetCutoverPreparedVolumeHandoffMutation;
|
|
42
|
+
};
|
|
43
|
+
response: {
|
|
44
|
+
aggregate: IFleetCutoverPreparedVolumeHandoffAggregate;
|
|
45
|
+
handoffs: IFleetCutoverPreparedVolumeHandoffIntent[];
|
|
46
|
+
replayed: boolean;
|
|
47
|
+
};
|
|
48
|
+
}
|
|
31
49
|
/**
|
|
32
50
|
* Forward-only legal phase CAS. All receipt references are dereferenced by Cloudly in the same
|
|
33
51
|
* transaction; caller-supplied records or booleans never satisfy a cutover condition.
|
|
@@ -85,7 +103,10 @@ export interface IReq_Any_Cloudly_GetFleetCutoverIngressAuthority extends plugin
|
|
|
85
103
|
authority: IFleetCutoverIngressAuthority | null;
|
|
86
104
|
};
|
|
87
105
|
}
|
|
88
|
-
/**
|
|
106
|
+
/**
|
|
107
|
+
* @deprecated Published 32.x declaration retained for wire compatibility. Production owners do
|
|
108
|
+
* not register it; remove at the next protocol major.
|
|
109
|
+
*/
|
|
89
110
|
export interface IReq_PalletLocal_Pallet_HoldFleetCutoverVolumeFence extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_PalletLocal_Pallet_HoldFleetCutoverVolumeFence> {
|
|
90
111
|
method: 'holdFleetCutoverVolumeFence';
|
|
91
112
|
request: {
|
|
@@ -98,6 +119,19 @@ export interface IReq_PalletLocal_Pallet_HoldFleetCutoverVolumeFence extends plu
|
|
|
98
119
|
}>;
|
|
99
120
|
};
|
|
100
121
|
}
|
|
122
|
+
/** Spark calls only this fixed root-private Pallet socket operation for a prepared handoff. */
|
|
123
|
+
export interface IReq_SparkLocal_Pallet_HoldPreparedFleetCutoverVolumeFence extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_SparkLocal_Pallet_HoldPreparedFleetCutoverVolumeFence> {
|
|
124
|
+
method: 'holdPreparedFleetCutoverVolumeFence';
|
|
125
|
+
request: {
|
|
126
|
+
fenceId: string;
|
|
127
|
+
handoffIntent: IFleetCutoverPreparedVolumeHandoffIntent;
|
|
128
|
+
};
|
|
129
|
+
response: {
|
|
130
|
+
fence: Extract<TFleetCutoverVolumeFence, {
|
|
131
|
+
state: 'held';
|
|
132
|
+
}>;
|
|
133
|
+
};
|
|
134
|
+
}
|
|
101
135
|
export interface IReq_PalletLocal_Pallet_GetFleetCutoverVolumeFence extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_PalletLocal_Pallet_GetFleetCutoverVolumeFence> {
|
|
102
136
|
method: 'getFleetCutoverVolumeFence';
|
|
103
137
|
request: {
|
|
@@ -108,8 +142,8 @@ export interface IReq_PalletLocal_Pallet_GetFleetCutoverVolumeFence extends plug
|
|
|
108
142
|
};
|
|
109
143
|
}
|
|
110
144
|
/**
|
|
111
|
-
*
|
|
112
|
-
*
|
|
145
|
+
* @deprecated Ownership-inverted published 32.x declaration. Production owners do not register
|
|
146
|
+
* or adapt it; remove at the next protocol major.
|
|
113
147
|
*/
|
|
114
148
|
export interface IReq_PalletLocal_Pallet_ConsumeFleetCutoverVolumeFence extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_PalletLocal_Pallet_ConsumeFleetCutoverVolumeFence> {
|
|
115
149
|
method: 'consumeFleetCutoverVolumeFence';
|
|
@@ -124,8 +158,21 @@ export interface IReq_PalletLocal_Pallet_ConsumeFleetCutoverVolumeFence extends
|
|
|
124
158
|
};
|
|
125
159
|
}
|
|
126
160
|
/**
|
|
127
|
-
*
|
|
128
|
-
*
|
|
161
|
+
* Root-private trigger names only the durable hold. Pallet owns the per-volume lane, obtains and
|
|
162
|
+
* later revalidates a current controller grant, invokes Corestore, then consumes atomically.
|
|
163
|
+
*/
|
|
164
|
+
export interface IReq_PalletLocal_Pallet_AdoptFleetCutoverVolumeFence extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_PalletLocal_Pallet_AdoptFleetCutoverVolumeFence> {
|
|
165
|
+
method: 'adoptFleetCutoverVolumeFence';
|
|
166
|
+
request: {
|
|
167
|
+
fence: IFleetCutoverAcceptedEvidenceReference;
|
|
168
|
+
};
|
|
169
|
+
response: {
|
|
170
|
+
bundle: IFleetCutoverStorageAdoptionBundle;
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* @deprecated Published 32.x declaration retained but unsupported and unregistered. Its handoff
|
|
175
|
+
* cannot carry the complete desired claim intent; remove at the next protocol major.
|
|
129
176
|
*/
|
|
130
177
|
export interface IReq_Pallet_Corestore_AdoptFleetCutoverVolume extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_Pallet_Corestore_AdoptFleetCutoverVolume> {
|
|
131
178
|
method: 'adoptFleetCutoverVolume';
|
|
@@ -139,3 +186,20 @@ export interface IReq_Pallet_Corestore_AdoptFleetCutoverVolume extends plugins.t
|
|
|
139
186
|
adoption: IFleetCutoverCorestoreAdoptionReceipt;
|
|
140
187
|
};
|
|
141
188
|
}
|
|
189
|
+
/**
|
|
190
|
+
* Private isolated one-shot invocation. Corestore performs physical-lineage proof and initial
|
|
191
|
+
* ready-claim CAS while its native attachment fence is held, with no callback into Pallet.
|
|
192
|
+
*/
|
|
193
|
+
export interface IReq_Pallet_Corestore_AdoptPreparedFleetCutoverVolume extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_Pallet_Corestore_AdoptPreparedFleetCutoverVolume> {
|
|
194
|
+
method: 'adoptPreparedFleetCutoverVolume';
|
|
195
|
+
request: {
|
|
196
|
+
handoffIntent: IFleetCutoverPreparedVolumeHandoffIntent;
|
|
197
|
+
palletFence: Extract<TFleetCutoverVolumeFence, {
|
|
198
|
+
state: 'held';
|
|
199
|
+
}>;
|
|
200
|
+
};
|
|
201
|
+
response: {
|
|
202
|
+
adoption: IFleetCutoverCorestoreAdoptionReceipt;
|
|
203
|
+
claim: IRuntimeStorageClaim;
|
|
204
|
+
};
|
|
205
|
+
}
|
|
@@ -5,6 +5,8 @@ import type * as network from '../data/networkdelivery.js';
|
|
|
5
5
|
import type * as protection from '../data/networkprotection.js';
|
|
6
6
|
import type * as credential from '../data/networkcredential.js';
|
|
7
7
|
import type * as assignmentSecret from '../runtime.assignmentsecret.js';
|
|
8
|
+
import type * as fleet from '../data/fleetcutover.js';
|
|
9
|
+
import type { IRuntimeStorageClaim } from '../data/runtimestorageclaim.js';
|
|
8
10
|
/** Current-peer, exact-projection authorization; response contains secret keys. */
|
|
9
11
|
export interface IReq_Pallet_Controller_GetRuntimeManagedVpnCredential extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_Pallet_Controller_GetRuntimeManagedVpnCredential> {
|
|
10
12
|
method: 'getRuntimeManagedVpnCredential';
|
|
@@ -17,6 +19,51 @@ export interface IReq_Pallet_Controller_ReportRuntimeNetworkProtection extends p
|
|
|
17
19
|
request: protection.IReportRuntimeNetworkProtectionRequest;
|
|
18
20
|
response: protection.IReportRuntimeNetworkProtectionResponse;
|
|
19
21
|
}
|
|
22
|
+
/**
|
|
23
|
+
* Current authenticated Pallet session only. Cloudly reads the current pallet runtime and exact
|
|
24
|
+
* owner records, then grants one held prepared handoff; serialized session content is no proof.
|
|
25
|
+
*/
|
|
26
|
+
export interface IReq_Pallet_Controller_AuthorizeFleetCutoverStorageAdoption extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_Pallet_Controller_AuthorizeFleetCutoverStorageAdoption> {
|
|
27
|
+
method: 'authorizeFleetCutoverStorageAdoption';
|
|
28
|
+
request: {
|
|
29
|
+
session: data.IRuntimeSessionBinding;
|
|
30
|
+
handoffIntent: fleet.IFleetCutoverAcceptedEvidenceReference;
|
|
31
|
+
fence: fleet.IFleetCutoverAcceptedEvidenceReference;
|
|
32
|
+
};
|
|
33
|
+
response: {
|
|
34
|
+
grant: fleet.IFleetCutoverStorageAdoptionGrant;
|
|
35
|
+
replayed: boolean;
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Pallet revalidates current session, pallet phase and grant after the provider call, then reports
|
|
40
|
+
* the exact consumed bundle. A stale grant leaves the durable local hold unchanged.
|
|
41
|
+
*/
|
|
42
|
+
export interface IReq_Pallet_Controller_ReportFleetCutoverStorageAdoption extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_Pallet_Controller_ReportFleetCutoverStorageAdoption> {
|
|
43
|
+
method: 'reportFleetCutoverStorageAdoption';
|
|
44
|
+
request: {
|
|
45
|
+
session: data.IRuntimeSessionBinding;
|
|
46
|
+
bundle: fleet.IFleetCutoverStorageAdoptionBundle;
|
|
47
|
+
};
|
|
48
|
+
response: {
|
|
49
|
+
status: 'accepted' | 'replay';
|
|
50
|
+
grant: fleet.IFleetCutoverAcceptedEvidenceReference;
|
|
51
|
+
fence: fleet.IFleetCutoverAcceptedEvidenceReference;
|
|
52
|
+
adoption: fleet.IFleetCutoverAcceptedEvidenceReference;
|
|
53
|
+
claim: fleet.IFleetCutoverAcceptedEvidenceReference;
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
/** Current-session read of one accepted ready claim by its exact immutable reference. */
|
|
57
|
+
export interface IReq_Pallet_Controller_GetRuntimeStorageClaim extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_Pallet_Controller_GetRuntimeStorageClaim> {
|
|
58
|
+
method: 'getRuntimeStorageClaim';
|
|
59
|
+
request: {
|
|
60
|
+
session: data.IRuntimeSessionBinding;
|
|
61
|
+
claim: fleet.IFleetCutoverAcceptedEvidenceReference;
|
|
62
|
+
};
|
|
63
|
+
response: {
|
|
64
|
+
claim: IRuntimeStorageClaim;
|
|
65
|
+
};
|
|
66
|
+
}
|
|
20
67
|
/** Dedicated signing trust installed only through the current authenticated physical peer. */
|
|
21
68
|
export interface IReq_Controller_Pallet_ApplyRuntimeNetworkSigningAuthority extends plugins.typedrequestInterfaces.implementsTR<plugins.typedrequestInterfaces.ITypedRequest, IReq_Controller_Pallet_ApplyRuntimeNetworkSigningAuthority> {
|
|
22
69
|
method: 'applyRuntimeNetworkSigningAuthority';
|