UNPKG

@rivetkit/core

Version:

44 lines (37 loc) 1.19 kB
import { logger } from "@/client/log"; // Global singleton promise that will be reused for subsequent calls let webSocketPromise: Promise<typeof WebSocket> | null = null; export async function importWebSocket(): Promise<typeof WebSocket> { // Return existing promise if we already started loading if (webSocketPromise !== null) { return webSocketPromise; } // Create and store the promise webSocketPromise = (async () => { let _WebSocket: typeof WebSocket; if (typeof WebSocket !== "undefined") { // Browser environment _WebSocket = WebSocket as unknown as typeof WebSocket; logger().debug("using native websocket"); } else { // Node.js environment try { const ws = await import("ws"); _WebSocket = ws.default as unknown as typeof WebSocket; logger().debug("using websocket from npm"); } catch { // WS not available _WebSocket = class MockWebSocket { constructor() { throw new Error( 'WebSocket support requires installing the "ws" peer dependency.', ); } } as unknown as typeof WebSocket; logger().debug("using mock websocket"); } } return _WebSocket; })(); return webSocketPromise; }