@abloatai/transaction 0.58.0 → 0.59.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client/ablo.d.ts +3 -4
- package/dist/client/ablo.d.ts.map +1 -1
- package/dist/client/ablo.js.map +1 -1
- package/dist/client/surface.d.ts +15 -0
- package/dist/client/surface.d.ts.map +1 -0
- package/dist/client/surface.js +29 -0
- package/dist/client/surface.js.map +1 -0
- package/dist/pricing.d.ts +7 -1
- package/dist/pricing.d.ts.map +1 -1
- package/dist/pricing.js +16 -2
- package/dist/pricing.js.map +1 -1
- package/dist/schema/ddl.d.ts.map +1 -1
- package/dist/schema/ddl.js +1 -1
- package/dist/schema/ddl.js.map +1 -1
- package/dist/schema/deployment/backfill.d.ts +44 -0
- package/dist/schema/deployment/backfill.d.ts.map +1 -0
- package/dist/schema/deployment/backfill.js +57 -0
- package/dist/schema/deployment/backfill.js.map +1 -0
- package/dist/schema/deployment/contracts.d.ts +526 -0
- package/dist/schema/deployment/contracts.d.ts.map +1 -0
- package/dist/schema/deployment/contracts.js +77 -0
- package/dist/schema/deployment/contracts.js.map +1 -0
- package/dist/schema/deployment/fingerprint.d.ts +3 -0
- package/dist/schema/deployment/fingerprint.d.ts.map +1 -0
- package/dist/schema/deployment/fingerprint.js +18 -0
- package/dist/schema/deployment/fingerprint.js.map +1 -0
- package/dist/schema/deployment/index.d.ts +18 -0
- package/dist/schema/deployment/index.d.ts.map +1 -0
- package/dist/schema/deployment/index.js +71 -0
- package/dist/schema/deployment/index.js.map +1 -0
- package/dist/schema/deployment/postgresCatalog.d.ts +39 -0
- package/dist/schema/deployment/postgresCatalog.d.ts.map +1 -0
- package/dist/schema/deployment/postgresCatalog.js +86 -0
- package/dist/schema/deployment/postgresCatalog.js.map +1 -0
- package/dist/schema/deployment/reconcile.d.ts +20 -0
- package/dist/schema/deployment/reconcile.d.ts.map +1 -0
- package/dist/schema/deployment/reconcile.js +226 -0
- package/dist/schema/deployment/reconcile.js.map +1 -0
- package/dist/schema/deployment/sequence.d.ts +4 -0
- package/dist/schema/deployment/sequence.d.ts.map +1 -0
- package/dist/schema/deployment/sequence.js +71 -0
- package/dist/schema/deployment/sequence.js.map +1 -0
- package/dist/schema/index.d.ts +1 -0
- package/dist/schema/index.d.ts.map +1 -1
- package/dist/schema/index.js +4 -0
- package/dist/schema/index.js.map +1 -1
- package/package.json +1 -1
- package/src/client/ablo.ts +2 -2
- package/src/client/surface.ts +50 -0
- package/src/pricing.ts +16 -2
- package/src/schema/ddl.ts +3 -1
- package/src/schema/deployment/backfill.ts +88 -0
- package/src/schema/deployment/contracts.ts +119 -0
- package/src/schema/deployment/fingerprint.ts +13 -0
- package/src/schema/deployment/index.ts +81 -0
- package/src/schema/deployment/postgresCatalog.ts +131 -0
- package/src/schema/deployment/reconcile.ts +219 -0
- package/src/schema/deployment/sequence.ts +85 -0
- package/src/schema/index.ts +5 -0
|
@@ -0,0 +1,526 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import type { SchemaJSON } from '../serialize.js';
|
|
3
|
+
import type { BackfillValue, RenameHints } from '../diff.js';
|
|
4
|
+
import type { MigrationStep } from '../diff.js';
|
|
5
|
+
export declare const deploymentPhaseSchema: z.ZodEnum<{
|
|
6
|
+
expand: "expand";
|
|
7
|
+
intent: "intent";
|
|
8
|
+
dual_write: "dual_write";
|
|
9
|
+
backfill: "backfill";
|
|
10
|
+
verify: "verify";
|
|
11
|
+
switch: "switch";
|
|
12
|
+
contract: "contract";
|
|
13
|
+
recover: "recover";
|
|
14
|
+
}>;
|
|
15
|
+
export type DeploymentPhase = z.infer<typeof deploymentPhaseSchema>;
|
|
16
|
+
export declare const deploymentOwnerSchema: z.ZodEnum<{
|
|
17
|
+
ablo: "ablo";
|
|
18
|
+
application: "application";
|
|
19
|
+
application_migration: "application_migration";
|
|
20
|
+
}>;
|
|
21
|
+
export type DeploymentOwner = z.infer<typeof deploymentOwnerSchema>;
|
|
22
|
+
export declare const deploymentSeveritySchema: z.ZodEnum<{
|
|
23
|
+
error: "error";
|
|
24
|
+
info: "info";
|
|
25
|
+
warning: "warning";
|
|
26
|
+
blocker: "blocker";
|
|
27
|
+
}>;
|
|
28
|
+
export type DeploymentSeverity = z.infer<typeof deploymentSeveritySchema>;
|
|
29
|
+
export declare const deploymentCategorySchema: z.ZodEnum<{
|
|
30
|
+
policy_intent: "policy_intent";
|
|
31
|
+
physical_contract: "physical_contract";
|
|
32
|
+
compatibility: "compatibility";
|
|
33
|
+
data_movement: "data_movement";
|
|
34
|
+
destructive_contract: "destructive_contract";
|
|
35
|
+
advisory: "advisory";
|
|
36
|
+
observation: "observation";
|
|
37
|
+
}>;
|
|
38
|
+
export type DeploymentCategory = z.infer<typeof deploymentCategorySchema>;
|
|
39
|
+
export declare const deploymentDirectionSchema: z.ZodEnum<{
|
|
40
|
+
source_to_active: "source_to_active";
|
|
41
|
+
source_to_database: "source_to_database";
|
|
42
|
+
active_to_database: "active_to_database";
|
|
43
|
+
client_to_active: "client_to_active";
|
|
44
|
+
}>;
|
|
45
|
+
export type DeploymentDirection = z.infer<typeof deploymentDirectionSchema>;
|
|
46
|
+
export declare const databaseColumnSnapshotSchema: z.ZodObject<{
|
|
47
|
+
name: z.ZodString;
|
|
48
|
+
dataType: z.ZodString;
|
|
49
|
+
nullable: z.ZodBoolean;
|
|
50
|
+
default: z.ZodNullable<z.ZodString>;
|
|
51
|
+
primary: z.ZodBoolean;
|
|
52
|
+
unique: z.ZodBoolean;
|
|
53
|
+
nullCount: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
54
|
+
}, z.core.$strip>;
|
|
55
|
+
export type DatabaseColumnSnapshot = z.infer<typeof databaseColumnSnapshotSchema>;
|
|
56
|
+
export declare const databaseIndexSnapshotSchema: z.ZodObject<{
|
|
57
|
+
name: z.ZodString;
|
|
58
|
+
columns: z.ZodArray<z.ZodString>;
|
|
59
|
+
unique: z.ZodBoolean;
|
|
60
|
+
valid: z.ZodBoolean;
|
|
61
|
+
ready: z.ZodBoolean;
|
|
62
|
+
predicate: z.ZodNullable<z.ZodString>;
|
|
63
|
+
}, z.core.$strip>;
|
|
64
|
+
export declare const databaseForeignKeySnapshotSchema: z.ZodObject<{
|
|
65
|
+
name: z.ZodString;
|
|
66
|
+
columns: z.ZodArray<z.ZodString>;
|
|
67
|
+
referencedSchema: z.ZodString;
|
|
68
|
+
referencedTable: z.ZodString;
|
|
69
|
+
referencedColumns: z.ZodArray<z.ZodString>;
|
|
70
|
+
validated: z.ZodBoolean;
|
|
71
|
+
}, z.core.$strip>;
|
|
72
|
+
export declare const databaseTableSnapshotSchema: z.ZodObject<{
|
|
73
|
+
schema: z.ZodString;
|
|
74
|
+
name: z.ZodString;
|
|
75
|
+
columns: z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
76
|
+
name: z.ZodString;
|
|
77
|
+
dataType: z.ZodString;
|
|
78
|
+
nullable: z.ZodBoolean;
|
|
79
|
+
default: z.ZodNullable<z.ZodString>;
|
|
80
|
+
primary: z.ZodBoolean;
|
|
81
|
+
unique: z.ZodBoolean;
|
|
82
|
+
nullCount: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
83
|
+
}, z.core.$strip>>;
|
|
84
|
+
indexes: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
85
|
+
name: z.ZodString;
|
|
86
|
+
columns: z.ZodArray<z.ZodString>;
|
|
87
|
+
unique: z.ZodBoolean;
|
|
88
|
+
valid: z.ZodBoolean;
|
|
89
|
+
ready: z.ZodBoolean;
|
|
90
|
+
predicate: z.ZodNullable<z.ZodString>;
|
|
91
|
+
}, z.core.$strip>>>;
|
|
92
|
+
foreignKeys: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
93
|
+
name: z.ZodString;
|
|
94
|
+
columns: z.ZodArray<z.ZodString>;
|
|
95
|
+
referencedSchema: z.ZodString;
|
|
96
|
+
referencedTable: z.ZodString;
|
|
97
|
+
referencedColumns: z.ZodArray<z.ZodString>;
|
|
98
|
+
validated: z.ZodBoolean;
|
|
99
|
+
}, z.core.$strip>>>;
|
|
100
|
+
rowLevelSecurity: z.ZodNullable<z.ZodBoolean>;
|
|
101
|
+
forceRowLevelSecurity: z.ZodNullable<z.ZodBoolean>;
|
|
102
|
+
replicaIdentity: z.ZodNullable<z.ZodString>;
|
|
103
|
+
publicationMember: z.ZodNullable<z.ZodBoolean>;
|
|
104
|
+
}, z.core.$strip>;
|
|
105
|
+
export type DatabaseTableSnapshot = z.infer<typeof databaseTableSnapshotSchema>;
|
|
106
|
+
export declare const databaseSnapshotSchema: z.ZodObject<{
|
|
107
|
+
observedAt: z.ZodString;
|
|
108
|
+
subject: z.ZodString;
|
|
109
|
+
fingerprint: z.ZodString;
|
|
110
|
+
appSchema: z.ZodString;
|
|
111
|
+
ownership: z.ZodEnum<{
|
|
112
|
+
ablo: "ablo";
|
|
113
|
+
application: "application";
|
|
114
|
+
}>;
|
|
115
|
+
tables: z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
116
|
+
schema: z.ZodString;
|
|
117
|
+
name: z.ZodString;
|
|
118
|
+
columns: z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
119
|
+
name: z.ZodString;
|
|
120
|
+
dataType: z.ZodString;
|
|
121
|
+
nullable: z.ZodBoolean;
|
|
122
|
+
default: z.ZodNullable<z.ZodString>;
|
|
123
|
+
primary: z.ZodBoolean;
|
|
124
|
+
unique: z.ZodBoolean;
|
|
125
|
+
nullCount: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
126
|
+
}, z.core.$strip>>;
|
|
127
|
+
indexes: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
128
|
+
name: z.ZodString;
|
|
129
|
+
columns: z.ZodArray<z.ZodString>;
|
|
130
|
+
unique: z.ZodBoolean;
|
|
131
|
+
valid: z.ZodBoolean;
|
|
132
|
+
ready: z.ZodBoolean;
|
|
133
|
+
predicate: z.ZodNullable<z.ZodString>;
|
|
134
|
+
}, z.core.$strip>>>;
|
|
135
|
+
foreignKeys: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
136
|
+
name: z.ZodString;
|
|
137
|
+
columns: z.ZodArray<z.ZodString>;
|
|
138
|
+
referencedSchema: z.ZodString;
|
|
139
|
+
referencedTable: z.ZodString;
|
|
140
|
+
referencedColumns: z.ZodArray<z.ZodString>;
|
|
141
|
+
validated: z.ZodBoolean;
|
|
142
|
+
}, z.core.$strip>>>;
|
|
143
|
+
rowLevelSecurity: z.ZodNullable<z.ZodBoolean>;
|
|
144
|
+
forceRowLevelSecurity: z.ZodNullable<z.ZodBoolean>;
|
|
145
|
+
replicaIdentity: z.ZodNullable<z.ZodString>;
|
|
146
|
+
publicationMember: z.ZodNullable<z.ZodBoolean>;
|
|
147
|
+
}, z.core.$strip>>;
|
|
148
|
+
}, z.core.$strip>;
|
|
149
|
+
export type DatabaseSnapshot = z.infer<typeof databaseSnapshotSchema>;
|
|
150
|
+
export interface SourceSchemaSnapshot {
|
|
151
|
+
readonly observedAt: string;
|
|
152
|
+
readonly path: string;
|
|
153
|
+
readonly hash: string;
|
|
154
|
+
readonly schema: SchemaJSON;
|
|
155
|
+
}
|
|
156
|
+
export interface ActiveSchemaSnapshot {
|
|
157
|
+
readonly observedAt: string;
|
|
158
|
+
readonly schemaId: string;
|
|
159
|
+
readonly version: number;
|
|
160
|
+
readonly hash: string;
|
|
161
|
+
readonly pushedAt: string | null;
|
|
162
|
+
readonly schema: SchemaJSON;
|
|
163
|
+
}
|
|
164
|
+
export interface DeploymentTarget {
|
|
165
|
+
readonly organizationId: string | null;
|
|
166
|
+
readonly projectId: string | null;
|
|
167
|
+
readonly branchId: string | null;
|
|
168
|
+
readonly databaseSubject: string | null;
|
|
169
|
+
readonly confirmed: boolean;
|
|
170
|
+
}
|
|
171
|
+
export declare const deploymentGateSchema: z.ZodObject<{
|
|
172
|
+
id: z.ZodString;
|
|
173
|
+
phase: z.ZodEnum<{
|
|
174
|
+
expand: "expand";
|
|
175
|
+
dual_write: "dual_write";
|
|
176
|
+
backfill: "backfill";
|
|
177
|
+
verify: "verify";
|
|
178
|
+
switch: "switch";
|
|
179
|
+
contract: "contract";
|
|
180
|
+
}>;
|
|
181
|
+
owner: z.ZodEnum<{
|
|
182
|
+
ablo: "ablo";
|
|
183
|
+
application: "application";
|
|
184
|
+
application_migration: "application_migration";
|
|
185
|
+
}>;
|
|
186
|
+
resource: z.ZodString;
|
|
187
|
+
title: z.ZodString;
|
|
188
|
+
action: z.ZodString;
|
|
189
|
+
status: z.ZodEnum<{
|
|
190
|
+
ready: "ready";
|
|
191
|
+
pending: "pending";
|
|
192
|
+
satisfied: "satisfied";
|
|
193
|
+
}>;
|
|
194
|
+
dependsOn: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
195
|
+
approval: z.ZodOptional<z.ZodString>;
|
|
196
|
+
}, z.core.$strip>;
|
|
197
|
+
export declare const deploymentManifestSchema: z.ZodObject<{
|
|
198
|
+
id: z.ZodString;
|
|
199
|
+
live: z.ZodDefault<z.ZodBoolean>;
|
|
200
|
+
targetPhase: z.ZodDefault<z.ZodEnum<{
|
|
201
|
+
expand: "expand";
|
|
202
|
+
dual_write: "dual_write";
|
|
203
|
+
backfill: "backfill";
|
|
204
|
+
verify: "verify";
|
|
205
|
+
switch: "switch";
|
|
206
|
+
contract: "contract";
|
|
207
|
+
}>>;
|
|
208
|
+
gates: z.ZodArray<z.ZodObject<{
|
|
209
|
+
id: z.ZodString;
|
|
210
|
+
phase: z.ZodEnum<{
|
|
211
|
+
expand: "expand";
|
|
212
|
+
dual_write: "dual_write";
|
|
213
|
+
backfill: "backfill";
|
|
214
|
+
verify: "verify";
|
|
215
|
+
switch: "switch";
|
|
216
|
+
contract: "contract";
|
|
217
|
+
}>;
|
|
218
|
+
owner: z.ZodEnum<{
|
|
219
|
+
ablo: "ablo";
|
|
220
|
+
application: "application";
|
|
221
|
+
application_migration: "application_migration";
|
|
222
|
+
}>;
|
|
223
|
+
resource: z.ZodString;
|
|
224
|
+
title: z.ZodString;
|
|
225
|
+
action: z.ZodString;
|
|
226
|
+
status: z.ZodEnum<{
|
|
227
|
+
ready: "ready";
|
|
228
|
+
pending: "pending";
|
|
229
|
+
satisfied: "satisfied";
|
|
230
|
+
}>;
|
|
231
|
+
dependsOn: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
232
|
+
approval: z.ZodOptional<z.ZodString>;
|
|
233
|
+
}, z.core.$strip>>;
|
|
234
|
+
}, z.core.$strip>;
|
|
235
|
+
export type DeploymentGate = z.infer<typeof deploymentGateSchema>;
|
|
236
|
+
export type DeploymentManifest = z.infer<typeof deploymentManifestSchema>;
|
|
237
|
+
export interface DeploymentIntent {
|
|
238
|
+
readonly renames?: RenameHints;
|
|
239
|
+
readonly backfills?: readonly BackfillValue[];
|
|
240
|
+
readonly acceptDestructive?: boolean;
|
|
241
|
+
readonly manifest?: DeploymentManifest;
|
|
242
|
+
}
|
|
243
|
+
export interface DeploymentObservation {
|
|
244
|
+
readonly target: DeploymentTarget;
|
|
245
|
+
readonly source: SourceSchemaSnapshot;
|
|
246
|
+
readonly active: ActiveSchemaSnapshot | null;
|
|
247
|
+
readonly database: DatabaseSnapshot | null;
|
|
248
|
+
readonly intent?: DeploymentIntent;
|
|
249
|
+
readonly supplementalFindings?: readonly DeploymentFinding[];
|
|
250
|
+
}
|
|
251
|
+
export interface DeploymentFinding {
|
|
252
|
+
readonly id: string;
|
|
253
|
+
readonly code: string;
|
|
254
|
+
readonly category: DeploymentCategory;
|
|
255
|
+
readonly severity: DeploymentSeverity;
|
|
256
|
+
readonly direction: DeploymentDirection;
|
|
257
|
+
readonly phase: DeploymentPhase;
|
|
258
|
+
readonly owner: DeploymentOwner;
|
|
259
|
+
readonly model?: string;
|
|
260
|
+
readonly field?: string;
|
|
261
|
+
readonly column?: string;
|
|
262
|
+
readonly from?: unknown;
|
|
263
|
+
readonly to?: unknown;
|
|
264
|
+
readonly message: string;
|
|
265
|
+
readonly action: string;
|
|
266
|
+
readonly dependsOn?: readonly string[];
|
|
267
|
+
}
|
|
268
|
+
export interface DeploymentStep {
|
|
269
|
+
readonly id: string;
|
|
270
|
+
readonly phase: DeploymentPhase;
|
|
271
|
+
readonly owner: DeploymentOwner;
|
|
272
|
+
readonly title: string;
|
|
273
|
+
readonly action: string;
|
|
274
|
+
readonly dependsOn: readonly string[];
|
|
275
|
+
readonly findingIds: readonly string[];
|
|
276
|
+
readonly status: 'ready' | 'blocked' | 'advisory';
|
|
277
|
+
readonly executableByAblo: boolean;
|
|
278
|
+
}
|
|
279
|
+
export interface SchemaDeploymentPlan {
|
|
280
|
+
readonly id: 'ablo-schema-deployment-plan-v1';
|
|
281
|
+
readonly mode: 'plan';
|
|
282
|
+
readonly createdAt: string;
|
|
283
|
+
readonly fingerprint: string;
|
|
284
|
+
readonly target: DeploymentTarget;
|
|
285
|
+
readonly states: {
|
|
286
|
+
readonly source: Omit<SourceSchemaSnapshot, 'schema'>;
|
|
287
|
+
readonly active: Omit<ActiveSchemaSnapshot, 'schema'> | null;
|
|
288
|
+
readonly database: Omit<DatabaseSnapshot, 'tables'> | null;
|
|
289
|
+
};
|
|
290
|
+
readonly findings: readonly DeploymentFinding[];
|
|
291
|
+
readonly steps: readonly DeploymentStep[];
|
|
292
|
+
readonly outcome: 'aligned' | 'ready' | 'blocked';
|
|
293
|
+
readonly operations: {
|
|
294
|
+
readonly sourceToActive: readonly MigrationStep[];
|
|
295
|
+
readonly provision: readonly MigrationStep[];
|
|
296
|
+
};
|
|
297
|
+
readonly rollbackTarget: {
|
|
298
|
+
readonly schemaId: string;
|
|
299
|
+
readonly version: number;
|
|
300
|
+
readonly hash: string;
|
|
301
|
+
readonly strategy: 'reactivate_artifact';
|
|
302
|
+
} | null;
|
|
303
|
+
readonly recovery: 'rollback' | 'forward_only';
|
|
304
|
+
}
|
|
305
|
+
export interface DeploymentApplyResult {
|
|
306
|
+
readonly plan: SchemaDeploymentPlan;
|
|
307
|
+
readonly appliedStepIds: readonly string[];
|
|
308
|
+
readonly verification: SchemaDeploymentPlan;
|
|
309
|
+
readonly recorded: boolean;
|
|
310
|
+
}
|
|
311
|
+
export declare const deploymentTargetSchema: z.ZodObject<{
|
|
312
|
+
organizationId: z.ZodNullable<z.ZodString>;
|
|
313
|
+
projectId: z.ZodNullable<z.ZodString>;
|
|
314
|
+
branchId: z.ZodNullable<z.ZodString>;
|
|
315
|
+
databaseSubject: z.ZodNullable<z.ZodString>;
|
|
316
|
+
confirmed: z.ZodBoolean;
|
|
317
|
+
}, z.core.$strip>;
|
|
318
|
+
export declare const deploymentFindingSchema: z.ZodObject<{
|
|
319
|
+
id: z.ZodString;
|
|
320
|
+
code: z.ZodString;
|
|
321
|
+
category: z.ZodEnum<{
|
|
322
|
+
policy_intent: "policy_intent";
|
|
323
|
+
physical_contract: "physical_contract";
|
|
324
|
+
compatibility: "compatibility";
|
|
325
|
+
data_movement: "data_movement";
|
|
326
|
+
destructive_contract: "destructive_contract";
|
|
327
|
+
advisory: "advisory";
|
|
328
|
+
observation: "observation";
|
|
329
|
+
}>;
|
|
330
|
+
severity: z.ZodEnum<{
|
|
331
|
+
error: "error";
|
|
332
|
+
info: "info";
|
|
333
|
+
warning: "warning";
|
|
334
|
+
blocker: "blocker";
|
|
335
|
+
}>;
|
|
336
|
+
direction: z.ZodEnum<{
|
|
337
|
+
source_to_active: "source_to_active";
|
|
338
|
+
source_to_database: "source_to_database";
|
|
339
|
+
active_to_database: "active_to_database";
|
|
340
|
+
client_to_active: "client_to_active";
|
|
341
|
+
}>;
|
|
342
|
+
phase: z.ZodEnum<{
|
|
343
|
+
expand: "expand";
|
|
344
|
+
intent: "intent";
|
|
345
|
+
dual_write: "dual_write";
|
|
346
|
+
backfill: "backfill";
|
|
347
|
+
verify: "verify";
|
|
348
|
+
switch: "switch";
|
|
349
|
+
contract: "contract";
|
|
350
|
+
recover: "recover";
|
|
351
|
+
}>;
|
|
352
|
+
owner: z.ZodEnum<{
|
|
353
|
+
ablo: "ablo";
|
|
354
|
+
application: "application";
|
|
355
|
+
application_migration: "application_migration";
|
|
356
|
+
}>;
|
|
357
|
+
model: z.ZodOptional<z.ZodString>;
|
|
358
|
+
field: z.ZodOptional<z.ZodString>;
|
|
359
|
+
column: z.ZodOptional<z.ZodString>;
|
|
360
|
+
from: z.ZodOptional<z.ZodUnknown>;
|
|
361
|
+
to: z.ZodOptional<z.ZodUnknown>;
|
|
362
|
+
message: z.ZodString;
|
|
363
|
+
action: z.ZodString;
|
|
364
|
+
dependsOn: z.ZodOptional<z.ZodReadonly<z.ZodArray<z.ZodString>>>;
|
|
365
|
+
}, z.core.$strip>;
|
|
366
|
+
export declare const deploymentStepSchema: z.ZodObject<{
|
|
367
|
+
id: z.ZodString;
|
|
368
|
+
phase: z.ZodEnum<{
|
|
369
|
+
expand: "expand";
|
|
370
|
+
intent: "intent";
|
|
371
|
+
dual_write: "dual_write";
|
|
372
|
+
backfill: "backfill";
|
|
373
|
+
verify: "verify";
|
|
374
|
+
switch: "switch";
|
|
375
|
+
contract: "contract";
|
|
376
|
+
recover: "recover";
|
|
377
|
+
}>;
|
|
378
|
+
owner: z.ZodEnum<{
|
|
379
|
+
ablo: "ablo";
|
|
380
|
+
application: "application";
|
|
381
|
+
application_migration: "application_migration";
|
|
382
|
+
}>;
|
|
383
|
+
title: z.ZodString;
|
|
384
|
+
action: z.ZodString;
|
|
385
|
+
dependsOn: z.ZodReadonly<z.ZodArray<z.ZodString>>;
|
|
386
|
+
findingIds: z.ZodReadonly<z.ZodArray<z.ZodString>>;
|
|
387
|
+
status: z.ZodEnum<{
|
|
388
|
+
ready: "ready";
|
|
389
|
+
blocked: "blocked";
|
|
390
|
+
advisory: "advisory";
|
|
391
|
+
}>;
|
|
392
|
+
executableByAblo: z.ZodBoolean;
|
|
393
|
+
}, z.core.$strip>;
|
|
394
|
+
export declare const schemaDeploymentPlanSchema: z.ZodObject<{
|
|
395
|
+
id: z.ZodLiteral<"ablo-schema-deployment-plan-v1">;
|
|
396
|
+
mode: z.ZodLiteral<"plan">;
|
|
397
|
+
createdAt: z.ZodString;
|
|
398
|
+
fingerprint: z.ZodString;
|
|
399
|
+
target: z.ZodObject<{
|
|
400
|
+
organizationId: z.ZodNullable<z.ZodString>;
|
|
401
|
+
projectId: z.ZodNullable<z.ZodString>;
|
|
402
|
+
branchId: z.ZodNullable<z.ZodString>;
|
|
403
|
+
databaseSubject: z.ZodNullable<z.ZodString>;
|
|
404
|
+
confirmed: z.ZodBoolean;
|
|
405
|
+
}, z.core.$strip>;
|
|
406
|
+
states: z.ZodObject<{
|
|
407
|
+
source: z.ZodObject<{
|
|
408
|
+
observedAt: z.ZodString;
|
|
409
|
+
path: z.ZodString;
|
|
410
|
+
hash: z.ZodString;
|
|
411
|
+
}, z.core.$strip>;
|
|
412
|
+
active: z.ZodNullable<z.ZodObject<{
|
|
413
|
+
observedAt: z.ZodString;
|
|
414
|
+
schemaId: z.ZodString;
|
|
415
|
+
version: z.ZodNumber;
|
|
416
|
+
hash: z.ZodString;
|
|
417
|
+
pushedAt: z.ZodNullable<z.ZodString>;
|
|
418
|
+
}, z.core.$strip>>;
|
|
419
|
+
database: z.ZodNullable<z.ZodObject<{
|
|
420
|
+
observedAt: z.ZodString;
|
|
421
|
+
subject: z.ZodString;
|
|
422
|
+
fingerprint: z.ZodString;
|
|
423
|
+
appSchema: z.ZodString;
|
|
424
|
+
ownership: z.ZodEnum<{
|
|
425
|
+
ablo: "ablo";
|
|
426
|
+
application: "application";
|
|
427
|
+
}>;
|
|
428
|
+
}, z.core.$strip>>;
|
|
429
|
+
}, z.core.$strip>;
|
|
430
|
+
findings: z.ZodReadonly<z.ZodArray<z.ZodObject<{
|
|
431
|
+
id: z.ZodString;
|
|
432
|
+
code: z.ZodString;
|
|
433
|
+
category: z.ZodEnum<{
|
|
434
|
+
policy_intent: "policy_intent";
|
|
435
|
+
physical_contract: "physical_contract";
|
|
436
|
+
compatibility: "compatibility";
|
|
437
|
+
data_movement: "data_movement";
|
|
438
|
+
destructive_contract: "destructive_contract";
|
|
439
|
+
advisory: "advisory";
|
|
440
|
+
observation: "observation";
|
|
441
|
+
}>;
|
|
442
|
+
severity: z.ZodEnum<{
|
|
443
|
+
error: "error";
|
|
444
|
+
info: "info";
|
|
445
|
+
warning: "warning";
|
|
446
|
+
blocker: "blocker";
|
|
447
|
+
}>;
|
|
448
|
+
direction: z.ZodEnum<{
|
|
449
|
+
source_to_active: "source_to_active";
|
|
450
|
+
source_to_database: "source_to_database";
|
|
451
|
+
active_to_database: "active_to_database";
|
|
452
|
+
client_to_active: "client_to_active";
|
|
453
|
+
}>;
|
|
454
|
+
phase: z.ZodEnum<{
|
|
455
|
+
expand: "expand";
|
|
456
|
+
intent: "intent";
|
|
457
|
+
dual_write: "dual_write";
|
|
458
|
+
backfill: "backfill";
|
|
459
|
+
verify: "verify";
|
|
460
|
+
switch: "switch";
|
|
461
|
+
contract: "contract";
|
|
462
|
+
recover: "recover";
|
|
463
|
+
}>;
|
|
464
|
+
owner: z.ZodEnum<{
|
|
465
|
+
ablo: "ablo";
|
|
466
|
+
application: "application";
|
|
467
|
+
application_migration: "application_migration";
|
|
468
|
+
}>;
|
|
469
|
+
model: z.ZodOptional<z.ZodString>;
|
|
470
|
+
field: z.ZodOptional<z.ZodString>;
|
|
471
|
+
column: z.ZodOptional<z.ZodString>;
|
|
472
|
+
from: z.ZodOptional<z.ZodUnknown>;
|
|
473
|
+
to: z.ZodOptional<z.ZodUnknown>;
|
|
474
|
+
message: z.ZodString;
|
|
475
|
+
action: z.ZodString;
|
|
476
|
+
dependsOn: z.ZodOptional<z.ZodReadonly<z.ZodArray<z.ZodString>>>;
|
|
477
|
+
}, z.core.$strip>>>;
|
|
478
|
+
steps: z.ZodReadonly<z.ZodArray<z.ZodObject<{
|
|
479
|
+
id: z.ZodString;
|
|
480
|
+
phase: z.ZodEnum<{
|
|
481
|
+
expand: "expand";
|
|
482
|
+
intent: "intent";
|
|
483
|
+
dual_write: "dual_write";
|
|
484
|
+
backfill: "backfill";
|
|
485
|
+
verify: "verify";
|
|
486
|
+
switch: "switch";
|
|
487
|
+
contract: "contract";
|
|
488
|
+
recover: "recover";
|
|
489
|
+
}>;
|
|
490
|
+
owner: z.ZodEnum<{
|
|
491
|
+
ablo: "ablo";
|
|
492
|
+
application: "application";
|
|
493
|
+
application_migration: "application_migration";
|
|
494
|
+
}>;
|
|
495
|
+
title: z.ZodString;
|
|
496
|
+
action: z.ZodString;
|
|
497
|
+
dependsOn: z.ZodReadonly<z.ZodArray<z.ZodString>>;
|
|
498
|
+
findingIds: z.ZodReadonly<z.ZodArray<z.ZodString>>;
|
|
499
|
+
status: z.ZodEnum<{
|
|
500
|
+
ready: "ready";
|
|
501
|
+
blocked: "blocked";
|
|
502
|
+
advisory: "advisory";
|
|
503
|
+
}>;
|
|
504
|
+
executableByAblo: z.ZodBoolean;
|
|
505
|
+
}, z.core.$strip>>>;
|
|
506
|
+
outcome: z.ZodEnum<{
|
|
507
|
+
ready: "ready";
|
|
508
|
+
blocked: "blocked";
|
|
509
|
+
aligned: "aligned";
|
|
510
|
+
}>;
|
|
511
|
+
operations: z.ZodObject<{
|
|
512
|
+
sourceToActive: z.ZodReadonly<z.ZodArray<z.ZodCustom<MigrationStep, MigrationStep>>>;
|
|
513
|
+
provision: z.ZodReadonly<z.ZodArray<z.ZodCustom<MigrationStep, MigrationStep>>>;
|
|
514
|
+
}, z.core.$strip>;
|
|
515
|
+
rollbackTarget: z.ZodNullable<z.ZodObject<{
|
|
516
|
+
schemaId: z.ZodString;
|
|
517
|
+
version: z.ZodNumber;
|
|
518
|
+
hash: z.ZodString;
|
|
519
|
+
strategy: z.ZodLiteral<"reactivate_artifact">;
|
|
520
|
+
}, z.core.$strip>>;
|
|
521
|
+
recovery: z.ZodEnum<{
|
|
522
|
+
rollback: "rollback";
|
|
523
|
+
forward_only: "forward_only";
|
|
524
|
+
}>;
|
|
525
|
+
}, z.core.$strip>;
|
|
526
|
+
//# sourceMappingURL=contracts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../../../src/schema/deployment/contracts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export const deploymentPhaseSchema = z.enum(['intent', 'expand', 'dual_write', 'backfill', 'verify', 'switch', 'contract', 'recover']);
|
|
3
|
+
export const deploymentOwnerSchema = z.enum(['application', 'application_migration', 'ablo']);
|
|
4
|
+
export const deploymentSeveritySchema = z.enum(['blocker', 'error', 'warning', 'info']);
|
|
5
|
+
export const deploymentCategorySchema = z.enum(['policy_intent', 'physical_contract', 'compatibility', 'data_movement', 'destructive_contract', 'advisory', 'observation']);
|
|
6
|
+
export const deploymentDirectionSchema = z.enum(['source_to_active', 'source_to_database', 'active_to_database', 'client_to_active']);
|
|
7
|
+
export const databaseColumnSnapshotSchema = z.object({
|
|
8
|
+
name: z.string(), dataType: z.string(), nullable: z.boolean(), default: z.string().nullable(), primary: z.boolean(), unique: z.boolean(),
|
|
9
|
+
/** Capped count of rows whose required routing value is NULL; absent for ordinary columns. */
|
|
10
|
+
nullCount: z.number().int().nonnegative().nullable().optional(),
|
|
11
|
+
});
|
|
12
|
+
export const databaseIndexSnapshotSchema = z.object({
|
|
13
|
+
name: z.string(), columns: z.array(z.string()), unique: z.boolean(), valid: z.boolean(), ready: z.boolean(), predicate: z.string().nullable(),
|
|
14
|
+
});
|
|
15
|
+
export const databaseForeignKeySnapshotSchema = z.object({
|
|
16
|
+
name: z.string(), columns: z.array(z.string()), referencedSchema: z.string(), referencedTable: z.string(), referencedColumns: z.array(z.string()), validated: z.boolean(),
|
|
17
|
+
});
|
|
18
|
+
export const databaseTableSnapshotSchema = z.object({
|
|
19
|
+
schema: z.string(), name: z.string(), columns: z.record(z.string(), databaseColumnSnapshotSchema),
|
|
20
|
+
indexes: z.array(databaseIndexSnapshotSchema).optional(), foreignKeys: z.array(databaseForeignKeySnapshotSchema).optional(),
|
|
21
|
+
rowLevelSecurity: z.boolean().nullable(), forceRowLevelSecurity: z.boolean().nullable(),
|
|
22
|
+
replicaIdentity: z.string().nullable(), publicationMember: z.boolean().nullable(),
|
|
23
|
+
});
|
|
24
|
+
export const databaseSnapshotSchema = z.object({
|
|
25
|
+
observedAt: z.string(), subject: z.string(), fingerprint: z.string(), appSchema: z.string(), ownership: z.enum(['application', 'ablo']),
|
|
26
|
+
tables: z.record(z.string(), databaseTableSnapshotSchema),
|
|
27
|
+
});
|
|
28
|
+
export const deploymentGateSchema = z.object({
|
|
29
|
+
id: z.string().min(1),
|
|
30
|
+
phase: z.enum(['expand', 'dual_write', 'backfill', 'verify', 'switch', 'contract']),
|
|
31
|
+
owner: deploymentOwnerSchema,
|
|
32
|
+
resource: z.string().min(1),
|
|
33
|
+
title: z.string().min(1),
|
|
34
|
+
action: z.string().min(1),
|
|
35
|
+
status: z.enum(['pending', 'ready', 'satisfied']),
|
|
36
|
+
dependsOn: z.array(z.string()).default([]),
|
|
37
|
+
approval: z.string().min(1).optional(),
|
|
38
|
+
});
|
|
39
|
+
export const deploymentManifestSchema = z.object({
|
|
40
|
+
id: z.string().min(1),
|
|
41
|
+
live: z.boolean().default(true),
|
|
42
|
+
targetPhase: z.enum(['expand', 'dual_write', 'backfill', 'verify', 'switch', 'contract']).default('expand'),
|
|
43
|
+
gates: z.array(deploymentGateSchema),
|
|
44
|
+
});
|
|
45
|
+
export const deploymentTargetSchema = z.object({
|
|
46
|
+
organizationId: z.string().nullable(), projectId: z.string().nullable(), branchId: z.string().nullable(), databaseSubject: z.string().nullable(), confirmed: z.boolean(),
|
|
47
|
+
});
|
|
48
|
+
export const deploymentFindingSchema = z.object({
|
|
49
|
+
id: z.string(), code: z.string(), category: deploymentCategorySchema, severity: deploymentSeveritySchema,
|
|
50
|
+
direction: deploymentDirectionSchema, phase: deploymentPhaseSchema, owner: deploymentOwnerSchema,
|
|
51
|
+
model: z.string().optional(), field: z.string().optional(), column: z.string().optional(), from: z.unknown().optional(), to: z.unknown().optional(),
|
|
52
|
+
message: z.string(), action: z.string(),
|
|
53
|
+
dependsOn: z.array(z.string()).readonly().optional(),
|
|
54
|
+
});
|
|
55
|
+
export const deploymentStepSchema = z.object({
|
|
56
|
+
id: z.string(), phase: deploymentPhaseSchema, owner: deploymentOwnerSchema, title: z.string(), action: z.string(),
|
|
57
|
+
dependsOn: z.array(z.string()).readonly(), findingIds: z.array(z.string()).readonly(), status: z.enum(['ready', 'blocked', 'advisory']), executableByAblo: z.boolean(),
|
|
58
|
+
});
|
|
59
|
+
export const schemaDeploymentPlanSchema = z.object({
|
|
60
|
+
id: z.literal('ablo-schema-deployment-plan-v1'), mode: z.literal('plan'), createdAt: z.string(), fingerprint: z.string(), target: deploymentTargetSchema,
|
|
61
|
+
states: z.object({
|
|
62
|
+
source: z.object({ observedAt: z.string(), path: z.string(), hash: z.string() }),
|
|
63
|
+
active: z.object({ observedAt: z.string(), schemaId: z.string(), version: z.number(), hash: z.string(), pushedAt: z.string().nullable() }).nullable(),
|
|
64
|
+
database: z.object({ observedAt: z.string(), subject: z.string(), fingerprint: z.string(), appSchema: z.string(), ownership: z.enum(['application', 'ablo']) }).nullable(),
|
|
65
|
+
}),
|
|
66
|
+
findings: z.array(deploymentFindingSchema).readonly(), steps: z.array(deploymentStepSchema).readonly(), outcome: z.enum(['aligned', 'ready', 'blocked']),
|
|
67
|
+
// Submitted operations are never executed. Apply re-observes and returns a
|
|
68
|
+
// server-built plan; this field is retained only to validate the full plan
|
|
69
|
+
// envelope and obtain its fingerprint.
|
|
70
|
+
operations: z.object({
|
|
71
|
+
sourceToActive: z.array(z.custom()).readonly(),
|
|
72
|
+
provision: z.array(z.custom()).readonly(),
|
|
73
|
+
}),
|
|
74
|
+
rollbackTarget: z.object({ schemaId: z.string(), version: z.number(), hash: z.string(), strategy: z.literal('reactivate_artifact') }).nullable(),
|
|
75
|
+
recovery: z.enum(['rollback', 'forward_only']),
|
|
76
|
+
});
|
|
77
|
+
//# sourceMappingURL=contracts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contracts.js","sourceRoot":"","sources":["../../../src/schema/deployment/contracts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fingerprint.d.ts","sourceRoot":"","sources":["../../../src/schema/deployment/fingerprint.ts"],"names":[],"mappings":"AAMA,qFAAqF;AACrF,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAK5D"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
function canonical(value) {
|
|
2
|
+
if (Array.isArray(value))
|
|
3
|
+
return `[${value.map(canonical).join(',')}]`;
|
|
4
|
+
if (value && typeof value === 'object')
|
|
5
|
+
return `{${Object.entries(value).sort(([a], [b]) => a.localeCompare(b)).map(([key, item]) => `${JSON.stringify(key)}:${canonical(item)}`).join(',')}}`;
|
|
6
|
+
return JSON.stringify(value);
|
|
7
|
+
}
|
|
8
|
+
/** Stable non-cryptographic identity used only to detect a changed reviewed plan. */
|
|
9
|
+
export function deploymentFingerprint(value) {
|
|
10
|
+
const input = canonical(value);
|
|
11
|
+
let hash = 0xcbf29ce484222325n;
|
|
12
|
+
for (let index = 0; index < input.length; index++) {
|
|
13
|
+
hash ^= BigInt(input.charCodeAt(index));
|
|
14
|
+
hash = BigInt.asUintN(64, hash * 0x100000001b3n);
|
|
15
|
+
}
|
|
16
|
+
return `plan_${hash.toString(16).padStart(16, '0')}`;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=fingerprint.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fingerprint.js","sourceRoot":"","sources":["../../../src/schema/deployment/fingerprint.ts"],"names":[],"mappings":"AAAA,SAAS,SAAS,CAAC,KAAc;IAC/B,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;IACvE,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,KAAgC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;IAC1N,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAC/B,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,qBAAqB,CAAC,KAAc;IAClD,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IAC/B,IAAI,IAAI,GAAG,mBAAmB,CAAC;IAC/B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;QAAC,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;QAAC,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,GAAG,cAAc,CAAC,CAAC;IAAC,CAAC;IACjJ,OAAO,QAAQ,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC;AACvD,CAAC"}
|