import { DataConnection, MediaConnection } from "peerjs";
export interface MessageType<Metadata> {
    fromMetadata?: MetadataType<Metadata>;
    to?: string;
}
export interface MetadataUser {
    user: string;
}
export type MetadataType<T> = T & {
    user: string;
};
export interface VuePeerConnection<T> extends VuePeerStream<T> {
    user: string;
    conn?: DataConnection;
    call?: MediaConnection;
}
export type VuePeerStream<T> = {
    id: string;
    regAt: number;
    stream?: MediaStream;
    metadata: MetadataType<T>;
};
export declare enum VuePeerSocketEvent {
    MESSAGE = "message",
    LOCAL_VIDEO = "local_video",
    USER_JOINED = "user_joined",
    ON_ACCEPTED = "on_accepted",
    ERROR_IN_PEER = "error_in_peer",
    ERROR_IN_SOCKET = "error_in_socket",
    ERROR_IN_NAVIGATOR = "error_in_navigator"
}
export type MessageEvent<T> = (data: T) => void;
export type UserJoinedEvent<T> = (sessions: Array<VuePeerStream<T>>) => void;
export type LocalVideoEvent = (stream: MediaStream) => void;
export type ErrorEvent = (err: Error) => void;
export type AcceptedEvent<T> = (metadata: MetadataType<T>) => boolean;
export type VuePeerEvent<TMetadata, TMessage> = MessageEvent<TMessage> | UserJoinedEvent<TMetadata> | AcceptedEvent<TMetadata> | LocalVideoEvent | ErrorEvent;
export interface VuePeerOption<T> {
    socketUrl: string;
    room: string;
    metadata: MetadataType<T>;
    showLogs?: boolean;
}
