@syncular/core 0.1.3 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -19
- package/dist/blob-ref.d.ts +21 -0
- package/dist/blob-ref.js +97 -0
- package/dist/bytes.d.ts +45 -0
- package/dist/bytes.js +242 -0
- package/dist/canonical-json.d.ts +10 -0
- package/dist/canonical-json.js +18 -0
- package/dist/constants.d.ts +5 -0
- package/dist/constants.js +5 -0
- package/dist/crypto.d.ts +60 -0
- package/dist/crypto.js +251 -0
- package/dist/errors.d.ts +14 -0
- package/dist/errors.js +17 -0
- package/dist/frames.d.ts +24 -0
- package/dist/frames.js +42 -0
- package/dist/index.d.ts +18 -26
- package/dist/index.js +18 -43
- package/dist/message.d.ts +157 -0
- package/dist/message.js +786 -0
- package/dist/realtime.d.ts +92 -0
- package/dist/realtime.js +222 -0
- package/dist/render.d.ts +22 -0
- package/dist/render.js +273 -0
- package/dist/row-codec.d.ts +39 -0
- package/dist/row-codec.js +176 -0
- package/dist/segment.d.ts +18 -0
- package/dist/segment.js +105 -0
- package/dist/stream.d.ts +20 -0
- package/dist/stream.js +102 -0
- package/package.json +7 -59
- package/src/blob-ref.ts +135 -0
- package/src/bytes.ts +301 -0
- package/src/canonical-json.ts +20 -0
- package/src/constants.ts +7 -0
- package/src/crypto.ts +335 -0
- package/src/errors.ts +18 -0
- package/src/frames.ts +47 -0
- package/src/index.ts +18 -43
- package/src/message.ts +1024 -0
- package/src/realtime.ts +340 -0
- package/src/render.ts +325 -0
- package/src/row-codec.ts +265 -0
- package/src/segment.ts +150 -0
- package/src/stream.ts +128 -0
- package/dist/blobs.d.ts +0 -153
- package/dist/blobs.d.ts.map +0 -1
- package/dist/blobs.js +0 -47
- package/dist/blobs.js.map +0 -1
- package/dist/column-codecs.d.ts +0 -59
- package/dist/column-codecs.d.ts.map +0 -1
- package/dist/column-codecs.js +0 -159
- package/dist/column-codecs.js.map +0 -1
- package/dist/conflict.d.ts +0 -22
- package/dist/conflict.d.ts.map +0 -1
- package/dist/conflict.js +0 -81
- package/dist/conflict.js.map +0 -1
- package/dist/database.d.ts +0 -7
- package/dist/database.d.ts.map +0 -1
- package/dist/database.js +0 -14
- package/dist/database.js.map +0 -1
- package/dist/dialect.d.ts +0 -7
- package/dist/dialect.d.ts.map +0 -1
- package/dist/dialect.js +0 -2
- package/dist/dialect.js.map +0 -1
- package/dist/error-responses.d.ts +0 -393
- package/dist/error-responses.d.ts.map +0 -1
- package/dist/error-responses.js +0 -393
- package/dist/error-responses.js.map +0 -1
- package/dist/http/api-client.d.ts +0 -11
- package/dist/http/api-client.d.ts.map +0 -1
- package/dist/http/api-client.js +0 -30
- package/dist/http/api-client.js.map +0 -1
- package/dist/http/blob.d.ts +0 -6
- package/dist/http/blob.d.ts.map +0 -1
- package/dist/http/blob.js +0 -46
- package/dist/http/blob.js.map +0 -1
- package/dist/http/generated/api.d.ts +0 -5241
- package/dist/http/generated/api.d.ts.map +0 -1
- package/dist/http/generated/api.js +0 -6
- package/dist/http/generated/api.js.map +0 -1
- package/dist/http/index.d.ts +0 -18
- package/dist/http/index.d.ts.map +0 -1
- package/dist/http/index.js +0 -212
- package/dist/http/index.js.map +0 -1
- package/dist/http/shared.d.ts +0 -45
- package/dist/http/shared.d.ts.map +0 -1
- package/dist/http/shared.js +0 -122
- package/dist/http/shared.js.map +0 -1
- package/dist/http/transport-client.d.ts +0 -31
- package/dist/http/transport-client.d.ts.map +0 -1
- package/dist/http/transport-client.js +0 -193
- package/dist/http/transport-client.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/kysely-column-codecs.d.ts +0 -31
- package/dist/kysely-column-codecs.d.ts.map +0 -1
- package/dist/kysely-column-codecs.js +0 -452
- package/dist/kysely-column-codecs.js.map +0 -1
- package/dist/logger.d.ts +0 -29
- package/dist/logger.d.ts.map +0 -1
- package/dist/logger.js +0 -26
- package/dist/logger.js.map +0 -1
- package/dist/proxy/index.d.ts +0 -54
- package/dist/proxy/index.d.ts.map +0 -1
- package/dist/proxy/index.js +0 -7
- package/dist/proxy/index.js.map +0 -1
- package/dist/schemas/blobs.d.ts +0 -82
- package/dist/schemas/blobs.d.ts.map +0 -1
- package/dist/schemas/blobs.js +0 -64
- package/dist/schemas/blobs.js.map +0 -1
- package/dist/schemas/common.d.ts +0 -100
- package/dist/schemas/common.d.ts.map +0 -1
- package/dist/schemas/common.js +0 -64
- package/dist/schemas/common.js.map +0 -1
- package/dist/schemas/index.d.ts +0 -7
- package/dist/schemas/index.d.ts.map +0 -1
- package/dist/schemas/index.js +0 -7
- package/dist/schemas/index.js.map +0 -1
- package/dist/schemas/sync.d.ts +0 -1065
- package/dist/schemas/sync.d.ts.map +0 -1
- package/dist/schemas/sync.js +0 -361
- package/dist/schemas/sync.js.map +0 -1
- package/dist/scopes/index.d.ts +0 -113
- package/dist/scopes/index.d.ts.map +0 -1
- package/dist/scopes/index.js +0 -103
- package/dist/scopes/index.js.map +0 -1
- package/dist/sentry.d.ts +0 -31
- package/dist/sentry.d.ts.map +0 -1
- package/dist/sentry.js +0 -147
- package/dist/sentry.js.map +0 -1
- package/dist/snapshot-chunks.d.ts +0 -110
- package/dist/snapshot-chunks.d.ts.map +0 -1
- package/dist/snapshot-chunks.js +0 -682
- package/dist/snapshot-chunks.js.map +0 -1
- package/dist/sync-packs.d.ts +0 -33
- package/dist/sync-packs.d.ts.map +0 -1
- package/dist/sync-packs.js +0 -821
- package/dist/sync-packs.js.map +0 -1
- package/dist/telemetry.d.ts +0 -114
- package/dist/telemetry.d.ts.map +0 -1
- package/dist/telemetry.js +0 -114
- package/dist/telemetry.js.map +0 -1
- package/dist/transforms.d.ts +0 -146
- package/dist/transforms.d.ts.map +0 -1
- package/dist/transforms.js +0 -155
- package/dist/transforms.js.map +0 -1
- package/dist/types.d.ts +0 -210
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -20
- package/dist/types.js.map +0 -1
- package/dist/utils/bytes.d.ts +0 -4
- package/dist/utils/bytes.d.ts.map +0 -1
- package/dist/utils/bytes.js +0 -66
- package/dist/utils/bytes.js.map +0 -1
- package/dist/utils/compression.d.ts +0 -22
- package/dist/utils/compression.d.ts.map +0 -1
- package/dist/utils/compression.js +0 -129
- package/dist/utils/compression.js.map +0 -1
- package/dist/utils/crypto.d.ts +0 -13
- package/dist/utils/crypto.d.ts.map +0 -1
- package/dist/utils/crypto.js +0 -107
- package/dist/utils/crypto.js.map +0 -1
- package/dist/utils/id.d.ts +0 -3
- package/dist/utils/id.d.ts.map +0 -1
- package/dist/utils/id.js +0 -25
- package/dist/utils/id.js.map +0 -1
- package/dist/utils/index.d.ts +0 -10
- package/dist/utils/index.d.ts.map +0 -1
- package/dist/utils/index.js +0 -10
- package/dist/utils/index.js.map +0 -1
- package/dist/utils/internal-runtime.d.ts +0 -16
- package/dist/utils/internal-runtime.d.ts.map +0 -1
- package/dist/utils/internal-runtime.js +0 -14
- package/dist/utils/internal-runtime.js.map +0 -1
- package/dist/utils/object.d.ts +0 -2
- package/dist/utils/object.d.ts.map +0 -1
- package/dist/utils/object.js +0 -4
- package/dist/utils/object.js.map +0 -1
- package/dist/utils/realtime-change-index.d.ts +0 -9
- package/dist/utils/realtime-change-index.d.ts.map +0 -1
- package/dist/utils/realtime-change-index.js +0 -36
- package/dist/utils/realtime-change-index.js.map +0 -1
- package/dist/utils/realtime-connection-registry.d.ts +0 -40
- package/dist/utils/realtime-connection-registry.d.ts.map +0 -1
- package/dist/utils/realtime-connection-registry.js +0 -237
- package/dist/utils/realtime-connection-registry.js.map +0 -1
- package/dist/utils/table-registry.d.ts +0 -10
- package/dist/utils/table-registry.d.ts.map +0 -1
- package/dist/utils/table-registry.js +0 -54
- package/dist/utils/table-registry.js.map +0 -1
- package/dist/utils/url.d.ts +0 -3
- package/dist/utils/url.d.ts.map +0 -1
- package/dist/utils/url.js +0 -20
- package/dist/utils/url.js.map +0 -1
- package/src/blobs.ts +0 -219
- package/src/column-codecs.ts +0 -262
- package/src/conflict.ts +0 -92
- package/src/database.ts +0 -21
- package/src/dialect.ts +0 -8
- package/src/error-responses.ts +0 -423
- package/src/http/api-client.ts +0 -39
- package/src/http/blob.ts +0 -95
- package/src/http/generated/api.ts +0 -5241
- package/src/http/index.ts +0 -365
- package/src/http/shared.ts +0 -220
- package/src/http/transport-client.ts +0 -314
- package/src/kysely-column-codecs.ts +0 -585
- package/src/logger.ts +0 -38
- package/src/proxy/index.ts +0 -57
- package/src/schemas/blobs.ts +0 -110
- package/src/schemas/common.ts +0 -89
- package/src/schemas/index.ts +0 -7
- package/src/schemas/sync.ts +0 -517
- package/src/scopes/index.ts +0 -237
- package/src/sentry.ts +0 -200
- package/src/snapshot-chunks.ts +0 -964
- package/src/sync-packs.ts +0 -1096
- package/src/telemetry.ts +0 -243
- package/src/transforms.ts +0 -256
- package/src/types.ts +0 -267
- package/src/utils/bytes.ts +0 -75
- package/src/utils/compression.ts +0 -187
- package/src/utils/crypto.ts +0 -146
- package/src/utils/id.ts +0 -34
- package/src/utils/index.ts +0 -9
- package/src/utils/internal-runtime.ts +0 -39
- package/src/utils/object.ts +0 -3
- package/src/utils/realtime-change-index.ts +0 -44
- package/src/utils/realtime-connection-registry.ts +0 -286
- package/src/utils/table-registry.ts +0 -67
- package/src/utils/url.ts +0 -29
package/src/schemas/sync.ts
DELETED
|
@@ -1,517 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @syncular/core - Sync protocol Zod schemas
|
|
3
|
-
*
|
|
4
|
-
* These schemas define the sync protocol types and can be used for:
|
|
5
|
-
* - Runtime validation
|
|
6
|
-
* - OpenAPI spec generation
|
|
7
|
-
* - Type inference
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
import { z } from 'zod';
|
|
11
|
-
import {
|
|
12
|
-
SYNC_SCOPED_SNAPSHOT_ARTIFACT_KIND_SQLITE_V1,
|
|
13
|
-
SYNC_SCOPED_SNAPSHOT_ARTIFACT_MANIFEST_VERSION,
|
|
14
|
-
SYNC_SNAPSHOT_ARTIFACT_COMPRESSION_NONE,
|
|
15
|
-
SYNC_SNAPSHOT_CHUNK_COMPRESSION,
|
|
16
|
-
SYNC_SNAPSHOT_CHUNK_ENCODINGS,
|
|
17
|
-
} from '../snapshot-chunks';
|
|
18
|
-
|
|
19
|
-
// ============================================================================
|
|
20
|
-
// Operation Types
|
|
21
|
-
// ============================================================================
|
|
22
|
-
|
|
23
|
-
export const SyncOpSchema = z.enum(['upsert', 'delete']);
|
|
24
|
-
export type SyncOp = z.infer<typeof SyncOpSchema>;
|
|
25
|
-
|
|
26
|
-
// ============================================================================
|
|
27
|
-
// Scope Schemas
|
|
28
|
-
// ============================================================================
|
|
29
|
-
|
|
30
|
-
/**
|
|
31
|
-
* Stored scopes on a change (single values only)
|
|
32
|
-
*/
|
|
33
|
-
const StoredScopesSchema = z.record(z.string(), z.string());
|
|
34
|
-
|
|
35
|
-
/**
|
|
36
|
-
* Scope values in a subscription request (can be arrays)
|
|
37
|
-
*/
|
|
38
|
-
export const ScopeValuesSchema = z.record(
|
|
39
|
-
z.string(),
|
|
40
|
-
z.union([z.string(), z.array(z.string())])
|
|
41
|
-
);
|
|
42
|
-
|
|
43
|
-
// ============================================================================
|
|
44
|
-
// Auth Lease Schemas
|
|
45
|
-
// ============================================================================
|
|
46
|
-
|
|
47
|
-
export const SYNC_AUTH_LEASE_VERSION = 1;
|
|
48
|
-
export const SYNC_AUTH_LEASE_PROTOCOL_VERSION = 1;
|
|
49
|
-
export const SYNC_AUTH_LEASE_ALG_ES256 = 'ES256';
|
|
50
|
-
export const SYNC_AUTH_LEASE_TYP = 'syncular-auth-lease+jws';
|
|
51
|
-
export const SYNC_AUTH_LEASE_CODE_MISSING = 'sync.auth_lease_missing';
|
|
52
|
-
export const SYNC_AUTH_LEASE_CODE_INVALID = 'sync.auth_lease_invalid';
|
|
53
|
-
export const SYNC_AUTH_LEASE_CODE_EXPIRED = 'sync.auth_lease_expired';
|
|
54
|
-
export const SYNC_AUTH_LEASE_CODE_SCHEMA_MISMATCH =
|
|
55
|
-
'sync.auth_lease_schema_mismatch';
|
|
56
|
-
export const SYNC_AUTH_LEASE_CODE_SCOPE_MISMATCH =
|
|
57
|
-
'sync.auth_lease_scope_mismatch';
|
|
58
|
-
export const SYNC_AUTH_LEASE_CODE_SCOPE_REVOKED =
|
|
59
|
-
'sync.auth_lease_scope_revoked';
|
|
60
|
-
export const SYNC_AUTH_LEASE_CODE_BUSINESS_REJECTED =
|
|
61
|
-
'sync.auth_lease_business_rejected';
|
|
62
|
-
|
|
63
|
-
export const SyncAuthLeaseProtectedHeaderSchema = z.object({
|
|
64
|
-
alg: z.literal(SYNC_AUTH_LEASE_ALG_ES256),
|
|
65
|
-
kid: z.string().min(1),
|
|
66
|
-
typ: z.literal(SYNC_AUTH_LEASE_TYP),
|
|
67
|
-
});
|
|
68
|
-
|
|
69
|
-
export type SyncAuthLeaseProtectedHeader = z.infer<
|
|
70
|
-
typeof SyncAuthLeaseProtectedHeaderSchema
|
|
71
|
-
>;
|
|
72
|
-
|
|
73
|
-
export const SyncAuthLeaseCapabilitiesSchema = z.object({
|
|
74
|
-
allowBlobs: z.boolean(),
|
|
75
|
-
allowCrdt: z.boolean(),
|
|
76
|
-
allowEncryptedFields: z.boolean(),
|
|
77
|
-
});
|
|
78
|
-
|
|
79
|
-
export type SyncAuthLeaseCapabilities = z.infer<
|
|
80
|
-
typeof SyncAuthLeaseCapabilitiesSchema
|
|
81
|
-
>;
|
|
82
|
-
|
|
83
|
-
export const SyncAuthLeaseScopeSchema = z.object({
|
|
84
|
-
subscriptionId: z.string().min(1),
|
|
85
|
-
table: z.string().min(1),
|
|
86
|
-
values: ScopeValuesSchema,
|
|
87
|
-
operations: z.array(SyncOpSchema).min(1),
|
|
88
|
-
});
|
|
89
|
-
|
|
90
|
-
export type SyncAuthLeaseScope = z.infer<typeof SyncAuthLeaseScopeSchema>;
|
|
91
|
-
|
|
92
|
-
export const SyncAuthLeasePayloadSchema = z.object({
|
|
93
|
-
version: z.literal(SYNC_AUTH_LEASE_VERSION),
|
|
94
|
-
leaseId: z.string().min(1),
|
|
95
|
-
issuer: z.string().min(1),
|
|
96
|
-
audience: z.string().min(1),
|
|
97
|
-
actorId: z.string().min(1),
|
|
98
|
-
subject: z.record(z.string(), z.unknown()).default({}),
|
|
99
|
-
schemaVersion: z.number().int().min(1),
|
|
100
|
-
protocolVersion: z.literal(SYNC_AUTH_LEASE_PROTOCOL_VERSION),
|
|
101
|
-
issuedAtMs: z.number().int(),
|
|
102
|
-
notBeforeMs: z.number().int(),
|
|
103
|
-
expiresAtMs: z.number().int(),
|
|
104
|
-
maxClockSkewMs: z.number().int().min(0),
|
|
105
|
-
scopes: z.array(SyncAuthLeaseScopeSchema).min(1),
|
|
106
|
-
capabilities: SyncAuthLeaseCapabilitiesSchema,
|
|
107
|
-
});
|
|
108
|
-
|
|
109
|
-
export type SyncAuthLeasePayload = z.infer<typeof SyncAuthLeasePayloadSchema>;
|
|
110
|
-
|
|
111
|
-
export const SyncAuthLeaseIssueRequestSchema = z.object({
|
|
112
|
-
schemaVersion: z.number().int().min(1),
|
|
113
|
-
ttlMs: z.number().int().positive().optional(),
|
|
114
|
-
scopes: z.array(SyncAuthLeaseScopeSchema).min(1),
|
|
115
|
-
});
|
|
116
|
-
|
|
117
|
-
export type SyncAuthLeaseIssueRequest = z.infer<
|
|
118
|
-
typeof SyncAuthLeaseIssueRequestSchema
|
|
119
|
-
>;
|
|
120
|
-
|
|
121
|
-
export const SyncAuthLeaseIssueResponseSchema = z.object({
|
|
122
|
-
ok: z.literal(true),
|
|
123
|
-
token: z.string().min(1),
|
|
124
|
-
protectedHeader: SyncAuthLeaseProtectedHeaderSchema,
|
|
125
|
-
payload: SyncAuthLeasePayloadSchema,
|
|
126
|
-
});
|
|
127
|
-
|
|
128
|
-
export type SyncAuthLeaseIssueResponse = z.infer<
|
|
129
|
-
typeof SyncAuthLeaseIssueResponseSchema
|
|
130
|
-
>;
|
|
131
|
-
|
|
132
|
-
// ============================================================================
|
|
133
|
-
// Sync Operation Schema
|
|
134
|
-
// ============================================================================
|
|
135
|
-
|
|
136
|
-
export const SyncOperationSchema = z.object({
|
|
137
|
-
table: z.string(),
|
|
138
|
-
row_id: z.string(),
|
|
139
|
-
op: SyncOpSchema,
|
|
140
|
-
payload: z.record(z.string(), z.unknown()).nullable(),
|
|
141
|
-
base_version: z.number().int().nullable().optional(),
|
|
142
|
-
});
|
|
143
|
-
|
|
144
|
-
export type SyncOperation = z.infer<typeof SyncOperationSchema>;
|
|
145
|
-
|
|
146
|
-
// ============================================================================
|
|
147
|
-
// Push Request/Response Schemas
|
|
148
|
-
// ============================================================================
|
|
149
|
-
|
|
150
|
-
export const SyncAuthLeaseProvenanceSchema = z.object({
|
|
151
|
-
leaseId: z.string().min(1),
|
|
152
|
-
leaseExpiresAtMs: z.number().int(),
|
|
153
|
-
leaseStatusAtEnqueue: z.string().min(1),
|
|
154
|
-
leaseScopeSummaryJson: z.string().optional(),
|
|
155
|
-
leaseToken: z.string().min(1).optional(),
|
|
156
|
-
});
|
|
157
|
-
|
|
158
|
-
export type SyncAuthLeaseProvenance = z.infer<
|
|
159
|
-
typeof SyncAuthLeaseProvenanceSchema
|
|
160
|
-
>;
|
|
161
|
-
|
|
162
|
-
export const SyncPushRequestSchema = z.object({
|
|
163
|
-
clientId: z.string().min(1),
|
|
164
|
-
clientCommitId: z.string().min(1),
|
|
165
|
-
operations: z.array(SyncOperationSchema).min(1),
|
|
166
|
-
schemaVersion: z.number().int().min(1),
|
|
167
|
-
authLease: SyncAuthLeaseProvenanceSchema.optional(),
|
|
168
|
-
});
|
|
169
|
-
|
|
170
|
-
export type SyncPushRequest = z.infer<typeof SyncPushRequestSchema>;
|
|
171
|
-
|
|
172
|
-
export const SyncPushCommitRequestSchema = SyncPushRequestSchema.omit({
|
|
173
|
-
clientId: true,
|
|
174
|
-
});
|
|
175
|
-
|
|
176
|
-
export type SyncPushCommitRequest = z.infer<typeof SyncPushCommitRequestSchema>;
|
|
177
|
-
|
|
178
|
-
const SyncOperationResultAppliedSchema = z.object({
|
|
179
|
-
opIndex: z.number().int(),
|
|
180
|
-
status: z.literal('applied'),
|
|
181
|
-
});
|
|
182
|
-
|
|
183
|
-
const SyncOperationResultConflictSchema = z.object({
|
|
184
|
-
opIndex: z.number().int(),
|
|
185
|
-
status: z.literal('conflict'),
|
|
186
|
-
message: z.string(),
|
|
187
|
-
code: z.string().optional(),
|
|
188
|
-
server_version: z.number().int(),
|
|
189
|
-
server_row: z.unknown(),
|
|
190
|
-
});
|
|
191
|
-
|
|
192
|
-
const SyncOperationResultErrorSchema = z.object({
|
|
193
|
-
opIndex: z.number().int(),
|
|
194
|
-
status: z.literal('error'),
|
|
195
|
-
error: z.string(),
|
|
196
|
-
code: z.string().optional(),
|
|
197
|
-
retriable: z.boolean().optional(),
|
|
198
|
-
});
|
|
199
|
-
|
|
200
|
-
export const SyncOperationResultSchema = z.union([
|
|
201
|
-
SyncOperationResultAppliedSchema,
|
|
202
|
-
SyncOperationResultConflictSchema,
|
|
203
|
-
SyncOperationResultErrorSchema,
|
|
204
|
-
]);
|
|
205
|
-
|
|
206
|
-
export type SyncOperationResult = z.infer<typeof SyncOperationResultSchema>;
|
|
207
|
-
|
|
208
|
-
export const SyncPushResponseSchema = z.object({
|
|
209
|
-
ok: z.literal(true),
|
|
210
|
-
status: z.enum(['applied', 'cached', 'rejected']),
|
|
211
|
-
commitSeq: z.number().int().optional(),
|
|
212
|
-
results: z.array(SyncOperationResultSchema),
|
|
213
|
-
});
|
|
214
|
-
|
|
215
|
-
export type SyncPushResponse = z.infer<typeof SyncPushResponseSchema>;
|
|
216
|
-
|
|
217
|
-
export const SyncPushBatchCommitResponseSchema = SyncPushResponseSchema.extend({
|
|
218
|
-
clientCommitId: z.string().min(1),
|
|
219
|
-
});
|
|
220
|
-
|
|
221
|
-
export type SyncPushBatchCommitResponse = z.infer<
|
|
222
|
-
typeof SyncPushBatchCommitResponseSchema
|
|
223
|
-
>;
|
|
224
|
-
|
|
225
|
-
export const SyncPushBatchRequestSchema = z.object({
|
|
226
|
-
clientId: z.string().min(1),
|
|
227
|
-
commits: z.array(SyncPushCommitRequestSchema).min(1),
|
|
228
|
-
});
|
|
229
|
-
|
|
230
|
-
export type SyncPushBatchRequest = z.infer<typeof SyncPushBatchRequestSchema>;
|
|
231
|
-
|
|
232
|
-
export const SyncPushBatchResponseSchema = z.object({
|
|
233
|
-
ok: z.literal(true),
|
|
234
|
-
commits: z.array(SyncPushBatchCommitResponseSchema),
|
|
235
|
-
});
|
|
236
|
-
|
|
237
|
-
export type SyncPushBatchResponse = z.infer<typeof SyncPushBatchResponseSchema>;
|
|
238
|
-
|
|
239
|
-
// ============================================================================
|
|
240
|
-
// Bootstrap State Schema
|
|
241
|
-
// ============================================================================
|
|
242
|
-
|
|
243
|
-
export const SyncBootstrapStateSchema = z.object({
|
|
244
|
-
asOfCommitSeq: z.number().int(),
|
|
245
|
-
tables: z.array(z.string()),
|
|
246
|
-
tableIndex: z.number().int(),
|
|
247
|
-
rowCursor: z.string().nullable(),
|
|
248
|
-
});
|
|
249
|
-
|
|
250
|
-
export type SyncBootstrapState = z.infer<typeof SyncBootstrapStateSchema>;
|
|
251
|
-
|
|
252
|
-
// ============================================================================
|
|
253
|
-
// Pull Request/Response Schemas
|
|
254
|
-
// ============================================================================
|
|
255
|
-
|
|
256
|
-
export const SyncCrdtStateVectorHintSchema = z.object({
|
|
257
|
-
rowId: z.string().min(1),
|
|
258
|
-
field: z.string().min(1),
|
|
259
|
-
stateColumn: z.string().min(1),
|
|
260
|
-
stateVectorBase64: z.string().min(1),
|
|
261
|
-
syncMode: z.string().min(1),
|
|
262
|
-
updatedAt: z.number().int(),
|
|
263
|
-
});
|
|
264
|
-
|
|
265
|
-
export type SyncCrdtStateVectorHint = z.infer<
|
|
266
|
-
typeof SyncCrdtStateVectorHintSchema
|
|
267
|
-
>;
|
|
268
|
-
|
|
269
|
-
export const SyncSubscriptionRequestSchema = z.object({
|
|
270
|
-
id: z.string().min(1),
|
|
271
|
-
table: z.string().min(1),
|
|
272
|
-
scopes: ScopeValuesSchema,
|
|
273
|
-
params: z.record(z.string(), z.unknown()).optional(),
|
|
274
|
-
cursor: z.number().int(),
|
|
275
|
-
bootstrapState: SyncBootstrapStateSchema.nullable().optional(),
|
|
276
|
-
verifiedRoot: z.string().optional(),
|
|
277
|
-
crdtStateVectors: z
|
|
278
|
-
.array(SyncCrdtStateVectorHintSchema)
|
|
279
|
-
.optional()
|
|
280
|
-
.default([]),
|
|
281
|
-
});
|
|
282
|
-
|
|
283
|
-
export type SyncSubscriptionRequest = z.infer<
|
|
284
|
-
typeof SyncSubscriptionRequestSchema
|
|
285
|
-
>;
|
|
286
|
-
|
|
287
|
-
export const SyncSnapshotChunkEncodingSchema = z.enum(
|
|
288
|
-
SYNC_SNAPSHOT_CHUNK_ENCODINGS
|
|
289
|
-
);
|
|
290
|
-
export const SyncScopedSnapshotArtifactKindSchema = z.literal(
|
|
291
|
-
SYNC_SCOPED_SNAPSHOT_ARTIFACT_KIND_SQLITE_V1
|
|
292
|
-
);
|
|
293
|
-
export const SyncSnapshotArtifactCompressionSchema = z.union([
|
|
294
|
-
z.literal(SYNC_SNAPSHOT_ARTIFACT_COMPRESSION_NONE),
|
|
295
|
-
z.literal(SYNC_SNAPSHOT_CHUNK_COMPRESSION),
|
|
296
|
-
]);
|
|
297
|
-
|
|
298
|
-
export const SyncSnapshotArtifactsRequestSchema = z.object({
|
|
299
|
-
artifactKinds: z.array(SyncScopedSnapshotArtifactKindSchema).min(1),
|
|
300
|
-
compressions: z.array(SyncSnapshotArtifactCompressionSchema).optional(),
|
|
301
|
-
featureSet: z.array(z.string()).optional(),
|
|
302
|
-
});
|
|
303
|
-
|
|
304
|
-
export type SyncSnapshotArtifactsRequest = z.infer<
|
|
305
|
-
typeof SyncSnapshotArtifactsRequestSchema
|
|
306
|
-
>;
|
|
307
|
-
|
|
308
|
-
export const SyncPullRequestSchema = z.object({
|
|
309
|
-
clientId: z.string().min(1),
|
|
310
|
-
schemaVersion: z.number().int().min(1),
|
|
311
|
-
limitCommits: z.number().int().min(1),
|
|
312
|
-
limitSnapshotRows: z.number().int().min(1).optional(),
|
|
313
|
-
maxSnapshotPages: z.number().int().min(1).optional(),
|
|
314
|
-
dedupeRows: z.boolean().optional(),
|
|
315
|
-
snapshotArtifacts: SyncSnapshotArtifactsRequestSchema.optional(),
|
|
316
|
-
subscriptions: z.array(SyncSubscriptionRequestSchema),
|
|
317
|
-
});
|
|
318
|
-
|
|
319
|
-
export type SyncPullRequest = z.infer<typeof SyncPullRequestSchema>;
|
|
320
|
-
|
|
321
|
-
export const SyncChangeSchema = z.object({
|
|
322
|
-
table: z.string(),
|
|
323
|
-
row_id: z.string(),
|
|
324
|
-
op: SyncOpSchema,
|
|
325
|
-
row_json: z.unknown().nullable(),
|
|
326
|
-
row_version: z.number().int().nullable(),
|
|
327
|
-
scopes: StoredScopesSchema,
|
|
328
|
-
});
|
|
329
|
-
|
|
330
|
-
export type SyncChange = z.infer<typeof SyncChangeSchema>;
|
|
331
|
-
|
|
332
|
-
export const SyncCommitSchema = z.object({
|
|
333
|
-
commitSeq: z.number().int(),
|
|
334
|
-
createdAt: z.string(),
|
|
335
|
-
actorId: z.string(),
|
|
336
|
-
changes: z.array(SyncChangeSchema),
|
|
337
|
-
});
|
|
338
|
-
|
|
339
|
-
export type SyncCommit = z.infer<typeof SyncCommitSchema>;
|
|
340
|
-
|
|
341
|
-
export const SyncPullSubscriptionIntegritySchema = z.object({
|
|
342
|
-
partitionId: z.string(),
|
|
343
|
-
previousChainRoot: z.string(),
|
|
344
|
-
commitChainRoot: z.string(),
|
|
345
|
-
commitSeq: z.number().int(),
|
|
346
|
-
});
|
|
347
|
-
|
|
348
|
-
export type SyncPullSubscriptionIntegrity = z.infer<
|
|
349
|
-
typeof SyncPullSubscriptionIntegritySchema
|
|
350
|
-
>;
|
|
351
|
-
|
|
352
|
-
export const SyncSnapshotChunkRefSchema = z.object({
|
|
353
|
-
id: z.string(),
|
|
354
|
-
byteLength: z.number().int(),
|
|
355
|
-
sha256: z.string(),
|
|
356
|
-
encoding: SyncSnapshotChunkEncodingSchema,
|
|
357
|
-
compression: z.literal(SYNC_SNAPSHOT_CHUNK_COMPRESSION),
|
|
358
|
-
});
|
|
359
|
-
|
|
360
|
-
export type SyncSnapshotChunkRef = z.infer<typeof SyncSnapshotChunkRefSchema>;
|
|
361
|
-
|
|
362
|
-
export const SyncSnapshotManifestChunkSchema = z.object({
|
|
363
|
-
id: z.string(),
|
|
364
|
-
byteLength: z.number().int(),
|
|
365
|
-
sha256: z.string(),
|
|
366
|
-
encoding: SyncSnapshotChunkEncodingSchema,
|
|
367
|
-
compression: z.literal(SYNC_SNAPSHOT_CHUNK_COMPRESSION),
|
|
368
|
-
});
|
|
369
|
-
|
|
370
|
-
export const SyncSnapshotManifestSchema = z.object({
|
|
371
|
-
version: z.literal(1),
|
|
372
|
-
digest: z.string(),
|
|
373
|
-
table: z.string(),
|
|
374
|
-
asOfCommitSeq: z.number().int(),
|
|
375
|
-
scopeDigest: z.string(),
|
|
376
|
-
rowCursor: z.string().nullable(),
|
|
377
|
-
rowLimit: z.number().int().min(1),
|
|
378
|
-
nextRowCursor: z.string().nullable(),
|
|
379
|
-
isFirstPage: z.boolean(),
|
|
380
|
-
isLastPage: z.boolean(),
|
|
381
|
-
chunks: z.array(SyncSnapshotManifestChunkSchema),
|
|
382
|
-
});
|
|
383
|
-
|
|
384
|
-
export type SyncSnapshotManifest = z.infer<typeof SyncSnapshotManifestSchema>;
|
|
385
|
-
|
|
386
|
-
export const SyncScopedSnapshotArtifactManifestSchema = z.object({
|
|
387
|
-
version: z.literal(SYNC_SCOPED_SNAPSHOT_ARTIFACT_MANIFEST_VERSION),
|
|
388
|
-
artifactKind: z.literal(SYNC_SCOPED_SNAPSHOT_ARTIFACT_KIND_SQLITE_V1),
|
|
389
|
-
digest: z.string(),
|
|
390
|
-
partitionId: z.string(),
|
|
391
|
-
subscriptionId: z.string(),
|
|
392
|
-
table: z.string(),
|
|
393
|
-
schemaVersion: z.string(),
|
|
394
|
-
asOfCommitSeq: z.number().int(),
|
|
395
|
-
scopeDigest: z.string(),
|
|
396
|
-
rowCursor: z.string().nullable(),
|
|
397
|
-
rowLimit: z.number().int().min(1),
|
|
398
|
-
rowCount: z.number().int().min(0),
|
|
399
|
-
nextRowCursor: z.string().nullable(),
|
|
400
|
-
isFirstPage: z.boolean(),
|
|
401
|
-
isLastPage: z.boolean(),
|
|
402
|
-
compression: z.union([
|
|
403
|
-
z.literal(SYNC_SNAPSHOT_ARTIFACT_COMPRESSION_NONE),
|
|
404
|
-
z.literal(SYNC_SNAPSHOT_CHUNK_COMPRESSION),
|
|
405
|
-
]),
|
|
406
|
-
byteLength: z.number().int().min(0),
|
|
407
|
-
sha256: z.string(),
|
|
408
|
-
featureSet: z.array(z.string()),
|
|
409
|
-
});
|
|
410
|
-
|
|
411
|
-
export type SyncScopedSnapshotArtifactManifest = z.infer<
|
|
412
|
-
typeof SyncScopedSnapshotArtifactManifestSchema
|
|
413
|
-
>;
|
|
414
|
-
|
|
415
|
-
export const SyncSnapshotArtifactRefSchema = z.object({
|
|
416
|
-
id: z.string(),
|
|
417
|
-
byteLength: z.number().int().min(0),
|
|
418
|
-
sha256: z.string(),
|
|
419
|
-
manifestDigest: z.string(),
|
|
420
|
-
artifactKind: z.literal(SYNC_SCOPED_SNAPSHOT_ARTIFACT_KIND_SQLITE_V1),
|
|
421
|
-
compression: z.union([
|
|
422
|
-
z.literal(SYNC_SNAPSHOT_ARTIFACT_COMPRESSION_NONE),
|
|
423
|
-
z.literal(SYNC_SNAPSHOT_CHUNK_COMPRESSION),
|
|
424
|
-
]),
|
|
425
|
-
rowCount: z.number().int().min(0),
|
|
426
|
-
nextRowCursor: z.string().nullable(),
|
|
427
|
-
isFirstPage: z.boolean(),
|
|
428
|
-
isLastPage: z.boolean(),
|
|
429
|
-
manifest: SyncScopedSnapshotArtifactManifestSchema,
|
|
430
|
-
});
|
|
431
|
-
|
|
432
|
-
export type SyncSnapshotArtifactRef = z.infer<
|
|
433
|
-
typeof SyncSnapshotArtifactRefSchema
|
|
434
|
-
>;
|
|
435
|
-
|
|
436
|
-
export const SyncSnapshotSchema = z
|
|
437
|
-
.object({
|
|
438
|
-
table: z.string(),
|
|
439
|
-
rows: z.array(z.unknown()),
|
|
440
|
-
chunks: z.array(SyncSnapshotChunkRefSchema).optional(),
|
|
441
|
-
manifest: SyncSnapshotManifestSchema.optional(),
|
|
442
|
-
artifacts: z.array(SyncSnapshotArtifactRefSchema).optional(),
|
|
443
|
-
isFirstPage: z.boolean(),
|
|
444
|
-
isLastPage: z.boolean(),
|
|
445
|
-
bootstrapStateAfter: SyncBootstrapStateSchema.nullable().optional(),
|
|
446
|
-
})
|
|
447
|
-
.superRefine((snapshot, ctx) => {
|
|
448
|
-
if (!snapshot.artifacts || snapshot.artifacts.length === 0) return;
|
|
449
|
-
if (snapshot.rows.length > 0) {
|
|
450
|
-
ctx.addIssue({
|
|
451
|
-
code: z.ZodIssueCode.custom,
|
|
452
|
-
path: ['rows'],
|
|
453
|
-
message: 'Snapshot artifacts cannot be mixed with inline rows',
|
|
454
|
-
});
|
|
455
|
-
}
|
|
456
|
-
if (snapshot.chunks && snapshot.chunks.length > 0) {
|
|
457
|
-
ctx.addIssue({
|
|
458
|
-
code: z.ZodIssueCode.custom,
|
|
459
|
-
path: ['chunks'],
|
|
460
|
-
message: 'Snapshot artifacts cannot be mixed with chunk refs',
|
|
461
|
-
});
|
|
462
|
-
}
|
|
463
|
-
if (snapshot.manifest) {
|
|
464
|
-
ctx.addIssue({
|
|
465
|
-
code: z.ZodIssueCode.custom,
|
|
466
|
-
path: ['manifest'],
|
|
467
|
-
message: 'Snapshot artifacts cannot be mixed with chunk manifests',
|
|
468
|
-
});
|
|
469
|
-
}
|
|
470
|
-
});
|
|
471
|
-
|
|
472
|
-
export type SyncSnapshot = z.infer<typeof SyncSnapshotSchema>;
|
|
473
|
-
|
|
474
|
-
export const SyncPullSubscriptionResponseSchema = z.object({
|
|
475
|
-
id: z.string(),
|
|
476
|
-
status: z.enum(['active', 'revoked']),
|
|
477
|
-
scopes: ScopeValuesSchema,
|
|
478
|
-
bootstrap: z.boolean(),
|
|
479
|
-
bootstrapState: SyncBootstrapStateSchema.nullable().optional(),
|
|
480
|
-
nextCursor: z.number().int(),
|
|
481
|
-
integrity: SyncPullSubscriptionIntegritySchema.optional(),
|
|
482
|
-
commits: z.array(SyncCommitSchema),
|
|
483
|
-
snapshots: z.array(SyncSnapshotSchema).optional(),
|
|
484
|
-
});
|
|
485
|
-
|
|
486
|
-
export type SyncPullSubscriptionResponse = z.infer<
|
|
487
|
-
typeof SyncPullSubscriptionResponseSchema
|
|
488
|
-
>;
|
|
489
|
-
|
|
490
|
-
export const SyncPullResponseSchema = z.object({
|
|
491
|
-
ok: z.literal(true),
|
|
492
|
-
subscriptions: z.array(SyncPullSubscriptionResponseSchema),
|
|
493
|
-
});
|
|
494
|
-
|
|
495
|
-
export type SyncPullResponse = z.infer<typeof SyncPullResponseSchema>;
|
|
496
|
-
|
|
497
|
-
// ============================================================================
|
|
498
|
-
// Combined Sync Request/Response Schemas
|
|
499
|
-
// ============================================================================
|
|
500
|
-
|
|
501
|
-
export const SyncCombinedRequestSchema = z.object({
|
|
502
|
-
clientId: z.string().min(1),
|
|
503
|
-
push: SyncPushBatchRequestSchema.omit({ clientId: true }).optional(),
|
|
504
|
-
pull: SyncPullRequestSchema.omit({ clientId: true }).optional(),
|
|
505
|
-
});
|
|
506
|
-
|
|
507
|
-
export type SyncCombinedRequest = z.infer<typeof SyncCombinedRequestSchema>;
|
|
508
|
-
|
|
509
|
-
export const SyncCombinedResponseSchema = z.object({
|
|
510
|
-
ok: z.literal(true),
|
|
511
|
-
requiredSchemaVersion: z.number().int().min(1).optional(),
|
|
512
|
-
latestSchemaVersion: z.number().int().min(1).optional(),
|
|
513
|
-
push: SyncPushBatchResponseSchema.optional(),
|
|
514
|
-
pull: SyncPullResponseSchema.optional(),
|
|
515
|
-
});
|
|
516
|
-
|
|
517
|
-
export type SyncCombinedResponse = z.infer<typeof SyncCombinedResponseSchema>;
|