@serve.zone/interfaces 31.9.0 → 32.0.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/.smartconfig.json +1 -0
- package/changelog.md +467 -0
- package/dist_ts/00_commitinfo_data.js +3 -3
- package/dist_ts/appstore/types.d.ts +4 -6
- package/dist_ts/appstore/types.js +5 -5
- package/dist_ts/data/backup.d.ts +3 -26
- package/dist_ts/data/cluster.d.ts +36 -11
- package/dist_ts/data/cluster.js +33 -22
- package/dist_ts/data/clusteringress.d.ts +8 -0
- package/dist_ts/data/clusteringress.js +13 -8
- package/dist_ts/data/clusternode.d.ts +121 -74
- package/dist_ts/data/clusternode.js +109 -132
- package/dist_ts/data/coremail.d.ts +3 -7
- package/dist_ts/data/coremail.js +2 -2
- package/dist_ts/data/coremail.runtime.d.ts +0 -1
- package/dist_ts/data/coremail.runtime.js +5 -22
- package/dist_ts/data/deploymentadoption.d.ts +0 -2
- package/dist_ts/data/deploymentadoption.js +40 -6
- package/dist_ts/data/deploymentoperation.js +16 -3
- package/dist_ts/data/deploymentpreflight.d.ts +0 -2
- package/dist_ts/data/deploymentpreflight.js +1 -1
- package/dist_ts/data/immutableimage.d.ts +38 -21
- package/dist_ts/data/immutableimage.js +45 -5
- package/dist_ts/data/index.d.ts +1 -1
- package/dist_ts/data/isolatedrestore.d.ts +139 -21
- package/dist_ts/data/isolatedrestore.golden.d.ts +0 -1
- package/dist_ts/data/isolatedrestore.golden.js +6 -9
- package/dist_ts/data/isolatedrestore.js +176 -40
- package/dist_ts/data/mail.d.ts +1 -1
- package/dist_ts/data/networkaddressplan.d.ts +8 -8
- package/dist_ts/data/networkaddressplan.js +4 -4
- package/dist_ts/data/networkauthority.d.ts +20 -22
- package/dist_ts/data/networkauthority.js +26 -28
- package/dist_ts/data/networkcredential.d.ts +10 -10
- package/dist_ts/data/networkcredential.js +16 -16
- package/dist_ts/data/networkdelivery.d.ts +18 -18
- package/dist_ts/data/networkdelivery.js +16 -16
- package/dist_ts/data/networklease.d.ts +18 -7
- package/dist_ts/data/networklease.js +29 -7
- package/dist_ts/data/networknode.d.ts +2 -2
- package/dist_ts/data/networkprojection.d.ts +59 -60
- package/dist_ts/data/networkprojection.js +53 -57
- package/dist_ts/data/networkprotection.d.ts +27 -28
- package/dist_ts/data/networkprotection.js +36 -36
- package/dist_ts/data/networkrouter.d.ts +11 -11
- package/dist_ts/data/networkrouter.js +1 -1
- package/dist_ts/data/networksigning.d.ts +16 -18
- package/dist_ts/data/networksigning.js +20 -21
- package/dist_ts/data/nodecredential.d.ts +4 -6
- package/dist_ts/data/nodeenrollment.d.ts +35 -40
- package/dist_ts/data/nodeenrollment.js +57 -72
- package/dist_ts/data/privatenetwork.d.ts +21 -24
- package/dist_ts/data/privatenetwork.js +39 -54
- package/dist_ts/data/runtimeassignment.d.ts +50 -34
- package/dist_ts/data/runtimeassignment.js +79 -45
- package/dist_ts/data/runtimeconfig.d.ts +21 -22
- package/dist_ts/data/runtimeconfig.js +24 -24
- package/dist_ts/data/runtimesession.d.ts +100 -62
- package/dist_ts/data/runtimesession.js +98 -79
- package/dist_ts/data/runtimeterminalreceipt.d.ts +28 -29
- package/dist_ts/data/runtimeterminalreceipt.js +42 -42
- package/dist_ts/data/secret.d.ts +18 -25
- package/dist_ts/data/secret.js +12 -52
- package/dist_ts/data/servicecredential.d.ts +14 -16
- package/dist_ts/data/servicecredential.js +17 -28
- package/dist_ts/data/serviceruntime.d.ts +7 -7
- package/dist_ts/data/serviceruntime.js +4 -4
- package/dist_ts/data/sparknodereport.d.ts +27 -14
- package/dist_ts/data/sparknodereport.js +35 -28
- package/dist_ts/data/webpush.d.ts +0 -1
- package/dist_ts/index.d.ts +2 -1
- package/dist_ts/index.js +3 -2
- package/dist_ts/platform/objectstorageretention.d.ts +21 -24
- package/dist_ts/platform/objectstorageretention.js +6 -18
- package/dist_ts/platform/storage.d.ts +1 -3
- package/dist_ts/platform/storagemigration.d.ts +0 -7
- package/dist_ts/platform/storagemigration.golden.d.ts +0 -1
- package/dist_ts/platform/storagemigration.golden.js +8 -12
- package/dist_ts/platform/storagemigration.js +6 -51
- package/dist_ts/platform/types.d.ts +2 -2
- package/dist_ts/private/canonicaljson.d.ts +9 -1
- package/dist_ts/private/canonicaljson.js +14 -2
- package/dist_ts/private/dataproperties.d.ts +62 -0
- package/dist_ts/private/dataproperties.js +117 -0
- package/dist_ts/private/networkcontract.d.ts +10 -10
- package/dist_ts/private/networkcontract.js +1 -1
- package/dist_ts/private/releaseversion.d.ts +37 -0
- package/dist_ts/private/releaseversion.js +48 -0
- package/dist_ts/private/runtimepolicy.d.ts +2 -2
- package/dist_ts/private/runtimepolicy.js +1 -1
- package/dist_ts/private/tokenlist.d.ts +9 -0
- package/dist_ts/private/tokenlist.js +23 -0
- package/dist_ts/protocol.d.ts +137 -0
- package/dist_ts/protocol.js +255 -0
- package/dist_ts/requests/admin.d.ts +8 -8
- package/dist_ts/requests/backup.d.ts +102 -112
- package/dist_ts/requests/cluster.d.ts +10 -10
- package/dist_ts/requests/clusteringress.d.ts +9 -0
- package/dist_ts/requests/clusteringress.js +1 -1
- package/dist_ts/requests/config.d.ts +3 -3
- package/dist_ts/requests/corestore.d.ts +0 -3
- package/dist_ts/requests/corestore.js +5 -9
- package/dist_ts/requests/network.d.ts +30 -30
- package/dist_ts/requests/node.d.ts +15 -28
- package/dist_ts/requests/pallet.d.ts +13 -13
- package/dist_ts/requests/runtimesession.d.ts +53 -41
- package/dist_ts/requests/secret.d.ts +4 -5
- package/dist_ts/requests/secret.js +1 -5
- package/dist_ts/runtime.corestore.d.ts +56 -74
- package/dist_ts/runtime.corestore.databaseexportpackage.d.ts +30 -36
- package/dist_ts/runtime.corestore.databaseexportpackage.golden.d.ts +11 -12
- package/dist_ts/runtime.corestore.databaseexportpackage.golden.js +54 -71
- package/dist_ts/runtime.corestore.databaseexportpackage.js +9 -25
- package/dist_ts/runtime.corestore.js +35 -135
- package/dist_ts/runtime.corestore.relay.js +2 -7
- package/dist_ts/runtime.d.ts +38 -48
- package/dist_ts/runtime.js +20 -77
- package/dist_ts/runtime.networkprojection.d.ts +4 -4
- package/dist_ts/runtime.networkprojection.js +18 -18
- package/dist_ts/runtime.workloadinit.d.ts +23 -24
- package/dist_ts/runtime.workloadinit.js +6 -13
- package/package.json +2 -2
- package/readme.md +421 -270
- package/ts/00_commitinfo_data.ts +3 -3
- package/ts/appstore/types.ts +4 -6
- package/ts/data/backup.ts +3 -38
- package/ts/data/cluster.ts +51 -34
- package/ts/data/clusteringress.ts +12 -12
- package/ts/data/clusternode.ts +204 -232
- package/ts/data/coremail.runtime.ts +4 -21
- package/ts/data/coremail.ts +3 -7
- package/ts/data/deploymentadoption.ts +46 -4
- package/ts/data/deploymentoperation.ts +16 -1
- package/ts/data/deploymentpreflight.ts +0 -2
- package/ts/data/immutableimage.ts +71 -24
- package/ts/data/index.ts +1 -1
- package/ts/data/isolatedrestore.golden.ts +5 -9
- package/ts/data/isolatedrestore.ts +339 -54
- package/ts/data/mail.ts +1 -1
- package/ts/data/networkaddressplan.ts +13 -13
- package/ts/data/networkauthority.ts +42 -46
- package/ts/data/networkcredential.ts +24 -24
- package/ts/data/networkdelivery.ts +27 -27
- package/ts/data/networklease.ts +40 -13
- package/ts/data/networknode.ts +2 -2
- package/ts/data/networkprojection.ts +119 -124
- package/ts/data/networkprotection.ts +54 -55
- package/ts/data/networkrouter.ts +14 -14
- package/ts/data/networksigning.ts +29 -32
- package/ts/data/nodecredential.ts +4 -6
- package/ts/data/nodeenrollment.ts +96 -114
- package/ts/data/privatenetwork.ts +58 -74
- package/ts/data/runtimeassignment.ts +143 -94
- package/ts/data/runtimeconfig.ts +45 -46
- package/ts/data/runtimesession.ts +185 -138
- package/ts/data/runtimeterminalreceipt.ts +72 -73
- package/ts/data/secret.ts +28 -76
- package/ts/data/servicecredential.ts +33 -43
- package/ts/data/serviceruntime.ts +11 -11
- package/ts/data/sparknodereport.ts +48 -36
- package/ts/data/webpush.ts +0 -1
- package/ts/index.ts +2 -0
- package/ts/platform/objectstorageretention.ts +36 -55
- package/ts/platform/storage.ts +1 -3
- package/ts/platform/storagemigration.golden.ts +7 -11
- package/ts/platform/storagemigration.ts +5 -55
- package/ts/platform/types.ts +2 -2
- package/ts/private/canonicaljson.ts +13 -1
- package/ts/private/dataproperties.ts +139 -0
- package/ts/private/networkcontract.ts +9 -9
- package/ts/private/releaseversion.ts +70 -0
- package/ts/private/runtimepolicy.ts +2 -2
- package/ts/private/tokenlist.ts +30 -0
- package/ts/protocol.ts +364 -0
- package/ts/requests/admin.ts +11 -11
- package/ts/requests/backup.ts +112 -117
- package/ts/requests/cluster.ts +13 -13
- package/ts/requests/clusteringress.ts +9 -0
- package/ts/requests/config.ts +3 -3
- package/ts/requests/corestore.ts +4 -16
- package/ts/requests/network.ts +40 -40
- package/ts/requests/node.ts +21 -38
- package/ts/requests/pallet.ts +17 -17
- package/ts/requests/runtimesession.ts +63 -51
- package/ts/requests/secret.ts +5 -10
- package/ts/runtime.corestore.databaseexportpackage.golden.ts +77 -95
- package/ts/runtime.corestore.databaseexportpackage.ts +51 -73
- package/ts/runtime.corestore.relay.ts +1 -10
- package/ts/runtime.corestore.ts +118 -268
- package/ts/runtime.networkprojection.ts +30 -30
- package/ts/runtime.ts +83 -158
- package/ts/runtime.workloadinit.ts +36 -48
- package/dist_ts/runtime.cloudlylegacydeploymentsettlement.d.ts +0 -902
- package/dist_ts/runtime.cloudlylegacydeploymentsettlement.golden.d.ts +0 -35
- package/dist_ts/runtime.cloudlylegacydeploymentsettlement.golden.js +0 -315
- package/dist_ts/runtime.cloudlylegacydeploymentsettlement.js +0 -3315
- package/dist_ts/runtime.cloudlylegacydeploymentsettlement.offlineexport.d.ts +0 -291
- package/dist_ts/runtime.cloudlylegacydeploymentsettlement.offlineexport.golden.d.ts +0 -30
- package/dist_ts/runtime.cloudlylegacydeploymentsettlement.offlineexport.golden.js +0 -408
- package/dist_ts/runtime.cloudlylegacydeploymentsettlement.offlineexport.js +0 -1126
- package/ts/runtime.cloudlylegacydeploymentsettlement.golden.ts +0 -421
- package/ts/runtime.cloudlylegacydeploymentsettlement.offlineexport.golden.ts +0 -510
- package/ts/runtime.cloudlylegacydeploymentsettlement.offlineexport.ts +0 -2470
- package/ts/runtime.cloudlylegacydeploymentsettlement.ts +0 -6630
package/.smartconfig.json
CHANGED
package/changelog.md
CHANGED
|
@@ -1,5 +1,472 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 2026-09-18 - 32.0.0
|
|
4
|
+
|
|
5
|
+
### Breaking Changes
|
|
6
|
+
|
|
7
|
+
- Remove the Cloudly legacy deployment settlement contracts:
|
|
8
|
+
`runtime.cloudlylegacydeploymentsettlement`, its golden vectors, its offline export and that
|
|
9
|
+
export's golden vectors (10 031 lines, 317 exported names). Production has passed the settlement
|
|
10
|
+
cutover, and the family's HMAC and AAD evidence is bound to `…-hmac-v1`, `…-hmac-v2` and
|
|
11
|
+
`…-aad-v1` domains whose bytes cannot be recomputed under unsuffixed domains, so the contracts are
|
|
12
|
+
deleted instead of renamed. The `cloudly_legacy_deployment_settlement_export_attempt_v1`
|
|
13
|
+
collection name goes with them.
|
|
14
|
+
- Remove the Spark Swarm observation v1 family: `TSparkSwarmObservationV1`, and with it the v1
|
|
15
|
+
meaning of `ISparkSwarmObservationRequest`, `ISparkSwarmObservationResponse` and
|
|
16
|
+
`validateSparkSwarmObservation()`. The former v2 observation supersedes it as
|
|
17
|
+
`TSparkSwarmObservation` on `/spark/swarm-nodes/swarm-observation`, and a consumer must never
|
|
18
|
+
accept a v1 observation as an authority fallback.
|
|
19
|
+
- Remove the Corestore credential binding request v1 family:
|
|
20
|
+
`TCorestoreCredentialBindingRequestV1`, `validateCorestoreCredentialBindingRequest()`,
|
|
21
|
+
`createCorestoreCredentialBindingRequestDigestInput()` and
|
|
22
|
+
`computeCorestoreCredentialBindingRequestSha256()`. Schema v2 binds every object-storage request
|
|
23
|
+
to its exact durable `bucketName`, which the v1 request cannot express.
|
|
24
|
+
- Remove `IRequest_Spark_Cloudly_SendHeartbeat` (method `sparkNodeHeartbeat`). It has no handler and
|
|
25
|
+
no sender in any serve.zone repository; `sparkNodeHeartbeatContract` is the live heartbeat path.
|
|
26
|
+
- Remove `runtimeSessionV1Contract.relayRegistrationRequiresNodeInstanceNonce`. Nothing read the
|
|
27
|
+
flag, and from 32.0.0 the node instance nonce is part of the registration shape itself rather than
|
|
28
|
+
a rule a controller has to police.
|
|
29
|
+
- Strip the version suffix from the runtime and network authority chain, and remove `schemaVersion`
|
|
30
|
+
from every shape in it. 134 declared names, 11 digest and signature domains, 16 request method
|
|
31
|
+
strings and 13 shape members change; nothing is kept under the old spelling. **Digests and
|
|
32
|
+
signatures produced under the old domains no longer verify**, because the domain bytes and the
|
|
33
|
+
hashed payload both change: a value hashed under `serve.zone/runtime-config-v1` with a
|
|
34
|
+
`schemaVersion` member has no relation to the same value hashed under `serve.zone/runtime-config`
|
|
35
|
+
without it. Every stored digest, signature and reference in this chain is recomputed by the owning
|
|
36
|
+
service's migration, and the signed projection envelope is now `{ domain, authority, projection }`.
|
|
37
|
+
- Digest and signature domains: `serve.zone/runtime-config-v1` → `serve.zone/runtime-config`;
|
|
38
|
+
`serve.zone/runtime-assignment-v1` → `serve.zone/runtime-assignment`;
|
|
39
|
+
`serve.zone/runtime-assignment-observation-v1` → `serve.zone/runtime-assignment-observation`;
|
|
40
|
+
`serve.zone/runtime-assignment-terminal-receipt-v1` →
|
|
41
|
+
`serve.zone/runtime-assignment-terminal-receipt`;
|
|
42
|
+
`serve.zone/runtime-network-protected-authority-v1` →
|
|
43
|
+
`serve.zone/runtime-network-protected-authority`;
|
|
44
|
+
`serve.zone/runtime-network-handoff-lease-v1` → `serve.zone/runtime-network-handoff-lease`;
|
|
45
|
+
`serve.zone/runtime-network-projection-v1` → `serve.zone/runtime-network-projection`;
|
|
46
|
+
`serve.zone/runtime-network-workload-lease-v1` → `serve.zone/runtime-network-workload-lease`;
|
|
47
|
+
`serve.zone/runtime-network-protection-receipt-v1` →
|
|
48
|
+
`serve.zone/runtime-network-protection-receipt`;
|
|
49
|
+
`serve.zone/runtime-network-signing-authority-v1` →
|
|
50
|
+
`serve.zone/runtime-network-signing-authority`;
|
|
51
|
+
`serve.zone/runtime-network-projection-signature-v1` →
|
|
52
|
+
`serve.zone/runtime-network-projection-signature`.
|
|
53
|
+
- Request methods: `applyRuntimeAssignmentV1`, `reportRuntimeAssignmentObservationV1`,
|
|
54
|
+
`reportRuntimeAssignmentTerminalReceiptV1`, `applyRuntimeNetworkProjectionV1`,
|
|
55
|
+
`applyRuntimeNetworkSigningAuthorityV1`, `reportRuntimeNetworkProtectionV1` and
|
|
56
|
+
`getRuntimeManagedVpnCredentialV1` in `requests.runtimesession`, and
|
|
57
|
+
`listOwnedOrganizationsV1`, `listPrivateNetworksV1`, `listPrivateNetworkServiceCandidatesV1`,
|
|
58
|
+
`getPrivateNetworkV1`, `mutatePrivateNetworkV1`, `getServicePrivateNetworksV1`,
|
|
59
|
+
`setServicePrivateNetworksV1`, `getServicePublishedPortsV1` and `setServicePublishedPortsV1` in
|
|
60
|
+
`requests.network`, all lose their `V1` suffix; their `IReq_*` contract interfaces follow.
|
|
61
|
+
- Types, validators, snapshots, digest helpers and contract constants lose their `V1` suffix in
|
|
62
|
+
`data/runtimeassignment` (19 names), `data/runtimeterminalreceipt` (15), `data/runtimeconfig`
|
|
63
|
+
(11), `data/networkprojection` (24), `data/networkprotection` (12), `data/networkauthority`
|
|
64
|
+
(10), `data/networkdelivery` (9), `data/networksigning` (7), `data/networkcredential` (6),
|
|
65
|
+
`data/networkrouter` (2) and `runtime.networkprojection` (3). Examples:
|
|
66
|
+
`IRuntimeAssignmentV1` → `IRuntimeAssignment`, `computeRuntimeConfigV1Digest` →
|
|
67
|
+
`computeRuntimeConfigDigest`, `runtimeNetworkProjectionV1Contract` →
|
|
68
|
+
`runtimeNetworkProjectionContract`, `signRuntimeNetworkProjectionV1` →
|
|
69
|
+
`signRuntimeNetworkProjection`.
|
|
70
|
+
- `schemaVersion` is gone from `IRuntimeConfig`, `IRuntimeAssignment`,
|
|
71
|
+
`IRuntimeAssignmentObservation`, `IRuntimeAssignmentTerminalReceipt`,
|
|
72
|
+
`IRuntimeNetworkProtectedAuthority`, `IRuntimeNetworkHandoffLease`, `IRuntimeNetworkProjection`,
|
|
73
|
+
`IRuntimeNetworkWorkloadLease`, `IRuntimeNetworkProtectionReceipt`,
|
|
74
|
+
`IRuntimeNetworkSigningAuthority`, `ISignedRuntimeNetworkProjection`, `IServicePublishedPorts`
|
|
75
|
+
and `ISetServicePublishedPorts`, together with the validation that pinned it. Nothing replaces
|
|
76
|
+
it: the installed `@serve.zone/interfaces` version is the contract version.
|
|
77
|
+
|
|
78
|
+
- Strip the version suffix from the session, cluster and node family, and remove `schemaVersion`
|
|
79
|
+
from every shape in it. 77 declared names, 13 request method strings, two HTTP endpoints and one
|
|
80
|
+
digest domain change; nothing is kept under the old spelling and no alias is exported.
|
|
81
|
+
- Request methods: `registerPalletRuntimeSessionV1`, `getRuntimeRegistryCredentialV1` and
|
|
82
|
+
`registerCloudlyClientSessionV1` in `requests.runtimesession`; `registerClusterRelayV1`,
|
|
83
|
+
`enableClusterRelayV1` and `disableClusterRelayV1` in `requests.cluster`; `enrollNodeV1` and
|
|
84
|
+
`getNodeEnrollmentStateV1` in `requests.node`; `preparePalletNodeEnrollmentV1`,
|
|
85
|
+
`bindPalletNodeEnrollmentV1` and `activatePalletNodeEnrollmentV1` in `requests.pallet`;
|
|
86
|
+
`getServiceMachineCredentialV1` and `mutateServiceMachineCredentialV1` in `requests.admin`.
|
|
87
|
+
Their `IReq_*` contract interfaces follow.
|
|
88
|
+
- Types, validators, snapshots and contract constants lose their suffix in `data/runtimesession`
|
|
89
|
+
(31 names), `data/clusternode` (20), `data/sparknodereport` (8) and `data/cluster` (5).
|
|
90
|
+
Examples: `IRuntimeSessionBindingV1` → `IRuntimeSessionBinding`, `runtimeSessionV1Contract` →
|
|
91
|
+
`runtimeSessionContract`, `TSparkSwarmObservationV2` → `TSparkSwarmObservation`,
|
|
92
|
+
`sparkNodeHeartbeatV2Contract` → `sparkNodeHeartbeatContract`.
|
|
93
|
+
- One collision with a live name, resolved by role rather than by a suffix: the registration a
|
|
94
|
+
relay sends becomes `IRegisterClusterRelayRequest` / `IRegisterClusterRelayResponse` with
|
|
95
|
+
`validateRegisterClusterRelayRequest`, while `IClusterRelayRegistration` stays the read model
|
|
96
|
+
Cloudly serves to an administrator.
|
|
97
|
+
- `schemaVersion` is gone from `IRuntimeSessionBinding`, `IRegisterPalletRuntimeSessionRequest`,
|
|
98
|
+
`IRegisterCloudlyClientSessionRequest`, `IClusterRelay`, `IRegisterClusterRelayRequest`,
|
|
99
|
+
`ISparkNodeReport`, `ISparkNodeHeartbeatReceipt`, `ISparkSwarmObservation*`,
|
|
100
|
+
`IClusterRuntimeTargetSetReady` and `IClusterRuntimeTargetSetUnavailable`, together with
|
|
101
|
+
`ISwarmManagerSnapshot.snapshotVersion`. The validators are exact-key, so a body that still
|
|
102
|
+
carries either field is refused as an unknown key rather than accepted as an older shape.
|
|
103
|
+
- **Digests produced under the old shapes no longer verify**: the Spark Swarm observation domain
|
|
104
|
+
becomes `serve.zone/spark-swarm-observation` and its payload loses `schemaVersion`, and the
|
|
105
|
+
Swarm manager snapshot and cluster runtime target-set digest inputs lose their version members.
|
|
106
|
+
Every stored digest in this family is recomputed by the owning service.
|
|
107
|
+
- **Two spellings the v1 observation family freed are re-used by the former v2 shapes**:
|
|
108
|
+
`ISparkSwarmObservationRequest` is now the v2 request, and `validateSparkSwarmObservation()`
|
|
109
|
+
keeps its 31.9.0 signature `(observation: unknown) => Promise<string[]>` while judging the v2
|
|
110
|
+
observation. A 31.x call site therefore still compiles and is now judged by the new exact-key
|
|
111
|
+
schema — no `schemaVersion`, and the request carries `protocol` — so a v1 body it used to pass
|
|
112
|
+
is refused at runtime. The v1 `ISparkSwarmObservationResponse` has no successor under that
|
|
113
|
+
name: the answer is `TSparkSwarmObservationResponse`, one of two request-bound receipts, and a
|
|
114
|
+
reference to the old interface fails to compile instead.
|
|
115
|
+
- Every registration carrier now carries the protocol handshake, and the Pallet registration
|
|
116
|
+
answers a new shape. `registerPalletRuntimeSession`, `registerCloudlyClientSession`,
|
|
117
|
+
`registerClusterRelay` and `registerClusterIngress` take `protocol: IProtocolOffer` on the
|
|
118
|
+
request and answer with the accepting side's own offer;
|
|
119
|
+
`registerPalletRuntimeSession` answers `{ session, protocol }` instead of the bare binding, and
|
|
120
|
+
`bindRegisterPalletRuntimeSessionResponseV1` becomes
|
|
121
|
+
`bindRegisterPalletRuntimeSessionResponse(response, request)`, which binds that answer and
|
|
122
|
+
negotiates the two offers from the client's side. A server judges every carrier body in one
|
|
123
|
+
order, written down once at `protocol.readProtocolOffer` and referred to by every carrier: the
|
|
124
|
+
bounded body, `protocol.readProtocolOffer`, `protocol.negotiateProtocol` against that session
|
|
125
|
+
kind's offer, and only then the exact-key validator, the credential and any mutation. A
|
|
126
|
+
validator that also checks `protocol` checks it for self-consistency within one major; by then
|
|
127
|
+
the offer has already been negotiated.
|
|
128
|
+
- `IRegisterPalletRuntimeSessionRequest.nodeInstanceNonce` is required. A controller no longer has
|
|
129
|
+
a nonce-less registration to decide about, and a relayed cluster can no longer present one.
|
|
130
|
+
- `IRegisterPalletRuntimeSessionRequest.resolvedAuthorities` is required: the sorted, duplicate-free
|
|
131
|
+
list of `data.runtimeWorkloadAuthorities` this node build can resolve. A replay that states
|
|
132
|
+
different authorities is a conflict, not an update, and a controller refuses an assignment whose
|
|
133
|
+
`data.requiredWorkloadAuthorities(workload)` the list does not cover.
|
|
134
|
+
- The Spark routes lose their version segment and split by runtime. The node runtime posts
|
|
135
|
+
`sparkNodeHeartbeatContract.endpoint`, now `/spark/nodes/heartbeat`, and the Swarm-era runtime
|
|
136
|
+
posts the four routes of the new `data.sparkSwarmNodeContracts`, each of them an
|
|
137
|
+
`{ endpoint, maxRequestBytes, maxResponseBytes }` beside the other three:
|
|
138
|
+
`heartbeat` (`/spark/swarm-nodes/heartbeat`, 32 768 / 2048 bytes), `metricsSample`
|
|
139
|
+
(`/spark/swarm-nodes/metrics-sample`, 4096 / 32 768), `actionResult`
|
|
140
|
+
(`/spark/swarm-nodes/action-result`, 8192 / 2048) and `swarmObservation`
|
|
141
|
+
(`/spark/swarm-nodes/swarm-observation`, 786 432 / 2048, which is what the 1024 observed nodes
|
|
142
|
+
of a manager snapshot cost). `sparkSwarmObservationContract` loses its `endpoint`
|
|
143
|
+
member, because those four endpoints now have exactly one owner. Every body on these five routes,
|
|
144
|
+
request and answer alike, carries `protocol`, and a refused offer is answered with
|
|
145
|
+
`protocolRefusalStatus` (422) and an `IProtocolRefusal` body before the node is authenticated.
|
|
146
|
+
- Five first-contact exchanges still carry no protocol offer, so they name no major to the peer:
|
|
147
|
+
the Spark-to-Cloudly typed requests `getNodeEnrollmentState` and `enrollNode`, and the three
|
|
148
|
+
node-local Pallet IPC methods `preparePalletNodeEnrollment`, `bindPalletNodeEnrollment` and
|
|
149
|
+
`activatePalletNodeEnrollment`. Each is judged by its exact-key contract alone, so a 31.x sender
|
|
150
|
+
whose body still carries `schemaVersion` meets that contract's generic refusal
|
|
151
|
+
(`Node enrollment contract rejected.`) instead of a named `IProtocolRefusal` telling it which
|
|
152
|
+
major to speak. Upgrade both sides of an enrollment together: a refused enrollment body is the
|
|
153
|
+
only signal a mixed-major pair gets.
|
|
154
|
+
- Strip the version suffix from the identity and secret families, and remove `schemaVersion` and
|
|
155
|
+
every constant-literal `*Version` member from them. 69 declared names, one digest domain, one
|
|
156
|
+
hashing domain, two provenance URIs and two on-disk paths change, and 21 shape members are gone;
|
|
157
|
+
nothing is kept under the old spelling and no alias is exported. Every validator and snapshot in
|
|
158
|
+
these families is exact-key, so a 31.x body that still carries a removed member is refused as an
|
|
159
|
+
unknown key instead of being read as an older shape.
|
|
160
|
+
- Types, validators, snapshots, digest helpers and contract constants lose their `V1` suffix in
|
|
161
|
+
`data/nodeenrollment` (27 names), `data/privatenetwork` (16), `data/servicecredential` (9),
|
|
162
|
+
`runtime.workloadinit` (8), `data/secret` (6) and `data/nodecredential` (3). Examples:
|
|
163
|
+
`INodeEnrollmentV1` → `INodeEnrollment`, `computeNodeEnrollmentV1Digest` →
|
|
164
|
+
`computeNodeEnrollmentDigest`, `palletNodeEnrollmentV1Contract` →
|
|
165
|
+
`palletNodeEnrollmentContract`, `snapshotPrivateNetworkV1` → `snapshotPrivateNetwork`,
|
|
166
|
+
`privateNetworkV1Contract` → `privateNetworkContract`, `IServiceMachineGrantV1` →
|
|
167
|
+
`IServiceMachineGrant`, `IWorkloadInitReleaseApprovalV1` → `IWorkloadInitReleaseApproval`,
|
|
168
|
+
`TSecretVersionPurgeOperationV1` → `TSecretVersionPurgeOperation`. No target name collided with
|
|
169
|
+
a live one, so no family needed a role word.
|
|
170
|
+
- Wire tokens: the enrollment digest domain `serve.zone/node-enrollment-v1` →
|
|
171
|
+
`serve.zone/node-enrollment`; the Docker secret resource domain
|
|
172
|
+
`serve.zone/docker-secret-resource/v1` → `serve.zone/docker-secret-resource`; the WorkloadInit
|
|
173
|
+
provenance identifiers `https://serve.zone/buildtypes/workloadinit-gitzone-tsdocker/v1` →
|
|
174
|
+
`https://serve.zone/buildtypes/workloadinit-gitzone-tsdocker` and
|
|
175
|
+
`https://serve.zone/builders/workloadinit-manual-release/v1` →
|
|
176
|
+
`https://serve.zone/builders/workloadinit-manual-release`; and the two WorkloadInit paths
|
|
177
|
+
`/run/serve.zone/workloadinit-map-v1.json` → `/run/serve.zone/workloadinit-map.json` and
|
|
178
|
+
`/opt/serve.zone/runtime-assets/workloadinit/v1/workloadinit` →
|
|
179
|
+
`/opt/serve.zone/runtime-assets/workloadinit/workloadinit`. The in-toto statement type, the
|
|
180
|
+
SLSA predicate type, `cosign-dsse-bundle-v0.3` and the OCI index media type keep their bytes:
|
|
181
|
+
they are defined by someone else's specification, and a verifier matches them literally.
|
|
182
|
+
- `schemaVersion` is gone from `INodeEnrollment`, `INodeEnrollmentAcknowledgement`,
|
|
183
|
+
`INodeEnrollmentState`, `IPalletNodeEnrollmentPreparation`, the Pallet confirmation base,
|
|
184
|
+
`INodeCredentialMetadata`, `INodeCredentialMutationPreconditions`,
|
|
185
|
+
`IServiceMachineCredentialMetadata`, the service-machine mutation base, `IPrivateNetwork`,
|
|
186
|
+
`IServicePrivateNetworks`, the private-network mutation base, `ISecretVersionPurgeIntent`, the
|
|
187
|
+
purge operation base, `IServiceSecretConfiguration`, `IResolvedSecretManifest`,
|
|
188
|
+
`IServiceSecretDeploymentPlan`, `IWorkloadInitEnvironmentMap`, the secret recipient base and
|
|
189
|
+
`IWorkloadInitReleaseApproval`. `IWorkloadInitApprovalAuthorityReference.authorityVersion`
|
|
190
|
+
goes with them, because its type was the literal `1`; the counter `authorityGeneration` stays,
|
|
191
|
+
as do every `generation`, `sessionEpoch`, `revision` and `secretsRevision` in these families.
|
|
192
|
+
- **Values derived from these domains and shapes change, so nothing computed under 31.x
|
|
193
|
+
verifies**: `createDockerSecretResourceName` gives every SecretVersion a different `szsv-*`
|
|
194
|
+
Docker resource name (and therefore a different `/run/serve.zone/secrets/<resource>` path and a
|
|
195
|
+
different WorkloadInit map), the enrollment `requestDigest`, the purge `intentDigest`, the
|
|
196
|
+
resolved-manifest `digest` and the WorkloadInit `approvalDigest` all hash payloads that lost a
|
|
197
|
+
member, and the five X25519 envelope contexts — create, rotate, App Store install,
|
|
198
|
+
resolved-secret material and recipient-enrollment challenge — lost theirs too, so an envelope
|
|
199
|
+
sealed under a 31.x context fails `verifySecretEnvelopeContext`. Cloudly recomputes the stored
|
|
200
|
+
digests and re-issues the affected material in its own migration; WorkloadInit releases are
|
|
201
|
+
re-approved under the new provenance URIs.
|
|
202
|
+
- **The WorkloadInit executable path is a rebuild, not only a token**: the literal path
|
|
203
|
+
`workloadInitExecutablePath` is the command `createWorkloadInitWrappedInvocation` puts in
|
|
204
|
+
front of a workload, so the read-only runtime-asset tree mounted at
|
|
205
|
+
`workloadRuntimeAssetRoot` has to ship the wrapper at
|
|
206
|
+
`/opt/serve.zone/runtime-assets/workloadinit/workloadinit` before any 32.0.0 workload starts.
|
|
207
|
+
An asset image built under 31.x carries it only under `.../workloadinit/v1/`, where every
|
|
208
|
+
wrapped container start fails to exec, so that image is rebuilt and rolled out with this major.
|
|
209
|
+
- `IServiceSecretConfiguration` never had a second shape in this package; its `schemaVersion: 2`
|
|
210
|
+
was the token consumers discriminated on. The member is gone, so a consumer that tested
|
|
211
|
+
`secretConfiguration?.schemaVersion === 2` now tests for the presence of `secretConfiguration`
|
|
212
|
+
itself. `IResolvedSecretManifest` and `IServiceSecretDeploymentPlan` lose the same field.
|
|
213
|
+
- Strip the version suffix from the storage and platform families, and remove every shape-version
|
|
214
|
+
member from them: 59 declared names, seven wire tokens and one object-key path change, and 44
|
|
215
|
+
shapes lose `schemaVersion` (45 member declarations: `TSecretRecipientEnrollmentState` declared
|
|
216
|
+
it on both union branches). With this the package carries no version token and no shape version
|
|
217
|
+
anywhere, and the naming specification proves both: it reads every `version` and `*Version`
|
|
218
|
+
member whose type or value is a constant — in a shape, in a frozen contract constant, and inside
|
|
219
|
+
a regex literal — and its backlog is empty. Two members keep the name because they state
|
|
220
|
+
something else: `commitinfo.version` is the package's own release, which `protocol.protocolVersion`
|
|
221
|
+
publishes, and `coreMailCredentialVerifierPolicy.version` is Argon2's version 19 as the PHC
|
|
222
|
+
string spells it.
|
|
223
|
+
- Types, validators, normalizers and golden vectors lose their `V<n>` suffix in
|
|
224
|
+
`runtime.corestore` (21 names), `runtime.corestore.databaseexportpackage` (11 + 1 golden),
|
|
225
|
+
`platform/objectstorageretention` (8), `runtime.ts` (16) and `data/immutableimage` (2).
|
|
226
|
+
Examples: `ICorestoreControlCredentialMaterialV1` → `ICorestoreControlCredentialMaterial`,
|
|
227
|
+
`TCorestoreCredentialBindingRequestV2` → `TCorestoreCredentialBindingRequest`,
|
|
228
|
+
`ICorestoreDatabaseExportPackageRequestV1` → `ICorestoreDatabaseExportPackageRequest`,
|
|
229
|
+
`IObjectStorageRetentionBindingV1` → `IObjectStorageRetentionBinding`,
|
|
230
|
+
`ICoreflowSecretRuntimeRegistrationV2` → `ICoreflowSecretRuntimeRegistration`,
|
|
231
|
+
`ISecretDeploymentReportResponseV1` → `ISecretDeploymentReportResponse`,
|
|
232
|
+
`IImmutableContainerInvocationV1` → `IImmutableContainerInvocation`.
|
|
233
|
+
- **Three spellings the deleted Corestore binding request v1 family freed are re-used by the
|
|
234
|
+
former v2 functions**: `validateCorestoreCredentialBindingRequest()`,
|
|
235
|
+
`createCorestoreCredentialBindingRequestDigestInput()` and
|
|
236
|
+
`computeCorestoreCredentialBindingRequestSha256()` keep their 31.x signatures and now judge and
|
|
237
|
+
hash the request that binds every object-storage request to its exact durable `bucketName`. A
|
|
238
|
+
31.x call site therefore still compiles and is judged by the new schema, so a v1 request body
|
|
239
|
+
it used to pass is refused at runtime.
|
|
240
|
+
- Wire tokens: the App Store storage feature ids `storage.bindings.v2` → `storage.bindings`,
|
|
241
|
+
`storage.filesystem.v1` → `storage.filesystem`, `storage.object-storage.v2` →
|
|
242
|
+
`storage.object-storage` and `storage.object-storage.file.v2` → `storage.object-storage.file`
|
|
243
|
+
(their keys in `appstore.appStoreStorageFeatureIds` lose the suffix with them); the
|
|
244
|
+
object-storage file delivery format `servezone-object-storage-v1` → `servezone-object-storage`;
|
|
245
|
+
the CoreMail verifier format `argon2id-v1` → `argon2id`, which keeps the KDF's own name and the
|
|
246
|
+
verification-hash bytes; the Corestore backup format `corestore.database.backup.v1` →
|
|
247
|
+
`corestore.database.backup`; and the retention sentinel object key
|
|
248
|
+
`.smartstorage-retention/v1/sentinel-<sha256>.json` → `.smartstorage-retention/sentinel-…`.
|
|
249
|
+
A sentinel written under the old key is the one value here that cannot be recomputed: it is an
|
|
250
|
+
object in a bucket under compliance retention, so it can be neither renamed nor deleted until
|
|
251
|
+
its `retainUntil`. The owning service writes a new sentinel at the new key and re-verifies the
|
|
252
|
+
binding in its own 32 slice; `validateObjectStorageRetentionEvidence` refuses the old spelling
|
|
253
|
+
until it does.
|
|
254
|
+
`smartdb.database.export.v1`, the OCI and Docker media types, the in-toto and SLSA URIs and the
|
|
255
|
+
Cosign bundle name keep their bytes: another specification defines them.
|
|
256
|
+
- `schemaVersion` is gone from 44 shapes across `runtime.corestore` (11),
|
|
257
|
+
`runtime.corestore.databaseexportpackage` (6), `runtime.ts` (6 shapes, 7 declarations, because
|
|
258
|
+
`TSecretRecipientEnrollmentState` declared it on both union branches), `platform/storagemigration`
|
|
259
|
+
(5), `data/coremail` (4), `platform/storage` (2), `data/deploymentadoption` (2),
|
|
260
|
+
`data/deploymentpreflight` (2), `appstore/types` (2: `parseAppStoreIndex` already ignored the
|
|
261
|
+
member, and `parseServezoneAppStoreManifest` drops its `schemaVersion !== 1` guard in the App
|
|
262
|
+
Store's own 32 slice — published index and manifest documents keep the member in their bytes,
|
|
263
|
+
which the type simply no longer declares), `data/immutableimage`, `data/webpush`,
|
|
264
|
+
`platform/objectstorageretention` and
|
|
265
|
+
`requests/secret` (1 each). The constant-literal siblings go with it:
|
|
266
|
+
`ICorestoreDatabaseBackupClosureReceipt.formatVersion`, the retention capability and sentinel
|
|
267
|
+
`version`, `ICoreflowSecretRuntimeRegistrationExpectation.expectationVersion` and
|
|
268
|
+
`ICoreflowSecretRuntimeRegistration.registrationVersion`. Counters stay and keep their meaning:
|
|
269
|
+
`revision`, `secretsRevision`, `generation`, `reconciliationGeneration`, `authorityGeneration`,
|
|
270
|
+
`recordRevision`, `migrationRevision`, `configEpoch`, the CoreMail credential and runtime-key
|
|
271
|
+
`version` counters and `policyGeneration`.
|
|
272
|
+
- The constant-literal versions the rest of the package still stated go with them, now that the
|
|
273
|
+
naming specification sees them: `ICorestoreNodeInventory.protocolVersion` and
|
|
274
|
+
`ICoreflowInventoryRegistration.registrationVersion` (`requests/corestore`),
|
|
275
|
+
`IBackupArchiveManifest.version` (`data/backup`), `IIsolatedRestoreGrantClaims.grantVersion`
|
|
276
|
+
and the `version` of `IIsolatedRestoreAuthorityProjection`,
|
|
277
|
+
`IIsolatedRestoreDurableChunkReceipt`, `IIsolatedRestoreDurableCompletedObjectProof`,
|
|
278
|
+
`isolatedRestoreContractLimits`, `isolatedRestoreRepositoryPathProfile` and the isolated-restore
|
|
279
|
+
golden vector set, `storageMigrationContractLimits.version`, and `strictCanonicalJsonRules.version`
|
|
280
|
+
(published as `storageMigrationCanonicalJsonRules`, `coreMailCanonicalJsonRules` and
|
|
281
|
+
`isolatedRestoreCanonicalJsonRules`). Every reader of these shapes is exact-key, so a 31.x body
|
|
282
|
+
that still carries one is refused as an unknown key — including the `protocolVersion: 1` Cloudly
|
|
283
|
+
writes on a Coreflow inventory today, which its own 32 slice drops.
|
|
284
|
+
`ICorestoreInventoryProbe.capabilityVersion` is deleted without replacement: it stated a
|
|
285
|
+
capability *number* for a set that is now stated by name in the registration, and no consumer
|
|
286
|
+
read it.
|
|
287
|
+
- **The isolated-restore digests change with those members**: the archive-manifest canonical JSON
|
|
288
|
+
and its SHA-256, the grant-claims canonical JSON and its SHA-256 (which carries the manifest
|
|
289
|
+
digest inside it), the authority-projection digest, and every durable chunk-receipt and
|
|
290
|
+
completed-object-proof digest built on them. The portable vectors in
|
|
291
|
+
`data.isolatedRestoreCanonicalDigestGoldenVectors` are regenerated from their inputs and are
|
|
292
|
+
reproduced in the specification by a canonicalizer written from the rule rather than called
|
|
293
|
+
from the implementation. A signer, relay or Corestore that stored one of these digests under
|
|
294
|
+
31.x recomputes it in its own migration.
|
|
295
|
+
- `data.optionalCoreflowRuntimeCapabilities` is exported beside the vocabulary and
|
|
296
|
+
`data.requiredCoreflowRuntimeCapabilities` is now derived from it, so a capability added to
|
|
297
|
+
`data.coreflowRuntimeCapabilities` is required from that moment unless it is named optional.
|
|
298
|
+
`validateServiceDeploymentAdoptionRetentionAttestation` judges the envelope's
|
|
299
|
+
`reporterCapabilities` with `data.isCoreflowRuntimeCapabilityList` and answers "retention
|
|
300
|
+
attestation reporter capabilities must be a canonical capability list", so the list a reporter
|
|
301
|
+
attests is held to the rule its registration was held to.
|
|
302
|
+
- Validators that were not exact-key became exact-key, so a 31.x body that still carries a
|
|
303
|
+
removed member is refused as an unknown key instead of being read as an older shape:
|
|
304
|
+
`validateServiceDeploymentAdoptionReport` (per decision),
|
|
305
|
+
`validateServiceDeploymentAdoptionRetentionAttestation`,
|
|
306
|
+
`validateDeploymentProposedConfiguration` and `validateObjectStorageRetentionBinding`.
|
|
307
|
+
- `ICoreflowRuntimeCapabilities` is replaced by `capabilities: TCoreflowRuntimeCapability[]` on
|
|
308
|
+
`ICoreflowSecretRuntimeRegistration` and by `reporterCapabilities` on
|
|
309
|
+
`IImmutableRolloutReportEnvelope`: a sorted, duplicate-free list of the names in
|
|
310
|
+
`coreflowRuntimeCapabilities`, judged by `isCoreflowRuntimeCapabilityList` and required to
|
|
311
|
+
contain every name in `requiredCoreflowRuntimeCapabilities`. The seven `*Version: 1 | 2`
|
|
312
|
+
members said two things at once — that a contract exists and which shape was meant — and the
|
|
313
|
+
shape is the interfaces version the peers exchanged. `corestore-inventory` stays the one
|
|
314
|
+
optional capability.
|
|
315
|
+
- **One owner per constant**: `runtime.corestoreDatabaseBackupMediaType`
|
|
316
|
+
(`application/vnd.serve-zone.corestore-database-backup`) and
|
|
317
|
+
`runtime.corestoreDatabaseBackupFormat` (`corestore.database.backup`) are defined once here.
|
|
318
|
+
Corestore's control server, its export packager, Onebox and the cluster relay delete their own
|
|
319
|
+
copies and import these, so a transfer cannot be served under one spelling and read under
|
|
320
|
+
another.
|
|
321
|
+
- **Values derived from these shapes change, so nothing computed under 31.x verifies**: the
|
|
322
|
+
immutable invocation digest loses `schemaVersion`, and with it every runtime config, assignment
|
|
323
|
+
and run digest of that chain and every `invocationDigest` in a resolved manifest reference; the
|
|
324
|
+
Coreflow secret-runtime `expectationDigest` loses a `schemaVersion` literal that was still
|
|
325
|
+
hashed into its payload; every secret deployment `reportDigest`; the object-storage retention
|
|
326
|
+
`intentSha256`; the storage-migration snapshot, migration, binding, staging and activation
|
|
327
|
+
digests; the Corestore binding-request digest, the control-credential and publication envelope
|
|
328
|
+
contexts, the control-credential plaintext bytes, the database backup receipt and restore
|
|
329
|
+
request bytes and the whole export-package digest chain; and the CoreMail desired-state digest.
|
|
330
|
+
Each owning service recomputes its stored digests in its own migration; nothing of the old
|
|
331
|
+
computation stays in this package.
|
|
332
|
+
|
|
333
|
+
- Route the isolated restore over the cluster relay, by node id. The four `Cloudly_Coreflow_*`
|
|
334
|
+
control contracts and `stageIsolatedRestoreArchive` are replaced by five contracts of one shape,
|
|
335
|
+
`{ nodeId, control }` → `{ progress }`: `prepareIsolatedRestoreOnNode`,
|
|
336
|
+
`stageIsolatedRestoreArchive`, `getIsolatedRestoreProgressOnNode`,
|
|
337
|
+
`executeIsolatedRestoreOnNode` and `cleanupIsolatedRestoreOnNode`
|
|
338
|
+
(`IReq_Cloudly_Relay_PrepareIsolatedRestoreOnNode` and its four siblings). `control` is the body
|
|
339
|
+
Corestore itself reads — the existing `data.IIsolatedRestoreControl*Request` family, with the
|
|
340
|
+
signed grant inside it — so the relay forwards it untouched instead of restating its fields, and
|
|
341
|
+
the old flattened `restoreGrant`/`clusterId`/`targetNodeName`/`restoreId`/`expectedRevision`
|
|
342
|
+
request bodies are gone. `stageIsolatedRestoreArchive` no longer carries a `TVirtualStream`: it
|
|
343
|
+
takes one bounded chunk per call, as Corestore's `write-object` route accepts it, and the answer
|
|
344
|
+
says where the next chunk continues. No contract carries an identity or a protocol offer: the
|
|
345
|
+
cluster is the one the verified machine identity on the session `registerCloudlyClientSession`
|
|
346
|
+
opened names, and the protocol offer was exchanged by that handshake and again by
|
|
347
|
+
`registerClusterRelay`'s own `protocol` member. Nothing served or called these methods, so no
|
|
348
|
+
deployment changes with them.
|
|
349
|
+
- Remove `IIsolatedRestoreNodeState` and `TIsolatedRestoreNodeStatus`. They were the response of
|
|
350
|
+
those five contracts and no component could author one: a node knows Corestore's staging summary
|
|
351
|
+
and nothing of the source backup, the requesting actor or the control plane's verification, and
|
|
352
|
+
its ten-state status vocabulary was never Corestore's five. `data.IIsolatedRestoreProgress`
|
|
353
|
+
replaces them with what a node can actually state, and Cloudly composes its record from that and
|
|
354
|
+
its own knowledge, exactly as it does with the Corestore inventory.
|
|
355
|
+
- `createIsolatedRestore` takes `targetNodeId` instead of `targetNodeName`, and
|
|
356
|
+
`IIsolatedRestoreRecord` states both: the cluster document's node id is what a relay routes on,
|
|
357
|
+
the node name is what the signed grant authorizes and Corestore verifies, and Cloudly is the one
|
|
358
|
+
party that holds both. `getIsolatedRestores` filters by either. `targetNodeName` is refused as
|
|
359
|
+
caller input on creation, like every other value Cloudly derives.
|
|
360
|
+
- The Spark node report's bundle version (`data.snapshotSparkNodeReport`) is judged by the release
|
|
361
|
+
grammar `ts/private/releaseversion.ts` owns instead of its own copy of the pattern, so its bound
|
|
362
|
+
tightens from 64 characters to 32 and a component beyond the safe-integer range is refused. A
|
|
363
|
+
stored bundle version longer than 32 characters is refused from 32.0.0 on; every version this
|
|
364
|
+
package accepts is one `compareReleaseVersions` can order.
|
|
365
|
+
- Three peer-visible reasons in the isolated-restore family lose a word that is no longer true:
|
|
366
|
+
`… does not match its exact versioned schema` → `… does not match its exact schema`,
|
|
367
|
+
`archiveManifest object sizes exceed the versioned total-size limit` → `… exceed the total-size
|
|
368
|
+
limit`, and `write request decoded chunk exceeds the versioned chunk limit` → `… exceeds the
|
|
369
|
+
chunk limit`. The shapes behind them carry no version since 32.0.0. These are breaking message
|
|
370
|
+
changes: a consumer matching on the old text must drop the word, as this package's own contract
|
|
371
|
+
specs did.
|
|
372
|
+
|
|
373
|
+
### Features
|
|
374
|
+
|
|
375
|
+
- Add what one node can state about an isolated restore it holds, in Corestore's own words.
|
|
376
|
+
`data.IIsolatedRestoreProgress { nodeId, restoreId, stagingArchiveId, status, revision,
|
|
377
|
+
lastFence, expectedObjects, receivedObjects, completedMappings, totalMappings, preparedAt,
|
|
378
|
+
updatedAt, executedAt?, stagedObject? }` is Corestore's staging summary plus the node the control
|
|
379
|
+
was carried to, and `data.isolatedRestoreProgressStatuses` is its status vocabulary taken
|
|
380
|
+
verbatim from Corestore's control server: `prepared`, `executing`, `failed`, `executed`,
|
|
381
|
+
`cleaned`. `data.normalizeIsolatedRestoreProgress` reads it exactly — refusing an unknown status,
|
|
382
|
+
a count larger than the plan it belongs to, a `revision` or `lastFence` below 1, an `executing`
|
|
383
|
+
or `executed` answer that does not hold the whole archive, an `executed` answer that left a
|
|
384
|
+
mapping behind or does not say when it finished, and any member backed by an accessor — and
|
|
385
|
+
`data.bindIsolatedRestoreProgressToNode(progress, { nodeId, restoreId })` ties an answer back to
|
|
386
|
+
the call it answers, which nothing else can do: the control body names neither the node nor the
|
|
387
|
+
restore. `data.IIsolatedRestoreObjectProgress { path, nextOffset, completed }` rides along as
|
|
388
|
+
`stagedObject` on a staged chunk — named apart from Corestore's own `object` receipt, which is a
|
|
389
|
+
different shape and is not carried — so an interrupted staging run resumes at the byte the node
|
|
390
|
+
already holds.
|
|
391
|
+
- `data.IIsolatedRestoreControlAuthority` is the base the five
|
|
392
|
+
`data.IIsolatedRestoreControl*Request` bodies extend, so the signed `restoreGrant` — and the
|
|
393
|
+
warning that it is a bearer credential to keep out of hooks, logs, diagnostics and durable
|
|
394
|
+
journals — is declared once, where the grant is, instead of once per contract. The bodies are
|
|
395
|
+
unchanged on the wire.
|
|
396
|
+
- `data.normalizeIsolatedRestoreNodeControl(value, normalizeControl)` reads one `{ nodeId,
|
|
397
|
+
control }` request with the normalizer of the operation it serves, so there is one reader for the
|
|
398
|
+
envelope and one judge per control body, and `data.isolatedRestoreNodeControlRefusals` with
|
|
399
|
+
`data.TIsolatedRestoreNodeControlRefusal` names the three answers a relay gives instead of a
|
|
400
|
+
progress: `restore-node-not-carried` and `restore-node-unreachable` are the relay's own statement
|
|
401
|
+
that the control never reached Corestore, and `restore-node-refused` carries Corestore's own
|
|
402
|
+
reason behind it rather than inventing a second vocabulary for it.
|
|
403
|
+
|
|
404
|
+
- Add the protocol handshake two peers exchange when a session opens, exported from the root as
|
|
405
|
+
`protocol`. The protocol version is the installed `@serve.zone/interfaces` release
|
|
406
|
+
(`protocol.protocolVersion`, taken from the package's own commit info): there is no protocol
|
|
407
|
+
number beside it, no per-shape version suffix and no `schemaVersion` field.
|
|
408
|
+
- `IProtocolOffer { interfacesVersion; minimumPeerVersion }` states what one side speaks and the
|
|
409
|
+
oldest peer it accepts. `createProtocolOffer` builds this build's offer and throws on a minimum
|
|
410
|
+
above the installed release or in another major, so a wrong minimum fails at a deployable's
|
|
411
|
+
start-up rather than at its first registration. `validateProtocolOffer` names every reason an
|
|
412
|
+
offer is refused, and `readProtocolOffer` reads the `protocol` key of a body alone and returns
|
|
413
|
+
it detached, which is what lets a server negotiate before its exact-key validators see a body
|
|
414
|
+
from a later major. `validateProtocolOfferOn(body, path?)` is its naming twin for a validator
|
|
415
|
+
that lists reasons instead of throwing, so both doors into a body read that key the same way.
|
|
416
|
+
- `negotiateProtocol(local, remote)` is pure and checks in a fixed order: `major-mismatch` even
|
|
417
|
+
when a minimum would also fail, then `peer-below-minimum`, then `self-below-peer-minimum`. The
|
|
418
|
+
last two are mirror images of one another and can never hold at once.
|
|
419
|
+
- `IProtocolRefusal { code: 'protocol-incompatible'; reason; refusing; refused }` is the named
|
|
420
|
+
refusal a peer carries as `TypedResponseError.errorData` or as a plain HTTP JSON body;
|
|
421
|
+
`readProtocolRefusal` recovers it from either and answers `null` for every other error, and
|
|
422
|
+
`describeProtocolRefusal` writes the log line. `refusedOfferRetryIntervalMs` (300000) is the one
|
|
423
|
+
cadence at which a refused client offers again, so no client invents its own.
|
|
424
|
+
- Every carrier reads the offer once, as data: a `protocol` key, or a member of the offer under
|
|
425
|
+
it, that is an accessor rather than a plain value is refused as "must use its exact schema" and
|
|
426
|
+
is never invoked, by every function above. Every offer and refusal the module hands out is
|
|
427
|
+
frozen and built from the values that were validated, so what a session was negotiated over
|
|
428
|
+
cannot change afterwards — not through the body it arrived on, not through code a peer attached
|
|
429
|
+
to it, and not through the caller's own offer.
|
|
430
|
+
- `ts/private/releaseversion.ts` owns the release-version grammar — `MAJOR.MINOR.PATCH`, at most
|
|
431
|
+
32 characters, no prerelease or build metadata, safe-integer components compared per component —
|
|
432
|
+
behind one predicate, `isReleaseVersion`, which every validator goes through.
|
|
433
|
+
- `protocol.protocolRefusalHttpStatus` (422) is the status a route that carries no typed error
|
|
434
|
+
answers a refusal with. The Spark contracts state that same constant rather than their own
|
|
435
|
+
number, so the refusal status has one owner.
|
|
436
|
+
- Export the refusal vocabularies two processes have to agree on, so neither keeps its own copy:
|
|
437
|
+
`data.holdRuntimeNetworkDnsLeaseRenewalsRefusals` with
|
|
438
|
+
`data.THoldRuntimeNetworkDnsLeaseRenewalsRefusal` names the six reasons a cluster relay refuses
|
|
439
|
+
to hold a run of DNS lease renewals (`escrow-run-invalid`, `escrow-node-not-carried`,
|
|
440
|
+
`escrow-run-foreign-session`, `escrow-run-stale`, `escrow-run-unordered`, `escrow-cloudly-only`),
|
|
441
|
+
and `data.clusterRelayUndispatchedRefusals` with `data.TClusterRelayUndispatchedRefusal` names
|
|
442
|
+
the three registration refusals that end a relay's custody (`relay-cluster-not-enabled`,
|
|
443
|
+
`relay-node-foreign`, `relay-sequence-not-advancing`). A hold is answered only by its refusal,
|
|
444
|
+
and those three registration refusals are Cloudly reading its own records, so a relay that hears
|
|
445
|
+
one drops what it holds instead of waiting.
|
|
446
|
+
- Add the workload authority vocabulary to `data/runtimeassignment`, beside the workload whose keys
|
|
447
|
+
define it: `runtimeWorkloadAuthorities` (`network`, `secrets`, `storage`) with
|
|
448
|
+
`TRuntimeWorkloadAuthority`, `requiredWorkloadAuthorities(workload)` for what a workload cannot
|
|
449
|
+
run without, and `isResolvedWorkloadAuthorities(value)` for a receiver checking a list it was
|
|
450
|
+
sent. Canonical is strictly increasing in the code-unit order of the names, which both functions
|
|
451
|
+
compare through, so the rule that builds a list and the rule that judges one cannot disagree
|
|
452
|
+
about what an assignment demands whatever order the vocabulary itself is written in.
|
|
453
|
+
- Move the Swarm-era Spark heartbeat shape into this package as
|
|
454
|
+
`data.ISparkSwarmNodeHeartbeatRequest` / `ISparkSwarmNodeHeartbeatResponse`. Cloudly and Spark
|
|
455
|
+
each carried a private copy of it, which is how the two drifted apart; the four Swarm-era routes
|
|
456
|
+
now have one owner in `data.sparkSwarmNodeContracts`.
|
|
457
|
+
|
|
458
|
+
### Maintenance
|
|
459
|
+
|
|
460
|
+
- Three internal reader modules now own the rules the contracts used to restate:
|
|
461
|
+
`ts/private/dataproperties.ts` reads own enumerable data properties only
|
|
462
|
+
(`isPlainRecord`, `readDataProperty`, `readDataProperties`, `readDataElements`, `hasExactKeys`,
|
|
463
|
+
`readExactDataRecord`), `ts/private/tokenlist.ts` judges a canonical token list
|
|
464
|
+
(`isCanonicalTokenList`), and `ts/private/canonicaljson.ts` orders wire tokens
|
|
465
|
+
(`compareWireTokens`). They are internal: nothing under `ts/private` is exported from the
|
|
466
|
+
package, so a consumer sees only the validators that go through them.
|
|
467
|
+
- The naming spec reads the compiler from `@git.zone/tsbuild/typescript` (tsbuild 4.5.0), so the
|
|
468
|
+
package no longer declares its own `typescript` dev dependency.
|
|
469
|
+
|
|
3
470
|
## 2026-09-17 - 31.9.0
|
|
4
471
|
|
|
5
472
|
### Features
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
* autocreated commitinfo by @push.rocks/commitinfo
|
|
3
3
|
*/
|
|
4
4
|
export const commitinfo = {
|
|
5
|
-
name:
|
|
6
|
-
version:
|
|
7
|
-
description:
|
|
5
|
+
name: "@serve.zone/interfaces",
|
|
6
|
+
version: "32.0.0",
|
|
7
|
+
description: "Shared TypeScript interfaces and TypedRequest contracts for the serve.zone ecosystem."
|
|
8
8
|
};
|
|
9
9
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSx3QkFBd0I7SUFDOUIsT0FBTyxFQUFFLFFBQVE7SUFDakIsV0FBVyxFQUFFLHVGQUF1RjtDQUNyRyxDQUFBIn0=
|
|
@@ -24,10 +24,10 @@ export type TAppStoreSourceType = 'inline' | 'repoManifest' | 'dockerImage';
|
|
|
24
24
|
export type TAppStoreTrackingMode = 'tag' | 'digest';
|
|
25
25
|
export type TAppStoreUpgradeStrategy = 'semver' | 'branch' | 'dockerDigest';
|
|
26
26
|
export declare const appStoreStorageFeatureIds: {
|
|
27
|
-
readonly
|
|
28
|
-
readonly
|
|
29
|
-
readonly
|
|
30
|
-
readonly
|
|
27
|
+
readonly bindings: "storage.bindings";
|
|
28
|
+
readonly filesystem: "storage.filesystem";
|
|
29
|
+
readonly objectStorage: "storage.object-storage";
|
|
30
|
+
readonly objectStorageFile: "storage.object-storage.file";
|
|
31
31
|
};
|
|
32
32
|
export type TAppStoreStorageFeatureId = typeof appStoreStorageFeatureIds[keyof typeof appStoreStorageFeatureIds];
|
|
33
33
|
export type TAppStoreStoragePurpose = 'runtime' | 'database' | 'registry' | 'backup';
|
|
@@ -182,7 +182,6 @@ export interface IAppStoreApp {
|
|
|
182
182
|
resolvedSource?: IAppStoreResolvedSource;
|
|
183
183
|
}
|
|
184
184
|
export interface IAppStoreIndex {
|
|
185
|
-
schemaVersion: number;
|
|
186
185
|
updatedAt: string;
|
|
187
186
|
resolvedAt?: string;
|
|
188
187
|
apps: IAppStoreApp[];
|
|
@@ -267,7 +266,6 @@ export interface IServezoneAppStoreVersion extends IAppStoreVersionConfig {
|
|
|
267
266
|
version: string;
|
|
268
267
|
}
|
|
269
268
|
export interface IServezoneAppStoreManifest {
|
|
270
|
-
schemaVersion: number;
|
|
271
269
|
app: IServezoneAppStoreAppInfo;
|
|
272
270
|
latestVersion?: string;
|
|
273
271
|
channel?: string;
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { createAppStoreInstallSecretEnvelopeContext, validateSecretDelivery, validateSecretValueInput, validateSecretValueInputForRecipient, } from '../data/secret.js';
|
|
2
2
|
import { validateHostedAppRoleDefinitions, } from '../data/hostedapp.js';
|
|
3
3
|
export const appStoreStorageFeatureIds = {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
bindings: 'storage.bindings',
|
|
5
|
+
filesystem: 'storage.filesystem',
|
|
6
|
+
objectStorage: 'storage.object-storage',
|
|
7
|
+
objectStorageFile: 'storage.object-storage.file',
|
|
8
8
|
};
|
|
9
9
|
const appStorePublicEnvKeyRegex = /^[A-Za-z_][A-Za-z0-9_]{0,252}$/;
|
|
10
10
|
const appStoreSecretKeyRegex = /^[A-Z_][A-Z0-9_]{0,252}$/;
|
|
@@ -282,4 +282,4 @@ export const validateAppStoreInstallRequest = async (requestArg, configArg, acti
|
|
|
282
282
|
}
|
|
283
283
|
return errors;
|
|
284
284
|
};
|
|
285
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9hcHBzdG9yZS90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsMENBQTBDLEVBQzFDLHNCQUFzQixFQUN0Qix3QkFBd0IsRUFDeEIsb0NBQW9DLEdBS3JDLE1BQU0sbUJBQW1CLENBQUM7QUFDM0IsT0FBTyxFQUNMLGdDQUFnQyxHQUVqQyxNQUFNLHNCQUFzQixDQUFDO0FBNkM5QixNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRztJQUN2QyxVQUFVLEVBQUUscUJBQXFCO0lBQ2pDLFlBQVksRUFBRSx1QkFBdUI7SUFDckMsZUFBZSxFQUFFLDJCQUEyQjtJQUM1QyxtQkFBbUIsRUFBRSxnQ0FBZ0M7Q0FDN0MsQ0FBQztBQThLWCxNQUFNLHlCQUF5QixHQUFHLGdDQUFnQyxDQUFDO0FBQ25FLE1BQU0sc0JBQXNCLEdBQUcsMEJBQTBCLENBQUM7QUFFMUQsTUFBTSxDQUFDLE1BQU0sc0NBQXNDLEdBQUcsQ0FDcEQsYUFBc0IsRUFDWixFQUFFO0lBQ1osSUFBSSxhQUFhLEtBQUssU0FBUztRQUFFLE9BQU8sRUFBRSxDQUFDO0lBQzNDLElBQUksQ0FBQyxhQUFhLElBQUksT0FBTyxhQUFhLEtBQUssUUFBUSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQztRQUN4RixPQUFPLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBQ0QsTUFBTSxVQUFVLEdBQUcsYUFBd0MsQ0FBQztJQUM1RCxNQUFNLE1BQU0sR0FBYSxFQUFFLENBQUM7SUFDNUIsSUFBSSxPQUFPLFVBQVUsQ0FBQyxZQUFZLEtBQUssUUFBUTtXQUMxQyxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQztXQUN4QyxVQUFVLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7V0FDeEMsVUFBVSxDQUFD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
|
|
285
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9hcHBzdG9yZS90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsMENBQTBDLEVBQzFDLHNCQUFzQixFQUN0Qix3QkFBd0IsRUFDeEIsb0NBQW9DLEdBS3JDLE1BQU0sbUJBQW1CLENBQUM7QUFDM0IsT0FBTyxFQUNMLGdDQUFnQyxHQUVqQyxNQUFNLHNCQUFzQixDQUFDO0FBNkM5QixNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRztJQUN2QyxRQUFRLEVBQUUsa0JBQWtCO0lBQzVCLFVBQVUsRUFBRSxvQkFBb0I7SUFDaEMsYUFBYSxFQUFFLHdCQUF3QjtJQUN2QyxpQkFBaUIsRUFBRSw2QkFBNkI7Q0FDeEMsQ0FBQztBQThLWCxNQUFNLHlCQUF5QixHQUFHLGdDQUFnQyxDQUFDO0FBQ25FLE1BQU0sc0JBQXNCLEdBQUcsMEJBQTBCLENBQUM7QUFFMUQsTUFBTSxDQUFDLE1BQU0sc0NBQXNDLEdBQUcsQ0FDcEQsYUFBc0IsRUFDWixFQUFFO0lBQ1osSUFBSSxhQUFhLEtBQUssU0FBUztRQUFFLE9BQU8sRUFBRSxDQUFDO0lBQzNDLElBQUksQ0FBQyxhQUFhLElBQUksT0FBTyxhQUFhLEtBQUssUUFBUSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQztRQUN4RixPQUFPLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBQ0QsTUFBTSxVQUFVLEdBQUcsYUFBd0MsQ0FBQztJQUM1RCxNQUFNLE1BQU0sR0FBYSxFQUFFLENBQUM7SUFDNUIsSUFBSSxPQUFPLFVBQVUsQ0FBQyxZQUFZLEtBQUssUUFBUTtXQUMxQyxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQztXQUN4QyxVQUFVLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7V0FDeEMsVUFBVSxDQUFD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
|