import type Redis from "ioredis";
import type { RequestUser } from "../auth/auth.guard";
import { LiveKitService } from "./livekit.service";
export declare class CallsController {
    private readonly redis;
    private readonly livekit;
    constructor(redis: Redis, livekit: LiveKitService);
    start(user: RequestUser, workspaceId: string, body: unknown): Promise<{
        title: string | null;
        status: "ringing" | "active" | "ended" | "missed";
        id: number;
        workspaceId: number;
        channelId: number | null;
        participants: {
            userId: number;
            joinedAt: string | null;
            state: "declined" | "ringing" | "missed" | "joined" | "left";
            invitedAt: string;
            leftAt: string | null;
            seenAt: string | null;
        }[];
        kind: "audio" | "video" | "connect";
        eventId: number | null;
        startedBy: number;
        startedAt: string;
        answeredAt: string | null;
        endedAt: string | null;
        durationSeconds: number | null;
        recordingStatus: "idle" | "recording" | "processing" | "ready" | "failed";
        recordingObjectKey: string | null;
        transcriptStatus: "idle" | "processing" | "ready" | "failed";
        transcript: string | null;
        summary: string | null;
    }>;
    connect(user: RequestUser, workspaceId: string, body: unknown): Promise<{
        title: string | null;
        status: "ringing" | "active" | "ended" | "missed";
        id: number;
        workspaceId: number;
        channelId: number | null;
        participants: {
            userId: number;
            joinedAt: string | null;
            state: "declined" | "ringing" | "missed" | "joined" | "left";
            invitedAt: string;
            leftAt: string | null;
            seenAt: string | null;
        }[];
        kind: "audio" | "video" | "connect";
        eventId: number | null;
        startedBy: number;
        startedAt: string;
        answeredAt: string | null;
        endedAt: string | null;
        durationSeconds: number | null;
        recordingStatus: "idle" | "recording" | "processing" | "ready" | "failed";
        recordingObjectKey: string | null;
        transcriptStatus: "idle" | "processing" | "ready" | "failed";
        transcript: string | null;
        summary: string | null;
    }>;
    /** Paged rather than windowed (a call is an instant, not a range), and always
     * scoped to calls the reader took part in — see listCalls. */
    list(user: RequestUser, workspaceId: string, query: unknown): Promise<{
        calls: {
            title: string | null;
            status: "ringing" | "active" | "ended" | "missed";
            id: number;
            workspaceId: number;
            channelId: number | null;
            participants: {
                userId: number;
                joinedAt: string | null;
                state: "declined" | "ringing" | "missed" | "joined" | "left";
                invitedAt: string;
                leftAt: string | null;
                seenAt: string | null;
            }[];
            kind: "audio" | "video" | "connect";
            eventId: number | null;
            startedBy: number;
            startedAt: string;
            answeredAt: string | null;
            endedAt: string | null;
            durationSeconds: number | null;
            recordingStatus: "idle" | "recording" | "processing" | "ready" | "failed";
            recordingObjectKey: string | null;
            transcriptStatus: "idle" | "processing" | "ready" | "failed";
            transcript: string | null;
            summary: string | null;
        }[];
    }>;
    /** The people-to-call ranking. Separate from the member roster because it
     * answers a different question — who you actually talk to. */
    contacts(user: RequestUser, workspaceId: string): Promise<{
        contacts: {
            userId: number;
            callCount: number;
            lastCallAt: string | null;
        }[];
    }>;
    unseen(user: RequestUser, workspaceId: string): Promise<{
        unseen: number;
    }>;
    /** Bodyless POST is valid — acknowledging everything unseen needs no
     * arguments, and the web client omits the body in that case. */
    seen(user: RequestUser, workspaceId: string, body: unknown): Promise<{
        seen: number;
    }>;
    get(user: RequestUser, workspaceId: string, callId: string): Promise<{
        title: string | null;
        status: "ringing" | "active" | "ended" | "missed";
        id: number;
        workspaceId: number;
        channelId: number | null;
        participants: {
            userId: number;
            joinedAt: string | null;
            state: "declined" | "ringing" | "missed" | "joined" | "left";
            invitedAt: string;
            leftAt: string | null;
            seenAt: string | null;
        }[];
        kind: "audio" | "video" | "connect";
        eventId: number | null;
        startedBy: number;
        startedAt: string;
        answeredAt: string | null;
        endedAt: string | null;
        durationSeconds: number | null;
        recordingStatus: "idle" | "recording" | "processing" | "ready" | "failed";
        recordingObjectKey: string | null;
        transcriptStatus: "idle" | "processing" | "ready" | "failed";
        transcript: string | null;
        summary: string | null;
    }>;
    mediaToken(user: RequestUser, workspaceId: string, callId: string): Promise<{
        configured: boolean;
        url: string | null;
        token: string | null;
        roomName: string | null;
        identity: string | null;
    }>;
    startRecording(user: RequestUser, workspaceId: string, callId: string): Promise<{
        title: string | null;
        status: "ringing" | "active" | "ended" | "missed";
        id: number;
        workspaceId: number;
        channelId: number | null;
        participants: {
            userId: number;
            joinedAt: string | null;
            state: "declined" | "ringing" | "missed" | "joined" | "left";
            invitedAt: string;
            leftAt: string | null;
            seenAt: string | null;
        }[];
        kind: "audio" | "video" | "connect";
        eventId: number | null;
        startedBy: number;
        startedAt: string;
        answeredAt: string | null;
        endedAt: string | null;
        durationSeconds: number | null;
        recordingStatus: "idle" | "recording" | "processing" | "ready" | "failed";
        recordingObjectKey: string | null;
        transcriptStatus: "idle" | "processing" | "ready" | "failed";
        transcript: string | null;
        summary: string | null;
    }>;
    stopRecording(user: RequestUser, workspaceId: string, callId: string): Promise<{
        title: string | null;
        status: "ringing" | "active" | "ended" | "missed";
        id: number;
        workspaceId: number;
        channelId: number | null;
        participants: {
            userId: number;
            joinedAt: string | null;
            state: "declined" | "ringing" | "missed" | "joined" | "left";
            invitedAt: string;
            leftAt: string | null;
            seenAt: string | null;
        }[];
        kind: "audio" | "video" | "connect";
        eventId: number | null;
        startedBy: number;
        startedAt: string;
        answeredAt: string | null;
        endedAt: string | null;
        durationSeconds: number | null;
        recordingStatus: "idle" | "recording" | "processing" | "ready" | "failed";
        recordingObjectKey: string | null;
        transcriptStatus: "idle" | "processing" | "ready" | "failed";
        transcript: string | null;
        summary: string | null;
    }>;
    dial(user: RequestUser, workspaceId: string, callId: string, body: unknown): Promise<{
        title: string | null;
        status: "ringing" | "active" | "ended" | "missed";
        id: number;
        workspaceId: number;
        channelId: number | null;
        participants: {
            userId: number;
            joinedAt: string | null;
            state: "declined" | "ringing" | "missed" | "joined" | "left";
            invitedAt: string;
            leftAt: string | null;
            seenAt: string | null;
        }[];
        kind: "audio" | "video" | "connect";
        eventId: number | null;
        startedBy: number;
        startedAt: string;
        answeredAt: string | null;
        endedAt: string | null;
        durationSeconds: number | null;
        recordingStatus: "idle" | "recording" | "processing" | "ready" | "failed";
        recordingObjectKey: string | null;
        transcriptStatus: "idle" | "processing" | "ready" | "failed";
        transcript: string | null;
        summary: string | null;
    }>;
    join(user: RequestUser, workspaceId: string, callId: string): Promise<{
        title: string | null;
        status: "ringing" | "active" | "ended" | "missed";
        id: number;
        workspaceId: number;
        channelId: number | null;
        participants: {
            userId: number;
            joinedAt: string | null;
            state: "declined" | "ringing" | "missed" | "joined" | "left";
            invitedAt: string;
            leftAt: string | null;
            seenAt: string | null;
        }[];
        kind: "audio" | "video" | "connect";
        eventId: number | null;
        startedBy: number;
        startedAt: string;
        answeredAt: string | null;
        endedAt: string | null;
        durationSeconds: number | null;
        recordingStatus: "idle" | "recording" | "processing" | "ready" | "failed";
        recordingObjectKey: string | null;
        transcriptStatus: "idle" | "processing" | "ready" | "failed";
        transcript: string | null;
        summary: string | null;
    }>;
    /** No target user in the route: you can only answer for yourself (see
     * declineCall in libs/messaging/src/calls.ts). */
    decline(user: RequestUser, workspaceId: string, callId: string): Promise<{
        title: string | null;
        status: "ringing" | "active" | "ended" | "missed";
        id: number;
        workspaceId: number;
        channelId: number | null;
        participants: {
            userId: number;
            joinedAt: string | null;
            state: "declined" | "ringing" | "missed" | "joined" | "left";
            invitedAt: string;
            leftAt: string | null;
            seenAt: string | null;
        }[];
        kind: "audio" | "video" | "connect";
        eventId: number | null;
        startedBy: number;
        startedAt: string;
        answeredAt: string | null;
        endedAt: string | null;
        durationSeconds: number | null;
        recordingStatus: "idle" | "recording" | "processing" | "ready" | "failed";
        recordingObjectKey: string | null;
        transcriptStatus: "idle" | "processing" | "ready" | "failed";
        transcript: string | null;
        summary: string | null;
    }>;
    leave(user: RequestUser, workspaceId: string, callId: string): Promise<{
        title: string | null;
        status: "ringing" | "active" | "ended" | "missed";
        id: number;
        workspaceId: number;
        channelId: number | null;
        participants: {
            userId: number;
            joinedAt: string | null;
            state: "declined" | "ringing" | "missed" | "joined" | "left";
            invitedAt: string;
            leftAt: string | null;
            seenAt: string | null;
        }[];
        kind: "audio" | "video" | "connect";
        eventId: number | null;
        startedBy: number;
        startedAt: string;
        answeredAt: string | null;
        endedAt: string | null;
        durationSeconds: number | null;
        recordingStatus: "idle" | "recording" | "processing" | "ready" | "failed";
        recordingObjectKey: string | null;
        transcriptStatus: "idle" | "processing" | "ready" | "failed";
        transcript: string | null;
        summary: string | null;
    }>;
    end(user: RequestUser, workspaceId: string, callId: string): Promise<{
        title: string | null;
        status: "ringing" | "active" | "ended" | "missed";
        id: number;
        workspaceId: number;
        channelId: number | null;
        participants: {
            userId: number;
            joinedAt: string | null;
            state: "declined" | "ringing" | "missed" | "joined" | "left";
            invitedAt: string;
            leftAt: string | null;
            seenAt: string | null;
        }[];
        kind: "audio" | "video" | "connect";
        eventId: number | null;
        startedBy: number;
        startedAt: string;
        answeredAt: string | null;
        endedAt: string | null;
        durationSeconds: number | null;
        recordingStatus: "idle" | "recording" | "processing" | "ready" | "failed";
        recordingObjectKey: string | null;
        transcriptStatus: "idle" | "processing" | "ready" | "failed";
        transcript: string | null;
        summary: string | null;
    }>;
    invite(user: RequestUser, workspaceId: string, callId: string, body: unknown): Promise<{
        title: string | null;
        status: "ringing" | "active" | "ended" | "missed";
        id: number;
        workspaceId: number;
        channelId: number | null;
        participants: {
            userId: number;
            joinedAt: string | null;
            state: "declined" | "ringing" | "missed" | "joined" | "left";
            invitedAt: string;
            leftAt: string | null;
            seenAt: string | null;
        }[];
        kind: "audio" | "video" | "connect";
        eventId: number | null;
        startedBy: number;
        startedAt: string;
        answeredAt: string | null;
        endedAt: string | null;
        durationSeconds: number | null;
        recordingStatus: "idle" | "recording" | "processing" | "ready" | "failed";
        recordingObjectKey: string | null;
        transcriptStatus: "idle" | "processing" | "ready" | "failed";
        transcript: string | null;
        summary: string | null;
    }>;
}
//# sourceMappingURL=calls.controller.d.ts.map