UNPKG

@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
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