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

topgun-socket

Package Overview
Dependencies
Maintainers
1
Versions
44
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

topgun-socket - npm Package Compare versions

Comparing version 1.3.0 to 1.3.1

dist/channel-eb665766.d.ts

2

dist/channel.d.ts

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

export { f as ChannelState, d as TGChannel, T as TGChannelClient } from './channel-549bdfaa.js';
export { f as ChannelState, d as TGChannel, T as TGChannelClient } from './channel-eb665766.js';
import 'topgun-jsonwebtoken';

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

import { A as AuthToken, C as CodecEngine, E as EventObject, a as EventObjectCallback, b as AsyncStreamEmitter, T as TGChannelClient, S as SocketProtocolIgnoreStatuses, c as SocketProtocolErrorStatuses, d as TGChannel, D as DemuxedConsumableStream, e as ConsumerStats, f as ChannelState } from './channel-549bdfaa.js';
import { A as AuthToken, C as CodecEngine, E as EventObject, a as EventObjectCallback, b as AsyncStreamEmitter, T as TGChannelClient, S as SocketProtocolIgnoreStatuses, c as SocketProtocolErrorStatuses, d as TGChannel, D as DemuxedConsumableStream, e as ConsumerStats, f as ChannelState } from './channel-eb665766.js';
import 'topgun-jsonwebtoken';

@@ -3,0 +3,0 @@

import { Server } from 'http';
import { g as TGServerSocketGatewayOptions, h as TGServerSocketGateway } from './channel-549bdfaa.js';
export { j as ActionType, _ as AuthEngineType, w as AuthState, $ as AuthStateChangeData, x as AuthTokenOptions, z as AuthenticateData, a0 as AuthenticationData, F as BadAuthTokenData, a2 as BadSocketAuthTokenData, M as CloseData, a8 as ClosureData, K as ConnectAbortData, G as ConnectData, a6 as ConnectionAbortData, a3 as ConnectionData, B as DeauthenticateData, a1 as DeauthenticationData, L as DisconnectData, a7 as DisconnectionData, I as ITGAction, N as IncomingMessage, O as IncomingMessageKey, V as MIDDLEWARE_HANDSHAKE, X as MIDDLEWARE_INBOUND, W as MIDDLEWARE_INBOUND_RAW, Y as MIDDLEWARE_OUTBOUND, Z as Middlewares, v as SocketState, y as StateChangeData, H as SubscribeData, a4 as SubscriptionData, J as SubscriptionOptions, i as TGAction, t as TGActionAuthenticate, k as TGActionBase, m as TGActionHandshakeSC, l as TGActionHandshakeWS, p as TGActionInvoke, n as TGActionMessage, r as TGActionPublishIn, s as TGActionPublishOut, q as TGActionSubscribe, o as TGActionTransmit, u as TGServerSocket, a5 as UnsubscriptionData, P as handshakeMiddlewareFunction, R as inboundMiddlewareFunction, Q as inboundRawMiddlewareFunction, U as outboundMiddlewareFunction } from './channel-549bdfaa.js';
import { g as TGServerSocketGatewayOptions, h as TGServerSocketGateway } from './channel-eb665766.js';
export { j as ActionType, _ as AuthEngineType, w as AuthState, $ as AuthStateChangeData, x as AuthTokenOptions, z as AuthenticateData, a0 as AuthenticationData, F as BadAuthTokenData, a2 as BadSocketAuthTokenData, M as CloseData, a8 as ClosureData, K as ConnectAbortData, G as ConnectData, a6 as ConnectionAbortData, a3 as ConnectionData, B as DeauthenticateData, a1 as DeauthenticationData, L as DisconnectData, a7 as DisconnectionData, I as ITGAction, N as IncomingMessage, O as IncomingMessageKey, V as MIDDLEWARE_HANDSHAKE, X as MIDDLEWARE_INBOUND, W as MIDDLEWARE_INBOUND_RAW, Y as MIDDLEWARE_OUTBOUND, Z as Middlewares, v as SocketState, y as StateChangeData, H as SubscribeData, a4 as SubscriptionData, J as SubscriptionOptions, i as TGAction, t as TGActionAuthenticate, k as TGActionBase, m as TGActionHandshakeSC, l as TGActionHandshakeWS, p as TGActionInvoke, n as TGActionMessage, r as TGActionPublishIn, s as TGActionPublishOut, q as TGActionSubscribe, o as TGActionTransmit, u as TGServerSocket, a5 as UnsubscriptionData, P as handshakeMiddlewareFunction, R as inboundMiddlewareFunction, Q as inboundRawMiddlewareFunction, U as outboundMiddlewareFunction } from './channel-eb665766.js';
import 'topgun-jsonwebtoken';

@@ -5,0 +5,0 @@

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

