import type Redis from "ioredis";
import * as messaging from "@slackwsh/messaging";
import type { RequestUser } from "../auth/auth.guard";
import { ObjectStorageService } from "../messages/object-storage.service";
export declare class ChannelsController {
    private readonly redis;
    private readonly storage;
    constructor(redis: Redis, storage: ObjectStorageService);
    create(user: RequestUser, workspaceId: string, body: unknown): Promise<{
        type: "public" | "private" | "dm" | "group_dm";
        workspaceId: number;
        name: string | null;
        id: number;
        topic: string | null;
        purpose: string | null;
        createdBy: number;
        isArchived: boolean;
        lastMessageAt: Date | null;
        memberCount: number;
        createdAt: Date;
    }>;
    list(user: RequestUser, workspaceId: string): Promise<{
        channels: {
            channel: {
                type: "public" | "private" | "dm" | "group_dm";
                workspaceId: number;
                name: string | null;
                id: number;
                topic: string | null;
                purpose: string | null;
                createdBy: number;
                isArchived: boolean;
                lastMessageAt: Date | null;
                memberCount: number;
                createdAt: Date;
            };
            member: {
                unreadCount: number;
                userId: number;
                role: string;
                joinedAt: Date;
                channelId: number;
                lastReadSeq: number;
                lastReadAt: Date | null;
                mentionCount: number;
                notifPref: string;
                isMuted: boolean;
                isStarred: boolean;
                isClosed: boolean;
                sectionId: string | null;
            };
            dmPeer: null | {
                id: number;
                name: string;
                email: string;
                avatarUrl: string | null;
            };
            dmPeers: Array<{
                id: number;
                name: string;
                email: string;
                avatarUrl: string | null;
            }>;
        }[];
    }>;
    listMembers(user: RequestUser, workspaceId: string, channelId: string): Promise<{
        members: {
            member: {
                userId: number;
                role: string;
                joinedAt: Date;
                channelId: number;
                lastReadSeq: number;
                lastReadAt: Date | null;
                mentionCount: number;
                notifPref: string;
                isMuted: boolean;
                isStarred: boolean;
                isClosed: boolean;
                sectionId: string | null;
            };
            user: {
                name: string;
                id: number;
                email: string;
                avatarUrl: string | null;
            };
        }[];
    }>;
    addMembers(user: RequestUser, workspaceId: string, channelId: string, body: unknown): Promise<{
        added: number[];
    }>;
    removeMember(user: RequestUser, workspaceId: string, channelId: string, memberUserId: string): Promise<{
        removed: number;
    }>;
    join(user: RequestUser, workspaceId: string, channelId: string): Promise<{
        type: "public" | "private" | "dm" | "group_dm";
        workspaceId: number;
        name: string | null;
        id: number;
        topic: string | null;
        purpose: string | null;
        createdBy: number;
        isArchived: boolean;
        lastMessageAt: Date | null;
        memberCount: number;
        createdAt: Date;
    }>;
    leave(user: RequestUser, workspaceId: string, channelId: string): Promise<{
        left: boolean;
    }>;
    archive(user: RequestUser, workspaceId: string, channelId: string, body: unknown): Promise<{
        archived: boolean;
    }>;
    /** Everything the About-this-room panel needs, in one request. */
    about(user: RequestUser, workspaceId: string, channelId: string): Promise<{
        channel: {
            type: "public" | "private" | "dm" | "group_dm";
            id: number;
            name: string | null;
            workspaceId: number;
            topic: string | null;
            purpose: string | null;
            createdBy: number;
            isArchived: boolean;
            lastMessageAt: string | null;
            memberCount: number;
        };
        membership: {
            role: any;
            notifPref: any;
            isMuted: any;
            isStarred: any;
            joinedAt: any;
        };
        capabilities: {
            canEditRoom: boolean;
            canPin: boolean;
            canArchive: boolean;
            canLeave: boolean;
            canRemoveMembers: boolean;
            canDeletePermanently: boolean;
        };
        pins: messaging.ChannelAboutPin[];
        integrations: {
            id: number;
            provider: string;
            label: string | null;
            externalUrl: string | null;
            addedBy: number;
            addedAt: string;
        }[];
    }>;
    /** The caller's own notification settings for this room — never anyone else's. */
    updatePrefs(user: RequestUser, workspaceId: string, channelId: string, body: unknown): Promise<{
        membership: {
            role: string;
            notifPref: string;
            isMuted: boolean;
            isStarred: boolean;
        };
    }>;
    addIntegration(user: RequestUser, workspaceId: string, channelId: string, body: unknown): Promise<{
        integration: {
            id: number;
            provider: string;
            label: string | null;
            externalUrl: string | null;
            addedBy: number;
            addedAt: string;
        };
    }>;
    removeIntegration(user: RequestUser, workspaceId: string, channelId: string, integrationId: string): Promise<{
        removed: boolean;
    }>;
    update(user: RequestUser, workspaceId: string, channelId: string, body: unknown): Promise<{
        updated: boolean;
        channel: {
            type: "public" | "private" | "dm" | "group_dm";
            id: number;
            name: string | null;
            workspaceId: number;
            topic: string | null;
            purpose: string | null;
            createdBy: number;
            isArchived: boolean;
            lastMessageAt: string | null;
            memberCount: number;
        };
    }>;
    permanentlyDelete(user: RequestUser, workspaceId: string, channelId: string): Promise<{
        deleted: boolean;
    }>;
}
export declare class DirectMessagesController {
    private readonly redis;
    constructor(redis: Redis);
    createDm(user: RequestUser, workspaceId: string, body: unknown): Promise<{
        type: "public" | "private" | "dm" | "group_dm";
        workspaceId: number;
        name: string | null;
        id: number;
        topic: string | null;
        purpose: string | null;
        createdBy: number;
        isArchived: boolean;
        lastMessageAt: Date | null;
        memberCount: number;
        createdAt: Date;
    }>;
    createGroupDm(user: RequestUser, workspaceId: string, body: unknown): Promise<{
        type: "public" | "private" | "dm" | "group_dm";
        workspaceId: number;
        name: string | null;
        id: number;
        topic: string | null;
        purpose: string | null;
        createdBy: number;
        isArchived: boolean;
        lastMessageAt: Date | null;
        memberCount: number;
        createdAt: Date;
    }>;
    setClosed(user: RequestUser, workspaceId: string, channelId: string, body: unknown): Promise<{
        closed: boolean;
    }>;
    convert(user: RequestUser, workspaceId: string, channelId: string, body: unknown): Promise<{
        type: "public" | "private" | "dm" | "group_dm";
        id: number;
        name: string | null;
        workspaceId: number;
        topic: string | null;
        purpose: string | null;
        createdBy: number;
        isArchived: boolean;
        lastMessageAt: string | null;
        memberCount: number;
    }>;
}
//# sourceMappingURL=channels.controller.d.ts.map