import { getServerSession } from "api/auth/[...nextauth]/auth"; import { ROOMS } from "data/livekitRooms"; import { AccessToken } from "livekit-server-sdk"; import { prisma } from "../../../../../../packages/database/prisma/client"; if (!process.env.LIVEKIT_API_KEY) throw new Error("LIVEKIT_API_KEY not set"); if (!process.env.LIVEKIT_API_SECRET) throw new Error("LIVEKIT_API_SECRET not set"); export const GET = async () => { const session = await getServerSession(); if (!session) return Response.json({ message: "Unauthorized" }, { status: 401 }); const user = await prisma.user.findUnique({ where: { id: session.user.id, }, }); if (!user || !user.permissions.includes("AUDIO")) return Response.json({ message: "Missing permissions" }, { status: 401 }); const participantName = user.publicId; const at = new AccessToken( process.env.LIVEKIT_API_KEY, process.env.LIVEKIT_API_SECRET, { identity: participantName, // Token to expire after 10 minutes ttl: "1d", }, ); ROOMS.forEach((roomName) => { at.addGrant({ roomJoin: true, room: roomName, canPublish: true }); }); const token = await at.toJwt(); return Response.json({ token }); };