/**
 * remote/gateway/adapters/slack — Slack Socket Mode adapter.
 *
 * Inbound: a Socket Mode WebSocket (`apps.connections.open` → wss URL → event
 * envelopes, each ACKed). No inbound port — Socket Mode dials out, the same
 * sovereignty posture as the relay. Outbound: `chat.postMessage`.
 *
 * Two tokens: an app-level token (`xapp-…`) opens the socket; a bot token
 * (`xoxb-…`) posts messages.
 *
 * Zero-trust: `allowedChannelIds` MUST be non-empty. Messages with a
 * `bot_id` or a `subtype` (edits, joins, bot posts) are ignored — no loops.
 *
 * @public @since 2.14.0 — preste remote-control T4
 */
import type { GatewayAdapter, GatewayLogger, WebSocketFactory } from "../types.js";
export interface SlackAdapterOptions {
    /** App-level token (`xapp-…`) — opens the Socket Mode connection. */
    appToken: string;
    /** Bot token (`xoxb-…`) — posts messages. */
    botToken: string;
    /** Allowlist of channel ids permitted to control + receive. Non-empty. */
    allowedChannelIds: string[];
    /** Injected WebSocket factory — defaults to the global `WebSocket`. */
    wsFactory?: WebSocketFactory;
    /** Injected fetch — defaults to the global `fetch`. */
    fetchImpl?: typeof fetch;
    /** Slack API base. Default https://slack.com/api. */
    apiBase?: string;
    /** Logger. Default no-op. */
    log?: GatewayLogger;
}
/** Create a Slack Socket Mode gateway adapter. */
export declare function createSlackAdapter(opts: SlackAdapterOptions): GatewayAdapter;
//# sourceMappingURL=slack.d.ts.map