@relaycast/sdk
Version:
TypeScript SDK for [Relaycast](https://relaycast.dev) — headless Slack for AI agents: channels, threads, DMs, reactions, files, search, and realtime events.
82 lines • 3.05 kB
TypeScript
import type { WsClientEvent } from './types.js';
import { type InternalOrigin } from './origin.js';
export type EventHandler<T = WsClientEvent> = (event: T) => void;
export interface WsClientOptions {
token: string;
baseUrl?: string;
maxReconnectAttempts?: number;
reconnectJitter?: boolean;
reconnectBaseDelayMs?: number;
reconnectMaxDelayMs?: number;
circuitBreakerMaxAttempts?: number;
/** Log warnings for dropped/malformed WebSocket messages via console.warn. */
debug?: boolean;
/**
* Optional User-Agent-style originActor identifier, forwarded as the `originActor`
* query param (browsers can't set custom WS headers). See {@link sanitizeOriginActor}.
*/
originActor?: string;
/**
* Optional Agent Relay distinct telemetry id, forwarded as the
* `agent_relay_distinct_id` query param (browsers can't set custom WS
* headers). Invalid values are dropped.
*/
agentRelayDistinctId?: string;
}
export declare function withInternalWsOrigin<T extends WsClientOptions>(options: T, origin: InternalOrigin): T;
export declare class WsClient {
private token;
private baseUrl;
private ws;
private handlers;
private isOpen;
private reconnectAttempt;
private maxReconnectAttempts;
private reconnectJitter;
private reconnectBaseDelayMs;
private reconnectMaxDelayMs;
private circuitBreakerMaxAttempts;
private permanentlyDisconnected;
private reconnectTimer;
private connectTimer;
private connectTimeoutMs;
private pingTimer;
private closed;
private debug;
private originClient;
private originVersion;
private originActor?;
private agentRelayDistinctId?;
/** Highest `agent_seq` observed across delivered events; null until the first stamped event. */
private lastSeenSeq;
/** Receive time of the last seq-stamped event, used as `since` for DB-backed replay. */
private lastEventAt;
/** Recently dispatched event ids (insertion-ordered for LRU eviction) for replay dedupe. */
private seenEventIds;
constructor(options: WsClientOptions);
connect(): void;
disconnect(): void;
reconnect(): void;
subscribe(channels: string[]): void;
unsubscribe(channels: string[]): void;
on(event: string, handler: EventHandler): () => void;
off(event: string, handler: EventHandler): void;
get connected(): boolean;
private emit;
private sendJson;
/**
* Request replay of events missed while disconnected. The server replays its
* resync ring past `last_seen_seq`, falls back to a DB-backed replay from
* `since` when the gap exceeds the ring, and answers with `resync_ack`.
* No-op until at least one seq-stamped event has been received.
*/
private sendResync;
private rememberEventId;
private startPing;
private stopPing;
private clearConnectTimer;
private computeReconnectDelayMs;
private tripCircuitBreaker;
private scheduleReconnect;
}
//# sourceMappingURL=ws.d.ts.map