trellis
Version:
Agentic State Engine — event-sourced causal graph with branching, decision traces, and realtime sync for AI-native applications
84 lines • 2.87 kB
TypeScript
import type { PeerId, SyncMessage, SyncMessageHandler, SyncTransport } from './types.js';
type WebSocketState = 0 | 1 | 2 | 3;
interface WebSocketLike {
readyState: WebSocketState;
onopen: (() => void) | null;
onmessage: ((event: {
data: unknown;
}) => void | Promise<void>) | null;
onclose: (() => void) | null;
onerror: ((event: unknown) => void) | null;
send(data: string): void;
close(): void;
}
type WebSocketCtor = new (url: string) => WebSocketLike;
export interface PartyKitReconnectOptions {
/** Max reconnect attempts (0 = unlimited). Default: unlimited. */
maxAttempts?: number;
/** Initial backoff in ms. Default: 500. */
baseDelayMs?: number;
/** Max backoff in ms. Default: 30_000. */
maxDelayMs?: number;
}
export interface PartyKitRoomTransportOptions {
/** Local client/peer identity. */
peerId: string;
/** Full PartyKit room WebSocket URL. */
roomUrl: string;
/** Optional auth token appended as `?token=` on the WebSocket URL. */
auth?: string;
/** Logical room peer ID used by SyncEngine calls. Default: `room`. */
roomId?: string;
/** Human-readable room name. */
roomName?: string;
/** Test hook or non-browser WebSocket implementation. */
WebSocketImpl?: WebSocketCtor;
/**
* Reconnect with exponential backoff after unexpected close.
* Default: enabled.
*/
reconnect?: boolean | PartyKitReconnectOptions;
/** Called after a successful reconnect (e.g. to re-sync). */
onReconnect?: () => void | Promise<void>;
/** Called when the connection drops. */
onDisconnect?: (reason?: string) => void;
}
/**
* SyncTransport for a PartyKit-style room relay.
*
* The server side should implement the same room semantics as SyncRoomCore:
* canonical catch-up log, full-op catch-up, and broadcast of newly accepted ops.
*/
export declare class PartyKitRoomTransport implements SyncTransport {
private peerId;
private room;
private roomUrl;
private WebSocketImpl;
private ws;
private messageHandler;
private intentionalClose;
private reconnectEnabled;
private reconnectOpts;
private reconnectAttempt;
private reconnectTimer?;
private connectPromise;
private onReconnect?;
private onDisconnect?;
constructor(opts: PartyKitRoomTransportOptions);
connect(): Promise<void>;
send(peerId: string, message: SyncMessage): Promise<void>;
onMessage(handler: SyncMessageHandler): void;
peers(): PeerId[];
close(): void;
getPeerId(): string;
getRoomPeer(): PeerId;
/** Whether the WebSocket is open. */
isConnected(): boolean;
private openSocket;
private scheduleReconnect;
private tryReconnect;
private static withAuth;
private parseMessage;
}
export {};
//# sourceMappingURL=partykit-transport.d.ts.map