react-native-websocket-service
Version:
A reusable WebSocket service with reconnect, heartbeat, and React Native support.
71 lines (70 loc) • 1.98 kB
TypeScript
interface CustomWebSocket {
readyState: number;
onopen: ((event: Event) => void) | null;
onclose: ((event: CloseEvent) => void) | null;
onmessage: ((event: MessageEvent) => void) | null;
onerror: ((event: Event) => void) | null;
send(data: string | ArrayBuffer | Blob): void;
close(code?: number, reason?: string): void;
}
interface Event {
type: string;
}
interface CloseEvent extends Event {
code: number;
reason: string;
wasClean?: boolean;
}
interface MessageEvent extends Event {
data: string | ArrayBuffer | Blob;
}
declare global {
interface Window {
WebSocket: new (url: string) => CustomWebSocket;
}
}
export interface WebSocketConfig {
url: string;
maxRetries?: number;
initialBackoffMs?: number;
connectionTimeoutMs?: number;
heartbeatIntervalMs?: number;
}
export interface WebSocketCallbacks {
onConnected?: () => void;
onDisconnected?: () => void;
onMessage?: (message: string) => void;
onError?: (error: Error) => void;
}
export declare class WebSocketService {
private socket;
private _isConnected;
private readonly config;
private readonly callbacks;
private appState;
private isManuallyDisconnected;
private connectionTimeout;
private heartbeatInterval;
private reconnectTimeout;
private appStateListener;
private retryCount;
constructor(config: WebSocketConfig, callbacks?: WebSocketCallbacks);
connect(): void;
disconnect(): void;
send(data: Record<string, unknown>): void;
forceReconnect(): void;
destroy(): void;
get isConnected(): boolean;
get url(): string;
get readyState(): number | undefined;
private initializeSocket;
private setupSocketEvents;
private handleSocketError;
private scheduleReconnect;
private startHeartbeat;
private stopHeartbeat;
private handleAppStateChange;
private cleanup;
private clearConnectionTimeout;
}
export {};