/**
 * Slack Channel Client
 *
 * Slack bot implementation using the Slack Web API.
 * Supports both HTTP mode and Socket Mode.
 */
import type { SlackConfig, SlackFile, SlackEventCallback, SlackBlock } from './types.js';
import type { OutboundMessage, DeliveryResult } from '../index.js';
import { BaseChannel } from '../index.js';
/**
 * Slack channel implementation
 */
export declare class SlackChannel extends BaseChannel {
    private ws;
    private botUserId;
    private reconnecting;
    private pingInterval;
    private userCache;
    private channelCache;
    constructor(config: SlackConfig);
    private get slackConfig();
    /**
     * Make API request to Slack
     */
    private apiRequest;
    /**
     * Connect to Slack
     */
    connect(): Promise<void>;
    /**
     * Connect via Socket Mode
     */
    private connectSocketMode;
    /**
     * Get Socket Mode URL
     */
    private getSocketUrl;
    /**
     * Handle Socket Mode message
     */
    private handleSocketMessage;
    /**
     * Handle event
     */
    private handleEvent;
    /**
     * Handle message event
     */
    private handleMessage;
    /**
     * Handle interaction (button click, select, etc.)
     */
    private handleInteraction;
    /**
     * Handle slash command
     */
    private handleSlashCommand;
    /**
     * Handle webhook event (for HTTP mode)
     */
    handleWebhook(body: SlackEventCallback | {
        type: 'url_verification';
        challenge: string;
    }, signature?: string, timestamp?: string): Promise<string | void>;
    /**
     * Verify request signature
     */
    private verifySignature;
    /**
     * Handle connection close
     */
    private handleClose;
    /**
     * Reconnect to Socket Mode
     */
    private reconnect;
    /**
     * Disconnect from Slack
     */
    disconnect(): Promise<void>;
    /**
     * Send a message
     */
    send(message: OutboundMessage): Promise<DeliveryResult>;
    /**
     * Convert Slack event to InboundMessage
     */
    private convertEvent;
    /**
     * Get channel info (cached)
     */
    private getChannelInfo;
    /**
     * Get user info (cached)
     */
    private getUserInfo;
    /**
     * Extract attachments from files
     */
    private extractAttachments;
    /**
     * Get file type from mimetype
     */
    private getFileType;
    /**
     * Determine content type from event
     */
    private determineContentType;
    /**
     * Build actions block from buttons
     */
    private buildActionsBlock;
    /**
     * Update a message
     */
    updateMessage(channelId: string, messageTs: string, text: string, blocks?: SlackBlock[]): Promise<void>;
    /**
     * Delete a message
     */
    deleteMessage(channelId: string, messageTs: string): Promise<void>;
    /**
     * Add reaction to message
     */
    addReaction(channelId: string, messageTs: string, emoji: string): Promise<void>;
    /**
     * Upload file
     */
    uploadFile(channelId: string, file: Buffer, filename: string, options?: {
        title?: string;
        comment?: string;
        threadTs?: string;
    }): Promise<SlackFile>;
    /**
     * Send ephemeral message (only visible to one user)
     */
    sendEphemeral(channelId: string, userId: string, text: string, blocks?: SlackBlock[]): Promise<void>;
    /**
     * Open a modal
     */
    openModal(triggerId: string, view: {
        title: string;
        blocks: SlackBlock[];
        submit?: string;
        close?: string;
        callbackId?: string;
        privateMetadata?: string;
    }): Promise<void>;
}
export default SlackChannel;
