// Custom production server: wraps adapter-node's generated request handler in // a plain http.Server so we can also intercept WebSocket upgrade requests, // which SvelteKit itself has no hook for (see @webavatar/webavatar-core's // server/ws-handler.ts). // // `.env` is not auto-loaded here (SvelteKit's own adapter-node doesn't in // production either) — run with `node --env-file=.env server.js` locally, or // provide OPENAI_API_KEY / REALTIME_TOKEN_SECRET via your deployment's real // secret mechanism. import { createServer } from 'node:http'; import { createRealtimeRuntime } from '@webavatar/webavatar-core/server'; import { handler } from './build/handler.js'; import { SESSION_PERSONA } from './build-server/project/persona.js'; import { toolRegistry } from './build-server/server/project/tools/index.js'; const runtime = createRealtimeRuntime({ persona: SESSION_PERSONA, toolRegistry, isDev: false }); const server = createServer(handler); server.on('upgrade', runtime.handleUpgrade); server.listen(runtime.config.port, () => { console.log(`listening on port ${runtime.config.port}`); });