diff --git a/.gitea/workflows/deploy-server.yml b/.gitea/workflows/deploy-server.yml index 49316c6..e5024fb 100644 --- a/.gitea/workflows/deploy-server.yml +++ b/.gitea/workflows/deploy-server.yml @@ -24,6 +24,9 @@ jobs: ssh-strict: false persist-credentials: false + - name: Backup DB + run: cp /home/koptilnya/chad/data/database.db /home/koptilnya/chad/database-$(date +"%d-%m-%Y").db + - name: Build run: docker build -t chad-server ./server diff --git a/server/auth/lucia.ts b/server/auth/lucia.ts index 129fe49..41473fe 100644 --- a/server/auth/lucia.ts +++ b/server/auth/lucia.ts @@ -4,17 +4,4 @@ import prisma from '../prisma/client' export const auth = new Lucia(new PrismaAdapter(prisma.session, prisma.user)) -// export const auth = new Lucia({ -// adapter: new PrismaAdapter(prisma.session, prisma.user), -// env: process.env.NODE_ENV === 'production' ? 'PROD' : 'DEV', -// middleware: req => ({ -// headers: req.headers, -// }), -// transformUserData: user => ({ -// id: user.id, -// username: user.username, -// displayName: user.username, -// }), -// }) - export type Auth = typeof auth diff --git a/server/server.ts b/server/server.ts index a15c4ce..1c4ca7c 100644 --- a/server/server.ts +++ b/server/server.ts @@ -1,21 +1,59 @@ +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' -const app = express() -app.use(cookieParser()) -app.use(express.json()) +(async () => { + const app = express() -app.use( - '/chad/trpc', - createExpressMiddleware({ - router: appRouter, - createContext, - }), -) + app.use(cookieParser()) + app.use(express.json()) -app.listen(process.env.PORT || 4000, () => { - console.log('✅ Server running') -}) + 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') + }) +})() diff --git a/server/sockets/index.ts b/server/sockets/index.ts deleted file mode 100644 index 10f534d..0000000 --- a/server/sockets/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -import webrtcSocket from './webrtc' - -export { - webrtcSocket, -} diff --git a/server/trpc/routers/index.ts b/server/trpc/routers/index.ts index 49d55cf..41a231e 100644 --- a/server/trpc/routers/index.ts +++ b/server/trpc/routers/index.ts @@ -1,8 +1,10 @@ import { router } from '../router' import { authRouter } from './auth' +import { webrtcRouter } from './webrtc' export const appRouter = router({ auth: authRouter, + webrtc: webrtcRouter, }) export type AppRouter = typeof appRouter diff --git a/server/sockets/webrtc.ts b/server/webrtc/socket.ts similarity index 100% rename from server/sockets/webrtc.ts rename to server/webrtc/socket.ts