@serve.zone/interfaces 24.0.0 → 24.1.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 +8 -0
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/data/clusternode.d.ts +23 -0
- package/dist_ts/data/clusternode.js +66 -1
- package/package.json +1 -1
- package/readme.md +8 -0
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/data/clusternode.ts +97 -0
package/changelog.md
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 2026-08-01 - 24.1.0
|
|
4
|
+
|
|
5
|
+
### Features
|
|
6
|
+
|
|
7
|
+
- Add Spark Swarm observation v2 so workers can report local membership without
|
|
8
|
+
inventing a manager-only Docker cluster ID while manager snapshots are
|
|
9
|
+
digest-verified whenever supplied.
|
|
10
|
+
|
|
3
11
|
## 2026-07-31 - 24.0.0
|
|
4
12
|
|
|
5
13
|
### Breaking Changes
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export const commitinfo = {
|
|
5
5
|
name: '@serve.zone/interfaces',
|
|
6
|
-
version: '24.
|
|
6
|
+
version: '24.1.0',
|
|
7
7
|
description: 'Shared TypeScript interfaces and TypedRequest contracts for the serve.zone ecosystem.'
|
|
8
8
|
};
|
|
9
9
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSx3QkFBd0I7SUFDOUIsT0FBTyxFQUFFLFFBQVE7SUFDakIsV0FBVyxFQUFFLHVGQUF1RjtDQUNyRyxDQUFBIn0=
|
|
@@ -118,6 +118,28 @@ export type TSparkSwarmObservationV1 = (ISparkSwarmObservationBaseV1 & {
|
|
|
118
118
|
controlAvailable: boolean;
|
|
119
119
|
managerSnapshot?: ISwarmManagerSnapshotV1;
|
|
120
120
|
});
|
|
121
|
+
interface ISparkSwarmObservationBaseV2 {
|
|
122
|
+
schemaVersion: 2;
|
|
123
|
+
reporterSessionId: string;
|
|
124
|
+
observationSequence: number;
|
|
125
|
+
observedAt: number;
|
|
126
|
+
}
|
|
127
|
+
export type TSparkSwarmObservationV2 = (ISparkSwarmObservationBaseV2 & {
|
|
128
|
+
state: 'unknown';
|
|
129
|
+
reason: 'docker-unavailable' | 'query-failed' | 'not-initialized';
|
|
130
|
+
}) | (ISparkSwarmObservationBaseV2 & {
|
|
131
|
+
state: 'not-member';
|
|
132
|
+
}) | (ISparkSwarmObservationBaseV2 & {
|
|
133
|
+
state: 'member';
|
|
134
|
+
localSwarmNodeId: string;
|
|
135
|
+
controlAvailable: false;
|
|
136
|
+
}) | (ISparkSwarmObservationBaseV2 & {
|
|
137
|
+
state: 'member';
|
|
138
|
+
swarmClusterId: string;
|
|
139
|
+
localSwarmNodeId: string;
|
|
140
|
+
controlAvailable: true;
|
|
141
|
+
managerSnapshot?: ISwarmManagerSnapshotV1;
|
|
142
|
+
});
|
|
121
143
|
/** Cloudly derives node and cluster scope from this authenticated Spark request. */
|
|
122
144
|
export interface ISparkSwarmObservationRequest {
|
|
123
145
|
nodeId: string;
|
|
@@ -160,6 +182,7 @@ export type TClusterRuntimeTargetSetV1 = IClusterRuntimeTargetSetReadyV1 | IClus
|
|
|
160
182
|
export declare const createSwarmManagerSnapshotDigestInput: (swarmClusterIdArg: string, snapshotArg: ISwarmManagerSnapshotV1) => string;
|
|
161
183
|
export declare const computeSwarmManagerSnapshotDigest: (swarmClusterIdArg: string, snapshotArg: ISwarmManagerSnapshotV1) => Promise<TSha256Digest>;
|
|
162
184
|
export declare const validateSparkSwarmObservation: (observationArg: unknown) => Promise<string[]>;
|
|
185
|
+
export declare const validateSparkSwarmObservationV2: (observationArg: unknown) => Promise<string[]>;
|
|
163
186
|
export declare const createClusterRuntimeTargetSetDigestInput: (targetSetArg: IClusterRuntimeTargetSetReadyV1) => string;
|
|
164
187
|
export declare const computeClusterRuntimeTargetSetDigest: (targetSetArg: IClusterRuntimeTargetSetReadyV1) => Promise<TSha256Digest>;
|
|
165
188
|
export declare const validateClusterRuntimeTargetSet: (targetSetArg: unknown) => Promise<string[]>;
|
|
@@ -219,6 +219,71 @@ export const validateSparkSwarmObservation = async (observationArg) => {
|
|
|
219
219
|
return ['Spark Swarm observation must be safely inspectable'];
|
|
220
220
|
}
|
|
221
221
|
};
|
|
222
|
+
export const validateSparkSwarmObservationV2 = async (observationArg) => {
|
|
223
|
+
try {
|
|
224
|
+
if (!isRuntimeRecord(observationArg))
|
|
225
|
+
return ['Spark Swarm observation v2 must be an object'];
|
|
226
|
+
const observation = observationArg;
|
|
227
|
+
const commonKeys = [
|
|
228
|
+
'schemaVersion',
|
|
229
|
+
'reporterSessionId',
|
|
230
|
+
'observationSequence',
|
|
231
|
+
'observedAt',
|
|
232
|
+
'state',
|
|
233
|
+
];
|
|
234
|
+
const expectedKeys = observation.state === 'unknown'
|
|
235
|
+
? [...commonKeys, 'reason']
|
|
236
|
+
: observation.state === 'not-member'
|
|
237
|
+
? commonKeys
|
|
238
|
+
: observation.state === 'member' && observation.controlAvailable === false
|
|
239
|
+
? [...commonKeys, 'localSwarmNodeId', 'controlAvailable']
|
|
240
|
+
: observation.state === 'member' && observation.controlAvailable === true
|
|
241
|
+
? [
|
|
242
|
+
...commonKeys,
|
|
243
|
+
'swarmClusterId',
|
|
244
|
+
'localSwarmNodeId',
|
|
245
|
+
'controlAvailable',
|
|
246
|
+
...(observation.managerSnapshot === undefined ? [] : ['managerSnapshot']),
|
|
247
|
+
]
|
|
248
|
+
: [];
|
|
249
|
+
if (expectedKeys.length === 0 || !hasExactRuntimeKeys(observation, expectedKeys)) {
|
|
250
|
+
return ['Spark Swarm observation v2 must use its exact state schema'];
|
|
251
|
+
}
|
|
252
|
+
const errors = [];
|
|
253
|
+
if (observation.schemaVersion !== 2) {
|
|
254
|
+
errors.push('Spark Swarm observation v2 schemaVersion must be 2');
|
|
255
|
+
}
|
|
256
|
+
if (!isRuntimeIdentifier(observation.reporterSessionId)
|
|
257
|
+
|| !isPositiveSafeInteger(observation.observationSequence)
|
|
258
|
+
|| !isPositiveSafeInteger(observation.observedAt)) {
|
|
259
|
+
errors.push('Spark Swarm observation v2 identity, sequence, and timestamp must be canonical');
|
|
260
|
+
}
|
|
261
|
+
if (observation.state === 'unknown'
|
|
262
|
+
&& !['docker-unavailable', 'query-failed', 'not-initialized']
|
|
263
|
+
.includes(observation.reason)) {
|
|
264
|
+
errors.push('Spark Swarm observation v2 unknown reason must be canonical');
|
|
265
|
+
}
|
|
266
|
+
if (observation.state === 'member') {
|
|
267
|
+
if (!isRuntimeIdentifier(observation.localSwarmNodeId)
|
|
268
|
+
|| typeof observation.controlAvailable !== 'boolean') {
|
|
269
|
+
errors.push('Spark Swarm member observation v2 must have canonical local authority');
|
|
270
|
+
}
|
|
271
|
+
if (observation.controlAvailable === true) {
|
|
272
|
+
if (!isRuntimeIdentifier(observation.swarmClusterId)) {
|
|
273
|
+
errors.push('Spark Swarm manager observation v2 must have canonical cluster authority');
|
|
274
|
+
}
|
|
275
|
+
else if (observation.managerSnapshot !== undefined
|
|
276
|
+
&& isRuntimeIdentifier(observation.localSwarmNodeId)) {
|
|
277
|
+
errors.push(...await validateSwarmManagerSnapshot(observation.swarmClusterId, observation.localSwarmNodeId, observation.managerSnapshot));
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
return errors;
|
|
282
|
+
}
|
|
283
|
+
catch {
|
|
284
|
+
return ['Spark Swarm observation v2 must be safely inspectable'];
|
|
285
|
+
}
|
|
286
|
+
};
|
|
222
287
|
const canonicalRuntimeTarget = (targetArg) => ({
|
|
223
288
|
cloudlyNodeId: targetArg.cloudlyNodeId,
|
|
224
289
|
swarmClusterId: targetArg.swarmClusterId,
|
|
@@ -353,4 +418,4 @@ export const isClusterRuntimeTargetSetFresh = (targetSetArg, nowArg) => (targetS
|
|
|
353
418
|
&& Number.isSafeInteger(nowArg)
|
|
354
419
|
&& nowArg >= targetSetArg.acceptedAt
|
|
355
420
|
&& nowArg < targetSetArg.freshUntil);
|
|
356
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2x1c3Rlcm5vZGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9kYXRhL2NsdXN0ZXJub2RlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sZUFBZSxDQUFDO0FBOEx6QyxNQUFNLHNCQUFzQixHQUFHLHFDQUFxQyxDQUFDO0FBQ3JFLE1BQU0sa0JBQWtCLEdBQUcsdUJBQXVCLENBQUM7QUFDbkQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsQ0FBOEI7SUFDNUQsYUFBYTtJQUNiLGFBQWE7Q0FDZCxDQUFDLENBQUM7QUFDSCxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQztBQUUvQixNQUFNLGVBQWUsR0FBRyxDQUFDLFFBQWlCLEVBQXVDLEVBQUUsQ0FBQyxDQUNsRixPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksT0FBTyxRQUFRLEtBQUssUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FDOUUsQ0FBQztBQUVGLE1BQU0sbUJBQW1CLEdBQUcsQ0FDMUIsUUFBaUMsRUFDakMsT0FBaUIsRUFDUixFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUVuRyxNQUFNLG1CQUFtQixHQUFHLENBQUMsUUFBaUIsRUFBc0IsRUFBRSxDQUFDLENBQ3JFLE9BQU8sUUFBUSxLQUFLLFFBQVEsSUFBSSxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQ3RFLENBQUM7QUFFRixNQUFNLHFCQUFxQixHQUFHLENBQUMsUUFBaUIsRUFBc0IsRUFBRSxDQUFDLENBQ3ZFLE1BQU0sQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLElBQUssUUFB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
|
|
421
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2x1c3Rlcm5vZGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9kYXRhL2NsdXN0ZXJub2RlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sZUFBZSxDQUFDO0FBME56QyxNQUFNLHNCQUFzQixHQUFHLHFDQUFxQyxDQUFDO0FBQ3JFLE1BQU0sa0JBQWtCLEdBQUcsdUJBQXVCLENBQUM7QUFDbkQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsQ0FBOEI7SUFDNUQsYUFBYTtJQUNiLGFBQWE7Q0FDZCxDQUFDLENBQUM7QUFDSCxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQztBQUUvQixNQUFNLGVBQWUsR0FBRyxDQUFDLFFBQWlCLEVBQXVDLEVBQUUsQ0FBQyxDQUNsRixPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksT0FBTyxRQUFRLEtBQUssUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FDOUUsQ0FBQztBQUVGLE1BQU0sbUJBQW1CLEdBQUcsQ0FDMUIsUUFBaUMsRUFDakMsT0FBaUIsRUFDUixFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUVuRyxNQUFNLG1CQUFtQixHQUFHLENBQUMsUUFBaUIsRUFBc0IsRUFBRSxDQUFDLENBQ3JFLE9BQU8sUUFBUSxLQUFLLFFBQVEsSUFBSSxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQ3RFLENBQUM7QUFFRixNQUFNLHFCQUFxQixHQUFHLENBQUMsUUFBaUIsRUFBc0IsRUFBRSxDQUFDLENBQ3ZFLE1BQU0sQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLElBQUssUUFB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
|
package/package.json
CHANGED
package/readme.md
CHANGED
|
@@ -99,6 +99,14 @@ Coreflow connection:
|
|
|
99
99
|
credential, reconciles manager consensus privately, and publishes one fresh
|
|
100
100
|
single-Swarm target authority or a targetless unavailable state. Structural
|
|
101
101
|
contract validation does not itself establish manager consensus.
|
|
102
|
+
- `TSparkSwarmObservationV2` lets workers report only their local Swarm node ID,
|
|
103
|
+
because Docker does not expose the Swarm cluster ID to workers. Cloudly may
|
|
104
|
+
associate that node with a cluster only through authenticated node scope and
|
|
105
|
+
accepted manager consensus. V2 is a producer contract only until a later
|
|
106
|
+
consumer release defines transport, replay handling, and activation.
|
|
107
|
+
`validateSparkSwarmObservationV2` validates the exact structure and any
|
|
108
|
+
attached manager snapshot; it does not establish consensus or runtime
|
|
109
|
+
authority.
|
|
102
110
|
- WorkloadInit approval binds a clean stable release identity, version-tagged
|
|
103
111
|
OCI index, exact amd64 and arm64 platform/executable digests, policy
|
|
104
112
|
generation, and a Cloudly summary of detached Cosign DSSE/SLSA verification.
|
package/ts/00_commitinfo_data.ts
CHANGED
package/ts/data/clusternode.ts
CHANGED
|
@@ -136,6 +136,34 @@ export type TSparkSwarmObservationV1 =
|
|
|
136
136
|
managerSnapshot?: ISwarmManagerSnapshotV1;
|
|
137
137
|
});
|
|
138
138
|
|
|
139
|
+
interface ISparkSwarmObservationBaseV2 {
|
|
140
|
+
schemaVersion: 2;
|
|
141
|
+
reporterSessionId: string;
|
|
142
|
+
observationSequence: number;
|
|
143
|
+
observedAt: number;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
export type TSparkSwarmObservationV2 =
|
|
147
|
+
| (ISparkSwarmObservationBaseV2 & {
|
|
148
|
+
state: 'unknown';
|
|
149
|
+
reason: 'docker-unavailable' | 'query-failed' | 'not-initialized';
|
|
150
|
+
})
|
|
151
|
+
| (ISparkSwarmObservationBaseV2 & {
|
|
152
|
+
state: 'not-member';
|
|
153
|
+
})
|
|
154
|
+
| (ISparkSwarmObservationBaseV2 & {
|
|
155
|
+
state: 'member';
|
|
156
|
+
localSwarmNodeId: string;
|
|
157
|
+
controlAvailable: false;
|
|
158
|
+
})
|
|
159
|
+
| (ISparkSwarmObservationBaseV2 & {
|
|
160
|
+
state: 'member';
|
|
161
|
+
swarmClusterId: string;
|
|
162
|
+
localSwarmNodeId: string;
|
|
163
|
+
controlAvailable: true;
|
|
164
|
+
managerSnapshot?: ISwarmManagerSnapshotV1;
|
|
165
|
+
});
|
|
166
|
+
|
|
139
167
|
/** Cloudly derives node and cluster scope from this authenticated Spark request. */
|
|
140
168
|
export interface ISparkSwarmObservationRequest {
|
|
141
169
|
nodeId: string;
|
|
@@ -450,6 +478,75 @@ export const validateSparkSwarmObservation = async (
|
|
|
450
478
|
}
|
|
451
479
|
};
|
|
452
480
|
|
|
481
|
+
export const validateSparkSwarmObservationV2 = async (
|
|
482
|
+
observationArg: unknown,
|
|
483
|
+
): Promise<string[]> => {
|
|
484
|
+
try {
|
|
485
|
+
if (!isRuntimeRecord(observationArg)) return ['Spark Swarm observation v2 must be an object'];
|
|
486
|
+
const observation = observationArg as Record<string, unknown>;
|
|
487
|
+
const commonKeys = [
|
|
488
|
+
'schemaVersion',
|
|
489
|
+
'reporterSessionId',
|
|
490
|
+
'observationSequence',
|
|
491
|
+
'observedAt',
|
|
492
|
+
'state',
|
|
493
|
+
];
|
|
494
|
+
const expectedKeys = observation.state === 'unknown'
|
|
495
|
+
? [...commonKeys, 'reason']
|
|
496
|
+
: observation.state === 'not-member'
|
|
497
|
+
? commonKeys
|
|
498
|
+
: observation.state === 'member' && observation.controlAvailable === false
|
|
499
|
+
? [...commonKeys, 'localSwarmNodeId', 'controlAvailable']
|
|
500
|
+
: observation.state === 'member' && observation.controlAvailable === true
|
|
501
|
+
? [
|
|
502
|
+
...commonKeys,
|
|
503
|
+
'swarmClusterId',
|
|
504
|
+
'localSwarmNodeId',
|
|
505
|
+
'controlAvailable',
|
|
506
|
+
...(observation.managerSnapshot === undefined ? [] : ['managerSnapshot']),
|
|
507
|
+
]
|
|
508
|
+
: [];
|
|
509
|
+
if (expectedKeys.length === 0 || !hasExactRuntimeKeys(observation, expectedKeys)) {
|
|
510
|
+
return ['Spark Swarm observation v2 must use its exact state schema'];
|
|
511
|
+
}
|
|
512
|
+
const errors: string[] = [];
|
|
513
|
+
if (observation.schemaVersion !== 2) {
|
|
514
|
+
errors.push('Spark Swarm observation v2 schemaVersion must be 2');
|
|
515
|
+
}
|
|
516
|
+
if (!isRuntimeIdentifier(observation.reporterSessionId)
|
|
517
|
+
|| !isPositiveSafeInteger(observation.observationSequence)
|
|
518
|
+
|| !isPositiveSafeInteger(observation.observedAt)) {
|
|
519
|
+
errors.push('Spark Swarm observation v2 identity, sequence, and timestamp must be canonical');
|
|
520
|
+
}
|
|
521
|
+
if (observation.state === 'unknown'
|
|
522
|
+
&& !['docker-unavailable', 'query-failed', 'not-initialized']
|
|
523
|
+
.includes(observation.reason as string)) {
|
|
524
|
+
errors.push('Spark Swarm observation v2 unknown reason must be canonical');
|
|
525
|
+
}
|
|
526
|
+
if (observation.state === 'member') {
|
|
527
|
+
if (!isRuntimeIdentifier(observation.localSwarmNodeId)
|
|
528
|
+
|| typeof observation.controlAvailable !== 'boolean') {
|
|
529
|
+
errors.push('Spark Swarm member observation v2 must have canonical local authority');
|
|
530
|
+
}
|
|
531
|
+
if (observation.controlAvailable === true) {
|
|
532
|
+
if (!isRuntimeIdentifier(observation.swarmClusterId)) {
|
|
533
|
+
errors.push('Spark Swarm manager observation v2 must have canonical cluster authority');
|
|
534
|
+
} else if (observation.managerSnapshot !== undefined
|
|
535
|
+
&& isRuntimeIdentifier(observation.localSwarmNodeId)) {
|
|
536
|
+
errors.push(...await validateSwarmManagerSnapshot(
|
|
537
|
+
observation.swarmClusterId,
|
|
538
|
+
observation.localSwarmNodeId,
|
|
539
|
+
observation.managerSnapshot,
|
|
540
|
+
));
|
|
541
|
+
}
|
|
542
|
+
}
|
|
543
|
+
}
|
|
544
|
+
return errors;
|
|
545
|
+
} catch {
|
|
546
|
+
return ['Spark Swarm observation v2 must be safely inspectable'];
|
|
547
|
+
}
|
|
548
|
+
};
|
|
549
|
+
|
|
453
550
|
const canonicalRuntimeTarget = (
|
|
454
551
|
targetArg: IClusterRuntimeTargetV1,
|
|
455
552
|
): IClusterRuntimeTargetV1 => ({
|