@slack/socket-mode
Version:
Official library for using the Slack Platform's Socket Mode API
96 lines • 4.12 kB
TypeScript
import type { Agent } from 'node:http';
import type { EventEmitter } from 'eventemitter3';
import { LogLevel, type Logger } from './logger';
export declare const WS_READY_STATES: string[];
export interface SlackWebSocketOptions {
/** @description The Slack WebSocket URL to connect to. */
url: string;
/** @description An instance of EventEmitter where socket-related events can be emitted to. */
client: EventEmitter;
/** @description A LogLevel at which this class should log to. */
logLevel?: LogLevel;
/** @description A Logger instance used to log activity to. */
logger?: Logger;
/** @description Delay between this client sending a `ping` message, in milliseconds. */
pingInterval?: number;
/** @description The HTTP Agent to use when establishing a WebSocket connection. */
httpAgent?: Agent;
/** @description Whether this WebSocket should DEBUG log ping and pong events. `false` by default. */
pingPongLoggingEnabled?: boolean;
/**
* @description How many milliseconds to wait between ping events from the server before deeming the connection
* stale. Defaults to 30,000.
*/
serverPingTimeoutMS: number;
/**
* @description How many milliseconds to wait between ping events from the server before deeming the connection
* stale. Defaults to 5,000.
*/
clientPingTimeoutMS: number;
}
/**
* Encapsulates the Slack-specific details around establishing a WebSocket connection with the Slack backend.
* Manages the ping/pong heartbeat of the connection.
*/
export declare class SlackWebSocket {
private static loggerName;
private options;
private logger;
private websocket;
/**
* The last timetamp that this WebSocket received pong from the server
*/
private lastPongReceivedTimestamp;
/**
* Sentinel checking if Slack sent us a close frame or not, in order to be able
* to terminate underlying socket gracefully.
*/
private closeFrameReceived;
/**
* Reference to the timeout timer we use to listen to pings from the server
*/
private serverPingTimeout;
/**
* Reference to the timeout timer we use to listen to pongs from the server
*/
private clientPingTimeout;
constructor({ url, client, httpAgent, logger, logLevel, pingInterval, pingPongLoggingEnabled, serverPingTimeoutMS, clientPingTimeoutMS, }: SlackWebSocketOptions);
/**
* Establishes a connection with the Slack backend
*/
connect(): void;
/**
* Disconnects the WebSocket connection with Slack, if connected.
*/
disconnect(): void;
/**
* Clean up any underlying intervals, timeouts and the WebSocket.
*/
private terminate;
/**
* Returns true if the underlying WebSocket connection is active, meaning the underlying
* {@link https://github.com/websockets/ws/blob/master/doc/ws.md#ready-state-constants WebSocket ready state is "OPEN"}.
*/
isActive(): boolean;
/**
* Retrieve the underlying WebSocket readyState. Returns `undefined` if the WebSocket has not been instantiated,
* otherwise will return a number between 0 and 3 inclusive representing the ready states.
* The ready state constants are documented in the {@link https://github.com/websockets/ws/blob/master/doc/ws.md#ready-state-constants `ws` API docs }
*/
get readyState(): number | undefined;
/**
* Sends data via the underlying WebSocket. Accepts an errorback argument.
*/
send(data: string, cb: (err: Error | undefined) => void): void;
/**
* Confirms WebSocket connection is still active; fires whenever a ping event is received
* If we don't receive another ping from the peer before the timeout, we initiate closing the connection.
*/
private monitorPingFromSlack;
/**
* Monitors WebSocket connection health; sends a ping to peer, and expects a pong within a certain timeframe.
* If that expectation is not met, we disconnect the websocket.
*/
private monitorPingToSlack;
}
//# sourceMappingURL=SlackWebSocket.d.ts.map