@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
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Database blob storage adapter.
|
|
3
|
-
*
|
|
4
|
-
* Stores blobs directly in the database. Useful for development and small deployments.
|
|
5
|
-
* Since there's no external service, this adapter generates signed tokens that allow
|
|
6
|
-
* uploads/downloads through the server's blob routes.
|
|
7
|
-
*/
|
|
8
|
-
import type { BlobStorageAdapter } from '@syncular/core';
|
|
9
|
-
import { type Kysely } from 'kysely';
|
|
10
|
-
import type { SyncBlobsDb } from '../types';
|
|
11
|
-
/**
|
|
12
|
-
* Token signer interface for creating/verifying upload/download tokens.
|
|
13
|
-
*/
|
|
14
|
-
export interface BlobTokenSigner {
|
|
15
|
-
/**
|
|
16
|
-
* Token payload for upload/download authorization.
|
|
17
|
-
* Upload tokens are bound to hash + expected byte size.
|
|
18
|
-
*/
|
|
19
|
-
sign(payload: {
|
|
20
|
-
hash: string;
|
|
21
|
-
partitionId: string;
|
|
22
|
-
action: 'upload';
|
|
23
|
-
size: number;
|
|
24
|
-
expiresAt: number;
|
|
25
|
-
} | {
|
|
26
|
-
hash: string;
|
|
27
|
-
partitionId: string;
|
|
28
|
-
action: 'download';
|
|
29
|
-
expiresAt: number;
|
|
30
|
-
}, expiresIn: number): Promise<string>;
|
|
31
|
-
/**
|
|
32
|
-
* Sign a token for blob upload/download authorization.
|
|
33
|
-
* @param payload The data to sign
|
|
34
|
-
* @param expiresIn Expiration time in seconds
|
|
35
|
-
* @returns A signed token string
|
|
36
|
-
*/
|
|
37
|
-
verify(token: string): Promise<{
|
|
38
|
-
hash: string;
|
|
39
|
-
partitionId: string;
|
|
40
|
-
action: 'upload';
|
|
41
|
-
size: number;
|
|
42
|
-
expiresAt: number;
|
|
43
|
-
} | {
|
|
44
|
-
hash: string;
|
|
45
|
-
partitionId: string;
|
|
46
|
-
action: 'download';
|
|
47
|
-
expiresAt: number;
|
|
48
|
-
} | null>;
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* Create a simple HMAC-based token signer.
|
|
52
|
-
*/
|
|
53
|
-
export declare function createHmacTokenSigner(secret: string): BlobTokenSigner;
|
|
54
|
-
export interface DatabaseBlobStorageAdapterOptions<DB extends SyncBlobsDb = SyncBlobsDb> {
|
|
55
|
-
/** Kysely database instance */
|
|
56
|
-
db: Kysely<DB>;
|
|
57
|
-
/** Base URL for the blob routes (e.g., "https://api.example.com/api/sync") */
|
|
58
|
-
baseUrl: string;
|
|
59
|
-
/** Token signer for authorization */
|
|
60
|
-
tokenSigner: BlobTokenSigner;
|
|
61
|
-
}
|
|
62
|
-
/**
|
|
63
|
-
* Create a database blob storage adapter.
|
|
64
|
-
*
|
|
65
|
-
* This adapter stores blobs directly in the database and generates signed URLs
|
|
66
|
-
* that point back to the server for upload/download.
|
|
67
|
-
*
|
|
68
|
-
* @example
|
|
69
|
-
* ```typescript
|
|
70
|
-
* const adapter = createDatabaseBlobStorageAdapter({
|
|
71
|
-
* db: kysely,
|
|
72
|
-
* baseUrl: 'https://api.example.com/api/sync',
|
|
73
|
-
* tokenSigner: createHmacTokenSigner(process.env.BLOB_SECRET),
|
|
74
|
-
* });
|
|
75
|
-
* ```
|
|
76
|
-
*/
|
|
77
|
-
export declare function createDatabaseBlobStorageAdapter<DB extends SyncBlobsDb>(options: DatabaseBlobStorageAdapterOptions<DB>): BlobStorageAdapter;
|
|
78
|
-
/**
|
|
79
|
-
* Store a blob in the database.
|
|
80
|
-
* Called by the server routes when handling direct uploads.
|
|
81
|
-
*/
|
|
82
|
-
export declare function storeBlobInDatabase<DB extends SyncBlobsDb>(db: Kysely<DB>, args: {
|
|
83
|
-
partitionId: string;
|
|
84
|
-
hash: string;
|
|
85
|
-
size: number;
|
|
86
|
-
mimeType: string;
|
|
87
|
-
body: Uint8Array;
|
|
88
|
-
}): Promise<void>;
|
|
89
|
-
/**
|
|
90
|
-
* Read a blob from the database.
|
|
91
|
-
* Called by the server routes when handling direct downloads.
|
|
92
|
-
*/
|
|
93
|
-
export declare function readBlobFromDatabase<DB extends SyncBlobsDb>(db: Kysely<DB>, hash: string, options?: {
|
|
94
|
-
partitionId?: string;
|
|
95
|
-
}): Promise<{
|
|
96
|
-
body: Uint8Array;
|
|
97
|
-
mimeType: string;
|
|
98
|
-
size: number;
|
|
99
|
-
} | null>;
|
|
100
|
-
//# sourceMappingURL=database.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../../src/blobs/adapters/database.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAIV,kBAAkB,EACnB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,KAAK,MAAM,EAAO,MAAM,QAAQ,CAAC;AAC1C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE5C;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,IAAI,CACF,OAAO,EACH;QACE,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,MAAM,EAAE,QAAQ,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;KACnB,GACD;QACE,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,MAAM,EAAE,UAAU,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;KACnB,EACL,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,CAAC,CAAC;IAEnB;;;;;OAKG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAC1B;QACE,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,MAAM,EAAE,QAAQ,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;KACnB,GACD;QACE,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,MAAM,EAAE,UAAU,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;KACnB,GACD,IAAI,CACP,CAAC;CACH;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe,CAoFrE;AAoBD,MAAM,WAAW,iCAAiC,CAChD,EAAE,SAAS,WAAW,GAAG,WAAW;IAEpC,+BAA+B;IAC/B,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;IACf,8EAA8E;IAC9E,OAAO,EAAE,MAAM,CAAC;IAChB,qCAAqC;IACrC,WAAW,EAAE,eAAe,CAAC;CAC9B;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,gCAAgC,CAAC,EAAE,SAAS,WAAW,EACrE,OAAO,EAAE,iCAAiC,CAAC,EAAE,CAAC,GAC7C,kBAAkB,CA+HpB;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,EAAE,SAAS,WAAW,EAC9D,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,EACd,IAAI,EAAE;IACJ,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,UAAU,CAAC;CAClB,GACA,OAAO,CAAC,IAAI,CAAC,CAoBf;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,EAAE,SAAS,WAAW,EAC/D,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,EACd,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GACjC,OAAO,CAAC;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CAqBtE"}
|
|
@@ -1,247 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Database blob storage adapter.
|
|
3
|
-
*
|
|
4
|
-
* Stores blobs directly in the database. Useful for development and small deployments.
|
|
5
|
-
* Since there's no external service, this adapter generates signed tokens that allow
|
|
6
|
-
* uploads/downloads through the server's blob routes.
|
|
7
|
-
*/
|
|
8
|
-
import { resolveUrlFromBase } from '@syncular/core';
|
|
9
|
-
import { sql } from 'kysely';
|
|
10
|
-
/**
|
|
11
|
-
* Create a simple HMAC-based token signer.
|
|
12
|
-
*/
|
|
13
|
-
export function createHmacTokenSigner(secret) {
|
|
14
|
-
const encoder = new TextEncoder();
|
|
15
|
-
const keyPromise = crypto.subtle.importKey('raw', encoder.encode(secret), { name: 'HMAC', hash: 'SHA-256' }, false, ['sign', 'verify']);
|
|
16
|
-
async function hmacSign(data) {
|
|
17
|
-
const key = await keyPromise;
|
|
18
|
-
const signature = await crypto.subtle.sign('HMAC', key, encoder.encode(data));
|
|
19
|
-
return bufferToHex(new Uint8Array(signature));
|
|
20
|
-
}
|
|
21
|
-
async function hmacVerify(data, signatureHex) {
|
|
22
|
-
const parsedSignature = hexToBuffer(signatureHex);
|
|
23
|
-
if (!parsedSignature)
|
|
24
|
-
return false;
|
|
25
|
-
const signature = new Uint8Array(parsedSignature.length);
|
|
26
|
-
signature.set(parsedSignature);
|
|
27
|
-
const key = await keyPromise;
|
|
28
|
-
return crypto.subtle.verify('HMAC', key, signature, encoder.encode(data));
|
|
29
|
-
}
|
|
30
|
-
return {
|
|
31
|
-
async sign(payload, _expiresIn) {
|
|
32
|
-
const data = JSON.stringify(payload);
|
|
33
|
-
const dataB64 = btoa(data);
|
|
34
|
-
const sig = await hmacSign(dataB64);
|
|
35
|
-
return `${dataB64}.${sig}`;
|
|
36
|
-
},
|
|
37
|
-
async verify(token) {
|
|
38
|
-
const [dataB64, sig] = token.split('.');
|
|
39
|
-
if (!dataB64 || !sig)
|
|
40
|
-
return null;
|
|
41
|
-
const isValidSig = await hmacVerify(dataB64, sig);
|
|
42
|
-
if (!isValidSig)
|
|
43
|
-
return null;
|
|
44
|
-
try {
|
|
45
|
-
const parsed = JSON.parse(atob(dataB64));
|
|
46
|
-
if (typeof parsed.hash !== 'string')
|
|
47
|
-
return null;
|
|
48
|
-
if (typeof parsed.partitionId !== 'string')
|
|
49
|
-
return null;
|
|
50
|
-
if (typeof parsed.expiresAt !== 'number')
|
|
51
|
-
return null;
|
|
52
|
-
if (Date.now() > parsed.expiresAt)
|
|
53
|
-
return null;
|
|
54
|
-
if (parsed.action === 'download') {
|
|
55
|
-
return {
|
|
56
|
-
hash: parsed.hash,
|
|
57
|
-
partitionId: parsed.partitionId,
|
|
58
|
-
action: 'download',
|
|
59
|
-
expiresAt: parsed.expiresAt,
|
|
60
|
-
};
|
|
61
|
-
}
|
|
62
|
-
if (parsed.action === 'upload' &&
|
|
63
|
-
typeof parsed.size === 'number' &&
|
|
64
|
-
Number.isFinite(parsed.size) &&
|
|
65
|
-
parsed.size >= 0) {
|
|
66
|
-
return {
|
|
67
|
-
hash: parsed.hash,
|
|
68
|
-
partitionId: parsed.partitionId,
|
|
69
|
-
action: 'upload',
|
|
70
|
-
size: parsed.size,
|
|
71
|
-
expiresAt: parsed.expiresAt,
|
|
72
|
-
};
|
|
73
|
-
}
|
|
74
|
-
return null;
|
|
75
|
-
}
|
|
76
|
-
catch {
|
|
77
|
-
return null;
|
|
78
|
-
}
|
|
79
|
-
},
|
|
80
|
-
};
|
|
81
|
-
}
|
|
82
|
-
function bufferToHex(buffer) {
|
|
83
|
-
return Array.from(buffer)
|
|
84
|
-
.map((b) => b.toString(16).padStart(2, '0'))
|
|
85
|
-
.join('');
|
|
86
|
-
}
|
|
87
|
-
function hexToBuffer(hex) {
|
|
88
|
-
if (hex.length === 0 || hex.length % 2 !== 0)
|
|
89
|
-
return null;
|
|
90
|
-
if (!/^[0-9a-f]+$/i.test(hex))
|
|
91
|
-
return null;
|
|
92
|
-
const out = new Uint8Array(hex.length / 2);
|
|
93
|
-
for (let i = 0; i < hex.length; i += 2) {
|
|
94
|
-
const pair = hex.slice(i, i + 2);
|
|
95
|
-
out[i / 2] = Number.parseInt(pair, 16);
|
|
96
|
-
}
|
|
97
|
-
return out;
|
|
98
|
-
}
|
|
99
|
-
/**
|
|
100
|
-
* Create a database blob storage adapter.
|
|
101
|
-
*
|
|
102
|
-
* This adapter stores blobs directly in the database and generates signed URLs
|
|
103
|
-
* that point back to the server for upload/download.
|
|
104
|
-
*
|
|
105
|
-
* @example
|
|
106
|
-
* ```typescript
|
|
107
|
-
* const adapter = createDatabaseBlobStorageAdapter({
|
|
108
|
-
* db: kysely,
|
|
109
|
-
* baseUrl: 'https://api.example.com/api/sync',
|
|
110
|
-
* tokenSigner: createHmacTokenSigner(process.env.BLOB_SECRET),
|
|
111
|
-
* });
|
|
112
|
-
* ```
|
|
113
|
-
*/
|
|
114
|
-
export function createDatabaseBlobStorageAdapter(options) {
|
|
115
|
-
const { db, baseUrl, tokenSigner } = options;
|
|
116
|
-
const resolvePartitionId = (partitionId) => partitionId ?? 'default';
|
|
117
|
-
const normalizeBlobSizeValue = (value) => typeof value === 'number' ? value : Number(value);
|
|
118
|
-
return {
|
|
119
|
-
name: 'database',
|
|
120
|
-
async signUpload(opts) {
|
|
121
|
-
const partitionId = resolvePartitionId(opts.partitionId);
|
|
122
|
-
const expiresAt = Date.now() + opts.expiresIn * 1000;
|
|
123
|
-
const token = await tokenSigner.sign({
|
|
124
|
-
hash: opts.hash,
|
|
125
|
-
partitionId,
|
|
126
|
-
action: 'upload',
|
|
127
|
-
size: opts.size,
|
|
128
|
-
expiresAt,
|
|
129
|
-
}, opts.expiresIn);
|
|
130
|
-
// URL points to server's blob upload endpoint
|
|
131
|
-
const uploadPath = `/blobs/${encodeURIComponent(opts.hash)}/upload?token=${encodeURIComponent(token)}`;
|
|
132
|
-
const url = resolveUrlFromBase(baseUrl, uploadPath);
|
|
133
|
-
return {
|
|
134
|
-
url,
|
|
135
|
-
method: 'PUT',
|
|
136
|
-
headers: {
|
|
137
|
-
'Content-Type': opts.mimeType,
|
|
138
|
-
'Content-Length': String(opts.size),
|
|
139
|
-
},
|
|
140
|
-
};
|
|
141
|
-
},
|
|
142
|
-
async signDownload(opts) {
|
|
143
|
-
const partitionId = resolvePartitionId(opts.partitionId);
|
|
144
|
-
const expiresAt = Date.now() + opts.expiresIn * 1000;
|
|
145
|
-
const token = await tokenSigner.sign({ hash: opts.hash, partitionId, action: 'download', expiresAt }, opts.expiresIn);
|
|
146
|
-
return resolveUrlFromBase(baseUrl, `/blobs/${encodeURIComponent(opts.hash)}/download?token=${encodeURIComponent(token)}`);
|
|
147
|
-
},
|
|
148
|
-
async exists(hash, options) {
|
|
149
|
-
const partitionId = resolvePartitionId(options?.partitionId);
|
|
150
|
-
const rowResult = await sql `
|
|
151
|
-
select hash
|
|
152
|
-
from ${sql.table('sync_blobs')}
|
|
153
|
-
where partition_id = ${partitionId} and hash = ${hash}
|
|
154
|
-
limit 1
|
|
155
|
-
`.execute(db);
|
|
156
|
-
return rowResult.rows.length > 0;
|
|
157
|
-
},
|
|
158
|
-
async delete(hash, options) {
|
|
159
|
-
const partitionId = resolvePartitionId(options?.partitionId);
|
|
160
|
-
await sql `
|
|
161
|
-
delete from ${sql.table('sync_blobs')}
|
|
162
|
-
where partition_id = ${partitionId} and hash = ${hash}
|
|
163
|
-
`.execute(db);
|
|
164
|
-
},
|
|
165
|
-
async getMetadata(hash, options) {
|
|
166
|
-
const partitionId = resolvePartitionId(options?.partitionId);
|
|
167
|
-
const rowResult = await sql `
|
|
168
|
-
select size, mime_type
|
|
169
|
-
from ${sql.table('sync_blobs')}
|
|
170
|
-
where partition_id = ${partitionId} and hash = ${hash}
|
|
171
|
-
limit 1
|
|
172
|
-
`.execute(db);
|
|
173
|
-
const row = rowResult.rows[0];
|
|
174
|
-
if (!row)
|
|
175
|
-
return null;
|
|
176
|
-
return {
|
|
177
|
-
size: normalizeBlobSizeValue(row.size),
|
|
178
|
-
mimeType: row.mime_type,
|
|
179
|
-
};
|
|
180
|
-
},
|
|
181
|
-
async put(hash, data, metadata, options) {
|
|
182
|
-
const partitionId = resolvePartitionId(options?.partitionId);
|
|
183
|
-
const mimeType = typeof metadata?.mimeType === 'string'
|
|
184
|
-
? metadata.mimeType
|
|
185
|
-
: 'application/octet-stream';
|
|
186
|
-
await storeBlobInDatabase(db, {
|
|
187
|
-
partitionId,
|
|
188
|
-
hash,
|
|
189
|
-
size: data.length,
|
|
190
|
-
mimeType,
|
|
191
|
-
body: data,
|
|
192
|
-
});
|
|
193
|
-
},
|
|
194
|
-
async get(hash, options) {
|
|
195
|
-
const partitionId = resolvePartitionId(options?.partitionId);
|
|
196
|
-
const result = await readBlobFromDatabase(db, hash, { partitionId });
|
|
197
|
-
return result?.body ?? null;
|
|
198
|
-
},
|
|
199
|
-
};
|
|
200
|
-
}
|
|
201
|
-
/**
|
|
202
|
-
* Store a blob in the database.
|
|
203
|
-
* Called by the server routes when handling direct uploads.
|
|
204
|
-
*/
|
|
205
|
-
export async function storeBlobInDatabase(db, args) {
|
|
206
|
-
await sql `
|
|
207
|
-
insert into ${sql.table('sync_blobs')} (
|
|
208
|
-
partition_id,
|
|
209
|
-
hash,
|
|
210
|
-
size,
|
|
211
|
-
mime_type,
|
|
212
|
-
body,
|
|
213
|
-
created_at
|
|
214
|
-
)
|
|
215
|
-
values (
|
|
216
|
-
${args.partitionId},
|
|
217
|
-
${args.hash},
|
|
218
|
-
${args.size},
|
|
219
|
-
${args.mimeType},
|
|
220
|
-
${args.body},
|
|
221
|
-
${new Date().toISOString()}
|
|
222
|
-
)
|
|
223
|
-
on conflict (partition_id, hash) do nothing
|
|
224
|
-
`.execute(db);
|
|
225
|
-
}
|
|
226
|
-
/**
|
|
227
|
-
* Read a blob from the database.
|
|
228
|
-
* Called by the server routes when handling direct downloads.
|
|
229
|
-
*/
|
|
230
|
-
export async function readBlobFromDatabase(db, hash, options) {
|
|
231
|
-
const partitionId = options?.partitionId ?? 'default';
|
|
232
|
-
const rowResult = await sql `
|
|
233
|
-
select body, mime_type, size
|
|
234
|
-
from ${sql.table('sync_blobs')}
|
|
235
|
-
where partition_id = ${partitionId} and hash = ${hash}
|
|
236
|
-
limit 1
|
|
237
|
-
`.execute(db);
|
|
238
|
-
const row = rowResult.rows[0];
|
|
239
|
-
if (!row)
|
|
240
|
-
return null;
|
|
241
|
-
return {
|
|
242
|
-
body: row.body,
|
|
243
|
-
mimeType: row.mime_type,
|
|
244
|
-
size: typeof row.size === 'number' ? row.size : Number(row.size),
|
|
245
|
-
};
|
|
246
|
-
}
|
|
247
|
-
//# sourceMappingURL=database.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"database.js","sourceRoot":"","sources":["../../../src/blobs/adapters/database.ts"],"names":[],"mappings":"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"}
|
package/dist/blobs/index.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/blobs/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,UAAU,CAAC;AACzB,cAAc,qBAAqB,CAAC;AACpC,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC"}
|
package/dist/blobs/index.js
DELETED
package/dist/blobs/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/blobs/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,UAAU,CAAC;AACzB,cAAc,qBAAqB,CAAC;AACpC,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC"}
|
package/dist/blobs/manager.d.ts
DELETED
|
@@ -1,220 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Server-side blob manager.
|
|
3
|
-
*
|
|
4
|
-
* Orchestrates blob uploads and downloads using a pluggable storage adapter.
|
|
5
|
-
* Handles metadata tracking, upload verification, and garbage collection.
|
|
6
|
-
*/
|
|
7
|
-
import type { BlobMetadata, BlobStorageAdapter, BlobUploadCompleteResponse, BlobUploadInitResponse } from '@syncular/core';
|
|
8
|
-
import { type Kysely } from 'kysely';
|
|
9
|
-
import type { SyncBlobUploadsDb } from './types';
|
|
10
|
-
export interface BlobManagerOptions<DB extends SyncBlobUploadsDb = SyncBlobUploadsDb> {
|
|
11
|
-
/** Database instance for tracking uploads */
|
|
12
|
-
db: Kysely<DB>;
|
|
13
|
-
/** Storage adapter (S3, R2, database, etc.) */
|
|
14
|
-
adapter: BlobStorageAdapter;
|
|
15
|
-
/** Default presigned URL expiration in seconds. Default: 3600 (1 hour) */
|
|
16
|
-
defaultExpiresIn?: number;
|
|
17
|
-
/** How long incomplete uploads are kept before cleanup. Default: 86400 (24 hours) */
|
|
18
|
-
uploadTtlSeconds?: number;
|
|
19
|
-
/** Optional cleanup throughput tuning knobs. */
|
|
20
|
-
cleanupTuning?: BlobCleanupTuning;
|
|
21
|
-
}
|
|
22
|
-
export interface BlobCleanupTuning {
|
|
23
|
-
/** Cleanup select/delete batch size. Default: 250 */
|
|
24
|
-
batchSize?: number;
|
|
25
|
-
/** Max concurrent storage deletes during cleanup. Default: 8 */
|
|
26
|
-
storageDeleteConcurrency?: number;
|
|
27
|
-
/** Max concurrent reference checks for completed uploads. Default: 16 */
|
|
28
|
-
referenceCheckConcurrency?: number;
|
|
29
|
-
}
|
|
30
|
-
export declare const BLOB_CLEANUP_TUNING_PRESETS: {
|
|
31
|
-
readonly server: {
|
|
32
|
-
readonly batchSize: 500;
|
|
33
|
-
readonly storageDeleteConcurrency: 16;
|
|
34
|
-
readonly referenceCheckConcurrency: 24;
|
|
35
|
-
};
|
|
36
|
-
readonly edge: {
|
|
37
|
-
readonly batchSize: 100;
|
|
38
|
-
readonly storageDeleteConcurrency: 4;
|
|
39
|
-
readonly referenceCheckConcurrency: 8;
|
|
40
|
-
};
|
|
41
|
-
};
|
|
42
|
-
export interface InitiateUploadOptions {
|
|
43
|
-
hash: string;
|
|
44
|
-
size: number;
|
|
45
|
-
mimeType: string;
|
|
46
|
-
actorId: string;
|
|
47
|
-
partitionId?: string;
|
|
48
|
-
}
|
|
49
|
-
export interface GetDownloadUrlOptions {
|
|
50
|
-
hash: string;
|
|
51
|
-
/** Optional: verify actor has access to this blob via a scope check */
|
|
52
|
-
actorId?: string;
|
|
53
|
-
partitionId?: string;
|
|
54
|
-
}
|
|
55
|
-
export interface CompleteUploadOptions {
|
|
56
|
-
/**
|
|
57
|
-
* Optional actor identity to authorize upload completion.
|
|
58
|
-
* When provided, only the initiating actor may mark an upload complete.
|
|
59
|
-
*/
|
|
60
|
-
actorId?: string;
|
|
61
|
-
partitionId?: string;
|
|
62
|
-
}
|
|
63
|
-
export interface BlobUploadRecord {
|
|
64
|
-
partitionId: string;
|
|
65
|
-
hash: string;
|
|
66
|
-
size: number;
|
|
67
|
-
mimeType: string;
|
|
68
|
-
status: 'pending' | 'complete';
|
|
69
|
-
actorId: string;
|
|
70
|
-
createdAt: string;
|
|
71
|
-
expiresAt: string;
|
|
72
|
-
completedAt: string | null;
|
|
73
|
-
}
|
|
74
|
-
/**
|
|
75
|
-
* Create a blob manager for handling server-side blob operations.
|
|
76
|
-
*/
|
|
77
|
-
export declare function createBlobManager<DB extends SyncBlobUploadsDb>(options: BlobManagerOptions<DB>): {
|
|
78
|
-
/**
|
|
79
|
-
* Initiate a blob upload.
|
|
80
|
-
*
|
|
81
|
-
* Checks for deduplication and returns a presigned URL for uploading.
|
|
82
|
-
*/
|
|
83
|
-
initiateUpload(opts: InitiateUploadOptions): Promise<BlobUploadInitResponse>;
|
|
84
|
-
/**
|
|
85
|
-
* Complete a blob upload.
|
|
86
|
-
*
|
|
87
|
-
* Verifies the blob exists in storage and marks the upload as complete.
|
|
88
|
-
*/
|
|
89
|
-
completeUpload(hash: string, options?: CompleteUploadOptions): Promise<BlobUploadCompleteResponse>;
|
|
90
|
-
/**
|
|
91
|
-
* Get a presigned download URL for a blob.
|
|
92
|
-
*/
|
|
93
|
-
getDownloadUrl(opts: GetDownloadUrlOptions): Promise<{
|
|
94
|
-
url: string;
|
|
95
|
-
expiresAt: string;
|
|
96
|
-
metadata: BlobMetadata;
|
|
97
|
-
}>;
|
|
98
|
-
/**
|
|
99
|
-
* Get upload record for a blob hash, including pending uploads.
|
|
100
|
-
*/
|
|
101
|
-
getUploadRecord(hash: string, options?: {
|
|
102
|
-
partitionId?: string;
|
|
103
|
-
}): Promise<BlobUploadRecord | null>;
|
|
104
|
-
/**
|
|
105
|
-
* Get blob metadata without generating a download URL.
|
|
106
|
-
*/
|
|
107
|
-
getMetadata(hash: string, options?: {
|
|
108
|
-
partitionId?: string;
|
|
109
|
-
}): Promise<BlobMetadata | null>;
|
|
110
|
-
/**
|
|
111
|
-
* Check if a blob exists and is complete.
|
|
112
|
-
*/
|
|
113
|
-
exists(hash: string, options?: {
|
|
114
|
-
partitionId?: string;
|
|
115
|
-
}): Promise<boolean>;
|
|
116
|
-
/**
|
|
117
|
-
* Clean up expired/orphaned uploads.
|
|
118
|
-
*
|
|
119
|
-
* Deletes upload records (and optionally storage) for:
|
|
120
|
-
* - Pending uploads that have expired
|
|
121
|
-
* - Completed uploads with no references (if refCheck provided)
|
|
122
|
-
*/
|
|
123
|
-
cleanup(options?: {
|
|
124
|
-
/** Check if a blob hash is referenced by any row */
|
|
125
|
-
isReferenced?: (hash: string) => Promise<boolean>;
|
|
126
|
-
/** Delete from storage too (not just tracking table) */
|
|
127
|
-
deleteFromStorage?: boolean;
|
|
128
|
-
/** Optional partition filter for cleanup */
|
|
129
|
-
partitionId?: string;
|
|
130
|
-
}): Promise<{
|
|
131
|
-
deleted: number;
|
|
132
|
-
}>;
|
|
133
|
-
/** The underlying storage adapter */
|
|
134
|
-
adapter: BlobStorageAdapter;
|
|
135
|
-
};
|
|
136
|
-
export type BlobManager = ReturnType<typeof createBlobManager>;
|
|
137
|
-
export interface BlobCleanupSchedulerOptions {
|
|
138
|
-
/** Blob manager instance */
|
|
139
|
-
blobManager: BlobManager;
|
|
140
|
-
/** Interval between cleanup runs in milliseconds. Default: 3600000 (1 hour) */
|
|
141
|
-
intervalMs?: number;
|
|
142
|
-
/** Delete from storage too (not just tracking table). Default: true */
|
|
143
|
-
deleteFromStorage?: boolean;
|
|
144
|
-
/** Optional: Check if a blob hash is referenced by any row */
|
|
145
|
-
isReferenced?: (hash: string) => Promise<boolean>;
|
|
146
|
-
/** Optional partition to scope cleanup. Defaults to "default". */
|
|
147
|
-
partitionId?: string;
|
|
148
|
-
/** Optional: Called after each cleanup run */
|
|
149
|
-
onCleanup?: (result: {
|
|
150
|
-
deleted: number;
|
|
151
|
-
error?: Error;
|
|
152
|
-
}) => void;
|
|
153
|
-
}
|
|
154
|
-
/**
|
|
155
|
-
* Create a garbage collection scheduler for blob storage.
|
|
156
|
-
*
|
|
157
|
-
* Periodically runs cleanup to remove:
|
|
158
|
-
* - Expired pending uploads
|
|
159
|
-
* - Unreferenced blobs (if isReferenced callback provided)
|
|
160
|
-
*
|
|
161
|
-
* @example
|
|
162
|
-
* ```typescript
|
|
163
|
-
* const scheduler = createBlobCleanupScheduler({
|
|
164
|
-
* blobManager,
|
|
165
|
-
* intervalMs: 60 * 60 * 1000, // 1 hour
|
|
166
|
-
* deleteFromStorage: true,
|
|
167
|
-
* isReferenced: async (hash) => {
|
|
168
|
-
* const row = await db.selectFrom('my_table')
|
|
169
|
-
* .select('id')
|
|
170
|
-
* .where('blob_hash', '=', hash)
|
|
171
|
-
* .executeTakeFirst();
|
|
172
|
-
* return !!row;
|
|
173
|
-
* },
|
|
174
|
-
* onCleanup: (result) => {
|
|
175
|
-
* console.log(`Cleanup complete: ${result.deleted} blobs removed`);
|
|
176
|
-
* },
|
|
177
|
-
* });
|
|
178
|
-
*
|
|
179
|
-
* // Start the scheduler
|
|
180
|
-
* scheduler.start();
|
|
181
|
-
*
|
|
182
|
-
* // Stop when shutting down
|
|
183
|
-
* scheduler.stop();
|
|
184
|
-
* ```
|
|
185
|
-
*/
|
|
186
|
-
export declare function createBlobCleanupScheduler(options: BlobCleanupSchedulerOptions): {
|
|
187
|
-
/**
|
|
188
|
-
* Start the cleanup scheduler.
|
|
189
|
-
* Optionally runs an immediate cleanup before starting the interval.
|
|
190
|
-
*/
|
|
191
|
-
start(options?: {
|
|
192
|
-
immediate?: boolean;
|
|
193
|
-
}): void;
|
|
194
|
-
/**
|
|
195
|
-
* Stop the cleanup scheduler.
|
|
196
|
-
*/
|
|
197
|
-
stop(): void;
|
|
198
|
-
/**
|
|
199
|
-
* Run a single cleanup manually.
|
|
200
|
-
*/
|
|
201
|
-
runOnce(): Promise<{
|
|
202
|
-
deleted: number;
|
|
203
|
-
error?: Error;
|
|
204
|
-
}>;
|
|
205
|
-
/**
|
|
206
|
-
* Check if the scheduler is currently active.
|
|
207
|
-
*/
|
|
208
|
-
readonly active: boolean;
|
|
209
|
-
/**
|
|
210
|
-
* Check if a cleanup is currently in progress.
|
|
211
|
-
*/
|
|
212
|
-
readonly running: boolean;
|
|
213
|
-
};
|
|
214
|
-
export declare class BlobValidationError extends Error {
|
|
215
|
-
constructor(message: string);
|
|
216
|
-
}
|
|
217
|
-
export declare class BlobNotFoundError extends Error {
|
|
218
|
-
constructor(message: string);
|
|
219
|
-
}
|
|
220
|
-
//# sourceMappingURL=manager.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/blobs/manager.ts"],"names":[],"mappings":"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"}
|