@serve.zone/interfaces 31.9.0 → 32.0.1

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.
Files changed (203) hide show
  1. package/changelog.md +476 -0
  2. package/dist_ts/00_commitinfo_data.js +3 -3
  3. package/dist_ts/appstore/types.d.ts +4 -6
  4. package/dist_ts/appstore/types.js +5 -5
  5. package/dist_ts/data/backup.d.ts +3 -26
  6. package/dist_ts/data/cluster.d.ts +36 -11
  7. package/dist_ts/data/cluster.js +33 -22
  8. package/dist_ts/data/clusteringress.d.ts +8 -0
  9. package/dist_ts/data/clusteringress.js +13 -8
  10. package/dist_ts/data/clusternode.d.ts +121 -74
  11. package/dist_ts/data/clusternode.js +109 -132
  12. package/dist_ts/data/coremail.d.ts +3 -7
  13. package/dist_ts/data/coremail.js +2 -2
  14. package/dist_ts/data/coremail.runtime.d.ts +0 -1
  15. package/dist_ts/data/coremail.runtime.js +5 -22
  16. package/dist_ts/data/deploymentadoption.d.ts +0 -2
  17. package/dist_ts/data/deploymentadoption.js +40 -6
  18. package/dist_ts/data/deploymentoperation.js +16 -3
  19. package/dist_ts/data/deploymentpreflight.d.ts +0 -2
  20. package/dist_ts/data/deploymentpreflight.js +1 -1
  21. package/dist_ts/data/immutableimage.d.ts +38 -21
  22. package/dist_ts/data/immutableimage.js +45 -5
  23. package/dist_ts/data/index.d.ts +1 -1
  24. package/dist_ts/data/isolatedrestore.d.ts +139 -21
  25. package/dist_ts/data/isolatedrestore.golden.d.ts +0 -1
  26. package/dist_ts/data/isolatedrestore.golden.js +6 -9
  27. package/dist_ts/data/isolatedrestore.js +176 -40
  28. package/dist_ts/data/mail.d.ts +1 -1
  29. package/dist_ts/data/networkaddressplan.d.ts +8 -8
  30. package/dist_ts/data/networkaddressplan.js +4 -4
  31. package/dist_ts/data/networkauthority.d.ts +20 -22
  32. package/dist_ts/data/networkauthority.js +26 -28
  33. package/dist_ts/data/networkcredential.d.ts +10 -10
  34. package/dist_ts/data/networkcredential.js +16 -16
  35. package/dist_ts/data/networkdelivery.d.ts +18 -18
  36. package/dist_ts/data/networkdelivery.js +16 -16
  37. package/dist_ts/data/networklease.d.ts +18 -7
  38. package/dist_ts/data/networklease.js +29 -7
  39. package/dist_ts/data/networknode.d.ts +2 -2
  40. package/dist_ts/data/networkprojection.d.ts +59 -60
  41. package/dist_ts/data/networkprojection.js +53 -57
  42. package/dist_ts/data/networkprotection.d.ts +27 -28
  43. package/dist_ts/data/networkprotection.js +36 -36
  44. package/dist_ts/data/networkrouter.d.ts +11 -11
  45. package/dist_ts/data/networkrouter.js +1 -1
  46. package/dist_ts/data/networksigning.d.ts +16 -18
  47. package/dist_ts/data/networksigning.js +20 -21
  48. package/dist_ts/data/nodecredential.d.ts +4 -6
  49. package/dist_ts/data/nodeenrollment.d.ts +35 -40
  50. package/dist_ts/data/nodeenrollment.js +57 -72
  51. package/dist_ts/data/privatenetwork.d.ts +21 -24
  52. package/dist_ts/data/privatenetwork.js +39 -54
  53. package/dist_ts/data/runtimeassignment.d.ts +50 -34
  54. package/dist_ts/data/runtimeassignment.js +79 -45
  55. package/dist_ts/data/runtimeconfig.d.ts +21 -22
  56. package/dist_ts/data/runtimeconfig.js +24 -24
  57. package/dist_ts/data/runtimesession.d.ts +100 -62
  58. package/dist_ts/data/runtimesession.js +98 -79
  59. package/dist_ts/data/runtimeterminalreceipt.d.ts +28 -29
  60. package/dist_ts/data/runtimeterminalreceipt.js +42 -42
  61. package/dist_ts/data/secret.d.ts +18 -25
  62. package/dist_ts/data/secret.js +12 -52
  63. package/dist_ts/data/servicecredential.d.ts +14 -16
  64. package/dist_ts/data/servicecredential.js +17 -28
  65. package/dist_ts/data/serviceruntime.d.ts +7 -7
  66. package/dist_ts/data/serviceruntime.js +4 -4
  67. package/dist_ts/data/sparknodereport.d.ts +27 -14
  68. package/dist_ts/data/sparknodereport.js +35 -28
  69. package/dist_ts/data/webpush.d.ts +0 -1
  70. package/dist_ts/index.d.ts +2 -1
  71. package/dist_ts/index.js +3 -2
  72. package/dist_ts/platform/objectstorageretention.d.ts +21 -24
  73. package/dist_ts/platform/objectstorageretention.js +10 -17
  74. package/dist_ts/platform/storage.d.ts +1 -3
  75. package/dist_ts/platform/storagemigration.d.ts +0 -7
  76. package/dist_ts/platform/storagemigration.golden.d.ts +0 -1
  77. package/dist_ts/platform/storagemigration.golden.js +8 -12
  78. package/dist_ts/platform/storagemigration.js +6 -51
  79. package/dist_ts/platform/types.d.ts +2 -2
  80. package/dist_ts/private/canonicaljson.d.ts +9 -1
  81. package/dist_ts/private/canonicaljson.js +14 -2
  82. package/dist_ts/private/dataproperties.d.ts +62 -0
  83. package/dist_ts/private/dataproperties.js +117 -0
  84. package/dist_ts/private/networkcontract.d.ts +10 -10
  85. package/dist_ts/private/networkcontract.js +1 -1
  86. package/dist_ts/private/releaseversion.d.ts +37 -0
  87. package/dist_ts/private/releaseversion.js +48 -0
  88. package/dist_ts/private/runtimepolicy.d.ts +2 -2
  89. package/dist_ts/private/runtimepolicy.js +1 -1
  90. package/dist_ts/private/tokenlist.d.ts +9 -0
  91. package/dist_ts/private/tokenlist.js +23 -0
  92. package/dist_ts/protocol.d.ts +137 -0
  93. package/dist_ts/protocol.js +255 -0
  94. package/dist_ts/requests/admin.d.ts +8 -8
  95. package/dist_ts/requests/backup.d.ts +102 -112
  96. package/dist_ts/requests/cluster.d.ts +10 -10
  97. package/dist_ts/requests/clusteringress.d.ts +9 -0
  98. package/dist_ts/requests/clusteringress.js +1 -1
  99. package/dist_ts/requests/config.d.ts +3 -3
  100. package/dist_ts/requests/corestore.d.ts +0 -3
  101. package/dist_ts/requests/corestore.js +5 -9
  102. package/dist_ts/requests/network.d.ts +30 -30
  103. package/dist_ts/requests/node.d.ts +15 -28
  104. package/dist_ts/requests/pallet.d.ts +13 -13
  105. package/dist_ts/requests/runtimesession.d.ts +53 -41
  106. package/dist_ts/requests/secret.d.ts +4 -5
  107. package/dist_ts/requests/secret.js +1 -5
  108. package/dist_ts/runtime.corestore.d.ts +56 -74
  109. package/dist_ts/runtime.corestore.databaseexportpackage.d.ts +30 -36
  110. package/dist_ts/runtime.corestore.databaseexportpackage.golden.d.ts +11 -12
  111. package/dist_ts/runtime.corestore.databaseexportpackage.golden.js +54 -71
  112. package/dist_ts/runtime.corestore.databaseexportpackage.js +9 -25
  113. package/dist_ts/runtime.corestore.js +35 -135
  114. package/dist_ts/runtime.corestore.relay.js +2 -7
  115. package/dist_ts/runtime.d.ts +38 -48
  116. package/dist_ts/runtime.js +20 -77
  117. package/dist_ts/runtime.networkprojection.d.ts +4 -4
  118. package/dist_ts/runtime.networkprojection.js +18 -18
  119. package/dist_ts/runtime.workloadinit.d.ts +23 -24
  120. package/dist_ts/runtime.workloadinit.js +6 -13
  121. package/package.json +2 -2
  122. package/readme.md +421 -270
  123. package/ts/00_commitinfo_data.ts +3 -3
  124. package/ts/appstore/types.ts +4 -6
  125. package/ts/data/backup.ts +3 -38
  126. package/ts/data/cluster.ts +51 -34
  127. package/ts/data/clusteringress.ts +12 -12
  128. package/ts/data/clusternode.ts +204 -232
  129. package/ts/data/coremail.runtime.ts +4 -21
  130. package/ts/data/coremail.ts +3 -7
  131. package/ts/data/deploymentadoption.ts +46 -4
  132. package/ts/data/deploymentoperation.ts +16 -1
  133. package/ts/data/deploymentpreflight.ts +0 -2
  134. package/ts/data/immutableimage.ts +71 -24
  135. package/ts/data/index.ts +1 -1
  136. package/ts/data/isolatedrestore.golden.ts +5 -9
  137. package/ts/data/isolatedrestore.ts +339 -54
  138. package/ts/data/mail.ts +1 -1
  139. package/ts/data/networkaddressplan.ts +13 -13
  140. package/ts/data/networkauthority.ts +42 -46
  141. package/ts/data/networkcredential.ts +24 -24
  142. package/ts/data/networkdelivery.ts +27 -27
  143. package/ts/data/networklease.ts +40 -13
  144. package/ts/data/networknode.ts +2 -2
  145. package/ts/data/networkprojection.ts +119 -124
  146. package/ts/data/networkprotection.ts +54 -55
  147. package/ts/data/networkrouter.ts +14 -14
  148. package/ts/data/networksigning.ts +29 -32
  149. package/ts/data/nodecredential.ts +4 -6
  150. package/ts/data/nodeenrollment.ts +96 -114
  151. package/ts/data/privatenetwork.ts +58 -74
  152. package/ts/data/runtimeassignment.ts +143 -94
  153. package/ts/data/runtimeconfig.ts +45 -46
  154. package/ts/data/runtimesession.ts +185 -138
  155. package/ts/data/runtimeterminalreceipt.ts +72 -73
  156. package/ts/data/secret.ts +28 -76
  157. package/ts/data/servicecredential.ts +33 -43
  158. package/ts/data/serviceruntime.ts +11 -11
  159. package/ts/data/sparknodereport.ts +48 -36
  160. package/ts/data/webpush.ts +0 -1
  161. package/ts/index.ts +2 -0
  162. package/ts/platform/objectstorageretention.ts +40 -54
  163. package/ts/platform/storage.ts +1 -3
  164. package/ts/platform/storagemigration.golden.ts +7 -11
  165. package/ts/platform/storagemigration.ts +5 -55
  166. package/ts/platform/types.ts +2 -2
  167. package/ts/private/canonicaljson.ts +13 -1
  168. package/ts/private/dataproperties.ts +139 -0
  169. package/ts/private/networkcontract.ts +9 -9
  170. package/ts/private/releaseversion.ts +70 -0
  171. package/ts/private/runtimepolicy.ts +2 -2
  172. package/ts/private/tokenlist.ts +30 -0
  173. package/ts/protocol.ts +364 -0
  174. package/ts/requests/admin.ts +11 -11
  175. package/ts/requests/backup.ts +112 -117
  176. package/ts/requests/cluster.ts +13 -13
  177. package/ts/requests/clusteringress.ts +9 -0
  178. package/ts/requests/config.ts +3 -3
  179. package/ts/requests/corestore.ts +4 -16
  180. package/ts/requests/network.ts +40 -40
  181. package/ts/requests/node.ts +21 -38
  182. package/ts/requests/pallet.ts +17 -17
  183. package/ts/requests/runtimesession.ts +63 -51
  184. package/ts/requests/secret.ts +5 -10
  185. package/ts/runtime.corestore.databaseexportpackage.golden.ts +77 -95
  186. package/ts/runtime.corestore.databaseexportpackage.ts +51 -73
  187. package/ts/runtime.corestore.relay.ts +1 -10
  188. package/ts/runtime.corestore.ts +118 -268
  189. package/ts/runtime.networkprojection.ts +30 -30
  190. package/ts/runtime.ts +83 -158
  191. package/ts/runtime.workloadinit.ts +36 -48
  192. package/dist_ts/runtime.cloudlylegacydeploymentsettlement.d.ts +0 -902
  193. package/dist_ts/runtime.cloudlylegacydeploymentsettlement.golden.d.ts +0 -35
  194. package/dist_ts/runtime.cloudlylegacydeploymentsettlement.golden.js +0 -315
  195. package/dist_ts/runtime.cloudlylegacydeploymentsettlement.js +0 -3315
  196. package/dist_ts/runtime.cloudlylegacydeploymentsettlement.offlineexport.d.ts +0 -291
  197. package/dist_ts/runtime.cloudlylegacydeploymentsettlement.offlineexport.golden.d.ts +0 -30
  198. package/dist_ts/runtime.cloudlylegacydeploymentsettlement.offlineexport.golden.js +0 -408
  199. package/dist_ts/runtime.cloudlylegacydeploymentsettlement.offlineexport.js +0 -1126
  200. package/ts/runtime.cloudlylegacydeploymentsettlement.golden.ts +0 -421
  201. package/ts/runtime.cloudlylegacydeploymentsettlement.offlineexport.golden.ts +0 -510
  202. package/ts/runtime.cloudlylegacydeploymentsettlement.offlineexport.ts +0 -2470
  203. package/ts/runtime.cloudlylegacydeploymentsettlement.ts +0 -6630