var Se=Object.create;var W=Object.defineProperty;var ge=Object.getOwnPropertyDescriptor;var fe=Object.getOwnPropertyNames;var ke=Object.getPrototypeOf,ye=Object.prototype.hasOwnProperty;var ve=(i,e,t)=>e in i?W(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t;var Ce=(i,e)=>{for(var t in e)W(i,t,{get:e[t],enumerable:!0})},se=(i,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of fe(e))!ye.call(i,s)&&s!==t&&W(i,s,{get:()=>e[s],enumerable:!(r=ge(e,s))||r.enumerable});return i};var Ee=(i,e,t)=>(t=i!=null?Se(ke(i)):{},se(e||!i||!i.__esModule?W(t,"default",{value:i,enumerable:!0}):t,i)),Ae=i=>se(W({},"__esModule",{value:!0}),i);var b=(i,e,t)=>(ve(i,typeof e!="symbol"?e+"":e,t),t);var Le={};Ce(Le,{MIDDLEWARE_HANDSHAKE:()=>Z,MIDDLEWARE_INBOUND:()=>te,MIDDLEWARE_INBOUND_RAW:()=>ee,MIDDLEWARE_OUTBOUND:()=>re,TGAction:()=>l,TGServerSocket:()=>v,TGServerSocketGateway:()=>S,attach:()=>be,listen:()=>Me});module.exports=Ae(Le);var w=class{async next(e){let t=this.createConsumer(e),r=await t.next();return t.return(),r}async once(e){let t=await this.next(e);return t.done&&await new Promise(()=>{}),t.value}createConsumer(e){throw new TypeError("Method must be overriden by subclass")}[Symbol.asyncIterator](){return this.createConsumer()}};var $=class{id;timeout;stream;currentNode;isAlive;_backpressure;_timeoutId;_resolve;_killPacket;constructor(e,t,r,s){this.id=t,this._backpressure=0,this.stream=e,this.currentNode=r,this.timeout=s,this.isAlive=!0,this.stream.setConsumer(this.id,this)}getStats(){let e={id:this.id,backpressure:this._backpressure};return this.timeout!=null&&(e.timeout=this.timeout),e}applyBackpressure(e){this._backpressure++}releaseBackpressure(e){this._backpressure--}getBackpressure(){return this._backpressure}write(e){this._timeoutId!==void 0&&(clearTimeout(this._timeoutId),delete this._timeoutId),this.applyBackpressure(e),this._resolve&&(this._resolve(),delete this._resolve)}kill(e){this._timeoutId!==void 0&&(clearTimeout(this._timeoutId),delete this._timeoutId),this._killPacket={value:e,done:!0},this._destroy(),this._resolve&&(this._resolve(),delete this._resolve)}async next(){for(this.stream.setConsumer(this.id,this);;){if(this.currentNode&&!this.currentNode.next)try{await this._waitForNextItem(this.timeout)}catch(e){throw this._destroy(),e}if(this._killPacket){this._destroy();let e=this._killPacket;return delete this._killPacket,e}if(this.currentNode){if(this.currentNode=this.currentNode.next,this.releaseBackpressure(this.currentNode.data),this.currentNode.consumerId&&this.currentNode.consumerId!==this.id)continue;return this.currentNode.data.done&&this._destroy(),this.currentNode.data}}}return(){return delete this.currentNode,this._destroy(),{}}_resetBackpressure(){this._backpressure=0}_destroy(){this.isAlive=!1,this._resetBackpressure(),this.stream.removeConsumer(this.id)}async _waitForNextItem(e){return new Promise((t,r)=>{this._resolve=t;let s;if(e!==void 0){let n=new Error("Stream consumer iteration timed out");(async()=>{let a=Te(e);s=a.timeoutId,await a.promise,n.name="TimeoutError",delete this._resolve,r(n)})()}this._timeoutId=s})}[Symbol.asyncIterator](){return this}};function Te(i){let e,t=new Promise(r=>{e=setTimeout(r,i)});return{timeoutId:e,promise:t}}var y=class extends w{type;nextConsumerId;_consumers;_tailNode;constructor(){super(),this.nextConsumerId=1,this._consumers=new Map,this._tailNode={next:null,data:{value:void 0,done:!1}}}write(e){this._write(e,!1)}close(e){this._write(e,!0)}writeToConsumer(e,t){this._write(t,!1,e)}closeConsumer(e,t){this._write(t,!0,e)}kill(e){for(let t of this._consumers.keys())this.killConsumer(t,e)}killConsumer(e,t){let r=this._consumers.get(e);!r||r.kill(t)}getBackpressure(){let e=0;for(let t of this._consumers.values()){let r=t.getBackpressure();r>e&&(e=r)}return e}getConsumerBackpressure(e){let t=this._consumers.get(e);return t?t.getBackpressure():0}hasConsumer(e){return this._consumers.has(e)}setConsumer(e,t){this._consumers.set(e,t),t.currentNode||(t.currentNode=this._tailNode)}removeConsumer(e){return this._consumers.delete(e)}getConsumerStats(e){let t=this._consumers.get(e);if(t)return t.getStats()}getConsumerStatsList(){let e=[];for(let t of this._consumers.values())e.push(t.getStats());return e}createConsumer(e){return new $(this,this.nextConsumerId++,this._tailNode,e)}getConsumerList(){return[...this._consumers.values()]}getConsumerCount(){return this._consumers.size}_write(e,t,r){let s={data:{value:e,done:t},next:null};r&&(s.consumerId=r),this._tailNode.next=s,this._tailNode=s;for(let n of this._consumers.values())n.write(s.data)}};var V=class extends w{name;_streamDemux;constructor(e,t){super(),this.name=t,this._streamDemux=e}createConsumer(e){return this._streamDemux.createConsumer(this.name,e)}};var E=class{_mainStream;constructor(){this._mainStream=new y}write(e,t){this._mainStream.write({stream:e,data:{value:t,done:!1}})}close(e,t){this._mainStream.write({stream:e,data:{value:t,done:!0}})}closeAll(e){this._mainStream.close(e)}writeToConsumer(e,t){this._mainStream.writeToConsumer(e,{consumerId:e,data:{value:t,done:!1}})}closeConsumer(e,t){this._mainStream.closeConsumer(e,{consumerId:e,data:{value:t,done:!0}})}getConsumerStats(e){return this._mainStream.getConsumerStats(e)}getConsumerStatsList(e){return this._mainStream.getConsumerStatsList().filter(r=>r.stream===e)}getConsumerStatsListAll(){return this._mainStream.getConsumerStatsList()}kill(e,t){let r=this.getConsumerStatsList(e),s=r.length;for(let n=0;n<s;n++)this.killConsumer(r[n].id,t)}killAll(e){this._mainStream.kill(e)}killConsumer(e,t){this._mainStream.killConsumer(e,t)}getBackpressure(e){let t=this.getConsumerStatsList(e),r=t.length,s=0;for(let n=0;n<r;n++){let a=t[n];a.backpressure>s&&(s=a.backpressure)}return s}getBackpressureAll(){return this._mainStream.getBackpressure()}getConsumerBackpressure(e){return this._mainStream.getConsumerBackpressure(e)}hasConsumer(e,t){let r=this._mainStream.getConsumerStats(t);return!!r&&r.stream===e}hasConsumerAll(e){return this._mainStream.hasConsumer(e)}getConsumerCount(e){return this.getConsumerStatsList(e).length}getConsumerCountAll(){return this.getConsumerStatsListAll().length}createConsumer(e,t){let r=this._mainStream.createConsumer(t),s=r.next;r.next=async function(){for(;;){let u=arguments,c=await s.apply(this,u);if(c.value&&(c.value.stream===e||c.value.consumerId===this.id))return c.value.data.done&&this.return(),c.value.data;if(c.done)return c}};let n=r.getStats;r.getStats=function(){let u=arguments,c=n.apply(this,u);return c.stream=e,c};let a=r.applyBackpressure;r.applyBackpressure=function(u){let c=arguments;if(u.value&&(u.value.stream===e||u.value.consumerId===this.id)){a.apply(this,c);return}u.done&&a.apply(this,c)};let o=r.releaseBackpressure;return r.releaseBackpressure=function(u){let c=arguments;if(u.value&&(u.value.stream===e||u.value.consumerId===this.id)){o.apply(this,c);return}u.done&&o.apply(this,c)},r}stream(e){return new V(this,e)}};var A=class{_listenerDemux;constructor(){this._listenerDemux=new E}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()}getListenerConsumerStats(e){return this._listenerDemux.getConsumerStats(e)}getListenerConsumerStatsList(e){return this._listenerDemux.getConsumerStatsList(e)}getAllListenersConsumerStatsList(){return this._listenerDemux.getConsumerStatsListAll()}getListenerConsumerCount(e){return this._listenerDemux.getConsumerCount(e)}getAllListenersConsumerCount(){return this._listenerDemux.getConsumerCountAll()}killListener(e){this._listenerDemux.kill(e)}killAllListeners(){this._listenerDemux.killAll()}killListenerConsumer(e){this._listenerDemux.killConsumer(e)}getListenerBackpressure(e){return this._listenerDemux.getBackpressure(e)}getAllListenersBackpressure(){return this._listenerDemux.getBackpressureAll()}getListenerConsumerBackpressure(e){return this._listenerDemux.getConsumerBackpressure(e)}hasListenerConsumer(e,t){return this._listenerDemux.hasConsumer(e,t)}hasAnyListenerConsumer(e){return this._listenerDemux.hasConsumerAll(e)}};function ne(i){let e=[],t=[];return function r(s,n){let a,o,u;if(typeof s=="object"&&s!==null&&!(s instanceof Boolean)&&!(s instanceof Date)&&!(s instanceof Number)&&!(s instanceof RegExp)&&!(s instanceof String)){for(a=0;a<e.length;a+=1)if(e[a]===s)return{$ref:t[a]};if(e.push(s),t.push(n),Object.prototype.toString.apply(s)==="[object Array]")for(u=[],a=0;a<s.length;a+=1)u[a]=r(s[a],n+"["+a+"]");else{u={};for(o in s)Object.prototype.hasOwnProperty.call(s,o)&&(u[o]=r(s[o],n+"["+JSON.stringify(o)+"]"))}return u}return s}(i,"$")}function f(){"use strict";return typeof function(){return this}()>"u"}var B=class extends Error{expiry;isBadToken;constructor(e,t){super(e),Object.setPrototypeOf(this,B.prototype),this.name="AuthTokenExpiredError",this.message=e,this.expiry=new Date(t),Error.captureStackTrace&&!f()?Error.captureStackTrace(this,arguments.callee):this.stack=new Error().stack}},M=class extends Error{isBadToken;constructor(e){super(e),Object.setPrototypeOf(this,M.prototype),this.name="AuthTokenInvalidError",this.message=e,Error.captureStackTrace&&!f()?Error.captureStackTrace(this,arguments.callee):this.stack=new Error().stack}},L=class extends Error{date;isBadToken;constructor(e,t){super(e),Object.setPrototypeOf(this,L.prototype),this.name="AuthTokenNotBeforeError",this.message=e,this.date=t,Error.captureStackTrace&&!f()?Error.captureStackTrace(this,arguments.callee):this.stack=new Error().stack}},T=class extends Error{expiredAt;date;isBadToken;constructor(e){super(e),Object.setPrototypeOf(this,T.prototype),this.name="AuthTokenError",this.message=e,Error.captureStackTrace&&!f()?Error.captureStackTrace(this,arguments.callee):this.stack=new Error().stack}},R=class extends Error{constructor(e){super(e),Object.setPrototypeOf(this,R.prototype),this.name="AuthError",this.message=e,Error.captureStackTrace&&!f()?Error.captureStackTrace(this,arguments.callee):this.stack=new Error().stack}},N=class extends Error{type;constructor(e,t){super(e),Object.setPrototypeOf(this,N.prototype),this.name="SilentMiddlewareBlockedError",this.message=e,this.type=t,Error.captureStackTrace&&!f()?Error.captureStackTrace(this,arguments.callee):this.stack=new Error().stack}},p=class extends Error{constructor(e){super(e),Object.setPrototypeOf(this,p.prototype),this.name="InvalidActionError",this.message=e,Error.captureStackTrace&&!f()?Error.captureStackTrace(this,arguments.callee):this.stack=new Error().stack}},C=class extends Error{constructor(e){super(e),Object.setPrototypeOf(this,C.prototype),this.name="InvalidArgumentsError",this.message=e,Error.captureStackTrace&&!f()?Error.captureStackTrace(this,arguments.callee):this.stack=new Error().stack}},_=class extends Error{constructor(e){super(e),Object.setPrototypeOf(this,_.prototype),this.name="InvalidOptionsError",this.message=e,Error.captureStackTrace&&!f()?Error.captureStackTrace(this,arguments.callee):this.stack=new Error().stack}};var H=class extends Error{code;constructor(e,t){super(e),Object.setPrototypeOf(this,H.prototype),this.name="SocketProtocolError",this.message=e,this.code=t,Error.captureStackTrace&&!f()?Error.captureStackTrace(this,arguments.callee):this.stack=new Error().stack}},P=class extends Error{constructor(e){super(e),Object.setPrototypeOf(this,P.prototype),this.name="ServerProtocolError",this.message=e,Error.captureStackTrace&&!f()?Error.captureStackTrace(this,arguments.callee):this.stack=new Error().stack}};var U=class extends Error{constructor(e){super(e),Object.setPrototypeOf(this,U.prototype),this.name="TimeoutError",this.message=e,Error.captureStackTrace&&!f()?Error.captureStackTrace(this,arguments.callee):this.stack=new Error().stack}},x=class extends Error{type;constructor(e,t){super(e),Object.setPrototypeOf(this,x.prototype),this.name="BadConnectionError",this.message=e,this.type=t,Error.captureStackTrace&&!f()?Error.captureStackTrace(this,arguments.callee):this.stack=new Error().stack}},D=class extends Error{constructor(e){super(e),Object.setPrototypeOf(this,D.prototype),this.name="BrokerError",this.message=e,Error.captureStackTrace&&!f()?Error.captureStackTrace(this,arguments.callee):this.stack=new Error().stack}};var ie={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"},ae={1e3:"Socket closed normally",1001:"Socket hung up"},De={domain:1,domainEmitter:1,domainThrown:1};function K(i,e){let t;if(i&&typeof i=="object"){t={message:i.message},e&&(t.stack=i.stack);for(let r in i)De[r]||(t[r]=i[r])}else typeof i=="function"?t="[function "+(i.name||"anonymous")+"]":t=i;return ne(t)}function oe(i){let e=null;if(i!=null)if(typeof i=="object"){e=new Error(i.message);for(let t in i)i.hasOwnProperty(t)&&(e[t]=i[t])}else e=i;return e}var J=require("topgun-jsonwebtoken"),q=class{verifyToken(e,t,r){r=r||{};let s=Object.assign({},r);return delete s.socket,typeof e=="string"||e==null?new Promise((n,a)=>{(0,J.verify)(e,t,s).then(o=>{o?n(o):a(new T("Invalid token"))}).catch(o=>a(o))}):Promise.reject(new C("Invalid token format - Token must be a string"))}signToken(e,t,r){r=r||{};let s=Object.assign({},r);return new Promise((n,a)=>{(0,J.sign)(e,t,s).then(o=>{o?n(o):a(new T("Sign token error"))}).catch(o=>a(o))})}};var ce=Ee(require("topgun-webcrypto"));var we=["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 ue(i){let e=0,t="",r=new Uint8Array(i);for(;e<r.length;e++)t+=we[r[e]];return t}var _e=ce.default;function he(i=9,e){let t=new Uint8Array(i);try{return _e.getRandomValues(t),e&&e(null,t),ue(t)}catch(r){return e&&e(r,t),null}}var I=typeof self=="object"&&self.self===self&&self||typeof global=="object"&&global.global===global&&global||void 0;var z="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",xe=/^[ \n\r\t]*[{\[]/,Ie=function(i){let e=new Uint8Array(i),t=e.length,r="";for(let s=0;s<t;s+=3)r+=z[e[s]>>2],r+=z[(e[s]&3)<<4|e[s+1]>>4],r+=z[(e[s+1]&15)<<2|e[s+2]>>6],r+=z[e[s+2]&63];return t%3===2?r=r.substring(0,r.length-1)+"=":t%3===1&&(r=r.substring(0,r.length-2)+"=="),r},Oe=function(i,e){if(I.ArrayBuffer&&e instanceof I.ArrayBuffer)return{base64:!0,data:Ie(e)};if(I.Buffer){if(e instanceof I.Buffer)return{base64:!0,data:e.toString("base64")};if(e&&e.type==="Buffer"&&Array.isArray(e.data)){let t;return I.Buffer.from?t=I.Buffer.from(e.data):t=new I.Buffer(e.data),{base64:!0,data:t.toString("base64")}}}return e};function Be(i){if(i==null)return null;if(i==="#1"||i==="#2")return i;let e=i.toString();if(!xe.test(e))return e;try{return JSON.parse(e)}catch{}return e}function Ne(i){return i==="#1"||i==="#2"?i:JSON.stringify(i,Oe)}var le={encode:Ne,decode:Be};var j=class extends w{name;PENDING;SUBSCRIBED;UNSUBSCRIBED;client;_eventDemux;_dataStream;_pendingSubscriptionCid;constructor(e,t,r,s){super(),this.PENDING=j.PENDING,this.SUBSCRIBED=j.SUBSCRIBED,this.UNSUBSCRIBED=j.UNSUBSCRIBED,this.name=e,this.client=t,this._eventDemux=r,this._dataStream=s.stream(this.name)}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")}createConsumer(e){return this._dataStream.createConsumer(e)}listener(e){return this._eventDemux.stream(`${this.name}/${e}`)}close(){this.client.closeChannel(this.name)}kill(){this.client.killChannel(this.name)}killOutputConsumer(e){this.hasOutputConsumer(e)&&this.client.killChannelOutputConsumer(e)}killListenerConsumer(e){this.hasAnyListenerConsumer(e)&&this.client.killChannelListenerConsumer(e)}getOutputConsumerStats(e){if(this.hasOutputConsumer(e))return this.client.getChannelOutputConsumerStats(e)}getListenerConsumerStats(e){if(this.hasAnyListenerConsumer(e))return this.client.getChannelListenerConsumerStats(e)}getBackpressure(){return this.client.getChannelBackpressure(this.name)}getListenerConsumerBackpressure(e){return this.hasAnyListenerConsumer(e)?this.client.getChannelListenerConsumerBackpressure(e):0}getOutputConsumerBackpressure(e){return this.hasOutputConsumer(e)?this.client.getChannelOutputConsumerBackpressure(e):0}closeOutput(){this.client.channelCloseOutput(this.name)}closeListener(e){this.client.channelCloseListener(this.name,e)}closeAllListeners(){this.client.channelCloseAllListeners(this.name)}killOutput(){this.client.channelKillOutput(this.name)}killListener(e){this.client.channelKillListener(this.name,e)}killAllListeners(){this.client.channelKillAllListeners(this.name)}getOutputConsumerStatsList(){return this.client.channelGetOutputConsumerStatsList(this.name)}getListenerConsumerStatsList(e){return this.client.channelGetListenerConsumerStatsList(this.name,e)}getAllListenersConsumerStatsList(){return this.client.channelGetAllListenersConsumerStatsList(this.name)}getOutputBackpressure(){return this.client.channelGetOutputBackpressure(this.name)}getListenerBackpressure(e){return this.client.channelGetListenerBackpressure(this.name,e)}getAllListenersBackpressure(){return this.client.channelGetAllListenersBackpressure(this.name)}hasOutputConsumer(e){return this.client.channelHasOutputConsumer(this.name,e)}hasListenerConsumer(e,t){return this.client.channelHasListenerConsumer(this.name,e,t)}hasAnyListenerConsumer(e){return this.client.channelHasAnyListenerConsumer(this.name,e)}subscribe(e){this.client.subscribe(this.name,e)}unsubscribe(){this.client.unsubscribe(this.name)}isSubscribed(e){return this.client.isSubscribed(this.name,e)}transmitPublish(e){return this.client.transmitPublish(this.name,e)}invokePublish(e){return this.client.invokePublish(this.name,e)}},k=j;b(k,"PENDING","pending"),b(k,"SUBSCRIBED","subscribed"),b(k,"UNSUBSCRIBED","unsubscribed");var Y=class extends A{id;_broker;_channelMap;_channelEventDemux;_channelDataDemux;constructor(e){super(),this.id="exchange",this._broker=e,this._channelMap={},this._channelEventDemux=new E,this._channelDataDemux=new E}transmit(e,t){e==="#publish"&&this._channelDataDemux.write(t.channel,t.data)}getBackpressure(){return Math.max(this.getAllListenersBackpressure(),this.getAllChannelsBackpressure())}destroy(){this._broker.closeAllListeners()}async transmitPublish(e,t){return this._broker.transmitPublish(e,t)}async invokePublish(e,t){return this._broker.invokePublish(e,t)}subscribe(e){let t=this._channelMap[e];return t||(t={name:e,state:k.PENDING},this._channelMap[e]=t,this._triggerChannelSubscribe(t)),new k(e,this,this._channelEventDemux,this._channelDataDemux)}async unsubscribe(e){let t=this._channelMap[e];t&&this._triggerChannelUnsubscribe(t)}channel(e){return new k(e,this,this._channelEventDemux,this._channelDataDemux)}closeChannel(e){this.channelCloseOutput(e),this.channelCloseAllListeners(e)}closeAllChannelOutputs(){this._channelDataDemux.closeAll()}closeAllChannelListeners(){this._channelEventDemux.closeAll()}closeAllChannels(){this.closeAllChannelOutputs(),this.closeAllChannelListeners()}killChannel(e){this.channelKillOutput(e),this.channelKillAllListeners(e)}killAllChannelOutputs(){this._channelDataDemux.killAll()}killAllChannelListeners(){this._channelEventDemux.killAll()}killAllChannels(){this.killAllChannelOutputs(),this.killAllChannelListeners()}killChannelOutputConsumer(e){this._channelDataDemux.killConsumer(e)}killChannelListenerConsumer(e){this._channelEventDemux.killConsumer(e)}getChannelOutputConsumerStats(e){return this._channelDataDemux.getConsumerStats(e)}getChannelListenerConsumerStats(e){return this._channelEventDemux.getConsumerStats(e)}getAllChannelOutputsConsumerStatsList(){return this._channelDataDemux.getConsumerStatsListAll()}getAllChannelListenersConsumerStatsList(){return this._channelEventDemux.getConsumerStatsListAll()}getChannelBackpressure(e){return Math.max(this.channelGetOutputBackpressure(e),this.channelGetAllListenersBackpressure(e))}getAllChannelOutputsBackpressure(){return this._channelDataDemux.getBackpressureAll()}getAllChannelListenersBackpressure(){return this._channelEventDemux.getBackpressureAll()}getAllChannelsBackpressure(){return Math.max(this.getAllChannelOutputsBackpressure(),this.getAllChannelListenersBackpressure())}getChannelListenerConsumerBackpressure(e){return this._channelEventDemux.getConsumerBackpressure(e)}getChannelOutputConsumerBackpressure(e){return this._channelDataDemux.getConsumerBackpressure(e)}hasAnyChannelOutputConsumer(e){return this._channelDataDemux.hasConsumerAll(e)}hasAnyChannelListenerConsumer(e){return this._channelEventDemux.hasConsumerAll(e)}getChannelState(e){let t=this._channelMap[e];return t?t.state:k.UNSUBSCRIBED}getChannelOptions(e){return{}}channelCloseOutput(e){this._channelDataDemux.close(e)}channelCloseListener(e,t){this._channelEventDemux.close(`${e}/${t}`)}channelCloseAllListeners(e){this._getAllChannelStreamNames(e).forEach(t=>{this._channelEventDemux.close(t)})}channelKillOutput(e){this._channelDataDemux.kill(e)}channelKillListener(e,t){this._channelEventDemux.kill(`${e}/${t}`)}channelKillAllListeners(e){this._getAllChannelStreamNames(e).forEach(t=>{this._channelEventDemux.kill(t)})}channelGetOutputConsumerStatsList(e){return this._channelDataDemux.getConsumerStatsList(e)}channelGetListenerConsumerStatsList(e,t){return this._channelEventDemux.getConsumerStatsList(`${e}/${t}`)}channelGetAllListenersConsumerStatsList(e){return this._getAllChannelStreamNames(e).map(t=>this._channelEventDemux.getConsumerStatsList(t)).reduce((t,r)=>(r.forEach(s=>{t.push(s)}),t),[])}channelGetOutputBackpressure(e){return this._channelDataDemux.getBackpressure(e)}channelGetListenerBackpressure(e,t){return this._channelEventDemux.getBackpressure(`${e}/${t}`)}channelGetAllListenersBackpressure(e){let t=this._getAllChannelStreamNames(e).map(r=>this._channelEventDemux.getBackpressure(r));return Math.max(...t.concat(0))}channelHasOutputConsumer(e,t){return this._channelDataDemux.hasConsumer(e,t)}channelHasListenerConsumer(e,t,r){return this._channelEventDemux.hasConsumer(`${e}/${t}`,r)}channelHasAnyListenerConsumer(e,t){return this._getAllChannelStreamNames(e).some(r=>this._channelEventDemux.hasConsumer(r,t))}subscriptions(e){let t=[];return Object.keys(this._channelMap).forEach(r=>{(e||this._channelMap[r].state===k.SUBSCRIBED)&&t.push(r)}),t}isSubscribed(e,t){let r=this._channelMap[e];return t?!!r:!!r&&r.state===k.SUBSCRIBED}_triggerChannelSubscribe(e){let t=e.name;e.state=k.SUBSCRIBED,this._channelEventDemux.write(`${t}/subscribe`,{}),this._broker.subscribeClient(this,t),this.emit("subscribe",{channel:t})}_triggerChannelUnsubscribe(e){let t=e.name;delete this._channelMap[t],e.state===k.SUBSCRIBED&&(this._channelEventDemux.write(`${t}/unsubscribe`,{}),this._broker.unsubscribeClient(this,t),this.emit("unsubscribe",{channel:t}))}_getAllChannelStreamNames(e){let t=this._channelEventDemux.getConsumerStatsListAll().filter(r=>r.stream.indexOf(`${e}/`)===0).reduce((r,s)=>(r[s.stream]=!0,r),{});return Object.keys(t)}};var X=class extends A{isReady;_codec;_exchangeClient;_clientSubscribers;_clientSubscribersCounter;constructor(){super(),this.isReady=!1,this._codec=null,this._exchangeClient=new Y(this),this._clientSubscribers={},this._clientSubscribersCounter={},setTimeout(()=>{this.isReady=!0,this.emit("ready",{})},0)}exchange(){return this._exchangeClient}async subscribeClient(e,t){this._clientSubscribers[t]||(this._clientSubscribers[t]={},this._clientSubscribersCounter[t]=0,this.emit("subscribe",{channel:t})),this._clientSubscribers[t][e.id]||this._clientSubscribersCounter[t]++,this._clientSubscribers[t][e.id]=e}async subscribeSocket(e,t){return this.subscribeClient(e,t)}async unsubscribeClient(e,t){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})))}async unsubscribeSocket(e,t){return this.unsubscribeClient(e,t)}subscriptions(){return Object.keys(this._clientSubscribers)}isSubscribed(e){return!!this._clientSubscribers[e]}setCodecEngine(e){this._codec=e}invokePublish(e,t,r){return this.transmitPublish(e,t,r)}async transmitPublish(e,t,r){let s={channel:e,data:t},n={};if(this._codec)try{n.stringifiedData=this._codec.encode({event:"#publish",data:s})}catch(o){this.emit("error",{error:o});return}let a=this._clientSubscribers[e]||{};Object.keys(a).forEach(o=>{a[o].transmit("#publish",s,n)}),r||this.emit("publish",s)}};function me(){return Math.abs(Math.random()*Math.random()*Date.now()|0).toString()+Math.abs(Math.random()*Math.random()*Date.now()|0).toString()}function Q(){return typeof process=="object"}function l(){this.outcome=null,this.request=null,this.socket=null,this.authTokenExpiredError=null,this.receiver=null,this.procedure=null,this.channel=null,this.authToken=null,this.signedAuthToken=null,this.data=null,this.promise=new Promise((i,e)=>{this._resolve=i,this._reject=e}),this.allow=i=>{if(this.outcome)throw new p(`TGAction ${this.type} has already been ${this.outcome}; cannot allow`);this.outcome="allowed",this._resolve(i)},this.block=i=>{if(this.outcome)throw new p(`TGAction ${this.type} has already been ${this.outcome}; cannot block`);this.outcome="blocked",this._reject(i)}}l.prototype.HANDSHAKE_WS=l.HANDSHAKE_WS="handshakeWS";l.prototype.HANDSHAKE_SC=l.HANDSHAKE_SC="handshakeSC";l.prototype.MESSAGE=l.MESSAGE="message";l.prototype.TRANSMIT=l.TRANSMIT="transmit";l.prototype.INVOKE=l.INVOKE="invoke";l.prototype.SUBSCRIBE=l.SUBSCRIBE="subscribe";l.prototype.PUBLISH_IN=l.PUBLISH_IN="publishIn";l.prototype.PUBLISH_OUT=l.PUBLISH_OUT="publishOut";l.prototype.AUTHENTICATE=l.AUTHENTICATE="authenticate";var O=class{id;socket;procedure;data;sent;constructor(e,t,r,s){this.socket=e,this.id=t,this.procedure=r,this.data=s,this.sent=!1}end(e,t){let r={rid:this.id};e!==void 0&&(r.data=e),this._respond(r,t)}error(e,t){let r={rid:this.id,error:K(e)};this._respond(r,t)}_respond(e,t){if(this.sent)throw new p(`Response to request ${this.id} has already been sent`);this.sent=!0,this.socket.sendObject(e,t)}};function de(i){return Object.prototype.toString.call(i)==="[object Date]"}function pe(i){return!!i&&typeof i=="object"&&Object.prototype.toString.call(i)!=="[object Array]"}function G(i){if(de(i))return new Date(i.getTime());if(Array.isArray(i))return[...i].map(e=>G(e));if(i instanceof Map||i instanceof Set)return i;if(pe(i)){let e={};for(let t of Object.keys(i))e[t]=G(i[t]);return e}return i}var Pe=4008,m=class extends A{CONNECTING=m.CONNECTING;OPEN=m.OPEN;CLOSED=m.CLOSED;AUTHENTICATED=m.AUTHENTICATED;UNAUTHENTICATED=m.UNAUTHENTICATED;id;server;socket;protocolVersion;request;inboundReceivedMessageCount;inboundProcessedMessageCount;outboundPreparedMessageCount;outboundSentMessageCount;cloneData;inboundMessageStream;outboundPacketStream;middlewareHandshakeStream;middlewareInboundRawStream;middlewareInboundStream;middlewareOutboundStream;remoteAddress;remoteFamily;remotePort;forwardedForAddress;isBufferingBatch;isBatching;batchOnHandshake;batchOnHandshakeDuration;batchInterval;channelSubscriptions;channelSubscriptionsCount;exchange;state;authState;authToken;signedAuthToken;_receiverDemux;_procedureDemux;_batchBuffer;_batchingIntervalId=null;_cid;_callbackMap;_sendPing;_pingIntervalTicker;_handshakeTimeoutRef;_pingTimeoutTicker;constructor(e,t,r,s){super(),this.id=e,this.server=t,this.socket=r,this.state=m.CONNECTING,this.authState=m.UNAUTHENTICATED,this.authToken=null,this.protocolVersion=s,this._receiverDemux=new E,this._procedureDemux=new E,this.request=this.socket.upgradeReq,this.inboundReceivedMessageCount=0,this.inboundProcessedMessageCount=0,this.outboundPreparedMessageCount=0,this.outboundSentMessageCount=0,this.cloneData=this.server.options.cloneData,this.inboundMessageStream=new y,this.outboundPacketStream=new y,this.middlewareHandshakeStream=this.request[S.SYMBOL_MIDDLEWARE_HANDSHAKE_STREAM],this.middlewareInboundRawStream=new y,this.middlewareInboundRawStream.type=S.MIDDLEWARE_INBOUND_RAW,this.middlewareInboundStream=new y,this.middlewareInboundStream.type=S.MIDDLEWARE_INBOUND,this.middlewareOutboundStream=new y,this.middlewareOutboundStream.type=S.MIDDLEWARE_OUTBOUND,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.isBufferingBatch=!1,this.isBatching=!1,this.batchOnHandshake=this.server.options.batchOnHandshake,this.batchOnHandshakeDuration=this.server.options.batchOnHandshakeDuration,this.batchInterval=this.server.options.batchInterval,this._batchBuffer=[],this._batchingIntervalId=null,this._cid=1,this._callbackMap={},this.channelSubscriptions={},this.channelSubscriptionsCount=0,this._on("error",async a=>{this.emitError(a)}),this._on("close",async(a,o)=>{let u=o&&o.toString();this._destroy(a,u)});let n;this.protocolVersion===1?(n="#2",this._sendPing=()=>{this.state!==m.CLOSED&&this.send("#1")}):(n="",this._sendPing=()=>{this.state!==m.CLOSED&&this.send("")}),this.server.pingTimeoutDisabled||(this._pingIntervalTicker=setInterval(()=>{this._sendPing()},this.server.pingInterval)),this._resetPongTimeout(),this._handshakeTimeoutRef=setTimeout(()=>{this._handleHandshakeTimeout()},this.server.handshakeTimeout),this.server.pendingClients[this.id]=this,this.server.pendingClientsCount++,this._handleInboundMessageStream(n),this._handleOutboundPacketStream(),this._on("message",async(a,o)=>{let u=o?a:a.toString();if(this.inboundReceivedMessageCount++,u===n&&this._resetPongTimeout(),this.server.hasMiddleware(S.MIDDLEWARE_INBOUND_RAW)){let h=new l;h.socket=this,h.type=l.MESSAGE,h.data=u;try{let{data:d}=await this.server.processMiddlewareAction(this.middlewareInboundRawStream,h,this);u=d}catch{this.inboundProcessedMessageCount++;return}}this.inboundMessageStream.write(u),this.emit("message",{message:u})})}getBackpressure(){return Math.max(this.getInboundBackpressure(),this.getOutboundBackpressure(),this.getAllListenersBackpressure(),this.getAllReceiversBackpressure(),this.getAllProceduresBackpressure())}getInboundBackpressure(){return this.inboundReceivedMessageCount-this.inboundProcessedMessageCount}getOutboundBackpressure(){return this.outboundPreparedMessageCount-this.outboundSentMessageCount}receiver(e){return this._receiverDemux.stream(e)}closeReceiver(e){this._receiverDemux.close(e)}closeAllReceivers(){this._receiverDemux.closeAll()}killReceiver(e){this._receiverDemux.kill(e)}killAllReceivers(){this._receiverDemux.killAll()}killReceiverConsumer(e){this._receiverDemux.killConsumer(e)}getReceiverConsumerStats(e){return this._receiverDemux.getConsumerStats(e)}getReceiverConsumerStatsList(e){return this._receiverDemux.getConsumerStatsList(e)}getAllReceiversConsumerStatsList(){return this._receiverDemux.getConsumerStatsListAll()}getReceiverBackpressure(e){return this._receiverDemux.getBackpressure(e)}getAllReceiversBackpressure(){return this._receiverDemux.getBackpressureAll()}getReceiverConsumerBackpressure(e){return this._receiverDemux.getConsumerBackpressure(e)}hasReceiverConsumer(e,t){return this._receiverDemux.hasConsumer(e,t)}hasAnyReceiverConsumer(e){return this._receiverDemux.hasConsumerAll(e)}procedure(e){return this._procedureDemux.stream(e)}closeProcedure(e){this._procedureDemux.close(e)}closeAllProcedures(){this._procedureDemux.closeAll()}killProcedure(e){this._procedureDemux.kill(e)}killAllProcedures(){this._procedureDemux.killAll()}killProcedureConsumer(e){this._procedureDemux.killConsumer(e)}getProcedureConsumerStats(e){return this._procedureDemux.getConsumerStats(e)}getProcedureConsumerStatsList(e){return this._procedureDemux.getConsumerStatsList(e)}getAllProceduresConsumerStatsList(){return this._procedureDemux.getConsumerStatsListAll()}getProcedureBackpressure(e){return this._procedureDemux.getBackpressure(e)}getAllProceduresBackpressure(){return this._procedureDemux.getBackpressureAll()}getProcedureConsumerBackpressure(e){return this._procedureDemux.getConsumerBackpressure(e)}hasProcedureConsumer(e,t){return this._procedureDemux.hasConsumer(e,t)}hasAnyProcedureConsumer(e){return this._procedureDemux.hasConsumerAll(e)}emit(e,t){return super.emit(e,t)}getState(){return this.state}getBytesReceived(){return this.socket.bytesReceived}emitError(e){this.emit("error",{error:e}),this.server.emitWarning(e)}closeAllMiddlewares(){this.middlewareHandshakeStream.close(),this.middlewareInboundRawStream.close(),this.middlewareInboundStream.close(),this.middlewareOutboundStream.close()}closeInput(){this.inboundMessageStream.close()}closeOutput(){this.outboundPacketStream.close()}closeIO(){this.closeInput(),this.closeOutput()}closeAllStreams(){this.closeAllMiddlewares(),this.closeIO(),this.closeAllReceivers(),this.closeAllProcedures(),this.closeAllListeners()}killAllMiddlewares(){this.middlewareHandshakeStream.kill(),this.middlewareInboundRawStream.kill(),this.middlewareInboundStream.kill(),this.middlewareOutboundStream.kill()}killInput(){this.inboundMessageStream.kill()}killOutput(){this.outboundPacketStream.kill()}killIO(){this.killInput(),this.killOutput()}killAllStreams(){this.killAllMiddlewares(),this.killIO(),this.killAllReceivers(),this.killAllProcedures(),this.killAllListeners()}async disconnect(e,t){if(e=e||1e3,typeof e!="number"){let r=new C("If specified, the code argument must be a number");this.emitError(r)}this.state!==m.CLOSED&&(await this._destroy(e,t),this.socket.close(e,t))}terminate(){this.server.options.isNode?this.socket.terminate():this.disconnect()}send(e,t){this.server.options.isNode?this.socket.send(e,t,r=>{r&&(this.emitError(r),this._destroy(1006,r.toString()))}):this.socket.send(e)}decode(e){return this.server.codec.decode(e)}encode(e){return this.server.codec.encode(e)}startBatch(){this.isBufferingBatch=!0,this._batchBuffer=[]}flushBatch(){if(this.isBufferingBatch=!1,!this._batchBuffer.length)return;let e=this.serializeObject(this._batchBuffer);this._batchBuffer=[],this.send(e)}cancelBatch(){this.isBufferingBatch=!1,this._batchBuffer=[]}startBatching(){this.isBatching=!0,this._startBatching()}stopBatching(){this.isBatching=!1,this._stopBatching()}cancelBatching(){this.isBatching=!1,this._cancelBatching()}serializeObject(e){let t;try{t=this.encode(e)}catch(r){return this.emitError(r),null}return t}sendObject(e){if(this.isBufferingBatch){this._batchBuffer.push(e);return}let t=this.serializeObject(e);t!=null&&this.send(t)}async transmit(e,t,r){if(this.state!==m.OPEN){let s=new x(`Socket transmit "${e}" was aborted due to a bad connection`,"connectAbort");this.emitError(s);return}this._transmit(e,t,r)}async invoke(e,t,r){if(this.state!==m.OPEN){let s=new x(`Socket invoke "${e}" was aborted due to a bad connection`,"connectAbort");throw this.emitError(s),s}return this.cloneData&&(t=G(t)),this.outboundPreparedMessageCount++,new Promise((s,n)=>{this.outboundPacketStream.write({event:e,data:t,options:r,resolve:s,reject:n})})}triggerAuthenticationEvents(e){if(e!==m.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){if(this.state===this.CONNECTING){let h=new p("Cannot call setAuthToken before completing the handshake");throw this.emitError(h),h}let r=G(e),s=this.authState;if(this.authState=this.AUTHENTICATED,t==null)t={};else if(t={...t},t.algorithm!=null){delete t.algorithm;let h=new C("Cannot change auth token algorithm at runtime - It must be specified as a config option on launch");this.emitError(h)}t.mutatePayload=!0;let n=t.rejectOnFailedDelivery;delete t.rejectOnFailedDelivery;let a=this.server.defaultSignatureOptions,o;t.expiresIn==null?o=a.expiresIn:o=t.expiresIn,r?r.exp==null?t.expiresIn=o:delete t.expiresIn:t.expiresIn=o,a.algorithm!=null&&(t.algorithm=a.algorithm),this.authToken=r;let u;try{u=await this.server.auth.signToken(r,this.server.signatureKey,t)}catch(h){throw this.emitError(h),this._destroy(4002,h.toString()),this.socket.close(4002),h}this.authToken===r&&(this.signedAuthToken=u,this.emit("authTokenSigned",{signedAuthToken:u})),this.triggerAuthenticationEvents(s);let c={token:u};if(n){try{await this.invoke("#setAuthToken",c)}catch(h){let d=new R(`Failed to deliver auth token to client - ${h}`);throw this.emitError(d),d}return}this.transmit("#setAuthToken",c)}getAuthToken(){return this.authToken}deauthenticateSelf(){let e=this.authState,t=this.authToken;if(this.signedAuthToken=null,this.authToken=null,this.authState=m.UNAUTHENTICATED,e!==m.UNAUTHENTICATED){let r={oldAuthState:e,newAuthState:this.authState,authToken:this.authToken};this.emit("authStateChange",r),this.server.emit("authenticationStateChange",{socket:this,...r})}this.emit("deauthenticate",{oldAuthToken:t}),this.server.emit("deauthentication",{socket:this,oldAuthToken:t})}async deauthenticate(e){if(this.deauthenticateSelf(),e&&e.rejectOnFailedDelivery){try{await this.invoke("#removeAuthToken")}catch(t){if(this.emitError(t),e&&e.rejectOnFailedDelivery)throw t}return}this._transmit("#removeAuthToken")}kickOut(e,t){let r=e;return r||(r=Object.keys(this.channelSubscriptions)),Array.isArray(r)||(r=[e]),Promise.all(r.map(s=>(this.transmit("#kickOut",{channel:s,message:t}),this._unsubscribe(s))))}subscriptions(){return Object.keys(this.channelSubscriptions)}isSubscribed(e){return!!this.channelSubscriptions[e]}isAuthTokenExpired(e){if(e&&e.exp!=null){let t=Date.now(),r=e.exp*1e3;return t>r}return!1}async _processAuthentication({signedAuthToken:e,authTokenError:t,authToken:r}){if(t)throw this.signedAuthToken=null,this.authToken=null,this.authState=m.UNAUTHENTICATED,e!=null&&(this.emitError(t),t.isBadToken&&this._emitBadAuthTokenError(t,e)),t;this.signedAuthToken=e,this.authToken=r,this.authState=m.AUTHENTICATED;let s=new l;s.socket=this,s.type=l.AUTHENTICATE,s.signedAuthToken=this.signedAuthToken,s.authToken=this.authToken;try{await this.server.processMiddlewareAction(this.middlewareInboundStream,s,this)}catch(n){throw this.authToken=null,this.authState=m.UNAUTHENTICATED,n.isBadToken&&this._emitBadAuthTokenError(n,e),n}}async _validateAuthToken(e){let t=Object.assign({},this.server.defaultVerificationOptions,{socket:this,throwError:!0}),r;try{r=await this.server.auth.verifyToken(e,this.server.verificationKey,t)}catch(s){let n=this._processTokenError(s);return{signedAuthToken:e,authTokenError:n,authToken:null,authState:m.UNAUTHENTICATED}}return{signedAuthToken:e,authTokenError:null,authToken:r,authState:m.AUTHENTICATED}}_emitBadAuthTokenError(e,t){this.emit("badAuthToken",{authError:e,signedAuthToken:t}),this.server.emit("badSocketAuthToken",{socket:this,authError:e,signedAuthToken:t})}_processTokenError(e){if(e){if(e.message==="TokenExpiredError"){let r=new B(e.message,e.expiredAt);return r.isBadToken=!0,r}if(e.message==="ParseError"){let r=new M(e.message);return r.isBadToken=!0,r}if(e.message==="NotYetValid"){let r=new L(e.message,e.date);return r.isBadToken=!1,r}let t=new T(e.message);return t.isBadToken=!0,t}return null}_processAuthTokenExpiry(){let e=this.getAuthToken();return this.isAuthTokenExpired(e)?(this.deauthenticate(),new B("The socket auth token has expired",e.exp)):null}async _invoke(e,t,r){return r=r||{},new Promise((s,n)=>{let a={event:e,cid:this._nextCallId()};t!==void 0&&(a.data=t);let o=r.ackTimeout==null?this.server.ackTimeout:r.ackTimeout,u=setTimeout(()=>{let c=new U(`Event response for "${e}" timed out`);delete this._callbackMap[a.cid],n(c)},o);this._callbackMap[a.cid]={event:e,callback:(c,h)=>{if(c){n(c);return}s(h)},timeout:u},r.useCache&&r.stringifiedData!=null&&!this.isBufferingBatch?this.send(r.stringifiedData):this.sendObject(a)})}async _processTransmit(e,t,r){let s,n=r?r.useCache:!1,a={event:e,data:t},o=e==="#publish";if(o){let u=new l;u.socket=this,u.type=l.PUBLISH_OUT,t!==void 0&&(u.channel=t.channel,u.data=t.data),n=!this.server.hasMiddleware(this.middlewareOutboundStream.type);try{let{data:c,options:h}=await this.server.processMiddlewareAction(this.middlewareOutboundStream,u,this);s=c,n=h==null?n:h.useCache}catch{return}}else s=a.data;if(r&&n&&r.stringifiedData!=null&&!this.isBufferingBatch)this.send(r.stringifiedData);else{let u={event:e};o?(u.data=t||{},u.data.data=s):u.data=s,this.sendObject(u)}}async _transmit(e,t,r){this.cloneData&&t&&(t=G(t)),this.outboundPreparedMessageCount++,this.outboundPacketStream.write({event:e,data:t,options:r})}async _handleOutboundPacketStream(){for await(let e of this.outboundPacketStream){if(e.resolve){(async()=>{let t;try{t=await this._invoke(e.event,e.data,e.options)}catch(r){e.reject(r);return}e.resolve(t)})(),this.outboundSentMessageCount++;continue}await this._processTransmit(e.event,e.data,e.options),this.outboundSentMessageCount++}}_cancelBatching(){this._batchingIntervalId!=null&&clearInterval(this._batchingIntervalId),this._batchingIntervalId=null,this.cancelBatch()}_stopBatching(){this._batchingIntervalId!=null&&clearInterval(this._batchingIntervalId),this._batchingIntervalId=null,this.flushBatch()}_startBatching(){this._batchingIntervalId==null&&(this.startBatch(),this._batchingIntervalId=setInterval(()=>{this.flushBatch(),this.startBatch()},this.batchInterval))}async _destroy(e,t){if(clearInterval(this._pingIntervalTicker),clearTimeout(this._pingTimeoutTicker),this._cancelBatching(),this.state===m.CLOSED)this._abortAllPendingEventsDueToBadConnection("connectAbort");else{!t&&m.errorStatuses[e]&&(t=m.errorStatuses[e]);let r=this.state;if(this.state=m.CLOSED,r===m.CONNECTING?(this._abortAllPendingEventsDueToBadConnection("connectAbort"),this.emit("connectAbort",{code:e,reason:t}),this.server.emit("connectionAbort",{socket:this,code:e,reason:t})):(this._abortAllPendingEventsDueToBadConnection("disconnect"),this.emit("disconnect",{code:e,reason:t}),this.server.emit("disconnection",{socket:this,code:e,reason:t})),this.emit("close",{code:e,reason:t}),this.server.emit("closure",{socket:this,code:e,reason:t}),clearTimeout(this._handshakeTimeoutRef),!!this.server.clients[this.id]&&(delete this.server.clients[this.id],this.server.clientsCount--),!!this.server.pendingClients[this.id]&&(delete this.server.pendingClients[this.id],this.server.pendingClientsCount--),!m.ignoreStatuses[e]){let o;if(t){let c;if(typeof t=="object")try{c=JSON.stringify(t)}catch{c=t.toString()}else c=t;o=`Socket connection closed with status code ${e} and reason: ${c}`}else o=`Socket connection closed with status code ${e}`;let u=new H(m.errorStatuses[e]||o,e);this.emitError(u)}await this._unsubscribeFromAllChannels();let a=this.server.options.socketStreamCleanupMode;a==="kill"?(async()=>(await this.listener("end").once(),this.killAllStreams()))():a==="close"&&(async()=>(await this.listener("end").once(),this.closeAllStreams()))(),this.emit("end")}}_abortAllPendingEventsDueToBadConnection(e){Object.keys(this._callbackMap||{}).forEach(t=>{let r=this._callbackMap[t];delete this._callbackMap[t],clearTimeout(r.timeout),delete r.timeout;let s=`Event "${r.event}" was aborted due to a bad connection`,n=new x(s,e),a=r.callback;delete r.callback,a.call(r,n,r)})}async _handleInboundMessageStream(e){for await(let t of this.inboundMessageStream){if(this.inboundProcessedMessageCount++,t===e){if(this.server.strictHandshake&&this.state===m.CONNECTING){this._destroy(4009),this.socket.close(4009);continue}let n=this.getAuthToken();this.isAuthTokenExpired(n)&&this.deauthenticate();continue}let s;try{s=this.decode(t)}catch(n){n.name==="Error"&&(n.name="InvalidMessageError"),this.emitError(n),this.server.strictHandshake&&this.state===m.CONNECTING&&(this._destroy(4009),this.socket.close(4009));continue}if(Array.isArray(s)){let n=s.length;for(let a=0;a<n;a++)await this._processInboundPacket(s[a],t)}else await this._processInboundPacket(s,t)}}_handleHandshakeTimeout(){this.disconnect(4005)}async _processHandshakeRequest(e){let r=(e.data||{}).authToken||null;clearTimeout(this._handshakeTimeoutRef);let s=await this._validateAuthToken(r),n=new l;n.request=this.request,n.socket=this,n.type=l.HANDSHAKE_SC,n.data=s;try{await this.server.processMiddlewareAction(this.middlewareHandshakeStream,n)}catch(c){c.statusCode==null&&(c.statusCode=Pe),e.error(c),this.disconnect(c.statusCode);return}let a={id:this.id,pingTimeout:this.server.pingTimeout,isAuthenticated:!1},o={id:this.id,pingTimeout:this.server.pingTimeout,isAuthenticated:!1},u=this.authState;try{if(await this._processAuthentication(s),this.state===m.CLOSED)return}catch(c){r!=null&&(a.authError=K(c),o.authError=c,c.isBadToken&&this.deauthenticate())}a.isAuthenticated=!!this.authToken,o.isAuthenticated=a.isAuthenticated,this.server.pendingClients[this.id]&&(delete this.server.pendingClients[this.id],this.server.pendingClientsCount--),this.server.clients[this.id]=this,this.server.clientsCount++,this.state=m.OPEN,a.isAuthenticated&&(async()=>(await this.listener("connect").once(),this.triggerAuthenticationEvents(u)))(),e.end(a),this.batchOnHandshake&&this._startBatchOnHandshake(),this.emit("connect",o),this.server.emit("connection",{socket:this,...o}),this.middlewareHandshakeStream.close()}_startBatchOnHandshake(){this._startBatching(),setTimeout(()=>{this.isBatching||this._stopBatching()},this.batchOnHandshakeDuration)}async _processAuthenticateRequest(e){let t=e.data,r=this.authState,s=await this._validateAuthToken(t);try{await this._processAuthentication(s)}catch(n){if(n.isBadToken){this.deauthenticate(),e.error(n);return}e.end({isAuthenticated:!!this.authToken,authError:t==null?null:K(n)});return}this.triggerAuthenticationEvents(r),e.end({isAuthenticated:!!this.authToken,authError:null})}async _subscribeSocket(e,t){if(e===void 0||!t)throw new p(`Socket ${this.id} provided a malformated channel payload`);if(this.server.socketChannelLimit&&this.channelSubscriptionsCount>=this.server.socketChannelLimit)throw new p(`Socket ${this.id} tried to exceed the channel subscription limit of ${this.server.socketChannelLimit}`);if(typeof e!="string")throw new p(`Socket ${this.id} provided an invalid channel name`);this.channelSubscriptionsCount==null&&(this.channelSubscriptionsCount=0),this.channelSubscriptions[e]==null&&(this.channelSubscriptions[e]=!0,this.channelSubscriptionsCount++);try{await this.server.brokerEngine.subscribeSocket(this,e)}catch(r){throw delete this.channelSubscriptions[e],this.channelSubscriptionsCount--,r}this.emit("subscribe",{channel:e,subscriptionOptions:t}),this.server.emit("subscription",{socket:this,channel:e,subscriptionOptions:t})}async _processSubscribeRequest(e){let t=Object.assign({},e.data),r=t.channel;if(delete t.channel,this.state===m.OPEN){try{await this._subscribeSocket(r,t)}catch(n){let a=new D(`Failed to subscribe socket to the ${r} channel - ${n}`);this.emitError(a),e.error(a);return}e.end();return}let s=new p("Cannot subscribe socket to a channel before it has completed the handshake");this.emitError(s),e.error(s)}_unsubscribeFromAllChannels(){let e=Object.keys(this.channelSubscriptions);return Promise.all(e.map(t=>this._unsubscribe(t)))}async _unsubscribe(e){if(typeof e!="string")throw new p(`Socket ${this.id} tried to unsubscribe from an invalid channel name`);if(!this.channelSubscriptions[e])throw new p(`Socket ${this.id} tried to unsubscribe from a channel which it is not subscribed to`);try{await this.server.brokerEngine.unsubscribeSocket(this,e),delete this.channelSubscriptions[e],this.channelSubscriptionsCount!=null&&this.channelSubscriptionsCount--,this.emit("unsubscribe",{channel:e}),this.server.emit("unsubscription",{socket:this,channel:e})}catch(t){let r=new D(`Failed to unsubscribe socket from the ${e} channel - ${t}`);this.emitError(r)}}async _processUnsubscribePacket(e){let t=e.data;try{await this._unsubscribe(t)}catch(r){let s=new D(`Failed to unsubscribe socket from the ${t} channel - ${r}`);this.emitError(s)}}async _processUnsubscribeRequest(e){let t=e.data;try{await this._unsubscribe(t)}catch(r){let s=new D(`Failed to unsubscribe socket from the ${t} channel - ${r}`);this.emitError(s),e.error(s);return}e.end()}async _processInboundPublishPacket(e){let t=e.data||{};if(typeof t.channel!="string"){let r=new p(`Socket ${this.id} tried to invoke publish to an invalid "${t.channel}" channel`);this.emitError(r);return}try{await this.server.exchange.invokePublish(t.channel,t.data)}catch(r){this.emitError(r)}}async _processInboundPublishRequest(e){let t=e.data||{};if(typeof t.channel!="string"){let r=new p(`Socket ${this.id} tried to transmit publish to an invalid "${t.channel}" channel`);this.emitError(r),e.error(r);return}try{await this.server.exchange.invokePublish(t.channel,t.data)}catch(r){this.emitError(r),e.error(r);return}e.end()}async _processInboundPacket(e,t){if(e&&e.event!=null){let r=e.event,s=e.cid!=null;if(r==="#handshake"){let d=new O(this,e.cid,r,e.data);await this._processHandshakeRequest(d),this._procedureDemux.write(r,d);return}if(this.server.strictHandshake&&this.state===m.CONNECTING){this._destroy(4009),this.socket.close(4009);return}if(r==="#authenticate"){let d=new O(this,e.cid,r,e.data);await this._processAuthenticateRequest(d),this._procedureDemux.write(r,d);return}if(r==="#removeAuthToken"){this.deauthenticateSelf(),this._receiverDemux.write(r,e.data);return}let n=new l;n.socket=this;let a=this._processAuthTokenExpiry();a&&(n.authTokenExpiredError=a);let o=r==="#publish",u=r==="#subscribe",c=r==="#unsubscribe";if(o){if(!this.server.allowClientPublish){let d=new p("Client publish feature is disabled");this.emitError(d),s&&new O(this,e.cid,r,e.data).error(d);return}n.type=l.PUBLISH_IN,e.data&&(n.channel=e.data.channel,n.data=e.data.data)}else if(u)n.type=l.SUBSCRIBE,e.data&&(n.channel=e.data.channel,n.data=e.data.data);else if(c){if(s){let d=new O(this,e.cid,r,e.data);await this._processUnsubscribeRequest(d),this._procedureDemux.write(r,d);return}await this._processUnsubscribePacket(e),this._receiverDemux.write(r,e.data);return}else s?(n.type=l.INVOKE,n.procedure=e.event,e.data!==void 0&&(n.data=e.data)):(n.type=l.TRANSMIT,n.receiver=e.event,e.data!==void 0&&(n.data=e.data));let h;if(s){let d=new O(this,e.cid,r,e.data);try{let{data:F}=await this.server.processMiddlewareAction(this.middlewareInboundStream,n,this);h=F}catch(F){d.error(F);return}u?(d.data||(d.data={}),d.data.data=h,await this._processSubscribeRequest(d)):o?(d.data||(d.data={}),d.data.data=h,await this._processInboundPublishRequest(d)):d.data=h,this._procedureDemux.write(r,d);return}try{let{data:d}=await this.server.processMiddlewareAction(this.middlewareInboundStream,n,this);h=d}catch{return}o&&(e.data||(e.data={}),e.data.data=h,await this._processInboundPublishPacket(e)),this._receiverDemux.write(r,h);return}if(this.server.strictHandshake&&this.state===m.CONNECTING){this._destroy(4009),this.socket.close(4009);return}if(e&&e.rid!=null){let r=this._callbackMap[e.rid];if(r){clearTimeout(r.timeout),delete this._callbackMap[e.rid];let s=oe(e.error);r.callback(s,e.data)}return}this.emit("raw",{message:t})}_resetPongTimeout(){this.server.pingTimeoutDisabled||(clearTimeout(this._pingTimeoutTicker),this._pingTimeoutTicker=setTimeout(()=>{this._destroy(4001),this.socket.close(4001)},this.server.pingTimeout))}_nextCallId(){return this._cid++}_on(e,t){if(this.server.options.isNode)this.socket.on(e,t);else switch(e){case"message":this.socket.addEventListener(e,r=>t(r.data));break;case"close":case"error":this.socket.addEventListener(e,r=>t(r));break}}},v=m;b(v,"CONNECTING","connecting"),b(v,"OPEN","open"),b(v,"CLOSED","closed"),b(v,"AUTHENTICATED","authenticated"),b(v,"UNAUTHENTICATED","unauthenticated"),b(v,"ignoreStatuses",ae),b(v,"errorStatuses",ie);var Z="handshake",ee="inboundRaw",te="inbound",re="outbound";var g=class extends A{MIDDLEWARE_HANDSHAKE=g.MIDDLEWARE_HANDSHAKE;MIDDLEWARE_INBOUND_RAW=g.MIDDLEWARE_INBOUND_RAW;MIDDLEWARE_INBOUND=g.MIDDLEWARE_INBOUND;MIDDLEWARE_OUTBOUND=g.MIDDLEWARE_OUTBOUND;SYMBOL_MIDDLEWARE_HANDSHAKE_STREAM=g.SYMBOL_MIDDLEWARE_HANDSHAKE_STREAM;options;origins;ackTimeout;handshakeTimeout;pingInterval;pingTimeout;pingTimeoutDisabled;allowClientPublish;perMessageDeflate;httpServer;socketChannelLimit;protocolVersion;strictHandshake;brokerEngine;middlewareEmitFailures;isReady;signatureKey;verificationKey;defaultVerificationOptions;defaultSignatureOptions;exchange;clients;clientsCount;pendingClients;pendingClientsCount;auth;wsServer;codec;_middleware;_allowAllOrigins;_path;constructor(e){super();let t={brokerEngine:new X,wsEngine:"ws",wsEngineServerOptions:{},maxPayload:null,allowClientPublish:!0,ackTimeout:1e4,handshakeTimeout:1e4,strictHandshake:!0,pingTimeout:2e4,pingTimeoutDisabled:!1,pingInterval:8e3,origins:"*:*",path:"/topgunsocket/",protocolVersion:2,authDefaultExpiry:86400,batchOnHandshake:!1,batchOnHandshakeDuration:400,batchInterval:50,middlewareEmitFailures:!0,socketStreamCleanupMode:"kill",cloneData:!1,isNode:Q()};this.options=Object.assign(t,e),this._middleware={},this.origins=this.options.origins,this._allowAllOrigins=this.origins.indexOf("*:*")!==-1,this.ackTimeout=this.options.ackTimeout,this.handshakeTimeout=this.options.handshakeTimeout,this.pingInterval=this.options.pingInterval,this.pingTimeout=this.options.pingTimeout,this.pingTimeoutDisabled=this.options.pingTimeoutDisabled,this.allowClientPublish=this.options.allowClientPublish,this.perMessageDeflate=this.options.perMessageDeflate,this.httpServer=this.options.httpServer,this.socketChannelLimit=this.options.socketChannelLimit,this.protocolVersion=this.options.protocolVersion,this.strictHandshake=this.options.strictHandshake,this.brokerEngine=this.options.brokerEngine,this.middlewareEmitFailures=this.options.middlewareEmitFailures,this._path=t.path,(async()=>{for await(let{error:a}of this.brokerEngine.listener("error"))this.emitWarning(a)})(),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 this.options.wsEngine=="string"?require(t.wsEngine):t.wsEngine;if(!r||!r.Server)throw new _("The wsEngine option must be a path or module name which points to a valid WebSocket engine module with a compatible interface");let s=r.Server;if(this.options.authPrivateKey!=null||this.options.authPublicKey!=null){if(this.options.authPrivateKey==null)throw new _("The authPrivateKey option must be specified if authPublicKey is specified");if(this.options.authPublicKey==null)throw new _("The authPublicKey option must be specified if authPrivateKey is specified");this.signatureKey=this.options.authPrivateKey,this.verificationKey=this.options.authPublicKey}else this.options.authKey==null&&(this.options.authKey=he(32).toString()),this.signatureKey=this.options.authKey,this.verificationKey=this.options.authKey;this.defaultVerificationOptions={},this.options.authVerifyAlgorithm!=null?this.defaultVerificationOptions.algorithm=this.options.authVerifyAlgorithm:this.options.authAlgorithm!=null&&(this.defaultVerificationOptions.algorithm=this.options.authAlgorithm),this.defaultSignatureOptions={expiresIn:this.options.authDefaultExpiry},this.options.authAlgorithm!=null&&(this.defaultSignatureOptions.algorithm=this.options.authAlgorithm),this.options.authEngine?this.auth=this.options.authEngine:this.auth=new q,this.options.codecEngine?this.codec=this.options.codecEngine:this.codec=le,this.brokerEngine.setCodecEngine(this.codec),this.exchange=this.brokerEngine.exchange(),this.clients={},this.clientsCount=0,this.pendingClients={},this.pendingClientsCount=0;let n=this.options.wsEngineServerOptions||{};n.server=this.httpServer,n.verifyClient=this.verifyHandshake.bind(this),n.path==null&&this._path!=null&&(n.path=this._path),n.perMessageDeflate==null&&this.perMessageDeflate!=null&&(n.perMessageDeflate=this.perMessageDeflate),n.handleProtocols==null&&this.options.handleProtocols!=null&&(n.handleProtocols=this.options.handleProtocols),n.maxPayload==null&&t.maxPayload!=null&&(n.maxPayload=t.maxPayload),n.clientTracking==null&&(n.clientTracking=!1),this.options.isNode?(this.wsServer=new s(n),this.wsServer.on("error",this._handleServerError.bind(this)),this.wsServer.on("connection",this._handleSocketConnection.bind(this))):(this.wsServer=s,this.wsServer.addEventListener("close",this._closeOrErrorHandler.bind(this)),this.wsServer.addEventListener("error",this._closeOrErrorHandler.bind(this)))}setAuthEngine(e){this.auth=e}setCodecEngine(e){this.codec=e,this.brokerEngine.setCodecEngine(e)}emit(e,t){return super.emit(e,t)}listener(e){return super.listener(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(this.wsServer.close(s=>{if(s){r(s);return}t()}),!e)for(let s of Object.values(this.clients))s.terminate()})}getPath(){return this._path}generateId(){return me()}setMiddleware(e,t){if(e!==g.MIDDLEWARE_HANDSHAKE&&e!==g.MIDDLEWARE_INBOUND_RAW&&e!==g.MIDDLEWARE_INBOUND&&e!==g.MIDDLEWARE_OUTBOUND)throw new C(`Middleware type "${e}" is not supported`);if(this._middleware[e])throw new p(`Middleware type "${e}" has already been set`);this._middleware[e]=t}removeMiddleware(e){delete this._middleware[e]}hasMiddleware(e){return!!this._middleware[e]}async verifyHandshake(e,t){let r=e.req,s=e.origin;(s==="null"||s==null)&&(s="*");let n=!1;if(this._allowAllOrigins)n=!0;else try{let h=new URL(s),d=h.port||(h.protocol==="https:"?443:80);n=~this.origins.indexOf(h.hostname+":"+d)||~this.origins.indexOf(h.hostname+":*")||~this.origins.indexOf("*:"+d)}catch{}let a=new y;a.type=g.MIDDLEWARE_HANDSHAKE,r[g.SYMBOL_MIDDLEWARE_HANDSHAKE_STREAM]=a;let o=this._middleware[g.MIDDLEWARE_HANDSHAKE];o&&o(a);let u=new l;u.request=r,u.type=l.HANDSHAKE_WS;try{await this.processMiddlewareAction(a,u)}catch(h){a.close(),t(!1,401,typeof h=="string"?h:h.message);return}if(n){t(!0);return}let c=new P(`Failed to authorize socket handshake - Invalid origin: ${s}`);this.emitWarning(c),a.close(),t(!1,403,c.message)}async processMiddlewareAction(e,t,r){if(!this.hasMiddleware(e.type))return{data:t.data,options:null};e.write(t);let s,n=null;try{let a=await t.promise;a&&(s=a.data,n=a.options)}catch(a){let o;throw a?a.silent?o=new N(`The ${t.type} AGAction was blocked by ${e.type} middleware`,e.type):o=a:(a=new N(`The ${t.type} AGAction was blocked by ${e.type} middleware`,e.type),o=a),this.middlewareEmitFailures&&(r?r.emitError(a):this.emitWarning(a)),o}return s===void 0&&(s=t.data),{data:s,options:n}}_closeOrErrorHandler(e){e&&this.emitError(e),this.close()}_handleServerError(e){typeof e=="string"&&(e=new P(e)),this.emitError(e)}_handleSocketConnection(e,t){e.upgradeReq||(e.upgradeReq=t);let r=this.generateId(),s=new v(r,this,e,this.protocolVersion);s.exchange=this.exchange;let n=this._middleware[g.MIDDLEWARE_INBOUND_RAW];n&&n(s.middlewareInboundRawStream);let a=this._middleware[g.MIDDLEWARE_INBOUND];a&&a(s.middlewareInboundStream);let o=this._middleware[g.MIDDLEWARE_OUTBOUND];o&&o(s.middlewareOutboundStream),this.emit("handshake",{socket:s})}},S=g;b(S,"MIDDLEWARE_HANDSHAKE",Z),b(S,"MIDDLEWARE_INBOUND_RAW",ee),b(S,"MIDDLEWARE_INBOUND",te),b(S,"MIDDLEWARE_OUTBOUND",re),b(S,"SYMBOL_MIDDLEWARE_HANDSHAKE_STREAM",Symbol("handshakeStream"));function be(i,e){return e=e||{},e.httpServer=i,new S(e)}function Me(i,e,t){if(typeof e=="function"&&(t=e,e={}),Q()){let s=require("http").createServer((a,o)=>{o.writeHead(501),o.end("Not Implemented")});e.httpServer=s;let n=be(s,e);return s.listen(i,t),n}else return new S(e)}0&&(module.exports={MIDDLEWARE_HANDSHAKE,MIDDLEWARE_INBOUND,MIDDLEWARE_INBOUND_RAW,MIDDLEWARE_OUTBOUND,TGAction,TGServerSocket,TGServerSocketGateway,attach,listen});
var Se=Object.create;var W=Object.defineProperty;var ge=Object.getOwnPropertyDescriptor;var fe=Object.getOwnPropertyNames;var ke=Object.getPrototypeOf,ye=Object.prototype.hasOwnProperty;var ve=(i,e,t)=>e in i?W(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t;var Ce=(i,e)=>{for(var t in e)W(i,t,{get:e[t],enumerable:!0})},se=(i,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of fe(e))!ye.call(i,s)&&s!==t&&W(i,s,{get:()=>e[s],enumerable:!(r=ge(e,s))||r.enumerable});return i};var Ee=(i,e,t)=>(t=i!=null?Se(ke(i)):{},se(e||!i||!i.__esModule?W(t,"default",{value:i,enumerable:!0}):t,i)),Ae=i=>se(W({},"__esModule",{value:!0}),i);var b=(i,e,t)=>(ve(i,typeof e!="symbol"?e+"":e,t),t);var Le={};Ce(Le,{MIDDLEWARE_HANDSHAKE:()=>Z,MIDDLEWARE_INBOUND:()=>te,MIDDLEWARE_INBOUND_RAW:()=>ee,MIDDLEWARE_OUTBOUND:()=>re,TGAction:()=>l,TGServerSocket:()=>v,TGServerSocketGateway:()=>S,attach:()=>be,listen:()=>Me});module.exports=Ae(Le);var w=class{async next(e){let t=this.createConsumer(e),r=await t.next();return t.return(),r}async once(e){let t=await this.next(e);return t.done&&await new Promise(()=>{}),t.value}createConsumer(e){throw new TypeError("Method must be overriden by subclass")}[Symbol.asyncIterator](){return this.createConsumer()}};var $=class{id;timeout;stream;currentNode;isAlive;_backpressure;_timeoutId;_resolve;_killPacket;constructor(e,t,r,s){this.id=t,this._backpressure=0,this.stream=e,this.currentNode=r,this.timeout=s,this.isAlive=!0,this.stream.setConsumer(this.id,this)}getStats(){let e={id:this.id,backpressure:this._backpressure};return this.timeout!=null&&(e.timeout=this.timeout),e}applyBackpressure(e){this._backpressure++}releaseBackpressure(e){this._backpressure--}getBackpressure(){return this._backpressure}write(e){this._timeoutId!==void 0&&(clearTimeout(this._timeoutId),delete this._timeoutId),this.applyBackpressure(e),this._resolve&&(this._resolve(),delete this._resolve)}kill(e){this._timeoutId!==void 0&&(clearTimeout(this._timeoutId),delete this._timeoutId),this._killPacket={value:e,done:!0},this._destroy(),this._resolve&&(this._resolve(),delete this._resolve)}async next(){for(this.stream.setConsumer(this.id,this);;){if(this.currentNode&&!this.currentNode.next)try{await this._waitForNextItem(this.timeout)}catch(e){throw this._destroy(),e}if(this._killPacket){this._destroy();let e=this._killPacket;return delete this._killPacket,e}if(this.currentNode){if(this.currentNode=this.currentNode.next,this.releaseBackpressure(this.currentNode.data),this.currentNode.consumerId&&this.currentNode.consumerId!==this.id)continue;return this.currentNode.data.done&&this._destroy(),this.currentNode.data}}}return(){return delete this.currentNode,this._destroy(),{}}_resetBackpressure(){this._backpressure=0}_destroy(){this.isAlive=!1,this._resetBackpressure(),this.stream.removeConsumer(this.id)}async _waitForNextItem(e){return new Promise((t,r)=>{this._resolve=t;let s;if(e!==void 0){let n=new Error("Stream consumer iteration timed out");(async()=>{let a=Te(e);s=a.timeoutId,await a.promise,n.name="TimeoutError",delete this._resolve,r(n)})()}this._timeoutId=s})}[Symbol.asyncIterator](){return this}};function Te(i){let e,t=new Promise(r=>{e=setTimeout(r,i)});return{timeoutId:e,promise:t}}var y=class extends w{type;nextConsumerId;_consumers;_tailNode;constructor(){super(),this.nextConsumerId=1,this._consumers=new Map,this._tailNode={next:null,data:{value:void 0,done:!1}}}write(e){this._write(e,!1)}close(e){this._write(e,!0)}writeToConsumer(e,t){this._write(t,!1,e)}closeConsumer(e,t){this._write(t,!0,e)}kill(e){for(let t of this._consumers.keys())this.killConsumer(t,e)}killConsumer(e,t){let r=this._consumers.get(e);!r||r.kill(t)}getBackpressure(){let e=0;for(let t of this._consumers.values()){let r=t.getBackpressure();r>e&&(e=r)}return e}getConsumerBackpressure(e){let t=this._consumers.get(e);return t?t.getBackpressure():0}hasConsumer(e){return this._consumers.has(e)}setConsumer(e,t){this._consumers.set(e,t),t.currentNode||(t.currentNode=this._tailNode)}removeConsumer(e){return this._consumers.delete(e)}getConsumerStats(e){let t=this._consumers.get(e);if(t)return t.getStats()}getConsumerStatsList(){let e=[];for(let t of this._consumers.values())e.push(t.getStats());return e}createConsumer(e){return new $(this,this.nextConsumerId++,this._tailNode,e)}getConsumerList(){return[...this._consumers.values()]}getConsumerCount(){return this._consumers.size}_write(e,t,r){let s={data:{value:e,done:t},next:null};r&&(s.consumerId=r),this._tailNode.next=s,this._tailNode=s;for(let n of this._consumers.values())n.write(s.data)}};var V=class extends w{name;_streamDemux;constructor(e,t){super(),this.name=t,this._streamDemux=e}createConsumer(e){return this._streamDemux.createConsumer(this.name,e)}};var E=class{_mainStream;constructor(){this._mainStream=new y}write(e,t){this._mainStream.write({stream:e,data:{value:t,done:!1}})}close(e,t){this._mainStream.write({stream:e,data:{value:t,done:!0}})}closeAll(e){this._mainStream.close(e)}writeToConsumer(e,t){this._mainStream.writeToConsumer(e,{consumerId:e,data:{value:t,done:!1}})}closeConsumer(e,t){this._mainStream.closeConsumer(e,{consumerId:e,data:{value:t,done:!0}})}getConsumerStats(e){return this._mainStream.getConsumerStats(e)}getConsumerStatsList(e){return this._mainStream.getConsumerStatsList().filter(r=>r.stream===e)}getConsumerStatsListAll(){return this._mainStream.getConsumerStatsList()}kill(e,t){let r=this.getConsumerStatsList(e),s=r.length;for(let n=0;n<s;n++)this.killConsumer(r[n].id,t)}killAll(e){this._mainStream.kill(e)}killConsumer(e,t){this._mainStream.killConsumer(e,t)}getBackpressure(e){let t=this.getConsumerStatsList(e),r=t.length,s=0;for(let n=0;n<r;n++){let a=t[n];a.backpressure>s&&(s=a.backpressure)}return s}getBackpressureAll(){return this._mainStream.getBackpressure()}getConsumerBackpressure(e){return this._mainStream.getConsumerBackpressure(e)}hasConsumer(e,t){let r=this._mainStream.getConsumerStats(t);return!!r&&r.stream===e}hasConsumerAll(e){return this._mainStream.hasConsumer(e)}getConsumerCount(e){return this.getConsumerStatsList(e).length}getConsumerCountAll(){return this.getConsumerStatsListAll().length}createConsumer(e,t){let r=this._mainStream.createConsumer(t),s=r.next;r.next=async function(){for(;;){let u=arguments,c=await s.apply(this,u);if(c.value&&(c.value.stream===e||c.value.consumerId===this.id))return c.value.data.done&&this.return(),c.value.data;if(c.done)return c}};let n=r.getStats;r.getStats=function(){let u=arguments,c=n.apply(this,u);return c.stream=e,c};let a=r.applyBackpressure;r.applyBackpressure=function(u){let c=arguments;if(u.value&&(u.value.stream===e||u.value.consumerId===this.id)){a.apply(this,c);return}u.done&&a.apply(this,c)};let o=r.releaseBackpressure;return r.releaseBackpressure=function(u){let c=arguments;if(u.value&&(u.value.stream===e||u.value.consumerId===this.id)){o.apply(this,c);return}u.done&&o.apply(this,c)},r}stream(e){return new V(this,e)}};var A=class{_listenerDemux;constructor(){this._listenerDemux=new E}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()}getListenerConsumerStats(e){return this._listenerDemux.getConsumerStats(e)}getListenerConsumerStatsList(e){return this._listenerDemux.getConsumerStatsList(e)}getAllListenersConsumerStatsList(){return this._listenerDemux.getConsumerStatsListAll()}getListenerConsumerCount(e){return this._listenerDemux.getConsumerCount(e)}getAllListenersConsumerCount(){return this._listenerDemux.getConsumerCountAll()}killListener(e){this._listenerDemux.kill(e)}killAllListeners(){this._listenerDemux.killAll()}killListenerConsumer(e){this._listenerDemux.killConsumer(e)}getListenerBackpressure(e){return this._listenerDemux.getBackpressure(e)}getAllListenersBackpressure(){return this._listenerDemux.getBackpressureAll()}getListenerConsumerBackpressure(e){return this._listenerDemux.getConsumerBackpressure(e)}hasListenerConsumer(e,t){return this._listenerDemux.hasConsumer(e,t)}hasAnyListenerConsumer(e){return this._listenerDemux.hasConsumerAll(e)}};function ne(i){let e=[],t=[];return function r(s,n){let a,o,u;if(typeof s=="object"&&s!==null&&!(s instanceof Boolean)&&!(s instanceof Date)&&!(s instanceof Number)&&!(s instanceof RegExp)&&!(s instanceof String)){for(a=0;a<e.length;a+=1)if(e[a]===s)return{$ref:t[a]};if(e.push(s),t.push(n),Object.prototype.toString.apply(s)==="[object Array]")for(u=[],a=0;a<s.length;a+=1)u[a]=r(s[a],n+"["+a+"]");else{u={};for(o in s)Object.prototype.hasOwnProperty.call(s,o)&&(u[o]=r(s[o],n+"["+JSON.stringify(o)+"]"))}return u}return s}(i,"$")}function f(){"use strict";return typeof function(){return this}()>"u"}var B=class extends Error{expiry;isBadToken;constructor(e,t){super(e),Object.setPrototypeOf(this,B.prototype),this.name="AuthTokenExpiredError",this.message=e,this.expiry=new Date(t),Error.captureStackTrace&&!f()?Error.captureStackTrace(this,arguments.callee):this.stack=new Error().stack}},M=class extends Error{isBadToken;constructor(e){super(e),Object.setPrototypeOf(this,M.prototype),this.name="AuthTokenInvalidError",this.message=e,Error.captureStackTrace&&!f()?Error.captureStackTrace(this,arguments.callee):this.stack=new Error().stack}},L=class extends Error{date;isBadToken;constructor(e,t){super(e),Object.setPrototypeOf(this,L.prototype),this.name="AuthTokenNotBeforeError",this.message=e,this.date=t,Error.captureStackTrace&&!f()?Error.captureStackTrace(this,arguments.callee):this.stack=new Error().stack}},T=class extends Error{expiredAt;date;isBadToken;constructor(e){super(e),Object.setPrototypeOf(this,T.prototype),this.name="AuthTokenError",this.message=e,Error.captureStackTrace&&!f()?Error.captureStackTrace(this,arguments.callee):this.stack=new Error().stack}},R=class extends Error{constructor(e){super(e),Object.setPrototypeOf(this,R.prototype),this.name="AuthError",this.message=e,Error.captureStackTrace&&!f()?Error.captureStackTrace(this,arguments.callee):this.stack=new Error().stack}},N=class extends Error{type;constructor(e,t){super(e),Object.setPrototypeOf(this,N.prototype),this.name="SilentMiddlewareBlockedError",this.message=e,this.type=t,Error.captureStackTrace&&!f()?Error.captureStackTrace(this,arguments.callee):this.stack=new Error().stack}},p=class extends Error{constructor(e){super(e),Object.setPrototypeOf(this,p.prototype),this.name="InvalidActionError",this.message=e,Error.captureStackTrace&&!f()?Error.captureStackTrace(this,arguments.callee):this.stack=new Error().stack}},C=class extends Error{constructor(e){super(e),Object.setPrototypeOf(this,C.prototype),this.name="InvalidArgumentsError",this.message=e,Error.captureStackTrace&&!f()?Error.captureStackTrace(this,arguments.callee):this.stack=new Error().stack}},_=class extends Error{constructor(e){super(e),Object.setPrototypeOf(this,_.prototype),this.name="InvalidOptionsError",this.message=e,Error.captureStackTrace&&!f()?Error.captureStackTrace(this,arguments.callee):this.stack=new Error().stack}};var H=class extends Error{code;constructor(e,t){super(e),Object.setPrototypeOf(this,H.prototype),this.name="SocketProtocolError",this.message=e,this.code=t,Error.captureStackTrace&&!f()?Error.captureStackTrace(this,arguments.callee):this.stack=new Error().stack}},P=class extends Error{constructor(e){super(e),Object.setPrototypeOf(this,P.prototype),this.name="ServerProtocolError",this.message=e,Error.captureStackTrace&&!f()?Error.captureStackTrace(this,arguments.callee):this.stack=new Error().stack}};var U=class extends Error{constructor(e){super(e),Object.setPrototypeOf(this,U.prototype),this.name="TimeoutError",this.message=e,Error.captureStackTrace&&!f()?Error.captureStackTrace(this,arguments.callee):this.stack=new Error().stack}},x=class extends Error{type;constructor(e,t){super(e),Object.setPrototypeOf(this,x.prototype),this.name="BadConnectionError",this.message=e,this.type=t,Error.captureStackTrace&&!f()?Error.captureStackTrace(this,arguments.callee):this.stack=new Error().stack}},D=class extends Error{constructor(e){super(e),Object.setPrototypeOf(this,D.prototype),this.name="BrokerError",this.message=e,Error.captureStackTrace&&!f()?Error.captureStackTrace(this,arguments.callee):this.stack=new Error().stack}};var ie={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"},ae={1e3:"Socket closed normally",1001:"Socket hung up"},De={domain:1,domainEmitter:1,domainThrown:1};function K(i,e){let t;if(i&&typeof i=="object"){t={message:i.message},e&&(t.stack=i.stack);for(let r in i)De[r]||(t[r]=i[r])}else typeof i=="function"?t="[function "+(i.name||"anonymous")+"]":t=i;return ne(t)}function oe(i){let e=null;if(i!=null)if(typeof i=="object"){e=new Error(i.message);for(let t in i)i.hasOwnProperty(t)&&(e[t]=i[t])}else e=i;return e}var J=require("topgun-jsonwebtoken"),q=class{verifyToken(e,t,r){r=r||{};let s=Object.assign({},r);return delete s.socket,typeof e=="string"||e==null?new Promise((n,a)=>{(0,J.verify)(e,t,s).then(o=>{o?n(o):a(new T("Invalid token"))}).catch(o=>a(o))}):Promise.reject(new C("Invalid token format - Token must be a string"))}signToken(e,t,r){r=r||{};let s=Object.assign({},r);return new Promise((n,a)=>{(0,J.sign)(e,t,s).then(o=>{o?n(o):a(new T("Sign token error"))}).catch(o=>a(o))})}};var ce=Ee(require("topgun-webcrypto"));var we=["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 ue(i){let e=0,t="",r=new Uint8Array(i);for(;e<r.length;e++)t+=we[r[e]];return t}var _e=ce.default;function he(i=9,e){let t=new Uint8Array(i);try{return _e.getRandomValues(t),e&&e(null,t),ue(t)}catch(r){return e&&e(r,t),null}}var I=typeof self=="object"&&self.self===self&&self||typeof global=="object"&&global.global===global&&global||void 0;var z="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",xe=/^[ \n\r\t]*[{\[]/,Ie=function(i){let e=new Uint8Array(i),t=e.length,r="";for(let s=0;s<t;s+=3)r+=z[e[s]>>2],r+=z[(e[s]&3)<<4|e[s+1]>>4],r+=z[(e[s+1]&15)<<2|e[s+2]>>6],r+=z[e[s+2]&63];return t%3===2?r=r.substring(0,r.length-1)+"=":t%3===1&&(r=r.substring(0,r.length-2)+"=="),r},Oe=function(i,e){if(I.ArrayBuffer&&e instanceof I.ArrayBuffer)return{base64:!0,data:Ie(e)};if(I.Buffer){if(e instanceof I.Buffer)return{base64:!0,data:e.toString("base64")};if(e&&e.type==="Buffer"&&Array.isArray(e.data)){let t;return I.Buffer.from?t=I.Buffer.from(e.data):t=new I.Buffer(e.data),{base64:!0,data:t.toString("base64")}}}return e};function Be(i){if(i==null)return null;if(i==="#1"||i==="#2")return i;let e=i.toString();if(!xe.test(e))return e;try{return JSON.parse(e)}catch{}return e}function Ne(i){return i==="#1"||i==="#2"?i:JSON.stringify(i,Oe)}var le={encode:Ne,decode:Be};var j=class extends w{name;PENDING;SUBSCRIBED;UNSUBSCRIBED;client;_eventDemux;_dataStream;_pendingSubscriptionCid;constructor(e,t,r,s){super(),this.PENDING=j.PENDING,this.SUBSCRIBED=j.SUBSCRIBED,this.UNSUBSCRIBED=j.UNSUBSCRIBED,this.name=e,this.client=t,this._eventDemux=r,this._dataStream=s.stream(this.name)}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")}createConsumer(e){return this._dataStream.createConsumer(e)}listener(e){return this._eventDemux.stream(`${this.name}/${e}`)}close(){this.client.closeChannel(this.name)}kill(){this.client.killChannel(this.name)}killOutputConsumer(e){this.hasOutputConsumer(e)&&this.client.killChannelOutputConsumer(e)}killListenerConsumer(e){this.hasAnyListenerConsumer(e)&&this.client.killChannelListenerConsumer(e)}getOutputConsumerStats(e){if(this.hasOutputConsumer(e))return this.client.getChannelOutputConsumerStats(e)}getListenerConsumerStats(e){if(this.hasAnyListenerConsumer(e))return this.client.getChannelListenerConsumerStats(e)}getBackpressure(){return this.client.getChannelBackpressure(this.name)}getListenerConsumerBackpressure(e){return this.hasAnyListenerConsumer(e)?this.client.getChannelListenerConsumerBackpressure(e):0}getOutputConsumerBackpressure(e){return this.hasOutputConsumer(e)?this.client.getChannelOutputConsumerBackpressure(e):0}closeOutput(){this.client.channelCloseOutput(this.name)}closeListener(e){this.client.channelCloseListener(this.name,e)}closeAllListeners(){this.client.channelCloseAllListeners(this.name)}killOutput(){this.client.channelKillOutput(this.name)}killListener(e){this.client.channelKillListener(this.name,e)}killAllListeners(){this.client.channelKillAllListeners(this.name)}getOutputConsumerStatsList(){return this.client.channelGetOutputConsumerStatsList(this.name)}getListenerConsumerStatsList(e){return this.client.channelGetListenerConsumerStatsList(this.name,e)}getAllListenersConsumerStatsList(){return this.client.channelGetAllListenersConsumerStatsList(this.name)}getOutputBackpressure(){return this.client.channelGetOutputBackpressure(this.name)}getListenerBackpressure(e){return this.client.channelGetListenerBackpressure(this.name,e)}getAllListenersBackpressure(){return this.client.channelGetAllListenersBackpressure(this.name)}hasOutputConsumer(e){return this.client.channelHasOutputConsumer(this.name,e)}hasListenerConsumer(e,t){return this.client.channelHasListenerConsumer(this.name,e,t)}hasAnyListenerConsumer(e){return this.client.channelHasAnyListenerConsumer(this.name,e)}subscribe(e){this.client.subscribe(this.name,e)}unsubscribe(){this.client.unsubscribe(this.name)}isSubscribed(e){return this.client.isSubscribed(this.name,e)}transmitPublish(e){return this.client.transmitPublish(this.name,e)}invokePublish(e){return this.client.invokePublish(this.name,e)}},k=j;b(k,"PENDING","pending"),b(k,"SUBSCRIBED","subscribed"),b(k,"UNSUBSCRIBED","unsubscribed");var Y=class extends A{id;_broker;_channelMap;_channelEventDemux;_channelDataDemux;constructor(e){super(),this.id="exchange",this._broker=e,this._channelMap={},this._channelEventDemux=new E,this._channelDataDemux=new E}transmit(e,t){e==="#publish"&&this._channelDataDemux.write(t.channel,t.data)}getBackpressure(){return Math.max(this.getAllListenersBackpressure(),this.getAllChannelsBackpressure())}destroy(){this._broker.closeAllListeners()}async transmitPublish(e,t){return this._broker.transmitPublish(e,t)}async invokePublish(e,t){return this._broker.invokePublish(e,t)}subscribe(e){let t=this._channelMap[e];return t||(t={name:e,state:k.PENDING},this._channelMap[e]=t,this._triggerChannelSubscribe(t)),new k(e,this,this._channelEventDemux,this._channelDataDemux)}async unsubscribe(e){let t=this._channelMap[e];t&&this._triggerChannelUnsubscribe(t)}channel(e){return new k(e,this,this._channelEventDemux,this._channelDataDemux)}closeChannel(e){this.channelCloseOutput(e),this.channelCloseAllListeners(e)}closeAllChannelOutputs(){this._channelDataDemux.closeAll()}closeAllChannelListeners(){this._channelEventDemux.closeAll()}closeAllChannels(){this.closeAllChannelOutputs(),this.closeAllChannelListeners()}killChannel(e){this.channelKillOutput(e),this.channelKillAllListeners(e)}killAllChannelOutputs(){this._channelDataDemux.killAll()}killAllChannelListeners(){this._channelEventDemux.killAll()}killAllChannels(){this.killAllChannelOutputs(),this.killAllChannelListeners()}killChannelOutputConsumer(e){this._channelDataDemux.killConsumer(e)}killChannelListenerConsumer(e){this._channelEventDemux.killConsumer(e)}getChannelOutputConsumerStats(e){return this._channelDataDemux.getConsumerStats(e)}getChannelListenerConsumerStats(e){return this._channelEventDemux.getConsumerStats(e)}getAllChannelOutputsConsumerStatsList(){return this._channelDataDemux.getConsumerStatsListAll()}getAllChannelListenersConsumerStatsList(){return this._channelEventDemux.getConsumerStatsListAll()}getChannelBackpressure(e){return Math.max(this.channelGetOutputBackpressure(e),this.channelGetAllListenersBackpressure(e))}getAllChannelOutputsBackpressure(){return this._channelDataDemux.getBackpressureAll()}getAllChannelListenersBackpressure(){return this._channelEventDemux.getBackpressureAll()}getAllChannelsBackpressure(){return Math.max(this.getAllChannelOutputsBackpressure(),this.getAllChannelListenersBackpressure())}getChannelListenerConsumerBackpressure(e){return this._channelEventDemux.getConsumerBackpressure(e)}getChannelOutputConsumerBackpressure(e){return this._channelDataDemux.getConsumerBackpressure(e)}hasAnyChannelOutputConsumer(e){return this._channelDataDemux.hasConsumerAll(e)}hasAnyChannelListenerConsumer(e){return this._channelEventDemux.hasConsumerAll(e)}getChannelState(e){let t=this._channelMap[e];return t?t.state:k.UNSUBSCRIBED}getChannelOptions(e){return{}}channelCloseOutput(e){this._channelDataDemux.close(e)}channelCloseListener(e,t){this._channelEventDemux.close(`${e}/${t}`)}channelCloseAllListeners(e){this._getAllChannelStreamNames(e).forEach(t=>{this._channelEventDemux.close(t)})}channelKillOutput(e){this._channelDataDemux.kill(e)}channelKillListener(e,t){this._channelEventDemux.kill(`${e}/${t}`)}channelKillAllListeners(e){this._getAllChannelStreamNames(e).forEach(t=>{this._channelEventDemux.kill(t)})}channelGetOutputConsumerStatsList(e){return this._channelDataDemux.getConsumerStatsList(e)}channelGetListenerConsumerStatsList(e,t){return this._channelEventDemux.getConsumerStatsList(`${e}/${t}`)}channelGetAllListenersConsumerStatsList(e){return this._getAllChannelStreamNames(e).map(t=>this._channelEventDemux.getConsumerStatsList(t)).reduce((t,r)=>(r.forEach(s=>{t.push(s)}),t),[])}channelGetOutputBackpressure(e){return this._channelDataDemux.getBackpressure(e)}channelGetListenerBackpressure(e,t){return this._channelEventDemux.getBackpressure(`${e}/${t}`)}channelGetAllListenersBackpressure(e){let t=this._getAllChannelStreamNames(e).map(r=>this._channelEventDemux.getBackpressure(r));return Math.max(...t.concat(0))}channelHasOutputConsumer(e,t){return this._channelDataDemux.hasConsumer(e,t)}channelHasListenerConsumer(e,t,r){return this._channelEventDemux.hasConsumer(`${e}/${t}`,r)}channelHasAnyListenerConsumer(e,t){return this._getAllChannelStreamNames(e).some(r=>this._channelEventDemux.hasConsumer(r,t))}subscriptions(e){let t=[];return Object.keys(this._channelMap).forEach(r=>{(e||this._channelMap[r].state===k.SUBSCRIBED)&&t.push(r)}),t}isSubscribed(e,t){let r=this._channelMap[e];return t?!!r:!!r&&r.state===k.SUBSCRIBED}_triggerChannelSubscribe(e){let t=e.name;e.state=k.SUBSCRIBED,this._channelEventDemux.write(`${t}/subscribe`,{}),this._broker.subscribeClient(this,t),this.emit("subscribe",{channel:t})}_triggerChannelUnsubscribe(e){let t=e.name;delete this._channelMap[t],e.state===k.SUBSCRIBED&&(this._channelEventDemux.write(`${t}/unsubscribe`,{}),this._broker.unsubscribeClient(this,t),this.emit("unsubscribe",{channel:t}))}_getAllChannelStreamNames(e){let t=this._channelEventDemux.getConsumerStatsListAll().filter(r=>r.stream.indexOf(`${e}/`)===0).reduce((r,s)=>(r[s.stream]=!0,r),{});return Object.keys(t)}};var X=class extends A{isReady;_codec;_exchangeClient;_clientSubscribers;_clientSubscribersCounter;constructor(){super(),this.isReady=!1,this._codec=null,this._exchangeClient=new Y(this),this._clientSubscribers={},this._clientSubscribersCounter={},setTimeout(()=>{this.isReady=!0,this.emit("ready",{})},0)}exchange(){return this._exchangeClient}async subscribeClient(e,t){this._clientSubscribers[t]||(this._clientSubscribers[t]={},this._clientSubscribersCounter[t]=0,this.emit("subscribe",{channel:t})),this._clientSubscribers[t][e.id]||this._clientSubscribersCounter[t]++,this._clientSubscribers[t][e.id]=e}async subscribeSocket(e,t){return this.subscribeClient(e,t)}async unsubscribeClient(e,t){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})))}async unsubscribeSocket(e,t){return this.unsubscribeClient(e,t)}subscriptions(){return Object.keys(this._clientSubscribers)}isSubscribed(e){return!!this._clientSubscribers[e]}setCodecEngine(e){this._codec=e}invokePublish(e,t,r){return this.transmitPublish(e,t,r)}async transmitPublish(e,t,r){let s={channel:e,data:t},n={};if(this._codec)try{n.stringifiedData=this._codec.encode({event:"#publish",data:s})}catch(o){this.emit("error",{error:o});return}let a=this._clientSubscribers[e]||{};Object.keys(a).forEach(o=>{a[o].transmit("#publish",s,n)}),r||this.emit("publish",s)}};function me(){return Math.abs(Math.random()*Math.random()*Date.now()|0).toString()+Math.abs(Math.random()*Math.random()*Date.now()|0).toString()}function Q(){return typeof process=="object"}function l(){this.outcome=null,this.request=null,this.socket=null,this.authTokenExpiredError=null,this.receiver=null,this.procedure=null,this.channel=null,this.authToken=null,this.signedAuthToken=null,this.data=null,this.promise=new Promise((i,e)=>{this._resolve=i,this._reject=e}),this.allow=i=>{if(this.outcome)throw new p(`TGAction ${this.type} has already been ${this.outcome}; cannot allow`);this.outcome="allowed",this._resolve(i)},this.block=i=>{if(this.outcome)throw new p(`TGAction ${this.type} has already been ${this.outcome}; cannot block`);this.outcome="blocked",this._reject(i)}}l.prototype.HANDSHAKE_WS=l.HANDSHAKE_WS="handshakeWS";l.prototype.HANDSHAKE_SC=l.HANDSHAKE_SC="handshakeSC";l.prototype.MESSAGE=l.MESSAGE="message";l.prototype.TRANSMIT=l.TRANSMIT="transmit";l.prototype.INVOKE=l.INVOKE="invoke";l.prototype.SUBSCRIBE=l.SUBSCRIBE="subscribe";l.prototype.PUBLISH_IN=l.PUBLISH_IN="publishIn";l.prototype.PUBLISH_OUT=l.PUBLISH_OUT="publishOut";l.prototype.AUTHENTICATE=l.AUTHENTICATE="authenticate";var O=class{id;socket;procedure;data;sent;constructor(e,t,r,s){this.socket=e,this.id=t,this.procedure=r,this.data=s,this.sent=!1}end(e,t){let r={rid:this.id};e!==void 0&&(r.data=e),this._respond(r,t)}error(e,t){let r={rid:this.id,error:K(e)};this._respond(r,t)}_respond(e,t){if(this.sent)throw new p(`Response to request ${this.id} has already been sent`);this.sent=!0,this.socket.sendObject(e,t)}};function de(i){return Object.prototype.toString.call(i)==="[object Date]"}function pe(i){return!!i&&typeof i=="object"&&Object.prototype.toString.call(i)!=="[object Array]"}function G(i){if(de(i))return new Date(i.getTime());if(Array.isArray(i))return[...i].map(e=>G(e));if(i instanceof Map||i instanceof Set)return i;if(pe(i)){let e={};for(let t of Object.keys(i))e[t]=G(i[t]);return e}return i}var Pe=4008,m=class extends A{CONNECTING=m.CONNECTING;OPEN=m.OPEN;CLOSED=m.CLOSED;AUTHENTICATED=m.AUTHENTICATED;UNAUTHENTICATED=m.UNAUTHENTICATED;id;server;socket;protocolVersion;request;inboundReceivedMessageCount;inboundProcessedMessageCount;outboundPreparedMessageCount;outboundSentMessageCount;cloneData;inboundMessageStream;outboundPacketStream;middlewareHandshakeStream;middlewareInboundRawStream;middlewareInboundStream;middlewareOutboundStream;remoteAddress;remoteFamily;remotePort;forwardedForAddress;isBufferingBatch;isBatching;batchOnHandshake;batchOnHandshakeDuration;batchInterval;channelSubscriptions;channelSubscriptionsCount;exchange;state;authState;authToken;signedAuthToken;_receiverDemux;_procedureDemux;_batchBuffer;_batchingIntervalId=null;_cid;_callbackMap;_sendPing;_pingIntervalTicker;_handshakeTimeoutRef;_pingTimeoutTicker;constructor(e,t,r,s){super(),this.id=e,this.server=t,this.socket=r,this.state=m.CONNECTING,this.authState=m.UNAUTHENTICATED,this.authToken=null,this.protocolVersion=s,this._receiverDemux=new E,this._procedureDemux=new E,this.request=this.socket.upgradeReq,this.inboundReceivedMessageCount=0,this.inboundProcessedMessageCount=0,this.outboundPreparedMessageCount=0,this.outboundSentMessageCount=0,this.cloneData=this.server.options.cloneData,this.inboundMessageStream=new y,this.outboundPacketStream=new y,this.middlewareHandshakeStream=this.request[S.SYMBOL_MIDDLEWARE_HANDSHAKE_STREAM],this.middlewareInboundRawStream=new y,this.middlewareInboundRawStream.type=S.MIDDLEWARE_INBOUND_RAW,this.middlewareInboundStream=new y,this.middlewareInboundStream.type=S.MIDDLEWARE_INBOUND,this.middlewareOutboundStream=new y,this.middlewareOutboundStream.type=S.MIDDLEWARE_OUTBOUND,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.isBufferingBatch=!1,this.isBatching=!1,this.batchOnHandshake=this.server.options.batchOnHandshake,this.batchOnHandshakeDuration=this.server.options.batchOnHandshakeDuration,this.batchInterval=this.server.options.batchInterval,this._batchBuffer=[],this._batchingIntervalId=null,this._cid=1,this._callbackMap={},this.channelSubscriptions={},this.channelSubscriptionsCount=0,this._on("error",async a=>{this.emitError(a)}),this._on("close",async(a,o)=>{let u=o&&o.toString();this._destroy(a,u)});let n;this.protocolVersion===1?(n="#2",this._sendPing=()=>{this.state!==m.CLOSED&&this.send("#1")}):(n="",this._sendPing=()=>{this.state!==m.CLOSED&&this.send("")}),this.server.pingTimeoutDisabled||(this._pingIntervalTicker=setInterval(()=>{this._sendPing()},this.server.pingInterval)),this._resetPongTimeout(),this._handshakeTimeoutRef=setTimeout(()=>{this._handleHandshakeTimeout()},this.server.handshakeTimeout),this.server.pendingClients[this.id]=this,this.server.pendingClientsCount++,this._handleInboundMessageStream(n),this._handleOutboundPacketStream(),this._on("message",async(a,o)=>{let u=o?a:a.toString();if(this.inboundReceivedMessageCount++,u===n&&this._resetPongTimeout(),this.server.hasMiddleware(S.MIDDLEWARE_INBOUND_RAW)){let h=new l;h.socket=this,h.type=l.MESSAGE,h.data=u;try{let{data:d}=await this.server.processMiddlewareAction(this.middlewareInboundRawStream,h,this);u=d}catch{this.inboundProcessedMessageCount++;return}}this.inboundMessageStream.write(u),this.emit("message",{message:u})})}getBackpressure(){return Math.max(this.getInboundBackpressure(),this.getOutboundBackpressure(),this.getAllListenersBackpressure(),this.getAllReceiversBackpressure(),this.getAllProceduresBackpressure())}getInboundBackpressure(){return this.inboundReceivedMessageCount-this.inboundProcessedMessageCount}getOutboundBackpressure(){return this.outboundPreparedMessageCount-this.outboundSentMessageCount}receiver(e){return this._receiverDemux.stream(e)}closeReceiver(e){this._receiverDemux.close(e)}closeAllReceivers(){this._receiverDemux.closeAll()}killReceiver(e){this._receiverDemux.kill(e)}killAllReceivers(){this._receiverDemux.killAll()}killReceiverConsumer(e){this._receiverDemux.killConsumer(e)}getReceiverConsumerStats(e){return this._receiverDemux.getConsumerStats(e)}getReceiverConsumerStatsList(e){return this._receiverDemux.getConsumerStatsList(e)}getAllReceiversConsumerStatsList(){return this._receiverDemux.getConsumerStatsListAll()}getReceiverBackpressure(e){return this._receiverDemux.getBackpressure(e)}getAllReceiversBackpressure(){return this._receiverDemux.getBackpressureAll()}getReceiverConsumerBackpressure(e){return this._receiverDemux.getConsumerBackpressure(e)}hasReceiverConsumer(e,t){return this._receiverDemux.hasConsumer(e,t)}hasAnyReceiverConsumer(e){return this._receiverDemux.hasConsumerAll(e)}procedure(e){return this._procedureDemux.stream(e)}closeProcedure(e){this._procedureDemux.close(e)}closeAllProcedures(){this._procedureDemux.closeAll()}killProcedure(e){this._procedureDemux.kill(e)}killAllProcedures(){this._procedureDemux.killAll()}killProcedureConsumer(e){this._procedureDemux.killConsumer(e)}getProcedureConsumerStats(e){return this._procedureDemux.getConsumerStats(e)}getProcedureConsumerStatsList(e){return this._procedureDemux.getConsumerStatsList(e)}getAllProceduresConsumerStatsList(){return this._procedureDemux.getConsumerStatsListAll()}getProcedureBackpressure(e){return this._procedureDemux.getBackpressure(e)}getAllProceduresBackpressure(){return this._procedureDemux.getBackpressureAll()}getProcedureConsumerBackpressure(e){return this._procedureDemux.getConsumerBackpressure(e)}hasProcedureConsumer(e,t){return this._procedureDemux.hasConsumer(e,t)}hasAnyProcedureConsumer(e){return this._procedureDemux.hasConsumerAll(e)}emit(e,t){return super.emit(e,t)}getState(){return this.state}getBytesReceived(){return this.socket.bytesReceived}emitError(e){this.emit("error",{error:e}),this.server.emitWarning(e)}closeAllMiddlewares(){this.middlewareHandshakeStream.close(),this.middlewareInboundRawStream.close(),this.middlewareInboundStream.close(),this.middlewareOutboundStream.close()}closeInput(){this.inboundMessageStream.close()}closeOutput(){this.outboundPacketStream.close()}closeIO(){this.closeInput(),this.closeOutput()}closeAllStreams(){this.closeAllMiddlewares(),this.closeIO(),this.closeAllReceivers(),this.closeAllProcedures(),this.closeAllListeners()}killAllMiddlewares(){this.middlewareHandshakeStream.kill(),this.middlewareInboundRawStream.kill(),this.middlewareInboundStream.kill(),this.middlewareOutboundStream.kill()}killInput(){this.inboundMessageStream.kill()}killOutput(){this.outboundPacketStream.kill()}killIO(){this.killInput(),this.killOutput()}killAllStreams(){this.killAllMiddlewares(),this.killIO(),this.killAllReceivers(),this.killAllProcedures(),this.killAllListeners()}async disconnect(e,t){if(e=e||1e3,typeof e!="number"){let r=new C("If specified, the code argument must be a number");this.emitError(r)}this.state!==m.CLOSED&&(await this._destroy(e,t),this.socket.close(e,t))}terminate(){this.server.options.isNode?this.socket.terminate():this.disconnect()}send(e,t){this.server.options.isNode?this.socket.send(e,t,r=>{r&&(this.emitError(r),this._destroy(1006,r.toString()))}):this.socket.send(e)}decode(e){return this.server.codec.decode(e)}encode(e){return this.server.codec.encode(e)}startBatch(){this.isBufferingBatch=!0,this._batchBuffer=[]}flushBatch(){if(this.isBufferingBatch=!1,!this._batchBuffer.length)return;let e=this.serializeObject(this._batchBuffer);this._batchBuffer=[],this.send(e)}cancelBatch(){this.isBufferingBatch=!1,this._batchBuffer=[]}startBatching(){this.isBatching=!0,this._startBatching()}stopBatching(){this.isBatching=!1,this._stopBatching()}cancelBatching(){this.isBatching=!1,this._cancelBatching()}serializeObject(e){let t;try{t=this.encode(e)}catch(r){return this.emitError(r),null}return t}sendObject(e){if(this.isBufferingBatch){this._batchBuffer.push(e);return}let t=this.serializeObject(e);t!=null&&this.send(t)}async transmit(e,t,r){if(this.state!==m.OPEN){let s=new x(`Socket transmit "${e}" was aborted due to a bad connection`,"connectAbort");this.emitError(s);return}this._transmit(e,t,r)}async invoke(e,t,r){if(this.state!==m.OPEN){let s=new x(`Socket invoke "${e}" was aborted due to a bad connection`,"connectAbort");throw this.emitError(s),s}return this.cloneData&&(t=G(t)),this.outboundPreparedMessageCount++,new Promise((s,n)=>{this.outboundPacketStream.write({event:e,data:t,options:r,resolve:s,reject:n})})}triggerAuthenticationEvents(e){if(e!==m.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){if(this.state===this.CONNECTING){let h=new p("Cannot call setAuthToken before completing the handshake");throw this.emitError(h),h}let r=G(e),s=this.authState;if(this.authState=this.AUTHENTICATED,t==null)t={};else if(t={...t},t.algorithm!=null){delete t.algorithm;let h=new C("Cannot change auth token algorithm at runtime - It must be specified as a config option on launch");this.emitError(h)}t.mutatePayload=!0;let n=t.rejectOnFailedDelivery;delete t.rejectOnFailedDelivery;let a=this.server.defaultSignatureOptions,o;t.expiresIn==null?o=a.expiresIn:o=t.expiresIn,r?r.exp==null?t.expiresIn=o:delete t.expiresIn:t.expiresIn=o,a.algorithm!=null&&(t.algorithm=a.algorithm),this.authToken=r;let u;try{u=await this.server.auth.signToken(r,this.server.signatureKey,t)}catch(h){throw this.emitError(h),this._destroy(4002,h.toString()),this.socket.close(4002),h}this.authToken===r&&(this.signedAuthToken=u,this.emit("authTokenSigned",{signedAuthToken:u})),this.triggerAuthenticationEvents(s);let c={token:u};if(n){try{await this.invoke("#setAuthToken",c)}catch(h){let d=new R(`Failed to deliver auth token to client - ${h}`);throw this.emitError(d),d}return}this.transmit("#setAuthToken",c)}getAuthToken(){return this.authToken}deauthenticateSelf(){let e=this.authState,t=this.authToken;if(this.signedAuthToken=null,this.authToken=null,this.authState=m.UNAUTHENTICATED,e!==m.UNAUTHENTICATED){let r={oldAuthState:e,newAuthState:this.authState,authToken:this.authToken};this.emit("authStateChange",r),this.server.emit("authenticationStateChange",{socket:this,...r})}this.emit("deauthenticate",{oldAuthToken:t}),this.server.emit("deauthentication",{socket:this,oldAuthToken:t})}async deauthenticate(e){if(this.deauthenticateSelf(),e&&e.rejectOnFailedDelivery){try{await this.invoke("#removeAuthToken")}catch(t){if(this.emitError(t),e&&e.rejectOnFailedDelivery)throw t}return}this._transmit("#removeAuthToken")}kickOut(e,t){let r=e;return r||(r=Object.keys(this.channelSubscriptions)),Array.isArray(r)||(r=[e]),Promise.all(r.map(s=>(this.transmit("#kickOut",{channel:s,message:t}),this._unsubscribe(s))))}subscriptions(){return Object.keys(this.channelSubscriptions)}isSubscribed(e){return!!this.channelSubscriptions[e]}isAuthTokenExpired(e){if(e&&e.exp!=null){let t=Date.now(),r=e.exp*1e3;return t>r}return!1}async _processAuthentication({signedAuthToken:e,authTokenError:t,authToken:r}){if(t)throw this.signedAuthToken=null,this.authToken=null,this.authState=m.UNAUTHENTICATED,e!=null&&(this.emitError(t),t.isBadToken&&this._emitBadAuthTokenError(t,e)),t;this.signedAuthToken=e,this.authToken=r,this.authState=m.AUTHENTICATED;let s=new l;s.socket=this,s.type=l.AUTHENTICATE,s.signedAuthToken=this.signedAuthToken,s.authToken=this.authToken;try{await this.server.processMiddlewareAction(this.middlewareInboundStream,s,this)}catch(n){throw this.authToken=null,this.authState=m.UNAUTHENTICATED,n.isBadToken&&this._emitBadAuthTokenError(n,e),n}}async _validateAuthToken(e){let t=Object.assign({},this.server.defaultVerificationOptions,{socket:this,throwError:!0}),r;try{r=await this.server.auth.verifyToken(e,this.server.verificationKey,t)}catch(s){let n=this._processTokenError(s);return{signedAuthToken:e,authTokenError:n,authToken:null,authState:m.UNAUTHENTICATED}}return{signedAuthToken:e,authTokenError:null,authToken:r,authState:m.AUTHENTICATED}}_emitBadAuthTokenError(e,t){this.emit("badAuthToken",{authError:e,signedAuthToken:t}),this.server.emit("badSocketAuthToken",{socket:this,authError:e,signedAuthToken:t})}_processTokenError(e){if(e){if(e.message==="TokenExpiredError"){let r=new B(e.message,e.expiredAt);return r.isBadToken=!0,r}if(e.message==="ParseError"){let r=new M(e.message);return r.isBadToken=!0,r}if(e.message==="NotYetValid"){let r=new L(e.message,e.date);return r.isBadToken=!1,r}let t=new T(e.message);return t.isBadToken=!0,t}return null}_processAuthTokenExpiry(){let e=this.getAuthToken();return this.isAuthTokenExpired(e)?(this.deauthenticate(),new B("The socket auth token has expired",e.exp)):null}async _invoke(e,t,r){return r=r||{},new Promise((s,n)=>{let a={event:e,cid:this._nextCallId()};t!==void 0&&(a.data=t);let o=r.ackTimeout==null?this.server.ackTimeout:r.ackTimeout,u=setTimeout(()=>{let c=new U(`Event response for "${e}" timed out`);delete this._callbackMap[a.cid],n(c)},o);this._callbackMap[a.cid]={event:e,callback:(c,h)=>{if(c){n(c);return}s(h)},timeout:u},r.useCache&&r.stringifiedData!=null&&!this.isBufferingBatch?this.send(r.stringifiedData):this.sendObject(a)})}async _processTransmit(e,t,r){let s,n=r?r.useCache:!1,a={event:e,data:t},o=e==="#publish";if(o){let u=new l;u.socket=this,u.type=l.PUBLISH_OUT,t!==void 0&&(u.channel=t.channel,u.data=t.data),n=!this.server.hasMiddleware(this.middlewareOutboundStream.type);try{let{data:c,options:h}=await this.server.processMiddlewareAction(this.middlewareOutboundStream,u,this);s=c,n=h==null?n:h.useCache}catch{return}}else s=a.data;if(r&&n&&r.stringifiedData!=null&&!this.isBufferingBatch)this.send(r.stringifiedData);else{let u={event:e};o?(u.data=t||{},u.data.data=s):u.data=s,this.sendObject(u)}}async _transmit(e,t,r){this.cloneData&&t&&(t=G(t)),this.outboundPreparedMessageCount++,this.outboundPacketStream.write({event:e,data:t,options:r})}async _handleOutboundPacketStream(){for await(let e of this.outboundPacketStream){if(e.resolve){(async()=>{let t;try{t=await this._invoke(e.event,e.data,e.options)}catch(r){e.reject(r);return}e.resolve(t)})(),this.outboundSentMessageCount++;continue}await this._processTransmit(e.event,e.data,e.options),this.outboundSentMessageCount++}}_cancelBatching(){this._batchingIntervalId!=null&&clearInterval(this._batchingIntervalId),this._batchingIntervalId=null,this.cancelBatch()}_stopBatching(){this._batchingIntervalId!=null&&clearInterval(this._batchingIntervalId),this._batchingIntervalId=null,this.flushBatch()}_startBatching(){this._batchingIntervalId==null&&(this.startBatch(),this._batchingIntervalId=setInterval(()=>{this.flushBatch(),this.startBatch()},this.batchInterval))}async _destroy(e,t){if(clearInterval(this._pingIntervalTicker),clearTimeout(this._pingTimeoutTicker),this._cancelBatching(),this.state===m.CLOSED)this._abortAllPendingEventsDueToBadConnection("connectAbort");else{!t&&m.errorStatuses[e]&&(t=m.errorStatuses[e]);let r=this.state;if(this.state=m.CLOSED,r===m.CONNECTING?(this._abortAllPendingEventsDueToBadConnection("connectAbort"),this.emit("connectAbort",{code:e,reason:t}),this.server.emit("connectionAbort",{socket:this,code:e,reason:t})):(this._abortAllPendingEventsDueToBadConnection("disconnect"),this.emit("disconnect",{code:e,reason:t}),this.server.emit("disconnection",{socket:this,code:e,reason:t})),this.emit("close",{code:e,reason:t}),this.server.emit("closure",{socket:this,code:e,reason:t}),clearTimeout(this._handshakeTimeoutRef),!!this.server.clients[this.id]&&(delete this.server.clients[this.id],this.server.clientsCount--),!!this.server.pendingClients[this.id]&&(delete this.server.pendingClients[this.id],this.server.pendingClientsCount--),!m.ignoreStatuses[e]){let o;if(t){let c;if(typeof t=="object")try{c=JSON.stringify(t)}catch{c=t.toString()}else c=t;o=`Socket connection closed with status code ${e} and reason: ${c}`}else o=`Socket connection closed with status code ${e}`;let u=new H(m.errorStatuses[e]||o,e);this.emitError(u)}await this._unsubscribeFromAllChannels();let a=this.server.options.socketStreamCleanupMode;a==="kill"?(async()=>(await this.listener("end").once(),this.killAllStreams()))():a==="close"&&(async()=>(await this.listener("end").once(),this.closeAllStreams()))(),this.emit("end")}}_abortAllPendingEventsDueToBadConnection(e){Object.keys(this._callbackMap||{}).forEach(t=>{let r=this._callbackMap[t];delete this._callbackMap[t],clearTimeout(r.timeout),delete r.timeout;let s=`Event "${r.event}" was aborted due to a bad connection`,n=new x(s,e),a=r.callback;delete r.callback,a.call(r,n,r)})}async _handleInboundMessageStream(e){for await(let t of this.inboundMessageStream){if(this.inboundProcessedMessageCount++,t===e){if(this.server.strictHandshake&&this.state===m.CONNECTING){this._destroy(4009),this.socket.close(4009);continue}let n=this.getAuthToken();this.isAuthTokenExpired(n)&&this.deauthenticate();continue}let s;try{s=this.decode(t)}catch(n){n.name==="Error"&&(n.name="InvalidMessageError"),this.emitError(n),this.server.strictHandshake&&this.state===m.CONNECTING&&(this._destroy(4009),this.socket.close(4009));continue}if(Array.isArray(s)){let n=s.length;for(let a=0;a<n;a++)await this._processInboundPacket(s[a],t)}else await this._processInboundPacket(s,t)}}_handleHandshakeTimeout(){this.disconnect(4005)}async _processHandshakeRequest(e){let r=(e.data||{}).authToken||null;clearTimeout(this._handshakeTimeoutRef);let s=await this._validateAuthToken(r),n=new l;n.request=this.request,n.socket=this,n.type=l.HANDSHAKE_SC,n.data=s;try{await this.server.processMiddlewareAction(this.middlewareHandshakeStream,n)}catch(c){c.statusCode==null&&(c.statusCode=Pe),e.error(c),this.disconnect(c.statusCode);return}let a={id:this.id,pingTimeout:this.server.pingTimeout,isAuthenticated:!1},o={id:this.id,pingTimeout:this.server.pingTimeout,isAuthenticated:!1},u=this.authState;try{if(await this._processAuthentication(s),this.state===m.CLOSED)return}catch(c){r!=null&&(a.authError=K(c),o.authError=c,c.isBadToken&&this.deauthenticate())}a.isAuthenticated=!!this.authToken,o.isAuthenticated=a.isAuthenticated,this.server.pendingClients[this.id]&&(delete this.server.pendingClients[this.id],this.server.pendingClientsCount--),this.server.clients[this.id]=this,this.server.clientsCount++,this.state=m.OPEN,a.isAuthenticated&&(async()=>(await this.listener("connect").once(),this.triggerAuthenticationEvents(u)))(),e.end(a),this.batchOnHandshake&&this._startBatchOnHandshake(),this.emit("connect",o),this.server.emit("connection",{socket:this,...o}),this.middlewareHandshakeStream.close()}_startBatchOnHandshake(){this._startBatching(),setTimeout(()=>{this.isBatching||this._stopBatching()},this.batchOnHandshakeDuration)}async _processAuthenticateRequest(e){let t=e.data,r=this.authState,s=await this._validateAuthToken(t);try{await this._processAuthentication(s)}catch(n){if(n.isBadToken){this.deauthenticate(),e.error(n);return}e.end({isAuthenticated:!!this.authToken,authError:t==null?null:K(n)});return}this.triggerAuthenticationEvents(r),e.end({isAuthenticated:!!this.authToken,authError:null})}async _subscribeSocket(e,t){if(e===void 0||!t)throw new p(`Socket ${this.id} provided a malformated channel payload`);if(this.server.socketChannelLimit&&this.channelSubscriptionsCount>=this.server.socketChannelLimit)throw new p(`Socket ${this.id} tried to exceed the channel subscription limit of ${this.server.socketChannelLimit}`);if(typeof e!="string")throw new p(`Socket ${this.id} provided an invalid channel name`);this.channelSubscriptionsCount==null&&(this.channelSubscriptionsCount=0),this.channelSubscriptions[e]==null&&(this.channelSubscriptions[e]=!0,this.channelSubscriptionsCount++);try{await this.server.brokerEngine.subscribeSocket(this,e)}catch(r){throw delete this.channelSubscriptions[e],this.channelSubscriptionsCount--,r}this.emit("subscribe",{channel:e,subscriptionOptions:t}),this.server.emit("subscription",{socket:this,channel:e,subscriptionOptions:t})}async _processSubscribeRequest(e){let t=Object.assign({},e.data),r=t.channel;if(delete t.channel,this.state===m.OPEN){try{await this._subscribeSocket(r,t)}catch(n){let a=new D(`Failed to subscribe socket to the ${r} channel - ${n}`);this.emitError(a),e.error(a);return}e.end();return}let s=new p("Cannot subscribe socket to a channel before it has completed the handshake");this.emitError(s),e.error(s)}_unsubscribeFromAllChannels(){let e=Object.keys(this.channelSubscriptions);return Promise.all(e.map(t=>this._unsubscribe(t)))}async _unsubscribe(e){if(typeof e!="string")throw new p(`Socket ${this.id} tried to unsubscribe from an invalid channel name`);if(!this.channelSubscriptions[e])throw new p(`Socket ${this.id} tried to unsubscribe from a channel which it is not subscribed to`);try{await this.server.brokerEngine.unsubscribeSocket(this,e),delete this.channelSubscriptions[e],this.channelSubscriptionsCount!=null&&this.channelSubscriptionsCount--,this.emit("unsubscribe",{channel:e}),this.server.emit("unsubscription",{socket:this,channel:e})}catch(t){let r=new D(`Failed to unsubscribe socket from the ${e} channel - ${t}`);this.emitError(r)}}async _processUnsubscribePacket(e){let t=e.data;try{await this._unsubscribe(t)}catch(r){let s=new D(`Failed to unsubscribe socket from the ${t} channel - ${r}`);this.emitError(s)}}async _processUnsubscribeRequest(e){let t=e.data;try{await this._unsubscribe(t)}catch(r){let s=new D(`Failed to unsubscribe socket from the ${t} channel - ${r}`);this.emitError(s),e.error(s);return}e.end()}async _processInboundPublishPacket(e){let t=e.data||{};if(typeof t.channel!="string"){let r=new p(`Socket ${this.id} tried to invoke publish to an invalid "${t.channel}" channel`);this.emitError(r);return}try{await this.server.exchange.invokePublish(t.channel,t.data)}catch(r){this.emitError(r)}}async _processInboundPublishRequest(e){let t=e.data||{};if(typeof t.channel!="string"){let r=new p(`Socket ${this.id} tried to transmit publish to an invalid "${t.channel}" channel`);this.emitError(r),e.error(r);return}try{await this.server.exchange.invokePublish(t.channel,t.data)}catch(r){this.emitError(r),e.error(r);return}e.end()}async _processInboundPacket(e,t){if(e&&e.event!=null){let r=e.event,s=e.cid!=null;if(r==="#handshake"){let d=new O(this,e.cid,r,e.data);await this._processHandshakeRequest(d),this._procedureDemux.write(r,d);return}if(this.server.strictHandshake&&this.state===m.CONNECTING){this._destroy(4009),this.socket.close(4009);return}if(r==="#authenticate"){let d=new O(this,e.cid,r,e.data);await this._processAuthenticateRequest(d),this._procedureDemux.write(r,d);return}if(r==="#removeAuthToken"){this.deauthenticateSelf(),this._receiverDemux.write(r,e.data);return}let n=new l;n.socket=this;let a=this._processAuthTokenExpiry();a&&(n.authTokenExpiredError=a);let o=r==="#publish",u=r==="#subscribe",c=r==="#unsubscribe";if(o){if(!this.server.allowClientPublish){let d=new p("Client publish feature is disabled");this.emitError(d),s&&new O(this,e.cid,r,e.data).error(d);return}n.type=l.PUBLISH_IN,e.data&&(n.channel=e.data.channel,n.data=e.data.data)}else if(u)n.type=l.SUBSCRIBE,e.data&&(n.channel=e.data.channel,n.data=e.data.data);else if(c){if(s){let d=new O(this,e.cid,r,e.data);await this._processUnsubscribeRequest(d),this._procedureDemux.write(r,d);return}await this._processUnsubscribePacket(e),this._receiverDemux.write(r,e.data);return}else s?(n.type=l.INVOKE,n.procedure=e.event,e.data!==void 0&&(n.data=e.data)):(n.type=l.TRANSMIT,n.receiver=e.event,e.data!==void 0&&(n.data=e.data));let h;if(s){let d=new O(this,e.cid,r,e.data);try{let{data:F}=await this.server.processMiddlewareAction(this.middlewareInboundStream,n,this);h=F}catch(F){d.error(F);return}u?(d.data||(d.data={}),d.data.data=h,await this._processSubscribeRequest(d)):o?(d.data||(d.data={}),d.data.data=h,await this._processInboundPublishRequest(d)):d.data=h,this._procedureDemux.write(r,d);return}try{let{data:d}=await this.server.processMiddlewareAction(this.middlewareInboundStream,n,this);h=d}catch{return}o&&(e.data||(e.data={}),e.data.data=h,await this._processInboundPublishPacket(e)),this._receiverDemux.write(r,h);return}if(this.server.strictHandshake&&this.state===m.CONNECTING){this._destroy(4009),this.socket.close(4009);return}if(e&&e.rid!=null){let r=this._callbackMap[e.rid];if(r){clearTimeout(r.timeout),delete this._callbackMap[e.rid];let s=oe(e.error);r.callback(s,e.data)}return}this.emit("raw",{message:t})}_resetPongTimeout(){this.server.pingTimeoutDisabled||(clearTimeout(this._pingTimeoutTicker),this._pingTimeoutTicker=setTimeout(()=>{this._destroy(4001),this.socket.close(4001)},this.server.pingTimeout))}_nextCallId(){return this._cid++}_on(e,t){if(this.server.options.isNode)this.socket.on(e,t);else switch(e){case"message":this.socket.addEventListener(e,r=>t(r.data));break;case"close":case"error":this.socket.addEventListener(e,r=>t(r));break}}},v=m;b(v,"CONNECTING","connecting"),b(v,"OPEN","open"),b(v,"CLOSED","closed"),b(v,"AUTHENTICATED","authenticated"),b(v,"UNAUTHENTICATED","unauthenticated"),b(v,"ignoreStatuses",ae),b(v,"errorStatuses",ie);var Z="handshake",ee="inboundRaw",te="inbound",re="outbound";var g=class extends A{MIDDLEWARE_HANDSHAKE=g.MIDDLEWARE_HANDSHAKE;MIDDLEWARE_INBOUND_RAW=g.MIDDLEWARE_INBOUND_RAW;MIDDLEWARE_INBOUND=g.MIDDLEWARE_INBOUND;MIDDLEWARE_OUTBOUND=g.MIDDLEWARE_OUTBOUND;SYMBOL_MIDDLEWARE_HANDSHAKE_STREAM=g.SYMBOL_MIDDLEWARE_HANDSHAKE_STREAM;options;origins;ackTimeout;handshakeTimeout;pingInterval;pingTimeout;pingTimeoutDisabled;allowClientPublish;perMessageDeflate;httpServer;socketChannelLimit;protocolVersion;strictHandshake;brokerEngine;middlewareEmitFailures;isReady;signatureKey;verificationKey;defaultVerificationOptions;defaultSignatureOptions;exchange;clients;clientsCount;pendingClients;pendingClientsCount;auth;wsServer;codec;_middleware;_allowAllOrigins;_path;constructor(e){super();let t={brokerEngine:new X,wsEngine:"ws",wsEngineServerOptions:{},maxPayload:null,allowClientPublish:!0,ackTimeout:1e4,handshakeTimeout:1e4,strictHandshake:!0,pingTimeout:2e4,pingTimeoutDisabled:!1,pingInterval:8e3,origins:"*:*",path:"/topgunsocket/",protocolVersion:2,authDefaultExpiry:86400,batchOnHandshake:!1,batchOnHandshakeDuration:400,batchInterval:50,middlewareEmitFailures:!0,socketStreamCleanupMode:"kill",cloneData:!1};this.options=Object.assign(t,e),this._middleware={},this.origins=this.options.origins,this._allowAllOrigins=this.origins.indexOf("*:*")!==-1,this.ackTimeout=this.options.ackTimeout,this.handshakeTimeout=this.options.handshakeTimeout,this.pingInterval=this.options.pingInterval,this.pingTimeout=this.options.pingTimeout,this.pingTimeoutDisabled=this.options.pingTimeoutDisabled,this.allowClientPublish=this.options.allowClientPublish,this.perMessageDeflate=this.options.perMessageDeflate,this.httpServer=this.options.httpServer,this.socketChannelLimit=this.options.socketChannelLimit,this.protocolVersion=this.options.protocolVersion,this.strictHandshake=this.options.strictHandshake,this.brokerEngine=this.options.brokerEngine,this.middlewareEmitFailures=this.options.middlewareEmitFailures,this._path=t.path,(async()=>{for await(let{error:a}of this.brokerEngine.listener("error"))this.emitWarning(a)})(),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 this.options.wsEngine=="string"?require(t.wsEngine):t.wsEngine;if(!r||!r.Server)throw new _("The wsEngine option must be a path or module name which points to a valid WebSocket engine module with a compatible interface");let s=r.Server;if(this.options.authPrivateKey!=null||this.options.authPublicKey!=null){if(this.options.authPrivateKey==null)throw new _("The authPrivateKey option must be specified if authPublicKey is specified");if(this.options.authPublicKey==null)throw new _("The authPublicKey option must be specified if authPrivateKey is specified");this.signatureKey=this.options.authPrivateKey,this.verificationKey=this.options.authPublicKey}else this.options.authKey==null&&(this.options.authKey=he(32).toString()),this.signatureKey=this.options.authKey,this.verificationKey=this.options.authKey;this.defaultVerificationOptions={},this.options.authVerifyAlgorithm!=null?this.defaultVerificationOptions.algorithm=this.options.authVerifyAlgorithm:this.options.authAlgorithm!=null&&(this.defaultVerificationOptions.algorithm=this.options.authAlgorithm),this.defaultSignatureOptions={expiresIn:this.options.authDefaultExpiry},this.options.authAlgorithm!=null&&(this.defaultSignatureOptions.algorithm=this.options.authAlgorithm),this.options.authEngine?this.auth=this.options.authEngine:this.auth=new q,this.options.codecEngine?this.codec=this.options.codecEngine:this.codec=le,this.brokerEngine.setCodecEngine(this.codec),this.exchange=this.brokerEngine.exchange(),this.clients={},this.clientsCount=0,this.pendingClients={},this.pendingClientsCount=0;let n=this.options.wsEngineServerOptions||{};n.server=this.httpServer,n.verifyClient=this.verifyHandshake.bind(this),n.path==null&&this._path!=null&&(n.path=this._path),n.perMessageDeflate==null&&this.perMessageDeflate!=null&&(n.perMessageDeflate=this.perMessageDeflate),n.handleProtocols==null&&this.options.handleProtocols!=null&&(n.handleProtocols=this.options.handleProtocols),n.maxPayload==null&&t.maxPayload!=null&&(n.maxPayload=t.maxPayload),n.clientTracking==null&&(n.clientTracking=!1),Q()?(this.wsServer=new s(n),this.wsServer.on("error",this._handleServerError.bind(this)),this.wsServer.on("connection",this._handleSocketConnection.bind(this))):(this.wsServer=s,this.wsServer.addEventListener("close",this._closeOrErrorHandler.bind(this)),this.wsServer.addEventListener("error",this._closeOrErrorHandler.bind(this)))}setAuthEngine(e){this.auth=e}setCodecEngine(e){this.codec=e,this.brokerEngine.setCodecEngine(e)}emit(e,t){return super.emit(e,t)}listener(e){return super.listener(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(this.wsServer.close(s=>{if(s){r(s);return}t()}),!e)for(let s of Object.values(this.clients))s.terminate()})}getPath(){return this._path}generateId(){return me()}setMiddleware(e,t){if(e!==g.MIDDLEWARE_HANDSHAKE&&e!==g.MIDDLEWARE_INBOUND_RAW&&e!==g.MIDDLEWARE_INBOUND&&e!==g.MIDDLEWARE_OUTBOUND)throw new C(`Middleware type "${e}" is not supported`);if(this._middleware[e])throw new p(`Middleware type "${e}" has already been set`);this._middleware[e]=t}removeMiddleware(e){delete this._middleware[e]}hasMiddleware(e){return!!this._middleware[e]}async verifyHandshake(e,t){let r=e.req,s=e.origin;(s==="null"||s==null)&&(s="*");let n=!1;if(this._allowAllOrigins)n=!0;else try{let h=new URL(s),d=h.port||(h.protocol==="https:"?443:80);n=~this.origins.indexOf(h.hostname+":"+d)||~this.origins.indexOf(h.hostname+":*")||~this.origins.indexOf("*:"+d)}catch{}let a=new y;a.type=g.MIDDLEWARE_HANDSHAKE,r[g.SYMBOL_MIDDLEWARE_HANDSHAKE_STREAM]=a;let o=this._middleware[g.MIDDLEWARE_HANDSHAKE];o&&o(a);let u=new l;u.request=r,u.type=l.HANDSHAKE_WS;try{await this.processMiddlewareAction(a,u)}catch(h){a.close(),t(!1,401,typeof h=="string"?h:h.message);return}if(n){t(!0);return}let c=new P(`Failed to authorize socket handshake - Invalid origin: ${s}`);this.emitWarning(c),a.close(),t(!1,403,c.message)}async processMiddlewareAction(e,t,r){if(!this.hasMiddleware(e.type))return{data:t.data,options:null};e.write(t);let s,n=null;try{let a=await t.promise;a&&(s=a.data,n=a.options)}catch(a){let o;throw a?a.silent?o=new N(`The ${t.type} AGAction was blocked by ${e.type} middleware`,e.type):o=a:(a=new N(`The ${t.type} AGAction was blocked by ${e.type} middleware`,e.type),o=a),this.middlewareEmitFailures&&(r?r.emitError(a):this.emitWarning(a)),o}return s===void 0&&(s=t.data),{data:s,options:n}}_closeOrErrorHandler(e){e&&this.emitError(e),this.close()}_handleServerError(e){typeof e=="string"&&(e=new P(e)),this.emitError(e)}_handleSocketConnection(e,t){e.upgradeReq||(e.upgradeReq=t);let r=this.generateId(),s=new v(r,this,e,this.protocolVersion);s.exchange=this.exchange;let n=this._middleware[g.MIDDLEWARE_INBOUND_RAW];n&&n(s.middlewareInboundRawStream);let a=this._middleware[g.MIDDLEWARE_INBOUND];a&&a(s.middlewareInboundStream);let o=this._middleware[g.MIDDLEWARE_OUTBOUND];o&&o(s.middlewareOutboundStream),this.emit("handshake",{socket:s})}},S=g;b(S,"MIDDLEWARE_HANDSHAKE",Z),b(S,"MIDDLEWARE_INBOUND_RAW",ee),b(S,"MIDDLEWARE_INBOUND",te),b(S,"MIDDLEWARE_OUTBOUND",re),b(S,"SYMBOL_MIDDLEWARE_HANDSHAKE_STREAM",Symbol("handshakeStream"));function be(i,e){return e=e||{},e.httpServer=i,new S(e)}function Me(i,e,t){if(typeof e=="function"&&(t=e,e={}),Q()){let s=require("http").createServer(),n=be(s,e);return n.httpServer=s,s.listen(i,t),n}else return new S(e)}0&&(module.exports={MIDDLEWARE_HANDSHAKE,MIDDLEWARE_INBOUND,MIDDLEWARE_INBOUND_RAW,MIDDLEWARE_OUTBOUND,TGAction,TGServerSocket,TGServerSocketGateway,attach,listen});

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

export { a9 as WritableConsumableStream } from './channel-549bdfaa.js';
export { a9 as WritableConsumableStream } from './channel-eb665766.js';
import 'topgun-jsonwebtoken';
{
"name": "topgun-socket",
"version": "1.3.0",
"version": "1.3.1",
"description": "Scalable realtime pub/sub and RPC serverless framework",

@@ -5,0 +5,0 @@ "publishConfig": {

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

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