@serve.zone/interfaces 19.8.0 → 20.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/changelog.md +28 -0
  2. package/dist_ts/00_commitinfo_data.js +1 -1
  3. package/dist_ts/data/immutableimage.d.ts +2 -0
  4. package/dist_ts/data/immutableimage.js +1 -1
  5. package/dist_ts/data/index.d.ts +1 -0
  6. package/dist_ts/data/index.js +2 -1
  7. package/dist_ts/data/isolatedrestore.js +7 -82
  8. package/dist_ts/data/secret.d.ts +205 -0
  9. package/dist_ts/data/secret.js +469 -0
  10. package/dist_ts/data/secretbundle.d.ts +4 -0
  11. package/dist_ts/data/secretgroup.d.ts +4 -0
  12. package/dist_ts/data/service.d.ts +18 -6
  13. package/dist_ts/data/service.js +1 -1
  14. package/dist_ts/platform/index.d.ts +3 -1
  15. package/dist_ts/platform/index.js +4 -2
  16. package/dist_ts/platform/storagemigration.d.ts +346 -0
  17. package/dist_ts/platform/storagemigration.golden.d.ts +49 -0
  18. package/dist_ts/platform/storagemigration.golden.js +207 -0
  19. package/dist_ts/platform/storagemigration.js +1554 -0
  20. package/dist_ts/private/canonicaljson.d.ts +14 -0
  21. package/dist_ts/private/canonicaljson.js +154 -0
  22. package/dist_ts/requests/index.d.ts +2 -1
  23. package/dist_ts/requests/index.js +3 -2
  24. package/dist_ts/requests/secret.d.ts +198 -0
  25. package/dist_ts/requests/secret.js +2 -0
  26. package/dist_ts/runtime.d.ts +41 -0
  27. package/dist_ts/runtime.js +33 -0
  28. package/package.json +9 -2
  29. package/readme.md +162 -2
  30. package/ts/00_commitinfo_data.ts +1 -1
  31. package/ts/data/immutableimage.ts +2 -0
  32. package/ts/data/index.ts +1 -0
  33. package/ts/data/isolatedrestore.ts +12 -93
  34. package/ts/data/secret.ts +835 -0
  35. package/ts/data/secretbundle.ts +4 -0
  36. package/ts/data/secretgroup.ts +4 -0
  37. package/ts/data/service.ts +26 -6
  38. package/ts/platform/index.ts +3 -0
  39. package/ts/platform/storagemigration.golden.ts +241 -0
  40. package/ts/platform/storagemigration.ts +3082 -0
  41. package/ts/private/canonicaljson.ts +221 -0
  42. package/ts/requests/index.ts +2 -0
  43. package/ts/requests/secret.ts +256 -0
  44. package/ts/runtime.ts +80 -0
