/* * Copyright (C) 2026 Fluxer Contributors * * This file is part of Fluxer. * * Fluxer is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Fluxer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with Fluxer. If not, see . */ import type {ChannelID, GuildID, UserID} from '@fluxer/api/src/BrandedTypes'; import type {VoiceRegionMetadata, VoiceServerRecord} from '@fluxer/api/src/voice/VoiceModel'; interface CreateTokenParams { userId: UserID; guildId?: GuildID; channelId: ChannelID; connectionId: string; tokenNonce: string; regionId: string; serverId: string; mute?: boolean; deaf?: boolean; canSpeak?: boolean; canStream?: boolean; canVideo?: boolean; } interface UpdateParticipantParams { userId: UserID; guildId?: GuildID; channelId: ChannelID; connectionId: string; regionId: string; serverId: string; mute?: boolean; deaf?: boolean; } interface UpdateParticipantPermissionsParams { userId: UserID; guildId?: GuildID; channelId: ChannelID; connectionId: string; regionId: string; serverId: string; canSpeak: boolean; canStream: boolean; canVideo: boolean; } interface DisconnectParticipantParams { userId: UserID; guildId?: GuildID; channelId: ChannelID; connectionId: string; regionId: string; serverId: string; } interface ListParticipantsParams { guildId?: GuildID; channelId: ChannelID; regionId: string; serverId: string; } export interface ListParticipantsSuccess { status: 'ok'; participants: Array<{identity: string}>; } export interface ListParticipantsError { status: 'error'; errorCode: string; retryable: boolean; } export type ListParticipantsResult = ListParticipantsSuccess | ListParticipantsError; export abstract class ILiveKitService { abstract createToken(params: CreateTokenParams): Promise<{token: string; endpoint: string}>; abstract updateParticipant(params: UpdateParticipantParams): Promise; abstract updateParticipantPermissions(params: UpdateParticipantPermissionsParams): Promise; abstract disconnectParticipant(params: DisconnectParticipantParams): Promise; abstract listParticipants(params: ListParticipantsParams): Promise; abstract getDefaultRegionId(): string | null; abstract getRegionMetadata(): Array; abstract getServer(regionId: string, serverId: string): VoiceServerRecord | null; }