@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.
Files changed (204) hide show
  1. package/.smartconfig.json +1 -0
  2. package/changelog.md +467 -0
  3. package/dist_ts/00_commitinfo_data.js +3 -3
  4. package/dist_ts/appstore/types.d.ts +4 -6
  5. package/dist_ts/appstore/types.js +5 -5
  6. package/dist_ts/data/backup.d.ts +3 -26
  7. package/dist_ts/data/cluster.d.ts +36 -11
  8. package/dist_ts/data/cluster.js +33 -22
  9. package/dist_ts/data/clusteringress.d.ts +8 -0
  10. package/dist_ts/data/clusteringress.js +13 -8
  11. package/dist_ts/data/clusternode.d.ts +121 -74
  12. package/dist_ts/data/clusternode.js +109 -132
  13. package/dist_ts/data/coremail.d.ts +3 -7
  14. package/dist_ts/data/coremail.js +2 -2
  15. package/dist_ts/data/coremail.runtime.d.ts +0 -1
  16. package/dist_ts/data/coremail.runtime.js +5 -22
  17. package/dist_ts/data/deploymentadoption.d.ts +0 -2
  18. package/dist_ts/data/deploymentadoption.js +40 -6
  19. package/dist_ts/data/deploymentoperation.js +16 -3
  20. package/dist_ts/data/deploymentpreflight.d.ts +0 -2
  21. package/dist_ts/data/deploymentpreflight.js +1 -1
  22. package/dist_ts/data/immutableimage.d.ts +38 -21
  23. package/dist_ts/data/immutableimage.js +45 -5
  24. package/dist_ts/data/index.d.ts +1 -1
  25. package/dist_ts/data/isolatedrestore.d.ts +139 -21
  26. package/dist_ts/data/isolatedrestore.golden.d.ts +0 -1
  27. package/dist_ts/data/isolatedrestore.golden.js +6 -9
  28. package/dist_ts/data/isolatedrestore.js +176 -40
  29. package/dist_ts/data/mail.d.ts +1 -1
  30. package/dist_ts/data/networkaddressplan.d.ts +8 -8
  31. package/dist_ts/data/networkaddressplan.js +4 -4
  32. package/dist_ts/data/networkauthority.d.ts +20 -22
  33. package/dist_ts/data/networkauthority.js +26 -28
  34. package/dist_ts/data/networkcredential.d.ts +10 -10
  35. package/dist_ts/data/networkcredential.js +16 -16
  36. package/dist_ts/data/networkdelivery.d.ts +18 -18
  37. package/dist_ts/data/networkdelivery.js +16 -16
  38. package/dist_ts/data/networklease.d.ts +18 -7
  39. package/dist_ts/data/networklease.js +29 -7
  40. package/dist_ts/data/networknode.d.ts +2 -2
  41. package/dist_ts/data/networkprojection.d.ts +59 -60
  42. package/dist_ts/data/networkprojection.js +53 -57
  43. package/dist_ts/data/networkprotection.d.ts +27 -28
  44. package/dist_ts/data/networkprotection.js +36 -36
  45. package/dist_ts/data/networkrouter.d.ts +11 -11
  46. package/dist_ts/data/networkrouter.js +1 -1
  47. package/dist_ts/data/networksigning.d.ts +16 -18
  48. package/dist_ts/data/networksigning.js +20 -21
  49. package/dist_ts/data/nodecredential.d.ts +4 -6
  50. package/dist_ts/data/nodeenrollment.d.ts +35 -40
  51. package/dist_ts/data/nodeenrollment.js +57 -72
  52. package/dist_ts/data/privatenetwork.d.ts +21 -24
  53. package/dist_ts/data/privatenetwork.js +39 -54
  54. package/dist_ts/data/runtimeassignment.d.ts +50 -34
  55. package/dist_ts/data/runtimeassignment.js +79 -45
  56. package/dist_ts/data/runtimeconfig.d.ts +21 -22
  57. package/dist_ts/data/runtimeconfig.js +24 -24
  58. package/dist_ts/data/runtimesession.d.ts +100 -62
  59. package/dist_ts/data/runtimesession.js +98 -79
  60. package/dist_ts/data/runtimeterminalreceipt.d.ts +28 -29
  61. package/dist_ts/data/runtimeterminalreceipt.js +42 -42
  62. package/dist_ts/data/secret.d.ts +18 -25
  63. package/dist_ts/data/secret.js +12 -52
  64. package/dist_ts/data/servicecredential.d.ts +14 -16
  65. package/dist_ts/data/servicecredential.js +17 -28
  66. package/dist_ts/data/serviceruntime.d.ts +7 -7
  67. package/dist_ts/data/serviceruntime.js +4 -4
  68. package/dist_ts/data/sparknodereport.d.ts +27 -14
  69. package/dist_ts/data/sparknodereport.js +35 -28
  70. package/dist_ts/data/webpush.d.ts +0 -1
  71. package/dist_ts/index.d.ts +2 -1
  72. package/dist_ts/index.js +3 -2
  73. package/dist_ts/platform/objectstorageretention.d.ts +21 -24
  74. package/dist_ts/platform/objectstorageretention.js +6 -18
  75. package/dist_ts/platform/storage.d.ts +1 -3
  76. package/dist_ts/platform/storagemigration.d.ts +0 -7
  77. package/dist_ts/platform/storagemigration.golden.d.ts +0 -1
  78. package/dist_ts/platform/storagemigration.golden.js +8 -12
  79. package/dist_ts/platform/storagemigration.js +6 -51
  80. package/dist_ts/platform/types.d.ts +2 -2
  81. package/dist_ts/private/canonicaljson.d.ts +9 -1
  82. package/dist_ts/private/canonicaljson.js +14 -2
  83. package/dist_ts/private/dataproperties.d.ts +62 -0
  84. package/dist_ts/private/dataproperties.js +117 -0
  85. package/dist_ts/private/networkcontract.d.ts +10 -10
  86. package/dist_ts/private/networkcontract.js +1 -1
  87. package/dist_ts/private/releaseversion.d.ts +37 -0
  88. package/dist_ts/private/releaseversion.js +48 -0
  89. package/dist_ts/private/runtimepolicy.d.ts +2 -2
  90. package/dist_ts/private/runtimepolicy.js +1 -1
  91. package/dist_ts/private/tokenlist.d.ts +9 -0
  92. package/dist_ts/private/tokenlist.js +23 -0
  93. package/dist_ts/protocol.d.ts +137 -0
  94. package/dist_ts/protocol.js +255 -0
  95. package/dist_ts/requests/admin.d.ts +8 -8
  96. package/dist_ts/requests/backup.d.ts +102 -112
  97. package/dist_ts/requests/cluster.d.ts +10 -10
  98. package/dist_ts/requests/clusteringress.d.ts +9 -0
  99. package/dist_ts/requests/clusteringress.js +1 -1
  100. package/dist_ts/requests/config.d.ts +3 -3
  101. package/dist_ts/requests/corestore.d.ts +0 -3
  102. package/dist_ts/requests/corestore.js +5 -9
  103. package/dist_ts/requests/network.d.ts +30 -30
  104. package/dist_ts/requests/node.d.ts +15 -28
  105. package/dist_ts/requests/pallet.d.ts +13 -13
  106. package/dist_ts/requests/runtimesession.d.ts +53 -41
  107. package/dist_ts/requests/secret.d.ts +4 -5
  108. package/dist_ts/requests/secret.js +1 -5
  109. package/dist_ts/runtime.corestore.d.ts +56 -74
  110. package/dist_ts/runtime.corestore.databaseexportpackage.d.ts +30 -36
  111. package/dist_ts/runtime.corestore.databaseexportpackage.golden.d.ts +11 -12
  112. package/dist_ts/runtime.corestore.databaseexportpackage.golden.js +54 -71
  113. package/dist_ts/runtime.corestore.databaseexportpackage.js +9 -25
  114. package/dist_ts/runtime.corestore.js +35 -135
  115. package/dist_ts/runtime.corestore.relay.js +2 -7
  116. package/dist_ts/runtime.d.ts +38 -48
  117. package/dist_ts/runtime.js +20 -77
  118. package/dist_ts/runtime.networkprojection.d.ts +4 -4
  119. package/dist_ts/runtime.networkprojection.js +18 -18
  120. package/dist_ts/runtime.workloadinit.d.ts +23 -24
  121. package/dist_ts/runtime.workloadinit.js +6 -13
  122. package/package.json +2 -2
  123. package/readme.md +421 -270
  124. package/ts/00_commitinfo_data.ts +3 -3
  125. package/ts/appstore/types.ts +4 -6
  126. package/ts/data/backup.ts +3 -38
  127. package/ts/data/cluster.ts +51 -34
  128. package/ts/data/clusteringress.ts +12 -12
  129. package/ts/data/clusternode.ts +204 -232
  130. package/ts/data/coremail.runtime.ts +4 -21
  131. package/ts/data/coremail.ts +3 -7
  132. package/ts/data/deploymentadoption.ts +46 -4
  133. package/ts/data/deploymentoperation.ts +16 -1
  134. package/ts/data/deploymentpreflight.ts +0 -2
  135. package/ts/data/immutableimage.ts +71 -24
  136. package/ts/data/index.ts +1 -1
  137. package/ts/data/isolatedrestore.golden.ts +5 -9
  138. package/ts/data/isolatedrestore.ts +339 -54
  139. package/ts/data/mail.ts +1 -1
  140. package/ts/data/networkaddressplan.ts +13 -13
  141. package/ts/data/networkauthority.ts +42 -46
  142. package/ts/data/networkcredential.ts +24 -24
  143. package/ts/data/networkdelivery.ts +27 -27
  144. package/ts/data/networklease.ts +40 -13
  145. package/ts/data/networknode.ts +2 -2
  146. package/ts/data/networkprojection.ts +119 -124
  147. package/ts/data/networkprotection.ts +54 -55
  148. package/ts/data/networkrouter.ts +14 -14
  149. package/ts/data/networksigning.ts +29 -32
  150. package/ts/data/nodecredential.ts +4 -6
  151. package/ts/data/nodeenrollment.ts +96 -114
  152. package/ts/data/privatenetwork.ts +58 -74
  153. package/ts/data/runtimeassignment.ts +143 -94
  154. package/ts/data/runtimeconfig.ts +45 -46
  155. package/ts/data/runtimesession.ts +185 -138
  156. package/ts/data/runtimeterminalreceipt.ts +72 -73
  157. package/ts/data/secret.ts +28 -76
  158. package/ts/data/servicecredential.ts +33 -43
  159. package/ts/data/serviceruntime.ts +11 -11
  160. package/ts/data/sparknodereport.ts +48 -36
  161. package/ts/data/webpush.ts +0 -1
  162. package/ts/index.ts +2 -0
  163. package/ts/platform/objectstorageretention.ts +36 -55
  164. package/ts/platform/storage.ts +1 -3
  165. package/ts/platform/storagemigration.golden.ts +7 -11
  166. package/ts/platform/storagemigration.ts +5 -55
  167. package/ts/platform/types.ts +2 -2
  168. package/ts/private/canonicaljson.ts +13 -1
  169. package/ts/private/dataproperties.ts +139 -0
  170. package/ts/private/networkcontract.ts +9 -9
  171. package/ts/private/releaseversion.ts +70 -0
  172. package/ts/private/runtimepolicy.ts +2 -2
  173. package/ts/private/tokenlist.ts +30 -0
  174. package/ts/protocol.ts +364 -0
  175. package/ts/requests/admin.ts +11 -11
  176. package/ts/requests/backup.ts +112 -117
  177. package/ts/requests/cluster.ts +13 -13
  178. package/ts/requests/clusteringress.ts +9 -0
  179. package/ts/requests/config.ts +3 -3
  180. package/ts/requests/corestore.ts +4 -16
  181. package/ts/requests/network.ts +40 -40
  182. package/ts/requests/node.ts +21 -38
  183. package/ts/requests/pallet.ts +17 -17
  184. package/ts/requests/runtimesession.ts +63 -51
  185. package/ts/requests/secret.ts +5 -10
  186. package/ts/runtime.corestore.databaseexportpackage.golden.ts +77 -95
  187. package/ts/runtime.corestore.databaseexportpackage.ts +51 -73
  188. package/ts/runtime.corestore.relay.ts +1 -10
  189. package/ts/runtime.corestore.ts +118 -268
  190. package/ts/runtime.networkprojection.ts +30 -30
  191. package/ts/runtime.ts +83 -158
  192. package/ts/runtime.workloadinit.ts +36 -48
  193. package/dist_ts/runtime.cloudlylegacydeploymentsettlement.d.ts +0 -902
  194. package/dist_ts/runtime.cloudlylegacydeploymentsettlement.golden.d.ts +0 -35
  195. package/dist_ts/runtime.cloudlylegacydeploymentsettlement.golden.js +0 -315
  196. package/dist_ts/runtime.cloudlylegacydeploymentsettlement.js +0 -3315
  197. package/dist_ts/runtime.cloudlylegacydeploymentsettlement.offlineexport.d.ts +0 -291
  198. package/dist_ts/runtime.cloudlylegacydeploymentsettlement.offlineexport.golden.d.ts +0 -30
  199. package/dist_ts/runtime.cloudlylegacydeploymentsettlement.offlineexport.golden.js +0 -408
  200. package/dist_ts/runtime.cloudlylegacydeploymentsettlement.offlineexport.js +0 -1126
  201. package/ts/runtime.cloudlylegacydeploymentsettlement.golden.ts +0 -421
  202. package/ts/runtime.cloudlylegacydeploymentsettlement.offlineexport.golden.ts +0 -510
  203. package/ts/runtime.cloudlylegacydeploymentsettlement.offlineexport.ts +0 -2470
  204. package/ts/runtime.cloudlylegacydeploymentsettlement.ts +0 -6630
