UNPKG

fastify-uws

Version:

A performant HTTP and WebSocket server for Fastify with uWebSockets.

2 lines (1 loc) 1.34 kB
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const g=require("fastify-plugin"),n=require("./symbols.cjs"),f=require("./websocket-server.cjs");function p(t,a){a.log.error(t),a.raw.destroy(t)}function H(t,a,k){const{server:W}=t,{errorHandler:i=p,options:v}=a;if(i&&typeof i!="function")return k(new Error("invalid errorHandler function"));const b=new f.WebSocketServer(v);W[n.kWs]=b,t.decorate("websocketServer",b),t.addHook("onRoute",o=>{if(!!!o.websocket||o.method==="HEAD"||o.method==="OPTIONS")return;const u=typeof o.ws=="object"?o.ws:{},w=o.handler,h=Buffer.from(o.url),S={};if(u.topics)for(const c of u.topics)S[c]=f.WebSocket.allocTopic(h,c);o.handler=function(c,s){const e=c.raw;if(e[n.kWs]){s.hijack();const m=e.socket[n.kRes];if(e.socket[n.kWs]=!0,e.socket.aborted||e.socket.destroyed)return;m.upgrade({req:e,handler:y=>{const r=new f.WebSocket(h,y,S);let l;try{e.once("error",()=>{r.close()}),e.once("close",()=>{r.end()}),l=w.call(this,r,c,s)}catch(d){return i.call(this,d,r,c,s)}l&&typeof l.catch=="function"&&l.catch(d=>i.call(this,d,r,c,s))}},e.headers["sec-websocket-key"],e.headers["sec-websocket-protocol"],e.headers["sec-websocket-extensions"],e[n.kWs])}else return w.call(this,c,s)}}),k()}const R=g(H,{fastify:"5.x",name:"@fastify/websocket"});exports.default=R;