UNPKG

@baileys-md/baileys

Version:

Baileys WhatsApp API

53 lines (50 loc) 1.47 kB
//========================================// import { DEFAULT_ORIGIN } from "../../Defaults/index.js"; import { AbstractSocketClient } from "./types.js"; import WebSocket from "ws"; export class WebSocketClient extends AbstractSocketClient { constructor() { super(...arguments); this.socket = null; } get isOpen() { return this.socket?.readyState === WebSocket.OPEN; } get isClosed() { return this.socket === null || this.socket?.readyState === WebSocket.CLOSED; } get isClosing() { return this.socket === null || this.socket?.readyState === WebSocket.CLOSING; } get isConnecting() { return this.socket?.readyState === WebSocket.CONNECTING; } async connect() { if (this.socket) { return; } this.socket = new WebSocket(this.url, { origin: DEFAULT_ORIGIN, headers: this.config.options?.headers, handshakeTimeout: this.config.connectTimeoutMs, timeout: this.config.connectTimeoutMs, agent: this.config.agent }); this.socket.setMaxListeners(0); const events = ["close", "error", "upgrade", "message", "open", "ping", "pong", "unexpected-response"]; for (const event of events) { this.socket?.on(event, (...args) => this.emit(event, ...args)); } } async close() { if (!this.socket) { return; } this.socket.close(); this.socket = null; } send(str, cb) { this.socket?.send(str, cb); return Boolean(this.socket); } }