62 lines
1.4 KiB
TypeScript
62 lines
1.4 KiB
TypeScript
import { createServer as createHttpServer } from 'node:http'
|
|
import { createExpressMiddleware } from '@trpc/server/adapters/express'
|
|
import { consola } from 'consola'
|
|
import cookieParser from 'cookie-parser'
|
|
import cors from 'cors'
|
|
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(cors())
|
|
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')
|
|
})
|
|
})()
|