@@ -1,5 +1,5 @@
1
1
  import type { TNodeCredentialPurpose } from './nodecredential.js';
2
- export interface INodeEnrollmentCredentialProposalV1 {
2
+ export interface INodeEnrollmentCredentialProposal {
3
3
  purpose: TNodeCredentialPurpose;
4
4
  installationId: string;
5
5
  mutationId: string;
@@ -9,8 +9,7 @@ export interface INodeEnrollmentCredentialProposalV1 {
9
9
  expectedSessionEpoch: number;
10
10
  }
11
11
  /** Value-free, immutable proposal. Hashes are still sensitive transport fields. */
12
- export interface INodeEnrollmentV1 {
13
- schemaVersion: 1;
12
+ export interface INodeEnrollment {
14
13
  /** 32 CSPRNG bytes encoded as lowercase hexadecimal; retain across every retry. */
15
14
  enrollmentId: string;
16
15
  cloudlyOrigin: string;
@@ -24,23 +23,23 @@ export interface INodeEnrollmentV1 {
24
23
  proofHash: string;
25
24
  };
26
25
  credentials: [
27
- INodeEnrollmentCredentialProposalV1 & {
26
+ INodeEnrollmentCredentialProposal & {
28
27
  purpose: 'spark';
29
28
  },
30
- INodeEnrollmentCredentialProposalV1 & {
29
+ INodeEnrollmentCredentialProposal & {
31
30
  purpose: 'pallet';
32
31
  }
33
32
  ];
34
33
  }
35
- export interface INodeEnrollmentRequestV1 {
36
- enrollment: INodeEnrollmentV1;
34
+ export interface INodeEnrollmentRequest {
35
+ enrollment: INodeEnrollment;
37
36
  /** Never persist on the server, log, put in URLs, or expose in transport hooks. */
38
37
  proof: {
39
38
  kind: 'bootstrap' | 'pending-spark';
40
39
  bearer: string;
41
40
  };
42
41
  }
43
- export interface INodeEnrollmentCredentialAcknowledgementV1 {
42
+ export interface INodeEnrollmentCredentialAcknowledgement {
44
43
  purpose: TNodeCredentialPurpose;
45
44
  installationId: string;
46
45
  mutationId: string;
@@ -48,24 +47,22 @@ export interface INodeEnrollmentCredentialAcknowledgementV1 {
48
47
  generation: number;
49
48
  }
50
49
  /** Immutable commit evidence, not authorization or workload readiness. */
51
- export interface INodeEnrollmentAcknowledgementV1 {
52
- schemaVersion: 1;
50
+ export interface INodeEnrollmentAcknowledgement {
53
51
  enrollmentId: string;
54
52
  cloudlyOrigin: string;
55
53
  nodeId: string;
56
54
  requestDigest: string;
57
55
  credentials: [
58
- INodeEnrollmentCredentialAcknowledgementV1 & {
56
+ INodeEnrollmentCredentialAcknowledgement & {
59
57
  purpose: 'spark';
60
58
  },
61
- INodeEnrollmentCredentialAcknowledgementV1 & {
59
+ INodeEnrollmentCredentialAcknowledgement & {
62
60
  purpose: 'pallet';
63
61
  }
64
62
  ];
65
63
  }
66
64
  /** Returned only after current Spark authentication and proof that Pallet is absent. */
67
- export interface INodeEnrollmentStateV1 {
68
- schemaVersion: 1;
65
+ export interface INodeEnrollmentState {
69
66
  nodeId: string;
70
67
  spark: {
71
68
  generation: number;
@@ -74,8 +71,7 @@ export interface INodeEnrollmentStateV1 {
74
71
  pallet: 'absent';
75
72
  }
76
73
  /** Root-authenticated, node-local IPC only. Initial Pallet authority is always absent. */
77
- export interface IPalletNodeEnrollmentPreparationV1 {
78
- schemaVersion: 1;
74
+ export interface IPalletNodeEnrollmentPreparation {
79
75
  purpose: 'pallet';
80
76
  installationId: string;
81
77
  mutationId: string;
@@ -83,70 +79,69 @@ export interface IPalletNodeEnrollmentPreparationV1 {
83
79
  nodeId: string | null;
84
80
  }
85
81
  /** Full exact activation wire body; Cloudly authentication remains the coordinator's responsibility. */
86
- export interface IPalletNodeEnrollmentActivationV1 {
87
- enrollment: INodeEnrollmentV1;
88
- acknowledgement: INodeEnrollmentAcknowledgementV1;
82
+ export interface IPalletNodeEnrollmentActivation {
83
+ enrollment: INodeEnrollment;
84
+ acknowledgement: INodeEnrollmentAcknowledgement;
89
85
  }
90
- interface IPalletNodeEnrollmentConfirmationBaseV1 {
91
- schemaVersion: 1;
86
+ interface IPalletNodeEnrollmentConfirmationBase {
92
87
  purpose: 'pallet';
93
88
  enrollmentId: string;
94
89
  cloudlyOrigin: string;
95
90
  requestDigest: string;
96
91
  }
97
92
  /** The exact pending binding is durable now, not merely a historical receipt. */
98
- export interface IPalletNodeEnrollmentBoundV1 extends IPalletNodeEnrollmentConfirmationBaseV1 {
93
+ export interface IPalletNodeEnrollmentBound extends IPalletNodeEnrollmentConfirmationBase {
99
94
  phase: 'bound';
100
95
  /** Null before Cloudly assigns a fresh Jump node; exact existing node for adoption. */
101
96
  nodeId: string | null;
102
97
  }
103
98
  /** Exact CURRENT local Pallet identity, not Spark activation or remote authorization. */
104
- export interface IPalletNodeEnrollmentActiveV1 extends IPalletNodeEnrollmentConfirmationBaseV1 {
99
+ export interface IPalletNodeEnrollmentActive extends IPalletNodeEnrollmentConfirmationBase {
105
100
  phase: 'active';
106
101
  nodeId: string;
107
102
  }
108
- export type TPalletNodeEnrollmentConfirmationV1 = IPalletNodeEnrollmentBoundV1 | IPalletNodeEnrollmentActiveV1;
103
+ export type TPalletNodeEnrollmentConfirmation = IPalletNodeEnrollmentBound | IPalletNodeEnrollmentActive;
109
104
  /** Wire bounds, not a listener, permission check, timeout implementation or storage API. */
110
- export declare const palletNodeEnrollmentV1Contract: Readonly<{
105
+ export declare const palletNodeEnrollmentContract: Readonly<{
111
106
  readonly socketPath: "/run/serve.zone/pallet/control.sock";
112
107
  readonly frame: "u32be-length-prefixed-utf8-json-then-write-half-close";
113
108
  readonly requestsPerConnection: 1;
114
109
  readonly maxRequestBytes: 32768;
115
110
  readonly maxResponseBytes: 16384;
116
111
  }>;
117
- export declare const nodeEnrollmentV1Contract: Readonly<{
118
- readonly digestDomain: "serve.zone/node-enrollment-v1";
112
+ export declare const nodeEnrollmentContract: Readonly<{
113
+ readonly digestDomain: "serve.zone/node-enrollment";
119
114
  readonly localActivation: "independently-durable-convergence";
120
115
  readonly bootstrapProof: "first-commit-only";
121
116
  readonly pendingSparkProof: "committed-exact-receipt-only";
122
117
  }>;
123
118
  /** Detached frozen snapshot, captured synchronously before hashing or other awaits. */
124
- export declare const snapshotNodeEnrollmentV1: (valueArg: unknown) => INodeEnrollmentV1;
125
- export declare const computeNodeEnrollmentV1Digest: (valueArg: INodeEnrollmentV1) => Promise<string>;
126
- export declare const snapshotNodeEnrollmentRequestV1: (valueArg: unknown) => INodeEnrollmentRequestV1;
119
+ export declare const snapshotNodeEnrollment: (valueArg: unknown) => INodeEnrollment;
120
+ export declare const computeNodeEnrollmentDigest: (valueArg: INodeEnrollment) => Promise<string>;
121
+ export declare const snapshotNodeEnrollmentRequest: (valueArg: unknown) => INodeEnrollmentRequest;
127
122
  /**
128
123
  * Pure proof binding/mode check only, NOT authentication. The server must derive
129
124
  * receiptState from its owned transaction, compare the complete stored proposal,
130
125
  * and fence current Jump/Spark/Pallet authority before any commit or replay.
131
126
  */
132
- export declare const verifyNodeEnrollmentProofV1: (valueArg: INodeEnrollmentRequestV1, receiptStateArg: "absent" | "committed") => Promise<boolean>;
133
- export declare const snapshotNodeEnrollmentAcknowledgementV1: (valueArg: unknown) => INodeEnrollmentAcknowledgementV1;
127
+ export declare const verifyNodeEnrollmentProof: (valueArg: INodeEnrollmentRequest, receiptStateArg: "absent" | "committed") => Promise<boolean>;
128
+ export declare const snapshotNodeEnrollmentAcknowledgement: (valueArg: unknown) => INodeEnrollmentAcknowledgement;
134
129
  /** Content binding only. Authenticate Cloudly first; persist only the returned snapshot. */
135
- export declare const bindNodeEnrollmentAcknowledgementV1: (enrollmentArg: INodeEnrollmentV1, acknowledgementArg: INodeEnrollmentAcknowledgementV1) => Promise<INodeEnrollmentAcknowledgementV1>;
136
- export declare const snapshotNodeEnrollmentStateV1: (valueArg: unknown) => INodeEnrollmentStateV1;
130
+ export declare const bindNodeEnrollmentAcknowledgement: (enrollmentArg: INodeEnrollment, acknowledgementArg: INodeEnrollmentAcknowledgement) => Promise<INodeEnrollmentAcknowledgement>;
131
+ export declare const snapshotNodeEnrollmentState: (valueArg: unknown) => INodeEnrollmentState;
137
132
  /** Decoded JSON/data records only, captured synchronously; never invokes getters. */
138
- export declare const snapshotPalletNodeEnrollmentPreparationV1: (valueArg: unknown) => IPalletNodeEnrollmentPreparationV1;
133
+ export declare const snapshotPalletNodeEnrollmentPreparation: (valueArg: unknown) => IPalletNodeEnrollmentPreparation;
139
134
  /** Content binding only. Authenticate the local Pallet transport before trusting this proposal. */
140
- export declare const bindPalletNodeEnrollmentPreparationV1: (preparationArg: IPalletNodeEnrollmentPreparationV1, proposalArg: unknown) => INodeEnrollmentV1["credentials"][1];
135
+ export declare const bindPalletNodeEnrollmentPreparation: (preparationArg: IPalletNodeEnrollmentPreparation, proposalArg: unknown) => INodeEnrollment["credentials"][1];
141
136
  /** Capture the exact wrapper and both nested values before any asynchronous content binding. */
142
- export declare const snapshotPalletNodeEnrollmentActivationV1: (valueArg: unknown) => IPalletNodeEnrollmentActivationV1;
143
- export declare const snapshotPalletNodeEnrollmentConfirmationV1: (valueArg: unknown) => TPalletNodeEnrollmentConfirmationV1;
137
+ export declare const snapshotPalletNodeEnrollmentActivation: (valueArg: unknown) => IPalletNodeEnrollmentActivation;
138
+ export declare const snapshotPalletNodeEnrollmentConfirmation: (valueArg: unknown) => TPalletNodeEnrollmentConfirmation;
144
139
  /** Pure binding only. Pallet must prove its durable pending binding before issuing this response. */
145
- export declare const bindPalletNodeEnrollmentBoundV1: (enrollmentArg: INodeEnrollmentV1, confirmationArg: IPalletNodeEnrollmentBoundV1) => Promise<IPalletNodeEnrollmentBoundV1>;
140
+ export declare const bindPalletNodeEnrollmentBound: (enrollmentArg: INodeEnrollment, confirmationArg: IPalletNodeEnrollmentBound) => Promise<IPalletNodeEnrollmentBound>;
146
141
  /**
147
142
  * Pure binding only, NOT authentication or a database check. The root-authenticated
148
143
  * Pallet owner must first prove its exact CURRENT local identity, not just a receipt.
149
144
  * This does not assert Spark activation, current Cloudly authority or workload readiness.
150
145
  */
151
- export declare const bindPalletNodeEnrollmentActiveV1: (activationArg: IPalletNodeEnrollmentActivationV1, confirmationArg: IPalletNodeEnrollmentActiveV1) => Promise<IPalletNodeEnrollmentActiveV1>;
146
+ export declare const bindPalletNodeEnrollmentActive: (activationArg: IPalletNodeEnrollmentActivation, confirmationArg: IPalletNodeEnrollmentActive) => Promise<IPalletNodeEnrollmentActive>;
152
147
  export {};
@@ -1,14 +1,15 @@
1
1
  import { canonicalizeStrictJson, createCanonicalJsonSha256Hex, createSha256Hex, deepFreezeValue, } from '../private/canonicaljson.js';
2
+ import { readDataElements, readDataProperty, readExactDataRecord, } from '../private/dataproperties.js';
2
3
  /** Wire bounds, not a listener, permission check, timeout implementation or storage API. */
3
- export const palletNodeEnrollmentV1Contract = Object.freeze({
4
+ export const palletNodeEnrollmentContract = Object.freeze({
4
5
  socketPath: '/run/serve.zone/pallet/control.sock',
5
6
  frame: 'u32be-length-prefixed-utf8-json-then-write-half-close',
6
7
  requestsPerConnection: 1,
7
8
  maxRequestBytes: 32768,
8
9
  maxResponseBytes: 16384,
9
10
  });
10
- export const nodeEnrollmentV1Contract = Object.freeze({
11
- digestDomain: 'serve.zone/node-enrollment-v1',
11
+ export const nodeEnrollmentContract = Object.freeze({
12
+ digestDomain: 'serve.zone/node-enrollment',
12
13
  localActivation: 'independently-durable-convergence',
13
14
  bootstrapProof: 'first-commit-only',
14
15
  pendingSparkProof: 'committed-exact-receipt-only',
@@ -18,30 +19,17 @@ function requireValue(valueArg) {
18
19
  if (!valueArg)
19
20
  fail();
20
21
  }
21
- /** Decoded JSON/data records only. No input accessor is executed or preserved. */
22
+ /** Exactly this shape's keys, read once as data; an accessor is refused, never invoked. */
22
23
  const record = (valueArg, keysArg) => {
23
- requireValue(valueArg !== null && typeof valueArg === 'object' && !Array.isArray(valueArg));
24
- const prototype = Object.getPrototypeOf(valueArg);
25
- requireValue(prototype === Object.prototype || prototype === null);
26
- const keys = Reflect.ownKeys(valueArg);
27
- requireValue(keys.length === keysArg.length);
28
- const snapshot = Object.create(null);
29
- for (const key of keys) {
30
- requireValue(typeof key === 'string' && keysArg.includes(key));
31
- const descriptor = Object.getOwnPropertyDescriptor(valueArg, key);
32
- requireValue(descriptor?.enumerable && Object.hasOwn(descriptor, 'value'));
33
- snapshot[key] = descriptor.value;
34
- }
24
+ const snapshot = readExactDataRecord(valueArg, keysArg);
25
+ requireValue(snapshot !== null);
35
26
  return snapshot;
36
27
  };
28
+ /** The dense two-element credential tuple, read the same way as a record. */
37
29
  const pair = (valueArg) => {
38
- requireValue(Array.isArray(valueArg) && Object.getPrototypeOf(valueArg) === Array.prototype);
39
- requireValue(Reflect.ownKeys(valueArg).length === 3 && valueArg.length === 2);
40
- const first = Object.getOwnPropertyDescriptor(valueArg, '0');
41
- const second = Object.getOwnPropertyDescriptor(valueArg, '1');
42
- requireValue(first?.enumerable && Object.hasOwn(first, 'value'));
43
- requireValue(second?.enumerable && Object.hasOwn(second, 'value'));
44
- return [first.value, second.value];
30
+ const elements = readDataElements(valueArg, 2);
31
+ requireValue(elements !== null && elements.length === 2);
32
+ return [elements[0], elements[1]];
45
33
  };
46
34
  const id = (valueArg) => {
47
35
  requireValue(typeof valueArg === 'string' && /^[A-Za-z0-9_-]{1,128}$/.test(valueArg));
@@ -87,14 +75,12 @@ const distinctOwners = (sparkArg, palletArg) => {
87
75
  && sparkArg.mutationId !== palletArg.mutationId && sparkArg.tokenHash !== palletArg.tokenHash);
88
76
  };
89
77
  /** Detached frozen snapshot, captured synchronously before hashing or other awaits. */
90
- export const snapshotNodeEnrollmentV1 = (valueArg) => {
91
- const value = record(valueArg, ['schemaVersion', 'enrollmentId', 'cloudlyOrigin', 'hostname',
78
+ export const snapshotNodeEnrollment = (valueArg) => {
79
+ const value = record(valueArg, ['enrollmentId', 'cloudlyOrigin', 'hostname',
92
80
  'bootstrap', 'credentials']);
93
- requireValue(value.schemaVersion === 1);
94
- // Read the discriminant from its data descriptor, never an input getter.
95
- requireValue(value.bootstrap !== null && typeof value.bootstrap === 'object');
96
- const kind = Object.getOwnPropertyDescriptor(value.bootstrap, 'kind');
97
- requireValue(kind && Object.hasOwn(kind, 'value'));
81
+ // Read the discriminant as data, never through an input getter.
82
+ const kind = readDataProperty(value.bootstrap, 'kind');
83
+ requireValue(kind !== null);
98
84
  const bootstrap = record(value.bootstrap, kind.value === 'jump'
99
85
  ? ['kind', 'proofHash'] : ['kind', 'nodeId', 'proofHash']);
100
86
  requireValue(bootstrap.kind === 'jump' || bootstrap.kind === 'adopt-existing');
@@ -106,22 +92,22 @@ export const snapshotNodeEnrollmentV1 = (valueArg) => {
106
92
  requireValue(bootstrap.kind === 'jump'
107
93
  ? spark.expectedGeneration === 0 && spark.expectedSessionEpoch === 0
108
94
  : spark.expectedGeneration > 0);
109
- return deepFreezeValue({ schemaVersion: 1, enrollmentId: hash(value.enrollmentId),
95
+ return deepFreezeValue({ enrollmentId: hash(value.enrollmentId),
110
96
  cloudlyOrigin: origin(value.cloudlyOrigin), hostname: hostname(value.hostname),
111
97
  bootstrap: bootstrap.kind === 'jump'
112
98
  ? { kind: 'jump', proofHash: hash(bootstrap.proofHash) }
113
99
  : { kind: 'adopt-existing', nodeId: id(bootstrap.nodeId), proofHash: hash(bootstrap.proofHash) },
114
100
  credentials: [spark, pallet] });
115
101
  };
116
- export const computeNodeEnrollmentV1Digest = async (valueArg) => {
117
- const payload = snapshotNodeEnrollmentV1(valueArg);
102
+ export const computeNodeEnrollmentDigest = async (valueArg) => {
103
+ const payload = snapshotNodeEnrollment(valueArg);
118
104
  return createCanonicalJsonSha256Hex(canonicalizeStrictJson({
119
- domain: nodeEnrollmentV1Contract.digestDomain, payload,
105
+ domain: nodeEnrollmentContract.digestDomain, payload,
120
106
  }, fail), fail);
121
107
  };
122
- export const snapshotNodeEnrollmentRequestV1 = (valueArg) => {
108
+ export const snapshotNodeEnrollmentRequest = (valueArg) => {
123
109
  const value = record(valueArg, ['enrollment', 'proof']);
124
- const enrollment = snapshotNodeEnrollmentV1(value.enrollment);
110
+ const enrollment = snapshotNodeEnrollment(value.enrollment);
125
111
  const proof = record(value.proof, ['kind', 'bearer']);
126
112
  requireValue(proof.kind === 'bootstrap' || proof.kind === 'pending-spark');
127
113
  requireValue(typeof proof.bearer === 'string');
@@ -134,9 +120,9 @@ export const snapshotNodeEnrollmentRequestV1 = (valueArg) => {
134
120
  * receiptState from its owned transaction, compare the complete stored proposal,
135
121
  * and fence current Jump/Spark/Pallet authority before any commit or replay.
136
122
  */
137
- export const verifyNodeEnrollmentProofV1 = async (valueArg, receiptStateArg) => {
123
+ export const verifyNodeEnrollmentProof = async (valueArg, receiptStateArg) => {
138
124
  try {
139
- const { enrollment, proof } = snapshotNodeEnrollmentRequestV1(valueArg);
125
+ const { enrollment, proof } = snapshotNodeEnrollmentRequest(valueArg);
140
126
  if (!(proof.kind === 'bootstrap' && receiptStateArg === 'absent')
141
127
  && !(proof.kind === 'pending-spark' && receiptStateArg === 'committed'))
142
128
  return false;
@@ -155,23 +141,22 @@ const credentialAcknowledgement = (valueArg, purposeArg) => {
155
141
  return { purpose: purposeArg, installationId: id(value.installationId), mutationId: id(value.mutationId),
156
142
  tokenHash: hash(value.tokenHash), generation: counter(value.generation, 1) };
157
143
  };
158
- export const snapshotNodeEnrollmentAcknowledgementV1 = (valueArg) => {
159
- const value = record(valueArg, ['schemaVersion', 'enrollmentId', 'cloudlyOrigin', 'nodeId',
144
+ export const snapshotNodeEnrollmentAcknowledgement = (valueArg) => {
145
+ const value = record(valueArg, ['enrollmentId', 'cloudlyOrigin', 'nodeId',
160
146
  'requestDigest', 'credentials']);
161
- requireValue(value.schemaVersion === 1);
162
147
  const [sparkInput, palletInput] = pair(value.credentials);
163
148
  const spark = credentialAcknowledgement(sparkInput, 'spark');
164
149
  const pallet = credentialAcknowledgement(palletInput, 'pallet');
165
150
  distinctOwners(spark, pallet);
166
151
  requireValue(pallet.generation === 1);
167
- return deepFreezeValue({ schemaVersion: 1, enrollmentId: hash(value.enrollmentId),
152
+ return deepFreezeValue({ enrollmentId: hash(value.enrollmentId),
168
153
  cloudlyOrigin: origin(value.cloudlyOrigin), nodeId: id(value.nodeId),
169
154
  requestDigest: hash(value.requestDigest), credentials: [spark, pallet] });
170
155
  };
171
156
  /** Content binding only. Authenticate Cloudly first; persist only the returned snapshot. */
172
- export const bindNodeEnrollmentAcknowledgementV1 = async (enrollmentArg, acknowledgementArg) => {
173
- const enrollment = snapshotNodeEnrollmentV1(enrollmentArg);
174
- const ack = snapshotNodeEnrollmentAcknowledgementV1(acknowledgementArg);
157
+ export const bindNodeEnrollmentAcknowledgement = async (enrollmentArg, acknowledgementArg) => {
158
+ const enrollment = snapshotNodeEnrollment(enrollmentArg);
159
+ const ack = snapshotNodeEnrollmentAcknowledgement(acknowledgementArg);
175
160
  requireValue(ack.enrollmentId === enrollment.enrollmentId && ack.cloudlyOrigin === enrollment.cloudlyOrigin
176
161
  && (enrollment.bootstrap.kind === 'jump' || ack.nodeId === enrollment.bootstrap.nodeId));
177
162
  for (const index of [0, 1]) {
@@ -181,28 +166,28 @@ export const bindNodeEnrollmentAcknowledgementV1 = async (enrollmentArg, acknowl
181
166
  && actual.mutationId === expected.mutationId && actual.tokenHash === expected.tokenHash
182
167
  && actual.generation === expected.expectedGeneration + 1);
183
168
  }
184
- requireValue(ack.requestDigest === await computeNodeEnrollmentV1Digest(enrollment));
169
+ requireValue(ack.requestDigest === await computeNodeEnrollmentDigest(enrollment));
185
170
  return ack;
186
171
  };
187
- export const snapshotNodeEnrollmentStateV1 = (valueArg) => {
188
- const value = record(valueArg, ['schemaVersion', 'nodeId', 'spark', 'pallet']);
189
- requireValue(value.schemaVersion === 1 && value.pallet === 'absent');
172
+ export const snapshotNodeEnrollmentState = (valueArg) => {
173
+ const value = record(valueArg, ['nodeId', 'spark', 'pallet']);
174
+ requireValue(value.pallet === 'absent');
190
175
  const spark = record(value.spark, ['generation', 'sessionEpoch']);
191
- return deepFreezeValue({ schemaVersion: 1, nodeId: id(value.nodeId), pallet: 'absent',
176
+ return deepFreezeValue({ nodeId: id(value.nodeId), pallet: 'absent',
192
177
  spark: { generation: counter(spark.generation, 1, true), sessionEpoch: counter(spark.sessionEpoch, 0, true) } });
193
178
  };
194
179
  /** Decoded JSON/data records only, captured synchronously; never invokes getters. */
195
- export const snapshotPalletNodeEnrollmentPreparationV1 = (valueArg) => {
196
- const value = record(valueArg, ['schemaVersion', 'purpose', 'installationId', 'mutationId',
180
+ export const snapshotPalletNodeEnrollmentPreparation = (valueArg) => {
181
+ const value = record(valueArg, ['purpose', 'installationId', 'mutationId',
197
182
  'cloudlyOrigin', 'nodeId']);
198
- requireValue(value.schemaVersion === 1 && value.purpose === 'pallet');
199
- return deepFreezeValue({ schemaVersion: 1, purpose: 'pallet',
183
+ requireValue(value.purpose === 'pallet');
184
+ return deepFreezeValue({ purpose: 'pallet',
200
185
  installationId: id(value.installationId), mutationId: id(value.mutationId),
201
186
  cloudlyOrigin: origin(value.cloudlyOrigin), nodeId: value.nodeId === null ? null : id(value.nodeId) });
202
187
  };
203
188
  /** Content binding only. Authenticate the local Pallet transport before trusting this proposal. */
204
- export const bindPalletNodeEnrollmentPreparationV1 = (preparationArg, proposalArg) => {
205
- const preparation = snapshotPalletNodeEnrollmentPreparationV1(preparationArg);
189
+ export const bindPalletNodeEnrollmentPreparation = (preparationArg, proposalArg) => {
190
+ const preparation = snapshotPalletNodeEnrollmentPreparation(preparationArg);
206
191
  const result = proposal(proposalArg, 'pallet');
207
192
  requireValue(result.installationId === preparation.installationId
208
193
  && result.mutationId === preparation.mutationId
@@ -210,17 +195,17 @@ export const bindPalletNodeEnrollmentPreparationV1 = (preparationArg, proposalAr
210
195
  return deepFreezeValue(result);
211
196
  };
212
197
  /** Capture the exact wrapper and both nested values before any asynchronous content binding. */
213
- export const snapshotPalletNodeEnrollmentActivationV1 = (valueArg) => {
198
+ export const snapshotPalletNodeEnrollmentActivation = (valueArg) => {
214
199
  const value = record(valueArg, ['enrollment', 'acknowledgement']);
215
- return deepFreezeValue({ enrollment: snapshotNodeEnrollmentV1(value.enrollment),
216
- acknowledgement: snapshotNodeEnrollmentAcknowledgementV1(value.acknowledgement) });
200
+ return deepFreezeValue({ enrollment: snapshotNodeEnrollment(value.enrollment),
201
+ acknowledgement: snapshotNodeEnrollmentAcknowledgement(value.acknowledgement) });
217
202
  };
218
- export const snapshotPalletNodeEnrollmentConfirmationV1 = (valueArg) => {
219
- const value = record(valueArg, ['schemaVersion', 'purpose', 'enrollmentId', 'cloudlyOrigin',
203
+ export const snapshotPalletNodeEnrollmentConfirmation = (valueArg) => {
204
+ const value = record(valueArg, ['purpose', 'enrollmentId', 'cloudlyOrigin',
220
205
  'requestDigest', 'phase', 'nodeId']);
221
- requireValue(value.schemaVersion === 1 && value.purpose === 'pallet'
206
+ requireValue(value.purpose === 'pallet'
222
207
  && (value.phase === 'bound' || value.phase === 'active'));
223
- const common = { schemaVersion: 1, purpose: 'pallet',
208
+ const common = { purpose: 'pallet',
224
209
  enrollmentId: hash(value.enrollmentId), cloudlyOrigin: origin(value.cloudlyOrigin),
225
210
  requestDigest: hash(value.requestDigest) };
226
211
  return deepFreezeValue(value.phase === 'bound'
@@ -228,13 +213,13 @@ export const snapshotPalletNodeEnrollmentConfirmationV1 = (valueArg) => {
228
213
  : { ...common, phase: 'active', nodeId: id(value.nodeId) });
229
214
  };
230
215
  /** Pure binding only. Pallet must prove its durable pending binding before issuing this response. */
231
- export const bindPalletNodeEnrollmentBoundV1 = async (enrollmentArg, confirmationArg) => {
232
- const enrollment = snapshotNodeEnrollmentV1(enrollmentArg);
233
- const confirmation = snapshotPalletNodeEnrollmentConfirmationV1(confirmationArg);
216
+ export const bindPalletNodeEnrollmentBound = async (enrollmentArg, confirmationArg) => {
217
+ const enrollment = snapshotNodeEnrollment(enrollmentArg);
218
+ const confirmation = snapshotPalletNodeEnrollmentConfirmation(confirmationArg);
234
219
  requireValue(confirmation.phase === 'bound' && confirmation.enrollmentId === enrollment.enrollmentId
235
220
  && confirmation.cloudlyOrigin === enrollment.cloudlyOrigin
236
221
  && confirmation.nodeId === (enrollment.bootstrap.kind === 'jump' ? null : enrollment.bootstrap.nodeId));
237
- requireValue(confirmation.requestDigest === await computeNodeEnrollmentV1Digest(enrollment));
222
+ requireValue(confirmation.requestDigest === await computeNodeEnrollmentDigest(enrollment));
238
223
  return confirmation;
239
224
  };
240
225
  /**
@@ -242,14 +227,14 @@ export const bindPalletNodeEnrollmentBoundV1 = async (enrollmentArg, confirmatio
242
227
  * Pallet owner must first prove its exact CURRENT local identity, not just a receipt.
243
228
  * This does not assert Spark activation, current Cloudly authority or workload readiness.
244
229
  */
245
- export const bindPalletNodeEnrollmentActiveV1 = async (activationArg, confirmationArg) => {
230
+ export const bindPalletNodeEnrollmentActive = async (activationArg, confirmationArg) => {
246
231
  // Capture every caller-owned value before the asynchronous shared acknowledgement binder.
247
- const { enrollment, acknowledgement } = snapshotPalletNodeEnrollmentActivationV1(activationArg);
248
- const confirmation = snapshotPalletNodeEnrollmentConfirmationV1(confirmationArg);
232
+ const { enrollment, acknowledgement } = snapshotPalletNodeEnrollmentActivation(activationArg);
233
+ const confirmation = snapshotPalletNodeEnrollmentConfirmation(confirmationArg);
249
234
  requireValue(confirmation.phase === 'active');
250
- const ack = await bindNodeEnrollmentAcknowledgementV1(enrollment, acknowledgement);
235
+ const ack = await bindNodeEnrollmentAcknowledgement(enrollment, acknowledgement);
251
236
  requireValue(confirmation.enrollmentId === ack.enrollmentId && confirmation.cloudlyOrigin === ack.cloudlyOrigin
252
237
  && confirmation.nodeId === ack.nodeId && confirmation.requestDigest === ack.requestDigest);
253
238
  return confirmation;
254
239
  };
255
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZWVucm9sbG1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9kYXRhL25vZGVlbnJvbGxtZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsNEJBQTRCLEVBQzVCLGVBQWUsRUFDZixlQUFlLEdBQ2hCLE1BQU0sNkJBQTZCLENBQUM7QUF1R3JDLDRGQUE0RjtBQUM1RixNQUFNLENBQUMsTUFBTSw4QkFBOEIsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQzFELFVBQVUsRUFBRSxxQ0FBcUM7SUFDakQsS0FBSyxFQUFFLHVEQUF1RDtJQUM5RCxxQkFBcUIsRUFBRSxDQUFDO0lBQ3hCLGVBQWUsRUFBRSxLQUFLO0lBQ3RCLGdCQUFnQixFQUFFLEtBQUs7Q0FDZixDQUFDLENBQUM7QUFFWixNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ3BELFlBQVksRUFBRSwrQkFBK0I7SUFDN0MsZUFBZSxFQUFFLG1DQUFtQztJQUNwRCxjQUFjLEVBQUUsbUJBQW1CO0lBQ25DLGlCQUFpQixFQUFFLDhCQUE4QjtDQUN6QyxDQUFDLENBQUM7QUFFWixNQUFNLElBQUksR0FBRyxHQUFVLEVBQUUsR0FBRyxNQUFNLElBQUksS0FBSyxDQUFDLG9DQUFvQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckYsU0FBUyxZQUFZLENBQUMsUUFBaUI7SUFDckMsSUFBSSxDQUFDLFFBQVE7UUFBRSxJQUFJLEVBQUUsQ0FBQztBQUN4QixDQUFDO0FBRUQsa0ZBQWtGO0FBQ2xGLE1BQU0sTUFBTSxHQUFHLENBQUMsUUFBaUIsRUFBRSxPQUEwQixFQUEyQixFQUFFO0lBQ3hGLFlBQVksQ0FBQyxRQUFRLEtBQUssSUFBSSxJQUFJLE9BQU8sUUFBUSxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJ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
240
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZWVucm9sbG1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9kYXRhL25vZGVlbnJvbGxtZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsNEJBQTRCLEVBQzVCLGVBQWUsRUFDZixlQUFlLEdBQ2hCLE1BQU0sNkJBQTZCLENBQUM7QUFDckMsT0FBTyxFQUNMLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLG1CQUFtQixHQUN4RCxNQUFNLDhCQUE4QixDQUFDO0FBa0d0Qyw0RkFBNEY7QUFDNUYsTUFBTSxDQUFDLE1BQU0sNEJBQTRCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUN4RCxVQUFVLEVBQUUscUNBQXFDO0lBQ2pELEtBQUssRUFBRSx1REFBdUQ7SUFDOUQscUJBQXFCLEVBQUUsQ0FBQztJQUN4QixlQUFlLEVBQUUsS0FBSztJQUN0QixnQkFBZ0IsRUFBRSxLQUFLO0NBQ2YsQ0FBQyxDQUFDO0FBRVosTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUNsRCxZQUFZLEVBQUUsNEJBQTRCO0lBQzFDLGVBQWUsRUFBRSxtQ0FBbUM7SUFDcEQsY0FBYyxFQUFFLG1CQUFtQjtJQUNuQyxpQkFBaUIsRUFBRSw4QkFBOEI7Q0FDekMsQ0FBQyxDQUFDO0FBRVosTUFBTSxJQUFJLEdBQUcsR0FBVSxFQUFFLEdBQUcsTUFBTSxJQUFJLEtBQUssQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JGLFNBQVMsWUFBWSxDQUFDLFFBQWlCO0lBQ3JDLElBQUksQ0FBQyxRQUFRO1FBQUUsSUFBSSxFQUFFLENBQUM7QUFDeEIsQ0FBQztBQUVELDJGQUEyRjtBQUMzRixNQUFNLE1BQU0sR0FBRyxDQUFDLFFBQWlCLEVBQUUsT0FBMEIsRUFBMkIsRUFBRTtJQUN4RixNQUFNLFFBQVEsR0FBRyxtQkFBbUIsQ0FBQyxRQUFR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
@@ -1,5 +1,5 @@
1
1
  /** Cloudly owns these definitions. Membership never follows node placement. */
2
- export interface IPrivateNetworkPolicyV1 {
2
+ export interface IPrivateNetworkPolicy {
3
3
  connectivity: 'member-full-mesh';
4
4
  /** null denies external resolution; private names are never forwarded. */
5
5
  externalDns: {
@@ -12,8 +12,7 @@ export interface IPrivateNetworkPolicyV1 {
12
12
  permittedSuffixes: string[];
13
13
  } | null;
14
14
  }
15
- export interface IPrivateNetworkV1 {
16
- schemaVersion: 1;
15
+ export interface IPrivateNetwork {
17
16
  id: string;
18
17
  organizationId: string;
19
18
  /** Immutable server-owned keys; display-name changes do not rename DNS. */
@@ -22,43 +21,41 @@ export interface IPrivateNetworkV1 {
22
21
  name: string;
23
22
  revision: number;
24
23
  state: 'active' | 'retiring' | 'retired';
25
- policy: IPrivateNetworkPolicyV1;
24
+ policy: IPrivateNetworkPolicy;
26
25
  createdAt: number;
27
26
  updatedAt: number;
28
27
  }
29
- export interface IPrivateNetworkAttachmentV1 {
28
+ export interface IPrivateNetworkAttachment {
30
29
  networkId: string;
31
30
  /** Sorted unique single-label aliases, reserved per network for this service. */
32
31
  aliases: string[];
33
32
  }
34
33
  /** Desired membership only. Acceptance is neither packet enforcement nor DNS readiness. */
35
- export interface IServicePrivateNetworksV1 {
36
- schemaVersion: 1;
34
+ export interface IServicePrivateNetworks {
37
35
  organizationId: string;
38
36
  serviceId: string;
39
37
  revision: number;
40
38
  /** Sorted by networkId; every network must have the same canonical organization. */
41
- attachments: IPrivateNetworkAttachmentV1[];
39
+ attachments: IPrivateNetworkAttachment[];
42
40
  /** Exactly the sole attachment, or explicit selection/null when several exist. */
43
41
  defaultNetworkId: string | null;
44
42
  }
45
- interface IPrivateNetworkMutationBaseV1 {
46
- schemaVersion: 1;
43
+ interface IPrivateNetworkMutationBase {
47
44
  organizationId: string;
48
45
  /** Retain the exact body and this identifier across retries. */
49
46
  mutationId: string;
50
47
  }
51
- export type TPrivateNetworkMutationV1 = IPrivateNetworkMutationBaseV1 & ({
48
+ export type TPrivateNetworkMutation = IPrivateNetworkMutationBase & ({
52
49
  operation: 'create';
53
50
  expectedRevision: null;
54
51
  name: string;
55
- policy: IPrivateNetworkPolicyV1;
52
+ policy: IPrivateNetworkPolicy;
56
53
  } | {
57
54
  operation: 'update';
58
55
  networkId: string;
59
56
  expectedRevision: number;
60
57
  name: string;
61
- policy: IPrivateNetworkPolicyV1;
58
+ policy: IPrivateNetworkPolicy;
62
59
  }
63
60
  /** Retirement completes only after outstanding grants are denied or independently fenced. */
64
61
  | {
@@ -66,14 +63,14 @@ export type TPrivateNetworkMutationV1 = IPrivateNetworkMutationBaseV1 & ({
66
63
  networkId: string;
67
64
  expectedRevision: number;
68
65
  });
69
- export interface ISetServicePrivateNetworksV1 extends IPrivateNetworkMutationBaseV1 {
66
+ export interface ISetServicePrivateNetworks extends IPrivateNetworkMutationBase {
70
67
  serviceId: string;
71
68
  /** null means the service has never had a membership document; not an empty list. */
72
69
  expectedRevision: number | null;
73
- attachments: IPrivateNetworkAttachmentV1[];
70
+ attachments: IPrivateNetworkAttachment[];
74
71
  defaultNetworkId: string | null;
75
72
  }
76
- export declare const privateNetworkV1Contract: Readonly<{
73
+ export declare const privateNetworkContract: Readonly<{
77
74
  readonly privateRoot: "internal.";
78
75
  readonly maximumAttachments: 16;
79
76
  readonly maximumAliasesPerAttachment: 32;
@@ -86,14 +83,14 @@ export declare const privateNetworkV1Contract: Readonly<{
86
83
  readonly omission: "no-effect";
87
84
  }>;
88
85
  /** Structural validation only; backend IP ownership/reachability and policy fences are required. */
89
- export declare const snapshotPrivateNetworkPolicyV1: (value: unknown) => IPrivateNetworkPolicyV1;
90
- export declare const snapshotPrivateNetworkV1: (value: unknown) => IPrivateNetworkV1;
91
- export declare const snapshotServicePrivateNetworksV1: (value: unknown) => IServicePrivateNetworksV1;
92
- export declare const snapshotSetServicePrivateNetworksV1: (value: unknown) => ISetServicePrivateNetworksV1;
93
- export declare const snapshotPrivateNetworkMutationV1: (value: unknown) => TPrivateNetworkMutationV1;
86
+ export declare const snapshotPrivateNetworkPolicy: (value: unknown) => IPrivateNetworkPolicy;
87
+ export declare const snapshotPrivateNetwork: (value: unknown) => IPrivateNetwork;
88
+ export declare const snapshotServicePrivateNetworks: (value: unknown) => IServicePrivateNetworks;
89
+ export declare const snapshotSetServicePrivateNetworks: (value: unknown) => ISetServicePrivateNetworks;
90
+ export declare const snapshotPrivateNetworkMutation: (value: unknown) => TPrivateNetworkMutation;
94
91
  /** Pure naming helper; it does not reserve a name or create any public DNS/ingress record. */
95
- export declare const buildPrivateNetworkFqdnV1: (networkValue: unknown, aliasValue: unknown) => string;
96
- export interface IServicePrivateNetworkDnsPolicyV1 {
92
+ export declare const buildPrivateNetworkFqdn: (networkValue: unknown, aliasValue: unknown) => string;
93
+ export interface IServicePrivateNetworkDnsPolicy {
97
94
  organizationId: string;
98
95
  serviceId: string;
99
96
  membershipRevision: number;
@@ -120,5 +117,5 @@ export interface IServicePrivateNetworkDnsPolicyV1 {
120
117
  * The caller must fence these exact revisions before issuing runtime authority.
121
118
  * An inactive/missing/extra network is rejected, never silently omitted.
122
119
  */
123
- export declare const composeServicePrivateNetworkDnsPolicyV1: (membershipValue: unknown, networksValue: unknown) => IServicePrivateNetworkDnsPolicyV1;
120
+ export declare const composeServicePrivateNetworkDnsPolicy: (membershipValue: unknown, networksValue: unknown) => IServicePrivateNetworkDnsPolicy;
124
121
  export {};