@@ -1,21 +1,21 @@
1
1
  import type { TSha256Digest } from './immutableimage.js';
2
- import type { IRuntimeAssignmentReferenceV1, IRuntimeAuthorityReferenceV1, IRuntimeControllerV1 } from './runtimeassignment.js';
3
- import { snapshotRuntimeAssignmentV1, validateRuntimeAssignmentV1 } from './runtimeassignment.js';
4
- import type { IRuntimeNetworkHandoffLeaseV1, IRuntimeNetworkProtectedAuthorityV1 } from './networkauthority.js';
5
- import { bindRuntimeNetworkHandoffLeaseV1, computeRuntimeNetworkProtectedAuthorityV1Digest,
6
- snapshotRuntimeNetworkHandoffLeaseV1, snapshotRuntimeNetworkProtectedAuthorityV1 } from './networkauthority.js';
7
- import type { IPrivateNetworkV1, IServicePrivateNetworksV1, IServicePrivateNetworkDnsPolicyV1 } from './privatenetwork.js';
2
+ import type { IRuntimeAssignmentReference, IRuntimeAuthorityReference, IRuntimeController } from './runtimeassignment.js';
3
+ import { snapshotRuntimeAssignment, validateRuntimeAssignment } from './runtimeassignment.js';
4
+ import type { IRuntimeNetworkHandoffLease, IRuntimeNetworkProtectedAuthority } from './networkauthority.js';
5
+ import { bindRuntimeNetworkHandoffLease, computeRuntimeNetworkProtectedAuthorityDigest,
6
+ snapshotRuntimeNetworkHandoffLease, snapshotRuntimeNetworkProtectedAuthority } from './networkauthority.js';
7
+ import type { IPrivateNetwork, IServicePrivateNetworks, IServicePrivateNetworkDnsPolicy } from './privatenetwork.js';
8
8
  import { routerPacketGrantsOf, snapshotRouterProjection,
9
- type IRuntimeNetworkRouterPacketGrantV1, type IRuntimeNetworkRouterProjectionV1 } from './networkrouter.js';
10
- import { buildPrivateNetworkFqdnV1, composeServicePrivateNetworkDnsPolicyV1,
11
- snapshotPrivateNetworkV1, snapshotServicePrivateNetworksV1 } from './privatenetwork.js';
9
+ type IRuntimeNetworkRouterPacketGrant, type IRuntimeNetworkRouterProjection } from './networkrouter.js';
10
+ import { buildPrivateNetworkFqdn, composeServicePrivateNetworkDnsPolicy,
11
+ snapshotPrivateNetwork, snapshotServicePrivateNetworks } from './privatenetwork.js';
12
12
  import { captureNetwork, failNetwork, networkCanonical, networkContains, networkCounter, networkDigest,
13
13
  networkDnsWindow, networkEqual, networkHash, networkId, networkIpv4, networkIpv4Number, networkList, networkMaximumDnsLeaseMs,
14
14
  networkOverlaps, networkPrefixBounds, networkRecord, networkReference, networkReferenceOf, networkRevision, networkSafe,
15
15
  networkSameScope, networkScope, networkSorted, requireNetwork } from '../private/networkcontract.js';
