import { createServer as createHttpServer } from 'node:http' import { createExpressMiddleware } from '@trpc/server/adapters/express' import { consola } from 'consola' import cookieParser from 'cookie-parser' import express from 'express' import * as mediasoup from 'mediasoup' import { Server as SocketServer } from 'socket.io' import { createContext } from './trpc/context' import { appRouter } from './trpc/routers' import webrtcSocket from './webrtc/socket' (async () => { const app = express() app.use(cookieParser()) app.use(express.json()) app.use( '/chad/trpc', createExpressMiddleware({ router: appRouter, createContext, }), ) const server = createHttpServer(app) const worker = await mediasoup.createWorker() worker.on('died', () => { consola.error('[Mediasoup]', 'Worker died, exiting...') process.exit(1) }) const router = await worker.createRouter({ mediaCodecs: [ { kind: 'audio', mimeType: 'audio/opus', clockRate: 48000, channels: 2, parameters: { useinbandfec: 1, stereo: 1 }, }, ], }) const io = new SocketServer(server, { path: '/chad/ws', cors: { origin: process.env.CORS_ORIGIN || '*', }, }) webrtcSocket(io, router) server.listen(process.env.PORT || 4000, () => { console.log('✅ Server running') }) })()