Files
DiscordClone/convex/voice.ts
2026-02-18 14:48:57 -06:00

37 lines
877 B
TypeScript

"use node";
import { action } from "./_generated/server";
import { v } from "convex/values";
import { AccessToken } from "livekit-server-sdk";
// Generate LiveKit token for voice channel
export const getToken = action({
args: {
channelId: v.string(),
userId: v.string(),
username: v.string(),
},
returns: v.object({ token: v.string() }),
handler: async (_ctx, args) => {
const apiKey = process.env.LIVEKIT_API_KEY || "devkey";
const apiSecret = process.env.LIVEKIT_API_SECRET || "secret";
const at = new AccessToken(apiKey, apiSecret, {
identity: args.userId,
name: args.username,
ttl: "24h",
});
at.addGrant({
roomJoin: true,
room: args.channelId,
canPublish: true,
canSubscribe: true,
canPublishData: true,
});
const token = await at.toJwt();
return { token };
},
});