@wix/duplexer-js 2.0.5 → 2.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,2 +1,2 @@
1
- !function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define("Duplexer",[],e):"object"==typeof exports?exports.Duplexer=e():t.Duplexer=e()}("undefined"!=typeof self?self:this,(()=>(()=>{var t={830:t=>{function e(t){t=t||{},this.ms=t.min||100,this.max=t.max||1e4,this.factor=t.factor||2,this.jitter=t.jitter>0&&t.jitter<=1?t.jitter:0,this.attempts=0}t.exports=e,e.prototype.duration=function(){var t=this.ms*Math.pow(this.factor,this.attempts++);if(this.jitter){var e=Math.random(),s=Math.floor(e*this.jitter*t);t=0==(1&Math.floor(10*e))?t-s:t+s}return 0|Math.min(t,this.max)},e.prototype.reset=function(){this.attempts=0},e.prototype.setMin=function(t){this.ms=t},e.prototype.setMax=function(t){this.max=t},e.prototype.setJitter=function(t){this.jitter=t}},158:t=>{var e,s,n=t.exports={};function r(){throw new Error("setTimeout has not been defined")}function i(){throw new Error("clearTimeout has not been defined")}function o(t){if(e===setTimeout)return setTimeout(t,0);if((e===r||!e)&&setTimeout)return e=setTimeout,setTimeout(t,0);try{return e(t,0)}catch(s){try{return e.call(null,t,0)}catch(s){return e.call(this,t,0)}}}!function(){try{e="function"==typeof setTimeout?setTimeout:r}catch(t){e=r}try{s="function"==typeof clearTimeout?clearTimeout:i}catch(t){s=i}}();var a,c=[],h=!1,l=-1;function u(){h&&a&&(h=!1,a.length?c=a.concat(c):l=-1,c.length&&d())}function d(){if(!h){var t=o(u);h=!0;for(var e=c.length;e;){for(a=c,c=[];++l<e;)a&&a[l].run();l=-1,e=c.length}a=null,h=!1,function(t){if(s===clearTimeout)return clearTimeout(t);if((s===i||!s)&&clearTimeout)return s=clearTimeout,clearTimeout(t);try{return s(t)}catch(e){try{return s.call(null,t)}catch(e){return s.call(this,t)}}}(t)}}function p(t,e){this.fun=t,this.array=e}function f(){}n.nextTick=function(t){var e=new Array(arguments.length-1);if(arguments.length>1)for(var s=1;s<arguments.length;s++)e[s-1]=arguments[s];c.push(new p(t,e)),1!==c.length||h||o(d)},p.prototype.run=function(){this.fun.apply(null,this.array)},n.title="browser",n.browser=!0,n.env={},n.argv=[],n.version="",n.versions={},n.on=f,n.addListener=f,n.once=f,n.off=f,n.removeListener=f,n.removeAllListeners=f,n.emit=f,n.prependListener=f,n.prependOnceListener=f,n.listeners=function(t){return[]},n.binding=function(t){throw new Error("process.binding is not supported")},n.cwd=function(){return"/"},n.chdir=function(t){throw new Error("process.chdir is not supported")},n.umask=function(){return 0}},102:(t,e,s)=>{"use strict";e.AN=e.Du=e.v8=void 0;var n=s(120);e.v8=n.default;var r=s(880);e.Du=r.default;var i=s(131);e.AN=i.default},131:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var s=function(){function t(){}return t.prototype.withNs=function(t){return this.ns=t,this},t.prototype.withChannelName=function(t){return this.channelName=t,this},t.prototype.withRestoreStrategy=function(t){return this.restore=t,this},t.prototype.build=function(){return{ns:this.ns,channel:this.channelName,override:this.restore}},t}();e.default=s},880:function(t,e){"use strict";var s=this&&this.__assign||function(){return s=Object.assign||function(t){for(var e,s=1,n=arguments.length;s<n;s++)for(var r in e=arguments[s])Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t},s.apply(this,arguments)};Object.defineProperty(e,"__esModule",{value:!0});var n=function(){function t(){this.overrideRestoreStrategies=[]}return t.prototype.withOverrideRestoreStrategy=function(t){return this.overrideRestoreStrategies=this.overrideRestoreStrategies.filter((function(e){return e.channel!==t.channel||e.ns!==t.ns})),this.overrideRestoreStrategies.push(t),this},t.prototype.withDefaultRestoreStrategy=function(t){return this.defaultRestoreStrategy=t,this},t.prototype.build=function(){return new r(this.defaultRestoreStrategy,this.overrideRestoreStrategies).toProtocolFormat()},t}();e.default=n;var r=function(){function t(t,e){this.defaultRestoreStrategy=t,this.overrideRestoreStrategies=e}return t.prototype.toProtocolFormat=function(){var t={};return void 0!==this.defaultRestoreStrategy&&(t.restore={default:this.defaultRestoreStrategy}),this.hasOverrides()&&(t.restore=s(s({},t.restore),{overrides:this.overrideRestoreStrategies})),t},t.prototype.hasOverrides=function(){return this.overrideRestoreStrategies.length>0},t}()},277:(t,e,s)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=s(89),r=function(){function t(){}return t.prototype.build=function(){return new n.default("All")},t}();e.default=r},200:function(t,e,s){"use strict";var n,r=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var s in e)Object.prototype.hasOwnProperty.call(e,s)&&(t[s]=e[s])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function s(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(s.prototype=e.prototype,new s)});Object.defineProperty(e,"__esModule",{value:!0}),e.MessageIdRestoreStrategy=void 0;var i=s(89),o=function(){function t(){}return t.prototype.withId=function(t){return this.id=t,this},t.prototype.build=function(){return new a(this.id)},t}();e.default=o;var a=function(t){function e(e){var s=t.call(this,"message_id")||this;return s.id=e,s}return r(e,t),e}(i.default);e.MessageIdRestoreStrategy=a},89:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var s=function(t){this.strategy=t};e.default=s},120:(t,e,s)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=s(277),r=s(200),i=s(678),o=function(){function t(){}return t.all=function(){return new n.default},t.messageId=function(){return new r.default},t.timestamp=function(){return new i.default},t}();e.default=o},678:function(t,e,s){"use strict";var n,r=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var s in e)Object.prototype.hasOwnProperty.call(e,s)&&(t[s]=e[s])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function s(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(s.prototype=e.prototype,new s)});Object.defineProperty(e,"__esModule",{value:!0}),e.TimestampRestoreStrategy=void 0;var i=s(89),o=function(){function t(){}return t.prototype.withT=function(t){return this.t=t,this},t.prototype.build=function(){return new a(this.t)},t}();e.default=o;var a=function(t){function e(e){var s=t.call(this,"Timestamp")||this;return s.t=e,s}return r(e,t),e}(i.default);e.TimestampRestoreStrategy=a},213:(t,e,s)=>{var n=s(174);t.exports=function(t,e,s){return(e=n(e))in t?Object.defineProperty(t,e,{value:s,enumerable:!0,configurable:!0,writable:!0}):t[e]=s,t},t.exports.__esModule=!0,t.exports.default=t.exports},662:(t,e,s)=>{var n=s(114).default;t.exports=function(t,e){if("object"!=n(t)||!t)return t;var s=t[Symbol.toPrimitive];if(void 0!==s){var r=s.call(t,e||"default");if("object"!=n(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)},t.exports.__esModule=!0,t.exports.default=t.exports},174:(t,e,s)=>{var n=s(114).default,r=s(662);t.exports=function(t){var e=r(t,"string");return"symbol"==n(e)?e:e+""},t.exports.__esModule=!0,t.exports.default=t.exports},114:t=>{function e(s){return t.exports=e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},t.exports.__esModule=!0,t.exports.default=t.exports,e(s)}t.exports=e,t.exports.__esModule=!0,t.exports.default=t.exports}},e={};function s(n){var r=e[n];if(void 0!==r)return r.exports;var i=e[n]={exports:{}};return t[n].call(i.exports,i,i.exports,s),i.exports}s.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return s.d(e,{a:e}),e},s.d=(t,e)=>{for(var n in e)s.o(e,n)&&!s.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},s.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),s.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var n={};return(()=>{"use strict";s.r(n),s.d(n,{Duplexer:()=>K});var t=s(213),e=s.n(t);class r{constructor(){e()(this,"_callbacks",void 0)}on(t,e){return this._on(t,e)}addEventListener(t,e){return this._on(t,e)}once(t,e){function s(){this.off(t,s);for(var n=arguments.length,r=new Array(n),i=0;i<n;i++)r[i]=arguments[i];e.apply(this,r)}return s.fn=e,this.on(t,s),this}off(t,e){return this._off(t,e)}removeEventListener(t,e){return this._off(t,e)}removeListener(t){return this._off(t)}removeAllListeners(){return this._off()}emit(t){this._callbacks=this._callbacks||{};let e=this._callbacks["$"+t];if(e){e=e.slice(0);for(var s=arguments.length,n=new Array(s>1?s-1:0),r=1;r<s;r++)n[r-1]=arguments[r];for(let t=0,s=e.length;t<s;++t)e[t].apply(this,n)}return this}listeners(t){return this._callbacks=this._callbacks||{},this._callbacks["$"+t]||[]}hasListeners(t){return!!this.listeners(t).length}_on(t,e){return this._callbacks=this._callbacks||{},(this._callbacks["$"+t]=this._callbacks["$"+t]||[]).push(e),this}_off(t,e){if(this._callbacks=this._callbacks||{},!t&&!e)return this._callbacks={},this;const s=this._callbacks["$"+t];if(!s)return this;if(!e)return delete this._callbacks["$"+t],this;let n;for(let t=0;t<s.length;t++)if(n=s[t],n===e||n.fn===e){s.splice(t,1);break}return 0===s.length&&delete this._callbacks["$"+t],this}}var i=s(102);class o{constructor(){e()(this,"_promise",void 0),e()(this,"_resolve",void 0),e()(this,"_reject",void 0),this._promise=new Promise(((t,e)=>{this._resolve=t,this._reject=e}))}resolve(t){this._resolve(t)}reject(t){this._reject(t)}get promise(){return this._promise}}var a=function(t){return t[t.CLOSED=0]="CLOSED",t[t.OPENING=1]="OPENING",t[t.OPEN=2]="OPEN",t}(a||{});const c=a;var h=function(t){return t[t.SUBSCRIBED=0]="SUBSCRIBED",t[t.UNSUBSCRIBED=1]="UNSUBSCRIBED",t[t.SUBSCRIBING=2]="SUBSCRIBING",t}(h||{});class l extends r{constructor(t,s,n,r){super(),e()(this,"name",void 0),e()(this,"resourceId",void 0),e()(this,"virtualSocket",void 0),e()(this,"info",void 0),e()(this,"restore",void 0),e()(this,"subscribingState",h.UNSUBSCRIBED),this.name=s,this.virtualSocket=t,this.resourceId=n,this.info=r}setMessageIdRestore(t){return this.restore=i.v8.messageId().withId(t).build(),this.restore}async subscribe(t){void 0===t&&(t={}),this.subscribingState!==h.SUBSCRIBED?this.subscribingState!==h.SUBSCRIBING&&(this.subscribingState=h.SUBSCRIBING,await this.sendSubscribe(t)):setTimeout((()=>this.emitSubscriptionSucceeded(!0)),0)}setUnsubscribe(){this.subscribingState=h.UNSUBSCRIBED}async sendSubscribe(t){const e=await this.virtualSocket.send({type:"subscribe",channel:this.name,resourceId:this.resourceId,auth:"",restore:t.restoreStrategy||this.restore,info:this.info});"error"===e.type?this.emit("@duplexer:subscription_failed",e):(this.subscribingState=h.SUBSCRIBED,this.emitSubscriptionSucceeded(e.isSynced))}async unsubscribe(){await this.virtualSocket.send({type:"unsubscribe",channel:this.name,resourceId:this.resourceId}),this.subscribingState=h.UNSUBSCRIBED,this.emit("@duplexer:unsubscribe_succeeded")}send(t,e){return this.virtualSocket.send({type:"client_message",channel:this.name,resourceId:this.resourceId,event:t,payload:e},{affectState:!1})}emitSubscriptionSucceeded(t){this.emit("@duplexer:subscription_succeeded",{isSynced:t})}}class u{constructor(t){this.virtualSocket=t,e()(this,"channelsList",[])}add(t,e,s){const n=this.find(t,e);if(n)return n;const r=new l(this.virtualSocket,t,e,s);return this.channelsList.push(r),r}remove(t,e){const s=this.find(t,e);return this.channelsList=this.channelsList.filter((s=>s.name!==t||s.resourceId!==e)),s}find(t,e){return this.channelsList.find((s=>s.name===t&&s.resourceId===e))}all(){return this.channelsList}subscribeAll(){this.all().forEach((t=>t.subscribe()))}setUnsubscribeAll(){this.all().forEach((t=>t.setUnsubscribe()))}}function d(t,e,s){return t.on(e,s),{destroy:()=>t.off(e,s)}}const p="@user-inbox";class f extends r{constructor(t,s){let{appDefId:n,apiKey:r}=s;super(),this.duplexer=t,e()(this,"channels",void 0),e()(this,"appDefId",void 0),e()(this,"acks",{}),e()(this,"ids",1),e()(this,"connected",!1),e()(this,"sendBuffer",[]),e()(this,"socketListeners",[]),this.channels=new u(this),this.appDefId=n||r,this.restoreState(),this.listen(),this.open()}subscribe(t,e){void 0===e&&(e={});const s=this.channels.add(t,e.resourceId,e.info);return s.subscribe(e),s}subscribeToUserChannel(){return this.subscribe(p)}unsubscribe(t,e){this.channels.remove(t,e).unsubscribe()}unsubscribeFromUserChannel(){this.unsubscribe(p)}open(){const t=this.duplexer.connection.readyState;t===c.CLOSED?this.duplexer.connection.connect():t===c.OPEN&&setTimeout((()=>this.onConnect()),0)}disconnect(){this.send({type:"disconnect"}),this.socketListeners.forEach((t=>t.destroy())),this.socketListeners=[],this.onClose(),this.duplexer.closeVirtualSocket(this)}send(t,e){return new Promise((s=>{if(this.connected){const n=this.issueAckId();this.acks[n]=s,t.id=n,this.packet(t,e)}else this.sendBuffer.push({message:t,resolve:s})}))}whenConnected(){return new Promise((t=>{this.duplexer.connection.readyState===c.OPEN?t():this.once("@duplexer:connected",t)}))}onClose(t){this.restoreState(),this.emit("@duplexer:disconnected",t)}listen(){this.socketListeners=[d(this.duplexer,"open",this.onConnect.bind(this)),d(this.duplexer,"packet",this.onPacket.bind(this)),d(this.duplexer,"close",this.onClose.bind(this)),d(this.duplexer.connection,"connect_error",this.onConnectError.bind(this))]}onConnectError(t){this.emit("@duplexer:connect_error",t)}onPacket(t){if(t.ns===this.appDefId)switch(t.type){case"ack":case"error":this.onAck(t);break;case"message":this.onMessage(t)}}onConnect(){this.channels.subscribeAll(),this.connected=!0,this.emit("@duplexer:connected"),this.emitBuffered()}onMessage(t){const e=this.channels.find(t.channel,t.resourceId);if(void 0!==e){const s=e.setMessageIdRestore(t.id),n=(new i.AN).withNs(this.appDefId).withChannelName(e.name).withRestoreStrategy(s).build();this.duplexer.addRestoreOverride(n);try{e.emit(t.event,t.payload,function(t){let{user:e,publisher:s}=t;return{user:e,publisher:s}}(t))}catch{}}}onAck(t){const e=this.acks[t.id];"function"==typeof e&&(e(t),delete this.acks[t.id])}packet(t,e){t.ns=this.appDefId,this.duplexer.packet(t,e)}emitBuffered(){this.sendBuffer.forEach((t=>{const{message:e,resolve:s}=t;this.send(e).then(s)})),this.sendBuffer=[]}issueAckId(){return(this.ids++).toString()}restoreState(){this.connected=!1,this.channels.setUnsubscribeAll(),this.sendBuffer=[],this.acks={}}}class v{constructor(t){e()(this,"_transportsManager",void 0),e()(this,"_network",void 0),this._transportsManager=t.transportsManager,this._network=t.network}get network(){return this._network}get transportsManager(){return this._transportsManager}}class m extends r{constructor(){super(),this.listenConnectionStateChanges()}connectionIsOnline(){this.emit("online")}}class y extends m{listenConnectionStateChanges(){"undefined"!=typeof window&&window.addEventListener("online",(()=>this.connectionIsOnline()))}}class b extends r{constructor(t){super(),e()(this,"keepAlive",void 0),e()(this,"payload",void 0),e()(this,"readyState",c.CLOSED),e()(this,"sessionId",void 0),this.restoreState(),this.keepAlive=t.keepAlive}get keepAliveEnabled(){return this.keepAlive}send(t,e){this.write(t,e)}updatePayload(t){this.payload=t}close(t){const e=t?this.transportError(t):void 0;this.closeClient(),this.onTransportClose(e)}transportError(t){return{...t,transport:this.name}}onData(t){Array.isArray(t)?t.forEach((t=>this.handlePacket(t))):this.handlePacket(t)}onTransportClose(t){this.readyState!==c.CLOSED?(this.restoreState(),this.emit("close",t)):this.emit("connect_error",t)}restoreState(){this.readyState=c.CLOSED,this.sessionId=""}handlePacket(t){if("connection_established"===t.type)this.sessionId=t.sessionId,this.readyState=c.OPEN,this.emit("open",t);else this.emit("packet",t)}}async function g(t,e){const s=new URLSearchParams;if(t){const e=await t.getInstance();s.append("v","2"),s.append("instance",e)}return e&&s.append("siteRevision",e),s}function w(t,e){const s=e.toString();return`${t}${""===s?"":`?${s}`}`}class S extends Error{constructor(t,e){super(t),this.reason=t,this.response=e,Object.setPrototypeOf(this,S.prototype)}getStatus(){return this.response&&this.response.status||-1}}function k(t){return"canceled"===t.reason}async function _(t,e,s){var n;void 0===s&&(s={});const r={...s.headers};void 0!==e&&(r["Content-Type"]="application/json;charset=utf-8");const i=function(t){const e="undefined"!=typeof window&&window.document&&window.document.cookie.match(new RegExp("(^|;\\s*)("+t+")=([^;]*)"));return e?decodeURIComponent(e[3]):void 0}("XSRF-TOKEN");void 0!==i&&(r["X-XSRF-TOKEN"]=i);const o={method:"POST",headers:r,body:void 0===e?null:JSON.stringify(e),signal:null==(n=s.cancelToken)?void 0:n.signal,credentials:s.withCredentials?"include":"same-origin"};let a;try{a=await fetch(t,o)}catch(t){if("AbortError"===t.name)throw new S("canceled");throw new S("network error")}const c=a.status;let h;try{h=await a.text()}catch(t){throw new S("network error",{data:void 0,status:c})}const l={data:function(t){try{return JSON.parse(t)}catch{return t}}(h),status:c};if(!function(t){return t>=200&&t<300}(c))throw new S("server error",l);return l}function T(t){return(null==t||null==t.getHeaders?void 0:t.getHeaders())??{}}var C=s(158);class O extends b{constructor(t,s,n){void 0===s&&(s=null),super({keepAlive:!0}),this.url=t,this.instanceUpdater=s,this.siteRevision=n,e()(this,"ws",void 0)}static isSupported(){return"undefined"!=typeof WebSocket}get name(){return"websocket"}async open(){const t=await g(this.instanceUpdater,this.siteRevision),e=w(this.url,t),s=void 0!==C&&"true"===C.env.DUPLEXER_NODE_ENV?{headers:(n=this.instanceUpdater,{"x-wix-artifact-id":"com.wixpress.infra.wix-duplexer-sockets-server",...T(n)})}:void 0;var n;this.closeClient(),this.ws=new WebSocket(e,s),this.listen()}closeClient(){this.ws&&(this.cleanWebSocketHooks(),this.ws.close(1e3))}write(t){const e=JSON.stringify(t);this.ws.send(e)}listen(){this.ws.onclose=t=>{const e=!t.wasClean,s=this.transportError({status:t.code,message:t.reason,recoverable:e});this.cleanWebSocketHooks(),this.onTransportClose(s)},this.ws.onmessage=t=>{const e=JSON.parse(t.data);this.onData(e)},this.ws.onerror=()=>{}}cleanWebSocketHooks(){this.ws&&(this.ws.onmessage=()=>{},this.ws.onclose=()=>{})}}const E={};function x(){const t=new o,e=new AbortController;return{cancel:()=>{e.abort(),t.resolve(E)},token:{promise:t.promise,signal:e.signal}}}class I extends b{constructor(t,s,n){void 0===s&&(s=null),super({keepAlive:!1}),this.baseUrl=t,this.instanceUpdater=s,this.siteRevision=n,e()(this,"commandsCancelTokens",[]),e()(this,"pollCancelToken",void 0),this.baseUrl=this.baseUrl.replace(/\/+$/,"")}get name(){return"http_long_polling"}async open(){await this.poll()}closeClient(){this.commandsCancelTokens.forEach((t=>t.cancel())),this.abortOngoingPollInterval()}async write(t,e){let{affectState:s=!0}=void 0===e?{}:e;try{const e=x();this.commandsCancelTokens.push(e);const n=await this.buildUrl("http-command"),{data:r}=await _(n,t,{cancelToken:e.token,headers:T(this.instanceUpdater)});this.removeCancelToken(e),this.onData(r),s&&this.startPollInterval()}catch(t){k(t)||this.closeOnTransportFailure(t)}}abortOngoingPollInterval(){this.pollCancelToken&&this.pollCancelToken.cancel(),this.pollCancelToken=null}async startPollInterval(){if(this.abortOngoingPollInterval(),this.readyState===c.OPEN){const{continuable:t}=await this.poll();t&&this.startPollInterval()}}async poll(){const t=await this.buildUrl("http");this.pollCancelToken=x();const e=_(t,this.payload,{cancelToken:this.pollCancelToken.token,headers:T(this.instanceUpdater)});try{const t=await async function(t){try{const{data:e}=await t;return{continuable:!0,data:e}}catch(t){if(k(t))return{continuable:!1};if(function(t){return 504===t.getStatus()}(t))return{continuable:!0};throw t}}(e);return t.data&&this.onData(t.data),t}catch(t){return this.closeOnTransportFailure(t),{continuable:!1}}}async buildUrl(t){const e=await g(this.instanceUpdater,this.siteRevision);this.sessionId&&e.append("sessionId",this.sessionId);const s=w(t,e);return`${this.baseUrl}/${s}`}closeOnTransportFailure(t){const e=t.getStatus(),s=this.transportError({status:e,message:t.message,recoverable:(n=e,[401].every((t=>t!==n)))});var n;this.onTransportClose(s)}removeCancelToken(t){const e=this.commandsCancelTokens.indexOf(t);this.commandsCancelTokens.splice(e,1)}}class R extends r{constructor(t){super(),this.strategies=t,e()(this,"_transport",void 0),e()(this,"disposables",[]),e()(this,"cancelToken",void 0),e()(this,"readyState",c.CLOSED)}get transport(){return this._transport}async connect(){let t;if(this.readyState!==c.CLOSED)return{success:!1};this.cancelToken=new o,this.readyState=c.OPENING,this.listenAndEmitConnectErrorsInAllTransportsOnConnecting();try{t=await this.connectToFirstToRespondStrategy()}catch(t){return{success:!1}}return this.cancelToken=null,this.removeListeners(),this.abortStrategiesWithNoOpenTransport(),this.listenEventsOfActiveTransport(),function(t){return{success:!0,connectionEstablishedPacket:t}}(t)}close(){this.isOpen()?this.transport.close():this.isOpening()&&(this.cancelToken&&this.cancelToken.reject(),this.onClose(),this.strategies.forEach((t=>t.abort())))}isOpen(){return this.readyState===c.OPEN}isClosed(){return this.readyState===c.CLOSED}isOpening(){return this.readyState===c.OPENING}async connectToFirstToRespondStrategy(){const{transport:t,connectionEstablishedPacket:e}=await Promise.race([...this.strategies.map((t=>t.connect())),this.cancelToken.promise]);return this._transport=t,this.readyState=c.OPEN,e}onClose(t){this.readyState=c.CLOSED,this._transport=null,this.cancelToken=null,this.removeListeners(),this.emit("close",t)}abortStrategiesWithNoOpenTransport(){this.strategies.filter((t=>t.transport.readyState!==c.OPEN)).forEach((t=>t.abort()))}listenAndEmitConnectErrorsInAllTransportsOnConnecting(){this.disposables=this.strategies.map((t=>d(t,"connect_error",(t=>{t.recoverable?this.emit("connect_error",t):this.close()}))))}listenEventsOfActiveTransport(){this.disposables=[d(this.transport,"close",(t=>{this.onClose(t)})),d(this.transport,"packet",(t=>{this.onData(t)}))]}removeListeners(){this.disposables.forEach((t=>t.destroy())),this.disposables=[]}onData(t){switch(t.type){case"message":case"ack":case"error":case"UpdateRestoreStrategyOverrides":this.emit("message",t)}}}var P=s(830),D=s.n(P);class U extends r{constructor(t,s){super(),this._transport=t,this.opts=s,e()(this,"connectDelayTimeoutId",void 0),e()(this,"disposables",[]),e()(this,"backoff",new(D())({max:6e4})),e()(this,"cancelToken",void 0)}get transport(){return this._transport}async connect(){var t;this.cancelToken=new o,this.opts.delay>0&&await Promise.race([(t=this.opts.delay,new Promise((e=>setTimeout(e,t)))),this.cancelToken.promise]);const e=await Promise.race([this.connectWithBackoff(),this.cancelToken.promise]);return{transport:this.transport,connectionEstablishedPacket:e}}abort(){clearTimeout(this.connectDelayTimeoutId),this.cancelToken&&this.cancelToken.reject(),this.cancelToken=null,this.removeListeners(),this.backoff.reset(),this.transport.close()}async connectWithBackoff(){return this.backoff.reset(),new Promise((t=>{this.disposables=[d(this.transport,"open",(e=>{this.removeListeners(),t(e)})),d(this.transport,"connect_error",(t=>{clearTimeout(this.connectDelayTimeoutId),t.recoverable&&(this.connectDelayTimeoutId=setTimeout((()=>this.transport.open()),this.backoff.duration())),this.emit("connect_error",t)}))],this.transport.open()}))}removeListeners(){this.disposables.forEach((t=>t.destroy())),this.disposables=[]}}class N{constructor(t){this.transport=t,e()(this,"opts",{delay:0,backoff:0})}withDelay(t){return this.opts.delay=t,this}withBackoff(t){return this.opts.backoff=t,this}build(){return new U(this.transport,this.opts)}}function B(t){return new N(t)}const A=150;function M(t){return B(t).withBackoff(A).build()}var L=s(158);function j(t){var e;let s=[];const n=function(t){const e=`${$()?"wss://":"ws://"}${t.baseUrl}`;return new O(e,t.instanceUpdater,t.siteRevision)}(t),r=function(t){const e=(s=t.baseUrl,`${$()?"https://":"http://"}${s}`);var s;return new I(e,t.instanceUpdater,t.siteRevision)}(t),i=void 0!==L&&"string"==typeof(null==(e=L.env)?void 0:e.DUPLEXER_FORCED_TRANSPORT)?L.env.DUPLEXER_FORCED_TRANSPORT:void 0;var o;return s="websocket"===i?[M(n)]:"http"===i?[M(r)]:O.isSupported()?[M(n),(o=r,B(o).withDelay(4e3).withBackoff(A).build())]:[M(r)],new R(s)}function $(){return"undefined"!=typeof self&&"http:"!==self.location.protocol}class F{constructor(t,s){this.timeout=t,this.handler=s,e()(this,"timer",void 0)}schedule(){this.timer=setTimeout(this.handler,this.timeout)}cancel(){clearTimeout(this.timer)}}class W extends r{constructor(t,s){super(),this.transport=t,this.opts=s,e()(this,"timeoutTimer",void 0),e()(this,"intervalTimer",void 0),e()(this,"started",!1),d(this.transport,"packet",(()=>this.started&&this.schedule()))}schedule(){this.dispose(),this.started=!0,this.intervalTimer=new F(this.opts.pingInterval,(()=>this.sendHeartbeat())),this.intervalTimer.schedule()}dispose(){this.started=!1,this.intervalTimer&&this.intervalTimer.cancel(),this.timeoutTimer&&this.timeoutTimer.cancel()}sendHeartbeat(){this.ping(),this.timeoutTimer=new F(this.opts.pingTimeout,(()=>{this.transport.close({status:0,message:"keep alive has not recieved pong in defined timeframe",recoverable:!0})})),this.timeoutTimer.schedule()}ping(){this.transport.send({type:"ping"},{affectState:!1})}}class G extends Error{constructor(t){super(t),this.name=this.constructor.name}}class H extends r{constructor(t){super(),this.opts=t,e()(this,"keepAlive",void 0),e()(this,"autoConnect",void 0),e()(this,"environment",void 0),e()(this,"timeline",void 0),e()(this,"autoConnectEnabled",void 0),this.environment=t.environment,this.timeline=t.timeline,this.autoConnectEnabled=t.autoConnectEnabed,this.listenNeworkStateChanges(),this.listenTransportEvents()}get sessionId(){return this.transport.sessionId}updatePayload(t){this.transport.updatePayload(t)}send(t,e){this.transport.send(t,e)}close(){this.autoConnect=!1,this.environment.transportsManager.close(),this.dispose()}get readyState(){return this.environment.transportsManager.readyState}async connect(){this.autoConnect=this.autoConnectEnabled;const t=await this.environment.transportsManager.connect();t.success&&(this.keepAlive=new W(this.transport,this.opts),this.transport.keepAliveEnabled&&this.keepAlive.schedule(),this.timeline.log({type:"connect_succeeded",data:{transport:this.transport.name}}),this.emit("open",t.connectionEstablishedPacket))}isClosed(){return this.environment.transportsManager.isClosed()}isOpen(){return this.environment.transportsManager.isOpen()}get transport(){return function(t,e){if(void 0===t)throw new G(e)}(this.environment.transportsManager.transport,"transport was not initialized yet"),this.environment.transportsManager.transport}shouldReconnect(t){return this.autoConnect&&(null==t?void 0:t.recoverable)}listenNeworkStateChanges(){this.environment.network.on("online",(()=>{this.autoConnect&&!this.isOpen()&&(this.timeline.log({type:"network_state_changed",data:"online"}),this.close(),this.connect())}))}listenTransportEvents(){d(this.environment.transportsManager,"connect_error",(t=>{this.timeline.log({type:"connect_error",data:t}),this.emit("connect_error",t)})),d(this.environment.transportsManager,"close",(t=>{this.dispose(),this.maybeLogDisconnectionError(t),this.shouldReconnect(t)&&this.connect(),this.emit("close",t)})),d(this.environment.transportsManager,"message",(t=>{this.emit("message",t)}))}dispose(){this.keepAlive&&this.keepAlive.dispose()}maybeLogDisconnectionError(t){(function(t){return void 0!==t&&void 0!==t.transport})(t)&&this.timeline.log({type:"disconnect_error",data:t})}}class X{log(){}}function J(){return new X}class K extends r{constructor(t,s){let{pingInterval:n=3e4,pingTimeout:r=5e3,timeline:a=J(),autoConnect:c=!0,instanceUpdater:h,siteRevision:l}=void 0===s?{}:s;super(),e()(this,"virtualSockets",[]),e()(this,"environment",void 0),e()(this,"payloadBuilder",new i.Du),e()(this,"connectionServerTimeDeferred",new o),e()(this,"connection",void 0),this.environment="string"==typeof t?function(t){const e=new y,s=j({baseUrl:t.url,instanceUpdater:t.instanceUpdater,siteRevision:t.siteRevision});return new v({transportsManager:s,network:e})}({url:t,instanceUpdater:h,siteRevision:l}):t,this.connection=new H({pingTimeout:r,pingInterval:n,environment:this.environment,timeline:a,autoConnectEnabed:c}),this.listen()}triggerInstanceChanged(){this.close(),this.connection.connect()}connect(t){const e=new f(this,t);return this.virtualSockets.push(e),e}getConnectionServerTime(){return this.connectionServerTimeDeferred.promise}close(){this.connection.close()}addRestoreOverride(t){const e=this.payloadBuilder.withOverrideRestoreStrategy(t).build();this.connection.updatePayload(e)}closeVirtualSocket(t){this.virtualSockets=this.virtualSockets.filter((e=>e!==t)),0===this.virtualSockets.length&&this.close()}packet(t,e){this.connection.send(t,e)}listen(){this.connection.on("open",(t=>{const e=i.v8.timestamp().withT(t.t).build();this.payloadBuilder.withDefaultRestoreStrategy(e),this.connection.updatePayload(this.payloadBuilder.build()),this.emit("open"),this.connectionServerTimeDeferred.resolve(t.t)})),this.connection.on("message",(t=>{if("UpdateRestoreStrategyOverrides"===t.type)this.overwriteRestoreOverrides(t.overrides);else this.emit("packet",t)})),this.connection.on("close",this.onClose.bind(this))}onClose(t){this.emit("close",t),this.connectionServerTimeDeferred=new o}overwriteRestoreOverrides(t){this.payloadBuilder=new i.Du,t.forEach((t=>this.payloadBuilder.withOverrideRestoreStrategy(t)));const e=this.payloadBuilder.build();this.connection.updatePayload(e)}}})(),n})()));
1
+ !function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define("Duplexer",[],e):"object"==typeof exports?exports.Duplexer=e():t.Duplexer=e()}("undefined"!=typeof self?self:this,(()=>(()=>{var t={830:t=>{function e(t){t=t||{},this.ms=t.min||100,this.max=t.max||1e4,this.factor=t.factor||2,this.jitter=t.jitter>0&&t.jitter<=1?t.jitter:0,this.attempts=0}t.exports=e,e.prototype.duration=function(){var t=this.ms*Math.pow(this.factor,this.attempts++);if(this.jitter){var e=Math.random(),s=Math.floor(e*this.jitter*t);t=0==(1&Math.floor(10*e))?t-s:t+s}return 0|Math.min(t,this.max)},e.prototype.reset=function(){this.attempts=0},e.prototype.setMin=function(t){this.ms=t},e.prototype.setMax=function(t){this.max=t},e.prototype.setJitter=function(t){this.jitter=t}},158:t=>{var e,s,n=t.exports={};function r(){throw new Error("setTimeout has not been defined")}function i(){throw new Error("clearTimeout has not been defined")}function o(t){if(e===setTimeout)return setTimeout(t,0);if((e===r||!e)&&setTimeout)return e=setTimeout,setTimeout(t,0);try{return e(t,0)}catch(s){try{return e.call(null,t,0)}catch(s){return e.call(this,t,0)}}}!function(){try{e="function"==typeof setTimeout?setTimeout:r}catch(t){e=r}try{s="function"==typeof clearTimeout?clearTimeout:i}catch(t){s=i}}();var a,c=[],h=!1,l=-1;function u(){h&&a&&(h=!1,a.length?c=a.concat(c):l=-1,c.length&&d())}function d(){if(!h){var t=o(u);h=!0;for(var e=c.length;e;){for(a=c,c=[];++l<e;)a&&a[l].run();l=-1,e=c.length}a=null,h=!1,function(t){if(s===clearTimeout)return clearTimeout(t);if((s===i||!s)&&clearTimeout)return s=clearTimeout,clearTimeout(t);try{return s(t)}catch(e){try{return s.call(null,t)}catch(e){return s.call(this,t)}}}(t)}}function p(t,e){this.fun=t,this.array=e}function f(){}n.nextTick=function(t){var e=new Array(arguments.length-1);if(arguments.length>1)for(var s=1;s<arguments.length;s++)e[s-1]=arguments[s];c.push(new p(t,e)),1!==c.length||h||o(d)},p.prototype.run=function(){this.fun.apply(null,this.array)},n.title="browser",n.browser=!0,n.env={},n.argv=[],n.version="",n.versions={},n.on=f,n.addListener=f,n.once=f,n.off=f,n.removeListener=f,n.removeAllListeners=f,n.emit=f,n.prependListener=f,n.prependOnceListener=f,n.listeners=function(t){return[]},n.binding=function(t){throw new Error("process.binding is not supported")},n.cwd=function(){return"/"},n.chdir=function(t){throw new Error("process.chdir is not supported")},n.umask=function(){return 0}},102:(t,e,s)=>{"use strict";e.AN=e.Du=e.v8=void 0;var n=s(120);e.v8=n.default;var r=s(880);e.Du=r.default;var i=s(131);e.AN=i.default},131:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var s=function(){function t(){}return t.prototype.withNs=function(t){return this.ns=t,this},t.prototype.withChannelName=function(t){return this.channelName=t,this},t.prototype.withRestoreStrategy=function(t){return this.restore=t,this},t.prototype.build=function(){return{ns:this.ns,channel:this.channelName,override:this.restore}},t}();e.default=s},880:function(t,e){"use strict";var s=this&&this.__assign||function(){return s=Object.assign||function(t){for(var e,s=1,n=arguments.length;s<n;s++)for(var r in e=arguments[s])Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t},s.apply(this,arguments)};Object.defineProperty(e,"__esModule",{value:!0});var n=function(){function t(){this.overrideRestoreStrategies=[]}return t.prototype.withOverrideRestoreStrategy=function(t){return this.overrideRestoreStrategies=this.overrideRestoreStrategies.filter((function(e){return e.channel!==t.channel||e.ns!==t.ns})),this.overrideRestoreStrategies.push(t),this},t.prototype.withDefaultRestoreStrategy=function(t){return this.defaultRestoreStrategy=t,this},t.prototype.build=function(){return new r(this.defaultRestoreStrategy,this.overrideRestoreStrategies).toProtocolFormat()},t}();e.default=n;var r=function(){function t(t,e){this.defaultRestoreStrategy=t,this.overrideRestoreStrategies=e}return t.prototype.toProtocolFormat=function(){var t={};return void 0!==this.defaultRestoreStrategy&&(t.restore={default:this.defaultRestoreStrategy}),this.hasOverrides()&&(t.restore=s(s({},t.restore),{overrides:this.overrideRestoreStrategies})),t},t.prototype.hasOverrides=function(){return this.overrideRestoreStrategies.length>0},t}()},277:(t,e,s)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=s(89),r=function(){function t(){}return t.prototype.build=function(){return new n.default("All")},t}();e.default=r},200:function(t,e,s){"use strict";var n,r=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var s in e)Object.prototype.hasOwnProperty.call(e,s)&&(t[s]=e[s])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function s(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(s.prototype=e.prototype,new s)});Object.defineProperty(e,"__esModule",{value:!0}),e.MessageIdRestoreStrategy=void 0;var i=s(89),o=function(){function t(){}return t.prototype.withId=function(t){return this.id=t,this},t.prototype.build=function(){return new a(this.id)},t}();e.default=o;var a=function(t){function e(e){var s=t.call(this,"message_id")||this;return s.id=e,s}return r(e,t),e}(i.default);e.MessageIdRestoreStrategy=a},89:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var s=function(t){this.strategy=t};e.default=s},120:(t,e,s)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=s(277),r=s(200),i=s(678),o=function(){function t(){}return t.all=function(){return new n.default},t.messageId=function(){return new r.default},t.timestamp=function(){return new i.default},t}();e.default=o},678:function(t,e,s){"use strict";var n,r=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var s in e)Object.prototype.hasOwnProperty.call(e,s)&&(t[s]=e[s])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function s(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(s.prototype=e.prototype,new s)});Object.defineProperty(e,"__esModule",{value:!0}),e.TimestampRestoreStrategy=void 0;var i=s(89),o=function(){function t(){}return t.prototype.withT=function(t){return this.t=t,this},t.prototype.build=function(){return new a(this.t)},t}();e.default=o;var a=function(t){function e(e){var s=t.call(this,"Timestamp")||this;return s.t=e,s}return r(e,t),e}(i.default);e.TimestampRestoreStrategy=a},213:(t,e,s)=>{var n=s(174);t.exports=function(t,e,s){return(e=n(e))in t?Object.defineProperty(t,e,{value:s,enumerable:!0,configurable:!0,writable:!0}):t[e]=s,t},t.exports.__esModule=!0,t.exports.default=t.exports},662:(t,e,s)=>{var n=s(114).default;t.exports=function(t,e){if("object"!=n(t)||!t)return t;var s=t[Symbol.toPrimitive];if(void 0!==s){var r=s.call(t,e||"default");if("object"!=n(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)},t.exports.__esModule=!0,t.exports.default=t.exports},174:(t,e,s)=>{var n=s(114).default,r=s(662);t.exports=function(t){var e=r(t,"string");return"symbol"==n(e)?e:e+""},t.exports.__esModule=!0,t.exports.default=t.exports},114:t=>{function e(s){return t.exports=e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},t.exports.__esModule=!0,t.exports.default=t.exports,e(s)}t.exports=e,t.exports.__esModule=!0,t.exports.default=t.exports}},e={};function s(n){var r=e[n];if(void 0!==r)return r.exports;var i=e[n]={exports:{}};return t[n].call(i.exports,i,i.exports,s),i.exports}s.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return s.d(e,{a:e}),e},s.d=(t,e)=>{for(var n in e)s.o(e,n)&&!s.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},s.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),s.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var n={};return(()=>{"use strict";s.r(n),s.d(n,{Duplexer:()=>K});var t=s(213),e=s.n(t);class r{constructor(){e()(this,"_callbacks",void 0)}on(t,e){return this._on(t,e)}addEventListener(t,e){return this._on(t,e)}once(t,e){function s(){this.off(t,s);for(var n=arguments.length,r=new Array(n),i=0;i<n;i++)r[i]=arguments[i];e.apply(this,r)}return s.fn=e,this.on(t,s),this}off(t,e){return this._off(t,e)}removeEventListener(t,e){return this._off(t,e)}removeListener(t){return this._off(t)}removeAllListeners(){return this._off()}emit(t){this._callbacks=this._callbacks||{};let e=this._callbacks["$"+t];if(e){e=e.slice(0);for(var s=arguments.length,n=new Array(s>1?s-1:0),r=1;r<s;r++)n[r-1]=arguments[r];for(let t=0,s=e.length;t<s;++t)e[t].apply(this,n)}return this}listeners(t){return this._callbacks=this._callbacks||{},this._callbacks["$"+t]||[]}hasListeners(t){return!!this.listeners(t).length}_on(t,e){return this._callbacks=this._callbacks||{},(this._callbacks["$"+t]=this._callbacks["$"+t]||[]).push(e),this}_off(t,e){if(this._callbacks=this._callbacks||{},!t&&!e)return this._callbacks={},this;const s=this._callbacks["$"+t];if(!s)return this;if(!e)return delete this._callbacks["$"+t],this;let n;for(let t=0;t<s.length;t++)if(n=s[t],n===e||n.fn===e){s.splice(t,1);break}return 0===s.length&&delete this._callbacks["$"+t],this}}var i=s(102);class o{constructor(){e()(this,"_promise",void 0),e()(this,"_resolve",void 0),e()(this,"_reject",void 0),this._promise=new Promise(((t,e)=>{this._resolve=t,this._reject=e}))}resolve(t){this._resolve(t)}reject(t){this._reject(t)}get promise(){return this._promise}}var a=function(t){return t[t.CLOSED=0]="CLOSED",t[t.OPENING=1]="OPENING",t[t.OPEN=2]="OPEN",t}(a||{});const c=a;var h=function(t){return t[t.SUBSCRIBED=0]="SUBSCRIBED",t[t.UNSUBSCRIBED=1]="UNSUBSCRIBED",t[t.SUBSCRIBING=2]="SUBSCRIBING",t}(h||{});class l extends r{constructor(t,s,n,r){super(),e()(this,"name",void 0),e()(this,"resourceId",void 0),e()(this,"virtualSocket",void 0),e()(this,"info",void 0),e()(this,"restore",void 0),e()(this,"subscribingState",h.UNSUBSCRIBED),this.name=s,this.virtualSocket=t,this.resourceId=n,this.info=r}setMessageIdRestore(t){return this.restore=i.v8.messageId().withId(t).build(),this.restore}async subscribe(t){void 0===t&&(t={}),this.subscribingState!==h.SUBSCRIBED?this.subscribingState!==h.SUBSCRIBING&&(this.subscribingState=h.SUBSCRIBING,await this.sendSubscribe(t)):setTimeout((()=>this.emitSubscriptionSucceeded(!0)),0)}setUnsubscribe(){this.subscribingState=h.UNSUBSCRIBED}async sendSubscribe(t){const e=await this.virtualSocket.send({type:"subscribe",channel:this.name,resourceId:this.resourceId,auth:"",restore:t.restoreStrategy||this.restore,info:this.info});"error"===e.type?this.emit("@duplexer:subscription_failed",e):(this.subscribingState=h.SUBSCRIBED,this.emitSubscriptionSucceeded(e.isSynced))}async unsubscribe(){await this.virtualSocket.send({type:"unsubscribe",channel:this.name,resourceId:this.resourceId}),this.subscribingState=h.UNSUBSCRIBED,this.emit("@duplexer:unsubscribe_succeeded")}send(t,e){return this.virtualSocket.send({type:"client_message",channel:this.name,resourceId:this.resourceId,event:t,payload:e},{affectState:!1})}emitSubscriptionSucceeded(t){this.emit("@duplexer:subscription_succeeded",{isSynced:t})}}class u{constructor(t){this.virtualSocket=t,e()(this,"channelsList",[])}add(t,e,s){const n=this.find(t,e);if(n)return n;const r=new l(this.virtualSocket,t,e,s);return this.channelsList.push(r),r}remove(t,e){const s=this.find(t,e);return this.channelsList=this.channelsList.filter((s=>s.name!==t||s.resourceId!==e)),s}find(t,e){return this.channelsList.find((s=>s.name===t&&s.resourceId===e))}all(){return this.channelsList}subscribeAll(){this.all().forEach((t=>t.subscribe()))}setUnsubscribeAll(){this.all().forEach((t=>t.setUnsubscribe()))}}function d(t,e,s){return t.on(e,s),{destroy:()=>t.off(e,s)}}const p="@user-inbox";class f extends r{constructor(t,s){let{appDefId:n,apiKey:r}=s;super(),this.duplexer=t,e()(this,"channels",void 0),e()(this,"appDefId",void 0),e()(this,"acks",{}),e()(this,"ids",1),e()(this,"connected",!1),e()(this,"sendBuffer",[]),e()(this,"socketListeners",[]),this.channels=new u(this),this.appDefId=n||r,this.restoreState(),this.listen(),this.open()}subscribe(t,e){void 0===e&&(e={});const s=this.channels.add(t,e.resourceId,e.info);return s.subscribe(e),s}subscribeToUserChannel(){return this.subscribe(p)}unsubscribe(t,e){this.channels.remove(t,e).unsubscribe()}unsubscribeFromUserChannel(){this.unsubscribe(p)}open(){const t=this.duplexer.connection.readyState;t===c.CLOSED?this.duplexer.connection.connect():t===c.OPEN&&setTimeout((()=>this.onConnect()),0)}disconnect(){this.send({type:"disconnect"}),this.socketListeners.forEach((t=>t.destroy())),this.socketListeners=[],this.onClose(),this.duplexer.closeVirtualSocket(this)}send(t,e){return new Promise((s=>{if(this.connected){const n=this.issueAckId();this.acks[n]=s,t.id=n,this.packet(t,e)}else this.sendBuffer.push({message:t,resolve:s})}))}whenConnected(){return new Promise((t=>{this.duplexer.connection.readyState===c.OPEN?t():this.once("@duplexer:connected",t)}))}onClose(t){this.restoreState(),this.emit("@duplexer:disconnected",t)}listen(){this.socketListeners=[d(this.duplexer,"open",this.onConnect.bind(this)),d(this.duplexer,"packet",this.onPacket.bind(this)),d(this.duplexer,"close",this.onClose.bind(this)),d(this.duplexer.connection,"connect_error",this.onConnectError.bind(this))]}onConnectError(t){this.emit("@duplexer:connect_error",t)}onPacket(t){if(t.ns===this.appDefId)switch(t.type){case"ack":case"error":this.onAck(t);break;case"message":this.onMessage(t)}}onConnect(){this.channels.subscribeAll(),this.connected=!0,this.emit("@duplexer:connected"),this.emitBuffered()}onMessage(t){const e=this.channels.find(t.channel,t.resourceId);if(void 0!==e){const s=e.setMessageIdRestore(t.id),n=(new i.AN).withNs(this.appDefId).withChannelName(e.name).withRestoreStrategy(s).build();this.duplexer.addRestoreOverride(n);try{e.emit(t.event,t.payload,function(t){let{user:e,publisher:s}=t;return{user:e,publisher:s}}(t))}catch{}}}onAck(t){const e=this.acks[t.id];"function"==typeof e&&(e(t),delete this.acks[t.id])}packet(t,e){t.ns=this.appDefId,this.duplexer.packet(t,e)}emitBuffered(){this.sendBuffer.forEach((t=>{const{message:e,resolve:s}=t;this.send(e).then(s)})),this.sendBuffer=[]}issueAckId(){return(this.ids++).toString()}restoreState(){this.connected=!1,this.channels.setUnsubscribeAll(),this.sendBuffer=[],this.acks={}}}class v{constructor(t){e()(this,"_transportsManager",void 0),e()(this,"_network",void 0),this._transportsManager=t.transportsManager,this._network=t.network}get network(){return this._network}get transportsManager(){return this._transportsManager}}class m extends r{constructor(){super(),this.listenConnectionStateChanges()}connectionIsOnline(){this.emit("online")}}class y extends m{listenConnectionStateChanges(){"undefined"!=typeof window&&window.addEventListener("online",(()=>this.connectionIsOnline()))}}class b extends r{constructor(t){super(),e()(this,"keepAlive",void 0),e()(this,"payload",void 0),e()(this,"readyState",c.CLOSED),e()(this,"sessionId",void 0),this.restoreState(),this.keepAlive=t.keepAlive}get keepAliveEnabled(){return this.keepAlive}send(t,e){this.write(t,e)}updatePayload(t){this.payload=t}close(t){const e=t?this.transportError(t):void 0;this.closeClient(),this.onTransportClose(e)}transportError(t){return{...t,transport:this.name}}onData(t){Array.isArray(t)?t.forEach((t=>this.handlePacket(t))):this.handlePacket(t)}onTransportClose(t){this.readyState!==c.CLOSED?(this.restoreState(),this.emit("close",t)):this.emit("connect_error",t)}restoreState(){this.readyState=c.CLOSED,this.sessionId=""}handlePacket(t){if("connection_established"===t.type)this.sessionId=t.sessionId,this.readyState=c.OPEN,this.emit("open",t);else this.emit("packet",t)}}async function g(t,e){const s=new URLSearchParams;if(t){const e=await t.getInstance();s.append("v","2"),s.append("instance",e)}return e&&s.append("siteRevision",e),s}function w(t,e){const s=e.toString();return`${t}${""===s?"":`?${s}`}`}class S extends Error{constructor(t,e){super(t),this.reason=t,this.response=e,Object.setPrototypeOf(this,S.prototype)}getStatus(){return this.response&&this.response.status||-1}}function k(t){return"canceled"===t.reason}async function _(t,e,s){var n;void 0===s&&(s={});const r={...s.headers};void 0!==e&&(r["Content-Type"]="application/json;charset=utf-8");const i=function(t){const e="undefined"!=typeof window&&window.document&&window.document.cookie.match(new RegExp("(^|;\\s*)("+t+")=([^;]*)"));return e?decodeURIComponent(e[3]):void 0}("XSRF-TOKEN");void 0!==i&&(r["X-XSRF-TOKEN"]=i);const o={method:"POST",headers:r,body:void 0===e?null:JSON.stringify(e),signal:null==(n=s.cancelToken)?void 0:n.signal,credentials:s.withCredentials?"include":"same-origin"};let a;try{a=await fetch(t,o)}catch(t){if("AbortError"===t.name)throw new S("canceled");throw new S("network error")}const c=a.status;let h;try{h=await a.text()}catch(t){throw new S("network error",{data:void 0,status:c})}const l={data:function(t){try{return JSON.parse(t)}catch{return t}}(h),status:c};if(!function(t){return t>=200&&t<300}(c))throw new S("server error",l);return l}function T(t){return(null==t||null==t.getHeaders?void 0:t.getHeaders())??{}}var C=s(158);class O extends b{constructor(t,s,n){void 0===s&&(s=null),super({keepAlive:!0}),this.url=t,this.instanceUpdater=s,this.siteRevision=n,e()(this,"ws",void 0)}static isSupported(){return"undefined"!=typeof WebSocket}get name(){return"websocket"}async open(){const t=await g(this.instanceUpdater,this.siteRevision),e=w(this.url,t),s=void 0!==C&&"true"===C.env.DUPLEXER_NODE_ENV?{headers:(n=this.instanceUpdater,{"x-wix-artifact-id":"com.wixpress.infra.wix-duplexer-sockets-server",...T(n)})}:void 0;var n;this.closeClient(),this.ws=new WebSocket(e,s),this.listen()}closeClient(){this.ws&&(this.cleanWebSocketHooks(),this.ws.close(1e3))}write(t){const e=JSON.stringify(t);this.ws.send(e)}listen(){this.ws.onclose=t=>{const e=!t.wasClean,s=this.transportError({status:t.code,message:t.reason,recoverable:e});this.cleanWebSocketHooks(),this.onTransportClose(s)},this.ws.onmessage=t=>{const e=JSON.parse(t.data);this.onData(e)},this.ws.onerror=()=>{}}cleanWebSocketHooks(){this.ws&&(this.ws.onmessage=()=>{},this.ws.onclose=()=>{})}}const E={};function x(){const t=new o,e=new AbortController;return{cancel:()=>{e.abort(),t.resolve(E)},token:{promise:t.promise,signal:e.signal}}}class I extends b{constructor(t,s,n){void 0===s&&(s=null),super({keepAlive:!1}),this.baseUrl=t,this.instanceUpdater=s,this.siteRevision=n,e()(this,"commandsCancelTokens",[]),e()(this,"pollCancelToken",void 0),this.baseUrl=this.baseUrl.replace(/\/+$/,"")}get name(){return"http_long_polling"}async open(){await this.poll()}closeClient(){this.commandsCancelTokens.forEach((t=>t.cancel())),this.abortOngoingPollInterval()}async write(t,e){let{affectState:s=!0}=void 0===e?{}:e;try{const e=x();this.commandsCancelTokens.push(e);const n=await this.buildUrl("http-command"),{data:r}=await _(n,t,{cancelToken:e.token,headers:T(this.instanceUpdater)});this.removeCancelToken(e),this.onData(r),s&&this.startPollInterval()}catch(t){k(t)||this.closeOnTransportFailure(t)}}abortOngoingPollInterval(){this.pollCancelToken&&this.pollCancelToken.cancel(),this.pollCancelToken=null}async startPollInterval(){if(this.abortOngoingPollInterval(),this.readyState===c.OPEN){const{continuable:t}=await this.poll();t&&this.startPollInterval()}}async poll(){const t=await this.buildUrl("http");this.pollCancelToken=x();const e=_(t,this.payload,{cancelToken:this.pollCancelToken.token,headers:T(this.instanceUpdater)});try{const t=await async function(t){try{const{data:e}=await t;return{continuable:!0,data:e}}catch(t){if(k(t))return{continuable:!1};if(function(t){return 504===t.getStatus()}(t))return{continuable:!0};throw t}}(e);return t.data&&this.onData(t.data),t}catch(t){return this.closeOnTransportFailure(t),{continuable:!1}}}async buildUrl(t){const e=await g(this.instanceUpdater,this.siteRevision);this.sessionId&&e.append("sessionId",this.sessionId);const s=w(t,e);return`${this.baseUrl}/${s}`}closeOnTransportFailure(t){const e=t.getStatus(),s=this.transportError({status:e,message:t.message,recoverable:(n=e,[401].every((t=>t!==n)))});var n;this.onTransportClose(s)}removeCancelToken(t){const e=this.commandsCancelTokens.indexOf(t);this.commandsCancelTokens.splice(e,1)}}class R extends r{constructor(t){super(),this.strategies=t,e()(this,"_transport",void 0),e()(this,"disposables",[]),e()(this,"cancelToken",void 0),e()(this,"readyState",c.CLOSED)}get transport(){return this._transport}async connect(){let t;if(this.readyState!==c.CLOSED)return{success:!1};this.cancelToken=new o,this.readyState=c.OPENING,this.listenAndEmitConnectErrorsInAllTransportsOnConnecting();try{t=await this.connectToFirstToRespondStrategy()}catch(t){return{success:!1}}return this.cancelToken=null,this.removeListeners(),this.abortStrategiesWithNoOpenTransport(),this.listenEventsOfActiveTransport(),function(t){return{success:!0,connectionEstablishedPacket:t}}(t)}close(){this.isOpen()?this.transport.close():this.isOpening()&&(this.cancelToken&&this.cancelToken.reject(),this.onClose(),this.strategies.forEach((t=>t.abort())))}isOpen(){return this.readyState===c.OPEN}isClosed(){return this.readyState===c.CLOSED}isOpening(){return this.readyState===c.OPENING}async connectToFirstToRespondStrategy(){const{transport:t,connectionEstablishedPacket:e}=await Promise.race([...this.strategies.map((t=>t.connect())),this.cancelToken.promise]);return this._transport=t,this.readyState=c.OPEN,e}onClose(t){this.readyState=c.CLOSED,this._transport=null,this.cancelToken=null,this.removeListeners(),this.emit("close",t)}abortStrategiesWithNoOpenTransport(){this.strategies.filter((t=>t.transport.readyState!==c.OPEN)).forEach((t=>t.abort()))}listenAndEmitConnectErrorsInAllTransportsOnConnecting(){this.disposables=this.strategies.map((t=>d(t,"connect_error",(t=>{t.recoverable?this.emit("connect_error",t):this.close()}))))}listenEventsOfActiveTransport(){this.disposables=[d(this.transport,"close",(t=>{this.onClose(t)})),d(this.transport,"packet",(t=>{this.onData(t)}))]}removeListeners(){this.disposables.forEach((t=>t.destroy())),this.disposables=[]}onData(t){switch(t.type){case"message":case"ack":case"error":case"UpdateRestoreStrategyOverrides":this.emit("message",t)}}}var P=s(830),D=s.n(P);class U extends r{constructor(t,s){super(),this._transport=t,this.opts=s,e()(this,"connectDelayTimeoutId",void 0),e()(this,"disposables",[]),e()(this,"backoff",new(D())({max:6e4})),e()(this,"cancelToken",void 0)}get transport(){return this._transport}async connect(){var t;this.cancelToken=new o,this.opts.delay>0&&await Promise.race([(t=this.opts.delay,new Promise((e=>setTimeout(e,t)))),this.cancelToken.promise]);const e=await Promise.race([this.connectWithBackoff(),this.cancelToken.promise]);return{transport:this.transport,connectionEstablishedPacket:e}}abort(){clearTimeout(this.connectDelayTimeoutId),this.cancelToken&&this.cancelToken.reject(),this.cancelToken=null,this.removeListeners(),this.backoff.reset(),this.transport.close()}async connectWithBackoff(){return this.backoff.reset(),new Promise((t=>{this.disposables=[d(this.transport,"open",(e=>{this.removeListeners(),t(e)})),d(this.transport,"connect_error",(t=>{clearTimeout(this.connectDelayTimeoutId),t.recoverable&&(this.connectDelayTimeoutId=setTimeout((()=>this.transport.open()),this.backoff.duration())),this.emit("connect_error",t)}))],this.transport.open()}))}removeListeners(){this.disposables.forEach((t=>t.destroy())),this.disposables=[]}}class N{constructor(t){this.transport=t,e()(this,"opts",{delay:0,backoff:0})}withDelay(t){return this.opts.delay=t,this}withBackoff(t){return this.opts.backoff=t,this}build(){return new U(this.transport,this.opts)}}function B(t){return new N(t)}const A=150;function M(t){return B(t).withBackoff(A).build()}var L=s(158);function j(t){var e;let s=[];const n=function(t){const e=`${$()?"wss://":"ws://"}${t.baseUrl}`;return new O(e,t.instanceUpdater,t.siteRevision)}(t),r=function(t){const e=(s=t.baseUrl,`${$()?"https://":"http://"}${s}`);var s;return new I(e,t.instanceUpdater,t.siteRevision)}(t),i=void 0!==L&&"string"==typeof(null==(e=L.env)?void 0:e.DUPLEXER_FORCED_TRANSPORT)?L.env.DUPLEXER_FORCED_TRANSPORT:void 0;var o;return s="websocket"===i?[M(n)]:"http"===i?[M(r)]:O.isSupported()?[M(n),(o=r,B(o).withDelay(4e3).withBackoff(A).build())]:[M(r)],new R(s)}function $(){if("undefined"==typeof self)return!1;if("http:"!==self.location.protocol)return!0;try{if(self!==self.top&&"http:"!==self.top.location.protocol)return!0}catch(t){return!0}return!1}class F{constructor(t,s){this.timeout=t,this.handler=s,e()(this,"timer",void 0)}schedule(){this.timer=setTimeout(this.handler,this.timeout)}cancel(){clearTimeout(this.timer)}}class W extends r{constructor(t,s){super(),this.transport=t,this.opts=s,e()(this,"timeoutTimer",void 0),e()(this,"intervalTimer",void 0),e()(this,"started",!1),d(this.transport,"packet",(()=>this.started&&this.schedule()))}schedule(){this.dispose(),this.started=!0,this.intervalTimer=new F(this.opts.pingInterval,(()=>this.sendHeartbeat())),this.intervalTimer.schedule()}dispose(){this.started=!1,this.intervalTimer&&this.intervalTimer.cancel(),this.timeoutTimer&&this.timeoutTimer.cancel()}sendHeartbeat(){this.ping(),this.timeoutTimer=new F(this.opts.pingTimeout,(()=>{this.transport.close({status:0,message:"keep alive has not recieved pong in defined timeframe",recoverable:!0})})),this.timeoutTimer.schedule()}ping(){this.transport.send({type:"ping"},{affectState:!1})}}class G extends Error{constructor(t){super(t),this.name=this.constructor.name}}class H extends r{constructor(t){super(),this.opts=t,e()(this,"keepAlive",void 0),e()(this,"autoConnect",void 0),e()(this,"environment",void 0),e()(this,"timeline",void 0),e()(this,"autoConnectEnabled",void 0),this.environment=t.environment,this.timeline=t.timeline,this.autoConnectEnabled=t.autoConnectEnabed,this.listenNeworkStateChanges(),this.listenTransportEvents()}get sessionId(){return this.transport.sessionId}updatePayload(t){this.transport.updatePayload(t)}send(t,e){this.transport.send(t,e)}close(){this.autoConnect=!1,this.environment.transportsManager.close(),this.dispose()}get readyState(){return this.environment.transportsManager.readyState}async connect(){this.autoConnect=this.autoConnectEnabled;const t=await this.environment.transportsManager.connect();t.success&&(this.keepAlive=new W(this.transport,this.opts),this.transport.keepAliveEnabled&&this.keepAlive.schedule(),this.timeline.log({type:"connect_succeeded",data:{transport:this.transport.name}}),this.emit("open",t.connectionEstablishedPacket))}isClosed(){return this.environment.transportsManager.isClosed()}isOpen(){return this.environment.transportsManager.isOpen()}get transport(){return function(t,e){if(void 0===t)throw new G(e)}(this.environment.transportsManager.transport,"transport was not initialized yet"),this.environment.transportsManager.transport}shouldReconnect(t){return this.autoConnect&&(null==t?void 0:t.recoverable)}listenNeworkStateChanges(){this.environment.network.on("online",(()=>{this.autoConnect&&!this.isOpen()&&(this.timeline.log({type:"network_state_changed",data:"online"}),this.close(),this.connect())}))}listenTransportEvents(){d(this.environment.transportsManager,"connect_error",(t=>{this.timeline.log({type:"connect_error",data:t}),this.emit("connect_error",t)})),d(this.environment.transportsManager,"close",(t=>{this.dispose(),this.maybeLogDisconnectionError(t),this.shouldReconnect(t)&&this.connect(),this.emit("close",t)})),d(this.environment.transportsManager,"message",(t=>{this.emit("message",t)}))}dispose(){this.keepAlive&&this.keepAlive.dispose()}maybeLogDisconnectionError(t){(function(t){return void 0!==t&&void 0!==t.transport})(t)&&this.timeline.log({type:"disconnect_error",data:t})}}class X{log(){}}function J(){return new X}class K extends r{constructor(t,s){let{pingInterval:n=3e4,pingTimeout:r=5e3,timeline:a=J(),autoConnect:c=!0,instanceUpdater:h,siteRevision:l}=void 0===s?{}:s;super(),e()(this,"virtualSockets",[]),e()(this,"environment",void 0),e()(this,"payloadBuilder",new i.Du),e()(this,"connectionServerTimeDeferred",new o),e()(this,"connection",void 0),this.environment="string"==typeof t?function(t){const e=new y,s=j({baseUrl:t.url,instanceUpdater:t.instanceUpdater,siteRevision:t.siteRevision});return new v({transportsManager:s,network:e})}({url:t,instanceUpdater:h,siteRevision:l}):t,this.connection=new H({pingTimeout:r,pingInterval:n,environment:this.environment,timeline:a,autoConnectEnabed:c}),this.listen()}triggerInstanceChanged(){this.close(),this.connection.connect()}connect(t){const e=new f(this,t);return this.virtualSockets.push(e),e}getConnectionServerTime(){return this.connectionServerTimeDeferred.promise}close(){this.connection.close()}addRestoreOverride(t){const e=this.payloadBuilder.withOverrideRestoreStrategy(t).build();this.connection.updatePayload(e)}closeVirtualSocket(t){this.virtualSockets=this.virtualSockets.filter((e=>e!==t)),0===this.virtualSockets.length&&this.close()}packet(t,e){this.connection.send(t,e)}listen(){this.connection.on("open",(t=>{const e=i.v8.timestamp().withT(t.t).build();this.payloadBuilder.withDefaultRestoreStrategy(e),this.connection.updatePayload(this.payloadBuilder.build()),this.emit("open"),this.connectionServerTimeDeferred.resolve(t.t)})),this.connection.on("message",(t=>{if("UpdateRestoreStrategyOverrides"===t.type)this.overwriteRestoreOverrides(t.overrides);else this.emit("packet",t)})),this.connection.on("close",this.onClose.bind(this))}onClose(t){this.emit("close",t),this.connectionServerTimeDeferred=new o}overwriteRestoreOverrides(t){this.payloadBuilder=new i.Du,t.forEach((t=>this.payloadBuilder.withOverrideRestoreStrategy(t)));const e=this.payloadBuilder.build();this.connection.updatePayload(e)}}})(),n})()));
2
2
  //# sourceMappingURL=duplexer.bundle.min.js.map