1const b={};function Ye(e){if(e.__esModule)return e;var t=e.default;if(typeof t=="function"){var s=function i(){if(this instanceof i){var r=[null];r.push.apply(r,arguments);var n=Function.bind.apply(t,r);return new n}return t.apply(this,arguments)};s.prototype=t.prototype}else s={};return Object.defineProperty(s,"__esModule",{value:!0}),Object.keys(e).forEach(function(i){var r=Object.getOwnPropertyDescriptor(e,i);Object.defineProperty(s,i,r.get?r:{enumerable:!0,get:function(){return e[i]}})}),s}const{Duplex:ut}=b;function ke(e){e.emit("close")}function _t(){!this.destroyed&&this._writableState.finished&&this.destroy()}function Xe(e){this.removeListener("error",Xe),this.destroy(),this.listenerCount("error")===0&&this.emit("error",e)}function pt(e,t){let s=!0;const i=new ut({...t,autoDestroy:!1,emitClose:!1,objectMode:!1,writableObjectMode:!1});return e.on("message",function(r,n){const o=!n&&i._readableState.objectMode?r.toString():r;i.push(o)||e.pause()}),e.once("error",function(r){i.destroyed||(s=!1,i.destroy(r))}),e.once("close",function(){i.destroyed||i.push(null)}),i._destroy=function(r,n){if(e.readyState===e.CLOSED){n(r),process.nextTick(ke,i);return}let o=!1;e.once("error",function(c){o=!0,n(c)}),e.once("close",function(){o||n(r),process.nextTick(ke,i)}),s&&e.terminate()},i._final=function(r){if(e.readyState===e.CONNECTING){e.once("open",function(){i._final(r)});return}e._socket!==null&&(e._socket._writableState.finished?(r(),i._readableState.endEmitted&&i.destroy()):(e._socket.once("finish",function(){r()}),e.close()))},i._read=function(){e.isPaused&&e.resume()},i._write=function(r,n,o){if(e.readyState===e.CONNECTING){e.once("open",function(){i._write(r,n,o)});return}e.send(r,o)},i.on("end",_t),i.on("error",Xe),i}var mt=pt;const Gs=mt;var N={},yt={get exports(){return N},set exports(e){N=e}},U={BINARY_TYPES:["nodebuffer","arraybuffer","fragments"],EMPTY_BUFFER:Buffer.alloc(0),GUID:"258EAFA5-E914-47DA-95CA-C5AB0DC85B11",kForOnEventAttribute:Symbol("kIsForOnEventAttribute"),kListener:Symbol("kListener"),kStatusCode:Symbol("status-code"),kWebSocket:Symbol("websocket"),NOOP:()=>{}};const gt={},bt=Object.freeze(Object.defineProperty({__proto__:null,default:gt},Symbol.toStringTag,{value:"Module"})),St=Ye(bt);var vt,kt;const{EMPTY_BUFFER:wt}=U,me=Buffer[Symbol.species];function Et(e,t){if(e.length===0)return wt;if(e.length===1)return e[0];const s=Buffer.allocUnsafe(t);let i=0;for(let r=0;r<e.length;r++){const n=e[r];s.set(n,i),i+=n.length}return i<t?new me(s.buffer,s.byteOffset,i):s}function Ke(e,t,s,i,r){for(let n=0;n<r;n++)s[i+n]=e[n]^t[n&3]}function Ze(e,t){for(let s=0;s<e.length;s++)e[s]^=t[s&3]}function xt(e){return e.length===e.buffer.byteLength?e.buffer:e.buffer.slice(e.byteOffset,e.byteOffset+e.length)}function ye(e){if(ye.readOnly=!0,Buffer.isBuffer(e))return e;let t;return e instanceof ArrayBuffer?t=new me(e):ArrayBuffer.isView(e)?t=new me(e.buffer,e.byteOffset,e.byteLength):(t=Buffer.from(e),ye.readOnly=!1),t}yt.exports={concat:Et,mask:Ke,toArrayBuffer:xt,toBuffer:ye,unmask:Ze};if(!{}.WS_NO_BUFFER_UTIL)try{const e=St;kt=N.mask=function(t,s,i,r,n){n<48?Ke(t,s,i,r,n):e.mask(t,s,i,r,n)},vt=N.unmask=function(t,s){t.length<32?Ze(t,s):e.unmask(t,s)}}catch{}const we=Symbol("kDone"),he=Symbol("kRun");let Ot=class{constructor(e){this[we]=()=>{this.pending--,this[he]()},this.concurrency=e||1/0,this.jobs=[],this.pending=0}add(e){this.jobs.push(e),this[he]()}[he](){if(this.pending!==this.concurrency&&this.jobs.length){const e=this.jobs.shift();this.pending++,e(this[we])}}};var Tt=Ot;const j=b,Ee=N,Ct=Tt,{kStatusCode:Je}=U,Nt=Buffer[Symbol.species],Lt=Buffer.from([0,0,255,255]),se=Symbol("permessage-deflate"),x=Symbol("total-length"),z=Symbol("callback"),T=Symbol("buffers"),ee=Symbol("error");let K,Pt=class{constructor(e,t,s){if(this._maxPayload=s|0,this._options=e||{},this._threshold=this._options.threshold!==void 0?this._options.threshold:1024,this._isServer=!!t,this._deflate=null,this._inflate=null,this.params=null,!K){const i=this._options.concurrencyLimit!==void 0?this._options.concurrencyLimit:10;K=new Ct(i)}}static get extensionName(){return"permessage-deflate"}offer(){const e={};return this._options.serverNoContextTakeover&&(e.server_no_context_takeover=!0),this._options.clientNoContextTakeover&&(e.client_no_context_takeover=!0),this._options.serverMaxWindowBits&&(e.server_max_window_bits=this._options.serverMaxWindowBits),this._options.clientMaxWindowBits?e.client_max_window_bits=this._options.clientMaxWindowBits:this._options.clientMaxWindowBits==null&&(e.client_max_window_bits=!0),e}accept(e){return e=this.normalizeParams(e),this.params=this._isServer?this.acceptAsServer(e):this.acceptAsClient(e),this.params}cleanup(){if(this._inflate&&(this._inflate.close(),this._inflate=null),this._deflate){const e=this._deflate[z];this._deflate.close(),this._deflate=null,e&&e(new Error("The deflate stream was closed while data was being processed"))}}acceptAsServer(e){const t=this._options,s=e.find(i=>!(t.serverNoContextTakeover===!1&&i.server_no_context_takeover||i.server_max_window_bits&&(t.serverMaxWindowBits===!1||typeof t.serverMaxWindowBits=="number"&&t.serverMaxWindowBits>i.server_max_window_bits)||typeof t.clientMaxWindowBits=="number"&&!i.client_max_window_bits));if(!s)throw new Error("None of the extension offers can be accepted");return t.serverNoContextTakeover&&(s.server_no_context_takeover=!0),t.clientNoContextTakeover&&(s.client_no_context_takeover=!0),typeof t.serverMaxWindowBits=="number"&&(s.server_max_window_bits=t.serverMaxWindowBits),typeof t.clientMaxWindowBits=="number"?s.client_max_window_bits=t.clientMaxWindowBits:(s.client_max_window_bits===!0||t.clientMaxWindowBits===!1)&&delete s.client_max_window_bits,s}acceptAsClient(e){const t=e[0];if(this._options.clientNoContextTakeover===!1&&t.client_no_context_takeover)throw new Error('Unexpected parameter "client_no_context_takeover"');if(!t.client_max_window_bits)typeof this._options.clientMaxWindowBits=="number"&&(t.client_max_window_bits=this._options.clientMaxWindowBits);else if(this._options.clientMaxWindowBits===!1||typeof this._options.clientMaxWindowBits=="number"&&t.client_max_window_bits>this._options.clientMaxWindowBits)throw new Error('Unexpected or invalid parameter "client_max_window_bits"');return t}normalizeParams(e){return e.forEach(t=>{Object.keys(t).forEach(s=>{let i=t[s];if(i.length>1)throw new Error(`Parameter "${s}" must have only a single value`);if(i=i[0],s==="client_max_window_bits"){if(i!==!0){const r=+i;if(!Number.isInteger(r)||r<8||r>15)throw new TypeError(`Invalid value for parameter "${s}": ${i}`);i=r}else if(!this._isServer)throw new TypeError(`Invalid value for parameter "${s}": ${i}`)}else if(s==="server_max_window_bits"){const r=+i;if(!Number.isInteger(r)||r<8||r>15)throw new TypeError(`Invalid value for parameter "${s}": ${i}`);i=r}else if(s==="client_no_context_takeover"||s==="server_no_context_takeover"){if(i!==!0)throw new TypeError(`Invalid value for parameter "${s}": ${i}`)}else throw new Error(`Unknown parameter "${s}"`);t[s]=i})}),e}decompress(e,t,s){K.add(i=>{this._decompress(e,t,(r,n)=>{i(),s(r,n)})})}compress(e,t,s){K.add(i=>{this._compress(e,t,(r,n)=>{i(),s(r,n)})})}_decompress(e,t,s){const i=this._isServer?"client":"server";if(!this._inflate){const r=`${i}_max_window_bits`,n=typeof this.params[r]!="number"?j.Z_DEFAULT_WINDOWBITS:this.params[r];this._inflate=j.createInflateRaw({...this._options.zlibInflateOptions,windowBits:n}),this._inflate[se]=this,this._inflate[x]=0,this._inflate[T]=[],this._inflate.on("error",Bt),this._inflate.on("data",Qe)}this._inflate[z]=s,this._inflate.write(e),t&&this._inflate.write(Lt),this._inflate.flush(()=>{const r=this._inflate[ee];if(r){this._inflate.close(),this._inflate=null,s(r);return}const n=Ee.concat(this._inflate[T],this._inflate[x]);this._inflate._readableState.endEmitted?(this._inflate.close(),this._inflate=null):(this._inflate[x]=0,this._inflate[T]=[],t&&this.params[`${i}_no_context_takeover`]&&this._inflate.reset()),s(null,n)})}
1_compress(e,t,s){const i=this._isServer?"server":"client";if(!this._deflate){const r=`${i}_max_window_bits`,n=typeof this.params[r]!="number"?j.Z_DEFAULT_WINDOWBITS:this.params[r];this._deflate=j.createDeflateRaw({...this._options.zlibDeflateOptions,windowBits:n}),this._deflate[x]=0,this._deflate[T]=[],this._deflate.on("data",Rt)}this._deflate[z]=s,this._deflate.write(e),this._deflate.flush(j.Z_SYNC_FLUSH,()=>{if(!this._deflate)return;let r=Ee.concat(this._deflate[T],this._deflate[x]);t&&(r=new Nt(r.buffer,r.byteOffset,r.length-4)),this._deflate[z]=null,this._deflate[x]=0,this._deflate[T]=[],t&&this.params[`${i}_no_context_takeover`]&&this._deflate.reset(),s(null,r)})}};var ie=Pt;function Rt(e){this[T].push(e),this[x]+=e.length}function Qe(e){if(this[x]+=e.length,this[se]._maxPayload<1||this[x]<=this[se]._maxPayload){this[T].push(e);return}this[ee]=new RangeError("Max payload size exceeded"),this[ee].code="WS_ERR_UNSUPPORTED_MESSAGE_LENGTH",this[ee][Je]=1009,this.removeListener("data",Qe),this.reset()}function Bt(e){this[se]._inflate=null,e[Je]=1007,this[z](e)}var L={},Ut={get exports(){return L},set exports(e){L=e}};const It={},Mt=Object.freeze(Object.defineProperty({__proto__:null,default:It},Symbol.toStringTag,{value:"Module"})),Wt=Ye(Mt);var xe;const{isUtf8:Oe}=b,Dt=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0];function At(e){return e>=1e3&&e<=1014&&e!==1004&&e!==1005&&e!==1006||e>=3e3&&e<=4999}function ge(e){const t=e.length;let s=0;for(;s<t;)if(!(e[s]&128))s++;else if((e[s]&224)===192){if(s+1===t||(e[s+1]&192)!==128||(e[s]&254)===192)return!1;s+=2}else if((e[s]&240)===224){if(s+2>=t||(e[s+1]&192)!==128||(e[s+2]&192)!==128||e[s]===224&&(e[s+1]&224)===128||e[s]===237&&(e[s+1]&224)===160)return!1;s+=3}else if((e[s]&248)===240){if(s+3>=t||(e[s+1]&192)!==128||(e[s+2]&192)!==128||(e[s+3]&192)!==128||e[s]===240&&(e[s+1]&240)===128||e[s]===244&&e[s+1]>143||e[s]>244)return!1;s+=4}else return!1;return!0}Ut.exports={isValidStatusCode:At,isValidUTF8:ge,tokenChars:Dt};if(Oe)xe=L.isValidUTF8=function(e){return e.length<24?ge(e):Oe(e)};else if(!{}.WS_NO_UTF_8_VALIDATE)try{const e=Wt;xe=L.isValidUTF8=function(t){return t.length<32?ge(t):e(t)}}catch{}const{Writable:Ft}=b,Te=ie,{BINARY_TYPES:jt,EMPTY_BUFFER:Ce,kStatusCode:$t,kWebSocket:Gt}=U,{concat:ce,toArrayBuffer:Vt,unmask:qt}=N,{isValidStatusCode:zt,isValidUTF8:Ne}=L,Z=Buffer[Symbol.species],$=0,Le=1,Pe=2,Re=3,le=4,Ht=5;let Yt=class extends Ft{constructor(e={}){super(),this._binaryType=e.binaryType||jt[0],this._extensions=e.extensions||{},this._isServer=!!e.isServer,this._maxPayload=e.maxPayload|0,this._skipUTF8Validation=!!e.skipUTF8Validation,this[Gt]=void 0,this._bufferedBytes=0,this._buffers=[],this._compressed=!1,this._payloadLength=0,this._mask=void 0,this._fragmented=0,this._masked=!1,this._fin=!1,this._opcode=0,this._totalPayloadLength=0,this._messageLength=0,this._fragments=[],this._state=$,this._loop=!1}_write(e,t,s){if(this._opcode===8&&this._state==$)return s();this._bufferedBytes+=e.length,this._buffers.push(e),this.startLoop(s)}consume(e){if(this._bufferedBytes-=e,e===this._buffers[0].length)return this._buffers.shift();if(e<this._buffers[0].length){const s=this._buffers[0];return this._buffers[0]=new Z(s.buffer,s.byteOffset+e,s.length-e),new Z(s.buffer,s.byteOffset,e)}const t=Buffer.allocUnsafe(e);do{const s=this._buffers[0],i=t.length-e;e>=s.length?t.set(this._buffers.shift(),i):(t.set(new Uint8Array(s.buffer,s.byteOffset,e),i),this._buffers[0]=new Z(s.buffer,s.byteOffset+e,s.length-e)),e-=s.length}while(e>0);return t}startLoop(e){let t;this._loop=!0;do switch(this._state){case $:t=this.getInfo();break;case Le:t=this.getPayloadLength16();break;case Pe:t=this.getPayloadLength64();break;case Re:this.getMask();break;case le:t=this.getData(e);break;default:this._loop=!1;return}while(this._loop);e(t)}getInfo(){if(this._bufferedBytes<2){this._loop=!1;return}const e=this.consume(2);if(e[0]&48)return this._loop=!1,m(RangeError,"RSV2 and RSV3 must be clear",!0,1002,"WS_ER
1R_UNEXPECTED_RSV_2_3");const t=(e[0]&64)===64;if(t&&!this._extensions[Te.extensionName])return this._loop=!1,m(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");if(this._fin=(e[0]&128)===128,this._opcode=e[0]&15,this._payloadLength=e[1]&127,this._opcode===0){if(t)return this._loop=!1,m(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");if(!this._fragmented)return this._loop=!1,m(RangeError,"invalid opcode 0",!0,1002,"WS_ERR_INVALID_OPCODE");this._opcode=this._fragmented}else if(this._opcode===1||this._opcode===2){if(this._fragmented)return this._loop=!1,m(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");this._compressed=t}else if(this._opcode>7&&this._opcode<11){if(!this._fin)return this._loop=!1,m(RangeError,"FIN must be set",!0,1002,"WS_ERR_EXPECTED_FIN");if(t)return this._loop=!1,m(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");if(this._payloadLength>125||this._opcode===8&&this._payloadLength===1)return this._loop=!1,m(RangeError,`invalid payload length ${this._payloadLength}`,!0,1002,"WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH")}else return this._loop=!1,m(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");if(!this._fin&&!this._fragmented&&(this._fragmented=this._opcode),this._masked=(e[1]&128)===128,this._isServer){if(!this._masked)return this._loop=!1,m(RangeError,"MASK must be set",!0,1002,"WS_ERR_EXPECTED_MASK")}else if(this._masked)return this._loop=!1,m(RangeError,"MASK must be clear",!0,1002,"WS_ERR_UNEXPECTED_MASK");if(this._payloadLength===126)this._state=Le;else if(this._payloadLength===127)this._state=Pe;else return this.haveLength()}getPayloadLength16(){if(this._bufferedBytes<2){this._loop=!1;return}return this._payloadLength=this.consume(2).readUInt16BE(0),this.haveLength()}getPayloadLength64(){if(this._bufferedBytes<8){this._loop=!1;return}const e=this.consume(8),t=e.readUInt32BE(0);return t>Math.pow(2,53-32)-1?(this._loop=!1,m(RangeError,"Unsupported WebSocket frame: payload length > 2^53 - 1",!1,1009,"WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH")):(this._payloadLength=t*Math.pow(2,32)+e.readUInt32BE(4),this.haveLength())}haveLength(){if(this._payloadLength&&this._opcode<8&&(this._totalPayloadLength+=this._payloadLength,this._totalPayloadLength>this._maxPayload&&this._maxPayload>0))return this._loop=!1,m(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");this._masked?this._state=Re:this._state=le}getMask(){if(this._bufferedBytes<4){this._loop=!1;return}this._mask=this.consume(4),this._state=le}getData(e){let t=Ce;if(this._payloadLength){if(this._bufferedBytes<this._payloadLength){this._loop=!1;return}t=this.consume(this._payloadLength),this._masked&&this._mask[0]|this._mask[1]|this._mask[2]|this._mask[3]&&qt(t,this._mask)}if(this._opcode>7)return this.controlMessage(t);if(this._compressed){this._state=Ht,this.decompress(t,e);return}return t.length&&(this._messageLength=this._totalPayloadLength,this._fragments.push(t)),this.dataMessage()}decompress(e,t){this._extensions[Te.extensionName].decompress(e,this._fin,(s,i)=>{if(s)return t(s);if(i.length){if(this._messageLength+=i.length,this._messageLength>this._maxPayload&&this._maxPayload>0)return t(m(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH"));this._fragments.push(i)}const r=this.dataMessage();if(r)return t(r);this.startLoop(t)})}dataMessage(){if(this._fin){const e=this._messageLength,t=this._fragments;if(this._totalPayloadLength=0,this._messageLength=0,this._fragmented=0,this._fragments=[],this._opcode===2){let s;this._binaryType==="nodebuffer"?s=ce(t,e):this._binaryType==="arraybuffer"?s=Vt(ce(t,e)):s=t,this.emit("message",s,!0)}else{const s=ce(t,e);if(!this._skipUTF8Validation&&!Ne(s))return this._loop=!1,m(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");this.emit("message",s,!1)}}this._state=$}controlMessage(e){if(this._opcode===8)if(this._loop=!1,e.length===0)this.emit("conclude",1005,Ce),this.end();else{const t=e.readUInt16BE(0);if(!zt(t))return m(RangeError,`invalid status code ${t}
1`,!0,1002,"WS_ERR_INVALID_CLOSE_CODE");const s=new Z(e.buffer,e.byteOffset+2,e.length-2);if(!this._skipUTF8Validation&&!Ne(s))return m(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");this.emit("conclude",t,s),this.end()}else this._opcode===9?this.emit("ping",e):this.emit("pong",e);this._state=$}};var et=Yt;function m(e,t,s,i,r){const n=new e(s?`Invalid WebSocket frame: ${t}`:t);return Error.captureStackTrace(n,m),n.code=r,n[$t]=i,n}const Vs=et,{randomFillSync:Xt}=b,Be=ie,{EMPTY_BUFFER:Kt}=U,{isValidStatusCode:Zt}=L,{mask:Ue,toBuffer:D}=N,w=Symbol("kByteLength"),Jt=Buffer.alloc(4);let Qt=class R{constructor(t,s,i){this._extensions=s||{},i&&(this._generateMask=i,this._maskBuffer=Buffer.alloc(4)),this._socket=t,this._firstFragment=!0,this._compress=!1,this._bufferedBytes=0,this._deflating=!1,this._queue=[]}static frame(t,s){let i,r=!1,n=2,o=!1;s.mask&&(i=s.maskBuffer||Jt,s.generateMask?s.generateMask(i):Xt(i,0,4),o=(i[0]|i[1]|i[2]|i[3])===0,n=6);let c;typeof t=="string"?(!s.mask||o)&&s[w]!==void 0?c=s[w]:(t=Buffer.from(t),c=t.length):(c=t.length,r=s.mask&&s.readOnly&&!o);let h=c;c>=65536?(n+=8,h=127):c>125&&(n+=2,h=126);const a=Buffer.allocUnsafe(r?c+n:n);return a[0]=s.fin?s.opcode|128:s.opcode,s.rsv1&&(a[0]|=64),a[1]=h,h===126?a.writeUInt16BE(c,2):h===127&&(a[2]=a[3]=0,a.writeUIntBE(c,4,6)),s.mask?(a[1]|=128,a[n-4]=i[0],a[n-3]=i[1],a[n-2]=i[2],a[n-1]=i[3],o?[a,t]:r?(Ue(t,i,a,n,c),[a]):(Ue(t,i,t,0,c),[a,t])):[a,t]}close(t,s,i,r){let n;if(t===void 0)n=Kt;else{if(typeof t!="number"||!Zt(t))throw new TypeError("First argument must be a valid error code number");if(s===void 0||!s.length)n=Buffer.allocUnsafe(2),n.writeUInt16BE(t,0);else{const c=Buffer.byteLength(s);if(c>123)throw new RangeError("The message must not be greater than 123 bytes");n=Buffer.allocUnsafe(2+c),n.writeUInt16BE(t,0),typeof s=="string"?n.write(s,2):n.set(s,2)}}const o={[w]:n.length,fin:!0,generateMask:this._generateMask,mask:i,maskBuffer:this._maskBuffer,opcode:8,readOnly:!1,rsv1:!1};this._deflating?this.enqueue([this.dispatch,n,!1,o,r]):this.sendFrame(R.frame(n,o),r)}ping(t,s,i){let r,n;if(typeof t=="string"?(r=Buffer.byteLength(t),n=!1):(t=D(t),r=t.length,n=D.readOnly),r>125)throw new RangeError("The data size must not be greater than 125 bytes");const o={[w]:r,fin:!0,generateMask:this._generateMask,mask:s,maskBuffer:this._maskBuffer,opcode:9,readOnly:n,rsv1:!1};this._deflating?this.enqueue([this.dispatch,t,!1,o,i]):this.sendFrame(R.frame(t,o),i)}pong(t,s,i){let r,n;if(typeof t=="string"?(r=Buffer.byteLength(t),n=!1):(t=D(t),r=t.length,n=D.readOnly),r>125)throw new RangeError("The data size must not be greater than 125 bytes");const o={[w]:r,fin:!0,generateMask:this._generateMask,mask:s,maskBuffer:this._maskBuffer,opcode:10,readOnly:n,rsv1:!1};this._deflating?this.enqueue([this.dispatch,t,!1,o,i]):this.sendFrame(R.frame(t,o),i)}send(t,s,i){const r=this._extensions[Be.extensionName];let n=s.binary?2:1,o=s.compress,c,h;if(typeof t=="string"?(c=Buffer.byteLength(t),h=!1):(t=D(t),c=t.length,h=D.readOnly),this._firstFragment?(this._firstFragment=!1,o&&r&&r.params[r._isServer?"server_no_context_takeover":"client_no_context_takeover"]&&(o=c>=r._threshold),this._compress=o):(o=!1,n=0),s.fin&&(this._firstFragment=!0),r){const a={[w]:c,fin:s.fin,generateMask:this._generateMask,mask:s.mask,maskBuffer:this._maskBuffer,opcode:n,readOnly:h,rsv1:o};this._deflating?this.enqueue([this.dispatch,t,this._compress,a,i]):this.dispatch(t,this._compress,a,i)}else this.sendFrame(R.frame(t,{[w]:c,fin:s.fin,generateMask:this._generateMask,mask:s.mask,maskBuffer:this._maskBuffer,opcode:n,readOnly:h,rsv1:!1}),i)}dispatch(t,s,i,r){if(!s){this.sendFrame(R.frame(t,i),r);return}const n=this._extensions[Be.extensionName];this._bufferedBytes+=i[w],this._deflating=!0,n.compress(t,i.fin,(o,c)=>{if(this._socket.destroyed){const h=new Error("The socket was closed while data was being compressed");typeof r=="function"&&r(h);for(let a=0;a<this._queue.length;a++){const l=this._queue[a],d=l[l.length-1];typeof d=="function"&&d(h)}return}this._bufferedBytes-=i[w],this._deflating=!1,i.readOnly=!1,this.sendFrame(R.frame(c,i),r),this.dequeue()})}dequeue(){for(;!this._deflating&&this._queue.length;){const t=this._queue.shift();this._bufferedBytes-=t[3][w],Reflect.apply(t[0],this,t.slice(1))}}enqueue(t){this._bufferedBytes+=t[3][w],this._queue.push(t)}sendFrame(t,s){t.length===2?(this._socket.cork(),this._socket.write(t[0]),this._socket.write(t[1],s),this._socket.uncork()):this._socket.write(t[0],s)}};var tt=Qt;const qs=tt,{kForOnEventAttribute:G,kListener:de}=U,Ie=Symbol("kCode"),Me=Symbol("kData"),We=Symbol("kError"),De=Symbol("kMessage"),Ae=Symbol("kReason"),A=Symbol("kTarget"),Fe=Symbol("kType"),je=Symbol("kWasClean");class I{constructor(t){this[A]=null,this[Fe]=t}get target(){return this[A]}get type(){return this[Fe]}}Object.defineProperty(I.prototype,"target",{enumerable:!0});Object.defineProperty(I.prototype,"type",{enumerable:!0});class Y extends I{constructor(t,s={}){super(t),this[Ie]=s.code===void 0?0:s.code,this[Ae]=s.reason===void 0?"":s.reason,this[je]=s.wasClean===void 0?!1:s.wasClean}get code(){return this[Ie]}get reason(){return this[Ae]}get wasClean(){return this[je]}}Object.defineProperty(Y.prototype,"code",{enumerable:!0});Object.defineProperty(Y.prototype,"reason",{enumerable:!0});Object.defineProperty(Y.prototype,"wasClean",{enumerable:!0});
1class ne extends I{constructor(t,s={}){super(t),this[We]=s.error===void 0?null:s.error,this[De]=s.message===void 0?"":s.message}get error(){return this[We]}get message(){return this[De]}}Object.defineProperty(ne.prototype,"error",{enumerable:!0});Object.defineProperty(ne.prototype,"message",{enumerable:!0});class be extends I{constructor(t,s={}){super(t),this[Me]=s.data===void 0?null:s.data}get data(){return this[Me]}}Object.defineProperty(be.prototype,"data",{enumerable:!0});const es={addEventListener(e,t,s={}){for(const r of this.listeners(e))if(!s[G]&&r[de]===t&&!r[G])return;let i;if(e==="message")i=function(r,n){const o=new be("message",{data:n?r:r.toString()});o[A]=this,J(t,this,o)};else if(e==="close")i=function(r,n){const o=new Y("close",{code:r,reason:n.toString(),wasClean:this._closeFrameReceived&&this._closeFrameSent});o[A]=this,J(t,this,o)};else if(e==="error")i=function(r){const n=new ne("error",{error:r,message:r.message});n[A]=this,J(t,this,n)};else if(e==="open")i=function(){const r=new I("open");r[A]=this,J(t,this,r)};else return;i[G]=!!s[G],i[de]=t,s.once?this.once(e,i):this.on(e,i)},removeEventListener(e,t){for(const s of this.listeners(e))if(s[de]===t&&!s[G]){this.removeListener(e,s);break}}};var ts={CloseEvent:Y,ErrorEvent:ne,Event:I,EventTarget:es,MessageEvent:be};function J(e,t,s){typeof e=="object"&&e.handleEvent?e.handleEvent.call(e,s):e.call(t,s)}const{tokenChars:V}=L;function E(e,t,s){e[t]===void 0?e[t]=[s]:e[t].push(s)}function ss(e){const t=Object.create(null);let s=Object.create(null),i=!1,r=!1,n=!1,o,c,h=-1,a=-1,l=-1,d=0;for(;d<e.length;d++)if(a=e.charCodeAt(d),o===void 0)if(l===-1&&V[a]===1)h===-1&&(h=d);else if(d!==0&&(a===32||a===9))l===-1&&h!==-1&&(l=d);else if(a===59||a===44){if(h===-1)throw new SyntaxError(`Unexpected character at index ${d}`);l===-1&&(l=d);const S=e.slice(h,l);a===44?(E(t,S,s),s=Object.create(null)):o=S,h=l=-1}else throw new SyntaxError(`Unexpected character at index ${d}`);else if(c===void 0)if(l===-1&&V[a]===1)h===-1&&(h=d);else if(a===32||a===9)l===-1&&h!==-1&&(l=d);else if(a===59||a===44){if(h===-1)throw new SyntaxError(`Unexpected character at index ${d}`);l===-1&&(l=d),E(s,e.slice(h,l),!0),a===44&&(E(t,o,s),s=Object.create(null),o=void 0),h=l=-1}else if(a===61&&h!==-1&&l===-1)c=e.slice(h,d),h=l=-1;else throw new SyntaxError(`Unexpected character at index ${d}`);else if(r){if(V[a]!==1)throw new SyntaxError(`Unexpected character at index ${d}`);h===-1?h=d:i||(i=!0),r=!1}else if(n)if(V[a]===1)h===-1&&(h=d);else if(a===34&&h!==-1)n=!1,l=d;else if(a===92)r=!0;else throw new SyntaxError(`Unexpected character at index ${d}`);else if(a===34&&e.charCodeAt(d-1)===61)n=!0;else if(l===-1&&V[a]===1)h===-1&&(h=d);else if(h!==-1&&(a===32||a===9))l===-1&&(l=d);else if(a===59||a===44){if(h===-1)throw new SyntaxError(`Unexpected character at index ${d}`);l===-1&&(l=d);let S=e.slice(h,l);i&&(S=S.replace(/\\/g,""),i=!1),E(s,c,S),a===44&&(E(t,o,s),s=Object.create(null),o=void 0),c=void 0,h=l=-1}else throw new SyntaxError(`Unexpected character at index ${d}`);if(h===-1||n||a===32||a===9)throw new SyntaxError("Unexpected end of input");l===-1&&(l=d);const g=e.slice(h,l);return o===void 0?E(t,g,s):(c===void 0?E(s,g,!0):i?E(s,c,g.replace(/\\/g,"")):E(s,c,g),E(t,o,s)),t}function rs(e){return Object.keys(e).map(t=>{let s=e[t];return Array.isArray(s)||(s=[s]),s.map(i=>[t].concat(Object.keys(i).map(r=>{let n=i[r];return Array.isArray(n)||(n=[n]),n.map(o=>o===!0?r:`${r}=${o}`).join("; ")})).join("; ")).join(", ")}).join(", ")}var st={format:rs,parse:ss};const is=b,ns=b,os=b,rt=b,as=b,{randomBytes:hs,createHash:cs}=b,{URL:fe}=b,C=ie,ls=et,ds=tt,{BINARY_TYPES:$e,EMPTY_BUFFER:Q,GUID:fs,kForOnEventAttribute:ue,kListener:us,kStatusCode:_s,kWebSocket:y,NOOP:it}=U,{EventTarget:{addEventListener:ps,removeEventListener:ms}}=ts,{format:ys,parse:gs}=st,{toBuffer:bs}=N,Ss=30*1e3,nt=Symbol("kAborted"),_e=[8,13],O=["CONNECTING","OPEN","CLOSING","CLOSED"],vs=/^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/;let p=class u extends is{constructor(t,s,i){super(),this._binaryType=$e[0],this._closeCode=1006,this._closeFrameReceived=!1,this._closeFrameSent=!1,this._closeMessage=Q,this._closeTimer=null,this._extensions={},this._paused=!1,this._protocol="",this._readyState=u.CONNECTING,this._receiver=null,this._sender=null,this._socket=null,t!==null?(this._bufferedAmount=0,this._isServer=!1,this._redirects=0,s===void 0?s=[]:Array.isArray(s)||(typeof s=="object"&&s!==null?(i=s,s=[]):s=[s]),at(this,t,s,i)
1):this._isServer=!0}get binaryType(){return this._binaryType}set binaryType(t){$e.includes(t)&&(this._binaryType=t,this._receiver&&(this._receiver._binaryType=t))}get bufferedAmount(){return this._socket?this._socket._writableState.length+this._sender._bufferedBytes:this._bufferedAmount}get extensions(){return Object.keys(this._extensions).join()}get isPaused(){return this._paused}get onclose(){return null}get onerror(){return null}get onopen(){return null}get onmessage(){return null}get protocol(){return this._protocol}get readyState(){return this._readyState}get url(){return this._url}setSocket(t,s,i){const r=new ls({binaryType:this.binaryType,extensions:this._extensions,isServer:this._isServer,maxPayload:i.maxPayload,skipUTF8Validation:i.skipUTF8Validation});this._sender=new ds(t,this._extensions,i.generateMask),this._receiver=r,this._socket=t,r[y]=this,t[y]=this,r.on("conclude",Es),r.on("drain",xs),r.on("error",Os),r.on("message",Ts),r.on("ping",Cs),r.on("pong",Ns),t.setTimeout(0),t.setNoDelay(),s.length>0&&t.unshift(s),t.on("close",ct),t.on("data",oe),t.on("end",lt),t.on("error",dt),this._readyState=u.OPEN,this.emit("open")}emitClose(){if(!this._socket){this._readyState=u.CLOSED,this.emit("close",this._closeCode,this._closeMessage);return}this._extensions[C.extensionName]&&this._extensions[C.extensionName].cleanup(),this._receiver.removeAllListeners(),this._readyState=u.CLOSED,this.emit("close",this._closeCode,this._closeMessage)}close(t,s){if(this.readyState!==u.CLOSED){if(this.readyState===u.CONNECTING){const i="WebSocket was closed before the connection was established";k(this,this._req,i);return}if(this.readyState===u.CLOSING){this._closeFrameSent&&(this._closeFrameReceived||this._receiver._writableState.errorEmitted)&&this._socket.end();return}this._readyState=u.CLOSING,this._sender.close(t,s,!this._isServer,i=>{i||(this._closeFrameSent=!0,(this._closeFrameReceived||this._receiver._writableState.errorEmitted)&&this._socket.end())}),this._closeTimer=setTimeout(this._socket.destroy.bind(this._socket),Ss)}}pause(){this.readyState===u.CONNECTING||this.readyState===u.CLOSED||(this._paused=!0,this._socket.pause())}ping(t,s,i){if(this.readyState===u.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof t=="function"?(i=t,t=s=void 0):typeof s=="function"&&(i=s,s=void 0),typeof t=="number"&&(t=t.toString()),this.readyState!==u.OPEN){pe(this,t,i);return}s===void 0&&(s=!this._isServer),this._sender.ping(t||Q,s,i)}pong(t,s,i){if(this.readyState===u.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof t=="function"?(i=t,t=s=void 0):typeof s=="function"&&(i=s,s=void 0),typeof t=="number"&&(t=t.toString()),this.readyState!==u.OPEN){pe(this,t,i);return}s===void 0&&(s=!this._isServer),this._sender.pong(t||Q,s,i)}resume(){this.readyState===u.CONNECTING||this.readyState===u.CLOSED||(this._paused=!1,this._receiver._writableState.needDrain||this._socket.resume())}send(t,s,i){if(this.readyState===u.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof s=="function"&&(i=s,s={}),typeof t=="number"&&(t=t.toString()),this.readyState!==u.OPEN){pe(this,t,i);return}const r={binary:typeof t!="string",mask:!this._isServer,compress:!0,fin:!0,...s};this._extensions[C.extensionName]||(r.compress=!1),this._sender.send(t||Q,r,i)}terminate(){if(this.readyState!==u.CLOSED){if(this.readyState===u.CONNECTING){const t="WebSocket was closed before the connection was established";k(this,this._req,t);return}this._socket&&(this._readyState=u.CLOSING,this._socket.destroy())}}};Object.defineProperty(p,"CONNECTING",{enumerable:!0,value:O.indexOf("CONNECTING")});Object.defineProperty(p.prototype,"CONNECTING",{enumerable:!0,value:O.indexOf("CONNECTING")});Object.defineProperty(p,"OPEN",{enumerable:!0,value:O.indexOf("OPEN")});Object.defineProperty(p.prototype,"OPEN",{enumerable:!0,value:O.indexOf("OPEN")});Object.defineProperty(p,"CLOSING",{enumerable:!0,value:O.indexOf("CLOSING")});Object.defineProperty(p.prototype,"CLOSING",{enumerable:!0,value:O.indexOf("CLOSING")});Object.defineProperty(p,"CLOSED",{enumerable:!0,value:O.indexOf("CLOSED")});Object.defineProperty(p.prototype,"CLOSED",{enumerable:!0,value:O.indexOf("CLOSED")});["binaryType","bufferedAmount","extensions","isPaused","protocol","readyState","url"].forEach(e
1=>{Object.defineProperty(p.prototype,e,{enumerable:!0})});["open","error","close","message"].forEach(e=>{Object.defineProperty(p.prototype,`on${e}`,{enumerable:!0,get(){for(const t of this.listeners(e))if(t[ue])return t[us];return null},set(t){for(const s of this.listeners(e))if(s[ue]){this.removeListener(e,s);break}typeof t=="function"&&this.addEventListener(e,t,{[ue]:!0})}})});p.prototype.addEventListener=ps;p.prototype.removeEventListener=ms;var ot=p;function at(e,t,s,i){const r={protocolVersion:_e[1],maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!0,followRedirects:!1,maxRedirects:10,...i,createConnection:void 0,socketPath:void 0,hostname:void 0,protocol:void 0,timeout:void 0,method:"GET",host:void 0,path:void 0,port:void 0};if(!_e.includes(r.protocolVersion))throw new RangeError(`Unsupported protocol version: ${r.protocolVersion} (supported versions: ${_e.join(", ")})`);let n;if(t instanceof fe)n=t,e._url=t.href;else{try{n=new fe(t)}catch{throw new SyntaxError(`Invalid URL: ${t}`)}e._url=t}const o=n.protocol==="wss:",c=n.protocol==="ws+unix:";let h;if(n.protocol!=="ws:"&&!o&&!c?h=`The URL's protocol must be one of "ws:", "wss:", or "ws+unix:"`:c&&!n.pathname?h="The URL's pathname is empty":n.hash&&(h="The URL contains a fragment identifier"),h){const f=new SyntaxError(h);if(e._redirects===0)throw f;te(e,f);return}const a=o?443:80,l=hs(16).toString("base64"),d=o?ns.request:os.request,g=new Set;let S;if(r.createConnection=o?ws:ks,r.defaultPort=r.defaultPort||a,r.port=n.port||a,r.host=n.hostname.startsWith("[")?n.hostname.slice(1,-1):n.hostname,r.headers={...r.headers,"Sec-WebSocket-Version":r.protocolVersion,"Sec-WebSocket-Key":l,Connection:"Upgrade",Upgrade:"websocket"},r.path=n.pathname+n.search,r.timeout=r.handshakeTimeout,r.perMessageDeflate&&(S=new C(r.perMessageDeflate!==!0?r.perMessageDeflate:{},!1,r.maxPayload),r.headers["Sec-WebSocket-Extensions"]=ys({[C.extensionName]:S.offer()})),s.length){for(const f of s){if(typeof f!="string"||!vs.test(f)||g.has(f))throw new SyntaxError("An invalid or duplicated subprotocol was specified");g.add(f)}r.headers["Sec-WebSocket-Protocol"]=s.join(",")}if(r.origin&&(r.protocolVersion<13?r.headers["Sec-WebSocket-Origin"]=r.origin:r.headers.Origin=r.origin),(n.username||n.password)&&(r.auth=`${n.username}:${n.password}`),c){const f=r.path.split(":");r.socketPath=f[0],r.path=f[1]}let _;if(r.followRedirects){if(e._redirects===0){e._originalIpc=c,e._originalSecure=o,e._originalHostOrSocketPath=c?r.socketPath:n.host;const f=i&&i.headers;if(i={...i,headers:{}},f)for(const[v,M]of Object.entries(f))i.headers[v.toLowerCase()]=M}else if(e.listenerCount("redirect")===0){const f=c?e._originalIpc?r.socketPath===e._originalHostOrSocketPath:!1:e._originalIpc?!1:n.host===e._originalHostOrSocketPath;(!f||e._originalSecure&&!o)&&(delete r.headers.authorization,delete r.headers.cookie,f||delete r.headers.host,r.auth=void 0)}r.auth&&!i.headers.authorization&&(i.headers.authorization="Basic "+Buffer.from(r.auth).toString("base64")),_=e._req=d(r),e._redirects&&e.emit("redirect",e.url,_)}else _=e._req=d(r);r.timeout&&_.on("timeout",()=>{k(e,_,"Opening handshake has timed out")}),_.on("error",f=>{_===null||_[nt]||(_=e._req=null,te(e,f))}),_.on("response",f=>{const v=f.headers.location,M=f.statusCode;if(v&&r.followRedirects&&M>=300&&M<400){if(++e._redirects>r.maxRedirects){k(e,_,"Maximum redirects exceeded");return}_.abort();let X;try{X=new fe(v,t)}catch{const W=new SyntaxError(`Invalid URL: ${v}`);te(e,W);return}at(e,X,s,i)}else e.emit("unexpected-response",_,f)||k(e,_,`Unexpected server response: ${f.statusCode}`)}),_.on("upgrade",(f,v,M)=>{if(e.emit("upgrade",f),e.readyState!==p.CONNECTING)return;if(_=e._req=null,f.headers.upgrade.toLowerCase()!=="websocket"){k(e,v,"Invalid Upgrade header");return}const X=cs("sha1").update(l+fs).digest("base64");if(f.headers["sec-websocket-accept"]!==X){k(e,v,"Invalid Sec-WebSocket-Accept header");return}const W=f.headers["sec-websocket-protocol"];let F;if(W!==void 0?g.size?g.has(W)||(F="Server sent an invalid subprotocol"):F="Server sent a subprotocol but none was requested":g.size&&(F="Server sent no subprotocol"),F){k(e,v,F);return}W&&(e._protocol=W);const Se=f.headers["sec-websocket-extensions"];if(Se!==void 0){if(!S){k(e,v,"Server sent a Sec-WebSocket-Extensions header but no extension was requested");return}let ae;try{ae=gs(Se)}catch{k(e,v,"Invalid Sec-WebSocket-Extensions header");return}const ve=Object.keys(ae);if(ve.length!==1||ve[0]!==C.extensionName){k(e,v,"Server indicated an extension that was not requested");return}try{S.accept(ae[C.extensionName])}catch{k(e,v,"Invalid Sec-WebSocket-Extensions header");return}e._extensions[C.extensionName]=S}e.setSocket(v,M,{generateMask:r.generateMask,maxPayload:r.maxPayload,skipUTF8Validation:r.skipUTF8Validation})}),r.finishRequest?r.finishRequest(_,e):_.end()}
1function te(e,t){e._readyState=p.CLOSING,e.emit("error",t),e.emitClose()}function ks(e){return e.path=e.socketPath,rt.connect(e)}function ws(e){return e.path=void 0,!e.servername&&e.servername!==""&&(e.servername=rt.isIP(e.host)?"":e.host),as.connect(e)}function k(e,t,s){e._readyState=p.CLOSING;const i=new Error(s);Error.captureStackTrace(i,k),t.setHeader?(t[nt]=!0,t.abort(),t.socket&&!t.socket.destroyed&&t.socket.destroy(),process.nextTick(te,e,i)):(t.destroy(i),t.once("error",e.emit.bind(e,"error")),t.once("close",e.emitClose.bind(e)))}function pe(e,t,s){if(t){const i=bs(t).length;e._socket?e._sender._bufferedBytes+=i:e._bufferedAmount+=i}if(s){const i=new Error(`WebSocket is not open: readyState ${e.readyState} (${O[e.readyState]})`);process.nextTick(s,i)}}function Es(e,t){const s=this[y];s._closeFrameReceived=!0,s._closeMessage=t,s._closeCode=e,s._socket[y]!==void 0&&(s._socket.removeListener("data",oe),process.nextTick(ht,s._socket),e===1005?s.close():s.close(e,t))}function xs(){const e=this[y];e.isPaused||e._socket.resume()}function Os(e){const t=this[y];t._socket[y]!==void 0&&(t._socket.removeListener("data",oe),process.nextTick(ht,t._socket),t.close(e[_s])),t.emit("error",e)}function Ge(){this[y].emitClose()}function Ts(e,t){this[y].emit("message",e,t)}function Cs(e){const t=this[y];t.pong(e,!t._isServer,it),t.emit("ping",e)}function Ns(e){this[y].emit("pong",e)}function ht(e){e.resume()}function ct(){const e=this[y];this.removeListener("close",ct),this.removeListener("data",oe),this.removeListener("end",lt),e._readyState=p.CLOSING;let t;!this._readableState.endEmitted&&!e._closeFrameReceived&&!e._receiver._writableState.errorEmitted&&(t=e._socket.read())!==null&&e._receiver.write(t),e._receiver.end(),this[y]=void 0,clearTimeout(e._closeTimer),e._receiver._writableState.finished||e._receiver._writableState.errorEmitted?e.emitClose():(e._receiver.on("error",Ge),e._receiver.on("finish",Ge))}function oe(e){this[y]._receiver.write(e)||this.pause()}function lt(){const e=this[y];e._readyState=p.CLOSING,e._receiver.end(),this.end()}function dt(){const e=this[y];this.removeListener("error",dt),this.on("error",it),e&&(e._readyState=p.CLOSING,this.destroy())}const zs=ot,{tokenChars:Ls}=L;function Ps(e){const t=new Set;let s=-1,i=-1,r=0;for(r;r<e.length;r++){const o=e.charCodeAt(r);if(i===-1&&Ls[o]===1)s===-1&&(s=r);else if(r!==0&&(o===32||o===9))i===-1&&s!==-1&&(i=r);else if(o===44){if(s===-1)throw new SyntaxError(`Unexpected character at index ${r}`);i===-1&&(i=r);const c=e.slice(s,i);if(t.has(c))throw new SyntaxError(`The "${c}" subprotocol is duplicated`);t.add(c),s=i=-1}else throw new SyntaxError(`Unexpected character at index ${r}`)}if(s===-1||i!==-1)throw new SyntaxError("Unexpected end of input");const n=e.slice(s,r);if(t.has(n))throw new SyntaxError(`The "${n}" subprotocol is duplicated`);return t.add(n),t}var Rs={parse:Ps};const Bs=b,re=b,{createHash:Us}=b,Ve=st,P=ie,Is=Rs,Ms=ot,{GUID:Ws,kWebSocket:Ds}=U,As=/^[+/0-9A-Za-z]{22}==$/,qe=0,ze=1,ft=2;class Fs extends Bs{constructor(t,s){if(super(),t={maxPayload:100*1024*1024,skipUTF8Validation:!1,perMessageDeflate:!1,handleProtocols:null,clientTracking:!0,verifyClient:null,noServer:!1,backlog:null,server:null,host:null,path:null,port:null,WebSocket:Ms,...t},t.port==null&&!t.server&&!t.noServer||t.port!=null&&(t.server||t.noServer)||t.server&&t.noServer)throw new TypeError('One and only one of the "port", "server", or "noServer" options must be specified');if(t.port!=null?(this._server=re.createServer((i,r)=>{const n=re.STATUS_CODES[426];r.writeHead(426,{"Content-Length":n.length,"Content-Type":"text/plain"}),r.end(n)}),this._server.listen(t.port,t.host,t.backlog,s)):t.server&&(this._server=t.server),this._server){const i=this.emit.bind(this,"connection");this._removeListeners=$s(this._server,{listening:this.emit.bind(this,"listening"),error:this.emit.bind(this,"error"),upgrade:(r,n,o)=>{this.handleUpgrade(r,n,o,i)}})}t.perMessageDeflate===!0&&(t.perMessageDeflate={}),t.clientTracking&&(this.clients=new Set,this._shouldEmitClose=!1),this.options=t,this._state=qe}address(){if(this.options.noServer)throw new Error('The server is operating in "noServer" mode');return this._server?this._server.address():null}close(t){if(this._state===ft){t&&this.once("close",()=>{t(new Error("The server is not running"))}),process.nextTick(q,this);return}if(t&&this.once("close",t),this._state!==ze)if(this._state=ze,this.options.noServer||this.options.server)this._server&&(this._removeListeners(),this._removeListeners=this._server=null),this.clients?this.clients.size?this._shouldEmitClose=!0:process.nextTick(q,this):process.nextTick(q,this);else{const s=this._server;this._removeListeners(),this._removeListeners=this._server=null,s.close(()=>{q(this)})}}shouldHandle(t){if(this.options.path){const s=t.url.indexOf("?");if((s!==-1?t.url.slice(0,s):t.url)!==this.options.path)return!1}return!0}handleUpgrade(t,s,i,r){s.on("error",He);const n=t.headers["sec-websocket-key"],o=+t.headers["sec-websocket-version"];if(t.method!=="GET"){B(this,t,s,405,"Invalid HTTP method");return}if(t.headers.upgrade.toLowerCase()!=="websocket"){B(this,t,s,400,"Invalid Upgrade header");return}if(!n||!As.test(n)){B(this,t,s,400,"Missing or invalid Sec-WebSocket-Key header");return}if(o!==8&&o!==13){B(this,t,s,400,"Missing or invalid Sec-WebSocket-Version header");return}if(!this.shouldHandle(t)){H(s,400);return}const c=t.headers["sec-websocket-protocol"];let h=new Set;if(c!==void 0)try{h=Is.parse(c)}catch{B(this,t,s,400,"Invalid Sec-WebSocket-Protocol header");return}const a=t.headers["sec-websocket-extensions"],l={};if(this.options.perMessageDeflate&&a!==void 0){const d=new P(this.options.perMessageDeflate,!0,this.options.maxPayload);try{const g=Ve.parse(a);g[P.extensionName]&&(d.accept(g[P.extensionName]),l[P.extensionName]=d)}catch{B(this,t,s,400,"Invalid or unacceptable Sec-WebSocket-Extensions header");return}}if(this.options.verifyClient){const d={origin:t.headers[`${o===8?"sec-websocket-origin":"origin"}`],secure:!!(t.socket.authorized||t.socket.encrypted),req:t};if(this.options.verifyClient.length===2){this.options.verifyClient(d,(g,S,_,f)=>{if(!g)return H(s,S||401,_,f);this.completeUpgrade(l,n,h,t,s,i,r)});return}if(!this.options.verifyClient(d))return H(s,401)}this.completeUpgrade(l,n,h,t,s,i,r)}completeUpgrade(t,s,i,r,n,o,c){if(!n.readable||!n.writable)return n.destroy();if(n[Ds])throw new Error("server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration");if(this._state>qe)return H(n,503);const h=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${Us("sha1").update(s+Ws).digest("base64")}`],a=new this.options.WebSocket(null);if(i.size){const l=this.options.handleProtocols?this.options.handleProtocols(i,r):i.values().next().value;l&&(h.push(`Sec-WebSocket-Protocol: ${l}`),a._protocol=l)}if(t[P.extensionName]){const l=t[P.extensionName].params,d=Ve.format({[P.extensionName]:[l]});h.push(`Sec-WebSocket-Extensions: ${d}`),a._extensions=t}
1this.emit("headers",h,r),n.write(h.concat(`\r 2`).join(`\r 3`)),n.removeListener("error",He),a.setSocket(n,o,{maxPayload:this.options.maxPayload,skipUTF8Validation:this.options.skipUTF8Validation}),this.clients&&(this.clients.add(a),a.on("close",()=>{this.clients.delete(a),this._shouldEmitClose&&!this.clients.size&&process.nextTick(q,this)})),c(a,r)}}var js=Fs;function $s(e,t){for(const s of Object.keys(t))e.on(s,t[s]);return function(){for(const s of Object.keys(t))e.removeListener(s,t[s])}}function q(e){e._state=ft,e.emit("close")}function He(){this.destroy()}function H(e,t,s,i){s=s||re.STATUS_CODES[t],i={Connection:"close","Content-Type":"text/html","Content-Length":Buffer.byteLength(s),...i},e.once("finish",e.destroy),e.end(`HTTP/1.1 ${t} ${re.STATUS_CODES[t]}\r 4`+Object.keys(i).map(r=>`${r}: ${i[r]}`).join(`\r 5`)+`\r 6\r 7`+s)}function B(e,t,s,i,r){if(e.listenerCount("wsClientError")){const n=new Error(r);Error.captureStackTrace(n,B),e.emit("wsClientError",n,s,t)}else H(s,i,r)}const Hs=js;export{Vs as Receiver,qs as Sender,zs as WebSocket,Hs as WebSocketServer,Gs as createWebSocketStream,zs as default}; 8//# sourceMappingURL=wrapper-17f133d7-769f33a9.js.map
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.