mirror of
https://github.com/FranP-code/Baileys.git
synced 2025-10-13 00:32:22 +00:00
57 lines
1.4 KiB
TypeScript
57 lines
1.4 KiB
TypeScript
import WebSocket from 'ws'
|
|
import { DEFAULT_ORIGIN } from '../../Defaults'
|
|
import { AbstractSocketClient } from './types'
|
|
|
|
export class WebSocketClient extends AbstractSocketClient {
|
|
protected socket: WebSocket | null = null
|
|
|
|
get isOpen(): boolean {
|
|
return this.socket?.readyState === WebSocket.OPEN
|
|
}
|
|
get isClosed(): boolean {
|
|
return this.socket === null || this.socket?.readyState === WebSocket.CLOSED
|
|
}
|
|
get isClosing(): boolean {
|
|
return this.socket === null || this.socket?.readyState === WebSocket.CLOSING
|
|
}
|
|
get isConnecting(): boolean {
|
|
return this.socket?.readyState === WebSocket.CONNECTING
|
|
}
|
|
|
|
async connect(): Promise<void> {
|
|
if (this.socket) {
|
|
return
|
|
}
|
|
|
|
this.socket = new WebSocket(this.url, {
|
|
origin: DEFAULT_ORIGIN,
|
|
headers: this.config.options?.headers as {},
|
|
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: any[]) => this.emit(event, ...args))
|
|
}
|
|
}
|
|
|
|
async close(): Promise<void> {
|
|
if (!this.socket) {
|
|
return
|
|
}
|
|
|
|
this.socket.close()
|
|
this.socket = null
|
|
}
|
|
send(str: string | Uint8Array, cb?: (err?: Error) => void): boolean {
|
|
this.socket?.send(str, cb)
|
|
|
|
return Boolean(this.socket)
|
|
}
|
|
}
|