@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
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Content-addressed blob store (SPEC.md §5.9.2).
|
|
3
|
+
*
|
|
4
|
+
* Blobs are the file-attachment bytes a row references through a `blob_ref`
|
|
5
|
+
* column (§2.4 tag 7). Unlike segments (§5.1 TTL cache entries), blobs are
|
|
6
|
+
* **durable**: a blob referenced by a live row must stay downloadable
|
|
7
|
+
* indefinitely (§5.9.5 B3). The store is keyed by `blobId`
|
|
8
|
+
* (`"sha256:" + hex`), shares the S3/R2 backend and presign machinery with
|
|
9
|
+
* segments, and exposes an orphan sweep (§5.9.2) rather than row-tied
|
|
10
|
+
* deletion.
|
|
11
|
+
*/
|
|
12
|
+
import { type SyncularServerEvents } from './events.js';
|
|
13
|
+
import type { ServerStorage } from './storage.js';
|
|
14
|
+
export interface BlobRecord {
|
|
15
|
+
readonly blobId: string;
|
|
16
|
+
readonly partition: string;
|
|
17
|
+
readonly byteLength: number;
|
|
18
|
+
/** Advisory MIME type persisted from the upload, if any (§5.9.5). */
|
|
19
|
+
readonly mediaType?: string;
|
|
20
|
+
readonly createdAtMs: number;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Coarse blob-store counters for the admin/console read surface (TODO
|
|
24
|
+
* §2.5), partition-scoped. Optional. `count`/`bytes` are total stored
|
|
25
|
+
* blobs; a store that omits `stats()` cannot report them.
|
|
26
|
+
*/
|
|
27
|
+
export interface BlobStoreStats {
|
|
28
|
+
readonly count: number;
|
|
29
|
+
readonly bytes: number;
|
|
30
|
+
/**
|
|
31
|
+
* ADDITIVE marker — present and `true` only on stores whose counters are
|
|
32
|
+
* approximate (a LIST-free S3/R2 accumulator). Absent on the exact
|
|
33
|
+
* in-process stores (memory/sqlite). The admin surface carries it through.
|
|
34
|
+
*/
|
|
35
|
+
readonly approximate?: boolean;
|
|
36
|
+
}
|
|
37
|
+
export interface BlobStore {
|
|
38
|
+
/**
|
|
39
|
+
* Store blob bytes under `blobId` (idempotent — same id ⇒ no-op success,
|
|
40
|
+
* §5.9.3). The caller has already verified the content address matches.
|
|
41
|
+
*/
|
|
42
|
+
put(partition: string, blobId: string, bytes: Uint8Array, nowMs: number, mediaType?: string): Promise<BlobRecord>;
|
|
43
|
+
/** Presence check for the push existence rule (§5.9.6) and download. */
|
|
44
|
+
has(partition: string, blobId: string): Promise<boolean>;
|
|
45
|
+
get(partition: string, blobId: string): Promise<{
|
|
46
|
+
record: BlobRecord;
|
|
47
|
+
bytes: Uint8Array;
|
|
48
|
+
} | undefined>;
|
|
49
|
+
/**
|
|
50
|
+
* §5.9.2 orphan sweep: delete blobs uploaded before `olderThanMs` that
|
|
51
|
+
* no live row references. The set of referenced blobIds is supplied by
|
|
52
|
+
* the storage reference index — the store never scans rows itself.
|
|
53
|
+
* Returns the deleted blobIds.
|
|
54
|
+
*/
|
|
55
|
+
sweepOrphans(partition: string, olderThanMs: number, referencedBlobIds: ReadonlySet<string>): Promise<string[]>;
|
|
56
|
+
/** Admin/console counters (TODO §2.5) — ADDITIVE, optional. */
|
|
57
|
+
stats?(partition: string): Promise<BlobStoreStats>;
|
|
58
|
+
}
|
|
59
|
+
/** `"sha256:" + hex` of the bytes — the content address (§5.9.1). */
|
|
60
|
+
export declare function blobIdFor(bytes: Uint8Array): Promise<string>;
|
|
61
|
+
export declare function isBlobId(value: string): boolean;
|
|
62
|
+
export declare class MemoryBlobStore implements BlobStore {
|
|
63
|
+
#private;
|
|
64
|
+
put(partition: string, blobId: string, bytes: Uint8Array, nowMs: number, mediaType?: string): Promise<BlobRecord>;
|
|
65
|
+
has(partition: string, blobId: string): Promise<boolean>;
|
|
66
|
+
get(partition: string, blobId: string): Promise<{
|
|
67
|
+
record: BlobRecord;
|
|
68
|
+
bytes: Uint8Array;
|
|
69
|
+
} | undefined>;
|
|
70
|
+
sweepOrphans(partition: string, olderThanMs: number, referencedBlobIds: ReadonlySet<string>): Promise<string[]>;
|
|
71
|
+
stats(partition: string): Promise<BlobStoreStats>;
|
|
72
|
+
}
|
|
73
|
+
export interface SweepOrphanBlobsOptions {
|
|
74
|
+
/**
|
|
75
|
+
* Grace period: a blob uploaded within the last `graceMs` is NEVER swept,
|
|
76
|
+
* even if unreferenced. This is the whole protection for the §5.9.2
|
|
77
|
+
* upload-before-reference race — a fresh upload is legitimately
|
|
78
|
+
* unreferenced until its push lands, so the grace MUST comfortably exceed
|
|
79
|
+
* any sane upload→push latency. Default 24 h (well above any push window).
|
|
80
|
+
*/
|
|
81
|
+
readonly graceMs?: number;
|
|
82
|
+
/** Sweep clock (epoch ms); defaults to `Date.now`. */
|
|
83
|
+
readonly nowMs?: number;
|
|
84
|
+
/** Optional structured-events sink (`blob.swept`). */
|
|
85
|
+
readonly events?: SyncularServerEvents;
|
|
86
|
+
}
|
|
87
|
+
export interface SweepOrphanBlobsResult {
|
|
88
|
+
readonly partition: string;
|
|
89
|
+
readonly swept: string[];
|
|
90
|
+
readonly referencedCount: number;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* §5.9.2 orphan sweep — the ready-made GC helper. Reads the live keep-set
|
|
94
|
+
* (`storage.listReferencedBlobIds`) and hands it, with the grace cutoff, to
|
|
95
|
+
* `blobStore.sweepOrphans`, which deletes only blobs BOTH unreferenced AND
|
|
96
|
+
* older than the grace period. Returns the swept ids and emits one
|
|
97
|
+
* `blob.swept` ops event.
|
|
98
|
+
*
|
|
99
|
+
* The upload-before-reference race, stated honestly: a client uploads bytes
|
|
100
|
+
* before pushing the row that references them (§5.9.2), so a just-uploaded
|
|
101
|
+
* blob is unreferenced until its push arrives. The grace period is the ONLY
|
|
102
|
+
* thing standing between that fresh blob and deletion — keep it far above any
|
|
103
|
+
* push latency (the 24 h default is deliberately generous). The store's
|
|
104
|
+
* `createdAtMs` (object metadata) is the upload time the cutoff compares
|
|
105
|
+
* against.
|
|
106
|
+
*
|
|
107
|
+
* Requires `storage.listReferencedBlobIds` (the §5.9.4 reference index). A
|
|
108
|
+
* storage backend without it cannot be swept safely — this throws rather
|
|
109
|
+
* than sweeping against an empty keep-set (which would delete everything).
|
|
110
|
+
*/
|
|
111
|
+
export declare function sweepOrphanBlobs(storage: ServerStorage, blobStore: BlobStore, partition: string, options?: SweepOrphanBlobsOptions): Promise<SweepOrphanBlobsResult>;
|
|
Binary file
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* §5.8 shipped compression posture for the direct segment endpoint:
|
|
3
|
+
* negotiate `Content-Encoding` from the request's `Accept-Encoding`
|
|
4
|
+
* (zstd preferred, gzip fallback, identity when the client offers
|
|
5
|
+
* neither), feature-detecting the runtime's codecs — zero dependencies.
|
|
6
|
+
*
|
|
7
|
+
* Segment bytes are stored and content-addressed UNCOMPRESSED (§5.1);
|
|
8
|
+
* this is a per-response serving concern only. It is never applied to
|
|
9
|
+
* stored objects or the signed-URL path (§5.8: presigned GETs serve the
|
|
10
|
+
* addressed bytes verbatim; edge compression is a deployment concern).
|
|
11
|
+
*
|
|
12
|
+
* Decision data (2026-07-03, 100k-row bench table, Bun 1.3): rows
|
|
13
|
+
* segments 6.2× in 8 ms (zstd) / 7.7× in 42 ms (gzip); sqlite images
|
|
14
|
+
* 3.4× in 14 ms (zstd) / 51 ms (gzip); client decompression ≤ 8 ms.
|
|
15
|
+
*/
|
|
16
|
+
export type SegmentContentEncoding = 'zstd' | 'gzip';
|
|
17
|
+
export interface EncodedSegmentBody {
|
|
18
|
+
readonly bytes: Uint8Array;
|
|
19
|
+
/** Absent ⇒ identity (no `Content-Encoding` header). */
|
|
20
|
+
readonly contentEncoding?: SegmentContentEncoding;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Compress a buffered segment body per §5.8. Returns the original bytes
|
|
24
|
+
* (identity) when the client offered no supported encoding, the body is
|
|
25
|
+
* tiny, or the runtime has no codec.
|
|
26
|
+
*/
|
|
27
|
+
export declare function encodeSegmentBody(bytes: Uint8Array, acceptEncoding: string | undefined): EncodedSegmentBody;
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* §5.8 shipped compression posture for the direct segment endpoint:
|
|
3
|
+
* negotiate `Content-Encoding` from the request's `Accept-Encoding`
|
|
4
|
+
* (zstd preferred, gzip fallback, identity when the client offers
|
|
5
|
+
* neither), feature-detecting the runtime's codecs — zero dependencies.
|
|
6
|
+
*
|
|
7
|
+
* Segment bytes are stored and content-addressed UNCOMPRESSED (§5.1);
|
|
8
|
+
* this is a per-response serving concern only. It is never applied to
|
|
9
|
+
* stored objects or the signed-URL path (§5.8: presigned GETs serve the
|
|
10
|
+
* addressed bytes verbatim; edge compression is a deployment concern).
|
|
11
|
+
*
|
|
12
|
+
* Decision data (2026-07-03, 100k-row bench table, Bun 1.3): rows
|
|
13
|
+
* segments 6.2× in 8 ms (zstd) / 7.7× in 42 ms (gzip); sqlite images
|
|
14
|
+
* 3.4× in 14 ms (zstd) / 51 ms (gzip); client decompression ≤ 8 ms.
|
|
15
|
+
*/
|
|
16
|
+
/** Preference order is zstd, gzip (§5.8). Non-Bun runtimes without these
|
|
17
|
+
* codecs serve identity — negotiation, never a hard requirement here. */
|
|
18
|
+
function detectCodecs() {
|
|
19
|
+
const bun = globalThis.Bun;
|
|
20
|
+
const codecs = [];
|
|
21
|
+
const zstd = bun?.zstdCompressSync;
|
|
22
|
+
if (typeof zstd === 'function') {
|
|
23
|
+
codecs.push({ encoding: 'zstd', compress: (bytes) => zstd(bytes) });
|
|
24
|
+
}
|
|
25
|
+
const gzip = bun?.gzipSync;
|
|
26
|
+
if (typeof gzip === 'function') {
|
|
27
|
+
codecs.push({ encoding: 'gzip', compress: (bytes) => gzip(bytes) });
|
|
28
|
+
}
|
|
29
|
+
return codecs;
|
|
30
|
+
}
|
|
31
|
+
const CODECS = detectCodecs();
|
|
32
|
+
/** Bodies below this size are served identity (headers outweigh gains). */
|
|
33
|
+
const MIN_COMPRESS_BYTES = 1024;
|
|
34
|
+
/** Does the `Accept-Encoding` header value accept `encoding` (q > 0)? */
|
|
35
|
+
function accepts(header, encoding) {
|
|
36
|
+
for (const entry of header.split(',')) {
|
|
37
|
+
const [rawName, ...params] = entry.trim().split(';');
|
|
38
|
+
const name = rawName?.trim().toLowerCase();
|
|
39
|
+
if (name !== encoding)
|
|
40
|
+
continue;
|
|
41
|
+
for (const param of params) {
|
|
42
|
+
const [key, value] = param.trim().split('=');
|
|
43
|
+
if (key?.trim().toLowerCase() === 'q' && Number(value) === 0) {
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return true;
|
|
48
|
+
}
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Compress a buffered segment body per §5.8. Returns the original bytes
|
|
53
|
+
* (identity) when the client offered no supported encoding, the body is
|
|
54
|
+
* tiny, or the runtime has no codec.
|
|
55
|
+
*/
|
|
56
|
+
export function encodeSegmentBody(bytes, acceptEncoding) {
|
|
57
|
+
if (acceptEncoding === undefined || bytes.length < MIN_COMPRESS_BYTES) {
|
|
58
|
+
return { bytes };
|
|
59
|
+
}
|
|
60
|
+
for (const codec of CODECS) {
|
|
61
|
+
if (accepts(acceptEncoding, codec.encoding)) {
|
|
62
|
+
return {
|
|
63
|
+
bytes: codec.compress(bytes),
|
|
64
|
+
contentEncoding: codec.encoding,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return { bytes };
|
|
69
|
+
}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The host context for `handleSyncRequest` (REVISE B2): storage, the
|
|
3
|
+
* `resolveScopes` host callback (runs in the host process — the moat),
|
|
4
|
+
* clock, and a segment store. Framework-free; adapters supply `partition`
|
|
5
|
+
* and `actorId` from host authentication (§1.1).
|
|
6
|
+
*/
|
|
7
|
+
import type { ScopeMap } from '@syncular/core';
|
|
8
|
+
import type { BlobStore } from './blob-store.js';
|
|
9
|
+
import type { CrdtMergerRegistry } from './crdt-merger.js';
|
|
10
|
+
import type { SyncularServerEvents } from './events.js';
|
|
11
|
+
import type { LeaseStore } from './lease-store.js';
|
|
12
|
+
import type { ServerSchema } from './schema.js';
|
|
13
|
+
import type { SegmentStore } from './segment-store.js';
|
|
14
|
+
import type { BlobPresignConfig, BlobUploadPresignConfig, SegmentUrlConfig } from './signed-url.js';
|
|
15
|
+
import type { SqliteImageBuilder } from './sqlite-image.js';
|
|
16
|
+
import type { ServerStorage, StoredCommit } from './storage.js';
|
|
17
|
+
import type { ValidatorRegistry } from './validate.js';
|
|
18
|
+
/** SSP2 body content type (§1.1). */
|
|
19
|
+
export declare const SSP2_CONTENT_TYPE = "application/vnd.syncular.sync.v2";
|
|
20
|
+
export interface ResolveScopesArgs {
|
|
21
|
+
readonly partition: string;
|
|
22
|
+
readonly actorId: string;
|
|
23
|
+
/**
|
|
24
|
+
* The requesting client (§1.5). Present on sync rounds (the lease key,
|
|
25
|
+
* §7.3.3); absent on segment/blob downloads, which re-authorize by
|
|
26
|
+
* actor + scopes only (§5.5, §5.9.5) and never consult a lease.
|
|
27
|
+
*/
|
|
28
|
+
readonly clientId?: string;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Sentinel a resolver returns to signal a **live-authorization outage**
|
|
32
|
+
* (§7.3.3): the live authority is unreachable, so the server SHOULD
|
|
33
|
+
* authorize this request against the actor's stored lease instead of
|
|
34
|
+
* throwing. Distinct from throwing (§3.2 rule 5, which still fails loud
|
|
35
|
+
* and revokes). Only meaningful when `leases` is configured; without a
|
|
36
|
+
* lease store an outage degrades to `sync.auth_lease_required`.
|
|
37
|
+
*/
|
|
38
|
+
export declare const RESOLVER_OUTAGE: unique symbol;
|
|
39
|
+
export type ResolverOutage = typeof RESOLVER_OUTAGE;
|
|
40
|
+
/**
|
|
41
|
+
* Host callback: actor → allowed scopes (§3.2 step 3). Resolved at most
|
|
42
|
+
* once per request and memoized (§3.4 step 1). `'*'` means "any value for
|
|
43
|
+
* this variable". A throwing resolver revokes subscriptions and rejects
|
|
44
|
+
* writes with `sync.forbidden` — fail loud, never leak. Returning
|
|
45
|
+
* `RESOLVER_OUTAGE` instead opts the request into lease authorization
|
|
46
|
+
* (§7.3.3) — a deliberate outage signal, not a failure.
|
|
47
|
+
*/
|
|
48
|
+
export type ResolveScopes = (args: ResolveScopesArgs) => ScopeMap | ResolverOutage | Promise<ScopeMap | ResolverOutage>;
|
|
49
|
+
/** §7.3: auth-lease feature config. Absent ⇒ leases off (zero cost). */
|
|
50
|
+
export interface LeaseConfig {
|
|
51
|
+
/** Lease TTL in ms — the sliding window width (§7.3.3). */
|
|
52
|
+
readonly ttlMs: number;
|
|
53
|
+
/** The lease store (§7.3.1); host-owned, optional like blobs. */
|
|
54
|
+
readonly store: LeaseStore;
|
|
55
|
+
}
|
|
56
|
+
export interface ServerLimits {
|
|
57
|
+
/** Operation cap per request (§6.1 `sync.too_many_operations`). */
|
|
58
|
+
readonly maxOperationsPerRequest: number;
|
|
59
|
+
/** Inline rows segments up to this size (§5.7 SHOULD: 256 KiB). */
|
|
60
|
+
readonly inlineSegmentMaxBytes: number;
|
|
61
|
+
}
|
|
62
|
+
export declare const DEFAULT_LIMITS: ServerLimits;
|
|
63
|
+
/** Receives applied commits for realtime fanout (§8.2). */
|
|
64
|
+
export interface RealtimeNotifier {
|
|
65
|
+
notifyCommit(partition: string, commit: StoredCommit): void | Promise<void>;
|
|
66
|
+
}
|
|
67
|
+
export interface SyncServerConfig {
|
|
68
|
+
readonly schema: ServerSchema;
|
|
69
|
+
readonly storage: ServerStorage;
|
|
70
|
+
readonly segments: SegmentStore;
|
|
71
|
+
/**
|
|
72
|
+
* Blob store (§5.9). Absent ⇒ blobs unsupported: a table with a
|
|
73
|
+
* `blob_ref` column may still sync (the ref is just a string), but the
|
|
74
|
+
* push existence check (§6.6) and the `/blobs` endpoints require it.
|
|
75
|
+
*/
|
|
76
|
+
readonly blobs?: BlobStore;
|
|
77
|
+
/** Max upload size for `/blobs` (§5.9.3 `blob.too_large`); default 64 MiB. */
|
|
78
|
+
readonly maxBlobBytes?: number;
|
|
79
|
+
/**
|
|
80
|
+
* CRDT merger registry (§5.10.2), `crdtType` → merge fn. Absent ⇒ no
|
|
81
|
+
* column can CRDT-merge: a push touching a `crdt` column then fails
|
|
82
|
+
* `sync.crdt_merge_failed` (§5.10.6). Kept out of core — the reference
|
|
83
|
+
* `yjs-doc` merger ships in `@syncular/crdt-yjs` (the blob-store rule).
|
|
84
|
+
*/
|
|
85
|
+
readonly crdtMergers?: CrdtMergerRegistry;
|
|
86
|
+
/**
|
|
87
|
+
* §6.7 per-table write-validation hooks (`table` → validator). Absent ⇒
|
|
88
|
+
* the feature is off: the push path pays only an `undefined` check and
|
|
89
|
+
* builds no validator context — zero cost. Present ⇒ each push operation
|
|
90
|
+
* on a listed table runs its validator after decode + §3.4 scope
|
|
91
|
+
* authorization, inside the commit transaction; a throw rejects the
|
|
92
|
+
* whole commit atomically (§6.4) with the host code (§6.3). Kept a host
|
|
93
|
+
* callback (like `resolveScopes`) — business rules live in the host
|
|
94
|
+
* process, never on the wire.
|
|
95
|
+
*/
|
|
96
|
+
readonly validators?: ValidatorRegistry;
|
|
97
|
+
readonly resolveScopes: ResolveScopes;
|
|
98
|
+
/**
|
|
99
|
+
* §7.3 auth leases. Absent ⇒ the feature is off: no `LEASE` frame is
|
|
100
|
+
* ever emitted and a `RESOLVER_OUTAGE` signal degrades to
|
|
101
|
+
* `sync.auth_lease_required`. Present ⇒ successful authorized rounds
|
|
102
|
+
* issue/refresh a lease and outages authorize against it.
|
|
103
|
+
*/
|
|
104
|
+
readonly leases?: LeaseConfig;
|
|
105
|
+
/** Epoch-ms clock; defaults to `Date.now`. */
|
|
106
|
+
readonly clock?: () => number;
|
|
107
|
+
readonly limits?: Partial<ServerLimits>;
|
|
108
|
+
/** §5.4 signed-URL delivery: native HMAC tokens or delegated presign. */
|
|
109
|
+
readonly signedUrls?: SegmentUrlConfig;
|
|
110
|
+
/**
|
|
111
|
+
* §5.9.5 signed-URL delivery for BLOB downloads (delegated presign,
|
|
112
|
+
* always-issue). When set, `handleBlobDownload` issues a provider-presigned
|
|
113
|
+
* GET URL AFTER the row-derived authorization check and returns
|
|
114
|
+
* `url`/`urlExpiresAtMs` on `BlobDownloadResult` WITHOUT loading the bytes
|
|
115
|
+
* (the sync server exits the download egress path). The reference client
|
|
116
|
+
* fetches the URL directly (§5.9.5 recovery rule: failure ⇒ re-request,
|
|
117
|
+
* never fall-through). Absent ⇒ blobs are served inline (the shipped
|
|
118
|
+
* default).
|
|
119
|
+
*/
|
|
120
|
+
readonly blobSignedUrls?: BlobPresignConfig;
|
|
121
|
+
/**
|
|
122
|
+
* §5.9.3 presigned-upload (direct-to-storage) delivery. When set,
|
|
123
|
+
* `handleBlobUploadGrant` issues a single provider-presigned PUT URL AFTER
|
|
124
|
+
* host authentication + the size-cap check, and the client PUTs bytes
|
|
125
|
+
* straight to the object store (the sync server exits the upload egress
|
|
126
|
+
* path). Absent ⇒ the `/upload-grant` route reports no grant and clients
|
|
127
|
+
* stream through the direct `PUT /blobs/{blobId}` endpoint (§5.9.3 —
|
|
128
|
+
* capability, not fallback). Never a multipart/chunk protocol (single PUT).
|
|
129
|
+
*/
|
|
130
|
+
readonly blobUploadUrls?: BlobUploadPresignConfig;
|
|
131
|
+
/**
|
|
132
|
+
* §5.3 sqlite-image builder (TODO §4.2), injected so the pull path never
|
|
133
|
+
* statically imports `bun:sqlite`. Absent ⇒ the sqlite-image lane is off
|
|
134
|
+
* (bit-2 clients are served the rows lane) — the Workers/edge posture. A
|
|
135
|
+
* Bun/Node host wires `buildSqliteImage` from `@syncular/server`.
|
|
136
|
+
*/
|
|
137
|
+
readonly sqliteImageBuilder?: SqliteImageBuilder;
|
|
138
|
+
readonly realtime?: RealtimeNotifier;
|
|
139
|
+
/**
|
|
140
|
+
* Optional structured-events sink (ops seam). Absent ⇒ zero cost: no
|
|
141
|
+
* event objects are built. A throwing sink never affects processing.
|
|
142
|
+
*/
|
|
143
|
+
readonly events?: SyncularServerEvents;
|
|
144
|
+
}
|
|
145
|
+
/** Per-request context: the config plus host-authenticated identity. */
|
|
146
|
+
export interface SyncRequestContext extends SyncServerConfig {
|
|
147
|
+
readonly partition: string;
|
|
148
|
+
readonly actorId: string;
|
|
149
|
+
}
|
|
150
|
+
export declare function clockOf(ctx: SyncServerConfig): () => number;
|
|
151
|
+
export declare function limitsOf(ctx: SyncServerConfig): ServerLimits;
|
package/dist/context.js
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/** SSP2 body content type (§1.1). */
|
|
2
|
+
export const SSP2_CONTENT_TYPE = 'application/vnd.syncular.sync.v2';
|
|
3
|
+
/**
|
|
4
|
+
* Sentinel a resolver returns to signal a **live-authorization outage**
|
|
5
|
+
* (§7.3.3): the live authority is unreachable, so the server SHOULD
|
|
6
|
+
* authorize this request against the actor's stored lease instead of
|
|
7
|
+
* throwing. Distinct from throwing (§3.2 rule 5, which still fails loud
|
|
8
|
+
* and revokes). Only meaningful when `leases` is configured; without a
|
|
9
|
+
* lease store an outage degrades to `sync.auth_lease_required`.
|
|
10
|
+
*/
|
|
11
|
+
export const RESOLVER_OUTAGE = Symbol.for('syncular.resolver_outage');
|
|
12
|
+
export const DEFAULT_LIMITS = {
|
|
13
|
+
maxOperationsPerRequest: 500,
|
|
14
|
+
inlineSegmentMaxBytes: 256 * 1024,
|
|
15
|
+
};
|
|
16
|
+
export function clockOf(ctx) {
|
|
17
|
+
return ctx.clock ?? Date.now;
|
|
18
|
+
}
|
|
19
|
+
export function limitsOf(ctx) {
|
|
20
|
+
return { ...DEFAULT_LIMITS, ...ctx.limits };
|
|
21
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CRDT column merge registry (SPEC.md §5.10.2) — the pluggability seam.
|
|
3
|
+
*
|
|
4
|
+
* The server core NEVER depends on a CRDT library. A `crdt` column (§2.4
|
|
5
|
+
* tag 8) is merged server-side on push (§5.10.3) by a host-supplied
|
|
6
|
+
* `CrdtMerger`, selected per column by its schema-IR `crdtType` (§5.10.1).
|
|
7
|
+
* The reference `yjs-doc` merger lives in `@syncular/crdt-yjs`, keeping
|
|
8
|
+
* Yjs out of core/server (the blob-store placement rule, §5.9.2, applied to
|
|
9
|
+
* CRDT).
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Merge a `crdt` column's stored value with an incoming push value,
|
|
13
|
+
* returning the new stored bytes (§5.10.2). `stored` is `null` when the row
|
|
14
|
+
* is new or the column was NULL. Implementations MUST be commutative,
|
|
15
|
+
* associative, and idempotent over the updates they consume — the CRDT
|
|
16
|
+
* contract that makes concurrent-order-independent convergence and
|
|
17
|
+
* idempotent replay hold (§5.10.3).
|
|
18
|
+
*
|
|
19
|
+
* A synchronous return is fine; async is allowed so a native/WASM merger can
|
|
20
|
+
* cross an FFI boundary.
|
|
21
|
+
*/
|
|
22
|
+
export type CrdtMerger = (stored: Uint8Array | null, incoming: Uint8Array) => Uint8Array | Promise<Uint8Array>;
|
|
23
|
+
/**
|
|
24
|
+
* `crdtType` (§5.10.1) → merger. Supplied through `SyncServerConfig`
|
|
25
|
+
* (§ context). Absent ⇒ no column can CRDT-merge: a push touching a `crdt`
|
|
26
|
+
* column then fails `sync.crdt_merge_failed` (§5.10.2, §5.10.6).
|
|
27
|
+
*/
|
|
28
|
+
export type CrdtMergerRegistry = Readonly<Record<string, CrdtMerger>>;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CRDT column merge registry (SPEC.md §5.10.2) — the pluggability seam.
|
|
3
|
+
*
|
|
4
|
+
* The server core NEVER depends on a CRDT library. A `crdt` column (§2.4
|
|
5
|
+
* tag 8) is merged server-side on push (§5.10.3) by a host-supplied
|
|
6
|
+
* `CrdtMerger`, selected per column by its schema-IR `crdtType` (§5.10.1).
|
|
7
|
+
* The reference `yjs-doc` merger lives in `@syncular/crdt-yjs`, keeping
|
|
8
|
+
* Yjs out of core/server (the blob-store placement rule, §5.9.2, applied to
|
|
9
|
+
* CRDT).
|
|
10
|
+
*/
|
|
11
|
+
export {};
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { CompiledSchema, CompiledTable } from './schema.js';
|
|
2
|
+
import type { ClientCursorInfo, ClientRecord, CommitMetadata, CommitMetadataQuery, CommitWindowQuery, RowScanQuery, ScopeActivityQuery, ScopeCommitActivity, ServerStorage, StorageTransaction, StoredCommit, StoredPushResult, StoredRow } from './storage.js';
|
|
3
|
+
export interface D1PreparedStatement {
|
|
4
|
+
bind(...values: unknown[]): D1PreparedStatement;
|
|
5
|
+
first<T = Record<string, unknown>>(): Promise<T | null>;
|
|
6
|
+
all<T = Record<string, unknown>>(): Promise<{
|
|
7
|
+
results: T[];
|
|
8
|
+
}>;
|
|
9
|
+
run(): Promise<unknown>;
|
|
10
|
+
}
|
|
11
|
+
export interface D1Database {
|
|
12
|
+
prepare(query: string): D1PreparedStatement;
|
|
13
|
+
batch(statements: D1PreparedStatement[]): Promise<unknown[]>;
|
|
14
|
+
exec(query: string): Promise<unknown>;
|
|
15
|
+
}
|
|
16
|
+
export declare class D1ServerStorage implements ServerStorage {
|
|
17
|
+
#private;
|
|
18
|
+
constructor(db: D1Database);
|
|
19
|
+
/** Apply the schema DDL (idempotent). Call once before use. */
|
|
20
|
+
migrate(): Promise<void>;
|
|
21
|
+
/** Resolve a table's compiled schema; row operations require `ensureSchema`. */
|
|
22
|
+
table(name: string): CompiledTable;
|
|
23
|
+
ensureSchema(schema: CompiledSchema): Promise<void>;
|
|
24
|
+
begin(partition: string): Promise<StorageTransaction>;
|
|
25
|
+
getMaxCommitSeq(partition: string): Promise<number>;
|
|
26
|
+
getHorizonSeq(partition: string): Promise<number>;
|
|
27
|
+
setHorizonSeq(partition: string, seq: number): Promise<void>;
|
|
28
|
+
pruneCommitsThrough(partition: string, seq: number): Promise<number>;
|
|
29
|
+
getCommitSeqBefore(partition: string, createdBeforeMs: number): Promise<number>;
|
|
30
|
+
getRow(partition: string, table: string, rowId: string): Promise<StoredRow | undefined>;
|
|
31
|
+
getPushResult(partition: string, clientId: string, clientCommitId: string): Promise<StoredPushResult | undefined>;
|
|
32
|
+
readCommitWindow(partition: string, query: CommitWindowQuery): Promise<StoredCommit[]>;
|
|
33
|
+
scanRows(partition: string, query: RowScanQuery): Promise<StoredRow[]>;
|
|
34
|
+
getClientRecord(partition: string, clientId: string): Promise<ClientRecord | undefined>;
|
|
35
|
+
putClientRecord(partition: string, record: ClientRecord): Promise<void>;
|
|
36
|
+
listClientCursors(partition: string): Promise<ClientCursorInfo[]>;
|
|
37
|
+
listRowsReferencingBlob(partition: string, blobId: string): Promise<{
|
|
38
|
+
readonly table: string;
|
|
39
|
+
readonly rowId: string;
|
|
40
|
+
readonly scopes: Record<string, string>;
|
|
41
|
+
}[]>;
|
|
42
|
+
listReferencedBlobIds(partition: string): Promise<string[]>;
|
|
43
|
+
listClientRecords(partition: string): Promise<ClientRecord[]>;
|
|
44
|
+
listCommitMetadata(partition: string, query: CommitMetadataQuery): Promise<CommitMetadata[]>;
|
|
45
|
+
scopeActivity(partition: string, query: ScopeActivityQuery): Promise<ScopeCommitActivity[]>;
|
|
46
|
+
getRowScopes(partition: string, table: string, rowId: string): Promise<{
|
|
47
|
+
serverVersion: number;
|
|
48
|
+
scopes: Record<string, string>;
|
|
49
|
+
} | undefined>;
|
|
50
|
+
}
|
|
Binary file
|
package/dist/errors.d.ts
CHANGED
|
@@ -1,10 +1,36 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Server-side protocol errors (SPEC.md §10).
|
|
3
|
+
*
|
|
4
|
+
* Every request-level failure raised by the server core is a `SyncError`
|
|
5
|
+
* carrying the fixed catalog metadata of §10.2 (`category`, `retryable`,
|
|
6
|
+
* `recommendedAction`) plus an HTTP status for transport adapters. The
|
|
7
|
+
* catalog is closed: creating a `SyncError` with an unknown code throws.
|
|
8
|
+
*/
|
|
9
|
+
export interface ErrorCatalogEntry {
|
|
10
|
+
readonly category: string;
|
|
11
|
+
readonly retryable: boolean;
|
|
12
|
+
readonly recommendedAction: string;
|
|
13
|
+
readonly httpStatus: number;
|
|
9
14
|
}
|
|
10
|
-
|
|
15
|
+
/** The §10.2 wire catalog (21 sync.* + 4 blob.* codes), keyed by stable code. */
|
|
16
|
+
export declare const ERROR_CATALOG: Readonly<Record<string, ErrorCatalogEntry>>;
|
|
17
|
+
export declare class SyncError extends Error {
|
|
18
|
+
readonly name = "SyncError";
|
|
19
|
+
readonly code: string;
|
|
20
|
+
readonly category: string;
|
|
21
|
+
readonly retryable: boolean;
|
|
22
|
+
readonly recommendedAction: string;
|
|
23
|
+
readonly httpStatus: number;
|
|
24
|
+
readonly details?: string;
|
|
25
|
+
constructor(code: string, message?: string, details?: string);
|
|
26
|
+
}
|
|
27
|
+
export declare function syncError(code: string, message?: string, details?: string): SyncError;
|
|
28
|
+
/** The §10.1 JSON error shape, for HTTP-level error bodies (§1.1). */
|
|
29
|
+
export declare function errorBody(error: SyncError): {
|
|
30
|
+
code: string;
|
|
31
|
+
category: string;
|
|
32
|
+
retryable: boolean;
|
|
33
|
+
recommendedAction: string;
|
|
34
|
+
message: string;
|
|
35
|
+
details?: unknown;
|
|
36
|
+
};
|