54 lines
1.4 KiB
JavaScript
54 lines
1.4 KiB
JavaScript
import "dotenv/config";
|
|
import express from "express";
|
|
import cors from "cors";
|
|
import { AccessToken, WebhookReceiver } from "livekit-server-sdk";
|
|
|
|
const SERVER_PORT = process.env.SERVER_PORT || 6080;
|
|
const LIVEKIT_API_KEY = process.env.LIVEKIT_API_KEY || "devkey";
|
|
const LIVEKIT_API_SECRET = process.env.LIVEKIT_API_SECRET || "secret";
|
|
|
|
const app = express();
|
|
|
|
app.use(cors());
|
|
app.use(express.json());
|
|
app.use(express.raw({ type: "application/webhook+json" }));
|
|
|
|
app.post("/token", async (req, res) => {
|
|
const roomName = req.body.roomName;
|
|
const participantName = req.body.participantName;
|
|
|
|
if (!roomName || !participantName) {
|
|
res.status(400).json({ errorMessage: "roomName and participantName are required" });
|
|
return;
|
|
}
|
|
|
|
const at = new AccessToken(LIVEKIT_API_KEY, LIVEKIT_API_SECRET, {
|
|
identity: participantName,
|
|
});
|
|
at.addGrant({ roomJoin: true, room: roomName });
|
|
const token = await at.toJwt();
|
|
res.json({ token });
|
|
});
|
|
|
|
const webhookReceiver = new WebhookReceiver(
|
|
LIVEKIT_API_KEY,
|
|
LIVEKIT_API_SECRET
|
|
);
|
|
|
|
app.post("/webhook", async (req, res) => {
|
|
try {
|
|
const event = await webhookReceiver.receive(
|
|
req.body,
|
|
req.get("Authorization")
|
|
);
|
|
console.log(event);
|
|
} catch (error) {
|
|
console.error("Error validating webhook event", error);
|
|
}
|
|
res.status(200).send();
|
|
});
|
|
|
|
app.listen(SERVER_PORT, () => {
|
|
console.log("Server started on port:", SERVER_PORT);
|
|
});
|