/******************************************************************************************
 * Repository: https://github.com/kolserdav/werift-sfu-react.git
 * File name: interfaces.ts
 * Author: Sergey Kolmiller
 * Email: <uyem.ru@gmail.com>
 * License: MIT
 * License text: See in LICENSE file
 * Copyright: kolserdav, All rights reserved (c)
 * Create Date: Wed Aug 24 2022 14:14:09 GMT+0700 (Krasnoyarsk Standard Time)
 ******************************************************************************************/
import * as werift from 'werift';
import { Message, Prisma, Room, Unit, Video, Quote, Admins } from '@prisma/client';
export declare type LocaleValue = 'en' | 'ru';
export interface UserItem {
    name: string;
    connId: string;
    locale: LocaleValue;
}
export interface RoomUser {
    id: string | number;
    name: string;
    isOwner: boolean;
}
export interface UserList extends RoomUser {
    muted: boolean;
    adminMuted: boolean;
}
export declare type RoomList = Record<string, (string | number)[]>;
export declare type Banneds = Record<string, RoomUser[]>;
export declare type ArgumentTypes<F extends Function> = F extends (args: infer A) => any ? A : never;
export declare type GetManyResult<T> = {
    result: T[];
    skip: number;
    count: number;
    take: number;
};
export declare type MessageFull = Message & {
    Unit: {
        id: string;
        name: string;
    };
    Quote: {
        MessageQuote: (Message & {
            Unit: {
                id: string;
                name: string;
            };
        }) | null;
    } | null;
};
export declare type QuoteFull = Quote;
export declare enum ErrorCode {
    initial = "initial",
    roomIsInactive = "roomIsInactive",
    errorSendMessage = "errorSendMessage",
    youAreBanned = "youAreBanned",
    videoRecordStop = "videoRecordStop",
    forbidden = "forbidden",
    notAuthorised = "notAuthorised",
    duplicateTab = "duplicateTab",
    errorDeleteMessage = "errorDeleteMessage",
    errorSetAdmin = "errorSetAdmin",
    errorToBan = "errorToBan",
    errorToMute = "errorToMute",
    errorToOffCamera = "errorToOffCamera",
    badRequest = "badRequest",
    notFound = "notFound",
    serverError = "serverError"
}
export declare enum LogLevel {
    log = 0,
    info = 1,
    warn = 2,
    error = 3
}
export declare enum RecordCommand {
    start = "start",
    stop = "stop"
}
export declare enum MessageType {
    GET_USER_ID = "GET_USER_ID",
    SET_USER_ID = "SET_USER_ID",
    GET_LOGIN = "GET_LOGIN",
    TOKEN = "TOKEN",
    OFFER = "OFFER",
    CANDIDATE = "CANDIDATE",
    ANSWER = "ANSWER",
    GET_ROOM = "GET_ROOM",
    SET_ROOM = "SET_ROOM",
    GET_CHAT_UNIT = "GET_CHAT_UNIT",
    GET_SETTINGS_UNIT = "GET_SETTINGS_UNIT",
    SET_ERROR = "SET_ERROR",
    GET_ROOM_GUESTS = "GET_ROOM_GUESTS",
    SET_ROOM_GUESTS = "SET_ROOM_GUESTS",
    SET_CHANGE_UNIT = "SET_CHANGE_UNIT",
    GET_MUTE = "GET_MUTE",
    SET_MUTE = "SET_MUTE",
    GET_NEED_RECONNECT = "GET_NEED_RECONNECT",
    GET_CLOSE_PEER_CONNECTION = "GET_CLOSE_PEER_CONNECTION",
    SET_CLOSE_PEER_CONNECTION = "SET_CLOSE_PEER_CONNECTION",
    GET_ROOM_MESSAGE = "GET_ROOM_MESSAGE",
    SET_ROOM_MESSAGE = "SET_ROOM_MESSAGE",
    SET_CHAT_UNIT = "SET_CHAT_UNIT",
    SET_SETTINGS_UNIT = "SET_SETTINGS_UNIT",
    GET_CHAT_MESSAGES = "GET_CHAT_MESSAGES",
    SET_CHAT_MESSAGES = "SET_CHAT_MESSAGES",
    GET_EDIT_MESSAGE = "GET_EDIT_MESSAGE",
    SET_EDIT_MESSAGE = "SET_EDIT_MESSAGE",
    GET_CREATE_MESSAGE = "GET_CREATE_MESSAGE",
    SET_CREATE_MESSAGE = "SET_CREATE_MESSAGE",
    GET_CREATE_QUOTE = "GET_CREATE_QUOTE",
    SET_CREATE_QUOTE = "SET_CREATE_QUOTE",
    GET_DELETE_MESSAGE = "GET_DELETE_MESSAGE",
    SET_DELETE_MESSAGE = "SET_DELETE_MESSAGE",
    GET_TO_MUTE = "GET_TO_MUTE",
    GET_TO_BAN = "GET_TO_BAN",
    GET_TO_UNMUTE = "GET_TO_UNMUTE",
    GET_TO_UNBAN = "GET_TO_UNBAN",
    SET_BAN_LIST = "SET_BAN_LIST",
    SET_MUTE_LIST = "SET_MUTE_LIST",
    GET_RECORD = "GET_RECORD",
    SET_RECORDING = "SET_RECORDING",
    GET_VIDEO_FIND_MANY = "GET_VIDEO_FIND_MANY",
    SET_VIDEO_FIND_MANY = "SET_VIDEO_FIND_MANY",
    GET_VIDEO_FIND_FIRST = "GET_VIDEO_FIND_FIRST",
    SET_VIDEO_FIND_FIRST = "SET_VIDEO_FIND_FIRST",
    GET_ASK_FLOOR = "GET_ASK_FLOOR",
    SET_ASK_FLOOR = "SET_ASK_FLOOR",
    GET_MUTE_FOR_ALL = "GET_MUTE_FOR_ALL",
    SET_MUTE_FOR_ALL = "SET_MUTE_FOR_ALL",
    GET_BLOCK_CHAT = "GET_BLOCK_CHAT",
    SET_BLOCK_CHAT = "SET_BLOCK_CHAT",
    GET_VIDEO_TRACK = "GET_VIDEO_TRACK",
    SET_VIDEO_TRACK = "SET_VIDEO_TRACK",
    GET_TO_ADMIN = "GET_TO_ADMIN",
    SET_TO_ADMIN = "SET_TO_ADMIN",
    GET_VIDEO_SETTINGS = "GET_VIDEO_SETTINGS",
    SET_CREATE_VIDEO = "SET_CREATE_VIDEO",
    GET_VIDEO_DELETE = "GET_VIDEO_DELETE",
    SET_VIDEO_DELETE = "SET_VIDEO_DELETE",
    GET_VIDEO_UPDATE = "GET_VIDEO_UPDATE",
    SET_VIDEO_UPDATE = "SET_VIDEO_UPDATE",
    GET_LOCALE = "GET_LOCALE",
    SET_LOCALE = "SET_LOCALE"
}
export declare namespace Locale {
    const DEFAULT: LocaleValue;
    const SELECTOR: {
        value: LocaleValue;
        name: string;
        impl: boolean;
    }[];
    interface Server {
        error: string;
        roomInactive: string;
        errorSendMessage: string;
        youAreBanned: string;
        videoRecordStop: string;
        forbidden: string;
        notAuthorised: string;
        duplicateTab: string;
        connected: string;
        ownerCanNotBeDeleted: string;
        ownerCanNotBeBanned: string;
        badRequest: string;
        notFound: string;
        serverError: string;
    }
    interface Client {
        shareScreen: string;
        changeTheme: string;
        send: string;
        quote: string;
        edit: string;
        delete: string;
        errorGetCamera: string;
        errorGetDisplay: string;
        erorGetSound: string;
        edited: string;
        noMessages: string;
        loading: string;
        getDisplayCancelled: string;
        mute: string;
        unmute: string;
        ban: string;
        unban: string;
        isAdminOfRoom: string;
        youAreAdminOfRoom: string;
        banneds: string;
        recordVideo: string;
        videoRecording: string;
        recordVideoStop: string;
        linkCopied: string;
        generalSettings: string;
        recordActions: string;
        changeLang: string;
        darkTheme: string;
        startRecord: string;
        recording: string;
        stopRecord: string;
        willBeReconnect: string;
        guests: string;
        micOn: string;
        micOff: string;
        cameraOn: string;
        cameraOff: string;
        copyRoomLink: string;
        editMessage: string;
        messageDeleted: string;
        askForTheFloor: string;
        requestedTheFloor: string;
        shortAdmin: string;
        muteAll: string;
        muteForNew: string;
        blockChat: string;
        unblockChat: string;
        chatBlocked: string;
        numberOfGuests: string;
        noActiveVideoStreams: string;
        videoDeviceRequired: string;
        audioDeviceRequired: string;
        setAsAdmin: string;
        deleteFromAdmins: string;
        inactivityDisconnect: string;
        needDeleteVideo: string;
        close: string;
        changeVideoName: string;
        save: string;
    }
}
export declare type Command = 'add' | 'delete';
export declare type LocaleServer = {
    server: Locale.Server;
    client: Locale.Client;
};
export declare const LocaleDefault: LocaleValue;
export declare const LocaleSelector: {
    value: LocaleValue;
    name: string;
    impl: boolean;
}[];
export declare namespace DataTypes {
    namespace MessageTypes {
        type GetMute = {
            muted: boolean;
            roomId: string | number;
        };
        type GetNeedReconnect = {
            userId: string | number;
        };
        type GetRoomGuests = {
            roomId: number | string;
        };
        type GetChatUnit = {
            userId: string | number;
            locale: LocaleValue;
        };
        type GetSettingsUnit = {
            userId: string | number;
            locale: LocaleValue;
        };
        type GetVideoSettings = {
            width: number;
            height: number;
            userId: string | number;
        };
        type GetLocale = {
            locale: LocaleValue;
        };
        type GetClosePeerConnection = {
            roomId: number | string;
            target: number | string;
        };
        type GetUserId = {
            isRoom?: boolean;
            userName: string;
            locale: LocaleValue;
        };
        type GetMuteForAll = {
            value: boolean;
        };
        type SetChangeUnit = {
            target: number | string;
            name: string;
            eventName: 'delete' | 'add' | 'added';
            roomLength: number;
            isOwner: boolean;
            muteds: (string | number)[];
            banneds: RoomUser[];
            asked: RoomList[any];
            adminMuteds: (string | number)[];
        };
        type SetUserId = {
            name: string;
        };
        type GetRoom = {
            userId: number | string;
            mimeType: string;
            isPublic: boolean;
        };
        type GetToMute = {
            target: string | number;
        };
        type GetToBan = {
            target: string | number;
            userId: string | number;
        };
        type GetAskFloor = {
            userId: string | number;
            command: Command;
        };
        type GetVideoTrack = {
            target: string | number;
            userId: string | number;
            command: Command;
        };
        type GetVideoFindMany = {
            userId: string | number;
            token: string;
            args: Prisma.VideoFindManyArgs;
        };
        type GetToAdmin = {
            target: string | number;
            userId: string | number;
            command: Command;
        };
        type GetVideoFindFirst = {
            userId: string | number;
            token: string;
            args: Prisma.VideoFindFirstArgs;
        };
        type GetVideoUpdate = {
            userId: string | number;
            token: string;
            args: Prisma.VideoUpdateArgs;
        };
        type GetVideoDelete = {
            userId: string | number;
            token: string;
            args: Prisma.VideoDeleteArgs;
        };
        type GetToUnMute = {
            target: string | number;
        };
        type GetToUnBan = {
            target: string | number;
            userId: string | number;
        };
        type SetRoomGuests = {
            roomUsers: RoomUser[];
            muteds: (string | number)[];
            banneds: RoomUser[];
            adminMuteds: (string | number)[];
            asked: (string | number)[];
        };
        type GetChatMessages = {
            args: Prisma.MessageFindManyArgs;
            userId: string | number;
        };
        type GetBlockChat = {
            command: Command;
            target: string | number;
        };
        type GetEditMessage = {
            args: Prisma.MessageUpdateArgs;
            userId: string | number;
        };
        type SetAskFloor = {
            roomId: string | number;
            userId: string | number;
            asked: (string | number)[];
        };
        type GetCreateMessage = {
            args: Prisma.MessageCreateArgs;
            userId: string | number;
        };
        type SetVideoTrack = {
            offVideo: (string | number)[];
            command: Command;
            target: string | number;
            userId: string | number;
        };
        type GetCreateQuote = {
            args: Prisma.QuoteCreateArgs;
            userId: string | number;
        };
        type GetRecord = {
            command: keyof typeof RecordCommand;
            userId: string | number;
            token: string;
        };
        type GetDeleteMessage = {
            args: Prisma.MessageDeleteArgs;
            userId: string | number;
        };
        type SetRoom = {
            isOwner: boolean;
            asked: (string | number)[];
        };
        type SetCreateVideo = {
            procent: number;
        };
        type SetVideoFindMany = {
            videos: GetManyResult<Video>;
        };
        type SetMuteForAll = {
            value: boolean;
        };
        type SetVideoFindFirst = {
            video: Video | null;
        };
        type SetVideoUpdate = {
            video: Video | null;
        };
        type SetVideoDelete = {
            video: Video | null;
        };
        type SetToAdmin = {
            target: string | number;
            command: Command;
        };
        type SetBanList = {
            banneds: Banneds[any];
        };
        type SetBlockChat = {
            target: string | number;
            blocked: (string | number)[];
        };
        type SetMuteList = {
            muteds: RoomList[any];
            adminMuteds: RoomList[any];
            askeds: RoomList[any];
        };
        type SetError = {
            message: string;
            type: keyof typeof LogLevel;
            code: keyof typeof ErrorCode;
        };
        type SetMute = {
            muteds: (string | number)[];
            adminMuteds: (string | number)[];
        };
        type SetLocale = {
            locale: LocaleServer['client'];
        };
        type GetRoomMessage = {
            userId: string | number;
            message: string;
        };
        type SetRecording = {
            command: keyof typeof RecordCommand;
            time: number;
        };
        type SetRoomMessage = MessageFull;
        type SetEditMessage = MessageFull;
        type SetCreateMessage = MessageFull;
        type SetCreateQuote = QuoteFull;
        type SetDeleteMessage = MessageFull;
        type SetChatMessages = GetManyResult<MessageFull>;
        type SetClosePeerConnection = {
            roomId: number | string;
            target: number | string;
        };
        type Offer = {
            sdp: RTCSessionDescriptionInit;
            userId: number | string;
            target: number | string;
            mimeType: string;
            roomId: number | string;
        };
        type Candidate = {
            candidate: RTCIceCandidate;
            userId: number | string;
            target: number | string;
            roomId: number | string;
        };
        type Answer = {
            sdp: RTCSessionDescriptionInit;
            userId: number | string;
            target: number | string;
        };
        type SetChatUnit = undefined;
        type SetSettingsUnit = undefined;
        type ConnectionId<T> = T extends infer R ? R : never;
    }
    type ArgsSubset<T> = T extends MessageType.OFFER ? DataTypes.MessageTypes.Offer : T extends MessageType.ANSWER ? DataTypes.MessageTypes.Answer : T extends MessageType.CANDIDATE ? DataTypes.MessageTypes.Candidate : T extends MessageType.GET_MUTE ? DataTypes.MessageTypes.GetMute : T extends MessageType.GET_NEED_RECONNECT ? DataTypes.MessageTypes.GetNeedReconnect : T extends MessageType.GET_CLOSE_PEER_CONNECTION ? DataTypes.MessageTypes.GetClosePeerConnection : T extends MessageType.GET_USER_ID ? DataTypes.MessageTypes.GetUserId : T extends MessageType.SET_USER_ID ? DataTypes.MessageTypes.SetUserId : T extends MessageType.GET_CHAT_UNIT ? DataTypes.MessageTypes.GetChatUnit : T extends MessageType.GET_SETTINGS_UNIT ? DataTypes.MessageTypes.GetSettingsUnit : T extends MessageType.GET_ROOM ? DataTypes.MessageTypes.GetRoom : T extends MessageType.GET_TO_MUTE ? DataTypes.MessageTypes.GetToMute : T extends MessageType.GET_TO_BAN ? DataTypes.MessageTypes.GetToBan : T extends MessageType.GET_TO_UNMUTE ? DataTypes.MessageTypes.GetToUnMute : T extends MessageType.GET_TO_ADMIN ? DataTypes.MessageTypes.GetToAdmin : T extends MessageType.GET_MUTE_FOR_ALL ? DataTypes.MessageTypes.GetMuteForAll : T extends MessageType.GET_TO_UNBAN ? DataTypes.MessageTypes.GetToUnBan : T extends MessageType.GET_BLOCK_CHAT ? DataTypes.MessageTypes.GetBlockChat : T extends MessageType.GET_ASK_FLOOR ? DataTypes.MessageTypes.GetAskFloor : T extends MessageType.GET_VIDEO_TRACK ? DataTypes.MessageTypes.GetVideoTrack : T extends MessageType.GET_RECORD ? DataTypes.MessageTypes.GetRecord : T extends MessageType.SET_ROOM ? DataTypes.MessageTypes.SetRoom : T extends MessageType.GET_LOCALE ? DataTypes.MessageTypes.GetLocale : T extends MessageType.GET_ROOM_GUESTS ? DataTypes.MessageTypes.GetRoomGuests : T extends MessageType.GET_CHAT_MESSAGES ? DataTypes.MessageTypes.GetChatMessages : T extends MessageType.SET_ROOM_GUESTS ? DataTypes.MessageTypes.SetRoomGuests : T extends MessageType.SET_CHANGE_UNIT ? DataTypes.MessageTypes.SetChangeUnit : T extends MessageType.SET_MUTE ? DataTypes.MessageTypes.SetMute : T extends MessageType.SET_CHAT_UNIT ? DataTypes.MessageTypes.SetChatUnit : T extends MessageType.SET_ASK_FLOOR ? DataTypes.MessageTypes.SetAskFloor : T extends MessageType.SET_SETTINGS_UNIT ? DataTypes.MessageTypes.SetSettingsUnit : T extends MessageType.SET_BLOCK_CHAT ? DataTypes.MessageTypes.SetBlockChat : T extends MessageType.SET_CHAT_MESSAGES ? DataTypes.MessageTypes.SetChatMessages : T extends MessageType.GET_ROOM_MESSAGE ? DataTypes.MessageTypes.GetRoomMessage : T extends MessageType.GET_EDIT_MESSAGE ? DataTypes.MessageTypes.GetEditMessage : T extends MessageType.GET_CREATE_MESSAGE ? DataTypes.MessageTypes.GetCreateMessage : T extends MessageType.GET_CREATE_QUOTE ? DataTypes.MessageTypes.GetCreateQuote : T extends MessageType.SET_VIDEO_TRACK ? DataTypes.MessageTypes.SetVideoTrack : T extends MessageType.SET_EDIT_MESSAGE ? DataTypes.MessageTypes.SetEditMessage : T extends MessageType.SET_CREATE_MESSAGE ? DataTypes.MessageTypes.SetCreateMessage : T extends MessageType.SET_CREATE_QUOTE ? DataTypes.MessageTypes.SetCreateQuote : T extends MessageType.GET_VIDEO_FIND_MANY ? DataTypes.MessageTypes.GetVideoFindMany : T extends MessageType.GET_VIDEO_FIND_FIRST ? DataTypes.MessageTypes.GetVideoFindFirst : T extends MessageType.GET_VIDEO_DELETE ? DataTypes.MessageTypes.GetVideoDelete : T extends MessageType.GET_VIDEO_UPDATE ? DataTypes.MessageTypes.GetVideoUpdate : T extends MessageType.GET_VIDEO_SETTINGS ? DataTypes.MessageTypes.GetVideoSettings : T extends MessageType.SET_VIDEO_FIND_MANY ? DataTypes.MessageTypes.SetVideoFindMany : T extends MessageType.SET_VIDEO_FIND_FIRST ? DataTypes.MessageTypes.SetVideoFindFirst : T extends MessageType.SET_VIDEO_DELETE ? DataTypes.MessageTypes.SetVideoDelete : T extends MessageType.SET_VIDEO_UPDATE ? DataTypes.MessageTypes.SetVideoUpdate : T extends MessageType.GET_DELETE_MESSAGE ? DataTypes.MessageTypes.GetDeleteMessage : T extends MessageType.SET_DELETE_MESSAGE ? DataTypes.MessageTypes.SetDeleteMessage : T extends MessageType.SET_ROOM_MESSAGE ? DataTypes.MessageTypes.SetRoomMessage : T extends MessageType.SET_BAN_LIST ? DataTypes.MessageTypes.SetBanList : T extends MessageType.SET_MUTE_FOR_ALL ? DataTypes.MessageTypes.SetMuteForAll : T extends MessageType.SET_MUTE_LIST ? DataTypes.MessageTypes.SetMuteList : T extends MessageType.SET_TO_ADMIN ? DataTypes.MessageTypes.SetToAdmin : T extends MessageType.SET_CLOSE_PEER_CONNECTION ? DataTypes.MessageTypes.SetClosePeerConnection : T extends MessageType.SET_LOCALE ? DataTypes.MessageTypes.SetLocale : T extends MessageType.SET_RECORDING ? DataTypes.MessageTypes.SetRecording : T extends MessageType.SET_CREATE_VIDEO ? DataTypes.MessageTypes.SetCreateVideo : T extends MessageType.SET_ERROR ? DataTypes.MessageTypes.SetError : never;
}
export declare type ArgsSubset<T> = DataTypes.ArgsSubset<T>;
export declare namespace Signaling {
    interface SendMessageArgs<T> {
        type: T;
        id: number | string;
        data: DataTypes.ArgsSubset<T>;
        connId: DataTypes.MessageTypes.ConnectionId<string>;
    }
    abstract class WSInterface {
        abstract connection: any;
        readonly delimiter = "_";
        abstract createConnection(args: any): any;
        abstract parseMessage(text: string): SendMessageArgs<any> | null;
        abstract getMessage<T extends keyof typeof MessageType>(type: T, message: SendMessageArgs<any>): SendMessageArgs<T>;
        abstract sendMessage: <T extends keyof typeof MessageType>(args: SendMessageArgs<T>, second?: boolean, cb?: () => void) => Promise<1 | 0>;
    }
}
export declare namespace Connection {
    type AddTracksProps = {
        roomId: number | string;
        connId: string;
        userId: number | string;
        target: number | string;
        locale: LocaleServer['client'];
    };
    abstract class RTCInterface {
        abstract peerConnections: Record<string, RTCPeerConnection | undefined>;
        abstract peerConnectionsServer: Record<string, Record<string, werift.RTCPeerConnection | undefined>>;
        readonly delimiter = "_";
        abstract createRTC(args: {
            connId: string;
            roomId: number | string;
            userId: number | string;
            target: string | number;
            iceServers?: RTCConfiguration['iceServers'];
        }): Record<number, RTCPeerConnection | undefined>;
        abstract createRTCServer(args: {
            connId: string;
            roomId: number | string;
            userId: number | string;
            target: string | number;
            mimeType: string;
            icePortRange?: [number, number];
        }): void;
        abstract handleIceCandidate(args: {
            connId: string;
            roomId: number | string;
            userId: number | string;
            target: string | number;
        }): any;
        abstract getPeerId(...args: (number | string)[]): string;
        abstract closeVideoCall(args: {
            connId: string;
            roomId: number | string;
            userId: number | string;
            target: string | number;
            eventName: string;
        }): void;
        abstract onClosedCall(args: {
            connId: string;
            roomId: number | string;
            userId: number | string;
            target: string | number;
            command: keyof werift.RTCPeerConnection;
        }): void;
        abstract handleOfferMessage(msg: Signaling.SendMessageArgs<MessageType.OFFER>): void;
        abstract handleCandidateMessage(msg: Signaling.SendMessageArgs<MessageType.CANDIDATE>, cb?: (cand: RTCIceCandidate | null) => any): void;
        abstract handleVideoAnswerMsg(msg: Signaling.SendMessageArgs<MessageType.ANSWER>, cb?: (res: 1 | 0) => any): void;
        abstract addTracks(args: Omit<AddTracksProps, 'locale' | 'userId'> & {
            stream: MediaStream;
        }, cb: (e: 1 | 0) => void): void;
        abstract addTracksServer(args: Omit<AddTracksProps, 'locale'>, cb: (e: 1 | 0) => void): void;
    }
}
export declare namespace Data {
    abstract class DBInterface {
        abstract roomCreate<T extends Prisma.RoomCreateArgs>(args: Prisma.SelectSubset<T, Prisma.RoomCreateArgs>, _connection?: WebSocket): Promise<Prisma.CheckSelect<T, Room, Prisma.RoomGetPayload<T>> | null>;
        abstract roomFindFirst<T extends Prisma.RoomFindFirstArgs>(args: Prisma.SelectSubset<T, Prisma.RoomFindFirstArgs>, _connection?: WebSocket): Promise<Prisma.CheckSelect<T, Room, Prisma.RoomGetPayload<T>> | null>;
        abstract roomUpdate<T extends Prisma.RoomUpdateArgs>(args: Prisma.SelectSubset<T, Prisma.RoomUpdateArgs>, _connection?: WebSocket): Promise<Prisma.CheckSelect<T, Room, Prisma.RoomGetPayload<T>> | null>;
        abstract unitUpdate<T extends Prisma.UnitUpdateArgs>(args: Prisma.SelectSubset<T, Prisma.UnitUpdateArgs>, _connection?: WebSocket): Promise<Prisma.CheckSelect<T, Unit, Prisma.UnitGetPayload<T>> | null>;
        abstract unitCreate<T extends Prisma.UnitCreateArgs>(args: Prisma.SelectSubset<T, Prisma.UnitCreateArgs>, _connection?: WebSocket): Promise<Prisma.CheckSelect<T, Unit, Prisma.UnitGetPayload<T>> | null>;
        abstract unitFindFirst<T extends Prisma.UnitFindFirstArgs>(args: Prisma.SelectSubset<T, Prisma.UnitFindFirstArgs>, _connection?: WebSocket): Promise<Prisma.CheckSelect<T, Unit, Prisma.UnitGetPayload<T>> | null>;
        abstract messageUpdate<T extends Prisma.MessageUpdateArgs>(args: Prisma.SelectSubset<T, Prisma.MessageUpdateArgs>, _connection?: WebSocket): Promise<Prisma.CheckSelect<T, MessageFull, Prisma.MessageGetPayload<T>> | null>;
        abstract messageCreate<T extends Prisma.MessageCreateArgs>(args: Prisma.SelectSubset<T, Prisma.MessageCreateArgs>, _connection?: WebSocket): Promise<Prisma.CheckSelect<T, MessageFull, Prisma.MessageGetPayload<T>> | null>;
        abstract quoteCreate<T extends Prisma.QuoteCreateArgs>(args: Prisma.SelectSubset<T, Prisma.QuoteCreateArgs>, _connection?: WebSocket): Promise<Prisma.CheckSelect<T, QuoteFull, Prisma.QuoteGetPayload<T>> | null>;
        abstract messageDelete<T extends Prisma.MessageDeleteArgs>(args: Prisma.SelectSubset<T, Prisma.MessageDeleteArgs>, _connection?: WebSocket): Promise<Prisma.CheckSelect<T, MessageFull, Prisma.MessageGetPayload<T>> | null>;
        abstract messageFindMany<T extends Prisma.MessageFindManyArgs>(args: Prisma.SelectSubset<T, Prisma.MessageFindManyArgs>, _connection?: WebSocket): Promise<Prisma.CheckSelect<T, GetManyResult<MessageFull>, Prisma.MessageGetPayload<T>>>;
        abstract videoFindFirst<T extends Prisma.VideoFindFirstArgs>(args: Prisma.SelectSubset<T, Prisma.VideoFindFirstArgs>): Promise<Prisma.CheckSelect<T, Video, Prisma.VideoGetPayload<T>> | null>;
        abstract videoUpdate<T extends Prisma.VideoUpdateArgs>(args: Prisma.SelectSubset<T, Prisma.VideoUpdateArgs>): Promise<Prisma.CheckSelect<T, Video, Prisma.VideoGetPayload<T>> | null>;
        abstract videoCreate<T extends Prisma.VideoCreateArgs>(args: Prisma.SelectSubset<T, Prisma.VideoCreateArgs>): Promise<Prisma.CheckSelect<T, Video, Prisma.VideoGetPayload<T>> | null>;
        abstract videoDelete<T extends Prisma.VideoDeleteArgs>(args: Prisma.SelectSubset<T, Prisma.VideoDeleteArgs>): Promise<Prisma.CheckSelect<T, Video, Prisma.VideoGetPayload<T>> | null>;
        abstract videoFindMany<T extends Prisma.VideoFindManyArgs>(args: Prisma.SelectSubset<T, Prisma.VideoFindManyArgs>): Promise<Prisma.CheckSelect<T, GetManyResult<Video>, Prisma.VideoGetPayload<T>>>;
        abstract adminsFindFirst<T extends Prisma.AdminsFindFirstArgs>(args: Prisma.SelectSubset<T, Prisma.AdminsFindFirstArgs>): Promise<Prisma.CheckSelect<T, Admins, Prisma.AdminsGetPayload<T>> | null>;
        abstract adminsCreate<T extends Prisma.AdminsCreateArgs>(args: Prisma.SelectSubset<T, Prisma.AdminsCreateArgs>): Promise<Prisma.CheckSelect<T, Admins, Prisma.AdminsGetPayload<T>> | null>;
        abstract adminsUpdate<T extends Prisma.AdminsUpdateArgs>(args: Prisma.SelectSubset<T, Prisma.AdminsUpdateArgs>): Promise<Prisma.CheckSelect<T, Admins, Prisma.AdminsGetPayload<T>> | null>;
        abstract adminsDelete<T extends Prisma.AdminsDeleteArgs>(args: Prisma.SelectSubset<T, Prisma.AdminsDeleteArgs>): Promise<Prisma.CheckSelect<T, Admins, Prisma.AdminsGetPayload<T>> | null>;
    }
}
export declare namespace Handlers {
    type Awaited<T> = T extends PromiseLike<infer U> ? U : T;
}
export declare type SendMessageArgs<T> = Signaling.SendMessageArgs<T>;
export declare type WSInterface = Signaling.WSInterface;
export declare type RTCInterface = Connection.RTCInterface;
export declare type DBInterface = Data.DBInterface;
export declare type AddTracksProps = Connection.AddTracksProps;
export declare const DELIMITER = "_";
export declare const TEMPORARY_PATH = "tmp";
export declare const RECORD_VIDEOS_PATH = "videos";
export declare const VIDEO_BACKGROUNDS_PATH = "backgrounds";
export declare const EXT_WEBM = ".webm";
export declare const TOKEN_QUERY_NAME = "token";
export interface Chunk {
    index: number;
    id: string;
    start: number;
    end: number;
    width: number;
    height: number;
    video: boolean;
    audio: boolean;
    fullPath: string;
    map: string;
    mapA: string;
}
export interface Episode {
    start: number;
    end: number;
    map: string;
    mapA: string;
    video: boolean;
    audio: boolean;
    chunks: Chunk[];
}
export declare const createVideoChunks: ({ dir, dirPath, isBrowser, indexShift, }: {
    dir: string[];
    dirPath: string;
    indexShift?: boolean | undefined;
    isBrowser?: boolean | undefined;
}) => Chunk[];
export declare const getVideoTime: (chunks: Chunk[], all?: boolean) => number;
export declare const createEpisodes: ({ chunks }: {
    chunks: Chunk[];
}) => Episode[];
export declare const getVideoShifts: ({ videoCount, chunks, videoHeight, videoWidth, border, }: {
    videoCount: number;
    chunks: Chunk[];
    videoWidth: number;
    videoHeight: number;
    border: number;
}) => {
    x: number;
    y: number;
    shiftX: number;
    shiftY: number;
};
export declare const getCountVideos: (chunks: Chunk[]) => {
    videoCount: number;
    audioCount: number;
};
//# sourceMappingURL=interfaces.d.ts.map