@syncular/server 0.1.2 → 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
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Storage interface (defined by the SPEC's needs, implementation-agnostic).
|
|
3
|
+
*
|
|
4
|
+
* Requirements it encodes:
|
|
5
|
+
* - commit log with per-partition `commitSeq` (§2.1) and a commit→scope
|
|
6
|
+
* inverted index designed in from day one (§3.1, REVISE B2): pulls filter
|
|
7
|
+
* by scope via the index, never by scanning the log;
|
|
8
|
+
* - idempotency results per §2.3 persisted in the same transaction as the
|
|
9
|
+
* commit's writes (§6.4);
|
|
10
|
+
* - the pruning horizon per §4.6;
|
|
11
|
+
* - current-row reads for write authorization (§3.4) and conflict handling
|
|
12
|
+
* (§6.2);
|
|
13
|
+
* - per-(partition, clientId) cursor records + last subscription list
|
|
14
|
+
* (§4.5, §8.1).
|
|
15
|
+
*
|
|
16
|
+
* The interface is async throughout so a Postgres implementation slots in
|
|
17
|
+
* without touching the core. All methods are partition-local (§2.1).
|
|
18
|
+
*/
|
|
19
|
+
import type { PushOperationResult, ScopeMap } from '@syncular/core';
|
|
20
|
+
import type { CompiledSchema } from './schema.js';
|
|
21
|
+
/** The current stored state of a synced row. */
|
|
22
|
+
export interface StoredRow {
|
|
23
|
+
readonly rowId: string;
|
|
24
|
+
/** `server_version` (§2.2): starts at 1, +1 per applied upsert. */
|
|
25
|
+
readonly serverVersion: number;
|
|
26
|
+
/** Stored scopes (§3.1): variable → single value. */
|
|
27
|
+
readonly scopes: Record<string, string>;
|
|
28
|
+
/** Row-codec payload (§2.4) for the server's schema version. */
|
|
29
|
+
readonly payload: Uint8Array;
|
|
30
|
+
}
|
|
31
|
+
export interface NewChange {
|
|
32
|
+
readonly table: string;
|
|
33
|
+
readonly rowId: string;
|
|
34
|
+
readonly op: 'upsert' | 'delete';
|
|
35
|
+
/** Present for upsert (§2.2). */
|
|
36
|
+
readonly rowVersion?: number;
|
|
37
|
+
readonly scopes: Record<string, string>;
|
|
38
|
+
/** Present for upsert. */
|
|
39
|
+
readonly payload?: Uint8Array;
|
|
40
|
+
}
|
|
41
|
+
export interface NewCommit {
|
|
42
|
+
readonly clientId: string;
|
|
43
|
+
readonly clientCommitId: string;
|
|
44
|
+
readonly actorId: string;
|
|
45
|
+
readonly createdAtMs: number;
|
|
46
|
+
readonly changes: readonly NewChange[];
|
|
47
|
+
}
|
|
48
|
+
export interface StoredChange {
|
|
49
|
+
readonly table: string;
|
|
50
|
+
readonly rowId: string;
|
|
51
|
+
readonly op: 'upsert' | 'delete';
|
|
52
|
+
readonly rowVersion?: number;
|
|
53
|
+
readonly scopes: Record<string, string>;
|
|
54
|
+
readonly payload?: Uint8Array;
|
|
55
|
+
}
|
|
56
|
+
export interface StoredCommit {
|
|
57
|
+
readonly commitSeq: number;
|
|
58
|
+
readonly createdAtMs: number;
|
|
59
|
+
readonly actorId: string;
|
|
60
|
+
readonly changes: readonly StoredChange[];
|
|
61
|
+
}
|
|
62
|
+
/** Persisted push outcome for idempotent replay (§2.3, §6.3). */
|
|
63
|
+
export interface StoredPushResult {
|
|
64
|
+
readonly status: 'applied' | 'rejected';
|
|
65
|
+
/** Present iff `status` is `applied`. */
|
|
66
|
+
readonly commitSeq?: number;
|
|
67
|
+
readonly results: readonly PushOperationResult[];
|
|
68
|
+
}
|
|
69
|
+
export interface ClientSubscription {
|
|
70
|
+
readonly id: string;
|
|
71
|
+
readonly table: string;
|
|
72
|
+
/** Requested scopes of the client's most recent pull (§8.1). */
|
|
73
|
+
readonly scopes: ScopeMap;
|
|
74
|
+
}
|
|
75
|
+
export interface ClientRecord {
|
|
76
|
+
readonly clientId: string;
|
|
77
|
+
readonly actorId: string;
|
|
78
|
+
/** Minimum `nextCursor` across the last pull's active subscriptions. */
|
|
79
|
+
readonly cursor: number;
|
|
80
|
+
readonly updatedAtMs: number;
|
|
81
|
+
readonly subscriptions: readonly ClientSubscription[];
|
|
82
|
+
}
|
|
83
|
+
export interface CommitWindowQuery {
|
|
84
|
+
readonly table: string;
|
|
85
|
+
/**
|
|
86
|
+
* Effective scopes (§3.2): a change matches iff, for every key, its
|
|
87
|
+
* stored value is in the list. Implementations MUST select candidates
|
|
88
|
+
* via the inverted scope index, never by scanning the log.
|
|
89
|
+
*/
|
|
90
|
+
readonly scopeFilter: ScopeMap;
|
|
91
|
+
/** Window `afterSeq < commitSeq <= throughSeq`, oldest first (§4.5). */
|
|
92
|
+
readonly afterSeq: number;
|
|
93
|
+
readonly throughSeq: number;
|
|
94
|
+
/** Stop after accumulating at least this many matching changes. */
|
|
95
|
+
readonly limitChanges: number;
|
|
96
|
+
}
|
|
97
|
+
export interface RowScanQuery {
|
|
98
|
+
readonly table: string;
|
|
99
|
+
/** Same matching rule as `CommitWindowQuery.scopeFilter`, over rows. */
|
|
100
|
+
readonly scopeFilter: ScopeMap;
|
|
101
|
+
/** Resume after this rowId (exclusive); `null` = start of table. */
|
|
102
|
+
readonly afterRowId: string | null;
|
|
103
|
+
readonly limit: number;
|
|
104
|
+
}
|
|
105
|
+
export interface ClientCursorInfo {
|
|
106
|
+
readonly clientId: string;
|
|
107
|
+
readonly cursor: number;
|
|
108
|
+
readonly updatedAtMs: number;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Commit-log metadata (no change payloads) for the admin/console read
|
|
112
|
+
* surface. `changeCount` is the number of changes the commit carries;
|
|
113
|
+
* `tables` is the distinct set of tables it touched, cheap to derive from
|
|
114
|
+
* the change index.
|
|
115
|
+
*/
|
|
116
|
+
export interface CommitMetadata {
|
|
117
|
+
readonly commitSeq: number;
|
|
118
|
+
readonly clientId: string;
|
|
119
|
+
readonly clientCommitId: string;
|
|
120
|
+
readonly actorId: string;
|
|
121
|
+
readonly createdAtMs: number;
|
|
122
|
+
readonly changeCount: number;
|
|
123
|
+
readonly tables: readonly string[];
|
|
124
|
+
}
|
|
125
|
+
export interface CommitMetadataQuery {
|
|
126
|
+
/** Window `afterSeq < commitSeq`, oldest first. */
|
|
127
|
+
readonly afterSeq: number;
|
|
128
|
+
readonly limit: number;
|
|
129
|
+
/** Restrict to commits that touched this table (via the change index). */
|
|
130
|
+
readonly table?: string;
|
|
131
|
+
}
|
|
132
|
+
/** One recent commit touching a scope key, for the admin scope activity view. */
|
|
133
|
+
export interface ScopeCommitActivity {
|
|
134
|
+
readonly commitSeq: number;
|
|
135
|
+
readonly table: string;
|
|
136
|
+
readonly createdAtMs: number;
|
|
137
|
+
readonly actorId: string;
|
|
138
|
+
readonly changeCount: number;
|
|
139
|
+
}
|
|
140
|
+
export interface ScopeActivityQuery {
|
|
141
|
+
/** The scope key as `variable + ':' + value` (§3.1) — e.g. `project:p1`. */
|
|
142
|
+
readonly variable: string;
|
|
143
|
+
readonly value: string;
|
|
144
|
+
readonly limit: number;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* One transaction per push commit (§6.4): all row writes, the appended
|
|
148
|
+
* commit (with its scope-index entries), and the idempotency record either
|
|
149
|
+
* land together or not at all.
|
|
150
|
+
*/
|
|
151
|
+
export interface StorageTransaction {
|
|
152
|
+
getRow(table: string, rowId: string): Promise<StoredRow | undefined>;
|
|
153
|
+
upsertRow(table: string, row: StoredRow): Promise<void>;
|
|
154
|
+
deleteRow(table: string, rowId: string): Promise<void>;
|
|
155
|
+
/** Allocates the next per-partition commitSeq and appends the commit. */
|
|
156
|
+
appendCommit(commit: NewCommit): Promise<number>;
|
|
157
|
+
putPushResult(clientId: string, clientCommitId: string, result: StoredPushResult): Promise<void>;
|
|
158
|
+
/**
|
|
159
|
+
* Blob reference index (§5.9.4) — ADDITIVE, optional. Set the blobIds a
|
|
160
|
+
* row currently references (empty = clear), replacing any prior entries
|
|
161
|
+
* for (table, rowId), inside the same commit transaction (§6.4). A
|
|
162
|
+
* storage backend that omits this does not support blobs; the push layer
|
|
163
|
+
* only calls it for tables with `blob_ref` columns.
|
|
164
|
+
*/
|
|
165
|
+
setBlobRefs?(table: string, rowId: string, blobIds: readonly string[]): Promise<void>;
|
|
166
|
+
commit(): Promise<void>;
|
|
167
|
+
rollback(): Promise<void>;
|
|
168
|
+
}
|
|
169
|
+
export interface ServerStorage {
|
|
170
|
+
/**
|
|
171
|
+
* Create/migrate the relational per-app row tables for `schema`
|
|
172
|
+
* (DESIGN-relational-server-storage.md). Idempotent and cheap when the
|
|
173
|
+
* stored schema version already matches (one marker read, memoized per
|
|
174
|
+
* instance); on first use it creates the tables, on a version bump it
|
|
175
|
+
* applies the migration subset (CREATE TABLE / ADD COLUMN / CREATE
|
|
176
|
+
* INDEX). The handler calls this before serving; hosts that drive
|
|
177
|
+
* storage directly (tests, admin tooling) call it once up front. Row
|
|
178
|
+
* operations for tables not covered by an `ensureSchema` call throw.
|
|
179
|
+
*/
|
|
180
|
+
ensureSchema(schema: CompiledSchema): Promise<void>;
|
|
181
|
+
begin(partition: string): Promise<StorageTransaction>;
|
|
182
|
+
getMaxCommitSeq(partition: string): Promise<number>;
|
|
183
|
+
getHorizonSeq(partition: string): Promise<number>;
|
|
184
|
+
setHorizonSeq(partition: string, seq: number): Promise<void>;
|
|
185
|
+
/**
|
|
186
|
+
* Deletes commits with `commitSeq <= seq` (log, changes, scope index).
|
|
187
|
+
* Returns the number of commits removed (ops observability).
|
|
188
|
+
*/
|
|
189
|
+
pruneCommitsThrough(partition: string, seq: number): Promise<number>;
|
|
190
|
+
/** Newest commitSeq created strictly before the timestamp; 0 if none. */
|
|
191
|
+
getCommitSeqBefore(partition: string, createdBeforeMs: number): Promise<number>;
|
|
192
|
+
getRow(partition: string, table: string, rowId: string): Promise<StoredRow | undefined>;
|
|
193
|
+
/**
|
|
194
|
+
* Idempotency lookup (§2.3). Throws `SyncError sync.idempotency_cache_miss`
|
|
195
|
+
* when a persisted result exists but cannot be read (§6.3).
|
|
196
|
+
*/
|
|
197
|
+
getPushResult(partition: string, clientId: string, clientCommitId: string): Promise<StoredPushResult | undefined>;
|
|
198
|
+
/**
|
|
199
|
+
* Matching commits in the window, oldest first, each carrying only its
|
|
200
|
+
* matching changes for `table`. Stops once accumulated matching changes
|
|
201
|
+
* reach `limitChanges` or the window is exhausted.
|
|
202
|
+
*/
|
|
203
|
+
readCommitWindow(partition: string, query: CommitWindowQuery): Promise<StoredCommit[]>;
|
|
204
|
+
/** Scope-filtered snapshot scan, ordered by rowId (bootstrap paging). */
|
|
205
|
+
scanRows(partition: string, query: RowScanQuery): Promise<StoredRow[]>;
|
|
206
|
+
getClientRecord(partition: string, clientId: string): Promise<ClientRecord | undefined>;
|
|
207
|
+
putClientRecord(partition: string, record: ClientRecord): Promise<void>;
|
|
208
|
+
/** Cursor records feeding the §4.6 retention watermark. */
|
|
209
|
+
listClientCursors(partition: string): Promise<ClientCursorInfo[]>;
|
|
210
|
+
/**
|
|
211
|
+
* Blob reference index reads (§5.9.4) — ADDITIVE, optional (mirrors the
|
|
212
|
+
* optional `StorageTransaction.setBlobRefs`).
|
|
213
|
+
*
|
|
214
|
+
* `listRowsReferencingBlob`: the (table, rowId) rows that reference the
|
|
215
|
+
* blob — the download authorization candidate set (§5.9.5). Each result
|
|
216
|
+
* carries the row's stored scopes so the caller runs the §3.4 scope test
|
|
217
|
+
* without a second read.
|
|
218
|
+
*
|
|
219
|
+
* `listReferencedBlobIds`: every blobId a live row currently references —
|
|
220
|
+
* the orphan sweep's keep-set (§5.9.2).
|
|
221
|
+
*/
|
|
222
|
+
listRowsReferencingBlob?(partition: string, blobId: string): Promise<BlobReferencingRow[]>;
|
|
223
|
+
listReferencedBlobIds?(partition: string): Promise<string[]>;
|
|
224
|
+
/**
|
|
225
|
+
* Admin/console read surface (`SyncularAdmin`, TODO §2.5) — ADDITIVE,
|
|
226
|
+
* optional. All read-only, partition-scoped, and JSON-able. A backend
|
|
227
|
+
* that omits these simply cannot serve the console; the sync path never
|
|
228
|
+
* calls them.
|
|
229
|
+
*
|
|
230
|
+
* `listClientRecords`: every stored client record for the partition
|
|
231
|
+
* (cursor, last-seen, subscription list) — the "who's connected" view.
|
|
232
|
+
* `listCommitMetadata`: the commit log without payloads (metadata +
|
|
233
|
+
* touched tables), the newest-oriented window an operator inspects.
|
|
234
|
+
* `scopeActivity`: the recent commits touching one scope key, via the
|
|
235
|
+
* change scope index (never a log scan).
|
|
236
|
+
* `getRowScopes`: the (table, rowId) row's current server_version and
|
|
237
|
+
* stored scopes without decoding its payload — the row inspector.
|
|
238
|
+
*/
|
|
239
|
+
listClientRecords?(partition: string): Promise<ClientRecord[]>;
|
|
240
|
+
listCommitMetadata?(partition: string, query: CommitMetadataQuery): Promise<CommitMetadata[]>;
|
|
241
|
+
scopeActivity?(partition: string, query: ScopeActivityQuery): Promise<ScopeCommitActivity[]>;
|
|
242
|
+
getRowScopes?(partition: string, table: string, rowId: string): Promise<{
|
|
243
|
+
serverVersion: number;
|
|
244
|
+
scopes: Record<string, string>;
|
|
245
|
+
} | undefined>;
|
|
246
|
+
}
|
|
247
|
+
/** A row referencing a blob, with the scopes needed to authorize download. */
|
|
248
|
+
export interface BlobReferencingRow {
|
|
249
|
+
readonly table: string;
|
|
250
|
+
readonly rowId: string;
|
|
251
|
+
readonly scopes: Record<string, string>;
|
|
252
|
+
}
|
package/dist/storage.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Server-side write-validation hooks (SPEC.md §6.7).
|
|
3
|
+
*
|
|
4
|
+
* An optional per-table `validate` callback that runs on push, AFTER the
|
|
5
|
+
* row-codec decode (§6.1) and the §3.4 scope authorization, INSIDE the
|
|
6
|
+
* commit transaction, once per operation. It is the seam for business
|
|
7
|
+
* rules that scopes cannot express ("title ≤ 200 chars", "amount ≥ 0",
|
|
8
|
+
* "status ∈ {…}"). A throw (or rejected promise) rejects the whole commit
|
|
9
|
+
* atomically (§6.4) with a host-defined code the client surfaces unchanged
|
|
10
|
+
* in its rejection record (§6.3).
|
|
11
|
+
*
|
|
12
|
+
* The feature is OFF by default (no `validators` on the config): the push
|
|
13
|
+
* path pays only an `undefined` check per operation and builds no context
|
|
14
|
+
* object — zero cost, the events-seam discipline.
|
|
15
|
+
*/
|
|
16
|
+
import type { RowColumn, RowValue } from '@syncular/core';
|
|
17
|
+
/**
|
|
18
|
+
* §6.7 reserved code prefixes. A host validator code MUST NOT start with
|
|
19
|
+
* any of these: they namespace the protocol's own error families (§10.2)
|
|
20
|
+
* so a host code is always distinguishable from a `sync.*`/`blob.*` code.
|
|
21
|
+
* Violating this is a server bug — `ValidationRejection` throws at
|
|
22
|
+
* construction, not at push time, so it surfaces the moment the host code
|
|
23
|
+
* is written.
|
|
24
|
+
*/
|
|
25
|
+
export declare const RESERVED_VALIDATION_CODE_PREFIXES: readonly string[];
|
|
26
|
+
/**
|
|
27
|
+
* The row a validator inspects, keyed by column name (§6.7). Column values
|
|
28
|
+
* are the decoded `RowValue`s (bytes-typed columns are `Uint8Array`).
|
|
29
|
+
* `crdt` columns hold the **merged** value that will persist (§5.10.3), not
|
|
30
|
+
* the raw pushed bytes — a validator sees what the store will hold.
|
|
31
|
+
*/
|
|
32
|
+
export type ValidateRow = Readonly<Record<string, RowValue>>;
|
|
33
|
+
/** The operation kind a validator sees (§6.7). */
|
|
34
|
+
export type ValidateOpKind = 'upsert' | 'delete';
|
|
35
|
+
/**
|
|
36
|
+
* One push operation as the validator sees it (§6.7). For an `upsert`,
|
|
37
|
+
* `row` is the post-merge, post-scope-strip row that will be written and
|
|
38
|
+
* `stored` is the prior stored row (or `undefined` on insert). For a
|
|
39
|
+
* `delete`, `row` is `undefined` and `stored` is the row about to be
|
|
40
|
+
* removed (a delete only reaches a validator when a stored row exists —
|
|
41
|
+
* an absent-row delete is an idempotent no-op that never validates, §6.2).
|
|
42
|
+
*/
|
|
43
|
+
export interface ValidateOperation {
|
|
44
|
+
readonly op: ValidateOpKind;
|
|
45
|
+
readonly table: string;
|
|
46
|
+
readonly rowId: string;
|
|
47
|
+
/** The row to be written (upsert), keyed by column name; undefined on delete. */
|
|
48
|
+
readonly row: ValidateRow | undefined;
|
|
49
|
+
/** The currently-stored row (update/delete), keyed by column name; undefined on insert. */
|
|
50
|
+
readonly stored: ValidateRow | undefined;
|
|
51
|
+
}
|
|
52
|
+
/** Ambient context a validator may consult (§6.7). */
|
|
53
|
+
export interface ValidateContext {
|
|
54
|
+
/** Host-authenticated actor (§1.1) performing the write. */
|
|
55
|
+
readonly actorId: string;
|
|
56
|
+
/** The partition (§1.1) the commit targets. */
|
|
57
|
+
readonly partition: string;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* A per-table validation hook (§6.7). Called once per push operation on
|
|
61
|
+
* its table, after decode + scope authorization, inside the commit
|
|
62
|
+
* transaction. Return (or resolve) to accept; **throw a
|
|
63
|
+
* `ValidationRejection`** to reject the commit with a host code. Throwing
|
|
64
|
+
* any other error is treated as a rejection with a generic
|
|
65
|
+
* `sync.constraint_violation` code (a validator SHOULD throw
|
|
66
|
+
* `ValidationRejection` to control the code). MUST NOT mutate the row.
|
|
67
|
+
*/
|
|
68
|
+
export type Validator = (op: ValidateOperation, ctx: ValidateContext) => void | Promise<void>;
|
|
69
|
+
/** Table name → validator (§6.7). Absent tables are unvalidated. */
|
|
70
|
+
export type ValidatorRegistry = Readonly<Record<string, Validator>>;
|
|
71
|
+
/**
|
|
72
|
+
* The rejection a host validator throws to reject a commit with a chosen
|
|
73
|
+
* code and message (§6.7). The code is checked at construction against the
|
|
74
|
+
* reserved prefixes (§10.2): a host code that collides with the protocol's
|
|
75
|
+
* families is a server bug and fails loud immediately.
|
|
76
|
+
*/
|
|
77
|
+
export declare class ValidationRejection extends Error {
|
|
78
|
+
readonly name = "ValidationRejection";
|
|
79
|
+
readonly code: string;
|
|
80
|
+
constructor(code: string, message?: string);
|
|
81
|
+
}
|
|
82
|
+
/** Build the column-keyed row object a validator inspects (§6.7). */
|
|
83
|
+
export declare function toValidateRow(columns: readonly RowColumn[], values: readonly RowValue[]): ValidateRow;
|
package/dist/validate.js
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* §6.7 reserved code prefixes. A host validator code MUST NOT start with
|
|
3
|
+
* any of these: they namespace the protocol's own error families (§10.2)
|
|
4
|
+
* so a host code is always distinguishable from a `sync.*`/`blob.*` code.
|
|
5
|
+
* Violating this is a server bug — `ValidationRejection` throws at
|
|
6
|
+
* construction, not at push time, so it surfaces the moment the host code
|
|
7
|
+
* is written.
|
|
8
|
+
*/
|
|
9
|
+
export const RESERVED_VALIDATION_CODE_PREFIXES = [
|
|
10
|
+
'sync.',
|
|
11
|
+
'blob.',
|
|
12
|
+
'presence.',
|
|
13
|
+
'client.',
|
|
14
|
+
];
|
|
15
|
+
/**
|
|
16
|
+
* The rejection a host validator throws to reject a commit with a chosen
|
|
17
|
+
* code and message (§6.7). The code is checked at construction against the
|
|
18
|
+
* reserved prefixes (§10.2): a host code that collides with the protocol's
|
|
19
|
+
* families is a server bug and fails loud immediately.
|
|
20
|
+
*/
|
|
21
|
+
export class ValidationRejection extends Error {
|
|
22
|
+
name = 'ValidationRejection';
|
|
23
|
+
code;
|
|
24
|
+
constructor(code, message) {
|
|
25
|
+
super(message ?? code);
|
|
26
|
+
if (code.length === 0) {
|
|
27
|
+
throw new Error('ValidationRejection code must be non-empty (§6.7)');
|
|
28
|
+
}
|
|
29
|
+
for (const prefix of RESERVED_VALIDATION_CODE_PREFIXES) {
|
|
30
|
+
if (code.startsWith(prefix)) {
|
|
31
|
+
throw new Error(`ValidationRejection code ${JSON.stringify(code)} uses the reserved prefix ${JSON.stringify(prefix)} — host codes MUST NOT start with a protocol family (§6.7)`);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
this.code = code;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/** Build the column-keyed row object a validator inspects (§6.7). */
|
|
38
|
+
export function toValidateRow(columns, values) {
|
|
39
|
+
const row = {};
|
|
40
|
+
columns.forEach((column, index) => {
|
|
41
|
+
row[column.name] = values[index] ?? null;
|
|
42
|
+
});
|
|
43
|
+
return row;
|
|
44
|
+
}
|