import { Router } from "express"; import { AccessToken } from "livekit-server-sdk"; 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"); const createToken = async (roomName: string) => { // If this room doesn't exist, it'll be automatically created when the first // participant joins // Identifier to be used for participant. // It's available as LocalParticipant.identity with livekit-client SDK // TODO: Move function to dispatch nextjs app as API route to use authentication of nextAuth const participantName = "quickstart-username" + Math.random().toString(36).substring(7); const at = new AccessToken( process.env.LIVEKIT_API_KEY, process.env.LIVEKIT_API_SECRET, { identity: participantName, // Token to expire after 10 minutes ttl: "10m", }, ); at.addGrant({ roomJoin: true, room: roomName }); return await at.toJwt(); }; const router = Router(); router.get("/token", async (req, res) => { const roomName = req.query.roomName as string; res.send({ token: await createToken(roomName), }); }); export default router;