From 0b375696f2a88bb79fc732eec56bc144d7dcea79 Mon Sep 17 00:00:00 2001 From: QCQCQC <1220204124@zust.edu.cn> Date: Fri, 9 May 2025 11:09:35 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E6=8C=81=E4=BA=86=E6=89=8B=E5=8A=A8?= =?UTF-8?q?=E9=85=8D=E7=BD=AEui=E7=9A=84path?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/server/start.js | 7 ++++-- src/server/start.ts | 7 ++++-- ui/socket-admin/img/logo-dark.23e26193.svg | 4 ---- ui/socket-admin/img/logo-light.9e8ec0c3.svg | 4 ---- ui/socket-admin/index.html | 24 ++++++++++++++++++++- ui/socket-admin/js/app.8f417b7c.js | 2 -- ui/socket-admin/js/app.8f417b7c.js.map | 1 - ui/socket-admin/js/app.b14a0147.js | 2 ++ ui/socket-admin/js/app.b14a0147.js.map | 1 + 9 files changed, 36 insertions(+), 16 deletions(-) delete mode 100644 ui/socket-admin/img/logo-dark.23e26193.svg delete mode 100644 ui/socket-admin/img/logo-light.9e8ec0c3.svg delete mode 100644 ui/socket-admin/js/app.8f417b7c.js delete mode 100644 ui/socket-admin/js/app.8f417b7c.js.map create mode 100644 ui/socket-admin/js/app.b14a0147.js create mode 100644 ui/socket-admin/js/app.b14a0147.js.map diff --git a/lib/server/start.js b/lib/server/start.js index f42550e..8cdcff9 100644 --- a/lib/server/start.js +++ b/lib/server/start.js @@ -314,9 +314,12 @@ async function startup(path, connector, omitWatchers, omitTimers, routine) { router.get(connector.getEndpointRouter(), async (ctx) => { ctx.response.body = endpoints; }); + const socketAdminMountRaw = ui?.path || '/socket-admin123123'; + const socketAdminMount = socketAdminMountRaw.startsWith('/') + ? socketAdminMountRaw : `/${socketAdminMountRaw}`; // 注册静态资源 if (!ui?.disable) { - koa.use((0, koa_mount_1.default)('/socket-admin', (0, koa_static_1.default)(socketAdminUI))); + koa.use((0, koa_mount_1.default)(socketAdminMount, (0, koa_static_1.default)(socketAdminUI))); } koa.use(router.routes()); koa.on('error', (err) => { @@ -328,7 +331,7 @@ async function startup(path, connector, omitWatchers, omitTimers, routine) { const host = hostname || 'localhost'; const port = nginx?.port || (clusterInfo.usingCluster ? (process.env.PM2_PORT || 8080) : serverConfiguration.port); const baseUrl = `${protocol}://${host}:${port}`; - const adminUIUrl = `${baseUrl}/socket-admin`; + const adminUIUrl = `${baseUrl}${socketAdminMount}`; console.log(chalk_1.default.greenBright.bold('\n🚀 Server started successfully!\n')); console.log(`🔗 ${chalk_1.default.cyan('Server URL')}: ${chalk_1.default.underline(baseUrl)}`); // socketio地址 diff --git a/src/server/start.ts b/src/server/start.ts index d6ef224..4ee7a6f 100644 --- a/src/server/start.ts +++ b/src/server/start.ts @@ -393,9 +393,12 @@ export async function startup - - - diff --git a/ui/socket-admin/img/logo-light.9e8ec0c3.svg b/ui/socket-admin/img/logo-light.9e8ec0c3.svg deleted file mode 100644 index ef2c35c..0000000 --- a/ui/socket-admin/img/logo-light.9e8ec0c3.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/ui/socket-admin/index.html b/ui/socket-admin/index.html index bcc04ac..b3fd377 100644 --- a/ui/socket-admin/index.html +++ b/ui/socket-admin/index.html @@ -1 +1,23 @@ -Socket.IO Admin For OAK
\ No newline at end of file +Socket.IO Admin For OAK
\ No newline at end of file diff --git a/ui/socket-admin/js/app.8f417b7c.js b/ui/socket-admin/js/app.8f417b7c.js deleted file mode 100644 index 8db18db..0000000 --- a/ui/socket-admin/js/app.8f417b7c.js +++ /dev/null @@ -1,2 +0,0 @@ -(function(e){function t(t){for(var a,r,i=t[0],c=t[1],l=t[2],u=0,m=[];ut.meta.index?"v-slide-y-reverse-transition":"v-slide-y-transition":this.transitionName=e.meta.topLevel?"v-slide-x-transition":"v-slide-x-reverse-transition"}},methods:{tryConnect:function(e,t,n,a,s,o){var r=this;this.isConnecting=!0,Te.socket&&(Te.socket.disconnect(),Te.socket.off("connect"),Te.socket.off("connect_error"),Te.socket.off("disconnect"));var i=Object(be["a"])(e+t,{forceNew:!0,reconnection:!1,withCredentials:!0,transports:a?["websocket"]:["polling","websocket"],path:s,parser:"msgpack"===o?ke.a:null,auth:n});i.once("connect",(function(){r.showConnectionModal=!1,r.connectionError="",r.isConnecting=!1,i.io.reconnection(!0),r.$store.commit("connection/saveConfig",{serverUrl:e,wsOnly:a,path:s,namespace:t,parser:o}),Te.socket=i,r.registerEventListeners(i)})),i.on("connect",(function(){r.$store.commit("connection/connect")})),i.on("connect_error",(function(e){(r.isConnecting||"invalid credentials"===e.message)&&(r.showConnectionModal=!0,r.connectionError=e.message),r.isConnecting=!1})),i.on("disconnect",(function(e){r.isConnecting&&(r.isConnecting=!1,r.connectionError=e),r.$store.commit("connection/disconnect")}))},registerEventListeners:function(e){var t=this;e.on("session",(function(e){t.$store.commit("connection/saveSessionId",e)})),e.on("config",(function(e){t.$store.commit("config/updateConfig",e)})),e.on("server_stats",(function(e){t.$store.commit("servers/onServerStats",e),t.$store.commit("main/onServerStats",e)})),e.on("all_sockets",(function(e){t.$store.commit("main/onAllSockets",e)})),e.on("socket_connected",(function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Ie();t.$store.commit("main/onSocketConnected",{timestamp:n,socket:e})})),e.on("socket_updated",(function(e){t.$store.commit("main/onSocketUpdated",e)})),e.on("socket_disconnected",(function(e,n,a){var s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:Ie();t.$store.commit("main/onSocketDisconnected",{timestamp:s,nsp:e,id:n,reason:a})})),e.on("room_joined",(function(e,n,a){var s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:Ie();t.$store.commit("main/onRoomJoined",{timestamp:s,nsp:e,room:n,id:a})})),e.on("room_left",(function(e,n,a){var s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:Ie();t.$store.commit("main/onRoomLeft",{timestamp:s,nsp:e,room:n,id:a})})),e.on("event_received",(function(e,n,a,s){t.$store.commit("main/onEventReceived",{timestamp:s,nsp:e,id:n,args:a})})),e.on("event_sent",(function(e,n,a,s){t.$store.commit("main/onEventSent",{timestamp:s,nsp:e,id:n,args:a})}))},onSubmit:function(e){this.tryConnect(e.serverUrl,e.namespace,{username:e.username,password:e.password},e.wsOnly,e.path,e.parser)}},created:function(){if(this.$vuetify.theme.dark=this.$store.state.config.darkTheme,this.$vuetify.breakpoint.lgAndUp&&this.$store.commit("config/toggleNavigationDrawer"),this.serverUrl){var e=this.$store.state.connection.sessionId;this.tryConnect(this.serverUrl,this.namespace,{sessionId:e},this.wsOnly,this.path,this.parser)}else this.showConnectionModal=!0}},Ne=Ee,Re=n("7496"),Pe=n("a523"),Be=n("f6c4"),Ae=Object(b["a"])(Ne,s,o,!1,null,null,null),Ue=Ae.exports;k()(Ae,{VApp:Re["a"],VContainer:Pe["a"],VMain:Be["a"]});var Le=n("8c4f"),Me=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("v-breadcrumbs",{attrs:{items:e.breadcrumbItems}}),n("v-container",{attrs:{fluid:""}},[n("v-row",[n("v-col",{attrs:{cols:"12",md:"6",lg:"4"}},[n("ClientsOverview")],1),n("v-col",{attrs:{cols:"12",md:"6",lg:"4"}},[n("ServersOverview")],1),n("v-col",{attrs:{cols:"12",md:"6",lg:"4"}},[n("NamespacesOverview")],1),e.hasAggregatedValues?n("v-col",{attrs:{cols:"12",md:"6"}},[n("ConnectionsHistogram")],1):e._e(),e.hasAggregatedValues?n("v-col",{attrs:{cols:"12",md:"6"}},[n("BytesHistogram")],1):e._e()],1)],1)],1)},He=[],qe=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("v-card",[n("v-card-title",{staticClass:"text-center"},[e._v(" "+e._s(e.$t("clients.title"))+" "),n("v-spacer"),e.developmentMode?n("v-btn",{attrs:{to:{name:"clients"},small:""}},[n("v-icon",[e._v("mdi-dots-horizontal")])],1):e._e()],1),n("v-card-text",[n("v-row",[n("Doughnut",{staticClass:"chart",attrs:{"chart-data":e.data,"chart-options":e.chartOptions}}),n("v-simple-table",{staticClass:"grow align-self-center",scopedSlots:e._u([{key:"default",fn:function(){return[n("tbody",[n("tr",[n("th",[e._v(e._s(e.$t("sockets.transport")))]),n("th",[e._v("#")])]),e._l(e.transports,(function(t){return n("tr",{key:t},[n("td",[n("Transport",{attrs:{transport:t}})],1),n("td",[n("div",[n("h2",[e._v(e._s(e.transportRepartition[t]))])]),n("div",[e._v(" "+e._s(e.percentage(e.transportRepartition[t],e.clientsCount))+" % ")])])])}))],2)]},proxy:!0}])})],1)],1)],1)},Fe=[],ze=(n("4de4"),n("d81d"),n("7b97")),Je=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("v-chip",{attrs:{small:"",color:e.color,outlined:""}},[e._v(e._s(e.label))])},Ge=[],Ke={name:"Transport",props:{transport:String},computed:{label:function(){switch(this.transport){case"polling":return"HTTP long-polling";case"websocket":return"WebSocket";default:return this.transport}},color:function(){switch(this.transport){case"polling":return v["a"].orange.base;case"websocket":return v["a"].green.base;default:return v["a"].grey.base}}}},We=Ke,Ye=Object(b["a"])(We,Je,Ge,!1,null,null,null),Ze=Ye.exports;k()(Ye,{VChip:_["a"]});var Qe=n("53ca"),Xe=(n("a15b"),n("a434"),n("caad"),n("2532"),n("b680"),n("1c8f")),et=function(){var e="test";try{return localStorage.setItem(e,e),localStorage.removeItem(e),!0}catch(t){return!1}},tt=et();function nt(e){var t=Math.ceil(Math.max(e,0)),n=Math.floor(t/86400),a=Math.floor((t-86400*n)/3600),s=Math.floor((t-86400*n-3600*a)/60),o=Math.ceil(t)-86400*n-3600*a-60*s,r=[];return n>0&&r.push(n+"d"),(n>0||a>0)&&r.push(a+"h"),(n>0||a>0||s>0)&&r.push(s+"m"),r.push(o+"s"),r.join(" ")}function at(e,t){var n="object"===Object(Qe["a"])(t)?Object(Xe["a"])(e,t):e.indexOf(t);return-1===n?[]:e.splice(n,1)}function st(e,t){e.includes(t)||e.push(t)}function ot(e,t){return 0===t?0:(e/t*100).toFixed(1)}var rt=n("9223"),it={name:"ClientsOverview",components:{Transport:Ze,Doughnut:ze["b"]},data:function(){return{transports:["websocket","polling"],chartOptions:{plugins:{legend:{display:!1}}}}},computed:Object(r["a"])(Object(r["a"])(Object(r["a"])({},Object(l["d"])({clients:function(e){return e.main.clients},darkTheme:function(e){return e.config.darkTheme},servers:function(e){return e.servers.servers}})),Object(l["b"])("config",["hasAggregatedValues","developmentMode"])),{},{clientsCount:function(){return this.hasAggregatedValues?Object(rt["a"])(this.servers,"clientsCount"):this.clients.length},transportRepartition:function(){if(this.hasAggregatedValues){var e=Object(rt["a"])(this.servers,"pollingClientsCount");return{polling:e,websocket:this.clientsCount-e}}return this.clients.map((function(e){return e.sockets[0]})).filter((function(e){return!!e})).reduce((function(e,t){return e[t.transport]++,e}),{websocket:0,polling:0})},data:function(){return{labels:["WebSocket","HTTP long-polling"],datasets:[{backgroundColor:[v["a"].green.base,v["a"].orange.base],borderColor:this.darkTheme?"black":"white",data:[this.transportRepartition["websocket"],this.transportRepartition["polling"]]}]}}}),methods:{percentage:ot}},ct=it,lt=(n("2bc7"),n("0fd9")),dt=n("1f4f"),ut=Object(b["a"])(ct,qe,Fe,!1,null,"68c0c5d5",null),mt=ut.exports;k()(ut,{VBtn:I["a"],VCard:Ce["a"],VCardText:xe["a"],VCardTitle:xe["b"],VIcon:le["a"],VRow:lt["a"],VSimpleTable:dt["a"],VSpacer:N["a"]});var pt=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("v-card",[n("v-card-title",{staticClass:"text-center"},[e._v(" "+e._s(e.$t("servers.title"))+" "),n("v-spacer"),n("v-btn",{attrs:{to:{name:"servers"},small:""}},[n("v-icon",[e._v("mdi-dots-horizontal")])],1)],1),n("v-card-text",[n("v-row",[n("Doughnut",{staticClass:"chart",attrs:{"chart-data":e.data,"chart-options":e.chartOptions}}),n("v-simple-table",{staticClass:"grow align-self-center",scopedSlots:e._u([{key:"default",fn:function(){return[n("tbody",[n("tr",[n("th",[e._v(e._s(e.$t("status")))]),n("th",[e._v("#")])]),n("tr",[n("td",[n("ServerStatus",{attrs:{healthy:""}})],1),n("td",[n("div",[n("h2",[e._v(e._s(e.healthyServers))])]),n("div",[e._v(e._s(e.percentage(e.healthyServers,e.totalServers))+" %")])])]),n("tr",[n("td",[n("ServerStatus")],1),n("td",[n("div",[n("h2",[e._v(e._s(e.totalServers-e.healthyServers))])]),n("div",[e._v(" "+e._s(e.percentage(e.totalServers-e.healthyServers,e.totalServers))+" % ")])])])])]},proxy:!0}])})],1)],1)],1)},vt=[],ht=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("Status",{attrs:{value:e.healthy,"ok-label":e.$t("servers.healthy"),"ko-label":e.$t("servers.unhealthy")}})},ft=[],bt={name:"ServerStatus",components:{Status:S},props:{healthy:Boolean}},gt=bt,kt=Object(b["a"])(gt,ht,ft,!1,null,null,null),_t=kt.exports,yt={name:"ServersOverview",components:{ServerStatus:_t,Doughnut:ze["b"]},data:function(){return{chartOptions:{plugins:{legend:{display:!1}}}}},computed:Object(r["a"])(Object(r["a"])({},Object(l["d"])({healthyServers:function(e){return e.servers.servers.filter((function(e){return e.healthy})).length},totalServers:function(e){return e.servers.servers.length},darkTheme:function(e){return e.config.darkTheme}})),{},{data:function(){return{labels:[this.$t("servers.healthy"),this.$t("servers.unhealthy")],datasets:[{backgroundColor:[v["a"].green.base,v["a"].red.base],borderColor:this.darkTheme?"black":"white",data:[this.healthyServers,this.totalServers-this.healthyServers]}]}}}),methods:{percentage:ot}},St=yt,Ot=(n("a86e"),Object(b["a"])(St,pt,vt,!1,null,"0ad5cc14",null)),Ct=Ot.exports;k()(Ot,{VBtn:I["a"],VCard:Ce["a"],VCardText:xe["a"],VCardTitle:xe["b"],VIcon:le["a"],VRow:lt["a"],VSimpleTable:dt["a"],VSpacer:N["a"]});var xt=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("v-card",{staticClass:"fill-height"},[n("v-card-title",{staticClass:"text-center"},[e._v(" "+e._s(e.$t("namespaces"))+" "),n("v-spacer"),e.developmentMode?n("v-btn",{attrs:{to:{name:"sockets"},small:""}},[n("v-icon",[e._v("mdi-dots-horizontal")])],1):e._e()],1),n("v-simple-table",{scopedSlots:e._u([{key:"default",fn:function(){return[n("thead",[n("tr",[n("th",[e._v(e._s(e.$t("name")))]),n("th",[e._v(e._s(e.$t("rooms.sockets-count")))])])]),n("tbody",e._l(e.namespaces,(function(t){return n("tr",{key:t.name},[n("td",{staticClass:"key-column"},[n("code",[e._v(e._s(t.name))])]),n("td",[e._v(e._s(t.socketsCount))])])})),0)]},proxy:!0}])})],1)},$t=[],jt=n("d66c"),wt={name:"NamespacesOverview",computed:Object(r["a"])(Object(r["a"])(Object(r["a"])(Object(r["a"])({},Object(l["d"])({plainNamespaces:function(e){return Object(jt["a"])(e.main.namespaces,"name").map((function(e){var t=e.name,n=e.sockets;return{name:t,socketsCount:n.length}}))}})),Object(l["b"])("config",["hasAggregatedValues","developmentMode"])),Object(l["b"])("servers",{liteNamespaces:"namespaces"})),{},{namespaces:function(){return this.hasAggregatedValues?this.liteNamespaces:this.plainNamespaces}})},Vt=wt,Dt=Object(b["a"])(Vt,xt,$t,!1,null,"11fe24be",null),Tt=Dt.exports;k()(Dt,{VBtn:I["a"],VCard:Ce["a"],VCardTitle:xe["b"],VIcon:le["a"],VSimpleTable:dt["a"],VSpacer:N["a"]});var It=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("v-card",[n("v-card-title",{staticClass:"text-center"},[e._v(" "+e._s(e.$t("dashboard.connectionsHistogram.title"))+" ")]),n("v-card-text",[n("v-row",[n("Bar",{staticStyle:{width:"100%"},attrs:{"chart-data":e.chartData,"chart-options":e.chartOptions,height:e.chartHeight}})],1)],1)],1)},Et=[],Nt=n("6b78");function Rt(e){return{x:e.timestamp,y:e.count}}var Pt={name:"ConnectionsHistogram",components:{Bar:ze["a"]},data:function(){return{chartHeight:120,chartOptions:{parsing:!1,scales:{x:{type:"time",time:{stepSize:1,unit:"minute"}},y:{type:"linear",beginAtZero:!0,suggestedMax:10,ticks:{precision:0}}}}}},computed:Object(r["a"])(Object(r["a"])({},Object(l["d"])("main",["aggregatedEvents"])),{},{connectionEvents:function(){return this.aggregatedEvents.filter((function(e){return"rawConnection"===e.type})).map(Rt)},disconnectionEvents:function(){return this.aggregatedEvents.filter((function(e){return"rawDisconnection"===e.type})).map(Rt)},chartData:function(){return{datasets:[{label:this.$i18n.t("events.type.connection"),backgroundColor:v["a"].green.base,data:this.connectionEvents},{label:this.$i18n.t("events.type.disconnection"),backgroundColor:v["a"].red.base,data:this.disconnectionEvents}]}}}),created:function(){this.updateChartBounds(),this.interval=setInterval(this.updateChartBounds,1e4)},beforeDestroy:function(){clearInterval(this.interval)},methods:{updateChartBounds:function(){var e=new Date;this.chartOptions.scales.x.min=Object(Nt["a"])(e,10),this.chartOptions.scales.x.max=e}}},Bt=Pt,At=Object(b["a"])(Bt,It,Et,!1,null,null,null),Ut=At.exports;k()(At,{VCard:Ce["a"],VCardText:xe["a"],VCardTitle:xe["b"],VRow:lt["a"]});var Lt=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("v-card",[n("v-card-title",{staticClass:"text-center"},[e._v(" "+e._s(e.$t("dashboard.bytesHistogram.title"))+" ")]),n("v-card-text",[n("v-row",[n("Bar",{staticStyle:{width:"100%"},attrs:{"chart-data":e.chartData,"chart-options":e.chartOptions,height:e.chartHeight}})],1)],1)],1)},Mt=[];function Ht(e){return{x:e.timestamp,y:e.count}}var qt={name:"BytesHistogram",components:{Bar:ze["a"]},data:function(){return{chartHeight:120,chartOptions:{parsing:!1,scales:{x:{type:"time",time:{stepSize:1,unit:"minute"}},y:{type:"linear",beginAtZero:!0,suggestedMax:1e3,ticks:{precision:0}}}}}},computed:Object(r["a"])(Object(r["a"])({},Object(l["d"])("main",["aggregatedEvents"])),{},{bytesIn:function(){return this.aggregatedEvents.filter((function(e){return"bytesIn"===e.type})).map(Ht)},bytesOut:function(){return this.aggregatedEvents.filter((function(e){return"bytesOut"===e.type})).map(Ht)},chartData:function(){return{datasets:[{label:this.$i18n.t("dashboard.bytesHistogram.bytesIn"),backgroundColor:v["a"].green.base,data:this.bytesIn},{label:this.$i18n.t("dashboard.bytesHistogram.bytesOut"),backgroundColor:v["a"].red.base,data:this.bytesOut}]}}}),created:function(){this.updateChartBounds(),this.interval=setInterval(this.updateChartBounds,1e4)},beforeDestroy:function(){clearInterval(this.interval)},methods:{updateChartBounds:function(){var e=new Date;this.chartOptions.scales.x.min=Object(Nt["a"])(e,10),this.chartOptions.scales.x.max=e}}},Ft=qt,zt=Object(b["a"])(Ft,Lt,Mt,!1,null,null,null),Jt=zt.exports;k()(zt,{VCard:Ce["a"],VCardText:xe["a"],VCardTitle:xe["b"],VRow:lt["a"]});var Gt={name:"Dashboard",components:{NamespacesOverview:Tt,ServersOverview:Ct,ClientsOverview:mt,ConnectionsHistogram:Ut,BytesHistogram:Jt},computed:Object(r["a"])({breadcrumbItems:function(){return[{text:this.$t("dashboard.title"),disabled:!0}]}},Object(l["b"])("config",["hasAggregatedValues"]))},Kt=Gt,Wt=n("2bc5"),Yt=n("62ad"),Zt=Object(b["a"])(Kt,Me,He,!1,null,null,null),Qt=Zt.exports;k()(Zt,{VBreadcrumbs:Wt["a"],VCol:Yt["a"],VContainer:Pe["a"],VRow:lt["a"]});var Xt=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("v-breadcrumbs",{attrs:{items:e.breadcrumbItems}}),n("v-card",[n("v-card-text",[n("NamespaceSelector")],1),n("v-data-table",{staticClass:"row-pointer",attrs:{headers:e.headers,items:e.sockets,"footer-props":e.footerProps},on:{"click:row":e.displayDetails},scopedSlots:e._u([{key:"item.transport",fn:function(e){var t=e.value;return[n("Transport",{attrs:{transport:t}})]}},{key:"item.actions",fn:function(t){var a=t.item;return[e.isSocketDisconnectSupported?n("v-tooltip",{attrs:{bottom:""},scopedSlots:e._u([{key:"activator",fn:function(t){var s=t.on,o=t.attrs;return[n("v-btn",e._g(e._b({staticClass:"ml-3",attrs:{disabled:e.isReadonly,small:""},on:{click:function(t){return e.disconnect(a)}}},"v-btn",o,!1),s),[n("v-icon",[e._v("mdi-logout")])],1)]}}],null,!0)},[n("span",[e._v(e._s(e.$t("sockets.disconnect")))])]):e._e()]}}])})],1)],1)},en=[],tn=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("v-select",{staticClass:"selector",attrs:{value:e.selectedNamespace,items:e.namespaces,"item-text":"name","item-value":"name",label:e.$t("select-namespace"),"persistent-hint":"","return-object":""},on:{change:e.selectNamespace}})},nn=[],an={name:"NamespaceSelector",computed:Object(r["a"])({},Object(l["d"])({selectedNamespace:function(e){return e.main.selectedNamespace},namespaces:function(e){return Object(jt["a"])(e.main.namespaces,"name")}})),methods:Object(r["a"])({},Object(l["c"])("main",["selectNamespace"]))},sn=an,on=(n("f712"),Object(b["a"])(sn,tn,nn,!1,null,"2c330798",null)),rn=on.exports;k()(on,{VSelect:F["a"]});var cn={name:"Sockets",components:{Transport:Ze,NamespaceSelector:rn},data:function(){return{footerProps:{"items-per-page-options":[20,100,-1]}}},computed:Object(r["a"])(Object(r["a"])({breadcrumbItems:function(){return[{text:this.$t("sockets.title"),disabled:!0}]},headers:function(){return[{text:"#",value:"id",align:"start"},{text:this.$t("sockets.address"),value:"handshake.address"},{text:this.$t("sockets.transport"),value:"transport"},{value:"actions",align:"end",sortable:!1}]}},Object(l["b"])("main",["sockets"])),Object(l["d"])({selectedNamespace:function(e){return e.main.selectedNamespace},isReadonly:function(e){return e.config.readonly},isSocketDisconnectSupported:function(e){return e.config.supportedFeatures.includes("DISCONNECT")}})),methods:{disconnect:function(e){Te.socket.emit("_disconnect",e.nsp,!1,e.id)},displayDetails:function(e){this.$router.push({name:"socket",params:{nsp:this.selectedNamespace.name,id:e.id}})}}},ln=cn,dn=(n("513c"),n("8fea")),un=n("3a2f"),mn=Object(b["a"])(ln,Xt,en,!1,null,"1d29c60a",null),pn=mn.exports;k()(mn,{VBreadcrumbs:Wt["a"],VBtn:I["a"],VCard:Ce["a"],VCardText:xe["a"],VDataTable:dn["a"],VIcon:le["a"],VTooltip:un["a"]});var vn=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("v-breadcrumbs",{attrs:{items:e.breadcrumbItems}}),e.socket?n("v-container",{attrs:{fluid:""}},[n("v-row",[n("v-col",{attrs:{sm:"12",md:"6",lg:"4"}},[n("SocketDetails",{attrs:{socket:e.socket,client:e.client}})],1),n("v-col",{attrs:{sm:"12",md:"6",lg:"4"}},[n("InitialRequest",{attrs:{socket:e.socket}})],1),n("v-col",{attrs:{sm:"12",md:"6",lg:"4"}},[n("SocketRooms",{attrs:{socket:e.socket}})],1)],1)],1):e._e()],1)},hn=[],fn=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("v-card",{staticClass:"fill-height"},[n("v-card-title",[e._v(e._s(e.$t("rooms.title")))]),n("v-data-table",{staticClass:"row-pointer",attrs:{headers:e.headers,items:e.roomsAsObjects,dense:""},on:{"click:row":e.displayDetails},scopedSlots:e._u([{key:"item.actions",fn:function(t){var a=t.item;return[e.isSocketLeaveSupported?n("v-tooltip",{attrs:{bottom:""},scopedSlots:e._u([{key:"activator",fn:function(t){var s=t.on,o=t.attrs;return[n("v-btn",e._g(e._b({staticClass:"ml-3",attrs:{disabled:e.isReadonly,small:""},on:{click:function(t){return e.leave(a)}}},"v-btn",o,!1),s),[n("v-icon",[e._v("mdi-tag-off-outline")])],1)]}}],null,!0)},[n("span",[e._v(e._s(e.$t("sockets.leave")))])]):e._e()]}}])}),n("v-card-text",[n("form",{on:{submit:function(t){return t.preventDefault(),e.onSubmit(t)}}},[n("v-combobox",{staticClass:"select-room d-inline-block mr-3",attrs:{"search-input":e.newRoom,label:e.$t("sockets.join-a-room"),items:e.availableRooms,"item-value":"name","item-text":"name",disabled:e.isReadonly,"return-object":!1},on:{"update:searchInput":function(t){e.newRoom=t},"update:search-input":function(t){e.newRoom=t}}}),n("v-tooltip",{attrs:{bottom:""},scopedSlots:e._u([{key:"activator",fn:function(t){var a=t.on,s=t.attrs;return[n("v-btn",e._g(e._b({attrs:{type:"submit",small:"",disabled:e.isReadonly}},"v-btn",s,!1),a),[n("v-icon",[e._v("mdi-tag-plus-outline")])],1)]}}])},[n("span",[e._v(e._s(e.$t("sockets.join")))])])],1)])],1)},bn=[],gn=(n("fb6a"),n("1775")),kn={name:"SocketRooms",props:{socket:Object},data:function(){return{newRoom:""}},computed:Object(r["a"])(Object(r["a"])({headers:function(){return[{text:this.$t("id"),value:"name",align:"start"},{value:"actions",align:"end",sortable:!1}]},roomsAsObjects:function(){return this.socket.rooms.slice(0).sort().map((function(e){return{name:e}}))},availableRooms:function(){return Object(gn["a"])(this.findRoomsByNamespace(this.socket.nsp),this.roomsAsObjects,"name")}},Object(l["d"])({selectedNamespace:function(e){return e.main.selectedNamespace},isReadonly:function(e){return e.config.readonly},isSocketLeaveSupported:function(e){return e.config.supportedFeatures.includes("LEAVE")},isSocketDisconnectSupported:function(e){return e.config.supportedFeatures.includes("DISCONNECT")}})),Object(l["b"])("main",["findRoomsByNamespace"])),methods:{emit:function(){},onSubmit:function(){Te.socket.emit("join",this.socket.nsp,this.newRoom,this.socket.id),this.newRoom=""},leave:function(e){Te.socket.emit("leave",this.socket.nsp,e.name,this.socket.id)},disconnect:function(){Te.socket.emit("_disconnect",this.socket.nsp,!1,this.socket.id)},displayDetails:function(e){this.$router.push({name:"room",params:{nsp:this.socket.nsp,name:e.name}})}}},_n=kn,yn=(n("4a85"),n("2b5d")),Sn=Object(b["a"])(_n,fn,bn,!1,null,"5631eb89",null),On=Sn.exports;k()(Sn,{VBtn:I["a"],VCard:Ce["a"],VCardText:xe["a"],VCardTitle:xe["b"],VCombobox:yn["a"],VDataTable:dn["a"],VIcon:le["a"],VTooltip:un["a"]});var Cn=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("v-card",{staticClass:"fill-height"},[n("v-card-title",[e._v(e._s(e.$t("details")))]),n("v-card-text",[n("h4",[e._v(e._s(e.$t("sockets.client")))])]),n("v-simple-table",{attrs:{dense:""}},[[n("tbody",[n("tr",[n("td",{staticClass:"key-column"},[e._v(e._s(e.$t("id")))]),n("td",[e.client.connected?n("router-link",{staticClass:"link",attrs:{to:e.toClient}},[e._v(e._s(e.client.id))]):n("span",[e._v(e._s(e.client.id))])],1),n("td")]),n("tr",[n("td",{staticClass:"key-column"},[e._v(e._s(e.$t("status")))]),n("td",[n("ConnectionStatus",{attrs:{connected:e.client.connected}})],1),n("td",{attrs:{align:"right"}},[e.isSocketDisconnectSupported&&e.client.connected?n("v-tooltip",{attrs:{bottom:""},scopedSlots:e._u([{key:"activator",fn:function(t){var a=t.on,s=t.attrs;return[n("v-btn",e._g(e._b({attrs:{disabled:e.isReadonly,small:""},on:{click:function(t){return e.disconnectClient()}}},"v-btn",s,!1),a),[n("v-icon",[e._v("mdi-logout")])],1)]}}],null,!1,1004975867)},[n("span",[e._v(e._s(e.$t("clients.disconnect")))])]):e._e()],1)]),n("tr",[n("td",{staticClass:"key-column"},[e._v(e._s(e.$t("sockets.transport")))]),n("td",[n("Transport",{attrs:{transport:e.socket.transport}})],1),n("td")]),n("tr",[n("td",{staticClass:"key-column"},[e._v(e._s(e.$t("sockets.address")))]),n("td",[e._v(e._s(e.socket.handshake.address))]),n("td")])])]],2),n("v-card-text",[n("h4",[e._v(e._s(e.$t("sockets.socket")))])]),n("v-simple-table",{attrs:{dense:""},scopedSlots:e._u([{key:"default",fn:function(){return[n("tbody",[n("tr",[n("td",{staticClass:"key-column"},[e._v(e._s(e.$t("namespace")))]),n("td",[n("code",[e._v(e._s(e.socket.nsp))])]),n("td")]),n("tr",[n("td",{staticClass:"key-column"},[e._v(e._s(e.$t("id")))]),n("td",[e._v(e._s(e.socket.id))]),n("td")]),n("tr",[n("td",{staticClass:"key-column"},[e._v(e._s(e.$t("data")))]),n("td",[n("pre",[n("code",[e._v(e._s(JSON.stringify(e.socket.data,null,2)))])])]),n("td")]),n("tr",[n("td",{staticClass:"key-column"},[e._v(e._s(e.$t("status")))]),n("td",[n("ConnectionStatus",{attrs:{connected:e.socket.connected}})],1),n("td",{attrs:{align:"right"}},[e.isSocketDisconnectSupported&&e.socket.connected?n("v-tooltip",{attrs:{bottom:""},scopedSlots:e._u([{key:"activator",fn:function(t){var a=t.on,s=t.attrs;return[n("v-btn",e._g(e._b({staticClass:"ml-3",attrs:{disabled:e.isReadonly,small:""},on:{click:function(t){return e.disconnectSocket()}}},"v-btn",s,!1),a),[n("v-icon",[e._v("mdi-logout")])],1)]}}],null,!1,2351110648)},[n("span",[e._v(e._s(e.$t("sockets.disconnect")))])]):e._e()],1)]),n("tr",[n("td",{staticClass:"key-column"},[e._v(e._s(e.$t("sockets.creation-date")))]),n("td",[e._v(e._s(e.creationDate))]),n("td")])])]},proxy:!0}])})],1)},xn=[],$n={name:"SocketDetails",components:{ConnectionStatus:$,Transport:Ze},props:{socket:Object,client:Object},computed:Object(r["a"])({toClient:function(){return{name:"client",params:{id:this.client.id}}},creationDate:function(){return new Date(this.socket.handshake.issued).toISOString()}},Object(l["d"])({isReadonly:function(e){return e.config.readonly},isSocketDisconnectSupported:function(e){return e.config.supportedFeatures.includes("DISCONNECT")}})),methods:{navigateToClient:function(){this.$router.push({name:"client",params:{id:this.client.id}})},disconnectClient:function(){Te.socket.emit("_disconnect",this.socket.nsp,!0,this.socket.id)},disconnectSocket:function(){Te.socket.emit("_disconnect",this.socket.nsp,!1,this.socket.id)}}},jn=$n,wn=(n("eb02"),Object(b["a"])(jn,Cn,xn,!1,null,"3c0dcfcd",null)),Vn=wn.exports;k()(wn,{VBtn:I["a"],VCard:Ce["a"],VCardText:xe["a"],VCardTitle:xe["b"],VIcon:le["a"],VSimpleTable:dt["a"],VTooltip:un["a"]});var Dn=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("v-card",{staticClass:"fill-height"},[n("v-card-title",[e._v(e._s(e.$t("sockets.initial-request")))]),n("v-card-text",[n("h4",[e._v(e._s(e.$t("sockets.headers")))])]),n("KeyValueTable",{attrs:{object:e.socket.handshake.headers}}),n("v-card-text",[n("h4",[e._v(e._s(e.$t("sockets.query-params")))])]),n("KeyValueTable",{attrs:{object:e.socket.handshake.query}})],1)},Tn=[],In=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("v-simple-table",{attrs:{dense:""},scopedSlots:e._u([{key:"default",fn:function(){return[n("thead",[n("tr",[n("th",[e._v(e._s(e.$t("name")))]),n("th",[e._v(e._s(e.$t("value")))])])]),n("tbody",e._l(e.items,(function(t){var a=t.key,s=t.value;return n("tr",{key:a},[n("td",{staticClass:"key-column"},[e._v(e._s(a))]),n("td",[e._v(e._s(s))])])})),0)]},proxy:!0}])})},En=[],Nn=(n("b64b"),{name:"KeyValueTable",props:{object:Object},computed:{items:function(){var e=this,t=Object.keys(this.object);return t.sort().map((function(t){return{key:t,value:e.object[t]}}))}}}),Rn=Nn,Pn=(n("786c"),Object(b["a"])(Rn,In,En,!1,null,"18284f59",null)),Bn=Pn.exports;k()(Pn,{VSimpleTable:dt["a"]});var An={name:"InitialRequest",components:{KeyValueTable:Bn},props:{socket:Object}},Un=An,Ln=Object(b["a"])(Un,Dn,Tn,!1,null,null,null),Mn=Ln.exports;k()(Ln,{VCard:Ce["a"],VCardText:xe["a"],VCardTitle:xe["b"]});var Hn={name:"Socket",components:{InitialRequest:Mn,SocketDetails:Vn,SocketRooms:On},data:function(){return{socket:null,client:null}},computed:Object(r["a"])({breadcrumbItems:function(){return[{text:this.$t("sockets.title"),to:{name:"sockets"}},{text:this.$t("sockets.details"),disabled:!0}]}},Object(l["b"])("main",["findSocketById","findClientById"])),mounted:function(){this.socket=this.findSocketById(this.$route.params.nsp,this.$route.params.id),this.socket&&(this.client=this.findClientById(this.socket.clientId))}},qn=Hn,Fn=Object(b["a"])(qn,vn,hn,!1,null,"14172ed0",null),zn=Fn.exports;k()(Fn,{VBreadcrumbs:Wt["a"],VCol:Yt["a"],VContainer:Pe["a"],VRow:lt["a"]});var Jn=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("v-breadcrumbs",{attrs:{items:e.breadcrumbItems}}),n("v-card",[n("v-card-text",{staticClass:"d-flex"},[n("NamespaceSelector"),n("v-switch",{staticClass:"ml-3",attrs:{label:e.$t("rooms.show-private"),inset:"",dense:""},on:{change:e.onPrivateRoomsUpdate},model:{value:e.showPrivateRooms,callback:function(t){e.showPrivateRooms=t},expression:"showPrivateRooms"}})],1),n("v-data-table",{staticClass:"row-pointer",attrs:{headers:e.headers,items:e.filteredRooms,"footer-props":e.footerProps},on:{"click:row":e.displayDetails},scopedSlots:e._u([{key:"item.sockets",fn:function(t){var n=t.item;return[e._v(" "+e._s(n.sockets.length)+" ")]}},{key:"item.isPrivate",fn:function(e){var t=e.value;return[n("RoomType",{attrs:{"is-private":t}})]}},{key:"item.actions",fn:function(t){var a=t.item;return[e.isMultiLeaveSupported&&!a.isPrivate?n("v-tooltip",{attrs:{bottom:""},scopedSlots:e._u([{key:"activator",fn:function(t){var s=t.on,o=t.attrs;return[n("v-btn",e._g(e._b({staticClass:"ml-3",attrs:{disabled:e.isReadonly,small:""},on:{click:function(t){return e.clear(a)}}},"v-btn",o,!1),s),[n("v-icon",[e._v("mdi-tag-off-outline")])],1)]}}],null,!0)},[n("span",[e._v(e._s(e.$t("rooms.clear")))])]):e._e(),e.isMultiDisconnectSupported?n("v-tooltip",{attrs:{bottom:""},scopedSlots:e._u([{key:"activator",fn:function(t){var s=t.on,o=t.attrs;return[n("v-btn",e._g(e._b({staticClass:"ml-3",attrs:{disabled:e.isReadonly,small:""},on:{click:function(t){return e.disconnect(a)}}},"v-btn",o,!1),s),[n("v-icon",[e._v("mdi-logout")])],1)]}}],null,!0)},[n("span",[e._v(e._s(e.$t("rooms.disconnect")))])]):e._e()]}}])})],1)],1)},Gn=[],Kn=(n("5319"),n("ac1f"),function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("Status",{attrs:{value:!e.isPrivate,"ok-label":e.$t("rooms.public"),"ko-label":e.$t("rooms.private")}})}),Wn=[],Yn={name:"RoomType",components:{Status:S},props:{isPrivate:Boolean}},Zn=Yn,Qn=Object(b["a"])(Zn,Kn,Wn,!1,null,null,null),Xn=Qn.exports,ea={name:"Rooms",components:{RoomType:Xn,NamespaceSelector:rn},data:function(){return{showPrivateRooms:!1,footerProps:{"items-per-page-options":[20,100,-1]}}},computed:Object(r["a"])(Object(r["a"])(Object(r["a"])({breadcrumbItems:function(){return[{text:this.$t("rooms.title"),disabled:!0}]},headers:function(){return[{text:this.$t("id"),value:"name",align:"start"},{text:this.$t("type"),value:"isPrivate"},{text:this.$t("rooms.sockets-count"),value:"sockets"},{value:"actions",align:"end",sortable:!1}]}},Object(l["b"])("main",["rooms"])),Object(l["d"])({selectedNamespace:function(e){return e.main.selectedNamespace},isReadonly:function(e){return e.config.readonly},isMultiLeaveSupported:function(e){return e.config.supportedFeatures.includes("MLEAVE")},isMultiDisconnectSupported:function(e){return e.config.supportedFeatures.includes("MDISCONNECT")}})),{},{filteredRooms:function(){var e=this.showPrivateRooms?this.rooms:this.rooms.filter((function(e){return!e.isPrivate}));return Object(jt["a"])(e,"name")}}),methods:{clear:function(e){Te.socket.emit("leave",this.selectedNamespace.name,e.name)},disconnect:function(e){Te.socket.emit("_disconnect",this.selectedNamespace.name,!1,e.name)},displayDetails:function(e){this.$router.push({name:"room",params:{nsp:this.selectedNamespace.name,name:e.name}})},onPrivateRoomsUpdate:function(e){var t=e?{p:1}:{};this.$router.replace({name:"rooms",query:t})}},mounted:function(){this.showPrivateRooms="1"===this.$route.query.p}},ta=ea,na=(n("3a99"),Object(b["a"])(ta,Jn,Gn,!1,null,"29992f63",null)),aa=na.exports;k()(na,{VBreadcrumbs:Wt["a"],VBtn:I["a"],VCard:Ce["a"],VCardText:xe["a"],VDataTable:dn["a"],VIcon:le["a"],VSwitch:Z["a"],VTooltip:un["a"]});var sa=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("v-breadcrumbs",{attrs:{items:e.breadcrumbItems}}),n("v-card",[n("v-data-table",{staticClass:"row-pointer",attrs:{headers:e.headers,items:e.clients,"footer-props":e.footerProps},on:{"click:row":e.displayDetails},scopedSlots:e._u([{key:"item.address",fn:function(t){var a=t.item;return[a.sockets.length?n("span",[e._v(e._s(a.sockets[0].handshake.address))]):e._e()]}},{key:"item.transport",fn:function(t){var a=t.item;return[a.sockets.length?n("Transport",{attrs:{transport:a.sockets[0].transport}}):e._e()]}},{key:"item.sockets",fn:function(t){var n=t.item;return[e._v(" "+e._s(n.sockets.length)+" ")]}},{key:"item.actions",fn:function(t){var a=t.item;return[e.isSocketDisconnectSupported?n("v-tooltip",{attrs:{bottom:""},scopedSlots:e._u([{key:"activator",fn:function(t){var s=t.on,o=t.attrs;return[n("v-btn",e._g(e._b({staticClass:"ml-3",attrs:{disabled:e.isReadonly,small:""},on:{click:function(t){return e.disconnect(a)}}},"v-btn",o,!1),s),[n("v-icon",[e._v("mdi-logout")])],1)]}}],null,!0)},[n("span",[e._v(e._s(e.$t("clients.disconnect")))])]):e._e()]}}])})],1)],1)},oa=[],ra={name:"Clients",components:{Transport:Ze},data:function(){return{footerProps:{"items-per-page-options":[20,100,-1]}}},computed:Object(r["a"])({breadcrumbItems:function(){return[{text:this.$t("clients.title"),disabled:!0}]},headers:function(){return[{text:"#",value:"id",align:"start"},{text:this.$t("sockets.address"),value:"address"},{text:this.$t("sockets.transport"),value:"transport"},{text:this.$t("clients.sockets-count"),value:"sockets"},{value:"actions",align:"end",sortable:!1}]}},Object(l["d"])({clients:function(e){return e.main.clients},isReadonly:function(e){return e.config.readonly},isSocketDisconnectSupported:function(e){return e.config.supportedFeatures.includes("DISCONNECT")}})),methods:{disconnect:function(e){var t=e.sockets[0];t&&Te.socket.emit("_disconnect",t.nsp,!0,t.id)},displayDetails:function(e){this.$router.push({name:"client",params:{id:e.id}})}}},ia=ra,ca=(n("ff8e"),Object(b["a"])(ia,sa,oa,!1,null,"57b53591",null)),la=ca.exports;k()(ca,{VBreadcrumbs:Wt["a"],VBtn:I["a"],VCard:Ce["a"],VDataTable:dn["a"],VIcon:le["a"],VTooltip:un["a"]});var da=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("v-breadcrumbs",{attrs:{items:e.breadcrumbItems}}),e.client?n("v-container",{attrs:{fluid:""}},[n("v-row",[n("v-col",{attrs:{sm:"12",md:"6",lg:"4"}},[n("ClientDetails",{attrs:{client:e.client,socket:e.socket}})],1),n("v-col",{attrs:{sm:"12",md:"6",lg:"4"}},[e.socket?n("InitialRequest",{attrs:{socket:e.socket}}):e._e()],1),n("v-col",{attrs:{sm:"12",md:"6",lg:"4"}},[n("ClientSockets",{attrs:{sockets:e.client.sockets}})],1)],1)],1):e._e()],1)},ua=[],ma=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("v-card",{staticClass:"fill-height"},[n("v-card-title",[e._v(e._s(e.$t("details")))]),n("v-simple-table",{attrs:{dense:""}},[[n("tbody",[n("tr",[n("td",{staticClass:"key-column"},[e._v(e._s(e.$t("id")))]),n("td",[e._v(" "+e._s(e.client.id)+" ")]),n("td")]),n("tr",[n("td",{staticClass:"key-column"},[e._v(e._s(e.$t("status")))]),n("td",[n("ConnectionStatus",{attrs:{connected:e.client.connected}})],1),n("td",{attrs:{align:"right"}},[e.isSocketDisconnectSupported&&e.client.connected?n("v-tooltip",{attrs:{bottom:""},scopedSlots:e._u([{key:"activator",fn:function(t){var a=t.on,s=t.attrs;return[n("v-btn",e._g(e._b({attrs:{disabled:e.isReadonly,small:""},on:{click:function(t){return e.disconnectClient()}}},"v-btn",s,!1),a),[n("v-icon",[e._v("mdi-logout")])],1)]}}],null,!1,1004975867)},[n("span",[e._v(e._s(e.$t("clients.disconnect")))])]):e._e()],1)]),n("tr",[n("td",{staticClass:"key-column"},[e._v(e._s(e.$t("sockets.transport")))]),n("td",[n("Transport",{attrs:{transport:e.socket.transport}})],1),n("td")]),n("tr",[n("td",{staticClass:"key-column"},[e._v(e._s(e.$t("sockets.address")))]),n("td",[e._v(e._s(e.socket.handshake.address))]),n("td")])])]],2)],1)},pa=[],va={name:"ClientDetails",components:{ConnectionStatus:$,Transport:Ze},props:{client:Object,socket:Object},computed:Object(r["a"])({},Object(l["d"])({isReadonly:function(e){return e.config.readonly},isSocketDisconnectSupported:function(e){return e.config.supportedFeatures.includes("DISCONNECT")}})),methods:{disconnectClient:function(){var e=this.client.sockets[0];e&&Te.socket.emit("_disconnect",e.nsp,!0,e.id)}}},ha=va,fa=(n("6602"),Object(b["a"])(ha,ma,pa,!1,null,"8d2424e4",null)),ba=fa.exports;k()(fa,{VBtn:I["a"],VCard:Ce["a"],VCardTitle:xe["b"],VIcon:le["a"],VSimpleTable:dt["a"],VTooltip:un["a"]});var ga=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("v-card",[n("v-card-title",[e._v(e._s(e.$t("sockets.title")))]),n("v-data-table",{staticClass:"row-pointer",attrs:{headers:e.headers,items:e.sockets,dense:""},on:{"click:row":e.displayDetails},scopedSlots:e._u([{key:"item.nsp",fn:function(t){var a=t.value;return[n("code",[e._v(e._s(a))])]}},{key:"item.actions",fn:function(t){var a=t.item;return[e.isSocketDisconnectSupported?n("v-tooltip",{attrs:{bottom:""},scopedSlots:e._u([{key:"activator",fn:function(t){var s=t.on,o=t.attrs;return[n("v-btn",e._g(e._b({staticClass:"ml-3",attrs:{disabled:e.isReadonly,small:""},on:{click:function(t){return e.disconnect(a)}}},"v-btn",o,!1),s),[n("v-icon",[e._v("mdi-logout")])],1)]}}],null,!0)},[n("span",[e._v(e._s(e.$t("sockets.disconnect")))])]):e._e()]}}])})],1)},ka=[],_a={name:"ClientSockets",props:{sockets:Array},computed:Object(r["a"])({headers:function(){return[{text:"#",value:"id",align:"start"},{text:this.$t("namespace"),value:"nsp"},{value:"actions",align:"end",sortable:!1}]}},Object(l["d"])({isReadonly:function(e){return e.config.readonly},isSocketDisconnectSupported:function(e){return e.config.supportedFeatures.includes("DISCONNECT")}})),methods:{disconnect:function(e){Te.socket.emit("_disconnect",e.nsp,!1,e.id)},displayDetails:function(e){this.$router.push({name:"socket",params:{nsp:e.nsp,id:e.id}})}}},ya=_a,Sa=(n("1993"),Object(b["a"])(ya,ga,ka,!1,null,"38772079",null)),Oa=Sa.exports;k()(Sa,{VBtn:I["a"],VCard:Ce["a"],VCardTitle:xe["b"],VDataTable:dn["a"],VIcon:le["a"],VTooltip:un["a"]});var Ca={name:"Client",components:{ClientSockets:Oa,InitialRequest:Mn,ClientDetails:ba},data:function(){return{socket:null,client:null}},computed:Object(r["a"])({breadcrumbItems:function(){return[{text:this.$t("clients.title"),to:{name:"clients"},exact:!0},{text:this.$t("clients.details"),disabled:!0}]}},Object(l["b"])("main",["findClientById"])),mounted:function(){this.client=this.findClientById(this.$route.params.id),this.client&&(this.socket=this.client.sockets[0])}},xa=Ca,$a=Object(b["a"])(xa,da,ua,!1,null,"3d554d12",null),ja=$a.exports;k()($a,{VBreadcrumbs:Wt["a"],VCol:Yt["a"],VContainer:Pe["a"],VRow:lt["a"]});var wa=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("v-breadcrumbs",{attrs:{items:e.breadcrumbItems}}),n("v-card",[n("v-data-table",{attrs:{headers:e.headers,items:e.servers,"footer-props":e.footerProps},scopedSlots:e._u([{key:"item.uptime",fn:function(t){var n=t.value;return[e._v(" "+e._s(e.formatDuration(n))+" ")]}},{key:"item.lastPing",fn:function(t){var n=t.value;return[e._v(" "+e._s(e.delaySinceLastPing(n))+" ")]}},{key:"item.healthy",fn:function(e){var t=e.value;return[n("ServerStatus",{attrs:{healthy:t}})]}},{key:"item.actions",fn:function(t){var a=t.item;return[a.healthy?e._e():n("v-btn",{attrs:{small:""},on:{click:function(t){return e.removeServer(a)}}},[n("v-icon",[e._v("mdi-delete-outline")])],1)]}}])})],1)],1)},Va=[],Da={name:"Servers",components:{ServerStatus:_t},data:function(){return{footerProps:{"items-per-page-options":[20,100,-1]},now:Date.now()}},created:function(){var e=this;this.interval=setInterval((function(){e.now=Date.now()}),1e3)},beforeDestroy:function(){clearInterval(this.interval)},computed:Object(r["a"])({breadcrumbItems:function(){return[{text:this.$t("servers.title"),disabled:!0}]},headers:function(){return[{text:this.$t("id"),value:"serverId"},{text:this.$t("servers.hostname"),value:"hostname"},{text:this.$t("servers.pid"),value:"pid"},{text:this.$t("servers.uptime"),value:"uptime"},{text:this.$t("servers.clients-count"),value:"clientsCount"},{text:this.$t("servers.last-ping"),value:"lastPing"},{text:this.$t("status"),value:"healthy"},{value:"actions",align:"end",sortable:!1}]}},Object(l["d"])({servers:function(e){return Object(jt["a"])(e.servers.servers,"serverId")}})),methods:{formatDuration:nt,delaySinceLastPing:function(e){var t=this.now-e;return"".concat(nt(t/1e3)," ago")},removeServer:function(e){this.$store.commit("servers/removeServer",e.serverId)}}},Ta=Da,Ia=Object(b["a"])(Ta,wa,Va,!1,null,null,null),Ea=Ia.exports;k()(Ia,{VBreadcrumbs:Wt["a"],VBtn:I["a"],VCard:Ce["a"],VDataTable:dn["a"],VIcon:le["a"]});var Na=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("v-breadcrumbs",{attrs:{items:e.breadcrumbItems}}),e.room?n("v-container",{attrs:{fluid:""}},[n("v-row",[n("v-col",{attrs:{sm:"12",md:"4"}},[n("RoomDetails",{attrs:{room:e.room,nsp:e.$route.params.nsp}})],1),n("v-col",{attrs:{sm:"12",md:"8"}},[n("RoomSockets",{attrs:{room:e.room}})],1)],1)],1):e._e()],1)},Ra=[],Pa=function(){var e=this,t=e.$createElement,n=e._self._c||t;return e.room?n("v-card",[n("v-card-title",[e._v(e._s(e.$t("sockets.title")))]),n("v-data-table",{staticClass:"row-pointer",attrs:{headers:e.headers,items:e.room.sockets,"footer-props":e.footerProps},on:{"click:row":e.displayDetails},scopedSlots:e._u([{key:"item.transport",fn:function(e){var t=e.value;return[n("Transport",{attrs:{transport:t}})]}},{key:"item.actions",fn:function(t){var a=t.item;return[e.isSocketLeaveSupported&&!e.room.isPrivate?n("v-tooltip",{attrs:{bottom:""},scopedSlots:e._u([{key:"activator",fn:function(t){var s=t.on,o=t.attrs;return[n("v-btn",e._g(e._b({staticClass:"ml-3",attrs:{disabled:e.isReadonly,small:""},on:{click:function(t){return e.leave(a)}}},"v-btn",o,!1),s),[n("v-icon",[e._v("mdi-tag-off-outline")])],1)]}}],null,!0)},[n("span",[e._v(e._s(e.$t("rooms.leave")))])]):e._e(),e.isSocketDisconnectSupported?n("v-tooltip",{attrs:{bottom:""},scopedSlots:e._u([{key:"activator",fn:function(t){var s=t.on,o=t.attrs;return[n("v-btn",e._g(e._b({staticClass:"ml-3",attrs:{disabled:e.isReadonly,small:""},on:{click:function(t){return e.disconnect(a)}}},"v-btn",o,!1),s),[n("v-icon",[e._v("mdi-logout")])],1)]}}],null,!0)},[n("span",[e._v(e._s(e.$t("sockets.disconnect")))])]):e._e()]}}],null,!1,1763569022)})],1):e._e()},Ba=[],Aa={name:"RoomSockets",components:{Transport:Ze},props:{room:Object},data:function(){return{footerProps:{"items-per-page-options":[20,100,-1]}}},computed:Object(r["a"])(Object(r["a"])({breadcrumbItems:function(){return[{text:this.$t("rooms.title"),to:{name:"rooms"}},{text:this.$t("rooms.details"),disabled:!0}]},headers:function(){return[{text:this.$t("id"),value:"id",align:"start"},{text:this.$t("sockets.address"),value:"handshake.address"},{text:this.$t("sockets.transport"),value:"transport"},{value:"actions",align:"end",sortable:!1}]}},Object(l["b"])("main",["findRoomByName"])),Object(l["d"])({isReadonly:function(e){return e.config.readonly},isSocketLeaveSupported:function(e){return e.config.supportedFeatures.includes("LEAVE")},isSocketDisconnectSupported:function(e){return e.config.supportedFeatures.includes("DISCONNECT")}})),methods:{leave:function(e){Te.socket.emit("leave",e.nsp,this.room.name,e.id)},disconnect:function(e){Te.socket.emit("_disconnect",e.nsp,!1,e.id)},displayDetails:function(e){this.$router.push({name:"socket",params:{nsp:this.$route.params.nsp,id:e.id}})}}},Ua=Aa,La=(n("6e0b"),Object(b["a"])(Ua,Pa,Ba,!1,null,"c9425064",null)),Ma=La.exports;k()(La,{VBtn:I["a"],VCard:Ce["a"],VCardTitle:xe["b"],VDataTable:dn["a"],VIcon:le["a"],VTooltip:un["a"]});var Ha=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("v-card",{staticClass:"fill-height"},[n("v-card-title",[e._v(e._s(e.$t("details")))]),n("v-simple-table",{attrs:{dense:""}},[[n("tbody",[n("tr",[n("td",{staticClass:"key-column"},[e._v(e._s(e.$t("namespace")))]),n("td",[n("code",[e._v(e._s(e.nsp))])]),n("td")]),n("tr",[n("td",{staticClass:"key-column"},[e._v(e._s(e.$t("id")))]),n("td",[e._v(" "+e._s(e.room.name)+" ")]),n("td")]),n("tr",[n("td",{staticClass:"key-column"},[e._v(e._s(e.$t("status")))]),n("td",[n("RoomStatus",{attrs:{active:e.room.active}})],1),n("td",{attrs:{align:"right"}},[e.isMultiLeaveSupported&&!e.room.isPrivate?n("v-tooltip",{attrs:{bottom:""},scopedSlots:e._u([{key:"activator",fn:function(t){var a=t.on,s=t.attrs;return[n("v-btn",e._g(e._b({staticClass:"ml-3",attrs:{disabled:e.isReadonly,small:""},on:{click:function(t){return e.clear()}}},"v-btn",s,!1),a),[n("v-icon",[e._v("mdi-tag-off-outline")])],1)]}}],null,!1,464351539)},[n("span",[e._v(e._s(e.$t("rooms.clear")))])]):e._e()],1)]),n("tr",[n("td",{staticClass:"key-column"},[e._v(e._s(e.$t("type")))]),n("td",[n("RoomType",{attrs:{"is-private":e.room.isPrivate}})],1),n("td")])])]],2)],1)},qa=[],Fa=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("Status",{attrs:{value:e.active,"ok-label":e.$t("rooms.active"),"ko-label":e.$t("rooms.deleted")}})},za=[],Ja={name:"RoomStatus",components:{Status:S},props:{active:Boolean}},Ga=Ja,Ka=Object(b["a"])(Ga,Fa,za,!1,null,null,null),Wa=Ka.exports,Ya={name:"RoomDetails",components:{RoomType:Xn,RoomStatus:Wa},props:{room:Object,nsp:String},computed:Object(r["a"])({},Object(l["d"])({isReadonly:function(e){return e.config.readonly},isMultiLeaveSupported:function(e){return e.config.supportedFeatures.includes("MLEAVE")}})),methods:{clear:function(){Te.socket.emit("leave",this.nsp,this.room.name)}}},Za=Ya,Qa=Object(b["a"])(Za,Ha,qa,!1,null,"7b3793ea",null),Xa=Qa.exports;k()(Qa,{VBtn:I["a"],VCard:Ce["a"],VCardTitle:xe["b"],VIcon:le["a"],VSimpleTable:dt["a"],VTooltip:un["a"]});var es={name:"Sockets",components:{RoomDetails:Xa,RoomSockets:Ma},data:function(){return{room:null}},computed:Object(r["a"])({breadcrumbItems:function(){return[{text:this.$t("rooms.title"),to:{name:"rooms"}},{text:this.$t("rooms.details"),disabled:!0}]}},Object(l["b"])("main",["findRoomByName"])),mounted:function(){this.room=this.findRoomByName(this.$route.params.nsp,this.$route.params.name)}},ts=es,ns=Object(b["a"])(ts,Na,Ra,!1,null,null,null),as=ns.exports;k()(ns,{VBreadcrumbs:Wt["a"],VCol:Yt["a"],VContainer:Pe["a"],VRow:lt["a"]});var ss=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("v-breadcrumbs",{attrs:{items:e.breadcrumbItems}}),n("v-card",[n("v-card-text",[n("NamespaceSelector")],1),n("v-data-table",{attrs:{headers:e.headers,items:e.events,"footer-props":e.footerProps,"item-key":"eventId","sort-by":["timestamp","eventId"],"sort-desc":[!0,!0],"single-expand":"","show-expand":""},scopedSlots:e._u([{key:"item.type",fn:function(e){var t=e.value;return[n("EventType",{attrs:{type:t}})]}},{key:"item.id",fn:function(t){var a=t.value;return[n("router-link",{staticClass:"link",attrs:{to:e.socketDetailsRoute(a)}},[e._v(e._s(a))])]}},{key:"item.args",fn:function(t){var a=t.item,s=t.value;return[e.isExpandable(a)?n("span",[e._v(" "+e._s(e.$t("events.eventName"))+e._s(e.$t("separator"))),n("code",[e._v(e._s(a.eventName))])]):"disconnection"===a.type?n("span",[e._v(" "+e._s(e.$t("events.reason"))+e._s(e.$t("separator"))),n("code",[e._v(e._s(s))])]):"room_joined"===a.type||"room_left"===a.type?n("span",[e._v(" "+e._s(e.$t("events.room"))+e._s(e.$t("separator"))),n("code",[e._v(e._s(s))])]):n("span",[e._v(" "+e._s(s)+" ")])]}},{key:"item.data-table-expand",fn:function(t){var a=t.item,s=t.isExpanded,o=t.expand;return[e.isExpandable(a)&&!s?n("v-btn",{attrs:{icon:""},on:{click:function(e){return o(!0)}}},[n("v-icon",[e._v("mdi-chevron-down")])],1):e._e(),e.isExpandable(a)&&s?n("v-btn",{attrs:{icon:""},on:{click:function(e){return o(!1)}}},[n("v-icon",[e._v("mdi-chevron-up")])],1):e._e()]}},{key:"expanded-item",fn:function(t){var a=t.headers,s=t.item;return[n("td",{attrs:{colspan:a.length}},[n("div",{staticClass:"ma-3"},[e._v(" "+e._s(e.$t("events.eventArgs"))+e._s(e.$t("separator"))+" "),n("pre",[n("code",[e._v(e._s(s.args))])])])])]}}])})],1)],1)},os=[],rs=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("v-chip",{attrs:{color:e.color,outlined:""}},[e._v(" "+e._s(e.$t("events.type."+e.type))+" ")])},is=[],cs={name:"EventType",props:{type:String},computed:{color:function(){switch(this.type){case"connection":return v["a"].green.base;case"room_joined":return v["a"].teal.base;case"room_left":return v["a"].amber.base;case"disconnection":return v["a"].red.base;case"event_received":return v["a"].blue.base;case"event_sent":return v["a"].orange.base}return v["a"].gray.base}}},ls=cs,ds=Object(b["a"])(ls,rs,is,!1,null,null,null),us=ds.exports;k()(ds,{VChip:_["a"]});var ms={name:"Events",components:{EventType:us,NamespaceSelector:rn},data:function(){return{footerProps:{"items-per-page-options":[-1]}}},computed:Object(r["a"])(Object(r["a"])({breadcrumbItems:function(){return[{text:this.$t("events.title"),disabled:!0}]},headers:function(){return[{text:this.$t("timestamp"),value:"timestamp"},{text:this.$t("sockets.socket"),value:"id",sortable:!1},{text:this.$t("type"),value:"type",sortable:!1},{value:"args",sortable:!1},{text:"",value:"data-table-expand"}]}},Object(l["b"])("main",["events"])),Object(l["d"])({selectedNamespace:function(e){return e.main.selectedNamespace}})),methods:{socketDetailsRoute:function(e){return{name:"socket",params:{nsp:this.selectedNamespace.name,id:e}}},isExpandable:function(e){return["event_received","event_sent"].includes(e.type)}}},ps=ms,vs=(n("76e7"),Object(b["a"])(ps,ss,os,!1,null,"2c2337d4",null)),hs=vs.exports;k()(vs,{VBreadcrumbs:Wt["a"],VBtn:I["a"],VCard:Ce["a"],VCardText:xe["a"],VDataTable:dn["a"],VIcon:le["a"]}),a["a"].use(Le["a"]);var fs=[{path:"/",name:"dashboard",component:Qt,meta:{topLevel:!0,index:0}},{path:"/sockets/",name:"sockets",component:pn,meta:{topLevel:!0,index:1}},{path:"/n/:nsp/sockets/:id",name:"socket",component:zn,meta:{topLevel:!1}},{path:"/rooms/",name:"rooms",component:aa,meta:{topLevel:!0,index:2}},{path:"/n/:nsp/rooms/:name",name:"room",component:as,meta:{topLevel:!1}},{path:"/clients/",name:"clients",component:la,meta:{topLevel:!0,index:3}},{path:"/clients/:id",name:"client",component:ja,meta:{topLevel:!1}},{path:"/events/",name:"events",component:hs,meta:{topLevel:!0,index:4}},{path:"/servers/",name:"servers",component:Ea,meta:{topLevel:!0,index:5}}],bs=new Le["a"]({mode:"hash",base:"/socket-admin/",routes:fs}),gs=bs,ks=(n("159b"),n("d3b7"),n("ddb0"),n("466d"),n("a925"));function _s(){var e=n("49f8"),t={};return e.keys().forEach((function(n){var a=n.match(/([A-Za-z0-9-_]+)\./i);if(a&&a.length>1){var s=a[1];t[s]=e(n)}})),t}a["a"].use(ks["a"]);var ys=new ks["a"]({locale:"en",fallbackLocale:"en",messages:_s()}),Ss={namespaced:!0,state:{darkTheme:!1,readonly:!1,lang:"en",supportedFeatures:[],showNavigationDrawer:!1},getters:{developmentMode:function(e){return e.supportedFeatures.includes("ALL_EVENTS")||!e.supportedFeatures.includes("AGGREGATED_EVENTS")},hasAggregatedValues:function(e){return e.supportedFeatures.includes("AGGREGATED_EVENTS")}},mutations:{init:function(e){tt&&(e.darkTheme="true"===localStorage.getItem("dark_theme"),e.readonly="true"===localStorage.getItem("readonly"),e.lang=localStorage.getItem("lang")||"zh-CN")},selectTheme:function(e,t){e.darkTheme=t,tt&&localStorage.setItem("dark_theme",t)},selectLang:function(e,t){e.lang=t,tt&&localStorage.setItem("lang",t)},toggleReadonly:function(e){e.readonly=!e.readonly,tt&&localStorage.setItem("readonly",e.readonly)},updateConfig:function(e,t){e.supportedFeatures=t.supportedFeatures},toggleNavigationDrawer:function(e){e.showNavigationDrawer=!e.showNavigationDrawer}}},Os=(n("8a79"),{namespaced:!0,state:{serverUrl:"http://localhost:3001",wsOnly:!0,path:"/socket",namespace:"/admin",parser:"default",sessionId:"",connected:!1},mutations:{init:function(e){tt&&(e.serverUrl=localStorage.getItem("server_url")||"http://localhost:3001",e.serverUrl.endsWith("/admin")?e.serverUrl=e.serverUrl.slice(0,-6):e.namespace=localStorage.getItem("namespace")||"/admin",e.wsOnly="false"!=localStorage.getItem("ws_only"),e.sessionId=localStorage.getItem("session_id"),e.path=localStorage.getItem("path")||"/socket",e.parser=localStorage.getItem("parser")||"default")},saveConfig:function(e,t){var n=t.serverUrl,a=t.wsOnly,s=t.path,o=t.namespace,r=t.parser;e.serverUrl=n,e.wsOnly=a,e.path=s,e.namespace=o,e.parser=r,tt&&(localStorage.setItem("server_url",n),localStorage.setItem("ws_only",a),localStorage.setItem("path",s),localStorage.setItem("namespace",o),localStorage.setItem("parser",r))},saveSessionId:function(e,t){e.sessionId=t,tt&&localStorage.setItem("session_id",t)},connect:function(e){e.connected=!0},disconnect:function(e){e.connected=!1}}}),Cs=n("b85c"),xs=n("3835"),$s=n("0a94"),js=n("a1a3"),ws=n("3a59"),Vs=6e5,Ds=function(e,t){var n=Object($s["a"])(e,{name:t});return n||(n={name:t,sockets:[],rooms:[],events:[]},e.push(n),n)},Ts=function(e,t){var n=Object($s["a"])(e.rooms,{name:t});return n||(n={name:t,active:!0,sockets:[]},e.rooms.push(n),n)},Is=function(e,t){var n=Object($s["a"])(e,{id:t});return n||(n={id:t,connected:!0,sockets:[]},e.push(n),n)},Es=function(e,t){var n=Ds(e.namespaces,t.nsp);t.connected=!0,Object($s["a"])(n.sockets,{id:t.id})||n.sockets.push(t),t.rooms.forEach((function(e){var a=Ts(n,e);a.isPrivate=e===t.id,Object($s["a"])(a.sockets,{id:t.id})||a.sockets.push(t)}));var a=Is(e.clients,t.clientId);Object($s["a"])(a.sockets,{id:t.id})||a.sockets.push(t)},Ns=1e3,Rs=0,Ps=function(e,t){t.eventId=++Rs,e.push(t),e.length>Ns&&e.shift()};function Bs(e){return e-e%1e4}var As={namespaced:!0,state:{namespaces:[],clients:[],selectedNamespace:null,aggregatedEvents:[]},getters:{findSocketById:function(e){return function(t,n){var a=Object($s["a"])(e.namespaces,{name:t});if(a)return Object($s["a"])(a.sockets,{id:n})}},findClientById:function(e){return function(t){return Object($s["a"])(e.clients,{id:t})}},findRoomByName:function(e){return function(t,n){var a=Object($s["a"])(e.namespaces,{name:t});if(a)return Object($s["a"])(a.rooms,{name:n})}},findRoomsByNamespace:function(e){return function(t){var n=Object($s["a"])(e.namespaces,{name:t});return n?n.rooms:[]}},sockets:function(e){return e.selectedNamespace?e.selectedNamespace.sockets:[]},rooms:function(e){return e.selectedNamespace?e.selectedNamespace.rooms:[]},events:function(e){return e.selectedNamespace?e.selectedNamespace.events:[]}},mutations:{selectNamespace:function(e,t){e.selectedNamespace=t},onAllSockets:function(e,t){e.namespaces.forEach((function(e){e.sockets.splice(0),e.rooms.splice(0)})),e.clients.splice(0),t.forEach((function(t){return Es(e,t)})),e.selectedNamespace||(e.selectedNamespace=Object($s["a"])(e.namespaces,{name:"/"})||e.namespaces[0])},onSocketConnected:function(e,t){var n=t.timestamp,a=t.socket;Es(e,a);var s=Ds(e.namespaces,a.nsp);Ps(s.events,{type:"connection",timestamp:n,id:a.id})},onSocketUpdated:function(e,t){var n=Ds(e.namespaces,t.nsp),a=Object($s["a"])(n.sockets,{id:t.id});a&&Object(js["a"])(a,t)},onSocketDisconnected:function(e,t){var n=t.timestamp,a=t.nsp,s=t.id,o=t.reason,r=Ds(e.namespaces,a),i=at(r.sockets,{id:s}),c=Object(xs["a"])(i,1),l=c[0];if(l){l.connected=!1;var d=Is(e.clients,l.clientId);at(d.sockets,{id:s}),0===d.sockets.length&&(d.connected=!1,at(e.clients,{id:l.clientId}))}Ps(r.events,{type:"disconnection",timestamp:n,id:s,args:o})},onRoomJoined:function(e,t){var n=t.nsp,a=t.room,s=t.id,o=t.timestamp,r=Ds(e.namespaces,n),i=Object($s["a"])(r.sockets,{id:s});if(i){st(i.rooms,a);var c=Ts(r,a);c.sockets.push(i)}Ps(r.events,{type:"room_joined",timestamp:o,id:s,args:a})},onRoomLeft:function(e,t){var n=t.timestamp,a=t.nsp,s=t.room,o=t.id,r=Ds(e.namespaces,a),i=Object($s["a"])(r.sockets,{id:o});i&&at(i.rooms,s);var c=Ts(r,s);at(c.sockets,{id:o}),0===c.sockets.length&&(c.active=!1,at(r.rooms,{name:s})),Ps(r.events,{type:"room_left",timestamp:n,id:o,args:s})},onServerStats:function(e,t){if(t.aggregatedEvents){var n,a=Object(Cs["a"])(t.aggregatedEvents);try{for(a.s();!(n=a.n()).done;){var s=n.value,o=Bs(s.timestamp),r=Object($s["a"])(e.aggregatedEvents,{timestamp:o,type:s.type,subType:s.subType});r?r.count+=s.count:e.aggregatedEvents.push({timestamp:o,type:s.type,subType:s.subType,count:s.count})}}catch(i){a.e(i)}finally{a.f()}Object(ws["a"])(e.aggregatedEvents,(function(e){return e.timestamp\r\n {{\r\n label\r\n }}\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Status.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Status.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Status.vue?vue&type=template&id=87034bbc&\"\nimport script from \"./Status.vue?vue&type=script&lang=js&\"\nexport * from \"./Status.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VChip } from 'vuetify/lib/components/VChip';\ninstallComponents(component, {VChip})\n","\r\n\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ConnectionStatus.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ConnectionStatus.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ConnectionStatus.vue?vue&type=template&id=65b30979&\"\nimport script from \"./ConnectionStatus.vue?vue&type=script&lang=js&\"\nexport * from \"./ConnectionStatus.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppBar.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppBar.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AppBar.vue?vue&type=template&id=73f2a348&\"\nimport script from \"./AppBar.vue?vue&type=script&lang=js&\"\nexport * from \"./AppBar.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VAppBar } from 'vuetify/lib/components/VAppBar';\nimport { VAppBarNavIcon } from 'vuetify/lib/components/VAppBar';\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VImg } from 'vuetify/lib/components/VImg';\nimport { VSpacer } from 'vuetify/lib/components/VGrid';\nimport { VToolbarTitle } from 'vuetify/lib/components/VToolbar';\ninstallComponents(component, {VAppBar,VAppBarNavIcon,VBtn,VImg,VSpacer,VToolbarTitle})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-navigation-drawer',{staticClass:\"elevation-3\",attrs:{\"app\":\"\",\"clipped\":\"\"},scopedSlots:_vm._u([{key:\"append\",fn:function(){return [_c('v-divider'),_c('div',{staticClass:\"pa-3 pt-10\"},[_c('LangSelector'),_c('ThemeSelector'),_c('ReadonlyToggle')],1)]},proxy:true}]),model:{value:(_vm.$store.state.config.showNavigationDrawer),callback:function ($$v) {_vm.$set(_vm.$store.state.config, \"showNavigationDrawer\", $$v)},expression:\"$store.state.config.showNavigationDrawer\"}},[_c('v-list',{attrs:{\"dense\":\"\",\"nav\":\"\"}},_vm._l((_vm.items),function(item){return _c('v-list-item',{key:item.title,attrs:{\"to\":item.to,\"exact\":item.exact}},[_c('v-list-item-icon',[_c('v-icon',[_vm._v(_vm._s(item.icon))])],1),_c('v-list-item-content',[_c('v-list-item-title',[_vm._v(_vm._s(item.title))])],1)],1)}),1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-select',{attrs:{\"dense\":\"\",\"value\":_vm.lang,\"items\":_vm.languages,\"label\":_vm.$t('config.language')},on:{\"change\":_vm.onSelectLang}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LangSelector.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LangSelector.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./LangSelector.vue?vue&type=template&id=5a0f8756&\"\nimport script from \"./LangSelector.vue?vue&type=script&lang=js&\"\nexport * from \"./LangSelector.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VSelect } from 'vuetify/lib/components/VSelect';\ninstallComponents(component, {VSelect})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-switch',{attrs:{\"input-value\":_vm.darkTheme,\"label\":_vm.$t('config.dark-theme'),\"inset\":\"\",\"dense\":\"\"},on:{\"change\":_vm.onSelectTheme}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ThemeSelector.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ThemeSelector.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ThemeSelector.vue?vue&type=template&id=65fd31ec&\"\nimport script from \"./ThemeSelector.vue?vue&type=script&lang=js&\"\nexport * from \"./ThemeSelector.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VSwitch } from 'vuetify/lib/components/VSwitch';\ninstallComponents(component, {VSwitch})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-switch',{attrs:{\"input-value\":_vm.readonly,\"label\":_vm.$t('config.readonly'),\"disabled\":_vm.disabled,\"inset\":\"\",\"dense\":\"\"},on:{\"change\":_vm.toggleReadonly}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ReadonlyToggle.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ReadonlyToggle.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ReadonlyToggle.vue?vue&type=template&id=5b271066&\"\nimport script from \"./ReadonlyToggle.vue?vue&type=script&lang=js&\"\nexport * from \"./ReadonlyToggle.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VSwitch } from 'vuetify/lib/components/VSwitch';\ninstallComponents(component, {VSwitch})\n","\r\n\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NavigationDrawer.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NavigationDrawer.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./NavigationDrawer.vue?vue&type=template&id=f120b24c&\"\nimport script from \"./NavigationDrawer.vue?vue&type=script&lang=js&\"\nexport * from \"./NavigationDrawer.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VDivider } from 'vuetify/lib/components/VDivider';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VList } from 'vuetify/lib/components/VList';\nimport { VListItem } from 'vuetify/lib/components/VList';\nimport { VListItemContent } from 'vuetify/lib/components/VList';\nimport { VListItemIcon } from 'vuetify/lib/components/VList';\nimport { VListItemTitle } from 'vuetify/lib/components/VList';\nimport { VNavigationDrawer } from 'vuetify/lib/components/VNavigationDrawer';\ninstallComponents(component, {VDivider,VIcon,VList,VListItem,VListItemContent,VListItemIcon,VListItemTitle,VNavigationDrawer})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-dialog',{attrs:{\"value\":_vm.isOpen,\"transition\":\"dialog-bottom-transition\",\"max-width\":\"300\",\"persistent\":\"\"}},[_c('v-card',[_c('v-card-title',[_vm._v(_vm._s(_vm.$t(\"connection.title\")))]),_c('v-card-text',[_c('form',{on:{\"submit\":function($event){$event.preventDefault();return _vm.onSubmit($event)}}},[_c('v-text-field',{attrs:{\"label\":_vm.$t('connection.serverUrl'),\"placeholder\":\"https://example.com\",\"required\":\"\"},model:{value:(_vm.serverUrl),callback:function ($$v) {_vm.serverUrl=$$v},expression:\"serverUrl\"}}),_c('v-text-field',{attrs:{\"label\":_vm.$t('connection.username')},model:{value:(_vm.username),callback:function ($$v) {_vm.username=$$v},expression:\"username\"}}),_c('v-text-field',{attrs:{\"label\":_vm.$t('connection.password'),\"type\":\"password\"},model:{value:(_vm.password),callback:function ($$v) {_vm.password=$$v},expression:\"password\"}}),_c('v-switch',{attrs:{\"label\":_vm.$t('connection.advanced-options'),\"inset\":\"\",\"dense\":\"\"},model:{value:(_vm.showAdvancedOptions),callback:function ($$v) {_vm.showAdvancedOptions=$$v},expression:\"showAdvancedOptions\"}}),_c('v-expand-transition',[(_vm.showAdvancedOptions)?_c('div',[_c('v-switch',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showAdvancedOptions),expression:\"showAdvancedOptions\"}],attrs:{\"label\":_vm.$t('connection.websocket-only'),\"inset\":\"\",\"dense\":\"\"},model:{value:(_vm.wsOnly),callback:function ($$v) {_vm.wsOnly=$$v},expression:\"wsOnly\"}}),_c('v-text-field',{attrs:{\"label\":_vm.$t('connection.namespace')},model:{value:(_vm.namespace),callback:function ($$v) {_vm.namespace=$$v},expression:\"namespace\"}}),_c('v-text-field',{attrs:{\"label\":_vm.$t('connection.path')},model:{value:(_vm.path),callback:function ($$v) {_vm.path=$$v},expression:\"path\"}}),_c('v-select',{attrs:{\"label\":_vm.$t('connection.parser'),\"items\":_vm.parserOptions},model:{value:(_vm.parser),callback:function ($$v) {_vm.parser=$$v},expression:\"parser\"}})],1):_vm._e()]),_c('v-btn',{staticClass:\"primary\",attrs:{\"loading\":_vm.isConnecting,\"disabled\":_vm.isConnecting || !_vm.isValid,\"type\":\"submit\"}},[_vm._v(_vm._s(_vm.$t(\"connection.connect\")))]),(_vm.error)?_c('div',{staticClass:\"red--text mt-3\"},[_vm._v(\" \"+_vm._s(_vm.errorMessage)+\" \")]):_vm._e()],1)])],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ConnectionModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ConnectionModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ConnectionModal.vue?vue&type=template&id=142bafcc&scoped=true&\"\nimport script from \"./ConnectionModal.vue?vue&type=script&lang=js&\"\nexport * from \"./ConnectionModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"142bafcc\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardText } from 'vuetify/lib/components/VCard';\nimport { VCardTitle } from 'vuetify/lib/components/VCard';\nimport { VDialog } from 'vuetify/lib/components/VDialog';\nimport { VExpandTransition } from 'vuetify/lib/components/transitions';\nimport { VSelect } from 'vuetify/lib/components/VSelect';\nimport { VSwitch } from 'vuetify/lib/components/VSwitch';\nimport { VTextField } from 'vuetify/lib/components/VTextField';\ninstallComponents(component, {VBtn,VCard,VCardText,VCardTitle,VDialog,VExpandTransition,VSelect,VSwitch,VTextField})\n","export default {\r\n set socket(socket) {\r\n this._socket = socket;\r\n },\r\n\r\n get socket() {\r\n return this._socket;\r\n },\r\n};\r\n","\r\n\r\n\r\n","import mod from \"-!../node_modules/cache-loader/dist/cjs.js??ref--12-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../node_modules/cache-loader/dist/cjs.js??ref--12-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=7bc361a2&\"\nimport script from \"./App.vue?vue&type=script&lang=js&\"\nexport * from \"./App.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VApp } from 'vuetify/lib/components/VApp';\nimport { VContainer } from 'vuetify/lib/components/VGrid';\nimport { VMain } from 'vuetify/lib/components/VMain';\ninstallComponents(component, {VApp,VContainer,VMain})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('v-breadcrumbs',{attrs:{\"items\":_vm.breadcrumbItems}}),_c('v-container',{attrs:{\"fluid\":\"\"}},[_c('v-row',[_c('v-col',{attrs:{\"cols\":\"12\",\"md\":\"6\",\"lg\":\"4\"}},[_c('ClientsOverview')],1),_c('v-col',{attrs:{\"cols\":\"12\",\"md\":\"6\",\"lg\":\"4\"}},[_c('ServersOverview')],1),_c('v-col',{attrs:{\"cols\":\"12\",\"md\":\"6\",\"lg\":\"4\"}},[_c('NamespacesOverview')],1),(_vm.hasAggregatedValues)?_c('v-col',{attrs:{\"cols\":\"12\",\"md\":\"6\"}},[_c('ConnectionsHistogram')],1):_vm._e(),(_vm.hasAggregatedValues)?_c('v-col',{attrs:{\"cols\":\"12\",\"md\":\"6\"}},[_c('BytesHistogram')],1):_vm._e()],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-card',[_c('v-card-title',{staticClass:\"text-center\"},[_vm._v(\" \"+_vm._s(_vm.$t(\"clients.title\"))+\" \"),_c('v-spacer'),(_vm.developmentMode)?_c('v-btn',{attrs:{\"to\":{ name: 'clients' },\"small\":\"\"}},[_c('v-icon',[_vm._v(\"mdi-dots-horizontal\")])],1):_vm._e()],1),_c('v-card-text',[_c('v-row',[_c('Doughnut',{staticClass:\"chart\",attrs:{\"chart-data\":_vm.data,\"chart-options\":_vm.chartOptions}}),_c('v-simple-table',{staticClass:\"grow align-self-center\",scopedSlots:_vm._u([{key:\"default\",fn:function(){return [_c('tbody',[_c('tr',[_c('th',[_vm._v(_vm._s(_vm.$t(\"sockets.transport\")))]),_c('th',[_vm._v(\"#\")])]),_vm._l((_vm.transports),function(transport){return _c('tr',{key:transport},[_c('td',[_c('Transport',{attrs:{\"transport\":transport}})],1),_c('td',[_c('div',[_c('h2',[_vm._v(_vm._s(_vm.transportRepartition[transport]))])]),_c('div',[_vm._v(\" \"+_vm._s(_vm.percentage(_vm.transportRepartition[transport], _vm.clientsCount))+\" % \")])])])})],2)]},proxy:true}])})],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-chip',{attrs:{\"small\":\"\",\"color\":_vm.color,\"outlined\":\"\"}},[_vm._v(_vm._s(_vm.label))])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Transport.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Transport.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Transport.vue?vue&type=template&id=54f750af&\"\nimport script from \"./Transport.vue?vue&type=script&lang=js&\"\nexport * from \"./Transport.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VChip } from 'vuetify/lib/components/VChip';\ninstallComponents(component, {VChip})\n","import { findIndex } from \"lodash-es\";\r\n\r\nconst testLocalStorage = () => {\r\n const test = \"test\";\r\n try {\r\n localStorage.setItem(test, test);\r\n localStorage.removeItem(test);\r\n return true;\r\n } catch (e) {\r\n return false;\r\n }\r\n};\r\n\r\nexport const isLocalStorageAvailable = testLocalStorage();\r\n\r\nexport function formatDuration(duration) {\r\n const d = Math.ceil(Math.max(duration, 0));\r\n const days = Math.floor(d / 86400);\r\n const hours = Math.floor((d - days * 86400) / 3600);\r\n const minutes = Math.floor((d - days * 86400 - hours * 3600) / 60);\r\n const seconds = Math.ceil(d) - days * 86400 - hours * 3600 - minutes * 60;\r\n\r\n const output = [];\r\n if (days > 0) {\r\n output.push(days + \"d\");\r\n }\r\n if (days > 0 || hours > 0) {\r\n output.push(hours + \"h\");\r\n }\r\n if (days > 0 || hours > 0 || minutes > 0) {\r\n output.push(minutes + \"m\");\r\n }\r\n output.push(seconds + \"s\");\r\n return output.join(\" \");\r\n}\r\n\r\n/**\r\n * lodash remove() does not play well with Vue.js\r\n */\r\nexport function remove(array, predicate) {\r\n const index =\r\n typeof predicate === \"object\"\r\n ? findIndex(array, predicate)\r\n : array.indexOf(predicate);\r\n return index === -1 ? [] : array.splice(index, 1);\r\n}\r\n\r\nexport function pushUniq(array, elem) {\r\n if (!array.includes(elem)) {\r\n array.push(elem);\r\n }\r\n}\r\n\r\nexport function percentage(value, total) {\r\n return total === 0 ? 0 : ((value / total) * 100).toFixed(1);\r\n}\r\n","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ClientsOverview.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ClientsOverview.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ClientsOverview.vue?vue&type=template&id=68c0c5d5&scoped=true&\"\nimport script from \"./ClientsOverview.vue?vue&type=script&lang=js&\"\nexport * from \"./ClientsOverview.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ClientsOverview.vue?vue&type=style&index=0&id=68c0c5d5&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"68c0c5d5\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardText } from 'vuetify/lib/components/VCard';\nimport { VCardTitle } from 'vuetify/lib/components/VCard';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VRow } from 'vuetify/lib/components/VGrid';\nimport { VSimpleTable } from 'vuetify/lib/components/VDataTable';\nimport { VSpacer } from 'vuetify/lib/components/VGrid';\ninstallComponents(component, {VBtn,VCard,VCardText,VCardTitle,VIcon,VRow,VSimpleTable,VSpacer})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-card',[_c('v-card-title',{staticClass:\"text-center\"},[_vm._v(\" \"+_vm._s(_vm.$t(\"servers.title\"))+\" \"),_c('v-spacer'),_c('v-btn',{attrs:{\"to\":{ name: 'servers' },\"small\":\"\"}},[_c('v-icon',[_vm._v(\"mdi-dots-horizontal\")])],1)],1),_c('v-card-text',[_c('v-row',[_c('Doughnut',{staticClass:\"chart\",attrs:{\"chart-data\":_vm.data,\"chart-options\":_vm.chartOptions}}),_c('v-simple-table',{staticClass:\"grow align-self-center\",scopedSlots:_vm._u([{key:\"default\",fn:function(){return [_c('tbody',[_c('tr',[_c('th',[_vm._v(_vm._s(_vm.$t(\"status\")))]),_c('th',[_vm._v(\"#\")])]),_c('tr',[_c('td',[_c('ServerStatus',{attrs:{\"healthy\":\"\"}})],1),_c('td',[_c('div',[_c('h2',[_vm._v(_vm._s(_vm.healthyServers))])]),_c('div',[_vm._v(_vm._s(_vm.percentage(_vm.healthyServers, _vm.totalServers))+\" %\")])])]),_c('tr',[_c('td',[_c('ServerStatus')],1),_c('td',[_c('div',[_c('h2',[_vm._v(_vm._s(_vm.totalServers - _vm.healthyServers))])]),_c('div',[_vm._v(\" \"+_vm._s(_vm.percentage(_vm.totalServers - _vm.healthyServers, _vm.totalServers))+\" % \")])])])])]},proxy:true}])})],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('Status',{attrs:{\"value\":_vm.healthy,\"ok-label\":_vm.$t('servers.healthy'),\"ko-label\":_vm.$t('servers.unhealthy')}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ServerStatus.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ServerStatus.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ServerStatus.vue?vue&type=template&id=76035ea6&\"\nimport script from \"./ServerStatus.vue?vue&type=script&lang=js&\"\nexport * from \"./ServerStatus.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ServersOverview.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ServersOverview.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ServersOverview.vue?vue&type=template&id=0ad5cc14&scoped=true&\"\nimport script from \"./ServersOverview.vue?vue&type=script&lang=js&\"\nexport * from \"./ServersOverview.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ServersOverview.vue?vue&type=style&index=0&id=0ad5cc14&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0ad5cc14\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardText } from 'vuetify/lib/components/VCard';\nimport { VCardTitle } from 'vuetify/lib/components/VCard';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VRow } from 'vuetify/lib/components/VGrid';\nimport { VSimpleTable } from 'vuetify/lib/components/VDataTable';\nimport { VSpacer } from 'vuetify/lib/components/VGrid';\ninstallComponents(component, {VBtn,VCard,VCardText,VCardTitle,VIcon,VRow,VSimpleTable,VSpacer})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-card',{staticClass:\"fill-height\"},[_c('v-card-title',{staticClass:\"text-center\"},[_vm._v(\" \"+_vm._s(_vm.$t(\"namespaces\"))+\" \"),_c('v-spacer'),(_vm.developmentMode)?_c('v-btn',{attrs:{\"to\":{ name: 'sockets' },\"small\":\"\"}},[_c('v-icon',[_vm._v(\"mdi-dots-horizontal\")])],1):_vm._e()],1),_c('v-simple-table',{scopedSlots:_vm._u([{key:\"default\",fn:function(){return [_c('thead',[_c('tr',[_c('th',[_vm._v(_vm._s(_vm.$t(\"name\")))]),_c('th',[_vm._v(_vm._s(_vm.$t(\"rooms.sockets-count\")))])])]),_c('tbody',_vm._l((_vm.namespaces),function(namespace){return _c('tr',{key:namespace.name},[_c('td',{staticClass:\"key-column\"},[_c('code',[_vm._v(_vm._s(namespace.name))])]),_c('td',[_vm._v(_vm._s(namespace.socketsCount))])])}),0)]},proxy:true}])})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NamespacesOverview.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NamespacesOverview.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./NamespacesOverview.vue?vue&type=template&id=11fe24be&scoped=true&\"\nimport script from \"./NamespacesOverview.vue?vue&type=script&lang=js&\"\nexport * from \"./NamespacesOverview.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"11fe24be\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardTitle } from 'vuetify/lib/components/VCard';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VSimpleTable } from 'vuetify/lib/components/VDataTable';\nimport { VSpacer } from 'vuetify/lib/components/VGrid';\ninstallComponents(component, {VBtn,VCard,VCardTitle,VIcon,VSimpleTable,VSpacer})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-card',[_c('v-card-title',{staticClass:\"text-center\"},[_vm._v(\" \"+_vm._s(_vm.$t(\"dashboard.connectionsHistogram.title\"))+\" \")]),_c('v-card-text',[_c('v-row',[_c('Bar',{staticStyle:{\"width\":\"100%\"},attrs:{\"chart-data\":_vm.chartData,\"chart-options\":_vm.chartOptions,\"height\":_vm.chartHeight}})],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ConnectionsHistogram.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ConnectionsHistogram.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ConnectionsHistogram.vue?vue&type=template&id=30457b7f&\"\nimport script from \"./ConnectionsHistogram.vue?vue&type=script&lang=js&\"\nexport * from \"./ConnectionsHistogram.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardText } from 'vuetify/lib/components/VCard';\nimport { VCardTitle } from 'vuetify/lib/components/VCard';\nimport { VRow } from 'vuetify/lib/components/VGrid';\ninstallComponents(component, {VCard,VCardText,VCardTitle,VRow})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-card',[_c('v-card-title',{staticClass:\"text-center\"},[_vm._v(\" \"+_vm._s(_vm.$t(\"dashboard.bytesHistogram.title\"))+\" \")]),_c('v-card-text',[_c('v-row',[_c('Bar',{staticStyle:{\"width\":\"100%\"},attrs:{\"chart-data\":_vm.chartData,\"chart-options\":_vm.chartOptions,\"height\":_vm.chartHeight}})],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./BytesHistogram.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./BytesHistogram.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./BytesHistogram.vue?vue&type=template&id=7c6eda12&\"\nimport script from \"./BytesHistogram.vue?vue&type=script&lang=js&\"\nexport * from \"./BytesHistogram.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardText } from 'vuetify/lib/components/VCard';\nimport { VCardTitle } from 'vuetify/lib/components/VCard';\nimport { VRow } from 'vuetify/lib/components/VGrid';\ninstallComponents(component, {VCard,VCardText,VCardTitle,VRow})\n","\r\n\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Dashboard.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Dashboard.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Dashboard.vue?vue&type=template&id=eb5ee798&\"\nimport script from \"./Dashboard.vue?vue&type=script&lang=js&\"\nexport * from \"./Dashboard.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBreadcrumbs } from 'vuetify/lib/components/VBreadcrumbs';\nimport { VCol } from 'vuetify/lib/components/VGrid';\nimport { VContainer } from 'vuetify/lib/components/VGrid';\nimport { VRow } from 'vuetify/lib/components/VGrid';\ninstallComponents(component, {VBreadcrumbs,VCol,VContainer,VRow})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('v-breadcrumbs',{attrs:{\"items\":_vm.breadcrumbItems}}),_c('v-card',[_c('v-card-text',[_c('NamespaceSelector')],1),_c('v-data-table',{staticClass:\"row-pointer\",attrs:{\"headers\":_vm.headers,\"items\":_vm.sockets,\"footer-props\":_vm.footerProps},on:{\"click:row\":_vm.displayDetails},scopedSlots:_vm._u([{key:\"item.transport\",fn:function(ref){\nvar value = ref.value;\nreturn [_c('Transport',{attrs:{\"transport\":value}})]}},{key:\"item.actions\",fn:function(ref){\nvar item = ref.item;\nreturn [(_vm.isSocketDisconnectSupported)?_c('v-tooltip',{attrs:{\"bottom\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nvar attrs = ref.attrs;\nreturn [_c('v-btn',_vm._g(_vm._b({staticClass:\"ml-3\",attrs:{\"disabled\":_vm.isReadonly,\"small\":\"\"},on:{\"click\":function($event){return _vm.disconnect(item)}}},'v-btn',attrs,false),on),[_c('v-icon',[_vm._v(\"mdi-logout\")])],1)]}}],null,true)},[_c('span',[_vm._v(_vm._s(_vm.$t(\"sockets.disconnect\")))])]):_vm._e()]}}])})],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-select',{staticClass:\"selector\",attrs:{\"value\":_vm.selectedNamespace,\"items\":_vm.namespaces,\"item-text\":\"name\",\"item-value\":\"name\",\"label\":_vm.$t('select-namespace'),\"persistent-hint\":\"\",\"return-object\":\"\"},on:{\"change\":_vm.selectNamespace}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NamespaceSelector.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NamespaceSelector.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./NamespaceSelector.vue?vue&type=template&id=2c330798&scoped=true&\"\nimport script from \"./NamespaceSelector.vue?vue&type=script&lang=js&\"\nexport * from \"./NamespaceSelector.vue?vue&type=script&lang=js&\"\nimport style0 from \"./NamespaceSelector.vue?vue&type=style&index=0&id=2c330798&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"2c330798\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VSelect } from 'vuetify/lib/components/VSelect';\ninstallComponents(component, {VSelect})\n","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Sockets.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Sockets.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Sockets.vue?vue&type=template&id=1d29c60a&scoped=true&\"\nimport script from \"./Sockets.vue?vue&type=script&lang=js&\"\nexport * from \"./Sockets.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Sockets.vue?vue&type=style&index=0&id=1d29c60a&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1d29c60a\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBreadcrumbs } from 'vuetify/lib/components/VBreadcrumbs';\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardText } from 'vuetify/lib/components/VCard';\nimport { VDataTable } from 'vuetify/lib/components/VDataTable';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VTooltip } from 'vuetify/lib/components/VTooltip';\ninstallComponents(component, {VBreadcrumbs,VBtn,VCard,VCardText,VDataTable,VIcon,VTooltip})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('v-breadcrumbs',{attrs:{\"items\":_vm.breadcrumbItems}}),(_vm.socket)?_c('v-container',{attrs:{\"fluid\":\"\"}},[_c('v-row',[_c('v-col',{attrs:{\"sm\":\"12\",\"md\":\"6\",\"lg\":\"4\"}},[_c('SocketDetails',{attrs:{\"socket\":_vm.socket,\"client\":_vm.client}})],1),_c('v-col',{attrs:{\"sm\":\"12\",\"md\":\"6\",\"lg\":\"4\"}},[_c('InitialRequest',{attrs:{\"socket\":_vm.socket}})],1),_c('v-col',{attrs:{\"sm\":\"12\",\"md\":\"6\",\"lg\":\"4\"}},[_c('SocketRooms',{attrs:{\"socket\":_vm.socket}})],1)],1)],1):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-card',{staticClass:\"fill-height\"},[_c('v-card-title',[_vm._v(_vm._s(_vm.$t(\"rooms.title\")))]),_c('v-data-table',{staticClass:\"row-pointer\",attrs:{\"headers\":_vm.headers,\"items\":_vm.roomsAsObjects,\"dense\":\"\"},on:{\"click:row\":_vm.displayDetails},scopedSlots:_vm._u([{key:\"item.actions\",fn:function(ref){\nvar item = ref.item;\nreturn [(_vm.isSocketLeaveSupported)?_c('v-tooltip',{attrs:{\"bottom\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nvar attrs = ref.attrs;\nreturn [_c('v-btn',_vm._g(_vm._b({staticClass:\"ml-3\",attrs:{\"disabled\":_vm.isReadonly,\"small\":\"\"},on:{\"click\":function($event){return _vm.leave(item)}}},'v-btn',attrs,false),on),[_c('v-icon',[_vm._v(\"mdi-tag-off-outline\")])],1)]}}],null,true)},[_c('span',[_vm._v(_vm._s(_vm.$t(\"sockets.leave\")))])]):_vm._e()]}}])}),_c('v-card-text',[_c('form',{on:{\"submit\":function($event){$event.preventDefault();return _vm.onSubmit($event)}}},[_c('v-combobox',{staticClass:\"select-room d-inline-block mr-3\",attrs:{\"search-input\":_vm.newRoom,\"label\":_vm.$t('sockets.join-a-room'),\"items\":_vm.availableRooms,\"item-value\":\"name\",\"item-text\":\"name\",\"disabled\":_vm.isReadonly,\"return-object\":false},on:{\"update:searchInput\":function($event){_vm.newRoom=$event},\"update:search-input\":function($event){_vm.newRoom=$event}}}),_c('v-tooltip',{attrs:{\"bottom\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nvar attrs = ref.attrs;\nreturn [_c('v-btn',_vm._g(_vm._b({attrs:{\"type\":\"submit\",\"small\":\"\",\"disabled\":_vm.isReadonly}},'v-btn',attrs,false),on),[_c('v-icon',[_vm._v(\"mdi-tag-plus-outline\")])],1)]}}])},[_c('span',[_vm._v(_vm._s(_vm.$t(\"sockets.join\")))])])],1)])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SocketRooms.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SocketRooms.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SocketRooms.vue?vue&type=template&id=5631eb89&scoped=true&\"\nimport script from \"./SocketRooms.vue?vue&type=script&lang=js&\"\nexport * from \"./SocketRooms.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SocketRooms.vue?vue&type=style&index=0&id=5631eb89&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"5631eb89\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardText } from 'vuetify/lib/components/VCard';\nimport { VCardTitle } from 'vuetify/lib/components/VCard';\nimport { VCombobox } from 'vuetify/lib/components/VCombobox';\nimport { VDataTable } from 'vuetify/lib/components/VDataTable';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VTooltip } from 'vuetify/lib/components/VTooltip';\ninstallComponents(component, {VBtn,VCard,VCardText,VCardTitle,VCombobox,VDataTable,VIcon,VTooltip})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-card',{staticClass:\"fill-height\"},[_c('v-card-title',[_vm._v(_vm._s(_vm.$t(\"details\")))]),_c('v-card-text',[_c('h4',[_vm._v(_vm._s(_vm.$t(\"sockets.client\")))])]),_c('v-simple-table',{attrs:{\"dense\":\"\"}},[[_c('tbody',[_c('tr',[_c('td',{staticClass:\"key-column\"},[_vm._v(_vm._s(_vm.$t(\"id\")))]),_c('td',[(_vm.client.connected)?_c('router-link',{staticClass:\"link\",attrs:{\"to\":_vm.toClient}},[_vm._v(_vm._s(_vm.client.id))]):_c('span',[_vm._v(_vm._s(_vm.client.id))])],1),_c('td')]),_c('tr',[_c('td',{staticClass:\"key-column\"},[_vm._v(_vm._s(_vm.$t(\"status\")))]),_c('td',[_c('ConnectionStatus',{attrs:{\"connected\":_vm.client.connected}})],1),_c('td',{attrs:{\"align\":\"right\"}},[(_vm.isSocketDisconnectSupported && _vm.client.connected)?_c('v-tooltip',{attrs:{\"bottom\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nvar attrs = ref.attrs;\nreturn [_c('v-btn',_vm._g(_vm._b({attrs:{\"disabled\":_vm.isReadonly,\"small\":\"\"},on:{\"click\":function($event){return _vm.disconnectClient()}}},'v-btn',attrs,false),on),[_c('v-icon',[_vm._v(\"mdi-logout\")])],1)]}}],null,false,1004975867)},[_c('span',[_vm._v(_vm._s(_vm.$t(\"clients.disconnect\")))])]):_vm._e()],1)]),_c('tr',[_c('td',{staticClass:\"key-column\"},[_vm._v(_vm._s(_vm.$t(\"sockets.transport\")))]),_c('td',[_c('Transport',{attrs:{\"transport\":_vm.socket.transport}})],1),_c('td')]),_c('tr',[_c('td',{staticClass:\"key-column\"},[_vm._v(_vm._s(_vm.$t(\"sockets.address\")))]),_c('td',[_vm._v(_vm._s(_vm.socket.handshake.address))]),_c('td')])])]],2),_c('v-card-text',[_c('h4',[_vm._v(_vm._s(_vm.$t(\"sockets.socket\")))])]),_c('v-simple-table',{attrs:{\"dense\":\"\"},scopedSlots:_vm._u([{key:\"default\",fn:function(){return [_c('tbody',[_c('tr',[_c('td',{staticClass:\"key-column\"},[_vm._v(_vm._s(_vm.$t(\"namespace\")))]),_c('td',[_c('code',[_vm._v(_vm._s(_vm.socket.nsp))])]),_c('td')]),_c('tr',[_c('td',{staticClass:\"key-column\"},[_vm._v(_vm._s(_vm.$t(\"id\")))]),_c('td',[_vm._v(_vm._s(_vm.socket.id))]),_c('td')]),_c('tr',[_c('td',{staticClass:\"key-column\"},[_vm._v(_vm._s(_vm.$t(\"data\")))]),_c('td',[_c('pre',[_c('code',[_vm._v(_vm._s(JSON.stringify(_vm.socket.data, null, 2)))])])]),_c('td')]),_c('tr',[_c('td',{staticClass:\"key-column\"},[_vm._v(_vm._s(_vm.$t(\"status\")))]),_c('td',[_c('ConnectionStatus',{attrs:{\"connected\":_vm.socket.connected}})],1),_c('td',{attrs:{\"align\":\"right\"}},[(_vm.isSocketDisconnectSupported && _vm.socket.connected)?_c('v-tooltip',{attrs:{\"bottom\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nvar attrs = ref.attrs;\nreturn [_c('v-btn',_vm._g(_vm._b({staticClass:\"ml-3\",attrs:{\"disabled\":_vm.isReadonly,\"small\":\"\"},on:{\"click\":function($event){return _vm.disconnectSocket()}}},'v-btn',attrs,false),on),[_c('v-icon',[_vm._v(\"mdi-logout\")])],1)]}}],null,false,2351110648)},[_c('span',[_vm._v(_vm._s(_vm.$t(\"sockets.disconnect\")))])]):_vm._e()],1)]),_c('tr',[_c('td',{staticClass:\"key-column\"},[_vm._v(_vm._s(_vm.$t(\"sockets.creation-date\")))]),_c('td',[_vm._v(_vm._s(_vm.creationDate))]),_c('td')])])]},proxy:true}])})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SocketDetails.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SocketDetails.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SocketDetails.vue?vue&type=template&id=3c0dcfcd&scoped=true&\"\nimport script from \"./SocketDetails.vue?vue&type=script&lang=js&\"\nexport * from \"./SocketDetails.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SocketDetails.vue?vue&type=style&index=0&id=3c0dcfcd&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"3c0dcfcd\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardText } from 'vuetify/lib/components/VCard';\nimport { VCardTitle } from 'vuetify/lib/components/VCard';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VSimpleTable } from 'vuetify/lib/components/VDataTable';\nimport { VTooltip } from 'vuetify/lib/components/VTooltip';\ninstallComponents(component, {VBtn,VCard,VCardText,VCardTitle,VIcon,VSimpleTable,VTooltip})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-card',{staticClass:\"fill-height\"},[_c('v-card-title',[_vm._v(_vm._s(_vm.$t(\"sockets.initial-request\")))]),_c('v-card-text',[_c('h4',[_vm._v(_vm._s(_vm.$t(\"sockets.headers\")))])]),_c('KeyValueTable',{attrs:{\"object\":_vm.socket.handshake.headers}}),_c('v-card-text',[_c('h4',[_vm._v(_vm._s(_vm.$t(\"sockets.query-params\")))])]),_c('KeyValueTable',{attrs:{\"object\":_vm.socket.handshake.query}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-simple-table',{attrs:{\"dense\":\"\"},scopedSlots:_vm._u([{key:\"default\",fn:function(){return [_c('thead',[_c('tr',[_c('th',[_vm._v(_vm._s(_vm.$t(\"name\")))]),_c('th',[_vm._v(_vm._s(_vm.$t(\"value\")))])])]),_c('tbody',_vm._l((_vm.items),function(ref){\nvar key = ref.key;\nvar value = ref.value;\nreturn _c('tr',{key:key},[_c('td',{staticClass:\"key-column\"},[_vm._v(_vm._s(key))]),_c('td',[_vm._v(_vm._s(value))])])}),0)]},proxy:true}])})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./KeyValueTable.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./KeyValueTable.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./KeyValueTable.vue?vue&type=template&id=18284f59&scoped=true&\"\nimport script from \"./KeyValueTable.vue?vue&type=script&lang=js&\"\nexport * from \"./KeyValueTable.vue?vue&type=script&lang=js&\"\nimport style0 from \"./KeyValueTable.vue?vue&type=style&index=0&id=18284f59&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"18284f59\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VSimpleTable } from 'vuetify/lib/components/VDataTable';\ninstallComponents(component, {VSimpleTable})\n","\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./InitialRequest.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./InitialRequest.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./InitialRequest.vue?vue&type=template&id=02abed88&\"\nimport script from \"./InitialRequest.vue?vue&type=script&lang=js&\"\nexport * from \"./InitialRequest.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardText } from 'vuetify/lib/components/VCard';\nimport { VCardTitle } from 'vuetify/lib/components/VCard';\ninstallComponents(component, {VCard,VCardText,VCardTitle})\n","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Socket.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Socket.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Socket.vue?vue&type=template&id=14172ed0&scoped=true&\"\nimport script from \"./Socket.vue?vue&type=script&lang=js&\"\nexport * from \"./Socket.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"14172ed0\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBreadcrumbs } from 'vuetify/lib/components/VBreadcrumbs';\nimport { VCol } from 'vuetify/lib/components/VGrid';\nimport { VContainer } from 'vuetify/lib/components/VGrid';\nimport { VRow } from 'vuetify/lib/components/VGrid';\ninstallComponents(component, {VBreadcrumbs,VCol,VContainer,VRow})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('v-breadcrumbs',{attrs:{\"items\":_vm.breadcrumbItems}}),_c('v-card',[_c('v-card-text',{staticClass:\"d-flex\"},[_c('NamespaceSelector'),_c('v-switch',{staticClass:\"ml-3\",attrs:{\"label\":_vm.$t('rooms.show-private'),\"inset\":\"\",\"dense\":\"\"},on:{\"change\":_vm.onPrivateRoomsUpdate},model:{value:(_vm.showPrivateRooms),callback:function ($$v) {_vm.showPrivateRooms=$$v},expression:\"showPrivateRooms\"}})],1),_c('v-data-table',{staticClass:\"row-pointer\",attrs:{\"headers\":_vm.headers,\"items\":_vm.filteredRooms,\"footer-props\":_vm.footerProps},on:{\"click:row\":_vm.displayDetails},scopedSlots:_vm._u([{key:\"item.sockets\",fn:function(ref){\nvar item = ref.item;\nreturn [_vm._v(\" \"+_vm._s(item.sockets.length)+\" \")]}},{key:\"item.isPrivate\",fn:function(ref){\nvar value = ref.value;\nreturn [_c('RoomType',{attrs:{\"is-private\":value}})]}},{key:\"item.actions\",fn:function(ref){\nvar item = ref.item;\nreturn [(_vm.isMultiLeaveSupported && !item.isPrivate)?_c('v-tooltip',{attrs:{\"bottom\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nvar attrs = ref.attrs;\nreturn [_c('v-btn',_vm._g(_vm._b({staticClass:\"ml-3\",attrs:{\"disabled\":_vm.isReadonly,\"small\":\"\"},on:{\"click\":function($event){return _vm.clear(item)}}},'v-btn',attrs,false),on),[_c('v-icon',[_vm._v(\"mdi-tag-off-outline\")])],1)]}}],null,true)},[_c('span',[_vm._v(_vm._s(_vm.$t(\"rooms.clear\")))])]):_vm._e(),(_vm.isMultiDisconnectSupported)?_c('v-tooltip',{attrs:{\"bottom\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nvar attrs = ref.attrs;\nreturn [_c('v-btn',_vm._g(_vm._b({staticClass:\"ml-3\",attrs:{\"disabled\":_vm.isReadonly,\"small\":\"\"},on:{\"click\":function($event){return _vm.disconnect(item)}}},'v-btn',attrs,false),on),[_c('v-icon',[_vm._v(\"mdi-logout\")])],1)]}}],null,true)},[_c('span',[_vm._v(_vm._s(_vm.$t(\"rooms.disconnect\")))])]):_vm._e()]}}])})],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('Status',{attrs:{\"value\":!_vm.isPrivate,\"ok-label\":_vm.$t('rooms.public'),\"ko-label\":_vm.$t('rooms.private')}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RoomType.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RoomType.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./RoomType.vue?vue&type=template&id=65e67f84&\"\nimport script from \"./RoomType.vue?vue&type=script&lang=js&\"\nexport * from \"./RoomType.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Rooms.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Rooms.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Rooms.vue?vue&type=template&id=29992f63&scoped=true&\"\nimport script from \"./Rooms.vue?vue&type=script&lang=js&\"\nexport * from \"./Rooms.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Rooms.vue?vue&type=style&index=0&id=29992f63&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"29992f63\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBreadcrumbs } from 'vuetify/lib/components/VBreadcrumbs';\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardText } from 'vuetify/lib/components/VCard';\nimport { VDataTable } from 'vuetify/lib/components/VDataTable';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VSwitch } from 'vuetify/lib/components/VSwitch';\nimport { VTooltip } from 'vuetify/lib/components/VTooltip';\ninstallComponents(component, {VBreadcrumbs,VBtn,VCard,VCardText,VDataTable,VIcon,VSwitch,VTooltip})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('v-breadcrumbs',{attrs:{\"items\":_vm.breadcrumbItems}}),_c('v-card',[_c('v-data-table',{staticClass:\"row-pointer\",attrs:{\"headers\":_vm.headers,\"items\":_vm.clients,\"footer-props\":_vm.footerProps},on:{\"click:row\":_vm.displayDetails},scopedSlots:_vm._u([{key:\"item.address\",fn:function(ref){\nvar item = ref.item;\nreturn [(item.sockets.length)?_c('span',[_vm._v(_vm._s(item.sockets[0].handshake.address))]):_vm._e()]}},{key:\"item.transport\",fn:function(ref){\nvar item = ref.item;\nreturn [(item.sockets.length)?_c('Transport',{attrs:{\"transport\":item.sockets[0].transport}}):_vm._e()]}},{key:\"item.sockets\",fn:function(ref){\nvar item = ref.item;\nreturn [_vm._v(\" \"+_vm._s(item.sockets.length)+\" \")]}},{key:\"item.actions\",fn:function(ref){\nvar item = ref.item;\nreturn [(_vm.isSocketDisconnectSupported)?_c('v-tooltip',{attrs:{\"bottom\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nvar attrs = ref.attrs;\nreturn [_c('v-btn',_vm._g(_vm._b({staticClass:\"ml-3\",attrs:{\"disabled\":_vm.isReadonly,\"small\":\"\"},on:{\"click\":function($event){return _vm.disconnect(item)}}},'v-btn',attrs,false),on),[_c('v-icon',[_vm._v(\"mdi-logout\")])],1)]}}],null,true)},[_c('span',[_vm._v(_vm._s(_vm.$t(\"clients.disconnect\")))])]):_vm._e()]}}])})],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Clients.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Clients.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Clients.vue?vue&type=template&id=57b53591&scoped=true&\"\nimport script from \"./Clients.vue?vue&type=script&lang=js&\"\nexport * from \"./Clients.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Clients.vue?vue&type=style&index=0&id=57b53591&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"57b53591\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBreadcrumbs } from 'vuetify/lib/components/VBreadcrumbs';\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VDataTable } from 'vuetify/lib/components/VDataTable';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VTooltip } from 'vuetify/lib/components/VTooltip';\ninstallComponents(component, {VBreadcrumbs,VBtn,VCard,VDataTable,VIcon,VTooltip})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('v-breadcrumbs',{attrs:{\"items\":_vm.breadcrumbItems}}),(_vm.client)?_c('v-container',{attrs:{\"fluid\":\"\"}},[_c('v-row',[_c('v-col',{attrs:{\"sm\":\"12\",\"md\":\"6\",\"lg\":\"4\"}},[_c('ClientDetails',{attrs:{\"client\":_vm.client,\"socket\":_vm.socket}})],1),_c('v-col',{attrs:{\"sm\":\"12\",\"md\":\"6\",\"lg\":\"4\"}},[(_vm.socket)?_c('InitialRequest',{attrs:{\"socket\":_vm.socket}}):_vm._e()],1),_c('v-col',{attrs:{\"sm\":\"12\",\"md\":\"6\",\"lg\":\"4\"}},[_c('ClientSockets',{attrs:{\"sockets\":_vm.client.sockets}})],1)],1)],1):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-card',{staticClass:\"fill-height\"},[_c('v-card-title',[_vm._v(_vm._s(_vm.$t(\"details\")))]),_c('v-simple-table',{attrs:{\"dense\":\"\"}},[[_c('tbody',[_c('tr',[_c('td',{staticClass:\"key-column\"},[_vm._v(_vm._s(_vm.$t(\"id\")))]),_c('td',[_vm._v(\" \"+_vm._s(_vm.client.id)+\" \")]),_c('td')]),_c('tr',[_c('td',{staticClass:\"key-column\"},[_vm._v(_vm._s(_vm.$t(\"status\")))]),_c('td',[_c('ConnectionStatus',{attrs:{\"connected\":_vm.client.connected}})],1),_c('td',{attrs:{\"align\":\"right\"}},[(_vm.isSocketDisconnectSupported && _vm.client.connected)?_c('v-tooltip',{attrs:{\"bottom\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nvar attrs = ref.attrs;\nreturn [_c('v-btn',_vm._g(_vm._b({attrs:{\"disabled\":_vm.isReadonly,\"small\":\"\"},on:{\"click\":function($event){return _vm.disconnectClient()}}},'v-btn',attrs,false),on),[_c('v-icon',[_vm._v(\"mdi-logout\")])],1)]}}],null,false,1004975867)},[_c('span',[_vm._v(_vm._s(_vm.$t(\"clients.disconnect\")))])]):_vm._e()],1)]),_c('tr',[_c('td',{staticClass:\"key-column\"},[_vm._v(_vm._s(_vm.$t(\"sockets.transport\")))]),_c('td',[_c('Transport',{attrs:{\"transport\":_vm.socket.transport}})],1),_c('td')]),_c('tr',[_c('td',{staticClass:\"key-column\"},[_vm._v(_vm._s(_vm.$t(\"sockets.address\")))]),_c('td',[_vm._v(_vm._s(_vm.socket.handshake.address))]),_c('td')])])]],2)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ClientDetails.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ClientDetails.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ClientDetails.vue?vue&type=template&id=8d2424e4&scoped=true&\"\nimport script from \"./ClientDetails.vue?vue&type=script&lang=js&\"\nexport * from \"./ClientDetails.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ClientDetails.vue?vue&type=style&index=0&id=8d2424e4&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"8d2424e4\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardTitle } from 'vuetify/lib/components/VCard';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VSimpleTable } from 'vuetify/lib/components/VDataTable';\nimport { VTooltip } from 'vuetify/lib/components/VTooltip';\ninstallComponents(component, {VBtn,VCard,VCardTitle,VIcon,VSimpleTable,VTooltip})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-card',[_c('v-card-title',[_vm._v(_vm._s(_vm.$t(\"sockets.title\")))]),_c('v-data-table',{staticClass:\"row-pointer\",attrs:{\"headers\":_vm.headers,\"items\":_vm.sockets,\"dense\":\"\"},on:{\"click:row\":_vm.displayDetails},scopedSlots:_vm._u([{key:\"item.nsp\",fn:function(ref){\nvar value = ref.value;\nreturn [_c('code',[_vm._v(_vm._s(value))])]}},{key:\"item.actions\",fn:function(ref){\nvar item = ref.item;\nreturn [(_vm.isSocketDisconnectSupported)?_c('v-tooltip',{attrs:{\"bottom\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nvar attrs = ref.attrs;\nreturn [_c('v-btn',_vm._g(_vm._b({staticClass:\"ml-3\",attrs:{\"disabled\":_vm.isReadonly,\"small\":\"\"},on:{\"click\":function($event){return _vm.disconnect(item)}}},'v-btn',attrs,false),on),[_c('v-icon',[_vm._v(\"mdi-logout\")])],1)]}}],null,true)},[_c('span',[_vm._v(_vm._s(_vm.$t(\"sockets.disconnect\")))])]):_vm._e()]}}])})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ClientSockets.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ClientSockets.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ClientSockets.vue?vue&type=template&id=38772079&scoped=true&\"\nimport script from \"./ClientSockets.vue?vue&type=script&lang=js&\"\nexport * from \"./ClientSockets.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ClientSockets.vue?vue&type=style&index=0&id=38772079&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"38772079\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardTitle } from 'vuetify/lib/components/VCard';\nimport { VDataTable } from 'vuetify/lib/components/VDataTable';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VTooltip } from 'vuetify/lib/components/VTooltip';\ninstallComponents(component, {VBtn,VCard,VCardTitle,VDataTable,VIcon,VTooltip})\n","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Client.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Client.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Client.vue?vue&type=template&id=3d554d12&scoped=true&\"\nimport script from \"./Client.vue?vue&type=script&lang=js&\"\nexport * from \"./Client.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"3d554d12\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBreadcrumbs } from 'vuetify/lib/components/VBreadcrumbs';\nimport { VCol } from 'vuetify/lib/components/VGrid';\nimport { VContainer } from 'vuetify/lib/components/VGrid';\nimport { VRow } from 'vuetify/lib/components/VGrid';\ninstallComponents(component, {VBreadcrumbs,VCol,VContainer,VRow})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('v-breadcrumbs',{attrs:{\"items\":_vm.breadcrumbItems}}),_c('v-card',[_c('v-data-table',{attrs:{\"headers\":_vm.headers,\"items\":_vm.servers,\"footer-props\":_vm.footerProps},scopedSlots:_vm._u([{key:\"item.uptime\",fn:function(ref){\nvar value = ref.value;\nreturn [_vm._v(\" \"+_vm._s(_vm.formatDuration(value))+\" \")]}},{key:\"item.lastPing\",fn:function(ref){\nvar value = ref.value;\nreturn [_vm._v(\" \"+_vm._s(_vm.delaySinceLastPing(value))+\" \")]}},{key:\"item.healthy\",fn:function(ref){\nvar value = ref.value;\nreturn [_c('ServerStatus',{attrs:{\"healthy\":value}})]}},{key:\"item.actions\",fn:function(ref){\nvar item = ref.item;\nreturn [(!item.healthy)?_c('v-btn',{attrs:{\"small\":\"\"},on:{\"click\":function($event){return _vm.removeServer(item)}}},[_c('v-icon',[_vm._v(\"mdi-delete-outline\")])],1):_vm._e()]}}])})],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Servers.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Servers.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Servers.vue?vue&type=template&id=3241ef20&\"\nimport script from \"./Servers.vue?vue&type=script&lang=js&\"\nexport * from \"./Servers.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBreadcrumbs } from 'vuetify/lib/components/VBreadcrumbs';\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VDataTable } from 'vuetify/lib/components/VDataTable';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\ninstallComponents(component, {VBreadcrumbs,VBtn,VCard,VDataTable,VIcon})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('v-breadcrumbs',{attrs:{\"items\":_vm.breadcrumbItems}}),(_vm.room)?_c('v-container',{attrs:{\"fluid\":\"\"}},[_c('v-row',[_c('v-col',{attrs:{\"sm\":\"12\",\"md\":\"4\"}},[_c('RoomDetails',{attrs:{\"room\":_vm.room,\"nsp\":_vm.$route.params.nsp}})],1),_c('v-col',{attrs:{\"sm\":\"12\",\"md\":\"8\"}},[_c('RoomSockets',{attrs:{\"room\":_vm.room}})],1)],1)],1):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.room)?_c('v-card',[_c('v-card-title',[_vm._v(_vm._s(_vm.$t(\"sockets.title\")))]),_c('v-data-table',{staticClass:\"row-pointer\",attrs:{\"headers\":_vm.headers,\"items\":_vm.room.sockets,\"footer-props\":_vm.footerProps},on:{\"click:row\":_vm.displayDetails},scopedSlots:_vm._u([{key:\"item.transport\",fn:function(ref){\nvar value = ref.value;\nreturn [_c('Transport',{attrs:{\"transport\":value}})]}},{key:\"item.actions\",fn:function(ref){\nvar item = ref.item;\nreturn [(_vm.isSocketLeaveSupported && !_vm.room.isPrivate)?_c('v-tooltip',{attrs:{\"bottom\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nvar attrs = ref.attrs;\nreturn [_c('v-btn',_vm._g(_vm._b({staticClass:\"ml-3\",attrs:{\"disabled\":_vm.isReadonly,\"small\":\"\"},on:{\"click\":function($event){return _vm.leave(item)}}},'v-btn',attrs,false),on),[_c('v-icon',[_vm._v(\"mdi-tag-off-outline\")])],1)]}}],null,true)},[_c('span',[_vm._v(_vm._s(_vm.$t(\"rooms.leave\")))])]):_vm._e(),(_vm.isSocketDisconnectSupported)?_c('v-tooltip',{attrs:{\"bottom\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nvar attrs = ref.attrs;\nreturn [_c('v-btn',_vm._g(_vm._b({staticClass:\"ml-3\",attrs:{\"disabled\":_vm.isReadonly,\"small\":\"\"},on:{\"click\":function($event){return _vm.disconnect(item)}}},'v-btn',attrs,false),on),[_c('v-icon',[_vm._v(\"mdi-logout\")])],1)]}}],null,true)},[_c('span',[_vm._v(_vm._s(_vm.$t(\"sockets.disconnect\")))])]):_vm._e()]}}],null,false,1763569022)})],1):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RoomSockets.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RoomSockets.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./RoomSockets.vue?vue&type=template&id=c9425064&scoped=true&\"\nimport script from \"./RoomSockets.vue?vue&type=script&lang=js&\"\nexport * from \"./RoomSockets.vue?vue&type=script&lang=js&\"\nimport style0 from \"./RoomSockets.vue?vue&type=style&index=0&id=c9425064&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"c9425064\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardTitle } from 'vuetify/lib/components/VCard';\nimport { VDataTable } from 'vuetify/lib/components/VDataTable';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VTooltip } from 'vuetify/lib/components/VTooltip';\ninstallComponents(component, {VBtn,VCard,VCardTitle,VDataTable,VIcon,VTooltip})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-card',{staticClass:\"fill-height\"},[_c('v-card-title',[_vm._v(_vm._s(_vm.$t(\"details\")))]),_c('v-simple-table',{attrs:{\"dense\":\"\"}},[[_c('tbody',[_c('tr',[_c('td',{staticClass:\"key-column\"},[_vm._v(_vm._s(_vm.$t(\"namespace\")))]),_c('td',[_c('code',[_vm._v(_vm._s(_vm.nsp))])]),_c('td')]),_c('tr',[_c('td',{staticClass:\"key-column\"},[_vm._v(_vm._s(_vm.$t(\"id\")))]),_c('td',[_vm._v(\" \"+_vm._s(_vm.room.name)+\" \")]),_c('td')]),_c('tr',[_c('td',{staticClass:\"key-column\"},[_vm._v(_vm._s(_vm.$t(\"status\")))]),_c('td',[_c('RoomStatus',{attrs:{\"active\":_vm.room.active}})],1),_c('td',{attrs:{\"align\":\"right\"}},[(_vm.isMultiLeaveSupported && !_vm.room.isPrivate)?_c('v-tooltip',{attrs:{\"bottom\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nvar attrs = ref.attrs;\nreturn [_c('v-btn',_vm._g(_vm._b({staticClass:\"ml-3\",attrs:{\"disabled\":_vm.isReadonly,\"small\":\"\"},on:{\"click\":function($event){return _vm.clear()}}},'v-btn',attrs,false),on),[_c('v-icon',[_vm._v(\"mdi-tag-off-outline\")])],1)]}}],null,false,464351539)},[_c('span',[_vm._v(_vm._s(_vm.$t(\"rooms.clear\")))])]):_vm._e()],1)]),_c('tr',[_c('td',{staticClass:\"key-column\"},[_vm._v(_vm._s(_vm.$t(\"type\")))]),_c('td',[_c('RoomType',{attrs:{\"is-private\":_vm.room.isPrivate}})],1),_c('td')])])]],2)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('Status',{attrs:{\"value\":_vm.active,\"ok-label\":_vm.$t('rooms.active'),\"ko-label\":_vm.$t('rooms.deleted')}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RoomStatus.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RoomStatus.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./RoomStatus.vue?vue&type=template&id=65459954&\"\nimport script from \"./RoomStatus.vue?vue&type=script&lang=js&\"\nexport * from \"./RoomStatus.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RoomDetails.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RoomDetails.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./RoomDetails.vue?vue&type=template&id=7b3793ea&scoped=true&\"\nimport script from \"./RoomDetails.vue?vue&type=script&lang=js&\"\nexport * from \"./RoomDetails.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"7b3793ea\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardTitle } from 'vuetify/lib/components/VCard';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VSimpleTable } from 'vuetify/lib/components/VDataTable';\nimport { VTooltip } from 'vuetify/lib/components/VTooltip';\ninstallComponents(component, {VBtn,VCard,VCardTitle,VIcon,VSimpleTable,VTooltip})\n","\r\n\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Room.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Room.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Room.vue?vue&type=template&id=07f5be08&\"\nimport script from \"./Room.vue?vue&type=script&lang=js&\"\nexport * from \"./Room.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBreadcrumbs } from 'vuetify/lib/components/VBreadcrumbs';\nimport { VCol } from 'vuetify/lib/components/VGrid';\nimport { VContainer } from 'vuetify/lib/components/VGrid';\nimport { VRow } from 'vuetify/lib/components/VGrid';\ninstallComponents(component, {VBreadcrumbs,VCol,VContainer,VRow})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('v-breadcrumbs',{attrs:{\"items\":_vm.breadcrumbItems}}),_c('v-card',[_c('v-card-text',[_c('NamespaceSelector')],1),_c('v-data-table',{attrs:{\"headers\":_vm.headers,\"items\":_vm.events,\"footer-props\":_vm.footerProps,\"item-key\":\"eventId\",\"sort-by\":['timestamp', 'eventId'],\"sort-desc\":[true, true],\"single-expand\":\"\",\"show-expand\":\"\"},scopedSlots:_vm._u([{key:\"item.type\",fn:function(ref){\nvar value = ref.value;\nreturn [_c('EventType',{attrs:{\"type\":value}})]}},{key:\"item.id\",fn:function(ref){\nvar value = ref.value;\nreturn [_c('router-link',{staticClass:\"link\",attrs:{\"to\":_vm.socketDetailsRoute(value)}},[_vm._v(_vm._s(value))])]}},{key:\"item.args\",fn:function(ref){\nvar item = ref.item;\nvar value = ref.value;\nreturn [(_vm.isExpandable(item))?_c('span',[_vm._v(\" \"+_vm._s(_vm.$t(\"events.eventName\"))+_vm._s(_vm.$t(\"separator\"))),_c('code',[_vm._v(_vm._s(item.eventName))])]):(item.type === 'disconnection')?_c('span',[_vm._v(\" \"+_vm._s(_vm.$t(\"events.reason\"))+_vm._s(_vm.$t(\"separator\"))),_c('code',[_vm._v(_vm._s(value))])]):(item.type === 'room_joined' || item.type === 'room_left')?_c('span',[_vm._v(\" \"+_vm._s(_vm.$t(\"events.room\"))+_vm._s(_vm.$t(\"separator\"))),_c('code',[_vm._v(_vm._s(value))])]):_c('span',[_vm._v(\" \"+_vm._s(value)+\" \")])]}},{key:\"item.data-table-expand\",fn:function(ref){\nvar item = ref.item;\nvar isExpanded = ref.isExpanded;\nvar expand = ref.expand;\nreturn [(_vm.isExpandable(item) && !isExpanded)?_c('v-btn',{attrs:{\"icon\":\"\"},on:{\"click\":function($event){return expand(true)}}},[_c('v-icon',[_vm._v(\"mdi-chevron-down\")])],1):_vm._e(),(_vm.isExpandable(item) && isExpanded)?_c('v-btn',{attrs:{\"icon\":\"\"},on:{\"click\":function($event){return expand(false)}}},[_c('v-icon',[_vm._v(\"mdi-chevron-up\")])],1):_vm._e()]}},{key:\"expanded-item\",fn:function(ref){\nvar headers = ref.headers;\nvar item = ref.item;\nreturn [_c('td',{attrs:{\"colspan\":headers.length}},[_c('div',{staticClass:\"ma-3\"},[_vm._v(\" \"+_vm._s(_vm.$t(\"events.eventArgs\"))+_vm._s(_vm.$t(\"separator\"))+\" \"),_c('pre',[_c('code',[_vm._v(_vm._s(item.args))])])])])]}}])})],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-chip',{attrs:{\"color\":_vm.color,\"outlined\":\"\"}},[_vm._v(\" \"+_vm._s(_vm.$t(\"events.type.\" + _vm.type))+\" \")])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EventType.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EventType.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./EventType.vue?vue&type=template&id=f9a66084&\"\nimport script from \"./EventType.vue?vue&type=script&lang=js&\"\nexport * from \"./EventType.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VChip } from 'vuetify/lib/components/VChip';\ninstallComponents(component, {VChip})\n","\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Events.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Events.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Events.vue?vue&type=template&id=2c2337d4&scoped=true&\"\nimport script from \"./Events.vue?vue&type=script&lang=js&\"\nexport * from \"./Events.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Events.vue?vue&type=style&index=0&id=2c2337d4&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"2c2337d4\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBreadcrumbs } from 'vuetify/lib/components/VBreadcrumbs';\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardText } from 'vuetify/lib/components/VCard';\nimport { VDataTable } from 'vuetify/lib/components/VDataTable';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\ninstallComponents(component, {VBreadcrumbs,VBtn,VCard,VCardText,VDataTable,VIcon})\n","import Vue from \"vue\";\r\nimport VueRouter from \"vue-router\";\r\nimport Dashboard from \"../views/Dashboard\";\r\nimport Sockets from \"../views/Sockets\";\r\nimport Socket from \"../views/Socket\";\r\nimport Rooms from \"../views/Rooms\";\r\nimport Clients from \"../views/Clients\";\r\nimport Client from \"../views/Client\";\r\nimport Servers from \"../views/Servers\";\r\nimport Room from \"../views/Room\";\r\nimport Events from \"@/views/Events\";\r\n\r\nVue.use(VueRouter);\r\n\r\nconst routes = [\r\n {\r\n path: \"/\",\r\n name: \"dashboard\",\r\n component: Dashboard,\r\n meta: {\r\n topLevel: true,\r\n index: 0,\r\n },\r\n },\r\n {\r\n path: \"/sockets/\",\r\n name: \"sockets\",\r\n component: Sockets,\r\n meta: {\r\n topLevel: true,\r\n index: 1,\r\n },\r\n },\r\n {\r\n path: \"/n/:nsp/sockets/:id\",\r\n name: \"socket\",\r\n component: Socket,\r\n meta: {\r\n topLevel: false,\r\n },\r\n },\r\n {\r\n path: \"/rooms/\",\r\n name: \"rooms\",\r\n component: Rooms,\r\n meta: {\r\n topLevel: true,\r\n index: 2,\r\n },\r\n },\r\n {\r\n path: \"/n/:nsp/rooms/:name\",\r\n name: \"room\",\r\n component: Room,\r\n meta: {\r\n topLevel: false,\r\n },\r\n },\r\n {\r\n path: \"/clients/\",\r\n name: \"clients\",\r\n component: Clients,\r\n meta: {\r\n topLevel: true,\r\n index: 3,\r\n },\r\n },\r\n {\r\n path: \"/clients/:id\",\r\n name: \"client\",\r\n component: Client,\r\n meta: {\r\n topLevel: false,\r\n },\r\n },\r\n {\r\n path: \"/events/\",\r\n name: \"events\",\r\n component: Events,\r\n meta: {\r\n topLevel: true,\r\n index: 4,\r\n },\r\n },\r\n {\r\n path: \"/servers/\",\r\n name: \"servers\",\r\n component: Servers,\r\n meta: {\r\n topLevel: true,\r\n index: 5,\r\n },\r\n },\r\n];\r\n\r\nconst router = new VueRouter({\r\n mode: \"hash\",\r\n base: process.env.BASE_URL,\r\n routes,\r\n});\r\n\r\nexport default router;\r\n","import Vue from \"vue\";\r\nimport VueI18n from \"vue-i18n\";\r\n\r\nVue.use(VueI18n);\r\n\r\nfunction loadLocaleMessages() {\r\n const locales = require.context(\r\n \"./locales\",\r\n true,\r\n /[A-Za-z0-9-_,\\s]+\\.json$/i\r\n );\r\n const messages = {};\r\n locales.keys().forEach((key) => {\r\n const matched = key.match(/([A-Za-z0-9-_]+)\\./i);\r\n if (matched && matched.length > 1) {\r\n const locale = matched[1];\r\n messages[locale] = locales(key);\r\n }\r\n });\r\n return messages;\r\n}\r\n\r\nexport default new VueI18n({\r\n locale: process.env.VUE_APP_I18N_LOCALE || \"en\",\r\n fallbackLocale: process.env.VUE_APP_I18N_FALLBACK_LOCALE || \"en\",\r\n messages: loadLocaleMessages(),\r\n});\r\n","import { isLocalStorageAvailable } from \"../../util\";\r\n\r\nexport default {\r\n namespaced: true,\r\n state: {\r\n darkTheme: false,\r\n readonly: false,\r\n lang: \"en\",\r\n supportedFeatures: [],\r\n showNavigationDrawer: false,\r\n },\r\n getters: {\r\n developmentMode(state) {\r\n return (\r\n state.supportedFeatures.includes(\"ALL_EVENTS\") ||\r\n !state.supportedFeatures.includes(\"AGGREGATED_EVENTS\")\r\n );\r\n },\r\n hasAggregatedValues: (state) => {\r\n return state.supportedFeatures.includes(\"AGGREGATED_EVENTS\");\r\n },\r\n },\r\n mutations: {\r\n init(state) {\r\n if (isLocalStorageAvailable) {\r\n state.darkTheme = localStorage.getItem(\"dark_theme\") === \"true\";\r\n state.readonly = localStorage.getItem(\"readonly\") === \"true\";\r\n state.lang = localStorage.getItem(\"lang\") || \"zh-CN\";\r\n }\r\n },\r\n selectTheme(state, darkTheme) {\r\n state.darkTheme = darkTheme;\r\n if (isLocalStorageAvailable) {\r\n localStorage.setItem(\"dark_theme\", darkTheme);\r\n }\r\n },\r\n selectLang(state, lang) {\r\n state.lang = lang;\r\n if (isLocalStorageAvailable) {\r\n localStorage.setItem(\"lang\", lang);\r\n }\r\n },\r\n toggleReadonly(state) {\r\n state.readonly = !state.readonly;\r\n if (isLocalStorageAvailable) {\r\n localStorage.setItem(\"readonly\", state.readonly);\r\n }\r\n },\r\n updateConfig(state, config) {\r\n state.supportedFeatures = config.supportedFeatures;\r\n },\r\n toggleNavigationDrawer(state) {\r\n state.showNavigationDrawer = !state.showNavigationDrawer;\r\n },\r\n },\r\n};\r\n","import { isLocalStorageAvailable } from \"../../util\";\r\n\r\nexport default {\r\n namespaced: true,\r\n state: {\r\n serverUrl: \"http://localhost:3001\",\r\n wsOnly: true,\r\n path: \"/socket\",\r\n namespace: \"/admin\",\r\n parser: \"default\",\r\n sessionId: \"\",\r\n connected: false,\r\n },\r\n mutations: {\r\n init(state) {\r\n if (isLocalStorageAvailable) {\r\n state.serverUrl =\r\n localStorage.getItem(\"server_url\") || \"http://localhost:3001\";\r\n if (state.serverUrl.endsWith(\"/admin\")) {\r\n // for backward compatibility\r\n state.serverUrl = state.serverUrl.slice(0, -6);\r\n } else {\r\n state.namespace = localStorage.getItem(\"namespace\") || \"/admin\";\r\n }\r\n state.wsOnly = localStorage.getItem(\"ws_only\") != \"false\";\r\n state.sessionId = localStorage.getItem(\"session_id\");\r\n state.path = localStorage.getItem(\"path\") || \"/socket\";\r\n state.parser = localStorage.getItem(\"parser\") || \"default\";\r\n }\r\n },\r\n saveConfig(state, { serverUrl, wsOnly, path, namespace, parser }) {\r\n state.serverUrl = serverUrl;\r\n state.wsOnly = wsOnly;\r\n state.path = path;\r\n state.namespace = namespace;\r\n state.parser = parser;\r\n if (isLocalStorageAvailable) {\r\n localStorage.setItem(\"server_url\", serverUrl);\r\n localStorage.setItem(\"ws_only\", wsOnly);\r\n localStorage.setItem(\"path\", path);\r\n localStorage.setItem(\"namespace\", namespace);\r\n localStorage.setItem(\"parser\", parser);\r\n }\r\n },\r\n saveSessionId(state, sessionId) {\r\n state.sessionId = sessionId;\r\n if (isLocalStorageAvailable) {\r\n localStorage.setItem(\"session_id\", sessionId);\r\n }\r\n },\r\n connect(state) {\r\n state.connected = true;\r\n },\r\n disconnect(state) {\r\n state.connected = false;\r\n },\r\n },\r\n};\r\n","import { find, merge, remove as silentlyRemove } from \"lodash-es\";\r\nimport { pushUniq, remove } from \"@/util\";\r\n\r\nconst TEN_MINUTES = 10 * 60 * 1000;\r\n\r\nconst getOrCreateNamespace = (namespaces, name) => {\r\n let namespace = find(namespaces, { name });\r\n if (namespace) {\r\n return namespace;\r\n }\r\n namespace = {\r\n name,\r\n sockets: [],\r\n rooms: [],\r\n events: [],\r\n };\r\n namespaces.push(namespace);\r\n return namespace;\r\n};\r\n\r\nconst getOrCreateRoom = (namespace, name) => {\r\n let room = find(namespace.rooms, { name });\r\n if (room) {\r\n return room;\r\n }\r\n room = {\r\n name,\r\n active: true,\r\n sockets: [],\r\n };\r\n namespace.rooms.push(room);\r\n return room;\r\n};\r\n\r\nconst getOrCreateClient = (clients, id) => {\r\n let client = find(clients, { id });\r\n if (client) {\r\n return client;\r\n }\r\n client = {\r\n id,\r\n connected: true,\r\n sockets: [],\r\n };\r\n clients.push(client);\r\n return client;\r\n};\r\n\r\nconst addSocket = (state, socket) => {\r\n const namespace = getOrCreateNamespace(state.namespaces, socket.nsp);\r\n socket.connected = true;\r\n if (!find(namespace.sockets, { id: socket.id })) {\r\n namespace.sockets.push(socket);\r\n }\r\n\r\n socket.rooms.forEach((name) => {\r\n const room = getOrCreateRoom(namespace, name);\r\n room.isPrivate = name === socket.id;\r\n if (!find(room.sockets, { id: socket.id })) {\r\n room.sockets.push(socket);\r\n }\r\n });\r\n\r\n const client = getOrCreateClient(state.clients, socket.clientId);\r\n if (!find(client.sockets, { id: socket.id })) {\r\n client.sockets.push(socket);\r\n }\r\n};\r\n\r\nconst MAX_ARRAY_LENGTH = 1000;\r\nlet EVENT_COUNTER = 0;\r\n\r\nconst pushEvents = (array, event) => {\r\n event.eventId = ++EVENT_COUNTER; // unique id\r\n array.push(event);\r\n if (array.length > MAX_ARRAY_LENGTH) {\r\n array.shift();\r\n }\r\n};\r\n\r\n// group events by each 10 seconds\r\n// see: https://www.chartjs.org/docs/latest/general/performance.html#decimation\r\nfunction roundedTimestamp(timestamp) {\r\n return timestamp - (timestamp % 10_000);\r\n}\r\n\r\nexport default {\r\n namespaced: true,\r\n state: {\r\n namespaces: [],\r\n clients: [],\r\n selectedNamespace: null,\r\n aggregatedEvents: [],\r\n },\r\n getters: {\r\n findSocketById: (state) => (nsp, id) => {\r\n const namespace = find(state.namespaces, { name: nsp });\r\n if (namespace) {\r\n return find(namespace.sockets, { id });\r\n }\r\n },\r\n findClientById: (state) => (id) => {\r\n return find(state.clients, { id });\r\n },\r\n findRoomByName: (state) => (nsp, name) => {\r\n const namespace = find(state.namespaces, { name: nsp });\r\n if (namespace) {\r\n return find(namespace.rooms, { name });\r\n }\r\n },\r\n findRoomsByNamespace: (state) => (nsp) => {\r\n const namespace = find(state.namespaces, { name: nsp });\r\n return namespace ? namespace.rooms : [];\r\n },\r\n sockets: (state) => {\r\n return state.selectedNamespace ? state.selectedNamespace.sockets : [];\r\n },\r\n rooms: (state) => {\r\n return state.selectedNamespace ? state.selectedNamespace.rooms : [];\r\n },\r\n events: (state) => {\r\n return state.selectedNamespace ? state.selectedNamespace.events : [];\r\n },\r\n },\r\n mutations: {\r\n selectNamespace(state, namespace) {\r\n state.selectedNamespace = namespace;\r\n },\r\n onAllSockets(state, sockets) {\r\n state.namespaces.forEach((namespace) => {\r\n namespace.sockets.splice(0);\r\n namespace.rooms.splice(0);\r\n });\r\n state.clients.splice(0);\r\n sockets.forEach((socket) => addSocket(state, socket));\r\n if (!state.selectedNamespace) {\r\n state.selectedNamespace =\r\n find(state.namespaces, { name: \"/\" }) || state.namespaces[0];\r\n }\r\n },\r\n onSocketConnected(state, { timestamp, socket }) {\r\n addSocket(state, socket);\r\n const namespace = getOrCreateNamespace(state.namespaces, socket.nsp);\r\n pushEvents(namespace.events, {\r\n type: \"connection\",\r\n timestamp,\r\n id: socket.id,\r\n });\r\n },\r\n onSocketUpdated(state, socket) {\r\n const namespace = getOrCreateNamespace(state.namespaces, socket.nsp);\r\n const existingSocket = find(namespace.sockets, { id: socket.id });\r\n if (existingSocket) {\r\n merge(existingSocket, socket);\r\n }\r\n },\r\n onSocketDisconnected(state, { timestamp, nsp, id, reason }) {\r\n const namespace = getOrCreateNamespace(state.namespaces, nsp);\r\n const [socket] = remove(namespace.sockets, { id });\r\n if (socket) {\r\n socket.connected = false;\r\n\r\n const client = getOrCreateClient(state.clients, socket.clientId);\r\n remove(client.sockets, { id });\r\n if (client.sockets.length === 0) {\r\n client.connected = false;\r\n remove(state.clients, { id: socket.clientId });\r\n }\r\n }\r\n pushEvents(namespace.events, {\r\n type: \"disconnection\",\r\n timestamp,\r\n id,\r\n args: reason,\r\n });\r\n },\r\n onRoomJoined(state, { nsp, room, id, timestamp }) {\r\n const namespace = getOrCreateNamespace(state.namespaces, nsp);\r\n const socket = find(namespace.sockets, { id });\r\n if (socket) {\r\n pushUniq(socket.rooms, room);\r\n const _room = getOrCreateRoom(namespace, room);\r\n _room.sockets.push(socket);\r\n }\r\n pushEvents(namespace.events, {\r\n type: \"room_joined\",\r\n timestamp,\r\n id,\r\n args: room,\r\n });\r\n },\r\n onRoomLeft(state, { timestamp, nsp, room, id }) {\r\n const namespace = getOrCreateNamespace(state.namespaces, nsp);\r\n const socket = find(namespace.sockets, { id });\r\n if (socket) {\r\n remove(socket.rooms, room);\r\n }\r\n const _room = getOrCreateRoom(namespace, room);\r\n remove(_room.sockets, { id });\r\n if (_room.sockets.length === 0) {\r\n _room.active = false;\r\n remove(namespace.rooms, { name: room });\r\n }\r\n pushEvents(namespace.events, {\r\n type: \"room_left\",\r\n timestamp,\r\n id,\r\n args: room,\r\n });\r\n },\r\n onServerStats(state, serverStats) {\r\n if (!serverStats.aggregatedEvents) {\r\n return;\r\n }\r\n for (const aggregatedEvent of serverStats.aggregatedEvents) {\r\n const timestamp = roundedTimestamp(aggregatedEvent.timestamp);\r\n const elem = find(state.aggregatedEvents, {\r\n timestamp,\r\n type: aggregatedEvent.type,\r\n subType: aggregatedEvent.subType,\r\n });\r\n if (elem) {\r\n elem.count += aggregatedEvent.count;\r\n } else {\r\n state.aggregatedEvents.push({\r\n timestamp,\r\n type: aggregatedEvent.type,\r\n subType: aggregatedEvent.subType,\r\n count: aggregatedEvent.count,\r\n });\r\n }\r\n }\r\n silentlyRemove(state.aggregatedEvents, (elem) => {\r\n return elem.timestamp < Date.now() - TEN_MINUTES;\r\n });\r\n },\r\n onEventReceived(state, { timestamp, nsp, id, args }) {\r\n const namespace = getOrCreateNamespace(state.namespaces, nsp);\r\n const eventName = args.shift();\r\n pushEvents(namespace.events, {\r\n type: \"event_received\",\r\n timestamp,\r\n id,\r\n eventName,\r\n args,\r\n });\r\n },\r\n onEventSent(state, { timestamp, nsp, id, args }) {\r\n const namespace = getOrCreateNamespace(state.namespaces, nsp);\r\n const eventName = args.shift();\r\n pushEvents(namespace.events, {\r\n type: \"event_sent\",\r\n timestamp,\r\n id,\r\n eventName,\r\n args,\r\n });\r\n },\r\n },\r\n};\r\n","import { find, merge } from \"lodash-es\";\r\nimport { remove } from \"../../util\";\r\n\r\nconst HEALTHY_THRESHOLD = 10000;\r\n\r\nexport default {\r\n namespaced: true,\r\n state: {\r\n servers: [],\r\n },\r\n getters: {\r\n namespaces(state) {\r\n const namespaces = {};\r\n for (const server of state.servers) {\r\n if (server.namespaces) {\r\n for (const { name, socketsCount } of server.namespaces) {\r\n namespaces[name] = (namespaces[name] || 0) + socketsCount;\r\n }\r\n }\r\n }\r\n return Object.keys(namespaces).map((name) => {\r\n return {\r\n name,\r\n socketsCount: namespaces[name],\r\n };\r\n });\r\n },\r\n },\r\n mutations: {\r\n onServerStats(state, stats) {\r\n stats.lastPing = Date.now();\r\n const server = find(state.servers, { serverId: stats.serverId });\r\n if (server) {\r\n merge(server, stats);\r\n } else {\r\n stats.healthy = true;\r\n state.servers.push(stats);\r\n }\r\n },\r\n removeServer(state, serverId) {\r\n remove(state.servers, { serverId });\r\n },\r\n updateState(state) {\r\n state.servers.forEach((server) => {\r\n server.healthy = Date.now() - server.lastPing < HEALTHY_THRESHOLD;\r\n });\r\n },\r\n },\r\n};\r\n","import Vue from \"vue\";\r\nimport Vuex from \"vuex\";\r\nimport config from \"./modules/config\";\r\nimport connection from \"./modules/connection\";\r\nimport main from \"./modules/main\";\r\nimport servers from \"./modules/servers\";\r\n\r\nVue.use(Vuex);\r\n\r\nexport default new Vuex.Store({\r\n modules: {\r\n config,\r\n connection,\r\n main,\r\n servers,\r\n },\r\n});\r\n","import Vue from \"vue\";\r\nimport Vuetify from \"vuetify/lib/framework\";\r\n\r\nVue.use(Vuetify);\r\n\r\nexport default new Vuetify({});\r\n","import {\r\n Chart as ChartJS,\r\n DoughnutController,\r\n Tooltip,\r\n Legend,\r\n ArcElement,\r\n BarElement,\r\n TimeScale,\r\n LinearScale,\r\n} from \"chart.js\";\r\n\r\nChartJS.register(\r\n DoughnutController,\r\n Tooltip,\r\n Legend,\r\n ArcElement,\r\n BarElement,\r\n TimeScale,\r\n LinearScale\r\n);\r\n\r\nimport \"chartjs-adapter-date-fns\";\r\n","import Vue from \"vue\";\r\nimport App from \"./App.vue\";\r\nimport router from \"./router\";\r\nimport i18n from \"./i18n\";\r\nimport store from \"./store\";\r\nimport vuetify from \"./plugins/vuetify\";\r\nimport \"./plugins/chartjs\";\r\n\r\nVue.config.productionTip = false;\r\n\r\nstore.commit(\"config/init\");\r\nstore.commit(\"connection/init\");\r\n\r\ni18n.locale = store.state.config.lang;\r\n\r\nsetInterval(() => {\r\n store.commit(\"servers/updateState\");\r\n}, 1000);\r\n\r\nnew Vue({\r\n router,\r\n i18n,\r\n store,\r\n vuetify,\r\n render: (h) => h(App),\r\n}).$mount(\"#app\");\r\n","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ClientDetails.vue?vue&type=style&index=0&id=8d2424e4&scoped=true&lang=css&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RoomSockets.vue?vue&type=style&index=0&id=c9425064&scoped=true&lang=css&\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Events.vue?vue&type=style&index=0&id=2c2337d4&scoped=true&lang=css&\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./KeyValueTable.vue?vue&type=style&index=0&id=18284f59&scoped=true&lang=css&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ServersOverview.vue?vue&type=style&index=0&id=0ad5cc14&scoped=true&lang=css&\"","module.exports = __webpack_public_path__ + \"img/logo-light.9e8ec0c3.svg\";","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SocketDetails.vue?vue&type=style&index=0&id=3c0dcfcd&scoped=true&lang=css&\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NamespaceSelector.vue?vue&type=style&index=0&id=2c330798&scoped=true&lang=css&\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Clients.vue?vue&type=style&index=0&id=57b53591&scoped=true&lang=css&\""],"sourceRoot":""} \ No newline at end of file diff --git a/ui/socket-admin/js/app.b14a0147.js b/ui/socket-admin/js/app.b14a0147.js new file mode 100644 index 0000000..0b1fdc6 --- /dev/null +++ b/ui/socket-admin/js/app.b14a0147.js @@ -0,0 +1,2 @@ +(function(e){function t(t){for(var a,r,i=t[0],c=t[1],l=t[2],u=0,m=[];ut.meta.index?"v-slide-y-reverse-transition":"v-slide-y-transition":this.transitionName=e.meta.topLevel?"v-slide-x-transition":"v-slide-x-reverse-transition"}},methods:{tryConnect:function(e,t,n,a,s,o){var r=this;this.isConnecting=!0,Te.socket&&(Te.socket.disconnect(),Te.socket.off("connect"),Te.socket.off("connect_error"),Te.socket.off("disconnect"));var i=Object(be["a"])(e+t,{forceNew:!0,reconnection:!1,withCredentials:!0,transports:a?["websocket"]:["polling","websocket"],path:s,parser:"msgpack"===o?ke.a:null,auth:n});i.once("connect",(function(){r.showConnectionModal=!1,r.connectionError="",r.isConnecting=!1,i.io.reconnection(!0),r.$store.commit("connection/saveConfig",{serverUrl:e,wsOnly:a,path:s,namespace:t,parser:o}),Te.socket=i,r.registerEventListeners(i)})),i.on("connect",(function(){r.$store.commit("connection/connect")})),i.on("connect_error",(function(e){(r.isConnecting||"invalid credentials"===e.message)&&(r.showConnectionModal=!0,r.connectionError=e.message),r.isConnecting=!1})),i.on("disconnect",(function(e){r.isConnecting&&(r.isConnecting=!1,r.connectionError=e),r.$store.commit("connection/disconnect")}))},registerEventListeners:function(e){var t=this;e.on("session",(function(e){t.$store.commit("connection/saveSessionId",e)})),e.on("config",(function(e){t.$store.commit("config/updateConfig",e)})),e.on("server_stats",(function(e){t.$store.commit("servers/onServerStats",e),t.$store.commit("main/onServerStats",e)})),e.on("all_sockets",(function(e){t.$store.commit("main/onAllSockets",e)})),e.on("socket_connected",(function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Ne();t.$store.commit("main/onSocketConnected",{timestamp:n,socket:e})})),e.on("socket_updated",(function(e){t.$store.commit("main/onSocketUpdated",e)})),e.on("socket_disconnected",(function(e,n,a){var s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:Ne();t.$store.commit("main/onSocketDisconnected",{timestamp:s,nsp:e,id:n,reason:a})})),e.on("room_joined",(function(e,n,a){var s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:Ne();t.$store.commit("main/onRoomJoined",{timestamp:s,nsp:e,room:n,id:a})})),e.on("room_left",(function(e,n,a){var s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:Ne();t.$store.commit("main/onRoomLeft",{timestamp:s,nsp:e,room:n,id:a})})),e.on("event_received",(function(e,n,a,s){t.$store.commit("main/onEventReceived",{timestamp:s,nsp:e,id:n,args:a})})),e.on("event_sent",(function(e,n,a,s){t.$store.commit("main/onEventSent",{timestamp:s,nsp:e,id:n,args:a})}))},onSubmit:function(e){this.tryConnect(e.serverUrl,e.namespace,{username:e.username,password:e.password},e.wsOnly,e.path,e.parser)}},created:function(){if(this.$vuetify.theme.dark=this.$store.state.config.darkTheme,this.$vuetify.breakpoint.lgAndUp&&this.$store.commit("config/toggleNavigationDrawer"),this.serverUrl){var e=this.$store.state.connection.sessionId;this.tryConnect(this.serverUrl,this.namespace,{sessionId:e},this.wsOnly,this.path,this.parser)}else this.showConnectionModal=!0}},Ee=Ve,Re=n("7496"),Me=n("a523"),Ae=n("f6c4"),Le=Object(b["a"])(Ee,s,o,!1,null,null,null),Pe=Le.exports;k()(Le,{VApp:Re["a"],VContainer:Me["a"],VMain:Ae["a"]});var Be=n("8c4f"),Ue=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("v-breadcrumbs",{attrs:{items:e.breadcrumbItems}}),n("v-container",{attrs:{fluid:""}},[n("v-row",[n("v-col",{attrs:{cols:"12",md:"6",lg:"4"}},[n("ClientsOverview")],1),n("v-col",{attrs:{cols:"12",md:"6",lg:"4"}},[n("ServersOverview")],1),n("v-col",{attrs:{cols:"12",md:"6",lg:"4"}},[n("NamespacesOverview")],1),e.hasAggregatedValues?n("v-col",{attrs:{cols:"12",md:"6"}},[n("ConnectionsHistogram")],1):e._e(),e.hasAggregatedValues?n("v-col",{attrs:{cols:"12",md:"6"}},[n("BytesHistogram")],1):e._e()],1)],1)],1)},He=[],ze=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("v-card",[n("v-card-title",{staticClass:"text-center"},[e._v(" "+e._s(e.$t("clients.title"))+" "),n("v-spacer"),e.developmentMode?n("v-btn",{attrs:{to:{name:"clients"},small:""}},[n("v-icon",[e._v("mdi-dots-horizontal")])],1):e._e()],1),n("v-card-text",[n("v-row",[n("Doughnut",{staticClass:"chart",attrs:{"chart-data":e.data,"chart-options":e.chartOptions}}),n("v-simple-table",{staticClass:"grow align-self-center",scopedSlots:e._u([{key:"default",fn:function(){return[n("tbody",[n("tr",[n("th",[e._v(e._s(e.$t("sockets.transport")))]),n("th",[e._v("#")])]),e._l(e.transports,(function(t){return n("tr",{key:t},[n("td",[n("Transport",{attrs:{transport:t}})],1),n("td",[n("div",[n("h2",[e._v(e._s(e.transportRepartition[t]))])]),n("div",[e._v(" "+e._s(e.percentage(e.transportRepartition[t],e.clientsCount))+" % ")])])])}))],2)]},proxy:!0}])})],1)],1)],1)},qe=[],Ge=(n("4de4"),n("d81d"),n("7b97")),Qe=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("v-chip",{attrs:{small:"",color:e.color,outlined:""}},[e._v(e._s(e.label))])},Ye=[],Fe={name:"Transport",props:{transport:String},computed:{label:function(){switch(this.transport){case"polling":return"HTTP long-polling";case"websocket":return"WebSocket";default:return this.transport}},color:function(){switch(this.transport){case"polling":return v["a"].orange.base;case"websocket":return v["a"].green.base;default:return v["a"].grey.base}}}},Je=Fe,We=Object(b["a"])(Je,Qe,Ye,!1,null,null,null),Ze=We.exports;k()(We,{VChip:y["a"]});var Ke=n("53ca"),Xe=(n("a15b"),n("a434"),n("caad"),n("2532"),n("b680"),n("1c8f")),et=function(){var e="test";try{return localStorage.setItem(e,e),localStorage.removeItem(e),!0}catch(t){return!1}},tt=et();function nt(e){var t=Math.ceil(Math.max(e,0)),n=Math.floor(t/86400),a=Math.floor((t-86400*n)/3600),s=Math.floor((t-86400*n-3600*a)/60),o=Math.ceil(t)-86400*n-3600*a-60*s,r=[];return n>0&&r.push(n+"d"),(n>0||a>0)&&r.push(a+"h"),(n>0||a>0||s>0)&&r.push(s+"m"),r.push(o+"s"),r.join(" ")}function at(e,t){var n="object"===Object(Ke["a"])(t)?Object(Xe["a"])(e,t):e.indexOf(t);return-1===n?[]:e.splice(n,1)}function st(e,t){e.includes(t)||e.push(t)}function ot(e,t){return 0===t?0:(e/t*100).toFixed(1)}var rt=n("9223"),it={name:"ClientsOverview",components:{Transport:Ze,Doughnut:Ge["b"]},data:function(){return{transports:["websocket","polling"],chartOptions:{plugins:{legend:{display:!1}}}}},computed:Object(r["a"])(Object(r["a"])(Object(r["a"])({},Object(l["d"])({clients:function(e){return e.main.clients},darkTheme:function(e){return e.config.darkTheme},servers:function(e){return e.servers.servers}})),Object(l["b"])("config",["hasAggregatedValues","developmentMode"])),{},{clientsCount:function(){return this.hasAggregatedValues?Object(rt["a"])(this.servers,"clientsCount"):this.clients.length},transportRepartition:function(){if(this.hasAggregatedValues){var e=Object(rt["a"])(this.servers,"pollingClientsCount");return{polling:e,websocket:this.clientsCount-e}}return this.clients.map((function(e){return e.sockets[0]})).filter((function(e){return!!e})).reduce((function(e,t){return e[t.transport]++,e}),{websocket:0,polling:0})},data:function(){return{labels:["WebSocket","HTTP long-polling"],datasets:[{backgroundColor:[v["a"].green.base,v["a"].orange.base],borderColor:this.darkTheme?"black":"white",data:[this.transportRepartition["websocket"],this.transportRepartition["polling"]]}]}}}),methods:{percentage:ot}},ct=it,lt=(n("2bc7"),n("0fd9")),dt=n("1f4f"),ut=Object(b["a"])(ct,ze,qe,!1,null,"68c0c5d5",null),mt=ut.exports;k()(ut,{VBtn:N["a"],VCard:je["a"],VCardText:Ce["a"],VCardTitle:Ce["b"],VIcon:le["a"],VRow:lt["a"],VSimpleTable:dt["a"],VSpacer:E["a"]});var pt=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("v-card",[n("v-card-title",{staticClass:"text-center"},[e._v(" "+e._s(e.$t("servers.title"))+" "),n("v-spacer"),n("v-btn",{attrs:{to:{name:"servers"},small:""}},[n("v-icon",[e._v("mdi-dots-horizontal")])],1)],1),n("v-card-text",[n("v-row",[n("Doughnut",{staticClass:"chart",attrs:{"chart-data":e.data,"chart-options":e.chartOptions}}),n("v-simple-table",{staticClass:"grow align-self-center",scopedSlots:e._u([{key:"default",fn:function(){return[n("tbody",[n("tr",[n("th",[e._v(e._s(e.$t("status")))]),n("th",[e._v("#")])]),n("tr",[n("td",[n("ServerStatus",{attrs:{healthy:""}})],1),n("td",[n("div",[n("h2",[e._v(e._s(e.healthyServers))])]),n("div",[e._v(e._s(e.percentage(e.healthyServers,e.totalServers))+" %")])])]),n("tr",[n("td",[n("ServerStatus")],1),n("td",[n("div",[n("h2",[e._v(e._s(e.totalServers-e.healthyServers))])]),n("div",[e._v(" "+e._s(e.percentage(e.totalServers-e.healthyServers,e.totalServers))+" % ")])])])])]},proxy:!0}])})],1)],1)],1)},vt=[],ht=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("Status",{attrs:{value:e.healthy,"ok-label":e.$t("servers.healthy"),"ko-label":e.$t("servers.unhealthy")}})},ft=[],bt={name:"ServerStatus",components:{Status:S},props:{healthy:Boolean}},gt=bt,kt=Object(b["a"])(gt,ht,ft,!1,null,null,null),yt=kt.exports,_t={name:"ServersOverview",components:{ServerStatus:yt,Doughnut:Ge["b"]},data:function(){return{chartOptions:{plugins:{legend:{display:!1}}}}},computed:Object(r["a"])(Object(r["a"])({},Object(l["d"])({healthyServers:function(e){return e.servers.servers.filter((function(e){return e.healthy})).length},totalServers:function(e){return e.servers.servers.length},darkTheme:function(e){return e.config.darkTheme}})),{},{data:function(){return{labels:[this.$t("servers.healthy"),this.$t("servers.unhealthy")],datasets:[{backgroundColor:[v["a"].green.base,v["a"].red.base],borderColor:this.darkTheme?"black":"white",data:[this.healthyServers,this.totalServers-this.healthyServers]}]}}}),methods:{percentage:ot}},St=_t,Ot=(n("a86e"),Object(b["a"])(St,pt,vt,!1,null,"0ad5cc14",null)),jt=Ot.exports;k()(Ot,{VBtn:N["a"],VCard:je["a"],VCardText:Ce["a"],VCardTitle:Ce["b"],VIcon:le["a"],VRow:lt["a"],VSimpleTable:dt["a"],VSpacer:E["a"]});var Ct=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("v-card",{staticClass:"fill-height"},[n("v-card-title",{staticClass:"text-center"},[e._v(" "+e._s(e.$t("namespaces"))+" "),n("v-spacer"),e.developmentMode?n("v-btn",{attrs:{to:{name:"sockets"},small:""}},[n("v-icon",[e._v("mdi-dots-horizontal")])],1):e._e()],1),n("v-simple-table",{scopedSlots:e._u([{key:"default",fn:function(){return[n("thead",[n("tr",[n("th",[e._v(e._s(e.$t("name")))]),n("th",[e._v(e._s(e.$t("rooms.sockets-count")))])])]),n("tbody",e._l(e.namespaces,(function(t){return n("tr",{key:t.name},[n("td",{staticClass:"key-column"},[n("code",[e._v(e._s(t.name))])]),n("td",[e._v(e._s(t.socketsCount))])])})),0)]},proxy:!0}])})],1)},xt=[],wt=n("d66c"),$t={name:"NamespacesOverview",computed:Object(r["a"])(Object(r["a"])(Object(r["a"])(Object(r["a"])({},Object(l["d"])({plainNamespaces:function(e){return Object(wt["a"])(e.main.namespaces,"name").map((function(e){var t=e.name,n=e.sockets;return{name:t,socketsCount:n.length}}))}})),Object(l["b"])("config",["hasAggregatedValues","developmentMode"])),Object(l["b"])("servers",{liteNamespaces:"namespaces"})),{},{namespaces:function(){return this.hasAggregatedValues?this.liteNamespaces:this.plainNamespaces}})},It=$t,Dt=Object(b["a"])(It,Ct,xt,!1,null,"11fe24be",null),Tt=Dt.exports;k()(Dt,{VBtn:N["a"],VCard:je["a"],VCardTitle:Ce["b"],VIcon:le["a"],VSimpleTable:dt["a"],VSpacer:E["a"]});var Nt=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("v-card",[n("v-card-title",{staticClass:"text-center"},[e._v(" "+e._s(e.$t("dashboard.connectionsHistogram.title"))+" ")]),n("v-card-text",[n("v-row",[n("Bar",{staticStyle:{width:"100%"},attrs:{"chart-data":e.chartData,"chart-options":e.chartOptions,height:e.chartHeight}})],1)],1)],1)},Vt=[],Et=n("6b78");function Rt(e){return{x:e.timestamp,y:e.count}}var Mt={name:"ConnectionsHistogram",components:{Bar:Ge["a"]},data:function(){return{chartHeight:120,chartOptions:{parsing:!1,scales:{x:{type:"time",time:{stepSize:1,unit:"minute"}},y:{type:"linear",beginAtZero:!0,suggestedMax:10,ticks:{precision:0}}}}}},computed:Object(r["a"])(Object(r["a"])({},Object(l["d"])("main",["aggregatedEvents"])),{},{connectionEvents:function(){return this.aggregatedEvents.filter((function(e){return"rawConnection"===e.type})).map(Rt)},disconnectionEvents:function(){return this.aggregatedEvents.filter((function(e){return"rawDisconnection"===e.type})).map(Rt)},chartData:function(){return{datasets:[{label:this.$i18n.t("events.type.connection"),backgroundColor:v["a"].green.base,data:this.connectionEvents},{label:this.$i18n.t("events.type.disconnection"),backgroundColor:v["a"].red.base,data:this.disconnectionEvents}]}}}),created:function(){this.updateChartBounds(),this.interval=setInterval(this.updateChartBounds,1e4)},beforeDestroy:function(){clearInterval(this.interval)},methods:{updateChartBounds:function(){var e=new Date;this.chartOptions.scales.x.min=Object(Et["a"])(e,10),this.chartOptions.scales.x.max=e}}},At=Mt,Lt=Object(b["a"])(At,Nt,Vt,!1,null,null,null),Pt=Lt.exports;k()(Lt,{VCard:je["a"],VCardText:Ce["a"],VCardTitle:Ce["b"],VRow:lt["a"]});var Bt=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("v-card",[n("v-card-title",{staticClass:"text-center"},[e._v(" "+e._s(e.$t("dashboard.bytesHistogram.title"))+" ")]),n("v-card-text",[n("v-row",[n("Bar",{staticStyle:{width:"100%"},attrs:{"chart-data":e.chartData,"chart-options":e.chartOptions,height:e.chartHeight}})],1)],1)],1)},Ut=[];function Ht(e){return{x:e.timestamp,y:e.count}}var zt={name:"BytesHistogram",components:{Bar:Ge["a"]},data:function(){return{chartHeight:120,chartOptions:{parsing:!1,scales:{x:{type:"time",time:{stepSize:1,unit:"minute"}},y:{type:"linear",beginAtZero:!0,suggestedMax:1e3,ticks:{precision:0}}}}}},computed:Object(r["a"])(Object(r["a"])({},Object(l["d"])("main",["aggregatedEvents"])),{},{bytesIn:function(){return this.aggregatedEvents.filter((function(e){return"bytesIn"===e.type})).map(Ht)},bytesOut:function(){return this.aggregatedEvents.filter((function(e){return"bytesOut"===e.type})).map(Ht)},chartData:function(){return{datasets:[{label:this.$i18n.t("dashboard.bytesHistogram.bytesIn"),backgroundColor:v["a"].green.base,data:this.bytesIn},{label:this.$i18n.t("dashboard.bytesHistogram.bytesOut"),backgroundColor:v["a"].red.base,data:this.bytesOut}]}}}),created:function(){this.updateChartBounds(),this.interval=setInterval(this.updateChartBounds,1e4)},beforeDestroy:function(){clearInterval(this.interval)},methods:{updateChartBounds:function(){var e=new Date;this.chartOptions.scales.x.min=Object(Et["a"])(e,10),this.chartOptions.scales.x.max=e}}},qt=zt,Gt=Object(b["a"])(qt,Bt,Ut,!1,null,null,null),Qt=Gt.exports;k()(Gt,{VCard:je["a"],VCardText:Ce["a"],VCardTitle:Ce["b"],VRow:lt["a"]});var Yt={name:"Dashboard",components:{NamespacesOverview:Tt,ServersOverview:jt,ClientsOverview:mt,ConnectionsHistogram:Pt,BytesHistogram:Qt},computed:Object(r["a"])({breadcrumbItems:function(){return[{text:this.$t("dashboard.title"),disabled:!0}]}},Object(l["b"])("config",["hasAggregatedValues"]))},Ft=Yt,Jt=n("2bc5"),Wt=n("62ad"),Zt=Object(b["a"])(Ft,Ue,He,!1,null,null,null),Kt=Zt.exports;k()(Zt,{VBreadcrumbs:Jt["a"],VCol:Wt["a"],VContainer:Me["a"],VRow:lt["a"]});var Xt=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("v-breadcrumbs",{attrs:{items:e.breadcrumbItems}}),n("v-card",[n("v-card-text",[n("NamespaceSelector")],1),n("v-data-table",{staticClass:"row-pointer",attrs:{headers:e.headers,items:e.sockets,"footer-props":e.footerProps},on:{"click:row":e.displayDetails},scopedSlots:e._u([{key:"item.transport",fn:function(e){var t=e.value;return[n("Transport",{attrs:{transport:t}})]}},{key:"item.actions",fn:function(t){var a=t.item;return[e.isSocketDisconnectSupported?n("v-tooltip",{attrs:{bottom:""},scopedSlots:e._u([{key:"activator",fn:function(t){var s=t.on,o=t.attrs;return[n("v-btn",e._g(e._b({staticClass:"ml-3",attrs:{disabled:e.isReadonly,small:""},on:{click:function(t){return e.disconnect(a)}}},"v-btn",o,!1),s),[n("v-icon",[e._v("mdi-logout")])],1)]}}],null,!0)},[n("span",[e._v(e._s(e.$t("sockets.disconnect")))])]):e._e()]}}])})],1)],1)},en=[],tn=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("v-select",{staticClass:"selector",attrs:{value:e.selectedNamespace,items:e.namespaces,"item-text":"name","item-value":"name",label:e.$t("select-namespace"),"persistent-hint":"","return-object":""},on:{change:e.selectNamespace}})},nn=[],an={name:"NamespaceSelector",computed:Object(r["a"])({},Object(l["d"])({selectedNamespace:function(e){return e.main.selectedNamespace},namespaces:function(e){return Object(wt["a"])(e.main.namespaces,"name")}})),methods:Object(r["a"])({},Object(l["c"])("main",["selectNamespace"]))},sn=an,on=(n("f712"),Object(b["a"])(sn,tn,nn,!1,null,"2c330798",null)),rn=on.exports;k()(on,{VSelect:q["a"]});var cn={name:"Sockets",components:{Transport:Ze,NamespaceSelector:rn},data:function(){return{footerProps:{"items-per-page-options":[20,100,-1]}}},computed:Object(r["a"])(Object(r["a"])({breadcrumbItems:function(){return[{text:this.$t("sockets.title"),disabled:!0}]},headers:function(){return[{text:"#",value:"id",align:"start"},{text:this.$t("sockets.address"),value:"handshake.address"},{text:this.$t("sockets.transport"),value:"transport"},{value:"actions",align:"end",sortable:!1}]}},Object(l["b"])("main",["sockets"])),Object(l["d"])({selectedNamespace:function(e){return e.main.selectedNamespace},isReadonly:function(e){return e.config.readonly},isSocketDisconnectSupported:function(e){return e.config.supportedFeatures.includes("DISCONNECT")}})),methods:{disconnect:function(e){Te.socket.emit("_disconnect",e.nsp,!1,e.id)},displayDetails:function(e){this.$router.push({name:"socket",params:{nsp:this.selectedNamespace.name,id:e.id}})}}},ln=cn,dn=(n("513c"),n("8fea")),un=n("3a2f"),mn=Object(b["a"])(ln,Xt,en,!1,null,"1d29c60a",null),pn=mn.exports;k()(mn,{VBreadcrumbs:Jt["a"],VBtn:N["a"],VCard:je["a"],VCardText:Ce["a"],VDataTable:dn["a"],VIcon:le["a"],VTooltip:un["a"]});var vn=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("v-breadcrumbs",{attrs:{items:e.breadcrumbItems}}),e.socket?n("v-container",{attrs:{fluid:""}},[n("v-row",[n("v-col",{attrs:{sm:"12",md:"6",lg:"4"}},[n("SocketDetails",{attrs:{socket:e.socket,client:e.client}})],1),n("v-col",{attrs:{sm:"12",md:"6",lg:"4"}},[n("InitialRequest",{attrs:{socket:e.socket}})],1),n("v-col",{attrs:{sm:"12",md:"6",lg:"4"}},[n("SocketRooms",{attrs:{socket:e.socket}})],1)],1)],1):e._e()],1)},hn=[],fn=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("v-card",{staticClass:"fill-height"},[n("v-card-title",[e._v(e._s(e.$t("rooms.title")))]),n("v-data-table",{staticClass:"row-pointer",attrs:{headers:e.headers,items:e.roomsAsObjects,dense:""},on:{"click:row":e.displayDetails},scopedSlots:e._u([{key:"item.actions",fn:function(t){var a=t.item;return[e.isSocketLeaveSupported?n("v-tooltip",{attrs:{bottom:""},scopedSlots:e._u([{key:"activator",fn:function(t){var s=t.on,o=t.attrs;return[n("v-btn",e._g(e._b({staticClass:"ml-3",attrs:{disabled:e.isReadonly,small:""},on:{click:function(t){return e.leave(a)}}},"v-btn",o,!1),s),[n("v-icon",[e._v("mdi-tag-off-outline")])],1)]}}],null,!0)},[n("span",[e._v(e._s(e.$t("sockets.leave")))])]):e._e()]}}])}),n("v-card-text",[n("form",{on:{submit:function(t){return t.preventDefault(),e.onSubmit(t)}}},[n("v-combobox",{staticClass:"select-room d-inline-block mr-3",attrs:{"search-input":e.newRoom,label:e.$t("sockets.join-a-room"),items:e.availableRooms,"item-value":"name","item-text":"name",disabled:e.isReadonly,"return-object":!1},on:{"update:searchInput":function(t){e.newRoom=t},"update:search-input":function(t){e.newRoom=t}}}),n("v-tooltip",{attrs:{bottom:""},scopedSlots:e._u([{key:"activator",fn:function(t){var a=t.on,s=t.attrs;return[n("v-btn",e._g(e._b({attrs:{type:"submit",small:"",disabled:e.isReadonly}},"v-btn",s,!1),a),[n("v-icon",[e._v("mdi-tag-plus-outline")])],1)]}}])},[n("span",[e._v(e._s(e.$t("sockets.join")))])])],1)])],1)},bn=[],gn=(n("fb6a"),n("1775")),kn={name:"SocketRooms",props:{socket:Object},data:function(){return{newRoom:""}},computed:Object(r["a"])(Object(r["a"])({headers:function(){return[{text:this.$t("id"),value:"name",align:"start"},{value:"actions",align:"end",sortable:!1}]},roomsAsObjects:function(){return this.socket.rooms.slice(0).sort().map((function(e){return{name:e}}))},availableRooms:function(){return Object(gn["a"])(this.findRoomsByNamespace(this.socket.nsp),this.roomsAsObjects,"name")}},Object(l["d"])({selectedNamespace:function(e){return e.main.selectedNamespace},isReadonly:function(e){return e.config.readonly},isSocketLeaveSupported:function(e){return e.config.supportedFeatures.includes("LEAVE")},isSocketDisconnectSupported:function(e){return e.config.supportedFeatures.includes("DISCONNECT")}})),Object(l["b"])("main",["findRoomsByNamespace"])),methods:{emit:function(){},onSubmit:function(){Te.socket.emit("join",this.socket.nsp,this.newRoom,this.socket.id),this.newRoom=""},leave:function(e){Te.socket.emit("leave",this.socket.nsp,e.name,this.socket.id)},disconnect:function(){Te.socket.emit("_disconnect",this.socket.nsp,!1,this.socket.id)},displayDetails:function(e){this.$router.push({name:"room",params:{nsp:this.socket.nsp,name:e.name}})}}},yn=kn,_n=(n("4a85"),n("2b5d")),Sn=Object(b["a"])(yn,fn,bn,!1,null,"5631eb89",null),On=Sn.exports;k()(Sn,{VBtn:N["a"],VCard:je["a"],VCardText:Ce["a"],VCardTitle:Ce["b"],VCombobox:_n["a"],VDataTable:dn["a"],VIcon:le["a"],VTooltip:un["a"]});var jn=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("v-card",{staticClass:"fill-height"},[n("v-card-title",[e._v(e._s(e.$t("details")))]),n("v-card-text",[n("h4",[e._v(e._s(e.$t("sockets.client")))])]),n("v-simple-table",{attrs:{dense:""}},[[n("tbody",[n("tr",[n("td",{staticClass:"key-column"},[e._v(e._s(e.$t("id")))]),n("td",[e.client.connected?n("router-link",{staticClass:"link",attrs:{to:e.toClient}},[e._v(e._s(e.client.id))]):n("span",[e._v(e._s(e.client.id))])],1),n("td")]),n("tr",[n("td",{staticClass:"key-column"},[e._v(e._s(e.$t("status")))]),n("td",[n("ConnectionStatus",{attrs:{connected:e.client.connected}})],1),n("td",{attrs:{align:"right"}},[e.isSocketDisconnectSupported&&e.client.connected?n("v-tooltip",{attrs:{bottom:""},scopedSlots:e._u([{key:"activator",fn:function(t){var a=t.on,s=t.attrs;return[n("v-btn",e._g(e._b({attrs:{disabled:e.isReadonly,small:""},on:{click:function(t){return e.disconnectClient()}}},"v-btn",s,!1),a),[n("v-icon",[e._v("mdi-logout")])],1)]}}],null,!1,1004975867)},[n("span",[e._v(e._s(e.$t("clients.disconnect")))])]):e._e()],1)]),n("tr",[n("td",{staticClass:"key-column"},[e._v(e._s(e.$t("sockets.transport")))]),n("td",[n("Transport",{attrs:{transport:e.socket.transport}})],1),n("td")]),n("tr",[n("td",{staticClass:"key-column"},[e._v(e._s(e.$t("sockets.address")))]),n("td",[e._v(e._s(e.socket.handshake.address))]),n("td")])])]],2),n("v-card-text",[n("h4",[e._v(e._s(e.$t("sockets.socket")))])]),n("v-simple-table",{attrs:{dense:""},scopedSlots:e._u([{key:"default",fn:function(){return[n("tbody",[n("tr",[n("td",{staticClass:"key-column"},[e._v(e._s(e.$t("namespace")))]),n("td",[n("code",[e._v(e._s(e.socket.nsp))])]),n("td")]),n("tr",[n("td",{staticClass:"key-column"},[e._v(e._s(e.$t("id")))]),n("td",[e._v(e._s(e.socket.id))]),n("td")]),n("tr",[n("td",{staticClass:"key-column"},[e._v(e._s(e.$t("data")))]),n("td",[n("pre",[n("code",[e._v(e._s(JSON.stringify(e.socket.data,null,2)))])])]),n("td")]),n("tr",[n("td",{staticClass:"key-column"},[e._v(e._s(e.$t("status")))]),n("td",[n("ConnectionStatus",{attrs:{connected:e.socket.connected}})],1),n("td",{attrs:{align:"right"}},[e.isSocketDisconnectSupported&&e.socket.connected?n("v-tooltip",{attrs:{bottom:""},scopedSlots:e._u([{key:"activator",fn:function(t){var a=t.on,s=t.attrs;return[n("v-btn",e._g(e._b({staticClass:"ml-3",attrs:{disabled:e.isReadonly,small:""},on:{click:function(t){return e.disconnectSocket()}}},"v-btn",s,!1),a),[n("v-icon",[e._v("mdi-logout")])],1)]}}],null,!1,2351110648)},[n("span",[e._v(e._s(e.$t("sockets.disconnect")))])]):e._e()],1)]),n("tr",[n("td",{staticClass:"key-column"},[e._v(e._s(e.$t("sockets.creation-date")))]),n("td",[e._v(e._s(e.creationDate))]),n("td")])])]},proxy:!0}])})],1)},Cn=[],xn={name:"SocketDetails",components:{ConnectionStatus:x,Transport:Ze},props:{socket:Object,client:Object},computed:Object(r["a"])({toClient:function(){return{name:"client",params:{id:this.client.id}}},creationDate:function(){return new Date(this.socket.handshake.issued).toISOString()}},Object(l["d"])({isReadonly:function(e){return e.config.readonly},isSocketDisconnectSupported:function(e){return e.config.supportedFeatures.includes("DISCONNECT")}})),methods:{navigateToClient:function(){this.$router.push({name:"client",params:{id:this.client.id}})},disconnectClient:function(){Te.socket.emit("_disconnect",this.socket.nsp,!0,this.socket.id)},disconnectSocket:function(){Te.socket.emit("_disconnect",this.socket.nsp,!1,this.socket.id)}}},wn=xn,$n=(n("eb02"),Object(b["a"])(wn,jn,Cn,!1,null,"3c0dcfcd",null)),In=$n.exports;k()($n,{VBtn:N["a"],VCard:je["a"],VCardText:Ce["a"],VCardTitle:Ce["b"],VIcon:le["a"],VSimpleTable:dt["a"],VTooltip:un["a"]});var Dn=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("v-card",{staticClass:"fill-height"},[n("v-card-title",[e._v(e._s(e.$t("sockets.initial-request")))]),n("v-card-text",[n("h4",[e._v(e._s(e.$t("sockets.headers")))])]),n("KeyValueTable",{attrs:{object:e.socket.handshake.headers}}),n("v-card-text",[n("h4",[e._v(e._s(e.$t("sockets.query-params")))])]),n("KeyValueTable",{attrs:{object:e.socket.handshake.query}})],1)},Tn=[],Nn=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("v-simple-table",{attrs:{dense:""},scopedSlots:e._u([{key:"default",fn:function(){return[n("thead",[n("tr",[n("th",[e._v(e._s(e.$t("name")))]),n("th",[e._v(e._s(e.$t("value")))])])]),n("tbody",e._l(e.items,(function(t){var a=t.key,s=t.value;return n("tr",{key:a},[n("td",{staticClass:"key-column"},[e._v(e._s(a))]),n("td",[e._v(e._s(s))])])})),0)]},proxy:!0}])})},Vn=[],En=(n("b64b"),{name:"KeyValueTable",props:{object:Object},computed:{items:function(){var e=this,t=Object.keys(this.object);return t.sort().map((function(t){return{key:t,value:e.object[t]}}))}}}),Rn=En,Mn=(n("786c"),Object(b["a"])(Rn,Nn,Vn,!1,null,"18284f59",null)),An=Mn.exports;k()(Mn,{VSimpleTable:dt["a"]});var Ln={name:"InitialRequest",components:{KeyValueTable:An},props:{socket:Object}},Pn=Ln,Bn=Object(b["a"])(Pn,Dn,Tn,!1,null,null,null),Un=Bn.exports;k()(Bn,{VCard:je["a"],VCardText:Ce["a"],VCardTitle:Ce["b"]});var Hn={name:"Socket",components:{InitialRequest:Un,SocketDetails:In,SocketRooms:On},data:function(){return{socket:null,client:null}},computed:Object(r["a"])({breadcrumbItems:function(){return[{text:this.$t("sockets.title"),to:{name:"sockets"}},{text:this.$t("sockets.details"),disabled:!0}]}},Object(l["b"])("main",["findSocketById","findClientById"])),mounted:function(){this.socket=this.findSocketById(this.$route.params.nsp,this.$route.params.id),this.socket&&(this.client=this.findClientById(this.socket.clientId))}},zn=Hn,qn=Object(b["a"])(zn,vn,hn,!1,null,"14172ed0",null),Gn=qn.exports;k()(qn,{VBreadcrumbs:Jt["a"],VCol:Wt["a"],VContainer:Me["a"],VRow:lt["a"]});var Qn=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("v-breadcrumbs",{attrs:{items:e.breadcrumbItems}}),n("v-card",[n("v-card-text",{staticClass:"d-flex"},[n("NamespaceSelector"),n("v-switch",{staticClass:"ml-3",attrs:{label:e.$t("rooms.show-private"),inset:"",dense:""},on:{change:e.onPrivateRoomsUpdate},model:{value:e.showPrivateRooms,callback:function(t){e.showPrivateRooms=t},expression:"showPrivateRooms"}})],1),n("v-data-table",{staticClass:"row-pointer",attrs:{headers:e.headers,items:e.filteredRooms,"footer-props":e.footerProps},on:{"click:row":e.displayDetails},scopedSlots:e._u([{key:"item.sockets",fn:function(t){var n=t.item;return[e._v(" "+e._s(n.sockets.length)+" ")]}},{key:"item.isPrivate",fn:function(e){var t=e.value;return[n("RoomType",{attrs:{"is-private":t}})]}},{key:"item.actions",fn:function(t){var a=t.item;return[e.isMultiLeaveSupported&&!a.isPrivate?n("v-tooltip",{attrs:{bottom:""},scopedSlots:e._u([{key:"activator",fn:function(t){var s=t.on,o=t.attrs;return[n("v-btn",e._g(e._b({staticClass:"ml-3",attrs:{disabled:e.isReadonly,small:""},on:{click:function(t){return e.clear(a)}}},"v-btn",o,!1),s),[n("v-icon",[e._v("mdi-tag-off-outline")])],1)]}}],null,!0)},[n("span",[e._v(e._s(e.$t("rooms.clear")))])]):e._e(),e.isMultiDisconnectSupported?n("v-tooltip",{attrs:{bottom:""},scopedSlots:e._u([{key:"activator",fn:function(t){var s=t.on,o=t.attrs;return[n("v-btn",e._g(e._b({staticClass:"ml-3",attrs:{disabled:e.isReadonly,small:""},on:{click:function(t){return e.disconnect(a)}}},"v-btn",o,!1),s),[n("v-icon",[e._v("mdi-logout")])],1)]}}],null,!0)},[n("span",[e._v(e._s(e.$t("rooms.disconnect")))])]):e._e()]}}])})],1)],1)},Yn=[],Fn=(n("5319"),n("ac1f"),function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("Status",{attrs:{value:!e.isPrivate,"ok-label":e.$t("rooms.public"),"ko-label":e.$t("rooms.private")}})}),Jn=[],Wn={name:"RoomType",components:{Status:S},props:{isPrivate:Boolean}},Zn=Wn,Kn=Object(b["a"])(Zn,Fn,Jn,!1,null,null,null),Xn=Kn.exports,ea={name:"Rooms",components:{RoomType:Xn,NamespaceSelector:rn},data:function(){return{showPrivateRooms:!1,footerProps:{"items-per-page-options":[20,100,-1]}}},computed:Object(r["a"])(Object(r["a"])(Object(r["a"])({breadcrumbItems:function(){return[{text:this.$t("rooms.title"),disabled:!0}]},headers:function(){return[{text:this.$t("id"),value:"name",align:"start"},{text:this.$t("type"),value:"isPrivate"},{text:this.$t("rooms.sockets-count"),value:"sockets"},{value:"actions",align:"end",sortable:!1}]}},Object(l["b"])("main",["rooms"])),Object(l["d"])({selectedNamespace:function(e){return e.main.selectedNamespace},isReadonly:function(e){return e.config.readonly},isMultiLeaveSupported:function(e){return e.config.supportedFeatures.includes("MLEAVE")},isMultiDisconnectSupported:function(e){return e.config.supportedFeatures.includes("MDISCONNECT")}})),{},{filteredRooms:function(){var e=this.showPrivateRooms?this.rooms:this.rooms.filter((function(e){return!e.isPrivate}));return Object(wt["a"])(e,"name")}}),methods:{clear:function(e){Te.socket.emit("leave",this.selectedNamespace.name,e.name)},disconnect:function(e){Te.socket.emit("_disconnect",this.selectedNamespace.name,!1,e.name)},displayDetails:function(e){this.$router.push({name:"room",params:{nsp:this.selectedNamespace.name,name:e.name}})},onPrivateRoomsUpdate:function(e){var t=e?{p:1}:{};this.$router.replace({name:"rooms",query:t})}},mounted:function(){this.showPrivateRooms="1"===this.$route.query.p}},ta=ea,na=(n("3a99"),Object(b["a"])(ta,Qn,Yn,!1,null,"29992f63",null)),aa=na.exports;k()(na,{VBreadcrumbs:Jt["a"],VBtn:N["a"],VCard:je["a"],VCardText:Ce["a"],VDataTable:dn["a"],VIcon:le["a"],VSwitch:Z["a"],VTooltip:un["a"]});var sa=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("v-breadcrumbs",{attrs:{items:e.breadcrumbItems}}),n("v-card",[n("v-data-table",{staticClass:"row-pointer",attrs:{headers:e.headers,items:e.clients,"footer-props":e.footerProps},on:{"click:row":e.displayDetails},scopedSlots:e._u([{key:"item.address",fn:function(t){var a=t.item;return[a.sockets.length?n("span",[e._v(e._s(a.sockets[0].handshake.address))]):e._e()]}},{key:"item.transport",fn:function(t){var a=t.item;return[a.sockets.length?n("Transport",{attrs:{transport:a.sockets[0].transport}}):e._e()]}},{key:"item.sockets",fn:function(t){var n=t.item;return[e._v(" "+e._s(n.sockets.length)+" ")]}},{key:"item.actions",fn:function(t){var a=t.item;return[e.isSocketDisconnectSupported?n("v-tooltip",{attrs:{bottom:""},scopedSlots:e._u([{key:"activator",fn:function(t){var s=t.on,o=t.attrs;return[n("v-btn",e._g(e._b({staticClass:"ml-3",attrs:{disabled:e.isReadonly,small:""},on:{click:function(t){return e.disconnect(a)}}},"v-btn",o,!1),s),[n("v-icon",[e._v("mdi-logout")])],1)]}}],null,!0)},[n("span",[e._v(e._s(e.$t("clients.disconnect")))])]):e._e()]}}])})],1)],1)},oa=[],ra={name:"Clients",components:{Transport:Ze},data:function(){return{footerProps:{"items-per-page-options":[20,100,-1]}}},computed:Object(r["a"])({breadcrumbItems:function(){return[{text:this.$t("clients.title"),disabled:!0}]},headers:function(){return[{text:"#",value:"id",align:"start"},{text:this.$t("sockets.address"),value:"address"},{text:this.$t("sockets.transport"),value:"transport"},{text:this.$t("clients.sockets-count"),value:"sockets"},{value:"actions",align:"end",sortable:!1}]}},Object(l["d"])({clients:function(e){return e.main.clients},isReadonly:function(e){return e.config.readonly},isSocketDisconnectSupported:function(e){return e.config.supportedFeatures.includes("DISCONNECT")}})),methods:{disconnect:function(e){var t=e.sockets[0];t&&Te.socket.emit("_disconnect",t.nsp,!0,t.id)},displayDetails:function(e){this.$router.push({name:"client",params:{id:e.id}})}}},ia=ra,ca=(n("ff8e"),Object(b["a"])(ia,sa,oa,!1,null,"57b53591",null)),la=ca.exports;k()(ca,{VBreadcrumbs:Jt["a"],VBtn:N["a"],VCard:je["a"],VDataTable:dn["a"],VIcon:le["a"],VTooltip:un["a"]});var da=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("v-breadcrumbs",{attrs:{items:e.breadcrumbItems}}),e.client?n("v-container",{attrs:{fluid:""}},[n("v-row",[n("v-col",{attrs:{sm:"12",md:"6",lg:"4"}},[n("ClientDetails",{attrs:{client:e.client,socket:e.socket}})],1),n("v-col",{attrs:{sm:"12",md:"6",lg:"4"}},[e.socket?n("InitialRequest",{attrs:{socket:e.socket}}):e._e()],1),n("v-col",{attrs:{sm:"12",md:"6",lg:"4"}},[n("ClientSockets",{attrs:{sockets:e.client.sockets}})],1)],1)],1):e._e()],1)},ua=[],ma=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("v-card",{staticClass:"fill-height"},[n("v-card-title",[e._v(e._s(e.$t("details")))]),n("v-simple-table",{attrs:{dense:""}},[[n("tbody",[n("tr",[n("td",{staticClass:"key-column"},[e._v(e._s(e.$t("id")))]),n("td",[e._v(" "+e._s(e.client.id)+" ")]),n("td")]),n("tr",[n("td",{staticClass:"key-column"},[e._v(e._s(e.$t("status")))]),n("td",[n("ConnectionStatus",{attrs:{connected:e.client.connected}})],1),n("td",{attrs:{align:"right"}},[e.isSocketDisconnectSupported&&e.client.connected?n("v-tooltip",{attrs:{bottom:""},scopedSlots:e._u([{key:"activator",fn:function(t){var a=t.on,s=t.attrs;return[n("v-btn",e._g(e._b({attrs:{disabled:e.isReadonly,small:""},on:{click:function(t){return e.disconnectClient()}}},"v-btn",s,!1),a),[n("v-icon",[e._v("mdi-logout")])],1)]}}],null,!1,1004975867)},[n("span",[e._v(e._s(e.$t("clients.disconnect")))])]):e._e()],1)]),n("tr",[n("td",{staticClass:"key-column"},[e._v(e._s(e.$t("sockets.transport")))]),n("td",[n("Transport",{attrs:{transport:e.socket.transport}})],1),n("td")]),n("tr",[n("td",{staticClass:"key-column"},[e._v(e._s(e.$t("sockets.address")))]),n("td",[e._v(e._s(e.socket.handshake.address))]),n("td")])])]],2)],1)},pa=[],va={name:"ClientDetails",components:{ConnectionStatus:x,Transport:Ze},props:{client:Object,socket:Object},computed:Object(r["a"])({},Object(l["d"])({isReadonly:function(e){return e.config.readonly},isSocketDisconnectSupported:function(e){return e.config.supportedFeatures.includes("DISCONNECT")}})),methods:{disconnectClient:function(){var e=this.client.sockets[0];e&&Te.socket.emit("_disconnect",e.nsp,!0,e.id)}}},ha=va,fa=(n("6602"),Object(b["a"])(ha,ma,pa,!1,null,"8d2424e4",null)),ba=fa.exports;k()(fa,{VBtn:N["a"],VCard:je["a"],VCardTitle:Ce["b"],VIcon:le["a"],VSimpleTable:dt["a"],VTooltip:un["a"]});var ga=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("v-card",[n("v-card-title",[e._v(e._s(e.$t("sockets.title")))]),n("v-data-table",{staticClass:"row-pointer",attrs:{headers:e.headers,items:e.sockets,dense:""},on:{"click:row":e.displayDetails},scopedSlots:e._u([{key:"item.nsp",fn:function(t){var a=t.value;return[n("code",[e._v(e._s(a))])]}},{key:"item.actions",fn:function(t){var a=t.item;return[e.isSocketDisconnectSupported?n("v-tooltip",{attrs:{bottom:""},scopedSlots:e._u([{key:"activator",fn:function(t){var s=t.on,o=t.attrs;return[n("v-btn",e._g(e._b({staticClass:"ml-3",attrs:{disabled:e.isReadonly,small:""},on:{click:function(t){return e.disconnect(a)}}},"v-btn",o,!1),s),[n("v-icon",[e._v("mdi-logout")])],1)]}}],null,!0)},[n("span",[e._v(e._s(e.$t("sockets.disconnect")))])]):e._e()]}}])})],1)},ka=[],ya={name:"ClientSockets",props:{sockets:Array},computed:Object(r["a"])({headers:function(){return[{text:"#",value:"id",align:"start"},{text:this.$t("namespace"),value:"nsp"},{value:"actions",align:"end",sortable:!1}]}},Object(l["d"])({isReadonly:function(e){return e.config.readonly},isSocketDisconnectSupported:function(e){return e.config.supportedFeatures.includes("DISCONNECT")}})),methods:{disconnect:function(e){Te.socket.emit("_disconnect",e.nsp,!1,e.id)},displayDetails:function(e){this.$router.push({name:"socket",params:{nsp:e.nsp,id:e.id}})}}},_a=ya,Sa=(n("1993"),Object(b["a"])(_a,ga,ka,!1,null,"38772079",null)),Oa=Sa.exports;k()(Sa,{VBtn:N["a"],VCard:je["a"],VCardTitle:Ce["b"],VDataTable:dn["a"],VIcon:le["a"],VTooltip:un["a"]});var ja={name:"Client",components:{ClientSockets:Oa,InitialRequest:Un,ClientDetails:ba},data:function(){return{socket:null,client:null}},computed:Object(r["a"])({breadcrumbItems:function(){return[{text:this.$t("clients.title"),to:{name:"clients"},exact:!0},{text:this.$t("clients.details"),disabled:!0}]}},Object(l["b"])("main",["findClientById"])),mounted:function(){this.client=this.findClientById(this.$route.params.id),this.client&&(this.socket=this.client.sockets[0])}},Ca=ja,xa=Object(b["a"])(Ca,da,ua,!1,null,"3d554d12",null),wa=xa.exports;k()(xa,{VBreadcrumbs:Jt["a"],VCol:Wt["a"],VContainer:Me["a"],VRow:lt["a"]});var $a=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("v-breadcrumbs",{attrs:{items:e.breadcrumbItems}}),n("v-card",[n("v-data-table",{attrs:{headers:e.headers,items:e.servers,"footer-props":e.footerProps},scopedSlots:e._u([{key:"item.uptime",fn:function(t){var n=t.value;return[e._v(" "+e._s(e.formatDuration(n))+" ")]}},{key:"item.lastPing",fn:function(t){var n=t.value;return[e._v(" "+e._s(e.delaySinceLastPing(n))+" ")]}},{key:"item.healthy",fn:function(e){var t=e.value;return[n("ServerStatus",{attrs:{healthy:t}})]}},{key:"item.actions",fn:function(t){var a=t.item;return[a.healthy?e._e():n("v-btn",{attrs:{small:""},on:{click:function(t){return e.removeServer(a)}}},[n("v-icon",[e._v("mdi-delete-outline")])],1)]}}])})],1)],1)},Ia=[],Da={name:"Servers",components:{ServerStatus:yt},data:function(){return{footerProps:{"items-per-page-options":[20,100,-1]},now:Date.now()}},created:function(){var e=this;this.interval=setInterval((function(){e.now=Date.now()}),1e3)},beforeDestroy:function(){clearInterval(this.interval)},computed:Object(r["a"])({breadcrumbItems:function(){return[{text:this.$t("servers.title"),disabled:!0}]},headers:function(){return[{text:this.$t("id"),value:"serverId"},{text:this.$t("servers.hostname"),value:"hostname"},{text:this.$t("servers.pid"),value:"pid"},{text:this.$t("servers.uptime"),value:"uptime"},{text:this.$t("servers.clients-count"),value:"clientsCount"},{text:this.$t("servers.last-ping"),value:"lastPing"},{text:this.$t("status"),value:"healthy"},{value:"actions",align:"end",sortable:!1}]}},Object(l["d"])({servers:function(e){return Object(wt["a"])(e.servers.servers,"serverId")}})),methods:{formatDuration:nt,delaySinceLastPing:function(e){var t=this.now-e;return"".concat(nt(t/1e3)," ago")},removeServer:function(e){this.$store.commit("servers/removeServer",e.serverId)}}},Ta=Da,Na=Object(b["a"])(Ta,$a,Ia,!1,null,null,null),Va=Na.exports;k()(Na,{VBreadcrumbs:Jt["a"],VBtn:N["a"],VCard:je["a"],VDataTable:dn["a"],VIcon:le["a"]});var Ea=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("v-breadcrumbs",{attrs:{items:e.breadcrumbItems}}),e.room?n("v-container",{attrs:{fluid:""}},[n("v-row",[n("v-col",{attrs:{sm:"12",md:"4"}},[n("RoomDetails",{attrs:{room:e.room,nsp:e.$route.params.nsp}})],1),n("v-col",{attrs:{sm:"12",md:"8"}},[n("RoomSockets",{attrs:{room:e.room}})],1)],1)],1):e._e()],1)},Ra=[],Ma=function(){var e=this,t=e.$createElement,n=e._self._c||t;return e.room?n("v-card",[n("v-card-title",[e._v(e._s(e.$t("sockets.title")))]),n("v-data-table",{staticClass:"row-pointer",attrs:{headers:e.headers,items:e.room.sockets,"footer-props":e.footerProps},on:{"click:row":e.displayDetails},scopedSlots:e._u([{key:"item.transport",fn:function(e){var t=e.value;return[n("Transport",{attrs:{transport:t}})]}},{key:"item.actions",fn:function(t){var a=t.item;return[e.isSocketLeaveSupported&&!e.room.isPrivate?n("v-tooltip",{attrs:{bottom:""},scopedSlots:e._u([{key:"activator",fn:function(t){var s=t.on,o=t.attrs;return[n("v-btn",e._g(e._b({staticClass:"ml-3",attrs:{disabled:e.isReadonly,small:""},on:{click:function(t){return e.leave(a)}}},"v-btn",o,!1),s),[n("v-icon",[e._v("mdi-tag-off-outline")])],1)]}}],null,!0)},[n("span",[e._v(e._s(e.$t("rooms.leave")))])]):e._e(),e.isSocketDisconnectSupported?n("v-tooltip",{attrs:{bottom:""},scopedSlots:e._u([{key:"activator",fn:function(t){var s=t.on,o=t.attrs;return[n("v-btn",e._g(e._b({staticClass:"ml-3",attrs:{disabled:e.isReadonly,small:""},on:{click:function(t){return e.disconnect(a)}}},"v-btn",o,!1),s),[n("v-icon",[e._v("mdi-logout")])],1)]}}],null,!0)},[n("span",[e._v(e._s(e.$t("sockets.disconnect")))])]):e._e()]}}],null,!1,1763569022)})],1):e._e()},Aa=[],La={name:"RoomSockets",components:{Transport:Ze},props:{room:Object},data:function(){return{footerProps:{"items-per-page-options":[20,100,-1]}}},computed:Object(r["a"])(Object(r["a"])({breadcrumbItems:function(){return[{text:this.$t("rooms.title"),to:{name:"rooms"}},{text:this.$t("rooms.details"),disabled:!0}]},headers:function(){return[{text:this.$t("id"),value:"id",align:"start"},{text:this.$t("sockets.address"),value:"handshake.address"},{text:this.$t("sockets.transport"),value:"transport"},{value:"actions",align:"end",sortable:!1}]}},Object(l["b"])("main",["findRoomByName"])),Object(l["d"])({isReadonly:function(e){return e.config.readonly},isSocketLeaveSupported:function(e){return e.config.supportedFeatures.includes("LEAVE")},isSocketDisconnectSupported:function(e){return e.config.supportedFeatures.includes("DISCONNECT")}})),methods:{leave:function(e){Te.socket.emit("leave",e.nsp,this.room.name,e.id)},disconnect:function(e){Te.socket.emit("_disconnect",e.nsp,!1,e.id)},displayDetails:function(e){this.$router.push({name:"socket",params:{nsp:this.$route.params.nsp,id:e.id}})}}},Pa=La,Ba=(n("6e0b"),Object(b["a"])(Pa,Ma,Aa,!1,null,"c9425064",null)),Ua=Ba.exports;k()(Ba,{VBtn:N["a"],VCard:je["a"],VCardTitle:Ce["b"],VDataTable:dn["a"],VIcon:le["a"],VTooltip:un["a"]});var Ha=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("v-card",{staticClass:"fill-height"},[n("v-card-title",[e._v(e._s(e.$t("details")))]),n("v-simple-table",{attrs:{dense:""}},[[n("tbody",[n("tr",[n("td",{staticClass:"key-column"},[e._v(e._s(e.$t("namespace")))]),n("td",[n("code",[e._v(e._s(e.nsp))])]),n("td")]),n("tr",[n("td",{staticClass:"key-column"},[e._v(e._s(e.$t("id")))]),n("td",[e._v(" "+e._s(e.room.name)+" ")]),n("td")]),n("tr",[n("td",{staticClass:"key-column"},[e._v(e._s(e.$t("status")))]),n("td",[n("RoomStatus",{attrs:{active:e.room.active}})],1),n("td",{attrs:{align:"right"}},[e.isMultiLeaveSupported&&!e.room.isPrivate?n("v-tooltip",{attrs:{bottom:""},scopedSlots:e._u([{key:"activator",fn:function(t){var a=t.on,s=t.attrs;return[n("v-btn",e._g(e._b({staticClass:"ml-3",attrs:{disabled:e.isReadonly,small:""},on:{click:function(t){return e.clear()}}},"v-btn",s,!1),a),[n("v-icon",[e._v("mdi-tag-off-outline")])],1)]}}],null,!1,464351539)},[n("span",[e._v(e._s(e.$t("rooms.clear")))])]):e._e()],1)]),n("tr",[n("td",{staticClass:"key-column"},[e._v(e._s(e.$t("type")))]),n("td",[n("RoomType",{attrs:{"is-private":e.room.isPrivate}})],1),n("td")])])]],2)],1)},za=[],qa=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("Status",{attrs:{value:e.active,"ok-label":e.$t("rooms.active"),"ko-label":e.$t("rooms.deleted")}})},Ga=[],Qa={name:"RoomStatus",components:{Status:S},props:{active:Boolean}},Ya=Qa,Fa=Object(b["a"])(Ya,qa,Ga,!1,null,null,null),Ja=Fa.exports,Wa={name:"RoomDetails",components:{RoomType:Xn,RoomStatus:Ja},props:{room:Object,nsp:String},computed:Object(r["a"])({},Object(l["d"])({isReadonly:function(e){return e.config.readonly},isMultiLeaveSupported:function(e){return e.config.supportedFeatures.includes("MLEAVE")}})),methods:{clear:function(){Te.socket.emit("leave",this.nsp,this.room.name)}}},Za=Wa,Ka=Object(b["a"])(Za,Ha,za,!1,null,"7b3793ea",null),Xa=Ka.exports;k()(Ka,{VBtn:N["a"],VCard:je["a"],VCardTitle:Ce["b"],VIcon:le["a"],VSimpleTable:dt["a"],VTooltip:un["a"]});var es={name:"Sockets",components:{RoomDetails:Xa,RoomSockets:Ua},data:function(){return{room:null}},computed:Object(r["a"])({breadcrumbItems:function(){return[{text:this.$t("rooms.title"),to:{name:"rooms"}},{text:this.$t("rooms.details"),disabled:!0}]}},Object(l["b"])("main",["findRoomByName"])),mounted:function(){this.room=this.findRoomByName(this.$route.params.nsp,this.$route.params.name)}},ts=es,ns=Object(b["a"])(ts,Ea,Ra,!1,null,null,null),as=ns.exports;k()(ns,{VBreadcrumbs:Jt["a"],VCol:Wt["a"],VContainer:Me["a"],VRow:lt["a"]});var ss=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("v-breadcrumbs",{attrs:{items:e.breadcrumbItems}}),n("v-card",[n("v-card-text",[n("NamespaceSelector")],1),n("v-data-table",{attrs:{headers:e.headers,items:e.events,"footer-props":e.footerProps,"item-key":"eventId","sort-by":["timestamp","eventId"],"sort-desc":[!0,!0],"single-expand":"","show-expand":""},scopedSlots:e._u([{key:"item.type",fn:function(e){var t=e.value;return[n("EventType",{attrs:{type:t}})]}},{key:"item.id",fn:function(t){var a=t.value;return[n("router-link",{staticClass:"link",attrs:{to:e.socketDetailsRoute(a)}},[e._v(e._s(a))])]}},{key:"item.args",fn:function(t){var a=t.item,s=t.value;return[e.isExpandable(a)?n("span",[e._v(" "+e._s(e.$t("events.eventName"))+e._s(e.$t("separator"))),n("code",[e._v(e._s(a.eventName))])]):"disconnection"===a.type?n("span",[e._v(" "+e._s(e.$t("events.reason"))+e._s(e.$t("separator"))),n("code",[e._v(e._s(s))])]):"room_joined"===a.type||"room_left"===a.type?n("span",[e._v(" "+e._s(e.$t("events.room"))+e._s(e.$t("separator"))),n("code",[e._v(e._s(s))])]):n("span",[e._v(" "+e._s(s)+" ")])]}},{key:"item.data-table-expand",fn:function(t){var a=t.item,s=t.isExpanded,o=t.expand;return[e.isExpandable(a)&&!s?n("v-btn",{attrs:{icon:""},on:{click:function(e){return o(!0)}}},[n("v-icon",[e._v("mdi-chevron-down")])],1):e._e(),e.isExpandable(a)&&s?n("v-btn",{attrs:{icon:""},on:{click:function(e){return o(!1)}}},[n("v-icon",[e._v("mdi-chevron-up")])],1):e._e()]}},{key:"expanded-item",fn:function(t){var a=t.headers,s=t.item;return[n("td",{attrs:{colspan:a.length}},[n("div",{staticClass:"ma-3"},[e._v(" "+e._s(e.$t("events.eventArgs"))+e._s(e.$t("separator"))+" "),n("pre",[n("code",[e._v(e._s(s.args))])])])])]}}])})],1)],1)},os=[],rs=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("v-chip",{attrs:{color:e.color,outlined:""}},[e._v(" "+e._s(e.$t("events.type."+e.type))+" ")])},is=[],cs={name:"EventType",props:{type:String},computed:{color:function(){switch(this.type){case"connection":return v["a"].green.base;case"room_joined":return v["a"].teal.base;case"room_left":return v["a"].amber.base;case"disconnection":return v["a"].red.base;case"event_received":return v["a"].blue.base;case"event_sent":return v["a"].orange.base}return v["a"].gray.base}}},ls=cs,ds=Object(b["a"])(ls,rs,is,!1,null,null,null),us=ds.exports;k()(ds,{VChip:y["a"]});var ms={name:"Events",components:{EventType:us,NamespaceSelector:rn},data:function(){return{footerProps:{"items-per-page-options":[-1]}}},computed:Object(r["a"])(Object(r["a"])({breadcrumbItems:function(){return[{text:this.$t("events.title"),disabled:!0}]},headers:function(){return[{text:this.$t("timestamp"),value:"timestamp"},{text:this.$t("sockets.socket"),value:"id",sortable:!1},{text:this.$t("type"),value:"type",sortable:!1},{value:"args",sortable:!1},{text:"",value:"data-table-expand"}]}},Object(l["b"])("main",["events"])),Object(l["d"])({selectedNamespace:function(e){return e.main.selectedNamespace}})),methods:{socketDetailsRoute:function(e){return{name:"socket",params:{nsp:this.selectedNamespace.name,id:e}}},isExpandable:function(e){return["event_received","event_sent"].includes(e.type)}}},ps=ms,vs=(n("76e7"),Object(b["a"])(ps,ss,os,!1,null,"2c2337d4",null)),hs=vs.exports;k()(vs,{VBreadcrumbs:Jt["a"],VBtn:N["a"],VCard:je["a"],VCardText:Ce["a"],VDataTable:dn["a"],VIcon:le["a"]}),a["a"].use(Be["a"]);var fs=[{path:"/",name:"dashboard",component:Kt,meta:{topLevel:!0,index:0}},{path:"/sockets/",name:"sockets",component:pn,meta:{topLevel:!0,index:1}},{path:"/n/:nsp/sockets/:id",name:"socket",component:Gn,meta:{topLevel:!1}},{path:"/rooms/",name:"rooms",component:aa,meta:{topLevel:!0,index:2}},{path:"/n/:nsp/rooms/:name",name:"room",component:as,meta:{topLevel:!1}},{path:"/clients/",name:"clients",component:la,meta:{topLevel:!0,index:3}},{path:"/clients/:id",name:"client",component:wa,meta:{topLevel:!1}},{path:"/events/",name:"events",component:hs,meta:{topLevel:!0,index:4}},{path:"/servers/",name:"servers",component:Va,meta:{topLevel:!0,index:5}}],bs=new Be["a"]({mode:"hash",base:"",routes:fs}),gs=bs,ks=(n("159b"),n("d3b7"),n("ddb0"),n("466d"),n("a925"));function ys(){var e=n("49f8"),t={};return e.keys().forEach((function(n){var a=n.match(/([A-Za-z0-9-_]+)\./i);if(a&&a.length>1){var s=a[1];t[s]=e(n)}})),t}a["a"].use(ks["a"]);var _s=new ks["a"]({locale:"en",fallbackLocale:"en",messages:ys()}),Ss={namespaced:!0,state:{darkTheme:!1,readonly:!1,lang:"en",supportedFeatures:[],showNavigationDrawer:!1},getters:{developmentMode:function(e){return e.supportedFeatures.includes("ALL_EVENTS")||!e.supportedFeatures.includes("AGGREGATED_EVENTS")},hasAggregatedValues:function(e){return e.supportedFeatures.includes("AGGREGATED_EVENTS")}},mutations:{init:function(e){tt&&(e.darkTheme="true"===localStorage.getItem("dark_theme"),e.readonly="true"===localStorage.getItem("readonly"),e.lang=localStorage.getItem("lang")||"zh-CN")},selectTheme:function(e,t){e.darkTheme=t,tt&&localStorage.setItem("dark_theme",t)},selectLang:function(e,t){e.lang=t,tt&&localStorage.setItem("lang",t)},toggleReadonly:function(e){e.readonly=!e.readonly,tt&&localStorage.setItem("readonly",e.readonly)},updateConfig:function(e,t){e.supportedFeatures=t.supportedFeatures},toggleNavigationDrawer:function(e){e.showNavigationDrawer=!e.showNavigationDrawer}}},Os=(n("8a79"),{namespaced:!0,state:{serverUrl:"http://localhost:3001",wsOnly:!0,path:"/socket",namespace:"/admin",parser:"default",sessionId:"",connected:!1},mutations:{init:function(e){tt&&(e.serverUrl=localStorage.getItem("server_url")||"http://localhost:3001",e.serverUrl.endsWith("/admin")?e.serverUrl=e.serverUrl.slice(0,-6):e.namespace=localStorage.getItem("namespace")||"/admin",e.wsOnly="false"!=localStorage.getItem("ws_only"),e.sessionId=localStorage.getItem("session_id"),e.path=localStorage.getItem("path")||"/socket",e.parser=localStorage.getItem("parser")||"default")},saveConfig:function(e,t){var n=t.serverUrl,a=t.wsOnly,s=t.path,o=t.namespace,r=t.parser;e.serverUrl=n,e.wsOnly=a,e.path=s,e.namespace=o,e.parser=r,tt&&(localStorage.setItem("server_url",n),localStorage.setItem("ws_only",a),localStorage.setItem("path",s),localStorage.setItem("namespace",o),localStorage.setItem("parser",r))},saveSessionId:function(e,t){e.sessionId=t,tt&&localStorage.setItem("session_id",t)},connect:function(e){e.connected=!0},disconnect:function(e){e.connected=!1}}}),js=n("b85c"),Cs=n("3835"),xs=n("0a94"),ws=n("a1a3"),$s=n("3a59"),Is=6e5,Ds=function(e,t){var n=Object(xs["a"])(e,{name:t});return n||(n={name:t,sockets:[],rooms:[],events:[]},e.push(n),n)},Ts=function(e,t){var n=Object(xs["a"])(e.rooms,{name:t});return n||(n={name:t,active:!0,sockets:[]},e.rooms.push(n),n)},Ns=function(e,t){var n=Object(xs["a"])(e,{id:t});return n||(n={id:t,connected:!0,sockets:[]},e.push(n),n)},Vs=function(e,t){var n=Ds(e.namespaces,t.nsp);t.connected=!0,Object(xs["a"])(n.sockets,{id:t.id})||n.sockets.push(t),t.rooms.forEach((function(e){var a=Ts(n,e);a.isPrivate=e===t.id,Object(xs["a"])(a.sockets,{id:t.id})||a.sockets.push(t)}));var a=Ns(e.clients,t.clientId);Object(xs["a"])(a.sockets,{id:t.id})||a.sockets.push(t)},Es=1e3,Rs=0,Ms=function(e,t){t.eventId=++Rs,e.push(t),e.length>Es&&e.shift()};function As(e){return e-e%1e4}var Ls={namespaced:!0,state:{namespaces:[],clients:[],selectedNamespace:null,aggregatedEvents:[]},getters:{findSocketById:function(e){return function(t,n){var a=Object(xs["a"])(e.namespaces,{name:t});if(a)return Object(xs["a"])(a.sockets,{id:n})}},findClientById:function(e){return function(t){return Object(xs["a"])(e.clients,{id:t})}},findRoomByName:function(e){return function(t,n){var a=Object(xs["a"])(e.namespaces,{name:t});if(a)return Object(xs["a"])(a.rooms,{name:n})}},findRoomsByNamespace:function(e){return function(t){var n=Object(xs["a"])(e.namespaces,{name:t});return n?n.rooms:[]}},sockets:function(e){return e.selectedNamespace?e.selectedNamespace.sockets:[]},rooms:function(e){return e.selectedNamespace?e.selectedNamespace.rooms:[]},events:function(e){return e.selectedNamespace?e.selectedNamespace.events:[]}},mutations:{selectNamespace:function(e,t){e.selectedNamespace=t},onAllSockets:function(e,t){e.namespaces.forEach((function(e){e.sockets.splice(0),e.rooms.splice(0)})),e.clients.splice(0),t.forEach((function(t){return Vs(e,t)})),e.selectedNamespace||(e.selectedNamespace=Object(xs["a"])(e.namespaces,{name:"/"})||e.namespaces[0])},onSocketConnected:function(e,t){var n=t.timestamp,a=t.socket;Vs(e,a);var s=Ds(e.namespaces,a.nsp);Ms(s.events,{type:"connection",timestamp:n,id:a.id})},onSocketUpdated:function(e,t){var n=Ds(e.namespaces,t.nsp),a=Object(xs["a"])(n.sockets,{id:t.id});a&&Object(ws["a"])(a,t)},onSocketDisconnected:function(e,t){var n=t.timestamp,a=t.nsp,s=t.id,o=t.reason,r=Ds(e.namespaces,a),i=at(r.sockets,{id:s}),c=Object(Cs["a"])(i,1),l=c[0];if(l){l.connected=!1;var d=Ns(e.clients,l.clientId);at(d.sockets,{id:s}),0===d.sockets.length&&(d.connected=!1,at(e.clients,{id:l.clientId}))}Ms(r.events,{type:"disconnection",timestamp:n,id:s,args:o})},onRoomJoined:function(e,t){var n=t.nsp,a=t.room,s=t.id,o=t.timestamp,r=Ds(e.namespaces,n),i=Object(xs["a"])(r.sockets,{id:s});if(i){st(i.rooms,a);var c=Ts(r,a);c.sockets.push(i)}Ms(r.events,{type:"room_joined",timestamp:o,id:s,args:a})},onRoomLeft:function(e,t){var n=t.timestamp,a=t.nsp,s=t.room,o=t.id,r=Ds(e.namespaces,a),i=Object(xs["a"])(r.sockets,{id:o});i&&at(i.rooms,s);var c=Ts(r,s);at(c.sockets,{id:o}),0===c.sockets.length&&(c.active=!1,at(r.rooms,{name:s})),Ms(r.events,{type:"room_left",timestamp:n,id:o,args:s})},onServerStats:function(e,t){if(t.aggregatedEvents){var n,a=Object(js["a"])(t.aggregatedEvents);try{for(a.s();!(n=a.n()).done;){var s=n.value,o=As(s.timestamp),r=Object(xs["a"])(e.aggregatedEvents,{timestamp:o,type:s.type,subType:s.subType});r?r.count+=s.count:e.aggregatedEvents.push({timestamp:o,type:s.type,subType:s.subType,count:s.count})}}catch(i){a.e(i)}finally{a.f()}Object($s["a"])(e.aggregatedEvents,(function(e){return e.timestamp\r\n {{\r\n label\r\n }}\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Status.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Status.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Status.vue?vue&type=template&id=87034bbc&\"\nimport script from \"./Status.vue?vue&type=script&lang=js&\"\nexport * from \"./Status.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VChip } from 'vuetify/lib/components/VChip';\ninstallComponents(component, {VChip})\n","\r\n\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ConnectionStatus.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ConnectionStatus.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ConnectionStatus.vue?vue&type=template&id=65b30979&\"\nimport script from \"./ConnectionStatus.vue?vue&type=script&lang=js&\"\nexport * from \"./ConnectionStatus.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppBar.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppBar.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AppBar.vue?vue&type=template&id=2dce9b02&\"\nimport script from \"./AppBar.vue?vue&type=script&lang=js&\"\nexport * from \"./AppBar.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VAppBar } from 'vuetify/lib/components/VAppBar';\nimport { VAppBarNavIcon } from 'vuetify/lib/components/VAppBar';\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VImg } from 'vuetify/lib/components/VImg';\nimport { VSpacer } from 'vuetify/lib/components/VGrid';\nimport { VToolbarTitle } from 'vuetify/lib/components/VToolbar';\ninstallComponents(component, {VAppBar,VAppBarNavIcon,VBtn,VImg,VSpacer,VToolbarTitle})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-navigation-drawer',{staticClass:\"elevation-3\",attrs:{\"app\":\"\",\"clipped\":\"\"},scopedSlots:_vm._u([{key:\"append\",fn:function(){return [_c('v-divider'),_c('div',{staticClass:\"pa-3 pt-10\"},[_c('LangSelector'),_c('ThemeSelector'),_c('ReadonlyToggle')],1)]},proxy:true}]),model:{value:(_vm.$store.state.config.showNavigationDrawer),callback:function ($$v) {_vm.$set(_vm.$store.state.config, \"showNavigationDrawer\", $$v)},expression:\"$store.state.config.showNavigationDrawer\"}},[_c('v-list',{attrs:{\"dense\":\"\",\"nav\":\"\"}},_vm._l((_vm.items),function(item){return _c('v-list-item',{key:item.title,attrs:{\"to\":item.to,\"exact\":item.exact}},[_c('v-list-item-icon',[_c('v-icon',[_vm._v(_vm._s(item.icon))])],1),_c('v-list-item-content',[_c('v-list-item-title',[_vm._v(_vm._s(item.title))])],1)],1)}),1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-select',{attrs:{\"dense\":\"\",\"value\":_vm.lang,\"items\":_vm.languages,\"label\":_vm.$t('config.language')},on:{\"change\":_vm.onSelectLang}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LangSelector.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./LangSelector.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./LangSelector.vue?vue&type=template&id=5a0f8756&\"\nimport script from \"./LangSelector.vue?vue&type=script&lang=js&\"\nexport * from \"./LangSelector.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VSelect } from 'vuetify/lib/components/VSelect';\ninstallComponents(component, {VSelect})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-switch',{attrs:{\"input-value\":_vm.darkTheme,\"label\":_vm.$t('config.dark-theme'),\"inset\":\"\",\"dense\":\"\"},on:{\"change\":_vm.onSelectTheme}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ThemeSelector.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ThemeSelector.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ThemeSelector.vue?vue&type=template&id=65fd31ec&\"\nimport script from \"./ThemeSelector.vue?vue&type=script&lang=js&\"\nexport * from \"./ThemeSelector.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VSwitch } from 'vuetify/lib/components/VSwitch';\ninstallComponents(component, {VSwitch})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-switch',{attrs:{\"input-value\":_vm.readonly,\"label\":_vm.$t('config.readonly'),\"disabled\":_vm.disabled,\"inset\":\"\",\"dense\":\"\"},on:{\"change\":_vm.toggleReadonly}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ReadonlyToggle.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ReadonlyToggle.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ReadonlyToggle.vue?vue&type=template&id=5b271066&\"\nimport script from \"./ReadonlyToggle.vue?vue&type=script&lang=js&\"\nexport * from \"./ReadonlyToggle.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VSwitch } from 'vuetify/lib/components/VSwitch';\ninstallComponents(component, {VSwitch})\n","\r\n\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NavigationDrawer.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NavigationDrawer.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./NavigationDrawer.vue?vue&type=template&id=f120b24c&\"\nimport script from \"./NavigationDrawer.vue?vue&type=script&lang=js&\"\nexport * from \"./NavigationDrawer.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VDivider } from 'vuetify/lib/components/VDivider';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VList } from 'vuetify/lib/components/VList';\nimport { VListItem } from 'vuetify/lib/components/VList';\nimport { VListItemContent } from 'vuetify/lib/components/VList';\nimport { VListItemIcon } from 'vuetify/lib/components/VList';\nimport { VListItemTitle } from 'vuetify/lib/components/VList';\nimport { VNavigationDrawer } from 'vuetify/lib/components/VNavigationDrawer';\ninstallComponents(component, {VDivider,VIcon,VList,VListItem,VListItemContent,VListItemIcon,VListItemTitle,VNavigationDrawer})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-dialog',{attrs:{\"value\":_vm.isOpen,\"transition\":\"dialog-bottom-transition\",\"max-width\":\"300\",\"persistent\":\"\"}},[_c('v-card',[_c('v-card-title',[_vm._v(_vm._s(_vm.$t(\"connection.title\")))]),_c('v-card-text',[_c('form',{on:{\"submit\":function($event){$event.preventDefault();return _vm.onSubmit($event)}}},[_c('v-text-field',{attrs:{\"label\":_vm.$t('connection.serverUrl'),\"placeholder\":\"https://example.com\",\"required\":\"\"},model:{value:(_vm.serverUrl),callback:function ($$v) {_vm.serverUrl=$$v},expression:\"serverUrl\"}}),_c('v-text-field',{attrs:{\"label\":_vm.$t('connection.username')},model:{value:(_vm.username),callback:function ($$v) {_vm.username=$$v},expression:\"username\"}}),_c('v-text-field',{attrs:{\"label\":_vm.$t('connection.password'),\"type\":\"password\"},model:{value:(_vm.password),callback:function ($$v) {_vm.password=$$v},expression:\"password\"}}),_c('v-switch',{attrs:{\"label\":_vm.$t('connection.advanced-options'),\"inset\":\"\",\"dense\":\"\"},model:{value:(_vm.showAdvancedOptions),callback:function ($$v) {_vm.showAdvancedOptions=$$v},expression:\"showAdvancedOptions\"}}),_c('v-expand-transition',[(_vm.showAdvancedOptions)?_c('div',[_c('v-switch',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showAdvancedOptions),expression:\"showAdvancedOptions\"}],attrs:{\"label\":_vm.$t('connection.websocket-only'),\"inset\":\"\",\"dense\":\"\"},model:{value:(_vm.wsOnly),callback:function ($$v) {_vm.wsOnly=$$v},expression:\"wsOnly\"}}),_c('v-text-field',{attrs:{\"label\":_vm.$t('connection.namespace')},model:{value:(_vm.namespace),callback:function ($$v) {_vm.namespace=$$v},expression:\"namespace\"}}),_c('v-text-field',{attrs:{\"label\":_vm.$t('connection.path')},model:{value:(_vm.path),callback:function ($$v) {_vm.path=$$v},expression:\"path\"}}),_c('v-select',{attrs:{\"label\":_vm.$t('connection.parser'),\"items\":_vm.parserOptions},model:{value:(_vm.parser),callback:function ($$v) {_vm.parser=$$v},expression:\"parser\"}})],1):_vm._e()]),_c('v-btn',{staticClass:\"primary\",attrs:{\"loading\":_vm.isConnecting,\"disabled\":_vm.isConnecting || !_vm.isValid,\"type\":\"submit\"}},[_vm._v(_vm._s(_vm.$t(\"connection.connect\")))]),(_vm.error)?_c('div',{staticClass:\"red--text mt-3\"},[_vm._v(\" \"+_vm._s(_vm.errorMessage)+\" \")]):_vm._e()],1)])],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ConnectionModal.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ConnectionModal.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ConnectionModal.vue?vue&type=template&id=142bafcc&scoped=true&\"\nimport script from \"./ConnectionModal.vue?vue&type=script&lang=js&\"\nexport * from \"./ConnectionModal.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"142bafcc\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardText } from 'vuetify/lib/components/VCard';\nimport { VCardTitle } from 'vuetify/lib/components/VCard';\nimport { VDialog } from 'vuetify/lib/components/VDialog';\nimport { VExpandTransition } from 'vuetify/lib/components/transitions';\nimport { VSelect } from 'vuetify/lib/components/VSelect';\nimport { VSwitch } from 'vuetify/lib/components/VSwitch';\nimport { VTextField } from 'vuetify/lib/components/VTextField';\ninstallComponents(component, {VBtn,VCard,VCardText,VCardTitle,VDialog,VExpandTransition,VSelect,VSwitch,VTextField})\n","export default {\r\n set socket(socket) {\r\n this._socket = socket;\r\n },\r\n\r\n get socket() {\r\n return this._socket;\r\n },\r\n};\r\n","\r\n\r\n\r\n","import mod from \"-!../node_modules/cache-loader/dist/cjs.js??ref--12-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../node_modules/cache-loader/dist/cjs.js??ref--12-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=7bc361a2&\"\nimport script from \"./App.vue?vue&type=script&lang=js&\"\nexport * from \"./App.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VApp } from 'vuetify/lib/components/VApp';\nimport { VContainer } from 'vuetify/lib/components/VGrid';\nimport { VMain } from 'vuetify/lib/components/VMain';\ninstallComponents(component, {VApp,VContainer,VMain})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('v-breadcrumbs',{attrs:{\"items\":_vm.breadcrumbItems}}),_c('v-container',{attrs:{\"fluid\":\"\"}},[_c('v-row',[_c('v-col',{attrs:{\"cols\":\"12\",\"md\":\"6\",\"lg\":\"4\"}},[_c('ClientsOverview')],1),_c('v-col',{attrs:{\"cols\":\"12\",\"md\":\"6\",\"lg\":\"4\"}},[_c('ServersOverview')],1),_c('v-col',{attrs:{\"cols\":\"12\",\"md\":\"6\",\"lg\":\"4\"}},[_c('NamespacesOverview')],1),(_vm.hasAggregatedValues)?_c('v-col',{attrs:{\"cols\":\"12\",\"md\":\"6\"}},[_c('ConnectionsHistogram')],1):_vm._e(),(_vm.hasAggregatedValues)?_c('v-col',{attrs:{\"cols\":\"12\",\"md\":\"6\"}},[_c('BytesHistogram')],1):_vm._e()],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-card',[_c('v-card-title',{staticClass:\"text-center\"},[_vm._v(\" \"+_vm._s(_vm.$t(\"clients.title\"))+\" \"),_c('v-spacer'),(_vm.developmentMode)?_c('v-btn',{attrs:{\"to\":{ name: 'clients' },\"small\":\"\"}},[_c('v-icon',[_vm._v(\"mdi-dots-horizontal\")])],1):_vm._e()],1),_c('v-card-text',[_c('v-row',[_c('Doughnut',{staticClass:\"chart\",attrs:{\"chart-data\":_vm.data,\"chart-options\":_vm.chartOptions}}),_c('v-simple-table',{staticClass:\"grow align-self-center\",scopedSlots:_vm._u([{key:\"default\",fn:function(){return [_c('tbody',[_c('tr',[_c('th',[_vm._v(_vm._s(_vm.$t(\"sockets.transport\")))]),_c('th',[_vm._v(\"#\")])]),_vm._l((_vm.transports),function(transport){return _c('tr',{key:transport},[_c('td',[_c('Transport',{attrs:{\"transport\":transport}})],1),_c('td',[_c('div',[_c('h2',[_vm._v(_vm._s(_vm.transportRepartition[transport]))])]),_c('div',[_vm._v(\" \"+_vm._s(_vm.percentage(_vm.transportRepartition[transport], _vm.clientsCount))+\" % \")])])])})],2)]},proxy:true}])})],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-chip',{attrs:{\"small\":\"\",\"color\":_vm.color,\"outlined\":\"\"}},[_vm._v(_vm._s(_vm.label))])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Transport.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Transport.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Transport.vue?vue&type=template&id=54f750af&\"\nimport script from \"./Transport.vue?vue&type=script&lang=js&\"\nexport * from \"./Transport.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VChip } from 'vuetify/lib/components/VChip';\ninstallComponents(component, {VChip})\n","import { findIndex } from \"lodash-es\";\r\n\r\nconst testLocalStorage = () => {\r\n const test = \"test\";\r\n try {\r\n localStorage.setItem(test, test);\r\n localStorage.removeItem(test);\r\n return true;\r\n } catch (e) {\r\n return false;\r\n }\r\n};\r\n\r\nexport const isLocalStorageAvailable = testLocalStorage();\r\n\r\nexport function formatDuration(duration) {\r\n const d = Math.ceil(Math.max(duration, 0));\r\n const days = Math.floor(d / 86400);\r\n const hours = Math.floor((d - days * 86400) / 3600);\r\n const minutes = Math.floor((d - days * 86400 - hours * 3600) / 60);\r\n const seconds = Math.ceil(d) - days * 86400 - hours * 3600 - minutes * 60;\r\n\r\n const output = [];\r\n if (days > 0) {\r\n output.push(days + \"d\");\r\n }\r\n if (days > 0 || hours > 0) {\r\n output.push(hours + \"h\");\r\n }\r\n if (days > 0 || hours > 0 || minutes > 0) {\r\n output.push(minutes + \"m\");\r\n }\r\n output.push(seconds + \"s\");\r\n return output.join(\" \");\r\n}\r\n\r\n/**\r\n * lodash remove() does not play well with Vue.js\r\n */\r\nexport function remove(array, predicate) {\r\n const index =\r\n typeof predicate === \"object\"\r\n ? findIndex(array, predicate)\r\n : array.indexOf(predicate);\r\n return index === -1 ? [] : array.splice(index, 1);\r\n}\r\n\r\nexport function pushUniq(array, elem) {\r\n if (!array.includes(elem)) {\r\n array.push(elem);\r\n }\r\n}\r\n\r\nexport function percentage(value, total) {\r\n return total === 0 ? 0 : ((value / total) * 100).toFixed(1);\r\n}\r\n","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ClientsOverview.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ClientsOverview.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ClientsOverview.vue?vue&type=template&id=68c0c5d5&scoped=true&\"\nimport script from \"./ClientsOverview.vue?vue&type=script&lang=js&\"\nexport * from \"./ClientsOverview.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ClientsOverview.vue?vue&type=style&index=0&id=68c0c5d5&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"68c0c5d5\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardText } from 'vuetify/lib/components/VCard';\nimport { VCardTitle } from 'vuetify/lib/components/VCard';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VRow } from 'vuetify/lib/components/VGrid';\nimport { VSimpleTable } from 'vuetify/lib/components/VDataTable';\nimport { VSpacer } from 'vuetify/lib/components/VGrid';\ninstallComponents(component, {VBtn,VCard,VCardText,VCardTitle,VIcon,VRow,VSimpleTable,VSpacer})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-card',[_c('v-card-title',{staticClass:\"text-center\"},[_vm._v(\" \"+_vm._s(_vm.$t(\"servers.title\"))+\" \"),_c('v-spacer'),_c('v-btn',{attrs:{\"to\":{ name: 'servers' },\"small\":\"\"}},[_c('v-icon',[_vm._v(\"mdi-dots-horizontal\")])],1)],1),_c('v-card-text',[_c('v-row',[_c('Doughnut',{staticClass:\"chart\",attrs:{\"chart-data\":_vm.data,\"chart-options\":_vm.chartOptions}}),_c('v-simple-table',{staticClass:\"grow align-self-center\",scopedSlots:_vm._u([{key:\"default\",fn:function(){return [_c('tbody',[_c('tr',[_c('th',[_vm._v(_vm._s(_vm.$t(\"status\")))]),_c('th',[_vm._v(\"#\")])]),_c('tr',[_c('td',[_c('ServerStatus',{attrs:{\"healthy\":\"\"}})],1),_c('td',[_c('div',[_c('h2',[_vm._v(_vm._s(_vm.healthyServers))])]),_c('div',[_vm._v(_vm._s(_vm.percentage(_vm.healthyServers, _vm.totalServers))+\" %\")])])]),_c('tr',[_c('td',[_c('ServerStatus')],1),_c('td',[_c('div',[_c('h2',[_vm._v(_vm._s(_vm.totalServers - _vm.healthyServers))])]),_c('div',[_vm._v(\" \"+_vm._s(_vm.percentage(_vm.totalServers - _vm.healthyServers, _vm.totalServers))+\" % \")])])])])]},proxy:true}])})],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('Status',{attrs:{\"value\":_vm.healthy,\"ok-label\":_vm.$t('servers.healthy'),\"ko-label\":_vm.$t('servers.unhealthy')}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ServerStatus.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ServerStatus.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ServerStatus.vue?vue&type=template&id=76035ea6&\"\nimport script from \"./ServerStatus.vue?vue&type=script&lang=js&\"\nexport * from \"./ServerStatus.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ServersOverview.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ServersOverview.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ServersOverview.vue?vue&type=template&id=0ad5cc14&scoped=true&\"\nimport script from \"./ServersOverview.vue?vue&type=script&lang=js&\"\nexport * from \"./ServersOverview.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ServersOverview.vue?vue&type=style&index=0&id=0ad5cc14&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"0ad5cc14\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardText } from 'vuetify/lib/components/VCard';\nimport { VCardTitle } from 'vuetify/lib/components/VCard';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VRow } from 'vuetify/lib/components/VGrid';\nimport { VSimpleTable } from 'vuetify/lib/components/VDataTable';\nimport { VSpacer } from 'vuetify/lib/components/VGrid';\ninstallComponents(component, {VBtn,VCard,VCardText,VCardTitle,VIcon,VRow,VSimpleTable,VSpacer})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-card',{staticClass:\"fill-height\"},[_c('v-card-title',{staticClass:\"text-center\"},[_vm._v(\" \"+_vm._s(_vm.$t(\"namespaces\"))+\" \"),_c('v-spacer'),(_vm.developmentMode)?_c('v-btn',{attrs:{\"to\":{ name: 'sockets' },\"small\":\"\"}},[_c('v-icon',[_vm._v(\"mdi-dots-horizontal\")])],1):_vm._e()],1),_c('v-simple-table',{scopedSlots:_vm._u([{key:\"default\",fn:function(){return [_c('thead',[_c('tr',[_c('th',[_vm._v(_vm._s(_vm.$t(\"name\")))]),_c('th',[_vm._v(_vm._s(_vm.$t(\"rooms.sockets-count\")))])])]),_c('tbody',_vm._l((_vm.namespaces),function(namespace){return _c('tr',{key:namespace.name},[_c('td',{staticClass:\"key-column\"},[_c('code',[_vm._v(_vm._s(namespace.name))])]),_c('td',[_vm._v(_vm._s(namespace.socketsCount))])])}),0)]},proxy:true}])})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NamespacesOverview.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NamespacesOverview.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./NamespacesOverview.vue?vue&type=template&id=11fe24be&scoped=true&\"\nimport script from \"./NamespacesOverview.vue?vue&type=script&lang=js&\"\nexport * from \"./NamespacesOverview.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"11fe24be\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardTitle } from 'vuetify/lib/components/VCard';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VSimpleTable } from 'vuetify/lib/components/VDataTable';\nimport { VSpacer } from 'vuetify/lib/components/VGrid';\ninstallComponents(component, {VBtn,VCard,VCardTitle,VIcon,VSimpleTable,VSpacer})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-card',[_c('v-card-title',{staticClass:\"text-center\"},[_vm._v(\" \"+_vm._s(_vm.$t(\"dashboard.connectionsHistogram.title\"))+\" \")]),_c('v-card-text',[_c('v-row',[_c('Bar',{staticStyle:{\"width\":\"100%\"},attrs:{\"chart-data\":_vm.chartData,\"chart-options\":_vm.chartOptions,\"height\":_vm.chartHeight}})],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ConnectionsHistogram.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ConnectionsHistogram.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ConnectionsHistogram.vue?vue&type=template&id=30457b7f&\"\nimport script from \"./ConnectionsHistogram.vue?vue&type=script&lang=js&\"\nexport * from \"./ConnectionsHistogram.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardText } from 'vuetify/lib/components/VCard';\nimport { VCardTitle } from 'vuetify/lib/components/VCard';\nimport { VRow } from 'vuetify/lib/components/VGrid';\ninstallComponents(component, {VCard,VCardText,VCardTitle,VRow})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-card',[_c('v-card-title',{staticClass:\"text-center\"},[_vm._v(\" \"+_vm._s(_vm.$t(\"dashboard.bytesHistogram.title\"))+\" \")]),_c('v-card-text',[_c('v-row',[_c('Bar',{staticStyle:{\"width\":\"100%\"},attrs:{\"chart-data\":_vm.chartData,\"chart-options\":_vm.chartOptions,\"height\":_vm.chartHeight}})],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./BytesHistogram.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./BytesHistogram.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./BytesHistogram.vue?vue&type=template&id=7c6eda12&\"\nimport script from \"./BytesHistogram.vue?vue&type=script&lang=js&\"\nexport * from \"./BytesHistogram.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardText } from 'vuetify/lib/components/VCard';\nimport { VCardTitle } from 'vuetify/lib/components/VCard';\nimport { VRow } from 'vuetify/lib/components/VGrid';\ninstallComponents(component, {VCard,VCardText,VCardTitle,VRow})\n","\r\n\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Dashboard.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Dashboard.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Dashboard.vue?vue&type=template&id=eb5ee798&\"\nimport script from \"./Dashboard.vue?vue&type=script&lang=js&\"\nexport * from \"./Dashboard.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBreadcrumbs } from 'vuetify/lib/components/VBreadcrumbs';\nimport { VCol } from 'vuetify/lib/components/VGrid';\nimport { VContainer } from 'vuetify/lib/components/VGrid';\nimport { VRow } from 'vuetify/lib/components/VGrid';\ninstallComponents(component, {VBreadcrumbs,VCol,VContainer,VRow})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('v-breadcrumbs',{attrs:{\"items\":_vm.breadcrumbItems}}),_c('v-card',[_c('v-card-text',[_c('NamespaceSelector')],1),_c('v-data-table',{staticClass:\"row-pointer\",attrs:{\"headers\":_vm.headers,\"items\":_vm.sockets,\"footer-props\":_vm.footerProps},on:{\"click:row\":_vm.displayDetails},scopedSlots:_vm._u([{key:\"item.transport\",fn:function(ref){\nvar value = ref.value;\nreturn [_c('Transport',{attrs:{\"transport\":value}})]}},{key:\"item.actions\",fn:function(ref){\nvar item = ref.item;\nreturn [(_vm.isSocketDisconnectSupported)?_c('v-tooltip',{attrs:{\"bottom\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nvar attrs = ref.attrs;\nreturn [_c('v-btn',_vm._g(_vm._b({staticClass:\"ml-3\",attrs:{\"disabled\":_vm.isReadonly,\"small\":\"\"},on:{\"click\":function($event){return _vm.disconnect(item)}}},'v-btn',attrs,false),on),[_c('v-icon',[_vm._v(\"mdi-logout\")])],1)]}}],null,true)},[_c('span',[_vm._v(_vm._s(_vm.$t(\"sockets.disconnect\")))])]):_vm._e()]}}])})],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-select',{staticClass:\"selector\",attrs:{\"value\":_vm.selectedNamespace,\"items\":_vm.namespaces,\"item-text\":\"name\",\"item-value\":\"name\",\"label\":_vm.$t('select-namespace'),\"persistent-hint\":\"\",\"return-object\":\"\"},on:{\"change\":_vm.selectNamespace}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NamespaceSelector.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NamespaceSelector.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./NamespaceSelector.vue?vue&type=template&id=2c330798&scoped=true&\"\nimport script from \"./NamespaceSelector.vue?vue&type=script&lang=js&\"\nexport * from \"./NamespaceSelector.vue?vue&type=script&lang=js&\"\nimport style0 from \"./NamespaceSelector.vue?vue&type=style&index=0&id=2c330798&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"2c330798\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VSelect } from 'vuetify/lib/components/VSelect';\ninstallComponents(component, {VSelect})\n","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Sockets.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Sockets.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Sockets.vue?vue&type=template&id=1d29c60a&scoped=true&\"\nimport script from \"./Sockets.vue?vue&type=script&lang=js&\"\nexport * from \"./Sockets.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Sockets.vue?vue&type=style&index=0&id=1d29c60a&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1d29c60a\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBreadcrumbs } from 'vuetify/lib/components/VBreadcrumbs';\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardText } from 'vuetify/lib/components/VCard';\nimport { VDataTable } from 'vuetify/lib/components/VDataTable';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VTooltip } from 'vuetify/lib/components/VTooltip';\ninstallComponents(component, {VBreadcrumbs,VBtn,VCard,VCardText,VDataTable,VIcon,VTooltip})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('v-breadcrumbs',{attrs:{\"items\":_vm.breadcrumbItems}}),(_vm.socket)?_c('v-container',{attrs:{\"fluid\":\"\"}},[_c('v-row',[_c('v-col',{attrs:{\"sm\":\"12\",\"md\":\"6\",\"lg\":\"4\"}},[_c('SocketDetails',{attrs:{\"socket\":_vm.socket,\"client\":_vm.client}})],1),_c('v-col',{attrs:{\"sm\":\"12\",\"md\":\"6\",\"lg\":\"4\"}},[_c('InitialRequest',{attrs:{\"socket\":_vm.socket}})],1),_c('v-col',{attrs:{\"sm\":\"12\",\"md\":\"6\",\"lg\":\"4\"}},[_c('SocketRooms',{attrs:{\"socket\":_vm.socket}})],1)],1)],1):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-card',{staticClass:\"fill-height\"},[_c('v-card-title',[_vm._v(_vm._s(_vm.$t(\"rooms.title\")))]),_c('v-data-table',{staticClass:\"row-pointer\",attrs:{\"headers\":_vm.headers,\"items\":_vm.roomsAsObjects,\"dense\":\"\"},on:{\"click:row\":_vm.displayDetails},scopedSlots:_vm._u([{key:\"item.actions\",fn:function(ref){\nvar item = ref.item;\nreturn [(_vm.isSocketLeaveSupported)?_c('v-tooltip',{attrs:{\"bottom\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nvar attrs = ref.attrs;\nreturn [_c('v-btn',_vm._g(_vm._b({staticClass:\"ml-3\",attrs:{\"disabled\":_vm.isReadonly,\"small\":\"\"},on:{\"click\":function($event){return _vm.leave(item)}}},'v-btn',attrs,false),on),[_c('v-icon',[_vm._v(\"mdi-tag-off-outline\")])],1)]}}],null,true)},[_c('span',[_vm._v(_vm._s(_vm.$t(\"sockets.leave\")))])]):_vm._e()]}}])}),_c('v-card-text',[_c('form',{on:{\"submit\":function($event){$event.preventDefault();return _vm.onSubmit($event)}}},[_c('v-combobox',{staticClass:\"select-room d-inline-block mr-3\",attrs:{\"search-input\":_vm.newRoom,\"label\":_vm.$t('sockets.join-a-room'),\"items\":_vm.availableRooms,\"item-value\":\"name\",\"item-text\":\"name\",\"disabled\":_vm.isReadonly,\"return-object\":false},on:{\"update:searchInput\":function($event){_vm.newRoom=$event},\"update:search-input\":function($event){_vm.newRoom=$event}}}),_c('v-tooltip',{attrs:{\"bottom\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nvar attrs = ref.attrs;\nreturn [_c('v-btn',_vm._g(_vm._b({attrs:{\"type\":\"submit\",\"small\":\"\",\"disabled\":_vm.isReadonly}},'v-btn',attrs,false),on),[_c('v-icon',[_vm._v(\"mdi-tag-plus-outline\")])],1)]}}])},[_c('span',[_vm._v(_vm._s(_vm.$t(\"sockets.join\")))])])],1)])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SocketRooms.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SocketRooms.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SocketRooms.vue?vue&type=template&id=5631eb89&scoped=true&\"\nimport script from \"./SocketRooms.vue?vue&type=script&lang=js&\"\nexport * from \"./SocketRooms.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SocketRooms.vue?vue&type=style&index=0&id=5631eb89&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"5631eb89\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardText } from 'vuetify/lib/components/VCard';\nimport { VCardTitle } from 'vuetify/lib/components/VCard';\nimport { VCombobox } from 'vuetify/lib/components/VCombobox';\nimport { VDataTable } from 'vuetify/lib/components/VDataTable';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VTooltip } from 'vuetify/lib/components/VTooltip';\ninstallComponents(component, {VBtn,VCard,VCardText,VCardTitle,VCombobox,VDataTable,VIcon,VTooltip})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-card',{staticClass:\"fill-height\"},[_c('v-card-title',[_vm._v(_vm._s(_vm.$t(\"details\")))]),_c('v-card-text',[_c('h4',[_vm._v(_vm._s(_vm.$t(\"sockets.client\")))])]),_c('v-simple-table',{attrs:{\"dense\":\"\"}},[[_c('tbody',[_c('tr',[_c('td',{staticClass:\"key-column\"},[_vm._v(_vm._s(_vm.$t(\"id\")))]),_c('td',[(_vm.client.connected)?_c('router-link',{staticClass:\"link\",attrs:{\"to\":_vm.toClient}},[_vm._v(_vm._s(_vm.client.id))]):_c('span',[_vm._v(_vm._s(_vm.client.id))])],1),_c('td')]),_c('tr',[_c('td',{staticClass:\"key-column\"},[_vm._v(_vm._s(_vm.$t(\"status\")))]),_c('td',[_c('ConnectionStatus',{attrs:{\"connected\":_vm.client.connected}})],1),_c('td',{attrs:{\"align\":\"right\"}},[(_vm.isSocketDisconnectSupported && _vm.client.connected)?_c('v-tooltip',{attrs:{\"bottom\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nvar attrs = ref.attrs;\nreturn [_c('v-btn',_vm._g(_vm._b({attrs:{\"disabled\":_vm.isReadonly,\"small\":\"\"},on:{\"click\":function($event){return _vm.disconnectClient()}}},'v-btn',attrs,false),on),[_c('v-icon',[_vm._v(\"mdi-logout\")])],1)]}}],null,false,1004975867)},[_c('span',[_vm._v(_vm._s(_vm.$t(\"clients.disconnect\")))])]):_vm._e()],1)]),_c('tr',[_c('td',{staticClass:\"key-column\"},[_vm._v(_vm._s(_vm.$t(\"sockets.transport\")))]),_c('td',[_c('Transport',{attrs:{\"transport\":_vm.socket.transport}})],1),_c('td')]),_c('tr',[_c('td',{staticClass:\"key-column\"},[_vm._v(_vm._s(_vm.$t(\"sockets.address\")))]),_c('td',[_vm._v(_vm._s(_vm.socket.handshake.address))]),_c('td')])])]],2),_c('v-card-text',[_c('h4',[_vm._v(_vm._s(_vm.$t(\"sockets.socket\")))])]),_c('v-simple-table',{attrs:{\"dense\":\"\"},scopedSlots:_vm._u([{key:\"default\",fn:function(){return [_c('tbody',[_c('tr',[_c('td',{staticClass:\"key-column\"},[_vm._v(_vm._s(_vm.$t(\"namespace\")))]),_c('td',[_c('code',[_vm._v(_vm._s(_vm.socket.nsp))])]),_c('td')]),_c('tr',[_c('td',{staticClass:\"key-column\"},[_vm._v(_vm._s(_vm.$t(\"id\")))]),_c('td',[_vm._v(_vm._s(_vm.socket.id))]),_c('td')]),_c('tr',[_c('td',{staticClass:\"key-column\"},[_vm._v(_vm._s(_vm.$t(\"data\")))]),_c('td',[_c('pre',[_c('code',[_vm._v(_vm._s(JSON.stringify(_vm.socket.data, null, 2)))])])]),_c('td')]),_c('tr',[_c('td',{staticClass:\"key-column\"},[_vm._v(_vm._s(_vm.$t(\"status\")))]),_c('td',[_c('ConnectionStatus',{attrs:{\"connected\":_vm.socket.connected}})],1),_c('td',{attrs:{\"align\":\"right\"}},[(_vm.isSocketDisconnectSupported && _vm.socket.connected)?_c('v-tooltip',{attrs:{\"bottom\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nvar attrs = ref.attrs;\nreturn [_c('v-btn',_vm._g(_vm._b({staticClass:\"ml-3\",attrs:{\"disabled\":_vm.isReadonly,\"small\":\"\"},on:{\"click\":function($event){return _vm.disconnectSocket()}}},'v-btn',attrs,false),on),[_c('v-icon',[_vm._v(\"mdi-logout\")])],1)]}}],null,false,2351110648)},[_c('span',[_vm._v(_vm._s(_vm.$t(\"sockets.disconnect\")))])]):_vm._e()],1)]),_c('tr',[_c('td',{staticClass:\"key-column\"},[_vm._v(_vm._s(_vm.$t(\"sockets.creation-date\")))]),_c('td',[_vm._v(_vm._s(_vm.creationDate))]),_c('td')])])]},proxy:true}])})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SocketDetails.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SocketDetails.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SocketDetails.vue?vue&type=template&id=3c0dcfcd&scoped=true&\"\nimport script from \"./SocketDetails.vue?vue&type=script&lang=js&\"\nexport * from \"./SocketDetails.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SocketDetails.vue?vue&type=style&index=0&id=3c0dcfcd&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"3c0dcfcd\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardText } from 'vuetify/lib/components/VCard';\nimport { VCardTitle } from 'vuetify/lib/components/VCard';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VSimpleTable } from 'vuetify/lib/components/VDataTable';\nimport { VTooltip } from 'vuetify/lib/components/VTooltip';\ninstallComponents(component, {VBtn,VCard,VCardText,VCardTitle,VIcon,VSimpleTable,VTooltip})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-card',{staticClass:\"fill-height\"},[_c('v-card-title',[_vm._v(_vm._s(_vm.$t(\"sockets.initial-request\")))]),_c('v-card-text',[_c('h4',[_vm._v(_vm._s(_vm.$t(\"sockets.headers\")))])]),_c('KeyValueTable',{attrs:{\"object\":_vm.socket.handshake.headers}}),_c('v-card-text',[_c('h4',[_vm._v(_vm._s(_vm.$t(\"sockets.query-params\")))])]),_c('KeyValueTable',{attrs:{\"object\":_vm.socket.handshake.query}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-simple-table',{attrs:{\"dense\":\"\"},scopedSlots:_vm._u([{key:\"default\",fn:function(){return [_c('thead',[_c('tr',[_c('th',[_vm._v(_vm._s(_vm.$t(\"name\")))]),_c('th',[_vm._v(_vm._s(_vm.$t(\"value\")))])])]),_c('tbody',_vm._l((_vm.items),function(ref){\nvar key = ref.key;\nvar value = ref.value;\nreturn _c('tr',{key:key},[_c('td',{staticClass:\"key-column\"},[_vm._v(_vm._s(key))]),_c('td',[_vm._v(_vm._s(value))])])}),0)]},proxy:true}])})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./KeyValueTable.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./KeyValueTable.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./KeyValueTable.vue?vue&type=template&id=18284f59&scoped=true&\"\nimport script from \"./KeyValueTable.vue?vue&type=script&lang=js&\"\nexport * from \"./KeyValueTable.vue?vue&type=script&lang=js&\"\nimport style0 from \"./KeyValueTable.vue?vue&type=style&index=0&id=18284f59&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"18284f59\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VSimpleTable } from 'vuetify/lib/components/VDataTable';\ninstallComponents(component, {VSimpleTable})\n","\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./InitialRequest.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./InitialRequest.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./InitialRequest.vue?vue&type=template&id=02abed88&\"\nimport script from \"./InitialRequest.vue?vue&type=script&lang=js&\"\nexport * from \"./InitialRequest.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardText } from 'vuetify/lib/components/VCard';\nimport { VCardTitle } from 'vuetify/lib/components/VCard';\ninstallComponents(component, {VCard,VCardText,VCardTitle})\n","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Socket.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Socket.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Socket.vue?vue&type=template&id=14172ed0&scoped=true&\"\nimport script from \"./Socket.vue?vue&type=script&lang=js&\"\nexport * from \"./Socket.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"14172ed0\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBreadcrumbs } from 'vuetify/lib/components/VBreadcrumbs';\nimport { VCol } from 'vuetify/lib/components/VGrid';\nimport { VContainer } from 'vuetify/lib/components/VGrid';\nimport { VRow } from 'vuetify/lib/components/VGrid';\ninstallComponents(component, {VBreadcrumbs,VCol,VContainer,VRow})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('v-breadcrumbs',{attrs:{\"items\":_vm.breadcrumbItems}}),_c('v-card',[_c('v-card-text',{staticClass:\"d-flex\"},[_c('NamespaceSelector'),_c('v-switch',{staticClass:\"ml-3\",attrs:{\"label\":_vm.$t('rooms.show-private'),\"inset\":\"\",\"dense\":\"\"},on:{\"change\":_vm.onPrivateRoomsUpdate},model:{value:(_vm.showPrivateRooms),callback:function ($$v) {_vm.showPrivateRooms=$$v},expression:\"showPrivateRooms\"}})],1),_c('v-data-table',{staticClass:\"row-pointer\",attrs:{\"headers\":_vm.headers,\"items\":_vm.filteredRooms,\"footer-props\":_vm.footerProps},on:{\"click:row\":_vm.displayDetails},scopedSlots:_vm._u([{key:\"item.sockets\",fn:function(ref){\nvar item = ref.item;\nreturn [_vm._v(\" \"+_vm._s(item.sockets.length)+\" \")]}},{key:\"item.isPrivate\",fn:function(ref){\nvar value = ref.value;\nreturn [_c('RoomType',{attrs:{\"is-private\":value}})]}},{key:\"item.actions\",fn:function(ref){\nvar item = ref.item;\nreturn [(_vm.isMultiLeaveSupported && !item.isPrivate)?_c('v-tooltip',{attrs:{\"bottom\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nvar attrs = ref.attrs;\nreturn [_c('v-btn',_vm._g(_vm._b({staticClass:\"ml-3\",attrs:{\"disabled\":_vm.isReadonly,\"small\":\"\"},on:{\"click\":function($event){return _vm.clear(item)}}},'v-btn',attrs,false),on),[_c('v-icon',[_vm._v(\"mdi-tag-off-outline\")])],1)]}}],null,true)},[_c('span',[_vm._v(_vm._s(_vm.$t(\"rooms.clear\")))])]):_vm._e(),(_vm.isMultiDisconnectSupported)?_c('v-tooltip',{attrs:{\"bottom\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nvar attrs = ref.attrs;\nreturn [_c('v-btn',_vm._g(_vm._b({staticClass:\"ml-3\",attrs:{\"disabled\":_vm.isReadonly,\"small\":\"\"},on:{\"click\":function($event){return _vm.disconnect(item)}}},'v-btn',attrs,false),on),[_c('v-icon',[_vm._v(\"mdi-logout\")])],1)]}}],null,true)},[_c('span',[_vm._v(_vm._s(_vm.$t(\"rooms.disconnect\")))])]):_vm._e()]}}])})],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('Status',{attrs:{\"value\":!_vm.isPrivate,\"ok-label\":_vm.$t('rooms.public'),\"ko-label\":_vm.$t('rooms.private')}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RoomType.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RoomType.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./RoomType.vue?vue&type=template&id=65e67f84&\"\nimport script from \"./RoomType.vue?vue&type=script&lang=js&\"\nexport * from \"./RoomType.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Rooms.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Rooms.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Rooms.vue?vue&type=template&id=29992f63&scoped=true&\"\nimport script from \"./Rooms.vue?vue&type=script&lang=js&\"\nexport * from \"./Rooms.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Rooms.vue?vue&type=style&index=0&id=29992f63&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"29992f63\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBreadcrumbs } from 'vuetify/lib/components/VBreadcrumbs';\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardText } from 'vuetify/lib/components/VCard';\nimport { VDataTable } from 'vuetify/lib/components/VDataTable';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VSwitch } from 'vuetify/lib/components/VSwitch';\nimport { VTooltip } from 'vuetify/lib/components/VTooltip';\ninstallComponents(component, {VBreadcrumbs,VBtn,VCard,VCardText,VDataTable,VIcon,VSwitch,VTooltip})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('v-breadcrumbs',{attrs:{\"items\":_vm.breadcrumbItems}}),_c('v-card',[_c('v-data-table',{staticClass:\"row-pointer\",attrs:{\"headers\":_vm.headers,\"items\":_vm.clients,\"footer-props\":_vm.footerProps},on:{\"click:row\":_vm.displayDetails},scopedSlots:_vm._u([{key:\"item.address\",fn:function(ref){\nvar item = ref.item;\nreturn [(item.sockets.length)?_c('span',[_vm._v(_vm._s(item.sockets[0].handshake.address))]):_vm._e()]}},{key:\"item.transport\",fn:function(ref){\nvar item = ref.item;\nreturn [(item.sockets.length)?_c('Transport',{attrs:{\"transport\":item.sockets[0].transport}}):_vm._e()]}},{key:\"item.sockets\",fn:function(ref){\nvar item = ref.item;\nreturn [_vm._v(\" \"+_vm._s(item.sockets.length)+\" \")]}},{key:\"item.actions\",fn:function(ref){\nvar item = ref.item;\nreturn [(_vm.isSocketDisconnectSupported)?_c('v-tooltip',{attrs:{\"bottom\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nvar attrs = ref.attrs;\nreturn [_c('v-btn',_vm._g(_vm._b({staticClass:\"ml-3\",attrs:{\"disabled\":_vm.isReadonly,\"small\":\"\"},on:{\"click\":function($event){return _vm.disconnect(item)}}},'v-btn',attrs,false),on),[_c('v-icon',[_vm._v(\"mdi-logout\")])],1)]}}],null,true)},[_c('span',[_vm._v(_vm._s(_vm.$t(\"clients.disconnect\")))])]):_vm._e()]}}])})],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Clients.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Clients.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Clients.vue?vue&type=template&id=57b53591&scoped=true&\"\nimport script from \"./Clients.vue?vue&type=script&lang=js&\"\nexport * from \"./Clients.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Clients.vue?vue&type=style&index=0&id=57b53591&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"57b53591\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBreadcrumbs } from 'vuetify/lib/components/VBreadcrumbs';\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VDataTable } from 'vuetify/lib/components/VDataTable';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VTooltip } from 'vuetify/lib/components/VTooltip';\ninstallComponents(component, {VBreadcrumbs,VBtn,VCard,VDataTable,VIcon,VTooltip})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('v-breadcrumbs',{attrs:{\"items\":_vm.breadcrumbItems}}),(_vm.client)?_c('v-container',{attrs:{\"fluid\":\"\"}},[_c('v-row',[_c('v-col',{attrs:{\"sm\":\"12\",\"md\":\"6\",\"lg\":\"4\"}},[_c('ClientDetails',{attrs:{\"client\":_vm.client,\"socket\":_vm.socket}})],1),_c('v-col',{attrs:{\"sm\":\"12\",\"md\":\"6\",\"lg\":\"4\"}},[(_vm.socket)?_c('InitialRequest',{attrs:{\"socket\":_vm.socket}}):_vm._e()],1),_c('v-col',{attrs:{\"sm\":\"12\",\"md\":\"6\",\"lg\":\"4\"}},[_c('ClientSockets',{attrs:{\"sockets\":_vm.client.sockets}})],1)],1)],1):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-card',{staticClass:\"fill-height\"},[_c('v-card-title',[_vm._v(_vm._s(_vm.$t(\"details\")))]),_c('v-simple-table',{attrs:{\"dense\":\"\"}},[[_c('tbody',[_c('tr',[_c('td',{staticClass:\"key-column\"},[_vm._v(_vm._s(_vm.$t(\"id\")))]),_c('td',[_vm._v(\" \"+_vm._s(_vm.client.id)+\" \")]),_c('td')]),_c('tr',[_c('td',{staticClass:\"key-column\"},[_vm._v(_vm._s(_vm.$t(\"status\")))]),_c('td',[_c('ConnectionStatus',{attrs:{\"connected\":_vm.client.connected}})],1),_c('td',{attrs:{\"align\":\"right\"}},[(_vm.isSocketDisconnectSupported && _vm.client.connected)?_c('v-tooltip',{attrs:{\"bottom\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nvar attrs = ref.attrs;\nreturn [_c('v-btn',_vm._g(_vm._b({attrs:{\"disabled\":_vm.isReadonly,\"small\":\"\"},on:{\"click\":function($event){return _vm.disconnectClient()}}},'v-btn',attrs,false),on),[_c('v-icon',[_vm._v(\"mdi-logout\")])],1)]}}],null,false,1004975867)},[_c('span',[_vm._v(_vm._s(_vm.$t(\"clients.disconnect\")))])]):_vm._e()],1)]),_c('tr',[_c('td',{staticClass:\"key-column\"},[_vm._v(_vm._s(_vm.$t(\"sockets.transport\")))]),_c('td',[_c('Transport',{attrs:{\"transport\":_vm.socket.transport}})],1),_c('td')]),_c('tr',[_c('td',{staticClass:\"key-column\"},[_vm._v(_vm._s(_vm.$t(\"sockets.address\")))]),_c('td',[_vm._v(_vm._s(_vm.socket.handshake.address))]),_c('td')])])]],2)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ClientDetails.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ClientDetails.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ClientDetails.vue?vue&type=template&id=8d2424e4&scoped=true&\"\nimport script from \"./ClientDetails.vue?vue&type=script&lang=js&\"\nexport * from \"./ClientDetails.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ClientDetails.vue?vue&type=style&index=0&id=8d2424e4&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"8d2424e4\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardTitle } from 'vuetify/lib/components/VCard';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VSimpleTable } from 'vuetify/lib/components/VDataTable';\nimport { VTooltip } from 'vuetify/lib/components/VTooltip';\ninstallComponents(component, {VBtn,VCard,VCardTitle,VIcon,VSimpleTable,VTooltip})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-card',[_c('v-card-title',[_vm._v(_vm._s(_vm.$t(\"sockets.title\")))]),_c('v-data-table',{staticClass:\"row-pointer\",attrs:{\"headers\":_vm.headers,\"items\":_vm.sockets,\"dense\":\"\"},on:{\"click:row\":_vm.displayDetails},scopedSlots:_vm._u([{key:\"item.nsp\",fn:function(ref){\nvar value = ref.value;\nreturn [_c('code',[_vm._v(_vm._s(value))])]}},{key:\"item.actions\",fn:function(ref){\nvar item = ref.item;\nreturn [(_vm.isSocketDisconnectSupported)?_c('v-tooltip',{attrs:{\"bottom\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nvar attrs = ref.attrs;\nreturn [_c('v-btn',_vm._g(_vm._b({staticClass:\"ml-3\",attrs:{\"disabled\":_vm.isReadonly,\"small\":\"\"},on:{\"click\":function($event){return _vm.disconnect(item)}}},'v-btn',attrs,false),on),[_c('v-icon',[_vm._v(\"mdi-logout\")])],1)]}}],null,true)},[_c('span',[_vm._v(_vm._s(_vm.$t(\"sockets.disconnect\")))])]):_vm._e()]}}])})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ClientSockets.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ClientSockets.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ClientSockets.vue?vue&type=template&id=38772079&scoped=true&\"\nimport script from \"./ClientSockets.vue?vue&type=script&lang=js&\"\nexport * from \"./ClientSockets.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ClientSockets.vue?vue&type=style&index=0&id=38772079&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"38772079\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardTitle } from 'vuetify/lib/components/VCard';\nimport { VDataTable } from 'vuetify/lib/components/VDataTable';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VTooltip } from 'vuetify/lib/components/VTooltip';\ninstallComponents(component, {VBtn,VCard,VCardTitle,VDataTable,VIcon,VTooltip})\n","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Client.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Client.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Client.vue?vue&type=template&id=3d554d12&scoped=true&\"\nimport script from \"./Client.vue?vue&type=script&lang=js&\"\nexport * from \"./Client.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"3d554d12\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBreadcrumbs } from 'vuetify/lib/components/VBreadcrumbs';\nimport { VCol } from 'vuetify/lib/components/VGrid';\nimport { VContainer } from 'vuetify/lib/components/VGrid';\nimport { VRow } from 'vuetify/lib/components/VGrid';\ninstallComponents(component, {VBreadcrumbs,VCol,VContainer,VRow})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('v-breadcrumbs',{attrs:{\"items\":_vm.breadcrumbItems}}),_c('v-card',[_c('v-data-table',{attrs:{\"headers\":_vm.headers,\"items\":_vm.servers,\"footer-props\":_vm.footerProps},scopedSlots:_vm._u([{key:\"item.uptime\",fn:function(ref){\nvar value = ref.value;\nreturn [_vm._v(\" \"+_vm._s(_vm.formatDuration(value))+\" \")]}},{key:\"item.lastPing\",fn:function(ref){\nvar value = ref.value;\nreturn [_vm._v(\" \"+_vm._s(_vm.delaySinceLastPing(value))+\" \")]}},{key:\"item.healthy\",fn:function(ref){\nvar value = ref.value;\nreturn [_c('ServerStatus',{attrs:{\"healthy\":value}})]}},{key:\"item.actions\",fn:function(ref){\nvar item = ref.item;\nreturn [(!item.healthy)?_c('v-btn',{attrs:{\"small\":\"\"},on:{\"click\":function($event){return _vm.removeServer(item)}}},[_c('v-icon',[_vm._v(\"mdi-delete-outline\")])],1):_vm._e()]}}])})],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Servers.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Servers.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Servers.vue?vue&type=template&id=3241ef20&\"\nimport script from \"./Servers.vue?vue&type=script&lang=js&\"\nexport * from \"./Servers.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBreadcrumbs } from 'vuetify/lib/components/VBreadcrumbs';\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VDataTable } from 'vuetify/lib/components/VDataTable';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\ninstallComponents(component, {VBreadcrumbs,VBtn,VCard,VDataTable,VIcon})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('v-breadcrumbs',{attrs:{\"items\":_vm.breadcrumbItems}}),(_vm.room)?_c('v-container',{attrs:{\"fluid\":\"\"}},[_c('v-row',[_c('v-col',{attrs:{\"sm\":\"12\",\"md\":\"4\"}},[_c('RoomDetails',{attrs:{\"room\":_vm.room,\"nsp\":_vm.$route.params.nsp}})],1),_c('v-col',{attrs:{\"sm\":\"12\",\"md\":\"8\"}},[_c('RoomSockets',{attrs:{\"room\":_vm.room}})],1)],1)],1):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.room)?_c('v-card',[_c('v-card-title',[_vm._v(_vm._s(_vm.$t(\"sockets.title\")))]),_c('v-data-table',{staticClass:\"row-pointer\",attrs:{\"headers\":_vm.headers,\"items\":_vm.room.sockets,\"footer-props\":_vm.footerProps},on:{\"click:row\":_vm.displayDetails},scopedSlots:_vm._u([{key:\"item.transport\",fn:function(ref){\nvar value = ref.value;\nreturn [_c('Transport',{attrs:{\"transport\":value}})]}},{key:\"item.actions\",fn:function(ref){\nvar item = ref.item;\nreturn [(_vm.isSocketLeaveSupported && !_vm.room.isPrivate)?_c('v-tooltip',{attrs:{\"bottom\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nvar attrs = ref.attrs;\nreturn [_c('v-btn',_vm._g(_vm._b({staticClass:\"ml-3\",attrs:{\"disabled\":_vm.isReadonly,\"small\":\"\"},on:{\"click\":function($event){return _vm.leave(item)}}},'v-btn',attrs,false),on),[_c('v-icon',[_vm._v(\"mdi-tag-off-outline\")])],1)]}}],null,true)},[_c('span',[_vm._v(_vm._s(_vm.$t(\"rooms.leave\")))])]):_vm._e(),(_vm.isSocketDisconnectSupported)?_c('v-tooltip',{attrs:{\"bottom\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nvar attrs = ref.attrs;\nreturn [_c('v-btn',_vm._g(_vm._b({staticClass:\"ml-3\",attrs:{\"disabled\":_vm.isReadonly,\"small\":\"\"},on:{\"click\":function($event){return _vm.disconnect(item)}}},'v-btn',attrs,false),on),[_c('v-icon',[_vm._v(\"mdi-logout\")])],1)]}}],null,true)},[_c('span',[_vm._v(_vm._s(_vm.$t(\"sockets.disconnect\")))])]):_vm._e()]}}],null,false,1763569022)})],1):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RoomSockets.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RoomSockets.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./RoomSockets.vue?vue&type=template&id=c9425064&scoped=true&\"\nimport script from \"./RoomSockets.vue?vue&type=script&lang=js&\"\nexport * from \"./RoomSockets.vue?vue&type=script&lang=js&\"\nimport style0 from \"./RoomSockets.vue?vue&type=style&index=0&id=c9425064&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"c9425064\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardTitle } from 'vuetify/lib/components/VCard';\nimport { VDataTable } from 'vuetify/lib/components/VDataTable';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VTooltip } from 'vuetify/lib/components/VTooltip';\ninstallComponents(component, {VBtn,VCard,VCardTitle,VDataTable,VIcon,VTooltip})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-card',{staticClass:\"fill-height\"},[_c('v-card-title',[_vm._v(_vm._s(_vm.$t(\"details\")))]),_c('v-simple-table',{attrs:{\"dense\":\"\"}},[[_c('tbody',[_c('tr',[_c('td',{staticClass:\"key-column\"},[_vm._v(_vm._s(_vm.$t(\"namespace\")))]),_c('td',[_c('code',[_vm._v(_vm._s(_vm.nsp))])]),_c('td')]),_c('tr',[_c('td',{staticClass:\"key-column\"},[_vm._v(_vm._s(_vm.$t(\"id\")))]),_c('td',[_vm._v(\" \"+_vm._s(_vm.room.name)+\" \")]),_c('td')]),_c('tr',[_c('td',{staticClass:\"key-column\"},[_vm._v(_vm._s(_vm.$t(\"status\")))]),_c('td',[_c('RoomStatus',{attrs:{\"active\":_vm.room.active}})],1),_c('td',{attrs:{\"align\":\"right\"}},[(_vm.isMultiLeaveSupported && !_vm.room.isPrivate)?_c('v-tooltip',{attrs:{\"bottom\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nvar attrs = ref.attrs;\nreturn [_c('v-btn',_vm._g(_vm._b({staticClass:\"ml-3\",attrs:{\"disabled\":_vm.isReadonly,\"small\":\"\"},on:{\"click\":function($event){return _vm.clear()}}},'v-btn',attrs,false),on),[_c('v-icon',[_vm._v(\"mdi-tag-off-outline\")])],1)]}}],null,false,464351539)},[_c('span',[_vm._v(_vm._s(_vm.$t(\"rooms.clear\")))])]):_vm._e()],1)]),_c('tr',[_c('td',{staticClass:\"key-column\"},[_vm._v(_vm._s(_vm.$t(\"type\")))]),_c('td',[_c('RoomType',{attrs:{\"is-private\":_vm.room.isPrivate}})],1),_c('td')])])]],2)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('Status',{attrs:{\"value\":_vm.active,\"ok-label\":_vm.$t('rooms.active'),\"ko-label\":_vm.$t('rooms.deleted')}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RoomStatus.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RoomStatus.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./RoomStatus.vue?vue&type=template&id=65459954&\"\nimport script from \"./RoomStatus.vue?vue&type=script&lang=js&\"\nexport * from \"./RoomStatus.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\n\r\n\r\n\r\n\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RoomDetails.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RoomDetails.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./RoomDetails.vue?vue&type=template&id=7b3793ea&scoped=true&\"\nimport script from \"./RoomDetails.vue?vue&type=script&lang=js&\"\nexport * from \"./RoomDetails.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"7b3793ea\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardTitle } from 'vuetify/lib/components/VCard';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VSimpleTable } from 'vuetify/lib/components/VDataTable';\nimport { VTooltip } from 'vuetify/lib/components/VTooltip';\ninstallComponents(component, {VBtn,VCard,VCardTitle,VIcon,VSimpleTable,VTooltip})\n","\r\n\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Room.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Room.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Room.vue?vue&type=template&id=07f5be08&\"\nimport script from \"./Room.vue?vue&type=script&lang=js&\"\nexport * from \"./Room.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBreadcrumbs } from 'vuetify/lib/components/VBreadcrumbs';\nimport { VCol } from 'vuetify/lib/components/VGrid';\nimport { VContainer } from 'vuetify/lib/components/VGrid';\nimport { VRow } from 'vuetify/lib/components/VGrid';\ninstallComponents(component, {VBreadcrumbs,VCol,VContainer,VRow})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('v-breadcrumbs',{attrs:{\"items\":_vm.breadcrumbItems}}),_c('v-card',[_c('v-card-text',[_c('NamespaceSelector')],1),_c('v-data-table',{attrs:{\"headers\":_vm.headers,\"items\":_vm.events,\"footer-props\":_vm.footerProps,\"item-key\":\"eventId\",\"sort-by\":['timestamp', 'eventId'],\"sort-desc\":[true, true],\"single-expand\":\"\",\"show-expand\":\"\"},scopedSlots:_vm._u([{key:\"item.type\",fn:function(ref){\nvar value = ref.value;\nreturn [_c('EventType',{attrs:{\"type\":value}})]}},{key:\"item.id\",fn:function(ref){\nvar value = ref.value;\nreturn [_c('router-link',{staticClass:\"link\",attrs:{\"to\":_vm.socketDetailsRoute(value)}},[_vm._v(_vm._s(value))])]}},{key:\"item.args\",fn:function(ref){\nvar item = ref.item;\nvar value = ref.value;\nreturn [(_vm.isExpandable(item))?_c('span',[_vm._v(\" \"+_vm._s(_vm.$t(\"events.eventName\"))+_vm._s(_vm.$t(\"separator\"))),_c('code',[_vm._v(_vm._s(item.eventName))])]):(item.type === 'disconnection')?_c('span',[_vm._v(\" \"+_vm._s(_vm.$t(\"events.reason\"))+_vm._s(_vm.$t(\"separator\"))),_c('code',[_vm._v(_vm._s(value))])]):(item.type === 'room_joined' || item.type === 'room_left')?_c('span',[_vm._v(\" \"+_vm._s(_vm.$t(\"events.room\"))+_vm._s(_vm.$t(\"separator\"))),_c('code',[_vm._v(_vm._s(value))])]):_c('span',[_vm._v(\" \"+_vm._s(value)+\" \")])]}},{key:\"item.data-table-expand\",fn:function(ref){\nvar item = ref.item;\nvar isExpanded = ref.isExpanded;\nvar expand = ref.expand;\nreturn [(_vm.isExpandable(item) && !isExpanded)?_c('v-btn',{attrs:{\"icon\":\"\"},on:{\"click\":function($event){return expand(true)}}},[_c('v-icon',[_vm._v(\"mdi-chevron-down\")])],1):_vm._e(),(_vm.isExpandable(item) && isExpanded)?_c('v-btn',{attrs:{\"icon\":\"\"},on:{\"click\":function($event){return expand(false)}}},[_c('v-icon',[_vm._v(\"mdi-chevron-up\")])],1):_vm._e()]}},{key:\"expanded-item\",fn:function(ref){\nvar headers = ref.headers;\nvar item = ref.item;\nreturn [_c('td',{attrs:{\"colspan\":headers.length}},[_c('div',{staticClass:\"ma-3\"},[_vm._v(\" \"+_vm._s(_vm.$t(\"events.eventArgs\"))+_vm._s(_vm.$t(\"separator\"))+\" \"),_c('pre',[_c('code',[_vm._v(_vm._s(item.args))])])])])]}}])})],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-chip',{attrs:{\"color\":_vm.color,\"outlined\":\"\"}},[_vm._v(\" \"+_vm._s(_vm.$t(\"events.type.\" + _vm.type))+\" \")])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\n\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EventType.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EventType.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./EventType.vue?vue&type=template&id=f9a66084&\"\nimport script from \"./EventType.vue?vue&type=script&lang=js&\"\nexport * from \"./EventType.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VChip } from 'vuetify/lib/components/VChip';\ninstallComponents(component, {VChip})\n","\r\n\r\n\r\n\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Events.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Events.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Events.vue?vue&type=template&id=2c2337d4&scoped=true&\"\nimport script from \"./Events.vue?vue&type=script&lang=js&\"\nexport * from \"./Events.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Events.vue?vue&type=style&index=0&id=2c2337d4&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"2c2337d4\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBreadcrumbs } from 'vuetify/lib/components/VBreadcrumbs';\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardText } from 'vuetify/lib/components/VCard';\nimport { VDataTable } from 'vuetify/lib/components/VDataTable';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\ninstallComponents(component, {VBreadcrumbs,VBtn,VCard,VCardText,VDataTable,VIcon})\n","import Vue from \"vue\";\r\nimport VueRouter from \"vue-router\";\r\nimport Dashboard from \"../views/Dashboard\";\r\nimport Sockets from \"../views/Sockets\";\r\nimport Socket from \"../views/Socket\";\r\nimport Rooms from \"../views/Rooms\";\r\nimport Clients from \"../views/Clients\";\r\nimport Client from \"../views/Client\";\r\nimport Servers from \"../views/Servers\";\r\nimport Room from \"../views/Room\";\r\nimport Events from \"@/views/Events\";\r\n\r\nVue.use(VueRouter);\r\n\r\nconst routes = [\r\n {\r\n path: \"/\",\r\n name: \"dashboard\",\r\n component: Dashboard,\r\n meta: {\r\n topLevel: true,\r\n index: 0,\r\n },\r\n },\r\n {\r\n path: \"/sockets/\",\r\n name: \"sockets\",\r\n component: Sockets,\r\n meta: {\r\n topLevel: true,\r\n index: 1,\r\n },\r\n },\r\n {\r\n path: \"/n/:nsp/sockets/:id\",\r\n name: \"socket\",\r\n component: Socket,\r\n meta: {\r\n topLevel: false,\r\n },\r\n },\r\n {\r\n path: \"/rooms/\",\r\n name: \"rooms\",\r\n component: Rooms,\r\n meta: {\r\n topLevel: true,\r\n index: 2,\r\n },\r\n },\r\n {\r\n path: \"/n/:nsp/rooms/:name\",\r\n name: \"room\",\r\n component: Room,\r\n meta: {\r\n topLevel: false,\r\n },\r\n },\r\n {\r\n path: \"/clients/\",\r\n name: \"clients\",\r\n component: Clients,\r\n meta: {\r\n topLevel: true,\r\n index: 3,\r\n },\r\n },\r\n {\r\n path: \"/clients/:id\",\r\n name: \"client\",\r\n component: Client,\r\n meta: {\r\n topLevel: false,\r\n },\r\n },\r\n {\r\n path: \"/events/\",\r\n name: \"events\",\r\n component: Events,\r\n meta: {\r\n topLevel: true,\r\n index: 4,\r\n },\r\n },\r\n {\r\n path: \"/servers/\",\r\n name: \"servers\",\r\n component: Servers,\r\n meta: {\r\n topLevel: true,\r\n index: 5,\r\n },\r\n },\r\n];\r\n\r\nconst router = new VueRouter({\r\n mode: \"hash\",\r\n base: process.env.BASE_URL,\r\n routes,\r\n});\r\n\r\nexport default router;\r\n","import Vue from \"vue\";\r\nimport VueI18n from \"vue-i18n\";\r\n\r\nVue.use(VueI18n);\r\n\r\nfunction loadLocaleMessages() {\r\n const locales = require.context(\r\n \"./locales\",\r\n true,\r\n /[A-Za-z0-9-_,\\s]+\\.json$/i\r\n );\r\n const messages = {};\r\n locales.keys().forEach((key) => {\r\n const matched = key.match(/([A-Za-z0-9-_]+)\\./i);\r\n if (matched && matched.length > 1) {\r\n const locale = matched[1];\r\n messages[locale] = locales(key);\r\n }\r\n });\r\n return messages;\r\n}\r\n\r\nexport default new VueI18n({\r\n locale: process.env.VUE_APP_I18N_LOCALE || \"en\",\r\n fallbackLocale: process.env.VUE_APP_I18N_FALLBACK_LOCALE || \"en\",\r\n messages: loadLocaleMessages(),\r\n});\r\n","import { isLocalStorageAvailable } from \"../../util\";\r\n\r\nexport default {\r\n namespaced: true,\r\n state: {\r\n darkTheme: false,\r\n readonly: false,\r\n lang: \"en\",\r\n supportedFeatures: [],\r\n showNavigationDrawer: false,\r\n },\r\n getters: {\r\n developmentMode(state) {\r\n return (\r\n state.supportedFeatures.includes(\"ALL_EVENTS\") ||\r\n !state.supportedFeatures.includes(\"AGGREGATED_EVENTS\")\r\n );\r\n },\r\n hasAggregatedValues: (state) => {\r\n return state.supportedFeatures.includes(\"AGGREGATED_EVENTS\");\r\n },\r\n },\r\n mutations: {\r\n init(state) {\r\n if (isLocalStorageAvailable) {\r\n state.darkTheme = localStorage.getItem(\"dark_theme\") === \"true\";\r\n state.readonly = localStorage.getItem(\"readonly\") === \"true\";\r\n state.lang = localStorage.getItem(\"lang\") || \"zh-CN\";\r\n }\r\n },\r\n selectTheme(state, darkTheme) {\r\n state.darkTheme = darkTheme;\r\n if (isLocalStorageAvailable) {\r\n localStorage.setItem(\"dark_theme\", darkTheme);\r\n }\r\n },\r\n selectLang(state, lang) {\r\n state.lang = lang;\r\n if (isLocalStorageAvailable) {\r\n localStorage.setItem(\"lang\", lang);\r\n }\r\n },\r\n toggleReadonly(state) {\r\n state.readonly = !state.readonly;\r\n if (isLocalStorageAvailable) {\r\n localStorage.setItem(\"readonly\", state.readonly);\r\n }\r\n },\r\n updateConfig(state, config) {\r\n state.supportedFeatures = config.supportedFeatures;\r\n },\r\n toggleNavigationDrawer(state) {\r\n state.showNavigationDrawer = !state.showNavigationDrawer;\r\n },\r\n },\r\n};\r\n","import { isLocalStorageAvailable } from \"../../util\";\r\n\r\nexport default {\r\n namespaced: true,\r\n state: {\r\n serverUrl: \"http://localhost:3001\",\r\n wsOnly: true,\r\n path: \"/socket\",\r\n namespace: \"/admin\",\r\n parser: \"default\",\r\n sessionId: \"\",\r\n connected: false,\r\n },\r\n mutations: {\r\n init(state) {\r\n if (isLocalStorageAvailable) {\r\n state.serverUrl =\r\n localStorage.getItem(\"server_url\") || \"http://localhost:3001\";\r\n if (state.serverUrl.endsWith(\"/admin\")) {\r\n // for backward compatibility\r\n state.serverUrl = state.serverUrl.slice(0, -6);\r\n } else {\r\n state.namespace = localStorage.getItem(\"namespace\") || \"/admin\";\r\n }\r\n state.wsOnly = localStorage.getItem(\"ws_only\") != \"false\";\r\n state.sessionId = localStorage.getItem(\"session_id\");\r\n state.path = localStorage.getItem(\"path\") || \"/socket\";\r\n state.parser = localStorage.getItem(\"parser\") || \"default\";\r\n }\r\n },\r\n saveConfig(state, { serverUrl, wsOnly, path, namespace, parser }) {\r\n state.serverUrl = serverUrl;\r\n state.wsOnly = wsOnly;\r\n state.path = path;\r\n state.namespace = namespace;\r\n state.parser = parser;\r\n if (isLocalStorageAvailable) {\r\n localStorage.setItem(\"server_url\", serverUrl);\r\n localStorage.setItem(\"ws_only\", wsOnly);\r\n localStorage.setItem(\"path\", path);\r\n localStorage.setItem(\"namespace\", namespace);\r\n localStorage.setItem(\"parser\", parser);\r\n }\r\n },\r\n saveSessionId(state, sessionId) {\r\n state.sessionId = sessionId;\r\n if (isLocalStorageAvailable) {\r\n localStorage.setItem(\"session_id\", sessionId);\r\n }\r\n },\r\n connect(state) {\r\n state.connected = true;\r\n },\r\n disconnect(state) {\r\n state.connected = false;\r\n },\r\n },\r\n};\r\n","import { find, merge, remove as silentlyRemove } from \"lodash-es\";\r\nimport { pushUniq, remove } from \"@/util\";\r\n\r\nconst TEN_MINUTES = 10 * 60 * 1000;\r\n\r\nconst getOrCreateNamespace = (namespaces, name) => {\r\n let namespace = find(namespaces, { name });\r\n if (namespace) {\r\n return namespace;\r\n }\r\n namespace = {\r\n name,\r\n sockets: [],\r\n rooms: [],\r\n events: [],\r\n };\r\n namespaces.push(namespace);\r\n return namespace;\r\n};\r\n\r\nconst getOrCreateRoom = (namespace, name) => {\r\n let room = find(namespace.rooms, { name });\r\n if (room) {\r\n return room;\r\n }\r\n room = {\r\n name,\r\n active: true,\r\n sockets: [],\r\n };\r\n namespace.rooms.push(room);\r\n return room;\r\n};\r\n\r\nconst getOrCreateClient = (clients, id) => {\r\n let client = find(clients, { id });\r\n if (client) {\r\n return client;\r\n }\r\n client = {\r\n id,\r\n connected: true,\r\n sockets: [],\r\n };\r\n clients.push(client);\r\n return client;\r\n};\r\n\r\nconst addSocket = (state, socket) => {\r\n const namespace = getOrCreateNamespace(state.namespaces, socket.nsp);\r\n socket.connected = true;\r\n if (!find(namespace.sockets, { id: socket.id })) {\r\n namespace.sockets.push(socket);\r\n }\r\n\r\n socket.rooms.forEach((name) => {\r\n const room = getOrCreateRoom(namespace, name);\r\n room.isPrivate = name === socket.id;\r\n if (!find(room.sockets, { id: socket.id })) {\r\n room.sockets.push(socket);\r\n }\r\n });\r\n\r\n const client = getOrCreateClient(state.clients, socket.clientId);\r\n if (!find(client.sockets, { id: socket.id })) {\r\n client.sockets.push(socket);\r\n }\r\n};\r\n\r\nconst MAX_ARRAY_LENGTH = 1000;\r\nlet EVENT_COUNTER = 0;\r\n\r\nconst pushEvents = (array, event) => {\r\n event.eventId = ++EVENT_COUNTER; // unique id\r\n array.push(event);\r\n if (array.length > MAX_ARRAY_LENGTH) {\r\n array.shift();\r\n }\r\n};\r\n\r\n// group events by each 10 seconds\r\n// see: https://www.chartjs.org/docs/latest/general/performance.html#decimation\r\nfunction roundedTimestamp(timestamp) {\r\n return timestamp - (timestamp % 10_000);\r\n}\r\n\r\nexport default {\r\n namespaced: true,\r\n state: {\r\n namespaces: [],\r\n clients: [],\r\n selectedNamespace: null,\r\n aggregatedEvents: [],\r\n },\r\n getters: {\r\n findSocketById: (state) => (nsp, id) => {\r\n const namespace = find(state.namespaces, { name: nsp });\r\n if (namespace) {\r\n return find(namespace.sockets, { id });\r\n }\r\n },\r\n findClientById: (state) => (id) => {\r\n return find(state.clients, { id });\r\n },\r\n findRoomByName: (state) => (nsp, name) => {\r\n const namespace = find(state.namespaces, { name: nsp });\r\n if (namespace) {\r\n return find(namespace.rooms, { name });\r\n }\r\n },\r\n findRoomsByNamespace: (state) => (nsp) => {\r\n const namespace = find(state.namespaces, { name: nsp });\r\n return namespace ? namespace.rooms : [];\r\n },\r\n sockets: (state) => {\r\n return state.selectedNamespace ? state.selectedNamespace.sockets : [];\r\n },\r\n rooms: (state) => {\r\n return state.selectedNamespace ? state.selectedNamespace.rooms : [];\r\n },\r\n events: (state) => {\r\n return state.selectedNamespace ? state.selectedNamespace.events : [];\r\n },\r\n },\r\n mutations: {\r\n selectNamespace(state, namespace) {\r\n state.selectedNamespace = namespace;\r\n },\r\n onAllSockets(state, sockets) {\r\n state.namespaces.forEach((namespace) => {\r\n namespace.sockets.splice(0);\r\n namespace.rooms.splice(0);\r\n });\r\n state.clients.splice(0);\r\n sockets.forEach((socket) => addSocket(state, socket));\r\n if (!state.selectedNamespace) {\r\n state.selectedNamespace =\r\n find(state.namespaces, { name: \"/\" }) || state.namespaces[0];\r\n }\r\n },\r\n onSocketConnected(state, { timestamp, socket }) {\r\n addSocket(state, socket);\r\n const namespace = getOrCreateNamespace(state.namespaces, socket.nsp);\r\n pushEvents(namespace.events, {\r\n type: \"connection\",\r\n timestamp,\r\n id: socket.id,\r\n });\r\n },\r\n onSocketUpdated(state, socket) {\r\n const namespace = getOrCreateNamespace(state.namespaces, socket.nsp);\r\n const existingSocket = find(namespace.sockets, { id: socket.id });\r\n if (existingSocket) {\r\n merge(existingSocket, socket);\r\n }\r\n },\r\n onSocketDisconnected(state, { timestamp, nsp, id, reason }) {\r\n const namespace = getOrCreateNamespace(state.namespaces, nsp);\r\n const [socket] = remove(namespace.sockets, { id });\r\n if (socket) {\r\n socket.connected = false;\r\n\r\n const client = getOrCreateClient(state.clients, socket.clientId);\r\n remove(client.sockets, { id });\r\n if (client.sockets.length === 0) {\r\n client.connected = false;\r\n remove(state.clients, { id: socket.clientId });\r\n }\r\n }\r\n pushEvents(namespace.events, {\r\n type: \"disconnection\",\r\n timestamp,\r\n id,\r\n args: reason,\r\n });\r\n },\r\n onRoomJoined(state, { nsp, room, id, timestamp }) {\r\n const namespace = getOrCreateNamespace(state.namespaces, nsp);\r\n const socket = find(namespace.sockets, { id });\r\n if (socket) {\r\n pushUniq(socket.rooms, room);\r\n const _room = getOrCreateRoom(namespace, room);\r\n _room.sockets.push(socket);\r\n }\r\n pushEvents(namespace.events, {\r\n type: \"room_joined\",\r\n timestamp,\r\n id,\r\n args: room,\r\n });\r\n },\r\n onRoomLeft(state, { timestamp, nsp, room, id }) {\r\n const namespace = getOrCreateNamespace(state.namespaces, nsp);\r\n const socket = find(namespace.sockets, { id });\r\n if (socket) {\r\n remove(socket.rooms, room);\r\n }\r\n const _room = getOrCreateRoom(namespace, room);\r\n remove(_room.sockets, { id });\r\n if (_room.sockets.length === 0) {\r\n _room.active = false;\r\n remove(namespace.rooms, { name: room });\r\n }\r\n pushEvents(namespace.events, {\r\n type: \"room_left\",\r\n timestamp,\r\n id,\r\n args: room,\r\n });\r\n },\r\n onServerStats(state, serverStats) {\r\n if (!serverStats.aggregatedEvents) {\r\n return;\r\n }\r\n for (const aggregatedEvent of serverStats.aggregatedEvents) {\r\n const timestamp = roundedTimestamp(aggregatedEvent.timestamp);\r\n const elem = find(state.aggregatedEvents, {\r\n timestamp,\r\n type: aggregatedEvent.type,\r\n subType: aggregatedEvent.subType,\r\n });\r\n if (elem) {\r\n elem.count += aggregatedEvent.count;\r\n } else {\r\n state.aggregatedEvents.push({\r\n timestamp,\r\n type: aggregatedEvent.type,\r\n subType: aggregatedEvent.subType,\r\n count: aggregatedEvent.count,\r\n });\r\n }\r\n }\r\n silentlyRemove(state.aggregatedEvents, (elem) => {\r\n return elem.timestamp < Date.now() - TEN_MINUTES;\r\n });\r\n },\r\n onEventReceived(state, { timestamp, nsp, id, args }) {\r\n const namespace = getOrCreateNamespace(state.namespaces, nsp);\r\n const eventName = args.shift();\r\n pushEvents(namespace.events, {\r\n type: \"event_received\",\r\n timestamp,\r\n id,\r\n eventName,\r\n args,\r\n });\r\n },\r\n onEventSent(state, { timestamp, nsp, id, args }) {\r\n const namespace = getOrCreateNamespace(state.namespaces, nsp);\r\n const eventName = args.shift();\r\n pushEvents(namespace.events, {\r\n type: \"event_sent\",\r\n timestamp,\r\n id,\r\n eventName,\r\n args,\r\n });\r\n },\r\n },\r\n};\r\n","import { find, merge } from \"lodash-es\";\r\nimport { remove } from \"../../util\";\r\n\r\nconst HEALTHY_THRESHOLD = 10000;\r\n\r\nexport default {\r\n namespaced: true,\r\n state: {\r\n servers: [],\r\n },\r\n getters: {\r\n namespaces(state) {\r\n const namespaces = {};\r\n for (const server of state.servers) {\r\n if (server.namespaces) {\r\n for (const { name, socketsCount } of server.namespaces) {\r\n namespaces[name] = (namespaces[name] || 0) + socketsCount;\r\n }\r\n }\r\n }\r\n return Object.keys(namespaces).map((name) => {\r\n return {\r\n name,\r\n socketsCount: namespaces[name],\r\n };\r\n });\r\n },\r\n },\r\n mutations: {\r\n onServerStats(state, stats) {\r\n stats.lastPing = Date.now();\r\n const server = find(state.servers, { serverId: stats.serverId });\r\n if (server) {\r\n merge(server, stats);\r\n } else {\r\n stats.healthy = true;\r\n state.servers.push(stats);\r\n }\r\n },\r\n removeServer(state, serverId) {\r\n remove(state.servers, { serverId });\r\n },\r\n updateState(state) {\r\n state.servers.forEach((server) => {\r\n server.healthy = Date.now() - server.lastPing < HEALTHY_THRESHOLD;\r\n });\r\n },\r\n },\r\n};\r\n","import Vue from \"vue\";\r\nimport Vuex from \"vuex\";\r\nimport config from \"./modules/config\";\r\nimport connection from \"./modules/connection\";\r\nimport main from \"./modules/main\";\r\nimport servers from \"./modules/servers\";\r\n\r\nVue.use(Vuex);\r\n\r\nexport default new Vuex.Store({\r\n modules: {\r\n config,\r\n connection,\r\n main,\r\n servers,\r\n },\r\n});\r\n","import Vue from \"vue\";\r\nimport Vuetify from \"vuetify/lib/framework\";\r\n\r\nVue.use(Vuetify);\r\n\r\nexport default new Vuetify({});\r\n","import {\r\n Chart as ChartJS,\r\n DoughnutController,\r\n Tooltip,\r\n Legend,\r\n ArcElement,\r\n BarElement,\r\n TimeScale,\r\n LinearScale,\r\n} from \"chart.js\";\r\n\r\nChartJS.register(\r\n DoughnutController,\r\n Tooltip,\r\n Legend,\r\n ArcElement,\r\n BarElement,\r\n TimeScale,\r\n LinearScale\r\n);\r\n\r\nimport \"chartjs-adapter-date-fns\";\r\n","import Vue from \"vue\";\r\nimport App from \"./App.vue\";\r\nimport router from \"./router\";\r\nimport i18n from \"./i18n\";\r\nimport store from \"./store\";\r\nimport vuetify from \"./plugins/vuetify\";\r\nimport \"./plugins/chartjs\";\r\n\r\nVue.config.productionTip = false;\r\n\r\nstore.commit(\"config/init\");\r\nstore.commit(\"connection/init\");\r\n\r\ni18n.locale = store.state.config.lang;\r\n\r\nsetInterval(() => {\r\n store.commit(\"servers/updateState\");\r\n}, 1000);\r\n\r\nnew Vue({\r\n router,\r\n i18n,\r\n store,\r\n vuetify,\r\n render: (h) => h(App),\r\n}).$mount(\"#app\");\r\n","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ClientDetails.vue?vue&type=style&index=0&id=8d2424e4&scoped=true&lang=css&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RoomSockets.vue?vue&type=style&index=0&id=c9425064&scoped=true&lang=css&\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Events.vue?vue&type=style&index=0&id=2c2337d4&scoped=true&lang=css&\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./KeyValueTable.vue?vue&type=style&index=0&id=18284f59&scoped=true&lang=css&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ServersOverview.vue?vue&type=style&index=0&id=0ad5cc14&scoped=true&lang=css&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SocketDetails.vue?vue&type=style&index=0&id=3c0dcfcd&scoped=true&lang=css&\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NamespaceSelector.vue?vue&type=style&index=0&id=2c330798&scoped=true&lang=css&\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Clients.vue?vue&type=style&index=0&id=57b53591&scoped=true&lang=css&\""],"sourceRoot":""} \ No newline at end of file