@de-otio/trellis 0.4.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/dist/db.d.ts +36 -0
- package/dist/db.d.ts.map +1 -0
- package/dist/db.js +39 -0
- package/dist/db.js.map +1 -0
- package/dist/env.d.ts +107 -0
- package/dist/env.d.ts.map +1 -0
- package/dist/env.js +268 -0
- package/dist/env.js.map +1 -0
- package/dist/extensions.d.ts +15 -0
- package/dist/extensions.d.ts.map +1 -0
- package/dist/extensions.js +35 -0
- package/dist/extensions.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/dist/lambda/cleanup-cron.d.ts +2 -0
- package/dist/lambda/cleanup-cron.d.ts.map +1 -0
- package/dist/lambda/cleanup-cron.js +38 -0
- package/dist/lambda/cleanup-cron.js.map +1 -0
- package/dist/lambda/create-auth-challenge.d.ts +2 -0
- package/dist/lambda/create-auth-challenge.d.ts.map +1 -0
- package/dist/lambda/create-auth-challenge.js +108 -0
- package/dist/lambda/create-auth-challenge.js.map +1 -0
- package/dist/lambda/custom-message.d.ts +3 -0
- package/dist/lambda/custom-message.d.ts.map +1 -0
- package/dist/lambda/custom-message.js +29 -0
- package/dist/lambda/custom-message.js.map +1 -0
- package/dist/lambda/define-auth-challenge.d.ts +2 -0
- package/dist/lambda/define-auth-challenge.d.ts.map +1 -0
- package/dist/lambda/define-auth-challenge.js +27 -0
- package/dist/lambda/define-auth-challenge.js.map +1 -0
- package/dist/lambda/delete-account-worker.d.ts +3 -0
- package/dist/lambda/delete-account-worker.d.ts.map +1 -0
- package/dist/lambda/delete-account-worker.js +122 -0
- package/dist/lambda/delete-account-worker.js.map +1 -0
- package/dist/lambda/diagnostics-proxy.d.ts +6 -0
- package/dist/lambda/diagnostics-proxy.d.ts.map +1 -0
- package/dist/lambda/diagnostics-proxy.js +154 -0
- package/dist/lambda/diagnostics-proxy.js.map +1 -0
- package/dist/lambda/e2e-sweeper.d.ts +18 -0
- package/dist/lambda/e2e-sweeper.d.ts.map +1 -0
- package/dist/lambda/e2e-sweeper.js +127 -0
- package/dist/lambda/e2e-sweeper.js.map +1 -0
- package/dist/lambda/federation-outbox-worker.d.ts +3 -0
- package/dist/lambda/federation-outbox-worker.d.ts.map +1 -0
- package/dist/lambda/federation-outbox-worker.js +11 -0
- package/dist/lambda/federation-outbox-worker.js.map +1 -0
- package/dist/lambda/followers-events-worker.d.ts +3 -0
- package/dist/lambda/followers-events-worker.d.ts.map +1 -0
- package/dist/lambda/followers-events-worker.js +11 -0
- package/dist/lambda/followers-events-worker.js.map +1 -0
- package/dist/lambda/hourly-cron.d.ts +2 -0
- package/dist/lambda/hourly-cron.d.ts.map +1 -0
- package/dist/lambda/hourly-cron.js +101 -0
- package/dist/lambda/hourly-cron.js.map +1 -0
- package/dist/lambda/link-check-worker.d.ts +3 -0
- package/dist/lambda/link-check-worker.d.ts.map +1 -0
- package/dist/lambda/link-check-worker.js +11 -0
- package/dist/lambda/link-check-worker.js.map +1 -0
- package/dist/lambda/maintenance-cron.d.ts +2 -0
- package/dist/lambda/maintenance-cron.d.ts.map +1 -0
- package/dist/lambda/maintenance-cron.js +127 -0
- package/dist/lambda/maintenance-cron.js.map +1 -0
- package/dist/lambda/media-processing-worker.d.ts +3 -0
- package/dist/lambda/media-processing-worker.d.ts.map +1 -0
- package/dist/lambda/media-processing-worker.js +95 -0
- package/dist/lambda/media-processing-worker.js.map +1 -0
- package/dist/lambda/media-reconciliation-worker.d.ts +3 -0
- package/dist/lambda/media-reconciliation-worker.d.ts.map +1 -0
- package/dist/lambda/media-reconciliation-worker.js +11 -0
- package/dist/lambda/media-reconciliation-worker.js.map +1 -0
- package/dist/lambda/nightly-cron.d.ts +2 -0
- package/dist/lambda/nightly-cron.d.ts.map +1 -0
- package/dist/lambda/nightly-cron.js +348 -0
- package/dist/lambda/nightly-cron.js.map +1 -0
- package/dist/lambda/post-confirmation.d.ts +3 -0
- package/dist/lambda/post-confirmation.d.ts.map +1 -0
- package/dist/lambda/post-confirmation.js +79 -0
- package/dist/lambda/post-confirmation.js.map +1 -0
- package/dist/lambda/pre-signup.d.ts +3 -0
- package/dist/lambda/pre-signup.d.ts.map +1 -0
- package/dist/lambda/pre-signup.js +35 -0
- package/dist/lambda/pre-signup.js.map +1 -0
- package/dist/lambda/pre-token-generation.d.ts +3 -0
- package/dist/lambda/pre-token-generation.d.ts.map +1 -0
- package/dist/lambda/pre-token-generation.js +79 -0
- package/dist/lambda/pre-token-generation.js.map +1 -0
- package/dist/lambda/tools/check-health.d.ts +6 -0
- package/dist/lambda/tools/check-health.d.ts.map +1 -0
- package/dist/lambda/tools/check-health.js +24 -0
- package/dist/lambda/tools/check-health.js.map +1 -0
- package/dist/lambda/tools/describe-services.d.ts +20 -0
- package/dist/lambda/tools/describe-services.d.ts.map +1 -0
- package/dist/lambda/tools/describe-services.js +41 -0
- package/dist/lambda/tools/describe-services.js.map +1 -0
- package/dist/lambda/tools/get-cost-report.d.ts +16 -0
- package/dist/lambda/tools/get-cost-report.d.ts.map +1 -0
- package/dist/lambda/tools/get-cost-report.js +54 -0
- package/dist/lambda/tools/get-cost-report.js.map +1 -0
- package/dist/lambda/tools/get-errors.d.ts +11 -0
- package/dist/lambda/tools/get-errors.d.ts.map +1 -0
- package/dist/lambda/tools/get-errors.js +62 -0
- package/dist/lambda/tools/get-errors.js.map +1 -0
- package/dist/lambda/tools/get-feature-flags.d.ts +8 -0
- package/dist/lambda/tools/get-feature-flags.d.ts.map +1 -0
- package/dist/lambda/tools/get-feature-flags.js +23 -0
- package/dist/lambda/tools/get-feature-flags.js.map +1 -0
- package/dist/lambda/tools/get-queue-status.d.ts +9 -0
- package/dist/lambda/tools/get-queue-status.d.ts.map +1 -0
- package/dist/lambda/tools/get-queue-status.js +46 -0
- package/dist/lambda/tools/get-queue-status.js.map +1 -0
- package/dist/lambda/tools/search-logs.d.ts +19 -0
- package/dist/lambda/tools/search-logs.d.ts.map +1 -0
- package/dist/lambda/tools/search-logs.js +55 -0
- package/dist/lambda/tools/search-logs.js.map +1 -0
- package/dist/lambda/tools/send-alert.d.ts +8 -0
- package/dist/lambda/tools/send-alert.d.ts.map +1 -0
- package/dist/lambda/tools/send-alert.js +29 -0
- package/dist/lambda/tools/send-alert.js.map +1 -0
- package/dist/lambda/verify-auth-challenge.d.ts +2 -0
- package/dist/lambda/verify-auth-challenge.d.ts.map +1 -0
- package/dist/lambda/verify-auth-challenge.js +35 -0
- package/dist/lambda/verify-auth-challenge.js.map +1 -0
- package/dist/lib/abuse-metrics.d.ts +44 -0
- package/dist/lib/abuse-metrics.d.ts.map +1 -0
- package/dist/lib/abuse-metrics.js +322 -0
- package/dist/lib/abuse-metrics.js.map +1 -0
- package/dist/lib/activitypub/activity-processor.d.ts +89 -0
- package/dist/lib/activitypub/activity-processor.d.ts.map +1 -0
- package/dist/lib/activitypub/activity-processor.js +709 -0
- package/dist/lib/activitypub/activity-processor.js.map +1 -0
- package/dist/lib/activitypub/activity-service.d.ts +47 -0
- package/dist/lib/activitypub/activity-service.d.ts.map +1 -0
- package/dist/lib/activitypub/activity-service.js +165 -0
- package/dist/lib/activitypub/activity-service.js.map +1 -0
- package/dist/lib/activitypub/actor.d.ts +44 -0
- package/dist/lib/activitypub/actor.d.ts.map +1 -0
- package/dist/lib/activitypub/actor.js +116 -0
- package/dist/lib/activitypub/actor.js.map +1 -0
- package/dist/lib/activitypub/audience-service.d.ts +52 -0
- package/dist/lib/activitypub/audience-service.d.ts.map +1 -0
- package/dist/lib/activitypub/audience-service.js +245 -0
- package/dist/lib/activitypub/audience-service.js.map +1 -0
- package/dist/lib/activitypub/crypto.d.ts +42 -0
- package/dist/lib/activitypub/crypto.d.ts.map +1 -0
- package/dist/lib/activitypub/crypto.js +129 -0
- package/dist/lib/activitypub/crypto.js.map +1 -0
- package/dist/lib/activitypub/delivery-service.d.ts +44 -0
- package/dist/lib/activitypub/delivery-service.d.ts.map +1 -0
- package/dist/lib/activitypub/delivery-service.js +259 -0
- package/dist/lib/activitypub/delivery-service.js.map +1 -0
- package/dist/lib/activitypub/dispatchers/entity-actor.d.ts +50 -0
- package/dist/lib/activitypub/dispatchers/entity-actor.d.ts.map +1 -0
- package/dist/lib/activitypub/dispatchers/entity-actor.js +247 -0
- package/dist/lib/activitypub/dispatchers/entity-actor.js.map +1 -0
- package/dist/lib/activitypub/dispatchers/group-actor.d.ts +47 -0
- package/dist/lib/activitypub/dispatchers/group-actor.d.ts.map +1 -0
- package/dist/lib/activitypub/dispatchers/group-actor.js +202 -0
- package/dist/lib/activitypub/dispatchers/group-actor.js.map +1 -0
- package/dist/lib/activitypub/dispatchers/user-actor.d.ts +47 -0
- package/dist/lib/activitypub/dispatchers/user-actor.d.ts.map +1 -0
- package/dist/lib/activitypub/dispatchers/user-actor.js +207 -0
- package/dist/lib/activitypub/dispatchers/user-actor.js.map +1 -0
- package/dist/lib/activitypub/dm-service.d.ts +35 -0
- package/dist/lib/activitypub/dm-service.d.ts.map +1 -0
- package/dist/lib/activitypub/dm-service.js +73 -0
- package/dist/lib/activitypub/dm-service.js.map +1 -0
- package/dist/lib/activitypub/entity-profile-service.d.ts +43 -0
- package/dist/lib/activitypub/entity-profile-service.d.ts.map +1 -0
- package/dist/lib/activitypub/entity-profile-service.js +80 -0
- package/dist/lib/activitypub/entity-profile-service.js.map +1 -0
- package/dist/lib/activitypub/fedify/config.d.ts +15 -0
- package/dist/lib/activitypub/fedify/config.d.ts.map +1 -0
- package/dist/lib/activitypub/fedify/config.js +38 -0
- package/dist/lib/activitypub/fedify/config.js.map +1 -0
- package/dist/lib/activitypub/fedify/context.d.ts +21 -0
- package/dist/lib/activitypub/fedify/context.d.ts.map +1 -0
- package/dist/lib/activitypub/fedify/context.js +67 -0
- package/dist/lib/activitypub/fedify/context.js.map +1 -0
- package/dist/lib/activitypub/fedify/runtime.d.ts +18 -0
- package/dist/lib/activitypub/fedify/runtime.d.ts.map +1 -0
- package/dist/lib/activitypub/fedify/runtime.js +26 -0
- package/dist/lib/activitypub/fedify/runtime.js.map +1 -0
- package/dist/lib/activitypub/friendship-service.d.ts +15 -0
- package/dist/lib/activitypub/friendship-service.d.ts.map +1 -0
- package/dist/lib/activitypub/friendship-service.js +26 -0
- package/dist/lib/activitypub/friendship-service.js.map +1 -0
- package/dist/lib/activitypub/group-service.d.ts +83 -0
- package/dist/lib/activitypub/group-service.d.ts.map +1 -0
- package/dist/lib/activitypub/group-service.js +301 -0
- package/dist/lib/activitypub/group-service.js.map +1 -0
- package/dist/lib/activitypub/http-signatures.d.ts +41 -0
- package/dist/lib/activitypub/http-signatures.d.ts.map +1 -0
- package/dist/lib/activitypub/http-signatures.js +284 -0
- package/dist/lib/activitypub/http-signatures.js.map +1 -0
- package/dist/lib/activitypub/jsonld.d.ts +39 -0
- package/dist/lib/activitypub/jsonld.d.ts.map +1 -0
- package/dist/lib/activitypub/jsonld.js +97 -0
- package/dist/lib/activitypub/jsonld.js.map +1 -0
- package/dist/lib/activitypub/listeners/friends-collection.d.ts +20 -0
- package/dist/lib/activitypub/listeners/friends-collection.d.ts.map +1 -0
- package/dist/lib/activitypub/listeners/friends-collection.js +105 -0
- package/dist/lib/activitypub/listeners/friends-collection.js.map +1 -0
- package/dist/lib/activitypub/listeners/http-signatures.d.ts +29 -0
- package/dist/lib/activitypub/listeners/http-signatures.d.ts.map +1 -0
- package/dist/lib/activitypub/listeners/http-signatures.js +208 -0
- package/dist/lib/activitypub/listeners/http-signatures.js.map +1 -0
- package/dist/lib/activitypub/listeners/inbox.d.ts +34 -0
- package/dist/lib/activitypub/listeners/inbox.d.ts.map +1 -0
- package/dist/lib/activitypub/listeners/inbox.js +226 -0
- package/dist/lib/activitypub/listeners/inbox.js.map +1 -0
- package/dist/lib/activitypub/listeners/outbox.d.ts +20 -0
- package/dist/lib/activitypub/listeners/outbox.d.ts.map +1 -0
- package/dist/lib/activitypub/listeners/outbox.js +117 -0
- package/dist/lib/activitypub/listeners/outbox.js.map +1 -0
- package/dist/lib/activitypub/remote-fetch-service.d.ts +108 -0
- package/dist/lib/activitypub/remote-fetch-service.d.ts.map +1 -0
- package/dist/lib/activitypub/remote-fetch-service.js +364 -0
- package/dist/lib/activitypub/remote-fetch-service.js.map +1 -0
- package/dist/lib/activitypub/services/abuse-prevention.d.ts +52 -0
- package/dist/lib/activitypub/services/abuse-prevention.d.ts.map +1 -0
- package/dist/lib/activitypub/services/abuse-prevention.js +118 -0
- package/dist/lib/activitypub/services/abuse-prevention.js.map +1 -0
- package/dist/lib/activitypub/services/dm-service-fedify.d.ts +46 -0
- package/dist/lib/activitypub/services/dm-service-fedify.d.ts.map +1 -0
- package/dist/lib/activitypub/services/dm-service-fedify.js +168 -0
- package/dist/lib/activitypub/services/dm-service-fedify.js.map +1 -0
- package/dist/lib/activitypub/services/fedify-converters.d.ts +51 -0
- package/dist/lib/activitypub/services/fedify-converters.d.ts.map +1 -0
- package/dist/lib/activitypub/services/fedify-converters.js +109 -0
- package/dist/lib/activitypub/services/fedify-converters.js.map +1 -0
- package/dist/lib/activitypub/services/fedify-delivery.d.ts +41 -0
- package/dist/lib/activitypub/services/fedify-delivery.d.ts.map +1 -0
- package/dist/lib/activitypub/services/fedify-delivery.js +186 -0
- package/dist/lib/activitypub/services/fedify-delivery.js.map +1 -0
- package/dist/lib/activitypub/services/follow-activity-service.d.ts +34 -0
- package/dist/lib/activitypub/services/follow-activity-service.d.ts.map +1 -0
- package/dist/lib/activitypub/services/follow-activity-service.js +64 -0
- package/dist/lib/activitypub/services/follow-activity-service.js.map +1 -0
- package/dist/lib/activitypub/services/post-service-fedify.d.ts +49 -0
- package/dist/lib/activitypub/services/post-service-fedify.d.ts.map +1 -0
- package/dist/lib/activitypub/services/post-service-fedify.js +281 -0
- package/dist/lib/activitypub/services/post-service-fedify.js.map +1 -0
- package/dist/lib/activitypub/services/remote-activity-handler.d.ts +22 -0
- package/dist/lib/activitypub/services/remote-activity-handler.d.ts.map +1 -0
- package/dist/lib/activitypub/services/remote-activity-handler.js +136 -0
- package/dist/lib/activitypub/services/remote-activity-handler.js.map +1 -0
- package/dist/lib/activitypub/standalone-mode.d.ts +34 -0
- package/dist/lib/activitypub/standalone-mode.d.ts.map +1 -0
- package/dist/lib/activitypub/standalone-mode.js +127 -0
- package/dist/lib/activitypub/standalone-mode.js.map +1 -0
- package/dist/lib/activitypub/webfinger/server.d.ts +16 -0
- package/dist/lib/activitypub/webfinger/server.d.ts.map +1 -0
- package/dist/lib/activitypub/webfinger/server.js +221 -0
- package/dist/lib/activitypub/webfinger/server.js.map +1 -0
- package/dist/lib/age-gate-middleware.d.ts +19 -0
- package/dist/lib/age-gate-middleware.d.ts.map +1 -0
- package/dist/lib/age-gate-middleware.js +26 -0
- package/dist/lib/age-gate-middleware.js.map +1 -0
- package/dist/lib/age-gate.d.ts +37 -0
- package/dist/lib/age-gate.d.ts.map +1 -0
- package/dist/lib/age-gate.js +96 -0
- package/dist/lib/age-gate.js.map +1 -0
- package/dist/lib/age-tier-transition.d.ts +21 -0
- package/dist/lib/age-tier-transition.d.ts.map +1 -0
- package/dist/lib/age-tier-transition.js +190 -0
- package/dist/lib/age-tier-transition.js.map +1 -0
- package/dist/lib/audit-logger.d.ts +142 -0
- package/dist/lib/audit-logger.d.ts.map +1 -0
- package/dist/lib/audit-logger.js +326 -0
- package/dist/lib/audit-logger.js.map +1 -0
- package/dist/lib/auth/cognito-jwt.d.ts +20 -0
- package/dist/lib/auth/cognito-jwt.d.ts.map +1 -0
- package/dist/lib/auth/cognito-jwt.js +56 -0
- package/dist/lib/auth/cognito-jwt.js.map +1 -0
- package/dist/lib/auth-context-manager.d.ts +116 -0
- package/dist/lib/auth-context-manager.d.ts.map +1 -0
- package/dist/lib/auth-context-manager.js +130 -0
- package/dist/lib/auth-context-manager.js.map +1 -0
- package/dist/lib/auth-handler.d.ts +19 -0
- package/dist/lib/auth-handler.d.ts.map +1 -0
- package/dist/lib/auth-handler.js +76 -0
- package/dist/lib/auth-handler.js.map +1 -0
- package/dist/lib/badge-handler.d.ts +20 -0
- package/dist/lib/badge-handler.d.ts.map +1 -0
- package/dist/lib/badge-handler.js +142 -0
- package/dist/lib/badge-handler.js.map +1 -0
- package/dist/lib/circle-handler.d.ts +22 -0
- package/dist/lib/circle-handler.d.ts.map +1 -0
- package/dist/lib/circle-handler.js +224 -0
- package/dist/lib/circle-handler.js.map +1 -0
- package/dist/lib/circuit-breaker.d.ts +27 -0
- package/dist/lib/circuit-breaker.d.ts.map +1 -0
- package/dist/lib/circuit-breaker.js +63 -0
- package/dist/lib/circuit-breaker.js.map +1 -0
- package/dist/lib/comment-handler.d.ts +77 -0
- package/dist/lib/comment-handler.d.ts.map +1 -0
- package/dist/lib/comment-handler.js +953 -0
- package/dist/lib/comment-handler.js.map +1 -0
- package/dist/lib/connection-code-handler.d.ts +17 -0
- package/dist/lib/connection-code-handler.d.ts.map +1 -0
- package/dist/lib/connection-code-handler.js +293 -0
- package/dist/lib/connection-code-handler.js.map +1 -0
- package/dist/lib/content-discovery.d.ts +113 -0
- package/dist/lib/content-discovery.d.ts.map +1 -0
- package/dist/lib/content-discovery.js +519 -0
- package/dist/lib/content-discovery.js.map +1 -0
- package/dist/lib/context-aware-data-access.d.ts +89 -0
- package/dist/lib/context-aware-data-access.d.ts.map +1 -0
- package/dist/lib/context-aware-data-access.js +97 -0
- package/dist/lib/context-aware-data-access.js.map +1 -0
- package/dist/lib/cors-handler.d.ts +29 -0
- package/dist/lib/cors-handler.d.ts.map +1 -0
- package/dist/lib/cors-handler.js +225 -0
- package/dist/lib/cors-handler.js.map +1 -0
- package/dist/lib/cost-accumulator.d.ts +58 -0
- package/dist/lib/cost-accumulator.d.ts.map +1 -0
- package/dist/lib/cost-accumulator.js +173 -0
- package/dist/lib/cost-accumulator.js.map +1 -0
- package/dist/lib/crypto/encryption-service.d.ts +100 -0
- package/dist/lib/crypto/encryption-service.d.ts.map +1 -0
- package/dist/lib/crypto/encryption-service.js +293 -0
- package/dist/lib/crypto/encryption-service.js.map +1 -0
- package/dist/lib/crypto/index.d.ts +22 -0
- package/dist/lib/crypto/index.d.ts.map +1 -0
- package/dist/lib/crypto/index.js +28 -0
- package/dist/lib/crypto/index.js.map +1 -0
- package/dist/lib/crypto/types.d.ts +71 -0
- package/dist/lib/crypto/types.d.ts.map +1 -0
- package/dist/lib/crypto/types.js +3 -0
- package/dist/lib/crypto/types.js.map +1 -0
- package/dist/lib/crypto/versioning.d.ts +112 -0
- package/dist/lib/crypto/versioning.d.ts.map +1 -0
- package/dist/lib/crypto/versioning.js +148 -0
- package/dist/lib/crypto/versioning.js.map +1 -0
- package/dist/lib/crypto/voting/elgamal-encryption.d.ts +156 -0
- package/dist/lib/crypto/voting/elgamal-encryption.d.ts.map +1 -0
- package/dist/lib/crypto/voting/elgamal-encryption.js +172 -0
- package/dist/lib/crypto/voting/elgamal-encryption.js.map +1 -0
- package/dist/lib/crypto/voting/encryption-scheme.d.ts +138 -0
- package/dist/lib/crypto/voting/encryption-scheme.d.ts.map +1 -0
- package/dist/lib/crypto/voting/encryption-scheme.js +13 -0
- package/dist/lib/crypto/voting/encryption-scheme.js.map +1 -0
- package/dist/lib/crypto/voting/hash-utils.d.ts +58 -0
- package/dist/lib/crypto/voting/hash-utils.d.ts.map +1 -0
- package/dist/lib/crypto/voting/hash-utils.js +73 -0
- package/dist/lib/crypto/voting/hash-utils.js.map +1 -0
- package/dist/lib/crypto/voting/hybrid-encryption.d.ts +109 -0
- package/dist/lib/crypto/voting/hybrid-encryption.d.ts.map +1 -0
- package/dist/lib/crypto/voting/hybrid-encryption.js +134 -0
- package/dist/lib/crypto/voting/hybrid-encryption.js.map +1 -0
- package/dist/lib/crypto/voting/index.d.ts +18 -0
- package/dist/lib/crypto/voting/index.d.ts.map +1 -0
- package/dist/lib/crypto/voting/index.js +27 -0
- package/dist/lib/crypto/voting/index.js.map +1 -0
- package/dist/lib/crypto/voting/post-quantum-encryption.d.ts +107 -0
- package/dist/lib/crypto/voting/post-quantum-encryption.d.ts.map +1 -0
- package/dist/lib/crypto/voting/post-quantum-encryption.js +123 -0
- package/dist/lib/crypto/voting/post-quantum-encryption.js.map +1 -0
- package/dist/lib/csrf.d.ts +95 -0
- package/dist/lib/csrf.d.ts.map +1 -0
- package/dist/lib/csrf.js +174 -0
- package/dist/lib/csrf.js.map +1 -0
- package/dist/lib/data-router.d.ts +209 -0
- package/dist/lib/data-router.d.ts.map +1 -0
- package/dist/lib/data-router.js +792 -0
- package/dist/lib/data-router.js.map +1 -0
- package/dist/lib/database-circuit-breaker.d.ts +75 -0
- package/dist/lib/database-circuit-breaker.d.ts.map +1 -0
- package/dist/lib/database-circuit-breaker.js +155 -0
- package/dist/lib/database-circuit-breaker.js.map +1 -0
- package/dist/lib/database-config.d.ts +20 -0
- package/dist/lib/database-config.d.ts.map +1 -0
- package/dist/lib/database-config.js +46 -0
- package/dist/lib/database-config.js.map +1 -0
- package/dist/lib/database-connection-manager.d.ts +99 -0
- package/dist/lib/database-connection-manager.d.ts.map +1 -0
- package/dist/lib/database-connection-manager.js +495 -0
- package/dist/lib/database-connection-manager.js.map +1 -0
- package/dist/lib/database-monitor.d.ts +89 -0
- package/dist/lib/database-monitor.d.ts.map +1 -0
- package/dist/lib/database-monitor.js +199 -0
- package/dist/lib/database-monitor.js.map +1 -0
- package/dist/lib/database-rate-limiter.d.ts +41 -0
- package/dist/lib/database-rate-limiter.d.ts.map +1 -0
- package/dist/lib/database-rate-limiter.js +90 -0
- package/dist/lib/database-rate-limiter.js.map +1 -0
- package/dist/lib/database-wrapper-helper.d.ts +44 -0
- package/dist/lib/database-wrapper-helper.d.ts.map +1 -0
- package/dist/lib/database-wrapper-helper.js +104 -0
- package/dist/lib/database-wrapper-helper.js.map +1 -0
- package/dist/lib/database-wrapper.d.ts +51 -0
- package/dist/lib/database-wrapper.d.ts.map +1 -0
- package/dist/lib/database-wrapper.js +109 -0
- package/dist/lib/database-wrapper.js.map +1 -0
- package/dist/lib/db-query-helper.d.ts +130 -0
- package/dist/lib/db-query-helper.d.ts.map +1 -0
- package/dist/lib/db-query-helper.js +105 -0
- package/dist/lib/db-query-helper.js.map +1 -0
- package/dist/lib/discovery-handler.d.ts +19 -0
- package/dist/lib/discovery-handler.d.ts.map +1 -0
- package/dist/lib/discovery-handler.js +195 -0
- package/dist/lib/discovery-handler.js.map +1 -0
- package/dist/lib/domain-reputation-service.d.ts +112 -0
- package/dist/lib/domain-reputation-service.d.ts.map +1 -0
- package/dist/lib/domain-reputation-service.js +344 -0
- package/dist/lib/domain-reputation-service.js.map +1 -0
- package/dist/lib/email-privacy.d.ts +54 -0
- package/dist/lib/email-privacy.d.ts.map +1 -0
- package/dist/lib/email-privacy.js +72 -0
- package/dist/lib/email-privacy.js.map +1 -0
- package/dist/lib/email-provider.d.ts +133 -0
- package/dist/lib/email-provider.d.ts.map +1 -0
- package/dist/lib/email-provider.js +391 -0
- package/dist/lib/email-provider.js.map +1 -0
- package/dist/lib/encryption-key-service.d.ts +115 -0
- package/dist/lib/encryption-key-service.d.ts.map +1 -0
- package/dist/lib/encryption-key-service.js +272 -0
- package/dist/lib/encryption-key-service.js.map +1 -0
- package/dist/lib/entity-handler.d.ts +59 -0
- package/dist/lib/entity-handler.d.ts.map +1 -0
- package/dist/lib/entity-handler.js +866 -0
- package/dist/lib/entity-handler.js.map +1 -0
- package/dist/lib/entity-relationship-handler.d.ts +19 -0
- package/dist/lib/entity-relationship-handler.d.ts.map +1 -0
- package/dist/lib/entity-relationship-handler.js +242 -0
- package/dist/lib/entity-relationship-handler.js.map +1 -0
- package/dist/lib/entity-tagging-errors.d.ts +32 -0
- package/dist/lib/entity-tagging-errors.d.ts.map +1 -0
- package/dist/lib/entity-tagging-errors.js +53 -0
- package/dist/lib/entity-tagging-errors.js.map +1 -0
- package/dist/lib/entity-tagging-validator.d.ts +47 -0
- package/dist/lib/entity-tagging-validator.d.ts.map +1 -0
- package/dist/lib/entity-tagging-validator.js +84 -0
- package/dist/lib/entity-tagging-validator.js.map +1 -0
- package/dist/lib/exif-stripper.d.ts +37 -0
- package/dist/lib/exif-stripper.d.ts.map +1 -0
- package/dist/lib/exif-stripper.js +62 -0
- package/dist/lib/exif-stripper.js.map +1 -0
- package/dist/lib/extension-context.d.ts +19 -0
- package/dist/lib/extension-context.d.ts.map +1 -0
- package/dist/lib/extension-context.js +78 -0
- package/dist/lib/extension-context.js.map +1 -0
- package/dist/lib/extension-route-wrapper.d.ts +21 -0
- package/dist/lib/extension-route-wrapper.d.ts.map +1 -0
- package/dist/lib/extension-route-wrapper.js +113 -0
- package/dist/lib/extension-route-wrapper.js.map +1 -0
- package/dist/lib/extension-validator.d.ts +12 -0
- package/dist/lib/extension-validator.d.ts.map +1 -0
- package/dist/lib/extension-validator.js +60 -0
- package/dist/lib/extension-validator.js.map +1 -0
- package/dist/lib/feature-flags.d.ts +56 -0
- package/dist/lib/feature-flags.d.ts.map +1 -0
- package/dist/lib/feature-flags.js +140 -0
- package/dist/lib/feature-flags.js.map +1 -0
- package/dist/lib/feature-toggle-service.d.ts +48 -0
- package/dist/lib/feature-toggle-service.d.ts.map +1 -0
- package/dist/lib/feature-toggle-service.js +167 -0
- package/dist/lib/feature-toggle-service.js.map +1 -0
- package/dist/lib/feed-handler.d.ts +152 -0
- package/dist/lib/feed-handler.d.ts.map +1 -0
- package/dist/lib/feed-handler.js +784 -0
- package/dist/lib/feed-handler.js.map +1 -0
- package/dist/lib/feed-pagination.d.ts +42 -0
- package/dist/lib/feed-pagination.d.ts.map +1 -0
- package/dist/lib/feed-pagination.js +54 -0
- package/dist/lib/feed-pagination.js.map +1 -0
- package/dist/lib/feed-personalization.d.ts +52 -0
- package/dist/lib/feed-personalization.d.ts.map +1 -0
- package/dist/lib/feed-personalization.js +105 -0
- package/dist/lib/feed-personalization.js.map +1 -0
- package/dist/lib/followers-events.d.ts +37 -0
- package/dist/lib/followers-events.d.ts.map +1 -0
- package/dist/lib/followers-events.js +149 -0
- package/dist/lib/followers-events.js.map +1 -0
- package/dist/lib/followers-handler.d.ts +21 -0
- package/dist/lib/followers-handler.d.ts.map +1 -0
- package/dist/lib/followers-handler.js +35 -0
- package/dist/lib/followers-handler.js.map +1 -0
- package/dist/lib/friends-handler.d.ts +78 -0
- package/dist/lib/friends-handler.d.ts.map +1 -0
- package/dist/lib/friends-handler.js +390 -0
- package/dist/lib/friends-handler.js.map +1 -0
- package/dist/lib/graph/dual-write-service.d.ts +116 -0
- package/dist/lib/graph/dual-write-service.d.ts.map +1 -0
- package/dist/lib/graph/dual-write-service.js +332 -0
- package/dist/lib/graph/dual-write-service.js.map +1 -0
- package/dist/lib/graph/dual-write.d.ts +396 -0
- package/dist/lib/graph/dual-write.d.ts.map +1 -0
- package/dist/lib/graph/dual-write.js +53 -0
- package/dist/lib/graph/dual-write.js.map +1 -0
- package/dist/lib/graph/errors.d.ts +90 -0
- package/dist/lib/graph/errors.d.ts.map +1 -0
- package/dist/lib/graph/errors.js +131 -0
- package/dist/lib/graph/errors.js.map +1 -0
- package/dist/lib/graph/graph-factory.d.ts +64 -0
- package/dist/lib/graph/graph-factory.d.ts.map +1 -0
- package/dist/lib/graph/graph-factory.js +190 -0
- package/dist/lib/graph/graph-factory.js.map +1 -0
- package/dist/lib/graph/graph-schema-init.d.ts +31 -0
- package/dist/lib/graph/graph-schema-init.d.ts.map +1 -0
- package/dist/lib/graph/graph-schema-init.js +105 -0
- package/dist/lib/graph/graph-schema-init.js.map +1 -0
- package/dist/lib/graph/graph-service.d.ts +479 -0
- package/dist/lib/graph/graph-service.d.ts.map +1 -0
- package/dist/lib/graph/graph-service.js +21 -0
- package/dist/lib/graph/graph-service.js.map +1 -0
- package/dist/lib/graph/index.d.ts +40 -0
- package/dist/lib/graph/index.d.ts.map +1 -0
- package/dist/lib/graph/index.js +74 -0
- package/dist/lib/graph/index.js.map +1 -0
- package/dist/lib/graph/neo4j-graph-service.d.ts +186 -0
- package/dist/lib/graph/neo4j-graph-service.d.ts.map +1 -0
- package/dist/lib/graph/neo4j-graph-service.js +1625 -0
- package/dist/lib/graph/neo4j-graph-service.js.map +1 -0
- package/dist/lib/graph/reconciliation-service.d.ts +113 -0
- package/dist/lib/graph/reconciliation-service.d.ts.map +1 -0
- package/dist/lib/graph/reconciliation-service.js +533 -0
- package/dist/lib/graph/reconciliation-service.js.map +1 -0
- package/dist/lib/graph/scoring-engine.d.ts +154 -0
- package/dist/lib/graph/scoring-engine.d.ts.map +1 -0
- package/dist/lib/graph/scoring-engine.js +286 -0
- package/dist/lib/graph/scoring-engine.js.map +1 -0
- package/dist/lib/graph/types.d.ts +480 -0
- package/dist/lib/graph/types.d.ts.map +1 -0
- package/dist/lib/graph/types.js +10 -0
- package/dist/lib/graph/types.js.map +1 -0
- package/dist/lib/hook-dispatcher.d.ts +21 -0
- package/dist/lib/hook-dispatcher.d.ts.map +1 -0
- package/dist/lib/hook-dispatcher.js +62 -0
- package/dist/lib/hook-dispatcher.js.map +1 -0
- package/dist/lib/id-generator.d.ts +29 -0
- package/dist/lib/id-generator.d.ts.map +1 -0
- package/dist/lib/id-generator.js +51 -0
- package/dist/lib/id-generator.js.map +1 -0
- package/dist/lib/input-sanitizer.d.ts +55 -0
- package/dist/lib/input-sanitizer.d.ts.map +1 -0
- package/dist/lib/input-sanitizer.js +167 -0
- package/dist/lib/input-sanitizer.js.map +1 -0
- package/dist/lib/internal-docs-dashboard.json +112 -0
- package/dist/lib/internal-docs-handler.d.ts +60 -0
- package/dist/lib/internal-docs-handler.d.ts.map +1 -0
- package/dist/lib/internal-docs-handler.js +570 -0
- package/dist/lib/internal-docs-handler.js.map +1 -0
- package/dist/lib/internal-docs-navigation.d.ts +42 -0
- package/dist/lib/internal-docs-navigation.d.ts.map +1 -0
- package/dist/lib/internal-docs-navigation.js +73 -0
- package/dist/lib/internal-docs-navigation.js.map +1 -0
- package/dist/lib/internal-docs-navigation.json +169 -0
- package/dist/lib/invitation-handler.d.ts +133 -0
- package/dist/lib/invitation-handler.d.ts.map +1 -0
- package/dist/lib/invitation-handler.js +1335 -0
- package/dist/lib/invitation-handler.js.map +1 -0
- package/dist/lib/ip-scrubber.d.ts +59 -0
- package/dist/lib/ip-scrubber.d.ts.map +1 -0
- package/dist/lib/ip-scrubber.js +101 -0
- package/dist/lib/ip-scrubber.js.map +1 -0
- package/dist/lib/kv/dynamodb-kv.d.ts +39 -0
- package/dist/lib/kv/dynamodb-kv.d.ts.map +1 -0
- package/dist/lib/kv/dynamodb-kv.js +239 -0
- package/dist/lib/kv/dynamodb-kv.js.map +1 -0
- package/dist/lib/link-security-handler.d.ts +140 -0
- package/dist/lib/link-security-handler.d.ts.map +1 -0
- package/dist/lib/link-security-handler.js +460 -0
- package/dist/lib/link-security-handler.js.map +1 -0
- package/dist/lib/logger.d.ts +100 -0
- package/dist/lib/logger.d.ts.map +1 -0
- package/dist/lib/logger.js +201 -0
- package/dist/lib/logger.js.map +1 -0
- package/dist/lib/media-cleanup-handler.d.ts +46 -0
- package/dist/lib/media-cleanup-handler.d.ts.map +1 -0
- package/dist/lib/media-cleanup-handler.js +190 -0
- package/dist/lib/media-cleanup-handler.js.map +1 -0
- package/dist/lib/media-handler.d.ts +150 -0
- package/dist/lib/media-handler.d.ts.map +1 -0
- package/dist/lib/media-handler.js +1544 -0
- package/dist/lib/media-handler.js.map +1 -0
- package/dist/lib/media-metadata-extractor.d.ts +71 -0
- package/dist/lib/media-metadata-extractor.d.ts.map +1 -0
- package/dist/lib/media-metadata-extractor.js +278 -0
- package/dist/lib/media-metadata-extractor.js.map +1 -0
- package/dist/lib/media-metrics.d.ts +57 -0
- package/dist/lib/media-metrics.d.ts.map +1 -0
- package/dist/lib/media-metrics.js +202 -0
- package/dist/lib/media-metrics.js.map +1 -0
- package/dist/lib/metadata/index.d.ts +6 -0
- package/dist/lib/metadata/index.d.ts.map +1 -0
- package/dist/lib/metadata/index.js +22 -0
- package/dist/lib/metadata/index.js.map +1 -0
- package/dist/lib/metadata/metadata-config.d.ts +17 -0
- package/dist/lib/metadata/metadata-config.d.ts.map +1 -0
- package/dist/lib/metadata/metadata-config.js +23 -0
- package/dist/lib/metadata/metadata-config.js.map +1 -0
- package/dist/lib/metadata/metadata-errors.d.ts +18 -0
- package/dist/lib/metadata/metadata-errors.d.ts.map +1 -0
- package/dist/lib/metadata/metadata-errors.js +26 -0
- package/dist/lib/metadata/metadata-errors.js.map +1 -0
- package/dist/lib/metadata/metadata-extractor.d.ts +17 -0
- package/dist/lib/metadata/metadata-extractor.d.ts.map +1 -0
- package/dist/lib/metadata/metadata-extractor.js +264 -0
- package/dist/lib/metadata/metadata-extractor.js.map +1 -0
- package/dist/lib/metadata/metadata-sanitizer.d.ts +9 -0
- package/dist/lib/metadata/metadata-sanitizer.d.ts.map +1 -0
- package/dist/lib/metadata/metadata-sanitizer.js +100 -0
- package/dist/lib/metadata/metadata-sanitizer.js.map +1 -0
- package/dist/lib/metadata/metadata-schemas.d.ts +131 -0
- package/dist/lib/metadata/metadata-schemas.d.ts.map +1 -0
- package/dist/lib/metadata/metadata-schemas.js +71 -0
- package/dist/lib/metadata/metadata-schemas.js.map +1 -0
- package/dist/lib/mfa/mfa-handler.d.ts +60 -0
- package/dist/lib/mfa/mfa-handler.d.ts.map +1 -0
- package/dist/lib/mfa/mfa-handler.js +150 -0
- package/dist/lib/mfa/mfa-handler.js.map +1 -0
- package/dist/lib/mfa/totp-service.d.ts +41 -0
- package/dist/lib/mfa/totp-service.d.ts.map +1 -0
- package/dist/lib/mfa/totp-service.js +183 -0
- package/dist/lib/mfa/totp-service.js.map +1 -0
- package/dist/lib/middleware/comment-rate-limit.d.ts +19 -0
- package/dist/lib/middleware/comment-rate-limit.d.ts.map +1 -0
- package/dist/lib/middleware/comment-rate-limit.js +113 -0
- package/dist/lib/middleware/comment-rate-limit.js.map +1 -0
- package/dist/lib/middleware/feature-toggle-rate-limit.d.ts +53 -0
- package/dist/lib/middleware/feature-toggle-rate-limit.d.ts.map +1 -0
- package/dist/lib/middleware/feature-toggle-rate-limit.js +164 -0
- package/dist/lib/middleware/feature-toggle-rate-limit.js.map +1 -0
- package/dist/lib/middleware.d.ts +70 -0
- package/dist/lib/middleware.d.ts.map +1 -0
- package/dist/lib/middleware.js +375 -0
- package/dist/lib/middleware.js.map +1 -0
- package/dist/lib/moderation-handler.d.ts +55 -0
- package/dist/lib/moderation-handler.d.ts.map +1 -0
- package/dist/lib/moderation-handler.js +230 -0
- package/dist/lib/moderation-handler.js.map +1 -0
- package/dist/lib/notification-handler.d.ts +65 -0
- package/dist/lib/notification-handler.d.ts.map +1 -0
- package/dist/lib/notification-handler.js +236 -0
- package/dist/lib/notification-handler.js.map +1 -0
- package/dist/lib/notification-preferences-handler.d.ts +27 -0
- package/dist/lib/notification-preferences-handler.d.ts.map +1 -0
- package/dist/lib/notification-preferences-handler.js +119 -0
- package/dist/lib/notification-preferences-handler.js.map +1 -0
- package/dist/lib/openai-budget.d.ts +45 -0
- package/dist/lib/openai-budget.d.ts.map +1 -0
- package/dist/lib/openai-budget.js +175 -0
- package/dist/lib/openai-budget.js.map +1 -0
- package/dist/lib/orphaned-media-handler.d.ts +60 -0
- package/dist/lib/orphaned-media-handler.d.ts.map +1 -0
- package/dist/lib/orphaned-media-handler.js +487 -0
- package/dist/lib/orphaned-media-handler.js.map +1 -0
- package/dist/lib/parental-control-handler.d.ts +42 -0
- package/dist/lib/parental-control-handler.d.ts.map +1 -0
- package/dist/lib/parental-control-handler.js +327 -0
- package/dist/lib/parental-control-handler.js.map +1 -0
- package/dist/lib/parental-link-handler.d.ts +38 -0
- package/dist/lib/parental-link-handler.d.ts.map +1 -0
- package/dist/lib/parental-link-handler.js +217 -0
- package/dist/lib/parental-link-handler.js.map +1 -0
- package/dist/lib/performance-metrics.d.ts +125 -0
- package/dist/lib/performance-metrics.d.ts.map +1 -0
- package/dist/lib/performance-metrics.js +277 -0
- package/dist/lib/performance-metrics.js.map +1 -0
- package/dist/lib/post-handler.d.ts +94 -0
- package/dist/lib/post-handler.d.ts.map +1 -0
- package/dist/lib/post-handler.js +1346 -0
- package/dist/lib/post-handler.js.map +1 -0
- package/dist/lib/privacy-defaults.d.ts +32 -0
- package/dist/lib/privacy-defaults.d.ts.map +1 -0
- package/dist/lib/privacy-defaults.js +85 -0
- package/dist/lib/privacy-defaults.js.map +1 -0
- package/dist/lib/privacy-handler.d.ts +43 -0
- package/dist/lib/privacy-handler.d.ts.map +1 -0
- package/dist/lib/privacy-handler.js +124 -0
- package/dist/lib/privacy-handler.js.map +1 -0
- package/dist/lib/queue/sqs-queue.d.ts +16 -0
- package/dist/lib/queue/sqs-queue.d.ts.map +1 -0
- package/dist/lib/queue/sqs-queue.js +39 -0
- package/dist/lib/queue/sqs-queue.js.map +1 -0
- package/dist/lib/queue-consumers/media-reconciliation-consumer.d.ts +9 -0
- package/dist/lib/queue-consumers/media-reconciliation-consumer.d.ts.map +1 -0
- package/dist/lib/queue-consumers/media-reconciliation-consumer.js +37 -0
- package/dist/lib/queue-consumers/media-reconciliation-consumer.js.map +1 -0
- package/dist/lib/quiet-hours.d.ts +33 -0
- package/dist/lib/quiet-hours.d.ts.map +1 -0
- package/dist/lib/quiet-hours.js +51 -0
- package/dist/lib/quiet-hours.js.map +1 -0
- package/dist/lib/rate-limit.d.ts +95 -0
- package/dist/lib/rate-limit.d.ts.map +1 -0
- package/dist/lib/rate-limit.js +247 -0
- package/dist/lib/rate-limit.js.map +1 -0
- package/dist/lib/reaction-handler.d.ts +68 -0
- package/dist/lib/reaction-handler.d.ts.map +1 -0
- package/dist/lib/reaction-handler.js +858 -0
- package/dist/lib/reaction-handler.js.map +1 -0
- package/dist/lib/recaptcha.d.ts +16 -0
- package/dist/lib/recaptcha.d.ts.map +1 -0
- package/dist/lib/recaptcha.js +71 -0
- package/dist/lib/recaptcha.js.map +1 -0
- package/dist/lib/redirect-resolver.d.ts +78 -0
- package/dist/lib/redirect-resolver.d.ts.map +1 -0
- package/dist/lib/redirect-resolver.js +276 -0
- package/dist/lib/redirect-resolver.js.map +1 -0
- package/dist/lib/region-config.d.ts +179 -0
- package/dist/lib/region-config.d.ts.map +1 -0
- package/dist/lib/region-config.js +474 -0
- package/dist/lib/region-config.js.map +1 -0
- package/dist/lib/region-detection.d.ts +110 -0
- package/dist/lib/region-detection.d.ts.map +1 -0
- package/dist/lib/region-detection.js +408 -0
- package/dist/lib/region-detection.js.map +1 -0
- package/dist/lib/relationship-handler.d.ts +19 -0
- package/dist/lib/relationship-handler.d.ts.map +1 -0
- package/dist/lib/relationship-handler.js +233 -0
- package/dist/lib/relationship-handler.js.map +1 -0
- package/dist/lib/request-context.d.ts +103 -0
- package/dist/lib/request-context.d.ts.map +1 -0
- package/dist/lib/request-context.js +179 -0
- package/dist/lib/request-context.js.map +1 -0
- package/dist/lib/route-helpers.d.ts +74 -0
- package/dist/lib/route-helpers.d.ts.map +1 -0
- package/dist/lib/route-helpers.js +190 -0
- package/dist/lib/route-helpers.js.map +1 -0
- package/dist/lib/route-matcher.d.ts +24 -0
- package/dist/lib/route-matcher.d.ts.map +1 -0
- package/dist/lib/route-matcher.js +96 -0
- package/dist/lib/route-matcher.js.map +1 -0
- package/dist/lib/router.d.ts +26 -0
- package/dist/lib/router.d.ts.map +1 -0
- package/dist/lib/router.js +90 -0
- package/dist/lib/router.js.map +1 -0
- package/dist/lib/routes/activitypub/actor.d.ts +12 -0
- package/dist/lib/routes/activitypub/actor.d.ts.map +1 -0
- package/dist/lib/routes/activitypub/actor.js +141 -0
- package/dist/lib/routes/activitypub/actor.js.map +1 -0
- package/dist/lib/routes/activitypub/audiences.d.ts +12 -0
- package/dist/lib/routes/activitypub/audiences.d.ts.map +1 -0
- package/dist/lib/routes/activitypub/audiences.js +325 -0
- package/dist/lib/routes/activitypub/audiences.js.map +1 -0
- package/dist/lib/routes/activitypub/collections.d.ts +12 -0
- package/dist/lib/routes/activitypub/collections.d.ts.map +1 -0
- package/dist/lib/routes/activitypub/collections.js +127 -0
- package/dist/lib/routes/activitypub/collections.js.map +1 -0
- package/dist/lib/routes/activitypub/entity-profile.d.ts +9 -0
- package/dist/lib/routes/activitypub/entity-profile.d.ts.map +1 -0
- package/dist/lib/routes/activitypub/entity-profile.js +136 -0
- package/dist/lib/routes/activitypub/entity-profile.js.map +1 -0
- package/dist/lib/routes/activitypub/friends.d.ts +15 -0
- package/dist/lib/routes/activitypub/friends.d.ts.map +1 -0
- package/dist/lib/routes/activitypub/friends.js +33 -0
- package/dist/lib/routes/activitypub/friends.js.map +1 -0
- package/dist/lib/routes/activitypub/group.d.ts +8 -0
- package/dist/lib/routes/activitypub/group.d.ts.map +1 -0
- package/dist/lib/routes/activitypub/group.js +436 -0
- package/dist/lib/routes/activitypub/group.js.map +1 -0
- package/dist/lib/routes/activitypub/inbox.d.ts +15 -0
- package/dist/lib/routes/activitypub/inbox.d.ts.map +1 -0
- package/dist/lib/routes/activitypub/inbox.js +125 -0
- package/dist/lib/routes/activitypub/inbox.js.map +1 -0
- package/dist/lib/routes/activitypub/messages.d.ts +12 -0
- package/dist/lib/routes/activitypub/messages.d.ts.map +1 -0
- package/dist/lib/routes/activitypub/messages.js +374 -0
- package/dist/lib/routes/activitypub/messages.js.map +1 -0
- package/dist/lib/routes/activitypub/outbox.d.ts +15 -0
- package/dist/lib/routes/activitypub/outbox.d.ts.map +1 -0
- package/dist/lib/routes/activitypub/outbox.js +33 -0
- package/dist/lib/routes/activitypub/outbox.js.map +1 -0
- package/dist/lib/routes/activitypub/post.d.ts +12 -0
- package/dist/lib/routes/activitypub/post.d.ts.map +1 -0
- package/dist/lib/routes/activitypub/post.js +213 -0
- package/dist/lib/routes/activitypub/post.js.map +1 -0
- package/dist/lib/routes/activitypub/webfinger.d.ts +11 -0
- package/dist/lib/routes/activitypub/webfinger.d.ts.map +1 -0
- package/dist/lib/routes/activitypub/webfinger.js +27 -0
- package/dist/lib/routes/activitypub/webfinger.js.map +1 -0
- package/dist/lib/routes/admin-costs.d.ts +8 -0
- package/dist/lib/routes/admin-costs.d.ts.map +1 -0
- package/dist/lib/routes/admin-costs.js +89 -0
- package/dist/lib/routes/admin-costs.js.map +1 -0
- package/dist/lib/routes/admin.d.ts +6 -0
- package/dist/lib/routes/admin.d.ts.map +1 -0
- package/dist/lib/routes/admin.js +1450 -0
- package/dist/lib/routes/admin.js.map +1 -0
- package/dist/lib/routes/auth.d.ts +6 -0
- package/dist/lib/routes/auth.d.ts.map +1 -0
- package/dist/lib/routes/auth.js +49 -0
- package/dist/lib/routes/auth.js.map +1 -0
- package/dist/lib/routes/badges.d.ts +6 -0
- package/dist/lib/routes/badges.d.ts.map +1 -0
- package/dist/lib/routes/badges.js +66 -0
- package/dist/lib/routes/badges.js.map +1 -0
- package/dist/lib/routes/circles.d.ts +8 -0
- package/dist/lib/routes/circles.d.ts.map +1 -0
- package/dist/lib/routes/circles.js +135 -0
- package/dist/lib/routes/circles.js.map +1 -0
- package/dist/lib/routes/comments.d.ts +6 -0
- package/dist/lib/routes/comments.d.ts.map +1 -0
- package/dist/lib/routes/comments.js +228 -0
- package/dist/lib/routes/comments.js.map +1 -0
- package/dist/lib/routes/connection-codes.d.ts +8 -0
- package/dist/lib/routes/connection-codes.d.ts.map +1 -0
- package/dist/lib/routes/connection-codes.js +84 -0
- package/dist/lib/routes/connection-codes.js.map +1 -0
- package/dist/lib/routes/content-discovery.d.ts +11 -0
- package/dist/lib/routes/content-discovery.d.ts.map +1 -0
- package/dist/lib/routes/content-discovery.js +211 -0
- package/dist/lib/routes/content-discovery.js.map +1 -0
- package/dist/lib/routes/dashboard.d.ts +8 -0
- package/dist/lib/routes/dashboard.d.ts.map +1 -0
- package/dist/lib/routes/dashboard.js +1139 -0
- package/dist/lib/routes/dashboard.js.map +1 -0
- package/dist/lib/routes/deletion.d.ts +6 -0
- package/dist/lib/routes/deletion.d.ts.map +1 -0
- package/dist/lib/routes/deletion.js +213 -0
- package/dist/lib/routes/deletion.js.map +1 -0
- package/dist/lib/routes/discovery.d.ts +8 -0
- package/dist/lib/routes/discovery.d.ts.map +1 -0
- package/dist/lib/routes/discovery.js +67 -0
- package/dist/lib/routes/discovery.js.map +1 -0
- package/dist/lib/routes/employees.d.ts +6 -0
- package/dist/lib/routes/employees.d.ts.map +1 -0
- package/dist/lib/routes/employees.js +82 -0
- package/dist/lib/routes/employees.js.map +1 -0
- package/dist/lib/routes/entities.d.ts +8 -0
- package/dist/lib/routes/entities.d.ts.map +1 -0
- package/dist/lib/routes/entities.js +467 -0
- package/dist/lib/routes/entities.js.map +1 -0
- package/dist/lib/routes/entity-relationships.d.ts +8 -0
- package/dist/lib/routes/entity-relationships.d.ts.map +1 -0
- package/dist/lib/routes/entity-relationships.js +118 -0
- package/dist/lib/routes/entity-relationships.js.map +1 -0
- package/dist/lib/routes/export.d.ts +6 -0
- package/dist/lib/routes/export.d.ts.map +1 -0
- package/dist/lib/routes/export.js +118 -0
- package/dist/lib/routes/export.js.map +1 -0
- package/dist/lib/routes/feature-flags.d.ts +8 -0
- package/dist/lib/routes/feature-flags.d.ts.map +1 -0
- package/dist/lib/routes/feature-flags.js +75 -0
- package/dist/lib/routes/feature-flags.js.map +1 -0
- package/dist/lib/routes/feeds.d.ts +6 -0
- package/dist/lib/routes/feeds.d.ts.map +1 -0
- package/dist/lib/routes/feeds.js +131 -0
- package/dist/lib/routes/feeds.js.map +1 -0
- package/dist/lib/routes/followers.d.ts +6 -0
- package/dist/lib/routes/followers.d.ts.map +1 -0
- package/dist/lib/routes/followers.js +405 -0
- package/dist/lib/routes/followers.js.map +1 -0
- package/dist/lib/routes/friends.d.ts +6 -0
- package/dist/lib/routes/friends.d.ts.map +1 -0
- package/dist/lib/routes/friends.js +116 -0
- package/dist/lib/routes/friends.js.map +1 -0
- package/dist/lib/routes/health.d.ts +6 -0
- package/dist/lib/routes/health.d.ts.map +1 -0
- package/dist/lib/routes/health.js +129 -0
- package/dist/lib/routes/health.js.map +1 -0
- package/dist/lib/routes/index.d.ts +21 -0
- package/dist/lib/routes/index.d.ts.map +1 -0
- package/dist/lib/routes/index.js +212 -0
- package/dist/lib/routes/index.js.map +1 -0
- package/dist/lib/routes/internal-docs.d.ts +6 -0
- package/dist/lib/routes/internal-docs.d.ts.map +1 -0
- package/dist/lib/routes/internal-docs.js +44 -0
- package/dist/lib/routes/internal-docs.js.map +1 -0
- package/dist/lib/routes/invitations.d.ts +6 -0
- package/dist/lib/routes/invitations.d.ts.map +1 -0
- package/dist/lib/routes/invitations.js +67 -0
- package/dist/lib/routes/invitations.js.map +1 -0
- package/dist/lib/routes/link-reports.d.ts +11 -0
- package/dist/lib/routes/link-reports.d.ts.map +1 -0
- package/dist/lib/routes/link-reports.js +287 -0
- package/dist/lib/routes/link-reports.js.map +1 -0
- package/dist/lib/routes/map.d.ts +6 -0
- package/dist/lib/routes/map.d.ts.map +1 -0
- package/dist/lib/routes/map.js +21 -0
- package/dist/lib/routes/map.js.map +1 -0
- package/dist/lib/routes/media-metadata-visibility.d.ts +3 -0
- package/dist/lib/routes/media-metadata-visibility.d.ts.map +1 -0
- package/dist/lib/routes/media-metadata-visibility.js +184 -0
- package/dist/lib/routes/media-metadata-visibility.js.map +1 -0
- package/dist/lib/routes/media.d.ts +9 -0
- package/dist/lib/routes/media.d.ts.map +1 -0
- package/dist/lib/routes/media.js +1910 -0
- package/dist/lib/routes/media.js.map +1 -0
- package/dist/lib/routes/mfa.d.ts +8 -0
- package/dist/lib/routes/mfa.d.ts.map +1 -0
- package/dist/lib/routes/mfa.js +193 -0
- package/dist/lib/routes/mfa.js.map +1 -0
- package/dist/lib/routes/notifications.d.ts +9 -0
- package/dist/lib/routes/notifications.d.ts.map +1 -0
- package/dist/lib/routes/notifications.js +230 -0
- package/dist/lib/routes/notifications.js.map +1 -0
- package/dist/lib/routes/orphaned-media-health.d.ts +9 -0
- package/dist/lib/routes/orphaned-media-health.d.ts.map +1 -0
- package/dist/lib/routes/orphaned-media-health.js +121 -0
- package/dist/lib/routes/orphaned-media-health.js.map +1 -0
- package/dist/lib/routes/orphaned-media.d.ts +8 -0
- package/dist/lib/routes/orphaned-media.d.ts.map +1 -0
- package/dist/lib/routes/orphaned-media.js +111 -0
- package/dist/lib/routes/orphaned-media.js.map +1 -0
- package/dist/lib/routes/out.d.ts +17 -0
- package/dist/lib/routes/out.d.ts.map +1 -0
- package/dist/lib/routes/out.js +339 -0
- package/dist/lib/routes/out.js.map +1 -0
- package/dist/lib/routes/parental-controls.d.ts +8 -0
- package/dist/lib/routes/parental-controls.d.ts.map +1 -0
- package/dist/lib/routes/parental-controls.js +282 -0
- package/dist/lib/routes/parental-controls.js.map +1 -0
- package/dist/lib/routes/posts.d.ts +6 -0
- package/dist/lib/routes/posts.d.ts.map +1 -0
- package/dist/lib/routes/posts.js +518 -0
- package/dist/lib/routes/posts.js.map +1 -0
- package/dist/lib/routes/privacy.d.ts +6 -0
- package/dist/lib/routes/privacy.d.ts.map +1 -0
- package/dist/lib/routes/privacy.js +66 -0
- package/dist/lib/routes/privacy.js.map +1 -0
- package/dist/lib/routes/products.d.ts +9 -0
- package/dist/lib/routes/products.d.ts.map +1 -0
- package/dist/lib/routes/products.js +224 -0
- package/dist/lib/routes/products.js.map +1 -0
- package/dist/lib/routes/relationships.d.ts +8 -0
- package/dist/lib/routes/relationships.d.ts.map +1 -0
- package/dist/lib/routes/relationships.js +118 -0
- package/dist/lib/routes/relationships.js.map +1 -0
- package/dist/lib/routes/sentiments.d.ts +6 -0
- package/dist/lib/routes/sentiments.d.ts.map +1 -0
- package/dist/lib/routes/sentiments.js +285 -0
- package/dist/lib/routes/sentiments.js.map +1 -0
- package/dist/lib/routes/taxonomy-analytics.d.ts +8 -0
- package/dist/lib/routes/taxonomy-analytics.d.ts.map +1 -0
- package/dist/lib/routes/taxonomy-analytics.js +151 -0
- package/dist/lib/routes/taxonomy-analytics.js.map +1 -0
- package/dist/lib/routes/taxonomy.d.ts +15 -0
- package/dist/lib/routes/taxonomy.d.ts.map +1 -0
- package/dist/lib/routes/taxonomy.js +370 -0
- package/dist/lib/routes/taxonomy.js.map +1 -0
- package/dist/lib/routes/types.d.ts +46 -0
- package/dist/lib/routes/types.d.ts.map +1 -0
- package/dist/lib/routes/types.js +8 -0
- package/dist/lib/routes/types.js.map +1 -0
- package/dist/lib/routes/upload-sessions.d.ts +9 -0
- package/dist/lib/routes/upload-sessions.d.ts.map +1 -0
- package/dist/lib/routes/upload-sessions.js +268 -0
- package/dist/lib/routes/upload-sessions.js.map +1 -0
- package/dist/lib/routes/user.d.ts +8 -0
- package/dist/lib/routes/user.d.ts.map +1 -0
- package/dist/lib/routes/user.js +287 -0
- package/dist/lib/routes/user.js.map +1 -0
- package/dist/lib/routes-all.d.ts +9 -0
- package/dist/lib/routes-all.d.ts.map +1 -0
- package/dist/lib/routes-all.js +170 -0
- package/dist/lib/routes-all.js.map +1 -0
- package/dist/lib/routes.d.ts +10 -0
- package/dist/lib/routes.d.ts.map +1 -0
- package/dist/lib/routes.js +16 -0
- package/dist/lib/routes.js.map +1 -0
- package/dist/lib/scaling-health.d.ts +48 -0
- package/dist/lib/scaling-health.d.ts.map +1 -0
- package/dist/lib/scaling-health.js +363 -0
- package/dist/lib/scaling-health.js.map +1 -0
- package/dist/lib/scheduled/media-stale-cleanup.d.ts +11 -0
- package/dist/lib/scheduled/media-stale-cleanup.d.ts.map +1 -0
- package/dist/lib/scheduled/media-stale-cleanup.js +79 -0
- package/dist/lib/scheduled/media-stale-cleanup.js.map +1 -0
- package/dist/lib/scheduled/orphaned-media-monitor.d.ts +97 -0
- package/dist/lib/scheduled/orphaned-media-monitor.d.ts.map +1 -0
- package/dist/lib/scheduled/orphaned-media-monitor.js +399 -0
- package/dist/lib/scheduled/orphaned-media-monitor.js.map +1 -0
- package/dist/lib/schemas.d.ts +314 -0
- package/dist/lib/schemas.d.ts.map +1 -0
- package/dist/lib/schemas.js +235 -0
- package/dist/lib/schemas.js.map +1 -0
- package/dist/lib/secret-resolver.d.ts +88 -0
- package/dist/lib/secret-resolver.d.ts.map +1 -0
- package/dist/lib/secret-resolver.js +183 -0
- package/dist/lib/secret-resolver.js.map +1 -0
- package/dist/lib/security-event-cleaner.d.ts +61 -0
- package/dist/lib/security-event-cleaner.d.ts.map +1 -0
- package/dist/lib/security-event-cleaner.js +74 -0
- package/dist/lib/security-event-cleaner.js.map +1 -0
- package/dist/lib/security-headers.d.ts +36 -0
- package/dist/lib/security-headers.d.ts.map +1 -0
- package/dist/lib/security-headers.js +87 -0
- package/dist/lib/security-headers.js.map +1 -0
- package/dist/lib/security-monitor.d.ts +92 -0
- package/dist/lib/security-monitor.d.ts.map +1 -0
- package/dist/lib/security-monitor.js +287 -0
- package/dist/lib/security-monitor.js.map +1 -0
- package/dist/lib/sentiment-digest.d.ts +19 -0
- package/dist/lib/sentiment-digest.d.ts.map +1 -0
- package/dist/lib/sentiment-digest.js +99 -0
- package/dist/lib/sentiment-digest.js.map +1 -0
- package/dist/lib/sentiment-display.d.ts +20 -0
- package/dist/lib/sentiment-display.d.ts.map +1 -0
- package/dist/lib/sentiment-display.js +38 -0
- package/dist/lib/sentiment-display.js.map +1 -0
- package/dist/lib/services/image-normalizer.d.ts +15 -0
- package/dist/lib/services/image-normalizer.d.ts.map +1 -0
- package/dist/lib/services/image-normalizer.js +22 -0
- package/dist/lib/services/image-normalizer.js.map +1 -0
- package/dist/lib/services/media-reconciliation-service.d.ts +25 -0
- package/dist/lib/services/media-reconciliation-service.d.ts.map +1 -0
- package/dist/lib/services/media-reconciliation-service.js +191 -0
- package/dist/lib/services/media-reconciliation-service.js.map +1 -0
- package/dist/lib/services/media-upload-service.d.ts +25 -0
- package/dist/lib/services/media-upload-service.d.ts.map +1 -0
- package/dist/lib/services/media-upload-service.js +240 -0
- package/dist/lib/services/media-upload-service.js.map +1 -0
- package/dist/lib/services/user-data-deletion.d.ts +30 -0
- package/dist/lib/services/user-data-deletion.d.ts.map +1 -0
- package/dist/lib/services/user-data-deletion.js +118 -0
- package/dist/lib/services/user-data-deletion.js.map +1 -0
- package/dist/lib/session-awareness.d.ts +35 -0
- package/dist/lib/session-awareness.d.ts.map +1 -0
- package/dist/lib/session-awareness.js +79 -0
- package/dist/lib/session-awareness.js.map +1 -0
- package/dist/lib/session-config.d.ts +87 -0
- package/dist/lib/session-config.d.ts.map +1 -0
- package/dist/lib/session-config.js +165 -0
- package/dist/lib/session-config.js.map +1 -0
- package/dist/lib/session-manager.d.ts +103 -0
- package/dist/lib/session-manager.d.ts.map +1 -0
- package/dist/lib/session-manager.js +492 -0
- package/dist/lib/session-manager.js.map +1 -0
- package/dist/lib/sso-auth-handler.d.ts +12 -0
- package/dist/lib/sso-auth-handler.d.ts.map +1 -0
- package/dist/lib/sso-auth-handler.js +24 -0
- package/dist/lib/sso-auth-handler.js.map +1 -0
- package/dist/lib/storage/s3-storage.d.ts +29 -0
- package/dist/lib/storage/s3-storage.d.ts.map +1 -0
- package/dist/lib/storage/s3-storage.js +135 -0
- package/dist/lib/storage/s3-storage.js.map +1 -0
- package/dist/lib/tag-suggestions-handler.d.ts +52 -0
- package/dist/lib/tag-suggestions-handler.d.ts.map +1 -0
- package/dist/lib/tag-suggestions-handler.js +195 -0
- package/dist/lib/tag-suggestions-handler.js.map +1 -0
- package/dist/lib/taxonomy-handler-factory.d.ts +18 -0
- package/dist/lib/taxonomy-handler-factory.d.ts.map +1 -0
- package/dist/lib/taxonomy-handler-factory.js +29 -0
- package/dist/lib/taxonomy-handler-factory.js.map +1 -0
- package/dist/lib/taxonomy-handler.d.ts +142 -0
- package/dist/lib/taxonomy-handler.d.ts.map +1 -0
- package/dist/lib/taxonomy-handler.js +636 -0
- package/dist/lib/taxonomy-handler.js.map +1 -0
- package/dist/lib/taxonomy-metrics.d.ts +76 -0
- package/dist/lib/taxonomy-metrics.d.ts.map +1 -0
- package/dist/lib/taxonomy-metrics.js +201 -0
- package/dist/lib/taxonomy-metrics.js.map +1 -0
- package/dist/lib/taxonomy-search-metrics.d.ts +45 -0
- package/dist/lib/taxonomy-search-metrics.d.ts.map +1 -0
- package/dist/lib/taxonomy-search-metrics.js +75 -0
- package/dist/lib/taxonomy-search-metrics.js.map +1 -0
- package/dist/lib/tenant-context.d.ts +35 -0
- package/dist/lib/tenant-context.d.ts.map +1 -0
- package/dist/lib/tenant-context.js +54 -0
- package/dist/lib/tenant-context.js.map +1 -0
- package/dist/lib/terminology.d.ts +25 -0
- package/dist/lib/terminology.d.ts.map +1 -0
- package/dist/lib/terminology.js +44 -0
- package/dist/lib/terminology.js.map +1 -0
- package/dist/lib/theme.d.ts +29 -0
- package/dist/lib/theme.d.ts.map +1 -0
- package/dist/lib/theme.js +38 -0
- package/dist/lib/theme.js.map +1 -0
- package/dist/lib/threat-intel-service.d.ts +67 -0
- package/dist/lib/threat-intel-service.d.ts.map +1 -0
- package/dist/lib/threat-intel-service.js +193 -0
- package/dist/lib/threat-intel-service.js.map +1 -0
- package/dist/lib/types/media-reconciliation.d.ts +64 -0
- package/dist/lib/types/media-reconciliation.d.ts.map +1 -0
- package/dist/lib/types/media-reconciliation.js +8 -0
- package/dist/lib/types/media-reconciliation.js.map +1 -0
- package/dist/lib/upload-session-handler.d.ts +56 -0
- package/dist/lib/upload-session-handler.d.ts.map +1 -0
- package/dist/lib/upload-session-handler.js +312 -0
- package/dist/lib/upload-session-handler.js.map +1 -0
- package/dist/lib/user-badge.d.ts +56 -0
- package/dist/lib/user-badge.d.ts.map +1 -0
- package/dist/lib/user-badge.js +92 -0
- package/dist/lib/user-badge.js.map +1 -0
- package/dist/lib/user-deletion-handler-enhanced.d.ts +96 -0
- package/dist/lib/user-deletion-handler-enhanced.d.ts.map +1 -0
- package/dist/lib/user-deletion-handler-enhanced.js +401 -0
- package/dist/lib/user-deletion-handler-enhanced.js.map +1 -0
- package/dist/lib/user-deprovisioning.d.ts +43 -0
- package/dist/lib/user-deprovisioning.d.ts.map +1 -0
- package/dist/lib/user-deprovisioning.js +138 -0
- package/dist/lib/user-deprovisioning.js.map +1 -0
- package/dist/lib/user-export-handler.d.ts +172 -0
- package/dist/lib/user-export-handler.d.ts.map +1 -0
- package/dist/lib/user-export-handler.js +435 -0
- package/dist/lib/user-export-handler.js.map +1 -0
- package/dist/lib/validate-request.d.ts +46 -0
- package/dist/lib/validate-request.d.ts.map +1 -0
- package/dist/lib/validate-request.js +127 -0
- package/dist/lib/validate-request.js.map +1 -0
- package/dist/lib/validation/feature-toggle-schemas.d.ts +410 -0
- package/dist/lib/validation/feature-toggle-schemas.d.ts.map +1 -0
- package/dist/lib/validation/feature-toggle-schemas.js +274 -0
- package/dist/lib/validation/feature-toggle-schemas.js.map +1 -0
- package/dist/lib/validation/validate-request.d.ts +75 -0
- package/dist/lib/validation/validate-request.d.ts.map +1 -0
- package/dist/lib/validation/validate-request.js +183 -0
- package/dist/lib/validation/validate-request.js.map +1 -0
- package/dist/lib/validation.d.ts +50 -0
- package/dist/lib/validation.d.ts.map +1 -0
- package/dist/lib/validation.js +122 -0
- package/dist/lib/validation.js.map +1 -0
- package/dist/lib/version.d.ts +36 -0
- package/dist/lib/version.d.ts.map +1 -0
- package/dist/lib/version.js +44 -0
- package/dist/lib/version.js.map +1 -0
- package/dist/server.d.ts +13 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +254 -0
- package/dist/server.js.map +1 -0
- package/dist/types/cloudflare-compat.d.ts +134 -0
- package/dist/types/cloudflare-compat.d.ts.map +1 -0
- package/dist/types/cloudflare-compat.js +7 -0
- package/dist/types/cloudflare-compat.js.map +1 -0
- package/dist/worker.d.ts +16 -0
- package/dist/worker.d.ts.map +1 -0
- package/dist/worker.js +21 -0
- package/dist/worker.js.map +1 -0
- package/package.json +91 -0
- package/src/lambda/cleanup-cron.ts +37 -0
- package/src/lambda/create-auth-challenge.ts +112 -0
- package/src/lambda/custom-message.ts +30 -0
- package/src/lambda/define-auth-challenge.ts +24 -0
- package/src/lambda/delete-account-worker.ts +96 -0
- package/src/lambda/diagnostics-proxy.ts +139 -0
- package/src/lambda/e2e-sweeper.ts +140 -0
- package/src/lambda/federation-outbox-worker.ts +8 -0
- package/src/lambda/followers-events-worker.ts +8 -0
- package/src/lambda/hourly-cron.ts +103 -0
- package/src/lambda/link-check-worker.ts +8 -0
- package/src/lambda/maintenance-cron.ts +95 -0
- package/src/lambda/media-processing-worker.ts +68 -0
- package/src/lambda/media-reconciliation-worker.ts +8 -0
- package/src/lambda/nightly-cron.ts +338 -0
- package/src/lambda/post-confirmation.ts +80 -0
- package/src/lambda/pre-signup.ts +39 -0
- package/src/lambda/pre-token-generation.ts +93 -0
- package/src/lambda/tools/check-health.ts +22 -0
- package/src/lambda/tools/describe-services.ts +45 -0
- package/src/lambda/tools/get-cost-report.ts +64 -0
- package/src/lambda/tools/get-errors.ts +78 -0
- package/src/lambda/tools/get-feature-flags.ts +27 -0
- package/src/lambda/tools/get-queue-status.ts +60 -0
- package/src/lambda/tools/search-logs.ts +75 -0
- package/src/lambda/tools/send-alert.ts +37 -0
- package/src/lambda/verify-auth-challenge.ts +37 -0
|
@@ -0,0 +1,792 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Data Router Module
|
|
4
|
+
*
|
|
5
|
+
* Routes data operations to region-specific databases and enforces data residency.
|
|
6
|
+
*
|
|
7
|
+
* Security: All operations validate region and enforce strict region boundaries.
|
|
8
|
+
*
|
|
9
|
+
* Performance: Uses cached database connections (via createPrismaForRegion).
|
|
10
|
+
*/
|
|
11
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
12
|
+
if (k2 === undefined) k2 = k;
|
|
13
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
14
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
15
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
16
|
+
}
|
|
17
|
+
Object.defineProperty(o, k2, desc);
|
|
18
|
+
}) : (function(o, m, k, k2) {
|
|
19
|
+
if (k2 === undefined) k2 = k;
|
|
20
|
+
o[k2] = m[k];
|
|
21
|
+
}));
|
|
22
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
23
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
24
|
+
}) : function(o, v) {
|
|
25
|
+
o["default"] = v;
|
|
26
|
+
});
|
|
27
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
28
|
+
var ownKeys = function(o) {
|
|
29
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
30
|
+
var ar = [];
|
|
31
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
32
|
+
return ar;
|
|
33
|
+
};
|
|
34
|
+
return ownKeys(o);
|
|
35
|
+
};
|
|
36
|
+
return function (mod) {
|
|
37
|
+
if (mod && mod.__esModule) return mod;
|
|
38
|
+
var result = {};
|
|
39
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
40
|
+
__setModuleDefault(result, mod);
|
|
41
|
+
return result;
|
|
42
|
+
};
|
|
43
|
+
})();
|
|
44
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
45
|
+
exports.DataRouter = void 0;
|
|
46
|
+
const db_1 = require("../db");
|
|
47
|
+
const audit_logger_1 = require("./audit-logger");
|
|
48
|
+
const database_wrapper_helper_1 = require("./database-wrapper-helper");
|
|
49
|
+
const ip_scrubber_1 = require("./ip-scrubber");
|
|
50
|
+
const logger_1 = require("./logger");
|
|
51
|
+
const region_detection_1 = require("./region-detection");
|
|
52
|
+
/**
|
|
53
|
+
* Data Router class for region-aware data operations
|
|
54
|
+
*
|
|
55
|
+
* Security: All operations validate region and enforce dataRegion matching.
|
|
56
|
+
*
|
|
57
|
+
* Audit: All operations are logged for compliance and security monitoring.
|
|
58
|
+
*/
|
|
59
|
+
class DataRouter {
|
|
60
|
+
static auditLogger;
|
|
61
|
+
/**
|
|
62
|
+
* Get or create audit logger instance
|
|
63
|
+
*/
|
|
64
|
+
static getAuditLogger(env, requestId) {
|
|
65
|
+
if (!this.auditLogger) {
|
|
66
|
+
this.auditLogger = new audit_logger_1.AuditLogger(env);
|
|
67
|
+
}
|
|
68
|
+
if (requestId) {
|
|
69
|
+
return this.auditLogger.withRequestId(requestId);
|
|
70
|
+
}
|
|
71
|
+
return this.auditLogger;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Validate region access for data operations
|
|
75
|
+
*
|
|
76
|
+
* Security: Ensures dataRegion matches requested region to prevent cross-region data access.
|
|
77
|
+
*
|
|
78
|
+
* @param dataRegion - Region where data is stored (from database)
|
|
79
|
+
* @param requestedRegion - Region where request originated
|
|
80
|
+
* @param userId - Optional user ID for audit logging
|
|
81
|
+
* @param env - Environment variables
|
|
82
|
+
* @param request - Optional request object for audit logging
|
|
83
|
+
* @param requestId - Optional request ID for audit log correlation
|
|
84
|
+
* @throws Error if dataRegion doesn't match requested region
|
|
85
|
+
*/
|
|
86
|
+
/**
|
|
87
|
+
* Check if user has consented to cross-region access
|
|
88
|
+
*/
|
|
89
|
+
static async checkCrossRegionConsent(userId, dataRegion, accessRegion, env) {
|
|
90
|
+
try {
|
|
91
|
+
const db = this.getDatabaseForRegion(accessRegion, env);
|
|
92
|
+
const consent = await db.crossRegionConsent.findUnique({
|
|
93
|
+
where: {
|
|
94
|
+
userId_dataRegion_accessRegion: {
|
|
95
|
+
userId,
|
|
96
|
+
dataRegion,
|
|
97
|
+
accessRegion,
|
|
98
|
+
},
|
|
99
|
+
},
|
|
100
|
+
});
|
|
101
|
+
return consent?.consented === true && consent.withdrawnAt === null;
|
|
102
|
+
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
logger_1.Logger.getInstance(env).warn("[DataRouter] Error checking cross-region consent:", error);
|
|
105
|
+
return false;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
static validateRegionAccess(dataRegion, requestedRegion, userId, env, request, requestId) {
|
|
109
|
+
if (!dataRegion) {
|
|
110
|
+
// Log missing dataRegion as security issue
|
|
111
|
+
try {
|
|
112
|
+
const auditLogger = this.getAuditLogger(env, requestId);
|
|
113
|
+
auditLogger
|
|
114
|
+
.log({
|
|
115
|
+
type: "authorization",
|
|
116
|
+
action: "DATA_REGION_MISSING",
|
|
117
|
+
resource: "unknown",
|
|
118
|
+
userId,
|
|
119
|
+
region: requestedRegion,
|
|
120
|
+
ipAddress: request ? (0, ip_scrubber_1.getIPAddress)(request) : undefined,
|
|
121
|
+
userAgent: request?.headers.get("User-Agent") || undefined,
|
|
122
|
+
severity: "high",
|
|
123
|
+
success: false,
|
|
124
|
+
metadata: {
|
|
125
|
+
requestedRegion,
|
|
126
|
+
error: "dataRegion not set",
|
|
127
|
+
},
|
|
128
|
+
}, env)
|
|
129
|
+
.catch((err) => {
|
|
130
|
+
logger_1.Logger.getInstance(env).warn("[DataRouter] Audit logging failed:", err);
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
catch (auditError) {
|
|
134
|
+
logger_1.Logger.getInstance(env).warn("[DataRouter] Audit logging failed for missing dataRegion:", auditError);
|
|
135
|
+
}
|
|
136
|
+
throw new Error("Data residency violation: dataRegion not set");
|
|
137
|
+
}
|
|
138
|
+
if (dataRegion !== requestedRegion) {
|
|
139
|
+
// Log security violation
|
|
140
|
+
try {
|
|
141
|
+
const auditLogger = this.getAuditLogger(env, requestId);
|
|
142
|
+
auditLogger
|
|
143
|
+
.log({
|
|
144
|
+
type: "authorization",
|
|
145
|
+
action: "CROSS_REGION_DATA_ACCESS_BLOCKED",
|
|
146
|
+
resource: "unknown",
|
|
147
|
+
userId,
|
|
148
|
+
region: requestedRegion,
|
|
149
|
+
dataRegion,
|
|
150
|
+
ipAddress: request ? (0, ip_scrubber_1.getIPAddress)(request) : undefined,
|
|
151
|
+
userAgent: request?.headers.get("User-Agent") || undefined,
|
|
152
|
+
severity: "high",
|
|
153
|
+
success: false,
|
|
154
|
+
metadata: {
|
|
155
|
+
requestedRegion,
|
|
156
|
+
actualDataRegion: dataRegion,
|
|
157
|
+
requiresConsent: true,
|
|
158
|
+
},
|
|
159
|
+
}, env)
|
|
160
|
+
.catch((err) => {
|
|
161
|
+
logger_1.Logger.getInstance(env).warn("[DataRouter] Audit logging failed:", err);
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
catch (auditError) {
|
|
165
|
+
logger_1.Logger.getInstance(env).warn("[DataRouter] Audit logging failed for cross-region access:", auditError);
|
|
166
|
+
}
|
|
167
|
+
// Throw error with specific code that frontend can detect
|
|
168
|
+
const error = new Error(`CROSS_REGION_ACCESS_REQUIRES_CONSENT: Cannot access ${dataRegion} data from ${requestedRegion} region`);
|
|
169
|
+
error.code = "CROSS_REGION_ACCESS_REQUIRES_CONSENT";
|
|
170
|
+
error.dataRegion = dataRegion;
|
|
171
|
+
error.requestedRegion = requestedRegion;
|
|
172
|
+
throw error;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Validate region access with consent check (async version)
|
|
177
|
+
* Use this when you need to check for existing consent
|
|
178
|
+
*/
|
|
179
|
+
static async validateRegionAccessWithConsent(dataRegion, requestedRegion, userId, env, request, requestId) {
|
|
180
|
+
if (!dataRegion) {
|
|
181
|
+
throw new Error("Data residency violation: dataRegion not set");
|
|
182
|
+
}
|
|
183
|
+
if (dataRegion !== requestedRegion) {
|
|
184
|
+
// Check for existing consent
|
|
185
|
+
if (userId) {
|
|
186
|
+
const hasConsent = await this.checkCrossRegionConsent(userId, dataRegion, requestedRegion, env);
|
|
187
|
+
if (hasConsent) {
|
|
188
|
+
// Log consent-based access
|
|
189
|
+
try {
|
|
190
|
+
const auditLogger = this.getAuditLogger(env, requestId);
|
|
191
|
+
auditLogger
|
|
192
|
+
.log({
|
|
193
|
+
type: "authorization",
|
|
194
|
+
action: "CROSS_REGION_DATA_ACCESS_ALLOWED_WITH_CONSENT",
|
|
195
|
+
resource: "unknown",
|
|
196
|
+
userId,
|
|
197
|
+
region: requestedRegion,
|
|
198
|
+
dataRegion,
|
|
199
|
+
ipAddress: request ? (0, ip_scrubber_1.getIPAddress)(request) : undefined,
|
|
200
|
+
userAgent: request?.headers.get("User-Agent") || undefined,
|
|
201
|
+
severity: "medium",
|
|
202
|
+
success: true,
|
|
203
|
+
metadata: {
|
|
204
|
+
requestedRegion,
|
|
205
|
+
actualDataRegion: dataRegion,
|
|
206
|
+
consentBased: true,
|
|
207
|
+
},
|
|
208
|
+
}, env)
|
|
209
|
+
.catch((err) => {
|
|
210
|
+
logger_1.Logger.getInstance(env).warn("[DataRouter] Audit logging failed:", err);
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
catch (auditError) {
|
|
214
|
+
logger_1.Logger.getInstance(env).warn("[DataRouter] Audit logging failed:", auditError);
|
|
215
|
+
}
|
|
216
|
+
return; // Access allowed with consent
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
// No consent, throw error
|
|
220
|
+
this.validateRegionAccess(dataRegion, requestedRegion, userId, env, request, requestId);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Get database client for a specific region
|
|
225
|
+
*
|
|
226
|
+
* Performance: Uses createPrismaForRegion for database connection pooling and caching.
|
|
227
|
+
*
|
|
228
|
+
* If request and userId are provided, returns a wrapped client with monitoring and rate limiting.
|
|
229
|
+
* Otherwise, returns an unwrapped client (for backward compatibility).
|
|
230
|
+
*
|
|
231
|
+
* @param region - Region code ('US', 'EU', 'CN')
|
|
232
|
+
* @param env - Environment variables
|
|
233
|
+
* @param request - Optional request object (if provided, enables monitoring and rate limiting)
|
|
234
|
+
* @param userId - Optional user ID (if provided, enables per-user rate limiting)
|
|
235
|
+
* @returns Prisma client for the region
|
|
236
|
+
* @throws Error if region is invalid
|
|
237
|
+
*/
|
|
238
|
+
static getDatabaseForRegion(region, env, request, userId) {
|
|
239
|
+
// CRITICAL: Validate region before routing
|
|
240
|
+
if (!(0, region_detection_1.isValidRegion)(region)) {
|
|
241
|
+
throw new Error(`Invalid region: ${region}. Valid regions: US, EU, CN`);
|
|
242
|
+
}
|
|
243
|
+
// If request is provided, return wrapped client with monitoring
|
|
244
|
+
if (request) {
|
|
245
|
+
return (0, database_wrapper_helper_1.getWrappedDatabase)(region, env, request, userId);
|
|
246
|
+
}
|
|
247
|
+
// Otherwise, return unwrapped client (backward compatibility)
|
|
248
|
+
// Get region-specific database connection
|
|
249
|
+
// Uses existing createPrismaForRegion which handles connection string selection
|
|
250
|
+
return (0, db_1.createPrismaForRegion)(region, env);
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Create a user in the region-specific database
|
|
254
|
+
*
|
|
255
|
+
* Security: Enforces region validation and dataRegion matching.
|
|
256
|
+
*
|
|
257
|
+
* Audit: Logs user creation for compliance.
|
|
258
|
+
*
|
|
259
|
+
* @param userData - User data to create
|
|
260
|
+
* @param region - Region code ('US', 'EU', 'CN')
|
|
261
|
+
* @param env - Environment variables
|
|
262
|
+
* @param request - Optional request object for audit logging (IP, user agent)
|
|
263
|
+
* @param requestId - Optional request ID for audit log correlation
|
|
264
|
+
* @returns Created user
|
|
265
|
+
* @throws Error if region is invalid or dataRegion mismatch
|
|
266
|
+
*/
|
|
267
|
+
static async createUser(userData, region, env, request, requestId) {
|
|
268
|
+
// CRITICAL: Validate region before routing
|
|
269
|
+
if (!(0, region_detection_1.isValidRegion)(region)) {
|
|
270
|
+
throw new Error(`Invalid region: ${region}. Valid regions: US, EU, CN`);
|
|
271
|
+
}
|
|
272
|
+
// OPTIMIZATION: For test users, use executeWithRetry with appropriate timeout
|
|
273
|
+
// In CI, database connections can be slower, so we use slightly longer timeouts
|
|
274
|
+
const isTestUser = userData.email?.includes("@test.example.com") ||
|
|
275
|
+
userData.email?.includes("test-");
|
|
276
|
+
// Detect CI environment for timeout adjustment
|
|
277
|
+
const isCI = env.CI === "true" || env.GITHUB_ACTIONS === "true";
|
|
278
|
+
// OPTIMIZATION: For test users, use aggressive timeouts since they should be fast
|
|
279
|
+
// Test users are created frequently in tests and should complete quickly
|
|
280
|
+
// In CI, database connections can take longer due to network latency
|
|
281
|
+
// CRITICAL FIX: Increased timeouts based on Cloudflare logs analysis
|
|
282
|
+
// Logs showed 108 query timeouts - 500-800ms is too aggressive
|
|
283
|
+
// Queries are taking 800ms+ under load, causing premature timeouts
|
|
284
|
+
// Use 3s timeout for test users in CI (allows for database connection + query + retry)
|
|
285
|
+
// Use 2s timeout locally (gives queries enough time to complete)
|
|
286
|
+
const testUserTimeoutMs = isCI ? 3000 : 2000;
|
|
287
|
+
const testUserRetryTimeoutMs = isCI ? 1000 : 500;
|
|
288
|
+
// Allow 1 retry in CI for transient connection issues, no retries locally for speed
|
|
289
|
+
const testUserMaxRetries = isCI ? 1 : 0;
|
|
290
|
+
// Use executeWithRetry for proper timeout protection (connection + query)
|
|
291
|
+
const { sharedDatabaseConnectionManager } = await Promise.resolve().then(() => __importStar(require("./database-connection-manager")));
|
|
292
|
+
const logger = logger_1.Logger.getInstance(env);
|
|
293
|
+
const dbWriteStartTime = Date.now();
|
|
294
|
+
const user = await sharedDatabaseConnectionManager.executeWithRetry(region, env, async (db) => {
|
|
295
|
+
// OPTIMIZATION: For test users, try create first (faster than upsert)
|
|
296
|
+
// If user already exists, fall back to upsert
|
|
297
|
+
// This optimizes the common case where test users are new
|
|
298
|
+
if (isTestUser) {
|
|
299
|
+
try {
|
|
300
|
+
return await db.user.create({
|
|
301
|
+
data: {
|
|
302
|
+
...userData,
|
|
303
|
+
region,
|
|
304
|
+
dataRegion: region, // CRITICAL: Must match region
|
|
305
|
+
},
|
|
306
|
+
});
|
|
307
|
+
}
|
|
308
|
+
catch (createError) {
|
|
309
|
+
// If user already exists (unique constraint violation), use upsert
|
|
310
|
+
// This handles cross-region test scenarios where user might exist in different region
|
|
311
|
+
if (createError.code === "P2002" ||
|
|
312
|
+
createError.message?.includes("Unique constraint")) {
|
|
313
|
+
logger.debug("[DataRouter] Test user already exists, using upsert", { userId: userData.id });
|
|
314
|
+
// Fall through to upsert
|
|
315
|
+
}
|
|
316
|
+
else {
|
|
317
|
+
// Re-throw other errors
|
|
318
|
+
throw createError;
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
// Use upsert for production users or when test user already exists
|
|
323
|
+
// This prevents unique constraint violations when user ID is globally unique
|
|
324
|
+
// CRITICAL: Set region and dataRegion to match
|
|
325
|
+
// dataRegion must match region for compliance
|
|
326
|
+
// Note: Type assertion needed since Prisma client hasn't been regenerated with region/dataRegion fields
|
|
327
|
+
// TODO: Remove type assertion after running `npx prisma generate`
|
|
328
|
+
return await db.user.upsert({
|
|
329
|
+
where: { id: userData.id },
|
|
330
|
+
create: {
|
|
331
|
+
...userData,
|
|
332
|
+
region,
|
|
333
|
+
dataRegion: region, // CRITICAL: Must match region
|
|
334
|
+
},
|
|
335
|
+
update: {
|
|
336
|
+
// Update email if provided and different
|
|
337
|
+
email: userData.email,
|
|
338
|
+
// For test users, allow region/dataRegion update to handle cross-region test scenarios
|
|
339
|
+
// For production users, preserve their region (compliance requirement)
|
|
340
|
+
...(isTestUser
|
|
341
|
+
? {
|
|
342
|
+
region,
|
|
343
|
+
dataRegion: region, // Update to match requested region for test users
|
|
344
|
+
}
|
|
345
|
+
: {
|
|
346
|
+
// Don't update region/dataRegion on existing users (preserve their region)
|
|
347
|
+
}),
|
|
348
|
+
},
|
|
349
|
+
});
|
|
350
|
+
}, {
|
|
351
|
+
timeoutMs: isTestUser ? testUserTimeoutMs : 3000, // 2s in CI / 1s locally for test users, 3s for real users
|
|
352
|
+
retryTimeoutMs: isTestUser ? testUserRetryTimeoutMs : 1000, // 1s in CI / 0.5s locally for test users, 1s for real users
|
|
353
|
+
maxRetries: isTestUser ? testUserMaxRetries : 1, // 1 retry in CI / 0 retries locally for test users, 1 retry for real users
|
|
354
|
+
context: {
|
|
355
|
+
operation: "createUser",
|
|
356
|
+
userId: userData.id,
|
|
357
|
+
isTestUser,
|
|
358
|
+
isCI,
|
|
359
|
+
},
|
|
360
|
+
});
|
|
361
|
+
const dbWriteDuration = Date.now() - dbWriteStartTime;
|
|
362
|
+
logger.debug("[UserCreation] Database write completed", {
|
|
363
|
+
duration: dbWriteDuration,
|
|
364
|
+
userId: user.id,
|
|
365
|
+
region,
|
|
366
|
+
isTestUser,
|
|
367
|
+
});
|
|
368
|
+
// CRITICAL: Verify dataRegion was set correctly
|
|
369
|
+
if (user.dataRegion !== region) {
|
|
370
|
+
throw new Error(`Data region mismatch: expected ${region}, got ${user.dataRegion}`);
|
|
371
|
+
}
|
|
372
|
+
// Audit log: User creation (don't fail operation if audit logging fails)
|
|
373
|
+
// Use fire-and-forget for test user creation to avoid blocking on slow audit logging
|
|
374
|
+
// Note: isTestUser is already determined above for database optimization
|
|
375
|
+
if (!isTestUser) {
|
|
376
|
+
try {
|
|
377
|
+
const auditLogger = this.getAuditLogger(env, requestId);
|
|
378
|
+
// Fire and forget - don't await to avoid blocking user creation
|
|
379
|
+
auditLogger
|
|
380
|
+
.logUserAction({
|
|
381
|
+
action: "user_created",
|
|
382
|
+
resource: "user",
|
|
383
|
+
resourceId: user.id,
|
|
384
|
+
userId: user.id, // User creating themselves
|
|
385
|
+
region: region,
|
|
386
|
+
dataRegion: user.dataRegion || region,
|
|
387
|
+
ipAddress: request ? (0, ip_scrubber_1.getIPAddress)(request) : undefined,
|
|
388
|
+
userAgent: request?.headers.get("User-Agent") || undefined,
|
|
389
|
+
success: true,
|
|
390
|
+
}, env)
|
|
391
|
+
.catch((auditError) => {
|
|
392
|
+
// Don't fail the operation if audit logging fails
|
|
393
|
+
// Error is already logged by AuditLogger
|
|
394
|
+
logger_1.Logger.getInstance(env).warn("[DataRouter] Audit logging failed for user creation:", auditError);
|
|
395
|
+
});
|
|
396
|
+
}
|
|
397
|
+
catch (auditError) {
|
|
398
|
+
// Don't fail the operation if audit logging fails
|
|
399
|
+
logger_1.Logger.getInstance(env).warn("[DataRouter] Audit logging setup failed for user creation:", auditError);
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
return user;
|
|
403
|
+
}
|
|
404
|
+
/**
|
|
405
|
+
* Get a user from the region-specific database
|
|
406
|
+
*
|
|
407
|
+
* Security: Validates region and verifies dataRegion matches requested region.
|
|
408
|
+
*
|
|
409
|
+
* Audit: Logs data access for compliance.
|
|
410
|
+
*
|
|
411
|
+
* @param userId - User ID
|
|
412
|
+
* @param region - Region code ('US', 'EU', 'CN')
|
|
413
|
+
* @param env - Environment variables
|
|
414
|
+
* @param request - Optional request object for audit logging (IP, user agent)
|
|
415
|
+
* @param requestId - Optional request ID for audit log correlation
|
|
416
|
+
* @param requestingUserId - Optional ID of user making the request (for audit)
|
|
417
|
+
* @returns User or null if not found
|
|
418
|
+
* @throws Error if region is invalid or dataRegion mismatch detected
|
|
419
|
+
*/
|
|
420
|
+
static async getUser(userId, region, env, request, requestId, requestingUserId) {
|
|
421
|
+
// CRITICAL: Validate region before routing
|
|
422
|
+
if (!(0, region_detection_1.isValidRegion)(region)) {
|
|
423
|
+
throw new Error(`Invalid region: ${region}. Valid regions: US, EU, CN`);
|
|
424
|
+
}
|
|
425
|
+
// Get region-specific database (with monitoring/rate limiting if request provided)
|
|
426
|
+
const db = this.getDatabaseForRegion(region, env, request, userId);
|
|
427
|
+
// Find user in region-specific database
|
|
428
|
+
// Note: Type assertion needed since Prisma client hasn't been regenerated with region/dataRegion fields
|
|
429
|
+
// TODO: Remove type assertion after running `npx prisma generate`
|
|
430
|
+
const user = await db.user.findUnique({
|
|
431
|
+
where: { id: userId },
|
|
432
|
+
});
|
|
433
|
+
// CRITICAL: Verify dataRegion matches requested region
|
|
434
|
+
// This is defense in depth - routing should prevent this, but we check anyway
|
|
435
|
+
if (user && user.dataRegion && user.dataRegion !== region) {
|
|
436
|
+
// Log security violation and return null (don't expose cross-region data)
|
|
437
|
+
try {
|
|
438
|
+
const auditLogger = this.getAuditLogger(env, requestId);
|
|
439
|
+
await auditLogger.log({
|
|
440
|
+
type: "authorization",
|
|
441
|
+
action: "CROSS_REGION_DATA_ACCESS_BLOCKED",
|
|
442
|
+
resource: "user",
|
|
443
|
+
resourceId: userId,
|
|
444
|
+
userId: requestingUserId,
|
|
445
|
+
region: region,
|
|
446
|
+
dataRegion: user.dataRegion,
|
|
447
|
+
ipAddress: request ? (0, ip_scrubber_1.getIPAddress)(request) : undefined,
|
|
448
|
+
userAgent: request?.headers.get("User-Agent") || undefined,
|
|
449
|
+
severity: "high",
|
|
450
|
+
success: false,
|
|
451
|
+
metadata: {
|
|
452
|
+
requestedRegion: region,
|
|
453
|
+
actualDataRegion: user.dataRegion,
|
|
454
|
+
},
|
|
455
|
+
}, env);
|
|
456
|
+
}
|
|
457
|
+
catch (auditError) {
|
|
458
|
+
logger_1.Logger.getInstance(env).warn("[DataRouter] Audit logging failed for cross-region access:", auditError);
|
|
459
|
+
}
|
|
460
|
+
// Return null instead of throwing (don't expose cross-region data)
|
|
461
|
+
return null;
|
|
462
|
+
}
|
|
463
|
+
// Audit log: Data access (don't fail operation if audit logging fails)
|
|
464
|
+
try {
|
|
465
|
+
const auditLogger = this.getAuditLogger(env, requestId);
|
|
466
|
+
await auditLogger.logDataAccess({
|
|
467
|
+
action: "user_accessed",
|
|
468
|
+
resource: "user",
|
|
469
|
+
resourceId: userId,
|
|
470
|
+
userId: requestingUserId,
|
|
471
|
+
region: region,
|
|
472
|
+
dataRegion: user?.dataRegion || region,
|
|
473
|
+
ipAddress: request ? (0, ip_scrubber_1.getIPAddress)(request) : undefined,
|
|
474
|
+
userAgent: request?.headers.get("User-Agent") || undefined,
|
|
475
|
+
success: user !== null,
|
|
476
|
+
}, env);
|
|
477
|
+
}
|
|
478
|
+
catch (auditError) {
|
|
479
|
+
// Don't fail the operation if audit logging fails
|
|
480
|
+
logger_1.Logger.getInstance(env).warn("[DataRouter] Audit logging failed for user access:", auditError);
|
|
481
|
+
}
|
|
482
|
+
return user;
|
|
483
|
+
}
|
|
484
|
+
/**
|
|
485
|
+
* Update a user in the region-specific database
|
|
486
|
+
*
|
|
487
|
+
* Security: Validates region and ensures dataRegion cannot be changed.
|
|
488
|
+
*
|
|
489
|
+
* Audit: Logs user update for compliance.
|
|
490
|
+
*
|
|
491
|
+
* @param userId - User ID
|
|
492
|
+
* @param updateData - Data to update
|
|
493
|
+
* @param region - Region code ('US', 'EU', 'CN')
|
|
494
|
+
* @param env - Environment variables
|
|
495
|
+
* @param request - Optional request object for audit logging (IP, user agent)
|
|
496
|
+
* @param requestId - Optional request ID for audit log correlation
|
|
497
|
+
* @param requestingUserId - Optional ID of user making the request (for audit)
|
|
498
|
+
* @returns Updated user
|
|
499
|
+
* @throws Error if region is invalid or dataRegion mismatch
|
|
500
|
+
*/
|
|
501
|
+
static async updateUser(userId, updateData, region, env, request, requestId, requestingUserId) {
|
|
502
|
+
// CRITICAL: Validate region before routing
|
|
503
|
+
if (!(0, region_detection_1.isValidRegion)(region)) {
|
|
504
|
+
throw new Error(`Invalid region: ${region}. Valid regions: US, EU, CN`);
|
|
505
|
+
}
|
|
506
|
+
// CRITICAL: Prevent dataRegion from being changed
|
|
507
|
+
// dataRegion is immutable - it tracks where data is stored for compliance
|
|
508
|
+
if ("dataRegion" in updateData) {
|
|
509
|
+
throw new Error("dataRegion cannot be changed - it is immutable for compliance");
|
|
510
|
+
}
|
|
511
|
+
// Get region-specific database (with monitoring/rate limiting if request provided)
|
|
512
|
+
const db = this.getDatabaseForRegion(region, env, request, userId);
|
|
513
|
+
// Update user
|
|
514
|
+
// Note: Type assertion needed since Prisma client hasn't been regenerated with region/dataRegion fields
|
|
515
|
+
// TODO: Remove type assertion after running `npx prisma generate`
|
|
516
|
+
const user = await db.user.update({
|
|
517
|
+
where: { id: userId },
|
|
518
|
+
data: updateData, // Type assertion needed for updateData (role type mismatch)
|
|
519
|
+
});
|
|
520
|
+
// CRITICAL: Verify dataRegion still matches region using validation middleware
|
|
521
|
+
this.validateRegionAccess(user.dataRegion, region, requestingUserId || userId, env, request, requestId);
|
|
522
|
+
// Audit log: User update (don't fail operation if audit logging fails)
|
|
523
|
+
try {
|
|
524
|
+
const auditLogger = this.getAuditLogger(env, requestId);
|
|
525
|
+
await auditLogger.logUserAction({
|
|
526
|
+
action: "user_updated",
|
|
527
|
+
resource: "user",
|
|
528
|
+
resourceId: userId,
|
|
529
|
+
userId: requestingUserId || userId,
|
|
530
|
+
region: region,
|
|
531
|
+
dataRegion: user.dataRegion || region,
|
|
532
|
+
ipAddress: request ? (0, ip_scrubber_1.getIPAddress)(request) : undefined,
|
|
533
|
+
userAgent: request?.headers.get("User-Agent") || undefined,
|
|
534
|
+
metadata: {
|
|
535
|
+
updatedFields: Object.keys(updateData),
|
|
536
|
+
},
|
|
537
|
+
success: true,
|
|
538
|
+
}, env);
|
|
539
|
+
}
|
|
540
|
+
catch (auditError) {
|
|
541
|
+
// Don't fail the operation if audit logging fails
|
|
542
|
+
logger_1.Logger.getInstance(env).warn("[DataRouter] Audit logging failed for user update:", auditError);
|
|
543
|
+
}
|
|
544
|
+
return user;
|
|
545
|
+
}
|
|
546
|
+
/**
|
|
547
|
+
* Create a post in the region-specific database
|
|
548
|
+
*
|
|
549
|
+
* Security: Enforces region validation and dataRegion matching.
|
|
550
|
+
*
|
|
551
|
+
* Audit: Logs post creation for compliance.
|
|
552
|
+
*
|
|
553
|
+
* @param postData - Post data to create
|
|
554
|
+
* @param region - Region code ('US', 'EU', 'CN')
|
|
555
|
+
* @param env - Environment variables
|
|
556
|
+
* @param request - Optional request object for audit logging (IP, user agent)
|
|
557
|
+
* @param requestId - Optional request ID for audit log correlation
|
|
558
|
+
* @returns Created post
|
|
559
|
+
* @throws Error if region is invalid
|
|
560
|
+
*/
|
|
561
|
+
static async createPost(postData, region, env, request, requestId, session) {
|
|
562
|
+
// CRITICAL: Validate region before routing
|
|
563
|
+
if (!(0, region_detection_1.isValidRegion)(region)) {
|
|
564
|
+
throw new Error(`Invalid region: ${region}. Valid regions: US, EU, CN`);
|
|
565
|
+
}
|
|
566
|
+
// Get region-specific database (with monitoring/rate limiting if request provided)
|
|
567
|
+
// For transactions, we need the unwrapped Prisma client to avoid Symbol serialization issues
|
|
568
|
+
// Prisma's transaction timeout mechanism tries to serialize the callback, and Proxies contain Symbols
|
|
569
|
+
const wrappedDb = this.getDatabaseForRegion(region, env, request, postData.authorId);
|
|
570
|
+
// Get unwrapped Prisma client for transactions to avoid Proxy Symbol serialization
|
|
571
|
+
const { getUnwrappedDatabase } = await Promise.resolve().then(() => __importStar(require("./database-wrapper-helper")));
|
|
572
|
+
const db = request ? getUnwrappedDatabase(region, env) : wrappedDb;
|
|
573
|
+
// Extract entityRefs (will be handled separately in transaction)
|
|
574
|
+
const entityRefs = postData.entityRefs || [];
|
|
575
|
+
// Extract media (will be handled separately in transaction)
|
|
576
|
+
const media = postData.media || [];
|
|
577
|
+
// Sanitize data to ensure only serializable values are passed to Prisma
|
|
578
|
+
// This prevents Symbol serialization errors
|
|
579
|
+
// Only include known, safe fields that Prisma expects
|
|
580
|
+
const sanitizedPostData = {
|
|
581
|
+
authorId: String(postData.authorId),
|
|
582
|
+
text: String(postData.text),
|
|
583
|
+
visibility: String(postData.visibility),
|
|
584
|
+
};
|
|
585
|
+
// Only include optional fields if they exist and are serializable
|
|
586
|
+
if (postData.geoData !== undefined && postData.geoData !== null) {
|
|
587
|
+
try {
|
|
588
|
+
// Ensure geoData is serializable (JSON round-trip test)
|
|
589
|
+
const serialized = JSON.parse(JSON.stringify(postData.geoData));
|
|
590
|
+
sanitizedPostData.geoData = serialized;
|
|
591
|
+
}
|
|
592
|
+
catch (e) {
|
|
593
|
+
logger_1.Logger.getInstance(env).warn("[DataRouter] geoData is not serializable, skipping:", e);
|
|
594
|
+
}
|
|
595
|
+
}
|
|
596
|
+
if (postData.contentWarnings !== undefined &&
|
|
597
|
+
Array.isArray(postData.contentWarnings)) {
|
|
598
|
+
// Ensure all array items are strings
|
|
599
|
+
sanitizedPostData.contentWarnings = postData.contentWarnings
|
|
600
|
+
.filter((item) => typeof item === "string")
|
|
601
|
+
.map((item) => String(item));
|
|
602
|
+
}
|
|
603
|
+
// Extract only the values needed from env before transaction
|
|
604
|
+
// This prevents Symbol serialization issues when Prisma serializes the transaction callback
|
|
605
|
+
const envForValidation = env.CACHE_KV
|
|
606
|
+
? { CACHE_KV: env.CACHE_KV }
|
|
607
|
+
: {};
|
|
608
|
+
// Use transaction to ensure atomicity
|
|
609
|
+
const result = await db.$transaction(async (tx) => {
|
|
610
|
+
// Validate entity tagging permissions within transaction (if entities provided and session available)
|
|
611
|
+
if (entityRefs.length > 0 && session) {
|
|
612
|
+
const { validateEntityTagging } = await Promise.resolve().then(() => __importStar(require("./entity-tagging-validator")));
|
|
613
|
+
const { FriendsHandler } = await Promise.resolve().then(() => __importStar(require("./friends-handler")));
|
|
614
|
+
const friendsHandler = new FriendsHandler();
|
|
615
|
+
// Sanitize session object to avoid Symbol serialization issues
|
|
616
|
+
const sanitizedSession = {
|
|
617
|
+
userId: String(session.userId),
|
|
618
|
+
email: String(session.email),
|
|
619
|
+
};
|
|
620
|
+
// Validate using transaction client to ensure consistency
|
|
621
|
+
// Only pass minimal env object (CACHE_KV if available) to avoid Symbol issues
|
|
622
|
+
await validateEntityTagging(sanitizedSession.userId, entityRefs, tx, // Transaction client
|
|
623
|
+
friendsHandler, envForValidation, sanitizedSession);
|
|
624
|
+
}
|
|
625
|
+
// CRITICAL: Set dataRegion to match region
|
|
626
|
+
// Note: Type assertion needed since Prisma client hasn't been regenerated with dataRegion field
|
|
627
|
+
// Explicitly construct data object to avoid Symbol serialization issues
|
|
628
|
+
const createData = {
|
|
629
|
+
authorId: sanitizedPostData.authorId,
|
|
630
|
+
text: sanitizedPostData.text,
|
|
631
|
+
visibility: sanitizedPostData.visibility,
|
|
632
|
+
dataRegion: region, // CRITICAL: Must match region
|
|
633
|
+
};
|
|
634
|
+
// Only add optional fields if they exist
|
|
635
|
+
if (sanitizedPostData.geoData !== undefined) {
|
|
636
|
+
createData.geoData = sanitizedPostData.geoData;
|
|
637
|
+
}
|
|
638
|
+
if (sanitizedPostData.contentWarnings !== undefined) {
|
|
639
|
+
createData.contentWarnings = sanitizedPostData.contentWarnings;
|
|
640
|
+
}
|
|
641
|
+
const post = await tx.post.create({
|
|
642
|
+
data: createData, // Type assertion needed until Prisma client is regenerated
|
|
643
|
+
});
|
|
644
|
+
// CRITICAL: Verify dataRegion was set correctly
|
|
645
|
+
if (post.dataRegion !== region) {
|
|
646
|
+
throw new Error(`Data region mismatch: expected ${region}, got ${post.dataRegion}`);
|
|
647
|
+
}
|
|
648
|
+
// Create PostEntity records if entities are tagged
|
|
649
|
+
if (entityRefs.length > 0) {
|
|
650
|
+
await tx.postEntity.createMany({
|
|
651
|
+
data: entityRefs.map((entityId) => ({
|
|
652
|
+
postId: post.id,
|
|
653
|
+
entityId,
|
|
654
|
+
})),
|
|
655
|
+
skipDuplicates: true, // Handle race conditions
|
|
656
|
+
});
|
|
657
|
+
}
|
|
658
|
+
// Create PostMedia records if media are attached
|
|
659
|
+
if (media.length > 0) {
|
|
660
|
+
await tx.postMedia.createMany({
|
|
661
|
+
data: media.map((m, index) => ({
|
|
662
|
+
postId: post.id,
|
|
663
|
+
mediaId: m.id,
|
|
664
|
+
alt: m.alt || "",
|
|
665
|
+
order: index,
|
|
666
|
+
})),
|
|
667
|
+
skipDuplicates: true, // Handle race conditions
|
|
668
|
+
});
|
|
669
|
+
// Mark these files as attached, clearing any stale orphan flag.
|
|
670
|
+
// This is the authoritative source of truth: once a PostMedia record
|
|
671
|
+
// exists, the file is attached regardless of whether completeSession()
|
|
672
|
+
// was called by the client.
|
|
673
|
+
await tx.mediaFile.updateMany({
|
|
674
|
+
where: { id: { in: media.map((m) => m.id) } },
|
|
675
|
+
data: {
|
|
676
|
+
attachedToPost: true,
|
|
677
|
+
orphanedAt: null,
|
|
678
|
+
},
|
|
679
|
+
});
|
|
680
|
+
}
|
|
681
|
+
return post;
|
|
682
|
+
}, {
|
|
683
|
+
timeout: 3000, // 3 second timeout - fail fast if database is slow
|
|
684
|
+
});
|
|
685
|
+
// Audit log: Post creation (don't fail operation if audit logging fails)
|
|
686
|
+
try {
|
|
687
|
+
const auditLogger = this.getAuditLogger(env, requestId);
|
|
688
|
+
await auditLogger.logUserAction({
|
|
689
|
+
action: "post_created",
|
|
690
|
+
resource: "post",
|
|
691
|
+
resourceId: result.id,
|
|
692
|
+
userId: postData.authorId,
|
|
693
|
+
region: region,
|
|
694
|
+
dataRegion: result.dataRegion || region,
|
|
695
|
+
ipAddress: request ? (0, ip_scrubber_1.getIPAddress)(request) : undefined,
|
|
696
|
+
userAgent: request?.headers.get("User-Agent") || undefined,
|
|
697
|
+
metadata: {
|
|
698
|
+
visibility: postData.visibility,
|
|
699
|
+
hasGeoData: !!postData.geoData,
|
|
700
|
+
entityCount: entityRefs.length,
|
|
701
|
+
},
|
|
702
|
+
success: true,
|
|
703
|
+
}, env);
|
|
704
|
+
}
|
|
705
|
+
catch (auditError) {
|
|
706
|
+
// Don't fail the operation if audit logging fails
|
|
707
|
+
logger_1.Logger.getInstance(env).warn("[DataRouter] Audit logging failed for post creation:", auditError);
|
|
708
|
+
}
|
|
709
|
+
return result;
|
|
710
|
+
}
|
|
711
|
+
/**
|
|
712
|
+
* Get a post from the region-specific database
|
|
713
|
+
*
|
|
714
|
+
* Security: Validates region and verifies dataRegion matches requested region.
|
|
715
|
+
*
|
|
716
|
+
* Audit: Logs data access for compliance.
|
|
717
|
+
*
|
|
718
|
+
* @param postId - Post ID
|
|
719
|
+
* @param region - Region code ('US', 'EU', 'CN')
|
|
720
|
+
* @param env - Environment variables
|
|
721
|
+
* @param request - Optional request object for audit logging (IP, user agent)
|
|
722
|
+
* @param requestId - Optional request ID for audit log correlation
|
|
723
|
+
* @param requestingUserId - Optional ID of user making the request (for audit)
|
|
724
|
+
* @returns Post or null if not found
|
|
725
|
+
* @throws Error if region is invalid or dataRegion mismatch detected
|
|
726
|
+
*/
|
|
727
|
+
static async getPost(postId, region, env, request, requestId, requestingUserId) {
|
|
728
|
+
// CRITICAL: Validate region before routing
|
|
729
|
+
if (!(0, region_detection_1.isValidRegion)(region)) {
|
|
730
|
+
throw new Error(`Invalid region: ${region}. Valid regions: US, EU, CN`);
|
|
731
|
+
}
|
|
732
|
+
// Get region-specific database (with monitoring if request provided)
|
|
733
|
+
const db = this.getDatabaseForRegion(region, env, request, requestingUserId);
|
|
734
|
+
// Find post in region-specific database
|
|
735
|
+
// Note: Type assertion needed since Prisma client hasn't been regenerated with dataRegion field
|
|
736
|
+
// TODO: Remove type assertion after running `npx prisma generate`
|
|
737
|
+
const post = await db.post.findUnique({
|
|
738
|
+
where: { id: postId },
|
|
739
|
+
});
|
|
740
|
+
// CRITICAL: Verify dataRegion matches requested region
|
|
741
|
+
if (post && post.dataRegion && post.dataRegion !== region) {
|
|
742
|
+
// Log security violation and return null (don't expose cross-region data)
|
|
743
|
+
try {
|
|
744
|
+
const auditLogger = this.getAuditLogger(env, requestId);
|
|
745
|
+
await auditLogger.log({
|
|
746
|
+
type: "authorization",
|
|
747
|
+
action: "CROSS_REGION_DATA_ACCESS_BLOCKED",
|
|
748
|
+
resource: "post",
|
|
749
|
+
resourceId: postId,
|
|
750
|
+
userId: requestingUserId,
|
|
751
|
+
region: region,
|
|
752
|
+
dataRegion: post.dataRegion,
|
|
753
|
+
ipAddress: request ? (0, ip_scrubber_1.getIPAddress)(request) : undefined,
|
|
754
|
+
userAgent: request?.headers.get("User-Agent") || undefined,
|
|
755
|
+
severity: "high",
|
|
756
|
+
success: false,
|
|
757
|
+
metadata: {
|
|
758
|
+
requestedRegion: region,
|
|
759
|
+
actualDataRegion: post.dataRegion,
|
|
760
|
+
},
|
|
761
|
+
}, env);
|
|
762
|
+
}
|
|
763
|
+
catch (auditError) {
|
|
764
|
+
logger_1.Logger.getInstance(env).warn("[DataRouter] Audit logging failed for cross-region access:", auditError);
|
|
765
|
+
}
|
|
766
|
+
// Return null instead of throwing (don't expose cross-region data)
|
|
767
|
+
return null;
|
|
768
|
+
}
|
|
769
|
+
// Audit log: Data access (don't fail operation if audit logging fails)
|
|
770
|
+
try {
|
|
771
|
+
const auditLogger = this.getAuditLogger(env, requestId);
|
|
772
|
+
await auditLogger.logDataAccess({
|
|
773
|
+
action: "post_accessed",
|
|
774
|
+
resource: "post",
|
|
775
|
+
resourceId: postId,
|
|
776
|
+
userId: requestingUserId,
|
|
777
|
+
region: region,
|
|
778
|
+
dataRegion: post?.dataRegion || region,
|
|
779
|
+
ipAddress: request ? (0, ip_scrubber_1.getIPAddress)(request) : undefined,
|
|
780
|
+
userAgent: request?.headers.get("User-Agent") || undefined,
|
|
781
|
+
success: post !== null,
|
|
782
|
+
}, env);
|
|
783
|
+
}
|
|
784
|
+
catch (auditError) {
|
|
785
|
+
// Don't fail the operation if audit logging fails
|
|
786
|
+
logger_1.Logger.getInstance(env).warn("[DataRouter] Audit logging failed for post access:", auditError);
|
|
787
|
+
}
|
|
788
|
+
return post;
|
|
789
|
+
}
|
|
790
|
+
}
|
|
791
|
+
exports.DataRouter = DataRouter;
|
|
792
|
+
//# sourceMappingURL=data-router.js.map
|