16
16
 
17
- export interface IRuntimeNetworkNodeScopeV1 {
18
- controller: IRuntimeControllerV1;
17
+ export interface IRuntimeNetworkNodeScope {
18
+ controller: IRuntimeController;
19
19
  nodeId: string;
20
20
  runtimeNamespace: string;
21
21
  }
@@ -31,8 +31,7 @@ export interface IRuntimeNetworkDnsWindow {
31
31
  }
32
32
 
33
33
  /** Immutable per-attempt address material. Membership and projection revisions are independent. */
34
- export interface IRuntimeNetworkWorkloadLeaseV1 extends IRuntimeNetworkNodeScopeV1 {
35
- schemaVersion: 1;
34
+ export interface IRuntimeNetworkWorkloadLease extends IRuntimeNetworkNodeScope {
36
35
  id: string;
37
36
  /** Allocation incarnation, not a mutable desired-state revision. */
38
37
  generation: number;
@@ -41,7 +40,7 @@ export interface IRuntimeNetworkWorkloadLeaseV1 extends IRuntimeNetworkNodeScope
41
40
  serviceId: string;
42
41
  replicaId: string;
43
42
  attemptId: string;
44
- protectedAuthority: IRuntimeAuthorityReferenceV1;
43
+ protectedAuthority: IRuntimeAuthorityReference;
45
44
  routerIncarnationId: string;
46
45
  ipv4: {
47
46
  poolId: string;
@@ -61,7 +60,7 @@ export interface IRuntimeNetworkWorkloadLeaseV1 extends IRuntimeNetworkNodeScope
61
60
  * One node-level published port for a workload. Mirrors `IAppStorePublishedPort`
62
61
  * without range fields: the runtime publishes exactly one host port per entry.
63
62
  */
64
- export interface IRuntimeNetworkPublishedPortV1 {
63
+ export interface IRuntimeNetworkPublishedPort {
65
64
  protocol: 'tcp' | 'udp';
66
65
  /** 1..65535 and unique per node across the projection for its protocol. */
67
66
  hostPort: number;
@@ -77,49 +76,47 @@ export interface IRuntimeNetworkPublishedPortV1 {
77
76
  * The Cloudly decision that authorized this port. It is covered by the
78
77
  * projection signature, and a published port without it cannot exist.
79
78
  */
80
- authorization: IRuntimeAuthorityReferenceV1;
79
+ authorization: IRuntimeAuthorityReference;
81
80
  }
82
81
 
83
82
  /**
84
- * Caller-authored published-port request. v1 carries no `hostIp` (an omitted
83
+ * Caller-authored published-port request. It carries no `hostIp` (an omitted
85
84
  * address means the node uplink) and no ranges: exactly one host port per entry.
86
85
  * The `authorization` reference of the resulting projection entry is derived by
87
86
  * Cloudly from the policy revision and digest, never supplied by the caller.
88
87
  */
89
- export interface IRuntimeNetworkPublishedPortRequestV1 {
88
+ export interface IRuntimeNetworkPublishedPortRequest {
90
89
  protocol: 'tcp' | 'udp';
91
90
  hostPort: number;
92
91
  targetPort: number;
93
92
  }
94
93
 
95
94
  /** Current authorized published-port policy for one service. */
96
- export interface IServicePublishedPortsV1 {
97
- schemaVersion: 1;
95
+ export interface IServicePublishedPorts {
98
96
  organizationId: string;
99
97
  serviceId: string;
100
98
  revision: number;
101
99
  /** Sorted by protocol and host port. Empty means the service publishes nothing. */
102
- publishedPorts: IRuntimeNetworkPublishedPortRequestV1[];
100
+ publishedPorts: IRuntimeNetworkPublishedPortRequest[];
103
101
  }
104
102
 
105
103
  /** Exact desired policy. Node-level host-port placement remains Cloudly's decision. */
106
- export interface ISetServicePublishedPortsV1 {
107
- schemaVersion: 1;
104
+ export interface ISetServicePublishedPorts {
108
105
  organizationId: string;
109
106
  serviceId: string;
110
107
  /** Retain the exact body and this identifier across retries. */
111
108
  mutationId: string;
112
109
  /** null means the service has never had a published-port document; not an empty list. */
113
110
  expectedRevision: number | null;
114
- publishedPorts: IRuntimeNetworkPublishedPortRequestV1[];
111
+ publishedPorts: IRuntimeNetworkPublishedPortRequest[];
115
112
  }
116
113
 
117
114
  /** Controller-owned readiness evidence. A signature does not prove this evidence's provenance. */
118
- export interface IRuntimeNetworkEndpointV1 {
119
- lease: IRuntimeNetworkWorkloadLeaseV1;
115
+ export interface IRuntimeNetworkEndpoint {
116
+ lease: IRuntimeNetworkWorkloadLease;
120
117
  ready: boolean;
121
118
  observation: {
122
- assignment: IRuntimeAssignmentReferenceV1;
119
+ assignment: IRuntimeAssignmentReference;
123
120
  reporterSessionId: string;
124
121
  sequence: number;
125
122
  digest: TSha256Digest;
@@ -128,53 +125,55 @@ export interface IRuntimeNetworkEndpointV1 {
128
125
  publicEgress: boolean;
129
126
  platformEndpointIds: string[];
130
127
  /** Sorted by protocol and host port. Absent publishes nothing; a present member is never empty. */
131
- publishedPorts?: IRuntimeNetworkPublishedPortV1[];
128
+ publishedPorts?: IRuntimeNetworkPublishedPort[];
132
129
  }
133
130
 
134
131
  /** Exact directed grant identity; receiver-owned realization resolves the lease to kernel facts. */
135
- export interface IRuntimeNetworkPacketGrantV1 {
136
- source: IRuntimeAuthorityReferenceV1;
132
+ export interface IRuntimeNetworkPacketGrant {
133
+ source: IRuntimeAuthorityReference;
137
134
  destination:
138
- | { kind: 'workload'; lease: IRuntimeAuthorityReferenceV1 }
135
+ | { kind: 'workload'; lease: IRuntimeAuthorityReference }
139
136
  | { kind: 'public' }
140
137
  | { kind: 'platform'; id: string; address: string; protocol: 'tcp' | 'udp'; port: number };
141
138
  }
142
139
 
143
- export interface IRuntimeNetworkProjectionV1 extends IRuntimeNetworkNodeScopeV1 {
144
- schemaVersion: 1;
140
+ export interface IRuntimeNetworkProjection extends IRuntimeNetworkNodeScope {
145
141
  id: string;
146
142
  generation: number;
147
- previous: IRuntimeAuthorityReferenceV1 | null;
148
- protectedAuthority: IRuntimeNetworkProtectedAuthorityV1;
143
+ previous: IRuntimeAuthorityReference | null;
144
+ protectedAuthority: IRuntimeNetworkProtectedAuthority;
149
145
  /** Exact historical authorities needed to authenticate retained allocation material. */
150
- allocationAuthorities: IRuntimeNetworkProtectedAuthorityV1[];
151
- handoff: IRuntimeNetworkHandoffLeaseV1 | null;
146
+ allocationAuthorities: IRuntimeNetworkProtectedAuthority[];
147
+ handoff: IRuntimeNetworkHandoffLease | null;
152
148
  /** COMPLETE relevant definitions, including declared names with no ready replicas. */
153
- networks: IPrivateNetworkV1[];
154
- memberships: IServicePrivateNetworksV1[];
155
- endpoints: IRuntimeNetworkEndpointV1[];
149
+ networks: IPrivateNetwork[];
150
+ memberships: IServicePrivateNetworks[];
151
+ endpoints: IRuntimeNetworkEndpoint[];
156
152
  dns: IRuntimeNetworkDnsWindow;
157
153
  /** Explicit denial intent. Carry until the exact predecessor's application is proven. */
158
- withdrawals: IRuntimeNetworkPacketGrantV1[];
159
- retiredLeases: IRuntimeAuthorityReferenceV1[];
160
- retiredHandoffs: IRuntimeAuthorityReferenceV1[];
161
- /** Absent in existing persisted V1 projections: no router-origin authority. */
162
- router?: IRuntimeNetworkRouterProjectionV1;
154
+ withdrawals: IRuntimeNetworkPacketGrant[];
155
+ retiredLeases: IRuntimeAuthorityReference[];
156
+ retiredHandoffs: IRuntimeAuthorityReference[];
157
+ /**
158
+ * Omitted when the issuer selects no router-origin egress; its absence keeps the
159
+ * projection's canonical bytes and grants no router-origin flows.
160
+ */
161
+ router?: IRuntimeNetworkRouterProjection;
163
162
  digest: TSha256Digest;
164
163
  }
165
164
 
166
- export interface IRuntimeNetworkDnsViewV1 {
167
- source: IRuntimeAuthorityReferenceV1;
165
+ export interface IRuntimeNetworkDnsView {
166
+ source: IRuntimeAuthorityReference;
168
167
  sourceAddress: string;
169
168
  dnsServer: string;
170
- policy: IServicePrivateNetworkDnsPolicyV1;
169
+ policy: IServicePrivateNetworkDnsPolicy;
171
170
  /** Sorted complete A sets; [] is declared NODATA, never an omitted name. AAAA is NODATA. */
172
171
  records: Array<{ name: string; addresses: string[] }>;
173
172
  }
174
173
 
175
- export const runtimeNetworkProjectionV1Contract = Object.freeze({
176
- workloadDigestDomain: 'serve.zone/runtime-network-workload-lease-v1',
177
- projectionDigestDomain: 'serve.zone/runtime-network-projection-v1',
174
+ export const runtimeNetworkProjectionContract = Object.freeze({
175
+ workloadDigestDomain: 'serve.zone/runtime-network-workload-lease',
176
+ projectionDigestDomain: 'serve.zone/runtime-network-projection',
178
177
  maximumCanonicalBytes: 917_504,
179
178
  maximumAllocationAuthorities: 16,
180
179
  maximumNetworks: 128,
@@ -193,19 +192,18 @@ export const runtimeNetworkProjectionV1Contract = Object.freeze({
193
192
  } as const);
194
193
 
195
194
  const ownerKey = (value: { organizationId: string; serviceId: string }): string => networkCanonical([value.organizationId, value.serviceId]);
196
- const attemptKey = (value: IRuntimeNetworkWorkloadLeaseV1): string =>
195
+ const attemptKey = (value: IRuntimeNetworkWorkloadLease): string =>
197
196
  networkCanonical([value.organizationId, value.serviceId, value.replicaId, value.attemptId]);
198
- const refKey = (value: IRuntimeAuthorityReferenceV1): string => networkCanonical(networkReferenceOf(value));
199
- const sortedReferences = (value: unknown): IRuntimeAuthorityReferenceV1[] =>
197
+ const refKey = (value: IRuntimeAuthorityReference): string => networkCanonical(networkReferenceOf(value));
198
+ const sortedReferences = (value: unknown): IRuntimeAuthorityReference[] =>
200
199
  networkSorted(networkList(value, 256, networkReference), refKey);
201
200
 
202
- export const snapshotRuntimeNetworkNodeScopeV1 = (value: unknown): IRuntimeNetworkNodeScopeV1 => networkSafe(() =>
201
+ export const snapshotRuntimeNetworkNodeScope = (value: unknown): IRuntimeNetworkNodeScope => networkSafe(() =>
203
202
  networkScope(networkRecord(captureNetwork(value), ['controller', 'nodeId', 'runtimeNamespace'])));
204
203
 
205
- export const snapshotRuntimeNetworkWorkloadLeaseV1 = (value: unknown): IRuntimeNetworkWorkloadLeaseV1 => networkSafe(() => {
206
- const item = networkRecord(captureNetwork(value), ['schemaVersion', 'id', 'generation', 'controller', 'nodeId', 'runtimeNamespace',
204
+ export const snapshotRuntimeNetworkWorkloadLease = (value: unknown): IRuntimeNetworkWorkloadLease => networkSafe(() => {
205
+ const item = networkRecord(captureNetwork(value), ['id', 'generation', 'controller', 'nodeId', 'runtimeNamespace',
207
206
  'organizationId', 'assignmentId', 'serviceId', 'replicaId', 'attemptId', 'protectedAuthority', 'routerIncarnationId', 'ipv4', 'dnsServer', 'digest']);
208
- requireNetwork(item.schemaVersion === 1);
209
207
  const ip = networkRecord(item.ipv4, ['poolId', 'linkSubnet', 'address', 'sourcePrefix', 'gateway']);
210
208
  requireNetwork(typeof ip.linkSubnet === 'string' && ip.linkSubnet.length <= 18);
211
209
  const pieces = ip.linkSubnet.split('/');
@@ -220,17 +218,17 @@ export const snapshotRuntimeNetworkWorkloadLeaseV1 = (value: unknown): IRuntimeN
220
218
  requireNetwork(number >= low && number <= high && (high - low === 1 || (number !== low && number !== high)));
221
219
  }
222
220
  requireNetwork(item.dnsServer === gateway);
223
- return { schemaVersion: 1, id: networkId(item.id), generation: networkCounter(item.generation), ...networkScope(item),
221
+ return { id: networkId(item.id), generation: networkCounter(item.generation), ...networkScope(item),
224
222
  organizationId: networkId(item.organizationId), assignmentId: networkId(item.assignmentId), serviceId: networkId(item.serviceId),
225
223
  replicaId: networkId(item.replicaId), attemptId: networkId(item.attemptId), protectedAuthority: networkReference(item.protectedAuthority),
226
224
  routerIncarnationId: networkId(item.routerIncarnationId), ipv4: { poolId: networkId(ip.poolId), linkSubnet: ip.linkSubnet,
227
225
  address, sourcePrefix: ip.sourcePrefix, gateway }, dnsServer: gateway, digest: networkDigest(item.digest) };
228
226
  });
229
227
 
230
- export const computeRuntimeNetworkWorkloadLeaseV1Digest = (value: IRuntimeNetworkWorkloadLeaseV1): Promise<TSha256Digest> =>
231
- networkHash(runtimeNetworkProjectionV1Contract.workloadDigestDomain, snapshotRuntimeNetworkWorkloadLeaseV1(value));
228
+ export const computeRuntimeNetworkWorkloadLeaseDigest = (value: IRuntimeNetworkWorkloadLease): Promise<TSha256Digest> =>
229
+ networkHash(runtimeNetworkProjectionContract.workloadDigestDomain, snapshotRuntimeNetworkWorkloadLease(value));
232
230
 
233
- const packetGrant = (value: unknown): IRuntimeNetworkPacketGrantV1 => {
231
+ const packetGrant = (value: unknown): IRuntimeNetworkPacketGrant => {
234
232
  const item = networkRecord(value, ['source', 'destination']);
235
233
  requireNetwork(item.destination !== null && typeof item.destination === 'object');
236
234
  const kind = (item.destination as Record<string, unknown>).kind;
@@ -251,7 +249,7 @@ const packetGrant = (value: unknown): IRuntimeNetworkPacketGrantV1 => {
251
249
  };
252
250
  const publishedPortKey = (value: { protocol: 'tcp' | 'udp'; hostPort: number }): string =>
253
251
  `${value.protocol}/${String(value.hostPort).padStart(5, '0')}`;
254
- const publishedPort = (value: unknown): IRuntimeNetworkPublishedPortV1 => {
252
+ const publishedPort = (value: unknown): IRuntimeNetworkPublishedPort => {
255
253
  const hasHostIp = value !== null && typeof value === 'object' && Object.hasOwn(value, 'hostIp');
256
254
  const item = networkRecord(value, ['protocol', 'hostPort', 'targetPort', 'authorization', ...(hasHostIp ? ['hostIp'] : [])]);
257
255
  requireNetwork(item.protocol === 'tcp' || item.protocol === 'udp');
@@ -260,41 +258,39 @@ const publishedPort = (value: unknown): IRuntimeNetworkPublishedPortV1 => {
260
258
  return { protocol: item.protocol, hostPort: networkCounter(item.hostPort, 65535), targetPort: networkCounter(item.targetPort, 65535),
261
259
  ...(hostIp === null ? {} : { hostIp }), authorization: networkReference(item.authorization) };
262
260
  };
263
- const publishedPorts = (value: unknown): IRuntimeNetworkPublishedPortV1[] => {
261
+ const publishedPorts = (value: unknown): IRuntimeNetworkPublishedPort[] => {
264
262
  const ports = networkSorted(networkList(value, 64, publishedPort), publishedPortKey);
265
263
  requireNetwork(ports.length > 0); return ports;
266
264
  };
267
- const publishedPortRequest = (value: unknown): IRuntimeNetworkPublishedPortRequestV1 => {
265
+ const publishedPortRequest = (value: unknown): IRuntimeNetworkPublishedPortRequest => {
268
266
  const item = networkRecord(value, ['protocol', 'hostPort', 'targetPort']);
269
267
  requireNetwork(item.protocol === 'tcp' || item.protocol === 'udp');
270
268
  return { protocol: item.protocol, hostPort: networkCounter(item.hostPort, 65535), targetPort: networkCounter(item.targetPort, 65535) };
271
269
  };
272
- const publishedPortRequests = (value: unknown): IRuntimeNetworkPublishedPortRequestV1[] =>
270
+ const publishedPortRequests = (value: unknown): IRuntimeNetworkPublishedPortRequest[] =>
273
271
  networkSorted(networkList(value, 64, publishedPortRequest), publishedPortKey);
274
272
 
275
273
  /** Structural snapshot only; node placement, quota and authorization remain Cloudly's decision. */
276
- export const snapshotServicePublishedPortsV1 = (value: unknown): IServicePublishedPortsV1 => networkSafe(() => {
277
- const item = networkRecord(value, ['schemaVersion', 'organizationId', 'serviceId', 'revision', 'publishedPorts']);
278
- requireNetwork(item.schemaVersion === 1);
279
- return { schemaVersion: 1, organizationId: networkId(item.organizationId), serviceId: networkId(item.serviceId),
274
+ export const snapshotServicePublishedPorts = (value: unknown): IServicePublishedPorts => networkSafe(() => {
275
+ const item = networkRecord(value, ['organizationId', 'serviceId', 'revision', 'publishedPorts']);
276
+ return { organizationId: networkId(item.organizationId), serviceId: networkId(item.serviceId),
280
277
  revision: networkCounter(item.revision), publishedPorts: publishedPortRequests(item.publishedPorts) };
281
278
  });
282
279
 
283
- export const snapshotSetServicePublishedPortsV1 = (value: unknown): ISetServicePublishedPortsV1 => networkSafe(() => {
284
- const item = networkRecord(value, ['schemaVersion', 'organizationId', 'serviceId', 'mutationId', 'expectedRevision', 'publishedPorts']);
285
- requireNetwork(item.schemaVersion === 1);
286
- return { schemaVersion: 1, organizationId: networkId(item.organizationId), serviceId: networkId(item.serviceId),
280
+ export const snapshotSetServicePublishedPorts = (value: unknown): ISetServicePublishedPorts => networkSafe(() => {
281
+ const item = networkRecord(value, ['organizationId', 'serviceId', 'mutationId', 'expectedRevision', 'publishedPorts']);
282
+ return { organizationId: networkId(item.organizationId), serviceId: networkId(item.serviceId),
287
283
  mutationId: networkId(item.mutationId), expectedRevision: item.expectedRevision === null ? null : networkCounter(item.expectedRevision),
288
284
  publishedPorts: publishedPortRequests(item.publishedPorts) };
289
285
  });
290
286
 
291
- const endpoint = (value: unknown): IRuntimeNetworkEndpointV1 => {
287
+ const endpoint = (value: unknown): IRuntimeNetworkEndpoint => {
292
288
  const hasPublishedPorts = value !== null && typeof value === 'object' && Object.hasOwn(value, 'publishedPorts');
293
289
  const item = networkRecord(value, ['lease', 'ready', 'observation', 'publicEgress', 'platformEndpointIds',
294
290
  ...(hasPublishedPorts ? ['publishedPorts'] : [])]);
295
291
  requireNetwork(typeof item.ready === 'boolean' && typeof item.publicEgress === 'boolean');
296
- const lease = snapshotRuntimeNetworkWorkloadLeaseV1(item.lease);
297
- let observation: IRuntimeNetworkEndpointV1['observation'] = null;
292
+ const lease = snapshotRuntimeNetworkWorkloadLease(item.lease);
293
+ let observation: IRuntimeNetworkEndpoint['observation'] = null;
298
294
  if (item.observation !== null) {
299
295
  const observed = networkRecord(item.observation, ['assignment', 'reporterSessionId', 'sequence', 'digest']);
300
296
  const assignment = networkRecord(observed.assignment, ['assignmentId', 'generation', 'digest']);
@@ -309,30 +305,29 @@ const endpoint = (value: unknown): IRuntimeNetworkEndpointV1 => {
309
305
  };
310
306
 
311
307
  /** Structural snapshot only; use validate/signature/admission helpers before accepting authority. */
312
- export const snapshotRuntimeNetworkProjectionV1 = (value: unknown): IRuntimeNetworkProjectionV1 => networkSafe(() => {
308
+ export const snapshotRuntimeNetworkProjection = (value: unknown): IRuntimeNetworkProjection => networkSafe(() => {
313
309
  const captured = captureNetwork(value);
314
- requireNetwork(new TextEncoder().encode(networkCanonical(captured)).length <= runtimeNetworkProjectionV1Contract.maximumCanonicalBytes);
310
+ requireNetwork(new TextEncoder().encode(networkCanonical(captured)).length <= runtimeNetworkProjectionContract.maximumCanonicalBytes);
315
311
  const hasRouter = captured !== null && typeof captured === 'object' && Object.hasOwn(captured, 'router');
316
- const item = networkRecord(captured, ['schemaVersion', 'id', 'generation', 'previous', 'controller', 'nodeId', 'runtimeNamespace',
312
+ const item = networkRecord(captured, ['id', 'generation', 'previous', 'controller', 'nodeId', 'runtimeNamespace',
317
313
  'protectedAuthority', 'allocationAuthorities', 'handoff', 'networks', 'memberships', 'endpoints', 'dns', 'withdrawals', 'retiredLeases', 'retiredHandoffs', 'digest',
318
314
  ...(hasRouter ? ['router'] : [])]);
319
- requireNetwork(item.schemaVersion === 1);
320
- return { schemaVersion: 1, ...networkRevision(item), ...networkScope(item),
321
- protectedAuthority: snapshotRuntimeNetworkProtectedAuthorityV1(item.protectedAuthority),
322
- allocationAuthorities: networkSorted(networkList(item.allocationAuthorities, 16, snapshotRuntimeNetworkProtectedAuthorityV1), refKey),
323
- handoff: item.handoff === null ? null : snapshotRuntimeNetworkHandoffLeaseV1(item.handoff),
324
- networks: networkSorted(networkList(item.networks, 128, snapshotPrivateNetworkV1), value => value.id),
325
- memberships: networkSorted(networkList(item.memberships, 256, snapshotServicePrivateNetworksV1), ownerKey),
315
+ return { ...networkRevision(item), ...networkScope(item),
316
+ protectedAuthority: snapshotRuntimeNetworkProtectedAuthority(item.protectedAuthority),
317
+ allocationAuthorities: networkSorted(networkList(item.allocationAuthorities, 16, snapshotRuntimeNetworkProtectedAuthority), refKey),
318
+ handoff: item.handoff === null ? null : snapshotRuntimeNetworkHandoffLease(item.handoff),
319
+ networks: networkSorted(networkList(item.networks, 128, snapshotPrivateNetwork), value => value.id),
320
+ memberships: networkSorted(networkList(item.memberships, 256, snapshotServicePrivateNetworks), ownerKey),
326
321
  endpoints: networkSorted(networkList(item.endpoints, 256, endpoint), value => value.lease.id), dns: networkDnsWindow(item.dns),
327
322
  withdrawals: networkSorted(networkList(item.withdrawals, 4096, packetGrant), networkCanonical),
328
323
  ...(hasRouter ? { router: snapshotRouterProjection(item.router) } : {}),
329
324
  retiredLeases: sortedReferences(item.retiredLeases), retiredHandoffs: sortedReferences(item.retiredHandoffs), digest: networkDigest(item.digest) };
330
325
  });
331
326
 
332
- const grantsOf = (projection: IRuntimeNetworkProjectionV1): IRuntimeNetworkPacketGrantV1[] => {
333
- const result: IRuntimeNetworkPacketGrantV1[] = [];
327
+ const grantsOf = (projection: IRuntimeNetworkProjection): IRuntimeNetworkPacketGrant[] => {
328
+ const result: IRuntimeNetworkPacketGrant[] = [];
334
329
  const memberships = new Map(projection.memberships.map(member => [ownerKey(member), member]));
335
- const append = (grant: IRuntimeNetworkPacketGrantV1) => {
330
+ const append = (grant: IRuntimeNetworkPacketGrant) => {
336
331
  requireNetwork(result.length < 4096); result.push(grant);
337
332
  };
338
333
  for (const source of projection.endpoints) {
@@ -355,26 +350,26 @@ const grantsOf = (projection: IRuntimeNetworkProjectionV1): IRuntimeNetworkPacke
355
350
  return result.sort((left, right) => networkCanonical(left) < networkCanonical(right) ? -1 : 1);
356
351
  };
357
352
 
358
- export const computeRuntimeNetworkProjectionV1Digest = (value: IRuntimeNetworkProjectionV1): Promise<TSha256Digest> =>
359
- networkHash(runtimeNetworkProjectionV1Contract.projectionDigestDomain, snapshotRuntimeNetworkProjectionV1(value));
353
+ export const computeRuntimeNetworkProjectionDigest = (value: IRuntimeNetworkProjection): Promise<TSha256Digest> =>
354
+ networkHash(runtimeNetworkProjectionContract.projectionDigestDomain, snapshotRuntimeNetworkProjection(value));
360
355
 
361
356
  /** Complete structural, digest, allocation and policy binding. Not an allocation/barrier/readiness proof. */
362
- export const validateRuntimeNetworkProjectionV1 = async (value: unknown): Promise<IRuntimeNetworkProjectionV1> => {
357
+ export const validateRuntimeNetworkProjection = async (value: unknown): Promise<IRuntimeNetworkProjection> => {
363
358
  try {
364
- const projection = snapshotRuntimeNetworkProjectionV1(value), current = projection.protectedAuthority;
359
+ const projection = snapshotRuntimeNetworkProjection(value), current = projection.protectedAuthority;
365
360
  requireNetwork(networkEqual(current.controller, projection.controller) && current.egressAuthorities.some(owner =>
366
361
  owner.nodeId === projection.nodeId && owner.runtimeNamespace === projection.runtimeNamespace));
367
362
  const authorities = [current, ...projection.allocationAuthorities];
368
363
  requireNetwork(new Set(authorities.map(refKey)).size === authorities.length);
369
364
  for (const authority of authorities) {
370
365
  requireNetwork(networkEqual(authority.controller, projection.controller)
371
- && authority.digest === await computeRuntimeNetworkProtectedAuthorityV1Digest(authority));
366
+ && authority.digest === await computeRuntimeNetworkProtectedAuthorityDigest(authority));
372
367
  }
373
- const allocationAuthority = (reference: IRuntimeAuthorityReferenceV1) => {
368
+ const allocationAuthority = (reference: IRuntimeAuthorityReference) => {
374
369
  const result = authorities.find(authority => networkEqual(networkReferenceOf(authority), reference)); requireNetwork(result); return result;
375
370
  };
376
371
  if (projection.handoff !== null) {
377
- await bindRuntimeNetworkHandoffLeaseV1(projection.handoff, allocationAuthority(projection.handoff.protectedAuthority));
372
+ await bindRuntimeNetworkHandoffLease(projection.handoff, allocationAuthority(projection.handoff.protectedAuthority));
378
373
  requireNetwork(networkSameScope(projection.handoff, projection));
379
374
  requireNetwork(current.pools.some(pool => pool.id === projection.handoff!.transit.poolId && pool.purpose === 'transit'
380
375
  && networkContains(pool.prefix, projection.handoff!.transit.prefix)));
@@ -394,9 +389,9 @@ export const validateRuntimeNetworkProjectionV1 = async (value: unknown): Promis
394
389
  }
395
390
  const members = new Map(projection.memberships.map(member => [ownerKey(member), member])), aliases = new Set<string>();
396
391
  for (const member of projection.memberships) {
397
- composeServicePrivateNetworkDnsPolicyV1(member, member.attachments.map(attachment => networks.get(attachment.networkId)));
392
+ composeServicePrivateNetworkDnsPolicy(member, member.attachments.map(attachment => networks.get(attachment.networkId)));
398
393
  for (const attachment of member.attachments) for (const alias of attachment.aliases) {
399
- const name = buildPrivateNetworkFqdnV1(networks.get(attachment.networkId), alias);
394
+ const name = buildPrivateNetworkFqdn(networks.get(attachment.networkId), alias);
400
395
  requireNetwork(!aliases.has(name)); aliases.add(name);
401
396
  }
402
397
  }
@@ -410,7 +405,7 @@ export const validateRuntimeNetworkProjectionV1 = async (value: unknown): Promis
410
405
  const replica = networkCanonical([lease.organizationId, lease.serviceId, lease.replicaId]);
411
406
  requireNetwork(!readyReplicas.has(replica)); readyReplicas.add(replica);
412
407
  }
413
- requireNetwork(lease.digest === await computeRuntimeNetworkWorkloadLeaseV1Digest(lease));
408
+ requireNetwork(lease.digest === await computeRuntimeNetworkWorkloadLeaseDigest(lease));
414
409
  requireNetwork(authority.egressAuthorities.some(owner => owner.nodeId === lease.nodeId && owner.runtimeNamespace === lease.runtimeNamespace)
415
410
  && current.egressAuthorities.some(owner => owner.nodeId === lease.nodeId && owner.runtimeNamespace === lease.runtimeNamespace));
416
411
  for (const protection of [authority, current]) requireNetwork(protection.pools.some(pool =>
@@ -431,27 +426,27 @@ export const validateRuntimeNetworkProjectionV1 = async (value: unknown): Promis
431
426
  requireNetwork(projection.withdrawals.every(grant => !grants.has(networkCanonical(grant))));
432
427
  const routerGrants = new Set(routerPacketGrantsOf(projection).map(networkCanonical));
433
428
  requireNetwork((projection.router?.withdrawals ?? []).every(grant => !routerGrants.has(networkCanonical(grant))));
434
- requireNetwork(projection.digest === await computeRuntimeNetworkProjectionV1Digest(projection));
429
+ requireNetwork(projection.digest === await computeRuntimeNetworkProjectionDigest(projection));
435
430
  return projection;
436
431
  } catch { return failNetwork(); }
437
432
  };
438
433
 
439
434
  /** Complete directed full-mesh and explicitly authorized egress; no DNS readiness dependency. */
440
- export const getRuntimeNetworkProjectionPacketGrantsV1 = async (value: unknown): Promise<IRuntimeNetworkPacketGrantV1[]> =>
441
- grantsOf(await validateRuntimeNetworkProjectionV1(value));
435
+ export const getRuntimeNetworkProjectionPacketGrants = async (value: unknown): Promise<IRuntimeNetworkPacketGrant[]> =>
436
+ grantsOf(await validateRuntimeNetworkProjection(value));
442
437
 
443
438
  /** Router-origin authority comes only from explicit signed selections, never DNS names or workload grants. */
444
- export const getRuntimeNetworkProjectionRouterPacketGrantsV1 = async (value: unknown): Promise<IRuntimeNetworkRouterPacketGrantV1[]> =>
445
- routerPacketGrantsOf(await validateRuntimeNetworkProjectionV1(value));
439
+ export const getRuntimeNetworkProjectionRouterPacketGrants = async (value: unknown): Promise<IRuntimeNetworkRouterPacketGrant[]> =>
440
+ routerPacketGrantsOf(await validateRuntimeNetworkProjection(value));
446
441
 
447
442
  /** Complete offline DNS material, including authorized names never previously queried. */
448
443
  /** Select exact local receivers before expansion; all targets still come from
449
444
  * the complete validated projection. Selection supplies no attachment authority. */
450
- export const composeRuntimeNetworkProjectionDnsViewsV1 = async (
451
- value: unknown, sourcesValue?: readonly IRuntimeAuthorityReferenceV1[],
452
- ): Promise<IRuntimeNetworkDnsViewV1[]> => {
445
+ export const composeRuntimeNetworkProjectionDnsViews = async (
446
+ value: unknown, sourcesValue?: readonly IRuntimeAuthorityReference[],
447
+ ): Promise<IRuntimeNetworkDnsView[]> => {
453
448
  const selected = sourcesValue === undefined ? null : networkList(captureNetwork(sourcesValue), 256, networkReference);
454
- const projection = await validateRuntimeNetworkProjectionV1(value);
449
+ const projection = await validateRuntimeNetworkProjection(value);
455
450
  const local = projection.endpoints.filter(endpoint => networkSameScope(endpoint.lease, projection));
456
451
  if (selected !== null) {
457
452
  requireNetwork(new Set(selected.map(source => source.id)).size === selected.length);
@@ -461,15 +456,15 @@ export const composeRuntimeNetworkProjectionDnsViewsV1 = async (
461
456
  const members = new Map(projection.memberships.map(member => [ownerKey(member), member]));
462
457
  return local.filter(endpoint => selected === null || selected.some(source => networkEqual(networkReferenceOf(endpoint.lease), source))).map(endpoint => {
463
458
  const member = members.get(ownerKey(endpoint.lease))!;
464
- const policy = composeServicePrivateNetworkDnsPolicyV1(member, member.attachments.map(attachment => networks.get(attachment.networkId)));
465
- const records: IRuntimeNetworkDnsViewV1['records'] = [];
459
+ const policy = composeServicePrivateNetworkDnsPolicy(member, member.attachments.map(attachment => networks.get(attachment.networkId)));
460
+ const records: IRuntimeNetworkDnsView['records'] = [];
466
461
  for (const target of projection.memberships) {
467
462
  if (target.organizationId !== member.organizationId) continue;
468
463
  const addresses = projection.endpoints.filter(candidate => candidate.ready && ownerKey(candidate.lease) === ownerKey(target))
469
464
  .map(candidate => candidate.lease.ipv4.address).sort();
470
465
  for (const attachment of target.attachments) {
471
466
  if (!member.attachments.some(own => own.networkId === attachment.networkId)) continue;
472
- for (const alias of attachment.aliases) records.push({ name: buildPrivateNetworkFqdnV1(networks.get(attachment.networkId), alias), addresses: [...addresses] });
467
+ for (const alias of attachment.aliases) records.push({ name: buildPrivateNetworkFqdn(networks.get(attachment.networkId), alias), addresses: [...addresses] });
473
468
  }
474
469
  }
475
470
  records.sort((left, right) => left.name < right.name ? -1 : 1);
@@ -478,14 +473,14 @@ export const composeRuntimeNetworkProjectionDnsViewsV1 = async (
478
473
  };
479
474
 
480
475
  /** Bind immutable address material without a circular assignment-digest dependency. */
481
- export const bindRuntimeNetworkWorkloadLeaseToAssignmentV1 = async (leaseValue: unknown, assignmentValue: unknown): Promise<IRuntimeNetworkWorkloadLeaseV1> => {
476
+ export const bindRuntimeNetworkWorkloadLeaseToAssignment = async (leaseValue: unknown, assignmentValue: unknown): Promise<IRuntimeNetworkWorkloadLease> => {
482
477
  try {
483
- const lease = snapshotRuntimeNetworkWorkloadLeaseV1(leaseValue), assignment = snapshotRuntimeAssignmentV1(assignmentValue);
484
- requireNetwork((await validateRuntimeAssignmentV1(assignment)).length === 0 && networkSameScope(lease, assignment)
478
+ const lease = snapshotRuntimeNetworkWorkloadLease(leaseValue), assignment = snapshotRuntimeAssignment(assignmentValue);
479
+ requireNetwork((await validateRuntimeAssignment(assignment)).length === 0 && networkSameScope(lease, assignment)
485
480
  && lease.organizationId === assignment.organizationId && lease.assignmentId === assignment.assignmentId
486
481
  && lease.serviceId === assignment.serviceId && lease.replicaId === assignment.replicaId && lease.attemptId === assignment.attemptId
487
482
  && networkEqual(networkReferenceOf(lease), assignment.workload.network)
488
- && lease.digest === await computeRuntimeNetworkWorkloadLeaseV1Digest(lease));
483
+ && lease.digest === await computeRuntimeNetworkWorkloadLeaseDigest(lease));
489
484
  return lease;
490
485
  } catch { return failNetwork(); }
491
486
  };
@@ -495,16 +490,16 @@ export const bindRuntimeNetworkWorkloadLeaseToAssignmentV1 = async (leaseValue:
495
490
  * joined application receipt, never an incoming ACK field. All prior accepted
496
491
  * material/apply journals survive until effects and DNS/allocation quarantine end.
497
492
  */
498
- export const admitRuntimeNetworkProjectionV1 = async (
493
+ export const admitRuntimeNetworkProjection = async (
499
494
  value: unknown, previousValue: unknown | null, trustedScopeValue: unknown, appliedPreviousValue: unknown | null,
500
- ): Promise<{ status: 'accepted' | 'replay'; projection: IRuntimeNetworkProjectionV1 }> => {
495
+ ): Promise<{ status: 'accepted' | 'replay'; projection: IRuntimeNetworkProjection }> => {
501
496
  try {
502
497
  // Snapshot ALL caller-owned inputs before the first asynchronous operation.
503
- const incoming = snapshotRuntimeNetworkProjectionV1(value);
504
- const previousInput = previousValue === null ? null : snapshotRuntimeNetworkProjectionV1(previousValue);
505
- const trusted = snapshotRuntimeNetworkNodeScopeV1(trustedScopeValue);
498
+ const incoming = snapshotRuntimeNetworkProjection(value);
499
+ const previousInput = previousValue === null ? null : snapshotRuntimeNetworkProjection(previousValue);
500
+ const trusted = snapshotRuntimeNetworkNodeScope(trustedScopeValue);
506
501
  const applied = appliedPreviousValue === null ? null : networkReference(captureNetwork(appliedPreviousValue));
507
- const projection = await validateRuntimeNetworkProjectionV1(incoming);
502
+ const projection = await validateRuntimeNetworkProjection(incoming);
508
503
  requireNetwork(networkSameScope(projection, trusted));
509
504
  if (previousInput === null) {
510
505
  requireNetwork(projection.generation === 1 && applied === null && projection.withdrawals.length === 0
@@ -512,7 +507,7 @@ export const admitRuntimeNetworkProjectionV1 = async (
512
507
  && projection.retiredLeases.length === 0 && projection.retiredHandoffs.length === 0);
513
508
  return { status: 'accepted', projection };
514
509
  }
515
- const previous = await validateRuntimeNetworkProjectionV1(previousInput);
510
+ const previous = await validateRuntimeNetworkProjection(previousInput);
516
511
  requireNetwork(networkSameScope(previous, trusted) && previous.id === projection.id);
517
512
  requireNetwork(applied === null || networkEqual(applied, networkReferenceOf(previous)));
518
513
  if (projection.generation === previous.generation) {
@@ -548,7 +543,7 @@ export const admitRuntimeNetworkProjectionV1 = async (
548
543
  const knownHandoffs = [...(previous.handoff ? [networkReferenceOf(previous.handoff)] : []), ...previous.retiredHandoffs];
549
544
  requireNetwork(projection.retiredLeases.every(retired => knownLeases.some(known => networkEqual(known, retired)))
550
545
  && projection.retiredHandoffs.every(retired => knownHandoffs.some(known => networkEqual(known, retired))));
551
- const requireCarried = (old: IRuntimeAuthorityReferenceV1[], next: IRuntimeAuthorityReferenceV1[]) => {
546
+ const requireCarried = (old: IRuntimeAuthorityReference[], next: IRuntimeAuthorityReference[]) => {
552
547
  for (const reference of old) requireNetwork(next.some(item => networkEqual(item, reference)));
553
548
  };
554
549
  if (applied === null) {