Integrate LiveKit SFU and harden booking workflow
This commit is contained in:
@@ -0,0 +1,33 @@
|
||||
const KICK_RETENTION_MS = 24 * 60 * 60_000;
|
||||
type KickList = { ids: Set<string>; expiresAt: number };
|
||||
const kickedParticipantIds = new Map<string, KickList>();
|
||||
const kickedClientIds = new Map<string, KickList>();
|
||||
|
||||
function activeList(map: Map<string, KickList>, eventSlug: string): Set<string> | undefined {
|
||||
const entry = map.get(eventSlug);
|
||||
if (!entry) return undefined;
|
||||
if (entry.expiresAt <= Date.now()) {
|
||||
map.delete(eventSlug);
|
||||
return undefined;
|
||||
}
|
||||
return entry.ids;
|
||||
}
|
||||
|
||||
export function isMeetingParticipantKicked(eventSlug: string, participantId: string, clientId?: string): boolean {
|
||||
return Boolean(
|
||||
activeList(kickedParticipantIds, eventSlug)?.has(participantId) ||
|
||||
(clientId && activeList(kickedClientIds, eventSlug)?.has(clientId)),
|
||||
);
|
||||
}
|
||||
|
||||
export function markMeetingParticipantKicked(eventSlug: string, participantId: string, clientId?: string): void {
|
||||
const expiresAt = Date.now() + KICK_RETENTION_MS;
|
||||
const participantIds = activeList(kickedParticipantIds, eventSlug) ?? new Set<string>();
|
||||
participantIds.add(participantId);
|
||||
kickedParticipantIds.set(eventSlug, { ids: participantIds, expiresAt });
|
||||
if (clientId) {
|
||||
const clientIds = activeList(kickedClientIds, eventSlug) ?? new Set<string>();
|
||||
clientIds.add(clientId);
|
||||
kickedClientIds.set(eventSlug, { ids: clientIds, expiresAt });
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user