Problem
The standalone API uses Fetch-compatible application libraries, but its entry point, connection metadata, environment access, file I/O, and Sentry setup still assume Deno. The port must preserve proxy handling, request cancellation, federation routing, user attribution, and error reporting.
Tasks
- Expose a runtime-neutral request handler from explicit application resources.
- Add a Node.js HTTP adapter for GraphQL, uploads, static association files, and federation endpoints.
- Replace Deno-specific connection types with an application-owned representation.
- Port environment and file access to the shared configuration and resource factories.
- Replace
@sentry/deno with the Node.js SDK and revalidate request isolation, user attribution, unhandled rejections, LogTape integration, and redaction.
- Preserve forwarded-request handling and abort behavior.
- Add startup, shutdown, health-check, and production-like integration tests.
Acceptance criteria
- The full API and federation HTTP surface runs on the pinned Node.js version.
- GraphQL, uploads, well-known endpoints, WebFinger, NodeInfo, inbox, outbox, and object routes behave as before.
- Graceful shutdown closes HTTP, database, KV, storage, email, and observability resources.
- Sentry events and structured logs retain their current context and redaction guarantees.
AI assistance: This issue was drafted and organized with Codex after a maintainer-led code audit.
Problem
The standalone API uses Fetch-compatible application libraries, but its entry point, connection metadata, environment access, file I/O, and Sentry setup still assume Deno. The port must preserve proxy handling, request cancellation, federation routing, user attribution, and error reporting.
Tasks
@sentry/denowith the Node.js SDK and revalidate request isolation, user attribution, unhandled rejections, LogTape integration, and redaction.Acceptance criteria