rtsp2web 2.3.0 → 2.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +25 -5
- package/dist/rtsp2web.js +3 -3
- package/dist/rtsp2web.js.map +1 -1
- package/dist/rtsp2web.min.js +3 -3
- package/dist/rtsp2web.min.js.map +1 -1
- package/package.json +1 -1
package/dist/rtsp2web.min.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* rtsp2web v2.
|
|
2
|
+
* rtsp2web v2.4.1
|
|
3
3
|
* (c) 2020-2023 NeverYu
|
|
4
4
|
* My home page:https://neveryu.github.io/neveryu/
|
|
5
5
|
* 微信(wechat):miracle421354532
|
|
6
6
|
* Released under the ISC License.
|
|
7
7
|
*/
|
|
8
|
-
"use strict";var e=require("
|
|
8
|
+
"use strict";var e=require("http"),t=require("https"),r=require("fs"),s=require("events"),n=require("net"),i=require("tls"),o=require("crypto"),a=require("stream"),c=require("url"),l=require("zlib");function h(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var f=h(e),d=h(t),u=h(r),p=h(s),_=h(n),m=h(i),y=h(o),v=h(a),g=h(c),b=h(l);function S(e){return S="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},S(e)}function w(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function k(e,t){for(var r=0;r<t.length;r++){var s=t[r];s.enumerable=s.enumerable||!1,s.configurable=!0,"value"in s&&(s.writable=!0),Object.defineProperty(e,s.key,s)}}function x(e,t,r){return t&&k(e.prototype,t),r&&k(e,r),Object.defineProperty(e,"prototype",{writable:!1}),e}function E(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function O(e){return O=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)},O(e)}function C(e,t){return C=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},C(e,t)}function T(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function N(e,t){if(t&&("object"==typeof t||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return T(e)}function L(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var r,s=O(e);if(t){var n=O(this).constructor;r=Reflect.construct(s,arguments,n)}else r=s.apply(this,arguments);return N(this,r)}}function P(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null==r)return;var s,n,i=[],o=!0,a=!1;try{for(r=r.call(e);!(o=(s=r.next()).done)&&(i.push(s.value),!t||i.length!==t);o=!0);}catch(e){a=!0,n=e}finally{try{o||null==r.return||r.return()}finally{if(a)throw n}}return i}(e,t)||B(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function R(e){return function(e){if(Array.isArray(e))return A(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||B(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function B(e,t){if(e){if("string"==typeof e)return A(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?A(e,t):void 0}}function A(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,s=new Array(t);r<t;r++)s[r]=e[r];return s}function I(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=B(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var s=0,n=function(){};return{s:n,n:function(){return s>=e.length?{done:!0}:{done:!1,value:e[s++]}},e:function(e){throw e},f:n}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,a=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return o=e.done,e},e:function(e){a=!0,i=e},f:function(){try{o||null==r.return||r.return()}finally{if(a)throw i}}}}var U="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},M={exports:{}};
|
|
9
9
|
/*! https://mths.be/base64 v1.0.0 by @mathias | MIT license */
|
|
10
|
-
!function(e,t){!function(r){var s=t,n=e&&e.exports==s&&e,i="object"==typeof B&&B;i.global!==i&&i.window!==i||(r=i);var o=function(e){this.message=e};(o.prototype=new Error).name="InvalidCharacterError";var a=function(e){throw new o(e)},c="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",l=/[\t\n\f\r ]/g,h={encode:function(e){e=String(e),/[^\0-\xFF]/.test(e)&&a("The string to be encoded contains characters outside of the Latin1 range.");for(var t,r,s,n,i=e.length%3,o="",l=-1,h=e.length-i;++l<h;)t=e.charCodeAt(l)<<16,r=e.charCodeAt(++l)<<8,s=e.charCodeAt(++l),o+=c.charAt((n=t+r+s)>>18&63)+c.charAt(n>>12&63)+c.charAt(n>>6&63)+c.charAt(63&n);return 2==i?(t=e.charCodeAt(l)<<8,r=e.charCodeAt(++l),o+=c.charAt((n=t+r)>>10)+c.charAt(n>>4&63)+c.charAt(n<<2&63)+"="):1==i&&(n=e.charCodeAt(l),o+=c.charAt(n>>2)+c.charAt(n<<4&63)+"=="),o},decode:function(e){var t=(e=String(e).replace(l,"")).length;t%4==0&&(t=(e=e.replace(/==?$/,"")).length),(t%4==1||/[^+a-zA-Z0-9/]/.test(e))&&a("Invalid character: the string to be decoded is not correctly encoded.");for(var r,s,n=0,i="",o=-1;++o<t;)s=c.indexOf(e.charAt(o)),r=n%4?64*r+s:s,n++%4&&(i+=String.fromCharCode(255&r>>(-2*n&6)));return i},version:"1.0.0"};if(s&&!s.nodeType)if(n)n.exports=h;else for(var f in h)h.hasOwnProperty(f)&&(s[f]=h[f]);else r.base64=h}(B)}(A,A.exports);var I={exports:{}},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{EMPTY_BUFFER:M}=U;function W(e,t){if(0===e.length)return M;if(1===e.length)return e[0];const r=Buffer.allocUnsafe(t);let s=0;for(let t=0;t<e.length;t++){const n=e[t];r.set(n,s),s+=n.length}return s<t?r.slice(0,s):r}function D(e,t,r,s,n){for(let i=0;i<n;i++)r[s+i]=e[i]^t[3&i]}function F(e,t){for(let r=0;r<e.length;r++)e[r]^=t[3&r]}function j(e){return e.byteLength===e.buffer.byteLength?e.buffer:e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength)}function $(e){if($.readOnly=!0,Buffer.isBuffer(e))return e;let t;return e instanceof ArrayBuffer?t=Buffer.from(e):ArrayBuffer.isView(e)?t=Buffer.from(e.buffer,e.byteOffset,e.byteLength):(t=Buffer.from(e),$.readOnly=!1),t}try{const e=require("bufferutil");I.exports={concat:W,mask(t,r,s,n,i){i<48?D(t,r,s,n,i):e.mask(t,r,s,n,i)},toArrayBuffer:j,toBuffer:$,unmask(t,r){t.length<32?F(t,r):e.unmask(t,r)}}}catch(e){I.exports={concat:W,mask:D,toArrayBuffer:j,toBuffer:$,unmask:F}}const q=Symbol("kDone"),G=Symbol("kRun");var V=class{constructor(e){this[q]=()=>{this.pending--,this[G]()},this.concurrency=e||1/0,this.jobs=[],this.pending=0}add(e){this.jobs.push(e),this[G]()}[G](){if(this.pending!==this.concurrency&&this.jobs.length){const e=this.jobs.shift();this.pending++,e(this[q])}}};const z=g.default,H=I.exports,Y=V,{kStatusCode:X}=U,Z=Buffer.from([0,0,255,255]),K=Symbol("permessage-deflate"),Q=Symbol("total-length"),J=Symbol("callback"),ee=Symbol("buffers"),te=Symbol("error");let re;var se=class{constructor(e,t,r){if(this._maxPayload=0|r,this._options=e||{},this._threshold=void 0!==this._options.threshold?this._options.threshold:1024,this._isServer=!!t,this._deflate=null,this._inflate=null,this.params=null,!re){const e=void 0!==this._options.concurrencyLimit?this._options.concurrencyLimit:10;re=new Y(e)}}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:null==this._options.clientMaxWindowBits&&(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[J];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,r=e.find((e=>!(!1===t.serverNoContextTakeover&&e.server_no_context_takeover||e.server_max_window_bits&&(!1===t.serverMaxWindowBits||"number"==typeof t.serverMaxWindowBits&&t.serverMaxWindowBits>e.server_max_window_bits)||"number"==typeof t.clientMaxWindowBits&&!e.client_max_window_bits)));if(!r)throw new Error("None of the extension offers can be accepted");return t.serverNoContextTakeover&&(r.server_no_context_takeover=!0),t.clientNoContextTakeover&&(r.client_no_context_takeover=!0),"number"==typeof t.serverMaxWindowBits&&(r.server_max_window_bits=t.serverMaxWindowBits),"number"==typeof t.clientMaxWindowBits?r.client_max_window_bits=t.clientMaxWindowBits:!0!==r.client_max_window_bits&&!1!==t.clientMaxWindowBits||delete r.client_max_window_bits,r}acceptAsClient(e){const t=e[0];if(!1===this._options.clientNoContextTakeover&&t.client_no_context_takeover)throw new Error('Unexpected parameter "client_no_context_takeover"');if(t.client_max_window_bits){if(!1===this._options.clientMaxWindowBits||"number"==typeof this._options.clientMaxWindowBits&&t.client_max_window_bits>this._options.clientMaxWindowBits)throw new Error('Unexpected or invalid parameter "client_max_window_bits"')}else"number"==typeof this._options.clientMaxWindowBits&&(t.client_max_window_bits=this._options.clientMaxWindowBits);return t}normalizeParams(e){return e.forEach((e=>{Object.keys(e).forEach((t=>{let r=e[t];if(r.length>1)throw new Error(`Parameter "${t}" must have only a single value`);if(r=r[0],"client_max_window_bits"===t){if(!0!==r){const e=+r;if(!Number.isInteger(e)||e<8||e>15)throw new TypeError(`Invalid value for parameter "${t}": ${r}`);r=e}else if(!this._isServer)throw new TypeError(`Invalid value for parameter "${t}": ${r}`)}else if("server_max_window_bits"===t){const e=+r;if(!Number.isInteger(e)||e<8||e>15)throw new TypeError(`Invalid value for parameter "${t}": ${r}`);r=e}else{if("client_no_context_takeover"!==t&&"server_no_context_takeover"!==t)throw new Error(`Unknown parameter "${t}"`);if(!0!==r)throw new TypeError(`Invalid value for parameter "${t}": ${r}`)}e[t]=r}))})),e}decompress(e,t,r){re.add((s=>{this._decompress(e,t,((e,t)=>{s(),r(e,t)}))}))}compress(e,t,r){re.add((s=>{this._compress(e,t,((e,t)=>{s(),r(e,t)}))}))}_decompress(e,t,r){const s=this._isServer?"client":"server";if(!this._inflate){const e=`${s}_max_window_bits`,t="number"!=typeof this.params[e]?z.Z_DEFAULT_WINDOWBITS:this.params[e];this._inflate=z.createInflateRaw({...this._options.zlibInflateOptions,windowBits:t}),this._inflate[K]=this,this._inflate[Q]=0,this._inflate[ee]=[],this._inflate.on("error",oe),this._inflate.on("data",ie)}this._inflate[J]=r,this._inflate.write(e),t&&this._inflate.write(Z),this._inflate.flush((()=>{const e=this._inflate[te];if(e)return this._inflate.close(),this._inflate=null,void r(e);const n=H.concat(this._inflate[ee],this._inflate[Q]);this._inflate._readableState.endEmitted?(this._inflate.close(),this._inflate=null):(this._inflate[Q]=0,this._inflate[ee]=[],t&&this.params[`${s}_no_context_takeover`]&&this._inflate.reset()),r(null,n)}))}_compress(e,t,r){const s=this._isServer?"server":"client";if(!this._deflate){const e=`${s}_max_window_bits`,t="number"!=typeof this.params[e]?z.Z_DEFAULT_WINDOWBITS:this.params[e];this._deflate=z.createDeflateRaw({...this._options.zlibDeflateOptions,windowBits:t}),this._deflate[Q]=0,this._deflate[ee]=[],this._deflate.on("data",ne)}this._deflate[J]=r,this._deflate.write(e),this._deflate.flush(z.Z_SYNC_FLUSH,(()=>{if(!this._deflate)return;let e=H.concat(this._deflate[ee],this._deflate[Q]);t&&(e=e.slice(0,e.length-4)),this._deflate[J]=null,this._deflate[Q]=0,this._deflate[ee]=[],t&&this.params[`${s}_no_context_takeover`]&&this._deflate.reset(),r(null,e)}))}};function ne(e){this[ee].push(e),this[Q]+=e.length}function ie(e){this[Q]+=e.length,this[K]._maxPayload<1||this[Q]<=this[K]._maxPayload?this[ee].push(e):(this[te]=new RangeError("Max payload size exceeded"),this[te].code="WS_ERR_UNSUPPORTED_MESSAGE_LENGTH",this[te][X]=1009,this.removeListener("data",ie),this.reset())}function oe(e){this[K]._inflate=null,e[X]=1007,this[J](e)}var ae={exports:{}};const ce=[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 le(e){return e>=1e3&&e<=1014&&1004!==e&&1005!==e&&1006!==e||e>=3e3&&e<=4999}function he(e){const t=e.length;let r=0;for(;r<t;)if(0==(128&e[r]))r++;else if(192==(224&e[r])){if(r+1===t||128!=(192&e[r+1])||192==(254&e[r]))return!1;r+=2}else if(224==(240&e[r])){if(r+2>=t||128!=(192&e[r+1])||128!=(192&e[r+2])||224===e[r]&&128==(224&e[r+1])||237===e[r]&&160==(224&e[r+1]))return!1;r+=3}else{if(240!=(248&e[r]))return!1;if(r+3>=t||128!=(192&e[r+1])||128!=(192&e[r+2])||128!=(192&e[r+3])||240===e[r]&&128==(240&e[r+1])||244===e[r]&&e[r+1]>143||e[r]>244)return!1;r+=4}return!0}try{const e=require("utf-8-validate");ae.exports={isValidStatusCode:le,isValidUTF8:t=>t.length<150?he(t):e(t),tokenChars:ce}}catch(e){ae.exports={isValidStatusCode:le,isValidUTF8:he,tokenChars:ce}}const{Writable:fe}=m.default,de=se,{BINARY_TYPES:ue,EMPTY_BUFFER:pe,kStatusCode:_e,kWebSocket:me}=U,{concat:ye,toArrayBuffer:ge,unmask:ve}=I.exports,{isValidStatusCode:be,isValidUTF8:Se}=ae.exports;var we=class extends fe{constructor(e={}){super(),this._binaryType=e.binaryType||ue[0],this._extensions=e.extensions||{},this._isServer=!!e.isServer,this._maxPayload=0|e.maxPayload,this._skipUTF8Validation=!!e.skipUTF8Validation,this[me]=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=0,this._loop=!1}_write(e,t,r){if(8===this._opcode&&0==this._state)return r();this._bufferedBytes+=e.length,this._buffers.push(e),this.startLoop(r)}consume(e){if(this._bufferedBytes-=e,e===this._buffers[0].length)return this._buffers.shift();if(e<this._buffers[0].length){const t=this._buffers[0];return this._buffers[0]=t.slice(e),t.slice(0,e)}const t=Buffer.allocUnsafe(e);do{const r=this._buffers[0],s=t.length-e;e>=r.length?t.set(this._buffers.shift(),s):(t.set(new Uint8Array(r.buffer,r.byteOffset,e),s),this._buffers[0]=r.slice(e)),e-=r.length}while(e>0);return t}startLoop(e){let t;this._loop=!0;do{switch(this._state){case 0:t=this.getInfo();break;case 1:t=this.getPayloadLength16();break;case 2:t=this.getPayloadLength64();break;case 3:this.getMask();break;case 4:t=this.getData(e);break;default:return void(this._loop=!1)}}while(this._loop);e(t)}getInfo(){if(this._bufferedBytes<2)return void(this._loop=!1);const e=this.consume(2);if(0!=(48&e[0]))return this._loop=!1,ke(RangeError,"RSV2 and RSV3 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_2_3");const t=64==(64&e[0]);if(t&&!this._extensions[de.extensionName])return this._loop=!1,ke(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");if(this._fin=128==(128&e[0]),this._opcode=15&e[0],this._payloadLength=127&e[1],0===this._opcode){if(t)return this._loop=!1,ke(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");if(!this._fragmented)return this._loop=!1,ke(RangeError,"invalid opcode 0",!0,1002,"WS_ERR_INVALID_OPCODE");this._opcode=this._fragmented}else if(1===this._opcode||2===this._opcode){if(this._fragmented)return this._loop=!1,ke(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");this._compressed=t}else{if(!(this._opcode>7&&this._opcode<11))return this._loop=!1,ke(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");if(!this._fin)return this._loop=!1,ke(RangeError,"FIN must be set",!0,1002,"WS_ERR_EXPECTED_FIN");if(t)return this._loop=!1,ke(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");if(this._payloadLength>125)return this._loop=!1,ke(RangeError,`invalid payload length ${this._payloadLength}`,!0,1002,"WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH")}if(this._fin||this._fragmented||(this._fragmented=this._opcode),this._masked=128==(128&e[1]),this._isServer){if(!this._masked)return this._loop=!1,ke(RangeError,"MASK must be set",!0,1002,"WS_ERR_EXPECTED_MASK")}else if(this._masked)return this._loop=!1,ke(RangeError,"MASK must be clear",!0,1002,"WS_ERR_UNEXPECTED_MASK");if(126===this._payloadLength)this._state=1;else{if(127!==this._payloadLength)return this.haveLength();this._state=2}}getPayloadLength16(){if(!(this._bufferedBytes<2))return this._payloadLength=this.consume(2).readUInt16BE(0),this.haveLength();this._loop=!1}getPayloadLength64(){if(this._bufferedBytes<8)return void(this._loop=!1);const e=this.consume(8),t=e.readUInt32BE(0);return t>Math.pow(2,21)-1?(this._loop=!1,ke(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,ke(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");this._masked?this._state=3:this._state=4}getMask(){this._bufferedBytes<4?this._loop=!1:(this._mask=this.consume(4),this._state=4)}getData(e){let t=pe;if(this._payloadLength){if(this._bufferedBytes<this._payloadLength)return void(this._loop=!1);t=this.consume(this._payloadLength),this._masked&&0!=(this._mask[0]|this._mask[1]|this._mask[2]|this._mask[3])&&ve(t,this._mask)}return this._opcode>7?this.controlMessage(t):this._compressed?(this._state=5,void this.decompress(t,e)):(t.length&&(this._messageLength=this._totalPayloadLength,this._fragments.push(t)),this.dataMessage())}decompress(e,t){this._extensions[de.extensionName].decompress(e,this._fin,((e,r)=>{if(e)return t(e);if(r.length){if(this._messageLength+=r.length,this._messageLength>this._maxPayload&&this._maxPayload>0)return t(ke(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH"));this._fragments.push(r)}const s=this.dataMessage();if(s)return t(s);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=[],2===this._opcode){let r;r="nodebuffer"===this._binaryType?ye(t,e):"arraybuffer"===this._binaryType?ge(ye(t,e)):t,this.emit("message",r,!0)}else{const r=ye(t,e);if(!this._skipUTF8Validation&&!Se(r))return this._loop=!1,ke(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");this.emit("message",r,!1)}}this._state=0}controlMessage(e){if(8===this._opcode)if(this._loop=!1,0===e.length)this.emit("conclude",1005,pe),this.end();else{if(1===e.length)return ke(RangeError,"invalid payload length 1",!0,1002,"WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH");{const t=e.readUInt16BE(0);if(!be(t))return ke(RangeError,`invalid status code ${t}`,!0,1002,"WS_ERR_INVALID_CLOSE_CODE");const r=e.slice(2);if(!this._skipUTF8Validation&&!Se(r))return ke(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");this.emit("conclude",t,r),this.end()}}else 9===this._opcode?this.emit("ping",e):this.emit("pong",e);this._state=0}};function ke(e,t,r,s,n){const i=new e(r?`Invalid WebSocket frame: ${t}`:t);return Error.captureStackTrace(i,ke),i.code=n,i[_e]=s,i}const{randomFillSync:xe}=_.default,Ee=se,{EMPTY_BUFFER:Oe}=U,{isValidStatusCode:Ce}=ae.exports,{mask:Te,toBuffer:Ne}=I.exports,Le=Symbol("kByteLength"),Pe=Buffer.alloc(4);class Re{constructor(e,t,r){this._extensions=t||{},r&&(this._generateMask=r,this._maskBuffer=Buffer.alloc(4)),this._socket=e,this._firstFragment=!0,this._compress=!1,this._bufferedBytes=0,this._deflating=!1,this._queue=[]}static frame(e,t){let r,s,n=!1,i=2,o=!1;t.mask&&(r=t.maskBuffer||Pe,t.generateMask?t.generateMask(r):xe(r,0,4),o=0==(r[0]|r[1]|r[2]|r[3]),i=6),"string"==typeof e?s=t.mask&&!o||void 0===t[Le]?(e=Buffer.from(e)).length:t[Le]:(s=e.length,n=t.mask&&t.readOnly&&!o);let a=s;s>=65536?(i+=8,a=127):s>125&&(i+=2,a=126);const c=Buffer.allocUnsafe(n?s+i:i);return c[0]=t.fin?128|t.opcode:t.opcode,t.rsv1&&(c[0]|=64),c[1]=a,126===a?c.writeUInt16BE(s,2):127===a&&(c[2]=c[3]=0,c.writeUIntBE(s,4,6)),t.mask?(c[1]|=128,c[i-4]=r[0],c[i-3]=r[1],c[i-2]=r[2],c[i-1]=r[3],o?[c,e]:n?(Te(e,r,c,i,s),[c]):(Te(e,r,e,0,s),[c,e])):[c,e]}close(e,t,r,s){let n;if(void 0===e)n=Oe;else{if("number"!=typeof e||!Ce(e))throw new TypeError("First argument must be a valid error code number");if(void 0!==t&&t.length){const r=Buffer.byteLength(t);if(r>123)throw new RangeError("The message must not be greater than 123 bytes");n=Buffer.allocUnsafe(2+r),n.writeUInt16BE(e,0),"string"==typeof t?n.write(t,2):n.set(t,2)}else n=Buffer.allocUnsafe(2),n.writeUInt16BE(e,0)}const i={[Le]:n.length,fin:!0,generateMask:this._generateMask,mask:r,maskBuffer:this._maskBuffer,opcode:8,readOnly:!1,rsv1:!1};this._deflating?this.enqueue([this.dispatch,n,!1,i,s]):this.sendFrame(Re.frame(n,i),s)}ping(e,t,r){let s,n;if("string"==typeof e?(s=Buffer.byteLength(e),n=!1):(s=(e=Ne(e)).length,n=Ne.readOnly),s>125)throw new RangeError("The data size must not be greater than 125 bytes");const i={[Le]:s,fin:!0,generateMask:this._generateMask,mask:t,maskBuffer:this._maskBuffer,opcode:9,readOnly:n,rsv1:!1};this._deflating?this.enqueue([this.dispatch,e,!1,i,r]):this.sendFrame(Re.frame(e,i),r)}pong(e,t,r){let s,n;if("string"==typeof e?(s=Buffer.byteLength(e),n=!1):(s=(e=Ne(e)).length,n=Ne.readOnly),s>125)throw new RangeError("The data size must not be greater than 125 bytes");const i={[Le]:s,fin:!0,generateMask:this._generateMask,mask:t,maskBuffer:this._maskBuffer,opcode:10,readOnly:n,rsv1:!1};this._deflating?this.enqueue([this.dispatch,e,!1,i,r]):this.sendFrame(Re.frame(e,i),r)}send(e,t,r){const s=this._extensions[Ee.extensionName];let n,i,o=t.binary?2:1,a=t.compress;if("string"==typeof e?(n=Buffer.byteLength(e),i=!1):(n=(e=Ne(e)).length,i=Ne.readOnly),this._firstFragment?(this._firstFragment=!1,a&&s&&s.params[s._isServer?"server_no_context_takeover":"client_no_context_takeover"]&&(a=n>=s._threshold),this._compress=a):(a=!1,o=0),t.fin&&(this._firstFragment=!0),s){const s={[Le]:n,fin:t.fin,generateMask:this._generateMask,mask:t.mask,maskBuffer:this._maskBuffer,opcode:o,readOnly:i,rsv1:a};this._deflating?this.enqueue([this.dispatch,e,this._compress,s,r]):this.dispatch(e,this._compress,s,r)}else this.sendFrame(Re.frame(e,{[Le]:n,fin:t.fin,generateMask:this._generateMask,mask:t.mask,maskBuffer:this._maskBuffer,opcode:o,readOnly:i,rsv1:!1}),r)}dispatch(e,t,r,s){if(!t)return void this.sendFrame(Re.frame(e,r),s);const n=this._extensions[Ee.extensionName];this._bufferedBytes+=r[Le],this._deflating=!0,n.compress(e,r.fin,((e,t)=>{if(this._socket.destroyed){const e=new Error("The socket was closed while data was being compressed");"function"==typeof s&&s(e);for(let t=0;t<this._queue.length;t++){const r=this._queue[t],s=r[r.length-1];"function"==typeof s&&s(e)}}else this._bufferedBytes-=r[Le],this._deflating=!1,r.readOnly=!1,this.sendFrame(Re.frame(t,r),s),this.dequeue()}))}dequeue(){for(;!this._deflating&&this._queue.length;){const e=this._queue.shift();this._bufferedBytes-=e[3][Le],Reflect.apply(e[0],this,e.slice(1))}}enqueue(e){this._bufferedBytes+=e[3][Le],this._queue.push(e)}sendFrame(e,t){2===e.length?(this._socket.cork(),this._socket.write(e[0]),this._socket.write(e[1],t),this._socket.uncork()):this._socket.write(e[0],t)}}var Be=Re;const{kForOnEventAttribute:Ae,kListener:Ie}=U,Ue=Symbol("kCode"),Me=Symbol("kData"),We=Symbol("kError"),De=Symbol("kMessage"),Fe=Symbol("kReason"),je=Symbol("kTarget"),$e=Symbol("kType"),qe=Symbol("kWasClean");class Ge{constructor(e){this[je]=null,this[$e]=e}get target(){return this[je]}get type(){return this[$e]}}Object.defineProperty(Ge.prototype,"target",{enumerable:!0}),Object.defineProperty(Ge.prototype,"type",{enumerable:!0});class Ve extends Ge{constructor(e,t={}){super(e),this[Ue]=void 0===t.code?0:t.code,this[Fe]=void 0===t.reason?"":t.reason,this[qe]=void 0!==t.wasClean&&t.wasClean}get code(){return this[Ue]}get reason(){return this[Fe]}get wasClean(){return this[qe]}}Object.defineProperty(Ve.prototype,"code",{enumerable:!0}),Object.defineProperty(Ve.prototype,"reason",{enumerable:!0}),Object.defineProperty(Ve.prototype,"wasClean",{enumerable:!0});class ze extends Ge{constructor(e,t={}){super(e),this[We]=void 0===t.error?null:t.error,this[De]=void 0===t.message?"":t.message}get error(){return this[We]}get message(){return this[De]}}Object.defineProperty(ze.prototype,"error",{enumerable:!0}),Object.defineProperty(ze.prototype,"message",{enumerable:!0});class He extends Ge{constructor(e,t={}){super(e),this[Me]=void 0===t.data?null:t.data}get data(){return this[Me]}}Object.defineProperty(He.prototype,"data",{enumerable:!0});const Ye={addEventListener(e,t,r={}){let s;if("message"===e)s=function(e,r){const s=new He("message",{data:r?e:e.toString()});s[je]=this,t.call(this,s)};else if("close"===e)s=function(e,r){const s=new Ve("close",{code:e,reason:r.toString(),wasClean:this._closeFrameReceived&&this._closeFrameSent});s[je]=this,t.call(this,s)};else if("error"===e)s=function(e){const r=new ze("error",{error:e,message:e.message});r[je]=this,t.call(this,r)};else{if("open"!==e)return;s=function(){const e=new Ge("open");e[je]=this,t.call(this,e)}}s[Ae]=!!r[Ae],s[Ie]=t,r.once?this.once(e,s):this.on(e,s)},removeEventListener(e,t){for(const r of this.listeners(e))if(r[Ie]===t&&!r[Ae]){this.removeListener(e,r);break}}};var Xe={CloseEvent:Ve,ErrorEvent:ze,Event:Ge,EventTarget:Ye,MessageEvent:He};const{tokenChars:Ze}=ae.exports;function Ke(e,t,r){void 0===e[t]?e[t]=[r]:e[t].push(r)}var Qe={format:function(e){return Object.keys(e).map((t=>{let r=e[t];return Array.isArray(r)||(r=[r]),r.map((e=>[t].concat(Object.keys(e).map((t=>{let r=e[t];return Array.isArray(r)||(r=[r]),r.map((e=>!0===e?t:`${t}=${e}`)).join("; ")}))).join("; "))).join(", ")})).join(", ")},parse:function(e){const t=Object.create(null);let r,s,n=Object.create(null),i=!1,o=!1,a=!1,c=-1,l=-1,h=-1,f=0;for(;f<e.length;f++)if(l=e.charCodeAt(f),void 0===r)if(-1===h&&1===Ze[l])-1===c&&(c=f);else if(0===f||32!==l&&9!==l){if(59!==l&&44!==l)throw new SyntaxError(`Unexpected character at index ${f}`);{if(-1===c)throw new SyntaxError(`Unexpected character at index ${f}`);-1===h&&(h=f);const s=e.slice(c,h);44===l?(Ke(t,s,n),n=Object.create(null)):r=s,c=h=-1}}else-1===h&&-1!==c&&(h=f);else if(void 0===s)if(-1===h&&1===Ze[l])-1===c&&(c=f);else if(32===l||9===l)-1===h&&-1!==c&&(h=f);else if(59===l||44===l){if(-1===c)throw new SyntaxError(`Unexpected character at index ${f}`);-1===h&&(h=f),Ke(n,e.slice(c,h),!0),44===l&&(Ke(t,r,n),n=Object.create(null),r=void 0),c=h=-1}else{if(61!==l||-1===c||-1!==h)throw new SyntaxError(`Unexpected character at index ${f}`);s=e.slice(c,f),c=h=-1}else if(o){if(1!==Ze[l])throw new SyntaxError(`Unexpected character at index ${f}`);-1===c?c=f:i||(i=!0),o=!1}else if(a)if(1===Ze[l])-1===c&&(c=f);else if(34===l&&-1!==c)a=!1,h=f;else{if(92!==l)throw new SyntaxError(`Unexpected character at index ${f}`);o=!0}else if(34===l&&61===e.charCodeAt(f-1))a=!0;else if(-1===h&&1===Ze[l])-1===c&&(c=f);else if(-1===c||32!==l&&9!==l){if(59!==l&&44!==l)throw new SyntaxError(`Unexpected character at index ${f}`);{if(-1===c)throw new SyntaxError(`Unexpected character at index ${f}`);-1===h&&(h=f);let o=e.slice(c,h);i&&(o=o.replace(/\\/g,""),i=!1),Ke(n,s,o),44===l&&(Ke(t,r,n),n=Object.create(null),r=void 0),s=void 0,c=h=-1}}else-1===h&&(h=f);if(-1===c||a||32===l||9===l)throw new SyntaxError("Unexpected end of input");-1===h&&(h=f);const d=e.slice(c,h);return void 0===r?Ke(t,d,n):(void 0===s?Ke(n,d,!0):Ke(n,s,i?d.replace(/\\/g,""):d),Ke(t,r,n)),t}};const Je=h.default,et=f.default,tt=d.default,rt=u.default,st=p.default,{randomBytes:nt,createHash:it}=_.default,{URL:ot}=y.default,at=se,ct=we,lt=Be,{BINARY_TYPES:ht,EMPTY_BUFFER:ft,GUID:dt,kForOnEventAttribute:ut,kListener:pt,kStatusCode:_t,kWebSocket:mt,NOOP:yt}=U,{EventTarget:{addEventListener:gt,removeEventListener:vt}}=Xe,{format:bt,parse:St}=Qe,{toBuffer:wt}=I.exports,kt=["CONNECTING","OPEN","CLOSING","CLOSED"],xt=/^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/,Et=[8,13];class Ot extends Je{constructor(e,t,r){super(),this._binaryType=ht[0],this._closeCode=1006,this._closeFrameReceived=!1,this._closeFrameSent=!1,this._closeMessage=ft,this._closeTimer=null,this._extensions={},this._paused=!1,this._protocol="",this._readyState=Ot.CONNECTING,this._receiver=null,this._sender=null,this._socket=null,null!==e?(this._bufferedAmount=0,this._isServer=!1,this._redirects=0,void 0===t?t=[]:Array.isArray(t)||("object"==typeof t&&null!==t?(r=t,t=[]):t=[t]),Tt(this,e,t,r)):this._isServer=!0}get binaryType(){return this._binaryType}set binaryType(e){ht.includes(e)&&(this._binaryType=e,this._receiver&&(this._receiver._binaryType=e))}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(e,t,r){const s=new ct({binaryType:this.binaryType,extensions:this._extensions,isServer:this._isServer,maxPayload:r.maxPayload,skipUTF8Validation:r.skipUTF8Validation});this._sender=new lt(e,this._extensions,r.generateMask),this._receiver=s,this._socket=e,s[mt]=this,e[mt]=this,s.on("conclude",At),s.on("drain",It),s.on("error",Ut),s.on("message",Wt),s.on("ping",Dt),s.on("pong",Ft),e.setTimeout(0),e.setNoDelay(),t.length>0&&e.unshift(t),e.on("close",$t),e.on("data",qt),e.on("end",Gt),e.on("error",Vt),this._readyState=Ot.OPEN,this.emit("open")}emitClose(){if(!this._socket)return this._readyState=Ot.CLOSED,void this.emit("close",this._closeCode,this._closeMessage);this._extensions[at.extensionName]&&this._extensions[at.extensionName].cleanup(),this._receiver.removeAllListeners(),this._readyState=Ot.CLOSED,this.emit("close",this._closeCode,this._closeMessage)}close(e,t){if(this.readyState!==Ot.CLOSED){if(this.readyState===Ot.CONNECTING){const e="WebSocket was closed before the connection was established";return Rt(this,this._req,e)}this.readyState!==Ot.CLOSING?(this._readyState=Ot.CLOSING,this._sender.close(e,t,!this._isServer,(e=>{e||(this._closeFrameSent=!0,(this._closeFrameReceived||this._receiver._writableState.errorEmitted)&&this._socket.end())})),this._closeTimer=setTimeout(this._socket.destroy.bind(this._socket),3e4)):this._closeFrameSent&&(this._closeFrameReceived||this._receiver._writableState.errorEmitted)&&this._socket.end()}}pause(){this.readyState!==Ot.CONNECTING&&this.readyState!==Ot.CLOSED&&(this._paused=!0,this._socket.pause())}ping(e,t,r){if(this.readyState===Ot.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");"function"==typeof e?(r=e,e=t=void 0):"function"==typeof t&&(r=t,t=void 0),"number"==typeof e&&(e=e.toString()),this.readyState===Ot.OPEN?(void 0===t&&(t=!this._isServer),this._sender.ping(e||ft,t,r)):Bt(this,e,r)}pong(e,t,r){if(this.readyState===Ot.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");"function"==typeof e?(r=e,e=t=void 0):"function"==typeof t&&(r=t,t=void 0),"number"==typeof e&&(e=e.toString()),this.readyState===Ot.OPEN?(void 0===t&&(t=!this._isServer),this._sender.pong(e||ft,t,r)):Bt(this,e,r)}resume(){this.readyState!==Ot.CONNECTING&&this.readyState!==Ot.CLOSED&&(this._paused=!1,this._receiver._writableState.needDrain||this._socket.resume())}send(e,t,r){if(this.readyState===Ot.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if("function"==typeof t&&(r=t,t={}),"number"==typeof e&&(e=e.toString()),this.readyState!==Ot.OPEN)return void Bt(this,e,r);const s={binary:"string"!=typeof e,mask:!this._isServer,compress:!0,fin:!0,...t};this._extensions[at.extensionName]||(s.compress=!1),this._sender.send(e||ft,s,r)}terminate(){if(this.readyState!==Ot.CLOSED){if(this.readyState===Ot.CONNECTING){const e="WebSocket was closed before the connection was established";return Rt(this,this._req,e)}this._socket&&(this._readyState=Ot.CLOSING,this._socket.destroy())}}}Object.defineProperty(Ot,"CONNECTING",{enumerable:!0,value:kt.indexOf("CONNECTING")}),Object.defineProperty(Ot.prototype,"CONNECTING",{enumerable:!0,value:kt.indexOf("CONNECTING")}),Object.defineProperty(Ot,"OPEN",{enumerable:!0,value:kt.indexOf("OPEN")}),Object.defineProperty(Ot.prototype,"OPEN",{enumerable:!0,value:kt.indexOf("OPEN")}),Object.defineProperty(Ot,"CLOSING",{enumerable:!0,value:kt.indexOf("CLOSING")}),Object.defineProperty(Ot.prototype,"CLOSING",{enumerable:!0,value:kt.indexOf("CLOSING")}),Object.defineProperty(Ot,"CLOSED",{enumerable:!0,value:kt.indexOf("CLOSED")}),Object.defineProperty(Ot.prototype,"CLOSED",{enumerable:!0,value:kt.indexOf("CLOSED")}),["binaryType","bufferedAmount","extensions","isPaused","protocol","readyState","url"].forEach((e=>{Object.defineProperty(Ot.prototype,e,{enumerable:!0})})),["open","error","close","message"].forEach((e=>{Object.defineProperty(Ot.prototype,`on${e}`,{enumerable:!0,get(){for(const t of this.listeners(e))if(t[ut])return t[pt];return null},set(t){for(const t of this.listeners(e))if(t[ut]){this.removeListener(e,t);break}"function"==typeof t&&this.addEventListener(e,t,{[ut]:!0})}})})),Ot.prototype.addEventListener=gt,Ot.prototype.removeEventListener=vt;var Ct=Ot;function Tt(e,t,r,s){const n={protocolVersion:Et[1],maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!0,followRedirects:!1,maxRedirects:10,...s,createConnection:void 0,socketPath:void 0,hostname:void 0,protocol:void 0,timeout:void 0,method:void 0,host:void 0,path:void 0,port:void 0};if(!Et.includes(n.protocolVersion))throw new RangeError(`Unsupported protocol version: ${n.protocolVersion} (supported versions: ${Et.join(", ")})`);let i;if(t instanceof ot)i=t,e._url=t.href;else{try{i=new ot(t)}catch(e){throw new SyntaxError(`Invalid URL: ${t}`)}e._url=t}const o="wss:"===i.protocol,a="ws+unix:"===i.protocol;let c;if("ws:"===i.protocol||o||a?a&&!i.pathname?c="The URL's pathname is empty":i.hash&&(c="The URL contains a fragment identifier"):c='The URL\'s protocol must be one of "ws:", "wss:", or "ws+unix:"',c){const t=new SyntaxError(c);if(0===e._redirects)throw t;return void Nt(e,t)}const l=o?443:80,h=nt(16).toString("base64"),f=o?et.get:tt.get,d=new Set;let u;if(n.createConnection=o?Pt:Lt,n.defaultPort=n.defaultPort||l,n.port=i.port||l,n.host=i.hostname.startsWith("[")?i.hostname.slice(1,-1):i.hostname,n.headers={"Sec-WebSocket-Version":n.protocolVersion,"Sec-WebSocket-Key":h,Connection:"Upgrade",Upgrade:"websocket",...n.headers},n.path=i.pathname+i.search,n.timeout=n.handshakeTimeout,n.perMessageDeflate&&(u=new at(!0!==n.perMessageDeflate?n.perMessageDeflate:{},!1,n.maxPayload),n.headers["Sec-WebSocket-Extensions"]=bt({[at.extensionName]:u.offer()})),r.length){for(const e of r){if("string"!=typeof e||!xt.test(e)||d.has(e))throw new SyntaxError("An invalid or duplicated subprotocol was specified");d.add(e)}n.headers["Sec-WebSocket-Protocol"]=r.join(",")}if(n.origin&&(n.protocolVersion<13?n.headers["Sec-WebSocket-Origin"]=n.origin:n.headers.Origin=n.origin),(i.username||i.password)&&(n.auth=`${i.username}:${i.password}`),a){const e=n.path.split(":");n.socketPath=e[0],n.path=e[1]}if(n.followRedirects){if(0===e._redirects){e._originalHost=i.host;const t=s&&s.headers;if(s={...s,headers:{}},t)for(const[e,r]of Object.entries(t))s.headers[e.toLowerCase()]=r}else i.host!==e._originalHost&&(delete n.headers.authorization,delete n.headers.cookie,delete n.headers.host,n.auth=void 0);n.auth&&!s.headers.authorization&&(s.headers.authorization="Basic "+Buffer.from(n.auth).toString("base64"))}let p=e._req=f(n);n.timeout&&p.on("timeout",(()=>{Rt(e,p,"Opening handshake has timed out")})),p.on("error",(t=>{null===p||p.aborted||(p=e._req=null,Nt(e,t))})),p.on("response",(i=>{const o=i.headers.location,a=i.statusCode;if(o&&n.followRedirects&&a>=300&&a<400){if(++e._redirects>n.maxRedirects)return void Rt(e,p,"Maximum redirects exceeded");let i;p.abort();try{i=new ot(o,t)}catch(t){const r=new SyntaxError(`Invalid URL: ${o}`);return void Nt(e,r)}Tt(e,i,r,s)}else e.emit("unexpected-response",p,i)||Rt(e,p,`Unexpected server response: ${i.statusCode}`)})),p.on("upgrade",((t,r,s)=>{if(e.emit("upgrade",t),e.readyState!==Ot.CONNECTING)return;p=e._req=null;const i=it("sha1").update(h+dt).digest("base64");if(t.headers["sec-websocket-accept"]!==i)return void Rt(e,r,"Invalid Sec-WebSocket-Accept header");const o=t.headers["sec-websocket-protocol"];let a;if(void 0!==o?d.size?d.has(o)||(a="Server sent an invalid subprotocol"):a="Server sent a subprotocol but none was requested":d.size&&(a="Server sent no subprotocol"),a)return void Rt(e,r,a);o&&(e._protocol=o);const c=t.headers["sec-websocket-extensions"];if(void 0!==c){if(!u){return void Rt(e,r,"Server sent a Sec-WebSocket-Extensions header but no extension was requested")}let t;try{t=St(c)}catch(t){return void Rt(e,r,"Invalid Sec-WebSocket-Extensions header")}const s=Object.keys(t);if(1!==s.length||s[0]!==at.extensionName){return void Rt(e,r,"Server indicated an extension that was not requested")}try{u.accept(t[at.extensionName])}catch(t){return void Rt(e,r,"Invalid Sec-WebSocket-Extensions header")}e._extensions[at.extensionName]=u}e.setSocket(r,s,{generateMask:n.generateMask,maxPayload:n.maxPayload,skipUTF8Validation:n.skipUTF8Validation})}))}function Nt(e,t){e._readyState=Ot.CLOSING,e.emit("error",t),e.emitClose()}function Lt(e){return e.path=e.socketPath,rt.connect(e)}function Pt(e){return e.path=void 0,e.servername||""===e.servername||(e.servername=rt.isIP(e.host)?"":e.host),st.connect(e)}function Rt(e,t,r){e._readyState=Ot.CLOSING;const s=new Error(r);Error.captureStackTrace(s,Rt),t.setHeader?(t.abort(),t.socket&&!t.socket.destroyed&&t.socket.destroy(),t.once("abort",e.emitClose.bind(e)),e.emit("error",s)):(t.destroy(s),t.once("error",e.emit.bind(e,"error")),t.once("close",e.emitClose.bind(e)))}function Bt(e,t,r){if(t){const r=wt(t).length;e._socket?e._sender._bufferedBytes+=r:e._bufferedAmount+=r}if(r){r(new Error(`WebSocket is not open: readyState ${e.readyState} (${kt[e.readyState]})`))}}function At(e,t){const r=this[mt];r._closeFrameReceived=!0,r._closeMessage=t,r._closeCode=e,void 0!==r._socket[mt]&&(r._socket.removeListener("data",qt),process.nextTick(jt,r._socket),1005===e?r.close():r.close(e,t))}function It(){const e=this[mt];e.isPaused||e._socket.resume()}function Ut(e){const t=this[mt];void 0!==t._socket[mt]&&(t._socket.removeListener("data",qt),process.nextTick(jt,t._socket),t.close(e[_t])),t.emit("error",e)}function Mt(){this[mt].emitClose()}function Wt(e,t){this[mt].emit("message",e,t)}function Dt(e){const t=this[mt];t.pong(e,!t._isServer,yt),t.emit("ping",e)}function Ft(e){this[mt].emit("pong",e)}function jt(e){e.resume()}function $t(){const e=this[mt];let t;this.removeListener("close",$t),this.removeListener("data",qt),this.removeListener("end",Gt),e._readyState=Ot.CLOSING,this._readableState.endEmitted||e._closeFrameReceived||e._receiver._writableState.errorEmitted||null===(t=e._socket.read())||e._receiver.write(t),e._receiver.end(),this[mt]=void 0,clearTimeout(e._closeTimer),e._receiver._writableState.finished||e._receiver._writableState.errorEmitted?e.emitClose():(e._receiver.on("error",Mt),e._receiver.on("finish",Mt))}function qt(e){this[mt]._receiver.write(e)||this.pause()}function Gt(){const e=this[mt];e._readyState=Ot.CLOSING,e._receiver.end(),this.end()}function Vt(){const e=this[mt];this.removeListener("error",Vt),this.on("error",yt),e&&(e._readyState=Ot.CLOSING,this.destroy())}const{Duplex:zt}=m.default;function Ht(e){e.emit("close")}function Yt(){!this.destroyed&&this._writableState.finished&&this.destroy()}function Xt(e){this.removeListener("error",Xt),this.destroy(),0===this.listenerCount("error")&&this.emit("error",e)}var Zt=function(e,t){let r=!0;const s=new zt({...t,autoDestroy:!1,emitClose:!1,objectMode:!1,writableObjectMode:!1});return e.on("message",(function(t,r){const n=!r&&s._readableState.objectMode?t.toString():t;s.push(n)||e.pause()})),e.once("error",(function(e){s.destroyed||(r=!1,s.destroy(e))})),e.once("close",(function(){s.destroyed||s.push(null)})),s._destroy=function(t,n){if(e.readyState===e.CLOSED)return n(t),void process.nextTick(Ht,s);let i=!1;e.once("error",(function(e){i=!0,n(e)})),e.once("close",(function(){i||n(t),process.nextTick(Ht,s)})),r&&e.terminate()},s._final=function(t){e.readyState!==e.CONNECTING?null!==e._socket&&(e._socket._writableState.finished?(t(),s._readableState.endEmitted&&s.destroy()):(e._socket.once("finish",(function(){t()})),e.close())):e.once("open",(function(){s._final(t)}))},s._read=function(){e.isPaused&&e.resume()},s._write=function(t,r,n){e.readyState!==e.CONNECTING?e.send(t,n):e.once("open",(function(){s._write(t,r,n)}))},s.on("end",Yt),s.on("error",Xt),s};const{tokenChars:Kt}=ae.exports;var Qt={parse:function(e){const t=new Set;let r=-1,s=-1,n=0;for(;n<e.length;n++){const i=e.charCodeAt(n);if(-1===s&&1===Kt[i])-1===r&&(r=n);else if(0===n||32!==i&&9!==i){if(44!==i)throw new SyntaxError(`Unexpected character at index ${n}`);{if(-1===r)throw new SyntaxError(`Unexpected character at index ${n}`);-1===s&&(s=n);const i=e.slice(r,s);if(t.has(i))throw new SyntaxError(`The "${i}" subprotocol is duplicated`);t.add(i),r=s=-1}}else-1===s&&-1!==r&&(s=n)}if(-1===r||-1!==s)throw new SyntaxError("Unexpected end of input");const i=e.slice(r,n);if(t.has(i))throw new SyntaxError(`The "${i}" subprotocol is duplicated`);return t.add(i),t}};const Jt=h.default,er=d.default,{createHash:tr}=_.default,rr=Qe,sr=se,nr=Qt,ir=Ct,{GUID:or,kWebSocket:ar}=U,cr=/^[+/0-9A-Za-z]{22}==$/;var lr=class extends Jt{constructor(e,t){if(super(),null==(e={maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!1,handleProtocols:null,clientTracking:!0,verifyClient:null,noServer:!1,backlog:null,server:null,host:null,path:null,port:null,WebSocket:ir,...e}).port&&!e.server&&!e.noServer||null!=e.port&&(e.server||e.noServer)||e.server&&e.noServer)throw new TypeError('One and only one of the "port", "server", or "noServer" options must be specified');if(null!=e.port?(this._server=er.createServer(((e,t)=>{const r=er.STATUS_CODES[426];t.writeHead(426,{"Content-Length":r.length,"Content-Type":"text/plain"}),t.end(r)})),this._server.listen(e.port,e.host,e.backlog,t)):e.server&&(this._server=e.server),this._server){const e=this.emit.bind(this,"connection");this._removeListeners=function(e,t){for(const r of Object.keys(t))e.on(r,t[r]);return function(){for(const r of Object.keys(t))e.removeListener(r,t[r])}}(this._server,{listening:this.emit.bind(this,"listening"),error:this.emit.bind(this,"error"),upgrade:(t,r,s)=>{this.handleUpgrade(t,r,s,e)}})}!0===e.perMessageDeflate&&(e.perMessageDeflate={}),e.clientTracking&&(this.clients=new Set,this._shouldEmitClose=!1),this.options=e,this._state=0}address(){if(this.options.noServer)throw new Error('The server is operating in "noServer" mode');return this._server?this._server.address():null}close(e){if(2===this._state)return e&&this.once("close",(()=>{e(new Error("The server is not running"))})),void process.nextTick(hr,this);if(e&&this.once("close",e),1!==this._state)if(this._state=1,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(hr,this);else{const e=this._server;this._removeListeners(),this._removeListeners=this._server=null,e.close((()=>{hr(this)}))}}shouldHandle(e){if(this.options.path){const t=e.url.indexOf("?");if((-1!==t?e.url.slice(0,t):e.url)!==this.options.path)return!1}return!0}handleUpgrade(e,t,r,s){t.on("error",fr);const n=void 0!==e.headers["sec-websocket-key"]&&e.headers["sec-websocket-key"],i=+e.headers["sec-websocket-version"];if("GET"!==e.method||"websocket"!==e.headers.upgrade.toLowerCase()||!n||!cr.test(n)||8!==i&&13!==i||!this.shouldHandle(e))return dr(t,400);const o=e.headers["sec-websocket-protocol"];let a=new Set;if(void 0!==o)try{a=nr.parse(o)}catch(e){return dr(t,400)}const c=e.headers["sec-websocket-extensions"],l={};if(this.options.perMessageDeflate&&void 0!==c){const e=new sr(this.options.perMessageDeflate,!0,this.options.maxPayload);try{const t=rr.parse(c);t[sr.extensionName]&&(e.accept(t[sr.extensionName]),l[sr.extensionName]=e)}catch(e){return dr(t,400)}}if(this.options.verifyClient){const o={origin:e.headers[""+(8===i?"sec-websocket-origin":"origin")],secure:!(!e.socket.authorized&&!e.socket.encrypted),req:e};if(2===this.options.verifyClient.length)return void this.options.verifyClient(o,((i,o,c,h)=>{if(!i)return dr(t,o||401,c,h);this.completeUpgrade(l,n,a,e,t,r,s)}));if(!this.options.verifyClient(o))return dr(t,401)}this.completeUpgrade(l,n,a,e,t,r,s)}completeUpgrade(e,t,r,s,n,i,o){if(!n.readable||!n.writable)return n.destroy();if(n[ar])throw new Error("server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration");if(this._state>0)return dr(n,503);const a=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${tr("sha1").update(t+or).digest("base64")}`],c=new this.options.WebSocket(null);if(r.size){const e=this.options.handleProtocols?this.options.handleProtocols(r,s):r.values().next().value;e&&(a.push(`Sec-WebSocket-Protocol: ${e}`),c._protocol=e)}if(e[sr.extensionName]){const t=e[sr.extensionName].params,r=rr.format({[sr.extensionName]:[t]});a.push(`Sec-WebSocket-Extensions: ${r}`),c._extensions=e}this.emit("headers",a,s),n.write(a.concat("\r\n").join("\r\n")),n.removeListener("error",fr),c.setSocket(n,i,{maxPayload:this.options.maxPayload,skipUTF8Validation:this.options.skipUTF8Validation}),this.clients&&(this.clients.add(c),c.on("close",(()=>{this.clients.delete(c),this._shouldEmitClose&&!this.clients.size&&process.nextTick(hr,this)}))),o(c,s)}};function hr(e){e._state=2,e.emit("close")}function fr(){this.destroy()}function dr(e,t,r,s){e.writable&&(r=r||er.STATUS_CODES[t],s={Connection:"close","Content-Type":"text/html","Content-Length":Buffer.byteLength(r),...s},e.write(`HTTP/1.1 ${t} ${er.STATUS_CODES[t]}\r\n`+Object.keys(s).map((e=>`${e}: ${s[e]}`)).join("\r\n")+"\r\n\r\n"+r)),e.removeListener("error",fr),e.destroy()}const ur=Ct;ur.createWebSocketStream=Zt,ur.Server=lr,ur.Receiver=we,ur.Sender=Be,ur.WebSocket=ur,ur.WebSocketServer=ur.Server;var pr=ur,_r=require("child_process"),mr=require("events"),yr=require("url"),gr=pr.Server,vr="mpeg1video",br="drawtext=x=w-tw-100:y=100:fontcolor=white:fontsize=36:text=水印QQ:421354532:box=1:boxcolor=black,scale=-1:-1,eq=",Sr=["vcodec","c:v","-c:v","codec:v"],wr=["-s","-b:v","scale","contrast","brightness","saturation","gamma"].concat(Sr),kr=["scale","contrast","brightness","saturation","gamma"],xr=function(e,t){switch(e){case"-s":if(t.includes("x")&&t.split("x")[0]&&t.split("x")[0]>0&&t.split("x")[1]&&t.split("x")[1]>0)return!0;break;case"vcodec":case"c:v":case"-c:v":case"codec:v":case"contrast":case"brightness":case"saturation":case"gamma":if(t)return!0;break;case"-b:v":if(t.endsWith("k"))return!0;break;case"scale":if(t.includes(":")&&t.split(":")[0]&&t.split(":")[1])return!0}},Er=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&x(e,t)}(r,mr.EventEmitter);var t=C(r);function r(e){var s;return v(this,r),w(E(s=t.call(this)),"exitCode",void 0),w(E(s),"additionalFlags",[]),w(E(s),"stream",null),w(E(s),"inputStreamStarted",!1),s.options=e,s.ffmpegPath=e.ffmpegPath||"ffmpeg",s.url=e.url,s.ffmpegOptions=e.ffmpegOptions,s.initMpeg2Muxer(),s}return S(r,[{key:"initMpeg2Muxer",value:function(){var e=this;if(this.ffmpegOptions)for(var t in this.ffmpegOptions)this.additionalFlags.push(t),""!==String(this.ffmpegOptions[t])&&this.additionalFlags.push(String(this.ffmpegOptions[t]));this.spawnOptions=["-rtsp_transport","tcp","-thread_queue_size","256","-i",this.url,"-f","mpegts"].concat(N(this.additionalFlags),["-nostats","-r","29.97","-"]),this.stream=_r.spawn(this.ffmpegPath,this.spawnOptions,{detached:!1}),this.stream.on("error",(function(e,t){console.error("启动ffmpeg时出错,请确保你安装了ffmpeg,然后检查路径或者命令参数")})),this.stream.on("close",(function(t,r){return console.log("ffmpeg关闭,code:",t),e.emit("ffmpegClosed")})),this.stream.on("exit",(function(t,r){if(1===t)return console.error("***由于ffmpeg退出,ffmpeg启动不成功,请检查ffmpeg参数或相关情况或联系作者***"),e.exitCode=1,e.emit("exitWithError")})),this.inputStreamStarted=!0,this.stream.stdout.on("data",(function(t){return e.emit("mpeg2data",t)})),this.stream.stderr.on("data",(function(t){return e.emit("ffmpegStderr",t)}))}}]),r}(),Or=function(){function e(t){v(this,e),w(this,"freeTime",0),w(this,"isStreamWrap",!1),w(this,"clients",[]),w(this,"mpeg2Muxer",{instance:null,stream:null,data:null}),this.config=t,this.url=t.url}return S(e,[{key:"createStream",value:function(){var e=this;this.isStreamWrap||(console.log("创建一个新的ffmpeg子进程"),this.isStreamWrap=!0,this.mpeg2Muxer.instance=new Er({ffmpegOptions:this.formatParams(this.config),url:this.url,ffmpegPath:"ffmpeg"}),this.mpeg2Muxer.stream=this.mpeg2Muxer.instance.stream,this.mpeg2Muxer.instance.on("mpeg2data",(function(t){e.broadcast(t)})),this.mpeg2Muxer.instance.on("exitWithError",(function(){})),this.mpeg2Muxer.instance.on("ffmpegClosed",(function(){e.destroy()})))}},{key:"formatParams",value:function(e){for(var t={"-codec:v":vr,"-vf":br},r=0,s=Object.entries(e);r<s.length;r++){var n=T(s[r],2),i=n[0],o=n[1];"wm"===i&&"0"===o&&(t["-vf"]="scale=-1:-1,eq="),wr.includes(i)&&(kr.includes(i)?"scale"===i?t["-vf"]=t["-vf"].replace(/scale=[x0-9\:\-]*/g,"scale=".concat(o)):t["-vf"]+="".concat(i,"=").concat(o,":"):Sr.includes(i)?t["-codec:v"]=o:xr(i,o)&&(t[i]=o))}return t}},{key:"destroy",value:function(){var e,t;null===(e=this.mpeg2Muxer.stream)||void 0===e||e.kill(),this.mpeg2Muxer.stream=null,null===(t=this.mpeg2Muxer.instance)||void 0===t||t.removeAllListeners(),this.mpeg2Muxer.instance=null,this.isStreamWrap=!1,this.dropAllClient()}},{key:"broadcast",value:function(e){var t,r=R(this.clients);try{for(r.s();!(t=r.n()).done;){var s=t.value;s.isSegment&&s.send(e)}}catch(e){r.e(e)}finally{r.f()}}},{key:"addClient",value:function(e){var t=this;e.once("close",(function(){t.dropClient(e)})),this.clients.push(e),this.isStreamWrap||this.createStream(),e.isSegment=!0}},{key:"dropClient",value:function(e){var t=this.clients.indexOf(e);e.isSegment=!1,e.terminate(),e=null,console.log("视频关闭,销毁一个client(ws句柄)"),t>-1&&this.clients.splice(t,1)}},{key:"dropAllClient",value:function(){var e,t=R(this.clients);try{for(t.s();!(e=t.n()).done;){var r=e.value;r.isSegment=!1,r.terminate()}}catch(e){t.e(e)}finally{t.f()}this.clients=[]}}]),e}(),Cr=function(){function e(t){var r=this;v(this,e),w(this,"channels",[]),t&&"boolean"==typeof t.wm&&!t.wm&&(br="scale=-1:-1,eq="),t&&"string"==typeof t.vcodec&&t.vcodec.length>0&&(vr=t.vcodec),setInterval((function(){return r.checkFree()}),1e4),this.wss=new gr({port:t&&t.port||9999}),this.wss.on("connection",(function(e,t){var s=yr.parse(t.url,!0);if(s.query.url){var n=A.exports.decode(s.query.url.toString());s.query.url=n,r.registeClient(e,{url:n,options:s.query})}console.log("一个新的client(ws句柄)连接成功")}))}return S(e,[{key:"registeClient",value:function(e,t){var r=this.getChannel(t.url);r||(r=this.createChannel(t.options,e)),r.addClient(e)}},{key:"getChannel",value:function(e){var t,r=R(this.channels);try{for(r.s();!(t=r.n()).done;){var s=t.value;if(s.url===e)return s}}catch(e){r.e(e)}finally{r.f()}return null}},{key:"createChannel",value:function(e,t){var r=new Or(e,t);return this.channels.push(r),r}},{key:"checkFree",value:function(){var e,t=R(this.channels);try{for(t.s();!(e=t.n()).done;){var r=e.value;r.clients.length>0?r.freeTime=0:r.freeTime+=10,r.freeTime>=60&&this.destroyedChannel(r)}}catch(e){t.e(e)}finally{t.f()}}},{key:"destroyedChannel",value:function(e){var t=this.channels.indexOf(e);t>-1&&(this.channels.splice(t,1),e.destroy())}}]),e}();w(Cr,"version","2.3.0"),module.exports=Cr;
|
|
10
|
+
!function(e,t){!function(r){var s=t,n=e&&e.exports==s&&e,i="object"==typeof U&&U;i.global!==i&&i.window!==i||(r=i);var o=function(e){this.message=e};(o.prototype=new Error).name="InvalidCharacterError";var a=function(e){throw new o(e)},c="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",l=/[\t\n\f\r ]/g,h={encode:function(e){e=String(e),/[^\0-\xFF]/.test(e)&&a("The string to be encoded contains characters outside of the Latin1 range.");for(var t,r,s,n,i=e.length%3,o="",l=-1,h=e.length-i;++l<h;)t=e.charCodeAt(l)<<16,r=e.charCodeAt(++l)<<8,s=e.charCodeAt(++l),o+=c.charAt((n=t+r+s)>>18&63)+c.charAt(n>>12&63)+c.charAt(n>>6&63)+c.charAt(63&n);return 2==i?(t=e.charCodeAt(l)<<8,r=e.charCodeAt(++l),o+=c.charAt((n=t+r)>>10)+c.charAt(n>>4&63)+c.charAt(n<<2&63)+"="):1==i&&(n=e.charCodeAt(l),o+=c.charAt(n>>2)+c.charAt(n<<4&63)+"=="),o},decode:function(e){var t=(e=String(e).replace(l,"")).length;t%4==0&&(t=(e=e.replace(/==?$/,"")).length),(t%4==1||/[^+a-zA-Z0-9/]/.test(e))&&a("Invalid character: the string to be decoded is not correctly encoded.");for(var r,s,n=0,i="",o=-1;++o<t;)s=c.indexOf(e.charAt(o)),r=n%4?64*r+s:s,n++%4&&(i+=String.fromCharCode(255&r>>(-2*n&6)));return i},version:"1.0.0"};if(s&&!s.nodeType)if(n)n.exports=h;else for(var f in h)h.hasOwnProperty(f)&&(s[f]=h[f]);else r.base64=h}(U)}(M,M.exports);var W={exports:{}},F={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{EMPTY_BUFFER:D}=F;function j(e,t){if(0===e.length)return D;if(1===e.length)return e[0];const r=Buffer.allocUnsafe(t);let s=0;for(let t=0;t<e.length;t++){const n=e[t];r.set(n,s),s+=n.length}return s<t?r.slice(0,s):r}function $(e,t,r,s,n){for(let i=0;i<n;i++)r[s+i]=e[i]^t[3&i]}function q(e,t){for(let r=0;r<e.length;r++)e[r]^=t[3&r]}function G(e){return e.byteLength===e.buffer.byteLength?e.buffer:e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength)}function V(e){if(V.readOnly=!0,Buffer.isBuffer(e))return e;let t;return e instanceof ArrayBuffer?t=Buffer.from(e):ArrayBuffer.isView(e)?t=Buffer.from(e.buffer,e.byteOffset,e.byteLength):(t=Buffer.from(e),V.readOnly=!1),t}try{const e=require("bufferutil");W.exports={concat:j,mask(t,r,s,n,i){i<48?$(t,r,s,n,i):e.mask(t,r,s,n,i)},toArrayBuffer:G,toBuffer:V,unmask(t,r){t.length<32?q(t,r):e.unmask(t,r)}}}catch(e){W.exports={concat:j,mask:$,toArrayBuffer:G,toBuffer:V,unmask:q}}const z=Symbol("kDone"),H=Symbol("kRun");var Y=class{constructor(e){this[z]=()=>{this.pending--,this[H]()},this.concurrency=e||1/0,this.jobs=[],this.pending=0}add(e){this.jobs.push(e),this[H]()}[H](){if(this.pending!==this.concurrency&&this.jobs.length){const e=this.jobs.shift();this.pending++,e(this[z])}}};const X=b.default,Z=W.exports,K=Y,{kStatusCode:Q}=F,J=Buffer.from([0,0,255,255]),ee=Symbol("permessage-deflate"),te=Symbol("total-length"),re=Symbol("callback"),se=Symbol("buffers"),ne=Symbol("error");let ie;var oe=class{constructor(e,t,r){if(this._maxPayload=0|r,this._options=e||{},this._threshold=void 0!==this._options.threshold?this._options.threshold:1024,this._isServer=!!t,this._deflate=null,this._inflate=null,this.params=null,!ie){const e=void 0!==this._options.concurrencyLimit?this._options.concurrencyLimit:10;ie=new K(e)}}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:null==this._options.clientMaxWindowBits&&(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[re];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,r=e.find((e=>!(!1===t.serverNoContextTakeover&&e.server_no_context_takeover||e.server_max_window_bits&&(!1===t.serverMaxWindowBits||"number"==typeof t.serverMaxWindowBits&&t.serverMaxWindowBits>e.server_max_window_bits)||"number"==typeof t.clientMaxWindowBits&&!e.client_max_window_bits)));if(!r)throw new Error("None of the extension offers can be accepted");return t.serverNoContextTakeover&&(r.server_no_context_takeover=!0),t.clientNoContextTakeover&&(r.client_no_context_takeover=!0),"number"==typeof t.serverMaxWindowBits&&(r.server_max_window_bits=t.serverMaxWindowBits),"number"==typeof t.clientMaxWindowBits?r.client_max_window_bits=t.clientMaxWindowBits:!0!==r.client_max_window_bits&&!1!==t.clientMaxWindowBits||delete r.client_max_window_bits,r}acceptAsClient(e){const t=e[0];if(!1===this._options.clientNoContextTakeover&&t.client_no_context_takeover)throw new Error('Unexpected parameter "client_no_context_takeover"');if(t.client_max_window_bits){if(!1===this._options.clientMaxWindowBits||"number"==typeof this._options.clientMaxWindowBits&&t.client_max_window_bits>this._options.clientMaxWindowBits)throw new Error('Unexpected or invalid parameter "client_max_window_bits"')}else"number"==typeof this._options.clientMaxWindowBits&&(t.client_max_window_bits=this._options.clientMaxWindowBits);return t}normalizeParams(e){return e.forEach((e=>{Object.keys(e).forEach((t=>{let r=e[t];if(r.length>1)throw new Error(`Parameter "${t}" must have only a single value`);if(r=r[0],"client_max_window_bits"===t){if(!0!==r){const e=+r;if(!Number.isInteger(e)||e<8||e>15)throw new TypeError(`Invalid value for parameter "${t}": ${r}`);r=e}else if(!this._isServer)throw new TypeError(`Invalid value for parameter "${t}": ${r}`)}else if("server_max_window_bits"===t){const e=+r;if(!Number.isInteger(e)||e<8||e>15)throw new TypeError(`Invalid value for parameter "${t}": ${r}`);r=e}else{if("client_no_context_takeover"!==t&&"server_no_context_takeover"!==t)throw new Error(`Unknown parameter "${t}"`);if(!0!==r)throw new TypeError(`Invalid value for parameter "${t}": ${r}`)}e[t]=r}))})),e}decompress(e,t,r){ie.add((s=>{this._decompress(e,t,((e,t)=>{s(),r(e,t)}))}))}compress(e,t,r){ie.add((s=>{this._compress(e,t,((e,t)=>{s(),r(e,t)}))}))}_decompress(e,t,r){const s=this._isServer?"client":"server";if(!this._inflate){const e=`${s}_max_window_bits`,t="number"!=typeof this.params[e]?X.Z_DEFAULT_WINDOWBITS:this.params[e];this._inflate=X.createInflateRaw({...this._options.zlibInflateOptions,windowBits:t}),this._inflate[ee]=this,this._inflate[te]=0,this._inflate[se]=[],this._inflate.on("error",le),this._inflate.on("data",ce)}this._inflate[re]=r,this._inflate.write(e),t&&this._inflate.write(J),this._inflate.flush((()=>{const e=this._inflate[ne];if(e)return this._inflate.close(),this._inflate=null,void r(e);const n=Z.concat(this._inflate[se],this._inflate[te]);this._inflate._readableState.endEmitted?(this._inflate.close(),this._inflate=null):(this._inflate[te]=0,this._inflate[se]=[],t&&this.params[`${s}_no_context_takeover`]&&this._inflate.reset()),r(null,n)}))}_compress(e,t,r){const s=this._isServer?"server":"client";if(!this._deflate){const e=`${s}_max_window_bits`,t="number"!=typeof this.params[e]?X.Z_DEFAULT_WINDOWBITS:this.params[e];this._deflate=X.createDeflateRaw({...this._options.zlibDeflateOptions,windowBits:t}),this._deflate[te]=0,this._deflate[se]=[],this._deflate.on("data",ae)}this._deflate[re]=r,this._deflate.write(e),this._deflate.flush(X.Z_SYNC_FLUSH,(()=>{if(!this._deflate)return;let e=Z.concat(this._deflate[se],this._deflate[te]);t&&(e=e.slice(0,e.length-4)),this._deflate[re]=null,this._deflate[te]=0,this._deflate[se]=[],t&&this.params[`${s}_no_context_takeover`]&&this._deflate.reset(),r(null,e)}))}};function ae(e){this[se].push(e),this[te]+=e.length}function ce(e){this[te]+=e.length,this[ee]._maxPayload<1||this[te]<=this[ee]._maxPayload?this[se].push(e):(this[ne]=new RangeError("Max payload size exceeded"),this[ne].code="WS_ERR_UNSUPPORTED_MESSAGE_LENGTH",this[ne][Q]=1009,this.removeListener("data",ce),this.reset())}function le(e){this[ee]._inflate=null,e[Q]=1007,this[re](e)}var he={exports:{}};const fe=[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 de(e){return e>=1e3&&e<=1014&&1004!==e&&1005!==e&&1006!==e||e>=3e3&&e<=4999}function ue(e){const t=e.length;let r=0;for(;r<t;)if(0==(128&e[r]))r++;else if(192==(224&e[r])){if(r+1===t||128!=(192&e[r+1])||192==(254&e[r]))return!1;r+=2}else if(224==(240&e[r])){if(r+2>=t||128!=(192&e[r+1])||128!=(192&e[r+2])||224===e[r]&&128==(224&e[r+1])||237===e[r]&&160==(224&e[r+1]))return!1;r+=3}else{if(240!=(248&e[r]))return!1;if(r+3>=t||128!=(192&e[r+1])||128!=(192&e[r+2])||128!=(192&e[r+3])||240===e[r]&&128==(240&e[r+1])||244===e[r]&&e[r+1]>143||e[r]>244)return!1;r+=4}return!0}try{const e=require("utf-8-validate");he.exports={isValidStatusCode:de,isValidUTF8:t=>t.length<150?ue(t):e(t),tokenChars:fe}}catch(e){he.exports={isValidStatusCode:de,isValidUTF8:ue,tokenChars:fe}}const{Writable:pe}=v.default,_e=oe,{BINARY_TYPES:me,EMPTY_BUFFER:ye,kStatusCode:ve,kWebSocket:ge}=F,{concat:be,toArrayBuffer:Se,unmask:we}=W.exports,{isValidStatusCode:ke,isValidUTF8:xe}=he.exports;var Ee=class extends pe{constructor(e={}){super(),this._binaryType=e.binaryType||me[0],this._extensions=e.extensions||{},this._isServer=!!e.isServer,this._maxPayload=0|e.maxPayload,this._skipUTF8Validation=!!e.skipUTF8Validation,this[ge]=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=0,this._loop=!1}_write(e,t,r){if(8===this._opcode&&0==this._state)return r();this._bufferedBytes+=e.length,this._buffers.push(e),this.startLoop(r)}consume(e){if(this._bufferedBytes-=e,e===this._buffers[0].length)return this._buffers.shift();if(e<this._buffers[0].length){const t=this._buffers[0];return this._buffers[0]=t.slice(e),t.slice(0,e)}const t=Buffer.allocUnsafe(e);do{const r=this._buffers[0],s=t.length-e;e>=r.length?t.set(this._buffers.shift(),s):(t.set(new Uint8Array(r.buffer,r.byteOffset,e),s),this._buffers[0]=r.slice(e)),e-=r.length}while(e>0);return t}startLoop(e){let t;this._loop=!0;do{switch(this._state){case 0:t=this.getInfo();break;case 1:t=this.getPayloadLength16();break;case 2:t=this.getPayloadLength64();break;case 3:this.getMask();break;case 4:t=this.getData(e);break;default:return void(this._loop=!1)}}while(this._loop);e(t)}getInfo(){if(this._bufferedBytes<2)return void(this._loop=!1);const e=this.consume(2);if(0!=(48&e[0]))return this._loop=!1,Oe(RangeError,"RSV2 and RSV3 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_2_3");const t=64==(64&e[0]);if(t&&!this._extensions[_e.extensionName])return this._loop=!1,Oe(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");if(this._fin=128==(128&e[0]),this._opcode=15&e[0],this._payloadLength=127&e[1],0===this._opcode){if(t)return this._loop=!1,Oe(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");if(!this._fragmented)return this._loop=!1,Oe(RangeError,"invalid opcode 0",!0,1002,"WS_ERR_INVALID_OPCODE");this._opcode=this._fragmented}else if(1===this._opcode||2===this._opcode){if(this._fragmented)return this._loop=!1,Oe(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");this._compressed=t}else{if(!(this._opcode>7&&this._opcode<11))return this._loop=!1,Oe(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");if(!this._fin)return this._loop=!1,Oe(RangeError,"FIN must be set",!0,1002,"WS_ERR_EXPECTED_FIN");if(t)return this._loop=!1,Oe(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");if(this._payloadLength>125)return this._loop=!1,Oe(RangeError,`invalid payload length ${this._payloadLength}`,!0,1002,"WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH")}if(this._fin||this._fragmented||(this._fragmented=this._opcode),this._masked=128==(128&e[1]),this._isServer){if(!this._masked)return this._loop=!1,Oe(RangeError,"MASK must be set",!0,1002,"WS_ERR_EXPECTED_MASK")}else if(this._masked)return this._loop=!1,Oe(RangeError,"MASK must be clear",!0,1002,"WS_ERR_UNEXPECTED_MASK");if(126===this._payloadLength)this._state=1;else{if(127!==this._payloadLength)return this.haveLength();this._state=2}}getPayloadLength16(){if(!(this._bufferedBytes<2))return this._payloadLength=this.consume(2).readUInt16BE(0),this.haveLength();this._loop=!1}getPayloadLength64(){if(this._bufferedBytes<8)return void(this._loop=!1);const e=this.consume(8),t=e.readUInt32BE(0);return t>Math.pow(2,21)-1?(this._loop=!1,Oe(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,Oe(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");this._masked?this._state=3:this._state=4}getMask(){this._bufferedBytes<4?this._loop=!1:(this._mask=this.consume(4),this._state=4)}getData(e){let t=ye;if(this._payloadLength){if(this._bufferedBytes<this._payloadLength)return void(this._loop=!1);t=this.consume(this._payloadLength),this._masked&&0!=(this._mask[0]|this._mask[1]|this._mask[2]|this._mask[3])&&we(t,this._mask)}return this._opcode>7?this.controlMessage(t):this._compressed?(this._state=5,void this.decompress(t,e)):(t.length&&(this._messageLength=this._totalPayloadLength,this._fragments.push(t)),this.dataMessage())}decompress(e,t){this._extensions[_e.extensionName].decompress(e,this._fin,((e,r)=>{if(e)return t(e);if(r.length){if(this._messageLength+=r.length,this._messageLength>this._maxPayload&&this._maxPayload>0)return t(Oe(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH"));this._fragments.push(r)}const s=this.dataMessage();if(s)return t(s);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=[],2===this._opcode){let r;r="nodebuffer"===this._binaryType?be(t,e):"arraybuffer"===this._binaryType?Se(be(t,e)):t,this.emit("message",r,!0)}else{const r=be(t,e);if(!this._skipUTF8Validation&&!xe(r))return this._loop=!1,Oe(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");this.emit("message",r,!1)}}this._state=0}controlMessage(e){if(8===this._opcode)if(this._loop=!1,0===e.length)this.emit("conclude",1005,ye),this.end();else{if(1===e.length)return Oe(RangeError,"invalid payload length 1",!0,1002,"WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH");{const t=e.readUInt16BE(0);if(!ke(t))return Oe(RangeError,`invalid status code ${t}`,!0,1002,"WS_ERR_INVALID_CLOSE_CODE");const r=e.slice(2);if(!this._skipUTF8Validation&&!xe(r))return Oe(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");this.emit("conclude",t,r),this.end()}}else 9===this._opcode?this.emit("ping",e):this.emit("pong",e);this._state=0}};function Oe(e,t,r,s,n){const i=new e(r?`Invalid WebSocket frame: ${t}`:t);return Error.captureStackTrace(i,Oe),i.code=n,i[ve]=s,i}const{randomFillSync:Ce}=y.default,Te=oe,{EMPTY_BUFFER:Ne}=F,{isValidStatusCode:Le}=he.exports,{mask:Pe,toBuffer:Re}=W.exports,Be=Symbol("kByteLength"),Ae=Buffer.alloc(4);class Ie{constructor(e,t,r){this._extensions=t||{},r&&(this._generateMask=r,this._maskBuffer=Buffer.alloc(4)),this._socket=e,this._firstFragment=!0,this._compress=!1,this._bufferedBytes=0,this._deflating=!1,this._queue=[]}static frame(e,t){let r,s,n=!1,i=2,o=!1;t.mask&&(r=t.maskBuffer||Ae,t.generateMask?t.generateMask(r):Ce(r,0,4),o=0==(r[0]|r[1]|r[2]|r[3]),i=6),"string"==typeof e?s=t.mask&&!o||void 0===t[Be]?(e=Buffer.from(e)).length:t[Be]:(s=e.length,n=t.mask&&t.readOnly&&!o);let a=s;s>=65536?(i+=8,a=127):s>125&&(i+=2,a=126);const c=Buffer.allocUnsafe(n?s+i:i);return c[0]=t.fin?128|t.opcode:t.opcode,t.rsv1&&(c[0]|=64),c[1]=a,126===a?c.writeUInt16BE(s,2):127===a&&(c[2]=c[3]=0,c.writeUIntBE(s,4,6)),t.mask?(c[1]|=128,c[i-4]=r[0],c[i-3]=r[1],c[i-2]=r[2],c[i-1]=r[3],o?[c,e]:n?(Pe(e,r,c,i,s),[c]):(Pe(e,r,e,0,s),[c,e])):[c,e]}close(e,t,r,s){let n;if(void 0===e)n=Ne;else{if("number"!=typeof e||!Le(e))throw new TypeError("First argument must be a valid error code number");if(void 0!==t&&t.length){const r=Buffer.byteLength(t);if(r>123)throw new RangeError("The message must not be greater than 123 bytes");n=Buffer.allocUnsafe(2+r),n.writeUInt16BE(e,0),"string"==typeof t?n.write(t,2):n.set(t,2)}else n=Buffer.allocUnsafe(2),n.writeUInt16BE(e,0)}const i={[Be]:n.length,fin:!0,generateMask:this._generateMask,mask:r,maskBuffer:this._maskBuffer,opcode:8,readOnly:!1,rsv1:!1};this._deflating?this.enqueue([this.dispatch,n,!1,i,s]):this.sendFrame(Ie.frame(n,i),s)}ping(e,t,r){let s,n;if("string"==typeof e?(s=Buffer.byteLength(e),n=!1):(s=(e=Re(e)).length,n=Re.readOnly),s>125)throw new RangeError("The data size must not be greater than 125 bytes");const i={[Be]:s,fin:!0,generateMask:this._generateMask,mask:t,maskBuffer:this._maskBuffer,opcode:9,readOnly:n,rsv1:!1};this._deflating?this.enqueue([this.dispatch,e,!1,i,r]):this.sendFrame(Ie.frame(e,i),r)}pong(e,t,r){let s,n;if("string"==typeof e?(s=Buffer.byteLength(e),n=!1):(s=(e=Re(e)).length,n=Re.readOnly),s>125)throw new RangeError("The data size must not be greater than 125 bytes");const i={[Be]:s,fin:!0,generateMask:this._generateMask,mask:t,maskBuffer:this._maskBuffer,opcode:10,readOnly:n,rsv1:!1};this._deflating?this.enqueue([this.dispatch,e,!1,i,r]):this.sendFrame(Ie.frame(e,i),r)}send(e,t,r){const s=this._extensions[Te.extensionName];let n,i,o=t.binary?2:1,a=t.compress;if("string"==typeof e?(n=Buffer.byteLength(e),i=!1):(n=(e=Re(e)).length,i=Re.readOnly),this._firstFragment?(this._firstFragment=!1,a&&s&&s.params[s._isServer?"server_no_context_takeover":"client_no_context_takeover"]&&(a=n>=s._threshold),this._compress=a):(a=!1,o=0),t.fin&&(this._firstFragment=!0),s){const s={[Be]:n,fin:t.fin,generateMask:this._generateMask,mask:t.mask,maskBuffer:this._maskBuffer,opcode:o,readOnly:i,rsv1:a};this._deflating?this.enqueue([this.dispatch,e,this._compress,s,r]):this.dispatch(e,this._compress,s,r)}else this.sendFrame(Ie.frame(e,{[Be]:n,fin:t.fin,generateMask:this._generateMask,mask:t.mask,maskBuffer:this._maskBuffer,opcode:o,readOnly:i,rsv1:!1}),r)}dispatch(e,t,r,s){if(!t)return void this.sendFrame(Ie.frame(e,r),s);const n=this._extensions[Te.extensionName];this._bufferedBytes+=r[Be],this._deflating=!0,n.compress(e,r.fin,((e,t)=>{if(this._socket.destroyed){const e=new Error("The socket was closed while data was being compressed");"function"==typeof s&&s(e);for(let t=0;t<this._queue.length;t++){const r=this._queue[t],s=r[r.length-1];"function"==typeof s&&s(e)}}else this._bufferedBytes-=r[Be],this._deflating=!1,r.readOnly=!1,this.sendFrame(Ie.frame(t,r),s),this.dequeue()}))}dequeue(){for(;!this._deflating&&this._queue.length;){const e=this._queue.shift();this._bufferedBytes-=e[3][Be],Reflect.apply(e[0],this,e.slice(1))}}enqueue(e){this._bufferedBytes+=e[3][Be],this._queue.push(e)}sendFrame(e,t){2===e.length?(this._socket.cork(),this._socket.write(e[0]),this._socket.write(e[1],t),this._socket.uncork()):this._socket.write(e[0],t)}}var Ue=Ie;const{kForOnEventAttribute:Me,kListener:We}=F,Fe=Symbol("kCode"),De=Symbol("kData"),je=Symbol("kError"),$e=Symbol("kMessage"),qe=Symbol("kReason"),Ge=Symbol("kTarget"),Ve=Symbol("kType"),ze=Symbol("kWasClean");class He{constructor(e){this[Ge]=null,this[Ve]=e}get target(){return this[Ge]}get type(){return this[Ve]}}Object.defineProperty(He.prototype,"target",{enumerable:!0}),Object.defineProperty(He.prototype,"type",{enumerable:!0});class Ye extends He{constructor(e,t={}){super(e),this[Fe]=void 0===t.code?0:t.code,this[qe]=void 0===t.reason?"":t.reason,this[ze]=void 0!==t.wasClean&&t.wasClean}get code(){return this[Fe]}get reason(){return this[qe]}get wasClean(){return this[ze]}}Object.defineProperty(Ye.prototype,"code",{enumerable:!0}),Object.defineProperty(Ye.prototype,"reason",{enumerable:!0}),Object.defineProperty(Ye.prototype,"wasClean",{enumerable:!0});class Xe extends He{constructor(e,t={}){super(e),this[je]=void 0===t.error?null:t.error,this[$e]=void 0===t.message?"":t.message}get error(){return this[je]}get message(){return this[$e]}}Object.defineProperty(Xe.prototype,"error",{enumerable:!0}),Object.defineProperty(Xe.prototype,"message",{enumerable:!0});class Ze extends He{constructor(e,t={}){super(e),this[De]=void 0===t.data?null:t.data}get data(){return this[De]}}Object.defineProperty(Ze.prototype,"data",{enumerable:!0});const Ke={addEventListener(e,t,r={}){let s;if("message"===e)s=function(e,r){const s=new Ze("message",{data:r?e:e.toString()});s[Ge]=this,t.call(this,s)};else if("close"===e)s=function(e,r){const s=new Ye("close",{code:e,reason:r.toString(),wasClean:this._closeFrameReceived&&this._closeFrameSent});s[Ge]=this,t.call(this,s)};else if("error"===e)s=function(e){const r=new Xe("error",{error:e,message:e.message});r[Ge]=this,t.call(this,r)};else{if("open"!==e)return;s=function(){const e=new He("open");e[Ge]=this,t.call(this,e)}}s[Me]=!!r[Me],s[We]=t,r.once?this.once(e,s):this.on(e,s)},removeEventListener(e,t){for(const r of this.listeners(e))if(r[We]===t&&!r[Me]){this.removeListener(e,r);break}}};var Qe={CloseEvent:Ye,ErrorEvent:Xe,Event:He,EventTarget:Ke,MessageEvent:Ze};const{tokenChars:Je}=he.exports;function et(e,t,r){void 0===e[t]?e[t]=[r]:e[t].push(r)}var tt={format:function(e){return Object.keys(e).map((t=>{let r=e[t];return Array.isArray(r)||(r=[r]),r.map((e=>[t].concat(Object.keys(e).map((t=>{let r=e[t];return Array.isArray(r)||(r=[r]),r.map((e=>!0===e?t:`${t}=${e}`)).join("; ")}))).join("; "))).join(", ")})).join(", ")},parse:function(e){const t=Object.create(null);let r,s,n=Object.create(null),i=!1,o=!1,a=!1,c=-1,l=-1,h=-1,f=0;for(;f<e.length;f++)if(l=e.charCodeAt(f),void 0===r)if(-1===h&&1===Je[l])-1===c&&(c=f);else if(0===f||32!==l&&9!==l){if(59!==l&&44!==l)throw new SyntaxError(`Unexpected character at index ${f}`);{if(-1===c)throw new SyntaxError(`Unexpected character at index ${f}`);-1===h&&(h=f);const s=e.slice(c,h);44===l?(et(t,s,n),n=Object.create(null)):r=s,c=h=-1}}else-1===h&&-1!==c&&(h=f);else if(void 0===s)if(-1===h&&1===Je[l])-1===c&&(c=f);else if(32===l||9===l)-1===h&&-1!==c&&(h=f);else if(59===l||44===l){if(-1===c)throw new SyntaxError(`Unexpected character at index ${f}`);-1===h&&(h=f),et(n,e.slice(c,h),!0),44===l&&(et(t,r,n),n=Object.create(null),r=void 0),c=h=-1}else{if(61!==l||-1===c||-1!==h)throw new SyntaxError(`Unexpected character at index ${f}`);s=e.slice(c,f),c=h=-1}else if(o){if(1!==Je[l])throw new SyntaxError(`Unexpected character at index ${f}`);-1===c?c=f:i||(i=!0),o=!1}else if(a)if(1===Je[l])-1===c&&(c=f);else if(34===l&&-1!==c)a=!1,h=f;else{if(92!==l)throw new SyntaxError(`Unexpected character at index ${f}`);o=!0}else if(34===l&&61===e.charCodeAt(f-1))a=!0;else if(-1===h&&1===Je[l])-1===c&&(c=f);else if(-1===c||32!==l&&9!==l){if(59!==l&&44!==l)throw new SyntaxError(`Unexpected character at index ${f}`);{if(-1===c)throw new SyntaxError(`Unexpected character at index ${f}`);-1===h&&(h=f);let o=e.slice(c,h);i&&(o=o.replace(/\\/g,""),i=!1),et(n,s,o),44===l&&(et(t,r,n),n=Object.create(null),r=void 0),s=void 0,c=h=-1}}else-1===h&&(h=f);if(-1===c||a||32===l||9===l)throw new SyntaxError("Unexpected end of input");-1===h&&(h=f);const d=e.slice(c,h);return void 0===r?et(t,d,n):(void 0===s?et(n,d,!0):et(n,s,i?d.replace(/\\/g,""):d),et(t,r,n)),t}};const rt=p.default,st=d.default,nt=f.default,it=_.default,ot=m.default,{randomBytes:at,createHash:ct}=y.default,{URL:lt}=g.default,ht=oe,ft=Ee,dt=Ue,{BINARY_TYPES:ut,EMPTY_BUFFER:pt,GUID:_t,kForOnEventAttribute:mt,kListener:yt,kStatusCode:vt,kWebSocket:gt,NOOP:bt}=F,{EventTarget:{addEventListener:St,removeEventListener:wt}}=Qe,{format:kt,parse:xt}=tt,{toBuffer:Et}=W.exports,Ot=["CONNECTING","OPEN","CLOSING","CLOSED"],Ct=/^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/,Tt=[8,13];class Nt extends rt{constructor(e,t,r){super(),this._binaryType=ut[0],this._closeCode=1006,this._closeFrameReceived=!1,this._closeFrameSent=!1,this._closeMessage=pt,this._closeTimer=null,this._extensions={},this._paused=!1,this._protocol="",this._readyState=Nt.CONNECTING,this._receiver=null,this._sender=null,this._socket=null,null!==e?(this._bufferedAmount=0,this._isServer=!1,this._redirects=0,void 0===t?t=[]:Array.isArray(t)||("object"==typeof t&&null!==t?(r=t,t=[]):t=[t]),Pt(this,e,t,r)):this._isServer=!0}get binaryType(){return this._binaryType}set binaryType(e){ut.includes(e)&&(this._binaryType=e,this._receiver&&(this._receiver._binaryType=e))}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(e,t,r){const s=new ft({binaryType:this.binaryType,extensions:this._extensions,isServer:this._isServer,maxPayload:r.maxPayload,skipUTF8Validation:r.skipUTF8Validation});this._sender=new dt(e,this._extensions,r.generateMask),this._receiver=s,this._socket=e,s[gt]=this,e[gt]=this,s.on("conclude",Mt),s.on("drain",Wt),s.on("error",Ft),s.on("message",jt),s.on("ping",$t),s.on("pong",qt),e.setTimeout(0),e.setNoDelay(),t.length>0&&e.unshift(t),e.on("close",Vt),e.on("data",zt),e.on("end",Ht),e.on("error",Yt),this._readyState=Nt.OPEN,this.emit("open")}emitClose(){if(!this._socket)return this._readyState=Nt.CLOSED,void this.emit("close",this._closeCode,this._closeMessage);this._extensions[ht.extensionName]&&this._extensions[ht.extensionName].cleanup(),this._receiver.removeAllListeners(),this._readyState=Nt.CLOSED,this.emit("close",this._closeCode,this._closeMessage)}close(e,t){if(this.readyState!==Nt.CLOSED){if(this.readyState===Nt.CONNECTING){const e="WebSocket was closed before the connection was established";return It(this,this._req,e)}this.readyState!==Nt.CLOSING?(this._readyState=Nt.CLOSING,this._sender.close(e,t,!this._isServer,(e=>{e||(this._closeFrameSent=!0,(this._closeFrameReceived||this._receiver._writableState.errorEmitted)&&this._socket.end())})),this._closeTimer=setTimeout(this._socket.destroy.bind(this._socket),3e4)):this._closeFrameSent&&(this._closeFrameReceived||this._receiver._writableState.errorEmitted)&&this._socket.end()}}pause(){this.readyState!==Nt.CONNECTING&&this.readyState!==Nt.CLOSED&&(this._paused=!0,this._socket.pause())}ping(e,t,r){if(this.readyState===Nt.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");"function"==typeof e?(r=e,e=t=void 0):"function"==typeof t&&(r=t,t=void 0),"number"==typeof e&&(e=e.toString()),this.readyState===Nt.OPEN?(void 0===t&&(t=!this._isServer),this._sender.ping(e||pt,t,r)):Ut(this,e,r)}pong(e,t,r){if(this.readyState===Nt.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");"function"==typeof e?(r=e,e=t=void 0):"function"==typeof t&&(r=t,t=void 0),"number"==typeof e&&(e=e.toString()),this.readyState===Nt.OPEN?(void 0===t&&(t=!this._isServer),this._sender.pong(e||pt,t,r)):Ut(this,e,r)}resume(){this.readyState!==Nt.CONNECTING&&this.readyState!==Nt.CLOSED&&(this._paused=!1,this._receiver._writableState.needDrain||this._socket.resume())}send(e,t,r){if(this.readyState===Nt.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if("function"==typeof t&&(r=t,t={}),"number"==typeof e&&(e=e.toString()),this.readyState!==Nt.OPEN)return void Ut(this,e,r);const s={binary:"string"!=typeof e,mask:!this._isServer,compress:!0,fin:!0,...t};this._extensions[ht.extensionName]||(s.compress=!1),this._sender.send(e||pt,s,r)}terminate(){if(this.readyState!==Nt.CLOSED){if(this.readyState===Nt.CONNECTING){const e="WebSocket was closed before the connection was established";return It(this,this._req,e)}this._socket&&(this._readyState=Nt.CLOSING,this._socket.destroy())}}}Object.defineProperty(Nt,"CONNECTING",{enumerable:!0,value:Ot.indexOf("CONNECTING")}),Object.defineProperty(Nt.prototype,"CONNECTING",{enumerable:!0,value:Ot.indexOf("CONNECTING")}),Object.defineProperty(Nt,"OPEN",{enumerable:!0,value:Ot.indexOf("OPEN")}),Object.defineProperty(Nt.prototype,"OPEN",{enumerable:!0,value:Ot.indexOf("OPEN")}),Object.defineProperty(Nt,"CLOSING",{enumerable:!0,value:Ot.indexOf("CLOSING")}),Object.defineProperty(Nt.prototype,"CLOSING",{enumerable:!0,value:Ot.indexOf("CLOSING")}),Object.defineProperty(Nt,"CLOSED",{enumerable:!0,value:Ot.indexOf("CLOSED")}),Object.defineProperty(Nt.prototype,"CLOSED",{enumerable:!0,value:Ot.indexOf("CLOSED")}),["binaryType","bufferedAmount","extensions","isPaused","protocol","readyState","url"].forEach((e=>{Object.defineProperty(Nt.prototype,e,{enumerable:!0})})),["open","error","close","message"].forEach((e=>{Object.defineProperty(Nt.prototype,`on${e}`,{enumerable:!0,get(){for(const t of this.listeners(e))if(t[mt])return t[yt];return null},set(t){for(const t of this.listeners(e))if(t[mt]){this.removeListener(e,t);break}"function"==typeof t&&this.addEventListener(e,t,{[mt]:!0})}})})),Nt.prototype.addEventListener=St,Nt.prototype.removeEventListener=wt;var Lt=Nt;function Pt(e,t,r,s){const n={protocolVersion:Tt[1],maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!0,followRedirects:!1,maxRedirects:10,...s,createConnection:void 0,socketPath:void 0,hostname:void 0,protocol:void 0,timeout:void 0,method:void 0,host:void 0,path:void 0,port:void 0};if(!Tt.includes(n.protocolVersion))throw new RangeError(`Unsupported protocol version: ${n.protocolVersion} (supported versions: ${Tt.join(", ")})`);let i;if(t instanceof lt)i=t,e._url=t.href;else{try{i=new lt(t)}catch(e){throw new SyntaxError(`Invalid URL: ${t}`)}e._url=t}const o="wss:"===i.protocol,a="ws+unix:"===i.protocol;let c;if("ws:"===i.protocol||o||a?a&&!i.pathname?c="The URL's pathname is empty":i.hash&&(c="The URL contains a fragment identifier"):c='The URL\'s protocol must be one of "ws:", "wss:", or "ws+unix:"',c){const t=new SyntaxError(c);if(0===e._redirects)throw t;return void Rt(e,t)}const l=o?443:80,h=at(16).toString("base64"),f=o?st.get:nt.get,d=new Set;let u;if(n.createConnection=o?At:Bt,n.defaultPort=n.defaultPort||l,n.port=i.port||l,n.host=i.hostname.startsWith("[")?i.hostname.slice(1,-1):i.hostname,n.headers={"Sec-WebSocket-Version":n.protocolVersion,"Sec-WebSocket-Key":h,Connection:"Upgrade",Upgrade:"websocket",...n.headers},n.path=i.pathname+i.search,n.timeout=n.handshakeTimeout,n.perMessageDeflate&&(u=new ht(!0!==n.perMessageDeflate?n.perMessageDeflate:{},!1,n.maxPayload),n.headers["Sec-WebSocket-Extensions"]=kt({[ht.extensionName]:u.offer()})),r.length){for(const e of r){if("string"!=typeof e||!Ct.test(e)||d.has(e))throw new SyntaxError("An invalid or duplicated subprotocol was specified");d.add(e)}n.headers["Sec-WebSocket-Protocol"]=r.join(",")}if(n.origin&&(n.protocolVersion<13?n.headers["Sec-WebSocket-Origin"]=n.origin:n.headers.Origin=n.origin),(i.username||i.password)&&(n.auth=`${i.username}:${i.password}`),a){const e=n.path.split(":");n.socketPath=e[0],n.path=e[1]}if(n.followRedirects){if(0===e._redirects){e._originalHost=i.host;const t=s&&s.headers;if(s={...s,headers:{}},t)for(const[e,r]of Object.entries(t))s.headers[e.toLowerCase()]=r}else i.host!==e._originalHost&&(delete n.headers.authorization,delete n.headers.cookie,delete n.headers.host,n.auth=void 0);n.auth&&!s.headers.authorization&&(s.headers.authorization="Basic "+Buffer.from(n.auth).toString("base64"))}let p=e._req=f(n);n.timeout&&p.on("timeout",(()=>{It(e,p,"Opening handshake has timed out")})),p.on("error",(t=>{null===p||p.aborted||(p=e._req=null,Rt(e,t))})),p.on("response",(i=>{const o=i.headers.location,a=i.statusCode;if(o&&n.followRedirects&&a>=300&&a<400){if(++e._redirects>n.maxRedirects)return void It(e,p,"Maximum redirects exceeded");let i;p.abort();try{i=new lt(o,t)}catch(t){const r=new SyntaxError(`Invalid URL: ${o}`);return void Rt(e,r)}Pt(e,i,r,s)}else e.emit("unexpected-response",p,i)||It(e,p,`Unexpected server response: ${i.statusCode}`)})),p.on("upgrade",((t,r,s)=>{if(e.emit("upgrade",t),e.readyState!==Nt.CONNECTING)return;p=e._req=null;const i=ct("sha1").update(h+_t).digest("base64");if(t.headers["sec-websocket-accept"]!==i)return void It(e,r,"Invalid Sec-WebSocket-Accept header");const o=t.headers["sec-websocket-protocol"];let a;if(void 0!==o?d.size?d.has(o)||(a="Server sent an invalid subprotocol"):a="Server sent a subprotocol but none was requested":d.size&&(a="Server sent no subprotocol"),a)return void It(e,r,a);o&&(e._protocol=o);const c=t.headers["sec-websocket-extensions"];if(void 0!==c){if(!u){return void It(e,r,"Server sent a Sec-WebSocket-Extensions header but no extension was requested")}let t;try{t=xt(c)}catch(t){return void It(e,r,"Invalid Sec-WebSocket-Extensions header")}const s=Object.keys(t);if(1!==s.length||s[0]!==ht.extensionName){return void It(e,r,"Server indicated an extension that was not requested")}try{u.accept(t[ht.extensionName])}catch(t){return void It(e,r,"Invalid Sec-WebSocket-Extensions header")}e._extensions[ht.extensionName]=u}e.setSocket(r,s,{generateMask:n.generateMask,maxPayload:n.maxPayload,skipUTF8Validation:n.skipUTF8Validation})}))}function Rt(e,t){e._readyState=Nt.CLOSING,e.emit("error",t),e.emitClose()}function Bt(e){return e.path=e.socketPath,it.connect(e)}function At(e){return e.path=void 0,e.servername||""===e.servername||(e.servername=it.isIP(e.host)?"":e.host),ot.connect(e)}function It(e,t,r){e._readyState=Nt.CLOSING;const s=new Error(r);Error.captureStackTrace(s,It),t.setHeader?(t.abort(),t.socket&&!t.socket.destroyed&&t.socket.destroy(),t.once("abort",e.emitClose.bind(e)),e.emit("error",s)):(t.destroy(s),t.once("error",e.emit.bind(e,"error")),t.once("close",e.emitClose.bind(e)))}function Ut(e,t,r){if(t){const r=Et(t).length;e._socket?e._sender._bufferedBytes+=r:e._bufferedAmount+=r}if(r){r(new Error(`WebSocket is not open: readyState ${e.readyState} (${Ot[e.readyState]})`))}}function Mt(e,t){const r=this[gt];r._closeFrameReceived=!0,r._closeMessage=t,r._closeCode=e,void 0!==r._socket[gt]&&(r._socket.removeListener("data",zt),process.nextTick(Gt,r._socket),1005===e?r.close():r.close(e,t))}function Wt(){const e=this[gt];e.isPaused||e._socket.resume()}function Ft(e){const t=this[gt];void 0!==t._socket[gt]&&(t._socket.removeListener("data",zt),process.nextTick(Gt,t._socket),t.close(e[vt])),t.emit("error",e)}function Dt(){this[gt].emitClose()}function jt(e,t){this[gt].emit("message",e,t)}function $t(e){const t=this[gt];t.pong(e,!t._isServer,bt),t.emit("ping",e)}function qt(e){this[gt].emit("pong",e)}function Gt(e){e.resume()}function Vt(){const e=this[gt];let t;this.removeListener("close",Vt),this.removeListener("data",zt),this.removeListener("end",Ht),e._readyState=Nt.CLOSING,this._readableState.endEmitted||e._closeFrameReceived||e._receiver._writableState.errorEmitted||null===(t=e._socket.read())||e._receiver.write(t),e._receiver.end(),this[gt]=void 0,clearTimeout(e._closeTimer),e._receiver._writableState.finished||e._receiver._writableState.errorEmitted?e.emitClose():(e._receiver.on("error",Dt),e._receiver.on("finish",Dt))}function zt(e){this[gt]._receiver.write(e)||this.pause()}function Ht(){const e=this[gt];e._readyState=Nt.CLOSING,e._receiver.end(),this.end()}function Yt(){const e=this[gt];this.removeListener("error",Yt),this.on("error",bt),e&&(e._readyState=Nt.CLOSING,this.destroy())}const{Duplex:Xt}=v.default;function Zt(e){e.emit("close")}function Kt(){!this.destroyed&&this._writableState.finished&&this.destroy()}function Qt(e){this.removeListener("error",Qt),this.destroy(),0===this.listenerCount("error")&&this.emit("error",e)}var Jt=function(e,t){let r=!0;const s=new Xt({...t,autoDestroy:!1,emitClose:!1,objectMode:!1,writableObjectMode:!1});return e.on("message",(function(t,r){const n=!r&&s._readableState.objectMode?t.toString():t;s.push(n)||e.pause()})),e.once("error",(function(e){s.destroyed||(r=!1,s.destroy(e))})),e.once("close",(function(){s.destroyed||s.push(null)})),s._destroy=function(t,n){if(e.readyState===e.CLOSED)return n(t),void process.nextTick(Zt,s);let i=!1;e.once("error",(function(e){i=!0,n(e)})),e.once("close",(function(){i||n(t),process.nextTick(Zt,s)})),r&&e.terminate()},s._final=function(t){e.readyState!==e.CONNECTING?null!==e._socket&&(e._socket._writableState.finished?(t(),s._readableState.endEmitted&&s.destroy()):(e._socket.once("finish",(function(){t()})),e.close())):e.once("open",(function(){s._final(t)}))},s._read=function(){e.isPaused&&e.resume()},s._write=function(t,r,n){e.readyState!==e.CONNECTING?e.send(t,n):e.once("open",(function(){s._write(t,r,n)}))},s.on("end",Kt),s.on("error",Qt),s};const{tokenChars:er}=he.exports;var tr={parse:function(e){const t=new Set;let r=-1,s=-1,n=0;for(;n<e.length;n++){const i=e.charCodeAt(n);if(-1===s&&1===er[i])-1===r&&(r=n);else if(0===n||32!==i&&9!==i){if(44!==i)throw new SyntaxError(`Unexpected character at index ${n}`);{if(-1===r)throw new SyntaxError(`Unexpected character at index ${n}`);-1===s&&(s=n);const i=e.slice(r,s);if(t.has(i))throw new SyntaxError(`The "${i}" subprotocol is duplicated`);t.add(i),r=s=-1}}else-1===s&&-1!==r&&(s=n)}if(-1===r||-1!==s)throw new SyntaxError("Unexpected end of input");const i=e.slice(r,n);if(t.has(i))throw new SyntaxError(`The "${i}" subprotocol is duplicated`);return t.add(i),t}};const rr=p.default,sr=f.default,{createHash:nr}=y.default,ir=tt,or=oe,ar=tr,cr=Lt,{GUID:lr,kWebSocket:hr}=F,fr=/^[+/0-9A-Za-z]{22}==$/;var dr=class extends rr{constructor(e,t){if(super(),null==(e={maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!1,handleProtocols:null,clientTracking:!0,verifyClient:null,noServer:!1,backlog:null,server:null,host:null,path:null,port:null,WebSocket:cr,...e}).port&&!e.server&&!e.noServer||null!=e.port&&(e.server||e.noServer)||e.server&&e.noServer)throw new TypeError('One and only one of the "port", "server", or "noServer" options must be specified');if(null!=e.port?(this._server=sr.createServer(((e,t)=>{const r=sr.STATUS_CODES[426];t.writeHead(426,{"Content-Length":r.length,"Content-Type":"text/plain"}),t.end(r)})),this._server.listen(e.port,e.host,e.backlog,t)):e.server&&(this._server=e.server),this._server){const e=this.emit.bind(this,"connection");this._removeListeners=function(e,t){for(const r of Object.keys(t))e.on(r,t[r]);return function(){for(const r of Object.keys(t))e.removeListener(r,t[r])}}(this._server,{listening:this.emit.bind(this,"listening"),error:this.emit.bind(this,"error"),upgrade:(t,r,s)=>{this.handleUpgrade(t,r,s,e)}})}!0===e.perMessageDeflate&&(e.perMessageDeflate={}),e.clientTracking&&(this.clients=new Set,this._shouldEmitClose=!1),this.options=e,this._state=0}address(){if(this.options.noServer)throw new Error('The server is operating in "noServer" mode');return this._server?this._server.address():null}close(e){if(2===this._state)return e&&this.once("close",(()=>{e(new Error("The server is not running"))})),void process.nextTick(ur,this);if(e&&this.once("close",e),1!==this._state)if(this._state=1,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(ur,this);else{const e=this._server;this._removeListeners(),this._removeListeners=this._server=null,e.close((()=>{ur(this)}))}}shouldHandle(e){if(this.options.path){const t=e.url.indexOf("?");if((-1!==t?e.url.slice(0,t):e.url)!==this.options.path)return!1}return!0}handleUpgrade(e,t,r,s){t.on("error",pr);const n=void 0!==e.headers["sec-websocket-key"]&&e.headers["sec-websocket-key"],i=+e.headers["sec-websocket-version"];if("GET"!==e.method||"websocket"!==e.headers.upgrade.toLowerCase()||!n||!fr.test(n)||8!==i&&13!==i||!this.shouldHandle(e))return _r(t,400);const o=e.headers["sec-websocket-protocol"];let a=new Set;if(void 0!==o)try{a=ar.parse(o)}catch(e){return _r(t,400)}const c=e.headers["sec-websocket-extensions"],l={};if(this.options.perMessageDeflate&&void 0!==c){const e=new or(this.options.perMessageDeflate,!0,this.options.maxPayload);try{const t=ir.parse(c);t[or.extensionName]&&(e.accept(t[or.extensionName]),l[or.extensionName]=e)}catch(e){return _r(t,400)}}if(this.options.verifyClient){const o={origin:e.headers[""+(8===i?"sec-websocket-origin":"origin")],secure:!(!e.socket.authorized&&!e.socket.encrypted),req:e};if(2===this.options.verifyClient.length)return void this.options.verifyClient(o,((i,o,c,h)=>{if(!i)return _r(t,o||401,c,h);this.completeUpgrade(l,n,a,e,t,r,s)}));if(!this.options.verifyClient(o))return _r(t,401)}this.completeUpgrade(l,n,a,e,t,r,s)}completeUpgrade(e,t,r,s,n,i,o){if(!n.readable||!n.writable)return n.destroy();if(n[hr])throw new Error("server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration");if(this._state>0)return _r(n,503);const a=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${nr("sha1").update(t+lr).digest("base64")}`],c=new this.options.WebSocket(null);if(r.size){const e=this.options.handleProtocols?this.options.handleProtocols(r,s):r.values().next().value;e&&(a.push(`Sec-WebSocket-Protocol: ${e}`),c._protocol=e)}if(e[or.extensionName]){const t=e[or.extensionName].params,r=ir.format({[or.extensionName]:[t]});a.push(`Sec-WebSocket-Extensions: ${r}`),c._extensions=e}this.emit("headers",a,s),n.write(a.concat("\r\n").join("\r\n")),n.removeListener("error",pr),c.setSocket(n,i,{maxPayload:this.options.maxPayload,skipUTF8Validation:this.options.skipUTF8Validation}),this.clients&&(this.clients.add(c),c.on("close",(()=>{this.clients.delete(c),this._shouldEmitClose&&!this.clients.size&&process.nextTick(ur,this)}))),o(c,s)}};function ur(e){e._state=2,e.emit("close")}function pr(){this.destroy()}function _r(e,t,r,s){e.writable&&(r=r||sr.STATUS_CODES[t],s={Connection:"close","Content-Type":"text/html","Content-Length":Buffer.byteLength(r),...s},e.write(`HTTP/1.1 ${t} ${sr.STATUS_CODES[t]}\r\n`+Object.keys(s).map((e=>`${e}: ${s[e]}`)).join("\r\n")+"\r\n\r\n"+r)),e.removeListener("error",pr),e.destroy()}const mr=Lt;mr.createWebSocketStream=Jt,mr.Server=dr,mr.Receiver=Ee,mr.Sender=Ue,mr.WebSocket=mr,mr.WebSocketServer=mr.Server;var yr=mr,vr=require("child_process"),gr=require("events"),br=require("url"),Sr=yr.Server,wr="mpeg1video",kr="drawtext=x=w-tw-100:y=100:fontcolor=white:fontsize=36:text=水印QQ:421354532:box=1:boxcolor=black,scale=-1:-1,eq=",xr=["vcodec","c:v","-c:v","codec:v"],Er=["-s","-b:v","scale","contrast","brightness","saturation","gamma"].concat(xr),Or=["scale","contrast","brightness","saturation","gamma"],Cr=function(e,t){switch(e){case"-s":if(t.includes("x")&&t.split("x")[0]&&t.split("x")[0]>0&&t.split("x")[1]&&t.split("x")[1]>0)return!0;break;case"vcodec":case"c:v":case"-c:v":case"codec:v":case"contrast":case"brightness":case"saturation":case"gamma":if(t)return!0;break;case"-b:v":if(t.endsWith("k"))return!0;break;case"scale":if(t.includes(":")&&t.split(":")[0]&&t.split(":")[1])return!0}},Tr=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&C(e,t)}(r,gr.EventEmitter);var t=L(r);function r(e){var s;return w(this,r),E(T(s=t.call(this)),"exitCode",void 0),E(T(s),"additionalFlags",[]),E(T(s),"stream",null),E(T(s),"inputStreamStarted",!1),s.options=e,s.ffmpegPath=e.ffmpegPath||"ffmpeg",s.url=e.url,s.ffmpegOptions=e.ffmpegOptions,s.initMpeg2Muxer(),s}return x(r,[{key:"initMpeg2Muxer",value:function(){var e=this;if(this.ffmpegOptions)for(var t in this.ffmpegOptions)this.additionalFlags.push(t),""!==String(this.ffmpegOptions[t])&&this.additionalFlags.push(String(this.ffmpegOptions[t]));this.spawnOptions=["-rtsp_transport","tcp","-thread_queue_size","256","-i",this.url,"-f","mpegts"].concat(R(this.additionalFlags),["-nostats","-r","29.97","-"]),this.stream=vr.spawn(this.ffmpegPath,this.spawnOptions,{detached:!1}),this.stream.on("error",(function(e,t){console.error("启动ffmpeg时出错,请确保你安装了ffmpeg,然后检查路径或者命令参数")})),this.stream.on("close",(function(t,r){return console.log("ffmpeg关闭,code:",t),e.emit("ffmpegClosed")})),this.stream.on("exit",(function(t,r){if(1===t)return console.error("***由于ffmpeg退出,ffmpeg启动不成功,请检查ffmpeg参数或相关情况或联系作者***"),e.exitCode=1,e.emit("exitWithError")})),this.inputStreamStarted=!0,this.stream.stdout.on("data",(function(t){return e.emit("mpeg2data",t)})),this.stream.stderr.on("data",(function(t){return e.emit("ffmpegStderr",t)}))}}]),r}(),Nr=function(){function e(t){w(this,e),E(this,"freeTime",0),E(this,"isStreamWrap",!1),E(this,"clients",[]),E(this,"mpeg2Muxer",{instance:null,stream:null,data:null}),this.config=t,this.url=t.url}return x(e,[{key:"createStream",value:function(){var e=this;this.isStreamWrap||(console.log("创建一个新的ffmpeg子进程"),this.isStreamWrap=!0,this.mpeg2Muxer.instance=new Tr({ffmpegOptions:this.formatParams(this.config),url:this.url,ffmpegPath:"ffmpeg"}),this.mpeg2Muxer.stream=this.mpeg2Muxer.instance.stream,this.mpeg2Muxer.instance.on("mpeg2data",(function(t){e.broadcast(t)})),this.mpeg2Muxer.instance.on("exitWithError",(function(){})),this.mpeg2Muxer.instance.on("ffmpegClosed",(function(){e.destroy()})))}},{key:"formatParams",value:function(e){for(var t={"-codec:v":wr,"-vf":kr},r=0,s=Object.entries(e);r<s.length;r++){var n=P(s[r],2),i=n[0],o=n[1];"wm"===i&&"0"===o&&(t["-vf"]="scale=-1:-1,eq="),Er.includes(i)&&(Or.includes(i)?"scale"===i?t["-vf"]=t["-vf"].replace(/scale=[x0-9\:\-]*/g,"scale=".concat(o)):t["-vf"]+="".concat(i,"=").concat(o,":"):xr.includes(i)?t["-codec:v"]=o:Cr(i,o)&&(t[i]=o))}return t}},{key:"destroy",value:function(){var e,t;null===(e=this.mpeg2Muxer.stream)||void 0===e||e.kill(),this.mpeg2Muxer.stream=null,null===(t=this.mpeg2Muxer.instance)||void 0===t||t.removeAllListeners(),this.mpeg2Muxer.instance=null,this.isStreamWrap=!1,this.dropAllClient()}},{key:"broadcast",value:function(e){var t,r=I(this.clients);try{for(r.s();!(t=r.n()).done;){var s=t.value;s.isSegment&&s.send(e)}}catch(e){r.e(e)}finally{r.f()}}},{key:"addClient",value:function(e){var t=this;e.once("close",(function(){t.dropClient(e)})),this.clients.push(e),this.isStreamWrap||this.createStream(),e.isSegment=!0}},{key:"dropClient",value:function(e){var t=this.clients.indexOf(e);e.isSegment=!1,e.terminate(),e=null,console.log("视频关闭,销毁一个client(ws句柄)"),t>-1&&this.clients.splice(t,1)}},{key:"dropAllClient",value:function(){var e,t=I(this.clients);try{for(t.s();!(e=t.n()).done;){var r=e.value;r.isSegment=!1,r.terminate()}}catch(e){t.e(e)}finally{t.f()}this.clients=[]}}]),e}(),Lr=function(){function e(t){var r=this;w(this,e),E(this,"channels",[]),t&&"boolean"==typeof t.wm&&!t.wm&&(kr="scale=-1:-1,eq="),t&&"string"==typeof t.vcodec&&t.vcodec.length>0&&(wr=t.vcodec),setInterval((function(){return r.checkFree()}),1e4);var s=f.default.createServer();if(t&&"object"===S(t.wss))if(console.log("wss启动中...."),t.wss.hasOwnProperty("pfx"))if(t.wss.hasOwnProperty("passphrase"))try{s=d.default.createServer({pfx:u.default.readFileSync(t.wss.pfx,"utf-8"),passphrase:u.default.readFileSync(t.wss.passphrase,"utf-8")})}catch(e){console.error("--【读取pfx安全证书文件出错,wss启动失败,退回到ws;有问题请联系我】--")}else console.error("【wss启动失败;请传入正确的pfx文件指定密码:passphrase】");else if(t.wss.hasOwnProperty("cert"))if(t.wss.hasOwnProperty("key"))try{s=d.default.createServer({cert:u.default.readFileSync(t.wss.cert,"utf-8"),key:u.default.readFileSync(t.wss.key,"utf-8")})}catch(e){console.error("--【读取cert安全证书文件出错,wss启动失败,退回到ws;有问题请联系我】--")}else console.error("【wss启动失败;请传入正确的安全证书私钥:key】");else console.error("【wss启动失败;请传入正确的安全证书公钥:cert】");this.wss=new Sr({server:s}),this.wss.on("connection",(function(e,t){var s=br.parse(t.url,!0);if(s.query.url){var n=M.exports.decode(s.query.url.toString());s.query.url=n,r.registeClient(e,{url:n,options:s.query})}console.log("一个新的client(ws句柄)连接成功")})),s.listen(t&&t.port||9999)}return x(e,[{key:"registeClient",value:function(e,t){var r=this.getChannel(t.url);r||(r=this.createChannel(t.options,e)),r.addClient(e)}},{key:"getChannel",value:function(e){var t,r=I(this.channels);try{for(r.s();!(t=r.n()).done;){var s=t.value;if(s.url===e)return s}}catch(e){r.e(e)}finally{r.f()}return null}},{key:"createChannel",value:function(e,t){var r=new Nr(e,t);return this.channels.push(r),r}},{key:"checkFree",value:function(){var e,t=I(this.channels);try{for(t.s();!(e=t.n()).done;){var r=e.value;r.clients.length>0?r.freeTime=0:r.freeTime+=10,r.freeTime>=60&&this.destroyedChannel(r)}}catch(e){t.e(e)}finally{t.f()}}},{key:"destroyedChannel",value:function(e){var t=this.channels.indexOf(e);t>-1&&(this.channels.splice(t,1),e.destroy())}}]),e}();E(Lr,"version","2.4.1"),module.exports=Lr;
|
|
11
11
|
//# sourceMappingURL=rtsp2web.min.js.map
|