import { EventEmitter } from "node:events"; import { Duplex } from "node:stream"; import * as http from "node:http"; import * as ws from "ws"; import { StartWebSocketMessage, Body } from "./types.js"; import { TwilioVoIP } from "./twilio_voip.js"; export interface TwilioGatewayEvents { voip: [TwilioVoIP]; } export interface TwilioGatewayOptions { httpServer: http.Server; webSocketServer: ws.Server; webhookURL: URL; accountSid: string; authToken: string; recordingStatusURL?: URL; transcriptStatusURL?: URL; requestSizeLimit?: number; webSocketMessageSizeLimit?: number; } export declare class TwilioGateway extends EventEmitter { protected httpServer: http.Server; protected webSocketServer: ws.Server; protected webSocketURL: URL; protected callSidToTwilioVoIP: Map; protected webhookURL: URL; protected accountSid: string; protected authToken: string; protected recordingStatusURL: URL; protected transcriptStatusURL: URL; protected requestSizeLimit?: number; protected webSocketMessageSizeLimit: number; constructor({ httpServer, webSocketServer, webhookURL, accountSid, authToken, transcriptStatusURL, recordingStatusURL, requestSizeLimit, webSocketMessageSizeLimit, }: TwilioGatewayOptions); protected routeWebhook: (body: Body, res: http.ServerResponse) => void; protected routeRecordingStatus: (body: Body, res: http.ServerResponse) => void; protected routeTranscriptStatus: (body: Body, res: http.ServerResponse) => void; protected onRequest: (req: http.IncomingMessage, res: http.ServerResponse) => void; protected onConnection: (webSocket: ws.WebSocket) => void; protected onUpgrade: (req: http.IncomingMessage, socket: Duplex, head: Buffer) => void; protected logError: (err: unknown) => void; } export interface WebSocketListenerOptions { webSocket: ws.WebSocket; twilioGateway: TwilioGateway; callSidToTwilioVoIP: Map; webSocketMessageSizeLimit: number; } export declare class WebSocketListener { webSocket: ws.WebSocket; startMessage?: StartWebSocketMessage; callSidToTwilioVoIP: Map; voip?: TwilioVoIP; twilioGateway: TwilioGateway; webSocketMessageSizeLimit: number; constructor({ webSocket, twilioGateway, callSidToTwilioVoIP, webSocketMessageSizeLimit }: WebSocketListenerOptions); protected onWebSocketClose: (code: number, reason: Buffer) => void; protected onWebSocketError: (err: Error) => void; protected onWebSocketMessage: (data: ws.RawData) => void; }