Steel / api /src /plugins /browser-socket /handlers /recording.handler.ts
supernovagateway's picture
Upload folder using huggingface_hub
fb38ec5 verified
import { IncomingMessage } from "http";
import { Duplex } from "stream";
import { WebSocket } from "ws";
import { EmitEvent } from "../../../types/enums.js";
import { WebSocketHandler, WebSocketHandlerContext } from "../../../types/websocket.js";
function handleRecordingWebSocket(context: WebSocketHandlerContext, ws: WebSocket) {
const { fastify } = context;
const messageHandler = (payload: { events: Record<string, any>[] }) => {
if (ws.readyState === WebSocket.OPEN) {
ws.send(JSON.stringify(payload.events));
}
};
fastify.cdpService.on(EmitEvent.Recording, messageHandler);
// TODO: handle inputs to browser from client
ws.on("message", async (message) => {});
ws.on("close", () => {
fastify.log.info("Recording WebSocket connection closed");
fastify.cdpService.removeListener(EmitEvent.Recording, messageHandler);
});
ws.on("error", (err) => {
fastify.log.error({ err }, "Recording WebSocket error");
});
}
export const recordingHandler: WebSocketHandler = {
path: "/v1/sessions/recording",
handler: (
request: IncomingMessage,
socket: Duplex,
head: Buffer,
context: WebSocketHandlerContext,
) => {
context.fastify.log.info("Connecting to recording events...");
context.wss.handleUpgrade(request, socket, head, (ws) => handleRecordingWebSocket(context, ws));
},
};