/**
 * Minified by jsDelivr using Terser v5.39.0.
 * Original file: /npm/qaap-uws@9.14.3/uws.js
 *
 * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files
 */
"use strict";const http=require("http"),EventEmitter=require("events"),EE_ERROR="Registering more than one listener to a WebSocket is not supported.",DEFAULT_PAYLOAD_LIMIT=16777216;let _upgradeReq=null;function noop(){}function abortConnection(e,t,n){e.end("HTTP/1.1 "+t+" "+n+"\r\n\r\n")}function emitConnection(e){this.emit("connection",e,_upgradeReq)}function onServerMessage(e,t){t.internalOnMessage(e)}const native=(()=>{try{try{return process.binding("uws_builtin")}catch(e){return require(`./uws_${process.platform}_${process.versions.modules}`)}}catch(e){const t=process.version.substring(1).split(".").map((function(e){return parseInt(e)})),n=t[0]<6||6===t[0]&&t[1]<4;throw"win32"===process.platform&&n?new Error("µWebSockets requires Node.js 6.4.0 or greater on Windows."):new Error("Compilation of µWebSockets has failed and there is no pre-compiled binary available for your system. Please install a supported C++11 compiler and reinstall the module 'uws'.")}})();native.setNoop(noop);const clientGroup=native.client.group.create(0,16777216);native.client.group.onConnection(clientGroup,(e=>{const t=native.getUserData(e);t.external=e,t.internalOnOpen()})),native.client.group.onMessage(clientGroup,((e,t)=>{t.internalOnMessage(e)})),native.client.group.onDisconnection(clientGroup,((e,t,n,r)=>{r.external=null,process.nextTick((()=>{r.internalOnClose(t,n)})),native.clearUserData(e)})),native.client.group.onPing(clientGroup,((e,t)=>{t.onping(e)})),native.client.group.onPong(clientGroup,((e,t)=>{t.onpong(e)})),native.client.group.onError(clientGroup,(e=>{process.nextTick((()=>{e.internalOnError({message:"uWs client connection error",stack:"uWs client connection error"})}))}));class WebSocket{constructor(e){this.external=e,this.internalOnMessage=noop,this.internalOnClose=noop,this.onping=noop,this.onpong=noop}get upgradeReq(){return _upgradeReq}set onmessage(e){this.internalOnMessage=e?t=>{e({data:t})}:noop}set onopen(e){this.internalOnOpen=e||noop}set onclose(e){this.internalOnClose=e?(t,n)=>{e({code:t,reason:n})}:noop}set onerror(e){this.internalOnError=e&&this instanceof WebSocketClient?e:noop}emit(e,t,n){return"message"===e?this.internalOnMessage(t):"close"===e?this.internalOnClose(t,n):"ping"===e?this.onping(t):"pong"===e&&this.onpong(t),this}on(e,t){if("message"===e){if(this.internalOnMessage!==noop)throw Error(EE_ERROR);this.internalOnMessage=t}else if("close"===e){if(this.internalOnClose!==noop)throw Error(EE_ERROR);this.internalOnClose=t}else if("ping"===e){if(this.onping!==noop)throw Error(EE_ERROR);this.onping=t}else if("pong"===e){if(this.onpong!==noop)throw Error(EE_ERROR);this.onpong=t}else if("open"===e){if(this.internalOnOpen!==noop)throw Error(EE_ERROR);this.internalOnOpen=t}else if("error"===e&&this instanceof WebSocketClient){if(this.internalOnError!==noop)throw Error(EE_ERROR);this.internalOnError=t}return this}once(e,t){if("message"===e){if(this.internalOnMessage!==noop)throw Error(EE_ERROR);this.internalOnMessage=e=>{this.internalOnMessage=noop,t(e)}}else if("close"===e){if(this.internalOnClose!==noop)throw Error(EE_ERROR);this.internalOnClose=(e,n)=>{this.internalOnClose=noop,t(e,n)}}else if("ping"===e){if(this.onping!==noop)throw Error(EE_ERROR);this.onping=()=>{this.onping=noop,t()}}else if("pong"===e){if(this.onpong!==noop)throw Error(EE_ERROR);this.onpong=()=>{this.onpong=noop,t()}}return this}removeAllListeners(e){return e&&"message"!==e||(this.internalOnMessage=noop),e&&"close"!==e||(this.internalOnClose=noop),e&&"ping"!==e||(this.onping=noop),e&&"pong"!==e||(this.onpong=noop),this}removeListener(e,t){return"message"===e&&this.internalOnMessage===t?this.internalOnMessage=noop:"close"===e&&this.internalOnClose===t?this.internalOnClose=noop:"ping"===e&&this.onping===t?this.onping=noop:"pong"===e&&this.onpong===t&&(this.onpong=noop),this}get OPEN(){return WebSocketClient.OPEN}get CLOSED(){return WebSocketClient.CLOSED}get readyState(){return this.external?WebSocketClient.OPEN:WebSocketClient.CLOSED}get _socket(){const e=this.external?native.getAddress(this.external):new Array(3);return{remotePort:e[0],remoteAddress:e[1],remoteFamily:e[2]}}ping(e,t,n){this.external&&native.server.send(this.external,e,WebSocketClient.OPCODE_PING)}terminate(){this.external&&(native.server.terminate(this.external),this.external=null)}send(e,t,n){if(this.external){"function"==typeof t&&(n=t,t=null);const r=t&&t.binary||"string"!=typeof e;native.server.send(this.external,e,r?WebSocketClient.OPCODE_BINARY:WebSocketClient.OPCODE_TEXT,n?()=>{process.nextTick(n)}:void 0)}else n&&n(new Error("not opened"))}close(e,t){this.external&&(native.server.close(this.external,e,t),this.external=null)}}class WebSocketClient extends WebSocket{constructor(e){super(null),this.internalOnOpen=noop,this.internalOnError=noop,native.connect(clientGroup,e,this)}ping(e,t,n){this.external&&native.client.send(this.external,e,WebSocketClient.OPCODE_PING)}terminate(){this.external&&(native.client.terminate(this.external),this.external=null)}send(e,t,n){if(this.external){"function"==typeof t&&(n=t,t=null);const r=t&&t.binary||"string"!=typeof e;native.client.send(this.external,e,r?WebSocketClient.OPCODE_BINARY:WebSocketClient.OPCODE_TEXT,n?()=>{process.nextTick(n)}:void 0)}else n&&n(new Error("not opened"))}close(e,t){this.external&&(native.client.close(this.external,e,t),this.external=null)}}class Server extends EventEmitter{constructor(e,t){if(super(),!e)throw new TypeError("missing options");if(void 0===e.port&&!e.server&&!e.noServer)throw new TypeError("invalid options");var n=WebSocketClient.PERMESSAGE_DEFLATE;void 0!==e.perMessageDeflate&&!1===e.perMessageDeflate&&(n=0),this.serverGroup=native.server.group.create(n,void 0===e.maxPayload?16777216:e.maxPayload),this._upgradeCallback=noop,this._upgradeListener=null,this._noDelay=void 0===e.noDelay||e.noDelay,this._lastUpgradeListener=!0,this._passedHttpServer=e.server,e.noServer||(this.httpServer=e.server?e.server:http.createServer(((e,t)=>{t.end()})),!e.path||e.path.length&&"/"===e.path[0]||(e.path="/"+e.path),this.httpServer.on("upgrade",this._upgradeListener=(t,n,r)=>{if(e.path&&e.path!=t.url.split("?")[0].split("#")[0])this._lastUpgradeListener&&abortConnection(n,400,"URL not supported");else if(e.verifyClient){const o={origin:t.headers.origin,secure:void 0!==t.connection.authorized||void 0!==t.connection.encrypted,req:t};2===e.verifyClient.length?e.verifyClient(o,((e,o,i)=>{e?this.handleUpgrade(t,n,r,emitConnection):abortConnection(n,o,i)})):e.verifyClient(o)?this.handleUpgrade(t,n,r,emitConnection):abortConnection(n,400,"Client verification failed")}else this.handleUpgrade(t,n,r,emitConnection)}),this.httpServer.on("newListener",((e,t)=>{"upgrade"===e&&(this._lastUpgradeListener=!1)})),this.httpServer.on("error",(e=>{this.emit("error",e)}))),native.server.group.onDisconnection(this.serverGroup,((e,t,n,r)=>{r.external=null,process.nextTick((()=>{r.internalOnClose(t,n)})),native.clearUserData(e)})),native.server.group.onMessage(this.serverGroup,onServerMessage),native.server.group.onPing(this.serverGroup,((e,t)=>{t.onping(e)})),native.server.group.onPong(this.serverGroup,((e,t)=>{t.onpong(e)})),native.server.group.onConnection(this.serverGroup,(e=>{const t=new WebSocket(e);native.setUserData(e,t),this._upgradeCallback(t),_upgradeReq=null})),void 0!==e.port&&(e.host?this.httpServer.listen(e.port,e.host,(()=>{this.emit("listening"),t&&t()})):this.httpServer.listen(e.port,(()=>{this.emit("listening"),t&&t()})))}handleUpgrade(e,t,n,r){if(t._isNative)this.serverGroup&&(_upgradeReq=e,this._upgradeCallback=r||noop,native.upgrade(this.serverGroup,t.external,secKey,e.headers["sec-websocket-extensions"],e.headers["sec-websocket-protocol"]));else{const n=e.headers["sec-websocket-key"],o=t.ssl?t._parent._handle:t._handle,i=t.ssl?t.ssl._external:null;if(o&&n&&24==n.length){t.setNoDelay(this._noDelay);const s=native.transfer(-1===o.fd?o:o.fd,i);t.on("close",(t=>{this.serverGroup&&(_upgradeReq=e,this._upgradeCallback=r||noop,native.upgrade(this.serverGroup,s,n,e.headers["sec-websocket-extensions"],e.headers["sec-websocket-protocol"]))}))}t.destroy()}}broadcast(e,t){this.serverGroup&&native.server.group.broadcast(this.serverGroup,e,t&&t.binary||!1)}startAutoPing(e,t){this.serverGroup&&native.server.group.startAutoPing(this.serverGroup,e,t)}close(e){this._upgradeListener&&this.httpServer&&(this.httpServer.removeListener("upgrade",this._upgradeListener),this._passedHttpServer||this.httpServer.close()),this.serverGroup&&(native.server.group.close(this.serverGroup),this.serverGroup=null),"function"==typeof e&&setTimeout(e,2e4)}get clients(){if(this.serverGroup)return{length:native.server.group.getSize(this.serverGroup),forEach:e=>{native.server.group.forEach(this.serverGroup,e)}}}}WebSocketClient.PERMESSAGE_DEFLATE=1,WebSocketClient.SERVER_NO_CONTEXT_TAKEOVER=2,WebSocketClient.CLIENT_NO_CONTEXT_TAKEOVER=4,WebSocketClient.OPCODE_TEXT=1,WebSocketClient.OPCODE_BINARY=2,WebSocketClient.OPCODE_PING=9,WebSocketClient.OPEN=1,WebSocketClient.CLOSED=0,WebSocketClient.Server=Server,WebSocketClient.http=native.httpServer,WebSocketClient.native=native,module.exports=WebSocketClient;
//# sourceMappingURL=/sm/29e377fc20066d929a88f78de733bb542e0d137e4fb5f077fcde8d59b8e184b9.map