/**
 * Slack adapter — Socket Mode via @slack/socket-mode + @slack/web-api
 * (v0.7c). Skips @slack/bolt to avoid dragging Express into opensquid's
 * runtime tree.
 *
 * Two tokens required (Slack architectural decision, not opensquid's):
 *   bot_token  — `xoxb-...` Bot User OAuth Token, used for Web API calls
 *   app_token  — `xapp-...` App-Level Token with `connections:write`
 *                scope, used for the Socket Mode WebSocket
 *
 * Connection: outbound WebSocket via Socket Mode. No public webhook
 * URL, no signature verification, no 3-second response SLA scrimmage.
 * Works behind any NAT.
 *
 * Setup gotchas (surface in install docs):
 *   1. Two tokens are easy to swap — xoxb→WebClient, xapp→SocketModeClient.
 *      Our validator rejects the wrong prefix at config-load time.
 *   2. MUST `await ack()` within 3 seconds of every event even in
 *      Socket Mode, or Slack retries. We ack first, dispatch second.
 *   3. Event Subscriptions need to be configured in the Slack dashboard
 *      separately from the Socket Mode toggle — easy to miss.
 */
import { type ChatAdapter, type MessageHandler, type OutboundMessage, type SendResult } from "../gateway.js";
import type { SlackConfig } from "../config.js";
export declare class SlackAdapter implements ChatAdapter {
    private readonly config;
    readonly platform: "slack";
    private web;
    private socket;
    private handlers;
    private botUsername;
    private botId;
    constructor(config: SlackConfig);
    start(): Promise<void>;
    shutdown(): Promise<void>;
    onMessage(handler: MessageHandler): void;
    send(message: OutboundMessage): Promise<SendResult>;
    identity(): Promise<{
        username: string;
        nativeId: string;
    }>;
}
//# sourceMappingURL=slack.d.ts.map