!function(e){"use strict";function t(e){return function(e,...t){try{return[null,e(...t)]}catch(e){return[e]}}(JSON.parse,function(e){return localStorage[e]&&"getItem"!==e?localStorage[e]:localStorage.getItem(e)}(e)||null)}function a(e,t){localStorage.setItem(e,JSON.stringify(t))}function s(e){const t="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split("");return Array.from({length:e},(()=>t[Math.floor(Math.random()*t.length)])).join("")}var r=Object.defineProperty,i=(e,t,a)=>((e,t,a)=>t in e?r(e,t,{enumerable:!0,configurable:!0,writable:!0,value:a}):e[t]=a)(e,"symbol"!=typeof t?t+"":t,a);class n{constructor(e){var t,a;this.leaderId=e,i(this,"leaderLSToken",s(10)),i(this,"_isLeader",!1),i(this,"heartbeatTimer"),i(this,"intervalCheckLeaderTimer"),i(this,"intervalCheckLeaderTime",3e4),i(this,"beforeUnloadFn"),i(this,"leaderRequestConf"),i(this,"enableWebLock"),this.enableWebLock="function"==typeof(null==(t=navigator.locks)?void 0:t.request)&&"function"==typeof(null==(a=navigator.locks)?void 0:a.query)}get isLeader(){return this._isLeader}set isLeader(e){var t,a,s,r;if(!1===e)return this._isLeader=!1,null==(a=null==(t=this.leaderRequestConf)?void 0:t.afterLostLeader)||a.call(t),this.heartbeatTimer&&window.clearInterval(this.heartbeatTimer),void(this.beforeUnloadFn&&window.removeEventListener("beforeunload",this.beforeUnloadFn));this._isLeader=!0,null==(r=null==(s=this.leaderRequestConf)?void 0:s.afterBeingLeader)||r.call(s),!1===this.enableWebLock&&(this.heartbeat(),this.beforeUnload())}requestLeadershipByLocalStorage(){return this.intervalCheckLeader(),()=>{this.isLeader=!1}}requestLeadershipByWebLock(){if(this.isLeader)return()=>{};let e;const t=new Promise((t=>{e=t}));return navigator.locks.request(this.leaderId,(()=>(this.isLeader=!0,t))),()=>{e(),this.isLeader=!1}}intervalCheckLeader(){this.checkIsLeader(),this.intervalCheckLeaderTimer||(this.intervalCheckLeaderTimer=window.setInterval((()=>{this.checkIsLeader()}),this.intervalCheckLeaderTime))}checkIsLeader(){const[e,a]=t(this.leaderId);e?this.isLeader=!1:this.isLeader||(a?a.token!==this.leaderLSToken&&Date.now()-a.timestamp>7e4&&(this.isLeader=!0):this.isLeader=!0)}heartbeat(){a(this.leaderId,{token:this.leaderLSToken,timestamp:Date.now()}),this.heartbeatTimer=window.setInterval((()=>{const[e,s]=t(this.leaderId);e||(s&&s.token!==this.leaderLSToken?Date.now()-s.timestamp<3e4&&(this.isLeader=!1):a(this.leaderId,{token:this.leaderLSToken,timestamp:Date.now()}))}),3e4)}beforeUnload(){this.beforeUnloadFn=function(e){localStorage.removeItem(e)}.bind(this,this.leaderId),window.addEventListener("beforeunload",this.beforeUnloadFn)}}var d=Object.defineProperty,o=(e,t,a)=>((e,t,a)=>t in e?d(e,t,{enumerable:!0,configurable:!0,writable:!0,value:a}):e[t]=a)(e,"symbol"!=typeof t?t+"":t,a);var h=Object.defineProperty,l=(e,t,a)=>((e,t,a)=>t in e?h(e,t,{enumerable:!0,configurable:!0,writable:!0,value:a}):e[t]=a)(e,"symbol"!=typeof t?t+"":t,a);class c{constructor(){l(this,"listeners",[])}addEventListener(e){this.listeners.push(e)}removeEventListener(e){const t=this.listeners.findIndex((t=>t===e));this.listeners.splice(t,1)}trigger(...e){this.listeners.forEach((t=>t(...e)))}destroy(){this.listeners.length=0}}var L=Object.defineProperty,u=(e,t,a)=>((e,t,a)=>t in e?L(e,t,{enumerable:!0,configurable:!0,writable:!0,value:a}):e[t]=a)(e,"symbol"!=typeof t?t+"":t,a);e.IframeLeaderElection=class extends n{constructor(e){super(e),o(this,"broadcastChannel"),o(this,"abdicateLeadership"),this.broadcastChannel=new BroadcastChannel(e),this.onParentMessage(),this.onChannelMessage()}requestLeadership(){return this.leaderRequestConf={afterBeingLeader:()=>{this.notifyParent("beingLeader")},afterLostLeader:()=>{this.notifyParent("lostLeader")}},this.enableWebLock?this.requestLeadershipByWebLock():this.requestLeadershipByLocalStorage()}notifyParent(e,t){const a=window.location.search,s=new URLSearchParams(a),r=s.get("iframeID")||s.get("leaderID");r&&window.parent.postMessage({id:r,type:e,payload:t},"*")}onParentMessage(){window.addEventListener("message",(e=>{var t;switch(e.data.type){case"communicate":"destroy"===e.data.payload?this.destroy():"requestLeadership"===e.data.payload?this.abdicateLeadership=this.requestLeadership():"abdicateLeadership"===e.data.payload&&(null==(t=this.abdicateLeadership)||t.call(this));break;case"broadcast":this.broadcastChannel.postMessage(e.data.payload);break;default:e.data}}),!1)}onChannelMessage(){this.broadcastChannel.addEventListener("message",(e=>{this.notifyParent("channelMessage",e.data)}))}destroy(){var e;this.broadcastChannel.close(),null==(e=this.abdicateLeadership)||e.call(this)}},e.ParentLeaderElection=class{constructor(e){this.uniqueLeaderID=e,u(this,"iframeSrcUrl","https://s1.hdslb.com/bfs/seed/jinkela/short/leader-election/iframe.html"),u(this,"_isLeader",!1),u(this,"leaderRequestConf",[]),u(this,"iframeUniqueID",s(10)),u(this,"iframe"),u(this,"eventListener",new c),u(this,"abdicateLeadership"),u(this,"onbroadcast",null),this.createIframe(),this.onIframeMessage()}get isLeader(){return this._isLeader}set isLeader(e){this._isLeader=e}addBroadcastListener(e){this.eventListener.addEventListener(e)}addLeaderListener(e){this.leaderRequestConf.push(e)}postMessage(e){this.sendMessageToIframe("broadcast",e)}requestLeadership(e){return this.addLeaderListener(e),this.iframe.onload=()=>{this.sendMessageToIframe("communicate","requestLeadership")},this.abdicateLeadership=()=>{this.sendMessageToIframe("communicate","abdicateLeadership")},this.abdicateLeadership}createIframe(){const e=document.createElement("iframe");e.id=this.iframeUniqueID,e.src=`${this.iframeSrcUrl}?leaderID=${this.uniqueLeaderID}`,e.style.display="none",document.body.appendChild(e),this.iframe=e}onIframeMessage(){window.addEventListener("message",(e=>{var t;if(e.origin===new URL(this.iframeSrcUrl).origin&&e.data.id===this.uniqueLeaderID)switch(e.data.type){case"beingLeader":this.isLeader=!0,this.leaderRequestConf.forEach((e=>{e.afterBeingLeader()}));break;case"lostLeader":this.isLeader=!1,this.leaderRequestConf.forEach((e=>{var t;null==(t=e.afterLostLeader)||t.call(e)}));break;case"channelMessage":this.eventListener.trigger(e.data.payload),null==(t=this.onbroadcast)||t.call(this,e.data.payload);break;default:e.data}}),!1)}sendMessageToIframe(e,t){var a;null==(a=this.iframe.contentWindow)||a.postMessage({type:e,payload:t},"*")}destroy(){this.onbroadcast=null,this.eventListener.destroy(),this.sendMessageToIframe("communicate","destroy"),document.body.removeChild(this.iframe)}}}(this.window=this.window||{});