@@ -0,0 +1,205 @@
1
+ import type { TSha256Digest } from './immutableimage.js';
2
+ export type TSecretEnvironment = string;
3
+ export type TSecretLifecycleState = 'active' | 'retired' | 'revoked' | 'deleted';
4
+ export type TSecretVersionLifecycleState = 'active' | 'retired' | 'revoked' | 'purged';
5
+ /** Retired versions remain usable only through an already-accepted manifest. */
6
+ export declare const isSecretVersionMaterialIssuable: (lifecycleStateArg: TSecretVersionLifecycleState) => boolean;
7
+ export type TSecretManagementSource = 'operator' | 'legacy' | 'appstore' | 'mail' | 'oidc' | 'webpush' | 'platform' | 'system';
8
+ export type TSecretManagementScope = 'operator' | 'legacy' | `appstore:${string}` | `mail:${string}` | `oidc:${string}` | `webpush:${string}` | `platform:${string}` | `system:${string}`;
9
+ export interface IServiceSecretOwner {
10
+ kind: 'service';
11
+ serviceId: string;
12
+ }
13
+ export interface ISecretSetSecretOwner {
14
+ kind: 'secret-set';
15
+ secretSetId: string;
16
+ }
17
+ export type TSecretOwner = IServiceSecretOwner | ISecretSetSecretOwner;
18
+ export interface ISecretVersionReference {
19
+ secretId: string;
20
+ secretVersionId: string;
21
+ }
22
+ export type TSecretVersionRetentionReferenceKind = 'desired-manifest' | 'applied-manifest' | 'previous-accepted-manifest' | 'rollback-manifest' | 'backup' | 'retention-window';
23
+ export interface ISecretVersionRetentionReference {
24
+ kind: TSecretVersionRetentionReferenceKind;
25
+ resourceId: string;
26
+ expiresAt?: number;
27
+ }
28
+ /** Browser-safe logical secret metadata. It never contains value material. */
29
+ export interface ISecretMetadata {
30
+ id: string;
31
+ organizationId: string;
32
+ owner: TSecretOwner;
33
+ key: string;
34
+ environment: TSecretEnvironment;
35
+ name: string;
36
+ description?: string;
37
+ tags: Array<{
38
+ key: string;
39
+ value: string;
40
+ }>;
41
+ managementSource: TSecretManagementSource;
42
+ /** Exact reconciliation owner, for example operator or appstore:<appId>. */
43
+ managementScope: TSecretManagementScope;
44
+ defaultDelivery: TSecretDelivery;
45
+ lifecycleState: TSecretLifecycleState;
46
+ activeVersion?: ISecretVersionReference;
47
+ versionCount: number;
48
+ revision: number;
49
+ createdAt: number;
50
+ updatedAt: number;
51
+ lastRotatedAt?: number;
52
+ }
53
+ /** Browser-safe immutable-version metadata. It never contains an encrypted envelope. */
54
+ export interface ISecretVersionMetadata {
55
+ id: string;
56
+ secretId: string;
57
+ lifecycleState: TSecretVersionLifecycleState;
58
+ createdAt: number;
59
+ createdBy: string;
60
+ source: TSecretManagementSource;
61
+ retiredAt?: number;
62
+ revokedAt?: number;
63
+ purgedAt?: number;
64
+ }
65
+ export interface ISecretSetMetadata {
66
+ id: string;
67
+ organizationId: string;
68
+ name: string;
69
+ description?: string;
70
+ lifecycleState: 'active' | 'retired' | 'deleted';
71
+ revision: number;
72
+ /** Dedicated CAS revision for secrets owned by this set. */
73
+ secretsRevision: number;
74
+ currentConsumerRollout?: ISecretSetConsumerRolloutSummary;
75
+ createdAt: number;
76
+ updatedAt: number;
77
+ }
78
+ export type TSecretSetConsumerRolloutStatus = 'pending' | 'published' | 'applied' | 'failed';
79
+ export interface ISecretSetConsumerRolloutSummary {
80
+ rolloutId: string;
81
+ secretId: string;
82
+ secretVersionId: string;
83
+ totalConsumers: number;
84
+ pendingConsumers: number;
85
+ failedConsumers: number;
86
+ updatedAt: number;
87
+ }
88
+ export interface ISecretSetConsumerRolloutStatus {
89
+ serviceId: string;
90
+ status: TSecretSetConsumerRolloutStatus;
91
+ desiredManifestIds: string[];
92
+ appliedManifestIds: string[];
93
+ errorCode?: string;
94
+ updatedAt: number;
95
+ }
96
+ export interface ISecretEnvironmentDelivery {
97
+ type: 'environment';
98
+ variableName: string;
99
+ }
100
+ export interface ISecretFileDelivery {
101
+ type: 'file';
102
+ targetPath: string;
103
+ uid: number;
104
+ gid: number;
105
+ mode: number;
106
+ }
107
+ export type TSecretDelivery = ISecretEnvironmentDelivery | ISecretFileDelivery;
108
+ export interface ISecretSetAttachmentMapping {
109
+ /** Source key in the attached SecretSet. */
110
+ sourceKey: string;
111
+ /** Final service key. Defaults to sourceKey. */
112
+ targetKey?: string;
113
+ /** Optional service-specific delivery override. */
114
+ delivery?: TSecretDelivery;
115
+ }
116
+ export interface ISecretSetAttachment {
117
+ id: string;
118
+ secretSetId: string;
119
+ environment: TSecretEnvironment;
120
+ mappings?: ISecretSetAttachmentMapping[];
121
+ }
122
+ /**
123
+ * Caller-managed value-free inputs to service secret resolution.
124
+ * Cloudly verifies organization ownership when resolving the referenced sets.
125
+ */
126
+ export interface IServiceSecretConfiguration {
127
+ schemaVersion: 1;
128
+ /** Dedicated CAS revision for SecretSet attachments. */
129
+ revision: number;
130
+ /** Dedicated CAS revision for service-owned secret membership. */
131
+ secretsRevision: number;
132
+ secretSetAttachments: ISecretSetAttachment[];
133
+ }
134
+ export interface IResolvedSecretManifestEntry {
135
+ secretId: string;
136
+ secretVersionId: string;
137
+ key: string;
138
+ environment: TSecretEnvironment;
139
+ owner: TSecretOwner;
140
+ delivery: TSecretDelivery;
141
+ }
142
+ /** Immutable, value-free runtime snapshot. */
143
+ export interface IResolvedSecretManifest {
144
+ schemaVersion: 1;
145
+ id: string;
146
+ digest: TSha256Digest;
147
+ organizationId: string;
148
+ serviceId: string;
149
+ clusterId: string;
150
+ secretRolloutId: string;
151
+ secretRolloutGeneration: number;
152
+ entries: IResolvedSecretManifestEntry[];
153
+ createdAt: number;
154
+ }
155
+ export interface IResolvedSecretManifestReference {
156
+ manifestId: string;
157
+ manifestDigest: TSha256Digest;
158
+ clusterId: string;
159
+ secretRolloutId: string;
160
+ secretRolloutGeneration: number;
161
+ }
162
+ export interface IAcceptedPreviousSecretManifest {
163
+ manifest: IResolvedSecretManifestReference;
164
+ /** Exclusive material-issuance deadline for tasks draining the previous rollout. */
165
+ acceptedUntil: number;
166
+ }
167
+ export type TClusterSecretDeploymentStatus = 'pending' | 'applying' | 'applied' | 'drifted' | 'failed';
168
+ export interface IClusterSecretDeploymentState {
169
+ clusterId: string;
170
+ desiredManifest: IResolvedSecretManifestReference;
171
+ appliedManifest?: IResolvedSecretManifestReference;
172
+ previousAcceptedManifest?: IAcceptedPreviousSecretManifest;
173
+ status: TClusterSecretDeploymentStatus;
174
+ updatedAt: number;
175
+ }
176
+ /** Server-managed per-cluster authority switched with an expected revision CAS. */
177
+ export interface IServiceSecretDeploymentPlan {
178
+ schemaVersion: 1;
179
+ revision: number;
180
+ clusterStates: IClusterSecretDeploymentState[];
181
+ updatedAt: number;
182
+ }
183
+ export declare const resolvedSecretManifestReferencesEqual: (leftArg: IResolvedSecretManifestReference | undefined, rightArg: IResolvedSecretManifestReference | undefined) => boolean;
184
+ export declare const isResolvedSecretManifestReferenceAccepted: (stateArg: IClusterSecretDeploymentState, referenceArg: IResolvedSecretManifestReference, nowArg: number) => boolean;
185
+ export declare const validateSecretManagementScope: (sourceArg: TSecretManagementSource, scopeArg: unknown) => string[];
186
+ export declare const validateSecretDelivery: (deliveryArg: unknown) => string[];
187
+ /**
188
+ * One shared precedence rule for resolution and runtime verification.
189
+ * A manifest is authoritative once published; before publication an attachment
190
+ * override wins over the Secret default.
191
+ */
192
+ export declare const resolveSecretDelivery: (deliveryArg: {
193
+ secretDefault: TSecretDelivery;
194
+ attachmentOverride?: TSecretDelivery;
195
+ manifestDelivery?: TSecretDelivery;
196
+ }) => TSecretDelivery;
197
+ export declare const validateServiceSecretConfiguration: (configurationArg: unknown) => string[];
198
+ export declare const validateServiceSecretMode: (serviceDataArg: unknown) => string[];
199
+ export declare const validateSecretSetAttachmentOwnership: (configurationArg: IServiceSecretConfiguration, serviceOrganizationIdArg: string, secretSetsArg: ISecretSetMetadata[]) => string[];
200
+ export declare const createResolvedSecretManifestDigestInput: (manifestArg: IResolvedSecretManifest) => string;
201
+ /** Shared canonical digest; the digest field itself is excluded from the input. */
202
+ export declare const computeResolvedSecretManifestDigest: (manifestArg: IResolvedSecretManifest) => Promise<TSha256Digest>;
203
+ export declare const verifyResolvedSecretManifestDigest: (manifestArg: IResolvedSecretManifest) => Promise<boolean>;
204
+ export declare const validateResolvedSecretManifest: (manifestArg: unknown) => string[];
205
+ export declare const validateServiceSecretDeploymentPlan: (planArg: unknown, expectedTargetClusterIdsArg?: string[]) => string[];