import type { NitroApp } from "nitropack"; import { Server as Engine } from "engine.io"; import { Server } from "socket.io"; import { defineEventHandler } from "h3"; export default defineNitroPlugin((nitroApp: NitroApp) => { const engine = new Engine(); const io = new Server(); io.bind(engine); io.on("connection", (socket) => { // ... }); nitroApp.router.use("/socket.io/", defineEventHandler({ handler(event) { engine.handleRequest(event.node.req, event.node.res); event._handled = true; }, websocket: { open(peer) { // crossws >= 0.3.0 // @ts-expect-error private method and property engine.prepare(peer._internal.nodeReq); // @ts-expect-error private method and property engine.onWebSocket(peer._internal.nodeReq, peer._internal.nodeReq.socket, peer.websocket); // crossws < 0.3.0 // const context = peer.ctx.node; // // @ts-expect-error private method // engine.prepare(context.req); // // @ts-expect-error private method // engine.onWebSocket(context.req, context.req.socket, context.ws); } } })); });