cursedbelt-server 1.0.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/LICENSE +15 -0
- package/dist/server/activity/index.d.ts +36 -0
- package/dist/server/activity/index.js +36 -0
- package/dist/server/activity/migrations.d.ts +21 -0
- package/dist/server/activity/migrations.js +55 -0
- package/dist/server/activity/shareSource.d.ts +11 -0
- package/dist/server/activity/shareSource.js +45 -0
- package/dist/server/activity/store.d.ts +123 -0
- package/dist/server/activity/store.js +178 -0
- package/dist/server/app.d.ts +56 -0
- package/dist/server/app.js +45 -0
- package/dist/server/audit/index.d.ts +2 -0
- package/dist/server/audit/index.js +2 -0
- package/dist/server/audit/migrations.d.ts +2 -0
- package/dist/server/audit/migrations.js +79 -0
- package/dist/server/audit/sqliteSink.d.ts +36 -0
- package/dist/server/audit/sqliteSink.js +95 -0
- package/dist/server/audit/sqliteSink.test.d.ts +1 -0
- package/dist/server/audit/sqliteSink.test.js +180 -0
- package/dist/server/auth/cookie.d.ts +22 -0
- package/dist/server/auth/cookie.js +35 -0
- package/dist/server/auth/csrf.d.ts +42 -0
- package/dist/server/auth/csrf.js +36 -0
- package/dist/server/auth/fileTokenSigner.d.ts +10 -0
- package/dist/server/auth/fileTokenSigner.js +22 -0
- package/dist/server/auth/getOnly.d.ts +20 -0
- package/dist/server/auth/getOnly.js +27 -0
- package/dist/server/auth/index.d.ts +12 -0
- package/dist/server/auth/index.js +15 -0
- package/dist/server/auth/jwt.d.ts +18 -0
- package/dist/server/auth/jwt.js +56 -0
- package/dist/server/auth/loginThrottle.d.ts +118 -0
- package/dist/server/auth/loginThrottle.js +204 -0
- package/dist/server/auth/middleware.d.ts +14 -0
- package/dist/server/auth/middleware.js +47 -0
- package/dist/server/auth/password.d.ts +14 -0
- package/dist/server/auth/password.js +65 -0
- package/dist/server/auth/sessionStore.d.ts +19 -0
- package/dist/server/auth/sessionStore.js +221 -0
- package/dist/server/auth/totp.d.ts +34 -0
- package/dist/server/auth/totp.js +81 -0
- package/dist/server/auth/types.d.ts +133 -0
- package/dist/server/auth/types.js +1 -0
- package/dist/server/auth/vault.d.ts +27 -0
- package/dist/server/auth/vault.js +57 -0
- package/dist/server/context.d.ts +35 -0
- package/dist/server/context.js +1 -0
- package/dist/server/ctgr.d.ts +32 -0
- package/dist/server/ctgr.js +69 -0
- package/dist/server/db/kysely.d.ts +14 -0
- package/dist/server/db/kysely.js +16 -0
- package/dist/server/db/plumbingTypes.d.ts +116 -0
- package/dist/server/db/plumbingTypes.js +12 -0
- package/dist/server/dropzone/duplicates.d.ts +82 -0
- package/dist/server/dropzone/duplicates.js +90 -0
- package/dist/server/dropzone/index.d.ts +13 -0
- package/dist/server/dropzone/index.js +13 -0
- package/dist/server/dropzone/scan.d.ts +166 -0
- package/dist/server/dropzone/scan.js +272 -0
- package/dist/server/errors.d.ts +7 -0
- package/dist/server/errors.js +7 -0
- package/dist/server/guard/argon2Binding.d.ts +97 -0
- package/dist/server/guard/argon2Binding.js +138 -0
- package/dist/server/guard/index.d.ts +4 -0
- package/dist/server/guard/index.js +6 -0
- package/dist/server/guard/kdfWorker.d.ts +101 -0
- package/dist/server/guard/kdfWorker.js +301 -0
- package/dist/server/guard/kdfWorkerEntry.d.ts +1 -0
- package/dist/server/guard/kdfWorkerEntry.js +15 -0
- package/dist/server/guard/passwordVerifier.d.ts +65 -0
- package/dist/server/guard/passwordVerifier.js +122 -0
- package/dist/server/guard/revocationStore.d.ts +132 -0
- package/dist/server/guard/revocationStore.js +211 -0
- package/dist/server/guard/sessionSigner.d.ts +132 -0
- package/dist/server/guard/sessionSigner.js +303 -0
- package/dist/server/guard/verifier.d.ts +21 -0
- package/dist/server/guard/verifier.js +1 -0
- package/dist/server/incidents/channels.d.ts +161 -0
- package/dist/server/incidents/channels.js +357 -0
- package/dist/server/incidents/checks.d.ts +61 -0
- package/dist/server/incidents/checks.js +55 -0
- package/dist/server/incidents/index.d.ts +51 -0
- package/dist/server/incidents/index.js +51 -0
- package/dist/server/incidents/migrations.d.ts +20 -0
- package/dist/server/incidents/migrations.js +58 -0
- package/dist/server/incidents/notifier.d.ts +79 -0
- package/dist/server/incidents/notifier.js +141 -0
- package/dist/server/incidents/reporter.d.ts +60 -0
- package/dist/server/incidents/reporter.js +49 -0
- package/dist/server/incidents/routes.d.ts +91 -0
- package/dist/server/incidents/routes.js +202 -0
- package/dist/server/incidents/store.d.ts +75 -0
- package/dist/server/incidents/store.js +176 -0
- package/dist/server/incidents/types.d.ts +107 -0
- package/dist/server/incidents/types.js +32 -0
- package/dist/server/index.d.ts +25 -0
- package/dist/server/index.js +53 -0
- package/dist/server/jobs/fireQueue.d.ts +12 -0
- package/dist/server/jobs/fireQueue.js +37 -0
- package/dist/server/jobs/index.d.ts +6 -0
- package/dist/server/jobs/index.js +10 -0
- package/dist/server/jobs/logger.d.ts +10 -0
- package/dist/server/jobs/logger.js +14 -0
- package/dist/server/jobs/plainjobAdapter.d.ts +19 -0
- package/dist/server/jobs/plainjobAdapter.js +48 -0
- package/dist/server/jobs/polling.d.ts +17 -0
- package/dist/server/jobs/polling.js +79 -0
- package/dist/server/jobs/runner.d.ts +24 -0
- package/dist/server/jobs/runner.js +186 -0
- package/dist/server/jobs/timeout.d.ts +28 -0
- package/dist/server/jobs/timeout.js +47 -0
- package/dist/server/jobs/types.d.ts +167 -0
- package/dist/server/jobs/types.js +12 -0
- package/dist/server/master-lock/guard.d.ts +53 -0
- package/dist/server/master-lock/guard.js +205 -0
- package/dist/server/master-lock/index.d.ts +21 -0
- package/dist/server/master-lock/index.js +21 -0
- package/dist/server/master-lock/lockPage.d.ts +34 -0
- package/dist/server/master-lock/lockPage.js +281 -0
- package/dist/server/master-lock/masterLock.d.ts +294 -0
- package/dist/server/master-lock/masterLock.js +523 -0
- package/dist/server/master-lock/principals.d.ts +76 -0
- package/dist/server/master-lock/principals.js +157 -0
- package/dist/server/master-lock/seed.d.ts +47 -0
- package/dist/server/master-lock/seed.js +93 -0
- package/dist/server/master-lock/store.d.ts +19 -0
- package/dist/server/master-lock/store.js +20 -0
- package/dist/server/media-bun/image.d.ts +7 -0
- package/dist/server/media-bun/image.js +96 -0
- package/dist/server/media-bun/index.d.ts +4 -0
- package/dist/server/media-bun/index.js +10 -0
- package/dist/server/media-bun/streaming.d.ts +86 -0
- package/dist/server/media-bun/streaming.js +237 -0
- package/dist/server/media-bun/video.d.ts +35 -0
- package/dist/server/media-bun/video.js +181 -0
- package/dist/server/metrics/metricsBuffer.d.ts +39 -0
- package/dist/server/metrics/metricsBuffer.js +36 -0
- package/dist/server/metrics/normalizeRoute.d.ts +5 -0
- package/dist/server/metrics/normalizeRoute.js +58 -0
- package/dist/server/middleware/correlationId.d.ts +9 -0
- package/dist/server/middleware/correlationId.js +20 -0
- package/dist/server/middleware/corsAllowlist.d.ts +38 -0
- package/dist/server/middleware/corsAllowlist.js +37 -0
- package/dist/server/middleware/errorEnvelope.d.ts +17 -0
- package/dist/server/middleware/errorEnvelope.js +32 -0
- package/dist/server/middleware/index.d.ts +9 -0
- package/dist/server/middleware/index.js +10 -0
- package/dist/server/middleware/localOrigin.d.ts +71 -0
- package/dist/server/middleware/localOrigin.js +119 -0
- package/dist/server/middleware/rateLimit.d.ts +56 -0
- package/dist/server/middleware/rateLimit.js +86 -0
- package/dist/server/middleware/requestLogger.d.ts +29 -0
- package/dist/server/middleware/requestLogger.js +47 -0
- package/dist/server/middleware/securityHeaders.d.ts +29 -0
- package/dist/server/middleware/securityHeaders.js +44 -0
- package/dist/server/middleware/zValidator.d.ts +29 -0
- package/dist/server/middleware/zValidator.js +57 -0
- package/dist/server/migration/runner.d.ts +42 -0
- package/dist/server/migration/runner.js +70 -0
- package/dist/server/migration/types.d.ts +16 -0
- package/dist/server/migration/types.js +1 -0
- package/dist/server/net/outboundGuard.d.ts +30 -0
- package/dist/server/net/outboundGuard.js +199 -0
- package/dist/server/notifications/hub.d.ts +67 -0
- package/dist/server/notifications/hub.js +187 -0
- package/dist/server/notifications/index.d.ts +47 -0
- package/dist/server/notifications/index.js +46 -0
- package/dist/server/notifications/migrations.d.ts +13 -0
- package/dist/server/notifications/migrations.js +20 -0
- package/dist/server/notifications/routes.d.ts +58 -0
- package/dist/server/notifications/routes.js +113 -0
- package/dist/server/notifications/service.d.ts +58 -0
- package/dist/server/notifications/service.js +41 -0
- package/dist/server/paths/appDataHome.d.ts +19 -0
- package/dist/server/paths/appDataHome.js +68 -0
- package/dist/server/private-media/crypto.d.ts +37 -0
- package/dist/server/private-media/crypto.js +111 -0
- package/dist/server/private-media/index-store.d.ts +31 -0
- package/dist/server/private-media/index-store.js +36 -0
- package/dist/server/private-media/mountPrivateRoutes.d.ts +26 -0
- package/dist/server/private-media/mountPrivateRoutes.js +219 -0
- package/dist/server/private-media/pipeline.d.ts +37 -0
- package/dist/server/private-media/pipeline.js +97 -0
- package/dist/server/private-media/unlock.d.ts +52 -0
- package/dist/server/private-media/unlock.js +55 -0
- package/dist/server/resume/index.d.ts +2 -0
- package/dist/server/resume/index.js +2 -0
- package/dist/server/resume/routes.d.ts +41 -0
- package/dist/server/resume/routes.js +50 -0
- package/dist/server/resume/store.d.ts +37 -0
- package/dist/server/resume/store.js +38 -0
- package/dist/server/retention/archive.d.ts +78 -0
- package/dist/server/retention/archive.js +284 -0
- package/dist/server/retention/fleet.d.ts +50 -0
- package/dist/server/retention/fleet.js +66 -0
- package/dist/server/retention/index.d.ts +38 -0
- package/dist/server/retention/index.js +38 -0
- package/dist/server/retention/policy.d.ts +263 -0
- package/dist/server/retention/policy.js +264 -0
- package/dist/server/retention/store.d.ts +101 -0
- package/dist/server/retention/store.js +251 -0
- package/dist/server/retention/sweeper.d.ts +69 -0
- package/dist/server/retention/sweeper.js +289 -0
- package/dist/server/retention/target.d.ts +143 -0
- package/dist/server/retention/target.js +438 -0
- package/dist/server/search/index.d.ts +2 -0
- package/dist/server/search/index.js +6 -0
- package/dist/server/search/pgSearchProvider.d.ts +91 -0
- package/dist/server/search/pgSearchProvider.js +330 -0
- package/dist/server/search/pgSearchProvider.pg.test.d.ts +1 -0
- package/dist/server/search/pgSearchProvider.pg.test.js +338 -0
- package/dist/server/search/pgSearchSchema.d.ts +81 -0
- package/dist/server/search/pgSearchSchema.js +89 -0
- package/dist/server/sharing/index.d.ts +18 -0
- package/dist/server/sharing/index.js +16 -0
- package/dist/server/sharing/migrations.d.ts +6 -0
- package/dist/server/sharing/migrations.js +79 -0
- package/dist/server/sharing/router.d.ts +111 -0
- package/dist/server/sharing/router.js +93 -0
- package/dist/server/sharing/sql.d.ts +67 -0
- package/dist/server/sharing/sql.js +88 -0
- package/dist/server/sharing/store.d.ts +173 -0
- package/dist/server/sharing/store.js +484 -0
- package/dist/server/sqlite/backup.d.ts +48 -0
- package/dist/server/sqlite/backup.js +97 -0
- package/dist/server/sqlite/browse.d.ts +42 -0
- package/dist/server/sqlite/browse.js +84 -0
- package/dist/server/sqlite/export.d.ts +32 -0
- package/dist/server/sqlite/export.js +42 -0
- package/dist/server/sqlite/fts5.d.ts +106 -0
- package/dist/server/sqlite/fts5.js +154 -0
- package/dist/server/sqlite/health.d.ts +44 -0
- package/dist/server/sqlite/health.js +52 -0
- package/dist/server/sqlite/import.d.ts +36 -0
- package/dist/server/sqlite/import.js +108 -0
- package/dist/server/sqlite/index.d.ts +9 -0
- package/dist/server/sqlite/index.js +15 -0
- package/dist/server/sqlite/readonlySql.d.ts +15 -0
- package/dist/server/sqlite/readonlySql.js +65 -0
- package/dist/server/sqlite/stats.d.ts +22 -0
- package/dist/server/sqlite/stats.js +32 -0
- package/dist/server/sqlite/viewer.d.ts +17 -0
- package/dist/server/sqlite/viewer.js +56 -0
- package/dist/server/storage/binaryServerProcessing.d.ts +23 -0
- package/dist/server/storage/binaryServerProcessing.js +81 -0
- package/dist/server/storage/binaryServerStore.d.ts +3 -0
- package/dist/server/storage/binaryServerStore.js +95 -0
- package/dist/server/storage/diskStore.d.ts +2 -0
- package/dist/server/storage/diskStore.js +88 -0
- package/dist/server/storage/files/adapter.d.ts +33 -0
- package/dist/server/storage/files/adapter.js +203 -0
- package/dist/server/storage/files/catalogue.d.ts +72 -0
- package/dist/server/storage/files/catalogue.js +1033 -0
- package/dist/server/storage/files/chunkedUpload.d.ts +56 -0
- package/dist/server/storage/files/chunkedUpload.js +70 -0
- package/dist/server/storage/files/fileRoutes.d.ts +51 -0
- package/dist/server/storage/files/fileRoutes.js +405 -0
- package/dist/server/storage/files/index.d.ts +9 -0
- package/dist/server/storage/files/index.js +11 -0
- package/dist/server/storage/files/migrations.d.ts +2 -0
- package/dist/server/storage/files/migrations.js +163 -0
- package/dist/server/storage/files/mimeByExt.d.ts +1 -0
- package/dist/server/storage/files/mimeByExt.js +13 -0
- package/dist/server/storage/files/stack.d.ts +136 -0
- package/dist/server/storage/files/stack.js +132 -0
- package/dist/server/storage/files/storageOps.d.ts +54 -0
- package/dist/server/storage/files/storageOps.js +110 -0
- package/dist/server/storage/files/types.d.ts +261 -0
- package/dist/server/storage/files/types.js +22 -0
- package/dist/server/storage/imageThumbnail.d.ts +3 -0
- package/dist/server/storage/imageThumbnail.js +50 -0
- package/dist/server/storage/index.d.ts +15 -0
- package/dist/server/storage/index.js +27 -0
- package/dist/server/storage/mountMediaRoutes.d.ts +28 -0
- package/dist/server/storage/mountMediaRoutes.js +141 -0
- package/dist/server/storage/objectStoreMediaStore.d.ts +4 -0
- package/dist/server/storage/objectStoreMediaStore.js +57 -0
- package/dist/server/storage/s3ObjectStore.d.ts +63 -0
- package/dist/server/storage/s3ObjectStore.js +187 -0
- package/dist/server/storage/sources.d.ts +47 -0
- package/dist/server/storage/sources.js +148 -0
- package/dist/server/storage/streamRange.d.ts +19 -0
- package/dist/server/storage/streamRange.js +69 -0
- package/dist/server/storage/streamToken.d.ts +16 -0
- package/dist/server/storage/streamToken.js +54 -0
- package/dist/server/storage/transcodeJobs.d.ts +65 -0
- package/dist/server/storage/transcodeJobs.js +104 -0
- package/dist/server/storage/types.d.ts +193 -0
- package/dist/server/storage/types.js +41 -0
- package/dist/server/storage/videoDerivativeKeys.d.ts +127 -0
- package/dist/server/storage/videoDerivativeKeys.js +149 -0
- package/dist/server/storage/videoProcessor.d.ts +30 -0
- package/dist/server/storage/videoProcessor.js +148 -0
- package/dist/server/sync/alarm.d.ts +34 -0
- package/dist/server/sync/alarm.js +91 -0
- package/dist/server/sync/commands.d.ts +87 -0
- package/dist/server/sync/commands.js +241 -0
- package/dist/server/sync/engine.d.ts +62 -0
- package/dist/server/sync/engine.js +184 -0
- package/dist/server/sync/http.d.ts +106 -0
- package/dist/server/sync/http.js +243 -0
- package/dist/server/sync/index.d.ts +41 -0
- package/dist/server/sync/index.js +41 -0
- package/dist/server/sync/opLog.d.ts +61 -0
- package/dist/server/sync/opLog.js +96 -0
- package/dist/server/sync/planner.d.ts +31 -0
- package/dist/server/sync/planner.js +30 -0
- package/dist/server/sync/status.d.ts +63 -0
- package/dist/server/sync/status.js +49 -0
- package/dist/server/sync/timer.d.ts +52 -0
- package/dist/server/sync/timer.js +170 -0
- package/dist/server/sync/tokens.d.ts +25 -0
- package/dist/server/sync/tokens.js +51 -0
- package/dist/server/sync/types.d.ts +101 -0
- package/dist/server/sync/types.js +29 -0
- package/dist/server/ws/eventBus.d.ts +14 -0
- package/dist/server/ws/eventBus.js +42 -0
- package/dist/server/ws/hub.d.ts +20 -0
- package/dist/server/ws/hub.js +154 -0
- package/dist/server/ws/index.d.ts +5 -0
- package/dist/server/ws/index.js +7 -0
- package/dist/server/ws/presence.d.ts +11 -0
- package/dist/server/ws/presence.js +20 -0
- package/dist/server/ws/room.d.ts +17 -0
- package/dist/server/ws/room.js +23 -0
- package/dist/server/ws/types.d.ts +122 -0
- package/dist/server/ws/types.js +1 -0
- package/package.json +234 -0
- package/src/declaredDepsAreImported.spec.ts +87 -0
- package/src/leafSubpathsImportNothing.spec.ts +358 -0
- package/src/lockfileIsTracked.spec.ts +50 -0
- package/src/namedSubpathsResolve.spec.ts +122 -0
- package/src/noPathDeps.spec.ts +24 -0
- package/src/publishShape.spec.ts +89 -0
- package/src/server/activity/index.ts +59 -0
- package/src/server/activity/migrations.ts +67 -0
- package/src/server/activity/shareSource.ts +57 -0
- package/src/server/activity/store.spec.ts +255 -0
- package/src/server/activity/store.ts +368 -0
- package/src/server/app.spec.ts +243 -0
- package/src/server/app.ts +89 -0
- package/src/server/audit/index.ts +2 -0
- package/src/server/audit/migrations.ts +88 -0
- package/src/server/audit/sqliteSink.test.ts +200 -0
- package/src/server/audit/sqliteSink.ts +162 -0
- package/src/server/auth/cookie.spec.ts +46 -0
- package/src/server/auth/cookie.ts +42 -0
- package/src/server/auth/csrf.spec.ts +81 -0
- package/src/server/auth/csrf.ts +83 -0
- package/src/server/auth/fileTokenSigner.ts +40 -0
- package/src/server/auth/getOnly.spec.ts +53 -0
- package/src/server/auth/getOnly.ts +32 -0
- package/src/server/auth/index.ts +51 -0
- package/src/server/auth/jwt.spec.ts +106 -0
- package/src/server/auth/jwt.ts +75 -0
- package/src/server/auth/loginThrottle.spec.ts +213 -0
- package/src/server/auth/loginThrottle.ts +261 -0
- package/src/server/auth/middleware.spec.ts +148 -0
- package/src/server/auth/middleware.ts +56 -0
- package/src/server/auth/password.spec.ts +48 -0
- package/src/server/auth/password.ts +71 -0
- package/src/server/auth/sessionStore.spec.ts +189 -0
- package/src/server/auth/sessionStore.ts +261 -0
- package/src/server/auth/totp.spec.ts +73 -0
- package/src/server/auth/totp.ts +92 -0
- package/src/server/auth/types.ts +146 -0
- package/src/server/auth/vault.spec.ts +51 -0
- package/src/server/auth/vault.ts +71 -0
- package/src/server/context.ts +37 -0
- package/src/server/ctgr.spec.ts +138 -0
- package/src/server/ctgr.ts +108 -0
- package/src/server/db/kysely.spec.ts +62 -0
- package/src/server/db/kysely.ts +21 -0
- package/src/server/db/plumbingTypes.ts +126 -0
- package/src/server/dropzone/duplicates.ts +121 -0
- package/src/server/dropzone/index.ts +30 -0
- package/src/server/dropzone/scan.spec.ts +255 -0
- package/src/server/dropzone/scan.ts +342 -0
- package/src/server/errors.spec.ts +76 -0
- package/src/server/errors.ts +22 -0
- package/src/server/guard/argon2Binding.spec.ts +117 -0
- package/src/server/guard/argon2Binding.ts +195 -0
- package/src/server/guard/argon2Kat.spec.ts +250 -0
- package/src/server/guard/guard.spec.ts +390 -0
- package/src/server/guard/index.ts +6 -0
- package/src/server/guard/kdfWorker.spec.ts +283 -0
- package/src/server/guard/kdfWorker.ts +367 -0
- package/src/server/guard/kdfWorkerEntry.ts +16 -0
- package/src/server/guard/passwordVerifier.spec.ts +71 -0
- package/src/server/guard/passwordVerifier.ts +175 -0
- package/src/server/guard/revocationStore.spec.ts +135 -0
- package/src/server/guard/revocationStore.ts +291 -0
- package/src/server/guard/sessionSigner.ts +425 -0
- package/src/server/guard/verifier.ts +27 -0
- package/src/server/incidents/channels.ts +487 -0
- package/src/server/incidents/checks.ts +120 -0
- package/src/server/incidents/incidents.spec.ts +463 -0
- package/src/server/incidents/index.ts +96 -0
- package/src/server/incidents/migrations.ts +66 -0
- package/src/server/incidents/notifier.ts +215 -0
- package/src/server/incidents/reporter.ts +110 -0
- package/src/server/incidents/routes.ts +314 -0
- package/src/server/incidents/store.ts +329 -0
- package/src/server/incidents/types.ts +116 -0
- package/src/server/index.ts +248 -0
- package/src/server/jobs/fireQueue.spec.ts +85 -0
- package/src/server/jobs/fireQueue.ts +37 -0
- package/src/server/jobs/index.ts +26 -0
- package/src/server/jobs/logger.ts +16 -0
- package/src/server/jobs/plainjobAdapter.spec.ts +34 -0
- package/src/server/jobs/plainjobAdapter.ts +54 -0
- package/src/server/jobs/polling.spec.ts +219 -0
- package/src/server/jobs/polling.ts +81 -0
- package/src/server/jobs/runner.spec.ts +213 -0
- package/src/server/jobs/runner.ts +213 -0
- package/src/server/jobs/timeout.spec.ts +35 -0
- package/src/server/jobs/timeout.ts +53 -0
- package/src/server/jobs/types.ts +188 -0
- package/src/server/master-lock/guard.spec.ts +347 -0
- package/src/server/master-lock/guard.ts +290 -0
- package/src/server/master-lock/index.ts +44 -0
- package/src/server/master-lock/lockPage.spec.ts +88 -0
- package/src/server/master-lock/lockPage.ts +313 -0
- package/src/server/master-lock/masterLock.spec.ts +338 -0
- package/src/server/master-lock/masterLock.ts +627 -0
- package/src/server/master-lock/principals.spec.ts +378 -0
- package/src/server/master-lock/principals.ts +175 -0
- package/src/server/master-lock/seed.spec.ts +69 -0
- package/src/server/master-lock/seed.ts +112 -0
- package/src/server/master-lock/store.ts +35 -0
- package/src/server/media-bun/image.spec.ts +115 -0
- package/src/server/media-bun/image.ts +134 -0
- package/src/server/media-bun/index.ts +52 -0
- package/src/server/media-bun/streaming.spec.ts +134 -0
- package/src/server/media-bun/streaming.ts +347 -0
- package/src/server/media-bun/video.spec.ts +115 -0
- package/src/server/media-bun/video.ts +232 -0
- package/src/server/metrics/metricsBuffer.ts +92 -0
- package/src/server/metrics/normalizeRoute.spec.ts +51 -0
- package/src/server/metrics/normalizeRoute.ts +63 -0
- package/src/server/middleware/correlationId.ts +24 -0
- package/src/server/middleware/corsAllowlist.spec.ts +118 -0
- package/src/server/middleware/corsAllowlist.ts +69 -0
- package/src/server/middleware/errorEnvelope.ts +38 -0
- package/src/server/middleware/index.ts +19 -0
- package/src/server/middleware/localOrigin.spec.ts +168 -0
- package/src/server/middleware/localOrigin.ts +139 -0
- package/src/server/middleware/rateLimit.spec.ts +72 -0
- package/src/server/middleware/rateLimit.ts +125 -0
- package/src/server/middleware/requestLogger.ts +95 -0
- package/src/server/middleware/securityHeaders.ts +78 -0
- package/src/server/middleware/zValidator.spec.ts +251 -0
- package/src/server/middleware/zValidator.ts +114 -0
- package/src/server/migration/runner.spec.ts +88 -0
- package/src/server/migration/runner.ts +87 -0
- package/src/server/migration/types.ts +17 -0
- package/src/server/net/outboundGuard.spec.ts +90 -0
- package/src/server/net/outboundGuard.ts +205 -0
- package/src/server/notifications/hub.ts +245 -0
- package/src/server/notifications/index.ts +77 -0
- package/src/server/notifications/migrations.ts +39 -0
- package/src/server/notifications/routes.ts +177 -0
- package/src/server/notifications/service.spec.ts +305 -0
- package/src/server/notifications/service.ts +112 -0
- package/src/server/paths/appDataHome.spec.ts +87 -0
- package/src/server/paths/appDataHome.ts +84 -0
- package/src/server/private-media/blobRoute.spec.ts +165 -0
- package/src/server/private-media/crypto.spec.ts +81 -0
- package/src/server/private-media/crypto.ts +155 -0
- package/src/server/private-media/gatePolicy.spec.ts +98 -0
- package/src/server/private-media/index-store.ts +83 -0
- package/src/server/private-media/mountPrivateRoutes.ts +265 -0
- package/src/server/private-media/pipeline.spec.ts +111 -0
- package/src/server/private-media/pipeline.ts +170 -0
- package/src/server/private-media/routes.spec.ts +265 -0
- package/src/server/private-media/unlock.ts +112 -0
- package/src/server/resume/index.ts +8 -0
- package/src/server/resume/resume.spec.ts +118 -0
- package/src/server/resume/routes.ts +92 -0
- package/src/server/resume/store.ts +82 -0
- package/src/server/retention/archive.spec.ts +181 -0
- package/src/server/retention/archive.ts +353 -0
- package/src/server/retention/fleet.ts +104 -0
- package/src/server/retention/index.ts +101 -0
- package/src/server/retention/policy.spec.ts +132 -0
- package/src/server/retention/policy.ts +392 -0
- package/src/server/retention/store.spec.ts +236 -0
- package/src/server/retention/store.ts +338 -0
- package/src/server/retention/sweeper.spec.ts +321 -0
- package/src/server/retention/sweeper.ts +367 -0
- package/src/server/retention/target.spec.ts +592 -0
- package/src/server/retention/target.ts +613 -0
- package/src/server/search/index.ts +12 -0
- package/src/server/search/pgSearchProvider.pg.test.ts +392 -0
- package/src/server/search/pgSearchProvider.ts +421 -0
- package/src/server/search/pgSearchSchema.ts +147 -0
- package/src/server/sharing/index.ts +65 -0
- package/src/server/sharing/migrations.ts +128 -0
- package/src/server/sharing/router.spec.ts +167 -0
- package/src/server/sharing/router.ts +194 -0
- package/src/server/sharing/sql.ts +109 -0
- package/src/server/sharing/store.spec.ts +408 -0
- package/src/server/sharing/store.ts +737 -0
- package/src/server/sqlite/backup.spec.ts +114 -0
- package/src/server/sqlite/backup.ts +154 -0
- package/src/server/sqlite/browse.spec.ts +70 -0
- package/src/server/sqlite/browse.ts +120 -0
- package/src/server/sqlite/export.spec.ts +43 -0
- package/src/server/sqlite/export.ts +74 -0
- package/src/server/sqlite/fts5.spec.ts +175 -0
- package/src/server/sqlite/fts5.ts +255 -0
- package/src/server/sqlite/health.spec.ts +79 -0
- package/src/server/sqlite/health.ts +105 -0
- package/src/server/sqlite/import.spec.ts +75 -0
- package/src/server/sqlite/import.ts +141 -0
- package/src/server/sqlite/index.ts +64 -0
- package/src/server/sqlite/readonlySql.spec.ts +58 -0
- package/src/server/sqlite/readonlySql.ts +67 -0
- package/src/server/sqlite/stats.spec.ts +21 -0
- package/src/server/sqlite/stats.ts +61 -0
- package/src/server/sqlite/viewer.spec.ts +127 -0
- package/src/server/sqlite/viewer.ts +72 -0
- package/src/server/storage/binaryServerProcessing.integration.spec.ts +222 -0
- package/src/server/storage/binaryServerProcessing.spec.ts +150 -0
- package/src/server/storage/binaryServerProcessing.ts +127 -0
- package/src/server/storage/binaryServerStore.ts +102 -0
- package/src/server/storage/chunked.integration.spec.ts +185 -0
- package/src/server/storage/diskStore.ts +83 -0
- package/src/server/storage/files/adapter.photo.display.spec.ts +169 -0
- package/src/server/storage/files/adapter.photo.spec.ts +128 -0
- package/src/server/storage/files/adapter.spec.ts +121 -0
- package/src/server/storage/files/adapter.ts +255 -0
- package/src/server/storage/files/catalogue.media-host.spec.ts +184 -0
- package/src/server/storage/files/catalogue.orderings.spec.ts +157 -0
- package/src/server/storage/files/catalogue.private.spec.ts +106 -0
- package/src/server/storage/files/catalogue.recover.spec.ts +131 -0
- package/src/server/storage/files/catalogue.sort.spec.ts +154 -0
- package/src/server/storage/files/catalogue.spec.ts +133 -0
- package/src/server/storage/files/catalogue.trash-import.spec.ts +125 -0
- package/src/server/storage/files/catalogue.ts +1326 -0
- package/src/server/storage/files/chunkedUpload.spec.ts +111 -0
- package/src/server/storage/files/chunkedUpload.ts +146 -0
- package/src/server/storage/files/collections.spec.ts +294 -0
- package/src/server/storage/files/fileRoutes.replace.spec.ts +88 -0
- package/src/server/storage/files/fileRoutes.spec.ts +327 -0
- package/src/server/storage/files/fileRoutes.ts +462 -0
- package/src/server/storage/files/index.ts +66 -0
- package/src/server/storage/files/migrations.ts +187 -0
- package/src/server/storage/files/mimeByExt.ts +14 -0
- package/src/server/storage/files/stack.spec.ts +258 -0
- package/src/server/storage/files/stack.ts +284 -0
- package/src/server/storage/files/storageOps.spec.ts +126 -0
- package/src/server/storage/files/storageOps.ts +213 -0
- package/src/server/storage/files/types.ts +285 -0
- package/src/server/storage/imageThumbnail.spec.ts +81 -0
- package/src/server/storage/imageThumbnail.ts +60 -0
- package/src/server/storage/index.ts +122 -0
- package/src/server/storage/mountMediaRoutes.ts +231 -0
- package/src/server/storage/objectStore.spec.ts +272 -0
- package/src/server/storage/objectStoreMediaStore.ts +63 -0
- package/src/server/storage/s3ObjectStore.ts +239 -0
- package/src/server/storage/sources.ts +245 -0
- package/src/server/storage/storage.spec.ts +219 -0
- package/src/server/storage/streamRange.ts +92 -0
- package/src/server/storage/streamToken.ts +76 -0
- package/src/server/storage/transcode.integration.spec.ts +134 -0
- package/src/server/storage/transcodeJobs.spec.ts +152 -0
- package/src/server/storage/transcodeJobs.ts +171 -0
- package/src/server/storage/types.ts +230 -0
- package/src/server/storage/videoDerivativeKeys.spec.ts +112 -0
- package/src/server/storage/videoDerivativeKeys.ts +172 -0
- package/src/server/storage/videoProcessor.posterOnly.spec.ts +106 -0
- package/src/server/storage/videoProcessor.ts +229 -0
- package/src/server/sync/alarm.spec.ts +149 -0
- package/src/server/sync/alarm.ts +137 -0
- package/src/server/sync/commands.spec.ts +145 -0
- package/src/server/sync/commands.ts +361 -0
- package/src/server/sync/engine.spec.ts +496 -0
- package/src/server/sync/engine.ts +255 -0
- package/src/server/sync/http.ts +316 -0
- package/src/server/sync/httpRemote.spec.ts +158 -0
- package/src/server/sync/index.ts +90 -0
- package/src/server/sync/opLog.spec.ts +110 -0
- package/src/server/sync/opLog.ts +189 -0
- package/src/server/sync/planner.spec.ts +53 -0
- package/src/server/sync/planner.ts +62 -0
- package/src/server/sync/status.spec.ts +92 -0
- package/src/server/sync/status.ts +108 -0
- package/src/server/sync/timer.spec.ts +150 -0
- package/src/server/sync/timer.ts +207 -0
- package/src/server/sync/tokens.spec.ts +38 -0
- package/src/server/sync/tokens.ts +94 -0
- package/src/server/sync/types.ts +108 -0
- package/src/server/ws/eventBus.spec.ts +67 -0
- package/src/server/ws/eventBus.ts +46 -0
- package/src/server/ws/hub.integration.spec.ts +93 -0
- package/src/server/ws/hub.spec.ts +282 -0
- package/src/server/ws/hub.ts +168 -0
- package/src/server/ws/index.ts +20 -0
- package/src/server/ws/presence.spec.ts +27 -0
- package/src/server/ws/presence.ts +26 -0
- package/src/server/ws/room.spec.ts +36 -0
- package/src/server/ws/room.ts +29 -0
- package/src/server/ws/types.ts +134 -0
- package/src/skippedTestsAreAnswered.spec.ts +215 -0
- package/src/testTmpRoot.spec.ts +102 -0
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
import { isBrowserRenderableImage } from '../imageThumbnail';
|
|
2
|
+
/** Build the image→GalleryPhoto mapper shared by the photo source and the mixed media source.
|
|
3
|
+
* The primary image is served by the file byte route (fileUrls); the grid thumbnail + HEIC
|
|
4
|
+
* display derivative by the type-agnostic poster route (mediaUrls) when ingest produced one. */
|
|
5
|
+
function createFileToPhoto(cfg) {
|
|
6
|
+
return async (ctx, file) => {
|
|
7
|
+
if (file.fileType !== 'image')
|
|
8
|
+
return null;
|
|
9
|
+
const { url } = await cfg.fileUrls.build(ctx, file.id, file.mime);
|
|
10
|
+
const media = file.hasThumbnail ? await cfg.mediaUrls.build(ctx, cfg.id, file.id) : null;
|
|
11
|
+
const thumbnailUrl = media?.posterUrl;
|
|
12
|
+
const displayUrl = media && !isBrowserRenderableImage(file.mime) ? media.displayUrl : undefined;
|
|
13
|
+
return {
|
|
14
|
+
id: file.id,
|
|
15
|
+
type: 'image',
|
|
16
|
+
url,
|
|
17
|
+
thumbnailUrl,
|
|
18
|
+
displayUrl,
|
|
19
|
+
name: file.name,
|
|
20
|
+
sizeBytes: file.size,
|
|
21
|
+
mimeType: file.mime,
|
|
22
|
+
tags: file.tags,
|
|
23
|
+
createdAt: file.createdAt,
|
|
24
|
+
favorite: file.favorite,
|
|
25
|
+
};
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
// ── FileCatalogue → media seam ────────────────────────────────────────────────────
|
|
29
|
+
// The catalogue is the ONE source of truth for a user's binaries. The video gallery is not a
|
|
30
|
+
// separate store — it is a video-filtered VIEW over the catalogue. These two adapters are the
|
|
31
|
+
// seam: `createFileToPlayable` turns a video FileRecord into the player's PlayableVideo (URLs
|
|
32
|
+
// baked server-side via the shared token/serve infra), and `createCatalogueVideoSource` exposes
|
|
33
|
+
// the catalogue as a `MediaSource` so the existing `mountMediaRoutes` + gallery serve it
|
|
34
|
+
// unchanged. Because the serve routes address bytes by (owner, videoId) through the shared
|
|
35
|
+
// keyspace, a catalogue video is served by the same routes regardless of `sourceId`.
|
|
36
|
+
/** Resolve a video FileRecord to a PlayableVideo with tokenised URLs. Non-video ⇒ null. */
|
|
37
|
+
export function createFileToPlayable(urls, sourceId) {
|
|
38
|
+
return async (ctx, file) => {
|
|
39
|
+
if (file.fileType !== 'video')
|
|
40
|
+
return null;
|
|
41
|
+
const u = await urls.build(ctx, sourceId, file.id);
|
|
42
|
+
return {
|
|
43
|
+
id: file.id,
|
|
44
|
+
name: file.name,
|
|
45
|
+
streamUrl: u.streamUrl,
|
|
46
|
+
hlsUrl: file.hasHls ? u.hlsUrl : undefined,
|
|
47
|
+
posterUrl: file.hasThumbnail ? u.posterUrl : undefined,
|
|
48
|
+
vttUrl: file.hasSprites ? u.vttUrl : undefined,
|
|
49
|
+
spriteUrl: file.hasSprites ? u.spriteUrl : undefined,
|
|
50
|
+
durationSeconds: file.durationSeconds,
|
|
51
|
+
tags: file.tags,
|
|
52
|
+
processingStatus: file.processingStatus,
|
|
53
|
+
processingProgress: file.processingProgress,
|
|
54
|
+
};
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
/** Expose a FileCatalogue as a video-only `MediaSource` — the gallery is a view, not a store. */
|
|
58
|
+
export function createCatalogueVideoSource(cfg) {
|
|
59
|
+
const toPlayable = createFileToPlayable(cfg.urls, cfg.id);
|
|
60
|
+
return {
|
|
61
|
+
id: cfg.id,
|
|
62
|
+
title: cfg.title,
|
|
63
|
+
async list(ctx, opts) {
|
|
64
|
+
const page = await cfg.catalogue.list(ctx, {
|
|
65
|
+
type: 'video',
|
|
66
|
+
tag: opts.tag,
|
|
67
|
+
query: opts.query,
|
|
68
|
+
cursor: opts.cursor,
|
|
69
|
+
limit: opts.limit,
|
|
70
|
+
sort: opts.sort,
|
|
71
|
+
});
|
|
72
|
+
const items = await Promise.all(page.items.map((f) => toPlayable(ctx, f)));
|
|
73
|
+
return { items: items.filter((v) => v !== null), nextCursor: page.nextCursor };
|
|
74
|
+
},
|
|
75
|
+
async resolve(ctx, videoId) {
|
|
76
|
+
const file = await cfg.catalogue.get(ctx, videoId);
|
|
77
|
+
return file ? toPlayable(ctx, file) : null;
|
|
78
|
+
},
|
|
79
|
+
async tags(ctx) {
|
|
80
|
+
return (await cfg.catalogue.tagFacets(ctx)).map((f) => f.tag);
|
|
81
|
+
},
|
|
82
|
+
async ingest(ctx, upload) {
|
|
83
|
+
const file = await cfg.catalogue.ingest(ctx, upload);
|
|
84
|
+
const playable = await toPlayable(ctx, file);
|
|
85
|
+
if (!playable)
|
|
86
|
+
throw new Error('gallery ingest expects a video file');
|
|
87
|
+
return playable;
|
|
88
|
+
},
|
|
89
|
+
async remove(ctx, videoId) {
|
|
90
|
+
await cfg.catalogue.trash(ctx, videoId);
|
|
91
|
+
},
|
|
92
|
+
async recordView(ctx, videoId) {
|
|
93
|
+
await cfg.catalogue.recordView(ctx, videoId);
|
|
94
|
+
},
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
// ── Photo view ────────────────────────────────────────────────────────────────────
|
|
98
|
+
// The photo gallery is the image-filtered sibling of the video view: same catalogue, same
|
|
99
|
+
// token/serve infra. The primary image is served by the file byte route (fileUrls) and the grid
|
|
100
|
+
// thumbnail by the type-agnostic poster route (mediaUrls) when the ingest thumbnailer produced
|
|
101
|
+
// one — so a PhotoSource needs BOTH URL builders.
|
|
102
|
+
/** Expose a FileCatalogue as an image-only `PhotoSource` — a view, not a store. */
|
|
103
|
+
export function createCataloguePhotoSource(cfg) {
|
|
104
|
+
const toPhoto = createFileToPhoto(cfg);
|
|
105
|
+
return {
|
|
106
|
+
id: cfg.id,
|
|
107
|
+
title: cfg.title,
|
|
108
|
+
async list(ctx, opts) {
|
|
109
|
+
const page = await cfg.catalogue.list(ctx, {
|
|
110
|
+
type: 'image',
|
|
111
|
+
tag: opts.tag,
|
|
112
|
+
query: opts.query,
|
|
113
|
+
cursor: opts.cursor,
|
|
114
|
+
limit: opts.limit,
|
|
115
|
+
sort: opts.sort,
|
|
116
|
+
});
|
|
117
|
+
const items = await Promise.all(page.items.map((f) => toPhoto(ctx, f)));
|
|
118
|
+
return { items: items.filter((p) => p !== null), nextCursor: page.nextCursor };
|
|
119
|
+
},
|
|
120
|
+
async resolve(ctx, photoId) {
|
|
121
|
+
const file = await cfg.catalogue.get(ctx, photoId);
|
|
122
|
+
return file ? toPhoto(ctx, file) : null;
|
|
123
|
+
},
|
|
124
|
+
async tags(ctx) {
|
|
125
|
+
return (await cfg.catalogue.tagFacets(ctx)).map((f) => f.tag);
|
|
126
|
+
},
|
|
127
|
+
async ingest(ctx, upload) {
|
|
128
|
+
if (!upload.mime.startsWith('image/')) {
|
|
129
|
+
throw new Error('photo ingest expects an image file');
|
|
130
|
+
}
|
|
131
|
+
const file = await cfg.catalogue.ingest(ctx, upload);
|
|
132
|
+
const photo = await toPhoto(ctx, file);
|
|
133
|
+
if (!photo)
|
|
134
|
+
throw new Error('photo ingest expects an image file');
|
|
135
|
+
return photo;
|
|
136
|
+
},
|
|
137
|
+
async remove(ctx, photoId) {
|
|
138
|
+
await cfg.catalogue.trash(ctx, photoId);
|
|
139
|
+
},
|
|
140
|
+
async recordView(ctx, photoId) {
|
|
141
|
+
await cfg.catalogue.recordView(ctx, photoId);
|
|
142
|
+
},
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
// ── Mixed media view ───────────────────────────────────────────────────────────────
|
|
146
|
+
// A combined gallery lists BOTH photos and videos from the one catalogue. This adapter
|
|
147
|
+
// reuses the same two mappers (`createFileToPlayable`, `createFileToPhoto`) so a mixed
|
|
148
|
+
// item renders identically to its single-type sibling — it just tags each with
|
|
149
|
+
// `mediaKind` for the UI to pick a tile/stage. It needs BOTH URL builders (video streams
|
|
150
|
+
// + image bytes/poster). A `kind` filter maps to the catalogue's `type`; `all` lists
|
|
151
|
+
// untyped and keeps only image|video (dropping docs/audio the mixed gallery can't show).
|
|
152
|
+
/** Expose a FileCatalogue as a `MediaGallerySource` — photos + videos in one feed.
|
|
153
|
+
* Videos are tokenised under `videoSourceId` (must match the registered video source so
|
|
154
|
+
* `mountMediaRoutes` serves their streams); photo posters/thumbnails under this source's `id`. */
|
|
155
|
+
export function createCatalogueMediaSource(cfg) {
|
|
156
|
+
const toPlayable = createFileToPlayable(cfg.urls, cfg.videoSourceId ?? cfg.id);
|
|
157
|
+
const toPhoto = createFileToPhoto({ id: cfg.id, fileUrls: cfg.fileUrls, mediaUrls: cfg.urls });
|
|
158
|
+
const toMedia = async (ctx, file) => {
|
|
159
|
+
if (file.fileType === 'video') {
|
|
160
|
+
const v = await toPlayable(ctx, file);
|
|
161
|
+
return v ? { ...v, mediaKind: 'video' } : null;
|
|
162
|
+
}
|
|
163
|
+
if (file.fileType === 'image') {
|
|
164
|
+
const p = await toPhoto(ctx, file);
|
|
165
|
+
return p ? { ...p, mediaKind: 'photo' } : null;
|
|
166
|
+
}
|
|
167
|
+
return null;
|
|
168
|
+
};
|
|
169
|
+
return {
|
|
170
|
+
id: cfg.id,
|
|
171
|
+
title: cfg.title,
|
|
172
|
+
async list(ctx, opts) {
|
|
173
|
+
// `all` ⇒ no catalogue type filter, then drop non-image/video below.
|
|
174
|
+
const type = opts.kind === 'image' ? 'image' : opts.kind === 'video' ? 'video' : undefined;
|
|
175
|
+
const page = await cfg.catalogue.list(ctx, {
|
|
176
|
+
type,
|
|
177
|
+
tag: opts.tag,
|
|
178
|
+
query: opts.query,
|
|
179
|
+
cursor: opts.cursor,
|
|
180
|
+
limit: opts.limit,
|
|
181
|
+
sort: opts.sort,
|
|
182
|
+
});
|
|
183
|
+
const items = await Promise.all(page.items.map((f) => toMedia(ctx, f)));
|
|
184
|
+
return {
|
|
185
|
+
items: items.filter((m) => m !== null),
|
|
186
|
+
nextCursor: page.nextCursor,
|
|
187
|
+
};
|
|
188
|
+
},
|
|
189
|
+
async resolve(ctx, itemId) {
|
|
190
|
+
const file = await cfg.catalogue.get(ctx, itemId);
|
|
191
|
+
return file ? toMedia(ctx, file) : null;
|
|
192
|
+
},
|
|
193
|
+
async tags(ctx) {
|
|
194
|
+
return (await cfg.catalogue.tagFacets(ctx)).map((f) => f.tag);
|
|
195
|
+
},
|
|
196
|
+
async remove(ctx, itemId) {
|
|
197
|
+
await cfg.catalogue.trash(ctx, itemId);
|
|
198
|
+
},
|
|
199
|
+
async recordView(ctx, itemId) {
|
|
200
|
+
await cfg.catalogue.recordView(ctx, itemId);
|
|
201
|
+
},
|
|
202
|
+
};
|
|
203
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import type { Database } from 'bun:sqlite';
|
|
2
|
+
import { type MediaCtx, type MediaStore } from '../types';
|
|
3
|
+
import { type ProcessOptions, type ProcessResult } from '../videoProcessor';
|
|
4
|
+
import { type FileCatalogue, type PrivateFileCatalogue } from './types';
|
|
5
|
+
/** Swappable video ingest→derivatives implementation. The default runs ffmpeg
|
|
6
|
+
* locally ({@link processVideo}); a remote backend (binary-server) delegates
|
|
7
|
+
* the heavy work to the storage host instead — see binaryServerProcessing. */
|
|
8
|
+
export type VideoProcessor = (opts: ProcessOptions) => Promise<ProcessResult>;
|
|
9
|
+
/** Everything an image-derivative implementation needs to produce the grid
|
|
10
|
+
* thumbnail (posterKey, 512px JPEG) and — for formats browsers can't render —
|
|
11
|
+
* the full-size display JPEG (displayKey). */
|
|
12
|
+
export type ImageDerivativesOptions = {
|
|
13
|
+
store: MediaStore;
|
|
14
|
+
workDir: string;
|
|
15
|
+
owner: string;
|
|
16
|
+
id: string;
|
|
17
|
+
mime: string;
|
|
18
|
+
/** Storage key of the uploaded original. */
|
|
19
|
+
binaryKey: string;
|
|
20
|
+
/** Where the 512px grid thumbnail JPEG goes. */
|
|
21
|
+
posterKey: string;
|
|
22
|
+
/** Where the full-size browser-safe JPEG goes (only when `needsDisplay`). */
|
|
23
|
+
displayKey: string;
|
|
24
|
+
/** True when the original's format isn't browser-renderable (HEIC/HEIF). */
|
|
25
|
+
needsDisplay: boolean;
|
|
26
|
+
};
|
|
27
|
+
/** Swappable image thumbnail/display derivative implementation (local sharp/
|
|
28
|
+
* ffmpeg by default; remote binary-server job when the bytes live there). */
|
|
29
|
+
export type ImageDerivatives = (opts: ImageDerivativesOptions) => Promise<{
|
|
30
|
+
hasThumbnail: boolean;
|
|
31
|
+
}>;
|
|
32
|
+
export declare const fileBinaryKey: (owner: string, id: string) => string;
|
|
33
|
+
/** Where a file's uploaded bytes must land for `registerUploaded` to find them: a video's raw
|
|
34
|
+
* source (fed to the transcode), else the primary binary. The chunked-upload path targets this key
|
|
35
|
+
* so an out-of-band upload lands exactly where the catalogue + serve routes expect it. */
|
|
36
|
+
export declare const catalogueUploadKey: (owner: string, id: string, mime: string) => string;
|
|
37
|
+
export type SqliteFileCatalogueOptions = {
|
|
38
|
+
db: Database;
|
|
39
|
+
store: MediaStore;
|
|
40
|
+
/** ffmpeg scratch dir for video processing. */
|
|
41
|
+
workDir: string;
|
|
42
|
+
/** HLS ladder heights for video ingest. */
|
|
43
|
+
ladderHeights?: number[];
|
|
44
|
+
/** Max transcode kicks per file (initial + recoverProcessing re-kicks) before the row is marked
|
|
45
|
+
* failed instead of re-kicked. Guards against a boot loop where the transcode itself kills the
|
|
46
|
+
* process (e.g. ffmpeg OOM on a small host) and every restart re-kicks the same job. Default 3. */
|
|
47
|
+
maxProcessingAttempts?: number;
|
|
48
|
+
/** Transcode uploaded videos into derivatives (faststart MP4 + HLS + poster + sprites).
|
|
49
|
+
* `false` skips ffmpeg entirely and marks videos ready to play raw (progressive Range) — the
|
|
50
|
+
* same graceful path as ffmpeg-unavailable. `'poster'` is the memory-constrained middle ground:
|
|
51
|
+
* skip the heavy HLS/re-encode ladder but still extract a cheap single-frame poster (grid gets
|
|
52
|
+
* thumbnails; raw source plays). Set `false`/`'poster'` on hosts where a full transcode can OOM
|
|
53
|
+
* the process. Default true. */
|
|
54
|
+
transcodeVideos?: boolean | 'poster';
|
|
55
|
+
/** Owner keyspace segment. Defaults to tenantId (a tenant-shared library). */
|
|
56
|
+
owner?: (ctx: MediaCtx) => string;
|
|
57
|
+
/** Injectable clock (tests). */
|
|
58
|
+
now?: () => number;
|
|
59
|
+
/** Per-row shuffle key generator for the `random` sort (a non-negative 31-bit int). Injectable
|
|
60
|
+
* for deterministic tests; defaults to a random 31-bit value per inserted file. */
|
|
61
|
+
randKey?: () => number;
|
|
62
|
+
/** Session shuffle-seed minter for the `random` sort's first page (a non-negative 31-bit int).
|
|
63
|
+
* Injectable for deterministic tests; defaults to a random 31-bit value. */
|
|
64
|
+
randomSeed?: () => number;
|
|
65
|
+
/** Video ingest→derivatives implementation (default: local ffmpeg via
|
|
66
|
+
* {@link processVideo}). Inject a remote one when the byte store is remote. */
|
|
67
|
+
videoProcessor?: VideoProcessor;
|
|
68
|
+
/** Image thumbnail/display derivative implementation (default: local sharp
|
|
69
|
+
* with ffmpeg fallback). Inject a remote one when the byte store is remote. */
|
|
70
|
+
imageDerivatives?: ImageDerivatives;
|
|
71
|
+
};
|
|
72
|
+
export declare function createSqliteFileCatalogue(opts: SqliteFileCatalogueOptions): FileCatalogue & PrivateFileCatalogue;
|