New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

topgun

Package Overview
Dependencies
Maintainers
1
Versions
31
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

topgun - npm Package Compare versions

Comparing version 1.2.2 to 1.2.3

7

CHANGELOG.md

@@ -0,1 +1,8 @@

## [1.2.3](https://github.com/TopGunBuild/topgun/compare/v1.2.2...v1.2.3) (2023-05-29)
### Bug Fixes
* upgrade topgun-socket 1.4.2 -> 1.4.3 ([4d0c1dd](https://github.com/TopGunBuild/topgun/commit/4d0c1dd9b8c482e07616b0cd641c2a29fd1531d6))
## [1.2.2](https://github.com/TopGunBuild/topgun/compare/v1.2.1...v1.2.2) (2023-05-28)

@@ -2,0 +9,0 @@

2

dist/server.global.js

@@ -1,1 +0,1 @@

var TopGun=(()=>{var At=Object.create;var se=Object.defineProperty;var xt=Object.getOwnPropertyDescriptor;var Dt=Object.getOwnPropertyNames;var Gt=Object.getPrototypeOf,Pt=Object.prototype.hasOwnProperty;var M=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,r)=>(typeof require<"u"?require:t)[r]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw new Error('Dynamic require of "'+e+'" is not supported')});var Ct=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),It=(e,t)=>{for(var r in t)se(e,r,{get:t[r],enumerable:!0})},Be=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of Dt(t))!Pt.call(e,i)&&i!==r&&se(e,i,{get:()=>t[i],enumerable:!(n=xt(t,i))||n.enumerable});return e};var Ot=(e,t,r)=>(r=e!=null?At(Gt(e)):{},Be(t||!e||!e.__esModule?se(r,"default",{value:e,enumerable:!0}):r,e)),Nt=e=>Be(se({},"__esModule",{value:!0}),e);var Xe=Ct((qi,Ye)=>{var $=1e3,F=$*60,J=F*60,j=J*24,qt=j*7,Qt=j*365.25;Ye.exports=function(e,t){t=t||{};var r=typeof e;if(r==="string"&&e.length>0)return Yt(e);if(r==="number"&&isFinite(e))return t.long?zt(e):Xt(e);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(e))};function Yt(e){if(e=String(e),!(e.length>100)){var t=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(e);if(!!t){var r=parseFloat(t[1]),n=(t[2]||"ms").toLowerCase();switch(n){case"years":case"year":case"yrs":case"yr":case"y":return r*Qt;case"weeks":case"week":case"w":return r*qt;case"days":case"day":case"d":return r*j;case"hours":case"hour":case"hrs":case"hr":case"h":return r*J;case"minutes":case"minute":case"mins":case"min":case"m":return r*F;case"seconds":case"second":case"secs":case"sec":case"s":return r*$;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return r;default:return}}}}function Xt(e){var t=Math.abs(e);return t>=j?Math.round(e/j)+"d":t>=J?Math.round(e/J)+"h":t>=F?Math.round(e/F)+"m":t>=$?Math.round(e/$)+"s":e+"ms"}function zt(e){var t=Math.abs(e);return t>=j?he(e,t,j,"day"):t>=J?he(e,t,J,"hour"):t>=F?he(e,t,F,"minute"):t>=$?he(e,t,$,"second"):e+" ms"}function he(e,t,r,n){var i=t>=r*1.5;return Math.round(e/r)+" "+n+(i?"s":"")}});var Wr={};It(Wr,{TGServer:()=>Ee,createServer:()=>Ur});function m(e){return typeof e=="string"}function ae(e){return typeof e=="number"&&Number.isFinite(e)}function Mt(e){return typeof e=="boolean"}function Lt(e){return Array.isArray(e)}function Ue(e){return e===null}function d(e){return typeof e=="object"&&!Ue(e)&&!Lt(e)}var H=(e,t=!1)=>{if(Array.isArray(e))if(t){let r=[];if(!e)return r;let n=e.length;for(;n--;)r[n]=t?H(e[n]):e[n];return r}else return[...e];if(d(e)){let r={};if(t)for(let n of Object.keys(e))r[n]=H(e[n]);else r={...e};return r}return e};function _(e){return{ok:!0,value:e}}function g(e){return{ok:!1,error:e}}function K(e){return e.ok}function Q(e){return!K(e)}var b=class extends Error{constructor(e,t={path:[]}){super(e),this.message=e,this.info=t}toJSON(){return{message:this.message,info:this.info}}};var We=(e="Expecting boolean")=>t=>Mt(t)?_(t):g(new b(e,{input:t,path:[]}));var He=e=>t=>Ue(t)?_(t):e(t),Te=(e="Expecting number")=>t=>ae(t)?_(t):g(new b(e,{input:t,path:[]}));var ke=(e,t="Expecting object")=>{let r=Object.entries(e);return n=>{if(!d(n))return g(new b(t,{input:n,path:[]}));let i=Object.create(null);for(let[s,a]of r){let o=a(n[s]);if(Q(o))return o.error.info.path.unshift(s),o;i[s]=o.value}return _(i)}};var Se=(e,t,r="Expecting object")=>n=>{if(!d(n))return g(new b(r,{input:n,path:[]}));let i=Object.create(null);for(let[s,a]of Object.entries(n)){let o=e(s);if(Q(o))return o.error.info.path.unshift(s),o;let c=t(a);if(Q(c))return c.error.info.path.unshift(s),c;i[o.value]=c.value}return _(i)},Y=(e="Expecting string")=>t=>m(t)?_(t):g(new b(e,{input:t,path:[]}));var Ke=(e,t="Expecting one of the specified structs")=>r=>{for(let n of e){let i=n(r);if(K(i))return i}return g(new b(t,{input:r,path:[]}))};var Rt=crypto,P=Rt;var V={};typeof btoa>"u"?V.btoa=function(e){return ve.from(e,"binary").toString("base64")}:V.btoa=e=>btoa(e);typeof atob>"u"?V.atob=function(e){return ve.from(e,"base64").toString("binary")}:V.atob=e=>atob(e);function oe(){}Object.assign(oe,{from:Array.from});oe.prototype=Object.create(Array.prototype);oe.prototype.toString=function(e,t,r){e=e||"utf8",t=t||0;let n=this.length;if(e==="hex"){let i=new Uint8Array(this),s=(r&&r+1||n)-t,a="";for(let o=0;o<s;o++)a+=i[o+t].toString(16).padStart(2,"0");return a}if(e==="utf8"){let i=(r||n)-t,s="";for(let a=0;a<i;a++)s+=String.fromCharCode(this[a+t]);return s}if(e==="base64")return V.btoa(this)};var D=oe;function L(...e){return console.warn("new SafeBuffer() is depreciated, please use SafeBuffer.from()"),L.from(...e)}L.prototype=Object.create(Array.prototype);Object.assign(L,{from(){if(!Object.keys(arguments).length)throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.");let e=arguments[0],t;if(typeof e=="string"){let r=arguments[1]||"utf8";if(r==="hex"){let n=e.match(/([\da-fA-F]{2})/g).map(i=>parseInt(i,16));if(!n||!n.length)throw new TypeError("Invalid first argument for type 'hex'.");t=D.from(n)}else if(r==="utf8"){let n=e.length,i=new Uint16Array(n);for(let s=0;s<n;s++)i[s]=e.charCodeAt(s);t=D.from(i)}else if(r==="base64"){let n=V.atob(e),i=n.length,s=new Uint8Array(i);for(let a=0;a<i;a++)s[a]=n.charCodeAt(a);t=D.from(s)}else r==="binary"?t=D.from(e):console.info("SafeBuffer.from unknown encoding: "+r);return t}if(e?.byteLength?e.byteLength:e?.length?e?.length:null){let r;return e instanceof ArrayBuffer&&(r=new Uint8Array(e)),D.from(r||e)}},alloc(e,t=0){return D.from(new Uint8Array(Array.from({length:e},()=>t)))},allocUnsafe(e){return D.from(new Uint8Array(Array.from({length:e})))},concat(e){if(!Array.isArray(e))throw new TypeError("First argument must be Array containing ArrayBuffer or Uint8Array instances.");return D.from(e.reduce((t,r)=>t.concat(Array.from(r)),[]))}});L.prototype.from=L.from;L.prototype.toString=D.prototype.toString;var ve=L,jt=ve,T=jt;var X=typeof self=="object"&&self.self===self&&self||typeof window=="object"&&window.global===window&&window||void 0;var z={crypto:P,TextEncoder:X&&X.TextEncoder,TextDecoder:X&&X.TextDecoder};z.random=e=>T.from(w.getRandomValues(new Uint8Array(T.alloc(e))));var Ve=z.random,ce=z.TextEncoder,Bt=z.TextDecoder,w=z.crypto;var $e={hash:{name:"SHA-256"},iter:1e5,ks:64},Z={pair:{name:"ECDSA",namedCurve:"P-256"},sign:{name:"ECDSA",hash:{name:"SHA-256"}}};function _e(e,t){let r=e.split(".");return{crv:"P-256",d:t,ext:!0,key_opts:t?["sign"]:["verify"],kty:"EC",x:r[0],y:r[1]}}function ee(e){try{let t=m(e);return t&&e.slice(0,4)==="SEA{"&&(e=e.slice(3)),t?JSON.parse(e):e}catch{}return e}async function te(e,t="SHA-256"){let r=m(e)?e:JSON.stringify(e),n=new ce().encode(r),i=await w.subtle.digest({name:t},n);return T.from(i)}function R(e=24,t="0123456789ABCDEFGHIJKLMNOPQRSTUVWXZabcdefghijklmnopqrstuvwxyz"){let r="";for(;e>0;)r+=t.charAt(Math.floor(Math.random()*t.length)),e--;return r}var xn={encode:"base64",hash:$e.hash.name,name:"PBKDF2"};var ue={encode:"base64"};function Kt(e){let t=_e(e);return w.subtle.importKey("jwk",t,Z.pair,!1,["verify"])}async function qe(e,t,r,n=ue){let i=n.encode||ue.encode,s=await Kt(r),a=T.from(t,i),o=new Uint8Array(a);return!!await w.subtle.verify(Z.sign,s,o,new Uint8Array(T.from(e,"hex")))}async function Qe(e,t,r,n=ue){let i=await te(m(e)?e:JSON.stringify(e));return qe(i.toString("hex"),t,r,n)}async function le(e,t,r=ue){try{let n=d(t)&&m(t.pub)?t.pub:m(t)?t:"",i=ee(e);return await Qe(i.m,i.s,n,r)?{ct:i.ct,iv:i.iv,s:i.s,e:i.m?.e,w:i.m?.w,c:i.m?.c}:!1}catch{return!1}}var ot=Ot(Xe(),1);function ze(e){switch(e.length%4){case 0:break;case 2:e+="==";break;case 3:e+="=";break;default:throw new Error("Illegal base64url string!")}try{return JSON.parse(decodeURIComponent(escape(atob(e))))}catch{return null}}function Zt(e){return{header:ze(e.split(".")[0].replace(/-/g,"+").replace(/_/g,"/")),payload:ze(e.split(".")[1].replace(/-/g,"+").replace(/_/g,"/"))}}function rt(e){return new Uint8Array(Array.prototype.map.call(atob(e.replace(/-/g,"+").replace(/_/g,"/").replace(/\s/g,"")),t=>t.charCodeAt(0)))}function q(e){return rt(btoa(unescape(encodeURIComponent(e))))}function nt(e){e=atob(e);let t=new ArrayBuffer(e.length),r=new Uint8Array(t);for(let n=0,i=e.length;n<i;n++)r[n]=e.charCodeAt(n);return t}var it={ES256:{name:"ECDSA",namedCurve:"P-256",hash:{name:"SHA-256"}},ES384:{name:"ECDSA",namedCurve:"P-384",hash:{name:"SHA-384"}},ES512:{name:"ECDSA",namedCurve:"P-521",hash:{name:"SHA-512"}},HS256:{name:"HMAC",hash:{name:"SHA-256"}},HS384:{name:"HMAC",hash:{name:"SHA-384"}},HS512:{name:"HMAC",hash:{name:"SHA-512"}},RS256:{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},RS384:{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-384"}},RS512:{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-512"}}};async function st(e,t,r={algorithm:"HS256",throwError:!1},n){typeof r=="string"&&(r={algorithm:r,throwError:!1}),r={algorithm:"HS256",throwError:!1,...r};function i(f){if(n)return n(null,f);throw f}typeof e!="string"&&i(new Error("AuthTokenInvalidError")),typeof t!="string"&&typeof t!="object"&&i(new Error("secret must be a string or a JWK object")),typeof r.algorithm!="string"&&i(new Error("options.algorithm must be a string"));let s=e.split(".");s.length!==3&&i(new Error("token must consist of 3 parts"));let a=it[r.algorithm];a||i(new Error("algorithm not found"));let{payload:o}=Zt(e);if(!o)return r.throwError&&i(new Error("ParseError")),!1;if(o.nbf&&o.nbf>Math.floor(Date.now()/1e3))return r.throwError&&i(new Error("NotYetValid")),!1;if(o.exp&&o.exp<=Math.floor(Date.now()/1e3))return r.throwError&&i(new Error("TokenExpiredError")),!1;let c="raw",u;typeof t=="object"?(c="jwk",u=t):typeof t=="string"&&t.startsWith("-----BEGIN")?(c="spki",u=nt(t.replace(/-----BEGIN.*?-----/g,"").replace(/-----END.*?-----/g,"").replace(/\s/g,""))):u=q(t);let h=await P.subtle.importKey(c,u,a,!1,["verify"]),l=await P.subtle.verify(a,h,rt(s[2]),q(`${s[0]}.${s[1]}`))?o:!1;return typeof n=="function"&&n(null,l),l}function B(e){return typeof e=="string"}function re(e){return typeof e=="number"}function Ze(e){return typeof e=="boolean"}function at(e){if(typeof e!="object"||e===null)return!1;let t=Object.getPrototypeOf(e);return t===null||t===Object.prototype}function et(e,t){let r=t||Math.floor(Date.now()/1e3);if(typeof e=="string"){let n=(0,ot.default)(e);return typeof n>"u"?void 0:Math.floor(r+n/1e3)}else return typeof e=="number"?r+e:void 0}function De(e){return btoa(String.fromCharCode.apply(0,Array.from(e))).replace(/=/g,"").replace(/\+/g,"-").replace(/\//g,"_")}var er=["ES256","ES384","ES512","HS256","HS384","HS512","RS256","RS384","RS512","none"],tr={expiresIn:{isValid:e=>re(e)||B(e)&&e,message:'"expiresIn" should be a number of seconds or string representing a timespan'},notBefore:{isValid:e=>re(e)||B(e)&&e,message:'"notBefore" should be a number of seconds or string representing a timespan'},audience:{isValid:e=>B(e)||Array.isArray(e),message:'"audience" must be a string or array'},algorithm:{isValid:e=>er.includes(e),message:'"algorithm" must be a valid string enum value'},header:{isValid:at,message:'"header" must be an object'},issuer:{isValid:B,message:'"issuer" must be a string'},subject:{isValid:B,message:'"subject" must be a string'},jwtid:{isValid:B,message:'"jwtid" must be a string'},noTimestamp:{isValid:Ze,message:'"noTimestamp" must be a boolean'},keyid:{isValid:B,message:'"keyid" must be a string'},mutatePayload:{isValid:Ze,message:'"mutatePayload" must be a boolean'}},rr={iat:{isValid:re,message:'"iat" should be a number of seconds'},exp:{isValid:re,message:'"exp" should be a number of seconds'},nbf:{isValid:re,message:'"nbf" should be a number of seconds'}};function ct(e,t,r,n){if(!at(r))throw new Error('Expected "'+n+'" to be a plain object.');Object.keys(r).forEach(function(i){let s=e[i];if(!s){if(!t)throw new Error('"'+i+'" is not allowed in "'+n+'"');return}if(!s.isValid(r[i]))throw new Error(s.message)})}function nr(e){return ct(tr,!1,e,"options")}function ir(e){return ct(rr,!0,e,"payload")}var tt={audience:"aud",issuer:"iss",subject:"sub",jwtid:"jti"},sr=["expiresIn","notBefore","noTimestamp","audience","issuer","subject","jwtid"];async function ut(e,t,r,n){typeof r=="function"?(n=r,r={}):r=r||{},r={algorithm:"HS256",...r};let i=typeof e=="object",s=Object.assign({alg:r.algorithm,typ:i?"JWT":void 0},r.header);function a(p){if(n)return n(p);throw p}if(!t&&r.algorithm!=="none"&&a(new Error("secretOrPrivateKey must have a value")),typeof e>"u")a(new Error("payload is required"));else if(i){try{ir(e)}catch(p){a(p)}r.mutatePayload||(e=Object.assign({},e))}else{let p=sr.filter(function(v){return typeof r[v]<"u"});p.length>0&&a(new Error("invalid "+p.join(",")+" option for "+typeof e+" payload"))}typeof e.exp<"u"&&typeof r.expiresIn<"u"&&a(new Error('Bad "options.expiresIn" option the payload already has an "exp" property.')),typeof e.nbf<"u"&&typeof r.notBefore<"u"&&a(new Error('Bad "options.notBefore" option the payload already has an "nbf" property.'));try{nr(r)}catch(p){a(p)}let o=e.iat||Math.floor(Date.now()/1e3);if(r.noTimestamp?delete e.iat:i&&(e.iat=o),typeof r.notBefore<"u"){try{e.nbf=et(r.notBefore,o)}catch(p){a(p)}typeof e.nbf>"u"&&a(new Error('"notBefore" should be a number of seconds or string representing a timespan eg: "1d", "20h", 60'))}if(typeof r.expiresIn<"u"&&typeof e=="object"){try{e.exp=et(r.expiresIn,o)}catch(p){a(p)}typeof e.exp>"u"&&a(new Error('"expiresIn" should be a number of seconds or string representing a timespan eg: "1d", "20h", 60'))}Object.keys(tt).forEach(function(p){let v=tt[p];if(typeof r[p]<"u"){if(typeof e[v]<"u")return a(new Error('Bad "options.'+p+'" option. The payload already has an "'+v+'" property.'));e[v]=r[p]}});let c=JSON.stringify(e),u=`${De(q(JSON.stringify({...s})))}.${De(q(c))}`,h="raw",l;typeof t=="object"?(h="jwk",l=t):typeof t=="string"&&t.startsWith("-----BEGIN")?(h="pkcs8",l=nt(t.replace(/-----BEGIN.*?-----/g,"").replace(/-----END.*?-----/g,"").replace(/\s/g,""))):l=q(t);let f=it[r.algorithm];f||a(new Error("algorithm not found"));let k=await P.subtle.importKey(h,l,f,!1,["sign"]),N=await P.subtle.sign(f,k,q(u)),S=`${u}.${De(new Uint8Array(N))}`;return typeof n=="function"&&n(null,S),S}var lt=Object.defineProperty,ar=(e,t,r)=>t in e?lt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,ht=(e=>typeof M<"u"?M:typeof Proxy<"u"?new Proxy(e,{get:(t,r)=>(typeof M<"u"?M:t)[r]}):e)(function(e){if(typeof M<"u")return M.apply(this,arguments);throw new Error('Dynamic require of "'+e+'" is not supported')}),or=(e,t)=>{for(var r in t)lt(e,r,{get:t[r],enumerable:!0})},x=(e,t,r)=>(ar(e,typeof t!="symbol"?t+"":t,r),r),Ie=class{next(e){return this.createAsyncIterator(e).next()}async once(e){let t=await this.next(e);return t.done&&await new Promise(()=>{}),t.value}createAsyncIterator(e){throw new TypeError("Method must be overriden by subclass")}createAsyncIterable(e){return{[Symbol.asyncIterator]:()=>this.createAsyncIterator(e)}}[Symbol.asyncIterator](){return this.createAsyncIterator()}},cr=class extends Ie{name;_streamDemux;constructor(e,t){super(),this.name=t,this._streamDemux=e}createAsyncIterator(e){return this._streamDemux.createAsyncIterator(this.name,e)}},ur=class extends Ie{_nextConsumerId;_consumers;_linkedListTailNode;constructor(){super(),this._nextConsumerId=1,this._consumers={},this._linkedListTailNode={next:null}}write(e){this._write(e,!1)}close(){this._write(void 0,!0)}async _waitForNextDataNode(e){return new Promise((t,r)=>{let n,i=this._nextConsumerId++;if(e!==void 0){let s=new Error("Stream consumer iteration timed out");(async()=>{let a=lr(e);n=a.timeoutId,await a.promise,s.name="TimeoutError",delete this._consumers[i],r(s)})()}this._consumers[i]={resolve:t,timeoutId:n}})}createAsyncIterator(e){let t=this._linkedListTailNode;return{next:async()=>(t.next||await this._waitForNextDataNode(e),t=t.next,t.data)}}_write(e,t){let r={data:{value:e,done:t},next:null};this._linkedListTailNode.next=r,this._linkedListTailNode=r,Object.values(this._consumers).forEach(n=>{n.timeoutId!==void 0&&clearTimeout(n.timeoutId),n.resolve()}),this._consumers={},this._nextConsumerId=1}};function lr(e=0){let t,r=new Promise(n=>{t=setTimeout(n,e)});return{timeoutId:t,promise:r}}var ne=class{_mainStream;constructor(){this._mainStream=new ur}write(e,t){this._write(e,t,!1)}close(e,t){this._write(e,t,!0)}closeAll(){this._mainStream.close()}createAsyncIterator(e,t){let r=this._mainStream.createAsyncIterator(t);return{next:async()=>{for(;;){let n=await r.next();if(n.done)return n;if(n.value.name===e)return n.value.data}}}}stream(e){return new cr(this,e)}_write(e,t,r){this._mainStream.write({name:e,data:{value:t,done:r}})}},be=class{_listenerDemux;constructor(){this._listenerDemux=new ne}emit(e,t){this._listenerDemux.write(e,t)}listener(e){return this._listenerDemux.stream(e)}closeListener(e){this._listenerDemux.close(e)}closeAllListeners(){this._listenerDemux.closeAll()}};function hr(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{let t=Math.random()*16|0;return(e==="x"?t:t&3|8).toString(16)})}function dr(){return Math.abs(Math.random()*Math.random()*Date.now()|0).toString()+Math.abs(Math.random()*Math.random()*Date.now()|0).toString()}function pr(e){let t=[],r=[];return function n(i,s){let a,o,c;if(typeof i=="object"&&i!==null&&!(i instanceof Boolean)&&!(i instanceof Date)&&!(i instanceof Number)&&!(i instanceof RegExp)&&!(i instanceof String)){for(a=0;a<t.length;a+=1)if(t[a]===i)return{$ref:r[a]};if(t.push(i),r.push(s),Object.prototype.toString.apply(i)==="[object Array]")for(c=[],a=0;a<i.length;a+=1)c[a]=n(i[a],s+"["+a+"]");else{c={};for(o in i)Object.prototype.hasOwnProperty.call(i,o)&&(c[o]=n(i[o],s+"["+JSON.stringify(o)+"]"))}return c}return i}(e,"$")}function E(){"use strict";return typeof function(){return this}()>"u"}var Ge=class extends Error{expiry;isBadToken;constructor(e,t){super(e),Object.setPrototypeOf(this,Ge.prototype),this.name="AuthTokenExpiredError",this.message=e,this.expiry=new Date(t),Error.captureStackTrace&&!E()?Error.captureStackTrace(this,arguments.callee):this.stack=new Error().stack}},dt=class extends Error{isBadToken;constructor(e){super(e),Object.setPrototypeOf(this,dt.prototype),this.name="AuthTokenInvalidError",this.message=e,Error.captureStackTrace&&!E()?Error.captureStackTrace(this,arguments.callee):this.stack=new Error().stack}},pt=class extends Error{date;isBadToken;constructor(e,t){super(e),Object.setPrototypeOf(this,pt.prototype),this.name="AuthTokenNotBeforeError",this.message=e,this.date=t,Error.captureStackTrace&&!E()?Error.captureStackTrace(this,arguments.callee):this.stack=new Error().stack}},ye=class extends Error{expiredAt;date;isBadToken;constructor(e){super(e),Object.setPrototypeOf(this,ye.prototype),this.name="AuthTokenError",this.message=e,Error.captureStackTrace&&!E()?Error.captureStackTrace(this,arguments.callee):this.stack=new Error().stack}},ft=class extends Error{constructor(e){super(e),Object.setPrototypeOf(this,ft.prototype),this.name="AuthError",this.message=e,Error.captureStackTrace&&!E()?Error.captureStackTrace(this,arguments.callee):this.stack=new Error().stack}},G=class extends Error{type;constructor(e,t){super(e),Object.setPrototypeOf(this,G.prototype),this.name="SilentMiddlewareBlockedError",this.message=e,this.type=t,Error.captureStackTrace&&!E()?Error.captureStackTrace(this,arguments.callee):this.stack=new Error().stack}},y=class extends Error{constructor(e){super(e),Object.setPrototypeOf(this,y.prototype),this.name="InvalidActionError",this.message=e,Error.captureStackTrace&&!E()?Error.captureStackTrace(this,arguments.callee):this.stack=new Error().stack}},ie=class extends Error{constructor(e){super(e),Object.setPrototypeOf(this,ie.prototype),this.name="InvalidArgumentsError",this.message=e,Error.captureStackTrace&&!E()?Error.captureStackTrace(this,arguments.callee):this.stack=new Error().stack}},pe=class extends Error{constructor(e){super(e),Object.setPrototypeOf(this,pe.prototype),this.name="InvalidOptionsError",this.message=e,Error.captureStackTrace&&!E()?Error.captureStackTrace(this,arguments.callee):this.stack=new Error().stack}},mt=class extends Error{code;constructor(e,t){super(e),Object.setPrototypeOf(this,mt.prototype),this.name="SocketProtocolError",this.message=e,this.code=t,Error.captureStackTrace&&!E()?Error.captureStackTrace(this,arguments.callee):this.stack=new Error().stack}},Pe=class extends Error{constructor(e){super(e),Object.setPrototypeOf(this,Pe.prototype),this.name="ServerProtocolError",this.message=e,Error.captureStackTrace&&!E()?Error.captureStackTrace(this,arguments.callee):this.stack=new Error().stack}},yt=class extends Error{constructor(e){super(e),Object.setPrototypeOf(this,yt.prototype),this.name="TimeoutError",this.message=e,Error.captureStackTrace&&!E()?Error.captureStackTrace(this,arguments.callee):this.stack=new Error().stack}},fe=class extends Error{constructor(e){super(e),Object.setPrototypeOf(this,fe.prototype),this.name="BrokerError",this.message=e,Error.captureStackTrace&&!E()?Error.captureStackTrace(this,arguments.callee):this.stack=new Error().stack}},fr={1001:"Socket was disconnected",1002:"A WebSocket protocol error was encountered",1003:"Server terminated socket because it received invalid data",1005:"Socket closed without status code",1006:"Socket hung up",1007:"Message format was incorrect",1008:"Encountered a policy violation",1009:"Message was too big to process",1010:"Client ended the connection because the server did not comply with extension requirements",1011:"Server encountered an unexpected fatal condition",4e3:"Server ping timed out",4001:"Client pong timed out",4002:"Server failed to sign auth token",4003:"Failed to complete handshake",4004:"Client failed to save auth token",4005:"Did not receive #handshake from client before timeout",4006:"Failed to bind socket to message broker",4007:"Client connection establishment timed out",4008:"Server rejected handshake from client",4009:"Server received a message before the client handshake"},mr={1e3:"Socket closed normally",1001:"Socket hung up"},yr={domain:1,domainEmitter:1,domainThrown:1};function Ce(e,t){let r;if(e&&typeof e=="object"){r={message:e.message},t&&(r.stack=e.stack);for(let n in e)yr[n]||(r[n]=e[n])}else typeof e=="function"?r="[function "+(e.name||"anonymous")+"]":r=e;return pr(r)}function gr(e){let t=null;if(e!=null)if(typeof e=="object"){t=new Error(e.message);for(let r in e)e.hasOwnProperty(r)&&(t[r]=e[r])}else t=e;return t}var br=["00","01","02","03","04","05","06","07","08","09","0a","0b","0c","0d","0e","0f","10","11","12","13","14","15","16","17","18","19","1a","1b","1c","1d","1e","1f","20","21","22","23","24","25","26","27","28","29","2a","2b","2c","2d","2e","2f","30","31","32","33","34","35","36","37","38","39","3a","3b","3c","3d","3e","3f","40","41","42","43","44","45","46","47","48","49","4a","4b","4c","4d","4e","4f","50","51","52","53","54","55","56","57","58","59","5a","5b","5c","5d","5e","5f","60","61","62","63","64","65","66","67","68","69","6a","6b","6c","6d","6e","6f","70","71","72","73","74","75","76","77","78","79","7a","7b","7c","7d","7e","7f","80","81","82","83","84","85","86","87","88","89","8a","8b","8c","8d","8e","8f","90","91","92","93","94","95","96","97","98","99","9a","9b","9c","9d","9e","9f","a0","a1","a2","a3","a4","a5","a6","a7","a8","a9","aa","ab","ac","ad","ae","af","b0","b1","b2","b3","b4","b5","b6","b7","b8","b9","ba","bb","bc","bd","be","bf","c0","c1","c2","c3","c4","c5","c6","c7","c8","c9","ca","cb","cc","cd","ce","cf","d0","d1","d2","d3","d4","d5","d6","d7","d8","d9","da","db","dc","dd","de","df","e0","e1","e2","e3","e4","e5","e6","e7","e8","e9","ea","eb","ec","ed","ee","ef","f0","f1","f2","f3","f4","f5","f6","f7","f8","f9","fa","fb","fc","fd","fe","ff"];function wr(e){let t=0,r="",n=new Uint8Array(e);for(;t<n.length;t++)r+=br[n[t]];return r}function Er(e=9){let t=new Uint8Array(e);try{return wr(t)}catch{return null}}var Tr=class{verifyToken(e,t,r){r=r||{};let n=Object.assign({},r);return delete n.socket,typeof e=="string"||e==null?new Promise((i,s)=>{st(e,t,n).then(a=>{a?i(a):s(new ye("Invalid token"))}).catch(a=>s(a))}):Promise.reject(new ie("Invalid token format - Token must be a string"))}signToken(e,t,r){r=r||{};let n=Object.assign({},r);return new Promise((i,s)=>{ut(e,t,n).then(a=>{a?i(a):s(new ye("Sign token error"))}).catch(a=>s(a))})}},gt={};or(gt,{decode:()=>_r,encode:()=>Ar});var U=typeof self=="object"&&self.self===self&&self||typeof window=="object"&&window.global===window&&window||void 0;function W(){return typeof process=="object"}var de="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",kr=/^[ \n\r\t]*[{\[]/,Sr=e=>{let t=new Uint8Array(e),r=t.length,n="";for(let i=0;i<r;i+=3)n+=de[t[i]>>2],n+=de[(t[i]&3)<<4|t[i+1]>>4],n+=de[(t[i+1]&15)<<2|t[i+2]>>6],n+=de[t[i+2]&63];return r%3===2?n=n.substring(0,n.length-1)+"=":r%3===1&&(n=n.substring(0,n.length-2)+"=="),n},vr=(e,t)=>{if(U.ArrayBuffer&&t instanceof U.ArrayBuffer)return{base64:!0,data:Sr(t)};if(U.Buffer){if(t instanceof U.Buffer)return{base64:!0,data:t.toString("base64")};if(t&&t.type==="Buffer"&&Array.isArray(t.data)){let r;return U.Buffer.from?r=U.Buffer.from(t.data):r=new U.Buffer(t.data),{base64:!0,data:r.toString("base64")}}}return t};function _r(e){if(e===null)return null;if(e==="#1"||e==="#2")return e;let t=e.toString();if(!kr.test(t))return t;try{return JSON.parse(t)}catch{}return t}function Ar(e){return e==="#1"||e==="#2"?e:W()?JSON.stringify(e,vr):JSON.stringify(e)}var xr=class{socket;id;sent;constructor(e,t){this.socket=e,this.id=t,this.sent=!1}end(e,t){if(this.id){let r={rid:this.id};e!==void 0&&(r.data=e),this._respond(r,t)}}error(e,t,r){if(this.id){let n=Ce(e),i={rid:this.id,error:n};t!==void 0&&(i.data=t),this._respond(i,r)}}callback(e,t,r){e?this.error(e,t,r):this.end(t,r)}_respond(e,t){if(this.sent)throw new y(`Response ${this.id} has already been sent`);this.sent=!0,this.socket.sendObject(e,t)}};function Dr(e){return Object.prototype.toString.call(e)==="[object Date]"}function Gr(e){return!!e&&typeof e=="object"&&Object.prototype.toString.call(e)!=="[object Array]"}function ge(e){if(Dr(e))return new Date(e.getTime());if(Array.isArray(e))return[...e].map(t=>ge(t));if(e instanceof Map||e instanceof Set)return e;if(Gr(e)){let t={};for(let r of Object.keys(e))t[r]=ge(e[r]);return t}return e}var I=class extends be{id;server;socket;state;authState;request;remoteAddress;remoteFamily;remotePort;forwardedForAddress;channelSubscriptions;channelSubscriptionsCount;authToken;signedAuthToken;exchange;_handshakeTimeoutRef;CONNECTING=I.CONNECTING;OPEN=I.OPEN;CLOSED=I.CLOSED;AUTHENTICATED=I.AUTHENTICATED;UNAUTHENTICATED=I.UNAUTHENTICATED;_autoAckRPCs;_callbackMap;_pingIntervalTicker;_receiverDemux;_procedureDemux;_cid;_batchSendList;_pingTimeoutTicker;_batchTimeout;constructor(e,t,r){super(),this._autoAckRPCs={"#publish":1},this.id=e,this.server=t,this.socket=r,this.state=this.CONNECTING,this.authState=this.UNAUTHENTICATED,this._receiverDemux=new ne,this._procedureDemux=new ne,this.request=this.socket.upgradeReq||{},this.request.connection?(this.remoteAddress=this.request.connection.remoteAddress,this.remoteFamily=this.request.connection.remoteFamily,this.remotePort=this.request.connection.remotePort):(this.remoteAddress=this.request.remoteAddress,this.remoteFamily=this.request.remoteFamily,this.remotePort=this.request.remotePort),this.request.forwardedForAddress&&(this.forwardedForAddress=this.request.forwardedForAddress),this._cid=1,this._callbackMap={},this._batchSendList=[],this.channelSubscriptions={},this.channelSubscriptionsCount=0,this._on("error",async n=>{this.emitError(n)}),this._on("close",async(n,i)=>{let s=i&&i.toString();this._onClose(n,s)}),this.server.pingTimeoutDisabled||(this._pingIntervalTicker=setInterval(this._sendPing.bind(this),this.server.pingInterval)),this._resetPongTimeout(),this._on("message",async n=>{let i=W()?n:n.data;this._resetPongTimeout(),this.emit("message",{message:i});let s;try{s=this.decode(i)}catch(a){a.name==="Error"&&(a.name="InvalidMessageError"),this.emitError(a);return}if(s==="#2"){let a=this.getAuthToken();this.server.isAuthTokenExpired(a)&&this.deauthenticate()}else if(Array.isArray(s)){let a=s.length;for(let o=0;o<a;o++)this._handleRemoteEventObject(s[o],i)}else this._handleRemoteEventObject(s,i)})}receiver(e){return this._receiverDemux.stream(e)}closeReceiver(e){this._receiverDemux.close(e)}procedure(e){return this._procedureDemux.stream(e)}closeProcedure(e){this._procedureDemux.close(e)}getState(){return this.state}getBytesReceived(){return this.socket?.bytesReceived}emitError(e){this.emit("error",{error:e})}disconnect(e,t){if(e=e||1e3,typeof e!="number"){let r=new ie("If specified, the code argument must be a number");this.emitError(r)}this.state!==this.CLOSED&&(this._onClose(e,t),this.socket.close(e,t))}terminate(){this.socket.terminate()}send(e,t){W()?this.socket.send(e,t,r=>{r&&this._onClose(1006,r.toString())}):this.socket.send(e)}decode(e){return this.server.codec.decode(e)}encode(e){return this.server.codec.encode(e)}sendObjectBatch(e){this._batchSendList.push(e),!this._batchTimeout&&(this._batchTimeout=setTimeout(()=>{if(delete this._batchTimeout,this._batchSendList.length){let t;try{t=this.encode(this._batchSendList)}catch(r){this.emitError(r)}t!=null&&this.send(t),this._batchSendList=[]}},this.server.options.pubSubBatchDuration||0))}sendObjectSingle(e){let t;try{t=this.encode(e)}catch(r){this.emitError(r)}t!=null&&this.send(t)}sendObject(e,t){t&&t.batch?this.sendObjectBatch(e):this.sendObjectSingle(e)}transmit(e,t,r){return this.server.verifyOutboundEvent(this,e,t,r,(n,i)=>{let s={event:e};i!==void 0&&(s.data=i),n||(r&&r.useCache&&r.stringifiedData!=null?this.send(r.stringifiedData):this.sendObject(s))}),Promise.resolve()}invoke(e,t,r){return new Promise((n,i)=>{this.server.verifyOutboundEvent(this,e,t,r,(s,a)=>{if(s){i(s);return}let o={event:e,cid:this._nextCallId()};a!==void 0&&(o.data=a);let c=setTimeout(()=>{let u=new yt(`Event response for "${e}" timed out`);delete this._callbackMap[o.cid],i(u)},this.server.ackTimeout);this._callbackMap[o.cid]={callback:(u,h)=>{if(u){i(u);return}n(h)},timeout:c},r&&r.useCache&&r.stringifiedData!=null?this.send(r.stringifiedData):this.sendObject(o)})})}triggerAuthenticationEvents(e){if(e!==this.AUTHENTICATED){let t={oldAuthState:e,newAuthState:this.authState,authToken:this.authToken};this.emit("authStateChange",t),this.server.emit("authenticationStateChange",{socket:this,...t})}this.emit("authenticate",{authToken:this.authToken}),this.server.emit("authentication",{socket:this,authToken:this.authToken})}async setAuthToken(e,t){let r=ge(e),n=this.authState;if(this.authState=this.AUTHENTICATED,t==null)t={};else if(t=ge(t),t.algorithm!=null){delete t.algorithm;let l=new ie("Cannot change auth token algorithm at runtime - It must be specified as a config option on launch");this.emitError(l)}t.mutatePayload=!0;let i=t.rejectOnFailedDelivery;delete t.rejectOnFailedDelivery;let s=this.server.defaultSignatureOptions,a;t.expiresIn==null?a=s.expiresIn:a=t.expiresIn,r?r.exp==null?t.expiresIn=a:delete t.expiresIn:t.expiresIn=a,s.algorithm!=null&&(t.algorithm=s.algorithm),this.authToken=r;let o=l=>{throw this.emitError(l),this._onClose(4002,l.toString()),this.socket.close(4002),l},c=async l=>{let f={token:l};try{return await this.invoke("#setAuthToken",f)}catch(k){throw new ft(`Failed to deliver auth token to client - ${k}`)}},u;try{u=this.server.auth.signToken(r,this.server.signatureKey,t)}catch(l){o(l)}let h;if(u instanceof Promise)try{h=await u}catch(l){o(l)}else h=u;this.authToken===r&&(this.signedAuthToken=h,this.emit("authTokenSigned",{signedAuthToken:h})),this.triggerAuthenticationEvents(n);try{await c(h)}catch(l){if(this.emitError(l),i)throw l}}getAuthToken(){return this.authToken}deauthenticateSelf(){let e=this.authState,t=this.authToken;if(this.signedAuthToken=null,this.authToken=null,this.authState=this.UNAUTHENTICATED,e!==this.UNAUTHENTICATED){let r={oldAuthState:e,newAuthState:this.authState};this.emit("authStateChange",r),this.server.emit("authenticationStateChange",{socket:this,...r})}this.emit("deauthenticate",{oldAuthToken:t}),this.server.emit("deauthentication",{socket:this,oldAuthToken:t})}deauthenticate(){return this.deauthenticateSelf(),this.invoke("#removeAuthToken")}kickOut(e,t){return e==null?Object.keys(this.channelSubscriptions).forEach(r=>{delete this.channelSubscriptions[r],this.channelSubscriptionsCount--,this.transmit("#kickOut",{message:t,channel:r})}):(delete this.channelSubscriptions[e],this.channelSubscriptionsCount--,this.transmit("#kickOut",{message:t,channel:e})),this.server.brokerEngine.unsubscribeSocket(this,e)}subscriptions(){return Object.keys(this.channelSubscriptions)}isSubscribed(e){return!!this.channelSubscriptions[e]}_onClose(e,t){if(clearInterval(this._pingIntervalTicker),clearTimeout(this._pingTimeoutTicker),this.state!==this.CLOSED){let r=this.state;if(this.state=this.CLOSED,r===this.CONNECTING?this.emit("connectAbort",{code:e,reason:t}):this.emit("disconnect",{code:e,reason:t}),this.emit("close",{code:e,reason:t}),!I.ignoreStatuses[e]){let n;if(t){let s;if(typeof t=="object")try{s=JSON.stringify(t)}catch{s=t.toString()}else s=t;n=`Socket connection closed with status code ${e} and reason: ${s}`}else n=`Socket connection closed with status code ${e}`;let i=new mt(I.errorStatuses[e]||n,e);this.emitError(i)}}}_sendPing(){this.state!==this.CLOSED&&this.sendObject("#1")}_handleRemoteEventObject(e,t){if(e&&e.event!=null){let r=e.event,n={socket:this,event:r,data:e.data};if(e.cid==null)this.server.verifyInboundRemoteEvent(n,(i,s)=>{i||this._receiverDemux.write(r,s)});else{n.cid=e.cid;let i=new xr(this,n.cid);this.server.verifyInboundRemoteEvent(n,(s,a,o)=>{s?i.error(s):this._autoAckRPCs[r]?o!==void 0?i.end(o):i.end():this._procedureDemux.write(r,{data:a,end:c=>{i.end(c)},error:c=>{i.error(c)}})})}}else if(e&&e.rid!=null){let r=this._callbackMap[e.rid];if(r){clearTimeout(r.timeout),delete this._callbackMap[e.rid];let n=gr(e.error);r.callback(n,e.data)}}else this.emit("raw",{message:t})}_resetPongTimeout(){this.server.pingTimeoutDisabled||(clearTimeout(this._pingTimeoutTicker),this._pingTimeoutTicker=setTimeout(()=>{this._onClose(4001),this.socket.close(4001)},this.server.pingTimeout))}_nextCallId(){return this._cid++}_on(e,t){W()?this.socket.on(e,t):this.socket.addEventListener(e,t)}},O=I;x(O,"CONNECTING","connecting"),x(O,"OPEN","open"),x(O,"CLOSED","closed"),x(O,"AUTHENTICATED","authenticated"),x(O,"UNAUTHENTICATED","unauthenticated"),x(O,"ignoreStatuses",mr),x(O,"errorStatuses",fr);async function Pr(e,t){for(let r=0;r<e.length;r++)await t(e[r],r,e)}async function C(e,...t){let r=typeof t[t.length-1]=="function"?t.pop():()=>{},n=null,i=[];return await Pr(e,async s=>{if(!n)try{let a=await s(...t);i.push(a)}catch(a){i.push(void 0),n=a}}),r(n,i),i}var me=class extends Ie{PENDING;SUBSCRIBED;UNSUBSCRIBED;name;client;_pendingSubscriptionCid;_eventDemux;_dataStream;constructor(e,t,r,n){super(),this.PENDING=me.PENDING,this.SUBSCRIBED=me.SUBSCRIBED,this.UNSUBSCRIBED=me.UNSUBSCRIBED,this.name=e,this.client=t,this._eventDemux=r,this._dataStream=n}get state(){return this.client.getChannelState(this.name)}set state(e){throw new Error("Cannot directly set channel state")}get options(){return this.client.getChannelOptions(this.name)}set options(e){throw new Error("Cannot directly set channel options")}createAsyncIterator(e){return this._dataStream.createAsyncIterator(e)}listener(e){return this._eventDemux.stream(`${this.name}/${e}`)}closeListener(e){this._eventDemux.close(`${this.name}/${e}`)}closeAllListeners(){this._eventDemux.closeAll()}close(){this.client.closeChannel(this.name)}subscribe(e){this.client.subscribe(this.name,e)}unsubscribe(){this.client.unsubscribe(this.name)}isSubscribed(e){return this.client.isSubscribed(this.name,e)}publish(e){return this.client.publish(this.name,e)}},A=me;x(A,"PENDING","pending"),x(A,"SUBSCRIBED","subscribed"),x(A,"UNSUBSCRIBED","unsubscribed");var Cr=class extends be{_broker;_channelMap;_channelEventDemux;_channelDataDemux;constructor(e){super(),this._broker=e,this._channelMap={},this._channelEventDemux=new ne,this._channelDataDemux=new ne,(async()=>{for await(let{channel:t,data:r}of this._broker.listener("publish"))this._channelDataDemux.write(t,r)})()}destroy(){this._broker.closeAllListeners()}publish(e,t){return this._broker.publish(e,t)}subscribe(e){let t=this._channelMap[e];t||(t={name:e,state:A.PENDING},this._channelMap[e]=t,this._triggerChannelSubscribe(t));let r=this._channelDataDemux.stream(e);return new A(e,this,this._channelEventDemux,r)}unsubscribe(e){let t=this._channelMap[e];t&&this._triggerChannelUnsubscribe(t)}channel(e){let t=this._channelDataDemux.stream(e);return new A(e,this,this._channelEventDemux,t)}getChannelState(e){let t=this._channelMap[e];return t?t.state:A.UNSUBSCRIBED}getChannelOptions(e){return{}}subscriptions(e){let t=[];return Object.keys(this._channelMap).forEach(r=>{(e||this._channelMap[r].state===A.SUBSCRIBED)&&t.push(r)}),t}isSubscribed(e,t){let r=this._channelMap[e];return t?!!r:!!r&&r.state===A.SUBSCRIBED}_triggerChannelSubscribe(e){let t=e.name;e.state=A.SUBSCRIBED,this._channelEventDemux.write(`${t}/subscribe`,{}),this.emit("subscribe",{channel:t})}_triggerChannelUnsubscribe(e){let t=e.name;delete this._channelMap[t],e.state===A.SUBSCRIBED&&(this._channelEventDemux.write(`${t}/unsubscribe`,{}),this.emit("unsubscribe",{channel:t}))}},Ir=class extends be{isReady;_exchangeClient;_clientSubscribers;_clientSubscribersCounter;constructor(){super(),this.isReady=!1,this._exchangeClient=new Cr(this),this._clientSubscribers={},this._clientSubscribersCounter={},setTimeout(()=>{this.isReady=!0,this.emit("ready",{})},0)}exchange(){return this._exchangeClient}subscribeSocket(e,t){return this._clientSubscribers[t]||(this._clientSubscribers[t]={},this._clientSubscribersCounter[t]=0),this._clientSubscribers[t][e.id]||(this._clientSubscribersCounter[t]++,this.emit("subscribe",{channel:t})),this._clientSubscribers[t][e.id]=e,Promise.resolve()}unsubscribeSocket(e,t){return this._clientSubscribers[t]&&this._clientSubscribers[t][e.id]&&(this._clientSubscribersCounter[t]--,delete this._clientSubscribers[t][e.id],this._clientSubscribersCounter[t]<=0&&(delete this._clientSubscribers[t],delete this._clientSubscribersCounter[t],this.emit("unsubscribe",{channel:t}))),Promise.resolve()}subscriptions(){return Object.keys(this._clientSubscribers)}isSubscribed(e){return!!this._clientSubscribers[e]}publish(e,t,r){let n={channel:e,data:t},i=this._clientSubscribers[e]||{};return Object.keys(i).forEach(s=>{i[s].transmit("#publish",n)}),r||this.emit("publish",n),Promise.resolve()}},bt=class extends be{options;MIDDLEWARE_HANDSHAKE_WS;MIDDLEWARE_HANDSHAKE_AG;MIDDLEWARE_TRANSMIT;MIDDLEWARE_INVOKE;MIDDLEWARE_SUBSCRIBE;MIDDLEWARE_PUBLISH_IN;MIDDLEWARE_PUBLISH_OUT;MIDDLEWARE_AUTHENTICATE;origins;ackTimeout;handshakeTimeout;pingInterval;pingTimeout;pingTimeoutDisabled;allowClientPublish;perMessageDeflate;httpServer;socketChannelLimit;brokerEngine;appName;middlewareEmitWarnings;isReady;signatureKey;verificationKey;authVerifyAsync;authSignAsync;defaultVerificationOptions;defaultSignatureOptions;auth;codec;clients;clientsCount;pendingClients;pendingClientsCount;exchange;_middleware;_allowAllOrigins;wsServer;_path;constructor(e){super();let t={brokerEngine:new Ir,wsEngine:"ws",wsEngineServerOptions:{},maxPayload:null,allowClientPublish:!0,ackTimeout:1e4,handshakeTimeout:1e4,pingTimeout:2e4,pingTimeoutDisabled:!1,pingInterval:8e3,origins:"*:*",appName:hr(),path:"/topgunsocket/",authDefaultExpiry:86400,authSignAsync:!1,authVerifyAsync:!0,pubSubBatchDuration:null,middlewareEmitWarnings:!0};this.options=Object.assign(t,e||{}),this.MIDDLEWARE_HANDSHAKE_WS="handshakeWS",this.MIDDLEWARE_HANDSHAKE_AG="handshakeAG",this.MIDDLEWARE_TRANSMIT="transmit",this.MIDDLEWARE_INVOKE="invoke",this.MIDDLEWARE_SUBSCRIBE="subscribe",this.MIDDLEWARE_PUBLISH_IN="publishIn",this.MIDDLEWARE_PUBLISH_OUT="publishOut",this.MIDDLEWARE_AUTHENTICATE="authenticate",this._middleware={},this._middleware[this.MIDDLEWARE_HANDSHAKE_WS]=[],this._middleware[this.MIDDLEWARE_HANDSHAKE_AG]=[],this._middleware[this.MIDDLEWARE_TRANSMIT]=[],this._middleware[this.MIDDLEWARE_INVOKE]=[],this._middleware[this.MIDDLEWARE_SUBSCRIBE]=[],this._middleware[this.MIDDLEWARE_PUBLISH_IN]=[],this._middleware[this.MIDDLEWARE_PUBLISH_OUT]=[],this._middleware[this.MIDDLEWARE_AUTHENTICATE]=[],this.origins=t.origins,this._allowAllOrigins=this.origins.indexOf("*:*")!==-1,this.ackTimeout=t.ackTimeout,this.handshakeTimeout=t.handshakeTimeout,this.pingInterval=t.pingInterval,this.pingTimeout=t.pingTimeout,this.pingTimeoutDisabled=t.pingTimeoutDisabled,this.allowClientPublish=t.allowClientPublish,this.perMessageDeflate=t.perMessageDeflate,this.httpServer=t.httpServer,this.socketChannelLimit=t.socketChannelLimit,this.brokerEngine=t.brokerEngine,this.appName=t.appName||"",this.middlewareEmitWarnings=t.middlewareEmitWarnings,this._path=t.path.replace(/\/?$/,"/").replace(/^\/?/,"/"),this.brokerEngine.isReady?(this.isReady=!0,this.emit("ready",{})):(this.isReady=!1,(async()=>(await this.brokerEngine.listener("ready").once(),this.isReady=!0,this.emit("ready",{})))());let r=typeof t.wsEngine=="string"?ht(t.wsEngine):t.wsEngine;if(!r||!r.Server)throw new pe("The wsEngine option must be a path or module name which points to a valid WebSocket engine module with a compatible interface");let n=r.Server;if(t.authPrivateKey!=null||t.authPublicKey!=null){if(t.authPrivateKey==null)throw new pe("The authPrivateKey option must be specified if authPublicKey is specified");if(t.authPublicKey==null)throw new pe("The authPublicKey option must be specified if authPrivateKey is specified");this.signatureKey=t.authPrivateKey,this.verificationKey=t.authPublicKey}else t.authKey==null&&(t.authKey=Er(32)),this.signatureKey=t.authKey,this.verificationKey=t.authKey;this.authVerifyAsync=t.authVerifyAsync,this.authSignAsync=t.authSignAsync,this.defaultVerificationOptions={async:this.authVerifyAsync},t.authVerifyAlgorithms!=null?this.defaultVerificationOptions.algorithms=t.authVerifyAlgorithms:t.authAlgorithm!=null&&(this.defaultVerificationOptions.algorithms=[t.authAlgorithm]),this.defaultSignatureOptions={expiresIn:t.authDefaultExpiry,async:this.authSignAsync},t.authAlgorithm!=null&&(this.defaultSignatureOptions.algorithm=t.authAlgorithm),t.authEngine?this.auth=t.authEngine:this.auth=new Tr,t.codecEngine?this.codec=t.codecEngine:this.codec=gt,this.clients={},this.clientsCount=0,this.pendingClients={},this.pendingClientsCount=0,this.exchange=this.brokerEngine.exchange();let i=t.wsEngineServerOptions||{};i.server=this.httpServer,i.verifyClient=this.verifyHandshake.bind(this),i.path==null&&this._path!=null&&(i.path=this._path),i.perMessageDeflate==null&&this.perMessageDeflate!=null&&(i.perMessageDeflate=this.perMessageDeflate),i.handleProtocols==null&&t.handleProtocols!=null&&(i.handleProtocols=t.handleProtocols),i.maxPayload==null&&t.maxPayload!=null&&(i.maxPayload=t.maxPayload),i.clientTracking==null&&(i.clientTracking=!1),W()?(this.wsServer=new n(i),this.wsServer.on("error",this._handleServerError.bind(this)),this.wsServer.on("connection",this._handleSocketConnection.bind(this))):(this.wsServer=n,this.wsServer.addEventListener("close",this._handleServerError.bind(this)),this.wsServer.addEventListener("error",this._handleServerError.bind(this)),this._handleSocketConnection(n))}setAuthEngine(e){this.auth=e}setCodecEngine(e){this.codec=e}emitError(e){this.emit("error",{error:e})}emitWarning(e){this.emit("warning",{warning:e})}close(e){return this.isReady=!1,new Promise((t,r)=>{if(W()&&this.wsServer.close(n=>{if(n){r(n);return}t()}),!e)for(let n of Object.values(this.clients))n.terminate()})}getPath(){return this._path}generateId(){return dr()}addMiddleware(e,t){if(!this._middleware[e])throw new ie(`Middleware type "${e}" is not supported`);this._middleware[e].push(t)}removeMiddleware(e,t){let r=this._middleware[e];this._middleware[e]=r.filter(n=>n!==t)}async verifyHandshake(e,t){let r=e.req,n=e.origin;(n==="null"||n==null)&&(n="*");let i=!1;if(this._allowAllOrigins)i=!0;else try{let s=new URL(n),a=s.port||(s.protocol==="https:"?443:80);i=~this.origins.indexOf(s.hostname+":"+a)||~this.origins.indexOf(s.hostname+":*")||~this.origins.indexOf("*:"+a)}catch{}if(i){let s=this._middleware[this.MIDDLEWARE_HANDSHAKE_WS];if(s.length){let a=!1;await C(s,r,o=>{a?this.emitWarning(new y(`Callback for ${this.MIDDLEWARE_HANDSHAKE_WS} middleware was already invoked`)):(a=!0,o?(o===!0||o.silent?o=new G(`Action was silently blocked by ${this.MIDDLEWARE_HANDSHAKE_WS} middleware`,this.MIDDLEWARE_HANDSHAKE_WS):this.middlewareEmitWarnings&&this.emitWarning(o),t(!1,401,typeof o=="string"?o:o.message)):t(!0))})}else t(!0)}else{let s=new Pe(`Failed to authorize socket handshake - Invalid origin: ${n}`);this.emitWarning(s),t(!1,403,s.message)}}verifyInboundRemoteEvent(e,t){let r=e.socket,n=r.getAuthToken();this.isAuthTokenExpired(n)&&(e.authTokenExpiredError=new Ge("The socket auth token has expired",n.exp),r.deauthenticate()),this._passThroughMiddleware(e,t)}isAuthTokenExpired(e){if(e&&e.exp!=null){let t=Date.now(),r=e.exp*1e3;return t>r}return!1}async verifyOutboundEvent(e,t,r,n,i){let s=!1;if(t==="#publish"){let a={socket:e,channel:r.channel,data:r.data};await C(this._middleware[this.MIDDLEWARE_PUBLISH_OUT],a,o=>{s?this.emitWarning(new y(`Callback for ${this.MIDDLEWARE_PUBLISH_OUT} middleware was already invoked`)):(s=!0,a.data!==void 0&&(r.data=a.data),o?(o===!0||o.silent?o=new G(`Action was silently blocked by ${this.MIDDLEWARE_PUBLISH_OUT} middleware`,this.MIDDLEWARE_PUBLISH_OUT):this.middlewareEmitWarnings&&this.emitWarning(o),i(o,r)):(n&&a.useCache&&(n.useCache=!0),i(null,r)))})}else i(null,r)}async _processSubscribeAction(e,t,r){let n=!1,i=e.data||{};t.channel=i.channel,t.waitForAuth=i.waitForAuth,t.data=i.data,t.waitForAuth&&t.authTokenExpiredError?r(t.authTokenExpiredError,i):await C(this._middleware[this.MIDDLEWARE_SUBSCRIBE],t,s=>{n?this.emitWarning(new y(`Callback for ${this.MIDDLEWARE_SUBSCRIBE} middleware was already invoked`)):(n=!0,s&&(s===!0||s.silent?s=new G(`Action was silently blocked by ${this.MIDDLEWARE_SUBSCRIBE} middleware`,this.MIDDLEWARE_SUBSCRIBE):this.middlewareEmitWarnings&&this.emitWarning(s)),t.data!==void 0&&(i.data=t.data),r(s,i))})}async _processTransmitAction(e,t,r){let n=!1;t.event=e.event,t.data=e.data,await C(this._middleware[this.MIDDLEWARE_TRANSMIT],t,i=>{n?this.emitWarning(new y(`Callback for ${this.MIDDLEWARE_TRANSMIT} middleware was already invoked`)):(n=!0,i&&(i===!0||i.silent?i=new G(`Action was silently blocked by ${this.MIDDLEWARE_TRANSMIT} middleware`,this.MIDDLEWARE_TRANSMIT):this.middlewareEmitWarnings&&this.emitWarning(i)),r(i,t.data))})}async _processPublishAction(e,t,r){let n=!1;if(this.allowClientPublish){let i=e.data||{};t.channel=i.channel,t.data=i.data,await C(this._middleware[this.MIDDLEWARE_PUBLISH_IN],t,s=>{if(n)this.emitWarning(new y(`Callback for ${this.MIDDLEWARE_PUBLISH_IN} middleware was already invoked`));else if(n=!0,t.data!==void 0&&(i.data=t.data),s)s===!0||s.silent?s=new G(`Action was silently blocked by ${this.MIDDLEWARE_PUBLISH_IN} middleware`,this.MIDDLEWARE_PUBLISH_IN):this.middlewareEmitWarnings&&this.emitWarning(s),r(s,i,t.ackData);else{if(typeof t.channel!="string"){s=new fe(`Socket ${t.socket.id} tried to publish to an invalid ${t.channel} channel`),this.emitWarning(s),r(s,i,t.ackData);return}(async()=>{let a;try{await this.exchange.publish(t.channel,t.data)}catch(o){a=o,this.emitWarning(a)}r(a,i,t.ackData)})()}})}else{let i=new y("Client publish feature is disabled");this.emitWarning(i),r(i)}}async _processInvokeAction(e,t,r){let n=!1;t.event=e.event,t.data=e.data,await C(this._middleware[this.MIDDLEWARE_INVOKE],t,i=>{n?this.emitWarning(new y(`Callback for ${this.MIDDLEWARE_INVOKE} middleware was already invoked`)):(n=!0,i&&(i===!0||i.silent?i=new G(`Action was silently blocked by ${this.MIDDLEWARE_INVOKE} middleware`,this.MIDDLEWARE_INVOKE):this.middlewareEmitWarnings&&this.emitWarning(i)),r(i,t.data))})}_passThroughMiddleware(e,t){let r={socket:e.socket};e.authTokenExpiredError!=null&&(r.authTokenExpiredError=e.authTokenExpiredError);let n=e.event;if(e.cid==null)if(this._isReservedRemoteEvent(n))if(n==="#publish")this._processPublishAction(e,r,t);else if(n==="#removeAuthToken")t(null,e.data);else{let i=new y(`The reserved transmitted event ${n} is not supported`);t(i)}else this._processTransmitAction(e,r,t);else if(this._isReservedRemoteEvent(n))if(n==="#subscribe")this._processSubscribeAction(e,r,t);else if(n==="#publish")this._processPublishAction(e,r,t);else if(n==="#handshake"||n==="#authenticate"||n==="#unsubscribe")t(null,e.data);else{let i=new y(`The reserved invoked event ${n} is not supported`);t(i)}else this._processInvokeAction(e,r,t)}_isReservedRemoteEvent(e){return typeof e=="string"&&e.indexOf("#")===0}_handleServerError(e){typeof e=="string"&&(e=new Pe(e)),this.emitError(e)}_handleHandshakeTimeout(e){e.disconnect(4005)}async _handleSocketErrors(e){for await(let t of e.listener("error"))this.emitWarning(t.error)}async _subscribeSocket(e,t){if(!t)throw new y(`Socket ${e.id} provided a malformated channel payload`);if(this.socketChannelLimit&&e.channelSubscriptionsCount>=this.socketChannelLimit)throw new y(`Socket ${e.id} tried to exceed the channel subscription limit of ${this.socketChannelLimit}`);let r=t.channel;if(typeof r!="string")throw new y(`Socket ${e.id} provided an invalid channel name`);e.channelSubscriptionsCount==null&&(e.channelSubscriptionsCount=0),e.channelSubscriptions[r]==null&&(e.channelSubscriptions[r]=!0,e.channelSubscriptionsCount++);try{await this.brokerEngine.subscribeSocket(e,r)}catch(n){throw delete e.channelSubscriptions[r],e.channelSubscriptionsCount--,n}e.emit("subscribe",{channel:r,subscribeOptions:t}),this.emit("subscription",{socket:e,channel:r,subscribeOptions:t})}_unsubscribeSocketFromAllChannels(e){Object.keys(e.channelSubscriptions).forEach(t=>{this._unsubscribeSocket(e,t)})}_unsubscribeSocket(e,t){if(typeof t!="string")throw new y(`Socket ${e.id} tried to unsubscribe from an invalid channel name`);if(!e.channelSubscriptions[t])throw new y(`Socket ${e.id} tried to unsubscribe from a channel which it is not subscribed to`);delete e.channelSubscriptions[t],e.channelSubscriptionsCount!=null&&e.channelSubscriptionsCount--,this.brokerEngine.unsubscribeSocket(e,t),e.emit("unsubscribe",{channel:t}),this.emit("unsubscription",{socket:e,channel:t})}_processTokenError(e){let t=null,r=!0;return e&&(e.name==="TokenExpiredError"?t=new Ge(e.message,e.expiredAt):e.name==="JsonWebTokenError"?t=new dt(e.message):e.name==="NotBeforeError"?(t=new pt(e.message,e.date),r=!1):t=new ye(e.message)),{authError:t,isBadToken:r}}_emitBadAuthTokenError(e,t,r){e.emit("badAuthToken",{authError:t,signedAuthToken:r}),this.emit("badSocketAuthToken",{socket:e,authError:t,signedAuthToken:r})}_processAuthToken(e,t,r){let n=Object.assign({socket:e},this.defaultVerificationOptions),i=o=>{let c=o.error,u=o.token,h=e.authState;if(u?(e.signedAuthToken=t,e.authToken=u,e.authState=e.AUTHENTICATED):(e.signedAuthToken=null,e.authToken=null,e.authState=e.UNAUTHENTICATED),e.authToken)this._passThroughAuthenticateMiddleware({socket:e,signedAuthToken:e.signedAuthToken,authToken:e.authToken},(l,f)=>{l&&(e.authToken=null,e.authState=e.UNAUTHENTICATED,f&&this._emitBadAuthTokenError(e,l,t)),r(l,f||!1,h)});else{let l=this._processTokenError(c);c&&t!=null&&(e.emitError(l.authError),l.isBadToken&&this._emitBadAuthTokenError(e,l.authError,t)),r(l.authError,l.isBadToken,h)}},s,a;try{s=this.auth.verifyToken(t,this.verificationKey,n)}catch(o){a=o}s instanceof Promise?(async()=>{let o={};try{o.token=await s}catch(c){o.error=c}i(o)})():i({token:s,error:a})}async _passThroughAuthenticateMiddleware(e,t){let r=!1,n={socket:e.socket,authToken:e.authToken};await C(this._middleware[this.MIDDLEWARE_AUTHENTICATE],n,(i,s)=>{if(r)this.emitWarning(new y(`Callback for ${this.MIDDLEWARE_AUTHENTICATE} middleware was already invoked`));else{r=!0;let a=!1;s.length&&(a=s[s.length-1]||!1),i&&(i===!0||i.silent?i=new G(`Action was silently blocked by ${this.MIDDLEWARE_AUTHENTICATE} middleware`,this.MIDDLEWARE_AUTHENTICATE):this.middlewareEmitWarnings&&this.emitWarning(i)),t(i,a)}})}async _passThroughHandshakeAGMiddleware(e,t){let r=!1,n={socket:e.socket};await C(this._middleware[this.MIDDLEWARE_HANDSHAKE_AG],n,(i,s)=>{if(r)this.emitWarning(new y(`Callback for ${this.MIDDLEWARE_HANDSHAKE_AG} middleware was already invoked`));else{r=!0;let a;s.length?a=s[s.length-1]||4008:a=4008,i&&(i.statusCode!=null&&(a=i.statusCode),i===!0||i.silent?i=new G(`Action was silently blocked by ${this.MIDDLEWARE_HANDSHAKE_AG} middleware`,this.MIDDLEWARE_HANDSHAKE_AG):this.middlewareEmitWarnings&&this.emitWarning(i)),t(i,a)}})}_handleSocketConnection(e,t){!e.upgradeReq&&t&&(e.upgradeReq=t);let r=this.generateId(),n=new O(r,this,e);n.exchange=this.exchange,this._handleSocketErrors(n),this.pendingClients[r]=n,this.pendingClientsCount++,(async()=>{for await(let s of n.procedure("#authenticate")){let a=s.data;this._processAuthToken(n,a,(o,c,u)=>{if(o?c&&n.deauthenticate():n.triggerAuthenticationEvents(u),o&&c)s.error(o);else{let h={isAuthenticated:!!n.authToken,authError:Ce(o)};s.end(h)}})}})(),(async()=>{for await(let s of n.receiver("#removeAuthToken"))n.deauthenticateSelf()})(),(async()=>{for await(let s of n.procedure("#subscribe")){let a=s.data;a?typeof a=="string"&&(a={channel:a}):a={},(async()=>{if(n.state===n.OPEN){try{await this._subscribeSocket(n,a)}catch(c){let u=new fe(`Failed to subscribe socket to the ${a.channel} channel - ${c}`);s.error(u),n.emitError(u);return}if(a.batch){s.end(void 0,{batch:!0});return}s.end();return}let o=new y("Cannot subscribe socket to a channel before it has completed the handshake");s.error(o),this.emitWarning(o)})()}})(),(async()=>{for await(let s of n.procedure("#unsubscribe")){let a=s.data,o;try{this._unsubscribeSocket(n,a)}catch(c){o=new fe(`Failed to unsubscribe socket from the ${a} channel - ${c}`)}o?(s.error(o),n.emitError(o)):s.end()}})();let i=(s,a,o)=>{clearTimeout(n._handshakeTimeoutRef),n.closeProcedure("#handshake"),n.closeProcedure("#authenticate"),n.closeProcedure("#subscribe"),n.closeProcedure("#unsubscribe"),n.closeReceiver("#removeAuthToken"),n.closeListener("authenticate"),n.closeListener("authStateChange"),n.closeListener("deauthenticate"),this.clients[r]&&(delete this.clients[r],this.clientsCount--),this.pendingClients[r]&&(delete this.pendingClients[r],this.pendingClientsCount--),s==="disconnect"?this.emit("disconnection",{socket:n,code:a,reason:o}):s==="abort"&&this.emit("connectionAbort",{socket:n,code:a,reason:o}),this.emit("closure",{socket:n,code:a,reason:o}),this._unsubscribeSocketFromAllChannels(n)};(async()=>{let s=await n.listener("disconnect").once();i("disconnect",s.code,s.data)})(),(async()=>{let s=await n.listener("connectAbort").once();i("abort",s.code,s.data)})(),n._handshakeTimeoutRef=setTimeout(this._handleHandshakeTimeout.bind(this,n),this.handshakeTimeout),(async()=>{for await(let s of n.procedure("#handshake")){let a=(s.data||{}).authToken||null;clearTimeout(n._handshakeTimeoutRef),this._passThroughHandshakeAGMiddleware({socket:n},(o,c)=>{if(o){o.statusCode==null&&(o.statusCode=c),s.error(o),n.disconnect(o.statusCode);return}this._processAuthToken(n,a,(u,h,l)=>{if(n.state===n.CLOSED)return;let f={id:n.id,pingTimeout:this.pingTimeout},k={id:n.id,pingTimeout:this.pingTimeout};u&&a!=null&&(f.authError=Ce(u),k.authError=u,h&&n.deauthenticate()),f.isAuthenticated=!!n.authToken,k.isAuthenticated=f.isAuthenticated,this.pendingClients[r]&&(delete this.pendingClients[r],this.pendingClientsCount--),this.clients[r]=n,this.clientsCount++,n.state=n.OPEN,f.isAuthenticated&&(async()=>(await this.listener("connection").once(),n.triggerAuthenticationEvents(l)))(),n.emit("connect",k),this.emit("connection",{socket:n,...k}),s.end(f)})})}})(),this.emit("handshake",{socket:n})}};function Or(e,t){return t=t||{},t.httpServer=e,new bt(t)}function wt(e,t,r){if(typeof t=="function"&&(r=t,t={}),W()){let n=ht("http").createServer(),i=Or(n,t);return i.httpServer=n,i.httpServer.listen(e,r),i}else return new bt(t)}var Oe={};var Ne={Lexical:JSON.stringify,futureGrace:10*60*1e3};function Me(e,t,r=Ne){let{machineState:n=new Date().getTime(),futureGrace:i=Ne.futureGrace,Lexical:s=Ne.Lexical}=r||Oe,a=n+i,o={};for(let c in e){if(!c)continue;let u=t[c],h=e[c],l=u&&u._&&u._[">"]||Oe,f=h&&h._&&h._[">"]||Oe;if(!h){c in t||(o[c]=h);continue}let k=!1,N={_:{"#":c,">":{}}};for(let S in f){if(!S)continue;let p=l[S],v=f[S];if(!(v>a||!v)&&!(p&&p>=v)){if(p===v){let vt=u&&u[S]||void 0,_t=h[S];if(s(_t)<=s(vt))continue}N[S]=h[S],N._&&N._[">"]&&(N._[">"][S]=v),k=!0}}k&&(o[c]=N)}return Object.keys(o).length>0?o:void 0}function Nr(e,t,r="immutable"){if(!e)return t;if(!t)return e;let n=e._||{},i=n[">"]||{},a=(t._||{})[">"]||{};if(r==="mutable"){for(let o in a)!o||(e[o]=t[o],i[o]=a[o]);return n[">"]=i,e._=n,e}return{...e,...t,_:{"#":n["#"],">":{...n[">"],...t._&&t._[">"]||{}}}}}function Le(e,t,r="immutable"){let n=r?e:{...e};for(let i in t)!i||(n[i]=Nr(e[i],t[i],r));return n}var Re={diffFn:Me,mergeFn:Le},Et=(e,t,r)=>(e.direct?t[r]:H(t[r]))||null,Mr=(e,t,r)=>Promise.resolve(Et(e,t,r)),Tt=({diffFn:e=Re.diffFn,mergeFn:t=Re.mergeFn},r,n)=>{let i=e(n,r);return i&&t(r,i,"mutable"),i||null},Lr=(e,t,r)=>Promise.resolve(Tt(e,t,r));function kt(e=Re){let t={};return{get:r=>Mr(e,t,r),getSync:r=>Et(e,t,r),put:r=>Lr(e,t,r),putSync:r=>Tt(e,t,r)}}function je(){return Math.random().toString(36).slice(2)}var Rr=e=>{let t=Object.keys(e).filter(i=>i!=="_").reduce((i,s)=>({...i,[s]:Te()}),{}),n=ke(t)(e._[">"]);return K(n)?_(e):n},jr=e=>{let t={...e};delete t._;let r=Ke([Te(),Y(),We(),ke({"#":Y()})],"Node value must be null string, number, boolean or object."),i=Se(Y(),He(r))(t);return K(i)?Rr(e):i},Br=e=>t=>{if(!d(t))return g(new b("Node must be object",{input:t,path:[]}));if(!d(t._))return g(new b("Node state must be object in path _",{input:t,path:["_"]}));if(!d(t._[">"]))return g(new b("Node state must be object in path _.['>']",{input:t,path:["_",">"]}));if(!m(t._["#"]))return g(new b("Soul must be string in _.['#']",{input:t,path:["_","#"]}));let r=t._["#"];return d(e[r])?jr(t):g(new b("Soul must be present in root graph",{input:t,path:[]}))},St=(e="Root graph must be object")=>t=>{if(!d(t))return g(new b(e,{input:t,path:[]}));let n=Se(Y(),Br(t))(t);return K(n)?_(t):n};var we=class{constructor(t,r,n){this.server=t;this.options=r;this.adapter=n}setupMiddleware(){this.server.addMiddleware(this.server.MIDDLEWARE_SUBSCRIBE,this.subscribeMiddleware.bind(this)),this.server.addMiddleware(this.server.MIDDLEWARE_PUBLISH_IN,this.publishInMiddleware.bind(this))}publishInMiddleware(t){let r=t.data;t.channel==="topgun/put"&&this.processPut(r).then(n=>{t.socket.transmit("#publish",{channel:`topgun/@${r["#"]}`,data:n})})}async subscribeMiddleware(t){if(t.channel==="topgun/put")return;let r=t.channel.replace(/^topgun\/nodes\//,"");if(!r||r===t.channel||r==="changelog")return;let n=Math.random().toString(36).slice(2);this.readNode(r).then(i=>({channel:t.channel,data:{"#":n,put:i?{[r]:i}:null}})).catch(i=>(console.warn(i.stack||i),{channel:t.channel,data:{"#":n,"@":t["#"],err:"Error fetching node"}})).then(i=>{t.socket.transmit("#publish",i)})}readNode(t){return this.adapter.get(t)}async processPut(t){let r=R();try{return t.put&&await this.adapter.put(t.put),{"#":r,"@":t["#"],err:null,ok:!0}}catch{return{"#":r,"@":t["#"],err:"Error saving",ok:!1}}}isAdmin(t){return t.authToken&&t.authToken.pub===this.options.ownerPub}};var Ee=class{adapter;internalAdapter;server;options;middleware;validator;constructor(t){this.options=d(t)?t:{},this.validator=St(),this.internalAdapter=this.options.adapter||kt(),this.adapter=this.wrapAdapter(this.internalAdapter),this.server=wt(this.options.port,this.options),this.middleware=new we(this.server,this.options,this.adapter),this.run()}run(){this.middleware.setupMiddleware(),this.handleWebsocketConnection()}publishDiff(t,r,n){this.server.exchange.publish(`topgun/nodes/${t}`,{"#":`${r}/${t}`,put:{[t]:n}})}wrapAdapter(t){let r={...t,put:async n=>{let i=await t.put(n);return i&&this.publishIsDiff({"#":R(),put:i}),i},putSync:void 0};return{...r,put:async n=>{let i=this.validatePut(n);if(Q(i))throw i.error;return r.put(n)}}}publishIsDiff(t){let r=t["#"]||je(),n=t.put;if(!!n)for(let i in n){if(!i)continue;let s=n[i];!s||this.publishDiff(i,r,s)}}validatePut(t){return this.options.disableValidation?_(t):this.validator(t)}async handleWebsocketConnection(){for await(let{socket:t}of this.server.listener("connection"))(async()=>{for await(let r of t.procedure("login"))this.authenticateLogin(t,r)})()}async authenticateLogin(t,r){let n=r.data;if(!n.pub||!n.proof){r.end("Missing login info");return}try{let[i,s]=n.proof.m.split("/"),a=parseInt(s,10),o=new Date().getTime(),c=Math.abs(o-a),u=this.options.authMaxDrift&&parseInt(`${this.options.authMaxDrift}`,10)||1e3*60*5;if(c>u){r.error(new Error("Exceeded max clock drift"));return}if(!i||i!==t.id){r.error(new Error("Socket ID doesn't match"));return}await le(n.proof,n.pub)?(t.setAuthToken({pub:n.pub,timestamp:a}),r.end()):r.end("Invalid login")}catch{r.end("Invalid login")}}};function Ur(e){return new Ee(e)}return Nt(Wr);})();
var TopGun=(()=>{var At=Object.create;var se=Object.defineProperty;var xt=Object.getOwnPropertyDescriptor;var Dt=Object.getOwnPropertyNames;var Gt=Object.getPrototypeOf,Pt=Object.prototype.hasOwnProperty;var M=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,r)=>(typeof require<"u"?require:t)[r]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw new Error('Dynamic require of "'+e+'" is not supported')});var Ct=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),It=(e,t)=>{for(var r in t)se(e,r,{get:t[r],enumerable:!0})},Be=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of Dt(t))!Pt.call(e,i)&&i!==r&&se(e,i,{get:()=>t[i],enumerable:!(n=xt(t,i))||n.enumerable});return e};var Ot=(e,t,r)=>(r=e!=null?At(Gt(e)):{},Be(t||!e||!e.__esModule?se(r,"default",{value:e,enumerable:!0}):r,e)),Nt=e=>Be(se({},"__esModule",{value:!0}),e);var Xe=Ct((qi,Ye)=>{var $=1e3,F=$*60,J=F*60,j=J*24,qt=j*7,Qt=j*365.25;Ye.exports=function(e,t){t=t||{};var r=typeof e;if(r==="string"&&e.length>0)return Yt(e);if(r==="number"&&isFinite(e))return t.long?zt(e):Xt(e);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(e))};function Yt(e){if(e=String(e),!(e.length>100)){var t=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(e);if(!!t){var r=parseFloat(t[1]),n=(t[2]||"ms").toLowerCase();switch(n){case"years":case"year":case"yrs":case"yr":case"y":return r*Qt;case"weeks":case"week":case"w":return r*qt;case"days":case"day":case"d":return r*j;case"hours":case"hour":case"hrs":case"hr":case"h":return r*J;case"minutes":case"minute":case"mins":case"min":case"m":return r*F;case"seconds":case"second":case"secs":case"sec":case"s":return r*$;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return r;default:return}}}}function Xt(e){var t=Math.abs(e);return t>=j?Math.round(e/j)+"d":t>=J?Math.round(e/J)+"h":t>=F?Math.round(e/F)+"m":t>=$?Math.round(e/$)+"s":e+"ms"}function zt(e){var t=Math.abs(e);return t>=j?he(e,t,j,"day"):t>=J?he(e,t,J,"hour"):t>=F?he(e,t,F,"minute"):t>=$?he(e,t,$,"second"):e+" ms"}function he(e,t,r,n){var i=t>=r*1.5;return Math.round(e/r)+" "+n+(i?"s":"")}});var Wr={};It(Wr,{TGServer:()=>Te,createServer:()=>Ur});function m(e){return typeof e=="string"}function ae(e){return typeof e=="number"&&Number.isFinite(e)}function Mt(e){return typeof e=="boolean"}function Lt(e){return Array.isArray(e)}function Ue(e){return e===null}function d(e){return typeof e=="object"&&!Ue(e)&&!Lt(e)}var H=(e,t=!1)=>{if(Array.isArray(e))if(t){let r=[];if(!e)return r;let n=e.length;for(;n--;)r[n]=t?H(e[n]):e[n];return r}else return[...e];if(d(e)){let r={};if(t)for(let n of Object.keys(e))r[n]=H(e[n]);else r={...e};return r}return e};function _(e){return{ok:!0,value:e}}function g(e){return{ok:!1,error:e}}function K(e){return e.ok}function Q(e){return!K(e)}var b=class extends Error{constructor(e,t={path:[]}){super(e),this.message=e,this.info=t}toJSON(){return{message:this.message,info:this.info}}};var We=(e="Expecting boolean")=>t=>Mt(t)?_(t):g(new b(e,{input:t,path:[]}));var He=e=>t=>Ue(t)?_(t):e(t),Ee=(e="Expecting number")=>t=>ae(t)?_(t):g(new b(e,{input:t,path:[]}));var ke=(e,t="Expecting object")=>{let r=Object.entries(e);return n=>{if(!d(n))return g(new b(t,{input:n,path:[]}));let i=Object.create(null);for(let[s,a]of r){let o=a(n[s]);if(Q(o))return o.error.info.path.unshift(s),o;i[s]=o.value}return _(i)}};var Se=(e,t,r="Expecting object")=>n=>{if(!d(n))return g(new b(r,{input:n,path:[]}));let i=Object.create(null);for(let[s,a]of Object.entries(n)){let o=e(s);if(Q(o))return o.error.info.path.unshift(s),o;let c=t(a);if(Q(c))return c.error.info.path.unshift(s),c;i[o.value]=c.value}return _(i)},Y=(e="Expecting string")=>t=>m(t)?_(t):g(new b(e,{input:t,path:[]}));var Ke=(e,t="Expecting one of the specified structs")=>r=>{for(let n of e){let i=n(r);if(K(i))return i}return g(new b(t,{input:r,path:[]}))};var Rt=crypto,P=Rt;var V={};typeof btoa>"u"?V.btoa=function(e){return ve.from(e,"binary").toString("base64")}:V.btoa=e=>btoa(e);typeof atob>"u"?V.atob=function(e){return ve.from(e,"base64").toString("binary")}:V.atob=e=>atob(e);function oe(){}Object.assign(oe,{from:Array.from});oe.prototype=Object.create(Array.prototype);oe.prototype.toString=function(e,t,r){e=e||"utf8",t=t||0;let n=this.length;if(e==="hex"){let i=new Uint8Array(this),s=(r&&r+1||n)-t,a="";for(let o=0;o<s;o++)a+=i[o+t].toString(16).padStart(2,"0");return a}if(e==="utf8"){let i=(r||n)-t,s="";for(let a=0;a<i;a++)s+=String.fromCharCode(this[a+t]);return s}if(e==="base64")return V.btoa(this)};var D=oe;function L(...e){return console.warn("new SafeBuffer() is depreciated, please use SafeBuffer.from()"),L.from(...e)}L.prototype=Object.create(Array.prototype);Object.assign(L,{from(){if(!Object.keys(arguments).length)throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.");let e=arguments[0],t;if(typeof e=="string"){let r=arguments[1]||"utf8";if(r==="hex"){let n=e.match(/([\da-fA-F]{2})/g).map(i=>parseInt(i,16));if(!n||!n.length)throw new TypeError("Invalid first argument for type 'hex'.");t=D.from(n)}else if(r==="utf8"){let n=e.length,i=new Uint16Array(n);for(let s=0;s<n;s++)i[s]=e.charCodeAt(s);t=D.from(i)}else if(r==="base64"){let n=V.atob(e),i=n.length,s=new Uint8Array(i);for(let a=0;a<i;a++)s[a]=n.charCodeAt(a);t=D.from(s)}else r==="binary"?t=D.from(e):console.info("SafeBuffer.from unknown encoding: "+r);return t}if(e?.byteLength?e.byteLength:e?.length?e?.length:null){let r;return e instanceof ArrayBuffer&&(r=new Uint8Array(e)),D.from(r||e)}},alloc(e,t=0){return D.from(new Uint8Array(Array.from({length:e},()=>t)))},allocUnsafe(e){return D.from(new Uint8Array(Array.from({length:e})))},concat(e){if(!Array.isArray(e))throw new TypeError("First argument must be Array containing ArrayBuffer or Uint8Array instances.");return D.from(e.reduce((t,r)=>t.concat(Array.from(r)),[]))}});L.prototype.from=L.from;L.prototype.toString=D.prototype.toString;var ve=L,jt=ve,E=jt;var X=typeof self=="object"&&self.self===self&&self||typeof window=="object"&&window.global===window&&window||void 0;var z={crypto:P,TextEncoder:X&&X.TextEncoder,TextDecoder:X&&X.TextDecoder};z.random=e=>E.from(w.getRandomValues(new Uint8Array(E.alloc(e))));var Ve=z.random,ce=z.TextEncoder,Bt=z.TextDecoder,w=z.crypto;var $e={hash:{name:"SHA-256"},iter:1e5,ks:64},Z={pair:{name:"ECDSA",namedCurve:"P-256"},sign:{name:"ECDSA",hash:{name:"SHA-256"}}};function _e(e,t){let r=e.split(".");return{crv:"P-256",d:t,ext:!0,key_opts:t?["sign"]:["verify"],kty:"EC",x:r[0],y:r[1]}}function ee(e){try{let t=m(e);return t&&e.slice(0,4)==="SEA{"&&(e=e.slice(3)),t?JSON.parse(e):e}catch{}return e}async function te(e,t="SHA-256"){let r=m(e)?e:JSON.stringify(e),n=new ce().encode(r),i=await w.subtle.digest({name:t},n);return E.from(i)}function R(e=24,t="0123456789ABCDEFGHIJKLMNOPQRSTUVWXZabcdefghijklmnopqrstuvwxyz"){let r="";for(;e>0;)r+=t.charAt(Math.floor(Math.random()*t.length)),e--;return r}var xn={encode:"base64",hash:$e.hash.name,name:"PBKDF2"};var ue={encode:"base64"};function Kt(e){let t=_e(e);return w.subtle.importKey("jwk",t,Z.pair,!1,["verify"])}async function qe(e,t,r,n=ue){let i=n.encode||ue.encode,s=await Kt(r),a=E.from(t,i),o=new Uint8Array(a);return!!await w.subtle.verify(Z.sign,s,o,new Uint8Array(E.from(e,"hex")))}async function Qe(e,t,r,n=ue){let i=await te(m(e)?e:JSON.stringify(e));return qe(i.toString("hex"),t,r,n)}async function le(e,t,r=ue){try{let n=d(t)&&m(t.pub)?t.pub:m(t)?t:"",i=ee(e);return await Qe(i.m,i.s,n,r)?{ct:i.ct,iv:i.iv,s:i.s,e:i.m?.e,w:i.m?.w,c:i.m?.c}:!1}catch{return!1}}var ot=Ot(Xe(),1);function ze(e){switch(e.length%4){case 0:break;case 2:e+="==";break;case 3:e+="=";break;default:throw new Error("Illegal base64url string!")}try{return JSON.parse(decodeURIComponent(escape(atob(e))))}catch{return null}}function Zt(e){return{header:ze(e.split(".")[0].replace(/-/g,"+").replace(/_/g,"/")),payload:ze(e.split(".")[1].replace(/-/g,"+").replace(/_/g,"/"))}}function rt(e){return new Uint8Array(Array.prototype.map.call(atob(e.replace(/-/g,"+").replace(/_/g,"/").replace(/\s/g,"")),t=>t.charCodeAt(0)))}function q(e){return rt(btoa(unescape(encodeURIComponent(e))))}function nt(e){e=atob(e);let t=new ArrayBuffer(e.length),r=new Uint8Array(t);for(let n=0,i=e.length;n<i;n++)r[n]=e.charCodeAt(n);return t}var it={ES256:{name:"ECDSA",namedCurve:"P-256",hash:{name:"SHA-256"}},ES384:{name:"ECDSA",namedCurve:"P-384",hash:{name:"SHA-384"}},ES512:{name:"ECDSA",namedCurve:"P-521",hash:{name:"SHA-512"}},HS256:{name:"HMAC",hash:{name:"SHA-256"}},HS384:{name:"HMAC",hash:{name:"SHA-384"}},HS512:{name:"HMAC",hash:{name:"SHA-512"}},RS256:{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}},RS384:{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-384"}},RS512:{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-512"}}};async function st(e,t,r={algorithm:"HS256",throwError:!1},n){typeof r=="string"&&(r={algorithm:r,throwError:!1}),r={algorithm:"HS256",throwError:!1,...r};function i(f){if(n)return n(null,f);throw f}typeof e!="string"&&i(new Error("AuthTokenInvalidError")),typeof t!="string"&&typeof t!="object"&&i(new Error("secret must be a string or a JWK object")),typeof r.algorithm!="string"&&i(new Error("options.algorithm must be a string"));let s=e.split(".");s.length!==3&&i(new Error("token must consist of 3 parts"));let a=it[r.algorithm];a||i(new Error("algorithm not found"));let{payload:o}=Zt(e);if(!o)return r.throwError&&i(new Error("ParseError")),!1;if(o.nbf&&o.nbf>Math.floor(Date.now()/1e3))return r.throwError&&i(new Error("NotYetValid")),!1;if(o.exp&&o.exp<=Math.floor(Date.now()/1e3))return r.throwError&&i(new Error("TokenExpiredError")),!1;let c="raw",u;typeof t=="object"?(c="jwk",u=t):typeof t=="string"&&t.startsWith("-----BEGIN")?(c="spki",u=nt(t.replace(/-----BEGIN.*?-----/g,"").replace(/-----END.*?-----/g,"").replace(/\s/g,""))):u=q(t);let h=await P.subtle.importKey(c,u,a,!1,["verify"]),l=await P.subtle.verify(a,h,rt(s[2]),q(`${s[0]}.${s[1]}`))?o:!1;return typeof n=="function"&&n(null,l),l}function B(e){return typeof e=="string"}function re(e){return typeof e=="number"}function Ze(e){return typeof e=="boolean"}function at(e){if(typeof e!="object"||e===null)return!1;let t=Object.getPrototypeOf(e);return t===null||t===Object.prototype}function et(e,t){let r=t||Math.floor(Date.now()/1e3);if(typeof e=="string"){let n=(0,ot.default)(e);return typeof n>"u"?void 0:Math.floor(r+n/1e3)}else return typeof e=="number"?r+e:void 0}function De(e){return btoa(String.fromCharCode.apply(0,Array.from(e))).replace(/=/g,"").replace(/\+/g,"-").replace(/\//g,"_")}var er=["ES256","ES384","ES512","HS256","HS384","HS512","RS256","RS384","RS512","none"],tr={expiresIn:{isValid:e=>re(e)||B(e)&&e,message:'"expiresIn" should be a number of seconds or string representing a timespan'},notBefore:{isValid:e=>re(e)||B(e)&&e,message:'"notBefore" should be a number of seconds or string representing a timespan'},audience:{isValid:e=>B(e)||Array.isArray(e),message:'"audience" must be a string or array'},algorithm:{isValid:e=>er.includes(e),message:'"algorithm" must be a valid string enum value'},header:{isValid:at,message:'"header" must be an object'},issuer:{isValid:B,message:'"issuer" must be a string'},subject:{isValid:B,message:'"subject" must be a string'},jwtid:{isValid:B,message:'"jwtid" must be a string'},noTimestamp:{isValid:Ze,message:'"noTimestamp" must be a boolean'},keyid:{isValid:B,message:'"keyid" must be a string'},mutatePayload:{isValid:Ze,message:'"mutatePayload" must be a boolean'}},rr={iat:{isValid:re,message:'"iat" should be a number of seconds'},exp:{isValid:re,message:'"exp" should be a number of seconds'},nbf:{isValid:re,message:'"nbf" should be a number of seconds'}};function ct(e,t,r,n){if(!at(r))throw new Error('Expected "'+n+'" to be a plain object.');Object.keys(r).forEach(function(i){let s=e[i];if(!s){if(!t)throw new Error('"'+i+'" is not allowed in "'+n+'"');return}if(!s.isValid(r[i]))throw new Error(s.message)})}function nr(e){return ct(tr,!1,e,"options")}function ir(e){return ct(rr,!0,e,"payload")}var tt={audience:"aud",issuer:"iss",subject:"sub",jwtid:"jti"},sr=["expiresIn","notBefore","noTimestamp","audience","issuer","subject","jwtid"];async function ut(e,t,r,n){typeof r=="function"?(n=r,r={}):r=r||{},r={algorithm:"HS256",...r};let i=typeof e=="object",s=Object.assign({alg:r.algorithm,typ:i?"JWT":void 0},r.header);function a(p){if(n)return n(p);throw p}if(!t&&r.algorithm!=="none"&&a(new Error("secretOrPrivateKey must have a value")),typeof e>"u")a(new Error("payload is required"));else if(i){try{ir(e)}catch(p){a(p)}r.mutatePayload||(e=Object.assign({},e))}else{let p=sr.filter(function(v){return typeof r[v]<"u"});p.length>0&&a(new Error("invalid "+p.join(",")+" option for "+typeof e+" payload"))}typeof e.exp<"u"&&typeof r.expiresIn<"u"&&a(new Error('Bad "options.expiresIn" option the payload already has an "exp" property.')),typeof e.nbf<"u"&&typeof r.notBefore<"u"&&a(new Error('Bad "options.notBefore" option the payload already has an "nbf" property.'));try{nr(r)}catch(p){a(p)}let o=e.iat||Math.floor(Date.now()/1e3);if(r.noTimestamp?delete e.iat:i&&(e.iat=o),typeof r.notBefore<"u"){try{e.nbf=et(r.notBefore,o)}catch(p){a(p)}typeof e.nbf>"u"&&a(new Error('"notBefore" should be a number of seconds or string representing a timespan eg: "1d", "20h", 60'))}if(typeof r.expiresIn<"u"&&typeof e=="object"){try{e.exp=et(r.expiresIn,o)}catch(p){a(p)}typeof e.exp>"u"&&a(new Error('"expiresIn" should be a number of seconds or string representing a timespan eg: "1d", "20h", 60'))}Object.keys(tt).forEach(function(p){let v=tt[p];if(typeof r[p]<"u"){if(typeof e[v]<"u")return a(new Error('Bad "options.'+p+'" option. The payload already has an "'+v+'" property.'));e[v]=r[p]}});let c=JSON.stringify(e),u=`${De(q(JSON.stringify({...s})))}.${De(q(c))}`,h="raw",l;typeof t=="object"?(h="jwk",l=t):typeof t=="string"&&t.startsWith("-----BEGIN")?(h="pkcs8",l=nt(t.replace(/-----BEGIN.*?-----/g,"").replace(/-----END.*?-----/g,"").replace(/\s/g,""))):l=q(t);let f=it[r.algorithm];f||a(new Error("algorithm not found"));let k=await P.subtle.importKey(h,l,f,!1,["sign"]),N=await P.subtle.sign(f,k,q(u)),S=`${u}.${De(new Uint8Array(N))}`;return typeof n=="function"&&n(null,S),S}var lt=Object.defineProperty,ar=(e,t,r)=>t in e?lt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,ht=(e=>typeof M<"u"?M:typeof Proxy<"u"?new Proxy(e,{get:(t,r)=>(typeof M<"u"?M:t)[r]}):e)(function(e){if(typeof M<"u")return M.apply(this,arguments);throw new Error('Dynamic require of "'+e+'" is not supported')}),or=(e,t)=>{for(var r in t)lt(e,r,{get:t[r],enumerable:!0})},x=(e,t,r)=>(ar(e,typeof t!="symbol"?t+"":t,r),r),Ie=class{next(e){return this.createAsyncIterator(e).next()}async once(e){let t=await this.next(e);return t.done&&await new Promise(()=>{}),t.value}createAsyncIterator(e){throw new TypeError("Method must be overriden by subclass")}createAsyncIterable(e){return{[Symbol.asyncIterator]:()=>this.createAsyncIterator(e)}}[Symbol.asyncIterator](){return this.createAsyncIterator()}},cr=class extends Ie{name;_streamDemux;constructor(e,t){super(),this.name=t,this._streamDemux=e}createAsyncIterator(e){return this._streamDemux.createAsyncIterator(this.name,e)}},ur=class extends Ie{_nextConsumerId;_consumers;_linkedListTailNode;constructor(){super(),this._nextConsumerId=1,this._consumers={},this._linkedListTailNode={next:null}}write(e){this._write(e,!1)}close(){this._write(void 0,!0)}async _waitForNextDataNode(e){return new Promise((t,r)=>{let n,i=this._nextConsumerId++;if(e!==void 0){let s=new Error("Stream consumer iteration timed out");(async()=>{let a=lr(e);n=a.timeoutId,await a.promise,s.name="TimeoutError",delete this._consumers[i],r(s)})()}this._consumers[i]={resolve:t,timeoutId:n}})}createAsyncIterator(e){let t=this._linkedListTailNode;return{next:async()=>(t.next||await this._waitForNextDataNode(e),t=t.next,t.data)}}_write(e,t){let r={data:{value:e,done:t},next:null};this._linkedListTailNode.next=r,this._linkedListTailNode=r,Object.values(this._consumers).forEach(n=>{n.timeoutId!==void 0&&clearTimeout(n.timeoutId),n.resolve()}),this._consumers={},this._nextConsumerId=1}};function lr(e=0){let t,r=new Promise(n=>{t=setTimeout(n,e)});return{timeoutId:t,promise:r}}var ne=class{_mainStream;constructor(){this._mainStream=new ur}write(e,t){this._write(e,t,!1)}close(e,t){this._write(e,t,!0)}closeAll(){this._mainStream.close()}createAsyncIterator(e,t){let r=this._mainStream.createAsyncIterator(t);return{next:async()=>{for(;;){let n=await r.next();if(n.done)return n;if(n.value.name===e)return n.value.data}}}}stream(e){return new cr(this,e)}_write(e,t,r){this._mainStream.write({name:e,data:{value:t,done:r}})}},be=class{_listenerDemux;constructor(){this._listenerDemux=new ne}emit(e,t){this._listenerDemux.write(e,t)}listener(e){return this._listenerDemux.stream(e)}closeListener(e){this._listenerDemux.close(e)}closeAllListeners(){this._listenerDemux.closeAll()}};function hr(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{let t=Math.random()*16|0;return(e==="x"?t:t&3|8).toString(16)})}function dr(){return Math.abs(Math.random()*Math.random()*Date.now()|0).toString()+Math.abs(Math.random()*Math.random()*Date.now()|0).toString()}function pr(e){let t=[],r=[];return function n(i,s){let a,o,c;if(typeof i=="object"&&i!==null&&!(i instanceof Boolean)&&!(i instanceof Date)&&!(i instanceof Number)&&!(i instanceof RegExp)&&!(i instanceof String)){for(a=0;a<t.length;a+=1)if(t[a]===i)return{$ref:r[a]};if(t.push(i),r.push(s),Object.prototype.toString.apply(i)==="[object Array]")for(c=[],a=0;a<i.length;a+=1)c[a]=n(i[a],s+"["+a+"]");else{c={};for(o in i)Object.prototype.hasOwnProperty.call(i,o)&&(c[o]=n(i[o],s+"["+JSON.stringify(o)+"]"))}return c}return i}(e,"$")}function T(){"use strict";return typeof function(){return this}()>"u"}var Ge=class extends Error{expiry;isBadToken;constructor(e,t){super(e),Object.setPrototypeOf(this,Ge.prototype),this.name="AuthTokenExpiredError",this.message=e,this.expiry=new Date(t),Error.captureStackTrace&&!T()?Error.captureStackTrace(this,arguments.callee):this.stack=new Error().stack}},dt=class extends Error{isBadToken;constructor(e){super(e),Object.setPrototypeOf(this,dt.prototype),this.name="AuthTokenInvalidError",this.message=e,Error.captureStackTrace&&!T()?Error.captureStackTrace(this,arguments.callee):this.stack=new Error().stack}},pt=class extends Error{date;isBadToken;constructor(e,t){super(e),Object.setPrototypeOf(this,pt.prototype),this.name="AuthTokenNotBeforeError",this.message=e,this.date=t,Error.captureStackTrace&&!T()?Error.captureStackTrace(this,arguments.callee):this.stack=new Error().stack}},ye=class extends Error{expiredAt;date;isBadToken;constructor(e){super(e),Object.setPrototypeOf(this,ye.prototype),this.name="AuthTokenError",this.message=e,Error.captureStackTrace&&!T()?Error.captureStackTrace(this,arguments.callee):this.stack=new Error().stack}},ft=class extends Error{constructor(e){super(e),Object.setPrototypeOf(this,ft.prototype),this.name="AuthError",this.message=e,Error.captureStackTrace&&!T()?Error.captureStackTrace(this,arguments.callee):this.stack=new Error().stack}},G=class extends Error{type;constructor(e,t){super(e),Object.setPrototypeOf(this,G.prototype),this.name="SilentMiddlewareBlockedError",this.message=e,this.type=t,Error.captureStackTrace&&!T()?Error.captureStackTrace(this,arguments.callee):this.stack=new Error().stack}},y=class extends Error{constructor(e){super(e),Object.setPrototypeOf(this,y.prototype),this.name="InvalidActionError",this.message=e,Error.captureStackTrace&&!T()?Error.captureStackTrace(this,arguments.callee):this.stack=new Error().stack}},ie=class extends Error{constructor(e){super(e),Object.setPrototypeOf(this,ie.prototype),this.name="InvalidArgumentsError",this.message=e,Error.captureStackTrace&&!T()?Error.captureStackTrace(this,arguments.callee):this.stack=new Error().stack}},pe=class extends Error{constructor(e){super(e),Object.setPrototypeOf(this,pe.prototype),this.name="InvalidOptionsError",this.message=e,Error.captureStackTrace&&!T()?Error.captureStackTrace(this,arguments.callee):this.stack=new Error().stack}},mt=class extends Error{code;constructor(e,t){super(e),Object.setPrototypeOf(this,mt.prototype),this.name="SocketProtocolError",this.message=e,this.code=t,Error.captureStackTrace&&!T()?Error.captureStackTrace(this,arguments.callee):this.stack=new Error().stack}},Pe=class extends Error{constructor(e){super(e),Object.setPrototypeOf(this,Pe.prototype),this.name="ServerProtocolError",this.message=e,Error.captureStackTrace&&!T()?Error.captureStackTrace(this,arguments.callee):this.stack=new Error().stack}},yt=class extends Error{constructor(e){super(e),Object.setPrototypeOf(this,yt.prototype),this.name="TimeoutError",this.message=e,Error.captureStackTrace&&!T()?Error.captureStackTrace(this,arguments.callee):this.stack=new Error().stack}},fe=class extends Error{constructor(e){super(e),Object.setPrototypeOf(this,fe.prototype),this.name="BrokerError",this.message=e,Error.captureStackTrace&&!T()?Error.captureStackTrace(this,arguments.callee):this.stack=new Error().stack}},fr={1001:"Socket was disconnected",1002:"A WebSocket protocol error was encountered",1003:"Server terminated socket because it received invalid data",1005:"Socket closed without status code",1006:"Socket hung up",1007:"Message format was incorrect",1008:"Encountered a policy violation",1009:"Message was too big to process",1010:"Client ended the connection because the server did not comply with extension requirements",1011:"Server encountered an unexpected fatal condition",4e3:"Server ping timed out",4001:"Client pong timed out",4002:"Server failed to sign auth token",4003:"Failed to complete handshake",4004:"Client failed to save auth token",4005:"Did not receive #handshake from client before timeout",4006:"Failed to bind socket to message broker",4007:"Client connection establishment timed out",4008:"Server rejected handshake from client",4009:"Server received a message before the client handshake"},mr={1e3:"Socket closed normally",1001:"Socket hung up"},yr={domain:1,domainEmitter:1,domainThrown:1};function Ce(e,t){let r;if(e&&typeof e=="object"){r={message:e.message},t&&(r.stack=e.stack);for(let n in e)yr[n]||(r[n]=e[n])}else typeof e=="function"?r="[function "+(e.name||"anonymous")+"]":r=e;return pr(r)}function gr(e){let t=null;if(e!=null)if(typeof e=="object"){t=new Error(e.message);for(let r in e)e.hasOwnProperty(r)&&(t[r]=e[r])}else t=e;return t}var br=["00","01","02","03","04","05","06","07","08","09","0a","0b","0c","0d","0e","0f","10","11","12","13","14","15","16","17","18","19","1a","1b","1c","1d","1e","1f","20","21","22","23","24","25","26","27","28","29","2a","2b","2c","2d","2e","2f","30","31","32","33","34","35","36","37","38","39","3a","3b","3c","3d","3e","3f","40","41","42","43","44","45","46","47","48","49","4a","4b","4c","4d","4e","4f","50","51","52","53","54","55","56","57","58","59","5a","5b","5c","5d","5e","5f","60","61","62","63","64","65","66","67","68","69","6a","6b","6c","6d","6e","6f","70","71","72","73","74","75","76","77","78","79","7a","7b","7c","7d","7e","7f","80","81","82","83","84","85","86","87","88","89","8a","8b","8c","8d","8e","8f","90","91","92","93","94","95","96","97","98","99","9a","9b","9c","9d","9e","9f","a0","a1","a2","a3","a4","a5","a6","a7","a8","a9","aa","ab","ac","ad","ae","af","b0","b1","b2","b3","b4","b5","b6","b7","b8","b9","ba","bb","bc","bd","be","bf","c0","c1","c2","c3","c4","c5","c6","c7","c8","c9","ca","cb","cc","cd","ce","cf","d0","d1","d2","d3","d4","d5","d6","d7","d8","d9","da","db","dc","dd","de","df","e0","e1","e2","e3","e4","e5","e6","e7","e8","e9","ea","eb","ec","ed","ee","ef","f0","f1","f2","f3","f4","f5","f6","f7","f8","f9","fa","fb","fc","fd","fe","ff"];function wr(e){let t=0,r="",n=new Uint8Array(e);for(;t<n.length;t++)r+=br[n[t]];return r}function Tr(e=9){let t=new Uint8Array(e);try{return wr(t)}catch{return null}}var Er=class{verifyToken(e,t,r){r=r||{};let n=Object.assign({},r);return delete n.socket,typeof e=="string"||e==null?new Promise((i,s)=>{st(e,t,n).then(a=>{a?i(a):s(new ye("Invalid token"))}).catch(a=>s(a))}):Promise.reject(new ie("Invalid token format - Token must be a string"))}signToken(e,t,r){r=r||{};let n=Object.assign({},r);return new Promise((i,s)=>{ut(e,t,n).then(a=>{a?i(a):s(new ye("Sign token error"))}).catch(a=>s(a))})}},gt={};or(gt,{decode:()=>_r,encode:()=>Ar});var U=typeof self=="object"&&self.self===self&&self||typeof window=="object"&&window.global===window&&window||void 0;function W(){return typeof process=="object"}var de="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",kr=/^[ \n\r\t]*[{\[]/,Sr=e=>{let t=new Uint8Array(e),r=t.length,n="";for(let i=0;i<r;i+=3)n+=de[t[i]>>2],n+=de[(t[i]&3)<<4|t[i+1]>>4],n+=de[(t[i+1]&15)<<2|t[i+2]>>6],n+=de[t[i+2]&63];return r%3===2?n=n.substring(0,n.length-1)+"=":r%3===1&&(n=n.substring(0,n.length-2)+"=="),n},vr=(e,t)=>{if(U.ArrayBuffer&&t instanceof U.ArrayBuffer)return{base64:!0,data:Sr(t)};if(U.Buffer){if(t instanceof U.Buffer)return{base64:!0,data:t.toString("base64")};if(t&&t.type==="Buffer"&&Array.isArray(t.data)){let r;return U.Buffer.from?r=U.Buffer.from(t.data):r=new U.Buffer(t.data),{base64:!0,data:r.toString("base64")}}}return t};function _r(e){if(e===null)return null;if(e==="#1"||e==="#2")return e;let t=e.toString();if(!kr.test(t))return t;try{return JSON.parse(t)}catch{}return t}function Ar(e){return e==="#1"||e==="#2"?e:W()?JSON.stringify(e,vr):JSON.stringify(e)}var xr=class{socket;id;sent;constructor(e,t){this.socket=e,this.id=t,this.sent=!1}end(e,t){if(this.id){let r={rid:this.id};e!==void 0&&(r.data=e),this._respond(r,t)}}error(e,t,r){if(this.id){let n=Ce(e),i={rid:this.id,error:n};t!==void 0&&(i.data=t),this._respond(i,r)}}callback(e,t,r){e?this.error(e,t,r):this.end(t,r)}_respond(e,t){if(this.sent)throw new y(`Response ${this.id} has already been sent`);this.sent=!0,this.socket.sendObject(e,t)}};function Dr(e){return Object.prototype.toString.call(e)==="[object Date]"}function Gr(e){return!!e&&typeof e=="object"&&Object.prototype.toString.call(e)!=="[object Array]"}function ge(e){if(Dr(e))return new Date(e.getTime());if(Array.isArray(e))return[...e].map(t=>ge(t));if(e instanceof Map||e instanceof Set)return e;if(Gr(e)){let t={};for(let r of Object.keys(e))t[r]=ge(e[r]);return t}return e}var I=class extends be{id;server;socket;state;authState;request;remoteAddress;remoteFamily;remotePort;forwardedForAddress;channelSubscriptions;channelSubscriptionsCount;authToken;signedAuthToken;exchange;_handshakeTimeoutRef;CONNECTING=I.CONNECTING;OPEN=I.OPEN;CLOSED=I.CLOSED;AUTHENTICATED=I.AUTHENTICATED;UNAUTHENTICATED=I.UNAUTHENTICATED;_autoAckRPCs;_callbackMap;_pingIntervalTicker;_receiverDemux;_procedureDemux;_cid;_batchSendList;_pingTimeoutTicker;_batchTimeout;constructor(e,t,r){super(),this._autoAckRPCs={"#publish":1},this.id=e,this.server=t,this.socket=r,this.state=this.CONNECTING,this.authState=this.UNAUTHENTICATED,this._receiverDemux=new ne,this._procedureDemux=new ne,this.request=this.socket.upgradeReq||{},this.request.connection?(this.remoteAddress=this.request.connection.remoteAddress,this.remoteFamily=this.request.connection.remoteFamily,this.remotePort=this.request.connection.remotePort):(this.remoteAddress=this.request.remoteAddress,this.remoteFamily=this.request.remoteFamily,this.remotePort=this.request.remotePort),this.request.forwardedForAddress&&(this.forwardedForAddress=this.request.forwardedForAddress),this._cid=1,this._callbackMap={},this._batchSendList=[],this.channelSubscriptions={},this.channelSubscriptionsCount=0,this._on("error",async n=>{this.emitError(n)}),this._on("close",async(n,i)=>{let s=i&&i.toString();this._onClose(n,s)}),this.server.pingTimeoutDisabled||(this._pingIntervalTicker=setInterval(this._sendPing.bind(this),this.server.pingInterval)),this._resetPongTimeout(),this._on("message",async n=>{let i=W()?n:n.data;this._resetPongTimeout(),this.emit("message",{message:i});let s;try{s=this.decode(i)}catch(a){a.name==="Error"&&(a.name="InvalidMessageError"),this.emitError(a);return}if(s==="#2"){let a=this.getAuthToken();this.server.isAuthTokenExpired(a)&&this.deauthenticate()}else if(Array.isArray(s)){let a=s.length;for(let o=0;o<a;o++)this._handleRemoteEventObject(s[o],i)}else this._handleRemoteEventObject(s,i)})}receiver(e){return this._receiverDemux.stream(e)}closeReceiver(e){this._receiverDemux.close(e)}procedure(e){return this._procedureDemux.stream(e)}closeProcedure(e){this._procedureDemux.close(e)}getState(){return this.state}getBytesReceived(){return this.socket?.bytesReceived}emitError(e){this.emit("error",{error:e})}disconnect(e,t){if(e=e||1e3,typeof e!="number"){let r=new ie("If specified, the code argument must be a number");this.emitError(r)}this.state!==this.CLOSED&&(this._onClose(e,t),this.socket.close(e,t))}terminate(){this.socket.terminate()}send(e,t){W()?this.socket.send(e,t,r=>{r&&this._onClose(1006,r.toString())}):this.socket.send(e)}decode(e){return this.server.codec.decode(e)}encode(e){return this.server.codec.encode(e)}sendObjectBatch(e){this._batchSendList.push(e),!this._batchTimeout&&(this._batchTimeout=setTimeout(()=>{if(delete this._batchTimeout,this._batchSendList.length){let t;try{t=this.encode(this._batchSendList)}catch(r){this.emitError(r)}t!=null&&this.send(t),this._batchSendList=[]}},this.server.options.pubSubBatchDuration||0))}sendObjectSingle(e){let t;try{t=this.encode(e)}catch(r){this.emitError(r)}t!=null&&this.send(t)}sendObject(e,t){t&&t.batch?this.sendObjectBatch(e):this.sendObjectSingle(e)}transmit(e,t,r){return this.server.verifyOutboundEvent(this,e,t,r,(n,i)=>{let s={event:e};i!==void 0&&(s.data=i),n||(r&&r.useCache&&r.stringifiedData!=null?this.send(r.stringifiedData):this.sendObject(s))}),Promise.resolve()}invoke(e,t,r){return new Promise((n,i)=>{this.server.verifyOutboundEvent(this,e,t,r,(s,a)=>{if(s){i(s);return}let o={event:e,cid:this._nextCallId()};a!==void 0&&(o.data=a);let c=setTimeout(()=>{let u=new yt(`Event response for "${e}" timed out`);delete this._callbackMap[o.cid],i(u)},this.server.ackTimeout);this._callbackMap[o.cid]={callback:(u,h)=>{if(u){i(u);return}n(h)},timeout:c},r&&r.useCache&&r.stringifiedData!=null?this.send(r.stringifiedData):this.sendObject(o)})})}triggerAuthenticationEvents(e){if(e!==this.AUTHENTICATED){let t={oldAuthState:e,newAuthState:this.authState,authToken:this.authToken};this.emit("authStateChange",t),this.server.emit("authenticationStateChange",{socket:this,...t})}this.emit("authenticate",{authToken:this.authToken}),this.server.emit("authentication",{socket:this,authToken:this.authToken})}async setAuthToken(e,t){let r=ge(e),n=this.authState;if(this.authState=this.AUTHENTICATED,t==null)t={};else if(t=ge(t),t.algorithm!=null){delete t.algorithm;let l=new ie("Cannot change auth token algorithm at runtime - It must be specified as a config option on launch");this.emitError(l)}t.mutatePayload=!0;let i=t.rejectOnFailedDelivery;delete t.rejectOnFailedDelivery;let s=this.server.defaultSignatureOptions,a;t.expiresIn==null?a=s.expiresIn:a=t.expiresIn,r?r.exp==null?t.expiresIn=a:delete t.expiresIn:t.expiresIn=a,s.algorithm!=null&&(t.algorithm=s.algorithm),this.authToken=r;let o=l=>{throw this.emitError(l),this._onClose(4002,l.toString()),this.socket.close(4002),l},c=async l=>{let f={token:l};try{return await this.invoke("#setAuthToken",f)}catch(k){throw new ft(`Failed to deliver auth token to client - ${k}`)}},u;try{u=this.server.auth.signToken(r,this.server.signatureKey,t)}catch(l){o(l)}let h;if(u instanceof Promise)try{h=await u}catch(l){o(l)}else h=u;this.authToken===r&&(this.signedAuthToken=h,this.emit("authTokenSigned",{signedAuthToken:h})),this.triggerAuthenticationEvents(n);try{await c(h)}catch(l){if(this.emitError(l),i)throw l}}getAuthToken(){return this.authToken}deauthenticateSelf(){let e=this.authState,t=this.authToken;if(this.signedAuthToken=null,this.authToken=null,this.authState=this.UNAUTHENTICATED,e!==this.UNAUTHENTICATED){let r={oldAuthState:e,newAuthState:this.authState};this.emit("authStateChange",r),this.server.emit("authenticationStateChange",{socket:this,...r})}this.emit("deauthenticate",{oldAuthToken:t}),this.server.emit("deauthentication",{socket:this,oldAuthToken:t})}deauthenticate(){return this.deauthenticateSelf(),this.invoke("#removeAuthToken")}kickOut(e,t){return e==null?Object.keys(this.channelSubscriptions).forEach(r=>{delete this.channelSubscriptions[r],this.channelSubscriptionsCount--,this.transmit("#kickOut",{message:t,channel:r})}):(delete this.channelSubscriptions[e],this.channelSubscriptionsCount--,this.transmit("#kickOut",{message:t,channel:e})),this.server.brokerEngine.unsubscribeSocket(this,e)}subscriptions(){return Object.keys(this.channelSubscriptions)}isSubscribed(e){return!!this.channelSubscriptions[e]}_onClose(e,t){if(clearInterval(this._pingIntervalTicker),clearTimeout(this._pingTimeoutTicker),this.state!==this.CLOSED){let r=this.state;if(this.state=this.CLOSED,r===this.CONNECTING?this.emit("connectAbort",{code:e,reason:t}):this.emit("disconnect",{code:e,reason:t}),this.emit("close",{code:e,reason:t}),!I.ignoreStatuses[e]){let n;if(t){let s;if(typeof t=="object")try{s=JSON.stringify(t)}catch{s=t.toString()}else s=t;n=`Socket connection closed with status code ${e} and reason: ${s}`}else n=`Socket connection closed with status code ${e}`;let i=new mt(I.errorStatuses[e]||n,e);this.emitError(i)}}}_sendPing(){this.state!==this.CLOSED&&this.sendObject("#1")}_handleRemoteEventObject(e,t){if(e&&e.event!=null){let r=e.event,n={socket:this,event:r,data:e.data};if(e.cid==null)this.server.verifyInboundRemoteEvent(n,(i,s)=>{i||this._receiverDemux.write(r,s)});else{n.cid=e.cid;let i=new xr(this,n.cid);this.server.verifyInboundRemoteEvent(n,(s,a,o)=>{s?i.error(s):this._autoAckRPCs[r]?o!==void 0?i.end(o):i.end():this._procedureDemux.write(r,{data:a,end:c=>{i.end(c)},error:c=>{i.error(c)}})})}}else if(e&&e.rid!=null){let r=this._callbackMap[e.rid];if(r){clearTimeout(r.timeout),delete this._callbackMap[e.rid];let n=gr(e.error);r.callback(n,e.data)}}else this.emit("raw",{message:t})}_resetPongTimeout(){this.server.pingTimeoutDisabled||(clearTimeout(this._pingTimeoutTicker),this._pingTimeoutTicker=setTimeout(()=>{this._onClose(4001),this.socket.close(4001)},this.server.pingTimeout))}_nextCallId(){return this._cid++}_on(e,t){W()?this.socket.on(e,t):this.socket.addEventListener(e,t)}},O=I;x(O,"CONNECTING","connecting"),x(O,"OPEN","open"),x(O,"CLOSED","closed"),x(O,"AUTHENTICATED","authenticated"),x(O,"UNAUTHENTICATED","unauthenticated"),x(O,"ignoreStatuses",mr),x(O,"errorStatuses",fr);async function Pr(e,t){for(let r=0;r<e.length;r++)await t(e[r],r,e)}async function C(e,...t){let r=typeof t[t.length-1]=="function"?t.pop():()=>{},n=null,i=[];return await Pr(e,async s=>{if(!n)try{let a=await s(...t);i.push(a)}catch(a){i.push(void 0),n=a}}),r(n,i),i}var me=class extends Ie{PENDING;SUBSCRIBED;UNSUBSCRIBED;name;client;_pendingSubscriptionCid;_eventDemux;_dataStream;constructor(e,t,r,n){super(),this.PENDING=me.PENDING,this.SUBSCRIBED=me.SUBSCRIBED,this.UNSUBSCRIBED=me.UNSUBSCRIBED,this.name=e,this.client=t,this._eventDemux=r,this._dataStream=n}get state(){return this.client.getChannelState(this.name)}set state(e){throw new Error("Cannot directly set channel state")}get options(){return this.client.getChannelOptions(this.name)}set options(e){throw new Error("Cannot directly set channel options")}createAsyncIterator(e){return this._dataStream.createAsyncIterator(e)}listener(e){return this._eventDemux.stream(`${this.name}/${e}`)}closeListener(e){this._eventDemux.close(`${this.name}/${e}`)}closeAllListeners(){this._eventDemux.closeAll()}close(){this.client.closeChannel(this.name)}subscribe(e){this.client.subscribe(this.name,e)}unsubscribe(){this.client.unsubscribe(this.name)}isSubscribed(e){return this.client.isSubscribed(this.name,e)}publish(e){return this.client.publish(this.name,e)}},A=me;x(A,"PENDING","pending"),x(A,"SUBSCRIBED","subscribed"),x(A,"UNSUBSCRIBED","unsubscribed");var Cr=class extends be{_broker;_channelMap;_channelEventDemux;_channelDataDemux;constructor(e){super(),this._broker=e,this._channelMap={},this._channelEventDemux=new ne,this._channelDataDemux=new ne,(async()=>{for await(let{channel:t,data:r}of this._broker.listener("publish"))this._channelDataDemux.write(t,r)})()}destroy(){this._broker.closeAllListeners()}publish(e,t){return this._broker.publish(e,t)}subscribe(e){let t=this._channelMap[e];t||(t={name:e,state:A.PENDING},this._channelMap[e]=t,this._triggerChannelSubscribe(t));let r=this._channelDataDemux.stream(e);return new A(e,this,this._channelEventDemux,r)}unsubscribe(e){let t=this._channelMap[e];t&&this._triggerChannelUnsubscribe(t)}channel(e){let t=this._channelDataDemux.stream(e);return new A(e,this,this._channelEventDemux,t)}getChannelState(e){let t=this._channelMap[e];return t?t.state:A.UNSUBSCRIBED}getChannelOptions(e){return{}}subscriptions(e){let t=[];return Object.keys(this._channelMap).forEach(r=>{(e||this._channelMap[r].state===A.SUBSCRIBED)&&t.push(r)}),t}isSubscribed(e,t){let r=this._channelMap[e];return t?!!r:!!r&&r.state===A.SUBSCRIBED}_triggerChannelSubscribe(e){let t=e.name;e.state=A.SUBSCRIBED,this._channelEventDemux.write(`${t}/subscribe`,{}),this.emit("subscribe",{channel:t})}_triggerChannelUnsubscribe(e){let t=e.name;delete this._channelMap[t],e.state===A.SUBSCRIBED&&(this._channelEventDemux.write(`${t}/unsubscribe`,{}),this.emit("unsubscribe",{channel:t}))}},Ir=class extends be{isReady;_exchangeClient;_clientSubscribers;_clientSubscribersCounter;constructor(){super(),this.isReady=!1,this._exchangeClient=new Cr(this),this._clientSubscribers={},this._clientSubscribersCounter={},setTimeout(()=>{this.isReady=!0,this.emit("ready",{})},0)}exchange(){return this._exchangeClient}subscribeSocket(e,t){return this._clientSubscribers[t]||(this._clientSubscribers[t]={},this._clientSubscribersCounter[t]=0),this._clientSubscribers[t][e.id]||(this._clientSubscribersCounter[t]++,this.emit("subscribe",{channel:t})),this._clientSubscribers[t][e.id]=e,Promise.resolve()}unsubscribeSocket(e,t){return this._clientSubscribers[t]&&this._clientSubscribers[t][e.id]&&(this._clientSubscribersCounter[t]--,delete this._clientSubscribers[t][e.id],this._clientSubscribersCounter[t]<=0&&(delete this._clientSubscribers[t],delete this._clientSubscribersCounter[t],this.emit("unsubscribe",{channel:t}))),Promise.resolve()}subscriptions(){return Object.keys(this._clientSubscribers)}isSubscribed(e){return!!this._clientSubscribers[e]}publish(e,t,r){let n={channel:e,data:t},i=this._clientSubscribers[e]||{};return Object.keys(i).forEach(s=>{i[s].transmit("#publish",n)}),r||this.emit("publish",n),Promise.resolve()}},bt=class extends be{options;MIDDLEWARE_HANDSHAKE_WS;MIDDLEWARE_HANDSHAKE_AG;MIDDLEWARE_TRANSMIT;MIDDLEWARE_INVOKE;MIDDLEWARE_SUBSCRIBE;MIDDLEWARE_PUBLISH_IN;MIDDLEWARE_PUBLISH_OUT;MIDDLEWARE_AUTHENTICATE;origins;ackTimeout;handshakeTimeout;pingInterval;pingTimeout;pingTimeoutDisabled;allowClientPublish;perMessageDeflate;httpServer;socketChannelLimit;brokerEngine;appName;middlewareEmitWarnings;isReady;signatureKey;verificationKey;authVerifyAsync;authSignAsync;defaultVerificationOptions;defaultSignatureOptions;auth;codec;clients;clientsCount;pendingClients;pendingClientsCount;exchange;_middleware;_allowAllOrigins;wsServer;_path;constructor(e){super();let t={brokerEngine:new Ir,wsEngine:"ws",wsEngineServerOptions:{},maxPayload:null,allowClientPublish:!0,ackTimeout:1e4,handshakeTimeout:1e4,pingTimeout:2e4,pingTimeoutDisabled:!1,pingInterval:8e3,origins:"*:*",appName:hr(),path:"/topgunsocket/",authDefaultExpiry:86400,authSignAsync:!1,authVerifyAsync:!0,pubSubBatchDuration:null,middlewareEmitWarnings:!0};this.options=Object.assign(t,e||{}),this.MIDDLEWARE_HANDSHAKE_WS="handshakeWS",this.MIDDLEWARE_HANDSHAKE_AG="handshakeAG",this.MIDDLEWARE_TRANSMIT="transmit",this.MIDDLEWARE_INVOKE="invoke",this.MIDDLEWARE_SUBSCRIBE="subscribe",this.MIDDLEWARE_PUBLISH_IN="publishIn",this.MIDDLEWARE_PUBLISH_OUT="publishOut",this.MIDDLEWARE_AUTHENTICATE="authenticate",this._middleware={},this._middleware[this.MIDDLEWARE_HANDSHAKE_WS]=[],this._middleware[this.MIDDLEWARE_HANDSHAKE_AG]=[],this._middleware[this.MIDDLEWARE_TRANSMIT]=[],this._middleware[this.MIDDLEWARE_INVOKE]=[],this._middleware[this.MIDDLEWARE_SUBSCRIBE]=[],this._middleware[this.MIDDLEWARE_PUBLISH_IN]=[],this._middleware[this.MIDDLEWARE_PUBLISH_OUT]=[],this._middleware[this.MIDDLEWARE_AUTHENTICATE]=[],this.origins=t.origins,this._allowAllOrigins=this.origins.indexOf("*:*")!==-1,this.ackTimeout=t.ackTimeout,this.handshakeTimeout=t.handshakeTimeout,this.pingInterval=t.pingInterval,this.pingTimeout=t.pingTimeout,this.pingTimeoutDisabled=t.pingTimeoutDisabled,this.allowClientPublish=t.allowClientPublish,this.perMessageDeflate=t.perMessageDeflate,this.httpServer=t.httpServer,this.socketChannelLimit=t.socketChannelLimit,this.brokerEngine=t.brokerEngine,this.appName=t.appName||"",this.middlewareEmitWarnings=t.middlewareEmitWarnings,this._path=t.path.replace(/\/?$/,"/").replace(/^\/?/,"/"),this.brokerEngine.isReady?(this.isReady=!0,this.emit("ready",{})):(this.isReady=!1,(async()=>(await this.brokerEngine.listener("ready").once(),this.isReady=!0,this.emit("ready",{})))());let r=typeof t.wsEngine=="string"?ht(t.wsEngine):t.wsEngine;if(!r||!r.Server)throw new pe("The wsEngine option must be a path or module name which points to a valid WebSocket engine module with a compatible interface");let n=r.Server;if(t.authPrivateKey!=null||t.authPublicKey!=null){if(t.authPrivateKey==null)throw new pe("The authPrivateKey option must be specified if authPublicKey is specified");if(t.authPublicKey==null)throw new pe("The authPublicKey option must be specified if authPrivateKey is specified");this.signatureKey=t.authPrivateKey,this.verificationKey=t.authPublicKey}else t.authKey==null&&(t.authKey=Tr(32)),this.signatureKey=t.authKey,this.verificationKey=t.authKey;this.authVerifyAsync=t.authVerifyAsync,this.authSignAsync=t.authSignAsync,this.defaultVerificationOptions={async:this.authVerifyAsync},t.authVerifyAlgorithms!=null?this.defaultVerificationOptions.algorithms=t.authVerifyAlgorithms:t.authAlgorithm!=null&&(this.defaultVerificationOptions.algorithms=[t.authAlgorithm]),this.defaultSignatureOptions={expiresIn:t.authDefaultExpiry,async:this.authSignAsync},t.authAlgorithm!=null&&(this.defaultSignatureOptions.algorithm=t.authAlgorithm),t.authEngine?this.auth=t.authEngine:this.auth=new Er,t.codecEngine?this.codec=t.codecEngine:this.codec=gt,this.clients={},this.clientsCount=0,this.pendingClients={},this.pendingClientsCount=0,this.exchange=this.brokerEngine.exchange();let i=t.wsEngineServerOptions||{};i.server=this.httpServer,i.verifyClient=this.verifyHandshake.bind(this),i.path==null&&this._path!=null&&(i.path=this._path),i.perMessageDeflate==null&&this.perMessageDeflate!=null&&(i.perMessageDeflate=this.perMessageDeflate),i.handleProtocols==null&&t.handleProtocols!=null&&(i.handleProtocols=t.handleProtocols),i.maxPayload==null&&t.maxPayload!=null&&(i.maxPayload=t.maxPayload),i.clientTracking==null&&(i.clientTracking=!1),W()&&(this.wsServer=new n(i),this.wsServer.on("error",this._handleServerError.bind(this)),this.wsServer.on("connection",this.handleSocketConnection.bind(this)))}handleSocketConnection(e,t){!e.upgradeReq&&t&&(e.upgradeReq=t);let r=this.generateId(),n=new O(r,this,e);n.exchange=this.exchange,this._handleSocketErrors(n),this.pendingClients[r]=n,this.pendingClientsCount++,(async()=>{for await(let s of n.procedure("#authenticate")){let a=s.data;this._processAuthToken(n,a,(o,c,u)=>{if(o?c&&n.deauthenticate():n.triggerAuthenticationEvents(u),o&&c)s.error(o);else{let h={isAuthenticated:!!n.authToken,authError:Ce(o)};s.end(h)}})}})(),(async()=>{for await(let s of n.receiver("#removeAuthToken"))n.deauthenticateSelf()})(),(async()=>{for await(let s of n.procedure("#subscribe")){let a=s.data;a?typeof a=="string"&&(a={channel:a}):a={},(async()=>{if(n.state===n.OPEN){try{await this._subscribeSocket(n,a)}catch(c){let u=new fe(`Failed to subscribe socket to the ${a.channel} channel - ${c}`);s.error(u),n.emitError(u);return}if(a.batch){s.end(void 0,{batch:!0});return}s.end();return}let o=new y("Cannot subscribe socket to a channel before it has completed the handshake");s.error(o),this.emitWarning(o)})()}})(),(async()=>{for await(let s of n.procedure("#unsubscribe")){let a=s.data,o;try{this._unsubscribeSocket(n,a)}catch(c){o=new fe(`Failed to unsubscribe socket from the ${a} channel - ${c}`)}o?(s.error(o),n.emitError(o)):s.end()}})();let i=(s,a,o)=>{clearTimeout(n._handshakeTimeoutRef),n.closeProcedure("#handshake"),n.closeProcedure("#authenticate"),n.closeProcedure("#subscribe"),n.closeProcedure("#unsubscribe"),n.closeReceiver("#removeAuthToken"),n.closeListener("authenticate"),n.closeListener("authStateChange"),n.closeListener("deauthenticate"),this.clients[r]&&(delete this.clients[r],this.clientsCount--),this.pendingClients[r]&&(delete this.pendingClients[r],this.pendingClientsCount--),s==="disconnect"?this.emit("disconnection",{socket:n,code:a,reason:o}):s==="abort"&&this.emit("connectionAbort",{socket:n,code:a,reason:o}),this.emit("closure",{socket:n,code:a,reason:o}),this._unsubscribeSocketFromAllChannels(n)};(async()=>{let s=await n.listener("disconnect").once();i("disconnect",s.code,s.data)})(),(async()=>{let s=await n.listener("connectAbort").once();i("abort",s.code,s.data)})(),n._handshakeTimeoutRef=setTimeout(this._handleHandshakeTimeout.bind(this,n),this.handshakeTimeout),(async()=>{for await(let s of n.procedure("#handshake")){let a=(s.data||{}).authToken||null;clearTimeout(n._handshakeTimeoutRef),this._passThroughHandshakeAGMiddleware({socket:n},(o,c)=>{if(o){o.statusCode==null&&(o.statusCode=c),s.error(o),n.disconnect(o.statusCode);return}this._processAuthToken(n,a,(u,h,l)=>{if(n.state===n.CLOSED)return;let f={id:n.id,pingTimeout:this.pingTimeout},k={id:n.id,pingTimeout:this.pingTimeout};u&&a!=null&&(f.authError=Ce(u),k.authError=u,h&&n.deauthenticate()),f.isAuthenticated=!!n.authToken,k.isAuthenticated=f.isAuthenticated,this.pendingClients[r]&&(delete this.pendingClients[r],this.pendingClientsCount--),this.clients[r]=n,this.clientsCount++,n.state=n.OPEN,f.isAuthenticated&&(async()=>(await this.listener("connection").once(),n.triggerAuthenticationEvents(l)))(),n.emit("connect",k),this.emit("connection",{socket:n,...k}),s.end(f)})})}})(),this.emit("handshake",{socket:n})}setAuthEngine(e){this.auth=e}setCodecEngine(e){this.codec=e}emitError(e){this.emit("error",{error:e})}emitWarning(e){this.emit("warning",{warning:e})}close(e){return this.isReady=!1,new Promise((t,r)=>{if(W()){if(this.wsServer.close(n=>{if(n){r(n);return}t()}),!e)for(let n of Object.values(this.clients))n.terminate()}else for(let n of Object.values(this.clients))n.disconnect(1011,"WebSocket broken.")})}getPath(){return this._path}generateId(){return dr()}addMiddleware(e,t){if(!this._middleware[e])throw new ie(`Middleware type "${e}" is not supported`);this._middleware[e].push(t)}removeMiddleware(e,t){let r=this._middleware[e];this._middleware[e]=r.filter(n=>n!==t)}async verifyHandshake(e,t){let r=e.req,n=e.origin;(n==="null"||n==null)&&(n="*");let i=!1;if(this._allowAllOrigins)i=!0;else try{let s=new URL(n),a=s.port||(s.protocol==="https:"?443:80);i=~this.origins.indexOf(s.hostname+":"+a)||~this.origins.indexOf(s.hostname+":*")||~this.origins.indexOf("*:"+a)}catch{}if(i){let s=this._middleware[this.MIDDLEWARE_HANDSHAKE_WS];if(s.length){let a=!1;await C(s,r,o=>{a?this.emitWarning(new y(`Callback for ${this.MIDDLEWARE_HANDSHAKE_WS} middleware was already invoked`)):(a=!0,o?(o===!0||o.silent?o=new G(`Action was silently blocked by ${this.MIDDLEWARE_HANDSHAKE_WS} middleware`,this.MIDDLEWARE_HANDSHAKE_WS):this.middlewareEmitWarnings&&this.emitWarning(o),t(!1,401,typeof o=="string"?o:o.message)):t(!0))})}else t(!0)}else{let s=new Pe(`Failed to authorize socket handshake - Invalid origin: ${n}`);this.emitWarning(s),t(!1,403,s.message)}}verifyInboundRemoteEvent(e,t){let r=e.socket,n=r.getAuthToken();this.isAuthTokenExpired(n)&&(e.authTokenExpiredError=new Ge("The socket auth token has expired",n.exp),r.deauthenticate()),this._passThroughMiddleware(e,t)}isAuthTokenExpired(e){if(e&&e.exp!=null){let t=Date.now(),r=e.exp*1e3;return t>r}return!1}async verifyOutboundEvent(e,t,r,n,i){let s=!1;if(t==="#publish"){let a={socket:e,channel:r.channel,data:r.data};await C(this._middleware[this.MIDDLEWARE_PUBLISH_OUT],a,o=>{s?this.emitWarning(new y(`Callback for ${this.MIDDLEWARE_PUBLISH_OUT} middleware was already invoked`)):(s=!0,a.data!==void 0&&(r.data=a.data),o?(o===!0||o.silent?o=new G(`Action was silently blocked by ${this.MIDDLEWARE_PUBLISH_OUT} middleware`,this.MIDDLEWARE_PUBLISH_OUT):this.middlewareEmitWarnings&&this.emitWarning(o),i(o,r)):(n&&a.useCache&&(n.useCache=!0),i(null,r)))})}else i(null,r)}async _processSubscribeAction(e,t,r){let n=!1,i=e.data||{};t.channel=i.channel,t.waitForAuth=i.waitForAuth,t.data=i.data,t.waitForAuth&&t.authTokenExpiredError?r(t.authTokenExpiredError,i):await C(this._middleware[this.MIDDLEWARE_SUBSCRIBE],t,s=>{n?this.emitWarning(new y(`Callback for ${this.MIDDLEWARE_SUBSCRIBE} middleware was already invoked`)):(n=!0,s&&(s===!0||s.silent?s=new G(`Action was silently blocked by ${this.MIDDLEWARE_SUBSCRIBE} middleware`,this.MIDDLEWARE_SUBSCRIBE):this.middlewareEmitWarnings&&this.emitWarning(s)),t.data!==void 0&&(i.data=t.data),r(s,i))})}async _processTransmitAction(e,t,r){let n=!1;t.event=e.event,t.data=e.data,await C(this._middleware[this.MIDDLEWARE_TRANSMIT],t,i=>{n?this.emitWarning(new y(`Callback for ${this.MIDDLEWARE_TRANSMIT} middleware was already invoked`)):(n=!0,i&&(i===!0||i.silent?i=new G(`Action was silently blocked by ${this.MIDDLEWARE_TRANSMIT} middleware`,this.MIDDLEWARE_TRANSMIT):this.middlewareEmitWarnings&&this.emitWarning(i)),r(i,t.data))})}async _processPublishAction(e,t,r){let n=!1;if(this.allowClientPublish){let i=e.data||{};t.channel=i.channel,t.data=i.data,await C(this._middleware[this.MIDDLEWARE_PUBLISH_IN],t,s=>{if(n)this.emitWarning(new y(`Callback for ${this.MIDDLEWARE_PUBLISH_IN} middleware was already invoked`));else if(n=!0,t.data!==void 0&&(i.data=t.data),s)s===!0||s.silent?s=new G(`Action was silently blocked by ${this.MIDDLEWARE_PUBLISH_IN} middleware`,this.MIDDLEWARE_PUBLISH_IN):this.middlewareEmitWarnings&&this.emitWarning(s),r(s,i,t.ackData);else{if(typeof t.channel!="string"){s=new fe(`Socket ${t.socket.id} tried to publish to an invalid ${t.channel} channel`),this.emitWarning(s),r(s,i,t.ackData);return}(async()=>{let a;try{await this.exchange.publish(t.channel,t.data)}catch(o){a=o,this.emitWarning(a)}r(a,i,t.ackData)})()}})}else{let i=new y("Client publish feature is disabled");this.emitWarning(i),r(i)}}async _processInvokeAction(e,t,r){let n=!1;t.event=e.event,t.data=e.data,await C(this._middleware[this.MIDDLEWARE_INVOKE],t,i=>{n?this.emitWarning(new y(`Callback for ${this.MIDDLEWARE_INVOKE} middleware was already invoked`)):(n=!0,i&&(i===!0||i.silent?i=new G(`Action was silently blocked by ${this.MIDDLEWARE_INVOKE} middleware`,this.MIDDLEWARE_INVOKE):this.middlewareEmitWarnings&&this.emitWarning(i)),r(i,t.data))})}_passThroughMiddleware(e,t){let r={socket:e.socket};e.authTokenExpiredError!=null&&(r.authTokenExpiredError=e.authTokenExpiredError);let n=e.event;if(e.cid==null)if(this._isReservedRemoteEvent(n))if(n==="#publish")this._processPublishAction(e,r,t);else if(n==="#removeAuthToken")t(null,e.data);else{let i=new y(`The reserved transmitted event ${n} is not supported`);t(i)}else this._processTransmitAction(e,r,t);else if(this._isReservedRemoteEvent(n))if(n==="#subscribe")this._processSubscribeAction(e,r,t);else if(n==="#publish")this._processPublishAction(e,r,t);else if(n==="#handshake"||n==="#authenticate"||n==="#unsubscribe")t(null,e.data);else{let i=new y(`The reserved invoked event ${n} is not supported`);t(i)}else this._processInvokeAction(e,r,t)}_isReservedRemoteEvent(e){return typeof e=="string"&&e.indexOf("#")===0}_handleServerError(e){typeof e=="string"&&(e=new Pe(e)),this.emitError(e)}_handleHandshakeTimeout(e){e.disconnect(4005)}async _handleSocketErrors(e){for await(let t of e.listener("error"))this.emitWarning(t.error)}async _subscribeSocket(e,t){if(!t)throw new y(`Socket ${e.id} provided a malformated channel payload`);if(this.socketChannelLimit&&e.channelSubscriptionsCount>=this.socketChannelLimit)throw new y(`Socket ${e.id} tried to exceed the channel subscription limit of ${this.socketChannelLimit}`);let r=t.channel;if(typeof r!="string")throw new y(`Socket ${e.id} provided an invalid channel name`);e.channelSubscriptionsCount==null&&(e.channelSubscriptionsCount=0),e.channelSubscriptions[r]==null&&(e.channelSubscriptions[r]=!0,e.channelSubscriptionsCount++);try{await this.brokerEngine.subscribeSocket(e,r)}catch(n){throw delete e.channelSubscriptions[r],e.channelSubscriptionsCount--,n}e.emit("subscribe",{channel:r,subscribeOptions:t}),this.emit("subscription",{socket:e,channel:r,subscribeOptions:t})}_unsubscribeSocketFromAllChannels(e){Object.keys(e.channelSubscriptions).forEach(t=>{this._unsubscribeSocket(e,t)})}_unsubscribeSocket(e,t){if(typeof t!="string")throw new y(`Socket ${e.id} tried to unsubscribe from an invalid channel name`);if(!e.channelSubscriptions[t])throw new y(`Socket ${e.id} tried to unsubscribe from a channel which it is not subscribed to`);delete e.channelSubscriptions[t],e.channelSubscriptionsCount!=null&&e.channelSubscriptionsCount--,this.brokerEngine.unsubscribeSocket(e,t),e.emit("unsubscribe",{channel:t}),this.emit("unsubscription",{socket:e,channel:t})}_processTokenError(e){let t=null,r=!0;return e&&(e.name==="TokenExpiredError"?t=new Ge(e.message,e.expiredAt):e.name==="JsonWebTokenError"?t=new dt(e.message):e.name==="NotBeforeError"?(t=new pt(e.message,e.date),r=!1):t=new ye(e.message)),{authError:t,isBadToken:r}}_emitBadAuthTokenError(e,t,r){e.emit("badAuthToken",{authError:t,signedAuthToken:r}),this.emit("badSocketAuthToken",{socket:e,authError:t,signedAuthToken:r})}_processAuthToken(e,t,r){let n=Object.assign({socket:e},this.defaultVerificationOptions),i=o=>{let c=o.error,u=o.token,h=e.authState;if(u?(e.signedAuthToken=t,e.authToken=u,e.authState=e.AUTHENTICATED):(e.signedAuthToken=null,e.authToken=null,e.authState=e.UNAUTHENTICATED),e.authToken)this._passThroughAuthenticateMiddleware({socket:e,signedAuthToken:e.signedAuthToken,authToken:e.authToken},(l,f)=>{l&&(e.authToken=null,e.authState=e.UNAUTHENTICATED,f&&this._emitBadAuthTokenError(e,l,t)),r(l,f||!1,h)});else{let l=this._processTokenError(c);c&&t!=null&&(e.emitError(l.authError),l.isBadToken&&this._emitBadAuthTokenError(e,l.authError,t)),r(l.authError,l.isBadToken,h)}},s,a;try{s=this.auth.verifyToken(t,this.verificationKey,n)}catch(o){a=o}s instanceof Promise?(async()=>{let o={};try{o.token=await s}catch(c){o.error=c}i(o)})():i({token:s,error:a})}async _passThroughAuthenticateMiddleware(e,t){let r=!1,n={socket:e.socket,authToken:e.authToken};await C(this._middleware[this.MIDDLEWARE_AUTHENTICATE],n,(i,s)=>{if(r)this.emitWarning(new y(`Callback for ${this.MIDDLEWARE_AUTHENTICATE} middleware was already invoked`));else{r=!0;let a=!1;s.length&&(a=s[s.length-1]||!1),i&&(i===!0||i.silent?i=new G(`Action was silently blocked by ${this.MIDDLEWARE_AUTHENTICATE} middleware`,this.MIDDLEWARE_AUTHENTICATE):this.middlewareEmitWarnings&&this.emitWarning(i)),t(i,a)}})}async _passThroughHandshakeAGMiddleware(e,t){let r=!1,n={socket:e.socket};await C(this._middleware[this.MIDDLEWARE_HANDSHAKE_AG],n,(i,s)=>{if(r)this.emitWarning(new y(`Callback for ${this.MIDDLEWARE_HANDSHAKE_AG} middleware was already invoked`));else{r=!0;let a;s.length?a=s[s.length-1]||4008:a=4008,i&&(i.statusCode!=null&&(a=i.statusCode),i===!0||i.silent?i=new G(`Action was silently blocked by ${this.MIDDLEWARE_HANDSHAKE_AG} middleware`,this.MIDDLEWARE_HANDSHAKE_AG):this.middlewareEmitWarnings&&this.emitWarning(i)),t(i,a)}})}};function Or(e,t){return t=t||{},t.httpServer=e,new bt(t)}function wt(e,t,r){if(typeof t=="function"&&(r=t,t={}),W()){let n=ht("http").createServer(),i=Or(n,t);return i.httpServer=n,i.httpServer.listen(e,r),i}else return new bt(t)}var Oe={};var Ne={Lexical:JSON.stringify,futureGrace:10*60*1e3};function Me(e,t,r=Ne){let{machineState:n=new Date().getTime(),futureGrace:i=Ne.futureGrace,Lexical:s=Ne.Lexical}=r||Oe,a=n+i,o={};for(let c in e){if(!c)continue;let u=t[c],h=e[c],l=u&&u._&&u._[">"]||Oe,f=h&&h._&&h._[">"]||Oe;if(!h){c in t||(o[c]=h);continue}let k=!1,N={_:{"#":c,">":{}}};for(let S in f){if(!S)continue;let p=l[S],v=f[S];if(!(v>a||!v)&&!(p&&p>=v)){if(p===v){let vt=u&&u[S]||void 0,_t=h[S];if(s(_t)<=s(vt))continue}N[S]=h[S],N._&&N._[">"]&&(N._[">"][S]=v),k=!0}}k&&(o[c]=N)}return Object.keys(o).length>0?o:void 0}function Nr(e,t,r="immutable"){if(!e)return t;if(!t)return e;let n=e._||{},i=n[">"]||{},a=(t._||{})[">"]||{};if(r==="mutable"){for(let o in a)!o||(e[o]=t[o],i[o]=a[o]);return n[">"]=i,e._=n,e}return{...e,...t,_:{"#":n["#"],">":{...n[">"],...t._&&t._[">"]||{}}}}}function Le(e,t,r="immutable"){let n=r?e:{...e};for(let i in t)!i||(n[i]=Nr(e[i],t[i],r));return n}var Re={diffFn:Me,mergeFn:Le},Tt=(e,t,r)=>(e.direct?t[r]:H(t[r]))||null,Mr=(e,t,r)=>Promise.resolve(Tt(e,t,r)),Et=({diffFn:e=Re.diffFn,mergeFn:t=Re.mergeFn},r,n)=>{let i=e(n,r);return i&&t(r,i,"mutable"),i||null},Lr=(e,t,r)=>Promise.resolve(Et(e,t,r));function kt(e=Re){let t={};return{get:r=>Mr(e,t,r),getSync:r=>Tt(e,t,r),put:r=>Lr(e,t,r),putSync:r=>Et(e,t,r)}}function je(){return Math.random().toString(36).slice(2)}var Rr=e=>{let t=Object.keys(e).filter(i=>i!=="_").reduce((i,s)=>({...i,[s]:Ee()}),{}),n=ke(t)(e._[">"]);return K(n)?_(e):n},jr=e=>{let t={...e};delete t._;let r=Ke([Ee(),Y(),We(),ke({"#":Y()})],"Node value must be null string, number, boolean or object."),i=Se(Y(),He(r))(t);return K(i)?Rr(e):i},Br=e=>t=>{if(!d(t))return g(new b("Node must be object",{input:t,path:[]}));if(!d(t._))return g(new b("Node state must be object in path _",{input:t,path:["_"]}));if(!d(t._[">"]))return g(new b("Node state must be object in path _.['>']",{input:t,path:["_",">"]}));if(!m(t._["#"]))return g(new b("Soul must be string in _.['#']",{input:t,path:["_","#"]}));let r=t._["#"];return d(e[r])?jr(t):g(new b("Soul must be present in root graph",{input:t,path:[]}))},St=(e="Root graph must be object")=>t=>{if(!d(t))return g(new b(e,{input:t,path:[]}));let n=Se(Y(),Br(t))(t);return K(n)?_(t):n};var we=class{constructor(t,r,n){this.server=t;this.options=r;this.adapter=n}setupMiddleware(){this.server.addMiddleware(this.server.MIDDLEWARE_SUBSCRIBE,this.subscribeMiddleware.bind(this)),this.server.addMiddleware(this.server.MIDDLEWARE_PUBLISH_IN,this.publishInMiddleware.bind(this))}publishInMiddleware(t){let r=t.data;t.channel==="topgun/put"&&this.processPut(r).then(n=>{t.socket.transmit("#publish",{channel:`topgun/@${r["#"]}`,data:n})})}async subscribeMiddleware(t){if(t.channel==="topgun/put")return;let r=t.channel.replace(/^topgun\/nodes\//,"");if(!r||r===t.channel||r==="changelog")return;let n=Math.random().toString(36).slice(2);this.readNode(r).then(i=>({channel:t.channel,data:{"#":n,put:i?{[r]:i}:null}})).catch(i=>(console.warn(i.stack||i),{channel:t.channel,data:{"#":n,"@":t["#"],err:"Error fetching node"}})).then(i=>{t.socket.transmit("#publish",i)})}readNode(t){return this.adapter.get(t)}async processPut(t){let r=R();try{return t.put&&await this.adapter.put(t.put),{"#":r,"@":t["#"],err:null,ok:!0}}catch{return{"#":r,"@":t["#"],err:"Error saving",ok:!1}}}isAdmin(t){return t.authToken&&t.authToken.pub===this.options.ownerPub}};var Te=class{adapter;internalAdapter;server;options;middleware;validator;constructor(t){this.options=d(t)?t:{},this.validator=St(),this.internalAdapter=this.options.adapter||kt(),this.adapter=this.wrapAdapter(this.internalAdapter),this.server=wt(this.options.port,this.options),this.middleware=new we(this.server,this.options,this.adapter),this.run()}run(){this.middleware.setupMiddleware(),this.handleWebsocketConnection()}publishDiff(t,r,n){this.server.exchange.publish(`topgun/nodes/${t}`,{"#":`${r}/${t}`,put:{[t]:n}})}wrapAdapter(t){let r={...t,put:async n=>{let i=await t.put(n);return i&&this.publishIsDiff({"#":R(),put:i}),i},putSync:void 0};return{...r,put:async n=>{let i=this.validatePut(n);if(Q(i))throw i.error;return r.put(n)}}}publishIsDiff(t){let r=t["#"]||je(),n=t.put;if(!!n)for(let i in n){if(!i)continue;let s=n[i];!s||this.publishDiff(i,r,s)}}validatePut(t){return this.options.disableValidation?_(t):this.validator(t)}async handleWebsocketConnection(){for await(let{socket:t}of this.server.listener("connection"))(async()=>{for await(let r of t.procedure("login"))this.authenticateLogin(t,r)})()}async authenticateLogin(t,r){let n=r.data;if(!n.pub||!n.proof){r.end("Missing login info");return}try{let[i,s]=n.proof.m.split("/"),a=parseInt(s,10),o=new Date().getTime(),c=Math.abs(o-a),u=this.options.authMaxDrift&&parseInt(`${this.options.authMaxDrift}`,10)||1e3*60*5;if(c>u){r.error(new Error("Exceeded max clock drift"));return}if(!i||i!==t.id){r.error(new Error("Socket ID doesn't match"));return}await le(n.proof,n.pub)?(t.setAuthToken({pub:n.pub,timestamp:a}),r.end()):r.end("Invalid login")}catch{r.end("Invalid login")}}};function Ur(e){return new Te(e)}return Nt(Wr);})();
{
"name": "topgun",
"version": "1.2.2",
"version": "1.2.3",
"description": "Realtime, offline-first, secure, graph data synchronization engine. Reimplementation of gunDB in TypeScript",

@@ -66,3 +66,3 @@ "publishConfig": {

"topgun-buffer": "1.0.6",
"topgun-socket": "1.4.2",
"topgun-socket": "1.4.3",
"topgun-typed": "1.1.0",

@@ -69,0 +69,0 @@ "topgun-webcrypto": "1.0.5"

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc