@minecraft-docker/mcctl-console 2.1.0 → 2.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/standalone/package.json +1 -1
- package/.next/standalone/platform/services/mcctl-console/.next/BUILD_ID +1 -1
- package/.next/standalone/platform/services/mcctl-console/.next/app-build-manifest.json +78 -66
- package/.next/standalone/platform/services/mcctl-console/.next/app-path-routes-manifest.json +1 -1
- package/.next/standalone/platform/services/mcctl-console/.next/build-manifest.json +2 -2
- package/.next/standalone/platform/services/mcctl-console/.next/prerender-manifest.json +1 -1
- package/.next/standalone/platform/services/mcctl-console/.next/server/app/(main)/admin/users/page.js +1 -0
- package/.next/standalone/platform/services/mcctl-console/.next/server/app/(main)/admin/users/page.js.nft.json +1 -0
- package/.next/standalone/platform/services/mcctl-console/.next/server/app/(main)/admin/users/page_client-reference-manifest.js +1 -0
- package/.next/standalone/platform/services/mcctl-console/.next/server/app/(main)/audit-logs/page.js +1 -1
- package/.next/standalone/platform/services/mcctl-console/.next/server/app/(main)/audit-logs/page.js.nft.json +1 -1
- package/.next/standalone/platform/services/mcctl-console/.next/server/app/(main)/audit-logs/page_client-reference-manifest.js +1 -1
- package/.next/standalone/platform/services/mcctl-console/.next/server/app/(main)/backups/page.js +1 -1
- package/.next/standalone/platform/services/mcctl-console/.next/server/app/(main)/backups/page.js.nft.json +1 -1
- package/.next/standalone/platform/services/mcctl-console/.next/server/app/(main)/backups/page_client-reference-manifest.js +1 -1
- package/.next/standalone/platform/services/mcctl-console/.next/server/app/(main)/dashboard/page.js +1 -1
- package/.next/standalone/platform/services/mcctl-console/.next/server/app/(main)/dashboard/page.js.nft.json +1 -1
- package/.next/standalone/platform/services/mcctl-console/.next/server/app/(main)/dashboard/page_client-reference-manifest.js +1 -1
- package/.next/standalone/platform/services/mcctl-console/.next/server/app/(main)/players/page.js +1 -1
- package/.next/standalone/platform/services/mcctl-console/.next/server/app/(main)/players/page.js.nft.json +1 -1
- package/.next/standalone/platform/services/mcctl-console/.next/server/app/(main)/players/page_client-reference-manifest.js +1 -1
- package/.next/standalone/platform/services/mcctl-console/.next/server/app/(main)/routing/page.js +1 -51
- package/.next/standalone/platform/services/mcctl-console/.next/server/app/(main)/routing/page.js.nft.json +1 -1
- package/.next/standalone/platform/services/mcctl-console/.next/server/app/(main)/routing/page_client-reference-manifest.js +1 -1
- package/.next/standalone/platform/services/mcctl-console/.next/server/app/(main)/servers/[name]/console/page.js +1 -1
- package/.next/standalone/platform/services/mcctl-console/.next/server/app/(main)/servers/[name]/console/page.js.nft.json +1 -1
- package/.next/standalone/platform/services/mcctl-console/.next/server/app/(main)/servers/[name]/console/page_client-reference-manifest.js +1 -1
- package/.next/standalone/platform/services/mcctl-console/.next/server/app/(main)/servers/[name]/page.js +1 -1
- package/.next/standalone/platform/services/mcctl-console/.next/server/app/(main)/servers/[name]/page.js.nft.json +1 -1
- package/.next/standalone/platform/services/mcctl-console/.next/server/app/(main)/servers/[name]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/platform/services/mcctl-console/.next/server/app/(main)/servers/page.js +1 -1
- package/.next/standalone/platform/services/mcctl-console/.next/server/app/(main)/servers/page.js.nft.json +1 -1
- package/.next/standalone/platform/services/mcctl-console/.next/server/app/(main)/servers/page_client-reference-manifest.js +1 -1
- package/.next/standalone/platform/services/mcctl-console/.next/server/app/(main)/settings/page.js +1 -1
- package/.next/standalone/platform/services/mcctl-console/.next/server/app/(main)/settings/page.js.nft.json +1 -1
- package/.next/standalone/platform/services/mcctl-console/.next/server/app/(main)/settings/page_client-reference-manifest.js +1 -1
- package/.next/standalone/platform/services/mcctl-console/.next/server/app/(main)/worlds/page.js +1 -1
- package/.next/standalone/platform/services/mcctl-console/.next/server/app/(main)/worlds/page.js.nft.json +1 -1
- package/.next/standalone/platform/services/mcctl-console/.next/server/app/(main)/worlds/page_client-reference-manifest.js +1 -1
- package/.next/standalone/platform/services/mcctl-console/.next/server/app/_not-found/page.js +1 -1
- package/.next/standalone/platform/services/mcctl-console/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/standalone/platform/services/mcctl-console/.next/server/app/_not-found.html +1 -1
- package/.next/standalone/platform/services/mcctl-console/.next/server/app/_not-found.rsc +1 -1
- package/.next/standalone/platform/services/mcctl-console/.next/server/app/api/players/ban/route.js +1 -1
- package/.next/standalone/platform/services/mcctl-console/.next/server/app/api/players/whitelist/route.js +1 -1
- package/.next/standalone/platform/services/mcctl-console/.next/server/app/audit-logs.html +1 -1
- package/.next/standalone/platform/services/mcctl-console/.next/server/app/audit-logs.rsc +3 -3
- package/.next/standalone/platform/services/mcctl-console/.next/server/app/backups.html +1 -1
- package/.next/standalone/platform/services/mcctl-console/.next/server/app/backups.rsc +3 -3
- package/.next/standalone/platform/services/mcctl-console/.next/server/app/dashboard.html +1 -1
- package/.next/standalone/platform/services/mcctl-console/.next/server/app/dashboard.rsc +3 -3
- package/.next/standalone/platform/services/mcctl-console/.next/server/app/index.html +1 -1
- package/.next/standalone/platform/services/mcctl-console/.next/server/app/index.rsc +1 -1
- package/.next/standalone/platform/services/mcctl-console/.next/server/app/login/page.js +1 -1
- package/.next/standalone/platform/services/mcctl-console/.next/server/app/login/page.js.nft.json +1 -1
- package/.next/standalone/platform/services/mcctl-console/.next/server/app/login/page_client-reference-manifest.js +1 -1
- package/.next/standalone/platform/services/mcctl-console/.next/server/app/login.html +1 -1
- package/.next/standalone/platform/services/mcctl-console/.next/server/app/login.rsc +2 -2
- package/.next/standalone/platform/services/mcctl-console/.next/server/app/page.js +1 -1
- package/.next/standalone/platform/services/mcctl-console/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/standalone/platform/services/mcctl-console/.next/server/app/players.html +1 -1
- package/.next/standalone/platform/services/mcctl-console/.next/server/app/players.rsc +3 -3
- package/.next/standalone/platform/services/mcctl-console/.next/server/app/routing.html +1 -1
- package/.next/standalone/platform/services/mcctl-console/.next/server/app/routing.rsc +3 -3
- package/.next/standalone/platform/services/mcctl-console/.next/server/app/servers.html +1 -1
- package/.next/standalone/platform/services/mcctl-console/.next/server/app/servers.rsc +3 -3
- package/.next/standalone/platform/services/mcctl-console/.next/server/app/settings.html +1 -1
- package/.next/standalone/platform/services/mcctl-console/.next/server/app/settings.rsc +3 -3
- package/.next/standalone/platform/services/mcctl-console/.next/server/app/signup/page.js +1 -1
- package/.next/standalone/platform/services/mcctl-console/.next/server/app/signup/page.js.nft.json +1 -1
- package/.next/standalone/platform/services/mcctl-console/.next/server/app/signup/page_client-reference-manifest.js +1 -1
- package/.next/standalone/platform/services/mcctl-console/.next/server/app/signup.html +1 -1
- package/.next/standalone/platform/services/mcctl-console/.next/server/app/signup.rsc +2 -2
- package/.next/standalone/platform/services/mcctl-console/.next/server/app/worlds.html +1 -1
- package/.next/standalone/platform/services/mcctl-console/.next/server/app/worlds.rsc +3 -3
- package/.next/standalone/platform/services/mcctl-console/.next/server/app-paths-manifest.json +13 -13
- package/.next/standalone/platform/services/mcctl-console/.next/server/chunks/1080.js +1 -0
- package/.next/standalone/platform/services/mcctl-console/.next/server/chunks/1314.js +54 -0
- package/.next/standalone/platform/services/mcctl-console/.next/server/chunks/354.js +1 -1
- package/.next/standalone/platform/services/mcctl-console/.next/server/chunks/4533.js +1 -1
- package/.next/standalone/platform/services/mcctl-console/.next/server/chunks/5019.js +1 -1
- package/.next/standalone/platform/services/mcctl-console/.next/server/chunks/5068.js +1 -0
- package/.next/standalone/platform/services/mcctl-console/.next/server/chunks/701.js +1 -0
- package/.next/standalone/platform/services/mcctl-console/.next/server/chunks/8243.js +1 -0
- package/.next/standalone/platform/services/mcctl-console/.next/server/chunks/8402.js +1 -0
- package/.next/standalone/platform/services/mcctl-console/.next/server/chunks/8847.js +74 -0
- package/.next/standalone/platform/services/mcctl-console/.next/server/chunks/8913.js +51 -0
- package/.next/standalone/platform/services/mcctl-console/.next/server/chunks/9350.js +1 -0
- package/.next/standalone/platform/services/mcctl-console/.next/server/middleware-manifest.json +5 -5
- package/.next/standalone/platform/services/mcctl-console/.next/server/next-font-manifest.js +1 -1
- package/.next/standalone/platform/services/mcctl-console/.next/server/next-font-manifest.json +1 -1
- package/.next/standalone/platform/services/mcctl-console/.next/server/pages/404.html +1 -1
- package/.next/standalone/platform/services/mcctl-console/.next/server/pages/500.html +1 -1
- package/.next/standalone/platform/services/mcctl-console/.next/server/server-reference-manifest.json +1 -1
- package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/{1189-60aed59c0e82a63d.js → 1189-9b2b752dc97065ac.js} +1 -1
- package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/1854-71dbad60b363e57e.js +1 -0
- package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/212-b904d9ae152f2360.js +1 -0
- package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/2777-90cc701b41e837af.js +1 -0
- package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/4668-f487c5c564e045d6.js +1 -0
- package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/521-a5b59e2a19c8dd4f.js +1 -0
- package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/5511-7a419d84918a8d64.js +1 -0
- package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/563-d87300cc5ef5920c.js +1 -0
- package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/{6479-82b21daf8e380c4d.js → 6479-f31fbc0f2cf7ddd0.js} +1 -1
- package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/7359-45760f0e0e93f86b.js +1 -0
- package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/8558-4356df5e91ec7f4c.js +1 -0
- package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/892-a0f20ea0df618c15.js +1 -0
- package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/app/(main)/admin/layout-a902566886bf412c.js +1 -0
- package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/app/{admin/users/page-f45f3cd30725a718.js → (main)/admin/users/page-48f4e3bdef6c2202.js} +1 -1
- package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/app/(main)/audit-logs/{page-b879c927081e59a2.js → page-21b37416096d3cfc.js} +1 -1
- package/.next/{static/chunks/app/(main)/backups/page-7a59c9269da2d63e.js → standalone/platform/services/mcctl-console/.next/static/chunks/app/(main)/backups/page-a8606e93b4994f33.js} +1 -1
- package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/app/(main)/dashboard/{page-d2d8cd0c7a0a54ec.js → page-fe3321721ddfe2a7.js} +1 -1
- package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/app/(main)/layout-bc7b020e80bc6d8d.js +1 -0
- package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/app/(main)/players/page-5bbed669a03279a3.js +1 -0
- package/.next/{static/chunks/app/(main)/routing/page-909690ecbe76f31c.js → standalone/platform/services/mcctl-console/.next/static/chunks/app/(main)/routing/page-ee0b47f2cc2bc235.js} +1 -1
- package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/app/(main)/servers/[name]/{page-96518534b90deb1c.js → page-b8d4a08a748e882d.js} +1 -1
- package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/app/(main)/servers/{page-c35bb5a99e6ff107.js → page-e47f9c34ab4e890d.js} +1 -1
- package/.next/{static/chunks/app/(main)/settings/page-a805f639e14a10b0.js → standalone/platform/services/mcctl-console/.next/static/chunks/app/(main)/settings/page-dac4b25dde7b0719.js} +1 -1
- package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/app/(main)/worlds/page-7e2bc35fda11d7c4.js +1 -0
- package/.next/{static/chunks/app/login/page-1665f285187a2a51.js → standalone/platform/services/mcctl-console/.next/static/chunks/app/login/page-073a17485ca81f18.js} +1 -1
- package/.next/{static/chunks/app/signup/page-ae0638854e6bde34.js → standalone/platform/services/mcctl-console/.next/static/chunks/app/signup/page-bfb822f4c5c7ce99.js} +1 -1
- package/.next/standalone/platform/services/mcctl-console/package.json +1 -1
- package/.next/static/chunks/{1189-60aed59c0e82a63d.js → 1189-9b2b752dc97065ac.js} +1 -1
- package/.next/static/chunks/1854-71dbad60b363e57e.js +1 -0
- package/.next/static/chunks/212-b904d9ae152f2360.js +1 -0
- package/.next/static/chunks/2777-90cc701b41e837af.js +1 -0
- package/.next/static/chunks/4668-f487c5c564e045d6.js +1 -0
- package/.next/static/chunks/521-a5b59e2a19c8dd4f.js +1 -0
- package/.next/static/chunks/5511-7a419d84918a8d64.js +1 -0
- package/.next/static/chunks/563-d87300cc5ef5920c.js +1 -0
- package/.next/static/chunks/{6479-82b21daf8e380c4d.js → 6479-f31fbc0f2cf7ddd0.js} +1 -1
- package/.next/static/chunks/7359-45760f0e0e93f86b.js +1 -0
- package/.next/static/chunks/8558-4356df5e91ec7f4c.js +1 -0
- package/.next/static/chunks/892-a0f20ea0df618c15.js +1 -0
- package/.next/static/chunks/app/(main)/admin/layout-a902566886bf412c.js +1 -0
- package/.next/static/chunks/app/{admin/users/page-f45f3cd30725a718.js → (main)/admin/users/page-48f4e3bdef6c2202.js} +1 -1
- package/.next/static/chunks/app/(main)/audit-logs/{page-b879c927081e59a2.js → page-21b37416096d3cfc.js} +1 -1
- package/.next/{standalone/platform/services/mcctl-console/.next/static/chunks/app/(main)/backups/page-7a59c9269da2d63e.js → static/chunks/app/(main)/backups/page-a8606e93b4994f33.js} +1 -1
- package/.next/static/chunks/app/(main)/dashboard/{page-d2d8cd0c7a0a54ec.js → page-fe3321721ddfe2a7.js} +1 -1
- package/.next/static/chunks/app/(main)/layout-bc7b020e80bc6d8d.js +1 -0
- package/.next/static/chunks/app/(main)/players/page-5bbed669a03279a3.js +1 -0
- package/.next/{standalone/platform/services/mcctl-console/.next/static/chunks/app/(main)/routing/page-909690ecbe76f31c.js → static/chunks/app/(main)/routing/page-ee0b47f2cc2bc235.js} +1 -1
- package/.next/static/chunks/app/(main)/servers/[name]/{page-96518534b90deb1c.js → page-b8d4a08a748e882d.js} +1 -1
- package/.next/static/chunks/app/(main)/servers/{page-c35bb5a99e6ff107.js → page-e47f9c34ab4e890d.js} +1 -1
- package/.next/{standalone/platform/services/mcctl-console/.next/static/chunks/app/(main)/settings/page-a805f639e14a10b0.js → static/chunks/app/(main)/settings/page-dac4b25dde7b0719.js} +1 -1
- package/.next/static/chunks/app/(main)/worlds/page-7e2bc35fda11d7c4.js +1 -0
- package/.next/{standalone/platform/services/mcctl-console/.next/static/chunks/app/login/page-1665f285187a2a51.js → static/chunks/app/login/page-073a17485ca81f18.js} +1 -1
- package/.next/{standalone/platform/services/mcctl-console/.next/static/chunks/app/signup/page-ae0638854e6bde34.js → static/chunks/app/signup/page-bfb822f4c5c7ce99.js} +1 -1
- package/package.json +2 -2
- package/.next/standalone/platform/services/mcctl-console/.next/server/app/admin/users/page.js +0 -1
- package/.next/standalone/platform/services/mcctl-console/.next/server/app/admin/users/page.js.nft.json +0 -1
- package/.next/standalone/platform/services/mcctl-console/.next/server/app/admin/users/page_client-reference-manifest.js +0 -1
- package/.next/standalone/platform/services/mcctl-console/.next/server/app/admin/users.html +0 -1
- package/.next/standalone/platform/services/mcctl-console/.next/server/app/admin/users.meta +0 -5
- package/.next/standalone/platform/services/mcctl-console/.next/server/app/admin/users.rsc +0 -12
- package/.next/standalone/platform/services/mcctl-console/.next/server/chunks/2572.js +0 -1
- package/.next/standalone/platform/services/mcctl-console/.next/server/chunks/3029.js +0 -51
- package/.next/standalone/platform/services/mcctl-console/.next/server/chunks/3048.js +0 -1
- package/.next/standalone/platform/services/mcctl-console/.next/server/chunks/6231.js +0 -74
- package/.next/standalone/platform/services/mcctl-console/.next/server/chunks/7057.js +0 -1
- package/.next/standalone/platform/services/mcctl-console/.next/server/chunks/7238.js +0 -1
- package/.next/standalone/platform/services/mcctl-console/.next/server/chunks/7453.js +0 -54
- package/.next/standalone/platform/services/mcctl-console/.next/server/chunks/7521.js +0 -1
- package/.next/standalone/platform/services/mcctl-console/.next/server/chunks/9250.js +0 -1
- package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/190-9ecdd3c2ad7fadef.js +0 -1
- package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/4597-a66229d37b05fea9.js +0 -1
- package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/5386-a568e84580b1d208.js +0 -1
- package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/6571-0d9e629a91d9f630.js +0 -1
- package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/7073-46594e6380fdda11.js +0 -1
- package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/765-8e911fe4e2959f8d.js +0 -1
- package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/7782-0f287c9ab0566879.js +0 -1
- package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/787-91c6946656342fe4.js +0 -1
- package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/8625-b235421f69a178fb.js +0 -1
- package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/9485-9510025fbd9f9555.js +0 -1
- package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/9810-e8bf0b092d80a553.js +0 -1
- package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/app/(main)/layout-2f8a2fe359953bbc.js +0 -1
- package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/app/(main)/players/page-724151791dd69b93.js +0 -1
- package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/app/(main)/worlds/page-704a3dafb5b8ec15.js +0 -1
- package/.next/static/chunks/190-9ecdd3c2ad7fadef.js +0 -1
- package/.next/static/chunks/4597-a66229d37b05fea9.js +0 -1
- package/.next/static/chunks/5386-a568e84580b1d208.js +0 -1
- package/.next/static/chunks/6571-0d9e629a91d9f630.js +0 -1
- package/.next/static/chunks/7073-46594e6380fdda11.js +0 -1
- package/.next/static/chunks/765-8e911fe4e2959f8d.js +0 -1
- package/.next/static/chunks/7782-0f287c9ab0566879.js +0 -1
- package/.next/static/chunks/787-91c6946656342fe4.js +0 -1
- package/.next/static/chunks/8625-b235421f69a178fb.js +0 -1
- package/.next/static/chunks/9485-9510025fbd9f9555.js +0 -1
- package/.next/static/chunks/9810-e8bf0b092d80a553.js +0 -1
- package/.next/static/chunks/app/(main)/layout-2f8a2fe359953bbc.js +0 -1
- package/.next/static/chunks/app/(main)/players/page-724151791dd69b93.js +0 -1
- package/.next/static/chunks/app/(main)/worlds/page-704a3dafb5b8ec15.js +0 -1
- /package/.next/standalone/platform/services/mcctl-console/.next/static/{FpqRAxF6tnqZ99-k8eKej → qKkyAhVhtEF8ACV2o3pRc}/_buildManifest.js +0 -0
- /package/.next/standalone/platform/services/mcctl-console/.next/static/{FpqRAxF6tnqZ99-k8eKej → qKkyAhVhtEF8ACV2o3pRc}/_ssgManifest.js +0 -0
- /package/.next/static/{FpqRAxF6tnqZ99-k8eKej → qKkyAhVhtEF8ACV2o3pRc}/_buildManifest.js +0 -0
- /package/.next/static/{FpqRAxF6tnqZ99-k8eKej → qKkyAhVhtEF8ACV2o3pRc}/_ssgManifest.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[6302],{1366:function(e,n,t){Promise.resolve().then(t.bind(t,6643))},6643:function(e,n,t){"use strict";t.r(n),t.d(n,{default:function(){return P}});var r=t(94655),s=t(31317),i=t(7281),o=t(69899),a=t(70115),c=t(76492),u=t(91606),l=t(628),d=t(41565),h=t(25333),x=t(46207),y=t(43436),m=t(92666);function j(){let{data:e,isLoading:n,error:t}=(0,m.mj)();if(n)return(0,r.jsx)(l.Z,{children:(0,r.jsxs)(d.Z,{children:[(0,r.jsx)(s.Z,{variant:"h6",gutterBottom:!0,children:"Backup Status"}),(0,r.jsx)(s.Z,{color:"text.secondary",children:"Loading..."})]})});if(t)return(0,r.jsx)(l.Z,{children:(0,r.jsxs)(d.Z,{children:[(0,r.jsx)(s.Z,{variant:"h6",gutterBottom:!0,children:"Backup Status"}),(0,r.jsx)(s.Z,{color:"error",children:"Failed to load backup status"})]})});let{configured:o,lastBackup:a,repository:c}=e||{};return(0,r.jsx)(l.Z,{children:(0,r.jsxs)(d.Z,{children:[(0,r.jsxs)(i.Z,{sx:{display:"flex",justifyContent:"space-between",alignItems:"center",mb:2},children:[(0,r.jsx)(s.Z,{variant:"h6",children:"Backup Status"}),(0,r.jsx)(h.Z,{icon:o?(0,r.jsx)(x.Z,{}):(0,r.jsx)(y.Z,{}),label:o?"Configured":"Not Configured",color:o?"success":"error",size:"small"})]}),o?(0,r.jsxs)(i.Z,{sx:{display:"flex",flexDirection:"column",gap:1},children:[c&&(0,r.jsxs)(i.Z,{children:[(0,r.jsx)(s.Z,{variant:"caption",color:"text.secondary",children:"Repository"}),(0,r.jsx)(s.Z,{variant:"body2",sx:{fontFamily:"monospace",fontSize:"0.875rem"},children:c})]}),a&&(0,r.jsxs)(i.Z,{children:[(0,r.jsx)(s.Z,{variant:"caption",color:"text.secondary",children:"Last Backup"}),(0,r.jsx)(s.Z,{variant:"body2",children:function(e){let n=new Date,t=new Date(e),r=Math.floor((n.getTime()-t.getTime())/6e4),s=Math.floor(r/60);return r<1?"just now":r<60?"".concat(r," minutes ago"):s<24?"".concat(s," hours ago"):"".concat(Math.floor(s/24)," days ago")}(a)})]}),!a&&(0,r.jsx)(s.Z,{variant:"body2",color:"text.secondary",children:"No backups yet"})]}):(0,r.jsx)(s.Z,{variant:"body2",color:"text.secondary",children:"GitHub backup is not configured. Please configure BACKUP_REPO_URL in your environment."})]})})}var f=t(35106),p=t(21138),v=t(84811),Z=t(47001),g=t(53281),b=t(11254),S=t(70366),C=t(79983),k=t(97731),w=t(30417),q=t(99770),F=t(76678),I=t(5682),K=t(65087),D=t(62508),T=t(81071),N=t(93017);function B(e){var n;let{open:t,commit:o,onClose:a}=e,{mutate:c,isPending:u}=(0,m.s8)(),[l,d]=(0,f.useState)(""),[h,x]=(0,f.useState)(""),y=()=>{u||(d(""),x(""),a())};return(0,r.jsxs)(q.Z,{open:t,onClose:y,maxWidth:"sm",fullWidth:!0,children:[(0,r.jsx)(D.Z,{children:"Restore Backup"}),(0,r.jsxs)(I.Z,{children:[(0,r.jsx)(T.Z,{severity:"warning",sx:{mb:2},children:"This will restore all worlds from the selected backup. Current world data will be overwritten."}),l&&(0,r.jsx)(T.Z,{severity:"success",sx:{mb:2},children:l}),h&&(0,r.jsx)(T.Z,{severity:"error",sx:{mb:2},children:h}),(0,r.jsx)(K.Z,{sx:{mb:2},children:"Are you sure you want to restore from this backup?"}),(0,r.jsxs)(i.Z,{sx:{display:"flex",flexDirection:"column",gap:1},children:[(0,r.jsxs)(i.Z,{children:[(0,r.jsx)(s.Z,{variant:"caption",color:"text.secondary",children:"Commit Hash"}),(0,r.jsx)(s.Z,{variant:"body2",sx:{fontFamily:"monospace",fontSize:"0.875rem"},children:o.hash})]}),(0,r.jsxs)(i.Z,{children:[(0,r.jsx)(s.Z,{variant:"caption",color:"text.secondary",children:"Date"}),(0,r.jsx)(s.Z,{variant:"body2",children:(n=o.date,new Intl.DateTimeFormat(void 0,{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"}).format(new Date(n)))})]}),(0,r.jsxs)(i.Z,{children:[(0,r.jsx)(s.Z,{variant:"caption",color:"text.secondary",children:"Message"}),(0,r.jsx)(s.Z,{variant:"body2",children:o.message})]}),(0,r.jsxs)(i.Z,{children:[(0,r.jsx)(s.Z,{variant:"caption",color:"text.secondary",children:"Author"}),(0,r.jsx)(s.Z,{variant:"body2",children:o.author})]})]})]}),(0,r.jsxs)(F.Z,{children:[(0,r.jsx)(w.Z,{onClick:y,disabled:u,children:"Cancel"}),(0,r.jsx)(w.Z,{onClick:()=>{d(""),x(""),c(o.hash,{onSuccess:()=>{d("Backup restored successfully from ".concat(o.hash.substring(0,7))),setTimeout(()=>{a()},2e3)},onError:e=>{x("Failed to restore backup: ".concat(e.message))}})},variant:"contained",color:"warning",disabled:u,startIcon:u?(0,r.jsx)(N.Z,{size:16}):(0,r.jsx)(k.Z,{}),children:u?"Restoring...":"Restore"})]})]})}function Q(){let{data:e,isLoading:n,error:t}=(0,m.$t)(20),[i,o]=(0,f.useState)(null),a=e=>{o(e)};if(n)return(0,r.jsx)(l.Z,{children:(0,r.jsxs)(d.Z,{children:[(0,r.jsx)(s.Z,{variant:"h6",gutterBottom:!0,children:"Backup History"}),(0,r.jsx)(s.Z,{color:"text.secondary",children:"Loading..."})]})});if(t)return(0,r.jsx)(l.Z,{children:(0,r.jsxs)(d.Z,{children:[(0,r.jsx)(s.Z,{variant:"h6",gutterBottom:!0,children:"Backup History"}),(0,r.jsx)(s.Z,{color:"error",children:"Failed to load backup history"})]})});let c=(null==e?void 0:e.commits)||[];return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(l.Z,{children:(0,r.jsxs)(d.Z,{children:[(0,r.jsx)(s.Z,{variant:"h6",gutterBottom:!0,children:"Backup History"}),0===c.length?(0,r.jsx)(s.Z,{color:"text.secondary",children:"No backup history available"}):(0,r.jsx)(g.Z,{children:(0,r.jsxs)(p.Z,{children:[(0,r.jsx)(b.Z,{children:(0,r.jsxs)(S.Z,{children:[(0,r.jsx)(Z.Z,{children:"Commit"}),(0,r.jsx)(Z.Z,{children:"Date"}),(0,r.jsx)(Z.Z,{children:"Message"}),(0,r.jsx)(Z.Z,{children:"Author"}),(0,r.jsx)(Z.Z,{align:"right",children:"Actions"})]})}),(0,r.jsx)(v.Z,{children:c.map(e=>{var n;return(0,r.jsxs)(S.Z,{children:[(0,r.jsx)(Z.Z,{children:(0,r.jsx)(h.Z,{label:e.hash.substring(0,7),size:"small",variant:"outlined",sx:{fontFamily:"monospace"}})}),(0,r.jsx)(Z.Z,{children:(0,r.jsx)(s.Z,{variant:"body2",children:(n=e.date,new Intl.DateTimeFormat(void 0,{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}).format(new Date(n)))})}),(0,r.jsx)(Z.Z,{children:(0,r.jsx)(s.Z,{variant:"body2",children:e.message})}),(0,r.jsx)(Z.Z,{children:(0,r.jsx)(s.Z,{variant:"body2",color:"text.secondary",children:e.author})}),(0,r.jsx)(Z.Z,{align:"right",children:(0,r.jsx)(C.Z,{size:"small",color:"primary",onClick:()=>a(e),title:"Restore this backup",children:(0,r.jsx)(k.Z,{})})})]},e.hash)})})]})})]})}),i&&(0,r.jsx)(B,{open:!!i,commit:i,onClose:()=>{o(null)}})]})}var R=t(97436),O=t(34675);function L(e){let{disabled:n}=e,[t,s]=(0,f.useState)(!1),[i,o]=(0,f.useState)(""),[a,c]=(0,f.useState)(""),[u,l]=(0,f.useState)(""),{mutate:d,isPending:h}=(0,m.c5)(),x=()=>{h||(s(!1),o(""),c(""),l(""))};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(w.Z,{variant:"contained",startIcon:(0,r.jsx)(O.Z,{}),onClick:()=>{s(!0),c(""),l(""),o("Backup ".concat(new Date().toISOString().split("T")[0]))},disabled:n||h,children:"Push Backup"}),(0,r.jsxs)(q.Z,{open:t,onClose:x,maxWidth:"sm",fullWidth:!0,children:[(0,r.jsx)(D.Z,{children:"Push Backup"}),(0,r.jsxs)(I.Z,{children:[a&&(0,r.jsx)(T.Z,{severity:"success",sx:{mb:2},children:a}),u&&(0,r.jsx)(T.Z,{severity:"error",sx:{mb:2},children:u}),(0,r.jsx)(R.Z,{autoFocus:!0,margin:"dense",label:"Commit Message",type:"text",fullWidth:!0,variant:"outlined",value:i,onChange:e=>o(e.target.value),disabled:h,helperText:"Optional message describing this backup"})]}),(0,r.jsxs)(F.Z,{children:[(0,r.jsx)(w.Z,{onClick:x,disabled:h,children:"Cancel"}),(0,r.jsx)(w.Z,{onClick:()=>{c(""),l(""),d({message:i||void 0},{onSuccess:e=>{c(e.commitHash?"Backup pushed successfully (".concat(e.commitHash.substring(0,7),")"):"Backup pushed successfully"),setTimeout(()=>{x()},2e3)},onError:e=>{l("Failed to push backup: ".concat(e.message))}})},variant:"contained",disabled:h,startIcon:h?(0,r.jsx)(N.Z,{size:16}):(0,r.jsx)(O.Z,{}),children:h?"Pushing...":"Push"})]})]})]})}function P(){var e;let{data:n}=(0,m.mj)(),t=null!==(e=null==n?void 0:n.configured)&&void 0!==e&&e;return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)(o.Z,{elevation:0,sx:{mb:4,p:3,background:e=>"linear-gradient(135deg, ".concat((0,c.Fq)(e.palette.secondary.main,.1)," 0%, ").concat((0,c.Fq)(e.palette.info.main,.1)," 100%)"),borderRadius:2,border:e=>"1px solid ".concat((0,c.Fq)(e.palette.secondary.main,.2)),display:"flex",justifyContent:"space-between",alignItems:"center"},children:[(0,r.jsxs)(i.Z,{sx:{display:"flex",alignItems:"center",gap:2},children:[(0,r.jsx)(i.Z,{sx:{display:"flex",alignItems:"center",justifyContent:"center",width:56,height:56,borderRadius:2,bgcolor:"secondary.main",color:"secondary.contrastText"},children:(0,r.jsx)(u.Z,{sx:{fontSize:32}})}),(0,r.jsxs)(i.Z,{children:[(0,r.jsx)(s.Z,{variant:"h4",component:"h1",fontWeight:"bold",children:"Backups"}),(0,r.jsx)(s.Z,{variant:"body1",color:"text.secondary",children:"Manage world backups and restore points"})]})]}),(0,r.jsx)(L,{disabled:!t})]}),(0,r.jsxs)(a.Z,{spacing:3,children:[(0,r.jsx)(j,{}),t&&(0,r.jsx)(Q,{})]})]})}},42936:function(e,n,t){"use strict";async function r(e){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},t={...n.headers};n.body&&(t["Content-Type"]="application/json");let r=await fetch(e,{...n,headers:t});if(!r.ok){let e=await r.json().catch(()=>({error:"UnknownError",message:r.statusText})),n=Error(e.message);throw n.statusCode=r.status,n.code=e.error,n}return r.json()}t.d(n,{SC:function(){return r}})},92666:function(e,n,t){"use strict";t.d(n,{$t:function(){return S},Aw:function(){return d},Fv:function(){return f},Hq:function(){return u},Hy:function(){return c},MH:function(){return v},Sr:function(){return x},_I:function(){return h},c5:function(){return C},g2:function(){return j},gx:function(){return Z},hy:function(){return y},iC:function(){return p},jM:function(){return l},mj:function(){return b},nq:function(){return m},nv:function(){return g},s8:function(){return k},x$:function(){return a}});var r=t(5632),s=t(58919),i=t(20367),o=t(42936);function a(){return(0,r.a)({queryKey:["servers"],queryFn:()=>(0,o.SC)("/api/servers"),refetchInterval:6e4})}function c(e,n){return(0,r.a)({queryKey:["servers",e],queryFn:()=>(0,o.SC)("/api/servers/".concat(encodeURIComponent(e))),enabled:(null==n?void 0:n.enabled)!==!1&&!!e,refetchInterval:3e4})}function u(){let e=(0,s.NL)();return(0,i.D)({mutationFn:e=>{let{name:n,force:t}=e;return(0,o.SC)("/api/servers/".concat(encodeURIComponent(n)).concat(t?"?force=true":""),{method:"DELETE"})},onSuccess:()=>{e.invalidateQueries({queryKey:["servers"]})}})}function l(){let e=(0,s.NL)();return(0,i.D)({mutationFn:e=>(0,o.SC)("/api/servers/".concat(encodeURIComponent(e),"/start"),{method:"POST"}),onSuccess:(n,t)=>{e.invalidateQueries({queryKey:["servers"]}),e.invalidateQueries({queryKey:["servers",t]})}})}function d(){let e=(0,s.NL)();return(0,i.D)({mutationFn:e=>(0,o.SC)("/api/servers/".concat(encodeURIComponent(e),"/stop"),{method:"POST"}),onSuccess:(n,t)=>{e.invalidateQueries({queryKey:["servers"]}),e.invalidateQueries({queryKey:["servers",t]})}})}function h(){let e=(0,s.NL)();return(0,i.D)({mutationFn:e=>(0,o.SC)("/api/servers/".concat(encodeURIComponent(e),"/restart"),{method:"POST"}),onSuccess:(n,t)=>{e.invalidateQueries({queryKey:["servers"]}),e.invalidateQueries({queryKey:["servers",t]})}})}function x(){return(0,r.a)({queryKey:["worlds"],queryFn:()=>(0,o.SC)("/api/worlds"),refetchInterval:3e4})}function y(){let e=(0,s.NL)();return(0,i.D)({mutationFn:e=>(0,o.SC)("/api/worlds",{method:"POST",body:JSON.stringify(e)}),onSuccess:()=>{e.invalidateQueries({queryKey:["worlds"]})}})}function m(){let e=(0,s.NL)();return(0,i.D)({mutationFn:e=>{let{worldName:n,serverName:t}=e;return(0,o.SC)("/api/worlds/".concat(encodeURIComponent(n),"/assign"),{method:"POST",body:JSON.stringify({serverName:t})})},onSuccess:()=>{e.invalidateQueries({queryKey:["worlds"]}),e.invalidateQueries({queryKey:["servers"]})}})}function j(){let e=(0,s.NL)();return(0,i.D)({mutationFn:e=>{let{worldName:n,force:t}=e;return(0,o.SC)("/api/worlds/".concat(encodeURIComponent(n),"/release").concat(t?"?force=true":""),{method:"POST"})},onSuccess:()=>{e.invalidateQueries({queryKey:["worlds"]})}})}function f(){let e=(0,s.NL)();return(0,i.D)({mutationFn:e=>{let{name:n,force:t}=e;return(0,o.SC)("/api/worlds/".concat(encodeURIComponent(n)).concat(t?"?force=true":""),{method:"DELETE"})},onSuccess:()=>{e.invalidateQueries({queryKey:["worlds"]})}})}function p(e,n){return(0,r.a)({queryKey:["servers",e,"config"],queryFn:()=>(0,o.SC)("/api/servers/".concat(encodeURIComponent(e),"/config")),enabled:(null==n?void 0:n.enabled)!==!1&&!!e})}function v(){let e=(0,s.NL)();return(0,i.D)({mutationFn:e=>{let{serverName:n,config:t}=e;return(0,o.SC)("/api/servers/".concat(encodeURIComponent(n),"/config"),{method:"PATCH",body:JSON.stringify(t)})},onSuccess:(n,t)=>{let{serverName:r}=t;e.invalidateQueries({queryKey:["servers",r,"config"]}),e.invalidateQueries({queryKey:["servers",r]})}})}function Z(){let e=(0,s.NL)();return(0,i.D)({mutationFn:e=>(0,o.SC)("/api/servers/".concat(encodeURIComponent(e),"/world/reset"),{method:"POST"}),onSuccess:(n,t)=>{e.invalidateQueries({queryKey:["servers",t]}),e.invalidateQueries({queryKey:["worlds"]})}})}function g(){return(0,r.a)({queryKey:["router-status"],queryFn:()=>(0,o.SC)("/api/router/status"),refetchInterval:3e4})}function b(){return(0,r.a)({queryKey:["backup-status"],queryFn:()=>(0,o.SC)("/api/backup"),refetchInterval:6e4})}function S(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:20;return(0,r.a)({queryKey:["backup-history",e],queryFn:()=>(0,o.SC)("/api/backup/history?limit=".concat(e)),refetchInterval:6e4})}function C(){let e=(0,s.NL)();return(0,i.D)({mutationFn:e=>{let{message:n}=e;return(0,o.SC)("/api/backup",{method:"POST",body:JSON.stringify({message:n})})},onSuccess:()=>{e.invalidateQueries({queryKey:["backup-status"]}),e.invalidateQueries({queryKey:["backup-history"]})}})}function k(){let e=(0,s.NL)();return(0,i.D)({mutationFn:e=>(0,o.SC)("/api/backup/restore",{method:"POST",body:JSON.stringify({commitHash:e})}),onSuccess:()=>{e.invalidateQueries({queryKey:["worlds"]}),e.invalidateQueries({queryKey:["servers"]})}})}}},function(e){e.O(0,[6812,9760,6758,680,1668,7436,1071,540,4416,880,9654,8625,3669,2757,1744],function(){return e(e.s=1366)}),_N_E=e.O()}]);
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[6302],{1366:function(e,n,t){Promise.resolve().then(t.bind(t,6643))},6643:function(e,n,t){"use strict";t.r(n),t.d(n,{default:function(){return P}});var r=t(94655),s=t(31317),i=t(7281),o=t(69899),a=t(70115),c=t(76492),u=t(91606),l=t(628),d=t(41565),h=t(25333),x=t(46207),y=t(43436),m=t(92666);function j(){let{data:e,isLoading:n,error:t}=(0,m.mj)();if(n)return(0,r.jsx)(l.Z,{children:(0,r.jsxs)(d.Z,{children:[(0,r.jsx)(s.Z,{variant:"h6",gutterBottom:!0,children:"Backup Status"}),(0,r.jsx)(s.Z,{color:"text.secondary",children:"Loading..."})]})});if(t)return(0,r.jsx)(l.Z,{children:(0,r.jsxs)(d.Z,{children:[(0,r.jsx)(s.Z,{variant:"h6",gutterBottom:!0,children:"Backup Status"}),(0,r.jsx)(s.Z,{color:"error",children:"Failed to load backup status"})]})});let{configured:o,lastBackup:a,repository:c}=e||{};return(0,r.jsx)(l.Z,{children:(0,r.jsxs)(d.Z,{children:[(0,r.jsxs)(i.Z,{sx:{display:"flex",justifyContent:"space-between",alignItems:"center",mb:2},children:[(0,r.jsx)(s.Z,{variant:"h6",children:"Backup Status"}),(0,r.jsx)(h.Z,{icon:o?(0,r.jsx)(x.Z,{}):(0,r.jsx)(y.Z,{}),label:o?"Configured":"Not Configured",color:o?"success":"error",size:"small"})]}),o?(0,r.jsxs)(i.Z,{sx:{display:"flex",flexDirection:"column",gap:1},children:[c&&(0,r.jsxs)(i.Z,{children:[(0,r.jsx)(s.Z,{variant:"caption",color:"text.secondary",children:"Repository"}),(0,r.jsx)(s.Z,{variant:"body2",sx:{fontFamily:"monospace",fontSize:"0.875rem"},children:c})]}),a&&(0,r.jsxs)(i.Z,{children:[(0,r.jsx)(s.Z,{variant:"caption",color:"text.secondary",children:"Last Backup"}),(0,r.jsx)(s.Z,{variant:"body2",children:function(e){let n=new Date,t=new Date(e),r=Math.floor((n.getTime()-t.getTime())/6e4),s=Math.floor(r/60);return r<1?"just now":r<60?"".concat(r," minutes ago"):s<24?"".concat(s," hours ago"):"".concat(Math.floor(s/24)," days ago")}(a)})]}),!a&&(0,r.jsx)(s.Z,{variant:"body2",color:"text.secondary",children:"No backups yet"})]}):(0,r.jsx)(s.Z,{variant:"body2",color:"text.secondary",children:"GitHub backup is not configured. Please configure BACKUP_REPO_URL in your environment."})]})})}var f=t(35106),p=t(21138),v=t(84811),Z=t(47001),g=t(53281),b=t(11254),S=t(70366),C=t(79983),k=t(97731),w=t(30417),q=t(99770),F=t(76678),I=t(5682),K=t(65087),D=t(62508),T=t(81071),N=t(93017);function B(e){var n;let{open:t,commit:o,onClose:a}=e,{mutate:c,isPending:u}=(0,m.s8)(),[l,d]=(0,f.useState)(""),[h,x]=(0,f.useState)(""),y=()=>{u||(d(""),x(""),a())};return(0,r.jsxs)(q.Z,{open:t,onClose:y,maxWidth:"sm",fullWidth:!0,children:[(0,r.jsx)(D.Z,{children:"Restore Backup"}),(0,r.jsxs)(I.Z,{children:[(0,r.jsx)(T.Z,{severity:"warning",sx:{mb:2},children:"This will restore all worlds from the selected backup. Current world data will be overwritten."}),l&&(0,r.jsx)(T.Z,{severity:"success",sx:{mb:2},children:l}),h&&(0,r.jsx)(T.Z,{severity:"error",sx:{mb:2},children:h}),(0,r.jsx)(K.Z,{sx:{mb:2},children:"Are you sure you want to restore from this backup?"}),(0,r.jsxs)(i.Z,{sx:{display:"flex",flexDirection:"column",gap:1},children:[(0,r.jsxs)(i.Z,{children:[(0,r.jsx)(s.Z,{variant:"caption",color:"text.secondary",children:"Commit Hash"}),(0,r.jsx)(s.Z,{variant:"body2",sx:{fontFamily:"monospace",fontSize:"0.875rem"},children:o.hash})]}),(0,r.jsxs)(i.Z,{children:[(0,r.jsx)(s.Z,{variant:"caption",color:"text.secondary",children:"Date"}),(0,r.jsx)(s.Z,{variant:"body2",children:(n=o.date,new Intl.DateTimeFormat(void 0,{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"}).format(new Date(n)))})]}),(0,r.jsxs)(i.Z,{children:[(0,r.jsx)(s.Z,{variant:"caption",color:"text.secondary",children:"Message"}),(0,r.jsx)(s.Z,{variant:"body2",children:o.message})]}),(0,r.jsxs)(i.Z,{children:[(0,r.jsx)(s.Z,{variant:"caption",color:"text.secondary",children:"Author"}),(0,r.jsx)(s.Z,{variant:"body2",children:o.author})]})]})]}),(0,r.jsxs)(F.Z,{children:[(0,r.jsx)(w.Z,{onClick:y,disabled:u,children:"Cancel"}),(0,r.jsx)(w.Z,{onClick:()=>{d(""),x(""),c(o.hash,{onSuccess:()=>{d("Backup restored successfully from ".concat(o.hash.substring(0,7))),setTimeout(()=>{a()},2e3)},onError:e=>{x("Failed to restore backup: ".concat(e.message))}})},variant:"contained",color:"warning",disabled:u,startIcon:u?(0,r.jsx)(N.Z,{size:16}):(0,r.jsx)(k.Z,{}),children:u?"Restoring...":"Restore"})]})]})}function Q(){let{data:e,isLoading:n,error:t}=(0,m.$t)(20),[i,o]=(0,f.useState)(null),a=e=>{o(e)};if(n)return(0,r.jsx)(l.Z,{children:(0,r.jsxs)(d.Z,{children:[(0,r.jsx)(s.Z,{variant:"h6",gutterBottom:!0,children:"Backup History"}),(0,r.jsx)(s.Z,{color:"text.secondary",children:"Loading..."})]})});if(t)return(0,r.jsx)(l.Z,{children:(0,r.jsxs)(d.Z,{children:[(0,r.jsx)(s.Z,{variant:"h6",gutterBottom:!0,children:"Backup History"}),(0,r.jsx)(s.Z,{color:"error",children:"Failed to load backup history"})]})});let c=(null==e?void 0:e.commits)||[];return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(l.Z,{children:(0,r.jsxs)(d.Z,{children:[(0,r.jsx)(s.Z,{variant:"h6",gutterBottom:!0,children:"Backup History"}),0===c.length?(0,r.jsx)(s.Z,{color:"text.secondary",children:"No backup history available"}):(0,r.jsx)(g.Z,{children:(0,r.jsxs)(p.Z,{children:[(0,r.jsx)(b.Z,{children:(0,r.jsxs)(S.Z,{children:[(0,r.jsx)(Z.Z,{children:"Commit"}),(0,r.jsx)(Z.Z,{children:"Date"}),(0,r.jsx)(Z.Z,{children:"Message"}),(0,r.jsx)(Z.Z,{children:"Author"}),(0,r.jsx)(Z.Z,{align:"right",children:"Actions"})]})}),(0,r.jsx)(v.Z,{children:c.map(e=>{var n;return(0,r.jsxs)(S.Z,{children:[(0,r.jsx)(Z.Z,{children:(0,r.jsx)(h.Z,{label:e.hash.substring(0,7),size:"small",variant:"outlined",sx:{fontFamily:"monospace"}})}),(0,r.jsx)(Z.Z,{children:(0,r.jsx)(s.Z,{variant:"body2",children:(n=e.date,new Intl.DateTimeFormat(void 0,{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"}).format(new Date(n)))})}),(0,r.jsx)(Z.Z,{children:(0,r.jsx)(s.Z,{variant:"body2",children:e.message})}),(0,r.jsx)(Z.Z,{children:(0,r.jsx)(s.Z,{variant:"body2",color:"text.secondary",children:e.author})}),(0,r.jsx)(Z.Z,{align:"right",children:(0,r.jsx)(C.Z,{size:"small",color:"primary",onClick:()=>a(e),title:"Restore this backup",children:(0,r.jsx)(k.Z,{})})})]},e.hash)})})]})})]})}),i&&(0,r.jsx)(B,{open:!!i,commit:i,onClose:()=>{o(null)}})]})}var R=t(97436),O=t(34675);function L(e){let{disabled:n}=e,[t,s]=(0,f.useState)(!1),[i,o]=(0,f.useState)(""),[a,c]=(0,f.useState)(""),[u,l]=(0,f.useState)(""),{mutate:d,isPending:h}=(0,m.c5)(),x=()=>{h||(s(!1),o(""),c(""),l(""))};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(w.Z,{variant:"contained",startIcon:(0,r.jsx)(O.Z,{}),onClick:()=>{s(!0),c(""),l(""),o("Backup ".concat(new Date().toISOString().split("T")[0]))},disabled:n||h,children:"Push Backup"}),(0,r.jsxs)(q.Z,{open:t,onClose:x,maxWidth:"sm",fullWidth:!0,children:[(0,r.jsx)(D.Z,{children:"Push Backup"}),(0,r.jsxs)(I.Z,{children:[a&&(0,r.jsx)(T.Z,{severity:"success",sx:{mb:2},children:a}),u&&(0,r.jsx)(T.Z,{severity:"error",sx:{mb:2},children:u}),(0,r.jsx)(R.Z,{autoFocus:!0,margin:"dense",label:"Commit Message",type:"text",fullWidth:!0,variant:"outlined",value:i,onChange:e=>o(e.target.value),disabled:h,helperText:"Optional message describing this backup"})]}),(0,r.jsxs)(F.Z,{children:[(0,r.jsx)(w.Z,{onClick:x,disabled:h,children:"Cancel"}),(0,r.jsx)(w.Z,{onClick:()=>{c(""),l(""),d({message:i||void 0},{onSuccess:e=>{c(e.commitHash?"Backup pushed successfully (".concat(e.commitHash.substring(0,7),")"):"Backup pushed successfully"),setTimeout(()=>{x()},2e3)},onError:e=>{l("Failed to push backup: ".concat(e.message))}})},variant:"contained",disabled:h,startIcon:h?(0,r.jsx)(N.Z,{size:16}):(0,r.jsx)(O.Z,{}),children:h?"Pushing...":"Push"})]})]})]})}function P(){var e;let{data:n}=(0,m.mj)(),t=null!==(e=null==n?void 0:n.configured)&&void 0!==e&&e;return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)(o.Z,{elevation:0,sx:{mb:4,p:3,background:e=>"linear-gradient(135deg, ".concat((0,c.Fq)(e.palette.secondary.main,.1)," 0%, ").concat((0,c.Fq)(e.palette.info.main,.1)," 100%)"),borderRadius:2,border:e=>"1px solid ".concat((0,c.Fq)(e.palette.secondary.main,.2)),display:"flex",justifyContent:"space-between",alignItems:"center"},children:[(0,r.jsxs)(i.Z,{sx:{display:"flex",alignItems:"center",gap:2},children:[(0,r.jsx)(i.Z,{sx:{display:"flex",alignItems:"center",justifyContent:"center",width:56,height:56,borderRadius:2,bgcolor:"secondary.main",color:"secondary.contrastText"},children:(0,r.jsx)(u.Z,{sx:{fontSize:32}})}),(0,r.jsxs)(i.Z,{children:[(0,r.jsx)(s.Z,{variant:"h4",component:"h1",fontWeight:"bold",children:"Backups"}),(0,r.jsx)(s.Z,{variant:"body1",color:"text.secondary",children:"Manage world backups and restore points"})]})]}),(0,r.jsx)(L,{disabled:!t})]}),(0,r.jsxs)(a.Z,{spacing:3,children:[(0,r.jsx)(j,{}),t&&(0,r.jsx)(Q,{})]})]})}},42936:function(e,n,t){"use strict";async function r(e){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},t={...n.headers};n.body&&(t["Content-Type"]="application/json");let r=await fetch(e,{...n,headers:t});if(!r.ok){let e=await r.json().catch(()=>({error:"UnknownError",message:r.statusText})),n=Error(e.message);throw n.statusCode=r.status,n.code=e.error,n}return r.json()}t.d(n,{SC:function(){return r}})},92666:function(e,n,t){"use strict";t.d(n,{$t:function(){return S},Aw:function(){return d},Fv:function(){return f},Hq:function(){return u},Hy:function(){return c},MH:function(){return v},Sr:function(){return x},_I:function(){return h},c5:function(){return C},g2:function(){return j},gx:function(){return Z},hy:function(){return y},iC:function(){return p},jM:function(){return l},mj:function(){return b},nq:function(){return m},nv:function(){return g},s8:function(){return k},x$:function(){return a}});var r=t(5632),s=t(58919),i=t(20367),o=t(42936);function a(){return(0,r.a)({queryKey:["servers"],queryFn:()=>(0,o.SC)("/api/servers"),refetchInterval:6e4})}function c(e,n){return(0,r.a)({queryKey:["servers",e],queryFn:()=>(0,o.SC)("/api/servers/".concat(encodeURIComponent(e))),enabled:(null==n?void 0:n.enabled)!==!1&&!!e,refetchInterval:3e4})}function u(){let e=(0,s.NL)();return(0,i.D)({mutationFn:e=>{let{name:n,force:t}=e;return(0,o.SC)("/api/servers/".concat(encodeURIComponent(n)).concat(t?"?force=true":""),{method:"DELETE"})},onSuccess:()=>{e.invalidateQueries({queryKey:["servers"]})}})}function l(){let e=(0,s.NL)();return(0,i.D)({mutationFn:e=>(0,o.SC)("/api/servers/".concat(encodeURIComponent(e),"/start"),{method:"POST"}),onSuccess:(n,t)=>{e.invalidateQueries({queryKey:["servers"]}),e.invalidateQueries({queryKey:["servers",t]})}})}function d(){let e=(0,s.NL)();return(0,i.D)({mutationFn:e=>(0,o.SC)("/api/servers/".concat(encodeURIComponent(e),"/stop"),{method:"POST"}),onSuccess:(n,t)=>{e.invalidateQueries({queryKey:["servers"]}),e.invalidateQueries({queryKey:["servers",t]})}})}function h(){let e=(0,s.NL)();return(0,i.D)({mutationFn:e=>(0,o.SC)("/api/servers/".concat(encodeURIComponent(e),"/restart"),{method:"POST"}),onSuccess:(n,t)=>{e.invalidateQueries({queryKey:["servers"]}),e.invalidateQueries({queryKey:["servers",t]})}})}function x(){return(0,r.a)({queryKey:["worlds"],queryFn:()=>(0,o.SC)("/api/worlds"),refetchInterval:3e4})}function y(){let e=(0,s.NL)();return(0,i.D)({mutationFn:e=>(0,o.SC)("/api/worlds",{method:"POST",body:JSON.stringify(e)}),onSuccess:()=>{e.invalidateQueries({queryKey:["worlds"]})}})}function m(){let e=(0,s.NL)();return(0,i.D)({mutationFn:e=>{let{worldName:n,serverName:t}=e;return(0,o.SC)("/api/worlds/".concat(encodeURIComponent(n),"/assign"),{method:"POST",body:JSON.stringify({serverName:t})})},onSuccess:()=>{e.invalidateQueries({queryKey:["worlds"]}),e.invalidateQueries({queryKey:["servers"]})}})}function j(){let e=(0,s.NL)();return(0,i.D)({mutationFn:e=>{let{worldName:n,force:t}=e;return(0,o.SC)("/api/worlds/".concat(encodeURIComponent(n),"/release").concat(t?"?force=true":""),{method:"POST"})},onSuccess:()=>{e.invalidateQueries({queryKey:["worlds"]})}})}function f(){let e=(0,s.NL)();return(0,i.D)({mutationFn:e=>{let{name:n,force:t}=e;return(0,o.SC)("/api/worlds/".concat(encodeURIComponent(n)).concat(t?"?force=true":""),{method:"DELETE"})},onSuccess:()=>{e.invalidateQueries({queryKey:["worlds"]})}})}function p(e,n){return(0,r.a)({queryKey:["servers",e,"config"],queryFn:()=>(0,o.SC)("/api/servers/".concat(encodeURIComponent(e),"/config")),enabled:(null==n?void 0:n.enabled)!==!1&&!!e})}function v(){let e=(0,s.NL)();return(0,i.D)({mutationFn:e=>{let{serverName:n,config:t}=e;return(0,o.SC)("/api/servers/".concat(encodeURIComponent(n),"/config"),{method:"PATCH",body:JSON.stringify(t)})},onSuccess:(n,t)=>{let{serverName:r}=t;e.invalidateQueries({queryKey:["servers",r,"config"]}),e.invalidateQueries({queryKey:["servers",r]})}})}function Z(){let e=(0,s.NL)();return(0,i.D)({mutationFn:e=>(0,o.SC)("/api/servers/".concat(encodeURIComponent(e),"/world/reset"),{method:"POST"}),onSuccess:(n,t)=>{e.invalidateQueries({queryKey:["servers",t]}),e.invalidateQueries({queryKey:["worlds"]})}})}function g(){return(0,r.a)({queryKey:["router-status"],queryFn:()=>(0,o.SC)("/api/router/status"),refetchInterval:3e4})}function b(){return(0,r.a)({queryKey:["backup-status"],queryFn:()=>(0,o.SC)("/api/backup"),refetchInterval:6e4})}function S(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:20;return(0,r.a)({queryKey:["backup-history",e],queryFn:()=>(0,o.SC)("/api/backup/history?limit=".concat(e)),refetchInterval:6e4})}function C(){let e=(0,s.NL)();return(0,i.D)({mutationFn:e=>{let{message:n}=e;return(0,o.SC)("/api/backup",{method:"POST",body:JSON.stringify({message:n})})},onSuccess:()=>{e.invalidateQueries({queryKey:["backup-status"]}),e.invalidateQueries({queryKey:["backup-history"]})}})}function k(){let e=(0,s.NL)();return(0,i.D)({mutationFn:e=>(0,o.SC)("/api/backup/restore",{method:"POST",body:JSON.stringify({commitHash:e})}),onSuccess:()=>{e.invalidateQueries({queryKey:["worlds"]}),e.invalidateQueries({queryKey:["servers"]})}})}}},function(e){e.O(0,[6812,9760,6758,680,1668,7436,1071,540,4416,7359,880,9654,892,3669,2757,1744],function(){return e(e.s=1366)}),_N_E=e.O()}]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[2248],{12121:function(e,t,s){Promise.resolve().then(s.bind(s,61714))},61714:function(e,t,s){"use strict";s.r(t),s.d(t,{default:function(){return R}});var r=s(94655),i=s(69899),n=s(76492),a=s(7281),l=s(31317),o=s(84840),c=s(628),d=s(41565),x=s(10721),h=s(25065),m=s(91179),j=s(11767),u=s(53832),p=s(30164),Z=s(92666),g=s(59104);function f(e){let{title:t,value:s,icon:i,color:n="primary",description:o}=e,x={primary:"#1bd96a",success:"#22c55e",info:"#3b82f6",secondary:"#7c3aed"};return(0,r.jsx)(c.Z,{"data-testid":"stat-card",sx:{height:"100%",position:"relative",overflow:"hidden","&::before":{content:'""',position:"absolute",top:0,left:0,right:0,height:"4px",background:x[n]}},children:(0,r.jsxs)(d.Z,{children:[(0,r.jsxs)(a.Z,{sx:{display:"flex",alignItems:"center",justifyContent:"space-between",mb:2},children:[(0,r.jsx)(l.Z,{variant:"body2",color:"text.secondary",sx:{fontWeight:500},children:t}),i&&(0,r.jsx)(a.Z,{sx:{color:x[n],opacity:.8},children:i})]}),(0,r.jsx)(l.Z,{variant:"h3",component:"div",sx:{fontWeight:700,color:"text.primary",mb:o?1:0},children:s}),o&&(0,r.jsx)(l.Z,{variant:"caption",color:"text.secondary",children:o})]})})}var v=s(98406),y=s(93017),b=s(25333),w=s(46725),C=s(8690),S=s(31358);function z(e){let{servers:t,statusMap:s={},isLoading:i,maxItems:n,showViewAll:o=!1,onServerClick:x}=e,h=(0,S.x)(),m=n?t.slice(0,n):t,j=e=>{x?x(e):h.push("/servers/".concat(e))},u=e=>{switch(e){case"running":return"success";case"stopped":case"exited":return"error";case"created":return"warning";default:return"default"}},p=e=>{switch(e){case"healthy":return"success";case"unhealthy":return"error";case"starting":return"warning";default:return"default"}};return i?(0,r.jsxs)(c.Z,{children:[(0,r.jsx)(v.Z,{title:"Servers"}),(0,r.jsx)(d.Z,{children:(0,r.jsx)(a.Z,{sx:{display:"flex",justifyContent:"center",py:4},children:(0,r.jsx)(y.Z,{})})})]}):0===t.length?(0,r.jsxs)(c.Z,{children:[(0,r.jsx)(v.Z,{title:"Servers"}),(0,r.jsx)(d.Z,{children:(0,r.jsx)(l.Z,{color:"text.secondary",align:"center",children:"No servers found. Create your first server to get started."})})]}):(0,r.jsxs)(c.Z,{children:[(0,r.jsx)(v.Z,{title:"Servers",action:o&&t.length>(n||0)?(0,r.jsxs)(w.default,{href:"/servers",onClick:()=>(0,C.Av)(),style:{textDecoration:"none",color:"inherit",fontSize:"0.875rem"},children:["View All (",t.length,")"]}):null}),(0,r.jsx)(d.Z,{children:(0,r.jsx)(a.Z,{sx:{display:"flex",flexDirection:"column",gap:2},children:m.map(e=>{let t=s[e.name],i=(null==t?void 0:t.status)||e.status,n=(null==t?void 0:t.health)||e.health;return(0,r.jsx)(a.Z,{role:"button",onClick:()=>j(e.name),sx:{p:2,borderRadius:1,border:"1px solid",borderColor:"divider",cursor:"pointer",transition:"all 0.2s","&:hover":{borderColor:"primary.main",backgroundColor:"action.hover"}},children:(0,r.jsxs)(a.Z,{sx:{display:"flex",justifyContent:"space-between",alignItems:"center"},children:[(0,r.jsxs)(a.Z,{children:[(0,r.jsx)(l.Z,{variant:"subtitle1",fontWeight:600,children:e.name}),(0,r.jsx)(l.Z,{variant:"caption",color:"text.secondary",children:e.hostname})]}),(0,r.jsxs)(a.Z,{sx:{display:"flex",gap:1},children:[(0,r.jsx)(b.Z,{label:i,color:u(i),size:"small"}),"none"!==n&&(0,r.jsx)(b.Z,{label:n,color:p(n),size:"small",variant:"outlined"})]})]})},e.name)})})})]})}var k=s(35106),P=s(41261);function A(e){let{maxVersions:t=2,title:s="Recent Updates"}=e,[i,n]=(0,k.useState)([]),[o,h]=(0,k.useState)(!0),[m,j]=(0,k.useState)(null);return((0,k.useEffect)(()=>{(async function(){try{let e=await fetch("https://api.github.com/repos/smallmiro/minecraft-server-manager/contents/CHANGELOG.md",{headers:{Accept:"application/vnd.github.v3+json"}});if(!e.ok)throw Error("Failed to fetch changelog");let s=await e.json(),r=atob(s.content),i=function(e,t){let s=[],r=e.split("\n"),i=null,n="added";for(let e of r){let r=e.match(/^## \[([^\]]+)\] - (\d{4}-\d{2}-\d{2})/);if(r){if(i&&(s.push(i),s.length>=t))break;i={version:r[1],date:r[2],items:[]};continue}let a=e.match(/^### (Added|Fixed|Changed)/i);if(a){n=a[1].toLowerCase();continue}let l=e.match(/^- \*\*([^*]+)\*\*\s*[-–]?\s*(.*)$/);l&&i&&i.items.push({type:n,message:l[1].trim()})}return i&&s.length<t&&s.push(i),s}(r,t);n(i)}catch(e){j(e instanceof Error?e.message:"Unknown error")}finally{h(!1)}})()},[t]),o)?(0,r.jsxs)(c.Z,{children:[(0,r.jsx)(v.Z,{title:s}),(0,r.jsxs)(d.Z,{children:[(0,r.jsx)(x.Z,{variant:"text",width:"60%",height:28}),(0,r.jsx)(x.Z,{variant:"text",width:"80%"}),(0,r.jsx)(x.Z,{variant:"text",width:"70%"}),(0,r.jsxs)(a.Z,{sx:{mt:2},children:[(0,r.jsx)(x.Z,{variant:"text",width:"60%",height:28}),(0,r.jsx)(x.Z,{variant:"text",width:"75%"})]})]})]}):m?(0,r.jsxs)(c.Z,{children:[(0,r.jsx)(v.Z,{title:s}),(0,r.jsx)(d.Z,{children:(0,r.jsx)(l.Z,{color:"text.secondary",align:"center",children:"Unable to load updates"})})]}):(0,r.jsxs)(c.Z,{children:[(0,r.jsx)(v.Z,{title:s,action:(0,r.jsx)(P.Z,{href:"https://github.com/smallmiro/minecraft-server-manager/blob/develop/CHANGELOG.md",target:"_blank",rel:"noopener",sx:{fontSize:13,mr:1},children:"View all"})}),(0,r.jsx)(d.Z,{sx:{pt:0},children:i.map((e,t)=>{let s=e.items.filter(e=>"added"===e.type),n=e.items.filter(e=>"fixed"===e.type),o=e.items.filter(e=>"changed"===e.type);return(0,r.jsxs)(a.Z,{sx:{mb:t<i.length-1?2.5:0,pb:t<i.length-1?2:0,borderBottom:t<i.length-1?"1px solid":"none",borderColor:"divider"},children:[(0,r.jsxs)(l.Z,{variant:"subtitle2",sx:{fontWeight:600,color:"primary.main",mb:1},children:["[",e.version,"] - ",e.date]}),s.length>0&&(0,r.jsxs)(a.Z,{sx:{mb:1},children:[(0,r.jsx)(b.Z,{label:"Added",size:"small",sx:{bgcolor:"success.main",color:"success.contrastText",fontSize:11,height:20,mb:.5}}),s.map((e,t)=>(0,r.jsxs)(l.Z,{variant:"body2",sx:{color:"text.secondary",pl:1},children:["• ",e.message]},t))]}),n.length>0&&(0,r.jsxs)(a.Z,{sx:{mb:1},children:[(0,r.jsx)(b.Z,{label:"Fixed",size:"small",sx:{bgcolor:"warning.main",color:"warning.contrastText",fontSize:11,height:20,mb:.5}}),n.map((e,t)=>(0,r.jsxs)(l.Z,{variant:"body2",sx:{color:"text.secondary",pl:1},children:["• ",e.message]},t))]}),o.length>0&&(0,r.jsxs)(a.Z,{children:[(0,r.jsx)(b.Z,{label:"Changed",size:"small",sx:{bgcolor:"info.main",color:"info.contrastText",fontSize:11,height:20,mb:.5}}),o.map((e,t)=>(0,r.jsxs)(l.Z,{variant:"body2",sx:{color:"text.secondary",pl:1},children:["• ",e.message]},t))]})]},e.version)})})]})}var I=s(30417),F=s(90158),T=s(58347),D=s(73424),E=s(95511),N=s(26577),W=s(56813),L=s(26892),M=s(84509);function O(e){var t;let{maxItems:s=5}=e,{data:i,isLoading:n,error:o}=(0,M.oL)(s),h=null!==(t=null==i?void 0:i.logs)&&void 0!==t?t:[];return(0,r.jsxs)(c.Z,{children:[(0,r.jsx)(v.Z,{title:"Recent Activity",action:(0,r.jsx)(I.Z,{component:w.default,href:"/audit-logs",size:"small",endIcon:(0,r.jsx)(N.Z,{}),sx:{textTransform:"none"},children:"View All"})}),(0,r.jsx)(d.Z,{sx:{pt:0},children:n?(0,r.jsx)(F.Z,{sx:{py:0},children:[...Array(s)].map((e,t)=>(0,r.jsx)(T.ZP,{sx:{px:0,py:1.5},children:(0,r.jsx)(D.Z,{primary:(0,r.jsxs)(a.Z,{sx:{display:"flex",gap:1},children:[(0,r.jsx)(x.Z,{variant:"rounded",width:60,height:24}),(0,r.jsx)(x.Z,{variant:"text",width:80}),(0,r.jsx)(x.Z,{variant:"text",width:60})]}),secondary:(0,r.jsx)(x.Z,{variant:"text",width:50})})},t))}):o?(0,r.jsx)(l.Z,{color:"text.secondary",align:"center",children:"Failed to load recent activity"}):0===h.length?(0,r.jsx)(l.Z,{color:"text.secondary",align:"center",sx:{py:2},children:"No recent activity"}):(0,r.jsx)(F.Z,{sx:{py:0},children:h.map(e=>{var t;return(0,r.jsx)(T.ZP,{sx:{px:0,py:1.5,"&:not(:last-child)":{borderBottom:"1px solid",borderColor:"divider"}},children:(0,r.jsx)(D.Z,{primary:(0,r.jsxs)(a.Z,{sx:{display:"flex",alignItems:"center",gap:1,flexWrap:"wrap"},children:[(0,r.jsx)(W.I,{action:e.action,size:"small"}),(0,r.jsx)(l.Z,{variant:"body2",sx:{fontWeight:500},children:e.targetName}),(0,r.jsxs)(l.Z,{variant:"body2",color:"text.secondary",children:["by ",e.actor.replace("api:","").replace("cli:","")]}),"failure"===e.status&&(0,r.jsx)(L.c,{status:e.status,size:"small"})]}),secondary:(0,r.jsx)(E.Z,{title:(t=e.timestamp,new Intl.DateTimeFormat(void 0,{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",timeZoneName:"short"}).format(new Date(t))),arrow:!0,children:(0,r.jsx)(l.Z,{variant:"caption",component:"span",color:"text.disabled",children:function(e){let t=new Date,s=new Date(e),r=Math.floor((t.getTime()-s.getTime())/6e4),i=Math.floor(r/60);return r<1?"just now":r<60?"".concat(r,"m ago"):i<24?"".concat(i,"h ago"):"".concat(Math.floor(i/24),"d ago")}(e.timestamp)})})})},e.id)})})})]})}function R(){let{data:e,isLoading:t}=(0,Z.x$)(),{data:s,isLoading:v}=(0,Z.Sr)(),{statusMap:y}=(0,g.d)(),b=t||v,w=(null==e?void 0:e.total)||0,C=(null==e?void 0:e.servers.filter(e=>{let t=y[e.name];return"running"===((null==t?void 0:t.status)||e.status)}).length)||0,S=(null==s?void 0:s.total)||0;return b?(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(i.Z,{elevation:0,sx:{mb:4,p:3,background:e=>"linear-gradient(135deg, ".concat((0,n.Fq)(e.palette.secondary.main,.1)," 0%, ").concat((0,n.Fq)(e.palette.primary.main,.1)," 100%)"),borderRadius:2,border:e=>"1px solid ".concat((0,n.Fq)(e.palette.secondary.main,.2))},children:(0,r.jsxs)(a.Z,{sx:{display:"flex",alignItems:"center",gap:2},children:[(0,r.jsx)(a.Z,{sx:{display:"flex",alignItems:"center",justifyContent:"center",width:56,height:56,borderRadius:2,bgcolor:"primary.main",color:"primary.contrastText"},children:(0,r.jsx)(h.Z,{sx:{fontSize:32}})}),(0,r.jsxs)(a.Z,{children:[(0,r.jsx)(l.Z,{variant:"h4",component:"h1",fontWeight:"bold",children:"Dashboard"}),(0,r.jsx)(l.Z,{variant:"body1",color:"text.secondary",children:"Overview of your Minecraft server infrastructure"})]})]})}),(0,r.jsx)(o.ZP,{container:!0,spacing:3,sx:{mb:4},children:[0,1,2,3].map(e=>(0,r.jsx)(o.ZP,{item:!0,xs:12,sm:6,md:3,children:(0,r.jsx)(c.Z,{sx:{height:"100%",position:"relative",overflow:"hidden","&::before":{content:'""',position:"absolute",top:0,left:0,right:0,height:"4px",background:"grey.300"}},children:(0,r.jsxs)(d.Z,{children:[(0,r.jsxs)(a.Z,{sx:{display:"flex",alignItems:"center",justifyContent:"space-between",mb:2},children:[(0,r.jsx)(x.Z,{variant:"text",width:"60%"}),(0,r.jsx)(x.Z,{variant:"circular",width:32,height:32})]}),(0,r.jsx)(x.Z,{variant:"text",width:"40%",height:48}),(0,r.jsx)(x.Z,{variant:"text",width:"70%"})]})})},e))}),(0,r.jsxs)(o.ZP,{container:!0,spacing:3,children:[(0,r.jsx)(o.ZP,{item:!0,xs:12,lg:7,children:(0,r.jsx)(c.Z,{children:(0,r.jsxs)(d.Z,{children:[(0,r.jsx)(x.Z,{variant:"text",width:"30%",height:32,sx:{mb:2}}),[0,1,2,3,4].map(e=>(0,r.jsxs)(a.Z,{sx:{display:"flex",alignItems:"center",gap:2,py:1.5,borderBottom:"1px solid",borderColor:"divider"},children:[(0,r.jsx)(x.Z,{variant:"circular",width:10,height:10}),(0,r.jsx)(x.Z,{variant:"text",width:"25%"}),(0,r.jsx)(x.Z,{variant:"rounded",width:60,height:24,sx:{ml:"auto"}})]},e))]})})}),(0,r.jsx)(o.ZP,{item:!0,xs:12,lg:5,children:(0,r.jsxs)(a.Z,{sx:{display:"flex",flexDirection:"column",gap:3},children:[(0,r.jsx)(c.Z,{children:(0,r.jsxs)(d.Z,{children:[(0,r.jsx)(x.Z,{variant:"text",width:"40%",height:32,sx:{mb:2}}),[0,1,2,3].map(e=>(0,r.jsxs)(a.Z,{sx:{display:"flex",gap:1.5,py:1,borderBottom:"1px solid",borderColor:"divider"},children:[(0,r.jsx)(x.Z,{variant:"circular",width:24,height:24}),(0,r.jsxs)(a.Z,{sx:{flex:1},children:[(0,r.jsx)(x.Z,{variant:"text",width:"80%"}),(0,r.jsx)(x.Z,{variant:"text",width:"50%"})]})]},e))]})}),(0,r.jsx)(c.Z,{children:(0,r.jsxs)(d.Z,{children:[(0,r.jsx)(x.Z,{variant:"text",width:"35%",height:32,sx:{mb:2}}),[0,1].map(e=>(0,r.jsxs)(a.Z,{sx:{py:1,borderBottom:"1px solid",borderColor:"divider"},children:[(0,r.jsx)(x.Z,{variant:"text",width:"60%"}),(0,r.jsx)(x.Z,{variant:"text",width:"90%"})]},e))]})})]})})]})]}):(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(i.Z,{elevation:0,sx:{mb:4,p:3,background:e=>"linear-gradient(135deg, ".concat((0,n.Fq)(e.palette.secondary.main,.1)," 0%, ").concat((0,n.Fq)(e.palette.primary.main,.1)," 100%)"),borderRadius:2,border:e=>"1px solid ".concat((0,n.Fq)(e.palette.secondary.main,.2))},children:(0,r.jsxs)(a.Z,{sx:{display:"flex",alignItems:"center",gap:2},children:[(0,r.jsx)(a.Z,{sx:{display:"flex",alignItems:"center",justifyContent:"center",width:56,height:56,borderRadius:2,bgcolor:"secondary.main",color:"secondary.contrastText"},children:(0,r.jsx)(h.Z,{sx:{fontSize:32}})}),(0,r.jsxs)(a.Z,{children:[(0,r.jsx)(l.Z,{variant:"h4",component:"h1",fontWeight:"bold",children:"Dashboard"}),(0,r.jsx)(l.Z,{variant:"body1",color:"text.secondary",children:"Overview of your Minecraft server infrastructure"})]})]})}),(0,r.jsxs)(o.ZP,{container:!0,spacing:3,sx:{mb:4},children:[(0,r.jsx)(o.ZP,{item:!0,xs:12,sm:6,md:3,children:(0,r.jsx)(f,{title:"Total Servers",value:w,icon:(0,r.jsx)(m.Z,{fontSize:"large"}),color:"primary",description:"All configured servers"})}),(0,r.jsx)(o.ZP,{item:!0,xs:12,sm:6,md:3,children:(0,r.jsx)(f,{title:"Online Servers",value:C,icon:(0,r.jsx)(j.Z,{fontSize:"large"}),color:"success",description:"Currently running"})}),(0,r.jsx)(o.ZP,{item:!0,xs:12,sm:6,md:3,children:(0,r.jsx)(f,{title:"Total Players",value:0,icon:(0,r.jsx)(u.Z,{fontSize:"large"}),color:"info",description:"Across all servers"})}),(0,r.jsx)(o.ZP,{item:!0,xs:12,sm:6,md:3,children:(0,r.jsx)(f,{title:"Total Worlds",value:S,icon:(0,r.jsx)(p.Z,{fontSize:"large"}),color:"secondary",description:"Available worlds"})})]}),(0,r.jsxs)(o.ZP,{container:!0,spacing:3,children:[(0,r.jsx)(o.ZP,{item:!0,xs:12,lg:7,children:(0,r.jsx)(z,{servers:(null==e?void 0:e.servers)||[],statusMap:y,isLoading:t,maxItems:5,showViewAll:!0})}),(0,r.jsx)(o.ZP,{item:!0,xs:12,lg:5,children:(0,r.jsxs)(a.Z,{sx:{display:"flex",flexDirection:"column",gap:3},children:[(0,r.jsx)(O,{maxItems:5}),(0,r.jsx)(A,{maxVersions:2})]})})]})]})}},59104:function(e,t,s){"use strict";s.d(t,{d:function(){return n}});var r=s(35106),i=s(93757);function n(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{onStatusChange:t,enabled:s=!0,reconnectInterval:n=3e3}=e,[a,l]=(0,r.useState)({}),o=(0,r.useCallback)(e=>{if("server-status"===e.type){let{serverName:s,status:r,health:i,timestamp:n}=e.data;l(e=>({...e,[s]:{status:r,health:i,timestamp:n}})),null==t||t(s,r,i)}},[t]),{isConnected:c,reconnect:d,retryCount:x}=(0,i.D)({url:"/api/sse/servers-status",onMessage:o,enabled:s,reconnectInterval:n}),h=(0,r.useCallback)(e=>a[e]||null,[a]);return(0,r.useEffect)(()=>{s||l({})},[s]),{statusMap:a,getServerStatus:h,isConnected:c,reconnect:d,retryCount:x}}}},function(e){e.O(0,[6812,9760,6758,1668,540,4416,9810,7073,55,8347,4597,2537,3669,2757,1744],function(){return e(e.s=12121)}),_N_E=e.O()}]);
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[2248],{12121:function(e,t,s){Promise.resolve().then(s.bind(s,61714))},61714:function(e,t,s){"use strict";s.r(t),s.d(t,{default:function(){return R}});var r=s(94655),i=s(69899),n=s(76492),a=s(7281),l=s(31317),o=s(84840),c=s(628),d=s(41565),x=s(10721),h=s(25065),m=s(91179),j=s(11767),u=s(53832),p=s(30164),Z=s(92666),g=s(59104);function f(e){let{title:t,value:s,icon:i,color:n="primary",description:o}=e,x={primary:"#1bd96a",success:"#22c55e",info:"#3b82f6",secondary:"#7c3aed"};return(0,r.jsx)(c.Z,{"data-testid":"stat-card",sx:{height:"100%",position:"relative",overflow:"hidden","&::before":{content:'""',position:"absolute",top:0,left:0,right:0,height:"4px",background:x[n]}},children:(0,r.jsxs)(d.Z,{children:[(0,r.jsxs)(a.Z,{sx:{display:"flex",alignItems:"center",justifyContent:"space-between",mb:2},children:[(0,r.jsx)(l.Z,{variant:"body2",color:"text.secondary",sx:{fontWeight:500},children:t}),i&&(0,r.jsx)(a.Z,{sx:{color:x[n],opacity:.8},children:i})]}),(0,r.jsx)(l.Z,{variant:"h3",component:"div",sx:{fontWeight:700,color:"text.primary",mb:o?1:0},children:s}),o&&(0,r.jsx)(l.Z,{variant:"caption",color:"text.secondary",children:o})]})})}var v=s(98406),y=s(93017),b=s(25333),w=s(46725),C=s(8690),S=s(31358);function z(e){let{servers:t,statusMap:s={},isLoading:i,maxItems:n,showViewAll:o=!1,onServerClick:x}=e,h=(0,S.x)(),m=n?t.slice(0,n):t,j=e=>{x?x(e):h.push("/servers/".concat(e))},u=e=>{switch(e){case"running":return"success";case"stopped":case"exited":return"error";case"created":return"warning";default:return"default"}},p=e=>{switch(e){case"healthy":return"success";case"unhealthy":return"error";case"starting":return"warning";default:return"default"}};return i?(0,r.jsxs)(c.Z,{children:[(0,r.jsx)(v.Z,{title:"Servers"}),(0,r.jsx)(d.Z,{children:(0,r.jsx)(a.Z,{sx:{display:"flex",justifyContent:"center",py:4},children:(0,r.jsx)(y.Z,{})})})]}):0===t.length?(0,r.jsxs)(c.Z,{children:[(0,r.jsx)(v.Z,{title:"Servers"}),(0,r.jsx)(d.Z,{children:(0,r.jsx)(l.Z,{color:"text.secondary",align:"center",children:"No servers found. Create your first server to get started."})})]}):(0,r.jsxs)(c.Z,{children:[(0,r.jsx)(v.Z,{title:"Servers",action:o&&t.length>(n||0)?(0,r.jsxs)(w.default,{href:"/servers",onClick:()=>(0,C.Av)(),style:{textDecoration:"none",color:"inherit",fontSize:"0.875rem"},children:["View All (",t.length,")"]}):null}),(0,r.jsx)(d.Z,{children:(0,r.jsx)(a.Z,{sx:{display:"flex",flexDirection:"column",gap:2},children:m.map(e=>{let t=s[e.name],i=(null==t?void 0:t.status)||e.status,n=(null==t?void 0:t.health)||e.health;return(0,r.jsx)(a.Z,{role:"button",onClick:()=>j(e.name),sx:{p:2,borderRadius:1,border:"1px solid",borderColor:"divider",cursor:"pointer",transition:"all 0.2s","&:hover":{borderColor:"primary.main",backgroundColor:"action.hover"}},children:(0,r.jsxs)(a.Z,{sx:{display:"flex",justifyContent:"space-between",alignItems:"center"},children:[(0,r.jsxs)(a.Z,{children:[(0,r.jsx)(l.Z,{variant:"subtitle1",fontWeight:600,children:e.name}),(0,r.jsx)(l.Z,{variant:"caption",color:"text.secondary",children:e.hostname})]}),(0,r.jsxs)(a.Z,{sx:{display:"flex",gap:1},children:[(0,r.jsx)(b.Z,{label:i,color:u(i),size:"small"}),"none"!==n&&(0,r.jsx)(b.Z,{label:n,color:p(n),size:"small",variant:"outlined"})]})]})},e.name)})})})]})}var k=s(35106),P=s(41261);function A(e){let{maxVersions:t=2,title:s="Recent Updates"}=e,[i,n]=(0,k.useState)([]),[o,h]=(0,k.useState)(!0),[m,j]=(0,k.useState)(null);return((0,k.useEffect)(()=>{(async function(){try{let e=await fetch("https://api.github.com/repos/smallmiro/minecraft-server-manager/contents/CHANGELOG.md",{headers:{Accept:"application/vnd.github.v3+json"}});if(!e.ok)throw Error("Failed to fetch changelog");let s=await e.json(),r=atob(s.content),i=function(e,t){let s=[],r=e.split("\n"),i=null,n="added";for(let e of r){let r=e.match(/^## \[([^\]]+)\] - (\d{4}-\d{2}-\d{2})/);if(r){if(i&&(s.push(i),s.length>=t))break;i={version:r[1],date:r[2],items:[]};continue}let a=e.match(/^### (Added|Fixed|Changed)/i);if(a){n=a[1].toLowerCase();continue}let l=e.match(/^- \*\*([^*]+)\*\*\s*[-–]?\s*(.*)$/);l&&i&&i.items.push({type:n,message:l[1].trim()})}return i&&s.length<t&&s.push(i),s}(r,t);n(i)}catch(e){j(e instanceof Error?e.message:"Unknown error")}finally{h(!1)}})()},[t]),o)?(0,r.jsxs)(c.Z,{children:[(0,r.jsx)(v.Z,{title:s}),(0,r.jsxs)(d.Z,{children:[(0,r.jsx)(x.Z,{variant:"text",width:"60%",height:28}),(0,r.jsx)(x.Z,{variant:"text",width:"80%"}),(0,r.jsx)(x.Z,{variant:"text",width:"70%"}),(0,r.jsxs)(a.Z,{sx:{mt:2},children:[(0,r.jsx)(x.Z,{variant:"text",width:"60%",height:28}),(0,r.jsx)(x.Z,{variant:"text",width:"75%"})]})]})]}):m?(0,r.jsxs)(c.Z,{children:[(0,r.jsx)(v.Z,{title:s}),(0,r.jsx)(d.Z,{children:(0,r.jsx)(l.Z,{color:"text.secondary",align:"center",children:"Unable to load updates"})})]}):(0,r.jsxs)(c.Z,{children:[(0,r.jsx)(v.Z,{title:s,action:(0,r.jsx)(P.Z,{href:"https://github.com/smallmiro/minecraft-server-manager/blob/develop/CHANGELOG.md",target:"_blank",rel:"noopener",sx:{fontSize:13,mr:1},children:"View all"})}),(0,r.jsx)(d.Z,{sx:{pt:0},children:i.map((e,t)=>{let s=e.items.filter(e=>"added"===e.type),n=e.items.filter(e=>"fixed"===e.type),o=e.items.filter(e=>"changed"===e.type);return(0,r.jsxs)(a.Z,{sx:{mb:t<i.length-1?2.5:0,pb:t<i.length-1?2:0,borderBottom:t<i.length-1?"1px solid":"none",borderColor:"divider"},children:[(0,r.jsxs)(l.Z,{variant:"subtitle2",sx:{fontWeight:600,color:"primary.main",mb:1},children:["[",e.version,"] - ",e.date]}),s.length>0&&(0,r.jsxs)(a.Z,{sx:{mb:1},children:[(0,r.jsx)(b.Z,{label:"Added",size:"small",sx:{bgcolor:"success.main",color:"success.contrastText",fontSize:11,height:20,mb:.5}}),s.map((e,t)=>(0,r.jsxs)(l.Z,{variant:"body2",sx:{color:"text.secondary",pl:1},children:["• ",e.message]},t))]}),n.length>0&&(0,r.jsxs)(a.Z,{sx:{mb:1},children:[(0,r.jsx)(b.Z,{label:"Fixed",size:"small",sx:{bgcolor:"warning.main",color:"warning.contrastText",fontSize:11,height:20,mb:.5}}),n.map((e,t)=>(0,r.jsxs)(l.Z,{variant:"body2",sx:{color:"text.secondary",pl:1},children:["• ",e.message]},t))]}),o.length>0&&(0,r.jsxs)(a.Z,{children:[(0,r.jsx)(b.Z,{label:"Changed",size:"small",sx:{bgcolor:"info.main",color:"info.contrastText",fontSize:11,height:20,mb:.5}}),o.map((e,t)=>(0,r.jsxs)(l.Z,{variant:"body2",sx:{color:"text.secondary",pl:1},children:["• ",e.message]},t))]})]},e.version)})})]})}var I=s(30417),F=s(90158),T=s(58347),D=s(73424),E=s(95511),N=s(26577),W=s(56813),L=s(26892),M=s(84509);function O(e){var t;let{maxItems:s=5}=e,{data:i,isLoading:n,error:o}=(0,M.oL)(s),h=null!==(t=null==i?void 0:i.logs)&&void 0!==t?t:[];return(0,r.jsxs)(c.Z,{children:[(0,r.jsx)(v.Z,{title:"Recent Activity",action:(0,r.jsx)(I.Z,{component:w.default,href:"/audit-logs",size:"small",endIcon:(0,r.jsx)(N.Z,{}),sx:{textTransform:"none"},children:"View All"})}),(0,r.jsx)(d.Z,{sx:{pt:0},children:n?(0,r.jsx)(F.Z,{sx:{py:0},children:[...Array(s)].map((e,t)=>(0,r.jsx)(T.ZP,{sx:{px:0,py:1.5},children:(0,r.jsx)(D.Z,{primary:(0,r.jsxs)(a.Z,{sx:{display:"flex",gap:1},children:[(0,r.jsx)(x.Z,{variant:"rounded",width:60,height:24}),(0,r.jsx)(x.Z,{variant:"text",width:80}),(0,r.jsx)(x.Z,{variant:"text",width:60})]}),secondary:(0,r.jsx)(x.Z,{variant:"text",width:50})})},t))}):o?(0,r.jsx)(l.Z,{color:"text.secondary",align:"center",children:"Failed to load recent activity"}):0===h.length?(0,r.jsx)(l.Z,{color:"text.secondary",align:"center",sx:{py:2},children:"No recent activity"}):(0,r.jsx)(F.Z,{sx:{py:0},children:h.map(e=>{var t;return(0,r.jsx)(T.ZP,{sx:{px:0,py:1.5,"&:not(:last-child)":{borderBottom:"1px solid",borderColor:"divider"}},children:(0,r.jsx)(D.Z,{primary:(0,r.jsxs)(a.Z,{sx:{display:"flex",alignItems:"center",gap:1,flexWrap:"wrap"},children:[(0,r.jsx)(W.I,{action:e.action,size:"small"}),(0,r.jsx)(l.Z,{variant:"body2",sx:{fontWeight:500},children:e.targetName}),(0,r.jsxs)(l.Z,{variant:"body2",color:"text.secondary",children:["by ",e.actor.replace("api:","").replace("cli:","")]}),"failure"===e.status&&(0,r.jsx)(L.c,{status:e.status,size:"small"})]}),secondary:(0,r.jsx)(E.Z,{title:(t=e.timestamp,new Intl.DateTimeFormat(void 0,{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",timeZoneName:"short"}).format(new Date(t))),arrow:!0,children:(0,r.jsx)(l.Z,{variant:"caption",component:"span",color:"text.disabled",children:function(e){let t=new Date,s=new Date(e),r=Math.floor((t.getTime()-s.getTime())/6e4),i=Math.floor(r/60);return r<1?"just now":r<60?"".concat(r,"m ago"):i<24?"".concat(i,"h ago"):"".concat(Math.floor(i/24),"d ago")}(e.timestamp)})})})},e.id)})})})]})}function R(){let{data:e,isLoading:t}=(0,Z.x$)(),{data:s,isLoading:v}=(0,Z.Sr)(),{statusMap:y}=(0,g.d)(),b=t||v,w=(null==e?void 0:e.total)||0,C=(null==e?void 0:e.servers.filter(e=>{let t=y[e.name];return"running"===((null==t?void 0:t.status)||e.status)}).length)||0,S=(null==s?void 0:s.total)||0;return b?(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(i.Z,{elevation:0,sx:{mb:4,p:3,background:e=>"linear-gradient(135deg, ".concat((0,n.Fq)(e.palette.secondary.main,.1)," 0%, ").concat((0,n.Fq)(e.palette.primary.main,.1)," 100%)"),borderRadius:2,border:e=>"1px solid ".concat((0,n.Fq)(e.palette.secondary.main,.2))},children:(0,r.jsxs)(a.Z,{sx:{display:"flex",alignItems:"center",gap:2},children:[(0,r.jsx)(a.Z,{sx:{display:"flex",alignItems:"center",justifyContent:"center",width:56,height:56,borderRadius:2,bgcolor:"primary.main",color:"primary.contrastText"},children:(0,r.jsx)(h.Z,{sx:{fontSize:32}})}),(0,r.jsxs)(a.Z,{children:[(0,r.jsx)(l.Z,{variant:"h4",component:"h1",fontWeight:"bold",children:"Dashboard"}),(0,r.jsx)(l.Z,{variant:"body1",color:"text.secondary",children:"Overview of your Minecraft server infrastructure"})]})]})}),(0,r.jsx)(o.ZP,{container:!0,spacing:3,sx:{mb:4},children:[0,1,2,3].map(e=>(0,r.jsx)(o.ZP,{item:!0,xs:12,sm:6,md:3,children:(0,r.jsx)(c.Z,{sx:{height:"100%",position:"relative",overflow:"hidden","&::before":{content:'""',position:"absolute",top:0,left:0,right:0,height:"4px",background:"grey.300"}},children:(0,r.jsxs)(d.Z,{children:[(0,r.jsxs)(a.Z,{sx:{display:"flex",alignItems:"center",justifyContent:"space-between",mb:2},children:[(0,r.jsx)(x.Z,{variant:"text",width:"60%"}),(0,r.jsx)(x.Z,{variant:"circular",width:32,height:32})]}),(0,r.jsx)(x.Z,{variant:"text",width:"40%",height:48}),(0,r.jsx)(x.Z,{variant:"text",width:"70%"})]})})},e))}),(0,r.jsxs)(o.ZP,{container:!0,spacing:3,children:[(0,r.jsx)(o.ZP,{item:!0,xs:12,lg:7,children:(0,r.jsx)(c.Z,{children:(0,r.jsxs)(d.Z,{children:[(0,r.jsx)(x.Z,{variant:"text",width:"30%",height:32,sx:{mb:2}}),[0,1,2,3,4].map(e=>(0,r.jsxs)(a.Z,{sx:{display:"flex",alignItems:"center",gap:2,py:1.5,borderBottom:"1px solid",borderColor:"divider"},children:[(0,r.jsx)(x.Z,{variant:"circular",width:10,height:10}),(0,r.jsx)(x.Z,{variant:"text",width:"25%"}),(0,r.jsx)(x.Z,{variant:"rounded",width:60,height:24,sx:{ml:"auto"}})]},e))]})})}),(0,r.jsx)(o.ZP,{item:!0,xs:12,lg:5,children:(0,r.jsxs)(a.Z,{sx:{display:"flex",flexDirection:"column",gap:3},children:[(0,r.jsx)(c.Z,{children:(0,r.jsxs)(d.Z,{children:[(0,r.jsx)(x.Z,{variant:"text",width:"40%",height:32,sx:{mb:2}}),[0,1,2,3].map(e=>(0,r.jsxs)(a.Z,{sx:{display:"flex",gap:1.5,py:1,borderBottom:"1px solid",borderColor:"divider"},children:[(0,r.jsx)(x.Z,{variant:"circular",width:24,height:24}),(0,r.jsxs)(a.Z,{sx:{flex:1},children:[(0,r.jsx)(x.Z,{variant:"text",width:"80%"}),(0,r.jsx)(x.Z,{variant:"text",width:"50%"})]})]},e))]})}),(0,r.jsx)(c.Z,{children:(0,r.jsxs)(d.Z,{children:[(0,r.jsx)(x.Z,{variant:"text",width:"35%",height:32,sx:{mb:2}}),[0,1].map(e=>(0,r.jsxs)(a.Z,{sx:{py:1,borderBottom:"1px solid",borderColor:"divider"},children:[(0,r.jsx)(x.Z,{variant:"text",width:"60%"}),(0,r.jsx)(x.Z,{variant:"text",width:"90%"})]},e))]})})]})})]})]}):(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(i.Z,{elevation:0,sx:{mb:4,p:3,background:e=>"linear-gradient(135deg, ".concat((0,n.Fq)(e.palette.secondary.main,.1)," 0%, ").concat((0,n.Fq)(e.palette.primary.main,.1)," 100%)"),borderRadius:2,border:e=>"1px solid ".concat((0,n.Fq)(e.palette.secondary.main,.2))},children:(0,r.jsxs)(a.Z,{sx:{display:"flex",alignItems:"center",gap:2},children:[(0,r.jsx)(a.Z,{sx:{display:"flex",alignItems:"center",justifyContent:"center",width:56,height:56,borderRadius:2,bgcolor:"secondary.main",color:"secondary.contrastText"},children:(0,r.jsx)(h.Z,{sx:{fontSize:32}})}),(0,r.jsxs)(a.Z,{children:[(0,r.jsx)(l.Z,{variant:"h4",component:"h1",fontWeight:"bold",children:"Dashboard"}),(0,r.jsx)(l.Z,{variant:"body1",color:"text.secondary",children:"Overview of your Minecraft server infrastructure"})]})]})}),(0,r.jsxs)(o.ZP,{container:!0,spacing:3,sx:{mb:4},children:[(0,r.jsx)(o.ZP,{item:!0,xs:12,sm:6,md:3,children:(0,r.jsx)(f,{title:"Total Servers",value:w,icon:(0,r.jsx)(m.Z,{fontSize:"large"}),color:"primary",description:"All configured servers"})}),(0,r.jsx)(o.ZP,{item:!0,xs:12,sm:6,md:3,children:(0,r.jsx)(f,{title:"Online Servers",value:C,icon:(0,r.jsx)(j.Z,{fontSize:"large"}),color:"success",description:"Currently running"})}),(0,r.jsx)(o.ZP,{item:!0,xs:12,sm:6,md:3,children:(0,r.jsx)(f,{title:"Total Players",value:0,icon:(0,r.jsx)(u.Z,{fontSize:"large"}),color:"info",description:"Across all servers"})}),(0,r.jsx)(o.ZP,{item:!0,xs:12,sm:6,md:3,children:(0,r.jsx)(f,{title:"Total Worlds",value:S,icon:(0,r.jsx)(p.Z,{fontSize:"large"}),color:"secondary",description:"Available worlds"})})]}),(0,r.jsxs)(o.ZP,{container:!0,spacing:3,children:[(0,r.jsx)(o.ZP,{item:!0,xs:12,lg:7,children:(0,r.jsx)(z,{servers:(null==e?void 0:e.servers)||[],statusMap:y,isLoading:t,maxItems:5,showViewAll:!0})}),(0,r.jsx)(o.ZP,{item:!0,xs:12,lg:5,children:(0,r.jsxs)(a.Z,{sx:{display:"flex",flexDirection:"column",gap:3},children:[(0,r.jsx)(O,{maxItems:5}),(0,r.jsx)(A,{maxVersions:2})]})})]})]})}},59104:function(e,t,s){"use strict";s.d(t,{d:function(){return n}});var r=s(35106),i=s(93757);function n(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{onStatusChange:t,enabled:s=!0,reconnectInterval:n=3e3}=e,[a,l]=(0,r.useState)({}),o=(0,r.useCallback)(e=>{if("server-status"===e.type){let{serverName:s,status:r,health:i,timestamp:n}=e.data;l(e=>({...e,[s]:{status:r,health:i,timestamp:n}})),null==t||t(s,r,i)}},[t]),{isConnected:c,reconnect:d,retryCount:x}=(0,i.D)({url:"/api/sse/servers-status",onMessage:o,enabled:s,reconnectInterval:n}),h=(0,r.useCallback)(e=>a[e]||null,[a]);return(0,r.useEffect)(()=>{s||l({})},[s]),{statusMap:a,getServerStatus:h,isConnected:c,reconnect:d,retryCount:x}}}},function(e){e.O(0,[6812,9760,6758,1668,540,4416,521,5511,7359,55,8347,2777,2537,3669,2757,1744],function(){return e(e.s=12121)}),_N_E=e.O()}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[4095],{16387:function(e,r,t){Promise.resolve().then(t.bind(t,6453))},6453:function(e,r,t){"use strict";t.r(r),t.d(r,{default:function(){return B}});var n=t(94655),i=t(35106),a=t(7281),s=t(74228),l=t(46725),o=t(56275),c=t(62108),d=t(79983),x=t(31317),h=t(78765),m=t(90158),u=t(58347),p=t(49954),f=t(17820),g=t(73424),b=t(61505),j=t(71185),y=t(76176),v=t(27171),Z=t(35847),w=t(29983),C=t(80620),k=t(84974),S=t(34675),P=t(85480),z=t(64779);function I(e){return(0,n.jsxs)(z.Z,{...e,viewBox:"0 0 32 32",children:[(0,n.jsx)("rect",{width:"32",height:"32",fill:"#5DA840"}),(0,n.jsx)("rect",{x:"4",y:"8",width:"8",height:"8",fill:"#000"}),(0,n.jsx)("rect",{x:"20",y:"8",width:"8",height:"8",fill:"#000"}),(0,n.jsx)("rect",{x:"12",y:"16",width:"8",height:"4",fill:"#000"}),(0,n.jsx)("rect",{x:"8",y:"20",width:"16",height:"8",fill:"#000"}),(0,n.jsx)("rect",{x:"8",y:"28",width:"4",height:"4",fill:"#000"}),(0,n.jsx)("rect",{x:"20",y:"28",width:"4",height:"4",fill:"#000"}),(0,n.jsx)("rect",{x:"0",y:"0",width:"4",height:"4",fill:"#4A9030",opacity:"0.5"}),(0,n.jsx)("rect",{x:"8",y:"4",width:"4",height:"4",fill:"#4A9030",opacity:"0.5"}),(0,n.jsx)("rect",{x:"24",y:"0",width:"4",height:"4",fill:"#4A9030",opacity:"0.5"}),(0,n.jsx)("rect",{x:"28",y:"8",width:"4",height:"4",fill:"#4A9030",opacity:"0.5"}),(0,n.jsx)("rect",{x:"0",y:"24",width:"4",height:"4",fill:"#4A9030",opacity:"0.5"})]})}var W=t(8690),A=t(6986);let D=[{label:"Dashboard",href:"/dashboard",icon:(0,n.jsx)(y.Z,{})},{label:"Servers",href:"/servers",icon:(0,n.jsx)(v.Z,{})},{label:"Worlds",href:"/worlds",icon:(0,n.jsx)(k.Z,{})},{label:"Players",href:"/players",icon:(0,n.jsx)(Z.Z,{})},{label:"Audit Log",href:"/audit-logs",icon:(0,n.jsx)(C.Z,{})},{label:"Backups",href:"/backups",icon:(0,n.jsx)(S.Z,{})},{label:"Routing",href:"/routing",icon:(0,n.jsx)(w.Z,{})}];function T(e){let{mobileOpen:r,onMenuToggle:t}=e,i=(0,s.usePathname)(),{data:y}=(0,A.kP)(),v=e=>"/dashboard"===e?"/dashboard"===i||"/"===i:i.startsWith(e);return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(o.Z,{position:"fixed",elevation:0,sx:{backgroundColor:"background.paper",borderBottom:"1px solid",borderColor:"divider",zIndex:e=>e.zIndex.drawer+1},children:(0,n.jsxs)(c.Z,{sx:{maxWidth:"1400px",width:"100%",mx:"auto",px:{xs:2,sm:3}},children:[(0,n.jsx)(d.Z,{color:"inherit","aria-label":"open menu",edge:"start",onClick:t,sx:{mr:2,display:{md:"none"}},children:(0,n.jsx)(b.Z,{})}),(0,n.jsxs)(l.default,{href:"/",style:{textDecoration:"none",display:"flex",alignItems:"center"},children:[(0,n.jsx)(I,{sx:{fontSize:28,color:"primary.main",mr:1}}),(0,n.jsx)(x.Z,{variant:"h6",component:"span",sx:{fontFamily:'"Minecraft", sans-serif',fontWeight:400,color:"common.white",letterSpacing:"0.05em",fontSize:"1.1rem"},children:"Minecraft Console"})]}),(0,n.jsx)(a.Z,{component:"nav",sx:{display:{xs:"none",md:"flex"},alignItems:"center",gap:1,ml:4,flex:1},children:D.map(e=>{let r=v(e.href);return(0,n.jsx)(l.default,{href:e.href,style:{textDecoration:"none"},onClick:()=>!r&&(0,W.Av)(),children:(0,n.jsxs)(a.Z,{sx:{display:"flex",alignItems:"center",gap:1,px:2,py:1,borderRadius:2,color:r?"primary.main":"text.secondary",backgroundColor:r?"action.selected":"transparent",transition:"all 0.2s ease","&:hover":{backgroundColor:"action.hover",color:r?"primary.main":"text.primary"}},children:[(0,n.jsx)(a.Z,{component:"span",sx:{display:"flex",alignItems:"center","& svg":{fontSize:20}},children:e.icon}),(0,n.jsx)(x.Z,{variant:"body2",sx:{fontWeight:r?600:400},children:e.label})]})},e.href)})}),(0,n.jsx)(a.Z,{sx:{display:"flex",alignItems:"center",gap:2},children:(0,n.jsx)(P.Ie,{})})]})}),(0,n.jsx)(h.ZP,{variant:"temporary",anchor:"left",open:r,onClose:t,ModalProps:{keepMounted:!0},sx:{display:{xs:"block",md:"none"},"& .MuiDrawer-paper":{boxSizing:"border-box",width:280,backgroundColor:"background.paper"}},children:(0,n.jsxs)(a.Z,{sx:{display:"flex",flexDirection:"column",height:"100%"},children:[(0,n.jsxs)(a.Z,{sx:{display:"flex",alignItems:"center",justifyContent:"space-between",px:2,py:2,minHeight:64,borderBottom:"1px solid",borderColor:"divider"},children:[(0,n.jsxs)(a.Z,{sx:{display:"flex",alignItems:"center"},children:[(0,n.jsx)(I,{sx:{fontSize:24,color:"primary.main",mr:1}}),(0,n.jsx)(x.Z,{variant:"h6",component:"span",sx:{fontFamily:'"Minecraft", sans-serif',fontWeight:400,color:"primary.main",letterSpacing:"0.05em",fontSize:"1rem"},children:"Minecraft Console"})]}),(0,n.jsx)(d.Z,{onClick:t,"aria-label":"close menu",children:(0,n.jsx)(j.Z,{})})]}),(0,n.jsx)(m.Z,{sx:{flex:1,px:1,py:2},children:D.map(e=>{let r=v(e.href);return(0,n.jsx)(u.ZP,{disablePadding:!0,sx:{mb:.5},children:(0,n.jsxs)(p.Z,{component:l.default,href:e.href,onClick:()=>{t(),r||(0,W.Av)()},"aria-current":r?"page":void 0,sx:{borderRadius:2,backgroundColor:r?"action.selected":"transparent","&:hover":{backgroundColor:"action.hover"}},children:[(0,n.jsx)(f.Z,{sx:{color:r?"primary.main":"text.secondary",minWidth:40},children:e.icon}),(0,n.jsx)(g.Z,{primary:e.label,primaryTypographyProps:{fontWeight:r?600:400,color:r?"primary.main":"text.primary"}})]})},e.href)})})]})})]})}var _=t(67337),E=t(41261),q=t(69123),L=t(75845),M=t(43880);function R(e){return(0,n.jsx)(z.Z,{...e,viewBox:"0 0 24 24",children:(0,n.jsx)("path",{d:"M13.983 11.078h2.119a.186.186 0 00.186-.185V9.006a.186.186 0 00-.186-.186h-2.119a.185.185 0 00-.185.185v1.888c0 .102.083.185.185.185m-2.954-5.43h2.118a.186.186 0 00.186-.186V3.574a.186.186 0 00-.186-.185h-2.118a.185.185 0 00-.185.185v1.888c0 .102.082.185.185.186m0 2.716h2.118a.187.187 0 00.186-.186V6.29a.186.186 0 00-.186-.185h-2.118a.185.185 0 00-.185.185v1.887c0 .102.082.185.185.186m-2.93 0h2.12a.186.186 0 00.184-.186V6.29a.185.185 0 00-.185-.185H8.1a.185.185 0 00-.185.185v1.887c0 .102.083.185.185.186m-2.964 0h2.119a.186.186 0 00.185-.186V6.29a.185.185 0 00-.185-.185H5.136a.186.186 0 00-.186.185v1.887c0 .102.084.185.186.186m5.893 2.715h2.118a.186.186 0 00.186-.185V9.006a.186.186 0 00-.186-.186h-2.118a.185.185 0 00-.185.185v1.888c0 .102.082.185.185.185m-2.93 0h2.12a.185.185 0 00.184-.185V9.006a.185.185 0 00-.184-.186h-2.12a.185.185 0 00-.184.185v1.888c0 .102.083.185.185.185m-2.964 0h2.119a.185.185 0 00.185-.185V9.006a.185.185 0 00-.184-.186h-2.12a.186.186 0 00-.186.186v1.887c0 .102.084.185.186.185m-2.92 0h2.12a.185.185 0 00.184-.185V9.006a.185.185 0 00-.184-.186h-2.12a.185.185 0 00-.184.185v1.888c0 .102.082.185.185.185M23.763 9.89c-.065-.051-.672-.51-1.954-.51-.338.001-.676.03-1.01.087-.248-1.7-1.653-2.53-1.716-2.566l-.344-.199-.226.327c-.284.438-.49.922-.612 1.43-.23.97-.09 1.882.403 2.661-.595.332-1.55.413-1.744.42H.751a.751.751 0 00-.75.748 11.376 11.376 0 00.692 4.062c.545 1.428 1.355 2.48 2.41 3.124 1.18.723 3.1 1.137 5.275 1.137.983.003 1.963-.086 2.93-.266a12.248 12.248 0 003.823-1.389c.98-.567 1.86-1.288 2.61-2.136 1.252-1.418 1.998-2.997 2.553-4.4h.221c1.372 0 2.215-.549 2.68-1.009.309-.293.55-.65.707-1.046l.098-.288z"})})}let U=[{title:"Resources",links:[{label:"Getting Started",href:"https://minecraft-server-manager.readthedocs.io/en/latest/getting-started/",external:!0},{label:"Configuration",href:"https://minecraft-server-manager.readthedocs.io/en/latest/configuration/",external:!0},{label:"Troubleshooting",href:"https://minecraft-server-manager.readthedocs.io/en/latest/troubleshooting/",external:!0}]},{title:"Documentation",links:[{label:"CLI Commands",href:"https://minecraft-server-manager.readthedocs.io/en/latest/cli/",external:!0},{label:"API Reference",href:"https://minecraft-server-manager.readthedocs.io/en/latest/console/",external:!0},{label:"itzg Reference",href:"https://minecraft-server-manager.readthedocs.io/en/latest/itzg-reference/",external:!0}]},{title:"Community",links:[{label:"GitHub",href:"https://github.com/smallmiro/minecraft-server-manager",external:!0},{label:"Issues",href:"https://github.com/smallmiro/minecraft-server-manager/issues",external:!0}]},{title:"About",links:[{label:"License",href:"https://github.com/smallmiro/minecraft-server-manager/blob/main/LICENSE",external:!0},{label:"Docker Hub",href:"https://hub.docker.com/r/itzg/minecraft-server",external:!0}]}];function H(){let e=new Date().getFullYear();return(0,n.jsx)(a.Z,{component:"footer",sx:{backgroundColor:"background.paper",borderTop:"1px solid",borderColor:"divider",mt:"auto"},children:(0,n.jsxs)(_.Z,{maxWidth:"lg",sx:{py:6},children:[(0,n.jsx)(a.Z,{sx:{display:"grid",gridTemplateColumns:{xs:"repeat(2, 1fr)",sm:"repeat(4, 1fr)"},gap:4,mb:4},children:U.map(e=>(0,n.jsxs)(a.Z,{children:[(0,n.jsx)(x.Z,{variant:"subtitle2",sx:{fontWeight:600,color:"text.primary",mb:2},children:e.title}),(0,n.jsx)(a.Z,{component:"ul",sx:{listStyle:"none",p:0,m:0},children:e.links.map(e=>(0,n.jsx)(a.Z,{component:"li",sx:{mb:1},children:(0,n.jsx)(E.Z,{href:e.href,target:e.external?"_blank":void 0,rel:e.external?"noopener noreferrer":void 0,underline:"hover",sx:{color:"text.secondary",fontSize:"0.875rem",transition:"color 0.2s ease","&:hover":{color:"primary.main"}},children:e.label})},e.label))})]},e.title))}),(0,n.jsx)(q.Z,{sx:{mb:3}}),(0,n.jsxs)(a.Z,{sx:{display:"flex",flexDirection:{xs:"column",sm:"row"},justifyContent:"space-between",alignItems:{xs:"flex-start",sm:"center"},gap:2},children:[(0,n.jsxs)(x.Z,{variant:"body2",sx:{color:"text.tertiary"},children:[e," \xa9"," ",(0,n.jsx)(E.Z,{href:"https://github.com/smallmiro/minecraft-server-manager",target:"_blank",rel:"noopener noreferrer",underline:"hover",sx:{color:"primary.main"},children:"Minecraft Server Management Console"})]}),(0,n.jsxs)(a.Z,{sx:{display:"flex",gap:2},children:[(0,n.jsx)(E.Z,{href:"https://github.com/smallmiro/minecraft-server-manager",target:"_blank",rel:"noopener noreferrer","aria-label":"GitHub",sx:{color:"text.secondary",transition:"color 0.2s ease","&:hover":{color:"text.primary"}},children:(0,n.jsx)(L.Z,{fontSize:"small"})}),(0,n.jsx)(E.Z,{href:"https://minecraft-server-manager.readthedocs.io/",target:"_blank",rel:"noopener noreferrer","aria-label":"Documentation",sx:{color:"text.secondary",transition:"color 0.2s ease","&:hover":{color:"text.primary"}},children:(0,n.jsx)(M.Z,{fontSize:"small"})}),(0,n.jsx)(E.Z,{href:"https://hub.docker.com/r/itzg/minecraft-server",target:"_blank",rel:"noopener noreferrer","aria-label":"Docker Hub",sx:{color:"text.secondary",transition:"color 0.2s ease","&:hover":{color:"text.primary"}},children:(0,n.jsx)(R,{fontSize:"small"})})]})]})]})})}function B(e){let{children:r}=e,[t,s]=(0,i.useState)(!1);return(0,n.jsxs)(a.Z,{sx:{display:"flex",flexDirection:"column",minHeight:"100vh",backgroundColor:"background.default"},children:[(0,n.jsx)(T,{mobileOpen:t,onMenuToggle:()=>{s(!t)}}),(0,n.jsx)(a.Z,{component:"main",sx:{flexGrow:1,display:"flex",flexDirection:"column",pt:{xs:"".concat(88,"px"),sm:"".concat(96,"px")},pb:{xs:3,sm:4},px:{xs:2,sm:3,md:4},maxWidth:"1400px",width:"100%",mx:"auto"},children:r}),(0,n.jsx)(H,{})]})}},85480:function(e,r,t){"use strict";t.d(r,{U0:function(){return u},WS:function(){return p},Ie:function(){return I}});var n=t(94655),i=t(35106),a=t(7281),s=t(81071),l=t(97436),o=t(52082),c=t(79983),d=t(30417),x=t(36848),h=t(554),m=t(6986);function u(e){let{onSuccess:r}=e,[t,u]=(0,i.useState)(""),[p,f]=(0,i.useState)(""),[g,b]=(0,i.useState)(!1),[j,y]=(0,i.useState)({}),[v,Z]=(0,i.useState)(null),[w,C]=(0,i.useState)(!1),k=()=>{let e={};return t?/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(t)||(e.email="Invalid email address"):e.email="Email is required",p||(e.password="Password is required"),y(e),0===Object.keys(e).length},S=async e=>{if(e.preventDefault(),Z(null),k()){C(!0);try{let e=await m.cg.email({email:t,password:p});if(e.error){Z(e.error.message||"Invalid credentials"),C(!1);return}r&&r()}catch(e){Z("An unexpected error occurred. Please try again."),C(!1)}}};return(0,n.jsxs)(a.Z,{component:"form",onSubmit:S,sx:{display:"flex",flexDirection:"column",gap:2},children:[v&&(0,n.jsx)(s.Z,{severity:"error",onClose:()=>Z(null),children:v}),(0,n.jsx)(l.Z,{label:"Email",type:"email",value:t,onChange:e=>u(e.target.value),error:!!j.email,helperText:j.email,disabled:w,fullWidth:!0,required:!0}),(0,n.jsx)(l.Z,{label:"Password",type:g?"text":"password",value:p,onChange:e=>f(e.target.value),error:!!j.password,helperText:j.password,disabled:w,fullWidth:!0,required:!0,InputProps:{endAdornment:(0,n.jsx)(o.Z,{position:"end",children:(0,n.jsx)(c.Z,{"aria-label":"toggle password visibility",onClick:()=>{b(!g)},edge:"end",children:g?(0,n.jsx)(x.Z,{}):(0,n.jsx)(h.Z,{})})})}}),(0,n.jsx)(d.Z,{type:"submit",variant:"contained",color:"primary",disabled:w,fullWidth:!0,size:"large",children:w?"Signing in...":"Sign In"})]})}function p(e){let{onSuccess:r}=e,[t,u]=(0,i.useState)(""),[p,f]=(0,i.useState)(""),[g,b]=(0,i.useState)(""),[j,y]=(0,i.useState)(""),[v,Z]=(0,i.useState)(!1),[w,C]=(0,i.useState)(!1),[k,S]=(0,i.useState)({}),[P,z]=(0,i.useState)(null),[I,W]=(0,i.useState)(!1),A=()=>{let e={};return t||(e.name="Name is required"),p?/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(p)||(e.email="Invalid email address"):e.email="Email is required",g?g.length<8&&(e.password="Password must be at least 8 characters"):e.password="Password is required",j?g!==j&&(e.confirmPassword="Passwords do not match"):e.confirmPassword="Please confirm your password",S(e),0===Object.keys(e).length},D=async e=>{if(e.preventDefault(),z(null),A()){W(!0);try{let e=await m.y1.email({email:p,password:g,name:t});if(e.error){z(e.error.message||"Registration failed"),W(!1);return}r&&r()}catch(e){z("An unexpected error occurred. Please try again."),W(!1)}}};return(0,n.jsxs)(a.Z,{component:"form",onSubmit:D,sx:{display:"flex",flexDirection:"column",gap:2},children:[P&&(0,n.jsx)(s.Z,{severity:"error",onClose:()=>z(null),children:P}),(0,n.jsx)(l.Z,{label:"Name",type:"text",value:t,onChange:e=>u(e.target.value),error:!!k.name,helperText:k.name,disabled:I,fullWidth:!0,required:!0}),(0,n.jsx)(l.Z,{label:"Email",type:"email",value:p,onChange:e=>f(e.target.value),error:!!k.email,helperText:k.email,disabled:I,fullWidth:!0,required:!0}),(0,n.jsx)(l.Z,{label:"Password",type:v?"text":"password",value:g,onChange:e=>b(e.target.value),error:!!k.password,helperText:k.password,disabled:I,fullWidth:!0,required:!0,InputProps:{endAdornment:(0,n.jsx)(o.Z,{position:"end",children:(0,n.jsx)(c.Z,{"aria-label":"toggle password visibility",onClick:()=>{Z(!v)},edge:"end",children:v?(0,n.jsx)(x.Z,{}):(0,n.jsx)(h.Z,{})})})}}),(0,n.jsx)(l.Z,{label:"Confirm Password",type:w?"text":"password",value:j,onChange:e=>y(e.target.value),error:!!k.confirmPassword,helperText:k.confirmPassword,disabled:I,fullWidth:!0,required:!0,InputProps:{endAdornment:(0,n.jsx)(o.Z,{position:"end",children:(0,n.jsx)(c.Z,{"aria-label":"toggle password visibility",onClick:()=>{C(!w)},edge:"end",children:w?(0,n.jsx)(x.Z,{}):(0,n.jsx)(h.Z,{})})})}}),(0,n.jsx)(d.Z,{type:"submit",variant:"contained",color:"primary",disabled:I,fullWidth:!0,size:"large",children:I?"Creating account...":"Sign Up"})]})}var f=t(74228),g=t(93017),b=t(86702),j=t(35694),y=t(31317),v=t(25333),Z=t(69123),w=t(7178),C=t(17820),k=t(73424),S=t(25169),P=t(41094),z=t(78319);function I(){let e=(0,f.useRouter)(),{data:r,isPending:t}=(0,m.kP)(),[s,l]=(0,i.useState)(null),o=()=>{l(null)},x=async()=>{o(),await (0,m.w7)(),e.push("/login")};if(t)return(0,n.jsx)(a.Z,{sx:{display:"flex",alignItems:"center",justifyContent:"center"},children:(0,n.jsx)(g.Z,{size:24})});if(!(null==r?void 0:r.user))return(0,n.jsx)(d.Z,{variant:"contained",color:"primary",onClick:()=>{e.push("/login")},children:"Sign In"});let{user:h}=r,u=((e,r)=>{if(e){let r=e.split(" ");return r.length>=2?"".concat(r[0][0]).concat(r[1][0]).toUpperCase():e.substring(0,2).toUpperCase()}return r?r[0].toUpperCase():"?"})(h.name,h.email);return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(c.Z,{onClick:e=>{l(e.currentTarget)},"aria-label":"user menu",children:(0,n.jsx)(b.Z,{sx:{bgcolor:"primary.main"},children:u})}),(0,n.jsxs)(j.Z,{anchorEl:s,open:!!s,onClose:o,anchorOrigin:{vertical:"bottom",horizontal:"right"},transformOrigin:{vertical:"top",horizontal:"right"},sx:{mt:1},children:[(0,n.jsxs)(a.Z,{sx:{px:2,py:1.5,minWidth:200},children:[(0,n.jsx)(y.Z,{variant:"subtitle1",fontWeight:"600",children:h.name||"User"}),(0,n.jsx)(y.Z,{variant:"body2",color:"text.secondary",children:h.email}),"admin"===h.role&&(0,n.jsx)(v.Z,{label:"Admin",size:"small",color:"primary",sx:{mt:1}})]}),(0,n.jsx)(Z.Z,{}),"admin"===h.role&&(0,n.jsxs)(w.Z,{onClick:()=>{o(),e.push("/admin/users")},children:[(0,n.jsx)(C.Z,{children:(0,n.jsx)(S.Z,{fontSize:"small"})}),(0,n.jsx)(k.Z,{children:"Users"})]}),(0,n.jsxs)(w.Z,{onClick:()=>{o(),e.push("/settings")},children:[(0,n.jsx)(C.Z,{children:(0,n.jsx)(P.Z,{fontSize:"small"})}),(0,n.jsx)(k.Z,{children:"Settings"})]}),(0,n.jsxs)(w.Z,{onClick:x,children:[(0,n.jsx)(C.Z,{children:(0,n.jsx)(z.Z,{fontSize:"small"})}),(0,n.jsx)(k.Z,{children:"Logout"})]})]})]})}},3454:function(e,r,t){"use strict";t.d(r,{LoadingProvider:function(){return o},startLoading:function(){return c},stopLoading:function(){return d}});var n=t(94655),i=t(35106),a=t(74228),s=t(31477),l=t.n(s);function o(e){let{children:r}=e,t=(0,a.usePathname)(),s=(0,a.useSearchParams)();return(0,i.useEffect)(()=>{l().done()},[t,s]),(0,n.jsx)(n.Fragment,{children:r})}function c(){l().start()}function d(){l().done()}l().configure({showSpinner:!1,speed:300,minimum:.1})},8690:function(e,r,t){"use strict";t.d(r,{Av:function(){return n.startLoading}});var n=t(3454)},6986:function(e,r,t){"use strict";t.d(r,{Cp:function(){return h},Nq:function(){return x},cg:function(){return l},kP:function(){return d},w7:function(){return o},y1:function(){return c},zB:function(){return m}});var n=t(77054),i=t(61648),a=t(35016);let s=(0,n.X)({baseURL:a.env.NEXT_PUBLIC_BETTER_AUTH_URL||"",plugins:[(0,i.zB)()]}),{signIn:l,signOut:o,signUp:c,useSession:d,updateUser:x,changePassword:h}=s,m=s.admin}},function(e){e.O(0,[6812,9760,6758,680,1668,7436,1071,2542,55,6857,8347,1544,563,8918,212,3669,2757,1744],function(){return e(e.s=16387)}),_N_E=e.O()}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[781],{31809:function(e,r,n){Promise.resolve().then(n.bind(n,79875))},397:function(e,r,n){"use strict";var t=n(8091);r.Z=void 0;var a=t(n(66758)),s=n(94655);r.Z=(0,a.default)((0,s.jsx)("path",{d:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2M4 12c0-4.42 3.58-8 8-8 1.85 0 3.55.63 4.9 1.69L5.69 16.9C4.63 15.55 4 13.85 4 12m8 8c-1.85 0-3.55-.63-4.9-1.69L18.31 7.1C19.37 8.45 20 10.15 20 12c0 4.42-3.58 8-8 8"}),"Block")},45813:function(e,r,n){"use strict";var t=n(8091);r.Z=void 0;var a=t(n(66758)),s=n(94655);r.Z=(0,a.default)((0,s.jsx)("path",{d:"M3 17.25V21h3.75L17.81 9.94l-3.75-3.75zM20.71 7.04c.39-.39.39-1.02 0-1.41l-2.34-2.34a.9959.9959 0 0 0-1.41 0l-1.83 1.83 3.75 3.75z"}),"Edit")},69366:function(e,r,n){"use strict";var t=n(8091);r.Z=void 0;var a=t(n(66758)),s=n(94655);r.Z=(0,a.default)((0,s.jsx)("path",{d:"M17.65 6.35C16.2 4.9 14.21 4 12 4c-4.42 0-7.99 3.58-7.99 8s3.57 8 7.99 8c3.73 0 6.84-2.55 7.73-6h-2.08c-.82 2.33-3.04 4-5.65 4-3.31 0-6-2.69-6-6s2.69-6 6-6c1.66 0 3.14.69 4.22 1.78L13 11h7V4z"}),"Refresh")},65087:function(e,r,n){"use strict";n.d(r,{Z:function(){return j}});var t=n(32324),a=n(81500),s=n(35106),o=n(70316),i=n(65951),l=n(34519),c=n(15651),d=n(28057),u=n(31317),h=n(11379),p=n(9049);function y(e){return(0,p.ZP)("MuiDialogContentText",e)}(0,h.Z)("MuiDialogContentText",["root"]);var x=n(94655);let m=["children","className"],v=e=>{let{classes:r}=e,n=(0,i.Z)({root:["root"]},y,r);return(0,a.Z)({},r,n)},f=(0,l.ZP)(u.Z,{shouldForwardProp:e=>(0,c.Z)(e)||"classes"===e,name:"MuiDialogContentText",slot:"Root",overridesResolver:(e,r)=>r.root})({});var j=s.forwardRef(function(e,r){let n=(0,d.i)({props:e,name:"MuiDialogContentText"}),{className:s}=n,i=(0,t.Z)(n,m),l=v(i);return(0,x.jsx)(f,(0,a.Z)({component:"p",variant:"body1",color:"text.secondary",ref:r,ownerState:i,className:(0,o.Z)(l.root,s)},n,{classes:l}))})},73424:function(e,r,n){"use strict";var t=n(32324),a=n(81500),s=n(35106),o=n(70316),i=n(65951),l=n(31317),c=n(75084),d=n(28057),u=n(34519),h=n(64769),p=n(94655);let y=["children","className","disableTypography","inset","primary","primaryTypographyProps","secondary","secondaryTypographyProps"],x=e=>{let{classes:r,inset:n,primary:t,secondary:a,dense:s}=e;return(0,i.Z)({root:["root",n&&"inset",s&&"dense",t&&a&&"multiline"],primary:["primary"],secondary:["secondary"]},h.L,r)},m=(0,u.ZP)("div",{name:"MuiListItemText",slot:"Root",overridesResolver:(e,r)=>{let{ownerState:n}=e;return[{["& .".concat(h.Z.primary)]:r.primary},{["& .".concat(h.Z.secondary)]:r.secondary},r.root,n.inset&&r.inset,n.primary&&n.secondary&&r.multiline,n.dense&&r.dense]}})(e=>{let{ownerState:r}=e;return(0,a.Z)({flex:"1 1 auto",minWidth:0,marginTop:4,marginBottom:4},r.primary&&r.secondary&&{marginTop:6,marginBottom:6},r.inset&&{paddingLeft:56})}),v=s.forwardRef(function(e,r){let n=(0,d.i)({props:e,name:"MuiListItemText"}),{children:i,className:u,disableTypography:h=!1,inset:v=!1,primary:f,primaryTypographyProps:j,secondary:Z,secondaryTypographyProps:b}=n,g=(0,t.Z)(n,y),{dense:C}=s.useContext(c.Z),S=null!=f?f:i,w=Z,k=(0,a.Z)({},n,{disableTypography:h,inset:v,primary:!!S,secondary:!!w,dense:C}),I=x(k);return null==S||S.type===l.Z||h||(S=(0,p.jsx)(l.Z,(0,a.Z)({variant:C?"body2":"body1",className:I.primary,component:null!=j&&j.variant?void 0:"span",display:"block"},j,{children:S}))),null==w||w.type===l.Z||h||(w=(0,p.jsx)(l.Z,(0,a.Z)({variant:"body2",className:I.secondary,color:"text.secondary",display:"block"},b,{children:w}))),(0,p.jsxs)(m,(0,a.Z)({className:(0,o.Z)(I.root,u),ownerState:k,ref:r},g,{children:[S,w]}))});r.Z=v},64769:function(e,r,n){"use strict";n.d(r,{L:function(){return s}});var t=n(11379),a=n(9049);function s(e){return(0,a.ZP)("MuiListItemText",e)}let o=(0,t.Z)("MuiListItemText",["root","multiline","dense","inset","primary","secondary"]);r.Z=o},79875:function(e,r,n){"use strict";n.r(r),n.d(r,{default:function(){return eC}});var t=n(94655),a=n(35106),s=n(7281),o=n(31317),i=n(84840),l=n(33402),c=n(60097),d=n(29793),u=n(75726),h=n(62328),p=n(7178),y=n(69899),x=n(76492),m=n(35847),v=n(628),f=n(41565),j=n(90158),Z=n(58347),b=n(73424),g=n(32324),C=n(81500),S=n(70316),w=n(65951),k=n(75084),I=n(34519),E=n(28057),F=n(11379),P=n(9049);function L(e){return(0,P.ZP)("MuiListItemAvatar",e)}(0,F.Z)("MuiListItemAvatar",["root","alignItemsFlexStart"]);let N=["className"],T=e=>{let{alignItems:r,classes:n}=e;return(0,w.Z)({root:["root","flex-start"===r&&"alignItemsFlexStart"]},L,n)},R=(0,I.ZP)("div",{name:"MuiListItemAvatar",slot:"Root",overridesResolver:(e,r)=>{let{ownerState:n}=e;return[r.root,"flex-start"===n.alignItems&&r.alignItemsFlexStart]}})(e=>{let{ownerState:r}=e;return(0,C.Z)({minWidth:56,flexShrink:0},"flex-start"===r.alignItems&&{marginTop:8})}),D=a.forwardRef(function(e,r){let n=(0,E.i)({props:e,name:"MuiListItemAvatar"}),{className:s}=n,o=(0,g.Z)(n,N),i=a.useContext(k.Z),l=(0,C.Z)({},n,{alignItems:i.alignItems}),c=T(l);return(0,t.jsx)(R,(0,C.Z)({className:(0,S.Z)(c.root,s),ownerState:l,ref:r},o))});var O=n(86702),q=n(79983),K=n(30417),A=n(25333),U=n(99770),M=n(62508),W=n(5682),B=n(65087),Q=n(76678),z=n(97436),J=n(93017),_=n(81071),H=n(66561),$=n(12795),G=n(96407),V=n(69366),Y=n(11597),X=n(81960),ee=n(30114);function er(e){let{onPlayerKicked:r}=e,[n,i]=(0,a.useState)(!0),[l,c]=(0,a.useState)(null),[d,u]=(0,a.useState)([]),[h,p]=(0,a.useState)(!1),[y,x]=(0,a.useState)(null),[m,g]=(0,a.useState)(""),[C,S]=(0,a.useState)(!1),w=(0,a.useCallback)(async()=>{i(!0),c(null);try{let e=await fetch("/api/players");if(!e.ok)throw Error("Failed to fetch players");let r=await e.json();u(r.servers)}catch(e){c("Failed to load players"),console.error("Error fetching players:",e)}finally{i(!1)}},[]);(0,a.useEffect)(()=>{w()},[w]);let k=(e,r)=>{x({player:e,server:r}),g(""),p(!0)},I=async()=>{if(y){S(!0);try{if(!(await fetch("/api/players/kick",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({player:y.player.name,server:y.server,reason:m||"Kicked by administrator"})})).ok)throw Error("Failed to kick player");p(!1),x(null),null==r||r(y.player,y.server),await w()}catch(e){console.error("Error kicking player:",e)}finally{S(!1)}}},E=d.some(e=>e.players.length>0);return(0,t.jsx)(v.Z,{"data-testid":"player-list",children:(0,t.jsxs)(f.Z,{children:[(0,t.jsxs)(s.Z,{sx:{display:"flex",justifyContent:"space-between",alignItems:"center",mb:2},children:[(0,t.jsx)(o.Z,{variant:"h6",children:"Online Players"}),(0,t.jsx)(q.Z,{onClick:w,disabled:n,"aria-label":"Refresh",children:(0,t.jsx)(V.Z,{})})]}),n&&(0,t.jsx)(s.Z,{sx:{display:"flex",justifyContent:"center",py:4},children:(0,t.jsx)(J.Z,{})}),l&&(0,t.jsx)(_.Z,{severity:"error",sx:{mb:2},children:l}),!n&&!l&&!E&&(0,t.jsx)(o.Z,{color:"text.secondary",sx:{textAlign:"center",py:4},children:"No players online"}),!n&&!l&&E&&(0,t.jsx)(s.Z,{children:d.map(e=>(0,t.jsxs)(H.Z,{defaultExpanded:e.players.length>0,children:[(0,t.jsx)($.Z,{expandIcon:(0,t.jsx)(X.Z,{}),children:(0,t.jsxs)(s.Z,{sx:{display:"flex",alignItems:"center",gap:2,width:"100%"},children:[(0,t.jsx)(o.Z,{variant:"subtitle1",sx:{fontWeight:500},children:e.name}),(0,t.jsx)(A.Z,{label:"".concat(e.players.length," player").concat(1!==e.players.length?"s":""),size:"small",color:e.players.length>0?"success":"default"})]})}),(0,t.jsx)(G.Z,{children:0===e.players.length?(0,t.jsx)(o.Z,{color:"text.secondary",sx:{fontStyle:"italic"},children:"No players online on this server"}):(0,t.jsx)(j.Z,{dense:!0,children:e.players.map(r=>(0,t.jsxs)(Z.ZP,{secondaryAction:(0,t.jsx)(q.Z,{edge:"end","aria-label":"Kick player",onClick:()=>k(r,e.name),color:"error",children:(0,t.jsx)(Y.Z,{})}),children:[(0,t.jsx)(D,{children:(0,t.jsx)(O.Z,{src:"https://mc-heads.net/avatar/".concat(r.uuid,"/40"),alt:r.name,children:(0,t.jsx)(ee.Z,{})})}),(0,t.jsx)(b.Z,{primary:r.name,secondary:r.uuid.substring(0,8)+"..."})]},r.uuid))})})]},e.name))}),(0,t.jsxs)(U.Z,{open:h,onClose:()=>p(!1),children:[(0,t.jsx)(M.Z,{children:"Kick Player"}),(0,t.jsxs)(W.Z,{children:[(0,t.jsxs)(B.Z,{children:["Are you sure you want to kick ",null==y?void 0:y.player.name," from ",null==y?void 0:y.server,"?"]}),(0,t.jsx)(z.Z,{autoFocus:!0,margin:"dense",label:"Reason (optional)",fullWidth:!0,variant:"outlined",value:m,onChange:e=>g(e.target.value),placeholder:"Kicked by administrator"})]}),(0,t.jsxs)(Q.Z,{children:[(0,t.jsx)(K.Z,{onClick:()=>p(!1),disabled:C,children:"Cancel"}),(0,t.jsx)(K.Z,{onClick:I,color:"error",variant:"contained",disabled:C,"aria-label":"Confirm kick",children:C?(0,t.jsx)(J.Z,{size:20}):"Confirm"})]})]})]})})}var en=n(70115),et=n(21111),ea=n(47606);function es(e){let{serverName:r}=e,[n,i]=(0,a.useState)(!0),[l,c]=(0,a.useState)(null),[d,u]=(0,a.useState)([]),[h,p]=(0,a.useState)(),[y,x]=(0,a.useState)(""),[m,g]=(0,a.useState)(!1),[C,S]=(0,a.useState)(null),w=(0,a.useCallback)(async()=>{i(!0),c(null);try{let e=await fetch("/api/players/whitelist?server=".concat(encodeURIComponent(r)));if(!e.ok)throw Error("Failed to fetch whitelist");let n=await e.json();u(n.players),p(n.source)}catch(e){c("Failed to load whitelist"),console.error("Error fetching whitelist:",e)}finally{i(!1)}},[r]);(0,a.useEffect)(()=>{w()},[w]);let k=async()=>{if(y.trim()){g(!0),c(null);try{if(!(await fetch("/api/players/whitelist",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({player:y.trim(),server:r})})).ok)throw Error("Failed to add player");x(""),await w()}catch(e){c("Failed to add player to whitelist"),console.error("Error adding player:",e)}finally{g(!1)}}},I=async e=>{S(e),c(null);try{if(!(await fetch("/api/players/whitelist?player=".concat(encodeURIComponent(e),"&server=").concat(encodeURIComponent(r)),{method:"DELETE"})).ok)throw Error("Failed to remove player");await w()}catch(e){c("Failed to remove player from whitelist"),console.error("Error removing player:",e)}finally{S(null)}};return(0,t.jsx)(v.Z,{"data-testid":"whitelist-manager",children:(0,t.jsxs)(f.Z,{children:[(0,t.jsx)(o.Z,{variant:"h6",gutterBottom:!0,children:"Whitelist"}),l&&(0,t.jsx)(_.Z,{severity:"error",sx:{mb:2},children:l}),!n&&h&&"rcon"!==h&&(0,t.jsxs)(_.Z,{severity:"info",sx:{mb:2},children:["Server is offline. Showing data from ","config"===h?"config.env":"whitelist.json",". Changes will apply on next server start."]}),(0,t.jsxs)(en.Z,{direction:"row",spacing:1,sx:{mb:2},children:[(0,t.jsx)(z.Z,{size:"small",placeholder:"Player name",value:y,onChange:e=>x(e.target.value),onKeyDown:e=>{"Enter"===e.key&&k()},disabled:m,fullWidth:!0}),(0,t.jsx)(K.Z,{variant:"contained",onClick:k,disabled:!y.trim()||m,startIcon:m?(0,t.jsx)(J.Z,{size:16}):(0,t.jsx)(ea.Z,{}),"aria-label":"Add player to whitelist",children:"Add"})]}),n&&(0,t.jsx)(s.Z,{sx:{display:"flex",justifyContent:"center",py:4},children:(0,t.jsx)(J.Z,{})}),!n&&0===d.length&&(0,t.jsx)(o.Z,{color:"text.secondary",sx:{textAlign:"center",py:4},children:"No players whitelisted"}),!n&&d.length>0&&(0,t.jsx)(j.Z,{dense:!0,children:d.map(e=>(0,t.jsxs)(Z.ZP,{secondaryAction:(0,t.jsx)(q.Z,{edge:"end","aria-label":"Remove from whitelist",onClick:()=>I(e.name),disabled:C===e.name,color:"error",children:C===e.name?(0,t.jsx)(J.Z,{size:20}):(0,t.jsx)(et.Z,{})}),children:[(0,t.jsx)(D,{children:(0,t.jsx)(O.Z,{src:e.uuid?"https://mc-heads.net/avatar/".concat(e.uuid,"/40"):void 0,alt:e.name,children:(0,t.jsx)(ee.Z,{})})}),(0,t.jsx)(b.Z,{primary:e.name,secondary:e.uuid?e.uuid.substring(0,8)+"...":"UUID not available"})]},e.uuid||e.name))})]})})}var eo=n(35694),ei=n(37809),el=n(407),ec=n(45813);let ed={1:{color:"info",label:"Moderator",icon:"\uD83D\uDEE1️"},2:{color:"success",label:"Gamemaster",icon:"\uD83C\uDFAE"},3:{color:"warning",label:"Admin",icon:"⚙️"},4:{color:"error",label:"Owner",icon:"\uD83D\uDC51"}};function eu(e){let{level:r,showIcon:n=!1,compact:a=!1,size:o="medium",variant:i="filled"}=e,l=ed[r];if(!l)return null;let c=a?r.toString():"Level ".concat(r," - ").concat(l.label),d=n?(0,t.jsx)(s.Z,{component:"span",sx:{mr:.5},children:l.icon}):void 0;return(0,t.jsx)(A.Z,{label:(0,t.jsxs)(t.Fragment,{children:[d,c]}),color:l.color,size:o,variant:i})}var eh=n(68038),ep=n(34080),ey=n(40064),ex=n(39181);let em=[{value:1,label:"Level 1 - Moderator",description:"Bypass spawn protection",icon:"\uD83D\uDEE1️"},{value:2,label:"Level 2 - Gamemaster",description:"Cheats, command blocks",icon:"\uD83C\uDFAE"},{value:3,label:"Level 3 - Admin",description:"Player management commands",icon:"⚙️"},{value:4,label:"Level 4 - Owner",description:"Full server control",icon:"\uD83D\uDC51"}];function ev(e){let{value:r,onChange:n,label:a,disabled:i=!1}=e;return(0,t.jsxs)(d.Z,{component:"fieldset",fullWidth:!0,disabled:i,children:[a&&(0,t.jsx)(eh.Z,{component:"legend",sx:{mb:1},children:a}),(0,t.jsx)(ep.Z,{value:r,onChange:e=>{n(parseInt(e.target.value,10))},children:em.map(e=>(0,t.jsx)(ey.Z,{value:e.value,control:(0,t.jsx)(ex.Z,{}),label:(0,t.jsxs)(s.Z,{children:[(0,t.jsxs)(s.Z,{sx:{display:"flex",alignItems:"center",gap:1},children:[(0,t.jsx)(o.Z,{component:"span",children:e.icon}),(0,t.jsx)(o.Z,{component:"span",fontWeight:"medium",children:e.label})]}),(0,t.jsx)(o.Z,{variant:"body2",color:"text.secondary",sx:{ml:4},children:e.description})]}),sx:{alignItems:"flex-start",py:1}},e.value))})]})}function ef(e){let{serverName:r}=e,[n,i]=(0,a.useState)(!0),[l,c]=(0,a.useState)(null),[d,u]=(0,a.useState)([]),[h,y]=(0,a.useState)(),[x,m]=(0,a.useState)(""),[g,C]=(0,a.useState)(!1),[S,w]=(0,a.useState)(null),[k,I]=(0,a.useState)(!1),[E,F]=(0,a.useState)(4),[P,L]=(0,a.useState)(!1),[N,T]=(0,a.useState)(null),[R,A]=(0,a.useState)(4),[B,H]=(0,a.useState)(!1),[$,G]=(0,a.useState)(null),[V,Y]=(0,a.useState)(null),X=(0,a.useCallback)(async()=>{i(!0),c(null);try{let e=await fetch("/api/players/op?server=".concat(encodeURIComponent(r)));if(!e.ok)throw Error("Failed to fetch operators");let n=await e.json();u(n.operators),y(n.source)}catch(e){c("Failed to load operators"),console.error("Error fetching operators:",e)}finally{i(!1)}},[r]);(0,a.useEffect)(()=>{X()},[X]);let ee=async()=>{if(x.trim()){C(!0),c(null);try{if(!(await fetch("/api/players/op",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({player:x.trim(),server:r,level:E})})).ok)throw Error("Failed to add operator");m(""),F(4),I(!1),await X()}catch(e){c("Failed to add operator"),console.error("Error adding operator:",e)}finally{C(!1)}}},er=async e=>{w(e),c(null),G(null),Y(null);try{if(!(await fetch("/api/players/op?player=".concat(encodeURIComponent(e),"&server=").concat(encodeURIComponent(r)),{method:"DELETE"})).ok)throw Error("Failed to remove operator");await X()}catch(e){c("Failed to remove operator"),console.error("Error removing operator:",e)}finally{w(null)}},en=async()=>{if(N){H(!0),c(null);try{if(!(await fetch("/api/players/op/".concat(encodeURIComponent(N.name),"?server=").concat(encodeURIComponent(r)),{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({level:R})})).ok)throw Error("Failed to change operator level");L(!1),T(null),await X()}catch(e){c("Failed to change operator level"),console.error("Error changing operator level:",e)}finally{H(!1)}}},es=(e,r)=>{G(e.currentTarget),Y(r)},ed=()=>{G(null),Y(null)};return(0,t.jsxs)(v.Z,{"data-testid":"op-manager",children:[(0,t.jsxs)(f.Z,{children:[(0,t.jsx)(o.Z,{variant:"h6",gutterBottom:!0,children:"Operators"}),l&&(0,t.jsx)(_.Z,{severity:"error",sx:{mb:2},children:l}),!n&&h&&"rcon"!==h&&(0,t.jsxs)(_.Z,{severity:"info",sx:{mb:2},children:["Server is offline. Showing data from ","config"===h?"config.env":"ops.json",". Changes will apply on next server start."]}),(0,t.jsx)(s.Z,{sx:{mb:2},children:(0,t.jsx)(K.Z,{variant:"contained",onClick:()=>I(!0),startIcon:(0,t.jsx)(ea.Z,{}),"aria-label":"Add operator",fullWidth:!0,children:"Add Operator"})}),n&&(0,t.jsx)(s.Z,{sx:{display:"flex",justifyContent:"center",py:4},children:(0,t.jsx)(J.Z,{})}),!n&&0===d.length&&(0,t.jsx)(o.Z,{color:"text.secondary",sx:{textAlign:"center",py:4},children:"No operators configured"}),!n&&d.length>0&&(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(j.Z,{dense:!0,children:d.map(e=>(0,t.jsxs)(Z.ZP,{secondaryAction:(0,t.jsx)(q.Z,{edge:"end","aria-label":"Operator actions",onClick:r=>es(r,e),disabled:S===e.name,children:S===e.name?(0,t.jsx)(J.Z,{size:20}):(0,t.jsx)(ei.Z,{})}),children:[(0,t.jsx)(D,{children:(0,t.jsx)(O.Z,{src:e.uuid?"https://mc-heads.net/avatar/".concat(e.uuid,"/40"):void 0,alt:e.name,sx:{bgcolor:"warning.main"},children:(0,t.jsx)(el.Z,{})})}),(0,t.jsx)(b.Z,{primary:(0,t.jsxs)(s.Z,{sx:{display:"flex",alignItems:"center",gap:1,flexWrap:"wrap"},children:[(0,t.jsx)(o.Z,{component:"span",children:e.name}),(0,t.jsx)(eu,{level:e.level,showIcon:!0,size:"small"})]}),secondary:e.uuid?e.uuid.substring(0,8)+"...":"UUID not available"})]},e.uuid||e.name))}),(0,t.jsxs)(eo.Z,{anchorEl:$,open:!!$,onClose:ed,children:[(0,t.jsxs)(p.Z,{onClick:()=>{V&&(T(V),A(V.level),L(!0),ed())},children:[(0,t.jsx)(ec.Z,{sx:{mr:1},fontSize:"small"}),"Change Level"]}),(0,t.jsxs)(p.Z,{onClick:()=>V&&er(V.name),children:[(0,t.jsx)(et.Z,{sx:{mr:1},fontSize:"small",color:"error"}),"Remove OP"]})]})]})]}),(0,t.jsxs)(U.Z,{open:k,onClose:()=>!g&&I(!1),maxWidth:"sm",fullWidth:!0,children:[(0,t.jsx)(M.Z,{children:"Add Operator"}),(0,t.jsxs)(W.Z,{children:[(0,t.jsx)(z.Z,{autoFocus:!0,margin:"dense",label:"Player Name",placeholder:"Enter player name",fullWidth:!0,value:x,onChange:e=>m(e.target.value),disabled:g,sx:{mb:2}}),(0,t.jsx)(ev,{value:E,onChange:F,label:"OP Level",disabled:g})]}),(0,t.jsxs)(Q.Z,{children:[(0,t.jsx)(K.Z,{onClick:()=>I(!1),disabled:g,children:"Cancel"}),(0,t.jsx)(K.Z,{variant:"contained",onClick:ee,disabled:!x.trim()||g,startIcon:g?(0,t.jsx)(J.Z,{size:16}):void 0,children:g?"Adding...":"Add OP"})]})]}),(0,t.jsxs)(U.Z,{open:P,onClose:()=>!B&&L(!1),maxWidth:"sm",fullWidth:!0,children:[(0,t.jsxs)(M.Z,{children:["Change OP Level - ",null==N?void 0:N.name]}),(0,t.jsx)(W.Z,{children:N&&(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)(o.Z,{variant:"body2",color:"text.secondary",sx:{mb:2},children:["Current: Level ",N.level," (",N.role,")"]}),(0,t.jsx)(ev,{value:R,onChange:A,label:"New Level",disabled:B})]})}),(0,t.jsxs)(Q.Z,{children:[(0,t.jsx)(K.Z,{onClick:()=>L(!1),disabled:B,children:"Cancel"}),(0,t.jsx)(K.Z,{variant:"contained",onClick:en,disabled:B||R===(null==N?void 0:N.level),startIcon:B?(0,t.jsx)(J.Z,{size:16}):void 0,children:B?"Saving...":"Save Changes"})]})]})]})}var ej=n(397);function eZ(e){let{serverName:r}=e,[n,i]=(0,a.useState)(!0),[l,c]=(0,a.useState)(null),[d,u]=(0,a.useState)([]),[h,p]=(0,a.useState)(),[y,x]=(0,a.useState)(!1),[m,g]=(0,a.useState)({player:"",reason:""}),[C,S]=(0,a.useState)(!1),[w,k]=(0,a.useState)(null),I=(0,a.useCallback)(async()=>{i(!0),c(null);try{let e=await fetch("/api/players/ban?server=".concat(encodeURIComponent(r)));if(!e.ok)throw Error("Failed to fetch bans");let n=await e.json();u(n.players),p(n.source)}catch(e){c("Failed to load ban list"),console.error("Error fetching bans:",e)}finally{i(!1)}},[r]);(0,a.useEffect)(()=>{I()},[I]);let E=()=>{x(!1),g({player:"",reason:""})},F=async()=>{if(m.player.trim()){S(!0),c(null);try{if(!(await fetch("/api/players/ban",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({player:m.player.trim(),reason:m.reason.trim()||"Banned by administrator",server:r})})).ok)throw Error("Failed to ban player");E(),await I()}catch(e){c("Failed to ban player"),console.error("Error banning player:",e)}finally{S(!1)}}},P=async e=>{k(e),c(null);try{if(!(await fetch("/api/players/ban?player=".concat(encodeURIComponent(e),"&server=").concat(encodeURIComponent(r)),{method:"DELETE"})).ok)throw Error("Failed to unban player");await I()}catch(e){c("Failed to unban player"),console.error("Error unbanning player:",e)}finally{k(null)}},L=e=>{try{return new Date(e).toLocaleDateString()}catch(r){return e}};return(0,t.jsx)(v.Z,{"data-testid":"ban-manager",children:(0,t.jsxs)(f.Z,{children:[(0,t.jsxs)(s.Z,{sx:{display:"flex",justifyContent:"space-between",alignItems:"center",mb:2},children:[(0,t.jsx)(o.Z,{variant:"h6",children:"Ban List"}),(0,t.jsx)(K.Z,{variant:"outlined",color:"error",startIcon:(0,t.jsx)(ej.Z,{}),onClick:()=>{g({player:"",reason:""}),x(!0)},"aria-label":"Ban player",children:"Ban Player"})]}),l&&(0,t.jsx)(_.Z,{severity:"error",sx:{mb:2},children:l}),!n&&h&&"rcon"!==h&&(0,t.jsxs)(_.Z,{severity:"info",sx:{mb:2},children:["Server is offline. Showing data from ","config"===h?"config.env":"banned-players.json",". Changes will apply on next server start."]}),n&&(0,t.jsx)(s.Z,{sx:{display:"flex",justifyContent:"center",py:4},children:(0,t.jsx)(J.Z,{})}),!n&&0===d.length&&(0,t.jsx)(o.Z,{color:"text.secondary",sx:{textAlign:"center",py:4},children:"No players banned"}),!n&&d.length>0&&(0,t.jsx)(j.Z,{dense:!0,children:d.map(e=>(0,t.jsxs)(Z.ZP,{secondaryAction:(0,t.jsx)(q.Z,{edge:"end","aria-label":"Unban player",onClick:()=>P(e.name),disabled:w===e.name,color:"success",children:w===e.name?(0,t.jsx)(J.Z,{size:20}):(0,t.jsx)(et.Z,{})}),children:[(0,t.jsx)(D,{children:(0,t.jsx)(O.Z,{src:e.uuid?"https://mc-heads.net/avatar/".concat(e.uuid,"/40"):void 0,alt:e.name,sx:{bgcolor:"error.main"},children:(0,t.jsx)(ee.Z,{})})}),(0,t.jsx)(b.Z,{primary:e.name,secondary:(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)(o.Z,{component:"span",variant:"body2",color:"text.secondary",children:["Reason: ",e.reason||"No reason specified"]}),(0,t.jsx)("br",{}),(0,t.jsxs)(o.Z,{component:"span",variant:"caption",color:"text.secondary",children:["Banned: ",L(e.created)," by ",e.source||"Unknown"]})]})})]},e.uuid||e.name))}),(0,t.jsxs)(U.Z,{open:y,onClose:E,maxWidth:"sm",fullWidth:!0,children:[(0,t.jsx)(M.Z,{children:"Ban Player"}),(0,t.jsx)(W.Z,{children:(0,t.jsxs)(en.Z,{spacing:2,sx:{mt:1},children:[(0,t.jsx)(z.Z,{label:"Player Name",placeholder:"Enter player name",value:m.player,onChange:e=>g({...m,player:e.target.value}),fullWidth:!0,required:!0}),(0,t.jsx)(z.Z,{label:"Reason",placeholder:"Banned by administrator",value:m.reason,onChange:e=>g({...m,reason:e.target.value}),fullWidth:!0,multiline:!0,rows:2})]})}),(0,t.jsxs)(Q.Z,{children:[(0,t.jsx)(K.Z,{onClick:E,disabled:C,children:"Cancel"}),(0,t.jsx)(K.Z,{onClick:F,color:"error",variant:"contained",disabled:!m.player.trim()||C,startIcon:C?(0,t.jsx)(J.Z,{size:16}):(0,t.jsx)(ej.Z,{}),children:"Ban"})]})]})]})})}var eb=n(92666);function eg(e){let{children:r,value:n,index:a}=e;return(0,t.jsx)("div",{role:"tabpanel",hidden:n!==a,children:n===a&&(0,t.jsx)(s.Z,{sx:{py:3},children:r})})}function eC(){let[e,r]=(0,a.useState)(0),[n,v]=(0,a.useState)(""),{data:f,isLoading:j}=(0,eb.x$)(),Z=null==f?void 0:f.servers;return(0,a.useEffect)(()=>{!n&&Z&&Z.length>0&&v(Z[0].name)},[Z,n]),(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(y.Z,{elevation:0,sx:{mb:4,p:3,background:e=>"linear-gradient(135deg, ".concat((0,x.Fq)(e.palette.info.main,.1)," 0%, ").concat((0,x.Fq)(e.palette.secondary.main,.1)," 100%)"),borderRadius:2,border:e=>"1px solid ".concat((0,x.Fq)(e.palette.info.main,.2))},children:(0,t.jsxs)(s.Z,{sx:{display:"flex",alignItems:"center",gap:2},children:[(0,t.jsx)(s.Z,{sx:{display:"flex",alignItems:"center",justifyContent:"center",width:56,height:56,borderRadius:2,bgcolor:"info.main",color:"info.contrastText"},children:(0,t.jsx)(m.Z,{sx:{fontSize:32}})}),(0,t.jsxs)(s.Z,{children:[(0,t.jsx)(o.Z,{variant:"h4",component:"h1",fontWeight:"bold",children:"Player Management"}),(0,t.jsx)(o.Z,{variant:"body1",color:"text.secondary",children:"Manage players, whitelist, operators, and bans across your servers"})]})]})}),(0,t.jsx)(s.Z,{sx:{mb:3},children:(0,t.jsxs)(d.Z,{sx:{minWidth:200},children:[(0,t.jsx)(u.Z,{id:"server-select-label",children:"Server"}),(0,t.jsx)(h.Z,{labelId:"server-select-label",value:n,label:"Server",onChange:e=>v(e.target.value),disabled:j,children:null==Z?void 0:Z.map(e=>(0,t.jsx)(p.Z,{value:e.name,children:e.name},e.name))})]})}),(0,t.jsx)(s.Z,{sx:{borderBottom:1,borderColor:"divider"},children:(0,t.jsxs)(l.Z,{value:e,onChange:(e,n)=>{r(n)},"aria-label":"Player management tabs",children:[(0,t.jsx)(c.Z,{label:"Online Players"}),(0,t.jsx)(c.Z,{label:"Whitelist",disabled:!n}),(0,t.jsx)(c.Z,{label:"Operators",disabled:!n}),(0,t.jsx)(c.Z,{label:"Ban List",disabled:!n})]})}),(0,t.jsx)(eg,{value:e,index:0,children:(0,t.jsx)(er,{})}),(0,t.jsx)(eg,{value:e,index:1,children:n&&(0,t.jsxs)(i.ZP,{container:!0,spacing:3,children:[(0,t.jsx)(i.ZP,{item:!0,xs:12,md:8,children:(0,t.jsx)(es,{serverName:n})}),(0,t.jsx)(i.ZP,{item:!0,xs:12,md:4,children:(0,t.jsxs)(s.Z,{sx:{p:2,bgcolor:"background.paper",borderRadius:1},children:[(0,t.jsx)(o.Z,{variant:"subtitle2",color:"text.secondary",gutterBottom:!0,children:"About Whitelist"}),(0,t.jsx)(o.Z,{variant:"body2",color:"text.secondary",children:"The whitelist controls which players can join your server. When enabled, only players on the whitelist can connect. Add players by their Minecraft username."})]})})]})}),(0,t.jsx)(eg,{value:e,index:2,children:n&&(0,t.jsxs)(i.ZP,{container:!0,spacing:3,children:[(0,t.jsx)(i.ZP,{item:!0,xs:12,md:8,children:(0,t.jsx)(ef,{serverName:n})}),(0,t.jsx)(i.ZP,{item:!0,xs:12,md:4,children:(0,t.jsxs)(s.Z,{sx:{p:2,bgcolor:"background.paper",borderRadius:1},children:[(0,t.jsx)(o.Z,{variant:"subtitle2",color:"text.secondary",gutterBottom:!0,children:"About Operators"}),(0,t.jsx)(o.Z,{variant:"body2",color:"text.secondary",children:"Operators (OPs) have elevated permissions on the server. They can use commands like /give, /gamemode, /tp, and more. OP levels range from 1-4, with 4 being the highest."}),(0,t.jsxs)(s.Z,{sx:{mt:2},children:[(0,t.jsx)(o.Z,{variant:"caption",color:"text.secondary",component:"div",children:"Level 1: Can bypass spawn protection"}),(0,t.jsx)(o.Z,{variant:"caption",color:"text.secondary",component:"div",children:"Level 2: Can use /clear, /gamemode, etc."}),(0,t.jsx)(o.Z,{variant:"caption",color:"text.secondary",component:"div",children:"Level 3: Can use /ban, /kick, /op, etc."}),(0,t.jsx)(o.Z,{variant:"caption",color:"text.secondary",component:"div",children:"Level 4: Can use /stop, full access"})]})]})})]})}),(0,t.jsx)(eg,{value:e,index:3,children:n&&(0,t.jsxs)(i.ZP,{container:!0,spacing:3,children:[(0,t.jsx)(i.ZP,{item:!0,xs:12,md:8,children:(0,t.jsx)(eZ,{serverName:n})}),(0,t.jsx)(i.ZP,{item:!0,xs:12,md:4,children:(0,t.jsxs)(s.Z,{sx:{p:2,bgcolor:"background.paper",borderRadius:1},children:[(0,t.jsx)(o.Z,{variant:"subtitle2",color:"text.secondary",gutterBottom:!0,children:"About Bans"}),(0,t.jsx)(o.Z,{variant:"body2",color:"text.secondary",children:"Banned players cannot connect to your server. You can ban players by username and provide an optional reason. Bans can be removed (pardoned) at any time."})]})})]})})]})}},42936:function(e,r,n){"use strict";async function t(e){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n={...r.headers};r.body&&(n["Content-Type"]="application/json");let t=await fetch(e,{...r,headers:n});if(!t.ok){let e=await t.json().catch(()=>({error:"UnknownError",message:t.statusText})),r=Error(e.message);throw r.statusCode=t.status,r.code=e.error,r}return t.json()}n.d(r,{SC:function(){return t}})},92666:function(e,r,n){"use strict";n.d(r,{$t:function(){return C},Aw:function(){return u},Fv:function(){return v},Hq:function(){return c},Hy:function(){return l},MH:function(){return j},Sr:function(){return p},_I:function(){return h},c5:function(){return S},g2:function(){return m},gx:function(){return Z},hy:function(){return y},iC:function(){return f},jM:function(){return d},mj:function(){return g},nq:function(){return x},nv:function(){return b},s8:function(){return w},x$:function(){return i}});var t=n(5632),a=n(58919),s=n(20367),o=n(42936);function i(){return(0,t.a)({queryKey:["servers"],queryFn:()=>(0,o.SC)("/api/servers"),refetchInterval:6e4})}function l(e,r){return(0,t.a)({queryKey:["servers",e],queryFn:()=>(0,o.SC)("/api/servers/".concat(encodeURIComponent(e))),enabled:(null==r?void 0:r.enabled)!==!1&&!!e,refetchInterval:3e4})}function c(){let e=(0,a.NL)();return(0,s.D)({mutationFn:e=>{let{name:r,force:n}=e;return(0,o.SC)("/api/servers/".concat(encodeURIComponent(r)).concat(n?"?force=true":""),{method:"DELETE"})},onSuccess:()=>{e.invalidateQueries({queryKey:["servers"]})}})}function d(){let e=(0,a.NL)();return(0,s.D)({mutationFn:e=>(0,o.SC)("/api/servers/".concat(encodeURIComponent(e),"/start"),{method:"POST"}),onSuccess:(r,n)=>{e.invalidateQueries({queryKey:["servers"]}),e.invalidateQueries({queryKey:["servers",n]})}})}function u(){let e=(0,a.NL)();return(0,s.D)({mutationFn:e=>(0,o.SC)("/api/servers/".concat(encodeURIComponent(e),"/stop"),{method:"POST"}),onSuccess:(r,n)=>{e.invalidateQueries({queryKey:["servers"]}),e.invalidateQueries({queryKey:["servers",n]})}})}function h(){let e=(0,a.NL)();return(0,s.D)({mutationFn:e=>(0,o.SC)("/api/servers/".concat(encodeURIComponent(e),"/restart"),{method:"POST"}),onSuccess:(r,n)=>{e.invalidateQueries({queryKey:["servers"]}),e.invalidateQueries({queryKey:["servers",n]})}})}function p(){return(0,t.a)({queryKey:["worlds"],queryFn:()=>(0,o.SC)("/api/worlds"),refetchInterval:3e4})}function y(){let e=(0,a.NL)();return(0,s.D)({mutationFn:e=>(0,o.SC)("/api/worlds",{method:"POST",body:JSON.stringify(e)}),onSuccess:()=>{e.invalidateQueries({queryKey:["worlds"]})}})}function x(){let e=(0,a.NL)();return(0,s.D)({mutationFn:e=>{let{worldName:r,serverName:n}=e;return(0,o.SC)("/api/worlds/".concat(encodeURIComponent(r),"/assign"),{method:"POST",body:JSON.stringify({serverName:n})})},onSuccess:()=>{e.invalidateQueries({queryKey:["worlds"]}),e.invalidateQueries({queryKey:["servers"]})}})}function m(){let e=(0,a.NL)();return(0,s.D)({mutationFn:e=>{let{worldName:r,force:n}=e;return(0,o.SC)("/api/worlds/".concat(encodeURIComponent(r),"/release").concat(n?"?force=true":""),{method:"POST"})},onSuccess:()=>{e.invalidateQueries({queryKey:["worlds"]})}})}function v(){let e=(0,a.NL)();return(0,s.D)({mutationFn:e=>{let{name:r,force:n}=e;return(0,o.SC)("/api/worlds/".concat(encodeURIComponent(r)).concat(n?"?force=true":""),{method:"DELETE"})},onSuccess:()=>{e.invalidateQueries({queryKey:["worlds"]})}})}function f(e,r){return(0,t.a)({queryKey:["servers",e,"config"],queryFn:()=>(0,o.SC)("/api/servers/".concat(encodeURIComponent(e),"/config")),enabled:(null==r?void 0:r.enabled)!==!1&&!!e})}function j(){let e=(0,a.NL)();return(0,s.D)({mutationFn:e=>{let{serverName:r,config:n}=e;return(0,o.SC)("/api/servers/".concat(encodeURIComponent(r),"/config"),{method:"PATCH",body:JSON.stringify(n)})},onSuccess:(r,n)=>{let{serverName:t}=n;e.invalidateQueries({queryKey:["servers",t,"config"]}),e.invalidateQueries({queryKey:["servers",t]})}})}function Z(){let e=(0,a.NL)();return(0,s.D)({mutationFn:e=>(0,o.SC)("/api/servers/".concat(encodeURIComponent(e),"/world/reset"),{method:"POST"}),onSuccess:(r,n)=>{e.invalidateQueries({queryKey:["servers",n]}),e.invalidateQueries({queryKey:["worlds"]})}})}function b(){return(0,t.a)({queryKey:["router-status"],queryFn:()=>(0,o.SC)("/api/router/status"),refetchInterval:3e4})}function g(){return(0,t.a)({queryKey:["backup-status"],queryFn:()=>(0,o.SC)("/api/backup"),refetchInterval:6e4})}function C(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:20;return(0,t.a)({queryKey:["backup-history",e],queryFn:()=>(0,o.SC)("/api/backup/history?limit=".concat(e)),refetchInterval:6e4})}function S(){let e=(0,a.NL)();return(0,s.D)({mutationFn:e=>{let{message:r}=e;return(0,o.SC)("/api/backup",{method:"POST",body:JSON.stringify({message:r})})},onSuccess:()=>{e.invalidateQueries({queryKey:["backup-status"]}),e.invalidateQueries({queryKey:["backup-history"]})}})}function w(){let e=(0,a.NL)();return(0,s.D)({mutationFn:e=>(0,o.SC)("/api/backup/restore",{method:"POST",body:JSON.stringify({commitHash:e})}),onSuccess:()=>{e.invalidateQueries({queryKey:["worlds"]}),e.invalidateQueries({queryKey:["servers"]})}})}}},function(e){e.O(0,[6812,9760,6758,680,1668,7436,1071,540,4416,521,7359,880,6857,8347,1658,5381,4474,8558,3669,2757,1744],function(){return e(e.s=31809)}),_N_E=e.O()}]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[148],{61943:function(e,n,t){Promise.resolve().then(t.bind(t,34488))},34488:function(e,n,t){"use strict";t.r(n),t.d(n,{default:function(){return p}});var r=t(94655),i=t(7281),s=t(84840),o=t(31317),a=t(10721),u=t(81071),c=t(628),l=t(41565),d=t(69899),h=t(76492),x=t(29983),y=t(92666),f=t(11189);function v(e){let{rows:n}=e;return(0,r.jsx)(c.Z,{children:(0,r.jsxs)(l.Z,{children:[(0,r.jsxs)(i.Z,{sx:{display:"flex",alignItems:"center",gap:1,mb:2},children:[(0,r.jsx)(a.Z,{variant:"circular",width:24,height:24}),(0,r.jsx)(a.Z,{variant:"text",width:"50%",height:32})]}),[...Array(n)].map((e,n)=>(0,r.jsxs)(i.Z,{sx:{display:"flex",justifyContent:"space-between",py:.75},children:[(0,r.jsx)(a.Z,{variant:"text",width:"35%"}),(0,r.jsx)(a.Z,{variant:"text",width:"40%"})]},n))]})})}function m(){return(0,r.jsx)(c.Z,{sx:{height:"100%"},children:(0,r.jsxs)(l.Z,{children:[(0,r.jsxs)(i.Z,{sx:{display:"flex",alignItems:"center",gap:1,mb:2},children:[(0,r.jsx)(a.Z,{variant:"circular",width:24,height:24}),(0,r.jsx)(a.Z,{variant:"text",width:"40%",height:32}),(0,r.jsxs)(i.Z,{sx:{ml:"auto",display:"flex",gap:1},children:[(0,r.jsx)(a.Z,{variant:"rounded",width:70,height:24}),(0,r.jsx)(a.Z,{variant:"rounded",width:70,height:24})]})]}),(0,r.jsx)(a.Z,{variant:"text",width:"30%",sx:{mt:3,mb:1}}),[0,1].map(e=>(0,r.jsxs)(i.Z,{sx:{border:1,borderColor:"divider",p:2,"&:not(:last-child)":{borderBottom:0}},children:[(0,r.jsxs)(i.Z,{sx:{display:"flex",alignItems:"center",gap:1,mb:1.5},children:[(0,r.jsx)(a.Z,{variant:"circular",width:10,height:10}),(0,r.jsx)(a.Z,{variant:"text",width:"25%"}),(0,r.jsx)(a.Z,{variant:"text",width:"15%"}),(0,r.jsx)(a.Z,{variant:"text",width:"10%",sx:{ml:"auto"}})]}),[0,1,2].map(e=>(0,r.jsx)(a.Z,{variant:"text",width:"70%",sx:{ml:2.5}},e))]},e))]})})}function p(){let{data:e,isLoading:n,error:t}=(0,y.nv)();return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(d.Z,{elevation:0,sx:{mb:4,p:3,background:e=>"linear-gradient(135deg, ".concat((0,h.Fq)(e.palette.warning.main,.1)," 0%, ").concat((0,h.Fq)(e.palette.info.main,.1)," 100%)"),borderRadius:2,border:e=>"1px solid ".concat((0,h.Fq)(e.palette.warning.main,.2))},children:(0,r.jsxs)(i.Z,{sx:{display:"flex",alignItems:"center",gap:2},children:[(0,r.jsx)(i.Z,{sx:{display:"flex",alignItems:"center",justifyContent:"center",width:56,height:56,borderRadius:2,bgcolor:"warning.main",color:"warning.contrastText"},children:(0,r.jsx)(x.Z,{sx:{fontSize:32}})}),(0,r.jsxs)(i.Z,{children:[(0,r.jsx)(o.Z,{variant:"h4",component:"h1",fontWeight:"bold",children:"Routing"}),(0,r.jsx)(o.Z,{variant:"body1",color:"text.secondary",children:"Server routing and network configuration"})]})]})}),t&&(0,r.jsxs)(u.Z,{severity:"error",sx:{mb:3},children:["Failed to load router status: ",t.message]}),n?(0,r.jsxs)(s.ZP,{container:!0,spacing:3,children:[(0,r.jsx)(s.ZP,{item:!0,xs:12,md:4,children:(0,r.jsxs)(i.Z,{sx:{display:"flex",flexDirection:"column",gap:3},children:[(0,r.jsx)(v,{rows:4}),(0,r.jsx)(v,{rows:4}),(0,r.jsx)(v,{rows:1})]})}),(0,r.jsx)(s.ZP,{item:!0,xs:12,md:8,children:(0,r.jsx)(m,{})})]}):(null==e?void 0:e.router)?(0,r.jsxs)(s.ZP,{container:!0,spacing:3,children:[(0,r.jsx)(s.ZP,{item:!0,xs:12,md:4,children:(0,r.jsxs)(i.Z,{sx:{display:"flex",flexDirection:"column",gap:3},children:[(0,r.jsx)(f.hI,{router:e.router}),(0,r.jsx)(f.SB,{router:e.router}),(0,r.jsx)(f.E4,{avahi:e.avahi})]})}),(0,r.jsx)(s.ZP,{item:!0,xs:12,md:8,children:(0,r.jsx)(f.Ik,{router:e.router})})]}):null]})}},42936:function(e,n,t){"use strict";async function r(e){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},t={...n.headers};n.body&&(t["Content-Type"]="application/json");let r=await fetch(e,{...n,headers:t});if(!r.ok){let e=await r.json().catch(()=>({error:"UnknownError",message:r.statusText})),n=Error(e.message);throw n.statusCode=r.status,n.code=e.error,n}return r.json()}t.d(n,{SC:function(){return r}})},92666:function(e,n,t){"use strict";t.d(n,{$t:function(){return C},Aw:function(){return d},Fv:function(){return m},Hq:function(){return c},Hy:function(){return u},MH:function(){return j},Sr:function(){return x},_I:function(){return h},c5:function(){return Z},g2:function(){return v},gx:function(){return g},hy:function(){return y},iC:function(){return p},jM:function(){return l},mj:function(){return w},nq:function(){return f},nv:function(){return S},s8:function(){return q},x$:function(){return a}});var r=t(5632),i=t(58919),s=t(20367),o=t(42936);function a(){return(0,r.a)({queryKey:["servers"],queryFn:()=>(0,o.SC)("/api/servers"),refetchInterval:6e4})}function u(e,n){return(0,r.a)({queryKey:["servers",e],queryFn:()=>(0,o.SC)("/api/servers/".concat(encodeURIComponent(e))),enabled:(null==n?void 0:n.enabled)!==!1&&!!e,refetchInterval:3e4})}function c(){let e=(0,i.NL)();return(0,s.D)({mutationFn:e=>{let{name:n,force:t}=e;return(0,o.SC)("/api/servers/".concat(encodeURIComponent(n)).concat(t?"?force=true":""),{method:"DELETE"})},onSuccess:()=>{e.invalidateQueries({queryKey:["servers"]})}})}function l(){let e=(0,i.NL)();return(0,s.D)({mutationFn:e=>(0,o.SC)("/api/servers/".concat(encodeURIComponent(e),"/start"),{method:"POST"}),onSuccess:(n,t)=>{e.invalidateQueries({queryKey:["servers"]}),e.invalidateQueries({queryKey:["servers",t]})}})}function d(){let e=(0,i.NL)();return(0,s.D)({mutationFn:e=>(0,o.SC)("/api/servers/".concat(encodeURIComponent(e),"/stop"),{method:"POST"}),onSuccess:(n,t)=>{e.invalidateQueries({queryKey:["servers"]}),e.invalidateQueries({queryKey:["servers",t]})}})}function h(){let e=(0,i.NL)();return(0,s.D)({mutationFn:e=>(0,o.SC)("/api/servers/".concat(encodeURIComponent(e),"/restart"),{method:"POST"}),onSuccess:(n,t)=>{e.invalidateQueries({queryKey:["servers"]}),e.invalidateQueries({queryKey:["servers",t]})}})}function x(){return(0,r.a)({queryKey:["worlds"],queryFn:()=>(0,o.SC)("/api/worlds"),refetchInterval:3e4})}function y(){let e=(0,i.NL)();return(0,s.D)({mutationFn:e=>(0,o.SC)("/api/worlds",{method:"POST",body:JSON.stringify(e)}),onSuccess:()=>{e.invalidateQueries({queryKey:["worlds"]})}})}function f(){let e=(0,i.NL)();return(0,s.D)({mutationFn:e=>{let{worldName:n,serverName:t}=e;return(0,o.SC)("/api/worlds/".concat(encodeURIComponent(n),"/assign"),{method:"POST",body:JSON.stringify({serverName:t})})},onSuccess:()=>{e.invalidateQueries({queryKey:["worlds"]}),e.invalidateQueries({queryKey:["servers"]})}})}function v(){let e=(0,i.NL)();return(0,s.D)({mutationFn:e=>{let{worldName:n,force:t}=e;return(0,o.SC)("/api/worlds/".concat(encodeURIComponent(n),"/release").concat(t?"?force=true":""),{method:"POST"})},onSuccess:()=>{e.invalidateQueries({queryKey:["worlds"]})}})}function m(){let e=(0,i.NL)();return(0,s.D)({mutationFn:e=>{let{name:n,force:t}=e;return(0,o.SC)("/api/worlds/".concat(encodeURIComponent(n)).concat(t?"?force=true":""),{method:"DELETE"})},onSuccess:()=>{e.invalidateQueries({queryKey:["worlds"]})}})}function p(e,n){return(0,r.a)({queryKey:["servers",e,"config"],queryFn:()=>(0,o.SC)("/api/servers/".concat(encodeURIComponent(e),"/config")),enabled:(null==n?void 0:n.enabled)!==!1&&!!e})}function j(){let e=(0,i.NL)();return(0,s.D)({mutationFn:e=>{let{serverName:n,config:t}=e;return(0,o.SC)("/api/servers/".concat(encodeURIComponent(n),"/config"),{method:"PATCH",body:JSON.stringify(t)})},onSuccess:(n,t)=>{let{serverName:r}=t;e.invalidateQueries({queryKey:["servers",r,"config"]}),e.invalidateQueries({queryKey:["servers",r]})}})}function g(){let e=(0,i.NL)();return(0,s.D)({mutationFn:e=>(0,o.SC)("/api/servers/".concat(encodeURIComponent(e),"/world/reset"),{method:"POST"}),onSuccess:(n,t)=>{e.invalidateQueries({queryKey:["servers",t]}),e.invalidateQueries({queryKey:["worlds"]})}})}function S(){return(0,r.a)({queryKey:["router-status"],queryFn:()=>(0,o.SC)("/api/router/status"),refetchInterval:3e4})}function w(){return(0,r.a)({queryKey:["backup-status"],queryFn:()=>(0,o.SC)("/api/backup"),refetchInterval:6e4})}function C(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:20;return(0,r.a)({queryKey:["backup-history",e],queryFn:()=>(0,o.SC)("/api/backup/history?limit=".concat(e)),refetchInterval:6e4})}function Z(){let e=(0,i.NL)();return(0,s.D)({mutationFn:e=>{let{message:n}=e;return(0,o.SC)("/api/backup",{method:"POST",body:JSON.stringify({message:n})})},onSuccess:()=>{e.invalidateQueries({queryKey:["backup-status"]}),e.invalidateQueries({queryKey:["backup-history"]})}})}function q(){let e=(0,i.NL)();return(0,s.D)({mutationFn:e=>(0,o.SC)("/api/backup/restore",{method:"POST",body:JSON.stringify({commitHash:e})}),onSuccess:()=>{e.invalidateQueries({queryKey:["worlds"]}),e.invalidateQueries({queryKey:["servers"]})}})}}},function(e){e.O(0,[6812,9760,6758,680,1668,7436,1071,540,4416,
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[148],{61943:function(e,n,t){Promise.resolve().then(t.bind(t,34488))},34488:function(e,n,t){"use strict";t.r(n),t.d(n,{default:function(){return p}});var r=t(94655),i=t(7281),s=t(84840),o=t(31317),a=t(10721),u=t(81071),c=t(628),l=t(41565),d=t(69899),h=t(76492),x=t(29983),y=t(92666),f=t(11189);function v(e){let{rows:n}=e;return(0,r.jsx)(c.Z,{children:(0,r.jsxs)(l.Z,{children:[(0,r.jsxs)(i.Z,{sx:{display:"flex",alignItems:"center",gap:1,mb:2},children:[(0,r.jsx)(a.Z,{variant:"circular",width:24,height:24}),(0,r.jsx)(a.Z,{variant:"text",width:"50%",height:32})]}),[...Array(n)].map((e,n)=>(0,r.jsxs)(i.Z,{sx:{display:"flex",justifyContent:"space-between",py:.75},children:[(0,r.jsx)(a.Z,{variant:"text",width:"35%"}),(0,r.jsx)(a.Z,{variant:"text",width:"40%"})]},n))]})})}function m(){return(0,r.jsx)(c.Z,{sx:{height:"100%"},children:(0,r.jsxs)(l.Z,{children:[(0,r.jsxs)(i.Z,{sx:{display:"flex",alignItems:"center",gap:1,mb:2},children:[(0,r.jsx)(a.Z,{variant:"circular",width:24,height:24}),(0,r.jsx)(a.Z,{variant:"text",width:"40%",height:32}),(0,r.jsxs)(i.Z,{sx:{ml:"auto",display:"flex",gap:1},children:[(0,r.jsx)(a.Z,{variant:"rounded",width:70,height:24}),(0,r.jsx)(a.Z,{variant:"rounded",width:70,height:24})]})]}),(0,r.jsx)(a.Z,{variant:"text",width:"30%",sx:{mt:3,mb:1}}),[0,1].map(e=>(0,r.jsxs)(i.Z,{sx:{border:1,borderColor:"divider",p:2,"&:not(:last-child)":{borderBottom:0}},children:[(0,r.jsxs)(i.Z,{sx:{display:"flex",alignItems:"center",gap:1,mb:1.5},children:[(0,r.jsx)(a.Z,{variant:"circular",width:10,height:10}),(0,r.jsx)(a.Z,{variant:"text",width:"25%"}),(0,r.jsx)(a.Z,{variant:"text",width:"15%"}),(0,r.jsx)(a.Z,{variant:"text",width:"10%",sx:{ml:"auto"}})]}),[0,1,2].map(e=>(0,r.jsx)(a.Z,{variant:"text",width:"70%",sx:{ml:2.5}},e))]},e))]})})}function p(){let{data:e,isLoading:n,error:t}=(0,y.nv)();return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(d.Z,{elevation:0,sx:{mb:4,p:3,background:e=>"linear-gradient(135deg, ".concat((0,h.Fq)(e.palette.warning.main,.1)," 0%, ").concat((0,h.Fq)(e.palette.info.main,.1)," 100%)"),borderRadius:2,border:e=>"1px solid ".concat((0,h.Fq)(e.palette.warning.main,.2))},children:(0,r.jsxs)(i.Z,{sx:{display:"flex",alignItems:"center",gap:2},children:[(0,r.jsx)(i.Z,{sx:{display:"flex",alignItems:"center",justifyContent:"center",width:56,height:56,borderRadius:2,bgcolor:"warning.main",color:"warning.contrastText"},children:(0,r.jsx)(x.Z,{sx:{fontSize:32}})}),(0,r.jsxs)(i.Z,{children:[(0,r.jsx)(o.Z,{variant:"h4",component:"h1",fontWeight:"bold",children:"Routing"}),(0,r.jsx)(o.Z,{variant:"body1",color:"text.secondary",children:"Server routing and network configuration"})]})]})}),t&&(0,r.jsxs)(u.Z,{severity:"error",sx:{mb:3},children:["Failed to load router status: ",t.message]}),n?(0,r.jsxs)(s.ZP,{container:!0,spacing:3,children:[(0,r.jsx)(s.ZP,{item:!0,xs:12,md:4,children:(0,r.jsxs)(i.Z,{sx:{display:"flex",flexDirection:"column",gap:3},children:[(0,r.jsx)(v,{rows:4}),(0,r.jsx)(v,{rows:4}),(0,r.jsx)(v,{rows:1})]})}),(0,r.jsx)(s.ZP,{item:!0,xs:12,md:8,children:(0,r.jsx)(m,{})})]}):(null==e?void 0:e.router)?(0,r.jsxs)(s.ZP,{container:!0,spacing:3,children:[(0,r.jsx)(s.ZP,{item:!0,xs:12,md:4,children:(0,r.jsxs)(i.Z,{sx:{display:"flex",flexDirection:"column",gap:3},children:[(0,r.jsx)(f.hI,{router:e.router}),(0,r.jsx)(f.SB,{router:e.router}),(0,r.jsx)(f.E4,{avahi:e.avahi})]})}),(0,r.jsx)(s.ZP,{item:!0,xs:12,md:8,children:(0,r.jsx)(f.Ik,{router:e.router})})]}):null]})}},42936:function(e,n,t){"use strict";async function r(e){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},t={...n.headers};n.body&&(t["Content-Type"]="application/json");let r=await fetch(e,{...n,headers:t});if(!r.ok){let e=await r.json().catch(()=>({error:"UnknownError",message:r.statusText})),n=Error(e.message);throw n.statusCode=r.status,n.code=e.error,n}return r.json()}t.d(n,{SC:function(){return r}})},92666:function(e,n,t){"use strict";t.d(n,{$t:function(){return C},Aw:function(){return d},Fv:function(){return m},Hq:function(){return c},Hy:function(){return u},MH:function(){return j},Sr:function(){return x},_I:function(){return h},c5:function(){return Z},g2:function(){return v},gx:function(){return g},hy:function(){return y},iC:function(){return p},jM:function(){return l},mj:function(){return w},nq:function(){return f},nv:function(){return S},s8:function(){return q},x$:function(){return a}});var r=t(5632),i=t(58919),s=t(20367),o=t(42936);function a(){return(0,r.a)({queryKey:["servers"],queryFn:()=>(0,o.SC)("/api/servers"),refetchInterval:6e4})}function u(e,n){return(0,r.a)({queryKey:["servers",e],queryFn:()=>(0,o.SC)("/api/servers/".concat(encodeURIComponent(e))),enabled:(null==n?void 0:n.enabled)!==!1&&!!e,refetchInterval:3e4})}function c(){let e=(0,i.NL)();return(0,s.D)({mutationFn:e=>{let{name:n,force:t}=e;return(0,o.SC)("/api/servers/".concat(encodeURIComponent(n)).concat(t?"?force=true":""),{method:"DELETE"})},onSuccess:()=>{e.invalidateQueries({queryKey:["servers"]})}})}function l(){let e=(0,i.NL)();return(0,s.D)({mutationFn:e=>(0,o.SC)("/api/servers/".concat(encodeURIComponent(e),"/start"),{method:"POST"}),onSuccess:(n,t)=>{e.invalidateQueries({queryKey:["servers"]}),e.invalidateQueries({queryKey:["servers",t]})}})}function d(){let e=(0,i.NL)();return(0,s.D)({mutationFn:e=>(0,o.SC)("/api/servers/".concat(encodeURIComponent(e),"/stop"),{method:"POST"}),onSuccess:(n,t)=>{e.invalidateQueries({queryKey:["servers"]}),e.invalidateQueries({queryKey:["servers",t]})}})}function h(){let e=(0,i.NL)();return(0,s.D)({mutationFn:e=>(0,o.SC)("/api/servers/".concat(encodeURIComponent(e),"/restart"),{method:"POST"}),onSuccess:(n,t)=>{e.invalidateQueries({queryKey:["servers"]}),e.invalidateQueries({queryKey:["servers",t]})}})}function x(){return(0,r.a)({queryKey:["worlds"],queryFn:()=>(0,o.SC)("/api/worlds"),refetchInterval:3e4})}function y(){let e=(0,i.NL)();return(0,s.D)({mutationFn:e=>(0,o.SC)("/api/worlds",{method:"POST",body:JSON.stringify(e)}),onSuccess:()=>{e.invalidateQueries({queryKey:["worlds"]})}})}function f(){let e=(0,i.NL)();return(0,s.D)({mutationFn:e=>{let{worldName:n,serverName:t}=e;return(0,o.SC)("/api/worlds/".concat(encodeURIComponent(n),"/assign"),{method:"POST",body:JSON.stringify({serverName:t})})},onSuccess:()=>{e.invalidateQueries({queryKey:["worlds"]}),e.invalidateQueries({queryKey:["servers"]})}})}function v(){let e=(0,i.NL)();return(0,s.D)({mutationFn:e=>{let{worldName:n,force:t}=e;return(0,o.SC)("/api/worlds/".concat(encodeURIComponent(n),"/release").concat(t?"?force=true":""),{method:"POST"})},onSuccess:()=>{e.invalidateQueries({queryKey:["worlds"]})}})}function m(){let e=(0,i.NL)();return(0,s.D)({mutationFn:e=>{let{name:n,force:t}=e;return(0,o.SC)("/api/worlds/".concat(encodeURIComponent(n)).concat(t?"?force=true":""),{method:"DELETE"})},onSuccess:()=>{e.invalidateQueries({queryKey:["worlds"]})}})}function p(e,n){return(0,r.a)({queryKey:["servers",e,"config"],queryFn:()=>(0,o.SC)("/api/servers/".concat(encodeURIComponent(e),"/config")),enabled:(null==n?void 0:n.enabled)!==!1&&!!e})}function j(){let e=(0,i.NL)();return(0,s.D)({mutationFn:e=>{let{serverName:n,config:t}=e;return(0,o.SC)("/api/servers/".concat(encodeURIComponent(n),"/config"),{method:"PATCH",body:JSON.stringify(t)})},onSuccess:(n,t)=>{let{serverName:r}=t;e.invalidateQueries({queryKey:["servers",r,"config"]}),e.invalidateQueries({queryKey:["servers",r]})}})}function g(){let e=(0,i.NL)();return(0,s.D)({mutationFn:e=>(0,o.SC)("/api/servers/".concat(encodeURIComponent(e),"/world/reset"),{method:"POST"}),onSuccess:(n,t)=>{e.invalidateQueries({queryKey:["servers",t]}),e.invalidateQueries({queryKey:["worlds"]})}})}function S(){return(0,r.a)({queryKey:["router-status"],queryFn:()=>(0,o.SC)("/api/router/status"),refetchInterval:3e4})}function w(){return(0,r.a)({queryKey:["backup-status"],queryFn:()=>(0,o.SC)("/api/backup"),refetchInterval:6e4})}function C(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:20;return(0,r.a)({queryKey:["backup-history",e],queryFn:()=>(0,o.SC)("/api/backup/history?limit=".concat(e)),refetchInterval:6e4})}function Z(){let e=(0,i.NL)();return(0,s.D)({mutationFn:e=>{let{message:n}=e;return(0,o.SC)("/api/backup",{method:"POST",body:JSON.stringify({message:n})})},onSuccess:()=>{e.invalidateQueries({queryKey:["backup-status"]}),e.invalidateQueries({queryKey:["backup-history"]})}})}function q(){let e=(0,i.NL)();return(0,s.D)({mutationFn:e=>(0,o.SC)("/api/backup/restore",{method:"POST",body:JSON.stringify({commitHash:e})}),onSuccess:()=>{e.invalidateQueries({queryKey:["worlds"]}),e.invalidateQueries({queryKey:["servers"]})}})}}},function(e){e.O(0,[6812,9760,6758,680,1668,7436,1071,540,4416,521,5511,2542,7359,9654,5381,4668,1189,3669,2757,1744],function(){return e(e.s=61943)}),_N_E=e.O()}]);
|