// Generated by dts-bundle-generator v9.5.1

import { EventEmitter } from 'eventemitter3';

declare enum LogLevel {
	/**
	 * Prints no logs.
	 */
	Disabled = 0,
	/**
	 * Prints only errors.
	 */
	Errors = 1,
	/**
	 * Prints errors and warnings.
	 */
	Warnings = 2,
	/**
	 * Prints info, errors and warnings.
	 */
	Info = 3,
	/**
	 * Prints all logs (Info + Debug).
	 */
	All = 4
}
export type Signal = {
	type: "candidate";
	data: RTCIceCandidate;
} | {
	type: "sdp";
	data: RTCSessionDescription;
};
export interface SignalMessage {
	target: string;
	session: string;
	metadata?: string;
	signal: Signal;
}
export interface SignalMessageWithSource extends SignalMessage {
	source: string;
}
export type OutSignalMessage = SignalMessage;
export type InSignalMessage = SignalMessageWithSource;
export interface SignalingEvents {
	connect: (id: string) => void;
	disconnect: () => void;
	error: (err: Error) => void;
	signal: (msg: InSignalMessage) => void;
	join: (roomId: string, peerId: string, metadata?: string) => void;
}
export type SignalingState = "disconnected" | "connecting" | "connected" | "ready";
export interface Signaling extends EventEmitter<SignalingEvents> {
	get id(): string;
	get state(): SignalingState;
	connect(): void;
	disconnect(): void;
	signal(msg: SignalMessage): void;
	join(roomId: string, metadata?: string): void;
}
export interface CallOpts {
	signaling: Signaling;
	debug?: LogLevel;
	metadata?: string;
	/**
	 * Optional RTCConfiguration for the peer connections.
	 * @defaultValue { iceServers: [ { urls: "stun:stun.l.google.com:19302" }, { urls: "stun:stun1.l.google.com:19302" } ] }
	 * @see https://developer.mozilla.org/en-US/docs/Web/API/RTCConfiguration
	 */
	rtcConfig?: RTCConfiguration;
}
export interface CallerOptions extends CallOpts {
	target: string;
	session?: string;
}
export interface CalleeOptions extends CallOpts {
	signal: InSignalMessage;
}
export type CallOptions = CallerOptions | CalleeOptions;
export interface CallEvents {
	open: () => void;
	close: () => void;
	error: (err: Error) => void;
	data: (data: string) => void;
	stream: (stream: MediaStream, metadata?: string) => void;
	removestream: (stream: MediaStream, metadata?: string) => void;
	track: (track: MediaStreamTrack, stream: MediaStream, metadata?: string) => void;
	removetrack: (track: MediaStreamTrack, stream: MediaStream, metadata?: string) => void;
}
export interface ICall {
	get session(): string;
	get metadata(): string | undefined;
	get initiator(): boolean;
	get ready(): boolean;
	answer(): void;
	hangup(): void;
	send(data: string): void;
	addStream(stream: MediaStream, metadata?: string): void;
	addTrack(track: MediaStreamTrack, stream: MediaStream): void;
	removeStream(stream: MediaStream): void;
	removeTrack(track: MediaStreamTrack): void;
}
export declare class Call extends EventEmitter<CallEvents> implements ICall {
	#private;
	static readonly SESSION_PREFIX = "call:";
	constructor(options: CallOptions);
	get session(): string;
	get metadata(): string | undefined;
	get initiator(): boolean;
	get ready(): boolean;
	get target(): string;
	hangup: () => void;
	answer: () => void;
	send: (data: string) => void;
	addStream: (stream: MediaStream, metadata?: string) => void;
	removeStream: (stream: MediaStream) => void;
	addTrack: (track: MediaStreamTrack, stream: MediaStream) => void;
	removeTrack: (track: MediaStreamTrack) => void;
}
export interface RoomEvents {
	close: () => void;
	join: (peerId: string, metadata?: string) => void;
	leave: (peerId: string) => void;
	stream: (stream: MediaStream, peerId: string, metadata?: string) => void;
	removestream: (stream: MediaStream, peerId: string, metadata?: string) => void;
	track: (track: MediaStreamTrack, stream: MediaStream, peerId: string, metadata?: string) => void;
	removetrack: (track: MediaStreamTrack, stream: MediaStream, peerId: string, metadata?: string) => void;
	message: (data: string, peerId: string) => void;
}
export interface RoomOptions {
	signaling: Signaling;
	roomId: string;
	debug?: LogLevel;
	metadata?: string;
	/**
	 * Optional RTCConfiguration for the peer connections.
	 * @defaultValue { iceServers: [ { urls: "stun:stun.l.google.com:19302" }, { urls: "stun:stun1.l.google.com:19302" } ] }
	 * @see https://developer.mozilla.org/en-US/docs/Web/API/RTCConfiguration
	 */
	rtcConfig?: RTCConfiguration;
}
export interface IRoom {
	get id(): string;
	get session(): string;
	get peers(): string[];
	leave(): void;
	send(msg: string, target?: string | string[]): void;
	addStream(stream: MediaStream, metadata?: string, target?: string | string[]): void;
	removeStream(stream: MediaStream, target?: string | string[]): void;
	addTrack(track: MediaStreamTrack, stream: MediaStream, target?: string | string[]): void;
	removeTrack(track: MediaStreamTrack, target?: string | string[]): void;
}
export declare class Room extends EventEmitter<RoomEvents> implements IRoom {
	#private;
	static readonly SESSION_PREFIX = "room:";
	constructor(options: RoomOptions);
	get id(): string;
	get session(): string;
	get peers(): string[];
	leave(): void;
	send(msg: string, target?: string | string[]): void;
	addStream(stream: MediaStream, metadata?: string, target?: string | string[] | null): void;
	removeStream(stream: MediaStream, target?: string | string[]): void;
	addTrack(track: MediaStreamTrack, stream: MediaStream, target?: string | string[]): void;
	removeTrack(track: MediaStreamTrack, target?: string | string[]): void;
}
export interface ArticoEvents {
	open: (id: string) => void;
	close: () => void;
	error: (err: Error) => void;
	call: (call: Call) => void;
}
export interface ArticoOptions {
	/**
	 * The log level (0: none, 1: errors, 2: warnings, 3: info, 4: debug).
	 * @defaultValue 1
	 */
	debug: LogLevel;
	/**
	 * Optional signaling implementation.
	 * Defaults to using Artico's built-in socket.io signaling.
	 */
	signaling: Signaling;
	/**
	 * Requested peer ID. If not provided, a random ID will be generated.
	 */
	id: string;
	/**
	 * Optional RTCConfiguration for the peer connections.
	 * @defaultValue { iceServers: [ { urls: "stun:stun.l.google.com:19302" }, { urls: "stun:stun1.l.google.com:19302" } ] }
	 * @see https://developer.mozilla.org/en-US/docs/Web/API/RTCConfiguration
	 */
	rtcConfig: RTCConfiguration;
}
export interface IArtico {
	get id(): string;
	get state(): SignalingState;
	close: () => void;
	call: (target: string, metadata?: string) => Call;
	join: (roomId: string, metadata?: string) => Room;
}
export declare class Artico extends EventEmitter<ArticoEvents> implements IArtico {
	#private;
	constructor(options?: Partial<ArticoOptions>);
	get id(): string;
	get state(): SignalingState;
	call: (target: string, metadata?: string) => Call;
	join: (roomId: string, metadata?: string) => Room;
	close: () => void;
}
export interface SocketSignalingOptions {
	debug: LogLevel;
	url: string;
	id: string;
}
export declare class SocketSignaling extends EventEmitter<SignalingEvents> implements Signaling {
	#private;
	constructor(options?: Partial<SocketSignalingOptions>);
	get id(): string;
	get state(): SignalingState;
	connect(): void;
	disconnect(): void;
	signal(msg: OutSignalMessage): void;
	join(roomId: string, metadata?: string): void;
}

export {
	Artico as default,
};

export {};
