@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,866 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Entity Profile Handlers
|
|
4
|
+
*
|
|
5
|
+
* Handlers for creating and retrieving entity profiles.
|
|
6
|
+
* Replaces DogHandler for white-label support.
|
|
7
|
+
*
|
|
8
|
+
* Feature Flag: entity_profiles_enabled
|
|
9
|
+
*
|
|
10
|
+
* Why the feature flag exists:
|
|
11
|
+
* - Part of white-label architecture preparation - allows per-tenant feature customization
|
|
12
|
+
* - Enables gradual rollout of entity profiles feature
|
|
13
|
+
* - Allows disabling the feature if issues are discovered
|
|
14
|
+
* - Supports subscription-tier based feature access (future)
|
|
15
|
+
* - Provides safety mechanism during development/testing phases
|
|
16
|
+
*/
|
|
17
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
18
|
+
if (k2 === undefined) k2 = k;
|
|
19
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
20
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
21
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
22
|
+
}
|
|
23
|
+
Object.defineProperty(o, k2, desc);
|
|
24
|
+
}) : (function(o, m, k, k2) {
|
|
25
|
+
if (k2 === undefined) k2 = k;
|
|
26
|
+
o[k2] = m[k];
|
|
27
|
+
}));
|
|
28
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
29
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
30
|
+
}) : function(o, v) {
|
|
31
|
+
o["default"] = v;
|
|
32
|
+
});
|
|
33
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
34
|
+
var ownKeys = function(o) {
|
|
35
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
36
|
+
var ar = [];
|
|
37
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
38
|
+
return ar;
|
|
39
|
+
};
|
|
40
|
+
return ownKeys(o);
|
|
41
|
+
};
|
|
42
|
+
return function (mod) {
|
|
43
|
+
if (mod && mod.__esModule) return mod;
|
|
44
|
+
var result = {};
|
|
45
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
46
|
+
__setModuleDefault(result, mod);
|
|
47
|
+
return result;
|
|
48
|
+
};
|
|
49
|
+
})();
|
|
50
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
51
|
+
exports.EntityHandler = void 0;
|
|
52
|
+
const data_router_1 = require("./data-router");
|
|
53
|
+
const id_generator_1 = require("./id-generator");
|
|
54
|
+
const logger_1 = require("./logger");
|
|
55
|
+
const secret_resolver_1 = require("./secret-resolver");
|
|
56
|
+
const session_manager_1 = require("./session-manager");
|
|
57
|
+
const validation_1 = require("./validation");
|
|
58
|
+
const extensions_1 = require("../extensions");
|
|
59
|
+
/**
|
|
60
|
+
* Entity Handler class for managing entity profiles
|
|
61
|
+
*/
|
|
62
|
+
class EntityHandler {
|
|
63
|
+
idGenerator;
|
|
64
|
+
validator;
|
|
65
|
+
logger;
|
|
66
|
+
constructor(env) {
|
|
67
|
+
this.idGenerator = new id_generator_1.IdGenerator();
|
|
68
|
+
this.validator = new validation_1.Validator();
|
|
69
|
+
this.logger = logger_1.Logger.getInstance(env);
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Calculate and update life stage for an entity
|
|
73
|
+
* This is a helper function that can be called when creating/updating entities
|
|
74
|
+
* @param metadata - Entity metadata containing birthdate and breedSize
|
|
75
|
+
* @param lifeStageManualOverride - Whether manual override is set
|
|
76
|
+
* @param existingLifeStage - Existing life stage (if updating)
|
|
77
|
+
* @returns Life stage taxon ID or null
|
|
78
|
+
*/
|
|
79
|
+
calculateEntityLifeStage(entityType, metadata, lifeStageManualOverride, existingLifeStage) {
|
|
80
|
+
const ext = (0, extensions_1.getExtension)(entityType);
|
|
81
|
+
if (!ext?.computeLifeStage)
|
|
82
|
+
return null;
|
|
83
|
+
return ext.computeLifeStage(metadata, lifeStageManualOverride, existingLifeStage ?? null);
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Create or update an entity profile
|
|
87
|
+
*/
|
|
88
|
+
async createEntityProfile(request, session, env) {
|
|
89
|
+
console.error("[ENTITY_HANDLER] createEntityProfile called", {
|
|
90
|
+
userId: session.userId,
|
|
91
|
+
email: session.email,
|
|
92
|
+
});
|
|
93
|
+
try {
|
|
94
|
+
const body = await request.json();
|
|
95
|
+
// Validate input
|
|
96
|
+
const validation = this.validator.validateEntityProfile(body);
|
|
97
|
+
if (!validation.valid) {
|
|
98
|
+
return new Response(JSON.stringify({ error: validation.error }), {
|
|
99
|
+
status: 400,
|
|
100
|
+
headers: { "content-type": "application/json" },
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
const profileData = validation.data;
|
|
104
|
+
// Check if entity profiles feature is enabled
|
|
105
|
+
const { FeatureToggleService } = await Promise.resolve().then(() => __importStar(require("./feature-toggle-service")));
|
|
106
|
+
const { createPrisma } = await Promise.resolve().then(() => __importStar(require("../db")));
|
|
107
|
+
const defaultDb = createPrisma(env);
|
|
108
|
+
const toggleService = new FeatureToggleService(defaultDb);
|
|
109
|
+
const entityProfilesEnabled = await toggleService.isEnabled("entity_profiles_enabled");
|
|
110
|
+
if (!entityProfilesEnabled) {
|
|
111
|
+
return new Response(JSON.stringify({
|
|
112
|
+
error: "Entity profiles feature is currently disabled",
|
|
113
|
+
}), { status: 403, headers: { "content-type": "application/json" } });
|
|
114
|
+
}
|
|
115
|
+
// Check if public posting is enabled when privacy is set to "public"
|
|
116
|
+
const privacy = profileData.metadata?.privacy;
|
|
117
|
+
if (privacy === "public") {
|
|
118
|
+
const publicPostingEnabled = await toggleService.isEnabled("global_public_posting_enabled");
|
|
119
|
+
if (!publicPostingEnabled) {
|
|
120
|
+
return new Response(JSON.stringify({
|
|
121
|
+
error: "PUBLIC_POSTING_DISABLED",
|
|
122
|
+
message: 'Public privacy is currently disabled. Please use "followers" or "private" privacy.',
|
|
123
|
+
}), { status: 403, headers: { "content-type": "application/json" } });
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
// CRITICAL: Use user's dataRegion from session (not detected region)
|
|
127
|
+
// This ensures entity is created in the same region as the user
|
|
128
|
+
const finalRegion = session.dataRegion || env.DEFAULT_REGION || "EU";
|
|
129
|
+
// Get region-specific database using DataRouter
|
|
130
|
+
const db = data_router_1.DataRouter.getDatabaseForRegion(finalRegion, env, request, session.userId);
|
|
131
|
+
// Ensure user exists in database before creating entity
|
|
132
|
+
// This prevents foreign key constraint violations if user was created in Supabase Auth
|
|
133
|
+
// but not yet synced to the database
|
|
134
|
+
console.error("[ENTITY_HANDLER] Ensuring user exists before creating entity", {
|
|
135
|
+
userId: session.userId,
|
|
136
|
+
email: session.email,
|
|
137
|
+
region: finalRegion,
|
|
138
|
+
});
|
|
139
|
+
this.logger.error("[ENTITY_HANDLER] Ensuring user exists before creating entity", {
|
|
140
|
+
userId: session.userId,
|
|
141
|
+
email: session.email,
|
|
142
|
+
region: finalRegion,
|
|
143
|
+
});
|
|
144
|
+
try {
|
|
145
|
+
console.error("[ENTITY_HANDLER] About to upsert user", {
|
|
146
|
+
userId: session.userId,
|
|
147
|
+
email: session.email,
|
|
148
|
+
region: finalRegion,
|
|
149
|
+
});
|
|
150
|
+
const user = await db.user.upsert({
|
|
151
|
+
where: { id: session.userId },
|
|
152
|
+
create: {
|
|
153
|
+
id: session.userId,
|
|
154
|
+
email: session.email || `user-${session.userId}@unknown.local`,
|
|
155
|
+
role: session.role || "END_USER",
|
|
156
|
+
region: finalRegion,
|
|
157
|
+
dataRegion: finalRegion, // dataRegion must match region for compliance
|
|
158
|
+
},
|
|
159
|
+
update: {
|
|
160
|
+
// Update email if it changed (e.g., user updated email in Supabase)
|
|
161
|
+
...(session.email ? { email: session.email } : {}),
|
|
162
|
+
// Don't update region/dataRegion on existing users (preserve their region)
|
|
163
|
+
},
|
|
164
|
+
});
|
|
165
|
+
console.error("[ENTITY_HANDLER] User ensured successfully", {
|
|
166
|
+
userId: user.id,
|
|
167
|
+
email: user.email,
|
|
168
|
+
});
|
|
169
|
+
this.logger.error("[ENTITY_HANDLER] User ensured successfully", {
|
|
170
|
+
userId: user.id,
|
|
171
|
+
email: user.email,
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
catch (userError) {
|
|
175
|
+
this.logger.error("Error ensuring user exists:", {
|
|
176
|
+
error: userError,
|
|
177
|
+
userId: session.userId,
|
|
178
|
+
email: session.email,
|
|
179
|
+
region: finalRegion,
|
|
180
|
+
errorMessage: userError?.message,
|
|
181
|
+
errorCode: userError?.code,
|
|
182
|
+
});
|
|
183
|
+
// If user creation fails, we can't create the entity
|
|
184
|
+
return new Response(JSON.stringify({
|
|
185
|
+
error: "Failed to verify user account. Please try again.",
|
|
186
|
+
}), {
|
|
187
|
+
status: 500,
|
|
188
|
+
headers: { "content-type": "application/json" },
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
// Note: Entity ID will be auto-generated by Prisma (cuid() default)
|
|
192
|
+
// Prepare entity data
|
|
193
|
+
// Note: id is auto-generated by Prisma (cuid() default)
|
|
194
|
+
const entityType = profileData.entityType;
|
|
195
|
+
if (!entityType) {
|
|
196
|
+
return new Response(JSON.stringify({ error: "MISSING_ENTITY_TYPE", message: "entityType is required" }), { status: 400, headers: { "content-type": "application/json" } });
|
|
197
|
+
}
|
|
198
|
+
const metadata = profileData.metadata || {};
|
|
199
|
+
const metadataStr = JSON.stringify(metadata);
|
|
200
|
+
if (metadataStr.length > 64_000) {
|
|
201
|
+
return new Response(JSON.stringify({ error: "METADATA_TOO_LARGE", message: "Metadata exceeds 64KB limit" }), { status: 400, headers: { "content-type": "application/json" } });
|
|
202
|
+
}
|
|
203
|
+
const extension = (0, extensions_1.getExtension)(entityType);
|
|
204
|
+
if (!extension) {
|
|
205
|
+
return new Response(JSON.stringify({ error: "UNKNOWN_ENTITY_TYPE", message: `Unknown entityType: ${entityType}` }), { status: 400, headers: { "content-type": "application/json" } });
|
|
206
|
+
}
|
|
207
|
+
// Calculate life stage if metadata contains birthdate
|
|
208
|
+
const calculatedLifeStage = this.calculateEntityLifeStage(entityType, profileData.metadata, body.lifeStageManualOverride || false, body.lifeStage);
|
|
209
|
+
const metadataValidation = extension.metadataSchema.safeParse(metadata);
|
|
210
|
+
if (!metadataValidation.success) {
|
|
211
|
+
return new Response(JSON.stringify({ error: "INVALID_METADATA", message: metadataValidation.error.errors.map((e) => e.message).join(", ") }), { status: 400, headers: { "content-type": "application/json" } });
|
|
212
|
+
}
|
|
213
|
+
const entityData = {
|
|
214
|
+
name: profileData.name.trim(),
|
|
215
|
+
entityType,
|
|
216
|
+
ownerId: session.userId,
|
|
217
|
+
metadata,
|
|
218
|
+
};
|
|
219
|
+
// Set life stage if calculated
|
|
220
|
+
if (calculatedLifeStage) {
|
|
221
|
+
entityData.lifeStage = calculatedLifeStage;
|
|
222
|
+
entityData.lifeStageCalculatedAt = new Date();
|
|
223
|
+
entityData.lifeStageManualOverride =
|
|
224
|
+
body.lifeStageManualOverride || false;
|
|
225
|
+
}
|
|
226
|
+
// Create entity in database
|
|
227
|
+
const entity = await db.entity.create({
|
|
228
|
+
data: entityData,
|
|
229
|
+
});
|
|
230
|
+
// Dual-write: sync entity and ownership to graph database
|
|
231
|
+
try {
|
|
232
|
+
const { createGraphServiceFromEnv } = await Promise.resolve().then(() => __importStar(require("./graph")));
|
|
233
|
+
const graphService = await createGraphServiceFromEnv(env);
|
|
234
|
+
const syncInput = {
|
|
235
|
+
id: entity.id,
|
|
236
|
+
entityType: entity.entityType || "",
|
|
237
|
+
name: entity.name,
|
|
238
|
+
};
|
|
239
|
+
const md = (entity.metadata || {});
|
|
240
|
+
if (md.breed)
|
|
241
|
+
syncInput.breed = md.breed;
|
|
242
|
+
if (entity.lifeStage)
|
|
243
|
+
syncInput.lifeStage = entity.lifeStage;
|
|
244
|
+
if (typeof md.lat === "number")
|
|
245
|
+
syncInput.lat = Math.round(md.lat * 1000) / 1000;
|
|
246
|
+
if (typeof md.lng === "number")
|
|
247
|
+
syncInput.lng = Math.round(md.lng * 1000) / 1000;
|
|
248
|
+
await graphService.syncEntity(syncInput);
|
|
249
|
+
await graphService.syncOwnership({
|
|
250
|
+
entityId: entity.id,
|
|
251
|
+
userId: session.userId,
|
|
252
|
+
role: "PRIMARY_OWNER",
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
catch (graphError) {
|
|
256
|
+
this.logger.error("[ENTITY_HANDLER] Graph sync failed after entity create (non-fatal)", {
|
|
257
|
+
entityId: entity.id,
|
|
258
|
+
userId: session.userId,
|
|
259
|
+
error: graphError.message,
|
|
260
|
+
});
|
|
261
|
+
}
|
|
262
|
+
// Format response for frontend (matching EntityProfileModel structure)
|
|
263
|
+
// The frontend expects: id, name, entityType, metadata, createdAt, updatedAt
|
|
264
|
+
const responseData = {
|
|
265
|
+
id: entity.id,
|
|
266
|
+
name: entity.name,
|
|
267
|
+
entityType: entity.entityType,
|
|
268
|
+
metadata: entity.metadata || {},
|
|
269
|
+
createdAt: entity.createdAt.toISOString(),
|
|
270
|
+
updatedAt: entity.updatedAt.toISOString(),
|
|
271
|
+
};
|
|
272
|
+
return new Response(JSON.stringify(responseData), {
|
|
273
|
+
status: 201,
|
|
274
|
+
headers: { "content-type": "application/json" },
|
|
275
|
+
});
|
|
276
|
+
}
|
|
277
|
+
catch (error) {
|
|
278
|
+
this.logger.error("Error creating entity profile:", error);
|
|
279
|
+
return new Response(JSON.stringify({ error: this.validator.sanitizeError(error) }), {
|
|
280
|
+
status: 500,
|
|
281
|
+
headers: { "content-type": "application/json" },
|
|
282
|
+
});
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
/**
|
|
286
|
+
* Get an entity profile by ID
|
|
287
|
+
*/
|
|
288
|
+
async getEntityProfile(entityId, session, env, request) {
|
|
289
|
+
// Check if entity profiles feature is enabled
|
|
290
|
+
const { FeatureToggleService } = await Promise.resolve().then(() => __importStar(require("./feature-toggle-service")));
|
|
291
|
+
const { createPrisma } = await Promise.resolve().then(() => __importStar(require("../db")));
|
|
292
|
+
const db = createPrisma(env);
|
|
293
|
+
const toggleService = new FeatureToggleService(db);
|
|
294
|
+
const entityProfilesEnabled = await toggleService.isEnabled("entity_profiles_enabled");
|
|
295
|
+
if (!entityProfilesEnabled) {
|
|
296
|
+
return new Response(JSON.stringify({
|
|
297
|
+
error: "Entity profiles feature is currently disabled",
|
|
298
|
+
}), { status: 403, headers: { "content-type": "application/json" } });
|
|
299
|
+
}
|
|
300
|
+
try {
|
|
301
|
+
// CRITICAL FIX: Search all regions for entity, starting with user's dataRegion
|
|
302
|
+
// This ensures we find entities even if session.dataRegion doesn't match where entity was created
|
|
303
|
+
const { DataRouter } = await Promise.resolve().then(() => __importStar(require("./data-router")));
|
|
304
|
+
const userDataRegion = session.dataRegion || env.DEFAULT_REGION || "EU";
|
|
305
|
+
// Search for entity, starting with user's dataRegion
|
|
306
|
+
let entity = null;
|
|
307
|
+
let hadDbError = false;
|
|
308
|
+
const regionsToSearch = [
|
|
309
|
+
userDataRegion,
|
|
310
|
+
...["EU", "US", "CN"].filter((r) => r !== userDataRegion),
|
|
311
|
+
];
|
|
312
|
+
for (const region of regionsToSearch) {
|
|
313
|
+
try {
|
|
314
|
+
const regionDb = DataRouter.getDatabaseForRegion(region, env, request, session.userId);
|
|
315
|
+
entity = await regionDb.entity.findUnique({
|
|
316
|
+
where: { id: entityId },
|
|
317
|
+
select: {
|
|
318
|
+
id: true,
|
|
319
|
+
name: true,
|
|
320
|
+
entityType: true,
|
|
321
|
+
metadata: true,
|
|
322
|
+
createdAt: true,
|
|
323
|
+
updatedAt: true,
|
|
324
|
+
owners: { select: { userId: true, role: true }, where: { status: 'ACTIVE' } },
|
|
325
|
+
},
|
|
326
|
+
});
|
|
327
|
+
if (entity) {
|
|
328
|
+
if (region !== userDataRegion) {
|
|
329
|
+
this.logger.info("[ENTITY_HANDLER] getEntityProfile: Entity found in different region than user dataRegion", {
|
|
330
|
+
entityId,
|
|
331
|
+
userId: session.userId,
|
|
332
|
+
foundRegion: region,
|
|
333
|
+
userDataRegion,
|
|
334
|
+
});
|
|
335
|
+
}
|
|
336
|
+
else {
|
|
337
|
+
this.logger.info("[ENTITY_HANDLER] getEntityProfile: Entity found in user dataRegion", {
|
|
338
|
+
entityId,
|
|
339
|
+
userId: session.userId,
|
|
340
|
+
foundRegion: region,
|
|
341
|
+
entityName: entity.name,
|
|
342
|
+
entityUpdatedAt: entity.updatedAt,
|
|
343
|
+
});
|
|
344
|
+
}
|
|
345
|
+
break;
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
catch (error) {
|
|
349
|
+
hadDbError = true;
|
|
350
|
+
// Continue searching other regions
|
|
351
|
+
this.logger.debug("[ENTITY_HANDLER] Error searching region for entity", {
|
|
352
|
+
region,
|
|
353
|
+
error: error.message,
|
|
354
|
+
});
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
if (!entity) {
|
|
358
|
+
if (hadDbError) {
|
|
359
|
+
return new Response(JSON.stringify({ error: "Database error retrieving entity" }), { status: 500, headers: { "content-type": "application/json" } });
|
|
360
|
+
}
|
|
361
|
+
return new Response(JSON.stringify({ error: "Entity not found" }), {
|
|
362
|
+
status: 404,
|
|
363
|
+
headers: { "content-type": "application/json" },
|
|
364
|
+
});
|
|
365
|
+
}
|
|
366
|
+
// Check if user owns the entity (for private profiles)
|
|
367
|
+
// Public profiles can be viewed by anyone, but we still check ownership for private ones
|
|
368
|
+
const metadata = entity.metadata || {};
|
|
369
|
+
const privacy = metadata.privacy || "public";
|
|
370
|
+
if (privacy === "private" && entity.owners?.[0]?.userId !== session.userId) {
|
|
371
|
+
return new Response(JSON.stringify({ error: "Forbidden" }), {
|
|
372
|
+
status: 403,
|
|
373
|
+
headers: { "content-type": "application/json" },
|
|
374
|
+
});
|
|
375
|
+
}
|
|
376
|
+
// Format response for frontend
|
|
377
|
+
const responseData = {
|
|
378
|
+
id: entity.id,
|
|
379
|
+
name: entity.name,
|
|
380
|
+
entityType: entity.entityType,
|
|
381
|
+
metadata: entity.metadata || {},
|
|
382
|
+
createdAt: entity.createdAt.toISOString(),
|
|
383
|
+
updatedAt: entity.updatedAt.toISOString(),
|
|
384
|
+
};
|
|
385
|
+
return new Response(JSON.stringify(responseData), {
|
|
386
|
+
status: 200,
|
|
387
|
+
headers: { "content-type": "application/json" },
|
|
388
|
+
});
|
|
389
|
+
}
|
|
390
|
+
catch (error) {
|
|
391
|
+
this.logger.error("Error getting entity profile:", error);
|
|
392
|
+
return new Response(JSON.stringify({ error: this.validator.sanitizeError(error) }), { status: 500, headers: { "content-type": "application/json" } });
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
/**
|
|
396
|
+
* Update an entity profile
|
|
397
|
+
*/
|
|
398
|
+
async updateEntityProfile(entityId, request, session, env) {
|
|
399
|
+
try {
|
|
400
|
+
const body = await request.json();
|
|
401
|
+
// Validate input
|
|
402
|
+
const validation = this.validator.validateEntityProfile(body);
|
|
403
|
+
if (!validation.valid) {
|
|
404
|
+
return new Response(JSON.stringify({ error: validation.error }), {
|
|
405
|
+
status: 400,
|
|
406
|
+
headers: { "content-type": "application/json" },
|
|
407
|
+
});
|
|
408
|
+
}
|
|
409
|
+
const profileData = validation.data;
|
|
410
|
+
// Check if entity profiles feature is enabled
|
|
411
|
+
const { FeatureToggleService } = await Promise.resolve().then(() => __importStar(require("./feature-toggle-service")));
|
|
412
|
+
const { createPrisma } = await Promise.resolve().then(() => __importStar(require("../db")));
|
|
413
|
+
const defaultDb = createPrisma(env);
|
|
414
|
+
const toggleService = new FeatureToggleService(defaultDb);
|
|
415
|
+
const entityProfilesEnabled = await toggleService.isEnabled("entity_profiles_enabled");
|
|
416
|
+
if (!entityProfilesEnabled) {
|
|
417
|
+
this.logger.error("[ENTITY_HANDLER] updateEntityProfile: entity_profiles_enabled is false", {
|
|
418
|
+
entityId,
|
|
419
|
+
userId: session.userId,
|
|
420
|
+
});
|
|
421
|
+
return new Response(JSON.stringify({
|
|
422
|
+
error: "ENTITY_PROFILES_DISABLED",
|
|
423
|
+
message: "Entity profiles feature is currently disabled",
|
|
424
|
+
}), { status: 403, headers: { "content-type": "application/json" } });
|
|
425
|
+
}
|
|
426
|
+
// CRITICAL FIX: Use user's dataRegion to find entity, not detected region
|
|
427
|
+
// Entities are stored in the same region as the user's dataRegion (where they were created)
|
|
428
|
+
// Region detection can vary (IP geolocation, user preference changes), causing entity lookup failures
|
|
429
|
+
const { DataRouter } = await Promise.resolve().then(() => __importStar(require("./data-router")));
|
|
430
|
+
// First, get user's dataRegion (where their entities are stored)
|
|
431
|
+
let entityRegion = env.DEFAULT_REGION || "EU";
|
|
432
|
+
try {
|
|
433
|
+
// Try to get user's dataRegion from their user record
|
|
434
|
+
// Try EU first (most common), then US, then CN
|
|
435
|
+
for (const region of ["EU", "US", "CN"]) {
|
|
436
|
+
const user = await DataRouter.getUser(session.userId, region, env, request);
|
|
437
|
+
if (user?.dataRegion) {
|
|
438
|
+
entityRegion = user.dataRegion;
|
|
439
|
+
break;
|
|
440
|
+
}
|
|
441
|
+
else if (user?.region) {
|
|
442
|
+
// Fallback to region if dataRegion not set (backward compatibility)
|
|
443
|
+
entityRegion = user.region;
|
|
444
|
+
break;
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
catch (error) {
|
|
449
|
+
this.logger.warn("[ENTITY_HANDLER] Could not get user dataRegion, using detected region", {
|
|
450
|
+
userId: session.userId,
|
|
451
|
+
error: error.message,
|
|
452
|
+
});
|
|
453
|
+
// Fallback to detected region if user lookup fails
|
|
454
|
+
const sessionManager = new session_manager_1.SessionManager();
|
|
455
|
+
const sessionSecret = secret_resolver_1.Secrets.getSessionSecret(env);
|
|
456
|
+
const sessionForRegion = await sessionManager.getSession(request, sessionSecret, env);
|
|
457
|
+
const { detectRegion } = await Promise.resolve().then(() => __importStar(require("./region-detection")));
|
|
458
|
+
const detectedRegion = await detectRegion(request, env, sessionManager, sessionForRegion);
|
|
459
|
+
entityRegion = detectedRegion || env.DEFAULT_REGION || "EU";
|
|
460
|
+
}
|
|
461
|
+
// Search for entity, starting with user's dataRegion
|
|
462
|
+
let existingEntity = null;
|
|
463
|
+
let foundRegion = entityRegion;
|
|
464
|
+
const regionsToSearch = [
|
|
465
|
+
entityRegion,
|
|
466
|
+
...["EU", "US", "CN"].filter((r) => r !== entityRegion),
|
|
467
|
+
];
|
|
468
|
+
for (const region of regionsToSearch) {
|
|
469
|
+
try {
|
|
470
|
+
const regionDb = DataRouter.getDatabaseForRegion(region, env, request, session.userId);
|
|
471
|
+
existingEntity = await regionDb.entity.findUnique({
|
|
472
|
+
where: { id: entityId },
|
|
473
|
+
select: {
|
|
474
|
+
id: true,
|
|
475
|
+
entityType: true,
|
|
476
|
+
metadata: true,
|
|
477
|
+
lifeStage: true,
|
|
478
|
+
lifeStageManualOverride: true,
|
|
479
|
+
owners: { select: { userId: true, role: true }, where: { status: 'ACTIVE' } },
|
|
480
|
+
},
|
|
481
|
+
});
|
|
482
|
+
if (existingEntity) {
|
|
483
|
+
foundRegion = region;
|
|
484
|
+
if (region !== entityRegion) {
|
|
485
|
+
this.logger.info("[ENTITY_HANDLER] Entity found in different region than user dataRegion", {
|
|
486
|
+
entityId,
|
|
487
|
+
userId: session.userId,
|
|
488
|
+
foundRegion: region,
|
|
489
|
+
userDataRegion: entityRegion,
|
|
490
|
+
});
|
|
491
|
+
}
|
|
492
|
+
break;
|
|
493
|
+
}
|
|
494
|
+
}
|
|
495
|
+
catch (error) {
|
|
496
|
+
// Continue searching other regions
|
|
497
|
+
this.logger.debug("[ENTITY_HANDLER] Error searching region for entity", {
|
|
498
|
+
region,
|
|
499
|
+
error: error.message,
|
|
500
|
+
});
|
|
501
|
+
}
|
|
502
|
+
}
|
|
503
|
+
if (!existingEntity) {
|
|
504
|
+
this.logger.error("[ENTITY_HANDLER] updateEntityProfile: Entity not found in any region", {
|
|
505
|
+
entityId,
|
|
506
|
+
userId: session.userId,
|
|
507
|
+
searchedRegions: regionsToSearch,
|
|
508
|
+
});
|
|
509
|
+
return new Response(JSON.stringify({ error: "Entity not found" }), {
|
|
510
|
+
status: 404,
|
|
511
|
+
headers: { "content-type": "application/json" },
|
|
512
|
+
});
|
|
513
|
+
}
|
|
514
|
+
// Log which region the entity was found in
|
|
515
|
+
this.logger.info("[ENTITY_HANDLER] updateEntityProfile: Entity found", {
|
|
516
|
+
entityId,
|
|
517
|
+
userId: session.userId,
|
|
518
|
+
foundRegion,
|
|
519
|
+
entityRegion,
|
|
520
|
+
searchedRegions: regionsToSearch,
|
|
521
|
+
});
|
|
522
|
+
// Use the region where the entity was found for the update operation
|
|
523
|
+
const db = DataRouter.getDatabaseForRegion(foundRegion, env, request, session.userId);
|
|
524
|
+
if (!existingEntity.owners?.some((o) => o.userId === session.userId)) {
|
|
525
|
+
this.logger.error("[ENTITY_HANDLER] updateEntityProfile: Ownership mismatch", {
|
|
526
|
+
entityId,
|
|
527
|
+
entityOwnerIds: existingEntity.owners?.map((o) => o.userId),
|
|
528
|
+
sessionUserId: session.userId,
|
|
529
|
+
region: foundRegion,
|
|
530
|
+
});
|
|
531
|
+
return new Response(JSON.stringify({
|
|
532
|
+
error: "OWNERSHIP_MISMATCH",
|
|
533
|
+
message: "You do not have permission to update this entity",
|
|
534
|
+
}), { status: 403, headers: { "content-type": "application/json" } });
|
|
535
|
+
}
|
|
536
|
+
// Check if public posting is enabled when privacy is set to "public"
|
|
537
|
+
const privacy = profileData.metadata?.privacy;
|
|
538
|
+
if (privacy === "public") {
|
|
539
|
+
const publicPostingEnabled = await toggleService.isEnabled("global_public_posting_enabled");
|
|
540
|
+
if (!publicPostingEnabled) {
|
|
541
|
+
return new Response(JSON.stringify({
|
|
542
|
+
error: "PUBLIC_POSTING_DISABLED",
|
|
543
|
+
message: 'Public privacy is currently disabled. Please use "followers" or "private" privacy.',
|
|
544
|
+
}), { status: 403, headers: { "content-type": "application/json" } });
|
|
545
|
+
}
|
|
546
|
+
}
|
|
547
|
+
// Calculate life stage if metadata contains birthdate
|
|
548
|
+
const calculatedLifeStage = this.calculateEntityLifeStage(existingEntity.entityType || profileData.entityType || "", profileData.metadata, body.lifeStageManualOverride ||
|
|
549
|
+
existingEntity.lifeStageManualOverride, existingEntity.lifeStage);
|
|
550
|
+
// Merge metadata (preserve existing fields that aren't being updated)
|
|
551
|
+
const existingMetadata = existingEntity.metadata || {};
|
|
552
|
+
const incomingMetadata = profileData.metadata || {};
|
|
553
|
+
// Merge metadata, preserving existing fields that aren't explicitly updated
|
|
554
|
+
// Only update fields that are present in incomingMetadata
|
|
555
|
+
// This ensures avatar and other fields are preserved if not included in the update
|
|
556
|
+
const updatedMetadata = {
|
|
557
|
+
...existingMetadata,
|
|
558
|
+
};
|
|
559
|
+
// Only update fields that are explicitly provided in the update
|
|
560
|
+
for (const [key, value] of Object.entries(incomingMetadata)) {
|
|
561
|
+
// If value is explicitly null, allow it to clear the field
|
|
562
|
+
// If value is undefined, skip it (preserve existing)
|
|
563
|
+
if (value !== undefined) {
|
|
564
|
+
updatedMetadata[key] = value;
|
|
565
|
+
}
|
|
566
|
+
}
|
|
567
|
+
// Prepare update data
|
|
568
|
+
const updateData = {
|
|
569
|
+
updatedAt: new Date(),
|
|
570
|
+
};
|
|
571
|
+
if (profileData.name) {
|
|
572
|
+
updateData.name = profileData.name.trim();
|
|
573
|
+
}
|
|
574
|
+
if (profileData.metadata) {
|
|
575
|
+
updateData.metadata = updatedMetadata;
|
|
576
|
+
}
|
|
577
|
+
// Set life stage if calculated
|
|
578
|
+
if (calculatedLifeStage) {
|
|
579
|
+
updateData.lifeStage = calculatedLifeStage;
|
|
580
|
+
updateData.lifeStageCalculatedAt = new Date();
|
|
581
|
+
updateData.lifeStageManualOverride =
|
|
582
|
+
body.lifeStageManualOverride ||
|
|
583
|
+
existingEntity.lifeStageManualOverride;
|
|
584
|
+
}
|
|
585
|
+
// Update entity in database
|
|
586
|
+
const entity = await db.entity.update({
|
|
587
|
+
where: { id: entityId },
|
|
588
|
+
data: updateData,
|
|
589
|
+
});
|
|
590
|
+
// Dual-write: sync updated entity to graph database
|
|
591
|
+
try {
|
|
592
|
+
const { createGraphServiceFromEnv } = await Promise.resolve().then(() => __importStar(require("./graph")));
|
|
593
|
+
const graphService = await createGraphServiceFromEnv(env);
|
|
594
|
+
const syncInput = {
|
|
595
|
+
id: entity.id,
|
|
596
|
+
entityType: entity.entityType || "",
|
|
597
|
+
name: entity.name,
|
|
598
|
+
};
|
|
599
|
+
const md = (entity.metadata || {});
|
|
600
|
+
if (md.breed)
|
|
601
|
+
syncInput.breed = md.breed;
|
|
602
|
+
if (entity.lifeStage)
|
|
603
|
+
syncInput.lifeStage = entity.lifeStage;
|
|
604
|
+
if (typeof md.lat === "number")
|
|
605
|
+
syncInput.lat = Math.round(md.lat * 1000) / 1000;
|
|
606
|
+
if (typeof md.lng === "number")
|
|
607
|
+
syncInput.lng = Math.round(md.lng * 1000) / 1000;
|
|
608
|
+
await graphService.syncEntity(syncInput);
|
|
609
|
+
}
|
|
610
|
+
catch (graphError) {
|
|
611
|
+
this.logger.error("[ENTITY_HANDLER] Graph sync failed after entity update (non-fatal)", {
|
|
612
|
+
entityId: entity.id,
|
|
613
|
+
userId: session.userId,
|
|
614
|
+
error: graphError.message,
|
|
615
|
+
});
|
|
616
|
+
}
|
|
617
|
+
// Format response for frontend
|
|
618
|
+
const responseData = {
|
|
619
|
+
id: entity.id,
|
|
620
|
+
name: entity.name,
|
|
621
|
+
entityType: entity.entityType,
|
|
622
|
+
metadata: entity.metadata || {},
|
|
623
|
+
createdAt: entity.createdAt.toISOString(),
|
|
624
|
+
updatedAt: entity.updatedAt.toISOString(),
|
|
625
|
+
};
|
|
626
|
+
return new Response(JSON.stringify(responseData), {
|
|
627
|
+
status: 200,
|
|
628
|
+
headers: { "content-type": "application/json" },
|
|
629
|
+
});
|
|
630
|
+
}
|
|
631
|
+
catch (error) {
|
|
632
|
+
this.logger.error("Error updating entity profile:", error);
|
|
633
|
+
return new Response(JSON.stringify({ error: this.validator.sanitizeError(error) }), {
|
|
634
|
+
status: 500,
|
|
635
|
+
headers: { "content-type": "application/json" },
|
|
636
|
+
});
|
|
637
|
+
}
|
|
638
|
+
}
|
|
639
|
+
/**
|
|
640
|
+
* List user's entity profiles
|
|
641
|
+
* Returns entities owned by the user for tagging in posts
|
|
642
|
+
*/
|
|
643
|
+
async listEntityProfiles(session, env, request, requestContext) {
|
|
644
|
+
// Check if entity profiles feature is enabled
|
|
645
|
+
const { FeatureToggleService } = await Promise.resolve().then(() => __importStar(require("./feature-toggle-service")));
|
|
646
|
+
const { createPrisma } = await Promise.resolve().then(() => __importStar(require("../db")));
|
|
647
|
+
const db = createPrisma(env);
|
|
648
|
+
const toggleService = new FeatureToggleService(db);
|
|
649
|
+
const entityProfilesEnabled = await toggleService.isEnabled("entity_profiles_enabled");
|
|
650
|
+
if (!entityProfilesEnabled) {
|
|
651
|
+
return new Response(JSON.stringify({
|
|
652
|
+
error: "Entity profiles feature is currently disabled",
|
|
653
|
+
profiles: [],
|
|
654
|
+
}), { status: 200, headers: { "content-type": "application/json" } });
|
|
655
|
+
}
|
|
656
|
+
try {
|
|
657
|
+
// CRITICAL: Use user's dataRegion from session (not detected region)
|
|
658
|
+
// This ensures we always query the correct database where user's data is stored
|
|
659
|
+
const userDataRegion = session.dataRegion || env.DEFAULT_REGION || "EU";
|
|
660
|
+
// Get region-specific database with timeout/retry logic
|
|
661
|
+
const { sharedDatabaseConnectionManager } = await Promise.resolve().then(() => __importStar(require("./database-connection-manager")));
|
|
662
|
+
const { withQueryTimeoutAndRetry, QueryTimeoutPresets } = await Promise.resolve().then(() => __importStar(require("./db-query-helper")));
|
|
663
|
+
// Fetch entities owned by the user from their dataRegion
|
|
664
|
+
let entities = [];
|
|
665
|
+
try {
|
|
666
|
+
entities = await withQueryTimeoutAndRetry(sharedDatabaseConnectionManager, userDataRegion, env, async (db) => {
|
|
667
|
+
return await db.entity.findMany({
|
|
668
|
+
where: {
|
|
669
|
+
owners: { some: { userId: session.userId, status: 'ACTIVE' } },
|
|
670
|
+
},
|
|
671
|
+
select: {
|
|
672
|
+
id: true,
|
|
673
|
+
name: true,
|
|
674
|
+
entityType: true,
|
|
675
|
+
metadata: true,
|
|
676
|
+
createdAt: true,
|
|
677
|
+
},
|
|
678
|
+
orderBy: {
|
|
679
|
+
name: "asc",
|
|
680
|
+
},
|
|
681
|
+
});
|
|
682
|
+
}, {
|
|
683
|
+
...QueryTimeoutPresets.USER_FACING,
|
|
684
|
+
maxRetries: 3,
|
|
685
|
+
baseDelayMs: 100,
|
|
686
|
+
context: {
|
|
687
|
+
operation: "listEntityProfiles",
|
|
688
|
+
userId: session.userId,
|
|
689
|
+
region: userDataRegion,
|
|
690
|
+
},
|
|
691
|
+
});
|
|
692
|
+
this.logger.debug("[ENTITY_HANDLER] Listed entities from user dataRegion", {
|
|
693
|
+
userId: session.userId,
|
|
694
|
+
userDataRegion,
|
|
695
|
+
entityCount: entities.length,
|
|
696
|
+
});
|
|
697
|
+
}
|
|
698
|
+
catch (error) {
|
|
699
|
+
this.logger.error("[ENTITY_HANDLER] Error listing entities from user dataRegion", {
|
|
700
|
+
region: userDataRegion,
|
|
701
|
+
userId: session.userId,
|
|
702
|
+
error: error.message,
|
|
703
|
+
});
|
|
704
|
+
throw error;
|
|
705
|
+
}
|
|
706
|
+
// Format response for frontend
|
|
707
|
+
const profiles = entities.map((entity) => ({
|
|
708
|
+
id: entity.id,
|
|
709
|
+
name: entity.name,
|
|
710
|
+
entityType: entity.entityType,
|
|
711
|
+
metadata: entity.metadata || {},
|
|
712
|
+
createdAt: entity.createdAt.toISOString(),
|
|
713
|
+
}));
|
|
714
|
+
return new Response(JSON.stringify({ profiles }), {
|
|
715
|
+
status: 200,
|
|
716
|
+
headers: { "content-type": "application/json" },
|
|
717
|
+
});
|
|
718
|
+
}
|
|
719
|
+
catch (error) {
|
|
720
|
+
this.logger.error("Error listing entity profiles:", error);
|
|
721
|
+
return new Response(JSON.stringify({ error: this.validator.sanitizeError(error) }), { status: 500, headers: { "content-type": "application/json" } });
|
|
722
|
+
}
|
|
723
|
+
}
|
|
724
|
+
/**
|
|
725
|
+
* Delete an entity profile
|
|
726
|
+
*/
|
|
727
|
+
async deleteEntityProfile(entityId, session, env) {
|
|
728
|
+
try {
|
|
729
|
+
// Check if entity profiles feature is enabled
|
|
730
|
+
const { FeatureToggleService } = await Promise.resolve().then(() => __importStar(require("./feature-toggle-service")));
|
|
731
|
+
const { createPrisma } = await Promise.resolve().then(() => __importStar(require("../db")));
|
|
732
|
+
const defaultDb = createPrisma(env);
|
|
733
|
+
const toggleService = new FeatureToggleService(defaultDb);
|
|
734
|
+
const entityProfilesEnabled = await toggleService.isEnabled("entity_profiles_enabled");
|
|
735
|
+
if (!entityProfilesEnabled) {
|
|
736
|
+
return new Response(JSON.stringify({
|
|
737
|
+
error: "Entity profiles feature is currently disabled",
|
|
738
|
+
}), { status: 403, headers: { "content-type": "application/json" } });
|
|
739
|
+
}
|
|
740
|
+
// Search for entity across all regions (similar to updateEntityProfile)
|
|
741
|
+
// Start with user's dataRegion, then try other regions
|
|
742
|
+
let entityRegion = env.DEFAULT_REGION || "EU";
|
|
743
|
+
// Try to get user's dataRegion
|
|
744
|
+
try {
|
|
745
|
+
for (const region of ["EU", "US", "CN"]) {
|
|
746
|
+
const user = await data_router_1.DataRouter.getUser(session.userId, region, env, null);
|
|
747
|
+
if (user?.dataRegion) {
|
|
748
|
+
entityRegion = user.dataRegion;
|
|
749
|
+
break;
|
|
750
|
+
}
|
|
751
|
+
else if (user?.region) {
|
|
752
|
+
entityRegion = user.region;
|
|
753
|
+
break;
|
|
754
|
+
}
|
|
755
|
+
}
|
|
756
|
+
}
|
|
757
|
+
catch (error) {
|
|
758
|
+
this.logger.warn("[ENTITY_HANDLER] Could not get user dataRegion for deletion", {
|
|
759
|
+
userId: session.userId,
|
|
760
|
+
error: error.message,
|
|
761
|
+
});
|
|
762
|
+
}
|
|
763
|
+
// Search for entity, starting with user's dataRegion
|
|
764
|
+
let entity = null;
|
|
765
|
+
let foundRegion = entityRegion;
|
|
766
|
+
const regionsToSearch = [
|
|
767
|
+
entityRegion,
|
|
768
|
+
...["EU", "US", "CN"].filter((r) => r !== entityRegion),
|
|
769
|
+
];
|
|
770
|
+
for (const region of regionsToSearch) {
|
|
771
|
+
try {
|
|
772
|
+
const regionDb = data_router_1.DataRouter.getDatabaseForRegion(region, env, null, session.userId);
|
|
773
|
+
entity = await regionDb.entity.findUnique({
|
|
774
|
+
where: { id: entityId },
|
|
775
|
+
select: { id: true, name: true, owners: { select: { userId: true, role: true }, where: { status: 'ACTIVE' } } },
|
|
776
|
+
});
|
|
777
|
+
if (entity) {
|
|
778
|
+
foundRegion = region;
|
|
779
|
+
if (region !== entityRegion) {
|
|
780
|
+
this.logger.info("[ENTITY_HANDLER] Entity found in different region for deletion", {
|
|
781
|
+
entityId,
|
|
782
|
+
userId: session.userId,
|
|
783
|
+
foundRegion: region,
|
|
784
|
+
userDataRegion: entityRegion,
|
|
785
|
+
});
|
|
786
|
+
}
|
|
787
|
+
break;
|
|
788
|
+
}
|
|
789
|
+
}
|
|
790
|
+
catch (error) {
|
|
791
|
+
this.logger.debug("[ENTITY_HANDLER] Error searching region for entity deletion", {
|
|
792
|
+
region,
|
|
793
|
+
error: error.message,
|
|
794
|
+
});
|
|
795
|
+
}
|
|
796
|
+
}
|
|
797
|
+
if (!entity) {
|
|
798
|
+
return new Response(JSON.stringify({ error: "Entity not found" }), {
|
|
799
|
+
status: 404,
|
|
800
|
+
headers: { "content-type": "application/json" },
|
|
801
|
+
});
|
|
802
|
+
}
|
|
803
|
+
// Verify ownership
|
|
804
|
+
if (!entity.owners?.some((o) => o.userId === session.userId)) {
|
|
805
|
+
return new Response(JSON.stringify({ error: "Forbidden" }), {
|
|
806
|
+
status: 403,
|
|
807
|
+
headers: { "content-type": "application/json" },
|
|
808
|
+
});
|
|
809
|
+
}
|
|
810
|
+
// Delete the entity using the region where it was found
|
|
811
|
+
const db = data_router_1.DataRouter.getDatabaseForRegion(foundRegion, env, null, session.userId);
|
|
812
|
+
console.error("[ENTITY_HANDLER] About to delete entity", {
|
|
813
|
+
entityId,
|
|
814
|
+
entityName: entity.name,
|
|
815
|
+
userId: session.userId,
|
|
816
|
+
region: foundRegion,
|
|
817
|
+
});
|
|
818
|
+
this.logger.error("[ENTITY_HANDLER] About to delete entity", {
|
|
819
|
+
entityId,
|
|
820
|
+
entityName: entity.name,
|
|
821
|
+
userId: session.userId,
|
|
822
|
+
region: foundRegion,
|
|
823
|
+
});
|
|
824
|
+
const deleteResult = await db.entity.delete({
|
|
825
|
+
where: { id: entityId },
|
|
826
|
+
});
|
|
827
|
+
console.error("[ENTITY_HANDLER] Entity deleted successfully", {
|
|
828
|
+
entityId,
|
|
829
|
+
entityName: entity.name,
|
|
830
|
+
userId: session.userId,
|
|
831
|
+
region: foundRegion,
|
|
832
|
+
deleteResult: JSON.stringify(deleteResult),
|
|
833
|
+
});
|
|
834
|
+
this.logger.error("[ENTITY_HANDLER] Entity deleted successfully", {
|
|
835
|
+
entityId,
|
|
836
|
+
entityName: entity.name,
|
|
837
|
+
userId: session.userId,
|
|
838
|
+
region: foundRegion,
|
|
839
|
+
deleteResult: JSON.stringify(deleteResult),
|
|
840
|
+
});
|
|
841
|
+
// Dual-write: remove entity from graph database
|
|
842
|
+
try {
|
|
843
|
+
const { createGraphServiceFromEnv } = await Promise.resolve().then(() => __importStar(require("./graph")));
|
|
844
|
+
const graphService = await createGraphServiceFromEnv(env);
|
|
845
|
+
await graphService.removeEntity(entityId);
|
|
846
|
+
}
|
|
847
|
+
catch (graphError) {
|
|
848
|
+
this.logger.error("[ENTITY_HANDLER] Graph sync failed after entity delete (non-fatal)", {
|
|
849
|
+
entityId,
|
|
850
|
+
userId: session.userId,
|
|
851
|
+
error: graphError.message,
|
|
852
|
+
});
|
|
853
|
+
}
|
|
854
|
+
return new Response(JSON.stringify({
|
|
855
|
+
success: true,
|
|
856
|
+
message: "Entity deleted successfully",
|
|
857
|
+
}), { status: 200, headers: { "content-type": "application/json" } });
|
|
858
|
+
}
|
|
859
|
+
catch (error) {
|
|
860
|
+
this.logger.error("Error deleting entity profile:", error);
|
|
861
|
+
return new Response(JSON.stringify({ error: this.validator.sanitizeError(error) }), { status: 500, headers: { "content-type": "application/json" } });
|
|
862
|
+
}
|
|
863
|
+
}
|
|
864
|
+
}
|
|
865
|
+
exports.EntityHandler = EntityHandler;
|
|
866
|
+
//# sourceMappingURL=entity-handler.js.map
|