59 lines
1.8 KiB
TypeScript
59 lines
1.8 KiB
TypeScript
import type { NextApiRequest } from "next"
|
|
import { Server } from "socket.io"
|
|
import { NextApiResponseWithSocket } from "../../interfaces/NextApiSocket"
|
|
import checkTokenIsValid from "../../lib/backend/components/checkTokenIsValid"
|
|
import prisma from "../../lib/prisma"
|
|
|
|
const SocketHandler = (req: NextApiRequest, res: NextApiResponseWithSocket) => {
|
|
if (res.socket.server.io) {
|
|
console.log("Socket is already running " + req.url)
|
|
} else {
|
|
console.log("Socket is initializing " + req.url)
|
|
const io = new Server(res.socket.server)
|
|
res.socket.server.io = io
|
|
|
|
io.on("connection", (socket) => {
|
|
const connection = { id: socket.id, authenticated: false }
|
|
|
|
socket.on("input-change", (msg) => {
|
|
if (!connection.authenticated) socket.emit("unauthenticated")
|
|
// socket.broadcast.emit("update-input", msg)
|
|
io.emit("update-input", msg)
|
|
})
|
|
|
|
socket.on("authenticate", (payload) => {
|
|
// console.log("warst", payload)
|
|
// console.log(payload())
|
|
checkTokenIsValid({
|
|
token: payload.token,
|
|
tokenType: "ACCESS",
|
|
})
|
|
.then(async ({ tokenBody }) => {
|
|
// console.log(tokenBody)
|
|
const token = await prisma.token.findUnique({
|
|
where: { id: tokenBody.id },
|
|
})
|
|
// console.log(!token , token.used)
|
|
if (!token || token.used) {
|
|
socket.emit("unauthenticated")
|
|
// console.log(token)
|
|
} else {
|
|
socket.emit("authenticated")
|
|
connection.authenticated = true
|
|
}
|
|
})
|
|
.catch((err) => console.log("cat", err.message))
|
|
})
|
|
|
|
socket.on("test", (payload) => {
|
|
console.log("Got test:", payload)
|
|
// ...
|
|
})
|
|
|
|
socket.emit("test2", "lol")
|
|
})
|
|
}
|
|
res.end()
|
|
}
|
|
|
|
export default SocketHandler
|