centrifuge
Advanced tools
Comparing version 3.2.0-beta.0 to 4.0.0
import { Subscription } from './subscription'; | ||
import { State, Options, ClientEvents, TypedEventEmitter, RpcResult, SubscriptionOptions, HistoryOptions, HistoryResult, PublishResult, PresenceResult, PresenceStatsResult, TransportEndpoint } from './types'; | ||
export declare class UnauthorizedError extends Error { | ||
constructor(message: any); | ||
} | ||
declare const Centrifuge_base: new () => TypedEventEmitter<ClientEvents>; | ||
@@ -31,3 +34,4 @@ /** Centrifuge is a Centrifuge/Centrifugo bidirectional client. */ | ||
private _callbacks; | ||
private _token?; | ||
private _token; | ||
private _data; | ||
private _dispatchPromise; | ||
@@ -54,2 +58,3 @@ private _serverPing; | ||
}; | ||
static UnauthorizedError: any; | ||
/** Constructs Centrifuge client. Call connect() method to start connecting. */ | ||
@@ -78,2 +83,3 @@ constructor(endpoint: string | Array<TransportEndpoint>, options?: Partial<Options>); | ||
disconnect(): void; | ||
setToken(token: string): void; | ||
/** send asynchronous data to a server (without any response from a server | ||
@@ -80,0 +86,0 @@ * expected, see rpc method if you need response). */ |
@@ -6,3 +6,3 @@ "use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.Centrifuge = void 0; | ||
exports.Centrifuge = exports.UnauthorizedError = void 0; | ||
const subscription_1 = require("./subscription"); | ||
@@ -21,5 +21,6 @@ const codes_1 = require("./codes"); | ||
protocol: 'json', | ||
token: null, | ||
token: '', | ||
getToken: null, | ||
data: null, | ||
getData: null, | ||
debug: false, | ||
@@ -41,2 +42,9 @@ name: 'js', | ||
}; | ||
class UnauthorizedError extends Error { | ||
constructor(message) { | ||
super(message); | ||
this.name = this.constructor.name; | ||
} | ||
} | ||
exports.UnauthorizedError = UnauthorizedError; | ||
/** Centrifuge is a Centrifuge/Centrifugo bidirectional client. */ | ||
@@ -77,3 +85,4 @@ class Centrifuge extends events_1.default { | ||
this._callbacks = {}; | ||
this._token = undefined; | ||
this._token = ''; | ||
this._data = null; | ||
this._dispatchPromise = Promise.resolve(); | ||
@@ -175,2 +184,5 @@ this._serverPing = 0; | ||
} | ||
setToken(token) { | ||
this._token = token; | ||
} | ||
/** send asynchronous data to a server (without any response from a server | ||
@@ -351,2 +363,5 @@ * expected, see rpc method if you need response). */ | ||
} | ||
if (this._config.data !== null) { | ||
this._data = this._config.data; | ||
} | ||
this._setFormat('json'); | ||
@@ -829,8 +844,20 @@ if (this._config.protocol === 'protobuf') { | ||
this._reconnecting = true; | ||
const needTokenRefresh = this._refreshRequired || (!this._token && this._config.getToken !== null); | ||
const self = this; | ||
const emptyToken = this._token === ''; | ||
const needTokenRefresh = this._refreshRequired || (emptyToken && this._config.getToken !== null); | ||
if (!needTokenRefresh) { | ||
this._initializeTransport(); | ||
if (this._config.getData) { | ||
this._config.getData().then(function (data) { | ||
if (!self._isConnecting()) { | ||
return; | ||
} | ||
self._data = data; | ||
self._initializeTransport(); | ||
}); | ||
} | ||
else { | ||
this._initializeTransport(); | ||
} | ||
return; | ||
} | ||
const self = this; | ||
this._getToken().then(function (token) { | ||
@@ -840,3 +867,3 @@ if (!self._isConnecting()) { | ||
} | ||
if (!token) { | ||
if (token == null || token == undefined) { | ||
self._failUnauthorized(); | ||
@@ -847,3 +874,14 @@ return; | ||
self._debug('connection token refreshed'); | ||
self._initializeTransport(); | ||
if (self._config.getData) { | ||
self._config.getData().then(function (data) { | ||
if (!self._isConnecting()) { | ||
return; | ||
} | ||
self._data = data; | ||
self._initializeTransport(); | ||
}); | ||
} | ||
else { | ||
self._initializeTransport(); | ||
} | ||
}).catch(function (e) { | ||
@@ -853,2 +891,6 @@ if (!self._isConnecting()) { | ||
} | ||
if (e instanceof UnauthorizedError) { | ||
self._failUnauthorized(); | ||
return; | ||
} | ||
self.emit('error', { | ||
@@ -912,4 +954,4 @@ 'type': 'connectToken', | ||
} | ||
if (this._config.data) { | ||
req.data = this._config.data; | ||
if (this._data) { | ||
req.data = this._data; | ||
} | ||
@@ -1110,2 +1152,3 @@ if (this._config.name) { | ||
this._transportClosed = true; | ||
this._nextTransportId(); | ||
} | ||
@@ -1123,3 +1166,10 @@ else { | ||
if (!this._config.getToken) { | ||
throw new Error('provide a function to get connection token'); | ||
this.emit('error', { | ||
type: 'configuration', | ||
error: { | ||
code: codes_1.errorCodes.badConfiguration, | ||
message: 'token expired but no getToken function set in the configuration' | ||
} | ||
}); | ||
throw new UnauthorizedError(''); | ||
} | ||
@@ -1163,2 +1213,9 @@ return this._config.getToken({}); | ||
}).catch(function (e) { | ||
if (!self._isConnected()) { | ||
return; | ||
} | ||
if (e instanceof UnauthorizedError) { | ||
self._failUnauthorized(); | ||
return; | ||
} | ||
self.emit('error', { | ||
@@ -1636,2 +1693,3 @@ type: 'refreshToken', | ||
Centrifuge.State = types_1.State; | ||
Centrifuge.UnauthorizedError = UnauthorizedError; | ||
//# sourceMappingURL=centrifuge.js.map |
@@ -13,2 +13,3 @@ export declare const errorCodes: { | ||
connectionClosed: number; | ||
badConfiguration: number; | ||
}; | ||
@@ -15,0 +16,0 @@ export declare const connectingCodes: { |
@@ -15,3 +15,4 @@ "use strict"; | ||
transportWriteError: 10, | ||
connectionClosed: 11 | ||
connectionClosed: 11, | ||
badConfiguration: 12, | ||
}; | ||
@@ -18,0 +19,0 @@ exports.connectingCodes = { |
@@ -50,10 +50,2 @@ { | ||
}, | ||
"method": { | ||
"type": "MethodType", | ||
"id": 2 | ||
}, | ||
"params": { | ||
"type": "bytes", | ||
"id": 3 | ||
}, | ||
"connect": { | ||
@@ -108,20 +100,12 @@ "type": "ConnectRequest", | ||
}, | ||
"nested": { | ||
"MethodType": { | ||
"values": { | ||
"CONNECT": 0, | ||
"SUBSCRIBE": 1, | ||
"UNSUBSCRIBE": 2, | ||
"PUBLISH": 3, | ||
"PRESENCE": 4, | ||
"PRESENCE_STATS": 5, | ||
"HISTORY": 6, | ||
"PING": 7, | ||
"SEND": 8, | ||
"RPC": 9, | ||
"REFRESH": 10, | ||
"SUB_REFRESH": 11 | ||
} | ||
} | ||
} | ||
"reserved": [ | ||
[ | ||
2, | ||
2 | ||
], | ||
[ | ||
3, | ||
3 | ||
] | ||
] | ||
}, | ||
@@ -138,6 +122,2 @@ "Reply": { | ||
}, | ||
"result": { | ||
"type": "bytes", | ||
"id": 3 | ||
}, | ||
"push": { | ||
@@ -191,10 +171,12 @@ "type": "Push", | ||
} | ||
} | ||
}, | ||
"reserved": [ | ||
[ | ||
3, | ||
3 | ||
] | ||
] | ||
}, | ||
"Push": { | ||
"fields": { | ||
"type": { | ||
"type": "PushType", | ||
"id": 1 | ||
}, | ||
"channel": { | ||
@@ -204,6 +186,2 @@ "type": "string", | ||
}, | ||
"data": { | ||
"type": "bytes", | ||
"id": 3 | ||
}, | ||
"pub": { | ||
@@ -246,17 +224,12 @@ "type": "Publication", | ||
}, | ||
"nested": { | ||
"PushType": { | ||
"values": { | ||
"PUBLICATION": 0, | ||
"JOIN": 1, | ||
"LEAVE": 2, | ||
"UNSUBSCRIBE": 3, | ||
"MESSAGE": 4, | ||
"SUBSCRIBE": 5, | ||
"CONNECT": 6, | ||
"DISCONNECT": 7, | ||
"REFRESH": 8 | ||
} | ||
} | ||
} | ||
"reserved": [ | ||
[ | ||
1, | ||
1 | ||
], | ||
[ | ||
3, | ||
3 | ||
] | ||
] | ||
}, | ||
@@ -302,3 +275,17 @@ "ClientInfo": { | ||
} | ||
} | ||
}, | ||
"reserved": [ | ||
[ | ||
1, | ||
1 | ||
], | ||
[ | ||
2, | ||
2 | ||
], | ||
[ | ||
3, | ||
3 | ||
] | ||
] | ||
}, | ||
@@ -331,3 +318,9 @@ "Join": { | ||
} | ||
} | ||
}, | ||
"reserved": [ | ||
[ | ||
1, | ||
1 | ||
] | ||
] | ||
}, | ||
@@ -356,3 +349,13 @@ "Subscribe": { | ||
} | ||
} | ||
}, | ||
"reserved": [ | ||
[ | ||
2, | ||
2 | ||
], | ||
[ | ||
3, | ||
3 | ||
] | ||
] | ||
}, | ||
@@ -576,3 +579,13 @@ "Message": { | ||
} | ||
} | ||
}, | ||
"reserved": [ | ||
[ | ||
4, | ||
4 | ||
], | ||
[ | ||
5, | ||
5 | ||
] | ||
] | ||
}, | ||
@@ -622,3 +635,13 @@ "SubscribeResult": { | ||
} | ||
} | ||
}, | ||
"reserved": [ | ||
[ | ||
4, | ||
4 | ||
], | ||
[ | ||
5, | ||
5 | ||
] | ||
] | ||
}, | ||
@@ -742,3 +765,25 @@ "SubRefreshRequest": { | ||
} | ||
} | ||
}, | ||
"reserved": [ | ||
[ | ||
2, | ||
2 | ||
], | ||
[ | ||
3, | ||
3 | ||
], | ||
[ | ||
4, | ||
4 | ||
], | ||
[ | ||
5, | ||
5 | ||
], | ||
[ | ||
6, | ||
6 | ||
] | ||
] | ||
}, | ||
@@ -745,0 +790,0 @@ "HistoryResult": { |
@@ -22,2 +22,3 @@ import { Centrifuge } from './centrifuge'; | ||
private _data; | ||
private _getData; | ||
private _recoverable; | ||
@@ -24,0 +25,0 @@ private _positioned; |
@@ -8,2 +8,3 @@ "use strict"; | ||
const events_1 = __importDefault(require("events")); | ||
const centrifuge_1 = require("./centrifuge"); | ||
const codes_1 = require("./codes"); | ||
@@ -22,5 +23,6 @@ const types_1 = require("./types"); | ||
this._centrifuge = centrifuge; | ||
this._token = null; | ||
this._token = ''; | ||
this._getToken = null; | ||
this._data = null; | ||
this._getData = null; | ||
this._recover = false; | ||
@@ -165,3 +167,3 @@ this._offset = null; | ||
_usesToken() { | ||
return this._token !== null || this._getToken !== null; | ||
return this._token !== '' || this._getToken !== null; | ||
} | ||
@@ -224,42 +226,64 @@ _clearSubscribingState() { | ||
} | ||
if (this._usesToken()) { | ||
// token channel, need to get token before sending subscribe. | ||
if (this._token) { | ||
return this._sendSubscribe(this._token, skipSending); | ||
const self = this; | ||
const getDataCtx = { | ||
channel: self.channel | ||
}; | ||
if (!this._usesToken() || this._token) { | ||
if (self._getData) { | ||
self._getData(getDataCtx).then(function (data) { | ||
if (!self._isSubscribing()) { | ||
return; | ||
} | ||
self._data = data; | ||
self._sendSubscribe(self._token, false); | ||
}); | ||
return null; | ||
} | ||
else { | ||
if (optimistic) { | ||
return null; | ||
} | ||
const self = this; | ||
this._getSubscriptionToken().then(function (token) { | ||
return self._sendSubscribe(self._token, skipSending); | ||
} | ||
} | ||
if (optimistic) { | ||
return null; | ||
} | ||
this._getSubscriptionToken().then(function (token) { | ||
if (!self._isSubscribing()) { | ||
return; | ||
} | ||
if (!token) { | ||
self._failUnauthorized(); | ||
return; | ||
} | ||
self._token = token; | ||
if (self._getData) { | ||
self._getData(getDataCtx).then(function (data) { | ||
if (!self._isSubscribing()) { | ||
return; | ||
} | ||
if (!token) { | ||
self._failUnauthorized(); | ||
return; | ||
} | ||
self._token = token; | ||
self._data = data; | ||
self._sendSubscribe(token, false); | ||
}).catch(function (e) { | ||
if (!self._isSubscribing()) { | ||
return; | ||
} | ||
self.emit('error', { | ||
type: 'subscribeToken', | ||
channel: self.channel, | ||
error: { | ||
code: codes_1.errorCodes.subscriptionSubscribeToken, | ||
message: e !== undefined ? e.toString() : '' | ||
} | ||
}); | ||
self._scheduleResubscribe(); | ||
}); | ||
return null; | ||
} | ||
} | ||
else { | ||
return this._sendSubscribe('', skipSending); | ||
} | ||
else { | ||
self._sendSubscribe(token, false); | ||
} | ||
}).catch(function (e) { | ||
if (!self._isSubscribing()) { | ||
return; | ||
} | ||
if (e instanceof centrifuge_1.UnauthorizedError) { | ||
self._failUnauthorized(); | ||
return; | ||
} | ||
self.emit('error', { | ||
type: 'subscribeToken', | ||
channel: self.channel, | ||
error: { | ||
code: codes_1.errorCodes.subscriptionSubscribeToken, | ||
message: e !== undefined ? e.toString() : '' | ||
} | ||
}); | ||
self._scheduleResubscribe(); | ||
}); | ||
return null; | ||
} | ||
@@ -410,3 +434,3 @@ _sendSubscribe(token, skipSending) { | ||
if (err.code === 109) { // Token expired error. | ||
this._token = null; | ||
this._token = ''; | ||
} | ||
@@ -444,2 +468,5 @@ const errContext = { | ||
} | ||
if (options.getData) { | ||
this._getData = options.getData; | ||
} | ||
if (options.minResubscribeDelay !== undefined) { | ||
@@ -501,3 +528,11 @@ this._minResubscribeDelay = options.minResubscribeDelay; | ||
if (getToken === null) { | ||
throw new Error('provide a function to get channel subscription token'); | ||
this.emit('error', { | ||
type: 'configuration', | ||
channel: this.channel, | ||
error: { | ||
code: codes_1.errorCodes.badConfiguration, | ||
message: 'provide a function to get channel subscription token' | ||
} | ||
}); | ||
throw new centrifuge_1.UnauthorizedError(''); | ||
} | ||
@@ -542,2 +577,6 @@ return getToken(ctx); | ||
}).catch(function (e) { | ||
if (e instanceof centrifuge_1.UnauthorizedError) { | ||
self._failUnauthorized(); | ||
return; | ||
} | ||
self.emit('error', { | ||
@@ -544,0 +583,0 @@ type: 'refreshToken', |
@@ -72,4 +72,4 @@ /** EventMap */ | ||
debug: boolean; | ||
/** allows setting connection token (JWT) */ | ||
token: string | null; | ||
/** allows setting initial connection token (JWT) */ | ||
token: string; | ||
/** allows setting function to get/refresh connection token */ | ||
@@ -79,2 +79,4 @@ getToken: null | ((ctx: ConnectionTokenContext) => Promise<string>); | ||
data: any | null; | ||
/** allows setting function to get/renew connection data */ | ||
getData: null | (() => Promise<any>); | ||
/** name of client - it's not a unique name of each connection, it's sth to identify | ||
@@ -238,2 +240,5 @@ * from where client connected */ | ||
} | ||
export interface SubscriptionDataContext { | ||
channel: string; | ||
} | ||
export interface PublishResult { | ||
@@ -263,4 +268,4 @@ } | ||
export interface SubscriptionOptions { | ||
/** allows setting subscription token (JWT) */ | ||
token: string | null; | ||
/** allows setting initial subscription token (JWT) */ | ||
token: string; | ||
/** allows setting function to get/refresh subscription token */ | ||
@@ -270,2 +275,4 @@ getToken: null | ((ctx: SubscriptionTokenContext) => Promise<string>); | ||
data: any | null; | ||
/** allows setting function to get/renew subscription data */ | ||
getData: null | ((ctx: SubscriptionDataContext) => Promise<any>); | ||
/** force recovery on first subscribe from a provided StreamPosition. */ | ||
@@ -272,0 +279,0 @@ since: StreamPosition | null; |
@@ -1,7 +0,7 @@ | ||
"use strict";(()=>{var de=Object.create;var q=Object.defineProperty;var pe=Object.getOwnPropertyDescriptor;var _e=Object.getOwnPropertyNames,Q=Object.getOwnPropertySymbols,be=Object.getPrototypeOf,X=Object.prototype.hasOwnProperty,me=Object.prototype.propertyIsEnumerable;var V=(o,s,e)=>s in o?q(o,s,{enumerable:!0,configurable:!0,writable:!0,value:e}):o[s]=e,F=(o,s)=>{for(var e in s||={})X.call(s,e)&&V(o,e,s[e]);if(Q)for(var e of Q(s))me.call(s,e)&&V(o,e,s[e]);return o};var ge=(o,s)=>()=>(s||o((s={exports:{}}).exports,s),s.exports);var ve=(o,s,e,t)=>{if(s&&typeof s=="object"||typeof s=="function")for(let n of _e(s))!X.call(o,n)&&n!==e&&q(o,n,{get:()=>s[n],enumerable:!(t=pe(s,n))||t.enumerable});return o};var Y=(o,s,e)=>(e=o!=null?de(be(o)):{},ve(s||!o||!o.__esModule?q(e,"default",{value:o,enumerable:!0}):e,o));var w=(o,s,e)=>new Promise((t,n)=>{var i=a=>{try{c(e.next(a))}catch(u){n(u)}},r=a=>{try{c(e.throw(a))}catch(u){n(u)}},c=a=>a.done?t(a.value):Promise.resolve(a.value).then(i,r);c((e=e.apply(o,s)).next())});var B=ge((Re,H)=>{"use strict";var S=typeof Reflect=="object"?Reflect:null,Z=S&&typeof S.apply=="function"?S.apply:function(s,e,t){return Function.prototype.apply.call(s,e,t)},k;S&&typeof S.ownKeys=="function"?k=S.ownKeys:Object.getOwnPropertySymbols?k=function(s){return Object.getOwnPropertyNames(s).concat(Object.getOwnPropertySymbols(s))}:k=function(s){return Object.getOwnPropertyNames(s)};function ye(o){console&&console.warn&&console.warn(o)}var ee=Number.isNaN||function(s){return s!==s};function h(){h.init.call(this)}H.exports=h;H.exports.once=Ce;h.EventEmitter=h;h.prototype._events=void 0;h.prototype._eventsCount=0;h.prototype._maxListeners=void 0;var $=10;function R(o){if(typeof o!="function")throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof o)}Object.defineProperty(h,"defaultMaxListeners",{enumerable:!0,get:function(){return $},set:function(o){if(typeof o!="number"||o<0||ee(o))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+o+".");$=o}});h.init=function(){(this._events===void 0||this._events===Object.getPrototypeOf(this)._events)&&(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0};h.prototype.setMaxListeners=function(s){if(typeof s!="number"||s<0||ee(s))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+s+".");return this._maxListeners=s,this};function te(o){return o._maxListeners===void 0?h.defaultMaxListeners:o._maxListeners}h.prototype.getMaxListeners=function(){return te(this)};h.prototype.emit=function(s){for(var e=[],t=1;t<arguments.length;t++)e.push(arguments[t]);var n=s==="error",i=this._events;if(i!==void 0)n=n&&i.error===void 0;else if(!n)return!1;if(n){var r;if(e.length>0&&(r=e[0]),r instanceof Error)throw r;var c=new Error("Unhandled error."+(r?" ("+r.message+")":""));throw c.context=r,c}var a=i[s];if(a===void 0)return!1;if(typeof a=="function")Z(a,this,e);else for(var u=a.length,m=oe(a,u),t=0;t<u;++t)Z(m[t],this,e);return!0};function ne(o,s,e,t){var n,i,r;if(R(e),i=o._events,i===void 0?(i=o._events=Object.create(null),o._eventsCount=0):(i.newListener!==void 0&&(o.emit("newListener",s,e.listener?e.listener:e),i=o._events),r=i[s]),r===void 0)r=i[s]=e,++o._eventsCount;else if(typeof r=="function"?r=i[s]=t?[e,r]:[r,e]:t?r.unshift(e):r.push(e),n=te(o),n>0&&r.length>n&&!r.warned){r.warned=!0;var c=new Error("Possible EventEmitter memory leak detected. "+r.length+" "+String(s)+" listeners added. Use emitter.setMaxListeners() to increase limit");c.name="MaxListenersExceededWarning",c.emitter=o,c.type=s,c.count=r.length,ye(c)}return o}h.prototype.addListener=function(s,e){return ne(this,s,e,!1)};h.prototype.on=h.prototype.addListener;h.prototype.prependListener=function(s,e){return ne(this,s,e,!0)};function Se(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,arguments.length===0?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function se(o,s,e){var t={fired:!1,wrapFn:void 0,target:o,type:s,listener:e},n=Se.bind(t);return n.listener=e,t.wrapFn=n,n}h.prototype.once=function(s,e){return R(e),this.on(s,se(this,s,e)),this};h.prototype.prependOnceListener=function(s,e){return R(e),this.prependListener(s,se(this,s,e)),this};h.prototype.removeListener=function(s,e){var t,n,i,r,c;if(R(e),n=this._events,n===void 0)return this;if(t=n[s],t===void 0)return this;if(t===e||t.listener===e)--this._eventsCount===0?this._events=Object.create(null):(delete n[s],n.removeListener&&this.emit("removeListener",s,t.listener||e));else if(typeof t!="function"){for(i=-1,r=t.length-1;r>=0;r--)if(t[r]===e||t[r].listener===e){c=t[r].listener,i=r;break}if(i<0)return this;i===0?t.shift():xe(t,i),t.length===1&&(n[s]=t[0]),n.removeListener!==void 0&&this.emit("removeListener",s,c||e)}return this};h.prototype.off=h.prototype.removeListener;h.prototype.removeAllListeners=function(s){var e,t,n;if(t=this._events,t===void 0)return this;if(t.removeListener===void 0)return arguments.length===0?(this._events=Object.create(null),this._eventsCount=0):t[s]!==void 0&&(--this._eventsCount===0?this._events=Object.create(null):delete t[s]),this;if(arguments.length===0){var i=Object.keys(t),r;for(n=0;n<i.length;++n)r=i[n],r!=="removeListener"&&this.removeAllListeners(r);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if(e=t[s],typeof e=="function")this.removeListener(s,e);else if(e!==void 0)for(n=e.length-1;n>=0;n--)this.removeListener(s,e[n]);return this};function ie(o,s,e){var t=o._events;if(t===void 0)return[];var n=t[s];return n===void 0?[]:typeof n=="function"?e?[n.listener||n]:[n]:e?Te(n):oe(n,n.length)}h.prototype.listeners=function(s){return ie(this,s,!0)};h.prototype.rawListeners=function(s){return ie(this,s,!1)};h.listenerCount=function(o,s){return typeof o.listenerCount=="function"?o.listenerCount(s):re.call(o,s)};h.prototype.listenerCount=re;function re(o){var s=this._events;if(s!==void 0){var e=s[o];if(typeof e=="function")return 1;if(e!==void 0)return e.length}return 0}h.prototype.eventNames=function(){return this._eventsCount>0?k(this._events):[]};function oe(o,s){for(var e=new Array(s),t=0;t<s;++t)e[t]=o[t];return e}function xe(o,s){for(;s+1<o.length;s++)o[s]=o[s+1];o.pop()}function Te(o){for(var s=new Array(o.length),e=0;e<s.length;++e)s[e]=o[e].listener||o[e];return s}function Ce(o,s){return new Promise(function(e,t){function n(r){o.removeListener(s,i),t(r)}function i(){typeof o.removeListener=="function"&&o.removeListener("error",n),e([].slice.call(arguments))}ce(o,s,i,{once:!0}),s!=="error"&&Ee(o,n,{once:!0})})}function Ee(o,s,e){typeof o.on=="function"&&ce(o,"error",s,e)}function ce(o,s,e,t){if(typeof o.on=="function")t.once?o.once(s,e):o.on(s,e);else if(typeof o.addEventListener=="function")o.addEventListener(s,function n(i){t.once&&o.removeEventListener(s,n),e(i)});else throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type '+typeof o)}});var he=Y(B());var f={timeout:1,transportClosed:2,clientDisconnected:3,clientClosed:4,clientConnectToken:5,clientRefreshToken:6,subscriptionUnsubscribed:7,subscriptionSubscribeToken:8,subscriptionRefreshToken:9,transportWriteError:10,connectionClosed:11},g={connectCalled:0,transportClosed:1,noPing:2,subscribeTimeout:3,unsubscribeError:4},O={disconnectCalled:0,unauthorized:1,badProtocol:2,messageSizeLimit:3},L={subscribeCalled:0,transportClosed:1},K={unsubscribeCalled:0,unauthorized:1,clientClosed:2};var j=(t=>(t.Disconnected="disconnected",t.Connecting="connecting",t.Connected="connected",t))(j||{}),I=(t=>(t.Unsubscribed="unsubscribed",t.Subscribing="subscribing",t.Subscribed="subscribed",t))(I||{});function ae(o,s){return o.lastIndexOf(s,0)===0}function G(o){return o==null?!1:typeof o=="function"}function ue(o,s){if(globalThis.console){let e=globalThis.console[o];G(e)&&e.apply(globalThis.console,s)}}function we(o,s){return Math.floor(Math.random()*(s-o+1)+o)}function x(o,s,e){o>31&&(o=31);let t=we(0,Math.min(e,s*Math.pow(2,o)));return Math.min(e,s+t)}function le(o){return"error"in o&&o.error!==null}function T(o){return Math.min(o*1e3,2147483647)}var D=class extends he.default{constructor(e,t,n){super();this._resubscribeTimeout=null;this._refreshTimeout=null;this.channel=t,this.state="unsubscribed",this._centrifuge=e,this._token=null,this._getToken=null,this._data=null,this._recover=!1,this._offset=null,this._epoch=null,this._recoverable=!1,this._positioned=!1,this._joinLeave=!1,this._minResubscribeDelay=500,this._maxResubscribeDelay=2e4,this._resubscribeTimeout=null,this._resubscribeAttempts=0,this._promises={},this._promiseId=0,this._inflight=!1,this._refreshTimeout=null,this._setOptions(n),this._centrifuge._debugEnabled?(this.on("state",i=>{this._centrifuge._debug("subscription state",t,i.oldState,"->",i.newState)}),this.on("error",i=>{this._centrifuge._debug("subscription error",t,i)})):this.on("error",function(){Function.prototype()})}ready(e){return this.state==="unsubscribed"?Promise.reject({code:f.subscriptionUnsubscribed,message:this.state}):this.state==="subscribed"?Promise.resolve():new Promise((t,n)=>{let i={resolve:t,reject:n};e&&(i.timeout=setTimeout(function(){n({code:f.timeout,message:"timeout"})},e)),this._promises[this._nextPromiseId()]=i})}subscribe(){this._isSubscribed()||(this._resubscribeAttempts=0,this._setSubscribing(L.subscribeCalled,"subscribe called"))}unsubscribe(){this._setUnsubscribed(K.unsubscribeCalled,"unsubscribe called",!0)}publish(e){let t=this;return this._methodCall().then(function(){return t._centrifuge.publish(t.channel,e)})}presence(){let e=this;return this._methodCall().then(function(){return e._centrifuge.presence(e.channel)})}presenceStats(){let e=this;return this._methodCall().then(function(){return e._centrifuge.presenceStats(e.channel)})}history(e){let t=this;return this._methodCall().then(function(){return t._centrifuge.history(t.channel,e)})}_methodCall(){return this._isSubscribed()?Promise.resolve():this._isUnsubscribed()?Promise.reject({code:f.subscriptionUnsubscribed,message:this.state}):new Promise((e,t)=>{let n=setTimeout(function(){t({code:f.timeout,message:"timeout"})},this._centrifuge._config.timeout);this._promises[this._nextPromiseId()]={timeout:n,resolve:e,reject:t}})}_nextPromiseId(){return++this._promiseId}_needRecover(){return this._recover===!0}_isUnsubscribed(){return this.state==="unsubscribed"}_isSubscribing(){return this.state==="subscribing"}_isSubscribed(){return this.state==="subscribed"}_setState(e){if(this.state!==e){let t=this.state;return this.state=e,this.emit("state",{newState:e,oldState:t,channel:this.channel}),!0}return!1}_usesToken(){return this._token!==null||this._getToken!==null}_clearSubscribingState(){this._resubscribeAttempts=0,this._clearResubscribeTimeout()}_clearSubscribedState(){this._clearRefreshTimeout()}_setSubscribed(e){if(!this._isSubscribing())return;this._clearSubscribingState(),e.recoverable&&(this._recover=!0,this._offset=e.offset||0,this._epoch=e.epoch||""),this._setState("subscribed");let t=this._centrifuge._getSubscribeContext(this.channel,e);this.emit("subscribed",t),this._resolvePromises();let n=e.publications;if(n&&n.length>0)for(let i in n)!n.hasOwnProperty(i)||this._handlePublication(n[i]);e.expires===!0&&(this._refreshTimeout=setTimeout(()=>this._refresh(),T(e.ttl)))}_setSubscribing(e,t){this._isSubscribing()||(this._isSubscribed()&&this._clearSubscribedState(),this._setState("subscribing")&&this.emit("subscribing",{channel:this.channel,code:e,reason:t}),this._subscribe(!1,!1))}_subscribe(e,t){if(this._centrifuge._debug("subscribing on",this.channel),this._centrifuge.state!=="connected"&&!e)return this._centrifuge._debug("delay subscribe on",this.channel,"till connected"),null;if(this._usesToken()){if(this._token)return this._sendSubscribe(this._token,t);{if(e)return null;let n=this;return this._getSubscriptionToken().then(function(i){if(!!n._isSubscribing()){if(!i){n._failUnauthorized();return}n._token=i,n._sendSubscribe(i,!1)}}).catch(function(i){!n._isSubscribing()||(n.emit("error",{type:"subscribeToken",channel:n.channel,error:{code:f.subscriptionSubscribeToken,message:i!==void 0?i.toString():""}}),n._scheduleResubscribe())}),null}}else return this._sendSubscribe("",t)}_sendSubscribe(e,t){let i={channel:this.channel};if(e&&(i.token=e),this._data&&(i.data=this._data),this._positioned&&(i.positioned=!0),this._recoverable&&(i.recoverable=!0),this._joinLeave&&(i.join_leave=!0),this._needRecover()){i.recover=!0;let c=this._getOffset();c&&(i.offset=c);let a=this._getEpoch();a&&(i.epoch=a)}let r={subscribe:i};return this._inflight=!0,this._centrifuge._call(r,t).then(c=>{this._inflight=!1;let a=c.reply.subscribe;this._handleSubscribeResponse(a),c.next&&c.next()},c=>{this._inflight=!1,this._handleSubscribeError(c.error),c.next&&c.next()}),r}_handleSubscribeError(e){if(!!this._isSubscribing()){if(e.code===f.timeout){this._centrifuge._disconnect(g.subscribeTimeout,"subscribe timeout",!0);return}this._subscribeError(e)}}_handleSubscribeResponse(e){!this._isSubscribing()||this._setSubscribed(e)}_setUnsubscribed(e,t,n){this._isUnsubscribed()||(this._isSubscribed()&&(n&&this._centrifuge._unsubscribe(this),this._clearSubscribedState()),this._isSubscribing()&&(this._inflight&&n&&this._centrifuge._unsubscribe(this),this._clearSubscribingState()),this._setState("unsubscribed")&&this.emit("unsubscribed",{channel:this.channel,code:e,reason:t}),this._rejectPromises({code:f.subscriptionUnsubscribed,message:this.state}))}_handlePublication(e){let t=this._centrifuge._getPublicationContext(this.channel,e);this.emit("publication",t),e.offset&&(this._offset=e.offset)}_handleJoin(e){let t=this._centrifuge._getJoinLeaveContext(e.info);this.emit("join",{channel:this.channel,info:t})}_handleLeave(e){let t=this._centrifuge._getJoinLeaveContext(e.info);this.emit("leave",{channel:this.channel,info:t})}_resolvePromises(){for(let e in this._promises)this._promises[e].timeout&&clearTimeout(this._promises[e].timeout),this._promises[e].resolve(),delete this._promises[e]}_rejectPromises(e){for(let t in this._promises)this._promises[t].timeout&&clearTimeout(this._promises[t].timeout),this._promises[t].reject(e),delete this._promises[t]}_scheduleResubscribe(){let e=this,t=this._getResubscribeDelay();this._resubscribeTimeout=setTimeout(function(){e._isSubscribing()&&e._subscribe(!1,!1)},t)}_subscribeError(e){if(!!this._isSubscribing())if(e.code<100||e.code===109||e.temporary===!0){e.code===109&&(this._token=null);let t={channel:this.channel,type:"subscribe",error:e};this._centrifuge.state==="connected"&&this.emit("error",t),this._scheduleResubscribe()}else this._setUnsubscribed(e.code,e.message,!1)}_getResubscribeDelay(){let e=x(this._resubscribeAttempts,this._minResubscribeDelay,this._maxResubscribeDelay);return this._resubscribeAttempts++,e}_setOptions(e){!e||(e.since&&(this._offset=e.since.offset,this._epoch=e.since.epoch,this._recover=!0),e.data&&(this._data=e.data),e.minResubscribeDelay!==void 0&&(this._minResubscribeDelay=e.minResubscribeDelay),e.maxResubscribeDelay!==void 0&&(this._maxResubscribeDelay=e.maxResubscribeDelay),e.token&&(this._token=e.token),e.getToken&&(this._getToken=e.getToken),e.positioned===!0&&(this._positioned=!0),e.recoverable===!0&&(this._recoverable=!0),e.joinLeave===!0&&(this._joinLeave=!0))}_getOffset(){let e=this._offset;return e!==null?e:0}_getEpoch(){let e=this._epoch;return e!==null?e:""}_clearRefreshTimeout(){this._refreshTimeout!==null&&(clearTimeout(this._refreshTimeout),this._refreshTimeout=null)}_clearResubscribeTimeout(){this._resubscribeTimeout!==null&&(clearTimeout(this._resubscribeTimeout),this._resubscribeTimeout=null)}_getSubscriptionToken(){this._centrifuge._debug("get subscription token for channel",this.channel);let e={channel:this.channel},t=this._getToken;if(t===null)throw new Error("provide a function to get channel subscription token");return t(e)}_refresh(){this._clearRefreshTimeout();let e=this;this._getSubscriptionToken().then(function(t){if(!e._isSubscribed())return;if(!t){e._failUnauthorized();return}e._token=t;let i={sub_refresh:{channel:e.channel,token:t}};e._centrifuge._call(i).then(r=>{let c=r.reply.sub_refresh;e._refreshResponse(c),r.next&&r.next()},r=>{e._refreshError(r.error),r.next&&r.next()})}).catch(function(t){e.emit("error",{type:"refreshToken",channel:e.channel,error:{code:f.subscriptionRefreshToken,message:t!==void 0?t.toString():""}}),e._refreshTimeout=setTimeout(()=>e._refresh(),e._getRefreshRetryDelay())})}_refreshResponse(e){!this._isSubscribed()||(this._centrifuge._debug("subscription token refreshed, channel",this.channel),this._clearRefreshTimeout(),e.expires===!0&&(this._refreshTimeout=setTimeout(()=>this._refresh(),T(e.ttl))))}_refreshError(e){!this._isSubscribed()||(e.code<100||e.temporary===!0?(this.emit("error",{type:"refresh",channel:this.channel,error:e}),this._refreshTimeout=setTimeout(()=>this._refresh(),this._getRefreshRetryDelay())):this._setUnsubscribed(e.code,e.message,!0))}_getRefreshRetryDelay(){return x(0,1e4,2e4)}_failUnauthorized(){this._setUnsubscribed(K.unauthorized,"unauthorized",!0)}};var U=class{constructor(s,e){this.endpoint=s,this.options=e,this._transport=null}name(){return"sockjs"}subName(){return"sockjs-"+this._transport.transport}emulation(){return!1}supported(){return this.options.sockjs!==null}initialize(s,e){this._transport=new this.options.sockjs(this.endpoint,null,this.options.sockjsOptions),this._transport.onopen=()=>{e.onOpen()},this._transport.onerror=t=>{e.onError(t)},this._transport.onclose=t=>{e.onClose(t)},this._transport.onmessage=t=>{e.onMessage(t.data)}}close(){this._transport.close()}send(s){this._transport.send(s)}};var P=class{constructor(s,e){this.endpoint=s,this.options=e,this._transport=null}name(){return"websocket"}subName(){return"websocket"}emulation(){return!1}supported(){return this.options.websocket!==void 0&&this.options.websocket!==null}initialize(s,e){let t="";s==="protobuf"&&(t="centrifuge-protobuf"),t!==""?this._transport=new this.options.websocket(this.endpoint,t):this._transport=new this.options.websocket(this.endpoint),s==="protobuf"&&(this._transport.binaryType="arraybuffer"),this._transport.onopen=()=>{e.onOpen()},this._transport.onerror=n=>{e.onError(n)},this._transport.onclose=n=>{e.onClose(n)},this._transport.onmessage=n=>{e.onMessage(n.data)}}close(){this._transport.close()}send(s){this._transport.send(s)}};var A=class{constructor(s,e){this.endpoint=s,this.options=e,this._abortController=null,this._utf8decoder=new TextDecoder,this._protocol="json"}name(){return"http_stream"}subName(){return"http_stream"}emulation(){return!0}_handleErrors(s){if(!s.ok)throw new Error(s.status);return s}_fetchEventTarget(s,e,t){let n=new EventTarget,i=s.options.fetch;return i(e,t).then(s._handleErrors).then(r=>{n.dispatchEvent(new Event("open"));let c="",a=0,u=new Uint8Array,m=r.body.getReader();return new s.options.readableStream({start(v){function y(){return m.read().then(({done:E,value:b})=>{if(E){n.dispatchEvent(new Event("close")),v.close();return}try{if(s._protocol==="json")for(c+=s._utf8decoder.decode(b);a<c.length;)if(c[a]===` | ||
`){let l=c.substring(0,a);n.dispatchEvent(new MessageEvent("message",{data:l})),c=c.substring(a+1),a=0}else++a;else{let l=new Uint8Array(u.length+b.length);for(l.set(u),l.set(b,u.length),u=l;;){let p=s.options.decoder.decodeReply(u);if(p.ok){let _=u.slice(0,p.pos);n.dispatchEvent(new MessageEvent("message",{data:_})),u=u.slice(p.pos);continue}break}}}catch(l){n.dispatchEvent(new Event("error",{detail:l})),n.dispatchEvent(new Event("close")),v.close();return}y()}).catch(function(E){n.dispatchEvent(new Event("error",{detail:E})),n.dispatchEvent(new Event("close")),v.close()})}return y()}})}).catch(r=>{n.dispatchEvent(new Event("error",{detail:r})),n.dispatchEvent(new Event("close"))}),n}supported(){return this.options.fetch!==null&&this.options.readableStream!==null&&typeof TextDecoder!="undefined"&&typeof AbortController!="undefined"&&typeof EventTarget!="undefined"&&typeof Event!="undefined"&&typeof MessageEvent!="undefined"&&typeof Error!="undefined"}initialize(s,e,t){this._protocol=s,this._abortController=new AbortController;let n,i;s==="json"?(n={Accept:"application/json","Content-Type":"application/json"},i=t):(n={Accept:"application/octet-stream","Content-Type":"application/octet-stream"},i=t);let r={method:"POST",headers:n,body:i,mode:"cors",credentials:"same-origin",cache:"no-cache",signal:this._abortController.signal},c=this._fetchEventTarget(this,this.endpoint,r);c.addEventListener("open",()=>{e.onOpen()}),c.addEventListener("error",a=>{this._abortController.abort(),e.onError(a)}),c.addEventListener("close",()=>{this._abortController.abort(),e.onClose({code:4,reason:"connection closed"})}),c.addEventListener("message",a=>{e.onMessage(a.data)})}close(){this._abortController.abort()}send(s,e,t){let n,i,r={session:e,node:t,data:s};this._protocol==="json"?(n={"Content-Type":"application/json"},i=JSON.stringify(r)):(n={"Content-Type":"application/octet-stream"},i=this.options.encoder.encodeEmulationRequest(r));let c=this.options.fetch,a={method:"POST",headers:n,body:i,mode:"cors",credentials:"same-origin",cache:"no-cache"};c(this.options.emulationEndpoint,a)}};var M=class{constructor(s,e){this.endpoint=s,this.options=e,this._protocol="json",this._transport=null,this._onClose=null}name(){return"sse"}subName(){return"sse"}emulation(){return!0}supported(){return this.options.eventsource!==null&&this.options.fetch!==null}initialize(s,e,t){let n;globalThis&&globalThis.document&&globalThis.document.baseURI?n=new URL(this.endpoint,globalThis.document.baseURI):n=new URL(this.endpoint),n.searchParams.append("cf_connect",t);let i={},r=new this.options.eventsource(n.toString(),i);this._transport=r;let c=this;r.onopen=function(){e.onOpen()},r.onerror=function(a){r.close(),e.onError(a),e.onClose({code:4,reason:"connection closed"})},r.onmessage=function(a){e.onMessage(a.data)},c._onClose=function(){e.onClose({code:4,reason:"connection closed"})}}close(){this._transport.close(),this._onClose!==null&&this._onClose()}send(s,e,t){let n={session:e,node:t,data:s},i={"Content-Type":"application/json"},r=JSON.stringify(n),c=this.options.fetch,a={method:"POST",headers:i,body:r,mode:"cors",credentials:"same-origin",cache:"no-cache"};c(this.options.emulationEndpoint,a)}};var N=class{constructor(s,e){this.endpoint=s,this.options=e,this._transport=null,this._stream=null,this._writer=null,this._utf8decoder=new TextDecoder,this._protocol="json"}name(){return"webtransport"}subName(){return"webtransport"}emulation(){return!1}supported(){return this.options.webtransport!==void 0&&this.options.webtransport!==null}initialize(s,e){return w(this,null,function*(){let t;globalThis&&globalThis.document&&globalThis.document.baseURI?t=new URL(this.endpoint,globalThis.document.baseURI):t=new URL(this.endpoint),s==="protobuf"&&t.searchParams.append("cf_protocol","protobuf"),this._protocol=s;let n=new EventTarget;this._transport=new this.options.webtransport(t.toString()),this._transport.closed.then(()=>{e.onClose({code:4,reason:"connection closed"})}).catch(()=>{e.onClose({code:4,reason:"connection closed"})});try{yield this._transport.ready}catch(r){this.close();return}let i;try{i=yield this._transport.createBidirectionalStream()}catch(r){this.close();return}this._stream=i,this._writer=this._stream.writable.getWriter(),n.addEventListener("close",()=>{e.onClose({code:4,reason:"connection closed"})}),n.addEventListener("message",r=>{e.onMessage(r.data)}),this._startReading(n),e.onOpen()})}_startReading(s){return w(this,null,function*(){let e=this._stream.readable.getReader(),t="",n=0,i=new Uint8Array;try{for(;;){let{done:r,value:c}=yield e.read();if(c.length>0)if(this._protocol==="json")for(t+=this._utf8decoder.decode(c);n<t.length;)if(t[n]===` | ||
`){let a=t.substring(0,n);s.dispatchEvent(new MessageEvent("message",{data:a})),t=t.substring(n+1),n=0}else++n;else{let a=new Uint8Array(i.length+c.length);for(a.set(i),a.set(c,i.length),i=a;;){let u=this.options.decoder.decodeReply(i);if(u.ok){let m=i.slice(0,u.pos);s.dispatchEvent(new MessageEvent("message",{data:m})),i=i.slice(u.pos);continue}break}}if(r)break}}catch(r){s.dispatchEvent(new Event("close"))}})}close(){return w(this,null,function*(){try{this._writer&&(yield this._writer.close()),this._transport.close()}catch(s){}})}send(s){return w(this,null,function*(){let e;this._protocol==="json"?e=new TextEncoder().encode(s+` | ||
"use strict";(()=>{var pe=Object.create;var F=Object.defineProperty;var _e=Object.getOwnPropertyDescriptor;var be=Object.getOwnPropertyNames,V=Object.getOwnPropertySymbols,me=Object.getPrototypeOf,Y=Object.prototype.hasOwnProperty,ge=Object.prototype.propertyIsEnumerable;var X=(o,s,e)=>s in o?F(o,s,{enumerable:!0,configurable:!0,writable:!0,value:e}):o[s]=e,H=(o,s)=>{for(var e in s||={})Y.call(s,e)&&X(o,e,s[e]);if(V)for(var e of V(s))ge.call(s,e)&&X(o,e,s[e]);return o};var ve=(o,s)=>()=>(s||o((s={exports:{}}).exports,s),s.exports);var ye=(o,s,e,t)=>{if(s&&typeof s=="object"||typeof s=="function")for(let n of be(s))!Y.call(o,n)&&n!==e&&F(o,n,{get:()=>s[n],enumerable:!(t=_e(s,n))||t.enumerable});return o};var Z=(o,s,e)=>(e=o!=null?pe(me(o)):{},ye(s||!o||!o.__esModule?F(e,"default",{value:o,enumerable:!0}):e,o));var P=(o,s,e)=>new Promise((t,n)=>{var i=c=>{try{a(e.next(c))}catch(u){n(u)}},r=c=>{try{a(e.throw(c))}catch(u){n(u)}},a=c=>c.done?t(c.value):Promise.resolve(c.value).then(i,r);a((e=e.apply(o,s)).next())});var K=ve((Oe,B)=>{"use strict";var T=typeof Reflect=="object"?Reflect:null,$=T&&typeof T.apply=="function"?T.apply:function(s,e,t){return Function.prototype.apply.call(s,e,t)},R;T&&typeof T.ownKeys=="function"?R=T.ownKeys:Object.getOwnPropertySymbols?R=function(s){return Object.getOwnPropertyNames(s).concat(Object.getOwnPropertySymbols(s))}:R=function(s){return Object.getOwnPropertyNames(s)};function Se(o){console&&console.warn&&console.warn(o)}var te=Number.isNaN||function(s){return s!==s};function h(){h.init.call(this)}B.exports=h;B.exports.once=Ee;h.EventEmitter=h;h.prototype._events=void 0;h.prototype._eventsCount=0;h.prototype._maxListeners=void 0;var ee=10;function O(o){if(typeof o!="function")throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof o)}Object.defineProperty(h,"defaultMaxListeners",{enumerable:!0,get:function(){return ee},set:function(o){if(typeof o!="number"||o<0||te(o))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+o+".");ee=o}});h.init=function(){(this._events===void 0||this._events===Object.getPrototypeOf(this)._events)&&(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0};h.prototype.setMaxListeners=function(s){if(typeof s!="number"||s<0||te(s))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+s+".");return this._maxListeners=s,this};function ne(o){return o._maxListeners===void 0?h.defaultMaxListeners:o._maxListeners}h.prototype.getMaxListeners=function(){return ne(this)};h.prototype.emit=function(s){for(var e=[],t=1;t<arguments.length;t++)e.push(arguments[t]);var n=s==="error",i=this._events;if(i!==void 0)n=n&&i.error===void 0;else if(!n)return!1;if(n){var r;if(e.length>0&&(r=e[0]),r instanceof Error)throw r;var a=new Error("Unhandled error."+(r?" ("+r.message+")":""));throw a.context=r,a}var c=i[s];if(c===void 0)return!1;if(typeof c=="function")$(c,this,e);else for(var u=c.length,g=ae(c,u),t=0;t<u;++t)$(g[t],this,e);return!0};function se(o,s,e,t){var n,i,r;if(O(e),i=o._events,i===void 0?(i=o._events=Object.create(null),o._eventsCount=0):(i.newListener!==void 0&&(o.emit("newListener",s,e.listener?e.listener:e),i=o._events),r=i[s]),r===void 0)r=i[s]=e,++o._eventsCount;else if(typeof r=="function"?r=i[s]=t?[e,r]:[r,e]:t?r.unshift(e):r.push(e),n=ne(o),n>0&&r.length>n&&!r.warned){r.warned=!0;var a=new Error("Possible EventEmitter memory leak detected. "+r.length+" "+String(s)+" listeners added. Use emitter.setMaxListeners() to increase limit");a.name="MaxListenersExceededWarning",a.emitter=o,a.type=s,a.count=r.length,Se(a)}return o}h.prototype.addListener=function(s,e){return se(this,s,e,!1)};h.prototype.on=h.prototype.addListener;h.prototype.prependListener=function(s,e){return se(this,s,e,!0)};function xe(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,arguments.length===0?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function ie(o,s,e){var t={fired:!1,wrapFn:void 0,target:o,type:s,listener:e},n=xe.bind(t);return n.listener=e,t.wrapFn=n,n}h.prototype.once=function(s,e){return O(e),this.on(s,ie(this,s,e)),this};h.prototype.prependOnceListener=function(s,e){return O(e),this.prependListener(s,ie(this,s,e)),this};h.prototype.removeListener=function(s,e){var t,n,i,r,a;if(O(e),n=this._events,n===void 0)return this;if(t=n[s],t===void 0)return this;if(t===e||t.listener===e)--this._eventsCount===0?this._events=Object.create(null):(delete n[s],n.removeListener&&this.emit("removeListener",s,t.listener||e));else if(typeof t!="function"){for(i=-1,r=t.length-1;r>=0;r--)if(t[r]===e||t[r].listener===e){a=t[r].listener,i=r;break}if(i<0)return this;i===0?t.shift():Te(t,i),t.length===1&&(n[s]=t[0]),n.removeListener!==void 0&&this.emit("removeListener",s,a||e)}return this};h.prototype.off=h.prototype.removeListener;h.prototype.removeAllListeners=function(s){var e,t,n;if(t=this._events,t===void 0)return this;if(t.removeListener===void 0)return arguments.length===0?(this._events=Object.create(null),this._eventsCount=0):t[s]!==void 0&&(--this._eventsCount===0?this._events=Object.create(null):delete t[s]),this;if(arguments.length===0){var i=Object.keys(t),r;for(n=0;n<i.length;++n)r=i[n],r!=="removeListener"&&this.removeAllListeners(r);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if(e=t[s],typeof e=="function")this.removeListener(s,e);else if(e!==void 0)for(n=e.length-1;n>=0;n--)this.removeListener(s,e[n]);return this};function re(o,s,e){var t=o._events;if(t===void 0)return[];var n=t[s];return n===void 0?[]:typeof n=="function"?e?[n.listener||n]:[n]:e?Ce(n):ae(n,n.length)}h.prototype.listeners=function(s){return re(this,s,!0)};h.prototype.rawListeners=function(s){return re(this,s,!1)};h.listenerCount=function(o,s){return typeof o.listenerCount=="function"?o.listenerCount(s):oe.call(o,s)};h.prototype.listenerCount=oe;function oe(o){var s=this._events;if(s!==void 0){var e=s[o];if(typeof e=="function")return 1;if(e!==void 0)return e.length}return 0}h.prototype.eventNames=function(){return this._eventsCount>0?R(this._events):[]};function ae(o,s){for(var e=new Array(s),t=0;t<s;++t)e[t]=o[t];return e}function Te(o,s){for(;s+1<o.length;s++)o[s]=o[s+1];o.pop()}function Ce(o){for(var s=new Array(o.length),e=0;e<s.length;++e)s[e]=o[e].listener||o[e];return s}function Ee(o,s){return new Promise(function(e,t){function n(r){o.removeListener(s,i),t(r)}function i(){typeof o.removeListener=="function"&&o.removeListener("error",n),e([].slice.call(arguments))}ce(o,s,i,{once:!0}),s!=="error"&&we(o,n,{once:!0})})}function we(o,s,e){typeof o.on=="function"&&ce(o,"error",s,e)}function ce(o,s,e,t){if(typeof o.on=="function")t.once?o.once(s,e):o.on(s,e);else if(typeof o.addEventListener=="function")o.addEventListener(s,function n(i){t.once&&o.removeEventListener(s,n),e(i)});else throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type '+typeof o)}});var fe=Z(K());var f={timeout:1,transportClosed:2,clientDisconnected:3,clientClosed:4,clientConnectToken:5,clientRefreshToken:6,subscriptionUnsubscribed:7,subscriptionSubscribeToken:8,subscriptionRefreshToken:9,transportWriteError:10,connectionClosed:11,badConfiguration:12},v={connectCalled:0,transportClosed:1,noPing:2,subscribeTimeout:3,unsubscribeError:4},L={disconnectCalled:0,unauthorized:1,badProtocol:2,messageSizeLimit:3},j={subscribeCalled:0,transportClosed:1},G={unsubscribeCalled:0,unauthorized:1,clientClosed:2};var D=(t=>(t.Disconnected="disconnected",t.Connecting="connecting",t.Connected="connected",t))(D||{}),I=(t=>(t.Unsubscribed="unsubscribed",t.Subscribing="subscribing",t.Subscribed="subscribed",t))(I||{});function ue(o,s){return o.lastIndexOf(s,0)===0}function Q(o){return o==null?!1:typeof o=="function"}function le(o,s){if(globalThis.console){let e=globalThis.console[o];Q(e)&&e.apply(globalThis.console,s)}}function Pe(o,s){return Math.floor(Math.random()*(s-o+1)+o)}function C(o,s,e){o>31&&(o=31);let t=Pe(0,Math.min(e,s*Math.pow(2,o)));return Math.min(e,s+t)}function he(o){return"error"in o&&o.error!==null}function E(o){return Math.min(o*1e3,2147483647)}var U=class extends fe.default{constructor(e,t,n){super();this._resubscribeTimeout=null;this._refreshTimeout=null;this.channel=t,this.state="unsubscribed",this._centrifuge=e,this._token="",this._getToken=null,this._data=null,this._getData=null,this._recover=!1,this._offset=null,this._epoch=null,this._recoverable=!1,this._positioned=!1,this._joinLeave=!1,this._minResubscribeDelay=500,this._maxResubscribeDelay=2e4,this._resubscribeTimeout=null,this._resubscribeAttempts=0,this._promises={},this._promiseId=0,this._inflight=!1,this._refreshTimeout=null,this._setOptions(n),this._centrifuge._debugEnabled?(this.on("state",i=>{this._centrifuge._debug("subscription state",t,i.oldState,"->",i.newState)}),this.on("error",i=>{this._centrifuge._debug("subscription error",t,i)})):this.on("error",function(){Function.prototype()})}ready(e){return this.state==="unsubscribed"?Promise.reject({code:f.subscriptionUnsubscribed,message:this.state}):this.state==="subscribed"?Promise.resolve():new Promise((t,n)=>{let i={resolve:t,reject:n};e&&(i.timeout=setTimeout(function(){n({code:f.timeout,message:"timeout"})},e)),this._promises[this._nextPromiseId()]=i})}subscribe(){this._isSubscribed()||(this._resubscribeAttempts=0,this._setSubscribing(j.subscribeCalled,"subscribe called"))}unsubscribe(){this._setUnsubscribed(G.unsubscribeCalled,"unsubscribe called",!0)}publish(e){let t=this;return this._methodCall().then(function(){return t._centrifuge.publish(t.channel,e)})}presence(){let e=this;return this._methodCall().then(function(){return e._centrifuge.presence(e.channel)})}presenceStats(){let e=this;return this._methodCall().then(function(){return e._centrifuge.presenceStats(e.channel)})}history(e){let t=this;return this._methodCall().then(function(){return t._centrifuge.history(t.channel,e)})}_methodCall(){return this._isSubscribed()?Promise.resolve():this._isUnsubscribed()?Promise.reject({code:f.subscriptionUnsubscribed,message:this.state}):new Promise((e,t)=>{let n=setTimeout(function(){t({code:f.timeout,message:"timeout"})},this._centrifuge._config.timeout);this._promises[this._nextPromiseId()]={timeout:n,resolve:e,reject:t}})}_nextPromiseId(){return++this._promiseId}_needRecover(){return this._recover===!0}_isUnsubscribed(){return this.state==="unsubscribed"}_isSubscribing(){return this.state==="subscribing"}_isSubscribed(){return this.state==="subscribed"}_setState(e){if(this.state!==e){let t=this.state;return this.state=e,this.emit("state",{newState:e,oldState:t,channel:this.channel}),!0}return!1}_usesToken(){return this._token!==""||this._getToken!==null}_clearSubscribingState(){this._resubscribeAttempts=0,this._clearResubscribeTimeout()}_clearSubscribedState(){this._clearRefreshTimeout()}_setSubscribed(e){if(!this._isSubscribing())return;this._clearSubscribingState(),e.recoverable&&(this._recover=!0,this._offset=e.offset||0,this._epoch=e.epoch||""),this._setState("subscribed");let t=this._centrifuge._getSubscribeContext(this.channel,e);this.emit("subscribed",t),this._resolvePromises();let n=e.publications;if(n&&n.length>0)for(let i in n)!n.hasOwnProperty(i)||this._handlePublication(n[i]);e.expires===!0&&(this._refreshTimeout=setTimeout(()=>this._refresh(),E(e.ttl)))}_setSubscribing(e,t){this._isSubscribing()||(this._isSubscribed()&&this._clearSubscribedState(),this._setState("subscribing")&&this.emit("subscribing",{channel:this.channel,code:e,reason:t}),this._subscribe(!1,!1))}_subscribe(e,t){if(this._centrifuge._debug("subscribing on",this.channel),this._centrifuge.state!=="connected"&&!e)return this._centrifuge._debug("delay subscribe on",this.channel,"till connected"),null;let n=this,i={channel:n.channel};return!this._usesToken()||this._token?n._getData?(n._getData(i).then(function(r){!n._isSubscribing()||(n._data=r,n._sendSubscribe(n._token,!1))}),null):n._sendSubscribe(n._token,t):(e||this._getSubscriptionToken().then(function(r){if(!!n._isSubscribing()){if(!r){n._failUnauthorized();return}n._token=r,n._getData?n._getData(i).then(function(a){!n._isSubscribing()||(n._data=a,n._sendSubscribe(r,!1))}):n._sendSubscribe(r,!1)}}).catch(function(r){if(!!n._isSubscribing()){if(r instanceof m){n._failUnauthorized();return}n.emit("error",{type:"subscribeToken",channel:n.channel,error:{code:f.subscriptionSubscribeToken,message:r!==void 0?r.toString():""}}),n._scheduleResubscribe()}}),null)}_sendSubscribe(e,t){let i={channel:this.channel};if(e&&(i.token=e),this._data&&(i.data=this._data),this._positioned&&(i.positioned=!0),this._recoverable&&(i.recoverable=!0),this._joinLeave&&(i.join_leave=!0),this._needRecover()){i.recover=!0;let a=this._getOffset();a&&(i.offset=a);let c=this._getEpoch();c&&(i.epoch=c)}let r={subscribe:i};return this._inflight=!0,this._centrifuge._call(r,t).then(a=>{this._inflight=!1;let c=a.reply.subscribe;this._handleSubscribeResponse(c),a.next&&a.next()},a=>{this._inflight=!1,this._handleSubscribeError(a.error),a.next&&a.next()}),r}_handleSubscribeError(e){if(!!this._isSubscribing()){if(e.code===f.timeout){this._centrifuge._disconnect(v.subscribeTimeout,"subscribe timeout",!0);return}this._subscribeError(e)}}_handleSubscribeResponse(e){!this._isSubscribing()||this._setSubscribed(e)}_setUnsubscribed(e,t,n){this._isUnsubscribed()||(this._isSubscribed()&&(n&&this._centrifuge._unsubscribe(this),this._clearSubscribedState()),this._isSubscribing()&&(this._inflight&&n&&this._centrifuge._unsubscribe(this),this._clearSubscribingState()),this._setState("unsubscribed")&&this.emit("unsubscribed",{channel:this.channel,code:e,reason:t}),this._rejectPromises({code:f.subscriptionUnsubscribed,message:this.state}))}_handlePublication(e){let t=this._centrifuge._getPublicationContext(this.channel,e);this.emit("publication",t),e.offset&&(this._offset=e.offset)}_handleJoin(e){let t=this._centrifuge._getJoinLeaveContext(e.info);this.emit("join",{channel:this.channel,info:t})}_handleLeave(e){let t=this._centrifuge._getJoinLeaveContext(e.info);this.emit("leave",{channel:this.channel,info:t})}_resolvePromises(){for(let e in this._promises)this._promises[e].timeout&&clearTimeout(this._promises[e].timeout),this._promises[e].resolve(),delete this._promises[e]}_rejectPromises(e){for(let t in this._promises)this._promises[t].timeout&&clearTimeout(this._promises[t].timeout),this._promises[t].reject(e),delete this._promises[t]}_scheduleResubscribe(){let e=this,t=this._getResubscribeDelay();this._resubscribeTimeout=setTimeout(function(){e._isSubscribing()&&e._subscribe(!1,!1)},t)}_subscribeError(e){if(!!this._isSubscribing())if(e.code<100||e.code===109||e.temporary===!0){e.code===109&&(this._token="");let t={channel:this.channel,type:"subscribe",error:e};this._centrifuge.state==="connected"&&this.emit("error",t),this._scheduleResubscribe()}else this._setUnsubscribed(e.code,e.message,!1)}_getResubscribeDelay(){let e=C(this._resubscribeAttempts,this._minResubscribeDelay,this._maxResubscribeDelay);return this._resubscribeAttempts++,e}_setOptions(e){!e||(e.since&&(this._offset=e.since.offset,this._epoch=e.since.epoch,this._recover=!0),e.data&&(this._data=e.data),e.getData&&(this._getData=e.getData),e.minResubscribeDelay!==void 0&&(this._minResubscribeDelay=e.minResubscribeDelay),e.maxResubscribeDelay!==void 0&&(this._maxResubscribeDelay=e.maxResubscribeDelay),e.token&&(this._token=e.token),e.getToken&&(this._getToken=e.getToken),e.positioned===!0&&(this._positioned=!0),e.recoverable===!0&&(this._recoverable=!0),e.joinLeave===!0&&(this._joinLeave=!0))}_getOffset(){let e=this._offset;return e!==null?e:0}_getEpoch(){let e=this._epoch;return e!==null?e:""}_clearRefreshTimeout(){this._refreshTimeout!==null&&(clearTimeout(this._refreshTimeout),this._refreshTimeout=null)}_clearResubscribeTimeout(){this._resubscribeTimeout!==null&&(clearTimeout(this._resubscribeTimeout),this._resubscribeTimeout=null)}_getSubscriptionToken(){this._centrifuge._debug("get subscription token for channel",this.channel);let e={channel:this.channel},t=this._getToken;if(t===null)throw this.emit("error",{type:"configuration",channel:this.channel,error:{code:f.badConfiguration,message:"provide a function to get channel subscription token"}}),new m("");return t(e)}_refresh(){this._clearRefreshTimeout();let e=this;this._getSubscriptionToken().then(function(t){if(!e._isSubscribed())return;if(!t){e._failUnauthorized();return}e._token=t;let i={sub_refresh:{channel:e.channel,token:t}};e._centrifuge._call(i).then(r=>{let a=r.reply.sub_refresh;e._refreshResponse(a),r.next&&r.next()},r=>{e._refreshError(r.error),r.next&&r.next()})}).catch(function(t){if(t instanceof m){e._failUnauthorized();return}e.emit("error",{type:"refreshToken",channel:e.channel,error:{code:f.subscriptionRefreshToken,message:t!==void 0?t.toString():""}}),e._refreshTimeout=setTimeout(()=>e._refresh(),e._getRefreshRetryDelay())})}_refreshResponse(e){!this._isSubscribed()||(this._centrifuge._debug("subscription token refreshed, channel",this.channel),this._clearRefreshTimeout(),e.expires===!0&&(this._refreshTimeout=setTimeout(()=>this._refresh(),E(e.ttl))))}_refreshError(e){!this._isSubscribed()||(e.code<100||e.temporary===!0?(this.emit("error",{type:"refresh",channel:this.channel,error:e}),this._refreshTimeout=setTimeout(()=>this._refresh(),this._getRefreshRetryDelay())):this._setUnsubscribed(e.code,e.message,!0))}_getRefreshRetryDelay(){return C(0,1e4,2e4)}_failUnauthorized(){this._setUnsubscribed(G.unauthorized,"unauthorized",!0)}};var A=class{constructor(s,e){this.endpoint=s,this.options=e,this._transport=null}name(){return"sockjs"}subName(){return"sockjs-"+this._transport.transport}emulation(){return!1}supported(){return this.options.sockjs!==null}initialize(s,e){this._transport=new this.options.sockjs(this.endpoint,null,this.options.sockjsOptions),this._transport.onopen=()=>{e.onOpen()},this._transport.onerror=t=>{e.onError(t)},this._transport.onclose=t=>{e.onClose(t)},this._transport.onmessage=t=>{e.onMessage(t.data)}}close(){this._transport.close()}send(s){this._transport.send(s)}};var k=class{constructor(s,e){this.endpoint=s,this.options=e,this._transport=null}name(){return"websocket"}subName(){return"websocket"}emulation(){return!1}supported(){return this.options.websocket!==void 0&&this.options.websocket!==null}initialize(s,e){let t="";s==="protobuf"&&(t="centrifuge-protobuf"),t!==""?this._transport=new this.options.websocket(this.endpoint,t):this._transport=new this.options.websocket(this.endpoint),s==="protobuf"&&(this._transport.binaryType="arraybuffer"),this._transport.onopen=()=>{e.onOpen()},this._transport.onerror=n=>{e.onError(n)},this._transport.onclose=n=>{e.onClose(n)},this._transport.onmessage=n=>{e.onMessage(n.data)}}close(){this._transport.close()}send(s){this._transport.send(s)}};var M=class{constructor(s,e){this.endpoint=s,this.options=e,this._abortController=null,this._utf8decoder=new TextDecoder,this._protocol="json"}name(){return"http_stream"}subName(){return"http_stream"}emulation(){return!0}_handleErrors(s){if(!s.ok)throw new Error(s.status);return s}_fetchEventTarget(s,e,t){let n=new EventTarget,i=s.options.fetch;return i(e,t).then(s._handleErrors).then(r=>{n.dispatchEvent(new Event("open"));let a="",c=0,u=new Uint8Array,g=r.body.getReader();return new s.options.readableStream({start(y){function x(){return g.read().then(({done:w,value:b})=>{if(w){n.dispatchEvent(new Event("close")),y.close();return}try{if(s._protocol==="json")for(a+=s._utf8decoder.decode(b);c<a.length;)if(a[c]===` | ||
`){let l=a.substring(0,c);n.dispatchEvent(new MessageEvent("message",{data:l})),a=a.substring(c+1),c=0}else++c;else{let l=new Uint8Array(u.length+b.length);for(l.set(u),l.set(b,u.length),u=l;;){let p=s.options.decoder.decodeReply(u);if(p.ok){let _=u.slice(0,p.pos);n.dispatchEvent(new MessageEvent("message",{data:_})),u=u.slice(p.pos);continue}break}}}catch(l){n.dispatchEvent(new Event("error",{detail:l})),n.dispatchEvent(new Event("close")),y.close();return}x()}).catch(function(w){n.dispatchEvent(new Event("error",{detail:w})),n.dispatchEvent(new Event("close")),y.close()})}return x()}})}).catch(r=>{n.dispatchEvent(new Event("error",{detail:r})),n.dispatchEvent(new Event("close"))}),n}supported(){return this.options.fetch!==null&&this.options.readableStream!==null&&typeof TextDecoder!="undefined"&&typeof AbortController!="undefined"&&typeof EventTarget!="undefined"&&typeof Event!="undefined"&&typeof MessageEvent!="undefined"&&typeof Error!="undefined"}initialize(s,e,t){this._protocol=s,this._abortController=new AbortController;let n,i;s==="json"?(n={Accept:"application/json","Content-Type":"application/json"},i=t):(n={Accept:"application/octet-stream","Content-Type":"application/octet-stream"},i=t);let r={method:"POST",headers:n,body:i,mode:"cors",credentials:"same-origin",cache:"no-cache",signal:this._abortController.signal},a=this._fetchEventTarget(this,this.endpoint,r);a.addEventListener("open",()=>{e.onOpen()}),a.addEventListener("error",c=>{this._abortController.abort(),e.onError(c)}),a.addEventListener("close",()=>{this._abortController.abort(),e.onClose({code:4,reason:"connection closed"})}),a.addEventListener("message",c=>{e.onMessage(c.data)})}close(){this._abortController.abort()}send(s,e,t){let n,i,r={session:e,node:t,data:s};this._protocol==="json"?(n={"Content-Type":"application/json"},i=JSON.stringify(r)):(n={"Content-Type":"application/octet-stream"},i=this.options.encoder.encodeEmulationRequest(r));let a=this.options.fetch,c={method:"POST",headers:n,body:i,mode:"cors",credentials:"same-origin",cache:"no-cache"};a(this.options.emulationEndpoint,c)}};var z=class{constructor(s,e){this.endpoint=s,this.options=e,this._protocol="json",this._transport=null,this._onClose=null}name(){return"sse"}subName(){return"sse"}emulation(){return!0}supported(){return this.options.eventsource!==null&&this.options.fetch!==null}initialize(s,e,t){let n;globalThis&&globalThis.document&&globalThis.document.baseURI?n=new URL(this.endpoint,globalThis.document.baseURI):n=new URL(this.endpoint),n.searchParams.append("cf_connect",t);let i={},r=new this.options.eventsource(n.toString(),i);this._transport=r;let a=this;r.onopen=function(){e.onOpen()},r.onerror=function(c){r.close(),e.onError(c),e.onClose({code:4,reason:"connection closed"})},r.onmessage=function(c){e.onMessage(c.data)},a._onClose=function(){e.onClose({code:4,reason:"connection closed"})}}close(){this._transport.close(),this._onClose!==null&&this._onClose()}send(s,e,t){let n={session:e,node:t,data:s},i={"Content-Type":"application/json"},r=JSON.stringify(n),a=this.options.fetch,c={method:"POST",headers:i,body:r,mode:"cors",credentials:"same-origin",cache:"no-cache"};a(this.options.emulationEndpoint,c)}};var N=class{constructor(s,e){this.endpoint=s,this.options=e,this._transport=null,this._stream=null,this._writer=null,this._utf8decoder=new TextDecoder,this._protocol="json"}name(){return"webtransport"}subName(){return"webtransport"}emulation(){return!1}supported(){return this.options.webtransport!==void 0&&this.options.webtransport!==null}initialize(s,e){return P(this,null,function*(){let t;globalThis&&globalThis.document&&globalThis.document.baseURI?t=new URL(this.endpoint,globalThis.document.baseURI):t=new URL(this.endpoint),s==="protobuf"&&t.searchParams.append("cf_protocol","protobuf"),this._protocol=s;let n=new EventTarget;this._transport=new this.options.webtransport(t.toString()),this._transport.closed.then(()=>{e.onClose({code:4,reason:"connection closed"})}).catch(()=>{e.onClose({code:4,reason:"connection closed"})});try{yield this._transport.ready}catch(r){this.close();return}let i;try{i=yield this._transport.createBidirectionalStream()}catch(r){this.close();return}this._stream=i,this._writer=this._stream.writable.getWriter(),n.addEventListener("close",()=>{e.onClose({code:4,reason:"connection closed"})}),n.addEventListener("message",r=>{e.onMessage(r.data)}),this._startReading(n),e.onOpen()})}_startReading(s){return P(this,null,function*(){let e=this._stream.readable.getReader(),t="",n=0,i=new Uint8Array;try{for(;;){let{done:r,value:a}=yield e.read();if(a.length>0)if(this._protocol==="json")for(t+=this._utf8decoder.decode(a);n<t.length;)if(t[n]===` | ||
`){let c=t.substring(0,n);s.dispatchEvent(new MessageEvent("message",{data:c})),t=t.substring(n+1),n=0}else++n;else{let c=new Uint8Array(i.length+a.length);for(c.set(i),c.set(a,i.length),i=c;;){let u=this.options.decoder.decodeReply(i);if(u.ok){let g=i.slice(0,u.pos);s.dispatchEvent(new MessageEvent("message",{data:g})),i=i.slice(u.pos);continue}break}}if(r)break}}catch(r){s.dispatchEvent(new Event("close"))}})}close(){return P(this,null,function*(){try{this._writer&&(yield this._writer.close()),this._transport.close()}catch(s){}})}send(s){return P(this,null,function*(){let e;this._protocol==="json"?e=new TextEncoder().encode(s+` | ||
`):e=s;try{yield this._writer.write(e)}catch(t){this.close()}})}};var W=class{encodeCommands(s){return s.map(e=>JSON.stringify(e)).join(` | ||
`)}},z=class{decodeReplies(s){return s.trim().split(` | ||
`).map(e=>JSON.parse(e))}};var fe=Y(B());var Pe={protocol:"json",token:null,getToken:null,data:null,debug:!1,name:"js",version:"",fetch:null,readableStream:null,websocket:null,eventsource:null,sockjs:null,sockjsOptions:{},emulationEndpoint:"/emulation",minReconnectDelay:500,maxReconnectDelay:2e4,timeout:5e3,maxServerPingDelay:1e4,networkEventTarget:null},C=class extends fe.default{constructor(e,t){super();this._reconnectTimeout=null;this._refreshTimeout=null;this._serverPingTimeout=null;this.state="disconnected",this._endpoint=e,this._emulation=!1,this._transports=[],this._currentTransportIndex=0,this._triedAllTransports=!1,this._transportWasOpen=!1,this._transport=null,this._transportId=0,this._deviceWentOffline=!1,this._transportClosed=!0,this._encoder=null,this._decoder=null,this._reconnecting=!1,this._reconnectTimeout=null,this._reconnectAttempts=0,this._client=null,this._session="",this._node="",this._subs={},this._serverSubs={},this._commandId=0,this._commands=[],this._batching=!1,this._refreshRequired=!1,this._refreshTimeout=null,this._callbacks={},this._token=void 0,this._dispatchPromise=Promise.resolve(),this._serverPing=0,this._serverPingTimeout=null,this._sendPong=!1,this._promises={},this._promiseId=0,this._debugEnabled=!1,this._networkEventsSet=!1,this._config=F(F({},Pe),t),this._configure(),this._debugEnabled?(this.on("state",n=>{this._debug("client state",n.oldState,"->",n.newState)}),this.on("error",n=>{this._debug("client error",n)})):this.on("error",function(){Function.prototype()})}newSubscription(e,t){if(this.getSubscription(e)!==null)throw new Error("Subscription to the channel "+e+" already exists");let n=new D(this,e,t);return this._subs[e]=n,n}getSubscription(e){return this._getSub(e)}removeSubscription(e){!e||(e.state!=="unsubscribed"&&e.unsubscribe(),this._removeSubscription(e))}subscriptions(){return this._subs}ready(e){return this.state==="disconnected"?Promise.reject({code:f.clientDisconnected,message:"client disconnected"}):this.state==="connected"?Promise.resolve():new Promise((t,n)=>{let i={resolve:t,reject:n};e&&(i.timeout=setTimeout(function(){n({code:f.timeout,message:"timeout"})},e)),this._promises[this._nextPromiseId()]=i})}connect(){if(this._isConnected()){this._debug("connect called when already connected");return}if(this._isConnecting()){this._debug("connect called when already connecting");return}this._debug("connect called"),this._reconnectAttempts=0,this._startConnecting()}disconnect(){this._disconnect(O.disconnectCalled,"disconnect called",!1)}send(e){let t={send:{data:e}},n=this;return this._methodCall().then(function(){return n._transportSendCommands([t])?Promise.resolve():Promise.reject(n._createErrorObject(f.transportWriteError,"transport write error"))})}rpc(e,t){let n={rpc:{method:e,data:t}},i=this;return this._methodCall().then(function(){return i._callPromise(n,function(r){return{data:r.rpc.data}})})}publish(e,t){let n={publish:{channel:e,data:t}},i=this;return this._methodCall().then(function(){return i._callPromise(n,function(){return{}})})}history(e,t){let n={history:this._getHistoryRequest(e,t)},i=this;return this._methodCall().then(function(){return i._callPromise(n,function(r){let c=r.history,a=[];if(c.publications)for(let u=0;u<c.publications.length;u++)a.push(i._getPublicationContext(e,c.publications[u]));return{publications:a,epoch:c.epoch||"",offset:c.offset||0}})})}presence(e){let t={presence:{channel:e}},n=this;return this._methodCall().then(function(){return n._callPromise(t,function(i){let r=i.presence.presence;for(let c in r)if(r.hasOwnProperty(c)){let a=r[c].conn_info,u=r[c].chan_info;a&&(r[c].connInfo=a),u&&(r[c].chanInfo=u)}return{clients:r}})})}presenceStats(e){let t={presence_stats:{channel:e}},n=this;return this._methodCall().then(function(){return n._callPromise(t,function(i){let r=i.presence_stats;return{numUsers:r.num_users,numClients:r.num_clients}})})}startBatching(){this._batching=!0}stopBatching(){let e=this;Promise.resolve().then(function(){Promise.resolve().then(function(){e._batching=!1,e._flush()})})}_debug(...e){!this._debugEnabled||ue("debug",e)}_setFormat(e){if(!this._formatOverride(e)){if(e==="protobuf")throw new Error("not implemented by JSON-only Centrifuge client, use client with Protobuf support");this._encoder=new W,this._decoder=new z}}_formatOverride(e){return!1}_configure(){if(!("Promise"in globalThis))throw new Error("Promise polyfill required");if(!this._endpoint)throw new Error("endpoint configuration required");if(this._config.protocol!=="json"&&this._config.protocol!=="protobuf")throw new Error("unsupported protocol "+this._config.protocol);if(this._config.token!==null&&(this._token=this._config.token),this._setFormat("json"),this._config.protocol==="protobuf"&&this._setFormat("protobuf"),(this._config.debug===!0||typeof localStorage!="undefined"&&localStorage.getItem("centrifuge.debug"))&&(this._debugEnabled=!0),this._debug("config",this._config),typeof this._endpoint!="string")if(typeof this._endpoint=="object"&&this._endpoint instanceof Array){this._transports=this._endpoint,this._emulation=!0;for(let e in this._transports){let t=this._transports[e];if(!t.endpoint||!t.transport)throw new Error("malformed transport configuration");let n=t.transport;if(["websocket","http_stream","sse","sockjs","webtransport"].indexOf(n)<0)throw new Error("unsupported transport name: "+n)}}else throw new Error("unsupported url configuration type: only string or array of objects are supported")}_setState(e){if(this.state!==e){this._reconnecting=!1;let t=this.state;return this.state=e,this.emit("state",{newState:e,oldState:t}),!0}return!1}_isDisconnected(){return this.state==="disconnected"}_isConnecting(){return this.state==="connecting"}_isConnected(){return this.state==="connected"}_nextCommandId(){return++this._commandId}_setNetworkEvents(){if(this._networkEventsSet)return;let e=null;this._config.networkEventTarget!==null?e=this._config.networkEventTarget:typeof globalThis.addEventListener!="undefined"&&(e=globalThis),e&&(e.addEventListener("offline",()=>{this._debug("offline event triggered"),(this.state==="connected"||this.state==="connecting")&&(this._disconnect(g.transportClosed,"transport closed",!0),this._deviceWentOffline=!0)}),e.addEventListener("online",()=>{this._debug("online event triggered"),this.state==="connecting"&&(this._deviceWentOffline&&!this._transportClosed&&(this._deviceWentOffline=!1,this._transportClosed=!0),this._clearReconnectTimeout(),this._startReconnecting())}),this._networkEventsSet=!0)}_getReconnectDelay(){let e=x(this._reconnectAttempts,this._config.minReconnectDelay,this._config.maxReconnectDelay);return this._reconnectAttempts+=1,e}_clearOutgoingRequests(){for(let e in this._callbacks)if(this._callbacks.hasOwnProperty(e)){let t=this._callbacks[e];clearTimeout(t.timeout);let n=t.errback;if(!n)continue;n({error:this._createErrorObject(f.connectionClosed,"connection closed")})}this._callbacks={}}_clearConnectedState(){this._client=null,this._clearServerPingTimeout(),this._clearRefreshTimeout();for(let e in this._subs){if(!this._subs.hasOwnProperty(e))continue;let t=this._subs[e];t.state==="subscribed"&&t._setSubscribing(L.transportClosed,"transport closed")}for(let e in this._serverSubs)this._serverSubs.hasOwnProperty(e)&&this.emit("subscribing",{channel:e})}_handleWriteError(e){for(let t of e){let n=t.id;if(!(n in this._callbacks))continue;let i=this._callbacks[n];clearTimeout(this._callbacks[n].timeout),delete this._callbacks[n];let r=i.errback;r({error:this._createErrorObject(f.transportWriteError,"transport write error")})}}_transportSendCommands(e){if(!e.length)return!0;if(!this._transport)return!1;try{this._transport.send(this._encoder.encodeCommands(e),this._session,this._node)}catch(t){return this._debug("error writing commands",t),this._handleWriteError(e),!1}return!0}_initializeTransport(){let e;this._config.websocket!==null?e=this._config.websocket:typeof globalThis.WebSocket!="function"&&typeof globalThis.WebSocket!="object"||(e=globalThis.WebSocket);let t=null;this._config.sockjs!==null?t=this._config.sockjs:typeof globalThis.SockJS!="undefined"&&(t=globalThis.SockJS);let n=null;this._config.eventsource!==null?n=this._config.eventsource:typeof globalThis.EventSource!="undefined"&&(n=globalThis.EventSource);let i=null;this._config.fetch!==null?i=this._config.fetch:typeof globalThis.fetch!="undefined"&&(i=globalThis.fetch);let r=null;if(this._config.readableStream!==null?r=this._config.readableStream:typeof globalThis.ReadableStream!="undefined"&&(r=globalThis.ReadableStream),this._emulation){this._currentTransportIndex>=this._transports.length&&(this._triedAllTransports=!0,this._currentTransportIndex=0);let l=0;for(;;){if(l>=this._transports.length)throw new Error("no supported transport found");let p=this._transports[this._currentTransportIndex],_=p.transport,d=p.endpoint;if(_==="websocket"){if(this._debug("trying websocket transport"),this._transport=new P(d,{websocket:e}),!this._transport.supported()){this._debug("websocket transport not available"),this._currentTransportIndex++,l++;continue}}else if(_==="webtransport"){if(this._debug("trying webtransport transport"),this._transport=new N(d,{webtransport:globalThis.WebTransport,decoder:this._decoder,encoder:this._encoder}),!this._transport.supported()){this._debug("webtransport transport not available"),this._currentTransportIndex++,l++;continue}}else if(_==="http_stream"){if(this._debug("trying http_stream transport"),this._transport=new A(d,{fetch:i,readableStream:r,emulationEndpoint:this._config.emulationEndpoint,decoder:this._decoder,encoder:this._encoder}),!this._transport.supported()){this._debug("http_stream transport not available"),this._currentTransportIndex++,l++;continue}}else if(_==="sse"){if(this._debug("trying sse transport"),this._transport=new M(d,{eventsource:n,fetch:i,emulationEndpoint:this._config.emulationEndpoint}),!this._transport.supported()){this._debug("sse transport not available"),this._currentTransportIndex++,l++;continue}}else if(_==="sockjs"){if(this._debug("trying sockjs"),this._transport=new U(d,{sockjs:t,sockjsOptions:this._config.sockjsOptions}),!this._transport.supported()){this._debug("sockjs transport not available"),this._currentTransportIndex++,l++;continue}}else throw new Error("unknown transport "+_);break}}else{if(ae(this._endpoint,"http"))throw new Error("Provide explicit transport endpoints configuration in case of using HTTP (i.e. using array of TransportEndpoint instead of a single string), or use ws(s):// scheme in an endpoint if you aimed using WebSocket transport");if(this._debug("client will use websocket"),this._transport=new P(this._endpoint,{websocket:e}),!this._transport.supported())throw new Error("WebSocket not available")}let c=this,a=this._transport,u=this._nextTransportId();c._debug("id of transport",u);let m=!1,v=!0;this._transport.name()==="sse"&&(v=!1);let y=[];if(this._transport.emulation()){let l=c._sendConnect(!0);if(y.push(l),v){let p=c._sendSubscribeCommands(!0,!0);for(let _ in p)y.push(p[_])}}this._setNetworkEvents();let E=this._encoder.encodeCommands(y);this._transportClosed=!1;let b;b=setTimeout(function(){a.close()},this._config.timeout),this._transport.initialize(this._config.protocol,{onOpen:function(){if(b&&(clearTimeout(b),b=null),c._transportId!=u){c._debug("open callback from non-actual transport"),a.close();return}m=!0,c._debug(a.subName(),"transport open"),c._transportWasOpen=!0,!a.emulation()&&(c.startBatching(),c._sendConnect(!1),v&&c._sendSubscribeCommands(!0,!1),c.stopBatching())},onError:function(l){if(c._transportId!=u){c._debug("error callback from non-actual transport");return}c._debug("transport level error",l)},onClose:function(l){if(b&&(clearTimeout(b),b=null),c._transportId!=u){c._debug("close callback from non-actual transport");return}c._debug(a.subName(),"transport closed"),c._transportClosed=!0;let p="connection closed",_=!0,d=0;if(l&&"code"in l&&l.code&&(d=l.code),l&&l.reason)try{let J=JSON.parse(l.reason);p=J.reason,_=J.reconnect}catch(J){p=l.reason,(d>=3500&&d<4e3||d>=4500&&d<5e3)&&(_=!1)}d<3e3?(d===1009?(d=O.messageSizeLimit,p="message size limit exceeded",_=!1):(d=g.transportClosed,p="transport closed"),c._emulation&&!c._transportWasOpen&&(c._currentTransportIndex++,c._currentTransportIndex>=c._transports.length&&(c._triedAllTransports=!0,c._currentTransportIndex=0))):c._transportWasOpen=!0,c._isConnecting()&&!m&&c.emit("error",{type:"transport",error:{code:f.transportClosed,message:"transport closed"},transport:a.name()}),c._reconnecting=!1,c._disconnect(d,p,_)},onMessage:function(l){c._dataReceived(l)}},E)}_sendConnect(e){let t=this._constructConnectCommand(),n=this;return this._call(t,e).then(i=>{let r=i.reply.connect;n._connectResponse(r),i.next&&i.next()},i=>{n._connectError(i.error),i.next&&i.next()}),t}_startReconnecting(){if(this._debug("start reconnecting"),!this._isConnecting()){this._debug("stop reconnecting: client not in connecting state");return}if(this._reconnecting){this._debug("reconnect already in progress, return from reconnect routine");return}if(this._transportClosed===!1){this._debug("waiting for transport close");return}if(this._reconnecting=!0,!(this._refreshRequired||!this._token&&this._config.getToken!==null)){this._initializeTransport();return}let t=this;this._getToken().then(function(n){if(!!t._isConnecting()){if(!n){t._failUnauthorized();return}t._token=n,t._debug("connection token refreshed"),t._initializeTransport()}}).catch(function(n){if(!t._isConnecting())return;t.emit("error",{type:"connectToken",error:{code:f.clientConnectToken,message:n!==void 0?n.toString():""}});let i=t._getReconnectDelay();t._debug("error on connection token refresh, reconnect after "+i+" milliseconds",n),t._reconnecting=!1,t._reconnectTimeout=setTimeout(()=>{t._startReconnecting()},i)})}_connectError(e){this.state==="connecting"&&(e.code===109&&(this._refreshRequired=!0),e.code<100||e.temporary===!0||e.code===109?(this.emit("error",{type:"connect",error:e}),this._debug("closing transport due to connect error"),this._reconnecting=!1,this._disconnect(e.code,e.message,!0)):this._disconnect(e.code,e.message,!1))}_scheduleReconnect(){if(!this._isConnecting())return;let e=!1;this._emulation&&!this._transportWasOpen&&!this._triedAllTransports&&(e=!0);let t=this._getReconnectDelay();e&&(t=0),this._debug("reconnect after "+t+" milliseconds"),this._reconnectTimeout=setTimeout(()=>{this._startReconnecting()},t)}_constructConnectCommand(){let e={};this._token&&(e.token=this._token),this._config.data&&(e.data=this._config.data),this._config.name&&(e.name=this._config.name),this._config.version&&(e.version=this._config.version);let t={},n=!1;for(let i in this._serverSubs)if(this._serverSubs.hasOwnProperty(i)&&this._serverSubs[i].recoverable){n=!0;let r={recover:!0};this._serverSubs[i].offset&&(r.offset=this._serverSubs[i].offset),this._serverSubs[i].epoch&&(r.epoch=this._serverSubs[i].epoch),t[i]=r}return n&&(e.subs=t),{connect:e}}_getHistoryRequest(e,t){let n={channel:e};return t!==void 0&&(t.since&&(n.since={offset:t.since.offset},t.since.epoch&&(n.since.epoch=t.since.epoch)),t.limit!==void 0&&(n.limit=t.limit),t.reverse===!0&&(n.reverse=!0)),n}_methodCall(){return this._isConnected()?Promise.resolve():new Promise((e,t)=>{let n=setTimeout(function(){t({code:f.timeout,message:"timeout"})},this._config.timeout);this._promises[this._nextPromiseId()]={timeout:n,resolve:e,reject:t}})}_callPromise(e,t){return new Promise((n,i)=>{this._call(e,!1).then(r=>{n(t(r.reply)),r.next&&r.next()},r=>{i(r.error),r.next&&r.next()})})}_dataReceived(e){this._serverPing>0&&this._waitServerPing();let t=this._decoder.decodeReplies(e);this._dispatchPromise=this._dispatchPromise.then(()=>{let n;this._dispatchPromise=new Promise(i=>{n=i}),this._dispatchSynchronized(t,n)})}_dispatchSynchronized(e,t){let n=Promise.resolve();for(let i in e)e.hasOwnProperty(i)&&(n=n.then(()=>this._dispatchReply(e[i])));n=n.then(()=>{t()})}_dispatchReply(e){let t,n=new Promise(r=>{t=r});if(e==null)return this._debug("dispatch: got undefined or null reply"),t(),n;let i=e.id;return i&&i>0?this._handleReply(e,t):e.push?this._handlePush(e.push,t):this._handleServerPing(t),n}_call(e,t){return new Promise((n,i)=>{e.id=this._nextCommandId(),this._registerCall(e.id,n,i),t||this._addCommand(e)})}_startConnecting(){this._debug("start connecting"),this._setState("connecting")&&this.emit("connecting",{code:g.connectCalled,reason:"connect called"}),this._client=null,this._startReconnecting()}_disconnect(e,t,n){if(this._isDisconnected())return;let i=this.state,r={code:e,reason:t},c=!1;if(n?c=this._setState("connecting"):(c=this._setState("disconnected"),this._rejectPromises({code:f.clientDisconnected,message:"disconnected"})),this._clearOutgoingRequests(),i==="connecting"&&this._clearReconnectTimeout(),i==="connected"&&this._clearConnectedState(),c&&(this._isConnecting()?this.emit("connecting",r):this.emit("disconnected",r)),this._transport){this._debug("closing existing transport");let a=this._transport;this._transport=null,a.close(),this._transportClosed=!0}else this._debug("no transport to close");this._scheduleReconnect()}_failUnauthorized(){this._disconnect(O.unauthorized,"unauthorized",!1)}_getToken(){if(this._debug("get connection token"),!this._config.getToken)throw new Error("provide a function to get connection token");return this._config.getToken({})}_refresh(){let e=this._client,t=this;this._getToken().then(function(n){if(e!==t._client)return;if(!n){t._failUnauthorized();return}if(t._token=n,t._debug("connection token refreshed"),!t._isConnected())return;let i={refresh:{token:t._token}};t._call(i,!1).then(r=>{let c=r.reply.refresh;t._refreshResponse(c),r.next&&r.next()},r=>{t._refreshError(r.error),r.next&&r.next()})}).catch(function(n){t.emit("error",{type:"refreshToken",error:{code:f.clientRefreshToken,message:n!==void 0?n.toString():""}}),t._refreshTimeout=setTimeout(()=>t._refresh(),t._getRefreshRetryDelay())})}_refreshError(e){e.code<100||e.temporary===!0?(this.emit("error",{type:"refresh",error:e}),this._refreshTimeout=setTimeout(()=>this._refresh(),this._getRefreshRetryDelay())):this._disconnect(e.code,e.message,!1)}_getRefreshRetryDelay(){return x(0,5e3,1e4)}_refreshResponse(e){this._refreshTimeout&&(clearTimeout(this._refreshTimeout),this._refreshTimeout=null),e.expires&&(this._client=e.client,this._refreshTimeout=setTimeout(()=>this._refresh(),T(e.ttl)))}_removeSubscription(e){e!==null&&delete this._subs[e.channel]}_unsubscribe(e){if(!this._isConnected())return;let n={unsubscribe:{channel:e.channel}},i=this;this._call(n,!1).then(r=>{r.next&&r.next()},r=>{r.next&&r.next(),i._disconnect(g.unsubscribeError,"unsubscribe error",!0)})}_getSub(e){let t=this._subs[e];return t||null}_isServerSub(e){return this._serverSubs[e]!==void 0}_sendSubscribeCommands(e,t){let n=[];for(let i in this._subs){if(!this._subs.hasOwnProperty(i))continue;let r=this._subs[i];if(r._inflight!==!0&&r.state==="subscribing"){let c=r._subscribe(e,t);c&&n.push(c)}}return n}_connectResponse(e){if(this._transportWasOpen=!0,this._reconnectAttempts=0,this._refreshRequired=!1,this._isConnected())return;this._client=e.client,this._setState("connected"),this._refreshTimeout&&clearTimeout(this._refreshTimeout),e.expires&&(this._refreshTimeout=setTimeout(()=>this._refresh(),T(e.ttl))),this._session=e.session,this._node=e.node,this.startBatching(),this._sendSubscribeCommands(!1,!1),this.stopBatching();let t={client:e.client,transport:this._transport.subName()};e.data&&(t.data=e.data),this.emit("connected",t),this._resolvePromises(),this._processServerSubs(e.subs||{}),e.ping&&e.ping>0?(this._serverPing=e.ping*1e3,this._sendPong=e.pong===!0,this._waitServerPing()):this._serverPing=0}_processServerSubs(e){for(let t in e){if(!e.hasOwnProperty(t))continue;let n=e[t];this._serverSubs[t]={offset:n.offset,epoch:n.epoch,recoverable:n.recoverable||!1};let i=this._getSubscribeContext(t,n);this.emit("subscribed",i)}for(let t in e){if(!e.hasOwnProperty(t))continue;let n=e[t];if(n.recovered){let i=n.publications;if(i&&i.length>0)for(let r in i)i.hasOwnProperty(r)&&this._handlePublication(t,i[r])}}for(let t in this._serverSubs)!this._serverSubs.hasOwnProperty(t)||e[t]||(this.emit("unsubscribed",{channel:t}),delete this._serverSubs[t])}_clearRefreshTimeout(){this._refreshTimeout!==null&&(clearTimeout(this._refreshTimeout),this._refreshTimeout=null)}_clearReconnectTimeout(){this._reconnectTimeout!==null&&(clearTimeout(this._reconnectTimeout),this._reconnectTimeout=null)}_clearServerPingTimeout(){this._serverPingTimeout!==null&&(clearTimeout(this._serverPingTimeout),this._serverPingTimeout=null)}_waitServerPing(){this._config.maxServerPingDelay!==0&&(!this._isConnected()||(this._clearServerPingTimeout(),this._serverPingTimeout=setTimeout(()=>{!this._isConnected()||this._disconnect(g.noPing,"no ping",!0)},this._serverPing+this._config.maxServerPingDelay)))}_getSubscribeContext(e,t){let n={channel:e,positioned:!1,recoverable:!1,wasRecovering:!1,recovered:!1};t.recovered&&(n.recovered=!0),t.positioned&&(n.positioned=!0),t.recoverable&&(n.recoverable=!0),t.was_recovering&&(n.wasRecovering=!0);let i="";"epoch"in t&&(i=t.epoch);let r=0;return"offset"in t&&(r=t.offset),(n.positioned||n.recoverable)&&(n.streamPosition={offset:r,epoch:i}),t.data&&(n.data=t.data),n}_handleReply(e,t){let n=e.id;if(!(n in this._callbacks)){t();return}let i=this._callbacks[n];if(clearTimeout(this._callbacks[n].timeout),delete this._callbacks[n],le(e)){let r=i.errback;if(!r){t();return}let c=e.error;r({error:c,next:t})}else{let r=i.callback;if(!r)return;r({reply:e,next:t})}}_handleJoin(e,t){let n=this._getSub(e);if(!n){if(this._isServerSub(e)){let i={channel:e,info:this._getJoinLeaveContext(t.info)};this.emit("join",i)}return}n._handleJoin(t)}_handleLeave(e,t){let n=this._getSub(e);if(!n){if(this._isServerSub(e)){let i={channel:e,info:this._getJoinLeaveContext(t.info)};this.emit("leave",i)}return}n._handleLeave(t)}_handleUnsubscribe(e,t){let n=this._getSub(e);if(!n){this._isServerSub(e)&&(delete this._serverSubs[e],this.emit("unsubscribed",{channel:e}));return}t.code<2500?n._setUnsubscribed(t.code,t.reason,!1):n._setSubscribing(t.code,t.reason)}_handleSubscribe(e,t){this._serverSubs[e]={offset:t.offset,epoch:t.epoch,recoverable:t.recoverable||!1},this.emit("subscribed",this._getSubscribeContext(e,t))}_handleDisconnect(e){let t=e.code,n=!0;(t>=3500&&t<4e3||t>=4500&&t<5e3)&&(n=!1),this._disconnect(t,e.reason,n)}_getPublicationContext(e,t){let n={channel:e,data:t.data};return t.offset&&(n.offset=t.offset),t.info&&(n.info=this._getJoinLeaveContext(t.info)),t.tags&&(n.tags=t.tags),n}_getJoinLeaveContext(e){let t={client:e.client,user:e.user};return e.conn_info&&(t.connInfo=e.conn_info),e.chan_info&&(t.chanInfo=e.chan_info),t}_handlePublication(e,t){let n=this._getSub(e);if(!n){if(this._isServerSub(e)){let i=this._getPublicationContext(e,t);this.emit("publication",i),t.offset!==void 0&&(this._serverSubs[e].offset=t.offset)}return}n._handlePublication(t)}_handleMessage(e){this.emit("message",{data:e.data})}_handleServerPing(e){if(this._sendPong){let t={};this._transportSendCommands([t])}e()}_handlePush(e,t){let n=e.channel;e.pub?this._handlePublication(n,e.pub):e.message?this._handleMessage(e.message):e.join?this._handleJoin(n,e.join):e.leave?this._handleLeave(n,e.leave):e.unsubscribe?this._handleUnsubscribe(n,e.unsubscribe):e.subscribe?this._handleSubscribe(n,e.subscribe):e.disconnect&&this._handleDisconnect(e.disconnect),t()}_flush(){let e=this._commands.slice(0);this._commands=[],this._transportSendCommands(e)}_createErrorObject(e,t,n){let i={code:e,message:t};return n&&(i.temporary=!0),i}_registerCall(e,t,n){this._callbacks[e]={callback:t,errback:n,timeout:null},this._callbacks[e].timeout=setTimeout(()=>{delete this._callbacks[e],G(n)&&n({error:this._createErrorObject(f.timeout,"timeout")})},this._config.timeout)}_addCommand(e){this._batching?this._commands.push(e):this._transportSendCommands([e])}_nextPromiseId(){return++this._promiseId}_nextTransportId(){return++this._transportId}_resolvePromises(){for(let e in this._promises)this._promises[e].timeout&&clearTimeout(this._promises[e].timeout),this._promises[e].resolve(),delete this._promises[e]}_rejectPromises(e){for(let t in this._promises)this._promises[t].timeout&&clearTimeout(this._promises[t].timeout),this._promises[t].reject(e),delete this._promises[t]}};C.SubscriptionState=I;C.State=j;window.Centrifuge=C;})(); | ||
`)}},J=class{decodeReplies(s){return s.trim().split(` | ||
`).map(e=>JSON.parse(e))}};var de=Z(K());var ke={protocol:"json",token:"",getToken:null,data:null,getData:null,debug:!1,name:"js",version:"",fetch:null,readableStream:null,websocket:null,eventsource:null,sockjs:null,sockjsOptions:{},emulationEndpoint:"/emulation",minReconnectDelay:500,maxReconnectDelay:2e4,timeout:5e3,maxServerPingDelay:1e4,networkEventTarget:null},m=class extends Error{constructor(s){super(s),this.name=this.constructor.name}},S=class extends de.default{constructor(e,t){super();this._reconnectTimeout=null;this._refreshTimeout=null;this._serverPingTimeout=null;this.state="disconnected",this._endpoint=e,this._emulation=!1,this._transports=[],this._currentTransportIndex=0,this._triedAllTransports=!1,this._transportWasOpen=!1,this._transport=null,this._transportId=0,this._deviceWentOffline=!1,this._transportClosed=!0,this._encoder=null,this._decoder=null,this._reconnecting=!1,this._reconnectTimeout=null,this._reconnectAttempts=0,this._client=null,this._session="",this._node="",this._subs={},this._serverSubs={},this._commandId=0,this._commands=[],this._batching=!1,this._refreshRequired=!1,this._refreshTimeout=null,this._callbacks={},this._token="",this._data=null,this._dispatchPromise=Promise.resolve(),this._serverPing=0,this._serverPingTimeout=null,this._sendPong=!1,this._promises={},this._promiseId=0,this._debugEnabled=!1,this._networkEventsSet=!1,this._config=H(H({},ke),t),this._configure(),this._debugEnabled?(this.on("state",n=>{this._debug("client state",n.oldState,"->",n.newState)}),this.on("error",n=>{this._debug("client error",n)})):this.on("error",function(){Function.prototype()})}newSubscription(e,t){if(this.getSubscription(e)!==null)throw new Error("Subscription to the channel "+e+" already exists");let n=new U(this,e,t);return this._subs[e]=n,n}getSubscription(e){return this._getSub(e)}removeSubscription(e){!e||(e.state!=="unsubscribed"&&e.unsubscribe(),this._removeSubscription(e))}subscriptions(){return this._subs}ready(e){return this.state==="disconnected"?Promise.reject({code:f.clientDisconnected,message:"client disconnected"}):this.state==="connected"?Promise.resolve():new Promise((t,n)=>{let i={resolve:t,reject:n};e&&(i.timeout=setTimeout(function(){n({code:f.timeout,message:"timeout"})},e)),this._promises[this._nextPromiseId()]=i})}connect(){if(this._isConnected()){this._debug("connect called when already connected");return}if(this._isConnecting()){this._debug("connect called when already connecting");return}this._debug("connect called"),this._reconnectAttempts=0,this._startConnecting()}disconnect(){this._disconnect(L.disconnectCalled,"disconnect called",!1)}setToken(e){this._token=e}send(e){let t={send:{data:e}},n=this;return this._methodCall().then(function(){return n._transportSendCommands([t])?Promise.resolve():Promise.reject(n._createErrorObject(f.transportWriteError,"transport write error"))})}rpc(e,t){let n={rpc:{method:e,data:t}},i=this;return this._methodCall().then(function(){return i._callPromise(n,function(r){return{data:r.rpc.data}})})}publish(e,t){let n={publish:{channel:e,data:t}},i=this;return this._methodCall().then(function(){return i._callPromise(n,function(){return{}})})}history(e,t){let n={history:this._getHistoryRequest(e,t)},i=this;return this._methodCall().then(function(){return i._callPromise(n,function(r){let a=r.history,c=[];if(a.publications)for(let u=0;u<a.publications.length;u++)c.push(i._getPublicationContext(e,a.publications[u]));return{publications:c,epoch:a.epoch||"",offset:a.offset||0}})})}presence(e){let t={presence:{channel:e}},n=this;return this._methodCall().then(function(){return n._callPromise(t,function(i){let r=i.presence.presence;for(let a in r)if(r.hasOwnProperty(a)){let c=r[a].conn_info,u=r[a].chan_info;c&&(r[a].connInfo=c),u&&(r[a].chanInfo=u)}return{clients:r}})})}presenceStats(e){let t={presence_stats:{channel:e}},n=this;return this._methodCall().then(function(){return n._callPromise(t,function(i){let r=i.presence_stats;return{numUsers:r.num_users,numClients:r.num_clients}})})}startBatching(){this._batching=!0}stopBatching(){let e=this;Promise.resolve().then(function(){Promise.resolve().then(function(){e._batching=!1,e._flush()})})}_debug(...e){!this._debugEnabled||le("debug",e)}_setFormat(e){if(!this._formatOverride(e)){if(e==="protobuf")throw new Error("not implemented by JSON-only Centrifuge client, use client with Protobuf support");this._encoder=new W,this._decoder=new J}}_formatOverride(e){return!1}_configure(){if(!("Promise"in globalThis))throw new Error("Promise polyfill required");if(!this._endpoint)throw new Error("endpoint configuration required");if(this._config.protocol!=="json"&&this._config.protocol!=="protobuf")throw new Error("unsupported protocol "+this._config.protocol);if(this._config.token!==null&&(this._token=this._config.token),this._config.data!==null&&(this._data=this._config.data),this._setFormat("json"),this._config.protocol==="protobuf"&&this._setFormat("protobuf"),(this._config.debug===!0||typeof localStorage!="undefined"&&localStorage.getItem("centrifuge.debug"))&&(this._debugEnabled=!0),this._debug("config",this._config),typeof this._endpoint!="string")if(typeof this._endpoint=="object"&&this._endpoint instanceof Array){this._transports=this._endpoint,this._emulation=!0;for(let e in this._transports){let t=this._transports[e];if(!t.endpoint||!t.transport)throw new Error("malformed transport configuration");let n=t.transport;if(["websocket","http_stream","sse","sockjs","webtransport"].indexOf(n)<0)throw new Error("unsupported transport name: "+n)}}else throw new Error("unsupported url configuration type: only string or array of objects are supported")}_setState(e){if(this.state!==e){this._reconnecting=!1;let t=this.state;return this.state=e,this.emit("state",{newState:e,oldState:t}),!0}return!1}_isDisconnected(){return this.state==="disconnected"}_isConnecting(){return this.state==="connecting"}_isConnected(){return this.state==="connected"}_nextCommandId(){return++this._commandId}_setNetworkEvents(){if(this._networkEventsSet)return;let e=null;this._config.networkEventTarget!==null?e=this._config.networkEventTarget:typeof globalThis.addEventListener!="undefined"&&(e=globalThis),e&&(e.addEventListener("offline",()=>{this._debug("offline event triggered"),(this.state==="connected"||this.state==="connecting")&&(this._disconnect(v.transportClosed,"transport closed",!0),this._deviceWentOffline=!0)}),e.addEventListener("online",()=>{this._debug("online event triggered"),this.state==="connecting"&&(this._deviceWentOffline&&!this._transportClosed&&(this._deviceWentOffline=!1,this._transportClosed=!0),this._clearReconnectTimeout(),this._startReconnecting())}),this._networkEventsSet=!0)}_getReconnectDelay(){let e=C(this._reconnectAttempts,this._config.minReconnectDelay,this._config.maxReconnectDelay);return this._reconnectAttempts+=1,e}_clearOutgoingRequests(){for(let e in this._callbacks)if(this._callbacks.hasOwnProperty(e)){let t=this._callbacks[e];clearTimeout(t.timeout);let n=t.errback;if(!n)continue;n({error:this._createErrorObject(f.connectionClosed,"connection closed")})}this._callbacks={}}_clearConnectedState(){this._client=null,this._clearServerPingTimeout(),this._clearRefreshTimeout();for(let e in this._subs){if(!this._subs.hasOwnProperty(e))continue;let t=this._subs[e];t.state==="subscribed"&&t._setSubscribing(j.transportClosed,"transport closed")}for(let e in this._serverSubs)this._serverSubs.hasOwnProperty(e)&&this.emit("subscribing",{channel:e})}_handleWriteError(e){for(let t of e){let n=t.id;if(!(n in this._callbacks))continue;let i=this._callbacks[n];clearTimeout(this._callbacks[n].timeout),delete this._callbacks[n];let r=i.errback;r({error:this._createErrorObject(f.transportWriteError,"transport write error")})}}_transportSendCommands(e){if(!e.length)return!0;if(!this._transport)return!1;try{this._transport.send(this._encoder.encodeCommands(e),this._session,this._node)}catch(t){return this._debug("error writing commands",t),this._handleWriteError(e),!1}return!0}_initializeTransport(){let e;this._config.websocket!==null?e=this._config.websocket:typeof globalThis.WebSocket!="function"&&typeof globalThis.WebSocket!="object"||(e=globalThis.WebSocket);let t=null;this._config.sockjs!==null?t=this._config.sockjs:typeof globalThis.SockJS!="undefined"&&(t=globalThis.SockJS);let n=null;this._config.eventsource!==null?n=this._config.eventsource:typeof globalThis.EventSource!="undefined"&&(n=globalThis.EventSource);let i=null;this._config.fetch!==null?i=this._config.fetch:typeof globalThis.fetch!="undefined"&&(i=globalThis.fetch);let r=null;if(this._config.readableStream!==null?r=this._config.readableStream:typeof globalThis.ReadableStream!="undefined"&&(r=globalThis.ReadableStream),this._emulation){this._currentTransportIndex>=this._transports.length&&(this._triedAllTransports=!0,this._currentTransportIndex=0);let l=0;for(;;){if(l>=this._transports.length)throw new Error("no supported transport found");let p=this._transports[this._currentTransportIndex],_=p.transport,d=p.endpoint;if(_==="websocket"){if(this._debug("trying websocket transport"),this._transport=new k(d,{websocket:e}),!this._transport.supported()){this._debug("websocket transport not available"),this._currentTransportIndex++,l++;continue}}else if(_==="webtransport"){if(this._debug("trying webtransport transport"),this._transport=new N(d,{webtransport:globalThis.WebTransport,decoder:this._decoder,encoder:this._encoder}),!this._transport.supported()){this._debug("webtransport transport not available"),this._currentTransportIndex++,l++;continue}}else if(_==="http_stream"){if(this._debug("trying http_stream transport"),this._transport=new M(d,{fetch:i,readableStream:r,emulationEndpoint:this._config.emulationEndpoint,decoder:this._decoder,encoder:this._encoder}),!this._transport.supported()){this._debug("http_stream transport not available"),this._currentTransportIndex++,l++;continue}}else if(_==="sse"){if(this._debug("trying sse transport"),this._transport=new z(d,{eventsource:n,fetch:i,emulationEndpoint:this._config.emulationEndpoint}),!this._transport.supported()){this._debug("sse transport not available"),this._currentTransportIndex++,l++;continue}}else if(_==="sockjs"){if(this._debug("trying sockjs"),this._transport=new A(d,{sockjs:t,sockjsOptions:this._config.sockjsOptions}),!this._transport.supported()){this._debug("sockjs transport not available"),this._currentTransportIndex++,l++;continue}}else throw new Error("unknown transport "+_);break}}else{if(ue(this._endpoint,"http"))throw new Error("Provide explicit transport endpoints configuration in case of using HTTP (i.e. using array of TransportEndpoint instead of a single string), or use ws(s):// scheme in an endpoint if you aimed using WebSocket transport");if(this._debug("client will use websocket"),this._transport=new k(this._endpoint,{websocket:e}),!this._transport.supported())throw new Error("WebSocket not available")}let a=this,c=this._transport,u=this._nextTransportId();a._debug("id of transport",u);let g=!1,y=!0;this._transport.name()==="sse"&&(y=!1);let x=[];if(this._transport.emulation()){let l=a._sendConnect(!0);if(x.push(l),y){let p=a._sendSubscribeCommands(!0,!0);for(let _ in p)x.push(p[_])}}this._setNetworkEvents();let w=this._encoder.encodeCommands(x);this._transportClosed=!1;let b;b=setTimeout(function(){c.close()},this._config.timeout),this._transport.initialize(this._config.protocol,{onOpen:function(){if(b&&(clearTimeout(b),b=null),a._transportId!=u){a._debug("open callback from non-actual transport"),c.close();return}g=!0,a._debug(c.subName(),"transport open"),a._transportWasOpen=!0,!c.emulation()&&(a.startBatching(),a._sendConnect(!1),y&&a._sendSubscribeCommands(!0,!1),a.stopBatching())},onError:function(l){if(a._transportId!=u){a._debug("error callback from non-actual transport");return}a._debug("transport level error",l)},onClose:function(l){if(b&&(clearTimeout(b),b=null),a._transportId!=u){a._debug("close callback from non-actual transport");return}a._debug(c.subName(),"transport closed"),a._transportClosed=!0;let p="connection closed",_=!0,d=0;if(l&&"code"in l&&l.code&&(d=l.code),l&&l.reason)try{let q=JSON.parse(l.reason);p=q.reason,_=q.reconnect}catch(q){p=l.reason,(d>=3500&&d<4e3||d>=4500&&d<5e3)&&(_=!1)}d<3e3?(d===1009?(d=L.messageSizeLimit,p="message size limit exceeded",_=!1):(d=v.transportClosed,p="transport closed"),a._emulation&&!a._transportWasOpen&&(a._currentTransportIndex++,a._currentTransportIndex>=a._transports.length&&(a._triedAllTransports=!0,a._currentTransportIndex=0))):a._transportWasOpen=!0,a._isConnecting()&&!g&&a.emit("error",{type:"transport",error:{code:f.transportClosed,message:"transport closed"},transport:c.name()}),a._reconnecting=!1,a._disconnect(d,p,_)},onMessage:function(l){a._dataReceived(l)}},w)}_sendConnect(e){let t=this._constructConnectCommand(),n=this;return this._call(t,e).then(i=>{let r=i.reply.connect;n._connectResponse(r),i.next&&i.next()},i=>{n._connectError(i.error),i.next&&i.next()}),t}_startReconnecting(){if(this._debug("start reconnecting"),!this._isConnecting()){this._debug("stop reconnecting: client not in connecting state");return}if(this._reconnecting){this._debug("reconnect already in progress, return from reconnect routine");return}if(this._transportClosed===!1){this._debug("waiting for transport close");return}this._reconnecting=!0;let e=this,t=this._token==="";if(!(this._refreshRequired||t&&this._config.getToken!==null)){this._config.getData?this._config.getData().then(function(i){!e._isConnecting()||(e._data=i,e._initializeTransport())}):this._initializeTransport();return}this._getToken().then(function(i){if(!!e._isConnecting()){if(i==null||i==null){e._failUnauthorized();return}e._token=i,e._debug("connection token refreshed"),e._config.getData?e._config.getData().then(function(r){!e._isConnecting()||(e._data=r,e._initializeTransport())}):e._initializeTransport()}}).catch(function(i){if(!e._isConnecting())return;if(i instanceof m){e._failUnauthorized();return}e.emit("error",{type:"connectToken",error:{code:f.clientConnectToken,message:i!==void 0?i.toString():""}});let r=e._getReconnectDelay();e._debug("error on connection token refresh, reconnect after "+r+" milliseconds",i),e._reconnecting=!1,e._reconnectTimeout=setTimeout(()=>{e._startReconnecting()},r)})}_connectError(e){this.state==="connecting"&&(e.code===109&&(this._refreshRequired=!0),e.code<100||e.temporary===!0||e.code===109?(this.emit("error",{type:"connect",error:e}),this._debug("closing transport due to connect error"),this._reconnecting=!1,this._disconnect(e.code,e.message,!0)):this._disconnect(e.code,e.message,!1))}_scheduleReconnect(){if(!this._isConnecting())return;let e=!1;this._emulation&&!this._transportWasOpen&&!this._triedAllTransports&&(e=!0);let t=this._getReconnectDelay();e&&(t=0),this._debug("reconnect after "+t+" milliseconds"),this._reconnectTimeout=setTimeout(()=>{this._startReconnecting()},t)}_constructConnectCommand(){let e={};this._token&&(e.token=this._token),this._data&&(e.data=this._data),this._config.name&&(e.name=this._config.name),this._config.version&&(e.version=this._config.version);let t={},n=!1;for(let i in this._serverSubs)if(this._serverSubs.hasOwnProperty(i)&&this._serverSubs[i].recoverable){n=!0;let r={recover:!0};this._serverSubs[i].offset&&(r.offset=this._serverSubs[i].offset),this._serverSubs[i].epoch&&(r.epoch=this._serverSubs[i].epoch),t[i]=r}return n&&(e.subs=t),{connect:e}}_getHistoryRequest(e,t){let n={channel:e};return t!==void 0&&(t.since&&(n.since={offset:t.since.offset},t.since.epoch&&(n.since.epoch=t.since.epoch)),t.limit!==void 0&&(n.limit=t.limit),t.reverse===!0&&(n.reverse=!0)),n}_methodCall(){return this._isConnected()?Promise.resolve():new Promise((e,t)=>{let n=setTimeout(function(){t({code:f.timeout,message:"timeout"})},this._config.timeout);this._promises[this._nextPromiseId()]={timeout:n,resolve:e,reject:t}})}_callPromise(e,t){return new Promise((n,i)=>{this._call(e,!1).then(r=>{n(t(r.reply)),r.next&&r.next()},r=>{i(r.error),r.next&&r.next()})})}_dataReceived(e){this._serverPing>0&&this._waitServerPing();let t=this._decoder.decodeReplies(e);this._dispatchPromise=this._dispatchPromise.then(()=>{let n;this._dispatchPromise=new Promise(i=>{n=i}),this._dispatchSynchronized(t,n)})}_dispatchSynchronized(e,t){let n=Promise.resolve();for(let i in e)e.hasOwnProperty(i)&&(n=n.then(()=>this._dispatchReply(e[i])));n=n.then(()=>{t()})}_dispatchReply(e){let t,n=new Promise(r=>{t=r});if(e==null)return this._debug("dispatch: got undefined or null reply"),t(),n;let i=e.id;return i&&i>0?this._handleReply(e,t):e.push?this._handlePush(e.push,t):this._handleServerPing(t),n}_call(e,t){return new Promise((n,i)=>{e.id=this._nextCommandId(),this._registerCall(e.id,n,i),t||this._addCommand(e)})}_startConnecting(){this._debug("start connecting"),this._setState("connecting")&&this.emit("connecting",{code:v.connectCalled,reason:"connect called"}),this._client=null,this._startReconnecting()}_disconnect(e,t,n){if(this._isDisconnected())return;let i=this.state,r={code:e,reason:t},a=!1;if(n?a=this._setState("connecting"):(a=this._setState("disconnected"),this._rejectPromises({code:f.clientDisconnected,message:"disconnected"})),this._clearOutgoingRequests(),i==="connecting"&&this._clearReconnectTimeout(),i==="connected"&&this._clearConnectedState(),a&&(this._isConnecting()?this.emit("connecting",r):this.emit("disconnected",r)),this._transport){this._debug("closing existing transport");let c=this._transport;this._transport=null,c.close(),this._transportClosed=!0,this._nextTransportId()}else this._debug("no transport to close");this._scheduleReconnect()}_failUnauthorized(){this._disconnect(L.unauthorized,"unauthorized",!1)}_getToken(){if(this._debug("get connection token"),!this._config.getToken)throw this.emit("error",{type:"configuration",error:{code:f.badConfiguration,message:"token expired but no getToken function set in the configuration"}}),new m("");return this._config.getToken({})}_refresh(){let e=this._client,t=this;this._getToken().then(function(n){if(e!==t._client)return;if(!n){t._failUnauthorized();return}if(t._token=n,t._debug("connection token refreshed"),!t._isConnected())return;let i={refresh:{token:t._token}};t._call(i,!1).then(r=>{let a=r.reply.refresh;t._refreshResponse(a),r.next&&r.next()},r=>{t._refreshError(r.error),r.next&&r.next()})}).catch(function(n){if(!!t._isConnected()){if(n instanceof m){t._failUnauthorized();return}t.emit("error",{type:"refreshToken",error:{code:f.clientRefreshToken,message:n!==void 0?n.toString():""}}),t._refreshTimeout=setTimeout(()=>t._refresh(),t._getRefreshRetryDelay())}})}_refreshError(e){e.code<100||e.temporary===!0?(this.emit("error",{type:"refresh",error:e}),this._refreshTimeout=setTimeout(()=>this._refresh(),this._getRefreshRetryDelay())):this._disconnect(e.code,e.message,!1)}_getRefreshRetryDelay(){return C(0,5e3,1e4)}_refreshResponse(e){this._refreshTimeout&&(clearTimeout(this._refreshTimeout),this._refreshTimeout=null),e.expires&&(this._client=e.client,this._refreshTimeout=setTimeout(()=>this._refresh(),E(e.ttl)))}_removeSubscription(e){e!==null&&delete this._subs[e.channel]}_unsubscribe(e){if(!this._isConnected())return;let n={unsubscribe:{channel:e.channel}},i=this;this._call(n,!1).then(r=>{r.next&&r.next()},r=>{r.next&&r.next(),i._disconnect(v.unsubscribeError,"unsubscribe error",!0)})}_getSub(e){let t=this._subs[e];return t||null}_isServerSub(e){return this._serverSubs[e]!==void 0}_sendSubscribeCommands(e,t){let n=[];for(let i in this._subs){if(!this._subs.hasOwnProperty(i))continue;let r=this._subs[i];if(r._inflight!==!0&&r.state==="subscribing"){let a=r._subscribe(e,t);a&&n.push(a)}}return n}_connectResponse(e){if(this._transportWasOpen=!0,this._reconnectAttempts=0,this._refreshRequired=!1,this._isConnected())return;this._client=e.client,this._setState("connected"),this._refreshTimeout&&clearTimeout(this._refreshTimeout),e.expires&&(this._refreshTimeout=setTimeout(()=>this._refresh(),E(e.ttl))),this._session=e.session,this._node=e.node,this.startBatching(),this._sendSubscribeCommands(!1,!1),this.stopBatching();let t={client:e.client,transport:this._transport.subName()};e.data&&(t.data=e.data),this.emit("connected",t),this._resolvePromises(),this._processServerSubs(e.subs||{}),e.ping&&e.ping>0?(this._serverPing=e.ping*1e3,this._sendPong=e.pong===!0,this._waitServerPing()):this._serverPing=0}_processServerSubs(e){for(let t in e){if(!e.hasOwnProperty(t))continue;let n=e[t];this._serverSubs[t]={offset:n.offset,epoch:n.epoch,recoverable:n.recoverable||!1};let i=this._getSubscribeContext(t,n);this.emit("subscribed",i)}for(let t in e){if(!e.hasOwnProperty(t))continue;let n=e[t];if(n.recovered){let i=n.publications;if(i&&i.length>0)for(let r in i)i.hasOwnProperty(r)&&this._handlePublication(t,i[r])}}for(let t in this._serverSubs)!this._serverSubs.hasOwnProperty(t)||e[t]||(this.emit("unsubscribed",{channel:t}),delete this._serverSubs[t])}_clearRefreshTimeout(){this._refreshTimeout!==null&&(clearTimeout(this._refreshTimeout),this._refreshTimeout=null)}_clearReconnectTimeout(){this._reconnectTimeout!==null&&(clearTimeout(this._reconnectTimeout),this._reconnectTimeout=null)}_clearServerPingTimeout(){this._serverPingTimeout!==null&&(clearTimeout(this._serverPingTimeout),this._serverPingTimeout=null)}_waitServerPing(){this._config.maxServerPingDelay!==0&&(!this._isConnected()||(this._clearServerPingTimeout(),this._serverPingTimeout=setTimeout(()=>{!this._isConnected()||this._disconnect(v.noPing,"no ping",!0)},this._serverPing+this._config.maxServerPingDelay)))}_getSubscribeContext(e,t){let n={channel:e,positioned:!1,recoverable:!1,wasRecovering:!1,recovered:!1};t.recovered&&(n.recovered=!0),t.positioned&&(n.positioned=!0),t.recoverable&&(n.recoverable=!0),t.was_recovering&&(n.wasRecovering=!0);let i="";"epoch"in t&&(i=t.epoch);let r=0;return"offset"in t&&(r=t.offset),(n.positioned||n.recoverable)&&(n.streamPosition={offset:r,epoch:i}),t.data&&(n.data=t.data),n}_handleReply(e,t){let n=e.id;if(!(n in this._callbacks)){t();return}let i=this._callbacks[n];if(clearTimeout(this._callbacks[n].timeout),delete this._callbacks[n],he(e)){let r=i.errback;if(!r){t();return}let a=e.error;r({error:a,next:t})}else{let r=i.callback;if(!r)return;r({reply:e,next:t})}}_handleJoin(e,t){let n=this._getSub(e);if(!n){if(this._isServerSub(e)){let i={channel:e,info:this._getJoinLeaveContext(t.info)};this.emit("join",i)}return}n._handleJoin(t)}_handleLeave(e,t){let n=this._getSub(e);if(!n){if(this._isServerSub(e)){let i={channel:e,info:this._getJoinLeaveContext(t.info)};this.emit("leave",i)}return}n._handleLeave(t)}_handleUnsubscribe(e,t){let n=this._getSub(e);if(!n){this._isServerSub(e)&&(delete this._serverSubs[e],this.emit("unsubscribed",{channel:e}));return}t.code<2500?n._setUnsubscribed(t.code,t.reason,!1):n._setSubscribing(t.code,t.reason)}_handleSubscribe(e,t){this._serverSubs[e]={offset:t.offset,epoch:t.epoch,recoverable:t.recoverable||!1},this.emit("subscribed",this._getSubscribeContext(e,t))}_handleDisconnect(e){let t=e.code,n=!0;(t>=3500&&t<4e3||t>=4500&&t<5e3)&&(n=!1),this._disconnect(t,e.reason,n)}_getPublicationContext(e,t){let n={channel:e,data:t.data};return t.offset&&(n.offset=t.offset),t.info&&(n.info=this._getJoinLeaveContext(t.info)),t.tags&&(n.tags=t.tags),n}_getJoinLeaveContext(e){let t={client:e.client,user:e.user};return e.conn_info&&(t.connInfo=e.conn_info),e.chan_info&&(t.chanInfo=e.chan_info),t}_handlePublication(e,t){let n=this._getSub(e);if(!n){if(this._isServerSub(e)){let i=this._getPublicationContext(e,t);this.emit("publication",i),t.offset!==void 0&&(this._serverSubs[e].offset=t.offset)}return}n._handlePublication(t)}_handleMessage(e){this.emit("message",{data:e.data})}_handleServerPing(e){if(this._sendPong){let t={};this._transportSendCommands([t])}e()}_handlePush(e,t){let n=e.channel;e.pub?this._handlePublication(n,e.pub):e.message?this._handleMessage(e.message):e.join?this._handleJoin(n,e.join):e.leave?this._handleLeave(n,e.leave):e.unsubscribe?this._handleUnsubscribe(n,e.unsubscribe):e.subscribe?this._handleSubscribe(n,e.subscribe):e.disconnect&&this._handleDisconnect(e.disconnect),t()}_flush(){let e=this._commands.slice(0);this._commands=[],this._transportSendCommands(e)}_createErrorObject(e,t,n){let i={code:e,message:t};return n&&(i.temporary=!0),i}_registerCall(e,t,n){this._callbacks[e]={callback:t,errback:n,timeout:null},this._callbacks[e].timeout=setTimeout(()=>{delete this._callbacks[e],Q(n)&&n({error:this._createErrorObject(f.timeout,"timeout")})},this._config.timeout)}_addCommand(e){this._batching?this._commands.push(e):this._transportSendCommands([e])}_nextPromiseId(){return++this._promiseId}_nextTransportId(){return++this._transportId}_resolvePromises(){for(let e in this._promises)this._promises[e].timeout&&clearTimeout(this._promises[e].timeout),this._promises[e].resolve(),delete this._promises[e]}_rejectPromises(e){for(let t in this._promises)this._promises[t].timeout&&clearTimeout(this._promises[t].timeout),this._promises[t].reject(e),delete this._promises[t]}};S.SubscriptionState=I;S.State=D;S.UnauthorizedError=m;window.Centrifuge=S;})(); | ||
//# sourceMappingURL=centrifuge.js.map |
{ | ||
"name": "centrifuge", | ||
"version": "3.2.0-beta.0", | ||
"version": "4.0.0", | ||
"description": "JavaScript client SDK for bidirectional communication with Centrifugo and Centrifuge-based server from browser, NodeJS and React Native", | ||
@@ -5,0 +5,0 @@ "main": "build/index.js", |
@@ -7,3 +7,3 @@ This SDK provides a client to connect to [Centrifugo](https://github.com/centrifugal/centrifugo) or any [Centrifuge-based](https://github.com/centrifugal/centrifuge) server using pure WebSocket or one of the fallback transports from web browser, ReactNative, or NodeJS environments. | ||
> **`centrifuge-js` v3.x is compatible only with latest [Centrifugo](https://github.com/centrifugal/centrifugo) server (v4) and [Centrifuge](https://github.com/centrifugal/centrifuge) >= 0.25.0. For Centrifugo v2, Centrifugo v3 and Centrifuge < 0.25.0 you should use `centrifuge-js` v2.x.** | ||
> **`centrifuge-js` v4.x is compatible with [Centrifugo](https://github.com/centrifugal/centrifugo) server v4 and v5 and [Centrifuge](https://github.com/centrifugal/centrifuge) >= 0.25.0. For Centrifugo v2, Centrifugo v3 and Centrifuge < 0.25.0 you should use `centrifuge-js` v2.x.** | ||
@@ -45,6 +45,6 @@ * [Install](#install) | ||
In browser, you can import SDK from CDN (replace `3.1.0` to a concrete version number you want to use, see [releases](https://github.com/centrifugal/centrifuge-js/releases)): | ||
In browser, you can import SDK from CDN (replace `4.0.0` with a concrete version number you want to use, see [releases](https://github.com/centrifugal/centrifuge-js/releases)): | ||
```html | ||
<script src="https://unpkg.com/centrifuge@3.1.0/dist/centrifuge.js"></script> | ||
<script src="https://unpkg.com/centrifuge@4.0.0/dist/centrifuge.js"></script> | ||
``` | ||
@@ -147,3 +147,3 @@ | ||
<script src="https://cdn.jsdelivr.net/npm/sockjs-client@1/dist/sockjs.min.js" type="text/javascript"></script> | ||
<script src="https://unpkg.com/centrifuge@3.1.0/dist/centrifuge.js" type="text/javascript"></script> | ||
<script src="https://unpkg.com/centrifuge@4.0.0/dist/centrifuge.js" type="text/javascript"></script> | ||
``` | ||
@@ -344,22 +344,17 @@ | ||
```javascript | ||
function getToken(url, ctx) { | ||
return new Promise((resolve, reject) => { | ||
fetch(url, { | ||
method: 'POST', | ||
headers: new Headers({ 'Content-Type': 'application/json' }), | ||
body: JSON.stringify(ctx) | ||
}) | ||
.then(res => { | ||
if (!res.ok) { | ||
throw new Error(`Unexpected status code ${res.status}`); | ||
} | ||
return res.json(); | ||
}) | ||
.then(data => { | ||
resolve(data.token); | ||
}) | ||
.catch(err => { | ||
reject(err); | ||
}); | ||
}); | ||
async function getToken() { | ||
if (!loggedIn) { | ||
return ""; | ||
} | ||
const res = await fetch('/centrifuge/connection_token'); | ||
if (!res.ok) { | ||
if (res.status === 403) { | ||
// Return special error to not proceed with token refreshes, client will be disconnected. | ||
throw new Centrifuge.UnauthorizedError(); | ||
} | ||
// Any other error thrown will result into token refresh re-attempts. | ||
throw new Error(`Unexpected status code ${res.status}`); | ||
} | ||
const data = await res.json(); | ||
return data.token; | ||
} | ||
@@ -371,5 +366,3 @@ | ||
token: 'JWT-GENERATED-ON-BACKEND-SIDE', | ||
getToken: function (ctx) { | ||
return getToken('/centrifuge/connection_token', ctx); | ||
} | ||
getToken: getToken | ||
} | ||
@@ -559,22 +552,19 @@ ); | ||
```javascript | ||
function getToken(url, ctx) { | ||
return new Promise((resolve, reject) => { | ||
fetch(url, { | ||
method: 'POST', | ||
headers: new Headers({ 'Content-Type': 'application/json' }), | ||
body: JSON.stringify(ctx) | ||
}) | ||
.then(res => { | ||
if (!res.ok) { | ||
throw new Error(`Unexpected status code ${res.status}`); | ||
} | ||
return res.json(); | ||
}) | ||
.then(data => { | ||
resolve(data.token); | ||
}) | ||
.catch(err => { | ||
reject(err); | ||
}); | ||
async function getToken(ctx) { | ||
// ctx argument has a channel. | ||
const res = await fetch('/centrifuge/subscription_token', { | ||
method: 'POST', | ||
headers: new Headers({ 'Content-Type': 'application/json' }), | ||
body: JSON.stringify(ctx) | ||
}); | ||
if (!res.ok) { | ||
if (res.status === 403) { | ||
// Return special error to not proceed with token refreshes, subscription will be unsubscribed. | ||
throw new Centrifuge.UnauthorizedError(); | ||
} | ||
// Any other error thrown will result into token refresh re-attempts. | ||
throw new Error(`Unexpected status code ${res.status}`); | ||
} | ||
const data = await res.json(); | ||
return data.token; | ||
} | ||
@@ -586,6 +576,3 @@ | ||
token: 'JWT-GENERATED-ON-BACKEND-SIDE', | ||
getToken: function (ctx) { | ||
// ctx has channel in the Subscription token case. | ||
return getToken('/centrifuge/subscription_token', ctx); | ||
}, | ||
getToken: getToken, | ||
}); | ||
@@ -712,3 +699,3 @@ sub.subscribe(); | ||
```html | ||
<script src="https://unpkg.com/centrifuge@3.0.0/dist/centrifuge.protobuf.js"></script> | ||
<script src="https://unpkg.com/centrifuge@4.0.0/dist/centrifuge.protobuf.js"></script> | ||
``` | ||
@@ -752,3 +739,3 @@ | ||
```javascript | ||
const Centrifuge = require('centrifuge'); | ||
const { Centrifuge } = require('centrifuge'); | ||
const WebSocket = require('ws'); | ||
@@ -764,3 +751,3 @@ | ||
```javascript | ||
const Centrifuge = require('centrifuge'); | ||
const { Centrifuge } = require('centrifuge'); | ||
global.WebSocket = require('ws'); | ||
@@ -767,0 +754,0 @@ |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
No v1
QualityPackage is not semver >=1. This means it is not stable and does not support ^ ranges.
Found 1 instance in 1 package
1150069
5190
0
775