@syncular/server 0.1.3 → 0.2.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/README.md +773 -13
- package/dist/admin.d.ts +136 -0
- package/dist/admin.js +168 -0
- package/dist/blob-handlers.d.ts +69 -0
- package/dist/blob-handlers.js +245 -0
- package/dist/blob-store.d.ts +111 -0
- package/dist/blob-store.js +0 -0
- package/dist/content-encoding.d.ts +27 -0
- package/dist/content-encoding.js +69 -0
- package/dist/context.d.ts +151 -0
- package/dist/context.js +21 -0
- package/dist/crdt-merger.d.ts +28 -0
- package/dist/crdt-merger.js +11 -0
- package/dist/d1-storage.d.ts +50 -0
- package/dist/d1-storage.js +0 -0
- package/dist/errors.d.ts +35 -9
- package/dist/errors.js +220 -11
- package/dist/events-ring.d.ts +55 -0
- package/dist/events-ring.js +96 -0
- package/dist/events.d.ts +231 -0
- package/dist/events.js +22 -0
- package/dist/frame-bytes.d.ts +20 -0
- package/dist/frame-bytes.js +75 -0
- package/dist/handler.d.ts +9 -0
- package/dist/handler.js +490 -0
- package/dist/index.d.ts +42 -33
- package/dist/index.js +45 -27
- package/dist/lease-store.d.ts +50 -0
- package/dist/lease-store.js +0 -0
- package/dist/pg-executor-pglite.d.ts +27 -0
- package/dist/pg-executor-pglite.js +33 -0
- package/dist/pg-executor.d.ts +67 -0
- package/dist/pg-executor.js +56 -0
- package/dist/postgres-fanout.d.ts +83 -0
- package/dist/postgres-fanout.js +71 -0
- package/dist/postgres-storage.d.ts +69 -0
- package/dist/postgres-storage.js +766 -0
- package/dist/prune.d.ts +24 -39
- package/dist/prune.js +44 -146
- package/dist/pull.d.ts +42 -67
- package/dist/pull.js +387 -1187
- package/dist/push.d.ts +31 -66
- package/dist/push.js +406 -655
- package/dist/realtime.d.ts +197 -0
- package/dist/realtime.js +848 -0
- package/dist/relational-rows.d.ts +229 -0
- package/dist/relational-rows.js +514 -0
- package/dist/s3-blob-store.d.ts +142 -0
- package/dist/s3-blob-store.js +458 -0
- package/dist/s3-segment-store.d.ts +95 -0
- package/dist/s3-segment-store.js +380 -0
- package/dist/schema.d.ts +82 -286
- package/dist/schema.js +133 -9
- package/dist/scopes.d.ts +48 -0
- package/dist/scopes.js +98 -0
- package/dist/segment-download.d.ts +14 -0
- package/dist/segment-download.js +125 -0
- package/dist/segment-store.d.ts +81 -0
- package/dist/segment-store.js +63 -0
- package/dist/signed-url.d.ts +139 -0
- package/dist/signed-url.js +143 -0
- package/dist/sigv4.d.ts +97 -0
- package/dist/sigv4.js +161 -0
- package/dist/sqlite-blob-store.d.ts +22 -0
- package/dist/sqlite-blob-store.js +86 -0
- package/dist/sqlite-dialect.d.ts +101 -0
- package/dist/sqlite-dialect.js +250 -0
- package/dist/sqlite-image.d.ts +27 -0
- package/dist/sqlite-image.js +83 -0
- package/dist/sqlite-lease-store.d.ts +21 -0
- package/dist/sqlite-lease-store.js +94 -0
- package/dist/sqlite-segment-store.d.ts +25 -0
- package/dist/sqlite-segment-store.js +115 -0
- package/dist/sqlite-storage.d.ts +47 -0
- package/dist/sqlite-storage.js +477 -0
- package/dist/storage.d.ts +252 -0
- package/dist/storage.js +1 -0
- package/dist/validate.d.ts +83 -0
- package/dist/validate.js +44 -0
- package/package.json +17 -325
- package/src/admin.ts +312 -0
- package/src/blob-handlers.ts +340 -0
- package/src/blob-store.ts +0 -0
- package/src/content-encoding.ts +94 -0
- package/src/context.ts +176 -0
- package/src/crdt-merger.ts +33 -0
- package/src/d1-storage.ts +0 -0
- package/src/errors.ts +241 -19
- package/src/events-ring.ts +116 -0
- package/src/events.ts +291 -0
- package/src/frame-bytes.ts +94 -0
- package/src/handler.ts +678 -0
- package/src/index.ts +44 -27
- package/src/lease-store.ts +0 -0
- package/src/pg-executor-pglite.ts +63 -0
- package/src/pg-executor.ts +87 -0
- package/src/postgres-fanout.ts +143 -0
- package/src/postgres-storage.ts +1182 -0
- package/src/prune.ts +63 -289
- package/src/pull.ts +505 -1805
- package/src/push.ts +623 -1006
- package/src/realtime.ts +1082 -0
- package/src/relational-rows.ts +633 -0
- package/src/s3-blob-store.ts +616 -0
- package/src/s3-segment-store.ts +519 -0
- package/src/schema.ts +242 -281
- package/src/scopes.ts +127 -0
- package/src/segment-download.ts +169 -0
- package/src/segment-store.ts +154 -0
- package/src/signed-url.ts +308 -0
- package/src/sigv4.ts +267 -0
- package/src/sqlite-blob-store.ts +125 -0
- package/src/sqlite-dialect.ts +337 -0
- package/src/sqlite-image.ts +124 -0
- package/src/sqlite-lease-store.ts +144 -0
- package/src/sqlite-segment-store.ts +204 -0
- package/src/sqlite-storage.ts +792 -0
- package/src/storage.ts +316 -0
- package/src/validate.ts +123 -0
- package/dist/auth-leases.d.ts +0 -85
- package/dist/auth-leases.d.ts.map +0 -1
- package/dist/auth-leases.js +0 -368
- package/dist/auth-leases.js.map +0 -1
- package/dist/better-sqlite3.d.ts +0 -22
- package/dist/better-sqlite3.d.ts.map +0 -1
- package/dist/better-sqlite3.js +0 -16
- package/dist/better-sqlite3.js.map +0 -1
- package/dist/blobs/access.d.ts +0 -35
- package/dist/blobs/access.d.ts.map +0 -1
- package/dist/blobs/access.js +0 -149
- package/dist/blobs/access.js.map +0 -1
- package/dist/blobs/adapters/database.d.ts +0 -100
- package/dist/blobs/adapters/database.d.ts.map +0 -1
- package/dist/blobs/adapters/database.js +0 -247
- package/dist/blobs/adapters/database.js.map +0 -1
- package/dist/blobs/index.d.ts +0 -9
- package/dist/blobs/index.d.ts.map +0 -1
- package/dist/blobs/index.js +0 -9
- package/dist/blobs/index.js.map +0 -1
- package/dist/blobs/manager.d.ts +0 -220
- package/dist/blobs/manager.d.ts.map +0 -1
- package/dist/blobs/manager.js +0 -625
- package/dist/blobs/manager.js.map +0 -1
- package/dist/blobs/migrate.d.ts +0 -27
- package/dist/blobs/migrate.d.ts.map +0 -1
- package/dist/blobs/migrate.js +0 -127
- package/dist/blobs/migrate.js.map +0 -1
- package/dist/blobs/types.d.ts +0 -58
- package/dist/blobs/types.d.ts.map +0 -1
- package/dist/blobs/types.js +0 -5
- package/dist/blobs/types.js.map +0 -1
- package/dist/bun-sqlite.d.ts +0 -19
- package/dist/bun-sqlite.d.ts.map +0 -1
- package/dist/bun-sqlite.js +0 -19
- package/dist/bun-sqlite.js.map +0 -1
- package/dist/clients.d.ts +0 -15
- package/dist/clients.d.ts.map +0 -1
- package/dist/clients.js +0 -7
- package/dist/clients.js.map +0 -1
- package/dist/cloudflare/durable-object.d.ts +0 -93
- package/dist/cloudflare/durable-object.d.ts.map +0 -1
- package/dist/cloudflare/durable-object.js +0 -210
- package/dist/cloudflare/durable-object.js.map +0 -1
- package/dist/cloudflare/index.d.ts +0 -22
- package/dist/cloudflare/index.d.ts.map +0 -1
- package/dist/cloudflare/index.js +0 -22
- package/dist/cloudflare/index.js.map +0 -1
- package/dist/cloudflare/r2.d.ts +0 -180
- package/dist/cloudflare/r2.d.ts.map +0 -1
- package/dist/cloudflare/r2.js +0 -258
- package/dist/cloudflare/r2.js.map +0 -1
- package/dist/cloudflare/scope-cache.d.ts +0 -54
- package/dist/cloudflare/scope-cache.d.ts.map +0 -1
- package/dist/cloudflare/scope-cache.js +0 -223
- package/dist/cloudflare/scope-cache.js.map +0 -1
- package/dist/cloudflare/sentry.d.ts +0 -47
- package/dist/cloudflare/sentry.d.ts.map +0 -1
- package/dist/cloudflare/sentry.js +0 -163
- package/dist/cloudflare/sentry.js.map +0 -1
- package/dist/cloudflare/worker.d.ts +0 -46
- package/dist/cloudflare/worker.d.ts.map +0 -1
- package/dist/cloudflare/worker.js +0 -63
- package/dist/cloudflare/worker.js.map +0 -1
- package/dist/commit-integrity.d.ts +0 -38
- package/dist/commit-integrity.d.ts.map +0 -1
- package/dist/commit-integrity.js +0 -260
- package/dist/commit-integrity.js.map +0 -1
- package/dist/compaction.d.ts +0 -27
- package/dist/compaction.d.ts.map +0 -1
- package/dist/compaction.js +0 -49
- package/dist/compaction.js.map +0 -1
- package/dist/crdt-yjs/index.d.ts +0 -99
- package/dist/crdt-yjs/index.d.ts.map +0 -1
- package/dist/crdt-yjs/index.js +0 -629
- package/dist/crdt-yjs/index.js.map +0 -1
- package/dist/d1.d.ts +0 -13
- package/dist/d1.d.ts.map +0 -1
- package/dist/d1.js +0 -14
- package/dist/d1.js.map +0 -1
- package/dist/dialect/base.d.ts +0 -93
- package/dist/dialect/base.d.ts.map +0 -1
- package/dist/dialect/base.js +0 -181
- package/dist/dialect/base.js.map +0 -1
- package/dist/dialect/helpers.d.ts +0 -16
- package/dist/dialect/helpers.d.ts.map +0 -1
- package/dist/dialect/helpers.js +0 -83
- package/dist/dialect/helpers.js.map +0 -1
- package/dist/dialect/index.d.ts +0 -7
- package/dist/dialect/index.d.ts.map +0 -1
- package/dist/dialect/index.js +0 -7
- package/dist/dialect/index.js.map +0 -1
- package/dist/dialect/types.d.ts +0 -187
- package/dist/dialect/types.d.ts.map +0 -1
- package/dist/dialect/types.js +0 -8
- package/dist/dialect/types.js.map +0 -1
- package/dist/encrypted-crdt.d.ts +0 -67
- package/dist/encrypted-crdt.d.ts.map +0 -1
- package/dist/encrypted-crdt.js +0 -426
- package/dist/encrypted-crdt.js.map +0 -1
- package/dist/errors.d.ts.map +0 -1
- package/dist/errors.js.map +0 -1
- package/dist/filesystem/index.d.ts +0 -44
- package/dist/filesystem/index.d.ts.map +0 -1
- package/dist/filesystem/index.js +0 -164
- package/dist/filesystem/index.js.map +0 -1
- package/dist/handlers/collection.d.ts +0 -20
- package/dist/handlers/collection.d.ts.map +0 -1
- package/dist/handlers/collection.js +0 -42
- package/dist/handlers/collection.js.map +0 -1
- package/dist/handlers/create-handler.d.ts +0 -156
- package/dist/handlers/create-handler.d.ts.map +0 -1
- package/dist/handlers/create-handler.js +0 -626
- package/dist/handlers/create-handler.js.map +0 -1
- package/dist/handlers/index.d.ts +0 -4
- package/dist/handlers/index.d.ts.map +0 -1
- package/dist/handlers/index.js +0 -4
- package/dist/handlers/index.js.map +0 -1
- package/dist/handlers/types.d.ts +0 -295
- package/dist/handlers/types.d.ts.map +0 -1
- package/dist/handlers/types.js +0 -2
- package/dist/handlers/types.js.map +0 -1
- package/dist/helpers/conflict.d.ts +0 -52
- package/dist/helpers/conflict.d.ts.map +0 -1
- package/dist/helpers/conflict.js +0 -49
- package/dist/helpers/conflict.js.map +0 -1
- package/dist/helpers/emitted-change.d.ts +0 -56
- package/dist/helpers/emitted-change.d.ts.map +0 -1
- package/dist/helpers/emitted-change.js +0 -46
- package/dist/helpers/emitted-change.js.map +0 -1
- package/dist/helpers/index.d.ts +0 -12
- package/dist/helpers/index.d.ts.map +0 -1
- package/dist/helpers/index.js +0 -12
- package/dist/helpers/index.js.map +0 -1
- package/dist/helpers/paginate.d.ts +0 -49
- package/dist/helpers/paginate.d.ts.map +0 -1
- package/dist/helpers/paginate.js +0 -54
- package/dist/helpers/paginate.js.map +0 -1
- package/dist/helpers/scope-authorization.d.ts +0 -7
- package/dist/helpers/scope-authorization.d.ts.map +0 -1
- package/dist/helpers/scope-authorization.js +0 -19
- package/dist/helpers/scope-authorization.js.map +0 -1
- package/dist/helpers/scope-commit-index.d.ts +0 -12
- package/dist/helpers/scope-commit-index.d.ts.map +0 -1
- package/dist/helpers/scope-commit-index.js +0 -35
- package/dist/helpers/scope-commit-index.js.map +0 -1
- package/dist/helpers/scope-strings.d.ts +0 -74
- package/dist/helpers/scope-strings.d.ts.map +0 -1
- package/dist/helpers/scope-strings.js +0 -82
- package/dist/helpers/scope-strings.js.map +0 -1
- package/dist/hono/api-key-auth.d.ts +0 -49
- package/dist/hono/api-key-auth.d.ts.map +0 -1
- package/dist/hono/api-key-auth.js +0 -108
- package/dist/hono/api-key-auth.js.map +0 -1
- package/dist/hono/audit-redaction.d.ts +0 -20
- package/dist/hono/audit-redaction.d.ts.map +0 -1
- package/dist/hono/audit-redaction.js +0 -85
- package/dist/hono/audit-redaction.js.map +0 -1
- package/dist/hono/blobs.d.ts +0 -75
- package/dist/hono/blobs.d.ts.map +0 -1
- package/dist/hono/blobs.js +0 -586
- package/dist/hono/blobs.js.map +0 -1
- package/dist/hono/console/gateway.d.ts +0 -42
- package/dist/hono/console/gateway.d.ts.map +0 -1
- package/dist/hono/console/gateway.js +0 -2158
- package/dist/hono/console/gateway.js.map +0 -1
- package/dist/hono/console/live-auth.d.ts +0 -7
- package/dist/hono/console/live-auth.d.ts.map +0 -1
- package/dist/hono/console/live-auth.js +0 -39
- package/dist/hono/console/live-auth.js.map +0 -1
- package/dist/hono/console/route-descriptor.d.ts +0 -6
- package/dist/hono/console/route-descriptor.d.ts.map +0 -1
- package/dist/hono/console/route-descriptor.js +0 -16
- package/dist/hono/console/route-descriptor.js.map +0 -1
- package/dist/hono/console/routes/api-keys.d.ts +0 -8
- package/dist/hono/console/routes/api-keys.d.ts.map +0 -1
- package/dist/hono/console/routes/api-keys.js +0 -575
- package/dist/hono/console/routes/api-keys.js.map +0 -1
- package/dist/hono/console/routes/clients.d.ts +0 -8
- package/dist/hono/console/routes/clients.d.ts.map +0 -1
- package/dist/hono/console/routes/clients.js +0 -322
- package/dist/hono/console/routes/clients.js.map +0 -1
- package/dist/hono/console/routes/commits.d.ts +0 -8
- package/dist/hono/console/routes/commits.d.ts.map +0 -1
- package/dist/hono/console/routes/commits.js +0 -882
- package/dist/hono/console/routes/commits.js.map +0 -1
- package/dist/hono/console/routes/context.d.ts +0 -188
- package/dist/hono/console/routes/context.d.ts.map +0 -1
- package/dist/hono/console/routes/context.js +0 -633
- package/dist/hono/console/routes/context.js.map +0 -1
- package/dist/hono/console/routes/events.d.ts +0 -8
- package/dist/hono/console/routes/events.d.ts.map +0 -1
- package/dist/hono/console/routes/events.js +0 -501
- package/dist/hono/console/routes/events.js.map +0 -1
- package/dist/hono/console/routes/maintenance.d.ts +0 -8
- package/dist/hono/console/routes/maintenance.d.ts.map +0 -1
- package/dist/hono/console/routes/maintenance.js +0 -341
- package/dist/hono/console/routes/maintenance.js.map +0 -1
- package/dist/hono/console/routes/shared.d.ts +0 -174
- package/dist/hono/console/routes/shared.d.ts.map +0 -1
- package/dist/hono/console/routes/shared.js +0 -583
- package/dist/hono/console/routes/shared.js.map +0 -1
- package/dist/hono/console/routes/stats.d.ts +0 -8
- package/dist/hono/console/routes/stats.d.ts.map +0 -1
- package/dist/hono/console/routes/stats.js +0 -295
- package/dist/hono/console/routes/stats.js.map +0 -1
- package/dist/hono/console/routes/storage.d.ts +0 -8
- package/dist/hono/console/routes/storage.d.ts.map +0 -1
- package/dist/hono/console/routes/storage.js +0 -121
- package/dist/hono/console/routes/storage.js.map +0 -1
- package/dist/hono/console/routes.d.ts +0 -36
- package/dist/hono/console/routes.d.ts.map +0 -1
- package/dist/hono/console/routes.js +0 -112
- package/dist/hono/console/routes.js.map +0 -1
- package/dist/hono/console/schema-errors.d.ts +0 -2
- package/dist/hono/console/schema-errors.d.ts.map +0 -1
- package/dist/hono/console/schema-errors.js +0 -17
- package/dist/hono/console/schema-errors.js.map +0 -1
- package/dist/hono/console/schemas.d.ts +0 -1515
- package/dist/hono/console/schemas.d.ts.map +0 -1
- package/dist/hono/console/schemas.js +0 -661
- package/dist/hono/console/schemas.js.map +0 -1
- package/dist/hono/console/types.d.ts +0 -213
- package/dist/hono/console/types.d.ts.map +0 -1
- package/dist/hono/console/types.js +0 -2
- package/dist/hono/console/types.js.map +0 -1
- package/dist/hono/console/ui.d.ts +0 -38
- package/dist/hono/console/ui.d.ts.map +0 -1
- package/dist/hono/console/ui.js +0 -43
- package/dist/hono/console/ui.js.map +0 -1
- package/dist/hono/create-server.d.ts +0 -71
- package/dist/hono/create-server.d.ts.map +0 -1
- package/dist/hono/create-server.js +0 -121
- package/dist/hono/create-server.js.map +0 -1
- package/dist/hono/errors.d.ts +0 -13
- package/dist/hono/errors.d.ts.map +0 -1
- package/dist/hono/errors.js +0 -21
- package/dist/hono/errors.js.map +0 -1
- package/dist/hono/index.d.ts +0 -20
- package/dist/hono/index.d.ts.map +0 -1
- package/dist/hono/index.js +0 -31
- package/dist/hono/index.js.map +0 -1
- package/dist/hono/openapi.d.ts +0 -72
- package/dist/hono/openapi.d.ts.map +0 -1
- package/dist/hono/openapi.js +0 -99
- package/dist/hono/openapi.js.map +0 -1
- package/dist/hono/proxy/connection-manager.d.ts +0 -78
- package/dist/hono/proxy/connection-manager.d.ts.map +0 -1
- package/dist/hono/proxy/connection-manager.js +0 -251
- package/dist/hono/proxy/connection-manager.js.map +0 -1
- package/dist/hono/proxy/index.d.ts +0 -8
- package/dist/hono/proxy/index.d.ts.map +0 -1
- package/dist/hono/proxy/index.js +0 -8
- package/dist/hono/proxy/index.js.map +0 -1
- package/dist/hono/proxy/routes.d.ts +0 -86
- package/dist/hono/proxy/routes.d.ts.map +0 -1
- package/dist/hono/proxy/routes.js +0 -183
- package/dist/hono/proxy/routes.js.map +0 -1
- package/dist/hono/rate-limit.d.ts +0 -101
- package/dist/hono/rate-limit.d.ts.map +0 -1
- package/dist/hono/rate-limit.js +0 -184
- package/dist/hono/rate-limit.js.map +0 -1
- package/dist/hono/realtime-sync-packs.d.ts +0 -43
- package/dist/hono/realtime-sync-packs.d.ts.map +0 -1
- package/dist/hono/realtime-sync-packs.js +0 -219
- package/dist/hono/realtime-sync-packs.js.map +0 -1
- package/dist/hono/routes/audit.d.ts +0 -12
- package/dist/hono/routes/audit.d.ts.map +0 -1
- package/dist/hono/routes/audit.js +0 -385
- package/dist/hono/routes/audit.js.map +0 -1
- package/dist/hono/routes/auth-leases.d.ts +0 -8
- package/dist/hono/routes/auth-leases.d.ts.map +0 -1
- package/dist/hono/routes/auth-leases.js +0 -88
- package/dist/hono/routes/auth-leases.js.map +0 -1
- package/dist/hono/routes/combined.d.ts +0 -8
- package/dist/hono/routes/combined.d.ts.map +0 -1
- package/dist/hono/routes/combined.js +0 -392
- package/dist/hono/routes/combined.js.map +0 -1
- package/dist/hono/routes/context.d.ts +0 -314
- package/dist/hono/routes/context.d.ts.map +0 -1
- package/dist/hono/routes/context.js +0 -1147
- package/dist/hono/routes/context.js.map +0 -1
- package/dist/hono/routes/health.d.ts +0 -8
- package/dist/hono/routes/health.d.ts.map +0 -1
- package/dist/hono/routes/health.js +0 -16
- package/dist/hono/routes/health.js.map +0 -1
- package/dist/hono/routes/realtime.d.ts +0 -9
- package/dist/hono/routes/realtime.d.ts.map +0 -1
- package/dist/hono/routes/realtime.js +0 -626
- package/dist/hono/routes/realtime.js.map +0 -1
- package/dist/hono/routes/shared.d.ts +0 -689
- package/dist/hono/routes/shared.d.ts.map +0 -1
- package/dist/hono/routes/shared.js +0 -972
- package/dist/hono/routes/shared.js.map +0 -1
- package/dist/hono/routes/snapshots.d.ts +0 -10
- package/dist/hono/routes/snapshots.d.ts.map +0 -1
- package/dist/hono/routes/snapshots.js +0 -281
- package/dist/hono/routes/snapshots.js.map +0 -1
- package/dist/hono/routes.d.ts +0 -19
- package/dist/hono/routes.d.ts.map +0 -1
- package/dist/hono/routes.js +0 -37
- package/dist/hono/routes.js.map +0 -1
- package/dist/hono/validation.d.ts +0 -5
- package/dist/hono/validation.d.ts.map +0 -1
- package/dist/hono/validation.js +0 -47
- package/dist/hono/validation.js.map +0 -1
- package/dist/hono/websocket-origin.d.ts +0 -9
- package/dist/hono/websocket-origin.d.ts.map +0 -1
- package/dist/hono/websocket-origin.js +0 -96
- package/dist/hono/websocket-origin.js.map +0 -1
- package/dist/hono/ws.d.ts +0 -341
- package/dist/hono/ws.d.ts.map +0 -1
- package/dist/hono/ws.js +0 -711
- package/dist/hono/ws.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/libsql.d.ts +0 -29
- package/dist/libsql.d.ts.map +0 -1
- package/dist/libsql.js +0 -25
- package/dist/libsql.js.map +0 -1
- package/dist/migrate.d.ts +0 -14
- package/dist/migrate.d.ts.map +0 -1
- package/dist/migrate.js +0 -13
- package/dist/migrate.js.map +0 -1
- package/dist/neon.d.ts +0 -21
- package/dist/neon.d.ts.map +0 -1
- package/dist/neon.js +0 -22
- package/dist/neon.js.map +0 -1
- package/dist/notify.d.ts +0 -77
- package/dist/notify.d.ts.map +0 -1
- package/dist/notify.js +0 -233
- package/dist/notify.js.map +0 -1
- package/dist/pglite.d.ts +0 -37
- package/dist/pglite.d.ts.map +0 -1
- package/dist/pglite.js +0 -37
- package/dist/pglite.js.map +0 -1
- package/dist/plugins/index.d.ts +0 -2
- package/dist/plugins/index.d.ts.map +0 -1
- package/dist/plugins/index.js +0 -2
- package/dist/plugins/index.js.map +0 -1
- package/dist/plugins/types.d.ts +0 -73
- package/dist/plugins/types.d.ts.map +0 -1
- package/dist/plugins/types.js +0 -30
- package/dist/plugins/types.js.map +0 -1
- package/dist/postgres/index.d.ts +0 -68
- package/dist/postgres/index.d.ts.map +0 -1
- package/dist/postgres/index.js +0 -924
- package/dist/postgres/index.js.map +0 -1
- package/dist/proxy/collection.d.ts +0 -7
- package/dist/proxy/collection.d.ts.map +0 -1
- package/dist/proxy/collection.js +0 -6
- package/dist/proxy/collection.js.map +0 -1
- package/dist/proxy/handler.d.ts +0 -42
- package/dist/proxy/handler.d.ts.map +0 -1
- package/dist/proxy/handler.js +0 -102
- package/dist/proxy/handler.js.map +0 -1
- package/dist/proxy/index.d.ts +0 -9
- package/dist/proxy/index.d.ts.map +0 -1
- package/dist/proxy/index.js +0 -14
- package/dist/proxy/index.js.map +0 -1
- package/dist/proxy/mutation-detector.d.ts +0 -35
- package/dist/proxy/mutation-detector.d.ts.map +0 -1
- package/dist/proxy/mutation-detector.js +0 -246
- package/dist/proxy/mutation-detector.js.map +0 -1
- package/dist/proxy/oplog.d.ts +0 -30
- package/dist/proxy/oplog.d.ts.map +0 -1
- package/dist/proxy/oplog.js +0 -137
- package/dist/proxy/oplog.js.map +0 -1
- package/dist/proxy/types.d.ts +0 -44
- package/dist/proxy/types.d.ts.map +0 -1
- package/dist/proxy/types.js +0 -7
- package/dist/proxy/types.js.map +0 -1
- package/dist/prune.d.ts.map +0 -1
- package/dist/prune.js.map +0 -1
- package/dist/pull.d.ts.map +0 -1
- package/dist/pull.js.map +0 -1
- package/dist/push.d.ts.map +0 -1
- package/dist/push.js.map +0 -1
- package/dist/realtime/in-memory.d.ts +0 -13
- package/dist/realtime/in-memory.d.ts.map +0 -1
- package/dist/realtime/in-memory.js +0 -28
- package/dist/realtime/in-memory.js.map +0 -1
- package/dist/realtime/index.d.ts +0 -4
- package/dist/realtime/index.d.ts.map +0 -1
- package/dist/realtime/index.js +0 -3
- package/dist/realtime/index.js.map +0 -1
- package/dist/realtime/types.d.ts +0 -62
- package/dist/realtime/types.d.ts.map +0 -1
- package/dist/realtime/types.js +0 -19
- package/dist/realtime/types.js.map +0 -1
- package/dist/relay/client-role/forward-engine.d.ts +0 -63
- package/dist/relay/client-role/forward-engine.d.ts.map +0 -1
- package/dist/relay/client-role/forward-engine.js +0 -267
- package/dist/relay/client-role/forward-engine.js.map +0 -1
- package/dist/relay/client-role/index.d.ts +0 -9
- package/dist/relay/client-role/index.d.ts.map +0 -1
- package/dist/relay/client-role/index.js +0 -9
- package/dist/relay/client-role/index.js.map +0 -1
- package/dist/relay/client-role/pull-engine.d.ts +0 -72
- package/dist/relay/client-role/pull-engine.d.ts.map +0 -1
- package/dist/relay/client-role/pull-engine.js +0 -249
- package/dist/relay/client-role/pull-engine.js.map +0 -1
- package/dist/relay/client-role/sequence-mapper.d.ts +0 -65
- package/dist/relay/client-role/sequence-mapper.d.ts.map +0 -1
- package/dist/relay/client-role/sequence-mapper.js +0 -161
- package/dist/relay/client-role/sequence-mapper.js.map +0 -1
- package/dist/relay/evaluation/relay-paths.d.ts +0 -41
- package/dist/relay/evaluation/relay-paths.d.ts.map +0 -1
- package/dist/relay/evaluation/relay-paths.js +0 -504
- package/dist/relay/evaluation/relay-paths.js.map +0 -1
- package/dist/relay/evaluation/rust-boundary.d.ts +0 -47
- package/dist/relay/evaluation/rust-boundary.d.ts.map +0 -1
- package/dist/relay/evaluation/rust-boundary.js +0 -220
- package/dist/relay/evaluation/rust-boundary.js.map +0 -1
- package/dist/relay/index.d.ts +0 -37
- package/dist/relay/index.d.ts.map +0 -1
- package/dist/relay/index.js +0 -44
- package/dist/relay/index.js.map +0 -1
- package/dist/relay/migrate.d.ts +0 -18
- package/dist/relay/migrate.d.ts.map +0 -1
- package/dist/relay/migrate.js +0 -99
- package/dist/relay/migrate.js.map +0 -1
- package/dist/relay/mode-manager.d.ts +0 -60
- package/dist/relay/mode-manager.d.ts.map +0 -1
- package/dist/relay/mode-manager.js +0 -114
- package/dist/relay/mode-manager.js.map +0 -1
- package/dist/relay/realtime.d.ts +0 -90
- package/dist/relay/realtime.d.ts.map +0 -1
- package/dist/relay/realtime.js +0 -147
- package/dist/relay/realtime.js.map +0 -1
- package/dist/relay/relay.d.ts +0 -190
- package/dist/relay/relay.d.ts.map +0 -1
- package/dist/relay/relay.js +0 -320
- package/dist/relay/relay.js.map +0 -1
- package/dist/relay/schema.d.ts +0 -158
- package/dist/relay/schema.d.ts.map +0 -1
- package/dist/relay/schema.js +0 -7
- package/dist/relay/schema.js.map +0 -1
- package/dist/relay/server-role/index.d.ts +0 -56
- package/dist/relay/server-role/index.d.ts.map +0 -1
- package/dist/relay/server-role/index.js +0 -193
- package/dist/relay/server-role/index.js.map +0 -1
- package/dist/relay/server-role/pull.d.ts +0 -27
- package/dist/relay/server-role/pull.d.ts.map +0 -1
- package/dist/relay/server-role/pull.js +0 -24
- package/dist/relay/server-role/pull.js.map +0 -1
- package/dist/relay/server-role/push.d.ts +0 -29
- package/dist/relay/server-role/push.d.ts.map +0 -1
- package/dist/relay/server-role/push.js +0 -122
- package/dist/relay/server-role/push.js.map +0 -1
- package/dist/s3/index.d.ts +0 -83
- package/dist/s3/index.d.ts.map +0 -1
- package/dist/s3/index.js +0 -223
- package/dist/s3/index.js.map +0 -1
- package/dist/schema.d.ts.map +0 -1
- package/dist/schema.js.map +0 -1
- package/dist/service-worker/index.d.ts +0 -114
- package/dist/service-worker/index.d.ts.map +0 -1
- package/dist/service-worker/index.js +0 -487
- package/dist/service-worker/index.js.map +0 -1
- package/dist/snapshot-artifacts/sqlite-bun.d.ts +0 -15
- package/dist/snapshot-artifacts/sqlite-bun.d.ts.map +0 -1
- package/dist/snapshot-artifacts/sqlite-bun.js +0 -128
- package/dist/snapshot-artifacts/sqlite-bun.js.map +0 -1
- package/dist/snapshot-artifacts.d.ts +0 -206
- package/dist/snapshot-artifacts.d.ts.map +0 -1
- package/dist/snapshot-artifacts.js +0 -545
- package/dist/snapshot-artifacts.js.map +0 -1
- package/dist/snapshot-chunks/db-metadata.d.ts +0 -56
- package/dist/snapshot-chunks/db-metadata.d.ts.map +0 -1
- package/dist/snapshot-chunks/db-metadata.js +0 -360
- package/dist/snapshot-chunks/db-metadata.js.map +0 -1
- package/dist/snapshot-chunks/index.d.ts +0 -8
- package/dist/snapshot-chunks/index.d.ts.map +0 -1
- package/dist/snapshot-chunks/index.js +0 -8
- package/dist/snapshot-chunks/index.js.map +0 -1
- package/dist/snapshot-chunks/types.d.ts +0 -80
- package/dist/snapshot-chunks/types.d.ts.map +0 -1
- package/dist/snapshot-chunks/types.js +0 -8
- package/dist/snapshot-chunks/types.js.map +0 -1
- package/dist/snapshot-chunks.d.ts +0 -90
- package/dist/snapshot-chunks.d.ts.map +0 -1
- package/dist/snapshot-chunks.js +0 -304
- package/dist/snapshot-chunks.js.map +0 -1
- package/dist/sqlite/index.d.ts +0 -53
- package/dist/sqlite/index.d.ts.map +0 -1
- package/dist/sqlite/index.js +0 -795
- package/dist/sqlite/index.js.map +0 -1
- package/dist/sqlite3.d.ts +0 -22
- package/dist/sqlite3.d.ts.map +0 -1
- package/dist/sqlite3.js +0 -99
- package/dist/sqlite3.js.map +0 -1
- package/dist/stats.d.ts +0 -28
- package/dist/stats.d.ts.map +0 -1
- package/dist/stats.js +0 -93
- package/dist/stats.js.map +0 -1
- package/dist/subscriptions/cache.d.ts +0 -58
- package/dist/subscriptions/cache.d.ts.map +0 -1
- package/dist/subscriptions/cache.js +0 -250
- package/dist/subscriptions/cache.js.map +0 -1
- package/dist/subscriptions/index.d.ts +0 -3
- package/dist/subscriptions/index.d.ts.map +0 -1
- package/dist/subscriptions/index.js +0 -3
- package/dist/subscriptions/index.js.map +0 -1
- package/dist/subscriptions/resolve.d.ts +0 -40
- package/dist/subscriptions/resolve.d.ts.map +0 -1
- package/dist/subscriptions/resolve.js +0 -275
- package/dist/subscriptions/resolve.js.map +0 -1
- package/dist/sync.d.ts +0 -24
- package/dist/sync.d.ts.map +0 -1
- package/dist/sync.js +0 -27
- package/dist/sync.js.map +0 -1
- package/src/auth-leases.ts +0 -649
- package/src/better-sqlite3.ts +0 -35
- package/src/blobs/access.ts +0 -244
- package/src/blobs/adapters/database.ts +0 -397
- package/src/blobs/index.ts +0 -9
- package/src/blobs/manager.ts +0 -901
- package/src/blobs/migrate.ts +0 -158
- package/src/blobs/types.ts +0 -74
- package/src/bun-sqlite-ambient.d.ts +0 -19
- package/src/bun-sqlite.ts +0 -27
- package/src/clients.ts +0 -22
- package/src/cloudflare/durable-object.ts +0 -289
- package/src/cloudflare/index.ts +0 -22
- package/src/cloudflare/r2.ts +0 -526
- package/src/cloudflare/scope-cache.ts +0 -341
- package/src/cloudflare/sentry.ts +0 -230
- package/src/cloudflare/worker.ts +0 -77
- package/src/commit-integrity.ts +0 -371
- package/src/compaction.ts +0 -77
- package/src/crdt-yjs/index.ts +0 -931
- package/src/d1.ts +0 -16
- package/src/dialect/base.ts +0 -360
- package/src/dialect/helpers.ts +0 -92
- package/src/dialect/index.ts +0 -7
- package/src/dialect/types.ts +0 -247
- package/src/encrypted-crdt.ts +0 -786
- package/src/filesystem/index.ts +0 -262
- package/src/handlers/collection.ts +0 -121
- package/src/handlers/create-handler.ts +0 -1134
- package/src/handlers/index.ts +0 -3
- package/src/handlers/types.ts +0 -403
- package/src/helpers/conflict.ts +0 -64
- package/src/helpers/emitted-change.ts +0 -69
- package/src/helpers/index.ts +0 -12
- package/src/helpers/paginate.ts +0 -82
- package/src/helpers/scope-authorization.ts +0 -27
- package/src/helpers/scope-commit-index.ts +0 -52
- package/src/helpers/scope-strings.ts +0 -101
- package/src/hono/api-key-auth.ts +0 -177
- package/src/hono/audit-redaction.ts +0 -135
- package/src/hono/blobs.ts +0 -851
- package/src/hono/console/gateway.ts +0 -3046
- package/src/hono/console/live-auth.ts +0 -46
- package/src/hono/console/route-descriptor.ts +0 -22
- package/src/hono/console/routes/api-keys.ts +0 -721
- package/src/hono/console/routes/clients.ts +0 -447
- package/src/hono/console/routes/commits.ts +0 -1137
- package/src/hono/console/routes/context.ts +0 -956
- package/src/hono/console/routes/events.ts +0 -669
- package/src/hono/console/routes/maintenance.ts +0 -461
- package/src/hono/console/routes/shared.ts +0 -816
- package/src/hono/console/routes/stats.ts +0 -392
- package/src/hono/console/routes/storage.ts +0 -159
- package/src/hono/console/routes.ts +0 -146
- package/src/hono/console/schema-errors.ts +0 -23
- package/src/hono/console/schemas.ts +0 -914
- package/src/hono/console/types.ts +0 -223
- package/src/hono/console/ui.ts +0 -100
- package/src/hono/create-server.ts +0 -230
- package/src/hono/errors.ts +0 -50
- package/src/hono/index.ts +0 -54
- package/src/hono/openapi.ts +0 -139
- package/src/hono/proxy/connection-manager.ts +0 -340
- package/src/hono/proxy/index.ts +0 -8
- package/src/hono/proxy/routes.ts +0 -272
- package/src/hono/rate-limit.ts +0 -319
- package/src/hono/realtime-sync-packs.ts +0 -354
- package/src/hono/routes/audit.ts +0 -499
- package/src/hono/routes/auth-leases.ts +0 -119
- package/src/hono/routes/combined.ts +0 -583
- package/src/hono/routes/context.ts +0 -1629
- package/src/hono/routes/health.ts +0 -26
- package/src/hono/routes/realtime.ts +0 -808
- package/src/hono/routes/shared.ts +0 -1626
- package/src/hono/routes/snapshots.ts +0 -345
- package/src/hono/routes.ts +0 -68
- package/src/hono/validation.ts +0 -81
- package/src/hono/websocket-origin.ts +0 -131
- package/src/hono/ws.ts +0 -1134
- package/src/libsql.ts +0 -51
- package/src/migrate.ts +0 -20
- package/src/neon.ts +0 -28
- package/src/notify.ts +0 -341
- package/src/pglite.ts +0 -68
- package/src/plugins/index.ts +0 -1
- package/src/plugins/types.ts +0 -144
- package/src/postgres/index.ts +0 -1291
- package/src/proxy/collection.ts +0 -17
- package/src/proxy/handler.ts +0 -159
- package/src/proxy/index.ts +0 -21
- package/src/proxy/mutation-detector.ts +0 -281
- package/src/proxy/oplog.ts +0 -181
- package/src/proxy/types.ts +0 -46
- package/src/realtime/in-memory.ts +0 -33
- package/src/realtime/index.ts +0 -7
- package/src/realtime/types.ts +0 -90
- package/src/relay/bun-types.d.ts +0 -50
- package/src/relay/client-role/forward-engine.ts +0 -355
- package/src/relay/client-role/index.ts +0 -9
- package/src/relay/client-role/pull-engine.ts +0 -329
- package/src/relay/client-role/sequence-mapper.ts +0 -201
- package/src/relay/evaluation/relay-paths.ts +0 -699
- package/src/relay/evaluation/rust-boundary.ts +0 -464
- package/src/relay/index.ts +0 -50
- package/src/relay/migrate.ts +0 -113
- package/src/relay/mode-manager.ts +0 -142
- package/src/relay/realtime.ts +0 -207
- package/src/relay/relay.ts +0 -431
- package/src/relay/schema.ts +0 -171
- package/src/relay/server-role/index.ts +0 -338
- package/src/relay/server-role/pull.ts +0 -43
- package/src/relay/server-role/push.ts +0 -164
- package/src/s3/index.ts +0 -346
- package/src/service-worker/index.ts +0 -773
- package/src/snapshot-artifacts/sqlite-bun.ts +0 -168
- package/src/snapshot-artifacts.ts +0 -896
- package/src/snapshot-chunks/db-metadata.ts +0 -537
- package/src/snapshot-chunks/index.ts +0 -8
- package/src/snapshot-chunks/types.ts +0 -105
- package/src/snapshot-chunks.ts +0 -453
- package/src/sqlite/index.ts +0 -1064
- package/src/sqlite3.ts +0 -137
- package/src/stats.ts +0 -180
- package/src/subscriptions/cache.ts +0 -376
- package/src/subscriptions/index.ts +0 -2
- package/src/subscriptions/resolve.ts +0 -357
- package/src/sync.ts +0 -111
package/src/schema.ts
CHANGED
|
@@ -1,312 +1,273 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Server schema IR (SPEC.md §2.4, §3.1).
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* - sync_table_commits: commit routing index for fast pull
|
|
8
|
-
* - sync_scope_commits: scope routing index for scoped incremental pull
|
|
4
|
+
* The server is configured with a schema IR: tables, columns with the six
|
|
5
|
+
* §2.4 column types, scope patterns per §3.1, and a schema version. Codegen
|
|
6
|
+
* (B5) will emit this shape later; tests hand-write it.
|
|
9
7
|
*/
|
|
8
|
+
import type { RowColumn } from '@syncular/core';
|
|
10
9
|
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
/** `'prefix:{variable}'` shorthand (column name = variable) or explicit. */
|
|
11
|
+
export type ScopePatternSpec = string | { pattern: string; column: string };
|
|
13
12
|
|
|
14
13
|
/**
|
|
15
|
-
*
|
|
14
|
+
* A user-declared index (the migration subset's CREATE INDEX). With
|
|
15
|
+
* relational server storage these apply server-side too (DESIGN
|
|
16
|
+
* "user indexes") — the same declaration the client materializes.
|
|
16
17
|
*/
|
|
17
|
-
export interface
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
partition_id: string;
|
|
22
|
-
/** Actor who produced the commit */
|
|
23
|
-
actor_id: string;
|
|
24
|
-
/** Client/device identifier */
|
|
25
|
-
client_id: string;
|
|
26
|
-
/** Client-provided commit idempotency key (unique per client) */
|
|
27
|
-
client_commit_id: string;
|
|
28
|
-
/** Creation timestamp */
|
|
29
|
-
created_at: Generated<string>;
|
|
30
|
-
/** Optional metadata */
|
|
31
|
-
meta: unknown | null;
|
|
32
|
-
/** Cached push response for idempotency */
|
|
33
|
-
result_json: unknown | null;
|
|
34
|
-
/** Number of emitted changes (denormalized for observability) */
|
|
35
|
-
change_count: Generated<number>;
|
|
36
|
-
/** Hex SHA-256 digest of the canonical persisted commit payload */
|
|
37
|
-
commit_digest: Generated<string | null>;
|
|
38
|
-
/** Hex SHA-256 root chaining this commit to the previous partition root */
|
|
39
|
-
commit_chain_root: Generated<string | null>;
|
|
40
|
-
/**
|
|
41
|
-
* Tables affected by this commit (for realtime notifications).
|
|
42
|
-
* Array of table names that had changes.
|
|
43
|
-
*/
|
|
44
|
-
affected_tables: Generated<string[]>;
|
|
18
|
+
export interface IndexSchema {
|
|
19
|
+
readonly name: string;
|
|
20
|
+
readonly columns: readonly string[];
|
|
21
|
+
readonly unique?: boolean;
|
|
45
22
|
}
|
|
46
23
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
*/
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
|
|
53
|
-
/**
|
|
54
|
-
|
|
55
|
-
/**
|
|
56
|
-
|
|
57
|
-
/** Table name being changed */
|
|
58
|
-
table: string;
|
|
59
|
-
/** Row primary key */
|
|
60
|
-
row_id: string;
|
|
61
|
-
/** Operation: 'upsert' or 'delete' */
|
|
62
|
-
op: SyncOp;
|
|
63
|
-
/** Row data as JSON (null for deletes) */
|
|
64
|
-
row_json: unknown | null;
|
|
65
|
-
/** Optional row version for optimistic concurrency */
|
|
66
|
-
row_version: number | null;
|
|
67
|
-
/**
|
|
68
|
-
* Scope values for routing/filtering (JSONB).
|
|
69
|
-
* Example: { "user_id": "U1", "project_id": "P1" }
|
|
70
|
-
*/
|
|
71
|
-
scopes: unknown;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
/**
|
|
75
|
-
* Per-client cursor tracking (for pruning + observability).
|
|
76
|
-
*/
|
|
77
|
-
export interface SyncClientCursorsTable {
|
|
78
|
-
/** Logical partition key (tenant / demo / workspace) */
|
|
79
|
-
partition_id: string;
|
|
80
|
-
/** Client/device identifier */
|
|
81
|
-
client_id: string;
|
|
82
|
-
/** Actor currently associated with the client */
|
|
83
|
-
actor_id: string;
|
|
84
|
-
/** Last successfully pulled commit_seq */
|
|
85
|
-
cursor: number;
|
|
86
|
-
/**
|
|
87
|
-
* Effective scope values for the client's last pull (JSONB).
|
|
88
|
-
* This is the intersection of requested scopes and allowed scopes.
|
|
89
|
-
*/
|
|
90
|
-
effective_scopes: unknown;
|
|
24
|
+
export interface TableSchema {
|
|
25
|
+
readonly name: string;
|
|
26
|
+
/** Columns in schema-IR declaration order (the row-codec order, §2.4). */
|
|
27
|
+
readonly columns: readonly RowColumn[];
|
|
28
|
+
/** Primary-key column; its value renders as the change `rowId` (§2.2). */
|
|
29
|
+
readonly primaryKey: string;
|
|
30
|
+
/** Scope patterns (§3.1). Every synced table declares at least one. */
|
|
31
|
+
readonly scopes: readonly ScopePatternSpec[];
|
|
32
|
+
/** User indexes (optional) — created on the server's relational tables. */
|
|
33
|
+
readonly indexes?: readonly IndexSchema[];
|
|
91
34
|
/**
|
|
92
|
-
*
|
|
35
|
+
* Server-side column materialization (DESIGN-relational-server-storage.md
|
|
36
|
+
* "optional materialization"). When `true` (the usual default) the server's
|
|
37
|
+
* row table carries the app's typed columns as a queryable projection;
|
|
38
|
+
* when `false` it carries only the `_sync_*` meta columns — same storage
|
|
39
|
+
* layout, same serve path, no decode on the push path, but no server-side
|
|
40
|
+
* SQL over the app's columns (and user indexes are skipped).
|
|
93
41
|
*
|
|
94
|
-
*
|
|
95
|
-
*
|
|
96
|
-
*
|
|
97
|
-
*
|
|
42
|
+
* Unset defaults to `true`, EXCEPT for tables whose every non-PK,
|
|
43
|
+
* non-scope column is encrypted (§5.11): their projection would be
|
|
44
|
+
* columns of ciphertext, so they default to `false`. Explicit values
|
|
45
|
+
* always win. Changing the value later requires a schemaVersion bump
|
|
46
|
+
* (flipping on backfills the projection from stored payloads).
|
|
98
47
|
*/
|
|
99
|
-
|
|
100
|
-
/** Last update timestamp */
|
|
101
|
-
updated_at: Generated<string>;
|
|
48
|
+
readonly materialize?: boolean;
|
|
102
49
|
}
|
|
103
50
|
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
chunk_id: string;
|
|
110
|
-
/** Logical partition key (tenant / demo / workspace) */
|
|
111
|
-
partition_id: string;
|
|
112
|
-
/** Effective scope key this chunk belongs to */
|
|
113
|
-
scope_key: string;
|
|
114
|
-
/** Scope identifier */
|
|
115
|
-
scope: string;
|
|
116
|
-
/** Snapshot as-of commit sequence */
|
|
117
|
-
as_of_commit_seq: number;
|
|
118
|
-
/** Snapshot row cursor key (empty string represents null) */
|
|
119
|
-
row_cursor: string;
|
|
120
|
-
/** Snapshot row limit used to produce this chunk */
|
|
121
|
-
row_limit: number;
|
|
122
|
-
/** Cursor after this chunk; null means no next row for this table */
|
|
123
|
-
next_row_cursor?: string | null;
|
|
124
|
-
/** 1 when this chunk reaches the end of the table snapshot */
|
|
125
|
-
is_last_page?: number;
|
|
126
|
-
/** Row encoding (e.g. 'binary-table-v1') */
|
|
127
|
-
encoding: string;
|
|
128
|
-
/** Compression algorithm (e.g. 'gzip') */
|
|
129
|
-
compression: string;
|
|
130
|
-
/** Hex-encoded sha256 of content */
|
|
131
|
-
sha256: string;
|
|
132
|
-
/** Byte length of content */
|
|
133
|
-
byte_length: number;
|
|
134
|
-
/** Reference to blob storage (new field for external storage) */
|
|
135
|
-
blob_hash: string;
|
|
136
|
-
/** Encoded chunk bytes (deprecated: use blob storage via blob_hash) */
|
|
137
|
-
body?: Uint8Array | null;
|
|
138
|
-
/** Created timestamp */
|
|
139
|
-
created_at: Generated<string>;
|
|
140
|
-
/** Expiration timestamp (server may delete after this) */
|
|
141
|
-
expires_at: string;
|
|
51
|
+
export interface ServerSchema {
|
|
52
|
+
/** The generated schema version this server serves (§2.4, §9). */
|
|
53
|
+
readonly version: number;
|
|
54
|
+
/** Tables in handler-declared bootstrap order (§4.7). */
|
|
55
|
+
readonly tables: readonly TableSchema[];
|
|
142
56
|
}
|
|
143
57
|
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
*/
|
|
151
|
-
export interface SyncSnapshotArtifactsTable {
|
|
152
|
-
/** Opaque artifact id */
|
|
153
|
-
artifact_id: string;
|
|
154
|
-
/** Logical partition key (tenant / demo / workspace) */
|
|
155
|
-
partition_id: string;
|
|
156
|
-
/** Effective scope key this artifact belongs to */
|
|
157
|
-
scope_key: string;
|
|
158
|
-
/** Stable subscription id this artifact serves */
|
|
159
|
-
subscription_id: string;
|
|
160
|
-
/** App table represented by the artifact */
|
|
161
|
-
table: string;
|
|
162
|
-
/** Artifact format (e.g. 'sqlite-snapshot-v1') */
|
|
163
|
-
artifact_kind: string;
|
|
164
|
-
/** App schema/cache semantic version */
|
|
165
|
-
schema_version: string;
|
|
166
|
-
/** Snapshot as-of commit sequence */
|
|
167
|
-
as_of_commit_seq: number;
|
|
168
|
-
/** Snapshot row cursor key (empty string represents null) */
|
|
169
|
-
row_cursor: string;
|
|
170
|
-
/** Snapshot row limit used to produce this artifact */
|
|
171
|
-
row_limit: number;
|
|
172
|
-
/** Number of rows included in the artifact */
|
|
173
|
-
row_count: number;
|
|
174
|
-
/** Cursor after this artifact; null means no next row for this table */
|
|
175
|
-
next_row_cursor?: string | null;
|
|
176
|
-
/** 1 when this artifact starts at the table's first page */
|
|
177
|
-
is_first_page: number;
|
|
178
|
-
/** 1 when this artifact reaches the end of the table snapshot */
|
|
179
|
-
is_last_page: number;
|
|
180
|
-
/** Artifact compression algorithm */
|
|
181
|
-
compression: string;
|
|
182
|
-
/** Hex-encoded sha256 of artifact body bytes */
|
|
183
|
-
sha256: string;
|
|
184
|
-
/** Byte length of artifact body bytes */
|
|
185
|
-
byte_length: number;
|
|
186
|
-
/** Hex digest of the scoped artifact manifest */
|
|
187
|
-
manifest_digest: string;
|
|
188
|
-
/** Normalized JSON feature set */
|
|
189
|
-
feature_set_json: string;
|
|
190
|
-
/** Canonical manifest JSON */
|
|
191
|
-
manifest_json: string;
|
|
192
|
-
/** Reference to blob storage */
|
|
193
|
-
blob_hash: string;
|
|
194
|
-
/** Created timestamp */
|
|
195
|
-
created_at: Generated<string>;
|
|
196
|
-
/** Expiration timestamp (server may delete after this) */
|
|
197
|
-
expires_at: string;
|
|
58
|
+
export interface CompiledScopePattern {
|
|
59
|
+
readonly variable: string;
|
|
60
|
+
/** Literal prefix; the scope key is `prefix + ':' + value` (§3.1). */
|
|
61
|
+
readonly prefix: string;
|
|
62
|
+
readonly column: string;
|
|
63
|
+
readonly columnIndex: number;
|
|
198
64
|
}
|
|
199
65
|
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
66
|
+
export interface CompiledTable {
|
|
67
|
+
readonly name: string;
|
|
68
|
+
readonly columns: readonly RowColumn[];
|
|
69
|
+
readonly primaryKeyIndex: number;
|
|
70
|
+
readonly scopePatterns: readonly CompiledScopePattern[];
|
|
71
|
+
/** User indexes (validated: unique names, existing columns). */
|
|
72
|
+
readonly indexes: readonly IndexSchema[];
|
|
73
|
+
/** Resolved materialization (see `TableSchema.materialize`). */
|
|
74
|
+
readonly materialize: boolean;
|
|
75
|
+
readonly columnIndex: ReadonlyMap<string, number>;
|
|
76
|
+
readonly declaredVariables: ReadonlySet<string>;
|
|
77
|
+
/** Column indices declared `blob_ref` (§2.4 tag 7, §5.9) — the columns
|
|
78
|
+
* whose non-NULL values reference blobs (existence check, reference
|
|
79
|
+
* index). */
|
|
80
|
+
readonly blobRefColumnIndices: readonly number[];
|
|
81
|
+
/** `crdt` columns (§2.4 tag 8, §5.10) — index + the `crdtType` name that
|
|
82
|
+
* selects the merger. Empty when the table has no crdt columns. */
|
|
83
|
+
readonly crdtColumns: readonly {
|
|
84
|
+
readonly index: number;
|
|
85
|
+
readonly crdtType: string;
|
|
86
|
+
}[];
|
|
87
|
+
/** §5.11: column indices marked `encrypted`. The server never decrypts;
|
|
88
|
+
* this only excludes the table from sqlite-image eligibility (§5.3) — an
|
|
89
|
+
* image copies ciphertext wholesale with no per-row decrypt pass, so an
|
|
90
|
+
* encrypted table MUST be served via the rows lane. Empty ⇒ no restriction. */
|
|
91
|
+
readonly encryptedColumnIndices: readonly number[];
|
|
221
92
|
}
|
|
222
93
|
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
*/
|
|
229
|
-
export interface SyncCrdtCheckpointsTable {
|
|
230
|
-
seq: Generated<number>;
|
|
231
|
-
partition_id: string;
|
|
232
|
-
stream_id: string;
|
|
233
|
-
app_table: string;
|
|
234
|
-
row_id: string;
|
|
235
|
-
field_name: string;
|
|
236
|
-
checkpoint_id: string;
|
|
237
|
-
covers_seq: number;
|
|
238
|
-
actor_id: string | null;
|
|
239
|
-
client_id: string | null;
|
|
240
|
-
key_id: string;
|
|
241
|
-
ciphertext: string;
|
|
242
|
-
scopes: unknown;
|
|
243
|
-
created_at: Generated<string>;
|
|
94
|
+
export interface CompiledSchema {
|
|
95
|
+
readonly version: number;
|
|
96
|
+
readonly tables: ReadonlyMap<string, CompiledTable>;
|
|
97
|
+
/** Union of scope variables declared by any table (§3.2 resolver check). */
|
|
98
|
+
readonly declaredVariables: ReadonlySet<string>;
|
|
244
99
|
}
|
|
245
100
|
|
|
246
|
-
|
|
247
|
-
* Index table: which commits affect which tables.
|
|
248
|
-
*
|
|
249
|
-
* Used to efficiently find commit_seq values for a table without scanning
|
|
250
|
-
* the (much larger) change log.
|
|
251
|
-
*/
|
|
252
|
-
export interface SyncTableCommitsTable {
|
|
253
|
-
/** Logical partition key (tenant / demo / workspace) */
|
|
254
|
-
partition_id: string;
|
|
255
|
-
table: string;
|
|
256
|
-
commit_seq: number;
|
|
257
|
-
}
|
|
101
|
+
const PATTERN_RE = /^([^{}]+):\{([^{}:]+)\}$/;
|
|
258
102
|
|
|
259
103
|
/**
|
|
260
|
-
*
|
|
261
|
-
*
|
|
262
|
-
*
|
|
263
|
-
*
|
|
104
|
+
* Identifier rules for relational server storage (DESIGN "current-row
|
|
105
|
+
* tables"): app tables live in the same namespace as the sync
|
|
106
|
+
* infrastructure tables (`sync_*`) and carry `_sync_*` meta columns, so
|
|
107
|
+
* both prefixes are reserved; identifiers over 63 bytes would be silently
|
|
108
|
+
* truncated by Postgres.
|
|
264
109
|
*/
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
110
|
+
function validateIdentifier(kind: string, name: string): void {
|
|
111
|
+
if (name.length === 0) {
|
|
112
|
+
throw new Error(`${kind} name must not be empty`);
|
|
113
|
+
}
|
|
114
|
+
const lower = name.toLowerCase();
|
|
115
|
+
if (lower.startsWith('sync_') || lower.startsWith('_sync')) {
|
|
116
|
+
throw new Error(
|
|
117
|
+
`${kind} name ${JSON.stringify(name)} uses a reserved prefix (sync_/_sync are the server storage namespace)`,
|
|
118
|
+
);
|
|
119
|
+
}
|
|
120
|
+
if (new TextEncoder().encode(name).length > 63) {
|
|
121
|
+
throw new Error(
|
|
122
|
+
`${kind} name ${JSON.stringify(name)} exceeds 63 bytes (Postgres identifier limit)`,
|
|
123
|
+
);
|
|
124
|
+
}
|
|
271
125
|
}
|
|
272
126
|
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
127
|
+
function compilePattern(
|
|
128
|
+
table: TableSchema,
|
|
129
|
+
spec: ScopePatternSpec,
|
|
130
|
+
columnIndex: ReadonlyMap<string, number>,
|
|
131
|
+
): CompiledScopePattern {
|
|
132
|
+
const pattern = typeof spec === 'string' ? spec : spec.pattern;
|
|
133
|
+
const match = PATTERN_RE.exec(pattern);
|
|
134
|
+
if (match === null || match[1] === undefined || match[2] === undefined) {
|
|
135
|
+
throw new Error(
|
|
136
|
+
`table ${table.name}: scope pattern ${JSON.stringify(pattern)} must be 'prefix:{variable}' with exactly one variable`,
|
|
137
|
+
);
|
|
138
|
+
}
|
|
139
|
+
const prefix = match[1];
|
|
140
|
+
const variable = match[2];
|
|
141
|
+
const column = typeof spec === 'string' ? variable : spec.column;
|
|
142
|
+
const index = columnIndex.get(column);
|
|
143
|
+
if (index === undefined) {
|
|
144
|
+
throw new Error(
|
|
145
|
+
`table ${table.name}: scope pattern ${JSON.stringify(pattern)} names unknown column ${JSON.stringify(column)}`,
|
|
146
|
+
);
|
|
147
|
+
}
|
|
148
|
+
return { variable, prefix, column, columnIndex: index };
|
|
287
149
|
}
|
|
288
150
|
|
|
289
|
-
|
|
290
|
-
* Commit metadata row for pull responses
|
|
291
|
-
*/
|
|
292
|
-
export interface SyncCommitRow {
|
|
293
|
-
commit_seq: number;
|
|
294
|
-
actor_id: string;
|
|
295
|
-
created_at: string;
|
|
296
|
-
result_json: unknown | null;
|
|
297
|
-
commit_digest: string | null;
|
|
298
|
-
commit_chain_root: string | null;
|
|
299
|
-
}
|
|
151
|
+
const compiledCache = new WeakMap<ServerSchema, CompiledSchema>();
|
|
300
152
|
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
table
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
153
|
+
export function compileSchema(schema: ServerSchema): CompiledSchema {
|
|
154
|
+
const cached = compiledCache.get(schema);
|
|
155
|
+
if (cached !== undefined) return cached;
|
|
156
|
+
const tables = new Map<string, CompiledTable>();
|
|
157
|
+
const declaredVariables = new Set<string>();
|
|
158
|
+
for (const table of schema.tables) {
|
|
159
|
+
if (tables.has(table.name)) {
|
|
160
|
+
throw new Error(`duplicate table ${JSON.stringify(table.name)}`);
|
|
161
|
+
}
|
|
162
|
+
validateIdentifier('table', table.name);
|
|
163
|
+
const columnIndex = new Map<string, number>();
|
|
164
|
+
table.columns.forEach((column, index) => {
|
|
165
|
+
if (columnIndex.has(column.name)) {
|
|
166
|
+
throw new Error(
|
|
167
|
+
`table ${table.name}: duplicate column ${JSON.stringify(column.name)}`,
|
|
168
|
+
);
|
|
169
|
+
}
|
|
170
|
+
validateIdentifier(`table ${table.name}: column`, column.name);
|
|
171
|
+
columnIndex.set(column.name, index);
|
|
172
|
+
});
|
|
173
|
+
const indexes = table.indexes ?? [];
|
|
174
|
+
const indexNames = new Set<string>();
|
|
175
|
+
for (const index of indexes) {
|
|
176
|
+
validateIdentifier(`table ${table.name}: index`, index.name);
|
|
177
|
+
if (indexNames.has(index.name)) {
|
|
178
|
+
throw new Error(
|
|
179
|
+
`table ${table.name}: duplicate index ${JSON.stringify(index.name)}`,
|
|
180
|
+
);
|
|
181
|
+
}
|
|
182
|
+
indexNames.add(index.name);
|
|
183
|
+
for (const column of index.columns) {
|
|
184
|
+
if (!columnIndex.has(column)) {
|
|
185
|
+
throw new Error(
|
|
186
|
+
`table ${table.name}: index ${JSON.stringify(index.name)} names unknown column ${JSON.stringify(column)}`,
|
|
187
|
+
);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
const primaryKeyIndex = columnIndex.get(table.primaryKey);
|
|
192
|
+
if (primaryKeyIndex === undefined) {
|
|
193
|
+
throw new Error(
|
|
194
|
+
`table ${table.name}: primary key ${JSON.stringify(table.primaryKey)} is not a column`,
|
|
195
|
+
);
|
|
196
|
+
}
|
|
197
|
+
if (table.scopes.length === 0) {
|
|
198
|
+
throw new Error(
|
|
199
|
+
`table ${table.name}: every synced table declares at least one scope pattern (§3.1)`,
|
|
200
|
+
);
|
|
201
|
+
}
|
|
202
|
+
const scopePatterns = table.scopes.map((spec) =>
|
|
203
|
+
compilePattern(table, spec, columnIndex),
|
|
204
|
+
);
|
|
205
|
+
const variables = new Set<string>();
|
|
206
|
+
for (const pattern of scopePatterns) {
|
|
207
|
+
const existing = scopePatterns.find(
|
|
208
|
+
(p) => p.variable === pattern.variable && p.column !== pattern.column,
|
|
209
|
+
);
|
|
210
|
+
if (existing !== undefined) {
|
|
211
|
+
throw new Error(
|
|
212
|
+
`table ${table.name}: variable ${JSON.stringify(pattern.variable)} maps to two different columns (§3.1)`,
|
|
213
|
+
);
|
|
214
|
+
}
|
|
215
|
+
variables.add(pattern.variable);
|
|
216
|
+
declaredVariables.add(pattern.variable);
|
|
217
|
+
}
|
|
218
|
+
const blobRefColumnIndices: number[] = [];
|
|
219
|
+
const crdtColumns: { index: number; crdtType: string }[] = [];
|
|
220
|
+
const encryptedColumnIndices: number[] = [];
|
|
221
|
+
table.columns.forEach((column, index) => {
|
|
222
|
+
if (column.type === 'blob_ref') blobRefColumnIndices.push(index);
|
|
223
|
+
// §5.11: an encrypted column carries wire type `bytes` + `encrypted`.
|
|
224
|
+
if (column.encrypted === true) encryptedColumnIndices.push(index);
|
|
225
|
+
if (column.type === 'crdt') {
|
|
226
|
+
// §5.10.1: a crdt column MUST name a crdtType (schema-compile-time
|
|
227
|
+
// requirement — a crdt column without one is a server bug).
|
|
228
|
+
if (column.crdtType === undefined || column.crdtType.length === 0) {
|
|
229
|
+
throw new Error(
|
|
230
|
+
`table ${table.name}: crdt column ${JSON.stringify(column.name)} must declare a crdtType (§5.10.1)`,
|
|
231
|
+
);
|
|
232
|
+
}
|
|
233
|
+
crdtColumns.push({ index, crdtType: column.crdtType });
|
|
234
|
+
}
|
|
235
|
+
});
|
|
236
|
+
// Materialization default: explicit wins; otherwise on, unless every
|
|
237
|
+
// non-PK, non-scope column is encrypted — a fully-E2EE table's
|
|
238
|
+
// projection would be pure ciphertext, so it defaults off.
|
|
239
|
+
const scopeColumnIndices = new Set(
|
|
240
|
+
scopePatterns.map((pattern) => pattern.columnIndex),
|
|
241
|
+
);
|
|
242
|
+
const projectable = table.columns.filter(
|
|
243
|
+
(column, index) =>
|
|
244
|
+
index !== primaryKeyIndex && !scopeColumnIndices.has(index),
|
|
245
|
+
);
|
|
246
|
+
const fullyEncrypted =
|
|
247
|
+
encryptedColumnIndices.length > 0 &&
|
|
248
|
+
projectable.length > 0 &&
|
|
249
|
+
projectable.every((column) => column.encrypted === true);
|
|
250
|
+
const materialize = table.materialize ?? !fullyEncrypted;
|
|
251
|
+
|
|
252
|
+
tables.set(table.name, {
|
|
253
|
+
name: table.name,
|
|
254
|
+
columns: table.columns,
|
|
255
|
+
primaryKeyIndex,
|
|
256
|
+
scopePatterns,
|
|
257
|
+
indexes,
|
|
258
|
+
materialize,
|
|
259
|
+
columnIndex,
|
|
260
|
+
declaredVariables: variables,
|
|
261
|
+
blobRefColumnIndices,
|
|
262
|
+
crdtColumns,
|
|
263
|
+
encryptedColumnIndices,
|
|
264
|
+
});
|
|
265
|
+
}
|
|
266
|
+
const compiled: CompiledSchema = {
|
|
267
|
+
version: schema.version,
|
|
268
|
+
tables,
|
|
269
|
+
declaredVariables,
|
|
270
|
+
};
|
|
271
|
+
compiledCache.set(schema, compiled);
|
|
272
|
+
return compiled;
|
|
312
273
|
}
|