import { FcrSessionBase, FcrSessionResponse } from '../type';
export interface FcrPeerSessionControl {
    /**
     * Start a new peer session.
     */
    startPeerSession(params: FcrPeerSessionParams): Promise<string>;
    /**
     * Stop the current peer session.
     */
    stopPeerSession(sessionId: string): void;
    /**
     * Accept an incoming peer session.
     */
    acceptPeerSession(session: FcrPeerSession, cause?: Record<string, unknown>): Promise<void>;
    /**
     * Reject an incoming peer session.
     */
    rejectPeerSession(session: FcrPeerSession, cause?: Record<string, unknown>): Promise<void>;
    /**
     * Add an observer to the peer session control.
     */
    addObserver(observer: FcrPeerSessionObserver): void;
    /**
     * Remove an observer from the peer session control.
     */
    removeObserver(observer: FcrPeerSessionObserver): void;
}
export interface FcrPeerSessionObserver {
    /**
     * Called when a new peer session is received.
     * @param session The received peer session.
     */
    onPeerSessionReceived?(session: FcrPeerSession): void;
    /**
     * Called when a peer session is accepted.
     * @param session The response of the accepted peer session.
     */
    onPeerSessionAccepted?(session: FcrSessionResponse): void;
    /**
     * Called when a peer session is rejected.
     * @param session The response of the rejected peer session.
     */
    onPeerSessionRejected?(session: FcrSessionResponse): void;
}
export type FcrPeerSessionParams = {
    sessionKey: string;
    receiverId: string;
    /**
     * The duration of the session, in seconds.
     */
    duration: number;
    payload: Record<string, unknown>;
};
export type FcrPeerSession = FcrSessionBase & {};
