@de-otio/trellis 0.7.0 → 0.9.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 +661 -0
- package/dist/db.js +10 -18
- package/dist/db.js.map +1 -1
- package/dist/env.d.ts +66 -6
- package/dist/env.d.ts.map +1 -1
- package/dist/env.js +89 -70
- package/dist/env.js.map +1 -1
- package/dist/extensions.js +3 -8
- package/dist/extensions.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -9
- package/dist/index.js.map +1 -1
- package/dist/lambda/cleanup-cron.d.ts.map +1 -1
- package/dist/lambda/cleanup-cron.js +20 -24
- package/dist/lambda/cleanup-cron.js.map +1 -1
- package/dist/lambda/create-auth-challenge.d.ts.map +1 -1
- package/dist/lambda/create-auth-challenge.js +17 -19
- package/dist/lambda/create-auth-challenge.js.map +1 -1
- package/dist/lambda/custom-message.js +1 -5
- package/dist/lambda/custom-message.js.map +1 -1
- package/dist/lambda/define-auth-challenge.js +1 -5
- package/dist/lambda/define-auth-challenge.js.map +1 -1
- package/dist/lambda/delete-account-worker.d.ts.map +1 -1
- package/dist/lambda/delete-account-worker.js +25 -58
- package/dist/lambda/delete-account-worker.js.map +1 -1
- package/dist/lambda/diagnostics-proxy.d.ts.map +1 -1
- package/dist/lambda/diagnostics-proxy.js +14 -49
- package/dist/lambda/diagnostics-proxy.js.map +1 -1
- package/dist/lambda/e2e-sweeper.d.ts.map +1 -1
- package/dist/lambda/e2e-sweeper.js +30 -38
- package/dist/lambda/e2e-sweeper.js.map +1 -1
- package/dist/lambda/federation-outbox-worker.d.ts.map +1 -1
- package/dist/lambda/federation-outbox-worker.js +4 -6
- package/dist/lambda/federation-outbox-worker.js.map +1 -1
- package/dist/lambda/followers-events-worker.d.ts.map +1 -1
- package/dist/lambda/followers-events-worker.js +4 -6
- package/dist/lambda/followers-events-worker.js.map +1 -1
- package/dist/lambda/hourly-cron.d.ts.map +1 -1
- package/dist/lambda/hourly-cron.js +100 -32
- package/dist/lambda/hourly-cron.js.map +1 -1
- package/dist/lambda/link-check-worker.d.ts.map +1 -1
- package/dist/lambda/link-check-worker.js +4 -6
- package/dist/lambda/link-check-worker.js.map +1 -1
- package/dist/lambda/maintenance-cron.d.ts.map +1 -1
- package/dist/lambda/maintenance-cron.js +30 -63
- package/dist/lambda/maintenance-cron.js.map +1 -1
- package/dist/lambda/media-processing-worker.d.ts.map +1 -1
- package/dist/lambda/media-processing-worker.js +11 -46
- package/dist/lambda/media-processing-worker.js.map +1 -1
- package/dist/lambda/media-reconciliation-worker.d.ts.map +1 -1
- package/dist/lambda/media-reconciliation-worker.js +4 -6
- package/dist/lambda/media-reconciliation-worker.js.map +1 -1
- package/dist/lambda/nightly-cron.d.ts.map +1 -1
- package/dist/lambda/nightly-cron.js +67 -112
- package/dist/lambda/nightly-cron.js.map +1 -1
- package/dist/lambda/post-confirmation.d.ts.map +1 -1
- package/dist/lambda/post-confirmation.js +147 -45
- package/dist/lambda/post-confirmation.js.map +1 -1
- package/dist/lambda/pre-signup.js +7 -11
- package/dist/lambda/pre-signup.js.map +1 -1
- package/dist/lambda/pre-token-generation.d.ts.map +1 -1
- package/dist/lambda/pre-token-generation.js +27 -35
- package/dist/lambda/pre-token-generation.js.map +1 -1
- package/dist/lambda/tools/check-health.js +1 -5
- package/dist/lambda/tools/check-health.js.map +1 -1
- package/dist/lambda/tools/describe-services.js +4 -8
- package/dist/lambda/tools/describe-services.js.map +1 -1
- package/dist/lambda/tools/get-cost-report.js +4 -8
- package/dist/lambda/tools/get-cost-report.js.map +1 -1
- package/dist/lambda/tools/get-errors.js +5 -9
- package/dist/lambda/tools/get-errors.js.map +1 -1
- package/dist/lambda/tools/get-feature-flags.js +4 -8
- package/dist/lambda/tools/get-feature-flags.js.map +1 -1
- package/dist/lambda/tools/get-queue-status.js +5 -9
- package/dist/lambda/tools/get-queue-status.js.map +1 -1
- package/dist/lambda/tools/search-logs.js +5 -9
- package/dist/lambda/tools/search-logs.js.map +1 -1
- package/dist/lambda/tools/send-alert.js +4 -8
- package/dist/lambda/tools/send-alert.js.map +1 -1
- package/dist/lambda/verify-auth-challenge.d.ts.map +1 -1
- package/dist/lambda/verify-auth-challenge.js +10 -12
- package/dist/lambda/verify-auth-challenge.js.map +1 -1
- package/dist/lib/abuse-metrics.d.ts.map +1 -1
- package/dist/lib/abuse-metrics.js +10 -13
- package/dist/lib/abuse-metrics.js.map +1 -1
- package/dist/lib/activitypub/activity-processor.d.ts +1 -1
- package/dist/lib/activitypub/activity-processor.d.ts.map +1 -1
- package/dist/lib/activitypub/activity-processor.js +9 -43
- package/dist/lib/activitypub/activity-processor.js.map +1 -1
- package/dist/lib/activitypub/activity-service.js +1 -5
- package/dist/lib/activitypub/activity-service.js.map +1 -1
- package/dist/lib/activitypub/actor.d.ts +1 -1
- package/dist/lib/activitypub/actor.d.ts.map +1 -1
- package/dist/lib/activitypub/actor.js +1 -5
- package/dist/lib/activitypub/actor.js.map +1 -1
- package/dist/lib/activitypub/audience-service.d.ts +2 -2
- package/dist/lib/activitypub/audience-service.d.ts.map +1 -1
- package/dist/lib/activitypub/audience-service.js +8 -12
- package/dist/lib/activitypub/audience-service.js.map +1 -1
- package/dist/lib/activitypub/crypto.d.ts +1 -1
- package/dist/lib/activitypub/crypto.d.ts.map +1 -1
- package/dist/lib/activitypub/crypto.js +3 -41
- package/dist/lib/activitypub/crypto.js.map +1 -1
- package/dist/lib/activitypub/delivery-service.d.ts +5 -5
- package/dist/lib/activitypub/delivery-service.d.ts.map +1 -1
- package/dist/lib/activitypub/delivery-service.js +10 -47
- package/dist/lib/activitypub/delivery-service.js.map +1 -1
- package/dist/lib/activitypub/dispatchers/entity-actor.d.ts +3 -2
- package/dist/lib/activitypub/dispatchers/entity-actor.d.ts.map +1 -1
- package/dist/lib/activitypub/dispatchers/entity-actor.js +19 -23
- package/dist/lib/activitypub/dispatchers/entity-actor.js.map +1 -1
- package/dist/lib/activitypub/dispatchers/group-actor.d.ts +3 -2
- package/dist/lib/activitypub/dispatchers/group-actor.d.ts.map +1 -1
- package/dist/lib/activitypub/dispatchers/group-actor.js +19 -23
- package/dist/lib/activitypub/dispatchers/group-actor.js.map +1 -1
- package/dist/lib/activitypub/dispatchers/user-actor.d.ts +3 -2
- package/dist/lib/activitypub/dispatchers/user-actor.d.ts.map +1 -1
- package/dist/lib/activitypub/dispatchers/user-actor.js +16 -20
- package/dist/lib/activitypub/dispatchers/user-actor.js.map +1 -1
- package/dist/lib/activitypub/dm-service.js +1 -5
- package/dist/lib/activitypub/dm-service.js.map +1 -1
- package/dist/lib/activitypub/entity-profile-service.d.ts +1 -1
- package/dist/lib/activitypub/entity-profile-service.d.ts.map +1 -1
- package/dist/lib/activitypub/entity-profile-service.js +6 -10
- package/dist/lib/activitypub/entity-profile-service.js.map +1 -1
- package/dist/lib/activitypub/fedify/config.d.ts +3 -3
- package/dist/lib/activitypub/fedify/config.d.ts.map +1 -1
- package/dist/lib/activitypub/fedify/config.js +5 -8
- package/dist/lib/activitypub/fedify/config.js.map +1 -1
- package/dist/lib/activitypub/fedify/context.d.ts +1 -1
- package/dist/lib/activitypub/fedify/context.d.ts.map +1 -1
- package/dist/lib/activitypub/fedify/context.js +8 -12
- package/dist/lib/activitypub/fedify/context.js.map +1 -1
- package/dist/lib/activitypub/fedify/runtime.d.ts +1 -1
- package/dist/lib/activitypub/fedify/runtime.d.ts.map +1 -1
- package/dist/lib/activitypub/fedify/runtime.js +3 -6
- package/dist/lib/activitypub/fedify/runtime.js.map +1 -1
- package/dist/lib/activitypub/friendship-service.js +1 -5
- package/dist/lib/activitypub/friendship-service.js.map +1 -1
- package/dist/lib/activitypub/group-service.d.ts +1 -1
- package/dist/lib/activitypub/group-service.d.ts.map +1 -1
- package/dist/lib/activitypub/group-service.js +9 -46
- package/dist/lib/activitypub/group-service.js.map +1 -1
- package/dist/lib/activitypub/http-signatures.js +8 -45
- package/dist/lib/activitypub/http-signatures.js.map +1 -1
- package/dist/lib/activitypub/jsonld.d.ts +1 -1
- package/dist/lib/activitypub/jsonld.d.ts.map +1 -1
- package/dist/lib/activitypub/jsonld.js +1 -5
- package/dist/lib/activitypub/jsonld.js.map +1 -1
- package/dist/lib/activitypub/listeners/friends-collection.d.ts +1 -1
- package/dist/lib/activitypub/listeners/friends-collection.d.ts.map +1 -1
- package/dist/lib/activitypub/listeners/friends-collection.js +17 -20
- package/dist/lib/activitypub/listeners/friends-collection.js.map +1 -1
- package/dist/lib/activitypub/listeners/http-signatures.d.ts +1 -1
- package/dist/lib/activitypub/listeners/http-signatures.d.ts.map +1 -1
- package/dist/lib/activitypub/listeners/http-signatures.js +9 -46
- package/dist/lib/activitypub/listeners/http-signatures.js.map +1 -1
- package/dist/lib/activitypub/listeners/inbox.d.ts +2 -2
- package/dist/lib/activitypub/listeners/inbox.d.ts.map +1 -1
- package/dist/lib/activitypub/listeners/inbox.js +31 -35
- package/dist/lib/activitypub/listeners/inbox.js.map +1 -1
- package/dist/lib/activitypub/listeners/outbox.d.ts +1 -1
- package/dist/lib/activitypub/listeners/outbox.d.ts.map +1 -1
- package/dist/lib/activitypub/listeners/outbox.js +17 -20
- package/dist/lib/activitypub/listeners/outbox.js.map +1 -1
- package/dist/lib/activitypub/remote-fetch-service.d.ts +6 -6
- package/dist/lib/activitypub/remote-fetch-service.d.ts.map +1 -1
- package/dist/lib/activitypub/remote-fetch-service.js +6 -10
- package/dist/lib/activitypub/remote-fetch-service.js.map +1 -1
- package/dist/lib/activitypub/services/abuse-prevention.d.ts +1 -1
- package/dist/lib/activitypub/services/abuse-prevention.d.ts.map +1 -1
- package/dist/lib/activitypub/services/abuse-prevention.js +11 -17
- package/dist/lib/activitypub/services/abuse-prevention.js.map +1 -1
- package/dist/lib/activitypub/services/dm-service-fedify.d.ts +4 -4
- package/dist/lib/activitypub/services/dm-service-fedify.d.ts.map +1 -1
- package/dist/lib/activitypub/services/dm-service-fedify.js +24 -59
- package/dist/lib/activitypub/services/dm-service-fedify.js.map +1 -1
- package/dist/lib/activitypub/services/fedify-converters.d.ts +2 -2
- package/dist/lib/activitypub/services/fedify-converters.d.ts.map +1 -1
- package/dist/lib/activitypub/services/fedify-converters.js +3 -8
- package/dist/lib/activitypub/services/fedify-converters.js.map +1 -1
- package/dist/lib/activitypub/services/fedify-delivery.d.ts +2 -2
- package/dist/lib/activitypub/services/fedify-delivery.d.ts.map +1 -1
- package/dist/lib/activitypub/services/fedify-delivery.js +19 -56
- package/dist/lib/activitypub/services/fedify-delivery.js.map +1 -1
- package/dist/lib/activitypub/services/follow-activity-service.d.ts +2 -2
- package/dist/lib/activitypub/services/follow-activity-service.d.ts.map +1 -1
- package/dist/lib/activitypub/services/follow-activity-service.js +8 -12
- package/dist/lib/activitypub/services/follow-activity-service.js.map +1 -1
- package/dist/lib/activitypub/services/post-service-fedify.d.ts +2 -2
- package/dist/lib/activitypub/services/post-service-fedify.d.ts.map +1 -1
- package/dist/lib/activitypub/services/post-service-fedify.js +33 -65
- package/dist/lib/activitypub/services/post-service-fedify.js.map +1 -1
- package/dist/lib/activitypub/services/remote-activity-handler.d.ts +2 -2
- package/dist/lib/activitypub/services/remote-activity-handler.d.ts.map +1 -1
- package/dist/lib/activitypub/services/remote-activity-handler.js +25 -28
- package/dist/lib/activitypub/services/remote-activity-handler.js.map +1 -1
- package/dist/lib/activitypub/standalone-mode.d.ts +1 -1
- package/dist/lib/activitypub/standalone-mode.d.ts.map +1 -1
- package/dist/lib/activitypub/standalone-mode.js +13 -50
- package/dist/lib/activitypub/standalone-mode.js.map +1 -1
- package/dist/lib/activitypub/webfinger/server.d.ts +1 -1
- package/dist/lib/activitypub/webfinger/server.d.ts.map +1 -1
- package/dist/lib/activitypub/webfinger/server.js +18 -54
- package/dist/lib/activitypub/webfinger/server.js.map +1 -1
- package/dist/lib/age-gate-middleware.d.ts +4 -4
- package/dist/lib/age-gate-middleware.d.ts.map +1 -1
- package/dist/lib/age-gate-middleware.js +3 -6
- package/dist/lib/age-gate-middleware.js.map +1 -1
- package/dist/lib/age-gate.js +3 -8
- package/dist/lib/age-gate.js.map +1 -1
- package/dist/lib/age-tier-transition.d.ts +1 -1
- package/dist/lib/age-tier-transition.d.ts.map +1 -1
- package/dist/lib/age-tier-transition.js +7 -44
- package/dist/lib/age-tier-transition.js.map +1 -1
- package/dist/lib/app.d.ts +76 -0
- package/dist/lib/app.d.ts.map +1 -0
- package/dist/lib/app.js +400 -0
- package/dist/lib/app.js.map +1 -0
- package/dist/lib/audit/csv-export.js +6 -13
- package/dist/lib/audit/csv-export.js.map +1 -1
- package/dist/lib/audit/pii-filter.d.ts +9 -0
- package/dist/lib/audit/pii-filter.d.ts.map +1 -1
- package/dist/lib/audit/pii-filter.js +57 -7
- package/dist/lib/audit/pii-filter.js.map +1 -1
- package/dist/lib/audit-actions.d.ts +94 -0
- package/dist/lib/audit-actions.d.ts.map +1 -0
- package/dist/lib/audit-actions.js +107 -0
- package/dist/lib/audit-actions.js.map +1 -0
- package/dist/lib/audit-composer.d.ts +174 -0
- package/dist/lib/audit-composer.d.ts.map +1 -0
- package/dist/lib/audit-composer.js +421 -0
- package/dist/lib/audit-composer.js.map +1 -0
- package/dist/lib/auth/auth-context.d.ts +1 -1
- package/dist/lib/auth/auth-context.js +1 -2
- package/dist/lib/auth/auth-context.js.map +1 -1
- package/dist/lib/auth/auth-middleware.d.ts +16 -2
- package/dist/lib/auth/auth-middleware.d.ts.map +1 -1
- package/dist/lib/auth/auth-middleware.js +36 -45
- package/dist/lib/auth/auth-middleware.js.map +1 -1
- package/dist/lib/auth/capabilities.js +2 -5
- package/dist/lib/auth/capabilities.js.map +1 -1
- package/dist/lib/auth/claims-cache.d.ts +2 -2
- package/dist/lib/auth/claims-cache.js +19 -24
- package/dist/lib/auth/claims-cache.js.map +1 -1
- package/dist/lib/auth/cognito-jwt.d.ts +20 -2
- package/dist/lib/auth/cognito-jwt.d.ts.map +1 -1
- package/dist/lib/auth/cognito-jwt.js +83 -23
- package/dist/lib/auth/cognito-jwt.js.map +1 -1
- package/dist/lib/auth/idp-redirect-builder.d.ts +1 -1
- package/dist/lib/auth/idp-redirect-builder.d.ts.map +1 -1
- package/dist/lib/auth/idp-redirect-builder.js +4 -10
- package/dist/lib/auth/idp-redirect-builder.js.map +1 -1
- package/dist/lib/auth/require.d.ts +4 -4
- package/dist/lib/auth/require.d.ts.map +1 -1
- package/dist/lib/auth/require.js +11 -18
- package/dist/lib/auth/require.js.map +1 -1
- package/dist/lib/auth/role-grants.d.ts +1 -1
- package/dist/lib/auth/role-grants.d.ts.map +1 -1
- package/dist/lib/auth/role-grants.js +28 -31
- package/dist/lib/auth/role-grants.js.map +1 -1
- package/dist/lib/auth-context-manager.js +1 -5
- package/dist/lib/auth-context-manager.js.map +1 -1
- package/dist/lib/auth-handler.d.ts +5 -5
- package/dist/lib/auth-handler.d.ts.map +1 -1
- package/dist/lib/auth-handler.js +5 -9
- package/dist/lib/auth-handler.js.map +1 -1
- package/dist/lib/badge-handler.d.ts +1 -1
- package/dist/lib/badge-handler.d.ts.map +1 -1
- package/dist/lib/badge-handler.js +14 -52
- package/dist/lib/badge-handler.js.map +1 -1
- package/dist/lib/circle-handler.d.ts +10 -10
- package/dist/lib/circle-handler.d.ts.map +1 -1
- package/dist/lib/circle-handler.js +10 -47
- package/dist/lib/circle-handler.js.map +1 -1
- package/dist/lib/cognito/idp-sdk.js +11 -18
- package/dist/lib/cognito/idp-sdk.js.map +1 -1
- package/dist/lib/cognito/issuer-probe.js +9 -14
- package/dist/lib/cognito/issuer-probe.js.map +1 -1
- package/dist/lib/comment-handler.d.ts +10 -10
- package/dist/lib/comment-handler.d.ts.map +1 -1
- package/dist/lib/comment-handler.js +61 -97
- package/dist/lib/comment-handler.js.map +1 -1
- package/dist/lib/compliance/baseline.d.ts +2 -2
- package/dist/lib/compliance/baseline.d.ts.map +1 -1
- package/dist/lib/compliance/baseline.js +15 -18
- package/dist/lib/compliance/baseline.js.map +1 -1
- package/dist/lib/compliance/tenant-merge.d.ts +1 -1
- package/dist/lib/compliance/tenant-merge.d.ts.map +1 -1
- package/dist/lib/compliance/tenant-merge.js +1 -4
- package/dist/lib/compliance/tenant-merge.js.map +1 -1
- package/dist/lib/compliance/types.d.ts +1 -1
- package/dist/lib/compliance/types.js +2 -3
- package/dist/lib/compliance/types.js.map +1 -1
- package/dist/lib/connection-code-handler.d.ts +7 -7
- package/dist/lib/connection-code-handler.d.ts.map +1 -1
- package/dist/lib/connection-code-handler.js +13 -50
- package/dist/lib/connection-code-handler.js.map +1 -1
- package/dist/lib/content-discovery.d.ts +1 -1
- package/dist/lib/content-discovery.d.ts.map +1 -1
- package/dist/lib/content-discovery.js +15 -52
- package/dist/lib/content-discovery.js.map +1 -1
- package/dist/lib/context-aware-data-access.d.ts +1 -1
- package/dist/lib/context-aware-data-access.d.ts.map +1 -1
- package/dist/lib/context-aware-data-access.js +1 -5
- package/dist/lib/context-aware-data-access.js.map +1 -1
- package/dist/lib/cors-handler.d.ts +1 -1
- package/dist/lib/cors-handler.d.ts.map +1 -1
- package/dist/lib/cors-handler.js +13 -17
- package/dist/lib/cors-handler.js.map +1 -1
- package/dist/lib/cost-accumulator.d.ts.map +1 -1
- package/dist/lib/cost-accumulator.js +7 -11
- package/dist/lib/cost-accumulator.js.map +1 -1
- package/dist/lib/crypto/voting/elgamal-encryption.js +1 -5
- package/dist/lib/crypto/voting/elgamal-encryption.js.map +1 -1
- package/dist/lib/crypto/voting/encryption-scheme.js +1 -2
- package/dist/lib/crypto/voting/encryption-scheme.js.map +1 -1
- package/dist/lib/crypto/voting/hash-utils.js +6 -12
- package/dist/lib/crypto/voting/hash-utils.js.map +1 -1
- package/dist/lib/crypto/voting/hybrid-encryption.js +5 -9
- package/dist/lib/crypto/voting/hybrid-encryption.js.map +1 -1
- package/dist/lib/crypto/voting/index.js +4 -14
- package/dist/lib/crypto/voting/index.js.map +1 -1
- package/dist/lib/crypto/voting/post-quantum-encryption.js +1 -5
- package/dist/lib/crypto/voting/post-quantum-encryption.js.map +1 -1
- package/dist/lib/csrf.d.ts +2 -2
- package/dist/lib/csrf.d.ts.map +1 -1
- package/dist/lib/csrf.js +1 -5
- package/dist/lib/csrf.js.map +1 -1
- package/dist/lib/data-router.d.ts +5 -4
- package/dist/lib/data-router.d.ts.map +1 -1
- package/dist/lib/data-router.js +60 -90
- package/dist/lib/data-router.js.map +1 -1
- package/dist/lib/database-circuit-breaker.d.ts +61 -34
- package/dist/lib/database-circuit-breaker.d.ts.map +1 -1
- package/dist/lib/database-circuit-breaker.js +102 -109
- package/dist/lib/database-circuit-breaker.js.map +1 -1
- package/dist/lib/database-config.js +1 -4
- package/dist/lib/database-config.js.map +1 -1
- package/dist/lib/database-connection-manager.d.ts +42 -2
- package/dist/lib/database-connection-manager.d.ts.map +1 -1
- package/dist/lib/database-connection-manager.js +178 -74
- package/dist/lib/database-connection-manager.js.map +1 -1
- package/dist/lib/database-monitor.d.ts +1 -1
- package/dist/lib/database-monitor.d.ts.map +1 -1
- package/dist/lib/database-monitor.js +5 -9
- package/dist/lib/database-monitor.js.map +1 -1
- package/dist/lib/database-rate-limiter.d.ts +1 -1
- package/dist/lib/database-rate-limiter.d.ts.map +1 -1
- package/dist/lib/database-rate-limiter.js +3 -7
- package/dist/lib/database-rate-limiter.js.map +1 -1
- package/dist/lib/database-wrapper-helper.d.ts +2 -2
- package/dist/lib/database-wrapper-helper.d.ts.map +1 -1
- package/dist/lib/database-wrapper-helper.js +7 -11
- package/dist/lib/database-wrapper-helper.js.map +1 -1
- package/dist/lib/database-wrapper.d.ts +1 -1
- package/dist/lib/database-wrapper.d.ts.map +1 -1
- package/dist/lib/database-wrapper.js +5 -9
- package/dist/lib/database-wrapper.js.map +1 -1
- package/dist/lib/db-query-helper.d.ts +3 -3
- package/dist/lib/db-query-helper.d.ts.map +1 -1
- package/dist/lib/db-query-helper.js +4 -9
- package/dist/lib/db-query-helper.js.map +1 -1
- package/dist/lib/discovery-exposure.d.ts +42 -0
- package/dist/lib/discovery-exposure.d.ts.map +1 -0
- package/dist/lib/discovery-exposure.js +89 -0
- package/dist/lib/discovery-exposure.js.map +1 -0
- package/dist/lib/discovery-handler.d.ts +6 -6
- package/dist/lib/discovery-handler.d.ts.map +1 -1
- package/dist/lib/discovery-handler.js +10 -43
- package/dist/lib/discovery-handler.js.map +1 -1
- package/dist/lib/domain-reputation-service.d.ts +1 -1
- package/dist/lib/domain-reputation-service.d.ts.map +1 -1
- package/dist/lib/domain-reputation-service.js +12 -15
- package/dist/lib/domain-reputation-service.js.map +1 -1
- package/dist/lib/email-privacy.js +4 -8
- package/dist/lib/email-privacy.js.map +1 -1
- package/dist/lib/email-provider.d.ts +2 -2
- package/dist/lib/email-provider.d.ts.map +1 -1
- package/dist/lib/email-provider.js +8 -16
- package/dist/lib/email-provider.js.map +1 -1
- package/dist/lib/entity-handler.d.ts +5 -6
- package/dist/lib/entity-handler.d.ts.map +1 -1
- package/dist/lib/entity-handler.js +45 -80
- package/dist/lib/entity-handler.js.map +1 -1
- package/dist/lib/entity-relationship-handler.d.ts +9 -9
- package/dist/lib/entity-relationship-handler.d.ts.map +1 -1
- package/dist/lib/entity-relationship-handler.js +14 -51
- package/dist/lib/entity-relationship-handler.js.map +1 -1
- package/dist/lib/entity-tagging-errors.js +4 -11
- package/dist/lib/entity-tagging-errors.js.map +1 -1
- package/dist/lib/entity-tagging-validator.d.ts +3 -3
- package/dist/lib/entity-tagging-validator.d.ts.map +1 -1
- package/dist/lib/entity-tagging-validator.js +6 -11
- package/dist/lib/entity-tagging-validator.js.map +1 -1
- package/dist/lib/exif-stripper.js +1 -4
- package/dist/lib/exif-stripper.js.map +1 -1
- package/dist/lib/extension-context.d.ts +2 -2
- package/dist/lib/extension-context.d.ts.map +1 -1
- package/dist/lib/extension-context.js +1 -4
- package/dist/lib/extension-context.js.map +1 -1
- package/dist/lib/extension-route-wrapper.d.ts +1 -1
- package/dist/lib/extension-route-wrapper.d.ts.map +1 -1
- package/dist/lib/extension-route-wrapper.js +17 -55
- package/dist/lib/extension-route-wrapper.js.map +1 -1
- package/dist/lib/extension-validator.js +3 -6
- package/dist/lib/extension-validator.js.map +1 -1
- package/dist/lib/feature-flags.d.ts +5 -2
- package/dist/lib/feature-flags.d.ts.map +1 -1
- package/dist/lib/feature-flags.js +15 -48
- package/dist/lib/feature-flags.js.map +1 -1
- package/dist/lib/feature-toggle-global-client.d.ts +6 -0
- package/dist/lib/feature-toggle-global-client.d.ts.map +1 -0
- package/dist/lib/feature-toggle-global-client.js +73 -0
- package/dist/lib/feature-toggle-global-client.js.map +1 -0
- package/dist/lib/feature-toggle-service.d.ts +137 -27
- package/dist/lib/feature-toggle-service.d.ts.map +1 -1
- package/dist/lib/feature-toggle-service.js +302 -119
- package/dist/lib/feature-toggle-service.js.map +1 -1
- package/dist/lib/feed-handler.d.ts +8 -8
- package/dist/lib/feed-handler.d.ts.map +1 -1
- package/dist/lib/feed-handler.js +33 -62
- package/dist/lib/feed-handler.js.map +1 -1
- package/dist/lib/feed-pagination.d.ts +26 -0
- package/dist/lib/feed-pagination.d.ts.map +1 -1
- package/dist/lib/feed-pagination.js +31 -11
- package/dist/lib/feed-pagination.js.map +1 -1
- package/dist/lib/feed-personalization.d.ts +1 -1
- package/dist/lib/feed-personalization.d.ts.map +1 -1
- package/dist/lib/feed-personalization.js +6 -43
- package/dist/lib/feed-personalization.js.map +1 -1
- package/dist/lib/followers-events.js +8 -13
- package/dist/lib/followers-events.js.map +1 -1
- package/dist/lib/friends-handler.d.ts +2 -2
- package/dist/lib/friends-handler.d.ts.map +1 -1
- package/dist/lib/friends-handler.js +9 -46
- package/dist/lib/friends-handler.js.map +1 -1
- package/dist/lib/geo/entity-geo-repository.d.ts +67 -0
- package/dist/lib/geo/entity-geo-repository.d.ts.map +1 -0
- package/dist/lib/geo/entity-geo-repository.js +91 -0
- package/dist/lib/geo/entity-geo-repository.js.map +1 -0
- package/dist/lib/graph/errors.d.ts.map +1 -1
- package/dist/lib/graph/errors.js +13 -18
- package/dist/lib/graph/errors.js.map +1 -1
- package/dist/lib/graph/graph-factory.d.ts +12 -53
- package/dist/lib/graph/graph-factory.d.ts.map +1 -1
- package/dist/lib/graph/graph-factory.js +67 -162
- package/dist/lib/graph/graph-factory.js.map +1 -1
- package/dist/lib/graph/graph-service.d.ts +1 -1
- package/dist/lib/graph/graph-service.d.ts.map +1 -1
- package/dist/lib/graph/graph-service.js +1 -2
- package/dist/lib/graph/graph-service.js.map +1 -1
- package/dist/lib/graph/index.d.ts +10 -14
- package/dist/lib/graph/index.d.ts.map +1 -1
- package/dist/lib/graph/index.js +12 -46
- package/dist/lib/graph/index.js.map +1 -1
- package/dist/lib/graph/postgres/_shared.d.ts +18 -0
- package/dist/lib/graph/postgres/_shared.d.ts.map +1 -0
- package/dist/lib/graph/postgres/_shared.js +24 -0
- package/dist/lib/graph/postgres/_shared.js.map +1 -0
- package/dist/lib/graph/postgres/circles.d.ts +66 -0
- package/dist/lib/graph/postgres/circles.d.ts.map +1 -0
- package/dist/lib/graph/postgres/circles.js +513 -0
- package/dist/lib/graph/postgres/circles.js.map +1 -0
- package/dist/lib/graph/postgres/discovery.d.ts +165 -0
- package/dist/lib/graph/postgres/discovery.d.ts.map +1 -0
- package/dist/lib/graph/postgres/discovery.js +579 -0
- package/dist/lib/graph/postgres/discovery.js.map +1 -0
- package/dist/lib/graph/postgres/entity-relationships.d.ts +53 -0
- package/dist/lib/graph/postgres/entity-relationships.d.ts.map +1 -0
- package/dist/lib/graph/postgres/entity-relationships.js +304 -0
- package/dist/lib/graph/postgres/entity-relationships.js.map +1 -0
- package/dist/lib/graph/postgres/interaction-events.d.ts +106 -0
- package/dist/lib/graph/postgres/interaction-events.d.ts.map +1 -0
- package/dist/lib/graph/postgres/interaction-events.js +162 -0
- package/dist/lib/graph/postgres/interaction-events.js.map +1 -0
- package/dist/lib/graph/postgres/postgres-graph-service.d.ts +74 -0
- package/dist/lib/graph/postgres/postgres-graph-service.d.ts.map +1 -0
- package/dist/lib/graph/postgres/postgres-graph-service.js +167 -0
- package/dist/lib/graph/postgres/postgres-graph-service.js.map +1 -0
- package/dist/lib/graph/postgres/relationships.d.ts +58 -0
- package/dist/lib/graph/postgres/relationships.d.ts.map +1 -0
- package/dist/lib/graph/postgres/relationships.js +314 -0
- package/dist/lib/graph/postgres/relationships.js.map +1 -0
- package/dist/lib/graph/postgres/scoring.d.ts +74 -0
- package/dist/lib/graph/postgres/scoring.d.ts.map +1 -0
- package/dist/lib/graph/postgres/scoring.js +297 -0
- package/dist/lib/graph/postgres/scoring.js.map +1 -0
- package/dist/lib/graph/postgres/sync.d.ts +149 -0
- package/dist/lib/graph/postgres/sync.d.ts.map +1 -0
- package/dist/lib/graph/postgres/sync.js +269 -0
- package/dist/lib/graph/postgres/sync.js.map +1 -0
- package/dist/lib/graph/scoring-engine.d.ts +7 -1
- package/dist/lib/graph/scoring-engine.d.ts.map +1 -1
- package/dist/lib/graph/scoring-engine.js +29 -35
- package/dist/lib/graph/scoring-engine.js.map +1 -1
- package/dist/lib/graph/types.d.ts +18 -1
- package/dist/lib/graph/types.d.ts.map +1 -1
- package/dist/lib/graph/types.js +1 -2
- package/dist/lib/graph/types.js.map +1 -1
- package/dist/lib/hook-dispatcher.d.ts +1 -1
- package/dist/lib/hook-dispatcher.d.ts.map +1 -1
- package/dist/lib/hook-dispatcher.js +8 -12
- package/dist/lib/hook-dispatcher.js.map +1 -1
- package/dist/lib/input-sanitizer.js +1 -5
- package/dist/lib/input-sanitizer.js.map +1 -1
- package/dist/lib/internal-docs-handler.d.ts +2 -2
- package/dist/lib/internal-docs-handler.d.ts.map +1 -1
- package/dist/lib/internal-docs-handler.js +20 -28
- package/dist/lib/internal-docs-handler.js.map +1 -1
- package/dist/lib/internal-docs-navigation.js +2 -6
- package/dist/lib/internal-docs-navigation.js.map +1 -1
- package/dist/lib/invitation-handler.d.ts +2 -2
- package/dist/lib/invitation-handler.d.ts.map +1 -1
- package/dist/lib/invitation-handler.js +41 -82
- package/dist/lib/invitation-handler.js.map +1 -1
- package/dist/lib/ip-scrubber.js +3 -8
- package/dist/lib/ip-scrubber.js.map +1 -1
- package/dist/lib/link-security-handler.d.ts +3 -2
- package/dist/lib/link-security-handler.d.ts.map +1 -1
- package/dist/lib/link-security-handler.js +8 -44
- package/dist/lib/link-security-handler.js.map +1 -1
- package/dist/lib/logger.d.ts +31 -82
- package/dist/lib/logger.d.ts.map +1 -1
- package/dist/lib/logger.js +43 -185
- package/dist/lib/logger.js.map +1 -1
- package/dist/lib/media-cleanup-handler.d.ts +2 -2
- package/dist/lib/media-cleanup-handler.d.ts.map +1 -1
- package/dist/lib/media-cleanup-handler.js +7 -11
- package/dist/lib/media-cleanup-handler.js.map +1 -1
- package/dist/lib/media-handler.d.ts +1 -1
- package/dist/lib/media-handler.d.ts.map +1 -1
- package/dist/lib/media-handler.js +36 -73
- package/dist/lib/media-handler.js.map +1 -1
- package/dist/lib/media-metadata-extractor.d.ts +1 -1
- package/dist/lib/media-metadata-extractor.d.ts.map +1 -1
- package/dist/lib/media-metadata-extractor.js +3 -7
- package/dist/lib/media-metadata-extractor.js.map +1 -1
- package/dist/lib/media-metrics.d.ts +2 -2
- package/dist/lib/media-metrics.d.ts.map +1 -1
- package/dist/lib/media-metrics.js +3 -7
- package/dist/lib/media-metrics.js.map +1 -1
- package/dist/lib/metadata/index.d.ts +5 -5
- package/dist/lib/metadata/index.d.ts.map +1 -1
- package/dist/lib/metadata/index.js +5 -21
- package/dist/lib/metadata/index.js.map +1 -1
- package/dist/lib/metadata/metadata-config.js +2 -5
- package/dist/lib/metadata/metadata-config.js.map +1 -1
- package/dist/lib/metadata/metadata-errors.js +2 -7
- package/dist/lib/metadata/metadata-errors.js.map +1 -1
- package/dist/lib/metadata/metadata-extractor.d.ts +1 -1
- package/dist/lib/metadata/metadata-extractor.d.ts.map +1 -1
- package/dist/lib/metadata/metadata-extractor.js +42 -82
- package/dist/lib/metadata/metadata-extractor.js.map +1 -1
- package/dist/lib/metadata/metadata-sanitizer.js +17 -24
- package/dist/lib/metadata/metadata-sanitizer.js.map +1 -1
- package/dist/lib/metadata/metadata-schemas.d.ts +16 -100
- package/dist/lib/metadata/metadata-schemas.d.ts.map +1 -1
- package/dist/lib/metadata/metadata-schemas.js +31 -34
- package/dist/lib/metadata/metadata-schemas.js.map +1 -1
- package/dist/lib/mfa/mfa-handler.d.ts +1 -1
- package/dist/lib/mfa/mfa-handler.d.ts.map +1 -1
- package/dist/lib/mfa/mfa-handler.js +13 -17
- package/dist/lib/mfa/mfa-handler.js.map +1 -1
- package/dist/lib/mfa/totp-service.js +8 -18
- package/dist/lib/mfa/totp-service.js.map +1 -1
- package/dist/lib/middleware/comment-rate-limit.d.ts +1 -1
- package/dist/lib/middleware/comment-rate-limit.d.ts.map +1 -1
- package/dist/lib/middleware/comment-rate-limit.js +7 -10
- package/dist/lib/middleware/comment-rate-limit.js.map +1 -1
- package/dist/lib/middleware/feature-toggle-rate-limit.d.ts +1 -1
- package/dist/lib/middleware/feature-toggle-rate-limit.d.ts.map +1 -1
- package/dist/lib/middleware/feature-toggle-rate-limit.js +8 -13
- package/dist/lib/middleware/feature-toggle-rate-limit.js.map +1 -1
- package/dist/lib/middleware/idempotency-store.js +20 -26
- package/dist/lib/middleware/idempotency-store.js.map +1 -1
- package/dist/lib/middleware/idempotency.d.ts +2 -2
- package/dist/lib/middleware/idempotency.d.ts.map +1 -1
- package/dist/lib/middleware/idempotency.js +12 -50
- package/dist/lib/middleware/idempotency.js.map +1 -1
- package/dist/lib/middleware.d.ts +22 -9
- package/dist/lib/middleware.d.ts.map +1 -1
- package/dist/lib/middleware.js +72 -153
- package/dist/lib/middleware.js.map +1 -1
- package/dist/lib/moderation-handler.d.ts +1 -1
- package/dist/lib/moderation-handler.d.ts.map +1 -1
- package/dist/lib/moderation-handler.js +15 -54
- package/dist/lib/moderation-handler.js.map +1 -1
- package/dist/lib/net/trusted-client-ip.d.ts +8 -30
- package/dist/lib/net/trusted-client-ip.d.ts.map +1 -1
- package/dist/lib/net/trusted-client-ip.js +13 -94
- package/dist/lib/net/trusted-client-ip.js.map +1 -1
- package/dist/lib/notification-handler.d.ts +1 -1
- package/dist/lib/notification-handler.d.ts.map +1 -1
- package/dist/lib/notification-handler.js +10 -15
- package/dist/lib/notification-handler.js.map +1 -1
- package/dist/lib/notification-preferences-handler.d.ts +1 -1
- package/dist/lib/notification-preferences-handler.d.ts.map +1 -1
- package/dist/lib/notification-preferences-handler.js +7 -11
- package/dist/lib/notification-preferences-handler.js.map +1 -1
- package/dist/lib/oauth/cognito-issuer.d.ts +1 -1
- package/dist/lib/oauth/cognito-issuer.d.ts.map +1 -1
- package/dist/lib/oauth/cognito-issuer.js +5 -10
- package/dist/lib/oauth/cognito-issuer.js.map +1 -1
- package/dist/lib/oauth/device-authorization.d.ts +1 -1
- package/dist/lib/oauth/device-authorization.d.ts.map +1 -1
- package/dist/lib/oauth/device-authorization.js +62 -77
- package/dist/lib/oauth/device-authorization.js.map +1 -1
- package/dist/lib/oauth/envelope-crypto.d.ts +2 -2
- package/dist/lib/oauth/envelope-crypto.js +22 -34
- package/dist/lib/oauth/envelope-crypto.js.map +1 -1
- package/dist/lib/oauth/refresh-detection.js +42 -52
- package/dist/lib/oauth/refresh-detection.js.map +1 -1
- package/dist/lib/openai-budget.d.ts.map +1 -1
- package/dist/lib/openai-budget.js +7 -44
- package/dist/lib/openai-budget.js.map +1 -1
- package/dist/lib/openapi/generator.d.ts +1 -1
- package/dist/lib/openapi/generator.d.ts.map +1 -1
- package/dist/lib/openapi/generator.js +2 -6
- package/dist/lib/openapi/generator.js.map +1 -1
- package/dist/lib/orphaned-media-handler.d.ts +1 -1
- package/dist/lib/orphaned-media-handler.d.ts.map +1 -1
- package/dist/lib/orphaned-media-handler.js +9 -46
- package/dist/lib/orphaned-media-handler.js.map +1 -1
- package/dist/lib/parental-control-handler.d.ts +2 -2
- package/dist/lib/parental-control-handler.d.ts.map +1 -1
- package/dist/lib/parental-control-handler.js +18 -55
- package/dist/lib/parental-control-handler.js.map +1 -1
- package/dist/lib/parental-link-handler.d.ts +8 -8
- package/dist/lib/parental-link-handler.d.ts.map +1 -1
- package/dist/lib/parental-link-handler.js +10 -14
- package/dist/lib/parental-link-handler.js.map +1 -1
- package/dist/lib/performance-metrics.d.ts +1 -1
- package/dist/lib/performance-metrics.d.ts.map +1 -1
- package/dist/lib/performance-metrics.js +3 -6
- package/dist/lib/performance-metrics.js.map +1 -1
- package/dist/lib/post-handler.d.ts +9 -9
- package/dist/lib/post-handler.d.ts.map +1 -1
- package/dist/lib/post-handler.js +67 -101
- package/dist/lib/post-handler.js.map +1 -1
- package/dist/lib/privacy-defaults.js +3 -8
- package/dist/lib/privacy-defaults.js.map +1 -1
- package/dist/lib/privacy-handler.d.ts +2 -2
- package/dist/lib/privacy-handler.d.ts.map +1 -1
- package/dist/lib/privacy-handler.js +6 -10
- package/dist/lib/privacy-handler.js.map +1 -1
- package/dist/lib/pseudonym.d.ts +56 -0
- package/dist/lib/pseudonym.d.ts.map +1 -0
- package/dist/lib/pseudonym.js +85 -0
- package/dist/lib/pseudonym.js.map +1 -0
- package/dist/lib/queue-consumers/media-reconciliation-consumer.d.ts +2 -2
- package/dist/lib/queue-consumers/media-reconciliation-consumer.d.ts.map +1 -1
- package/dist/lib/queue-consumers/media-reconciliation-consumer.js +5 -8
- package/dist/lib/queue-consumers/media-reconciliation-consumer.js.map +1 -1
- package/dist/lib/quiet-hours.js +2 -6
- package/dist/lib/quiet-hours.js.map +1 -1
- package/dist/lib/rate-limit.d.ts +58 -47
- package/dist/lib/rate-limit.d.ts.map +1 -1
- package/dist/lib/rate-limit.js +168 -157
- package/dist/lib/rate-limit.js.map +1 -1
- package/dist/lib/reaction-handler.d.ts +10 -10
- package/dist/lib/reaction-handler.d.ts.map +1 -1
- package/dist/lib/reaction-handler.js +44 -80
- package/dist/lib/reaction-handler.js.map +1 -1
- package/dist/lib/recaptcha.js +6 -9
- package/dist/lib/recaptcha.js.map +1 -1
- package/dist/lib/redirect-resolver.d.ts +2 -2
- package/dist/lib/redirect-resolver.d.ts.map +1 -1
- package/dist/lib/redirect-resolver.js +5 -9
- package/dist/lib/redirect-resolver.js.map +1 -1
- package/dist/lib/region-config.d.ts +3 -3
- package/dist/lib/region-config.d.ts.map +1 -1
- package/dist/lib/region-config.js +15 -58
- package/dist/lib/region-config.js.map +1 -1
- package/dist/lib/region-detection.d.ts +55 -24
- package/dist/lib/region-detection.d.ts.map +1 -1
- package/dist/lib/region-detection.js +140 -199
- package/dist/lib/region-detection.js.map +1 -1
- package/dist/lib/region-registry.d.ts +49 -0
- package/dist/lib/region-registry.d.ts.map +1 -0
- package/dist/lib/region-registry.js +112 -0
- package/dist/lib/region-registry.js.map +1 -0
- package/dist/lib/relationship-handler.d.ts +9 -9
- package/dist/lib/relationship-handler.d.ts.map +1 -1
- package/dist/lib/relationship-handler.js +12 -49
- package/dist/lib/relationship-handler.js.map +1 -1
- package/dist/lib/request-context.d.ts +16 -16
- package/dist/lib/request-context.d.ts.map +1 -1
- package/dist/lib/request-context.js +14 -22
- package/dist/lib/request-context.js.map +1 -1
- package/dist/lib/route-helpers.d.ts +3 -4
- package/dist/lib/route-helpers.d.ts.map +1 -1
- package/dist/lib/route-helpers.js +20 -75
- package/dist/lib/route-helpers.js.map +1 -1
- package/dist/lib/routes/activitypub/actor.d.ts +1 -1
- package/dist/lib/routes/activitypub/actor.d.ts.map +1 -1
- package/dist/lib/routes/activitypub/actor.js +20 -23
- package/dist/lib/routes/activitypub/actor.js.map +1 -1
- package/dist/lib/routes/activitypub/audiences.d.ts +1 -1
- package/dist/lib/routes/activitypub/audiences.d.ts.map +1 -1
- package/dist/lib/routes/activitypub/audiences.js +76 -80
- package/dist/lib/routes/activitypub/audiences.js.map +1 -1
- package/dist/lib/routes/activitypub/collections.d.ts +1 -1
- package/dist/lib/routes/activitypub/collections.d.ts.map +1 -1
- package/dist/lib/routes/activitypub/collections.js +24 -26
- package/dist/lib/routes/activitypub/collections.js.map +1 -1
- package/dist/lib/routes/activitypub/entity-profile.d.ts +1 -1
- package/dist/lib/routes/activitypub/entity-profile.d.ts.map +1 -1
- package/dist/lib/routes/activitypub/entity-profile.js +36 -39
- package/dist/lib/routes/activitypub/entity-profile.js.map +1 -1
- package/dist/lib/routes/activitypub/friends.d.ts +1 -1
- package/dist/lib/routes/activitypub/friends.d.ts.map +1 -1
- package/dist/lib/routes/activitypub/friends.js +9 -12
- package/dist/lib/routes/activitypub/friends.js.map +1 -1
- package/dist/lib/routes/activitypub/group.d.ts +1 -1
- package/dist/lib/routes/activitypub/group.d.ts.map +1 -1
- package/dist/lib/routes/activitypub/group.js +91 -94
- package/dist/lib/routes/activitypub/group.js.map +1 -1
- package/dist/lib/routes/activitypub/inbox.d.ts +1 -1
- package/dist/lib/routes/activitypub/inbox.d.ts.map +1 -1
- package/dist/lib/routes/activitypub/inbox.js +30 -33
- package/dist/lib/routes/activitypub/inbox.js.map +1 -1
- package/dist/lib/routes/activitypub/messages.d.ts +1 -1
- package/dist/lib/routes/activitypub/messages.d.ts.map +1 -1
- package/dist/lib/routes/activitypub/messages.js +79 -83
- package/dist/lib/routes/activitypub/messages.js.map +1 -1
- package/dist/lib/routes/activitypub/outbox.d.ts +1 -1
- package/dist/lib/routes/activitypub/outbox.d.ts.map +1 -1
- package/dist/lib/routes/activitypub/outbox.js +9 -12
- package/dist/lib/routes/activitypub/outbox.js.map +1 -1
- package/dist/lib/routes/activitypub/post.d.ts +1 -1
- package/dist/lib/routes/activitypub/post.d.ts.map +1 -1
- package/dist/lib/routes/activitypub/post.js +32 -35
- package/dist/lib/routes/activitypub/post.js.map +1 -1
- package/dist/lib/routes/activitypub/webfinger.d.ts +1 -1
- package/dist/lib/routes/activitypub/webfinger.d.ts.map +1 -1
- package/dist/lib/routes/activitypub/webfinger.js +5 -8
- package/dist/lib/routes/activitypub/webfinger.js.map +1 -1
- package/dist/lib/routes/admin-costs.d.ts +1 -1
- package/dist/lib/routes/admin-costs.d.ts.map +1 -1
- package/dist/lib/routes/admin-costs.js +22 -26
- package/dist/lib/routes/admin-costs.js.map +1 -1
- package/dist/lib/routes/admin.d.ts +1 -1
- package/dist/lib/routes/admin.d.ts.map +1 -1
- package/dist/lib/routes/admin.js +290 -269
- package/dist/lib/routes/admin.js.map +1 -1
- package/dist/lib/routes/agent-authorize.d.ts +5 -5
- package/dist/lib/routes/agent-authorize.d.ts.map +1 -1
- package/dist/lib/routes/agent-authorize.js +68 -74
- package/dist/lib/routes/agent-authorize.js.map +1 -1
- package/dist/lib/routes/agent-sessions.d.ts +4 -4
- package/dist/lib/routes/agent-sessions.d.ts.map +1 -1
- package/dist/lib/routes/agent-sessions.js +30 -35
- package/dist/lib/routes/agent-sessions.js.map +1 -1
- package/dist/lib/routes/agent-surface.d.ts +2 -2
- package/dist/lib/routes/agent-surface.d.ts.map +1 -1
- package/dist/lib/routes/agent-surface.js +20 -24
- package/dist/lib/routes/agent-surface.js.map +1 -1
- package/dist/lib/routes/auth-discover.d.ts +1 -1
- package/dist/lib/routes/auth-discover.d.ts.map +1 -1
- package/dist/lib/routes/auth-discover.js +20 -56
- package/dist/lib/routes/auth-discover.js.map +1 -1
- package/dist/lib/routes/auth.d.ts +1 -1
- package/dist/lib/routes/auth.d.ts.map +1 -1
- package/dist/lib/routes/auth.js +13 -16
- package/dist/lib/routes/auth.js.map +1 -1
- package/dist/lib/routes/badges.d.ts +1 -1
- package/dist/lib/routes/badges.d.ts.map +1 -1
- package/dist/lib/routes/badges.js +20 -23
- package/dist/lib/routes/badges.js.map +1 -1
- package/dist/lib/routes/circles.d.ts +1 -1
- package/dist/lib/routes/circles.d.ts.map +1 -1
- package/dist/lib/routes/circles.js +40 -44
- package/dist/lib/routes/circles.js.map +1 -1
- package/dist/lib/routes/comments.d.ts +1 -1
- package/dist/lib/routes/comments.d.ts.map +1 -1
- package/dist/lib/routes/comments.js +67 -71
- package/dist/lib/routes/comments.js.map +1 -1
- package/dist/lib/routes/connection-codes.d.ts +1 -1
- package/dist/lib/routes/connection-codes.d.ts.map +1 -1
- package/dist/lib/routes/connection-codes.js +30 -34
- package/dist/lib/routes/connection-codes.js.map +1 -1
- package/dist/lib/routes/content-discovery.d.ts +1 -1
- package/dist/lib/routes/content-discovery.d.ts.map +1 -1
- package/dist/lib/routes/content-discovery.js +31 -34
- package/dist/lib/routes/content-discovery.js.map +1 -1
- package/dist/lib/routes/dashboard.d.ts +1 -1
- package/dist/lib/routes/dashboard.d.ts.map +1 -1
- package/dist/lib/routes/dashboard.js +251 -288
- package/dist/lib/routes/dashboard.js.map +1 -1
- package/dist/lib/routes/deletion.d.ts +1 -1
- package/dist/lib/routes/deletion.d.ts.map +1 -1
- package/dist/lib/routes/deletion.js +37 -74
- package/dist/lib/routes/deletion.js.map +1 -1
- package/dist/lib/routes/discovery.d.ts +1 -1
- package/dist/lib/routes/discovery.d.ts.map +1 -1
- package/dist/lib/routes/discovery.js +20 -24
- package/dist/lib/routes/discovery.js.map +1 -1
- package/dist/lib/routes/employees.d.ts +1 -1
- package/dist/lib/routes/employees.d.ts.map +1 -1
- package/dist/lib/routes/employees.js +15 -52
- package/dist/lib/routes/employees.js.map +1 -1
- package/dist/lib/routes/entities.d.ts +1 -1
- package/dist/lib/routes/entities.d.ts.map +1 -1
- package/dist/lib/routes/entities.js +133 -137
- package/dist/lib/routes/entities.js.map +1 -1
- package/dist/lib/routes/entity-relationships.d.ts +1 -1
- package/dist/lib/routes/entity-relationships.d.ts.map +1 -1
- package/dist/lib/routes/entity-relationships.js +35 -39
- package/dist/lib/routes/entity-relationships.js.map +1 -1
- package/dist/lib/routes/errors.d.ts +1 -1
- package/dist/lib/routes/errors.d.ts.map +1 -1
- package/dist/lib/routes/errors.js +4 -10
- package/dist/lib/routes/errors.js.map +1 -1
- package/dist/lib/routes/export.d.ts +1 -1
- package/dist/lib/routes/export.d.ts.map +1 -1
- package/dist/lib/routes/export.js +31 -35
- package/dist/lib/routes/export.js.map +1 -1
- package/dist/lib/routes/feature-flags.d.ts +1 -1
- package/dist/lib/routes/feature-flags.d.ts.map +1 -1
- package/dist/lib/routes/feature-flags.js +20 -23
- package/dist/lib/routes/feature-flags.js.map +1 -1
- package/dist/lib/routes/feeds.d.ts +1 -1
- package/dist/lib/routes/feeds.d.ts.map +1 -1
- package/dist/lib/routes/feeds.js +42 -46
- package/dist/lib/routes/feeds.js.map +1 -1
- package/dist/lib/routes/friends.d.ts +1 -1
- package/dist/lib/routes/friends.d.ts.map +1 -1
- package/dist/lib/routes/friends.js +35 -39
- package/dist/lib/routes/friends.js.map +1 -1
- package/dist/lib/routes/health.d.ts +1 -1
- package/dist/lib/routes/health.d.ts.map +1 -1
- package/dist/lib/routes/health.js +23 -27
- package/dist/lib/routes/health.js.map +1 -1
- package/dist/lib/routes/index.d.ts +2 -7
- package/dist/lib/routes/index.d.ts.map +1 -1
- package/dist/lib/routes/index.js +137 -158
- package/dist/lib/routes/index.js.map +1 -1
- package/dist/lib/routes/internal-docs.d.ts +1 -1
- package/dist/lib/routes/internal-docs.d.ts.map +1 -1
- package/dist/lib/routes/internal-docs.js +13 -16
- package/dist/lib/routes/internal-docs.js.map +1 -1
- package/dist/lib/routes/invitations.d.ts +1 -1
- package/dist/lib/routes/invitations.d.ts.map +1 -1
- package/dist/lib/routes/invitations.js +19 -22
- package/dist/lib/routes/invitations.js.map +1 -1
- package/dist/lib/routes/link-reports.d.ts +2 -2
- package/dist/lib/routes/link-reports.d.ts.map +1 -1
- package/dist/lib/routes/link-reports.js +86 -48
- package/dist/lib/routes/link-reports.js.map +1 -1
- package/dist/lib/routes/map.d.ts +1 -1
- package/dist/lib/routes/map.d.ts.map +1 -1
- package/dist/lib/routes/map.js +5 -8
- package/dist/lib/routes/map.js.map +1 -1
- package/dist/lib/routes/media-metadata-visibility.d.ts +1 -1
- package/dist/lib/routes/media-metadata-visibility.d.ts.map +1 -1
- package/dist/lib/routes/media-metadata-visibility.js +30 -67
- package/dist/lib/routes/media-metadata-visibility.js.map +1 -1
- package/dist/lib/routes/media.d.ts +1 -1
- package/dist/lib/routes/media.d.ts.map +1 -1
- package/dist/lib/routes/media.js +156 -193
- package/dist/lib/routes/media.js.map +1 -1
- package/dist/lib/routes/mfa.d.ts +1 -1
- package/dist/lib/routes/mfa.d.ts.map +1 -1
- package/dist/lib/routes/mfa.js +60 -64
- package/dist/lib/routes/mfa.js.map +1 -1
- package/dist/lib/routes/notifications.d.ts +1 -1
- package/dist/lib/routes/notifications.d.ts.map +1 -1
- package/dist/lib/routes/notifications.js +68 -72
- package/dist/lib/routes/notifications.js.map +1 -1
- package/dist/lib/routes/oauth.d.ts +1 -1
- package/dist/lib/routes/oauth.d.ts.map +1 -1
- package/dist/lib/routes/oauth.js +20 -23
- package/dist/lib/routes/oauth.js.map +1 -1
- package/dist/lib/routes/orphaned-media-health.d.ts +1 -1
- package/dist/lib/routes/orphaned-media-health.d.ts.map +1 -1
- package/dist/lib/routes/orphaned-media-health.js +10 -13
- package/dist/lib/routes/orphaned-media-health.js.map +1 -1
- package/dist/lib/routes/orphaned-media.d.ts +1 -1
- package/dist/lib/routes/orphaned-media.d.ts.map +1 -1
- package/dist/lib/routes/orphaned-media.js +20 -57
- package/dist/lib/routes/orphaned-media.js.map +1 -1
- package/dist/lib/routes/out.d.ts +1 -1
- package/dist/lib/routes/out.d.ts.map +1 -1
- package/dist/lib/routes/out.js +21 -24
- package/dist/lib/routes/out.js.map +1 -1
- package/dist/lib/routes/parental-controls.d.ts +1 -1
- package/dist/lib/routes/parental-controls.d.ts.map +1 -1
- package/dist/lib/routes/parental-controls.js +91 -95
- package/dist/lib/routes/parental-controls.js.map +1 -1
- package/dist/lib/routes/posts.d.ts +1 -1
- package/dist/lib/routes/posts.d.ts.map +1 -1
- package/dist/lib/routes/posts.js +101 -105
- package/dist/lib/routes/posts.js.map +1 -1
- package/dist/lib/routes/privacy.d.ts +1 -1
- package/dist/lib/routes/privacy.d.ts.map +1 -1
- package/dist/lib/routes/privacy.js +21 -25
- package/dist/lib/routes/privacy.js.map +1 -1
- package/dist/lib/routes/products.d.ts +1 -1
- package/dist/lib/routes/products.d.ts.map +1 -1
- package/dist/lib/routes/products.js +44 -48
- package/dist/lib/routes/products.js.map +1 -1
- package/dist/lib/routes/relationships.d.ts +1 -1
- package/dist/lib/routes/relationships.d.ts.map +1 -1
- package/dist/lib/routes/relationships.js +35 -39
- package/dist/lib/routes/relationships.js.map +1 -1
- package/dist/lib/routes/sentiments.d.ts +1 -1
- package/dist/lib/routes/sentiments.d.ts.map +1 -1
- package/dist/lib/routes/sentiments.js +71 -75
- package/dist/lib/routes/sentiments.js.map +1 -1
- package/dist/lib/routes/setup-status.d.ts +1 -1
- package/dist/lib/routes/setup-status.d.ts.map +1 -1
- package/dist/lib/routes/setup-status.js +17 -20
- package/dist/lib/routes/setup-status.js.map +1 -1
- package/dist/lib/routes/taxonomy-analytics.d.ts +1 -1
- package/dist/lib/routes/taxonomy-analytics.d.ts.map +1 -1
- package/dist/lib/routes/taxonomy-analytics.js +29 -33
- package/dist/lib/routes/taxonomy-analytics.js.map +1 -1
- package/dist/lib/routes/taxonomy.d.ts +1 -1
- package/dist/lib/routes/taxonomy.d.ts.map +1 -1
- package/dist/lib/routes/taxonomy.js +48 -51
- package/dist/lib/routes/taxonomy.js.map +1 -1
- package/dist/lib/routes/tenant-audit.d.ts +1 -1
- package/dist/lib/routes/tenant-audit.d.ts.map +1 -1
- package/dist/lib/routes/tenant-audit.js +35 -92
- package/dist/lib/routes/tenant-audit.js.map +1 -1
- package/dist/lib/routes/tenant-compliance.d.ts +1 -1
- package/dist/lib/routes/tenant-compliance.d.ts.map +1 -1
- package/dist/lib/routes/tenant-compliance.js +16 -52
- package/dist/lib/routes/tenant-compliance.js.map +1 -1
- package/dist/lib/routes/tenant-domains.d.ts +1 -1
- package/dist/lib/routes/tenant-domains.d.ts.map +1 -1
- package/dist/lib/routes/tenant-domains.js +27 -30
- package/dist/lib/routes/tenant-domains.js.map +1 -1
- package/dist/lib/routes/tenant-idp.d.ts +1 -1
- package/dist/lib/routes/tenant-idp.d.ts.map +1 -1
- package/dist/lib/routes/tenant-idp.js +27 -30
- package/dist/lib/routes/tenant-idp.js.map +1 -1
- package/dist/lib/routes/tenant-members.d.ts +1 -1
- package/dist/lib/routes/tenant-members.d.ts.map +1 -1
- package/dist/lib/routes/tenant-members.js +21 -24
- package/dist/lib/routes/tenant-members.js.map +1 -1
- package/dist/lib/routes/tenant-role-mappings.d.ts +1 -1
- package/dist/lib/routes/tenant-role-mappings.d.ts.map +1 -1
- package/dist/lib/routes/tenant-role-mappings.js +27 -30
- package/dist/lib/routes/tenant-role-mappings.js.map +1 -1
- package/dist/lib/routes/tenants.d.ts +1 -1
- package/dist/lib/routes/tenants.d.ts.map +1 -1
- package/dist/lib/routes/tenants.js +37 -40
- package/dist/lib/routes/tenants.js.map +1 -1
- package/dist/lib/routes/types.d.ts +10 -5
- package/dist/lib/routes/types.d.ts.map +1 -1
- package/dist/lib/routes/types.js +1 -2
- package/dist/lib/routes/types.js.map +1 -1
- package/dist/lib/routes/upload-sessions.d.ts +1 -1
- package/dist/lib/routes/upload-sessions.d.ts.map +1 -1
- package/dist/lib/routes/upload-sessions.js +57 -94
- package/dist/lib/routes/upload-sessions.js.map +1 -1
- package/dist/lib/routes/user.d.ts +1 -1
- package/dist/lib/routes/user.d.ts.map +1 -1
- package/dist/lib/routes/user.js +137 -85
- package/dist/lib/routes/user.js.map +1 -1
- package/dist/lib/routes.d.ts +2 -2
- package/dist/lib/routes.d.ts.map +1 -1
- package/dist/lib/routes.js +2 -7
- package/dist/lib/routes.js.map +1 -1
- package/dist/lib/scaling-health.d.ts.map +1 -1
- package/dist/lib/scaling-health.js +6 -9
- package/dist/lib/scaling-health.js.map +1 -1
- package/dist/lib/scheduled/media-stale-cleanup.js +5 -8
- package/dist/lib/scheduled/media-stale-cleanup.js.map +1 -1
- package/dist/lib/scheduled/orphaned-media-monitor.d.ts +1 -1
- package/dist/lib/scheduled/orphaned-media-monitor.d.ts.map +1 -1
- package/dist/lib/scheduled/orphaned-media-monitor.js +5 -42
- package/dist/lib/scheduled/orphaned-media-monitor.js.map +1 -1
- package/dist/lib/schemas.d.ts +85 -204
- package/dist/lib/schemas.d.ts.map +1 -1
- package/dist/lib/schemas.js +71 -74
- package/dist/lib/schemas.js.map +1 -1
- package/dist/lib/secrets/idp-secrets.d.ts +1 -1
- package/dist/lib/secrets/idp-secrets.js +13 -19
- package/dist/lib/secrets/idp-secrets.js.map +1 -1
- package/dist/lib/security-event-cleaner.js +1 -5
- package/dist/lib/security-event-cleaner.js.map +1 -1
- package/dist/lib/security-headers.js +1 -5
- package/dist/lib/security-headers.js.map +1 -1
- package/dist/lib/security-monitor.d.ts +4 -2
- package/dist/lib/security-monitor.d.ts.map +1 -1
- package/dist/lib/security-monitor.js +16 -18
- package/dist/lib/security-monitor.js.map +1 -1
- package/dist/lib/sentiment-digest.d.ts +1 -1
- package/dist/lib/sentiment-digest.d.ts.map +1 -1
- package/dist/lib/sentiment-digest.js +5 -8
- package/dist/lib/sentiment-digest.js.map +1 -1
- package/dist/lib/sentiment-display.js +3 -7
- package/dist/lib/sentiment-display.js.map +1 -1
- package/dist/lib/services/image-normalizer.js +1 -5
- package/dist/lib/services/image-normalizer.js.map +1 -1
- package/dist/lib/services/media-reconciliation-service.d.ts +1 -1
- package/dist/lib/services/media-reconciliation-service.d.ts.map +1 -1
- package/dist/lib/services/media-reconciliation-service.js +7 -11
- package/dist/lib/services/media-reconciliation-service.js.map +1 -1
- package/dist/lib/services/media-upload-service.d.ts +1 -1
- package/dist/lib/services/media-upload-service.d.ts.map +1 -1
- package/dist/lib/services/media-upload-service.js +4 -8
- package/dist/lib/services/media-upload-service.js.map +1 -1
- package/dist/lib/services/user-data-deletion.d.ts +45 -2
- package/dist/lib/services/user-data-deletion.d.ts.map +1 -1
- package/dist/lib/services/user-data-deletion.js +87 -9
- package/dist/lib/services/user-data-deletion.js.map +1 -1
- package/dist/lib/session-awareness.js +2 -6
- package/dist/lib/session-awareness.js.map +1 -1
- package/dist/lib/session-config.js +8 -17
- package/dist/lib/session-config.js.map +1 -1
- package/dist/lib/{session-manager.d.ts → session-cookie.d.ts} +58 -15
- package/dist/lib/session-cookie.d.ts.map +1 -0
- package/dist/lib/session-cookie.js +0 -0
- package/dist/lib/session-cookie.js.map +1 -0
- package/dist/lib/signup-metadata.d.ts +129 -0
- package/dist/lib/signup-metadata.d.ts.map +1 -0
- package/dist/lib/signup-metadata.js +127 -0
- package/dist/lib/signup-metadata.js.map +1 -0
- package/dist/lib/sso-auth-handler.js +1 -5
- package/dist/lib/sso-auth-handler.js.map +1 -1
- package/dist/lib/tag-suggestions-handler.d.ts +1 -1
- package/dist/lib/tag-suggestions-handler.d.ts.map +1 -1
- package/dist/lib/tag-suggestions-handler.js +1 -5
- package/dist/lib/tag-suggestions-handler.js.map +1 -1
- package/dist/lib/taxonomy-handler-factory.d.ts +2 -2
- package/dist/lib/taxonomy-handler-factory.d.ts.map +1 -1
- package/dist/lib/taxonomy-handler-factory.js +7 -10
- package/dist/lib/taxonomy-handler-factory.js.map +1 -1
- package/dist/lib/taxonomy-handler.d.ts +2 -2
- package/dist/lib/taxonomy-handler.d.ts.map +1 -1
- package/dist/lib/taxonomy-handler.js +8 -8
- package/dist/lib/taxonomy-handler.js.map +1 -1
- package/dist/lib/taxonomy-metrics.js +5 -9
- package/dist/lib/taxonomy-metrics.js.map +1 -1
- package/dist/lib/taxonomy-search-metrics.d.ts +2 -2
- package/dist/lib/taxonomy-search-metrics.d.ts.map +1 -1
- package/dist/lib/taxonomy-search-metrics.js +3 -7
- package/dist/lib/taxonomy-search-metrics.js.map +1 -1
- package/dist/lib/tenant/audit-emit.d.ts +18 -8
- package/dist/lib/tenant/audit-emit.d.ts.map +1 -1
- package/dist/lib/tenant/audit-emit.js +50 -11
- package/dist/lib/tenant/audit-emit.js.map +1 -1
- package/dist/lib/tenant/derive-domain.js +1 -4
- package/dist/lib/tenant/derive-domain.js.map +1 -1
- package/dist/lib/tenant/domain-handler.d.ts +2 -2
- package/dist/lib/tenant/domain-handler.d.ts.map +1 -1
- package/dist/lib/tenant/domain-handler.js +50 -62
- package/dist/lib/tenant/domain-handler.js.map +1 -1
- package/dist/lib/tenant/domain-validator.d.ts +1 -1
- package/dist/lib/tenant/domain-validator.js +10 -13
- package/dist/lib/tenant/domain-validator.js.map +1 -1
- package/dist/lib/tenant/domain-verifier.d.ts +3 -3
- package/dist/lib/tenant/domain-verifier.js +8 -11
- package/dist/lib/tenant/domain-verifier.js.map +1 -1
- package/dist/lib/tenant/idp-handler.d.ts +4 -4
- package/dist/lib/tenant/idp-handler.d.ts.map +1 -1
- package/dist/lib/tenant/idp-handler.js +45 -82
- package/dist/lib/tenant/idp-handler.js.map +1 -1
- package/dist/lib/tenant/idp-name.js +1 -4
- package/dist/lib/tenant/idp-name.js.map +1 -1
- package/dist/lib/tenant/member-handler.d.ts +2 -2
- package/dist/lib/tenant/member-handler.d.ts.map +1 -1
- package/dist/lib/tenant/member-handler.js +30 -67
- package/dist/lib/tenant/member-handler.js.map +1 -1
- package/dist/lib/tenant/reserved-slugs.d.ts +1 -1
- package/dist/lib/tenant/reserved-slugs.d.ts.map +1 -1
- package/dist/lib/tenant/reserved-slugs.js +8 -14
- package/dist/lib/tenant/reserved-slugs.js.map +1 -1
- package/dist/lib/tenant/resolve-role.js +1 -4
- package/dist/lib/tenant/resolve-role.js.map +1 -1
- package/dist/lib/tenant/role-mapping-handler.d.ts +2 -2
- package/dist/lib/tenant/role-mapping-handler.d.ts.map +1 -1
- package/dist/lib/tenant/role-mapping-handler.js +24 -61
- package/dist/lib/tenant/role-mapping-handler.js.map +1 -1
- package/dist/lib/tenant/setup-status.d.ts +1 -1
- package/dist/lib/tenant/setup-status.d.ts.map +1 -1
- package/dist/lib/tenant/setup-status.js +3 -40
- package/dist/lib/tenant/setup-status.js.map +1 -1
- package/dist/lib/tenant/slug-validator.js +3 -6
- package/dist/lib/tenant/slug-validator.js.map +1 -1
- package/dist/lib/tenant/tenant-handler.d.ts +2 -2
- package/dist/lib/tenant/tenant-handler.d.ts.map +1 -1
- package/dist/lib/tenant/tenant-handler.js +31 -68
- package/dist/lib/tenant/tenant-handler.js.map +1 -1
- package/dist/lib/tenant/transfer-ownership.js +2 -6
- package/dist/lib/tenant/transfer-ownership.js.map +1 -1
- package/dist/lib/tenant-scope.d.ts +97 -0
- package/dist/lib/tenant-scope.d.ts.map +1 -0
- package/dist/lib/tenant-scope.js +270 -0
- package/dist/lib/tenant-scope.js.map +1 -0
- package/dist/lib/terminology.d.ts.map +1 -1
- package/dist/lib/terminology.js +7 -9
- package/dist/lib/terminology.js.map +1 -1
- package/dist/lib/theme.js +2 -6
- package/dist/lib/theme.js.map +1 -1
- package/dist/lib/threat-intel-service.d.ts +2 -2
- package/dist/lib/threat-intel-service.d.ts.map +1 -1
- package/dist/lib/threat-intel-service.js +3 -7
- package/dist/lib/threat-intel-service.js.map +1 -1
- package/dist/lib/types/media-reconciliation.js +1 -2
- package/dist/lib/types/media-reconciliation.js.map +1 -1
- package/dist/lib/upload-session-handler.d.ts +1 -1
- package/dist/lib/upload-session-handler.d.ts.map +1 -1
- package/dist/lib/upload-session-handler.js +13 -50
- package/dist/lib/upload-session-handler.js.map +1 -1
- package/dist/lib/user/derive-handle.js +2 -6
- package/dist/lib/user/derive-handle.js.map +1 -1
- package/dist/lib/user-badge.js +6 -14
- package/dist/lib/user-badge.js.map +1 -1
- package/dist/lib/user-deletion-handler-enhanced.d.ts +2 -2
- package/dist/lib/user-deletion-handler-enhanced.d.ts.map +1 -1
- package/dist/lib/user-deletion-handler-enhanced.js +16 -53
- package/dist/lib/user-deletion-handler-enhanced.js.map +1 -1
- package/dist/lib/user-deprovisioning.d.ts +1 -1
- package/dist/lib/user-deprovisioning.d.ts.map +1 -1
- package/dist/lib/user-deprovisioning.js +16 -20
- package/dist/lib/user-deprovisioning.js.map +1 -1
- package/dist/lib/user-export-handler.d.ts +4 -4
- package/dist/lib/user-export-handler.d.ts.map +1 -1
- package/dist/lib/user-export-handler.js +11 -15
- package/dist/lib/user-export-handler.js.map +1 -1
- package/dist/lib/validate-request.js +8 -13
- package/dist/lib/validate-request.js.map +1 -1
- package/dist/lib/validation/feature-toggle-schemas.d.ts +130 -249
- package/dist/lib/validation/feature-toggle-schemas.d.ts.map +1 -1
- package/dist/lib/validation/feature-toggle-schemas.js +50 -59
- package/dist/lib/validation/feature-toggle-schemas.js.map +1 -1
- package/dist/lib/validation/validate-request.d.ts.map +1 -1
- package/dist/lib/validation/validate-request.js +12 -23
- package/dist/lib/validation/validate-request.js.map +1 -1
- package/dist/lib/validation.js +1 -5
- package/dist/lib/validation.js.map +1 -1
- package/dist/lib/version.js +3 -8
- package/dist/lib/version.js.map +1 -1
- package/dist/server.d.ts +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +29 -69
- package/dist/server.js.map +1 -1
- package/dist/types/cloudflare-compat.d.ts +3 -93
- package/dist/types/cloudflare-compat.d.ts.map +1 -1
- package/dist/types/cloudflare-compat.js +1 -2
- package/dist/types/cloudflare-compat.js.map +1 -1
- package/dist/worker.d.ts +6 -6
- package/dist/worker.d.ts.map +1 -1
- package/dist/worker.js +6 -13
- package/dist/worker.js.map +1 -1
- package/package.json +30 -17
- package/prisma/migrations/20260602054730_add_entity_geo_and_pending_schema/migration.sql +113 -0
- package/prisma/migrations/20260602162901_research_foundations/migration.sql +65 -0
- package/prisma/migrations/20260604130000_surveillance_phase0_enablers/migration.sql +107 -0
- package/prisma/migrations/20260604140000_fold_link_reports_into_reports/migration.sql +23 -0
- package/prisma/migrations/20260604140000_fold_link_reports_into_reports/rollback.reference.sql +31 -0
- package/prisma/schema.prisma +419 -68
- package/src/lambda/cleanup-cron.ts +10 -7
- package/src/lambda/create-auth-challenge.ts +6 -3
- package/src/lambda/delete-account-worker.ts +17 -12
- package/src/lambda/diagnostics-proxy.ts +9 -6
- package/src/lambda/e2e-sweeper.ts +17 -23
- package/src/lambda/federation-outbox-worker.ts +4 -1
- package/src/lambda/followers-events-worker.ts +4 -1
- package/src/lambda/hourly-cron.ts +112 -20
- package/src/lambda/link-check-worker.ts +4 -1
- package/src/lambda/maintenance-cron.ts +24 -13
- package/src/lambda/media-processing-worker.ts +5 -2
- package/src/lambda/media-reconciliation-worker.ts +4 -1
- package/src/lambda/nightly-cron.ts +53 -54
- package/src/lambda/post-confirmation.ts +188 -62
- package/src/lambda/pre-token-generation.ts +39 -44
- package/src/lambda/verify-auth-challenge.ts +4 -1
- package/dist/lib/audit/emit.d.ts +0 -56
- package/dist/lib/audit/emit.d.ts.map +0 -1
- package/dist/lib/audit/emit.js +0 -124
- package/dist/lib/audit/emit.js.map +0 -1
- package/dist/lib/audit/event-types.d.ts +0 -36
- package/dist/lib/audit/event-types.d.ts.map +0 -1
- package/dist/lib/audit/event-types.js +0 -69
- package/dist/lib/audit/event-types.js.map +0 -1
- package/dist/lib/audit-logger.d.ts +0 -142
- package/dist/lib/audit-logger.d.ts.map +0 -1
- package/dist/lib/audit-logger.js +0 -326
- package/dist/lib/audit-logger.js.map +0 -1
- package/dist/lib/circuit-breaker.d.ts +0 -27
- package/dist/lib/circuit-breaker.d.ts.map +0 -1
- package/dist/lib/circuit-breaker.js +0 -63
- package/dist/lib/circuit-breaker.js.map +0 -1
- package/dist/lib/graph/dual-write-service.d.ts +0 -116
- package/dist/lib/graph/dual-write-service.d.ts.map +0 -1
- package/dist/lib/graph/dual-write-service.js +0 -332
- package/dist/lib/graph/dual-write-service.js.map +0 -1
- package/dist/lib/graph/dual-write.d.ts +0 -396
- package/dist/lib/graph/dual-write.d.ts.map +0 -1
- package/dist/lib/graph/dual-write.js +0 -53
- package/dist/lib/graph/dual-write.js.map +0 -1
- package/dist/lib/graph/graph-schema-init.d.ts +0 -31
- package/dist/lib/graph/graph-schema-init.d.ts.map +0 -1
- package/dist/lib/graph/graph-schema-init.js +0 -105
- package/dist/lib/graph/graph-schema-init.js.map +0 -1
- package/dist/lib/graph/neo4j-graph-service.d.ts +0 -186
- package/dist/lib/graph/neo4j-graph-service.d.ts.map +0 -1
- package/dist/lib/graph/neo4j-graph-service.js +0 -1625
- package/dist/lib/graph/neo4j-graph-service.js.map +0 -1
- package/dist/lib/graph/reconciliation-service.d.ts +0 -113
- package/dist/lib/graph/reconciliation-service.d.ts.map +0 -1
- package/dist/lib/graph/reconciliation-service.js +0 -533
- package/dist/lib/graph/reconciliation-service.js.map +0 -1
- package/dist/lib/id-generator.d.ts +0 -29
- package/dist/lib/id-generator.d.ts.map +0 -1
- package/dist/lib/id-generator.js +0 -51
- package/dist/lib/id-generator.js.map +0 -1
- package/dist/lib/kv/dynamodb-kv.d.ts +0 -39
- package/dist/lib/kv/dynamodb-kv.d.ts.map +0 -1
- package/dist/lib/kv/dynamodb-kv.js +0 -239
- package/dist/lib/kv/dynamodb-kv.js.map +0 -1
- package/dist/lib/queue/sqs-queue.d.ts +0 -16
- package/dist/lib/queue/sqs-queue.d.ts.map +0 -1
- package/dist/lib/queue/sqs-queue.js +0 -39
- package/dist/lib/queue/sqs-queue.js.map +0 -1
- package/dist/lib/route-matcher.d.ts +0 -24
- package/dist/lib/route-matcher.d.ts.map +0 -1
- package/dist/lib/route-matcher.js +0 -96
- package/dist/lib/route-matcher.js.map +0 -1
- package/dist/lib/router.d.ts +0 -26
- package/dist/lib/router.d.ts.map +0 -1
- package/dist/lib/router.js +0 -90
- package/dist/lib/router.js.map +0 -1
- package/dist/lib/routes-all.d.ts +0 -9
- package/dist/lib/routes-all.d.ts.map +0 -1
- package/dist/lib/routes-all.js +0 -170
- package/dist/lib/routes-all.js.map +0 -1
- package/dist/lib/secret-resolver.d.ts +0 -88
- package/dist/lib/secret-resolver.d.ts.map +0 -1
- package/dist/lib/secret-resolver.js +0 -183
- package/dist/lib/secret-resolver.js.map +0 -1
- package/dist/lib/session-manager.d.ts.map +0 -1
- package/dist/lib/session-manager.js +0 -492
- package/dist/lib/session-manager.js.map +0 -1
- package/dist/lib/storage/s3-storage.d.ts +0 -29
- package/dist/lib/storage/s3-storage.d.ts.map +0 -1
- package/dist/lib/storage/s3-storage.js +0 -135
- package/dist/lib/storage/s3-storage.js.map +0 -1
- package/dist/lib/tenant-context.d.ts +0 -35
- package/dist/lib/tenant-context.d.ts.map +0 -1
- package/dist/lib/tenant-context.js +0 -54
- package/dist/lib/tenant-context.js.map +0 -1
package/dist/lib/routes/media.js
CHANGED
|
@@ -1,57 +1,20 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
/**
|
|
3
2
|
* Media Routes
|
|
4
3
|
*
|
|
5
4
|
* Handles media file uploads (images, videos) for posts and profiles.
|
|
6
5
|
* Implements content-addressed storage (CAS) with SHA-256 hashing for deduplication.
|
|
7
6
|
*/
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
}
|
|
19
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
20
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
21
|
-
}) : function(o, v) {
|
|
22
|
-
o["default"] = v;
|
|
23
|
-
});
|
|
24
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
25
|
-
var ownKeys = function(o) {
|
|
26
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
27
|
-
var ar = [];
|
|
28
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
29
|
-
return ar;
|
|
30
|
-
};
|
|
31
|
-
return ownKeys(o);
|
|
32
|
-
};
|
|
33
|
-
return function (mod) {
|
|
34
|
-
if (mod && mod.__esModule) return mod;
|
|
35
|
-
var result = {};
|
|
36
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
37
|
-
__setModuleDefault(result, mod);
|
|
38
|
-
return result;
|
|
39
|
-
};
|
|
40
|
-
})();
|
|
41
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
|
-
exports.mediaRoutes = void 0;
|
|
43
|
-
const cors_handler_1 = require("../cors-handler");
|
|
44
|
-
const database_connection_manager_1 = require("../database-connection-manager");
|
|
45
|
-
const db_query_helper_1 = require("../db-query-helper");
|
|
46
|
-
const logger_1 = require("../logger");
|
|
47
|
-
const media_handler_1 = require("../media-handler");
|
|
48
|
-
const middleware_1 = require("../middleware");
|
|
49
|
-
const rate_limit_1 = require("../rate-limit");
|
|
50
|
-
const secret_resolver_1 = require("../secret-resolver");
|
|
51
|
-
const security_headers_1 = require("../security-headers");
|
|
52
|
-
const session_manager_1 = require("../session-manager");
|
|
53
|
-
const image_normalizer_1 = require("../services/image-normalizer");
|
|
54
|
-
const media_upload_service_1 = require("../services/media-upload-service");
|
|
7
|
+
import { CorsHandler } from "../cors-handler.js";
|
|
8
|
+
import { sharedDatabaseConnectionManager } from "../database-connection-manager.js";
|
|
9
|
+
import { QueryTimeoutPresets, withQueryTimeoutAndRetry, } from "../db-query-helper.js";
|
|
10
|
+
import { getLogger } from "../logger.js";
|
|
11
|
+
import { MediaHandler } from "../media-handler.js";
|
|
12
|
+
import { corsMiddleware, csrfMiddleware } from "../middleware.js";
|
|
13
|
+
import { RateLimiter } from "../rate-limit.js";
|
|
14
|
+
import { SecurityHeaders } from "../security-headers.js";
|
|
15
|
+
import { SessionManager } from "../session-cookie.js";
|
|
16
|
+
import { ImageNormalizer } from "../services/image-normalizer.js";
|
|
17
|
+
import { MediaUploadService } from "../services/media-upload-service.js";
|
|
55
18
|
/**
|
|
56
19
|
* Generate SHA-256 content hash for content-addressed storage
|
|
57
20
|
*/
|
|
@@ -172,13 +135,13 @@ function validateMagicNumbers(bytes, declaredMimeType) {
|
|
|
172
135
|
* Shared function used by both /api/media/:mediaId and /api/media/:hash routes
|
|
173
136
|
*/
|
|
174
137
|
async function serveMediaByHash(contentHash, variant, request, env, session) {
|
|
175
|
-
const logger =
|
|
138
|
+
const logger = getLogger();
|
|
176
139
|
logger.debug("SERVE MEDIA BY HASH: Starting", {
|
|
177
140
|
contentHash,
|
|
178
141
|
variant,
|
|
179
142
|
userId: session.userId,
|
|
180
143
|
});
|
|
181
|
-
const securityHeaders = new
|
|
144
|
+
const securityHeaders = new SecurityHeaders(env);
|
|
182
145
|
try {
|
|
183
146
|
// Wrap entire function in try-catch to catch any unexpected errors
|
|
184
147
|
logger.debug("SERVE MEDIA: Inside try block");
|
|
@@ -187,7 +150,7 @@ async function serveMediaByHash(contentHash, variant, request, env, session) {
|
|
|
187
150
|
try {
|
|
188
151
|
const region = "US"; // TODO: Get from session or request
|
|
189
152
|
// Using retry logic with exponential backoff for connection resilience
|
|
190
|
-
mediaFile = await
|
|
153
|
+
mediaFile = await withQueryTimeoutAndRetry(sharedDatabaseConnectionManager, region, env, async (db) => {
|
|
191
154
|
const dbAny = db;
|
|
192
155
|
if (dbAny.mediaFile) {
|
|
193
156
|
return await dbAny.mediaFile.findUnique({
|
|
@@ -196,7 +159,7 @@ async function serveMediaByHash(contentHash, variant, request, env, session) {
|
|
|
196
159
|
}
|
|
197
160
|
return null;
|
|
198
161
|
}, {
|
|
199
|
-
...
|
|
162
|
+
...QueryTimeoutPresets.USER_FACING,
|
|
200
163
|
maxRetries: 3,
|
|
201
164
|
baseDelayMs: 100,
|
|
202
165
|
context: {
|
|
@@ -231,7 +194,7 @@ async function serveMediaByHash(contentHash, variant, request, env, session) {
|
|
|
231
194
|
const r2Bucket = env.MEDIA_BUCKET_R2 || env.R2_BUCKET;
|
|
232
195
|
if (!r2Bucket) {
|
|
233
196
|
const errorResponse = securityHeaders.createSecureResponse(JSON.stringify({ error: "Media storage not configured" }), { status: 503, headers: { "content-type": "application/json" } });
|
|
234
|
-
return
|
|
197
|
+
return CorsHandler.addCorsHeaders(errorResponse, request, env);
|
|
235
198
|
}
|
|
236
199
|
// Determine which R2 key to serve
|
|
237
200
|
let r2Key = null;
|
|
@@ -513,7 +476,7 @@ async function serveMediaByHash(contentHash, variant, request, env, session) {
|
|
|
513
476
|
source: "serveMediaByHash-noKey",
|
|
514
477
|
...(debugInfo && { debug: debugInfo }),
|
|
515
478
|
}), { status: 404, headers: { "content-type": "application/json" } });
|
|
516
|
-
return
|
|
479
|
+
return CorsHandler.addCorsHeaders(errorResponse, request, env);
|
|
517
480
|
}
|
|
518
481
|
const object = await r2Bucket.get(r2Key);
|
|
519
482
|
if (!object) {
|
|
@@ -537,7 +500,7 @@ async function serveMediaByHash(contentHash, variant, request, env, session) {
|
|
|
537
500
|
source: "serveMediaByHash",
|
|
538
501
|
...(debugInfo && { debug: debugInfo }),
|
|
539
502
|
}), { status: 404, headers: { "content-type": "application/json" } });
|
|
540
|
-
return
|
|
503
|
+
return CorsHandler.addCorsHeaders(errorResponse, request, env);
|
|
541
504
|
}
|
|
542
505
|
// Get content type from object metadata or use determined type
|
|
543
506
|
const objectContentType = object.httpMetadata?.contentType || contentType;
|
|
@@ -554,7 +517,7 @@ async function serveMediaByHash(contentHash, variant, request, env, session) {
|
|
|
554
517
|
"X-Debug-Timestamp": Date.now().toString(), // Unique per request
|
|
555
518
|
},
|
|
556
519
|
});
|
|
557
|
-
return
|
|
520
|
+
return CorsHandler.addCorsHeaders(response, request, env);
|
|
558
521
|
}
|
|
559
522
|
catch (unexpectedError) {
|
|
560
523
|
// Catch any unexpected errors in serveMediaByHash
|
|
@@ -571,7 +534,7 @@ async function serveMediaByHash(contentHash, variant, request, env, session) {
|
|
|
571
534
|
contentHash,
|
|
572
535
|
variant,
|
|
573
536
|
}), { status: 500, headers: { "content-type": "application/json" } });
|
|
574
|
-
return
|
|
537
|
+
return CorsHandler.addCorsHeaders(errorResponse, request, env);
|
|
575
538
|
}
|
|
576
539
|
}
|
|
577
540
|
/**
|
|
@@ -620,15 +583,15 @@ function checkSuspiciousContent(bytes, mimeType) {
|
|
|
620
583
|
}
|
|
621
584
|
return suspicious;
|
|
622
585
|
}
|
|
623
|
-
|
|
586
|
+
export const mediaRoutes = [
|
|
624
587
|
{
|
|
625
588
|
path: "/api/media/upload",
|
|
626
589
|
method: "POST",
|
|
627
590
|
handler: async (request, env) => {
|
|
628
|
-
const sessionManager = new
|
|
629
|
-
const securityHeaders = new
|
|
630
|
-
const logger =
|
|
631
|
-
const rateLimiter = new
|
|
591
|
+
const sessionManager = new SessionManager();
|
|
592
|
+
const securityHeaders = new SecurityHeaders(env);
|
|
593
|
+
const logger = getLogger();
|
|
594
|
+
const rateLimiter = new RateLimiter();
|
|
632
595
|
// Check authentication
|
|
633
596
|
const authHeader = request.headers.get("Authorization");
|
|
634
597
|
logger.debug("[Media Upload] Attempting to get session", {
|
|
@@ -636,14 +599,14 @@ exports.mediaRoutes = [
|
|
|
636
599
|
hasAuthHeader: !!authHeader,
|
|
637
600
|
authHeaderPreview: authHeader?.substring(0, 50) || "none",
|
|
638
601
|
});
|
|
639
|
-
const session = await sessionManager.getSession(request,
|
|
602
|
+
const session = await sessionManager.getSession(request, env.SESSION_SECRET, env);
|
|
640
603
|
if (!session) {
|
|
641
604
|
logger.warn("[Media Upload] Unauthorized - no valid session", {
|
|
642
605
|
hasCookie: !!request.headers.get("Cookie"),
|
|
643
606
|
hasAuthHeader: !!authHeader,
|
|
644
607
|
});
|
|
645
608
|
const errorResponse = securityHeaders.createSecureResponse(JSON.stringify({ error: "Unauthorized" }), { status: 401, headers: { "content-type": "application/json" } });
|
|
646
|
-
return
|
|
609
|
+
return CorsHandler.addCorsHeaders(errorResponse, request, env);
|
|
647
610
|
}
|
|
648
611
|
// Apply rate limiting: 10 uploads per 60s per user
|
|
649
612
|
const rateLimitResponse = await rateLimiter.applyRateLimitKV(env, request, "/api/media/upload", 10, 60, session.userId);
|
|
@@ -665,7 +628,7 @@ exports.mediaRoutes = [
|
|
|
665
628
|
error: "Invalid request format",
|
|
666
629
|
message: "Failed to parse multipart form data",
|
|
667
630
|
}), { status: 400, headers: { "content-type": "application/json" } });
|
|
668
|
-
return
|
|
631
|
+
return CorsHandler.addCorsHeaders(errorResponse, request, env);
|
|
669
632
|
}
|
|
670
633
|
const file = formData.get("file");
|
|
671
634
|
if (!file) {
|
|
@@ -677,7 +640,7 @@ exports.mediaRoutes = [
|
|
|
677
640
|
error: "No file provided",
|
|
678
641
|
message: "File field is required in multipart form data",
|
|
679
642
|
}), { status: 400, headers: { "content-type": "application/json" } });
|
|
680
|
-
return
|
|
643
|
+
return CorsHandler.addCorsHeaders(errorResponse, request, env);
|
|
681
644
|
}
|
|
682
645
|
// Check if file is empty
|
|
683
646
|
if (file.size === 0) {
|
|
@@ -689,7 +652,7 @@ exports.mediaRoutes = [
|
|
|
689
652
|
error: "Empty file",
|
|
690
653
|
message: "File cannot be empty",
|
|
691
654
|
}), { status: 400, headers: { "content-type": "application/json" } });
|
|
692
|
-
return
|
|
655
|
+
return CorsHandler.addCorsHeaders(errorResponse, request, env);
|
|
693
656
|
}
|
|
694
657
|
// Validate file type
|
|
695
658
|
const allowedImageTypes = [
|
|
@@ -722,7 +685,7 @@ exports.mediaRoutes = [
|
|
|
722
685
|
error: "File read error",
|
|
723
686
|
message: "Failed to read file data",
|
|
724
687
|
}), { status: 400, headers: { "content-type": "application/json" } });
|
|
725
|
-
return
|
|
688
|
+
return CorsHandler.addCorsHeaders(errorResponse, request, env);
|
|
726
689
|
}
|
|
727
690
|
if (fileBuffer.byteLength === 0) {
|
|
728
691
|
logger.warn("Media upload failed: File buffer is empty", {
|
|
@@ -734,7 +697,7 @@ exports.mediaRoutes = [
|
|
|
734
697
|
error: "Empty file",
|
|
735
698
|
message: "File data is empty",
|
|
736
699
|
}), { status: 400, headers: { "content-type": "application/json" } });
|
|
737
|
-
return
|
|
700
|
+
return CorsHandler.addCorsHeaders(errorResponse, request, env);
|
|
738
701
|
}
|
|
739
702
|
const bytes = new Uint8Array(fileBuffer);
|
|
740
703
|
// Always detect MIME type from magic numbers (trust the file, not the declared type)
|
|
@@ -823,7 +786,7 @@ exports.mediaRoutes = [
|
|
|
823
786
|
fileName: file.name,
|
|
824
787
|
},
|
|
825
788
|
}), { status: 400, headers: { "content-type": "application/json" } });
|
|
826
|
-
return
|
|
789
|
+
return CorsHandler.addCorsHeaders(errorResponse, request, env);
|
|
827
790
|
}
|
|
828
791
|
// Validate file size (per documentation: 10MB for images, 100MB for videos)
|
|
829
792
|
const maxImageSize = 10 * 1024 * 1024; // 10MB
|
|
@@ -836,7 +799,7 @@ exports.mediaRoutes = [
|
|
|
836
799
|
? "Image must be 10MB or less"
|
|
837
800
|
: "Video must be 100MB or less",
|
|
838
801
|
}), { status: 400, headers: { "content-type": "application/json" } });
|
|
839
|
-
return
|
|
802
|
+
return CorsHandler.addCorsHeaders(errorResponse, request, env);
|
|
840
803
|
}
|
|
841
804
|
// File buffer already read above for MIME type detection
|
|
842
805
|
// Reuse the bytes array
|
|
@@ -862,7 +825,7 @@ exports.mediaRoutes = [
|
|
|
862
825
|
error: "Invalid file signature",
|
|
863
826
|
message: "File signature does not match detected file type. File may be corrupted or malicious.",
|
|
864
827
|
}), { status: 400, headers: { "content-type": "application/json" } });
|
|
865
|
-
return
|
|
828
|
+
return CorsHandler.addCorsHeaders(errorResponse, request, env);
|
|
866
829
|
}
|
|
867
830
|
// Check for suspicious patterns
|
|
868
831
|
const suspicious = checkSuspiciousContent(bytes, mimeType);
|
|
@@ -881,7 +844,7 @@ exports.mediaRoutes = [
|
|
|
881
844
|
// Extract metadata (best effort, non-fatal)
|
|
882
845
|
let extracted = {};
|
|
883
846
|
try {
|
|
884
|
-
const { MetadataExtractor } = await
|
|
847
|
+
const { MetadataExtractor } = await import("../metadata/metadata-extractor.js");
|
|
885
848
|
const extractor = new MetadataExtractor(env);
|
|
886
849
|
extracted = await extractor.extractAll(fileBuffer, mimeType);
|
|
887
850
|
}
|
|
@@ -904,13 +867,13 @@ exports.mediaRoutes = [
|
|
|
904
867
|
// Pass the already-read fileBuffer to avoid a second file.arrayBuffer() call.
|
|
905
868
|
// On Cloudflare Workers, File objects from FormData may not support
|
|
906
869
|
// reliable re-reads of arrayBuffer(), causing a different contentHash.
|
|
907
|
-
const uploadService = new
|
|
870
|
+
const uploadService = new MediaUploadService(env);
|
|
908
871
|
const result = await uploadService.uploadSingle(file, session.userId, metadata, fileBuffer);
|
|
909
872
|
// Normalize images to sRGB (non-blocking, best effort)
|
|
910
873
|
let optimizedKey = null;
|
|
911
874
|
if (mimeType.startsWith("image/")) {
|
|
912
875
|
if (env.IMAGES && env.MEDIA_BUCKET_R2) {
|
|
913
|
-
const normalizer = new
|
|
876
|
+
const normalizer = new ImageNormalizer(env.IMAGES, env.MEDIA_BUCKET_R2);
|
|
914
877
|
const startTime = Date.now();
|
|
915
878
|
logger.info("image_normalization.started", {
|
|
916
879
|
contentHash: result.contentHash,
|
|
@@ -950,7 +913,7 @@ exports.mediaRoutes = [
|
|
|
950
913
|
const uploadOriginalKey = `media/${result.contentHash}.${getExtensionFromMimeType(mimeType)}`;
|
|
951
914
|
const uploadRegion = "US"; // TODO: Get from session or request
|
|
952
915
|
try {
|
|
953
|
-
await
|
|
916
|
+
await withQueryTimeoutAndRetry(sharedDatabaseConnectionManager, uploadRegion, env, async (db) => {
|
|
954
917
|
return await db.mediaFile.upsert({
|
|
955
918
|
where: { contentHash: result.contentHash },
|
|
956
919
|
create: {
|
|
@@ -975,7 +938,7 @@ exports.mediaRoutes = [
|
|
|
975
938
|
},
|
|
976
939
|
});
|
|
977
940
|
}, {
|
|
978
|
-
...
|
|
941
|
+
...QueryTimeoutPresets.USER_FACING,
|
|
979
942
|
maxRetries: 1,
|
|
980
943
|
context: {
|
|
981
944
|
operation: "mediaUpload_createRecord",
|
|
@@ -997,7 +960,7 @@ exports.mediaRoutes = [
|
|
|
997
960
|
status: 500,
|
|
998
961
|
headers: { "content-type": "application/json" },
|
|
999
962
|
});
|
|
1000
|
-
return
|
|
963
|
+
return CorsHandler.addCorsHeaders(dbErrorResponse, request, env);
|
|
1001
964
|
}
|
|
1002
965
|
logger.debug("[Media Upload] DB record created successfully", {
|
|
1003
966
|
contentHash: result.contentHash,
|
|
@@ -1019,7 +982,7 @@ exports.mediaRoutes = [
|
|
|
1019
982
|
contentHash: result.contentHash,
|
|
1020
983
|
status: result.status,
|
|
1021
984
|
}), { status: 200, headers: { "content-type": "application/json" } });
|
|
1022
|
-
return
|
|
985
|
+
return CorsHandler.addCorsHeaders(response, request, env);
|
|
1023
986
|
}
|
|
1024
987
|
catch (error) {
|
|
1025
988
|
logger.error("Error handling media upload:", error);
|
|
@@ -1027,26 +990,26 @@ exports.mediaRoutes = [
|
|
|
1027
990
|
error: "Failed to upload media",
|
|
1028
991
|
message: error.message || "An unexpected error occurred",
|
|
1029
992
|
}), { status: 500, headers: { "content-type": "application/json" } });
|
|
1030
|
-
return
|
|
993
|
+
return CorsHandler.addCorsHeaders(errorResponse, request, env);
|
|
1031
994
|
}
|
|
1032
995
|
},
|
|
1033
|
-
middleware: [
|
|
996
|
+
middleware: [corsMiddleware(), csrfMiddleware()],
|
|
1034
997
|
description: "Upload media file (image or video) with content-addressed storage",
|
|
1035
998
|
},
|
|
1036
999
|
{
|
|
1037
1000
|
path: "/api/media/upload/batch",
|
|
1038
1001
|
method: "POST",
|
|
1039
1002
|
handler: async (request, env) => {
|
|
1040
|
-
const sessionManager = new
|
|
1041
|
-
const securityHeaders = new
|
|
1042
|
-
const logger =
|
|
1043
|
-
const rateLimiter = new
|
|
1003
|
+
const sessionManager = new SessionManager();
|
|
1004
|
+
const securityHeaders = new SecurityHeaders(env);
|
|
1005
|
+
const logger = getLogger();
|
|
1006
|
+
const rateLimiter = new RateLimiter();
|
|
1044
1007
|
// Check authentication
|
|
1045
|
-
const session = await sessionManager.getSession(request,
|
|
1008
|
+
const session = await sessionManager.getSession(request, env.SESSION_SECRET, env);
|
|
1046
1009
|
if (!session) {
|
|
1047
1010
|
logger.warn("[Media Batch Upload] Unauthorized");
|
|
1048
1011
|
const errorResponse = securityHeaders.createSecureResponse(JSON.stringify({ error: "Unauthorized" }), { status: 401, headers: { "content-type": "application/json" } });
|
|
1049
|
-
return
|
|
1012
|
+
return CorsHandler.addCorsHeaders(errorResponse, request, env);
|
|
1050
1013
|
}
|
|
1051
1014
|
// Apply rate limiting: 5 batch uploads per 60s per user (stricter than single)
|
|
1052
1015
|
const rateLimitResponse = await rateLimiter.applyRateLimitKV(env, request, "/api/media/upload/batch", 5, 60, session.userId);
|
|
@@ -1082,7 +1045,7 @@ exports.mediaRoutes = [
|
|
|
1082
1045
|
error: "No files provided",
|
|
1083
1046
|
message: "At least one file is required",
|
|
1084
1047
|
}), { status: 400, headers: { "content-type": "application/json" } });
|
|
1085
|
-
return
|
|
1048
|
+
return CorsHandler.addCorsHeaders(errorResponse, request, env);
|
|
1086
1049
|
}
|
|
1087
1050
|
if (files.length > 20) {
|
|
1088
1051
|
logger.warn("[Media Batch Upload] Too many files", {
|
|
@@ -1093,14 +1056,14 @@ exports.mediaRoutes = [
|
|
|
1093
1056
|
error: "Too many files",
|
|
1094
1057
|
message: "Maximum 20 files per batch",
|
|
1095
1058
|
}), { status: 400, headers: { "content-type": "application/json" } });
|
|
1096
|
-
return
|
|
1059
|
+
return CorsHandler.addCorsHeaders(errorResponse, request, env);
|
|
1097
1060
|
}
|
|
1098
1061
|
logger.info("[Media Batch Upload] Processing batch", {
|
|
1099
1062
|
userId: session.userId,
|
|
1100
1063
|
fileCount: files.length,
|
|
1101
1064
|
});
|
|
1102
1065
|
// Use MediaUploadService for batch upload
|
|
1103
|
-
const uploadService = new
|
|
1066
|
+
const uploadService = new MediaUploadService(env);
|
|
1104
1067
|
const results = await uploadService.uploadBatch(files, session.userId);
|
|
1105
1068
|
const successCount = results.filter((r) => r.success).length;
|
|
1106
1069
|
const failureCount = results.filter((r) => !r.success).length;
|
|
@@ -1118,7 +1081,7 @@ exports.mediaRoutes = [
|
|
|
1118
1081
|
failed: failureCount,
|
|
1119
1082
|
},
|
|
1120
1083
|
}), { status: 200, headers: { "content-type": "application/json" } });
|
|
1121
|
-
return
|
|
1084
|
+
return CorsHandler.addCorsHeaders(response, request, env);
|
|
1122
1085
|
}
|
|
1123
1086
|
catch (error) {
|
|
1124
1087
|
logger.error("[Media Batch Upload] Error:", error);
|
|
@@ -1126,10 +1089,10 @@ exports.mediaRoutes = [
|
|
|
1126
1089
|
error: "Failed to upload media batch",
|
|
1127
1090
|
message: error.message || "An unexpected error occurred",
|
|
1128
1091
|
}), { status: 500, headers: { "content-type": "application/json" } });
|
|
1129
|
-
return
|
|
1092
|
+
return CorsHandler.addCorsHeaders(errorResponse, request, env);
|
|
1130
1093
|
}
|
|
1131
1094
|
},
|
|
1132
|
-
middleware: [
|
|
1095
|
+
middleware: [corsMiddleware(), csrfMiddleware()],
|
|
1133
1096
|
description: "Upload multiple media files in a single batch request",
|
|
1134
1097
|
},
|
|
1135
1098
|
{
|
|
@@ -1137,19 +1100,19 @@ exports.mediaRoutes = [
|
|
|
1137
1100
|
method: "GET",
|
|
1138
1101
|
handler: async (request, env) => {
|
|
1139
1102
|
const startTime = Date.now();
|
|
1140
|
-
const sessionManager = new
|
|
1141
|
-
const securityHeaders = new
|
|
1142
|
-
const logger =
|
|
1143
|
-
const rateLimiter = new
|
|
1144
|
-
const mediaHandler =
|
|
1145
|
-
const { MediaMetrics } = await
|
|
1146
|
-
const { RegionDetector } = await
|
|
1103
|
+
const sessionManager = new SessionManager();
|
|
1104
|
+
const securityHeaders = new SecurityHeaders(env);
|
|
1105
|
+
const logger = getLogger();
|
|
1106
|
+
const rateLimiter = new RateLimiter();
|
|
1107
|
+
const mediaHandler = MediaHandler.create(env);
|
|
1108
|
+
const { MediaMetrics } = await import("../media-metrics.js");
|
|
1109
|
+
const { RegionDetector } = await import("../region-detection.js");
|
|
1147
1110
|
const metrics = new MediaMetrics(env);
|
|
1148
1111
|
// Check authentication
|
|
1149
|
-
const session = await sessionManager.getSession(request,
|
|
1112
|
+
const session = await sessionManager.getSession(request, env.SESSION_SECRET, env);
|
|
1150
1113
|
if (!session) {
|
|
1151
1114
|
const errorResponse = securityHeaders.createSecureResponse(JSON.stringify({ error: "Unauthorized" }), { status: 401, headers: { "content-type": "application/json" } });
|
|
1152
|
-
return
|
|
1115
|
+
return CorsHandler.addCorsHeaders(errorResponse, request, env);
|
|
1153
1116
|
}
|
|
1154
1117
|
// Apply rate limiting: 60 requests per minute per user
|
|
1155
1118
|
const rateLimitResponse = await rateLimiter.applyRateLimitKV(env, request, "/api/media/grouped", 60, 60, session.userId);
|
|
@@ -1178,7 +1141,7 @@ exports.mediaRoutes = [
|
|
|
1178
1141
|
error: "Invalid groupBy",
|
|
1179
1142
|
message: 'groupBy must be "month" or "year"',
|
|
1180
1143
|
}), { status: 400, headers: { "content-type": "application/json" } });
|
|
1181
|
-
return
|
|
1144
|
+
return CorsHandler.addCorsHeaders(errorResponse, request, env);
|
|
1182
1145
|
}
|
|
1183
1146
|
const includeHidden = url.searchParams.get("includeHidden") === "true";
|
|
1184
1147
|
const type = url.searchParams.get("type") || "all";
|
|
@@ -1203,7 +1166,7 @@ exports.mediaRoutes = [
|
|
|
1203
1166
|
error: "Invalid limit",
|
|
1204
1167
|
message: "Limit must be between 1 and 10000",
|
|
1205
1168
|
}), { status: 400, headers: { "content-type": "application/json" } });
|
|
1206
|
-
return
|
|
1169
|
+
return CorsHandler.addCorsHeaders(errorResponse, request, env);
|
|
1207
1170
|
}
|
|
1208
1171
|
const result = await mediaHandler.listUserMediaGrouped(session.userId, groupBy, {
|
|
1209
1172
|
includeHidden,
|
|
@@ -1218,7 +1181,7 @@ exports.mediaRoutes = [
|
|
|
1218
1181
|
// Track metrics
|
|
1219
1182
|
metrics.trackGrouped("/api/media/grouped", duration, result.groups.length, totalItems, 200, region, session.userId);
|
|
1220
1183
|
const response = securityHeaders.createSecureResponse(JSON.stringify(result), { status: 200, headers: { "content-type": "application/json" } });
|
|
1221
|
-
return
|
|
1184
|
+
return CorsHandler.addCorsHeaders(response, request, env);
|
|
1222
1185
|
}
|
|
1223
1186
|
catch (error) {
|
|
1224
1187
|
const duration = Date.now() - startTime;
|
|
@@ -1243,10 +1206,10 @@ exports.mediaRoutes = [
|
|
|
1243
1206
|
status: statusCode,
|
|
1244
1207
|
headers: { "content-type": "application/json" },
|
|
1245
1208
|
});
|
|
1246
|
-
return
|
|
1209
|
+
return CorsHandler.addCorsHeaders(errorResponse, request, env);
|
|
1247
1210
|
}
|
|
1248
1211
|
},
|
|
1249
|
-
middleware: [
|
|
1212
|
+
middleware: [corsMiddleware()],
|
|
1250
1213
|
description: "List user media grouped by month or year",
|
|
1251
1214
|
},
|
|
1252
1215
|
{
|
|
@@ -1254,19 +1217,19 @@ exports.mediaRoutes = [
|
|
|
1254
1217
|
method: "GET",
|
|
1255
1218
|
handler: async (request, env) => {
|
|
1256
1219
|
const startTime = Date.now();
|
|
1257
|
-
const sessionManager = new
|
|
1258
|
-
const securityHeaders = new
|
|
1259
|
-
const logger =
|
|
1260
|
-
const rateLimiter = new
|
|
1261
|
-
const mediaHandler =
|
|
1262
|
-
const { MediaMetrics } = await
|
|
1263
|
-
const { RegionDetector } = await
|
|
1220
|
+
const sessionManager = new SessionManager();
|
|
1221
|
+
const securityHeaders = new SecurityHeaders(env);
|
|
1222
|
+
const logger = getLogger();
|
|
1223
|
+
const rateLimiter = new RateLimiter();
|
|
1224
|
+
const mediaHandler = MediaHandler.create(env);
|
|
1225
|
+
const { MediaMetrics } = await import("../media-metrics.js");
|
|
1226
|
+
const { RegionDetector } = await import("../region-detection.js");
|
|
1264
1227
|
const metrics = new MediaMetrics(env);
|
|
1265
1228
|
// Check authentication
|
|
1266
|
-
const session = await sessionManager.getSession(request,
|
|
1229
|
+
const session = await sessionManager.getSession(request, env.SESSION_SECRET, env);
|
|
1267
1230
|
if (!session) {
|
|
1268
1231
|
const errorResponse = securityHeaders.createSecureResponse(JSON.stringify({ error: "Unauthorized" }), { status: 401, headers: { "content-type": "application/json" } });
|
|
1269
|
-
return
|
|
1232
|
+
return CorsHandler.addCorsHeaders(errorResponse, request, env);
|
|
1270
1233
|
}
|
|
1271
1234
|
// Apply rate limiting: 60 requests per minute per user
|
|
1272
1235
|
const rateLimitResponse = await rateLimiter.applyRateLimitKV(env, request, "/api/media/stats", 60, 60, session.userId);
|
|
@@ -1284,7 +1247,7 @@ exports.mediaRoutes = [
|
|
|
1284
1247
|
// Track metrics
|
|
1285
1248
|
metrics.trackStats("/api/media/stats", duration, result.totalCount, 200, region, session.userId);
|
|
1286
1249
|
const response = securityHeaders.createSecureResponse(JSON.stringify(result), { status: 200, headers: { "content-type": "application/json" } });
|
|
1287
|
-
return
|
|
1250
|
+
return CorsHandler.addCorsHeaders(response, request, env);
|
|
1288
1251
|
}
|
|
1289
1252
|
catch (error) {
|
|
1290
1253
|
const duration = Date.now() - startTime;
|
|
@@ -1309,10 +1272,10 @@ exports.mediaRoutes = [
|
|
|
1309
1272
|
status: statusCode,
|
|
1310
1273
|
headers: { "content-type": "application/json" },
|
|
1311
1274
|
});
|
|
1312
|
-
return
|
|
1275
|
+
return CorsHandler.addCorsHeaders(errorResponse, request, env);
|
|
1313
1276
|
}
|
|
1314
1277
|
},
|
|
1315
|
-
middleware: [
|
|
1278
|
+
middleware: [corsMiddleware()],
|
|
1316
1279
|
description: "Get media statistics",
|
|
1317
1280
|
},
|
|
1318
1281
|
{
|
|
@@ -1320,23 +1283,23 @@ exports.mediaRoutes = [
|
|
|
1320
1283
|
method: "GET",
|
|
1321
1284
|
handler: async (request, env, context) => {
|
|
1322
1285
|
const startTime = Date.now();
|
|
1323
|
-
const sessionManager = new
|
|
1324
|
-
const securityHeaders = new
|
|
1325
|
-
const logger =
|
|
1286
|
+
const sessionManager = new SessionManager();
|
|
1287
|
+
const securityHeaders = new SecurityHeaders(env);
|
|
1288
|
+
const logger = getLogger();
|
|
1326
1289
|
logger.debug("MEDIA ROUTE: /api/media/:mediaId GET handler called", {
|
|
1327
1290
|
url: request.url,
|
|
1328
1291
|
mediaId: context.params?.mediaId,
|
|
1329
1292
|
});
|
|
1330
|
-
const rateLimiter = new
|
|
1331
|
-
const mediaHandler =
|
|
1332
|
-
const { MediaMetrics } = await
|
|
1333
|
-
const { RegionDetector } = await
|
|
1293
|
+
const rateLimiter = new RateLimiter();
|
|
1294
|
+
const mediaHandler = MediaHandler.create(env);
|
|
1295
|
+
const { MediaMetrics } = await import("../media-metrics.js");
|
|
1296
|
+
const { RegionDetector } = await import("../region-detection.js");
|
|
1334
1297
|
const metrics = new MediaMetrics(env);
|
|
1335
1298
|
// Check authentication
|
|
1336
|
-
const session = await sessionManager.getSession(request,
|
|
1299
|
+
const session = await sessionManager.getSession(request, env.SESSION_SECRET, env);
|
|
1337
1300
|
if (!session) {
|
|
1338
1301
|
const errorResponse = securityHeaders.createSecureResponse(JSON.stringify({ error: "Unauthorized" }), { status: 401, headers: { "content-type": "application/json" } });
|
|
1339
|
-
return
|
|
1302
|
+
return CorsHandler.addCorsHeaders(errorResponse, request, env);
|
|
1340
1303
|
}
|
|
1341
1304
|
// Apply rate limiting: 120 requests per minute per user
|
|
1342
1305
|
const rateLimitResponse = await rateLimiter.applyRateLimitKV(env, request, "/api/media/:mediaId", 120, 60, session.userId);
|
|
@@ -1362,7 +1325,7 @@ exports.mediaRoutes = [
|
|
|
1362
1325
|
error: "Invalid request",
|
|
1363
1326
|
message: "Media ID is required",
|
|
1364
1327
|
}), { status: 400, headers: { "content-type": "application/json" } });
|
|
1365
|
-
return
|
|
1328
|
+
return CorsHandler.addCorsHeaders(errorResponse, request, env);
|
|
1366
1329
|
}
|
|
1367
1330
|
// Check if this is actually a content hash request (64-char hex)
|
|
1368
1331
|
// Content hashes are hex strings and typically 64 characters
|
|
@@ -1417,7 +1380,7 @@ exports.mediaRoutes = [
|
|
|
1417
1380
|
expires: new Date(Date.now() + 5 * 60 * 1000).toUTCString(),
|
|
1418
1381
|
},
|
|
1419
1382
|
});
|
|
1420
|
-
return
|
|
1383
|
+
return CorsHandler.addCorsHeaders(response, request, env);
|
|
1421
1384
|
}
|
|
1422
1385
|
catch (error) {
|
|
1423
1386
|
const duration = Date.now() - startTime;
|
|
@@ -1444,24 +1407,24 @@ exports.mediaRoutes = [
|
|
|
1444
1407
|
message: error.message || "An unexpected error occurred",
|
|
1445
1408
|
source: "mediaId-route-catch",
|
|
1446
1409
|
}), { status, headers: { "content-type": "application/json" } });
|
|
1447
|
-
return
|
|
1410
|
+
return CorsHandler.addCorsHeaders(errorResponse, request, env);
|
|
1448
1411
|
}
|
|
1449
1412
|
},
|
|
1450
|
-
middleware: [
|
|
1413
|
+
middleware: [corsMiddleware()],
|
|
1451
1414
|
description: "Get detailed information about a media file",
|
|
1452
1415
|
},
|
|
1453
1416
|
{
|
|
1454
1417
|
path: "/api/media/:hash",
|
|
1455
1418
|
method: "GET",
|
|
1456
1419
|
handler: async (request, env, { params }) => {
|
|
1457
|
-
const sessionManager = new
|
|
1458
|
-
const securityHeaders = new
|
|
1459
|
-
const logger =
|
|
1420
|
+
const sessionManager = new SessionManager();
|
|
1421
|
+
const securityHeaders = new SecurityHeaders(env);
|
|
1422
|
+
const logger = getLogger();
|
|
1460
1423
|
// Check authentication
|
|
1461
|
-
const session = await sessionManager.getSession(request,
|
|
1424
|
+
const session = await sessionManager.getSession(request, env.SESSION_SECRET, env);
|
|
1462
1425
|
if (!session) {
|
|
1463
1426
|
const errorResponse = securityHeaders.createSecureResponse(JSON.stringify({ error: "Unauthorized" }), { status: 401, headers: { "content-type": "application/json" } });
|
|
1464
|
-
return
|
|
1427
|
+
return CorsHandler.addCorsHeaders(errorResponse, request, env);
|
|
1465
1428
|
}
|
|
1466
1429
|
try {
|
|
1467
1430
|
const contentHash = params.hash;
|
|
@@ -1470,7 +1433,7 @@ exports.mediaRoutes = [
|
|
|
1470
1433
|
error: "Missing content hash",
|
|
1471
1434
|
source: "hash-route",
|
|
1472
1435
|
}), { status: 400, headers: { "content-type": "application/json" } });
|
|
1473
|
-
return
|
|
1436
|
+
return CorsHandler.addCorsHeaders(errorResponse, request, env);
|
|
1474
1437
|
}
|
|
1475
1438
|
// Parse variant from query params (thumbnail, optimized, original)
|
|
1476
1439
|
const url = new URL(request.url);
|
|
@@ -1490,27 +1453,27 @@ exports.mediaRoutes = [
|
|
|
1490
1453
|
message: error.message || "An unexpected error occurred",
|
|
1491
1454
|
source: "hash-route-catch",
|
|
1492
1455
|
}), { status: 500, headers: { "content-type": "application/json" } });
|
|
1493
|
-
return
|
|
1456
|
+
return CorsHandler.addCorsHeaders(errorResponse, request, env);
|
|
1494
1457
|
}
|
|
1495
1458
|
},
|
|
1496
|
-
middleware: [
|
|
1459
|
+
middleware: [corsMiddleware()],
|
|
1497
1460
|
description: "Serve media file by content hash with variant support",
|
|
1498
1461
|
},
|
|
1499
1462
|
{
|
|
1500
1463
|
path: "/api/media",
|
|
1501
1464
|
method: "GET",
|
|
1502
1465
|
handler: async (request, env) => {
|
|
1503
|
-
const sessionManager = new
|
|
1504
|
-
const securityHeaders = new
|
|
1505
|
-
const logger =
|
|
1506
|
-
const rateLimiter = new
|
|
1507
|
-
const mediaHandler =
|
|
1508
|
-
const { MediaMetrics } = await
|
|
1509
|
-
const { RegionDetector } = await
|
|
1466
|
+
const sessionManager = new SessionManager();
|
|
1467
|
+
const securityHeaders = new SecurityHeaders(env);
|
|
1468
|
+
const logger = getLogger();
|
|
1469
|
+
const rateLimiter = new RateLimiter();
|
|
1470
|
+
const mediaHandler = MediaHandler.create(env);
|
|
1471
|
+
const { MediaMetrics } = await import("../media-metrics.js");
|
|
1472
|
+
const { RegionDetector } = await import("../region-detection.js");
|
|
1510
1473
|
const metrics = new MediaMetrics(env);
|
|
1511
1474
|
const startTime = Date.now();
|
|
1512
1475
|
// Check authentication
|
|
1513
|
-
const session = await sessionManager.getSession(request,
|
|
1476
|
+
const session = await sessionManager.getSession(request, env.SESSION_SECRET, env);
|
|
1514
1477
|
if (!session) {
|
|
1515
1478
|
const duration = Date.now() - startTime;
|
|
1516
1479
|
metrics.trackOperation({
|
|
@@ -1521,7 +1484,7 @@ exports.mediaRoutes = [
|
|
|
1521
1484
|
errorType: "unauthorized",
|
|
1522
1485
|
});
|
|
1523
1486
|
const errorResponse = securityHeaders.createSecureResponse(JSON.stringify({ error: "Unauthorized" }), { status: 401, headers: { "content-type": "application/json" } });
|
|
1524
|
-
return
|
|
1487
|
+
return CorsHandler.addCorsHeaders(errorResponse, request, env);
|
|
1525
1488
|
}
|
|
1526
1489
|
// Apply rate limiting: 60 requests per minute per user
|
|
1527
1490
|
const rateLimitResponse = await rateLimiter.applyRateLimitKV(env, request, "/api/media", 60, 60, session.userId);
|
|
@@ -1556,7 +1519,7 @@ exports.mediaRoutes = [
|
|
|
1556
1519
|
error: "Invalid limit",
|
|
1557
1520
|
message: "Limit must be between 1 and 100",
|
|
1558
1521
|
}), { status: 400, headers: { "content-type": "application/json" } });
|
|
1559
|
-
return
|
|
1522
|
+
return CorsHandler.addCorsHeaders(errorResponse, request, env);
|
|
1560
1523
|
}
|
|
1561
1524
|
// Get user media
|
|
1562
1525
|
const result = await mediaHandler.listUserMedia(session.userId, {
|
|
@@ -1573,7 +1536,7 @@ exports.mediaRoutes = [
|
|
|
1573
1536
|
// Track metrics
|
|
1574
1537
|
metrics.trackList("/api/media", duration, result.media.length, 200, region, session.userId);
|
|
1575
1538
|
const response = securityHeaders.createSecureResponse(JSON.stringify(result), { status: 200, headers: { "content-type": "application/json" } });
|
|
1576
|
-
return
|
|
1539
|
+
return CorsHandler.addCorsHeaders(response, request, env);
|
|
1577
1540
|
}
|
|
1578
1541
|
catch (error) {
|
|
1579
1542
|
const duration = Date.now() - startTime;
|
|
@@ -1598,10 +1561,10 @@ exports.mediaRoutes = [
|
|
|
1598
1561
|
status: statusCode,
|
|
1599
1562
|
headers: { "content-type": "application/json" },
|
|
1600
1563
|
});
|
|
1601
|
-
return
|
|
1564
|
+
return CorsHandler.addCorsHeaders(errorResponse, request, env);
|
|
1602
1565
|
}
|
|
1603
1566
|
},
|
|
1604
|
-
middleware: [
|
|
1567
|
+
middleware: [corsMiddleware()],
|
|
1605
1568
|
description: "List user media with pagination, sorting, and filtering",
|
|
1606
1569
|
},
|
|
1607
1570
|
{
|
|
@@ -1609,19 +1572,19 @@ exports.mediaRoutes = [
|
|
|
1609
1572
|
method: "POST",
|
|
1610
1573
|
handler: async (request, env, context) => {
|
|
1611
1574
|
const startTime = Date.now();
|
|
1612
|
-
const sessionManager = new
|
|
1613
|
-
const securityHeaders = new
|
|
1614
|
-
const logger =
|
|
1615
|
-
const rateLimiter = new
|
|
1616
|
-
const mediaHandler =
|
|
1617
|
-
const { MediaMetrics } = await
|
|
1618
|
-
const { RegionDetector } = await
|
|
1575
|
+
const sessionManager = new SessionManager();
|
|
1576
|
+
const securityHeaders = new SecurityHeaders(env);
|
|
1577
|
+
const logger = getLogger();
|
|
1578
|
+
const rateLimiter = new RateLimiter();
|
|
1579
|
+
const mediaHandler = MediaHandler.create(env);
|
|
1580
|
+
const { MediaMetrics } = await import("../media-metrics.js");
|
|
1581
|
+
const { RegionDetector } = await import("../region-detection.js");
|
|
1619
1582
|
const metrics = new MediaMetrics(env);
|
|
1620
1583
|
// Check authentication
|
|
1621
|
-
const session = await sessionManager.getSession(request,
|
|
1584
|
+
const session = await sessionManager.getSession(request, env.SESSION_SECRET, env);
|
|
1622
1585
|
if (!session) {
|
|
1623
1586
|
const errorResponse = securityHeaders.createSecureResponse(JSON.stringify({ error: "Unauthorized" }), { status: 401, headers: { "content-type": "application/json" } });
|
|
1624
|
-
return
|
|
1587
|
+
return CorsHandler.addCorsHeaders(errorResponse, request, env);
|
|
1625
1588
|
}
|
|
1626
1589
|
// Apply rate limiting: 10 requests per minute per user
|
|
1627
1590
|
const rateLimitResponse = await rateLimiter.applyRateLimitKV(env, request, "/api/media/:mediaId/hide", 10, 60, session.userId);
|
|
@@ -1647,7 +1610,7 @@ exports.mediaRoutes = [
|
|
|
1647
1610
|
error: "Invalid request",
|
|
1648
1611
|
message: "Media ID is required",
|
|
1649
1612
|
}), { status: 400, headers: { "content-type": "application/json" } });
|
|
1650
|
-
return
|
|
1613
|
+
return CorsHandler.addCorsHeaders(errorResponse, request, env);
|
|
1651
1614
|
}
|
|
1652
1615
|
// Hide media
|
|
1653
1616
|
const result = await mediaHandler.hideMedia(mediaId, session.userId, env, request);
|
|
@@ -1660,7 +1623,7 @@ exports.mediaRoutes = [
|
|
|
1660
1623
|
success: true,
|
|
1661
1624
|
media: result,
|
|
1662
1625
|
}), { status: 200, headers: { "content-type": "application/json" } });
|
|
1663
|
-
return
|
|
1626
|
+
return CorsHandler.addCorsHeaders(response, request, env);
|
|
1664
1627
|
}
|
|
1665
1628
|
catch (error) {
|
|
1666
1629
|
const duration = Date.now() - startTime;
|
|
@@ -1692,10 +1655,10 @@ exports.mediaRoutes = [
|
|
|
1692
1655
|
error: message,
|
|
1693
1656
|
message: error.message || "An unexpected error occurred",
|
|
1694
1657
|
}), { status, headers: { "content-type": "application/json" } });
|
|
1695
|
-
return
|
|
1658
|
+
return CorsHandler.addCorsHeaders(errorResponse, request, env);
|
|
1696
1659
|
}
|
|
1697
1660
|
},
|
|
1698
|
-
middleware: [
|
|
1661
|
+
middleware: [corsMiddleware(), csrfMiddleware()],
|
|
1699
1662
|
description: "Hide a media file from all posts",
|
|
1700
1663
|
},
|
|
1701
1664
|
{
|
|
@@ -1703,19 +1666,19 @@ exports.mediaRoutes = [
|
|
|
1703
1666
|
method: "POST",
|
|
1704
1667
|
handler: async (request, env, context) => {
|
|
1705
1668
|
const startTime = Date.now();
|
|
1706
|
-
const sessionManager = new
|
|
1707
|
-
const securityHeaders = new
|
|
1708
|
-
const logger =
|
|
1709
|
-
const rateLimiter = new
|
|
1710
|
-
const mediaHandler =
|
|
1711
|
-
const { MediaMetrics } = await
|
|
1712
|
-
const { RegionDetector } = await
|
|
1669
|
+
const sessionManager = new SessionManager();
|
|
1670
|
+
const securityHeaders = new SecurityHeaders(env);
|
|
1671
|
+
const logger = getLogger();
|
|
1672
|
+
const rateLimiter = new RateLimiter();
|
|
1673
|
+
const mediaHandler = MediaHandler.create(env);
|
|
1674
|
+
const { MediaMetrics } = await import("../media-metrics.js");
|
|
1675
|
+
const { RegionDetector } = await import("../region-detection.js");
|
|
1713
1676
|
const metrics = new MediaMetrics(env);
|
|
1714
1677
|
// Check authentication
|
|
1715
|
-
const session = await sessionManager.getSession(request,
|
|
1678
|
+
const session = await sessionManager.getSession(request, env.SESSION_SECRET, env);
|
|
1716
1679
|
if (!session) {
|
|
1717
1680
|
const errorResponse = securityHeaders.createSecureResponse(JSON.stringify({ error: "Unauthorized" }), { status: 401, headers: { "content-type": "application/json" } });
|
|
1718
|
-
return
|
|
1681
|
+
return CorsHandler.addCorsHeaders(errorResponse, request, env);
|
|
1719
1682
|
}
|
|
1720
1683
|
// Apply rate limiting: 10 requests per minute per user
|
|
1721
1684
|
const rateLimitResponse = await rateLimiter.applyRateLimitKV(env, request, "/api/media/:mediaId/unhide", 10, 60, session.userId);
|
|
@@ -1741,7 +1704,7 @@ exports.mediaRoutes = [
|
|
|
1741
1704
|
error: "Invalid request",
|
|
1742
1705
|
message: "Media ID is required",
|
|
1743
1706
|
}), { status: 400, headers: { "content-type": "application/json" } });
|
|
1744
|
-
return
|
|
1707
|
+
return CorsHandler.addCorsHeaders(errorResponse, request, env);
|
|
1745
1708
|
}
|
|
1746
1709
|
// Unhide media
|
|
1747
1710
|
const result = await mediaHandler.unhideMedia(mediaId, session.userId, env, request);
|
|
@@ -1754,7 +1717,7 @@ exports.mediaRoutes = [
|
|
|
1754
1717
|
success: true,
|
|
1755
1718
|
media: result,
|
|
1756
1719
|
}), { status: 200, headers: { "content-type": "application/json" } });
|
|
1757
|
-
return
|
|
1720
|
+
return CorsHandler.addCorsHeaders(response, request, env);
|
|
1758
1721
|
}
|
|
1759
1722
|
catch (error) {
|
|
1760
1723
|
const duration = Date.now() - startTime;
|
|
@@ -1786,10 +1749,10 @@ exports.mediaRoutes = [
|
|
|
1786
1749
|
error: message,
|
|
1787
1750
|
message: error.message || "An unexpected error occurred",
|
|
1788
1751
|
}), { status, headers: { "content-type": "application/json" } });
|
|
1789
|
-
return
|
|
1752
|
+
return CorsHandler.addCorsHeaders(errorResponse, request, env);
|
|
1790
1753
|
}
|
|
1791
1754
|
},
|
|
1792
|
-
middleware: [
|
|
1755
|
+
middleware: [corsMiddleware(), csrfMiddleware()],
|
|
1793
1756
|
description: "Unhide a media file (make it visible again)",
|
|
1794
1757
|
},
|
|
1795
1758
|
{
|
|
@@ -1797,19 +1760,19 @@ exports.mediaRoutes = [
|
|
|
1797
1760
|
method: "DELETE",
|
|
1798
1761
|
handler: async (request, env, context) => {
|
|
1799
1762
|
const startTime = Date.now();
|
|
1800
|
-
const sessionManager = new
|
|
1801
|
-
const securityHeaders = new
|
|
1802
|
-
const logger =
|
|
1803
|
-
const rateLimiter = new
|
|
1804
|
-
const mediaHandler =
|
|
1805
|
-
const { MediaMetrics } = await
|
|
1806
|
-
const { RegionDetector } = await
|
|
1763
|
+
const sessionManager = new SessionManager();
|
|
1764
|
+
const securityHeaders = new SecurityHeaders(env);
|
|
1765
|
+
const logger = getLogger();
|
|
1766
|
+
const rateLimiter = new RateLimiter();
|
|
1767
|
+
const mediaHandler = MediaHandler.create(env);
|
|
1768
|
+
const { MediaMetrics } = await import("../media-metrics.js");
|
|
1769
|
+
const { RegionDetector } = await import("../region-detection.js");
|
|
1807
1770
|
const metrics = new MediaMetrics(env);
|
|
1808
1771
|
// Check authentication
|
|
1809
|
-
const session = await sessionManager.getSession(request,
|
|
1772
|
+
const session = await sessionManager.getSession(request, env.SESSION_SECRET, env);
|
|
1810
1773
|
if (!session) {
|
|
1811
1774
|
const errorResponse = securityHeaders.createSecureResponse(JSON.stringify({ error: "Unauthorized" }), { status: 401, headers: { "content-type": "application/json" } });
|
|
1812
|
-
return
|
|
1775
|
+
return CorsHandler.addCorsHeaders(errorResponse, request, env);
|
|
1813
1776
|
}
|
|
1814
1777
|
// Apply rate limiting: 10 requests per minute per user
|
|
1815
1778
|
const rateLimitResponse = await rateLimiter.applyRateLimitKV(env, request, "/api/media/:mediaId", 10, 60, session.userId);
|
|
@@ -1835,7 +1798,7 @@ exports.mediaRoutes = [
|
|
|
1835
1798
|
error: "Invalid request",
|
|
1836
1799
|
message: "Media ID is required",
|
|
1837
1800
|
}), { status: 400, headers: { "content-type": "application/json" } });
|
|
1838
|
-
return
|
|
1801
|
+
return CorsHandler.addCorsHeaders(errorResponse, request, env);
|
|
1839
1802
|
}
|
|
1840
1803
|
// Delete media
|
|
1841
1804
|
try {
|
|
@@ -1849,7 +1812,7 @@ exports.mediaRoutes = [
|
|
|
1849
1812
|
success: true,
|
|
1850
1813
|
message: "Media deleted successfully",
|
|
1851
1814
|
}), { status: 200, headers: { "content-type": "application/json" } });
|
|
1852
|
-
return
|
|
1815
|
+
return CorsHandler.addCorsHeaders(response, request, env);
|
|
1853
1816
|
}
|
|
1854
1817
|
catch (deleteError) {
|
|
1855
1818
|
const duration = Date.now() - startTime;
|
|
@@ -1866,7 +1829,7 @@ exports.mediaRoutes = [
|
|
|
1866
1829
|
message: deleteError.message,
|
|
1867
1830
|
action: "hidden", // Media was hidden instead of deleted
|
|
1868
1831
|
}), { status: 409, headers: { "content-type": "application/json" } });
|
|
1869
|
-
return
|
|
1832
|
+
return CorsHandler.addCorsHeaders(response, request, env);
|
|
1870
1833
|
}
|
|
1871
1834
|
throw deleteError;
|
|
1872
1835
|
}
|
|
@@ -1900,10 +1863,10 @@ exports.mediaRoutes = [
|
|
|
1900
1863
|
error: message,
|
|
1901
1864
|
message: error.message || "An unexpected error occurred",
|
|
1902
1865
|
}), { status, headers: { "content-type": "application/json" } });
|
|
1903
|
-
return
|
|
1866
|
+
return CorsHandler.addCorsHeaders(errorResponse, request, env);
|
|
1904
1867
|
}
|
|
1905
1868
|
},
|
|
1906
|
-
middleware: [
|
|
1869
|
+
middleware: [corsMiddleware(), csrfMiddleware()],
|
|
1907
1870
|
description: "Delete a media file (soft delete)",
|
|
1908
1871
|
},
|
|
1909
1872
|
];
|