@minecraft-docker/mcctl-console 1.13.0 → 1.14.0

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.
Files changed (259) hide show
  1. package/.next/standalone/platform/services/mcctl-console/.next/BUILD_ID +1 -1
  2. package/.next/standalone/platform/services/mcctl-console/.next/app-build-manifest.json +134 -102
  3. package/.next/standalone/platform/services/mcctl-console/.next/app-path-routes-manifest.json +1 -1
  4. package/.next/standalone/platform/services/mcctl-console/.next/build-manifest.json +4 -4
  5. package/.next/standalone/platform/services/mcctl-console/.next/prerender-manifest.json +1 -1
  6. package/.next/standalone/platform/services/mcctl-console/.next/routes-manifest.json +1 -1
  7. package/.next/standalone/platform/services/mcctl-console/.next/server/app/(main)/audit-logs/page.js +1 -1
  8. package/.next/standalone/platform/services/mcctl-console/.next/server/app/(main)/audit-logs/page.js.nft.json +1 -1
  9. package/.next/standalone/platform/services/mcctl-console/.next/server/app/(main)/audit-logs/page_client-reference-manifest.js +1 -1
  10. package/.next/standalone/platform/services/mcctl-console/.next/server/app/(main)/backups/page.js +1 -0
  11. package/.next/standalone/platform/services/mcctl-console/.next/server/app/(main)/backups/page.js.nft.json +1 -0
  12. package/.next/standalone/platform/services/mcctl-console/.next/server/app/(main)/backups/page_client-reference-manifest.js +1 -0
  13. package/.next/standalone/platform/services/mcctl-console/.next/server/app/(main)/dashboard/page.js +1 -1
  14. package/.next/standalone/platform/services/mcctl-console/.next/server/app/(main)/dashboard/page.js.nft.json +1 -1
  15. package/.next/standalone/platform/services/mcctl-console/.next/server/app/(main)/dashboard/page_client-reference-manifest.js +1 -1
  16. package/.next/standalone/platform/services/mcctl-console/.next/server/app/(main)/players/page.js +1 -1
  17. package/.next/standalone/platform/services/mcctl-console/.next/server/app/(main)/players/page.js.nft.json +1 -1
  18. package/.next/standalone/platform/services/mcctl-console/.next/server/app/(main)/players/page_client-reference-manifest.js +1 -1
  19. package/.next/standalone/platform/services/mcctl-console/.next/server/app/(main)/routing/page.js +51 -1
  20. package/.next/standalone/platform/services/mcctl-console/.next/server/app/(main)/routing/page.js.nft.json +1 -1
  21. package/.next/standalone/platform/services/mcctl-console/.next/server/app/(main)/routing/page_client-reference-manifest.js +1 -1
  22. package/.next/standalone/platform/services/mcctl-console/.next/server/app/(main)/servers/[name]/console/page.js +1 -1
  23. package/.next/standalone/platform/services/mcctl-console/.next/server/app/(main)/servers/[name]/console/page.js.nft.json +1 -1
  24. package/.next/standalone/platform/services/mcctl-console/.next/server/app/(main)/servers/[name]/console/page_client-reference-manifest.js +1 -1
  25. package/.next/standalone/platform/services/mcctl-console/.next/server/app/(main)/servers/[name]/page.js +1 -1
  26. package/.next/standalone/platform/services/mcctl-console/.next/server/app/(main)/servers/[name]/page.js.nft.json +1 -1
  27. package/.next/standalone/platform/services/mcctl-console/.next/server/app/(main)/servers/[name]/page_client-reference-manifest.js +1 -1
  28. package/.next/standalone/platform/services/mcctl-console/.next/server/app/(main)/servers/page.js +1 -1
  29. package/.next/standalone/platform/services/mcctl-console/.next/server/app/(main)/servers/page.js.nft.json +1 -1
  30. package/.next/standalone/platform/services/mcctl-console/.next/server/app/(main)/servers/page_client-reference-manifest.js +1 -1
  31. package/.next/standalone/platform/services/mcctl-console/.next/server/app/(main)/worlds/page.js +1 -1
  32. package/.next/standalone/platform/services/mcctl-console/.next/server/app/(main)/worlds/page.js.nft.json +1 -1
  33. package/.next/standalone/platform/services/mcctl-console/.next/server/app/(main)/worlds/page_client-reference-manifest.js +1 -1
  34. package/.next/standalone/platform/services/mcctl-console/.next/server/app/_not-found/page.js +1 -1
  35. package/.next/standalone/platform/services/mcctl-console/.next/server/app/_not-found/page.js.nft.json +1 -1
  36. package/.next/standalone/platform/services/mcctl-console/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  37. package/.next/standalone/platform/services/mcctl-console/.next/server/app/_not-found.html +1 -1
  38. package/.next/standalone/platform/services/mcctl-console/.next/server/app/_not-found.rsc +1 -1
  39. package/.next/standalone/platform/services/mcctl-console/.next/server/app/api/backup/history/route.js +1 -0
  40. package/.next/standalone/platform/services/mcctl-console/.next/server/app/api/backup/history/route.js.nft.json +1 -0
  41. package/.next/standalone/platform/services/mcctl-console/.next/server/app/api/backup/restore/route.js +1 -0
  42. package/.next/standalone/platform/services/mcctl-console/.next/server/app/api/backup/restore/route.js.nft.json +1 -0
  43. package/.next/standalone/platform/services/mcctl-console/.next/server/app/api/backup/route.js +1 -0
  44. package/.next/standalone/platform/services/mcctl-console/.next/server/app/api/backup/route.js.nft.json +1 -0
  45. package/.next/standalone/platform/services/mcctl-console/.next/server/app/api/players/ban/route.js +1 -1
  46. package/.next/standalone/platform/services/mcctl-console/.next/server/app/api/players/kick/route.js +1 -1
  47. package/.next/standalone/platform/services/mcctl-console/.next/server/app/api/players/op/route.js +1 -1
  48. package/.next/standalone/platform/services/mcctl-console/.next/server/app/api/players/route.js +1 -1
  49. package/.next/standalone/platform/services/mcctl-console/.next/server/app/api/players/whitelist/route.js +1 -1
  50. package/.next/standalone/platform/services/mcctl-console/.next/server/app/api/router/status/route.js +1 -1
  51. package/.next/standalone/platform/services/mcctl-console/.next/server/app/api/servers/[name]/[action]/route.js +1 -1
  52. package/.next/standalone/platform/services/mcctl-console/.next/server/app/api/servers/[name]/config/route.js +1 -1
  53. package/.next/standalone/platform/services/mcctl-console/.next/server/app/api/servers/[name]/exec/route.js +1 -1
  54. package/.next/standalone/platform/services/mcctl-console/.next/server/app/api/servers/[name]/route.js +1 -1
  55. package/.next/standalone/platform/services/mcctl-console/.next/server/app/api/servers/[name]/world/reset/route.js +1 -1
  56. package/.next/standalone/platform/services/mcctl-console/.next/server/app/api/servers/route.js +1 -1
  57. package/.next/standalone/platform/services/mcctl-console/.next/server/app/api/user-servers/[id]/route.js +1 -0
  58. package/.next/standalone/platform/services/mcctl-console/.next/server/app/api/user-servers/[id]/route.js.nft.json +1 -0
  59. package/.next/standalone/platform/services/mcctl-console/.next/server/app/api/user-servers/route.js +1 -0
  60. package/.next/standalone/platform/services/mcctl-console/.next/server/app/api/user-servers/route.js.nft.json +1 -0
  61. package/.next/standalone/platform/services/mcctl-console/.next/server/app/api/users/route.js +1 -0
  62. package/.next/standalone/platform/services/mcctl-console/.next/server/app/api/users/route.js.nft.json +1 -0
  63. package/.next/standalone/platform/services/mcctl-console/.next/server/app/api/worlds/[name]/[action]/route.js +1 -1
  64. package/.next/standalone/platform/services/mcctl-console/.next/server/app/api/worlds/[name]/route.js +1 -1
  65. package/.next/standalone/platform/services/mcctl-console/.next/server/app/api/worlds/route.js +1 -1
  66. package/.next/standalone/platform/services/mcctl-console/.next/server/app/audit-logs.html +1 -1
  67. package/.next/standalone/platform/services/mcctl-console/.next/server/app/audit-logs.rsc +3 -3
  68. package/.next/standalone/platform/services/mcctl-console/.next/server/app/backups.html +1 -0
  69. package/.next/standalone/platform/services/mcctl-console/.next/server/app/backups.meta +5 -0
  70. package/.next/standalone/platform/services/mcctl-console/.next/server/app/backups.rsc +18 -0
  71. package/.next/standalone/platform/services/mcctl-console/.next/server/app/dashboard.html +1 -1
  72. package/.next/standalone/platform/services/mcctl-console/.next/server/app/dashboard.rsc +3 -3
  73. package/.next/standalone/platform/services/mcctl-console/.next/server/app/index.html +1 -1
  74. package/.next/standalone/platform/services/mcctl-console/.next/server/app/index.rsc +1 -1
  75. package/.next/standalone/platform/services/mcctl-console/.next/server/app/login/page.js +1 -1
  76. package/.next/standalone/platform/services/mcctl-console/.next/server/app/login/page.js.nft.json +1 -1
  77. package/.next/standalone/platform/services/mcctl-console/.next/server/app/login/page_client-reference-manifest.js +1 -1
  78. package/.next/standalone/platform/services/mcctl-console/.next/server/app/login.html +1 -1
  79. package/.next/standalone/platform/services/mcctl-console/.next/server/app/login.rsc +2 -2
  80. package/.next/standalone/platform/services/mcctl-console/.next/server/app/page.js +1 -1
  81. package/.next/standalone/platform/services/mcctl-console/.next/server/app/page.js.nft.json +1 -1
  82. package/.next/standalone/platform/services/mcctl-console/.next/server/app/page_client-reference-manifest.js +1 -1
  83. package/.next/standalone/platform/services/mcctl-console/.next/server/app/players.html +1 -1
  84. package/.next/standalone/platform/services/mcctl-console/.next/server/app/players.rsc +3 -3
  85. package/.next/standalone/platform/services/mcctl-console/.next/server/app/routing.html +1 -1
  86. package/.next/standalone/platform/services/mcctl-console/.next/server/app/routing.rsc +3 -3
  87. package/.next/standalone/platform/services/mcctl-console/.next/server/app/servers.html +1 -1
  88. package/.next/standalone/platform/services/mcctl-console/.next/server/app/servers.rsc +3 -3
  89. package/.next/standalone/platform/services/mcctl-console/.next/server/app/signup/page.js +1 -1
  90. package/.next/standalone/platform/services/mcctl-console/.next/server/app/signup/page.js.nft.json +1 -1
  91. package/.next/standalone/platform/services/mcctl-console/.next/server/app/signup/page_client-reference-manifest.js +1 -1
  92. package/.next/standalone/platform/services/mcctl-console/.next/server/app/signup.html +1 -1
  93. package/.next/standalone/platform/services/mcctl-console/.next/server/app/signup.rsc +2 -2
  94. package/.next/standalone/platform/services/mcctl-console/.next/server/app/worlds.html +1 -1
  95. package/.next/standalone/platform/services/mcctl-console/.next/server/app/worlds.rsc +3 -3
  96. package/.next/standalone/platform/services/mcctl-console/.next/server/app-paths-manifest.json +18 -11
  97. package/.next/standalone/platform/services/mcctl-console/.next/server/chunks/3029.js +51 -0
  98. package/.next/standalone/platform/services/mcctl-console/.next/server/chunks/3076.js +1 -1
  99. package/.next/standalone/platform/services/mcctl-console/.next/server/chunks/3100.js +1 -0
  100. package/.next/standalone/platform/services/mcctl-console/.next/server/chunks/354.js +1 -1
  101. package/.next/standalone/platform/services/mcctl-console/.next/server/chunks/4972.js +1 -0
  102. package/.next/standalone/platform/services/mcctl-console/.next/server/chunks/5244.js +74 -0
  103. package/.next/standalone/platform/services/mcctl-console/.next/server/chunks/5466.js +2 -0
  104. package/.next/standalone/platform/services/mcctl-console/.next/server/chunks/613.js +1 -0
  105. package/.next/standalone/platform/services/mcctl-console/.next/server/chunks/8243.js +1 -0
  106. package/.next/standalone/platform/services/mcctl-console/.next/server/chunks/9157.js +1 -0
  107. package/.next/standalone/platform/services/mcctl-console/.next/server/chunks/9350.js +1 -0
  108. package/.next/standalone/platform/services/mcctl-console/.next/server/chunks/959.js +1 -1
  109. package/.next/standalone/platform/services/mcctl-console/.next/server/middleware-build-manifest.js +1 -1
  110. package/.next/standalone/platform/services/mcctl-console/.next/server/middleware-manifest.json +5 -5
  111. package/.next/standalone/platform/services/mcctl-console/.next/server/next-font-manifest.js +1 -1
  112. package/.next/standalone/platform/services/mcctl-console/.next/server/next-font-manifest.json +1 -1
  113. package/.next/standalone/platform/services/mcctl-console/.next/server/pages/404.html +1 -1
  114. package/.next/standalone/platform/services/mcctl-console/.next/server/pages/500.html +1 -1
  115. package/.next/standalone/platform/services/mcctl-console/.next/server/server-reference-manifest.json +1 -1
  116. package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/1071-235049df1c3caba7.js +1 -0
  117. package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/1476-a0570078fdf78fae.js +1 -0
  118. package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/2022-6da2f9a847a5d61c.js +1 -0
  119. package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/2093-bceea213e32f6b5f.js +1 -0
  120. package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/212-b904d9ae152f2360.js +1 -0
  121. package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/2149-ba1bdd1d726ab70c.js +1 -0
  122. package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/2537-6c9d2dfd403b7448.js +1 -0
  123. package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/310-72d3b802b3cefa99.js +1 -0
  124. package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/315-509f963f6c69d0a8.js +1 -0
  125. package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/3543-1ec838cbe59f6baa.js +1 -0
  126. package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/406-64ea09489141e436.js +1 -0
  127. package/.next/{static/chunks/4538-b363c77f66f5a771.js → standalone/platform/services/mcctl-console/.next/static/chunks/4538-a0d2c88024f1288a.js} +1 -1
  128. package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/4840-5802e869ffd1d2a9.js +1 -0
  129. package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/5511-7a419d84918a8d64.js +1 -0
  130. package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/6189-d8557db379604b3e.js +1 -0
  131. package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/6594-e49e36eb5a5d1bef.js +1 -0
  132. package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/6645-68b73fe1df8dba93.js +1 -0
  133. package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/6655-81288236c1babc44.js +1 -0
  134. package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/7413-419718450fadde21.js +1 -0
  135. package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/{6803-e2b09f75f207f836.js → 8006-219c9bbc650b079e.js} +1 -1
  136. package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/8322-8ae826d4c9b38acc.js +1 -0
  137. package/.next/{static/chunks/8657-ace229edcbef958f.js → standalone/platform/services/mcctl-console/.next/static/chunks/8657-f28db4e9df8cc7b0.js} +1 -1
  138. package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/8696-8adf1e9b1a84f5c0.js +1 -0
  139. package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/9030-1dcbf06ed6e20e24.js +1 -0
  140. package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/9654-84c0d7b06321aab9.js +1 -0
  141. package/.next/{static/chunks/app/(main)/audit-logs/page-a85c5c81b5ef7100.js → standalone/platform/services/mcctl-console/.next/static/chunks/app/(main)/audit-logs/page-7a5d1441bb2811cf.js} +1 -1
  142. package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/app/(main)/backups/page-cc46681d519753dd.js +1 -0
  143. package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/app/(main)/dashboard/page-b548fe2aac951e5b.js +1 -0
  144. package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/app/(main)/layout-9311354243420c0d.js +1 -0
  145. package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/app/(main)/players/page-706f5e796129df33.js +1 -0
  146. package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/app/(main)/routing/page-14f40cfd98e60a77.js +1 -0
  147. package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/app/(main)/servers/[name]/console/{page-b25581705b8b2277.js → page-ca0344337ef5da93.js} +1 -1
  148. package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/app/(main)/servers/[name]/page-55fee1f878b51fb8.js +1 -0
  149. package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/app/(main)/servers/page-efa5f11aa2956719.js +1 -0
  150. package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/app/(main)/worlds/page-3de10e94b77f6e45.js +1 -0
  151. package/.next/{static/chunks/app/login/page-39f136cf2697cefc.js → standalone/platform/services/mcctl-console/.next/static/chunks/app/login/page-3ad9d595e6c37214.js} +1 -1
  152. package/.next/{static/chunks/app/signup/page-9c69da79dac7dff9.js → standalone/platform/services/mcctl-console/.next/static/chunks/app/signup/page-69a8bc2df6bc3559.js} +1 -1
  153. package/.next/{static/chunks/main-34a19e4bc5b0f28c.js → standalone/platform/services/mcctl-console/.next/static/chunks/main-43f98b458d773ca0.js} +1 -1
  154. package/.next/standalone/platform/services/mcctl-console/.next/static/css/8dfdea5f9ccf5da4.css +1 -0
  155. package/.next/static/chunks/1071-235049df1c3caba7.js +1 -0
  156. package/.next/static/chunks/1476-a0570078fdf78fae.js +1 -0
  157. package/.next/static/chunks/2022-6da2f9a847a5d61c.js +1 -0
  158. package/.next/static/chunks/2093-bceea213e32f6b5f.js +1 -0
  159. package/.next/static/chunks/212-b904d9ae152f2360.js +1 -0
  160. package/.next/static/chunks/2149-ba1bdd1d726ab70c.js +1 -0
  161. package/.next/static/chunks/2537-6c9d2dfd403b7448.js +1 -0
  162. package/.next/static/chunks/310-72d3b802b3cefa99.js +1 -0
  163. package/.next/static/chunks/315-509f963f6c69d0a8.js +1 -0
  164. package/.next/static/chunks/3543-1ec838cbe59f6baa.js +1 -0
  165. package/.next/static/chunks/406-64ea09489141e436.js +1 -0
  166. package/.next/{standalone/platform/services/mcctl-console/.next/static/chunks/4538-b363c77f66f5a771.js → static/chunks/4538-a0d2c88024f1288a.js} +1 -1
  167. package/.next/static/chunks/4840-5802e869ffd1d2a9.js +1 -0
  168. package/.next/static/chunks/5511-7a419d84918a8d64.js +1 -0
  169. package/.next/static/chunks/6189-d8557db379604b3e.js +1 -0
  170. package/.next/static/chunks/6594-e49e36eb5a5d1bef.js +1 -0
  171. package/.next/static/chunks/6645-68b73fe1df8dba93.js +1 -0
  172. package/.next/static/chunks/6655-81288236c1babc44.js +1 -0
  173. package/.next/static/chunks/7413-419718450fadde21.js +1 -0
  174. package/.next/static/chunks/{6803-e2b09f75f207f836.js → 8006-219c9bbc650b079e.js} +1 -1
  175. package/.next/static/chunks/8322-8ae826d4c9b38acc.js +1 -0
  176. package/.next/{standalone/platform/services/mcctl-console/.next/static/chunks/8657-ace229edcbef958f.js → static/chunks/8657-f28db4e9df8cc7b0.js} +1 -1
  177. package/.next/static/chunks/8696-8adf1e9b1a84f5c0.js +1 -0
  178. package/.next/static/chunks/9030-1dcbf06ed6e20e24.js +1 -0
  179. package/.next/static/chunks/9654-84c0d7b06321aab9.js +1 -0
  180. package/.next/{standalone/platform/services/mcctl-console/.next/static/chunks/app/(main)/audit-logs/page-a85c5c81b5ef7100.js → static/chunks/app/(main)/audit-logs/page-7a5d1441bb2811cf.js} +1 -1
  181. package/.next/static/chunks/app/(main)/backups/page-cc46681d519753dd.js +1 -0
  182. package/.next/static/chunks/app/(main)/dashboard/page-b548fe2aac951e5b.js +1 -0
  183. package/.next/static/chunks/app/(main)/layout-9311354243420c0d.js +1 -0
  184. package/.next/static/chunks/app/(main)/players/page-706f5e796129df33.js +1 -0
  185. package/.next/static/chunks/app/(main)/routing/page-14f40cfd98e60a77.js +1 -0
  186. package/.next/static/chunks/app/(main)/servers/[name]/console/{page-b25581705b8b2277.js → page-ca0344337ef5da93.js} +1 -1
  187. package/.next/static/chunks/app/(main)/servers/[name]/page-55fee1f878b51fb8.js +1 -0
  188. package/.next/static/chunks/app/(main)/servers/page-efa5f11aa2956719.js +1 -0
  189. package/.next/static/chunks/app/(main)/worlds/page-3de10e94b77f6e45.js +1 -0
  190. package/.next/{standalone/platform/services/mcctl-console/.next/static/chunks/app/login/page-39f136cf2697cefc.js → static/chunks/app/login/page-3ad9d595e6c37214.js} +1 -1
  191. package/.next/{standalone/platform/services/mcctl-console/.next/static/chunks/app/signup/page-9c69da79dac7dff9.js → static/chunks/app/signup/page-69a8bc2df6bc3559.js} +1 -1
  192. package/.next/{standalone/platform/services/mcctl-console/.next/static/chunks/main-34a19e4bc5b0f28c.js → static/chunks/main-43f98b458d773ca0.js} +1 -1
  193. package/.next/static/css/8dfdea5f9ccf5da4.css +1 -0
  194. package/package.json +2 -2
  195. package/.next/standalone/platform/services/mcctl-console/.next/server/chunks/1277.js +0 -1
  196. package/.next/standalone/platform/services/mcctl-console/.next/server/chunks/1990.js +0 -1
  197. package/.next/standalone/platform/services/mcctl-console/.next/server/chunks/2612.js +0 -51
  198. package/.next/standalone/platform/services/mcctl-console/.next/server/chunks/3003.js +0 -52
  199. package/.next/standalone/platform/services/mcctl-console/.next/server/chunks/5211.js +0 -1
  200. package/.next/standalone/platform/services/mcctl-console/.next/server/chunks/7427.js +0 -1
  201. package/.next/standalone/platform/services/mcctl-console/.next/server/chunks/9374.js +0 -74
  202. package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/1044-6a0c0a7f6bac9f18.js +0 -1
  203. package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/1604-89bbfa231d141dfe.js +0 -1
  204. package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/1692-e2b4fd0b6bff20c2.js +0 -1
  205. package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/1826-ce6a4d6a0e4ba9bd.js +0 -1
  206. package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/1857-8bb2c9883e08cdee.js +0 -1
  207. package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/2537-a2a6d99925a2f67e.js +0 -1
  208. package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/2590-b868e035d36b0545.js +0 -1
  209. package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/2609-03ed3c8604060401.js +0 -1
  210. package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/3418-6f5e8a8a4b7ab70c.js +0 -1
  211. package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/4136-c4b760387b52c47c.js +0 -1
  212. package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/4507-e0145a1cb67c26c3.js +0 -1
  213. package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/5375-5a2ae74444004be4.js +0 -1
  214. package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/5382-af8412c783dd977e.js +0 -1
  215. package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/6357-42a429de7d961f53.js +0 -1
  216. package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/6877-7a90baa4093abc8d.js +0 -1
  217. package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/7340-99d68f86a8108252.js +0 -1
  218. package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/8063-134a13770297c002.js +0 -1
  219. package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/8809-974009fa7800dfcd.js +0 -1
  220. package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/9409-171ee4b34553d85a.js +0 -1
  221. package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/app/(main)/dashboard/page-2755e6f9daa86325.js +0 -1
  222. package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/app/(main)/layout-2849792531fd0eac.js +0 -1
  223. package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/app/(main)/players/page-2d0dc6a87f23e622.js +0 -1
  224. package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/app/(main)/routing/page-bbfb7b031b828115.js +0 -1
  225. package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/app/(main)/servers/[name]/page-36951c10705b7f9a.js +0 -1
  226. package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/app/(main)/servers/page-886b5fabf41e5c65.js +0 -1
  227. package/.next/standalone/platform/services/mcctl-console/.next/static/chunks/app/(main)/worlds/page-f04eb3d1fe4c68df.js +0 -1
  228. package/.next/standalone/platform/services/mcctl-console/.next/static/css/ce1ae78c22152744.css +0 -1
  229. package/.next/static/chunks/1044-6a0c0a7f6bac9f18.js +0 -1
  230. package/.next/static/chunks/1604-89bbfa231d141dfe.js +0 -1
  231. package/.next/static/chunks/1692-e2b4fd0b6bff20c2.js +0 -1
  232. package/.next/static/chunks/1826-ce6a4d6a0e4ba9bd.js +0 -1
  233. package/.next/static/chunks/1857-8bb2c9883e08cdee.js +0 -1
  234. package/.next/static/chunks/2537-a2a6d99925a2f67e.js +0 -1
  235. package/.next/static/chunks/2590-b868e035d36b0545.js +0 -1
  236. package/.next/static/chunks/2609-03ed3c8604060401.js +0 -1
  237. package/.next/static/chunks/3418-6f5e8a8a4b7ab70c.js +0 -1
  238. package/.next/static/chunks/4136-c4b760387b52c47c.js +0 -1
  239. package/.next/static/chunks/4507-e0145a1cb67c26c3.js +0 -1
  240. package/.next/static/chunks/5375-5a2ae74444004be4.js +0 -1
  241. package/.next/static/chunks/5382-af8412c783dd977e.js +0 -1
  242. package/.next/static/chunks/6357-42a429de7d961f53.js +0 -1
  243. package/.next/static/chunks/6877-7a90baa4093abc8d.js +0 -1
  244. package/.next/static/chunks/7340-99d68f86a8108252.js +0 -1
  245. package/.next/static/chunks/8063-134a13770297c002.js +0 -1
  246. package/.next/static/chunks/8809-974009fa7800dfcd.js +0 -1
  247. package/.next/static/chunks/9409-171ee4b34553d85a.js +0 -1
  248. package/.next/static/chunks/app/(main)/dashboard/page-2755e6f9daa86325.js +0 -1
  249. package/.next/static/chunks/app/(main)/layout-2849792531fd0eac.js +0 -1
  250. package/.next/static/chunks/app/(main)/players/page-2d0dc6a87f23e622.js +0 -1
  251. package/.next/static/chunks/app/(main)/routing/page-bbfb7b031b828115.js +0 -1
  252. package/.next/static/chunks/app/(main)/servers/[name]/page-36951c10705b7f9a.js +0 -1
  253. package/.next/static/chunks/app/(main)/servers/page-886b5fabf41e5c65.js +0 -1
  254. package/.next/static/chunks/app/(main)/worlds/page-f04eb3d1fe4c68df.js +0 -1
  255. package/.next/static/css/ce1ae78c22152744.css +0 -1
  256. /package/.next/standalone/platform/services/mcctl-console/.next/static/{Liy7QkeEpyjPtxhvsF9oz → 8BG9m6JnLqB8k8011EMcp}/_buildManifest.js +0 -0
  257. /package/.next/standalone/platform/services/mcctl-console/.next/static/{Liy7QkeEpyjPtxhvsF9oz → 8BG9m6JnLqB8k8011EMcp}/_ssgManifest.js +0 -0
  258. /package/.next/static/{Liy7QkeEpyjPtxhvsF9oz → 8BG9m6JnLqB8k8011EMcp}/_buildManifest.js +0 -0
  259. /package/.next/static/{Liy7QkeEpyjPtxhvsF9oz → 8BG9m6JnLqB8k8011EMcp}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- "use strict";(()=>{var e={};e.id=3429,e.ids=[3429],e.modules={85890:e=>{e.exports=require("better-sqlite3")},72934:e=>{e.exports=require("next/dist/client/components/action-async-storage.external.js")},54580:e=>{e.exports=require("next/dist/client/components/request-async-storage.external.js")},45869:e=>{e.exports=require("next/dist/client/components/static-generation-async-storage.external.js")},20399:e=>{e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},30517:e=>{e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},92048:e=>{e.exports=require("fs")},55315:e=>{e.exports=require("path")},87830:(e,t,r)=>{r.r(t),r.d(t,{originalPathname:()=>x,patchFetch:()=>g,requestAsyncStorage:()=>v,routeModule:()=>h,serverHooks:()=>_,staticGenerationAsyncStorage:()=>y});var s={};r.r(s),r.d(s,{DELETE:()=>f,GET:()=>m,dynamic:()=>l});var n=r(3025),a=r(45086),o=r(74048),i=r(24517),d=r(78649),u=r(31969),c=r(77605);let l="force-dynamic";function p(e){return{username:e.user.name||e.user.email,role:e.user.role||"user"}}async function m(e,{params:t}){try{let e=await u.I.api.getSession({headers:await (0,c.headers)()});if(!e)return i.NextResponse.json({error:"Unauthorized",message:"Authentication required"},{status:401});let{name:r}=await t,s=(0,d.F0)(p(e)),n=await s.getServer(r);return i.NextResponse.json(n)}catch(e){if(e instanceof d.zB)return i.NextResponse.json({error:e.error,message:e.message},{status:e.statusCode});return console.error("Failed to fetch server:",e),i.NextResponse.json({error:"InternalServerError",message:"Failed to fetch server details"},{status:500})}}async function f(e,{params:t}){try{let r=await u.I.api.getSession({headers:await (0,c.headers)()});if(!r)return i.NextResponse.json({error:"Unauthorized",message:"Authentication required"},{status:401});let{name:s}=await t,{searchParams:n}=new URL(e.url),a="true"===n.get("force"),o=(0,d.F0)(p(r)),l=await o.deleteServer(s,a);return i.NextResponse.json(l)}catch(e){if(e instanceof d.zB)return i.NextResponse.json({error:e.error,message:e.message},{status:e.statusCode});return console.error("Failed to delete server:",e),i.NextResponse.json({error:"InternalServerError",message:"Failed to delete server"},{status:500})}}let h=new n.AppRouteRouteModule({definition:{kind:a.x.APP_ROUTE,page:"/api/servers/[name]/route",pathname:"/api/servers/[name]",filename:"route",bundlePath:"app/api/servers/[name]/route"},resolvedPagePath:"/home/runner/work/minecraft-server-manager/minecraft-server-manager/platform/services/mcctl-console/src/app/api/servers/[name]/route.ts",nextConfigOutput:"standalone",userland:s}),{requestAsyncStorage:v,staticGenerationAsyncStorage:y,serverHooks:_}=h,x="/api/servers/[name]/route";function g(){return(0,o.patchFetch)({serverHooks:_,staticGenerationAsyncStorage:y})}},78649:(e,t,r)=>{r.d(t,{F0:()=>a,zB:()=>s});class s extends Error{constructor(e,t,r){super(r),this.statusCode=e,this.error=t,this.name="McctlApiError"}}class n{constructor(e){this.baseUrl=e.baseUrl.replace(/\/$/,""),this.apiKey=e.apiKey,this.userContext=e.userContext}async fetch(e,t={}){let r=`${this.baseUrl}${e}`,n={"X-API-Key":this.apiKey};t.body&&(n["Content-Type"]="application/json"),this.userContext&&(n["X-User"]=this.userContext.username,n["X-Role"]=this.userContext.role);let a=await fetch(r,{...t,headers:{...n,...t.headers}});if(!a.ok){let e=await a.json().catch(()=>({error:"UnknownError",message:a.statusText}));throw new s(a.status,e.error,e.message)}return a.json()}async getServers(){return this.fetch("/api/servers")}async getServer(e){return this.fetch(`/api/servers/${encodeURIComponent(e)}`)}async createServer(e){return this.fetch("/api/servers",{method:"POST",body:JSON.stringify(e)})}async deleteServer(e,t){return this.fetch(`/api/servers/${encodeURIComponent(e)}${t?"?force=true":""}`,{method:"DELETE"})}async startServer(e){return this.fetch(`/api/servers/${encodeURIComponent(e)}/start`,{method:"POST"})}async stopServer(e){return this.fetch(`/api/servers/${encodeURIComponent(e)}/stop`,{method:"POST"})}async restartServer(e){return this.fetch(`/api/servers/${encodeURIComponent(e)}/restart`,{method:"POST"})}async execCommand(e,t){return this.fetch(`/api/servers/${encodeURIComponent(e)}/exec`,{method:"POST",body:JSON.stringify({command:t})})}async getLogs(e,t=100){return this.fetch(`/api/servers/${encodeURIComponent(e)}/logs?lines=${t}`)}async getWorlds(){return this.fetch("/api/worlds")}async getWorld(e){return this.fetch(`/api/worlds/${encodeURIComponent(e)}`)}async createWorld(e){return this.fetch("/api/worlds",{method:"POST",body:JSON.stringify(e)})}async assignWorld(e,t){return this.fetch(`/api/worlds/${encodeURIComponent(e)}/assign`,{method:"POST",body:JSON.stringify({serverName:t})})}async releaseWorld(e,t){return this.fetch(`/api/worlds/${encodeURIComponent(e)}/release${t?"?force=true":""}`,{method:"POST"})}async deleteWorld(e,t){return this.fetch(`/api/worlds/${encodeURIComponent(e)}${t?"?force=true":""}`,{method:"DELETE"})}async getServerConfig(e){return this.fetch(`/api/servers/${encodeURIComponent(e)}/config`)}async updateServerConfig(e,t){return this.fetch(`/api/servers/${encodeURIComponent(e)}/config`,{method:"PATCH",body:JSON.stringify(t)})}async resetWorld(e){return this.fetch(`/api/servers/${encodeURIComponent(e)}/world/reset`,{method:"POST"})}async getRouterStatus(){return this.fetch("/api/router/status")}}function a(e){let t=process.env.MCCTL_API_URL||"http://localhost:5001",r=process.env.MCCTL_API_KEY||"";return r||console.warn("MCCTL_API_KEY is not set. API requests may fail."),new n({baseUrl:t,apiKey:r,userContext:e})}},31969:(e,t,r)=>{r.d(t,{I:()=>d});var s=r(33580),n=r(5944),a=r(90224),o=r(22587),i=r(8290);let d=(0,s.kj)({database:(0,n.s)(o.db,{provider:"sqlite",schema:{user:i.users,session:i.sessions,account:i.accounts,verification:i.verifications}}),emailAndPassword:{enabled:!0,requireEmailVerification:!1},session:{expiresIn:604800,updateAge:86400,cookieCache:{enabled:!0,maxAge:300}},user:{additionalFields:{role:{type:"string",required:!1,defaultValue:"user",input:!1}}},plugins:[(0,a.SA)({defaultRole:"user",adminRole:"admin"})],trustedOrigins:["http://localhost:5000","http://localhost:3000",process.env.BETTER_AUTH_URL||"http://localhost:5000"].filter(Boolean)})},22587:(e,t,r)=>{r.d(t,{db:()=>p});var s=r(85890),n=r.n(s),a=r(31590),o=r(8290),i=r(55315),d=r.n(i),u=r(92048);let c=function(){if(process.env.DATABASE_URL)return process.env.DATABASE_URL;let e=d().join(process.cwd(),"data");return d().join(e,"mcctl.db")}();!function(e){if(":memory:"===e)return;let t=d().dirname(e);(0,u.existsSync)(t)||(0,u.mkdirSync)(t,{recursive:!0})}(c);let l=new(n())(c);l.pragma("journal_mode = WAL");let p=(0,a.t)(l,{schema:o})},8290:(e,t,r)=>{r.r(t),r.d(t,{accounts:()=>u,sessions:()=>d,userServers:()=>l,users:()=>i,verifications:()=>c});var s=r(80722),n=r(10160),a=r(30304),o=r(76303);let i=(0,s.Px)("users",{id:(0,n.fL)("id").primaryKey(),name:(0,n.fL)("name").notNull(),email:(0,n.fL)("email").notNull().unique(),emailVerified:(0,a._L)("email_verified",{mode:"boolean"}).notNull().default(!1),image:(0,n.fL)("image"),role:(0,n.fL)("role").notNull().default("user"),banned:(0,a._L)("banned",{mode:"boolean"}).default(!1),banReason:(0,n.fL)("ban_reason"),banExpires:(0,a._L)("ban_expires",{mode:"timestamp"}),createdAt:(0,a._L)("created_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date),updatedAt:(0,a._L)("updated_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date)}),d=(0,s.Px)("sessions",{id:(0,n.fL)("id").primaryKey(),expiresAt:(0,a._L)("expires_at",{mode:"timestamp"}).notNull(),token:(0,n.fL)("token").notNull().unique(),ipAddress:(0,n.fL)("ip_address"),userAgent:(0,n.fL)("user_agent"),userId:(0,n.fL)("user_id").notNull().references(()=>i.id,{onDelete:"cascade"}),createdAt:(0,a._L)("created_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date),updatedAt:(0,a._L)("updated_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date)}),u=(0,s.Px)("accounts",{id:(0,n.fL)("id").primaryKey(),accountId:(0,n.fL)("account_id").notNull(),providerId:(0,n.fL)("provider_id").notNull(),userId:(0,n.fL)("user_id").notNull().references(()=>i.id,{onDelete:"cascade"}),accessToken:(0,n.fL)("access_token"),refreshToken:(0,n.fL)("refresh_token"),idToken:(0,n.fL)("id_token"),accessTokenExpiresAt:(0,a._L)("access_token_expires_at",{mode:"timestamp"}),refreshTokenExpiresAt:(0,a._L)("refresh_token_expires_at",{mode:"timestamp"}),scope:(0,n.fL)("scope"),password:(0,n.fL)("password"),createdAt:(0,a._L)("created_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date),updatedAt:(0,a._L)("updated_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date)}),c=(0,s.Px)("verifications",{id:(0,n.fL)("id").primaryKey(),identifier:(0,n.fL)("identifier").notNull(),value:(0,n.fL)("value").notNull(),expiresAt:(0,a._L)("expires_at",{mode:"timestamp"}).notNull(),createdAt:(0,a._L)("created_at",{mode:"timestamp"}).$defaultFn(()=>new Date),updatedAt:(0,a._L)("updated_at",{mode:"timestamp"}).$defaultFn(()=>new Date)}),l=(0,s.Px)("user_servers",{id:(0,n.fL)("id").primaryKey().$defaultFn(()=>crypto.randomUUID()),userId:(0,n.fL)("user_id").notNull().references(()=>i.id,{onDelete:"cascade"}),serverId:(0,n.fL)("server_id").notNull(),permission:(0,n.fL)("permission").$type().notNull().default("view"),createdAt:(0,a._L)("created_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date),updatedAt:(0,a._L)("updated_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date)},e=>({userServerIdx:(0,o.Kz)("user_server_idx").on(e.userId,e.serverId)}))}};var t=require("../../../../webpack-runtime.js");t.C(e);var r=e=>t(t.s=e),s=t.X(0,[9836,1489,7605,5309],()=>r(87830));module.exports=s})();
1
+ "use strict";(()=>{var e={};e.id=3429,e.ids=[3429],e.modules={85890:e=>{e.exports=require("better-sqlite3")},72934:e=>{e.exports=require("next/dist/client/components/action-async-storage.external.js")},54580:e=>{e.exports=require("next/dist/client/components/request-async-storage.external.js")},45869:e=>{e.exports=require("next/dist/client/components/static-generation-async-storage.external.js")},20399:e=>{e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},30517:e=>{e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},92048:e=>{e.exports=require("fs")},55315:e=>{e.exports=require("path")},87830:(e,t,r)=>{r.r(t),r.d(t,{originalPathname:()=>_,patchFetch:()=>x,requestAsyncStorage:()=>v,routeModule:()=>h,serverHooks:()=>g,staticGenerationAsyncStorage:()=>y});var s={};r.r(s),r.d(s,{DELETE:()=>f,GET:()=>m,dynamic:()=>l});var n=r(3025),a=r(45086),o=r(74048),i=r(24517),d=r(78649),u=r(60154),c=r(77605);let l="force-dynamic";function p(e){return{username:e.user.name||e.user.email,role:e.user.role||"user"}}async function m(e,{params:t}){try{let{name:e}=await t,r=await (0,u.Ke)(await (0,c.headers)(),e,"view"),s=(0,d.F0)(p(r)),n=await s.getServer(e);return i.NextResponse.json(n)}catch(e){if(e instanceof u.l4)return i.NextResponse.json({error:"Forbidden",message:e.message},{status:e.statusCode});if(e instanceof d.zB)return i.NextResponse.json({error:e.error,message:e.message},{status:e.statusCode});return console.error("Failed to fetch server:",e),i.NextResponse.json({error:"InternalServerError",message:"Failed to fetch server details"},{status:500})}}async function f(e,{params:t}){try{let{name:r}=await t,s=await (0,u.Ke)(await (0,c.headers)(),r,"admin"),{searchParams:n}=new URL(e.url),a="true"===n.get("force"),o=(0,d.F0)(p(s)),l=await o.deleteServer(r,a);return i.NextResponse.json(l)}catch(e){if(e instanceof u.l4)return i.NextResponse.json({error:"Forbidden",message:e.message},{status:e.statusCode});if(e instanceof d.zB)return i.NextResponse.json({error:e.error,message:e.message},{status:e.statusCode});return console.error("Failed to delete server:",e),i.NextResponse.json({error:"InternalServerError",message:"Failed to delete server"},{status:500})}}let h=new n.AppRouteRouteModule({definition:{kind:a.x.APP_ROUTE,page:"/api/servers/[name]/route",pathname:"/api/servers/[name]",filename:"route",bundlePath:"app/api/servers/[name]/route"},resolvedPagePath:"/home/runner/work/minecraft-server-manager/minecraft-server-manager/platform/services/mcctl-console/src/app/api/servers/[name]/route.ts",nextConfigOutput:"standalone",userland:s}),{requestAsyncStorage:v,staticGenerationAsyncStorage:y,serverHooks:g}=h,_="/api/servers/[name]/route";function x(){return(0,o.patchFetch)({serverHooks:g,staticGenerationAsyncStorage:y})}},78649:(e,t,r)=>{r.d(t,{F0:()=>a,zB:()=>s});class s extends Error{constructor(e,t,r){super(r),this.statusCode=e,this.error=t,this.name="McctlApiError"}}class n{constructor(e){this.baseUrl=e.baseUrl.replace(/\/$/,""),this.apiKey=e.apiKey,this.userContext=e.userContext}async fetch(e,t={}){let r=`${this.baseUrl}${e}`,n={"X-API-Key":this.apiKey};t.body&&(n["Content-Type"]="application/json"),this.userContext&&(n["X-User"]=this.userContext.username,n["X-Role"]=this.userContext.role);let a=await fetch(r,{...t,headers:{...n,...t.headers}});if(!a.ok){let e=await a.json().catch(()=>({error:"UnknownError",message:a.statusText}));throw new s(a.status,e.error,e.message)}return a.json()}async getServers(){return this.fetch("/api/servers")}async getServer(e){return this.fetch(`/api/servers/${encodeURIComponent(e)}`)}async createServer(e){return this.fetch("/api/servers",{method:"POST",body:JSON.stringify(e)})}async deleteServer(e,t){return this.fetch(`/api/servers/${encodeURIComponent(e)}${t?"?force=true":""}`,{method:"DELETE"})}async startServer(e){return this.fetch(`/api/servers/${encodeURIComponent(e)}/start`,{method:"POST"})}async stopServer(e){return this.fetch(`/api/servers/${encodeURIComponent(e)}/stop`,{method:"POST"})}async restartServer(e){return this.fetch(`/api/servers/${encodeURIComponent(e)}/restart`,{method:"POST"})}async execCommand(e,t){return this.fetch(`/api/servers/${encodeURIComponent(e)}/exec`,{method:"POST",body:JSON.stringify({command:t})})}async getLogs(e,t=100){return this.fetch(`/api/servers/${encodeURIComponent(e)}/logs?lines=${t}`)}async getWorlds(){return this.fetch("/api/worlds")}async getWorld(e){return this.fetch(`/api/worlds/${encodeURIComponent(e)}`)}async createWorld(e){return this.fetch("/api/worlds",{method:"POST",body:JSON.stringify(e)})}async assignWorld(e,t){return this.fetch(`/api/worlds/${encodeURIComponent(e)}/assign`,{method:"POST",body:JSON.stringify({serverName:t})})}async releaseWorld(e,t){return this.fetch(`/api/worlds/${encodeURIComponent(e)}/release${t?"?force=true":""}`,{method:"POST"})}async deleteWorld(e,t){return this.fetch(`/api/worlds/${encodeURIComponent(e)}${t?"?force=true":""}`,{method:"DELETE"})}async getServerConfig(e){return this.fetch(`/api/servers/${encodeURIComponent(e)}/config`)}async updateServerConfig(e,t){return this.fetch(`/api/servers/${encodeURIComponent(e)}/config`,{method:"PATCH",body:JSON.stringify(t)})}async resetWorld(e){return this.fetch(`/api/servers/${encodeURIComponent(e)}/world/reset`,{method:"POST"})}async getRouterStatus(){return this.fetch("/api/router/status")}async getBackupStatus(){return this.fetch("/api/backup/status")}async pushBackup(e){let t=e?JSON.stringify({message:e}):void 0;return this.fetch("/api/backup/push",{method:"POST",body:t})}async getBackupHistory(e=20){return this.fetch(`/api/backup/history?limit=${e}`)}async restoreBackup(e){return this.fetch("/api/backup/restore",{method:"POST",body:JSON.stringify({commitHash:e})})}}function a(e){let t=process.env.MCCTL_API_URL||"http://localhost:5001",r=process.env.MCCTL_API_KEY||"";return r||console.warn("MCCTL_API_KEY is not set. API requests may fail."),new n({baseUrl:t,apiKey:r,userContext:e})}},60154:(e,t,r)=>{r.d(t,{Ke:()=>c,kF:()=>u,l4:()=>i,mk:()=>d});var s=r(31969),n=r(22587),a=r(8290),o=r(30579);class i extends Error{constructor(e,t=401){super(e),this.statusCode=t,this.name="AuthError"}}async function d(e){let t=await s.I.api.getSession({headers:e});if(!t)throw new i("Unauthorized",401);return t}async function u(e){let t=await d(e);if("admin"!==t.user.role)throw new i("Forbidden: Admin access required",403);return t}async function c(e,t,r="view"){let s=await d(e);if("admin"===s.user.role)return s;let u=await n.db.select().from(a.userServers).where((0,o.xD)((0,o.eq)(a.userServers.userId,s.user.id),(0,o.eq)(a.userServers.serverId,t))).limit(1);if(0===u.length)throw new i("Forbidden: No access to this server",403);let c=u[0].permission,l={view:1,manage:2,admin:3};if(l[c]<l[r])throw new i(`Forbidden: Requires ${r} permission`,403);return s}},31969:(e,t,r)=>{r.d(t,{I:()=>d});var s=r(33580),n=r(5944),a=r(90224),o=r(22587),i=r(8290);let d=(0,s.kj)({database:(0,n.s)(o.db,{provider:"sqlite",schema:{user:i.users,session:i.sessions,account:i.accounts,verification:i.verifications}}),emailAndPassword:{enabled:!0,requireEmailVerification:!1},session:{expiresIn:604800,updateAge:86400,cookieCache:{enabled:!0,maxAge:300}},user:{additionalFields:{role:{type:"string",required:!1,defaultValue:"user",input:!1}}},plugins:[(0,a.SA)({defaultRole:"user",adminRole:"admin"})],trustedOrigins:["http://localhost:5000","http://localhost:3000",process.env.BETTER_AUTH_URL||"http://localhost:5000"].filter(Boolean)})},22587:(e,t,r)=>{r.d(t,{db:()=>p});var s=r(85890),n=r.n(s),a=r(31590),o=r(8290),i=r(55315),d=r.n(i),u=r(92048);let c=function(){if(process.env.DATABASE_URL)return process.env.DATABASE_URL;let e=d().join(process.cwd(),"data");return d().join(e,"mcctl.db")}();!function(e){if(":memory:"===e)return;let t=d().dirname(e);(0,u.existsSync)(t)||(0,u.mkdirSync)(t,{recursive:!0})}(c);let l=new(n())(c);l.pragma("journal_mode = WAL");let p=(0,a.t)(l,{schema:o})},8290:(e,t,r)=>{r.r(t),r.d(t,{accounts:()=>u,sessions:()=>d,userServers:()=>l,users:()=>i,verifications:()=>c});var s=r(80722),n=r(10160),a=r(30304),o=r(76303);let i=(0,s.Px)("users",{id:(0,n.fL)("id").primaryKey(),name:(0,n.fL)("name").notNull(),email:(0,n.fL)("email").notNull().unique(),emailVerified:(0,a._L)("email_verified",{mode:"boolean"}).notNull().default(!1),image:(0,n.fL)("image"),role:(0,n.fL)("role").notNull().default("user"),banned:(0,a._L)("banned",{mode:"boolean"}).default(!1),banReason:(0,n.fL)("ban_reason"),banExpires:(0,a._L)("ban_expires",{mode:"timestamp"}),createdAt:(0,a._L)("created_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date),updatedAt:(0,a._L)("updated_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date)}),d=(0,s.Px)("sessions",{id:(0,n.fL)("id").primaryKey(),expiresAt:(0,a._L)("expires_at",{mode:"timestamp"}).notNull(),token:(0,n.fL)("token").notNull().unique(),ipAddress:(0,n.fL)("ip_address"),userAgent:(0,n.fL)("user_agent"),userId:(0,n.fL)("user_id").notNull().references(()=>i.id,{onDelete:"cascade"}),createdAt:(0,a._L)("created_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date),updatedAt:(0,a._L)("updated_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date)}),u=(0,s.Px)("accounts",{id:(0,n.fL)("id").primaryKey(),accountId:(0,n.fL)("account_id").notNull(),providerId:(0,n.fL)("provider_id").notNull(),userId:(0,n.fL)("user_id").notNull().references(()=>i.id,{onDelete:"cascade"}),accessToken:(0,n.fL)("access_token"),refreshToken:(0,n.fL)("refresh_token"),idToken:(0,n.fL)("id_token"),accessTokenExpiresAt:(0,a._L)("access_token_expires_at",{mode:"timestamp"}),refreshTokenExpiresAt:(0,a._L)("refresh_token_expires_at",{mode:"timestamp"}),scope:(0,n.fL)("scope"),password:(0,n.fL)("password"),createdAt:(0,a._L)("created_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date),updatedAt:(0,a._L)("updated_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date)}),c=(0,s.Px)("verifications",{id:(0,n.fL)("id").primaryKey(),identifier:(0,n.fL)("identifier").notNull(),value:(0,n.fL)("value").notNull(),expiresAt:(0,a._L)("expires_at",{mode:"timestamp"}).notNull(),createdAt:(0,a._L)("created_at",{mode:"timestamp"}).$defaultFn(()=>new Date),updatedAt:(0,a._L)("updated_at",{mode:"timestamp"}).$defaultFn(()=>new Date)}),l=(0,s.Px)("user_servers",{id:(0,n.fL)("id").primaryKey().$defaultFn(()=>crypto.randomUUID()),userId:(0,n.fL)("user_id").notNull().references(()=>i.id,{onDelete:"cascade"}),serverId:(0,n.fL)("server_id").notNull(),permission:(0,n.fL)("permission").$type().notNull().default("view"),createdAt:(0,a._L)("created_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date),updatedAt:(0,a._L)("updated_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date)},e=>({userServerIdx:(0,o.Kz)("user_server_idx").on(e.userId,e.serverId)}))}};var t=require("../../../../webpack-runtime.js");t.C(e);var r=e=>t(t.s=e),s=t.X(0,[9836,1489,7605,5309],()=>r(87830));module.exports=s})();
@@ -1 +1 @@
1
- "use strict";(()=>{var e={};e.id=5442,e.ids=[5442],e.modules={85890:e=>{e.exports=require("better-sqlite3")},72934:e=>{e.exports=require("next/dist/client/components/action-async-storage.external.js")},54580:e=>{e.exports=require("next/dist/client/components/request-async-storage.external.js")},45869:e=>{e.exports=require("next/dist/client/components/static-generation-async-storage.external.js")},20399:e=>{e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},30517:e=>{e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},92048:e=>{e.exports=require("fs")},55315:e=>{e.exports=require("path")},25138:(e,t,r)=>{r.r(t),r.d(t,{originalPathname:()=>_,patchFetch:()=>y,requestAsyncStorage:()=>f,routeModule:()=>m,serverHooks:()=>v,staticGenerationAsyncStorage:()=>h});var s={};r.r(s),r.d(s,{POST:()=>p,dynamic:()=>l});var n=r(3025),a=r(45086),o=r(74048),i=r(24517),d=r(78649),u=r(31969),c=r(77605);let l="force-dynamic";async function p(e,{params:t}){try{let e=await u.I.api.getSession({headers:await (0,c.headers)()});if(!e)return i.NextResponse.json({error:"Unauthorized",message:"Authentication required"},{status:401});let{name:r}=await t,s=(0,d.F0)({username:e.user.name||e.user.email,role:e.user.role||"user"}),n=await s.resetWorld(r);return i.NextResponse.json(n)}catch(e){if(e instanceof d.zB)return i.NextResponse.json({error:e.error,message:e.message},{status:e.statusCode});return console.error("Failed to reset world:",e),i.NextResponse.json({error:"InternalServerError",message:"Failed to reset world"},{status:500})}}let m=new n.AppRouteRouteModule({definition:{kind:a.x.APP_ROUTE,page:"/api/servers/[name]/world/reset/route",pathname:"/api/servers/[name]/world/reset",filename:"route",bundlePath:"app/api/servers/[name]/world/reset/route"},resolvedPagePath:"/home/runner/work/minecraft-server-manager/minecraft-server-manager/platform/services/mcctl-console/src/app/api/servers/[name]/world/reset/route.ts",nextConfigOutput:"standalone",userland:s}),{requestAsyncStorage:f,staticGenerationAsyncStorage:h,serverHooks:v}=m,_="/api/servers/[name]/world/reset/route";function y(){return(0,o.patchFetch)({serverHooks:v,staticGenerationAsyncStorage:h})}},78649:(e,t,r)=>{r.d(t,{F0:()=>a,zB:()=>s});class s extends Error{constructor(e,t,r){super(r),this.statusCode=e,this.error=t,this.name="McctlApiError"}}class n{constructor(e){this.baseUrl=e.baseUrl.replace(/\/$/,""),this.apiKey=e.apiKey,this.userContext=e.userContext}async fetch(e,t={}){let r=`${this.baseUrl}${e}`,n={"X-API-Key":this.apiKey};t.body&&(n["Content-Type"]="application/json"),this.userContext&&(n["X-User"]=this.userContext.username,n["X-Role"]=this.userContext.role);let a=await fetch(r,{...t,headers:{...n,...t.headers}});if(!a.ok){let e=await a.json().catch(()=>({error:"UnknownError",message:a.statusText}));throw new s(a.status,e.error,e.message)}return a.json()}async getServers(){return this.fetch("/api/servers")}async getServer(e){return this.fetch(`/api/servers/${encodeURIComponent(e)}`)}async createServer(e){return this.fetch("/api/servers",{method:"POST",body:JSON.stringify(e)})}async deleteServer(e,t){return this.fetch(`/api/servers/${encodeURIComponent(e)}${t?"?force=true":""}`,{method:"DELETE"})}async startServer(e){return this.fetch(`/api/servers/${encodeURIComponent(e)}/start`,{method:"POST"})}async stopServer(e){return this.fetch(`/api/servers/${encodeURIComponent(e)}/stop`,{method:"POST"})}async restartServer(e){return this.fetch(`/api/servers/${encodeURIComponent(e)}/restart`,{method:"POST"})}async execCommand(e,t){return this.fetch(`/api/servers/${encodeURIComponent(e)}/exec`,{method:"POST",body:JSON.stringify({command:t})})}async getLogs(e,t=100){return this.fetch(`/api/servers/${encodeURIComponent(e)}/logs?lines=${t}`)}async getWorlds(){return this.fetch("/api/worlds")}async getWorld(e){return this.fetch(`/api/worlds/${encodeURIComponent(e)}`)}async createWorld(e){return this.fetch("/api/worlds",{method:"POST",body:JSON.stringify(e)})}async assignWorld(e,t){return this.fetch(`/api/worlds/${encodeURIComponent(e)}/assign`,{method:"POST",body:JSON.stringify({serverName:t})})}async releaseWorld(e,t){return this.fetch(`/api/worlds/${encodeURIComponent(e)}/release${t?"?force=true":""}`,{method:"POST"})}async deleteWorld(e,t){return this.fetch(`/api/worlds/${encodeURIComponent(e)}${t?"?force=true":""}`,{method:"DELETE"})}async getServerConfig(e){return this.fetch(`/api/servers/${encodeURIComponent(e)}/config`)}async updateServerConfig(e,t){return this.fetch(`/api/servers/${encodeURIComponent(e)}/config`,{method:"PATCH",body:JSON.stringify(t)})}async resetWorld(e){return this.fetch(`/api/servers/${encodeURIComponent(e)}/world/reset`,{method:"POST"})}async getRouterStatus(){return this.fetch("/api/router/status")}}function a(e){let t=process.env.MCCTL_API_URL||"http://localhost:5001",r=process.env.MCCTL_API_KEY||"";return r||console.warn("MCCTL_API_KEY is not set. API requests may fail."),new n({baseUrl:t,apiKey:r,userContext:e})}},31969:(e,t,r)=>{r.d(t,{I:()=>d});var s=r(33580),n=r(5944),a=r(90224),o=r(22587),i=r(8290);let d=(0,s.kj)({database:(0,n.s)(o.db,{provider:"sqlite",schema:{user:i.users,session:i.sessions,account:i.accounts,verification:i.verifications}}),emailAndPassword:{enabled:!0,requireEmailVerification:!1},session:{expiresIn:604800,updateAge:86400,cookieCache:{enabled:!0,maxAge:300}},user:{additionalFields:{role:{type:"string",required:!1,defaultValue:"user",input:!1}}},plugins:[(0,a.SA)({defaultRole:"user",adminRole:"admin"})],trustedOrigins:["http://localhost:5000","http://localhost:3000",process.env.BETTER_AUTH_URL||"http://localhost:5000"].filter(Boolean)})},22587:(e,t,r)=>{r.d(t,{db:()=>p});var s=r(85890),n=r.n(s),a=r(31590),o=r(8290),i=r(55315),d=r.n(i),u=r(92048);let c=function(){if(process.env.DATABASE_URL)return process.env.DATABASE_URL;let e=d().join(process.cwd(),"data");return d().join(e,"mcctl.db")}();!function(e){if(":memory:"===e)return;let t=d().dirname(e);(0,u.existsSync)(t)||(0,u.mkdirSync)(t,{recursive:!0})}(c);let l=new(n())(c);l.pragma("journal_mode = WAL");let p=(0,a.t)(l,{schema:o})},8290:(e,t,r)=>{r.r(t),r.d(t,{accounts:()=>u,sessions:()=>d,userServers:()=>l,users:()=>i,verifications:()=>c});var s=r(80722),n=r(10160),a=r(30304),o=r(76303);let i=(0,s.Px)("users",{id:(0,n.fL)("id").primaryKey(),name:(0,n.fL)("name").notNull(),email:(0,n.fL)("email").notNull().unique(),emailVerified:(0,a._L)("email_verified",{mode:"boolean"}).notNull().default(!1),image:(0,n.fL)("image"),role:(0,n.fL)("role").notNull().default("user"),banned:(0,a._L)("banned",{mode:"boolean"}).default(!1),banReason:(0,n.fL)("ban_reason"),banExpires:(0,a._L)("ban_expires",{mode:"timestamp"}),createdAt:(0,a._L)("created_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date),updatedAt:(0,a._L)("updated_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date)}),d=(0,s.Px)("sessions",{id:(0,n.fL)("id").primaryKey(),expiresAt:(0,a._L)("expires_at",{mode:"timestamp"}).notNull(),token:(0,n.fL)("token").notNull().unique(),ipAddress:(0,n.fL)("ip_address"),userAgent:(0,n.fL)("user_agent"),userId:(0,n.fL)("user_id").notNull().references(()=>i.id,{onDelete:"cascade"}),createdAt:(0,a._L)("created_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date),updatedAt:(0,a._L)("updated_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date)}),u=(0,s.Px)("accounts",{id:(0,n.fL)("id").primaryKey(),accountId:(0,n.fL)("account_id").notNull(),providerId:(0,n.fL)("provider_id").notNull(),userId:(0,n.fL)("user_id").notNull().references(()=>i.id,{onDelete:"cascade"}),accessToken:(0,n.fL)("access_token"),refreshToken:(0,n.fL)("refresh_token"),idToken:(0,n.fL)("id_token"),accessTokenExpiresAt:(0,a._L)("access_token_expires_at",{mode:"timestamp"}),refreshTokenExpiresAt:(0,a._L)("refresh_token_expires_at",{mode:"timestamp"}),scope:(0,n.fL)("scope"),password:(0,n.fL)("password"),createdAt:(0,a._L)("created_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date),updatedAt:(0,a._L)("updated_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date)}),c=(0,s.Px)("verifications",{id:(0,n.fL)("id").primaryKey(),identifier:(0,n.fL)("identifier").notNull(),value:(0,n.fL)("value").notNull(),expiresAt:(0,a._L)("expires_at",{mode:"timestamp"}).notNull(),createdAt:(0,a._L)("created_at",{mode:"timestamp"}).$defaultFn(()=>new Date),updatedAt:(0,a._L)("updated_at",{mode:"timestamp"}).$defaultFn(()=>new Date)}),l=(0,s.Px)("user_servers",{id:(0,n.fL)("id").primaryKey().$defaultFn(()=>crypto.randomUUID()),userId:(0,n.fL)("user_id").notNull().references(()=>i.id,{onDelete:"cascade"}),serverId:(0,n.fL)("server_id").notNull(),permission:(0,n.fL)("permission").$type().notNull().default("view"),createdAt:(0,a._L)("created_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date),updatedAt:(0,a._L)("updated_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date)},e=>({userServerIdx:(0,o.Kz)("user_server_idx").on(e.userId,e.serverId)}))}};var t=require("../../../../../../webpack-runtime.js");t.C(e);var r=e=>t(t.s=e),s=t.X(0,[9836,1489,7605,5309],()=>r(25138));module.exports=s})();
1
+ "use strict";(()=>{var e={};e.id=5442,e.ids=[5442],e.modules={85890:e=>{e.exports=require("better-sqlite3")},72934:e=>{e.exports=require("next/dist/client/components/action-async-storage.external.js")},54580:e=>{e.exports=require("next/dist/client/components/request-async-storage.external.js")},45869:e=>{e.exports=require("next/dist/client/components/static-generation-async-storage.external.js")},20399:e=>{e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},30517:e=>{e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},92048:e=>{e.exports=require("fs")},55315:e=>{e.exports=require("path")},25138:(e,t,r)=>{r.r(t),r.d(t,{originalPathname:()=>y,patchFetch:()=>_,requestAsyncStorage:()=>f,routeModule:()=>m,serverHooks:()=>v,staticGenerationAsyncStorage:()=>h});var s={};r.r(s),r.d(s,{POST:()=>p,dynamic:()=>l});var n=r(3025),a=r(45086),o=r(74048),i=r(24517),d=r(78649),u=r(60154),c=r(77605);let l="force-dynamic";async function p(e,{params:t}){try{let{name:e}=await t,r=await (0,u.Ke)(await (0,c.headers)(),e,"admin"),s=(0,d.F0)({username:r.user.name||r.user.email,role:r.user.role||"user"}),n=await s.resetWorld(e);return i.NextResponse.json(n)}catch(e){if(e instanceof u.l4)return i.NextResponse.json({error:"Forbidden",message:e.message},{status:e.statusCode});if(e instanceof d.zB)return i.NextResponse.json({error:e.error,message:e.message},{status:e.statusCode});return console.error("Failed to reset world:",e),i.NextResponse.json({error:"InternalServerError",message:"Failed to reset world"},{status:500})}}let m=new n.AppRouteRouteModule({definition:{kind:a.x.APP_ROUTE,page:"/api/servers/[name]/world/reset/route",pathname:"/api/servers/[name]/world/reset",filename:"route",bundlePath:"app/api/servers/[name]/world/reset/route"},resolvedPagePath:"/home/runner/work/minecraft-server-manager/minecraft-server-manager/platform/services/mcctl-console/src/app/api/servers/[name]/world/reset/route.ts",nextConfigOutput:"standalone",userland:s}),{requestAsyncStorage:f,staticGenerationAsyncStorage:h,serverHooks:v}=m,y="/api/servers/[name]/world/reset/route";function _(){return(0,o.patchFetch)({serverHooks:v,staticGenerationAsyncStorage:h})}},78649:(e,t,r)=>{r.d(t,{F0:()=>a,zB:()=>s});class s extends Error{constructor(e,t,r){super(r),this.statusCode=e,this.error=t,this.name="McctlApiError"}}class n{constructor(e){this.baseUrl=e.baseUrl.replace(/\/$/,""),this.apiKey=e.apiKey,this.userContext=e.userContext}async fetch(e,t={}){let r=`${this.baseUrl}${e}`,n={"X-API-Key":this.apiKey};t.body&&(n["Content-Type"]="application/json"),this.userContext&&(n["X-User"]=this.userContext.username,n["X-Role"]=this.userContext.role);let a=await fetch(r,{...t,headers:{...n,...t.headers}});if(!a.ok){let e=await a.json().catch(()=>({error:"UnknownError",message:a.statusText}));throw new s(a.status,e.error,e.message)}return a.json()}async getServers(){return this.fetch("/api/servers")}async getServer(e){return this.fetch(`/api/servers/${encodeURIComponent(e)}`)}async createServer(e){return this.fetch("/api/servers",{method:"POST",body:JSON.stringify(e)})}async deleteServer(e,t){return this.fetch(`/api/servers/${encodeURIComponent(e)}${t?"?force=true":""}`,{method:"DELETE"})}async startServer(e){return this.fetch(`/api/servers/${encodeURIComponent(e)}/start`,{method:"POST"})}async stopServer(e){return this.fetch(`/api/servers/${encodeURIComponent(e)}/stop`,{method:"POST"})}async restartServer(e){return this.fetch(`/api/servers/${encodeURIComponent(e)}/restart`,{method:"POST"})}async execCommand(e,t){return this.fetch(`/api/servers/${encodeURIComponent(e)}/exec`,{method:"POST",body:JSON.stringify({command:t})})}async getLogs(e,t=100){return this.fetch(`/api/servers/${encodeURIComponent(e)}/logs?lines=${t}`)}async getWorlds(){return this.fetch("/api/worlds")}async getWorld(e){return this.fetch(`/api/worlds/${encodeURIComponent(e)}`)}async createWorld(e){return this.fetch("/api/worlds",{method:"POST",body:JSON.stringify(e)})}async assignWorld(e,t){return this.fetch(`/api/worlds/${encodeURIComponent(e)}/assign`,{method:"POST",body:JSON.stringify({serverName:t})})}async releaseWorld(e,t){return this.fetch(`/api/worlds/${encodeURIComponent(e)}/release${t?"?force=true":""}`,{method:"POST"})}async deleteWorld(e,t){return this.fetch(`/api/worlds/${encodeURIComponent(e)}${t?"?force=true":""}`,{method:"DELETE"})}async getServerConfig(e){return this.fetch(`/api/servers/${encodeURIComponent(e)}/config`)}async updateServerConfig(e,t){return this.fetch(`/api/servers/${encodeURIComponent(e)}/config`,{method:"PATCH",body:JSON.stringify(t)})}async resetWorld(e){return this.fetch(`/api/servers/${encodeURIComponent(e)}/world/reset`,{method:"POST"})}async getRouterStatus(){return this.fetch("/api/router/status")}async getBackupStatus(){return this.fetch("/api/backup/status")}async pushBackup(e){let t=e?JSON.stringify({message:e}):void 0;return this.fetch("/api/backup/push",{method:"POST",body:t})}async getBackupHistory(e=20){return this.fetch(`/api/backup/history?limit=${e}`)}async restoreBackup(e){return this.fetch("/api/backup/restore",{method:"POST",body:JSON.stringify({commitHash:e})})}}function a(e){let t=process.env.MCCTL_API_URL||"http://localhost:5001",r=process.env.MCCTL_API_KEY||"";return r||console.warn("MCCTL_API_KEY is not set. API requests may fail."),new n({baseUrl:t,apiKey:r,userContext:e})}},60154:(e,t,r)=>{r.d(t,{Ke:()=>c,kF:()=>u,l4:()=>i,mk:()=>d});var s=r(31969),n=r(22587),a=r(8290),o=r(30579);class i extends Error{constructor(e,t=401){super(e),this.statusCode=t,this.name="AuthError"}}async function d(e){let t=await s.I.api.getSession({headers:e});if(!t)throw new i("Unauthorized",401);return t}async function u(e){let t=await d(e);if("admin"!==t.user.role)throw new i("Forbidden: Admin access required",403);return t}async function c(e,t,r="view"){let s=await d(e);if("admin"===s.user.role)return s;let u=await n.db.select().from(a.userServers).where((0,o.xD)((0,o.eq)(a.userServers.userId,s.user.id),(0,o.eq)(a.userServers.serverId,t))).limit(1);if(0===u.length)throw new i("Forbidden: No access to this server",403);let c=u[0].permission,l={view:1,manage:2,admin:3};if(l[c]<l[r])throw new i(`Forbidden: Requires ${r} permission`,403);return s}},31969:(e,t,r)=>{r.d(t,{I:()=>d});var s=r(33580),n=r(5944),a=r(90224),o=r(22587),i=r(8290);let d=(0,s.kj)({database:(0,n.s)(o.db,{provider:"sqlite",schema:{user:i.users,session:i.sessions,account:i.accounts,verification:i.verifications}}),emailAndPassword:{enabled:!0,requireEmailVerification:!1},session:{expiresIn:604800,updateAge:86400,cookieCache:{enabled:!0,maxAge:300}},user:{additionalFields:{role:{type:"string",required:!1,defaultValue:"user",input:!1}}},plugins:[(0,a.SA)({defaultRole:"user",adminRole:"admin"})],trustedOrigins:["http://localhost:5000","http://localhost:3000",process.env.BETTER_AUTH_URL||"http://localhost:5000"].filter(Boolean)})},22587:(e,t,r)=>{r.d(t,{db:()=>p});var s=r(85890),n=r.n(s),a=r(31590),o=r(8290),i=r(55315),d=r.n(i),u=r(92048);let c=function(){if(process.env.DATABASE_URL)return process.env.DATABASE_URL;let e=d().join(process.cwd(),"data");return d().join(e,"mcctl.db")}();!function(e){if(":memory:"===e)return;let t=d().dirname(e);(0,u.existsSync)(t)||(0,u.mkdirSync)(t,{recursive:!0})}(c);let l=new(n())(c);l.pragma("journal_mode = WAL");let p=(0,a.t)(l,{schema:o})},8290:(e,t,r)=>{r.r(t),r.d(t,{accounts:()=>u,sessions:()=>d,userServers:()=>l,users:()=>i,verifications:()=>c});var s=r(80722),n=r(10160),a=r(30304),o=r(76303);let i=(0,s.Px)("users",{id:(0,n.fL)("id").primaryKey(),name:(0,n.fL)("name").notNull(),email:(0,n.fL)("email").notNull().unique(),emailVerified:(0,a._L)("email_verified",{mode:"boolean"}).notNull().default(!1),image:(0,n.fL)("image"),role:(0,n.fL)("role").notNull().default("user"),banned:(0,a._L)("banned",{mode:"boolean"}).default(!1),banReason:(0,n.fL)("ban_reason"),banExpires:(0,a._L)("ban_expires",{mode:"timestamp"}),createdAt:(0,a._L)("created_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date),updatedAt:(0,a._L)("updated_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date)}),d=(0,s.Px)("sessions",{id:(0,n.fL)("id").primaryKey(),expiresAt:(0,a._L)("expires_at",{mode:"timestamp"}).notNull(),token:(0,n.fL)("token").notNull().unique(),ipAddress:(0,n.fL)("ip_address"),userAgent:(0,n.fL)("user_agent"),userId:(0,n.fL)("user_id").notNull().references(()=>i.id,{onDelete:"cascade"}),createdAt:(0,a._L)("created_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date),updatedAt:(0,a._L)("updated_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date)}),u=(0,s.Px)("accounts",{id:(0,n.fL)("id").primaryKey(),accountId:(0,n.fL)("account_id").notNull(),providerId:(0,n.fL)("provider_id").notNull(),userId:(0,n.fL)("user_id").notNull().references(()=>i.id,{onDelete:"cascade"}),accessToken:(0,n.fL)("access_token"),refreshToken:(0,n.fL)("refresh_token"),idToken:(0,n.fL)("id_token"),accessTokenExpiresAt:(0,a._L)("access_token_expires_at",{mode:"timestamp"}),refreshTokenExpiresAt:(0,a._L)("refresh_token_expires_at",{mode:"timestamp"}),scope:(0,n.fL)("scope"),password:(0,n.fL)("password"),createdAt:(0,a._L)("created_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date),updatedAt:(0,a._L)("updated_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date)}),c=(0,s.Px)("verifications",{id:(0,n.fL)("id").primaryKey(),identifier:(0,n.fL)("identifier").notNull(),value:(0,n.fL)("value").notNull(),expiresAt:(0,a._L)("expires_at",{mode:"timestamp"}).notNull(),createdAt:(0,a._L)("created_at",{mode:"timestamp"}).$defaultFn(()=>new Date),updatedAt:(0,a._L)("updated_at",{mode:"timestamp"}).$defaultFn(()=>new Date)}),l=(0,s.Px)("user_servers",{id:(0,n.fL)("id").primaryKey().$defaultFn(()=>crypto.randomUUID()),userId:(0,n.fL)("user_id").notNull().references(()=>i.id,{onDelete:"cascade"}),serverId:(0,n.fL)("server_id").notNull(),permission:(0,n.fL)("permission").$type().notNull().default("view"),createdAt:(0,a._L)("created_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date),updatedAt:(0,a._L)("updated_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date)},e=>({userServerIdx:(0,o.Kz)("user_server_idx").on(e.userId,e.serverId)}))}};var t=require("../../../../../../webpack-runtime.js");t.C(e);var r=e=>t(t.s=e),s=t.X(0,[9836,1489,7605,5309],()=>r(25138));module.exports=s})();
@@ -1 +1 @@
1
- "use strict";(()=>{var e={};e.id=6222,e.ids=[6222],e.modules={85890:e=>{e.exports=require("better-sqlite3")},72934:e=>{e.exports=require("next/dist/client/components/action-async-storage.external.js")},54580:e=>{e.exports=require("next/dist/client/components/request-async-storage.external.js")},45869:e=>{e.exports=require("next/dist/client/components/static-generation-async-storage.external.js")},20399:e=>{e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},30517:e=>{e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},92048:e=>{e.exports=require("fs")},55315:e=>{e.exports=require("path")},4908:(e,t,r)=>{r.r(t),r.d(t,{originalPathname:()=>x,patchFetch:()=>g,requestAsyncStorage:()=>v,routeModule:()=>h,serverHooks:()=>_,staticGenerationAsyncStorage:()=>y});var s={};r.r(s),r.d(s,{GET:()=>m,POST:()=>f,dynamic:()=>l});var n=r(3025),a=r(45086),o=r(74048),i=r(24517),d=r(78649),u=r(31969),c=r(77605);let l="force-dynamic";function p(e){return{username:e.user.name||e.user.email,role:e.user.role||"user"}}async function m(){try{let e=await u.I.api.getSession({headers:await (0,c.headers)()});if(!e)return i.NextResponse.json({error:"Unauthorized",message:"Authentication required"},{status:401});let t=(0,d.F0)(p(e)),r=await t.getServers();return i.NextResponse.json(r)}catch(e){if(e instanceof d.zB)return i.NextResponse.json({error:e.error,message:e.message},{status:e.statusCode});return console.error("Failed to fetch servers:",e),i.NextResponse.json({error:"InternalServerError",message:"Failed to fetch servers"},{status:500})}}async function f(e){try{let t=await u.I.api.getSession({headers:await (0,c.headers)()});if(!t)return i.NextResponse.json({error:"Unauthorized",message:"Authentication required"},{status:401});let r=await e.json(),s=(0,d.F0)(p(t)),n=await s.createServer(r);return i.NextResponse.json(n,{status:201})}catch(e){if(e instanceof d.zB)return i.NextResponse.json({error:e.error,message:e.message},{status:e.statusCode});return console.error("Failed to create server:",e),i.NextResponse.json({error:"InternalServerError",message:"Failed to create server"},{status:500})}}let h=new n.AppRouteRouteModule({definition:{kind:a.x.APP_ROUTE,page:"/api/servers/route",pathname:"/api/servers",filename:"route",bundlePath:"app/api/servers/route"},resolvedPagePath:"/home/runner/work/minecraft-server-manager/minecraft-server-manager/platform/services/mcctl-console/src/app/api/servers/route.ts",nextConfigOutput:"standalone",userland:s}),{requestAsyncStorage:v,staticGenerationAsyncStorage:y,serverHooks:_}=h,x="/api/servers/route";function g(){return(0,o.patchFetch)({serverHooks:_,staticGenerationAsyncStorage:y})}},78649:(e,t,r)=>{r.d(t,{F0:()=>a,zB:()=>s});class s extends Error{constructor(e,t,r){super(r),this.statusCode=e,this.error=t,this.name="McctlApiError"}}class n{constructor(e){this.baseUrl=e.baseUrl.replace(/\/$/,""),this.apiKey=e.apiKey,this.userContext=e.userContext}async fetch(e,t={}){let r=`${this.baseUrl}${e}`,n={"X-API-Key":this.apiKey};t.body&&(n["Content-Type"]="application/json"),this.userContext&&(n["X-User"]=this.userContext.username,n["X-Role"]=this.userContext.role);let a=await fetch(r,{...t,headers:{...n,...t.headers}});if(!a.ok){let e=await a.json().catch(()=>({error:"UnknownError",message:a.statusText}));throw new s(a.status,e.error,e.message)}return a.json()}async getServers(){return this.fetch("/api/servers")}async getServer(e){return this.fetch(`/api/servers/${encodeURIComponent(e)}`)}async createServer(e){return this.fetch("/api/servers",{method:"POST",body:JSON.stringify(e)})}async deleteServer(e,t){return this.fetch(`/api/servers/${encodeURIComponent(e)}${t?"?force=true":""}`,{method:"DELETE"})}async startServer(e){return this.fetch(`/api/servers/${encodeURIComponent(e)}/start`,{method:"POST"})}async stopServer(e){return this.fetch(`/api/servers/${encodeURIComponent(e)}/stop`,{method:"POST"})}async restartServer(e){return this.fetch(`/api/servers/${encodeURIComponent(e)}/restart`,{method:"POST"})}async execCommand(e,t){return this.fetch(`/api/servers/${encodeURIComponent(e)}/exec`,{method:"POST",body:JSON.stringify({command:t})})}async getLogs(e,t=100){return this.fetch(`/api/servers/${encodeURIComponent(e)}/logs?lines=${t}`)}async getWorlds(){return this.fetch("/api/worlds")}async getWorld(e){return this.fetch(`/api/worlds/${encodeURIComponent(e)}`)}async createWorld(e){return this.fetch("/api/worlds",{method:"POST",body:JSON.stringify(e)})}async assignWorld(e,t){return this.fetch(`/api/worlds/${encodeURIComponent(e)}/assign`,{method:"POST",body:JSON.stringify({serverName:t})})}async releaseWorld(e,t){return this.fetch(`/api/worlds/${encodeURIComponent(e)}/release${t?"?force=true":""}`,{method:"POST"})}async deleteWorld(e,t){return this.fetch(`/api/worlds/${encodeURIComponent(e)}${t?"?force=true":""}`,{method:"DELETE"})}async getServerConfig(e){return this.fetch(`/api/servers/${encodeURIComponent(e)}/config`)}async updateServerConfig(e,t){return this.fetch(`/api/servers/${encodeURIComponent(e)}/config`,{method:"PATCH",body:JSON.stringify(t)})}async resetWorld(e){return this.fetch(`/api/servers/${encodeURIComponent(e)}/world/reset`,{method:"POST"})}async getRouterStatus(){return this.fetch("/api/router/status")}}function a(e){let t=process.env.MCCTL_API_URL||"http://localhost:5001",r=process.env.MCCTL_API_KEY||"";return r||console.warn("MCCTL_API_KEY is not set. API requests may fail."),new n({baseUrl:t,apiKey:r,userContext:e})}},31969:(e,t,r)=>{r.d(t,{I:()=>d});var s=r(33580),n=r(5944),a=r(90224),o=r(22587),i=r(8290);let d=(0,s.kj)({database:(0,n.s)(o.db,{provider:"sqlite",schema:{user:i.users,session:i.sessions,account:i.accounts,verification:i.verifications}}),emailAndPassword:{enabled:!0,requireEmailVerification:!1},session:{expiresIn:604800,updateAge:86400,cookieCache:{enabled:!0,maxAge:300}},user:{additionalFields:{role:{type:"string",required:!1,defaultValue:"user",input:!1}}},plugins:[(0,a.SA)({defaultRole:"user",adminRole:"admin"})],trustedOrigins:["http://localhost:5000","http://localhost:3000",process.env.BETTER_AUTH_URL||"http://localhost:5000"].filter(Boolean)})},22587:(e,t,r)=>{r.d(t,{db:()=>p});var s=r(85890),n=r.n(s),a=r(31590),o=r(8290),i=r(55315),d=r.n(i),u=r(92048);let c=function(){if(process.env.DATABASE_URL)return process.env.DATABASE_URL;let e=d().join(process.cwd(),"data");return d().join(e,"mcctl.db")}();!function(e){if(":memory:"===e)return;let t=d().dirname(e);(0,u.existsSync)(t)||(0,u.mkdirSync)(t,{recursive:!0})}(c);let l=new(n())(c);l.pragma("journal_mode = WAL");let p=(0,a.t)(l,{schema:o})},8290:(e,t,r)=>{r.r(t),r.d(t,{accounts:()=>u,sessions:()=>d,userServers:()=>l,users:()=>i,verifications:()=>c});var s=r(80722),n=r(10160),a=r(30304),o=r(76303);let i=(0,s.Px)("users",{id:(0,n.fL)("id").primaryKey(),name:(0,n.fL)("name").notNull(),email:(0,n.fL)("email").notNull().unique(),emailVerified:(0,a._L)("email_verified",{mode:"boolean"}).notNull().default(!1),image:(0,n.fL)("image"),role:(0,n.fL)("role").notNull().default("user"),banned:(0,a._L)("banned",{mode:"boolean"}).default(!1),banReason:(0,n.fL)("ban_reason"),banExpires:(0,a._L)("ban_expires",{mode:"timestamp"}),createdAt:(0,a._L)("created_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date),updatedAt:(0,a._L)("updated_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date)}),d=(0,s.Px)("sessions",{id:(0,n.fL)("id").primaryKey(),expiresAt:(0,a._L)("expires_at",{mode:"timestamp"}).notNull(),token:(0,n.fL)("token").notNull().unique(),ipAddress:(0,n.fL)("ip_address"),userAgent:(0,n.fL)("user_agent"),userId:(0,n.fL)("user_id").notNull().references(()=>i.id,{onDelete:"cascade"}),createdAt:(0,a._L)("created_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date),updatedAt:(0,a._L)("updated_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date)}),u=(0,s.Px)("accounts",{id:(0,n.fL)("id").primaryKey(),accountId:(0,n.fL)("account_id").notNull(),providerId:(0,n.fL)("provider_id").notNull(),userId:(0,n.fL)("user_id").notNull().references(()=>i.id,{onDelete:"cascade"}),accessToken:(0,n.fL)("access_token"),refreshToken:(0,n.fL)("refresh_token"),idToken:(0,n.fL)("id_token"),accessTokenExpiresAt:(0,a._L)("access_token_expires_at",{mode:"timestamp"}),refreshTokenExpiresAt:(0,a._L)("refresh_token_expires_at",{mode:"timestamp"}),scope:(0,n.fL)("scope"),password:(0,n.fL)("password"),createdAt:(0,a._L)("created_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date),updatedAt:(0,a._L)("updated_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date)}),c=(0,s.Px)("verifications",{id:(0,n.fL)("id").primaryKey(),identifier:(0,n.fL)("identifier").notNull(),value:(0,n.fL)("value").notNull(),expiresAt:(0,a._L)("expires_at",{mode:"timestamp"}).notNull(),createdAt:(0,a._L)("created_at",{mode:"timestamp"}).$defaultFn(()=>new Date),updatedAt:(0,a._L)("updated_at",{mode:"timestamp"}).$defaultFn(()=>new Date)}),l=(0,s.Px)("user_servers",{id:(0,n.fL)("id").primaryKey().$defaultFn(()=>crypto.randomUUID()),userId:(0,n.fL)("user_id").notNull().references(()=>i.id,{onDelete:"cascade"}),serverId:(0,n.fL)("server_id").notNull(),permission:(0,n.fL)("permission").$type().notNull().default("view"),createdAt:(0,a._L)("created_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date),updatedAt:(0,a._L)("updated_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date)},e=>({userServerIdx:(0,o.Kz)("user_server_idx").on(e.userId,e.serverId)}))}};var t=require("../../../webpack-runtime.js");t.C(e);var r=e=>t(t.s=e),s=t.X(0,[9836,1489,7605,5309],()=>r(4908));module.exports=s})();
1
+ "use strict";(()=>{var e={};e.id=6222,e.ids=[6222],e.modules={85890:e=>{e.exports=require("better-sqlite3")},72934:e=>{e.exports=require("next/dist/client/components/action-async-storage.external.js")},54580:e=>{e.exports=require("next/dist/client/components/request-async-storage.external.js")},45869:e=>{e.exports=require("next/dist/client/components/static-generation-async-storage.external.js")},20399:e=>{e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},30517:e=>{e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},92048:e=>{e.exports=require("fs")},55315:e=>{e.exports=require("path")},4908:(e,r,s)=>{s.r(r),s.d(r,{originalPathname:()=>x,patchFetch:()=>A,requestAsyncStorage:()=>w,routeModule:()=>y,serverHooks:()=>g,staticGenerationAsyncStorage:()=>S});var t={};s.r(t),s.d(t,{GET:()=>h,POST:()=>v,dynamic:()=>p});var n=s(3025),a=s(45086),i=s(74048),o=s(24517),d=s(78649),u=s(60154),c=s(77605),l=s(97060),m=s(74888);let p="force-dynamic";function f(e){return{username:e.user.name||e.user.email,role:e.user.role||"user"}}async function h(){try{let e=await (0,u.mk)(await (0,c.headers)()),r=(0,d.F0)(f(e)),s=await r.getServers();if("admin"===e.user.role)return o.NextResponse.json(s);let t=new l.x,n=await t.findByUser(e.user.id),a=new Set(n.map(e=>e.serverId)),i=s.servers.filter(e=>a.has(e.name));return o.NextResponse.json({servers:i,total:i.length})}catch(e){if(e instanceof u.l4)return o.NextResponse.json({error:"Unauthorized",message:e.message},{status:e.statusCode});if(e instanceof d.zB)return o.NextResponse.json({error:e.error,message:e.message},{status:e.statusCode});return console.error("Failed to fetch servers:",e),o.NextResponse.json({error:"InternalServerError",message:"Failed to fetch servers"},{status:500})}}async function v(e){try{let r=await (0,u.mk)(await (0,c.headers)()),s=await e.json(),t=(0,d.F0)(f(r)),n=await t.createServer(s);if("admin"!==r.user.role){let e=new l.x,s=new m.e(e);try{await s.grantAccess(r.user.id,n.server.name,"admin")}catch(e){console.error("Failed to grant admin permission:",e)}}return o.NextResponse.json(n,{status:201})}catch(e){if(e instanceof u.l4)return o.NextResponse.json({error:"Unauthorized",message:e.message},{status:e.statusCode});if(e instanceof d.zB)return o.NextResponse.json({error:e.error,message:e.message},{status:e.statusCode});return console.error("Failed to create server:",e),o.NextResponse.json({error:"InternalServerError",message:"Failed to create server"},{status:500})}}let y=new n.AppRouteRouteModule({definition:{kind:a.x.APP_ROUTE,page:"/api/servers/route",pathname:"/api/servers",filename:"route",bundlePath:"app/api/servers/route"},resolvedPagePath:"/home/runner/work/minecraft-server-manager/minecraft-server-manager/platform/services/mcctl-console/src/app/api/servers/route.ts",nextConfigOutput:"standalone",userland:t}),{requestAsyncStorage:w,staticGenerationAsyncStorage:S,serverHooks:g}=y,x="/api/servers/route";function A(){return(0,i.patchFetch)({serverHooks:g,staticGenerationAsyncStorage:S})}},78649:(e,r,s)=>{s.d(r,{F0:()=>a,zB:()=>t});class t extends Error{constructor(e,r,s){super(s),this.statusCode=e,this.error=r,this.name="McctlApiError"}}class n{constructor(e){this.baseUrl=e.baseUrl.replace(/\/$/,""),this.apiKey=e.apiKey,this.userContext=e.userContext}async fetch(e,r={}){let s=`${this.baseUrl}${e}`,n={"X-API-Key":this.apiKey};r.body&&(n["Content-Type"]="application/json"),this.userContext&&(n["X-User"]=this.userContext.username,n["X-Role"]=this.userContext.role);let a=await fetch(s,{...r,headers:{...n,...r.headers}});if(!a.ok){let e=await a.json().catch(()=>({error:"UnknownError",message:a.statusText}));throw new t(a.status,e.error,e.message)}return a.json()}async getServers(){return this.fetch("/api/servers")}async getServer(e){return this.fetch(`/api/servers/${encodeURIComponent(e)}`)}async createServer(e){return this.fetch("/api/servers",{method:"POST",body:JSON.stringify(e)})}async deleteServer(e,r){return this.fetch(`/api/servers/${encodeURIComponent(e)}${r?"?force=true":""}`,{method:"DELETE"})}async startServer(e){return this.fetch(`/api/servers/${encodeURIComponent(e)}/start`,{method:"POST"})}async stopServer(e){return this.fetch(`/api/servers/${encodeURIComponent(e)}/stop`,{method:"POST"})}async restartServer(e){return this.fetch(`/api/servers/${encodeURIComponent(e)}/restart`,{method:"POST"})}async execCommand(e,r){return this.fetch(`/api/servers/${encodeURIComponent(e)}/exec`,{method:"POST",body:JSON.stringify({command:r})})}async getLogs(e,r=100){return this.fetch(`/api/servers/${encodeURIComponent(e)}/logs?lines=${r}`)}async getWorlds(){return this.fetch("/api/worlds")}async getWorld(e){return this.fetch(`/api/worlds/${encodeURIComponent(e)}`)}async createWorld(e){return this.fetch("/api/worlds",{method:"POST",body:JSON.stringify(e)})}async assignWorld(e,r){return this.fetch(`/api/worlds/${encodeURIComponent(e)}/assign`,{method:"POST",body:JSON.stringify({serverName:r})})}async releaseWorld(e,r){return this.fetch(`/api/worlds/${encodeURIComponent(e)}/release${r?"?force=true":""}`,{method:"POST"})}async deleteWorld(e,r){return this.fetch(`/api/worlds/${encodeURIComponent(e)}${r?"?force=true":""}`,{method:"DELETE"})}async getServerConfig(e){return this.fetch(`/api/servers/${encodeURIComponent(e)}/config`)}async updateServerConfig(e,r){return this.fetch(`/api/servers/${encodeURIComponent(e)}/config`,{method:"PATCH",body:JSON.stringify(r)})}async resetWorld(e){return this.fetch(`/api/servers/${encodeURIComponent(e)}/world/reset`,{method:"POST"})}async getRouterStatus(){return this.fetch("/api/router/status")}async getBackupStatus(){return this.fetch("/api/backup/status")}async pushBackup(e){let r=e?JSON.stringify({message:e}):void 0;return this.fetch("/api/backup/push",{method:"POST",body:r})}async getBackupHistory(e=20){return this.fetch(`/api/backup/history?limit=${e}`)}async restoreBackup(e){return this.fetch("/api/backup/restore",{method:"POST",body:JSON.stringify({commitHash:e})})}}function a(e){let r=process.env.MCCTL_API_URL||"http://localhost:5001",s=process.env.MCCTL_API_KEY||"";return s||console.warn("MCCTL_API_KEY is not set. API requests may fail."),new n({baseUrl:r,apiKey:s,userContext:e})}},97060:(e,r,s)=>{s.d(r,{x:()=>i});var t=s(30579),n=s(22587),a=s(8290);class i{async findById(e){return(await n.db.select().from(a.userServers).where((0,t.eq)(a.userServers.id,e)).limit(1))[0]??null}async findByUserAndServer(e,r){return(await n.db.select().from(a.userServers).where((0,t.xD)((0,t.eq)(a.userServers.userId,e),(0,t.eq)(a.userServers.serverId,r))).limit(1))[0]??null}async findByServer(e){return n.db.select().from(a.userServers).where((0,t.eq)(a.userServers.serverId,e))}async findByServerWithUsers(e){return(await n.db.select({id:a.userServers.id,userId:a.userServers.userId,serverId:a.userServers.serverId,permission:a.userServers.permission,createdAt:a.userServers.createdAt,updatedAt:a.userServers.updatedAt,user:{id:a.users.id,name:a.users.name,email:a.users.email,image:a.users.image}}).from(a.userServers).leftJoin(a.users,(0,t.eq)(a.userServers.userId,a.users.id)).where((0,t.eq)(a.userServers.serverId,e))).map(e=>({id:e.id,userId:e.userId,serverId:e.serverId,permission:e.permission,createdAt:e.createdAt,updatedAt:e.updatedAt,user:e.user??void 0}))}async findByUser(e){return n.db.select().from(a.userServers).where((0,t.eq)(a.userServers.userId,e))}async create(e){let r=await n.db.insert(a.userServers).values(e).returning();if(!r[0])throw Error("Failed to create user-server permission");return r[0]}async updatePermission(e,r){let s=await n.db.update(a.userServers).set({permission:r,updatedAt:new Date}).where((0,t.eq)(a.userServers.id,e)).returning();if(!s[0])throw Error(`User-server permission not found: ${e}`);return s[0]}async delete(e){await n.db.delete(a.userServers).where((0,t.eq)(a.userServers.id,e))}async deleteByUserAndServer(e,r){await n.db.delete(a.userServers).where((0,t.xD)((0,t.eq)(a.userServers.userId,e),(0,t.eq)(a.userServers.serverId,r)))}async countByServerAndPermission(e,r){return(await n.db.select().from(a.userServers).where((0,t.xD)((0,t.eq)(a.userServers.serverId,e),(0,t.eq)(a.userServers.permission,r)))).length}}},60154:(e,r,s)=>{s.d(r,{Ke:()=>c,kF:()=>u,l4:()=>o,mk:()=>d});var t=s(31969),n=s(22587),a=s(8290),i=s(30579);class o extends Error{constructor(e,r=401){super(e),this.statusCode=r,this.name="AuthError"}}async function d(e){let r=await t.I.api.getSession({headers:e});if(!r)throw new o("Unauthorized",401);return r}async function u(e){let r=await d(e);if("admin"!==r.user.role)throw new o("Forbidden: Admin access required",403);return r}async function c(e,r,s="view"){let t=await d(e);if("admin"===t.user.role)return t;let u=await n.db.select().from(a.userServers).where((0,i.xD)((0,i.eq)(a.userServers.userId,t.user.id),(0,i.eq)(a.userServers.serverId,r))).limit(1);if(0===u.length)throw new o("Forbidden: No access to this server",403);let c=u[0].permission,l={view:1,manage:2,admin:3};if(l[c]<l[s])throw new o(`Forbidden: Requires ${s} permission`,403);return t}},31969:(e,r,s)=>{s.d(r,{I:()=>d});var t=s(33580),n=s(5944),a=s(90224),i=s(22587),o=s(8290);let d=(0,t.kj)({database:(0,n.s)(i.db,{provider:"sqlite",schema:{user:o.users,session:o.sessions,account:o.accounts,verification:o.verifications}}),emailAndPassword:{enabled:!0,requireEmailVerification:!1},session:{expiresIn:604800,updateAge:86400,cookieCache:{enabled:!0,maxAge:300}},user:{additionalFields:{role:{type:"string",required:!1,defaultValue:"user",input:!1}}},plugins:[(0,a.SA)({defaultRole:"user",adminRole:"admin"})],trustedOrigins:["http://localhost:5000","http://localhost:3000",process.env.BETTER_AUTH_URL||"http://localhost:5000"].filter(Boolean)})},22587:(e,r,s)=>{s.d(r,{db:()=>m});var t=s(85890),n=s.n(t),a=s(31590),i=s(8290),o=s(55315),d=s.n(o),u=s(92048);let c=function(){if(process.env.DATABASE_URL)return process.env.DATABASE_URL;let e=d().join(process.cwd(),"data");return d().join(e,"mcctl.db")}();!function(e){if(":memory:"===e)return;let r=d().dirname(e);(0,u.existsSync)(r)||(0,u.mkdirSync)(r,{recursive:!0})}(c);let l=new(n())(c);l.pragma("journal_mode = WAL");let m=(0,a.t)(l,{schema:i})},8290:(e,r,s)=>{s.r(r),s.d(r,{accounts:()=>u,sessions:()=>d,userServers:()=>l,users:()=>o,verifications:()=>c});var t=s(80722),n=s(10160),a=s(30304),i=s(76303);let o=(0,t.Px)("users",{id:(0,n.fL)("id").primaryKey(),name:(0,n.fL)("name").notNull(),email:(0,n.fL)("email").notNull().unique(),emailVerified:(0,a._L)("email_verified",{mode:"boolean"}).notNull().default(!1),image:(0,n.fL)("image"),role:(0,n.fL)("role").notNull().default("user"),banned:(0,a._L)("banned",{mode:"boolean"}).default(!1),banReason:(0,n.fL)("ban_reason"),banExpires:(0,a._L)("ban_expires",{mode:"timestamp"}),createdAt:(0,a._L)("created_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date),updatedAt:(0,a._L)("updated_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date)}),d=(0,t.Px)("sessions",{id:(0,n.fL)("id").primaryKey(),expiresAt:(0,a._L)("expires_at",{mode:"timestamp"}).notNull(),token:(0,n.fL)("token").notNull().unique(),ipAddress:(0,n.fL)("ip_address"),userAgent:(0,n.fL)("user_agent"),userId:(0,n.fL)("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),createdAt:(0,a._L)("created_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date),updatedAt:(0,a._L)("updated_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date)}),u=(0,t.Px)("accounts",{id:(0,n.fL)("id").primaryKey(),accountId:(0,n.fL)("account_id").notNull(),providerId:(0,n.fL)("provider_id").notNull(),userId:(0,n.fL)("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),accessToken:(0,n.fL)("access_token"),refreshToken:(0,n.fL)("refresh_token"),idToken:(0,n.fL)("id_token"),accessTokenExpiresAt:(0,a._L)("access_token_expires_at",{mode:"timestamp"}),refreshTokenExpiresAt:(0,a._L)("refresh_token_expires_at",{mode:"timestamp"}),scope:(0,n.fL)("scope"),password:(0,n.fL)("password"),createdAt:(0,a._L)("created_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date),updatedAt:(0,a._L)("updated_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date)}),c=(0,t.Px)("verifications",{id:(0,n.fL)("id").primaryKey(),identifier:(0,n.fL)("identifier").notNull(),value:(0,n.fL)("value").notNull(),expiresAt:(0,a._L)("expires_at",{mode:"timestamp"}).notNull(),createdAt:(0,a._L)("created_at",{mode:"timestamp"}).$defaultFn(()=>new Date),updatedAt:(0,a._L)("updated_at",{mode:"timestamp"}).$defaultFn(()=>new Date)}),l=(0,t.Px)("user_servers",{id:(0,n.fL)("id").primaryKey().$defaultFn(()=>crypto.randomUUID()),userId:(0,n.fL)("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),serverId:(0,n.fL)("server_id").notNull(),permission:(0,n.fL)("permission").$type().notNull().default("view"),createdAt:(0,a._L)("created_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date),updatedAt:(0,a._L)("updated_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date)},e=>({userServerIdx:(0,i.Kz)("user_server_idx").on(e.userId,e.serverId)}))},74888:(e,r,s)=>{s.d(r,{e:()=>n,o:()=>t});class t extends Error{constructor(e){super(e),this.name="PermissionError"}}class n{constructor(e){this.repository=e}async grantAccess(e,r,s){let t=await this.repository.findByUserAndServer(e,r);return t?this.repository.updatePermission(t.id,s):this.repository.create({userId:e,serverId:r,permission:s})}async revokeAccess(e,r){let s=await this.repository.findByUserAndServer(e,r);if(s?.permission==="admin"&&await this.repository.countByServerAndPermission(r,"admin")<=1)throw new t("Cannot remove the last admin from the server");await this.repository.deleteByUserAndServer(e,r)}async updatePermission(e,r,s){let n=await this.repository.findByUserAndServer(e,r);if(!n)throw new t("Permission not found for this user and server");if("admin"===n.permission&&"admin"!==s&&await this.repository.countByServerAndPermission(r,"admin")<=1)throw new t("Cannot downgrade the last admin. Assign another admin first.");return this.repository.updatePermission(n.id,s)}async getServerUsers(e){return this.repository.findByServer(e)}async getServerUsersWithDetails(e){return this.repository.findByServerWithUsers(e)}async getUserServers(e){return this.repository.findByUser(e)}async hasPermission(e,r,s){let t=await this.repository.findByUserAndServer(e,r);if(!t)return!1;let n={view:1,manage:2,admin:3};return n[t.permission]>=n[s]}async ensureAtLeastOneAdmin(e){if(0===await this.repository.countByServerAndPermission(e,"admin"))throw new t("Server must have at least one admin")}}}};var r=require("../../../webpack-runtime.js");r.C(e);var s=e=>r(r.s=e),t=r.X(0,[9836,1489,7605,5309],()=>s(4908));module.exports=t})();
@@ -0,0 +1 @@
1
+ "use strict";(()=>{var e={};e.id=8384,e.ids=[8384],e.modules={85890:e=>{e.exports=require("better-sqlite3")},72934:e=>{e.exports=require("next/dist/client/components/action-async-storage.external.js")},54580:e=>{e.exports=require("next/dist/client/components/request-async-storage.external.js")},45869:e=>{e.exports=require("next/dist/client/components/static-generation-async-storage.external.js")},20399:e=>{e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},30517:e=>{e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},92048:e=>{e.exports=require("fs")},55315:e=>{e.exports=require("path")},77561:(e,r,s)=>{s.r(r),s.d(r,{originalPathname:()=>A,patchFetch:()=>x,requestAsyncStorage:()=>y,routeModule:()=>v,serverHooks:()=>w,staticGenerationAsyncStorage:()=>h});var t={};s.r(t),s.d(t,{DELETE:()=>f,PATCH:()=>p,dynamic:()=>c});var n=s(3025),i=s(45086),a=s(74048),o=s(24517),d=s(31969),u=s(77605),l=s(97060),m=s(74888);let c="force-dynamic";async function p(e,{params:r}){try{let s=await d.I.api.getSession({headers:await (0,u.headers)()});if(!s)return o.NextResponse.json({error:"Unauthorized",message:"Authentication required"},{status:401});let{id:t}=await r,{permission:n}=await e.json();if(!n||!["view","manage","admin"].includes(n))return o.NextResponse.json({error:"BadRequest",message:"Permission must be view, manage, or admin"},{status:400});let i=function(){let e=new l.x;return new m.e(e)}(),a=new l.x,c=await a.findById(t);if(!c)return o.NextResponse.json({error:"NotFound",message:"Permission record not found"},{status:404});if("admin"!==s.user.role&&!await i.hasPermission(s.user.id,c.serverId,"admin"))return o.NextResponse.json({error:"Forbidden",message:"Admin permission required"},{status:403});let p=await i.updatePermission(c.userId,c.serverId,n);return o.NextResponse.json(p)}catch(e){if(e instanceof m.o)return o.NextResponse.json({error:"Forbidden",message:e.message},{status:403});return console.error("Failed to update permission:",e),o.NextResponse.json({error:"InternalServerError",message:"Failed to update permission"},{status:500})}}async function f(e,{params:r}){try{let e=await d.I.api.getSession({headers:await (0,u.headers)()});if(!e)return o.NextResponse.json({error:"Unauthorized",message:"Authentication required"},{status:401});let{id:s}=await r;if("admin"!==e.user.role)return o.NextResponse.json({error:"Forbidden",message:"Admin permission required"},{status:403});let t=new l.x;return await t.delete(s),o.NextResponse.json({success:!0})}catch(e){if(e instanceof m.o)return o.NextResponse.json({error:"Forbidden",message:e.message},{status:403});return console.error("Failed to revoke access:",e),o.NextResponse.json({error:"InternalServerError",message:"Failed to revoke access"},{status:500})}}let v=new n.AppRouteRouteModule({definition:{kind:i.x.APP_ROUTE,page:"/api/user-servers/[id]/route",pathname:"/api/user-servers/[id]",filename:"route",bundlePath:"app/api/user-servers/[id]/route"},resolvedPagePath:"/home/runner/work/minecraft-server-manager/minecraft-server-manager/platform/services/mcctl-console/src/app/api/user-servers/[id]/route.ts",nextConfigOutput:"standalone",userland:t}),{requestAsyncStorage:y,staticGenerationAsyncStorage:h,serverHooks:w}=v,A="/api/user-servers/[id]/route";function x(){return(0,a.patchFetch)({serverHooks:w,staticGenerationAsyncStorage:h})}},97060:(e,r,s)=>{s.d(r,{x:()=>a});var t=s(30579),n=s(22587),i=s(8290);class a{async findById(e){return(await n.db.select().from(i.userServers).where((0,t.eq)(i.userServers.id,e)).limit(1))[0]??null}async findByUserAndServer(e,r){return(await n.db.select().from(i.userServers).where((0,t.xD)((0,t.eq)(i.userServers.userId,e),(0,t.eq)(i.userServers.serverId,r))).limit(1))[0]??null}async findByServer(e){return n.db.select().from(i.userServers).where((0,t.eq)(i.userServers.serverId,e))}async findByServerWithUsers(e){return(await n.db.select({id:i.userServers.id,userId:i.userServers.userId,serverId:i.userServers.serverId,permission:i.userServers.permission,createdAt:i.userServers.createdAt,updatedAt:i.userServers.updatedAt,user:{id:i.users.id,name:i.users.name,email:i.users.email,image:i.users.image}}).from(i.userServers).leftJoin(i.users,(0,t.eq)(i.userServers.userId,i.users.id)).where((0,t.eq)(i.userServers.serverId,e))).map(e=>({id:e.id,userId:e.userId,serverId:e.serverId,permission:e.permission,createdAt:e.createdAt,updatedAt:e.updatedAt,user:e.user??void 0}))}async findByUser(e){return n.db.select().from(i.userServers).where((0,t.eq)(i.userServers.userId,e))}async create(e){let r=await n.db.insert(i.userServers).values(e).returning();if(!r[0])throw Error("Failed to create user-server permission");return r[0]}async updatePermission(e,r){let s=await n.db.update(i.userServers).set({permission:r,updatedAt:new Date}).where((0,t.eq)(i.userServers.id,e)).returning();if(!s[0])throw Error(`User-server permission not found: ${e}`);return s[0]}async delete(e){await n.db.delete(i.userServers).where((0,t.eq)(i.userServers.id,e))}async deleteByUserAndServer(e,r){await n.db.delete(i.userServers).where((0,t.xD)((0,t.eq)(i.userServers.userId,e),(0,t.eq)(i.userServers.serverId,r)))}async countByServerAndPermission(e,r){return(await n.db.select().from(i.userServers).where((0,t.xD)((0,t.eq)(i.userServers.serverId,e),(0,t.eq)(i.userServers.permission,r)))).length}}},31969:(e,r,s)=>{s.d(r,{I:()=>d});var t=s(33580),n=s(5944),i=s(90224),a=s(22587),o=s(8290);let d=(0,t.kj)({database:(0,n.s)(a.db,{provider:"sqlite",schema:{user:o.users,session:o.sessions,account:o.accounts,verification:o.verifications}}),emailAndPassword:{enabled:!0,requireEmailVerification:!1},session:{expiresIn:604800,updateAge:86400,cookieCache:{enabled:!0,maxAge:300}},user:{additionalFields:{role:{type:"string",required:!1,defaultValue:"user",input:!1}}},plugins:[(0,i.SA)({defaultRole:"user",adminRole:"admin"})],trustedOrigins:["http://localhost:5000","http://localhost:3000",process.env.BETTER_AUTH_URL||"http://localhost:5000"].filter(Boolean)})},22587:(e,r,s)=>{s.d(r,{db:()=>c});var t=s(85890),n=s.n(t),i=s(31590),a=s(8290),o=s(55315),d=s.n(o),u=s(92048);let l=function(){if(process.env.DATABASE_URL)return process.env.DATABASE_URL;let e=d().join(process.cwd(),"data");return d().join(e,"mcctl.db")}();!function(e){if(":memory:"===e)return;let r=d().dirname(e);(0,u.existsSync)(r)||(0,u.mkdirSync)(r,{recursive:!0})}(l);let m=new(n())(l);m.pragma("journal_mode = WAL");let c=(0,i.t)(m,{schema:a})},8290:(e,r,s)=>{s.r(r),s.d(r,{accounts:()=>u,sessions:()=>d,userServers:()=>m,users:()=>o,verifications:()=>l});var t=s(80722),n=s(10160),i=s(30304),a=s(76303);let o=(0,t.Px)("users",{id:(0,n.fL)("id").primaryKey(),name:(0,n.fL)("name").notNull(),email:(0,n.fL)("email").notNull().unique(),emailVerified:(0,i._L)("email_verified",{mode:"boolean"}).notNull().default(!1),image:(0,n.fL)("image"),role:(0,n.fL)("role").notNull().default("user"),banned:(0,i._L)("banned",{mode:"boolean"}).default(!1),banReason:(0,n.fL)("ban_reason"),banExpires:(0,i._L)("ban_expires",{mode:"timestamp"}),createdAt:(0,i._L)("created_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date),updatedAt:(0,i._L)("updated_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date)}),d=(0,t.Px)("sessions",{id:(0,n.fL)("id").primaryKey(),expiresAt:(0,i._L)("expires_at",{mode:"timestamp"}).notNull(),token:(0,n.fL)("token").notNull().unique(),ipAddress:(0,n.fL)("ip_address"),userAgent:(0,n.fL)("user_agent"),userId:(0,n.fL)("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),createdAt:(0,i._L)("created_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date),updatedAt:(0,i._L)("updated_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date)}),u=(0,t.Px)("accounts",{id:(0,n.fL)("id").primaryKey(),accountId:(0,n.fL)("account_id").notNull(),providerId:(0,n.fL)("provider_id").notNull(),userId:(0,n.fL)("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),accessToken:(0,n.fL)("access_token"),refreshToken:(0,n.fL)("refresh_token"),idToken:(0,n.fL)("id_token"),accessTokenExpiresAt:(0,i._L)("access_token_expires_at",{mode:"timestamp"}),refreshTokenExpiresAt:(0,i._L)("refresh_token_expires_at",{mode:"timestamp"}),scope:(0,n.fL)("scope"),password:(0,n.fL)("password"),createdAt:(0,i._L)("created_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date),updatedAt:(0,i._L)("updated_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date)}),l=(0,t.Px)("verifications",{id:(0,n.fL)("id").primaryKey(),identifier:(0,n.fL)("identifier").notNull(),value:(0,n.fL)("value").notNull(),expiresAt:(0,i._L)("expires_at",{mode:"timestamp"}).notNull(),createdAt:(0,i._L)("created_at",{mode:"timestamp"}).$defaultFn(()=>new Date),updatedAt:(0,i._L)("updated_at",{mode:"timestamp"}).$defaultFn(()=>new Date)}),m=(0,t.Px)("user_servers",{id:(0,n.fL)("id").primaryKey().$defaultFn(()=>crypto.randomUUID()),userId:(0,n.fL)("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),serverId:(0,n.fL)("server_id").notNull(),permission:(0,n.fL)("permission").$type().notNull().default("view"),createdAt:(0,i._L)("created_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date),updatedAt:(0,i._L)("updated_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date)},e=>({userServerIdx:(0,a.Kz)("user_server_idx").on(e.userId,e.serverId)}))},74888:(e,r,s)=>{s.d(r,{e:()=>n,o:()=>t});class t extends Error{constructor(e){super(e),this.name="PermissionError"}}class n{constructor(e){this.repository=e}async grantAccess(e,r,s){let t=await this.repository.findByUserAndServer(e,r);return t?this.repository.updatePermission(t.id,s):this.repository.create({userId:e,serverId:r,permission:s})}async revokeAccess(e,r){let s=await this.repository.findByUserAndServer(e,r);if(s?.permission==="admin"&&await this.repository.countByServerAndPermission(r,"admin")<=1)throw new t("Cannot remove the last admin from the server");await this.repository.deleteByUserAndServer(e,r)}async updatePermission(e,r,s){let n=await this.repository.findByUserAndServer(e,r);if(!n)throw new t("Permission not found for this user and server");if("admin"===n.permission&&"admin"!==s&&await this.repository.countByServerAndPermission(r,"admin")<=1)throw new t("Cannot downgrade the last admin. Assign another admin first.");return this.repository.updatePermission(n.id,s)}async getServerUsers(e){return this.repository.findByServer(e)}async getServerUsersWithDetails(e){return this.repository.findByServerWithUsers(e)}async getUserServers(e){return this.repository.findByUser(e)}async hasPermission(e,r,s){let t=await this.repository.findByUserAndServer(e,r);if(!t)return!1;let n={view:1,manage:2,admin:3};return n[t.permission]>=n[s]}async ensureAtLeastOneAdmin(e){if(0===await this.repository.countByServerAndPermission(e,"admin"))throw new t("Server must have at least one admin")}}}};var r=require("../../../../webpack-runtime.js");r.C(e);var s=e=>r(r.s=e),t=r.X(0,[9836,1489,7605,5309],()=>s(77561));module.exports=t})();
@@ -0,0 +1 @@
1
+ {"version":1,"files":["../../../../../../../../../node_modules/.pnpm/better-sqlite3@12.6.2/node_modules/better-sqlite3/build/Release/better_sqlite3.node","../../../../../../../../../node_modules/.pnpm/better-sqlite3@12.6.2/node_modules/better-sqlite3/lib/database.js","../../../../../../../../../node_modules/.pnpm/better-sqlite3@12.6.2/node_modules/better-sqlite3/lib/index.js","../../../../../../../../../node_modules/.pnpm/better-sqlite3@12.6.2/node_modules/better-sqlite3/lib/methods/aggregate.js","../../../../../../../../../node_modules/.pnpm/better-sqlite3@12.6.2/node_modules/better-sqlite3/lib/methods/backup.js","../../../../../../../../../node_modules/.pnpm/better-sqlite3@12.6.2/node_modules/better-sqlite3/lib/methods/function.js","../../../../../../../../../node_modules/.pnpm/better-sqlite3@12.6.2/node_modules/better-sqlite3/lib/methods/inspect.js","../../../../../../../../../node_modules/.pnpm/better-sqlite3@12.6.2/node_modules/better-sqlite3/lib/methods/pragma.js","../../../../../../../../../node_modules/.pnpm/better-sqlite3@12.6.2/node_modules/better-sqlite3/lib/methods/serialize.js","../../../../../../../../../node_modules/.pnpm/better-sqlite3@12.6.2/node_modules/better-sqlite3/lib/methods/table.js","../../../../../../../../../node_modules/.pnpm/better-sqlite3@12.6.2/node_modules/better-sqlite3/lib/methods/transaction.js","../../../../../../../../../node_modules/.pnpm/better-sqlite3@12.6.2/node_modules/better-sqlite3/lib/methods/wrappers.js","../../../../../../../../../node_modules/.pnpm/better-sqlite3@12.6.2/node_modules/better-sqlite3/lib/sqlite-error.js","../../../../../../../../../node_modules/.pnpm/better-sqlite3@12.6.2/node_modules/better-sqlite3/lib/util.js","../../../../../../../../../node_modules/.pnpm/better-sqlite3@12.6.2/node_modules/better-sqlite3/package.json","../../../../../../../../../node_modules/.pnpm/better-sqlite3@12.6.2/node_modules/bindings","../../../../../../../../../node_modules/.pnpm/bindings@1.5.0/node_modules/bindings/bindings.js","../../../../../../../../../node_modules/.pnpm/bindings@1.5.0/node_modules/bindings/package.json","../../../../../../../../../node_modules/.pnpm/bindings@1.5.0/node_modules/file-uri-to-path","../../../../../../../../../node_modules/.pnpm/file-uri-to-path@1.0.0/node_modules/file-uri-to-path/index.js","../../../../../../../../../node_modules/.pnpm/file-uri-to-path@1.0.0/node_modules/file-uri-to-path/package.json","../../../../../../../../../node_modules/.pnpm/next@14.2.35_@babel+core@7.28.6_@playwright+test@1.58.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/client/components/action-async-storage-instance.js","../../../../../../../../../node_modules/.pnpm/next@14.2.35_@babel+core@7.28.6_@playwright+test@1.58.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/client/components/action-async-storage.external.js","../../../../../../../../../node_modules/.pnpm/next@14.2.35_@babel+core@7.28.6_@playwright+test@1.58.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/client/components/async-local-storage.js","../../../../../../../../../node_modules/.pnpm/next@14.2.35_@babel+core@7.28.6_@playwright+test@1.58.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/client/components/request-async-storage-instance.js","../../../../../../../../../node_modules/.pnpm/next@14.2.35_@babel+core@7.28.6_@playwright+test@1.58.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/client/components/request-async-storage.external.js","../../../../../../../../../node_modules/.pnpm/next@14.2.35_@babel+core@7.28.6_@playwright+test@1.58.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/client/components/static-generation-async-storage-instance.js","../../../../../../../../../node_modules/.pnpm/next@14.2.35_@babel+core@7.28.6_@playwright+test@1.58.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/client/components/static-generation-async-storage.external.js","../../../../../../../../../node_modules/.pnpm/next@14.2.35_@babel+core@7.28.6_@playwright+test@1.58.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/compiled/@opentelemetry/api/index.js","../../../../../../../../../node_modules/.pnpm/next@14.2.35_@babel+core@7.28.6_@playwright+test@1.58.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/compiled/@opentelemetry/api/package.json","../../../../../../../../../node_modules/.pnpm/next@14.2.35_@babel+core@7.28.6_@playwright+test@1.58.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/compiled/next-server/app-page.runtime.prod.js","../../../../../../../../../node_modules/.pnpm/next@14.2.35_@babel+core@7.28.6_@playwright+test@1.58.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/compiled/next-server/app-route.runtime.prod.js","../../../../../../../../../node_modules/.pnpm/next@14.2.35_@babel+core@7.28.6_@playwright+test@1.58.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/server/lib/trace/constants.js","../../../../../../../../../node_modules/.pnpm/next@14.2.35_@babel+core@7.28.6_@playwright+test@1.58.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/server/lib/trace/tracer.js","../../../../../../../../../node_modules/.pnpm/next@14.2.35_@babel+core@7.28.6_@playwright+test@1.58.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/package.json","../../../../../../../../../package.json","../../../../../../node_modules/better-sqlite3","../../../../../../node_modules/next","../../../../../../package.json","../../../../../package.json","../../../../chunks/1489.js","../../../../chunks/3439.js","../../../../chunks/5309.js","../../../../chunks/5863.js","../../../../chunks/6782.js","../../../../chunks/7605.js","../../../../chunks/8896.js","../../../../chunks/9836.js","../../../../webpack-runtime.js"]}
@@ -0,0 +1 @@
1
+ "use strict";(()=>{var e={};e.id=6185,e.ids=[6185],e.modules={85890:e=>{e.exports=require("better-sqlite3")},72934:e=>{e.exports=require("next/dist/client/components/action-async-storage.external.js")},54580:e=>{e.exports=require("next/dist/client/components/request-async-storage.external.js")},45869:e=>{e.exports=require("next/dist/client/components/static-generation-async-storage.external.js")},20399:e=>{e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},30517:e=>{e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},92048:e=>{e.exports=require("fs")},55315:e=>{e.exports=require("path")},69903:(e,r,s)=>{s.r(r),s.d(r,{originalPathname:()=>A,patchFetch:()=>x,requestAsyncStorage:()=>y,routeModule:()=>h,serverHooks:()=>S,staticGenerationAsyncStorage:()=>w});var t={};s.r(t),s.d(t,{GET:()=>f,POST:()=>v,dynamic:()=>c});var a=s(3025),n=s(45086),i=s(74048),o=s(24517),d=s(31969),u=s(77605),l=s(97060),m=s(74888);let c="force-dynamic";function p(){let e=new l.x;return new m.e(e)}async function f(e){try{let r=await d.I.api.getSession({headers:await (0,u.headers)()});if(!r)return o.NextResponse.json({error:"Unauthorized",message:"Authentication required"},{status:401});let s=e.nextUrl.searchParams.get("serverId");if(!s)return o.NextResponse.json({error:"BadRequest",message:"serverId query parameter is required"},{status:400});if("admin"!==r.user.role){let e=p();if(!await e.hasPermission(r.user.id,s,"admin"))return o.NextResponse.json({error:"Forbidden",message:"Admin permission required"},{status:403})}let t=p(),a=await t.getServerUsersWithDetails(s);return o.NextResponse.json({users:a,total:a.length})}catch(e){return console.error("Failed to list user-server permissions:",e),o.NextResponse.json({error:"InternalServerError",message:"Failed to list permissions"},{status:500})}}async function v(e){try{let r=await d.I.api.getSession({headers:await (0,u.headers)()});if(!r)return o.NextResponse.json({error:"Unauthorized",message:"Authentication required"},{status:401});let{userId:s,serverId:t,permission:a}=await e.json();if(!s||!t||!a)return o.NextResponse.json({error:"BadRequest",message:"userId, serverId, and permission are required"},{status:400});if(!["view","manage","admin"].includes(a))return o.NextResponse.json({error:"BadRequest",message:"Permission must be view, manage, or admin"},{status:400});if("admin"!==r.user.role){let e=p();if(!await e.hasPermission(r.user.id,t,"admin"))return o.NextResponse.json({error:"Forbidden",message:"Admin permission required to grant access"},{status:403})}let n=p(),i=await n.grantAccess(s,t,a);return o.NextResponse.json(i,{status:201})}catch(e){if(e instanceof m.o)return o.NextResponse.json({error:"Forbidden",message:e.message},{status:403});return console.error("Failed to grant access:",e),o.NextResponse.json({error:"InternalServerError",message:"Failed to grant access"},{status:500})}}let h=new a.AppRouteRouteModule({definition:{kind:n.x.APP_ROUTE,page:"/api/user-servers/route",pathname:"/api/user-servers",filename:"route",bundlePath:"app/api/user-servers/route"},resolvedPagePath:"/home/runner/work/minecraft-server-manager/minecraft-server-manager/platform/services/mcctl-console/src/app/api/user-servers/route.ts",nextConfigOutput:"standalone",userland:t}),{requestAsyncStorage:y,staticGenerationAsyncStorage:w,serverHooks:S}=h,A="/api/user-servers/route";function x(){return(0,i.patchFetch)({serverHooks:S,staticGenerationAsyncStorage:w})}},97060:(e,r,s)=>{s.d(r,{x:()=>i});var t=s(30579),a=s(22587),n=s(8290);class i{async findById(e){return(await a.db.select().from(n.userServers).where((0,t.eq)(n.userServers.id,e)).limit(1))[0]??null}async findByUserAndServer(e,r){return(await a.db.select().from(n.userServers).where((0,t.xD)((0,t.eq)(n.userServers.userId,e),(0,t.eq)(n.userServers.serverId,r))).limit(1))[0]??null}async findByServer(e){return a.db.select().from(n.userServers).where((0,t.eq)(n.userServers.serverId,e))}async findByServerWithUsers(e){return(await a.db.select({id:n.userServers.id,userId:n.userServers.userId,serverId:n.userServers.serverId,permission:n.userServers.permission,createdAt:n.userServers.createdAt,updatedAt:n.userServers.updatedAt,user:{id:n.users.id,name:n.users.name,email:n.users.email,image:n.users.image}}).from(n.userServers).leftJoin(n.users,(0,t.eq)(n.userServers.userId,n.users.id)).where((0,t.eq)(n.userServers.serverId,e))).map(e=>({id:e.id,userId:e.userId,serverId:e.serverId,permission:e.permission,createdAt:e.createdAt,updatedAt:e.updatedAt,user:e.user??void 0}))}async findByUser(e){return a.db.select().from(n.userServers).where((0,t.eq)(n.userServers.userId,e))}async create(e){let r=await a.db.insert(n.userServers).values(e).returning();if(!r[0])throw Error("Failed to create user-server permission");return r[0]}async updatePermission(e,r){let s=await a.db.update(n.userServers).set({permission:r,updatedAt:new Date}).where((0,t.eq)(n.userServers.id,e)).returning();if(!s[0])throw Error(`User-server permission not found: ${e}`);return s[0]}async delete(e){await a.db.delete(n.userServers).where((0,t.eq)(n.userServers.id,e))}async deleteByUserAndServer(e,r){await a.db.delete(n.userServers).where((0,t.xD)((0,t.eq)(n.userServers.userId,e),(0,t.eq)(n.userServers.serverId,r)))}async countByServerAndPermission(e,r){return(await a.db.select().from(n.userServers).where((0,t.xD)((0,t.eq)(n.userServers.serverId,e),(0,t.eq)(n.userServers.permission,r)))).length}}},31969:(e,r,s)=>{s.d(r,{I:()=>d});var t=s(33580),a=s(5944),n=s(90224),i=s(22587),o=s(8290);let d=(0,t.kj)({database:(0,a.s)(i.db,{provider:"sqlite",schema:{user:o.users,session:o.sessions,account:o.accounts,verification:o.verifications}}),emailAndPassword:{enabled:!0,requireEmailVerification:!1},session:{expiresIn:604800,updateAge:86400,cookieCache:{enabled:!0,maxAge:300}},user:{additionalFields:{role:{type:"string",required:!1,defaultValue:"user",input:!1}}},plugins:[(0,n.SA)({defaultRole:"user",adminRole:"admin"})],trustedOrigins:["http://localhost:5000","http://localhost:3000",process.env.BETTER_AUTH_URL||"http://localhost:5000"].filter(Boolean)})},22587:(e,r,s)=>{s.d(r,{db:()=>c});var t=s(85890),a=s.n(t),n=s(31590),i=s(8290),o=s(55315),d=s.n(o),u=s(92048);let l=function(){if(process.env.DATABASE_URL)return process.env.DATABASE_URL;let e=d().join(process.cwd(),"data");return d().join(e,"mcctl.db")}();!function(e){if(":memory:"===e)return;let r=d().dirname(e);(0,u.existsSync)(r)||(0,u.mkdirSync)(r,{recursive:!0})}(l);let m=new(a())(l);m.pragma("journal_mode = WAL");let c=(0,n.t)(m,{schema:i})},8290:(e,r,s)=>{s.r(r),s.d(r,{accounts:()=>u,sessions:()=>d,userServers:()=>m,users:()=>o,verifications:()=>l});var t=s(80722),a=s(10160),n=s(30304),i=s(76303);let o=(0,t.Px)("users",{id:(0,a.fL)("id").primaryKey(),name:(0,a.fL)("name").notNull(),email:(0,a.fL)("email").notNull().unique(),emailVerified:(0,n._L)("email_verified",{mode:"boolean"}).notNull().default(!1),image:(0,a.fL)("image"),role:(0,a.fL)("role").notNull().default("user"),banned:(0,n._L)("banned",{mode:"boolean"}).default(!1),banReason:(0,a.fL)("ban_reason"),banExpires:(0,n._L)("ban_expires",{mode:"timestamp"}),createdAt:(0,n._L)("created_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date),updatedAt:(0,n._L)("updated_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date)}),d=(0,t.Px)("sessions",{id:(0,a.fL)("id").primaryKey(),expiresAt:(0,n._L)("expires_at",{mode:"timestamp"}).notNull(),token:(0,a.fL)("token").notNull().unique(),ipAddress:(0,a.fL)("ip_address"),userAgent:(0,a.fL)("user_agent"),userId:(0,a.fL)("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),createdAt:(0,n._L)("created_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date),updatedAt:(0,n._L)("updated_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date)}),u=(0,t.Px)("accounts",{id:(0,a.fL)("id").primaryKey(),accountId:(0,a.fL)("account_id").notNull(),providerId:(0,a.fL)("provider_id").notNull(),userId:(0,a.fL)("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),accessToken:(0,a.fL)("access_token"),refreshToken:(0,a.fL)("refresh_token"),idToken:(0,a.fL)("id_token"),accessTokenExpiresAt:(0,n._L)("access_token_expires_at",{mode:"timestamp"}),refreshTokenExpiresAt:(0,n._L)("refresh_token_expires_at",{mode:"timestamp"}),scope:(0,a.fL)("scope"),password:(0,a.fL)("password"),createdAt:(0,n._L)("created_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date),updatedAt:(0,n._L)("updated_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date)}),l=(0,t.Px)("verifications",{id:(0,a.fL)("id").primaryKey(),identifier:(0,a.fL)("identifier").notNull(),value:(0,a.fL)("value").notNull(),expiresAt:(0,n._L)("expires_at",{mode:"timestamp"}).notNull(),createdAt:(0,n._L)("created_at",{mode:"timestamp"}).$defaultFn(()=>new Date),updatedAt:(0,n._L)("updated_at",{mode:"timestamp"}).$defaultFn(()=>new Date)}),m=(0,t.Px)("user_servers",{id:(0,a.fL)("id").primaryKey().$defaultFn(()=>crypto.randomUUID()),userId:(0,a.fL)("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),serverId:(0,a.fL)("server_id").notNull(),permission:(0,a.fL)("permission").$type().notNull().default("view"),createdAt:(0,n._L)("created_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date),updatedAt:(0,n._L)("updated_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date)},e=>({userServerIdx:(0,i.Kz)("user_server_idx").on(e.userId,e.serverId)}))},74888:(e,r,s)=>{s.d(r,{e:()=>a,o:()=>t});class t extends Error{constructor(e){super(e),this.name="PermissionError"}}class a{constructor(e){this.repository=e}async grantAccess(e,r,s){let t=await this.repository.findByUserAndServer(e,r);return t?this.repository.updatePermission(t.id,s):this.repository.create({userId:e,serverId:r,permission:s})}async revokeAccess(e,r){let s=await this.repository.findByUserAndServer(e,r);if(s?.permission==="admin"&&await this.repository.countByServerAndPermission(r,"admin")<=1)throw new t("Cannot remove the last admin from the server");await this.repository.deleteByUserAndServer(e,r)}async updatePermission(e,r,s){let a=await this.repository.findByUserAndServer(e,r);if(!a)throw new t("Permission not found for this user and server");if("admin"===a.permission&&"admin"!==s&&await this.repository.countByServerAndPermission(r,"admin")<=1)throw new t("Cannot downgrade the last admin. Assign another admin first.");return this.repository.updatePermission(a.id,s)}async getServerUsers(e){return this.repository.findByServer(e)}async getServerUsersWithDetails(e){return this.repository.findByServerWithUsers(e)}async getUserServers(e){return this.repository.findByUser(e)}async hasPermission(e,r,s){let t=await this.repository.findByUserAndServer(e,r);if(!t)return!1;let a={view:1,manage:2,admin:3};return a[t.permission]>=a[s]}async ensureAtLeastOneAdmin(e){if(0===await this.repository.countByServerAndPermission(e,"admin"))throw new t("Server must have at least one admin")}}}};var r=require("../../../webpack-runtime.js");r.C(e);var s=e=>r(r.s=e),t=r.X(0,[9836,1489,7605,5309],()=>s(69903));module.exports=t})();
@@ -0,0 +1 @@
1
+ {"version":1,"files":["../../../../../../../../node_modules/.pnpm/better-sqlite3@12.6.2/node_modules/better-sqlite3/build/Release/better_sqlite3.node","../../../../../../../../node_modules/.pnpm/better-sqlite3@12.6.2/node_modules/better-sqlite3/lib/database.js","../../../../../../../../node_modules/.pnpm/better-sqlite3@12.6.2/node_modules/better-sqlite3/lib/index.js","../../../../../../../../node_modules/.pnpm/better-sqlite3@12.6.2/node_modules/better-sqlite3/lib/methods/aggregate.js","../../../../../../../../node_modules/.pnpm/better-sqlite3@12.6.2/node_modules/better-sqlite3/lib/methods/backup.js","../../../../../../../../node_modules/.pnpm/better-sqlite3@12.6.2/node_modules/better-sqlite3/lib/methods/function.js","../../../../../../../../node_modules/.pnpm/better-sqlite3@12.6.2/node_modules/better-sqlite3/lib/methods/inspect.js","../../../../../../../../node_modules/.pnpm/better-sqlite3@12.6.2/node_modules/better-sqlite3/lib/methods/pragma.js","../../../../../../../../node_modules/.pnpm/better-sqlite3@12.6.2/node_modules/better-sqlite3/lib/methods/serialize.js","../../../../../../../../node_modules/.pnpm/better-sqlite3@12.6.2/node_modules/better-sqlite3/lib/methods/table.js","../../../../../../../../node_modules/.pnpm/better-sqlite3@12.6.2/node_modules/better-sqlite3/lib/methods/transaction.js","../../../../../../../../node_modules/.pnpm/better-sqlite3@12.6.2/node_modules/better-sqlite3/lib/methods/wrappers.js","../../../../../../../../node_modules/.pnpm/better-sqlite3@12.6.2/node_modules/better-sqlite3/lib/sqlite-error.js","../../../../../../../../node_modules/.pnpm/better-sqlite3@12.6.2/node_modules/better-sqlite3/lib/util.js","../../../../../../../../node_modules/.pnpm/better-sqlite3@12.6.2/node_modules/better-sqlite3/package.json","../../../../../../../../node_modules/.pnpm/better-sqlite3@12.6.2/node_modules/bindings","../../../../../../../../node_modules/.pnpm/bindings@1.5.0/node_modules/bindings/bindings.js","../../../../../../../../node_modules/.pnpm/bindings@1.5.0/node_modules/bindings/package.json","../../../../../../../../node_modules/.pnpm/bindings@1.5.0/node_modules/file-uri-to-path","../../../../../../../../node_modules/.pnpm/file-uri-to-path@1.0.0/node_modules/file-uri-to-path/index.js","../../../../../../../../node_modules/.pnpm/file-uri-to-path@1.0.0/node_modules/file-uri-to-path/package.json","../../../../../../../../node_modules/.pnpm/next@14.2.35_@babel+core@7.28.6_@playwright+test@1.58.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/client/components/action-async-storage-instance.js","../../../../../../../../node_modules/.pnpm/next@14.2.35_@babel+core@7.28.6_@playwright+test@1.58.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/client/components/action-async-storage.external.js","../../../../../../../../node_modules/.pnpm/next@14.2.35_@babel+core@7.28.6_@playwright+test@1.58.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/client/components/async-local-storage.js","../../../../../../../../node_modules/.pnpm/next@14.2.35_@babel+core@7.28.6_@playwright+test@1.58.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/client/components/request-async-storage-instance.js","../../../../../../../../node_modules/.pnpm/next@14.2.35_@babel+core@7.28.6_@playwright+test@1.58.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/client/components/request-async-storage.external.js","../../../../../../../../node_modules/.pnpm/next@14.2.35_@babel+core@7.28.6_@playwright+test@1.58.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/client/components/static-generation-async-storage-instance.js","../../../../../../../../node_modules/.pnpm/next@14.2.35_@babel+core@7.28.6_@playwright+test@1.58.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/client/components/static-generation-async-storage.external.js","../../../../../../../../node_modules/.pnpm/next@14.2.35_@babel+core@7.28.6_@playwright+test@1.58.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/compiled/@opentelemetry/api/index.js","../../../../../../../../node_modules/.pnpm/next@14.2.35_@babel+core@7.28.6_@playwright+test@1.58.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/compiled/@opentelemetry/api/package.json","../../../../../../../../node_modules/.pnpm/next@14.2.35_@babel+core@7.28.6_@playwright+test@1.58.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/compiled/next-server/app-page.runtime.prod.js","../../../../../../../../node_modules/.pnpm/next@14.2.35_@babel+core@7.28.6_@playwright+test@1.58.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/compiled/next-server/app-route.runtime.prod.js","../../../../../../../../node_modules/.pnpm/next@14.2.35_@babel+core@7.28.6_@playwright+test@1.58.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/server/lib/trace/constants.js","../../../../../../../../node_modules/.pnpm/next@14.2.35_@babel+core@7.28.6_@playwright+test@1.58.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/server/lib/trace/tracer.js","../../../../../../../../node_modules/.pnpm/next@14.2.35_@babel+core@7.28.6_@playwright+test@1.58.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/package.json","../../../../../../../../package.json","../../../../../node_modules/better-sqlite3","../../../../../node_modules/next","../../../../../package.json","../../../../package.json","../../../chunks/1489.js","../../../chunks/3439.js","../../../chunks/5309.js","../../../chunks/5863.js","../../../chunks/6782.js","../../../chunks/7605.js","../../../chunks/8896.js","../../../chunks/9836.js","../../../webpack-runtime.js"]}
@@ -0,0 +1 @@
1
+ "use strict";(()=>{var e={};e.id=5701,e.ids=[5701],e.modules={85890:e=>{e.exports=require("better-sqlite3")},72934:e=>{e.exports=require("next/dist/client/components/action-async-storage.external.js")},54580:e=>{e.exports=require("next/dist/client/components/request-async-storage.external.js")},45869:e=>{e.exports=require("next/dist/client/components/static-generation-async-storage.external.js")},20399:e=>{e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},30517:e=>{e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},92048:e=>{e.exports=require("fs")},55315:e=>{e.exports=require("path")},68249:(e,t,r)=>{r.r(t),r.d(t,{originalPathname:()=>h,patchFetch:()=>A,requestAsyncStorage:()=>L,routeModule:()=>_,serverHooks:()=>v,staticGenerationAsyncStorage:()=>x});var s={};r.r(s),r.d(s,{GET:()=>f,dynamic:()=>c});var a=r(3025),n=r(45086),i=r(74048),o=r(24517),d=r(31969),u=r(77605),l=r(22587),m=r(8290),p=r(30579);let c="force-dynamic";async function f(e){try{let t=await d.I.api.getSession({headers:await (0,u.headers)()});if(!t)return o.NextResponse.json({error:"Unauthorized",message:"Authentication required"},{status:401});if("admin"!==t.user.role)return o.NextResponse.json({error:"Forbidden",message:"Admin permission required"},{status:403});let r=e.nextUrl.searchParams.get("q");if(!r||r.length<2)return o.NextResponse.json({error:"BadRequest",message:"Search query must be at least 2 characters"},{status:400});let s=`%${r}%`,a=await l.db.select({id:m.users.id,name:m.users.name,email:m.users.email,image:m.users.image}).from(m.users).where((0,p.or)((0,p.vL)(m.users.name,s),(0,p.vL)(m.users.email,s))).limit(20);return o.NextResponse.json({users:a})}catch(e){return console.error("Failed to search users:",e),o.NextResponse.json({error:"InternalServerError",message:"Failed to search users"},{status:500})}}let _=new a.AppRouteRouteModule({definition:{kind:n.x.APP_ROUTE,page:"/api/users/route",pathname:"/api/users",filename:"route",bundlePath:"app/api/users/route"},resolvedPagePath:"/home/runner/work/minecraft-server-manager/minecraft-server-manager/platform/services/mcctl-console/src/app/api/users/route.ts",nextConfigOutput:"standalone",userland:s}),{requestAsyncStorage:L,staticGenerationAsyncStorage:x,serverHooks:v}=_,h="/api/users/route";function A(){return(0,i.patchFetch)({serverHooks:v,staticGenerationAsyncStorage:x})}},31969:(e,t,r)=>{r.d(t,{I:()=>d});var s=r(33580),a=r(5944),n=r(90224),i=r(22587),o=r(8290);let d=(0,s.kj)({database:(0,a.s)(i.db,{provider:"sqlite",schema:{user:o.users,session:o.sessions,account:o.accounts,verification:o.verifications}}),emailAndPassword:{enabled:!0,requireEmailVerification:!1},session:{expiresIn:604800,updateAge:86400,cookieCache:{enabled:!0,maxAge:300}},user:{additionalFields:{role:{type:"string",required:!1,defaultValue:"user",input:!1}}},plugins:[(0,n.SA)({defaultRole:"user",adminRole:"admin"})],trustedOrigins:["http://localhost:5000","http://localhost:3000",process.env.BETTER_AUTH_URL||"http://localhost:5000"].filter(Boolean)})},22587:(e,t,r)=>{r.d(t,{db:()=>p});var s=r(85890),a=r.n(s),n=r(31590),i=r(8290),o=r(55315),d=r.n(o),u=r(92048);let l=function(){if(process.env.DATABASE_URL)return process.env.DATABASE_URL;let e=d().join(process.cwd(),"data");return d().join(e,"mcctl.db")}();!function(e){if(":memory:"===e)return;let t=d().dirname(e);(0,u.existsSync)(t)||(0,u.mkdirSync)(t,{recursive:!0})}(l);let m=new(a())(l);m.pragma("journal_mode = WAL");let p=(0,n.t)(m,{schema:i})},8290:(e,t,r)=>{r.r(t),r.d(t,{accounts:()=>u,sessions:()=>d,userServers:()=>m,users:()=>o,verifications:()=>l});var s=r(80722),a=r(10160),n=r(30304),i=r(76303);let o=(0,s.Px)("users",{id:(0,a.fL)("id").primaryKey(),name:(0,a.fL)("name").notNull(),email:(0,a.fL)("email").notNull().unique(),emailVerified:(0,n._L)("email_verified",{mode:"boolean"}).notNull().default(!1),image:(0,a.fL)("image"),role:(0,a.fL)("role").notNull().default("user"),banned:(0,n._L)("banned",{mode:"boolean"}).default(!1),banReason:(0,a.fL)("ban_reason"),banExpires:(0,n._L)("ban_expires",{mode:"timestamp"}),createdAt:(0,n._L)("created_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date),updatedAt:(0,n._L)("updated_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date)}),d=(0,s.Px)("sessions",{id:(0,a.fL)("id").primaryKey(),expiresAt:(0,n._L)("expires_at",{mode:"timestamp"}).notNull(),token:(0,a.fL)("token").notNull().unique(),ipAddress:(0,a.fL)("ip_address"),userAgent:(0,a.fL)("user_agent"),userId:(0,a.fL)("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),createdAt:(0,n._L)("created_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date),updatedAt:(0,n._L)("updated_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date)}),u=(0,s.Px)("accounts",{id:(0,a.fL)("id").primaryKey(),accountId:(0,a.fL)("account_id").notNull(),providerId:(0,a.fL)("provider_id").notNull(),userId:(0,a.fL)("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),accessToken:(0,a.fL)("access_token"),refreshToken:(0,a.fL)("refresh_token"),idToken:(0,a.fL)("id_token"),accessTokenExpiresAt:(0,n._L)("access_token_expires_at",{mode:"timestamp"}),refreshTokenExpiresAt:(0,n._L)("refresh_token_expires_at",{mode:"timestamp"}),scope:(0,a.fL)("scope"),password:(0,a.fL)("password"),createdAt:(0,n._L)("created_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date),updatedAt:(0,n._L)("updated_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date)}),l=(0,s.Px)("verifications",{id:(0,a.fL)("id").primaryKey(),identifier:(0,a.fL)("identifier").notNull(),value:(0,a.fL)("value").notNull(),expiresAt:(0,n._L)("expires_at",{mode:"timestamp"}).notNull(),createdAt:(0,n._L)("created_at",{mode:"timestamp"}).$defaultFn(()=>new Date),updatedAt:(0,n._L)("updated_at",{mode:"timestamp"}).$defaultFn(()=>new Date)}),m=(0,s.Px)("user_servers",{id:(0,a.fL)("id").primaryKey().$defaultFn(()=>crypto.randomUUID()),userId:(0,a.fL)("user_id").notNull().references(()=>o.id,{onDelete:"cascade"}),serverId:(0,a.fL)("server_id").notNull(),permission:(0,a.fL)("permission").$type().notNull().default("view"),createdAt:(0,n._L)("created_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date),updatedAt:(0,n._L)("updated_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date)},e=>({userServerIdx:(0,i.Kz)("user_server_idx").on(e.userId,e.serverId)}))}};var t=require("../../../webpack-runtime.js");t.C(e);var r=e=>t(t.s=e),s=t.X(0,[9836,1489,7605,5309],()=>r(68249));module.exports=s})();
@@ -0,0 +1 @@
1
+ {"version":1,"files":["../../../../../../../../node_modules/.pnpm/better-sqlite3@12.6.2/node_modules/better-sqlite3/build/Release/better_sqlite3.node","../../../../../../../../node_modules/.pnpm/better-sqlite3@12.6.2/node_modules/better-sqlite3/lib/database.js","../../../../../../../../node_modules/.pnpm/better-sqlite3@12.6.2/node_modules/better-sqlite3/lib/index.js","../../../../../../../../node_modules/.pnpm/better-sqlite3@12.6.2/node_modules/better-sqlite3/lib/methods/aggregate.js","../../../../../../../../node_modules/.pnpm/better-sqlite3@12.6.2/node_modules/better-sqlite3/lib/methods/backup.js","../../../../../../../../node_modules/.pnpm/better-sqlite3@12.6.2/node_modules/better-sqlite3/lib/methods/function.js","../../../../../../../../node_modules/.pnpm/better-sqlite3@12.6.2/node_modules/better-sqlite3/lib/methods/inspect.js","../../../../../../../../node_modules/.pnpm/better-sqlite3@12.6.2/node_modules/better-sqlite3/lib/methods/pragma.js","../../../../../../../../node_modules/.pnpm/better-sqlite3@12.6.2/node_modules/better-sqlite3/lib/methods/serialize.js","../../../../../../../../node_modules/.pnpm/better-sqlite3@12.6.2/node_modules/better-sqlite3/lib/methods/table.js","../../../../../../../../node_modules/.pnpm/better-sqlite3@12.6.2/node_modules/better-sqlite3/lib/methods/transaction.js","../../../../../../../../node_modules/.pnpm/better-sqlite3@12.6.2/node_modules/better-sqlite3/lib/methods/wrappers.js","../../../../../../../../node_modules/.pnpm/better-sqlite3@12.6.2/node_modules/better-sqlite3/lib/sqlite-error.js","../../../../../../../../node_modules/.pnpm/better-sqlite3@12.6.2/node_modules/better-sqlite3/lib/util.js","../../../../../../../../node_modules/.pnpm/better-sqlite3@12.6.2/node_modules/better-sqlite3/package.json","../../../../../../../../node_modules/.pnpm/better-sqlite3@12.6.2/node_modules/bindings","../../../../../../../../node_modules/.pnpm/bindings@1.5.0/node_modules/bindings/bindings.js","../../../../../../../../node_modules/.pnpm/bindings@1.5.0/node_modules/bindings/package.json","../../../../../../../../node_modules/.pnpm/bindings@1.5.0/node_modules/file-uri-to-path","../../../../../../../../node_modules/.pnpm/file-uri-to-path@1.0.0/node_modules/file-uri-to-path/index.js","../../../../../../../../node_modules/.pnpm/file-uri-to-path@1.0.0/node_modules/file-uri-to-path/package.json","../../../../../../../../node_modules/.pnpm/next@14.2.35_@babel+core@7.28.6_@playwright+test@1.58.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/client/components/action-async-storage-instance.js","../../../../../../../../node_modules/.pnpm/next@14.2.35_@babel+core@7.28.6_@playwright+test@1.58.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/client/components/action-async-storage.external.js","../../../../../../../../node_modules/.pnpm/next@14.2.35_@babel+core@7.28.6_@playwright+test@1.58.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/client/components/async-local-storage.js","../../../../../../../../node_modules/.pnpm/next@14.2.35_@babel+core@7.28.6_@playwright+test@1.58.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/client/components/request-async-storage-instance.js","../../../../../../../../node_modules/.pnpm/next@14.2.35_@babel+core@7.28.6_@playwright+test@1.58.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/client/components/request-async-storage.external.js","../../../../../../../../node_modules/.pnpm/next@14.2.35_@babel+core@7.28.6_@playwright+test@1.58.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/client/components/static-generation-async-storage-instance.js","../../../../../../../../node_modules/.pnpm/next@14.2.35_@babel+core@7.28.6_@playwright+test@1.58.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/client/components/static-generation-async-storage.external.js","../../../../../../../../node_modules/.pnpm/next@14.2.35_@babel+core@7.28.6_@playwright+test@1.58.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/compiled/@opentelemetry/api/index.js","../../../../../../../../node_modules/.pnpm/next@14.2.35_@babel+core@7.28.6_@playwright+test@1.58.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/compiled/@opentelemetry/api/package.json","../../../../../../../../node_modules/.pnpm/next@14.2.35_@babel+core@7.28.6_@playwright+test@1.58.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/compiled/next-server/app-page.runtime.prod.js","../../../../../../../../node_modules/.pnpm/next@14.2.35_@babel+core@7.28.6_@playwright+test@1.58.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/compiled/next-server/app-route.runtime.prod.js","../../../../../../../../node_modules/.pnpm/next@14.2.35_@babel+core@7.28.6_@playwright+test@1.58.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/server/lib/trace/constants.js","../../../../../../../../node_modules/.pnpm/next@14.2.35_@babel+core@7.28.6_@playwright+test@1.58.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/dist/server/lib/trace/tracer.js","../../../../../../../../node_modules/.pnpm/next@14.2.35_@babel+core@7.28.6_@playwright+test@1.58.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/next/package.json","../../../../../../../../package.json","../../../../../node_modules/better-sqlite3","../../../../../node_modules/next","../../../../../package.json","../../../../package.json","../../../chunks/1489.js","../../../chunks/3439.js","../../../chunks/5309.js","../../../chunks/5863.js","../../../chunks/6782.js","../../../chunks/7605.js","../../../chunks/8896.js","../../../chunks/9836.js","../../../webpack-runtime.js"]}
@@ -1 +1 @@
1
- "use strict";(()=>{var e={};e.id=1914,e.ids=[1914],e.modules={85890:e=>{e.exports=require("better-sqlite3")},72934:e=>{e.exports=require("next/dist/client/components/action-async-storage.external.js")},54580:e=>{e.exports=require("next/dist/client/components/request-async-storage.external.js")},45869:e=>{e.exports=require("next/dist/client/components/static-generation-async-storage.external.js")},20399:e=>{e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},30517:e=>{e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},92048:e=>{e.exports=require("fs")},55315:e=>{e.exports=require("path")},26482:(e,t,r)=>{r.r(t),r.d(t,{originalPathname:()=>y,patchFetch:()=>x,requestAsyncStorage:()=>h,routeModule:()=>f,serverHooks:()=>_,staticGenerationAsyncStorage:()=>v});var s={};r.r(s),r.d(s,{POST:()=>m,dynamic:()=>l});var n=r(3025),a=r(45086),o=r(74048),i=r(24517),d=r(78649),u=r(31969),c=r(77605);let l="force-dynamic",p=["assign","release"];async function m(e,{params:t}){try{let r=await u.I.api.getSession({headers:await (0,c.headers)()});if(!r)return i.NextResponse.json({error:"Unauthorized",message:"Authentication required"},{status:401});let{name:s,action:n}=await t;if(!p.includes(n))return i.NextResponse.json({error:"BadRequest",message:`Invalid action: ${n}`},{status:400});let a=(0,d.F0)({username:r.user.name||r.user.email,role:r.user.role||"user"});switch(n){case"assign":{let t=await e.json();if(!t.serverName)return i.NextResponse.json({error:"BadRequest",message:"serverName is required"},{status:400});let r=await a.assignWorld(s,t.serverName);return i.NextResponse.json(r)}case"release":{let{searchParams:t}=new URL(e.url),r="true"===t.get("force"),n=await a.releaseWorld(s,r);return i.NextResponse.json(n)}default:return i.NextResponse.json({error:"BadRequest",message:`Invalid action: ${n}`},{status:400})}}catch(e){if(e instanceof d.zB)return i.NextResponse.json({error:e.error,message:e.message},{status:e.statusCode});return console.error("Failed to execute action:",e),i.NextResponse.json({error:"InternalServerError",message:"Failed to execute action"},{status:500})}}let f=new n.AppRouteRouteModule({definition:{kind:a.x.APP_ROUTE,page:"/api/worlds/[name]/[action]/route",pathname:"/api/worlds/[name]/[action]",filename:"route",bundlePath:"app/api/worlds/[name]/[action]/route"},resolvedPagePath:"/home/runner/work/minecraft-server-manager/minecraft-server-manager/platform/services/mcctl-console/src/app/api/worlds/[name]/[action]/route.ts",nextConfigOutput:"standalone",userland:s}),{requestAsyncStorage:h,staticGenerationAsyncStorage:v,serverHooks:_}=f,y="/api/worlds/[name]/[action]/route";function x(){return(0,o.patchFetch)({serverHooks:_,staticGenerationAsyncStorage:v})}},78649:(e,t,r)=>{r.d(t,{F0:()=>a,zB:()=>s});class s extends Error{constructor(e,t,r){super(r),this.statusCode=e,this.error=t,this.name="McctlApiError"}}class n{constructor(e){this.baseUrl=e.baseUrl.replace(/\/$/,""),this.apiKey=e.apiKey,this.userContext=e.userContext}async fetch(e,t={}){let r=`${this.baseUrl}${e}`,n={"X-API-Key":this.apiKey};t.body&&(n["Content-Type"]="application/json"),this.userContext&&(n["X-User"]=this.userContext.username,n["X-Role"]=this.userContext.role);let a=await fetch(r,{...t,headers:{...n,...t.headers}});if(!a.ok){let e=await a.json().catch(()=>({error:"UnknownError",message:a.statusText}));throw new s(a.status,e.error,e.message)}return a.json()}async getServers(){return this.fetch("/api/servers")}async getServer(e){return this.fetch(`/api/servers/${encodeURIComponent(e)}`)}async createServer(e){return this.fetch("/api/servers",{method:"POST",body:JSON.stringify(e)})}async deleteServer(e,t){return this.fetch(`/api/servers/${encodeURIComponent(e)}${t?"?force=true":""}`,{method:"DELETE"})}async startServer(e){return this.fetch(`/api/servers/${encodeURIComponent(e)}/start`,{method:"POST"})}async stopServer(e){return this.fetch(`/api/servers/${encodeURIComponent(e)}/stop`,{method:"POST"})}async restartServer(e){return this.fetch(`/api/servers/${encodeURIComponent(e)}/restart`,{method:"POST"})}async execCommand(e,t){return this.fetch(`/api/servers/${encodeURIComponent(e)}/exec`,{method:"POST",body:JSON.stringify({command:t})})}async getLogs(e,t=100){return this.fetch(`/api/servers/${encodeURIComponent(e)}/logs?lines=${t}`)}async getWorlds(){return this.fetch("/api/worlds")}async getWorld(e){return this.fetch(`/api/worlds/${encodeURIComponent(e)}`)}async createWorld(e){return this.fetch("/api/worlds",{method:"POST",body:JSON.stringify(e)})}async assignWorld(e,t){return this.fetch(`/api/worlds/${encodeURIComponent(e)}/assign`,{method:"POST",body:JSON.stringify({serverName:t})})}async releaseWorld(e,t){return this.fetch(`/api/worlds/${encodeURIComponent(e)}/release${t?"?force=true":""}`,{method:"POST"})}async deleteWorld(e,t){return this.fetch(`/api/worlds/${encodeURIComponent(e)}${t?"?force=true":""}`,{method:"DELETE"})}async getServerConfig(e){return this.fetch(`/api/servers/${encodeURIComponent(e)}/config`)}async updateServerConfig(e,t){return this.fetch(`/api/servers/${encodeURIComponent(e)}/config`,{method:"PATCH",body:JSON.stringify(t)})}async resetWorld(e){return this.fetch(`/api/servers/${encodeURIComponent(e)}/world/reset`,{method:"POST"})}async getRouterStatus(){return this.fetch("/api/router/status")}}function a(e){let t=process.env.MCCTL_API_URL||"http://localhost:5001",r=process.env.MCCTL_API_KEY||"";return r||console.warn("MCCTL_API_KEY is not set. API requests may fail."),new n({baseUrl:t,apiKey:r,userContext:e})}},31969:(e,t,r)=>{r.d(t,{I:()=>d});var s=r(33580),n=r(5944),a=r(90224),o=r(22587),i=r(8290);let d=(0,s.kj)({database:(0,n.s)(o.db,{provider:"sqlite",schema:{user:i.users,session:i.sessions,account:i.accounts,verification:i.verifications}}),emailAndPassword:{enabled:!0,requireEmailVerification:!1},session:{expiresIn:604800,updateAge:86400,cookieCache:{enabled:!0,maxAge:300}},user:{additionalFields:{role:{type:"string",required:!1,defaultValue:"user",input:!1}}},plugins:[(0,a.SA)({defaultRole:"user",adminRole:"admin"})],trustedOrigins:["http://localhost:5000","http://localhost:3000",process.env.BETTER_AUTH_URL||"http://localhost:5000"].filter(Boolean)})},22587:(e,t,r)=>{r.d(t,{db:()=>p});var s=r(85890),n=r.n(s),a=r(31590),o=r(8290),i=r(55315),d=r.n(i),u=r(92048);let c=function(){if(process.env.DATABASE_URL)return process.env.DATABASE_URL;let e=d().join(process.cwd(),"data");return d().join(e,"mcctl.db")}();!function(e){if(":memory:"===e)return;let t=d().dirname(e);(0,u.existsSync)(t)||(0,u.mkdirSync)(t,{recursive:!0})}(c);let l=new(n())(c);l.pragma("journal_mode = WAL");let p=(0,a.t)(l,{schema:o})},8290:(e,t,r)=>{r.r(t),r.d(t,{accounts:()=>u,sessions:()=>d,userServers:()=>l,users:()=>i,verifications:()=>c});var s=r(80722),n=r(10160),a=r(30304),o=r(76303);let i=(0,s.Px)("users",{id:(0,n.fL)("id").primaryKey(),name:(0,n.fL)("name").notNull(),email:(0,n.fL)("email").notNull().unique(),emailVerified:(0,a._L)("email_verified",{mode:"boolean"}).notNull().default(!1),image:(0,n.fL)("image"),role:(0,n.fL)("role").notNull().default("user"),banned:(0,a._L)("banned",{mode:"boolean"}).default(!1),banReason:(0,n.fL)("ban_reason"),banExpires:(0,a._L)("ban_expires",{mode:"timestamp"}),createdAt:(0,a._L)("created_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date),updatedAt:(0,a._L)("updated_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date)}),d=(0,s.Px)("sessions",{id:(0,n.fL)("id").primaryKey(),expiresAt:(0,a._L)("expires_at",{mode:"timestamp"}).notNull(),token:(0,n.fL)("token").notNull().unique(),ipAddress:(0,n.fL)("ip_address"),userAgent:(0,n.fL)("user_agent"),userId:(0,n.fL)("user_id").notNull().references(()=>i.id,{onDelete:"cascade"}),createdAt:(0,a._L)("created_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date),updatedAt:(0,a._L)("updated_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date)}),u=(0,s.Px)("accounts",{id:(0,n.fL)("id").primaryKey(),accountId:(0,n.fL)("account_id").notNull(),providerId:(0,n.fL)("provider_id").notNull(),userId:(0,n.fL)("user_id").notNull().references(()=>i.id,{onDelete:"cascade"}),accessToken:(0,n.fL)("access_token"),refreshToken:(0,n.fL)("refresh_token"),idToken:(0,n.fL)("id_token"),accessTokenExpiresAt:(0,a._L)("access_token_expires_at",{mode:"timestamp"}),refreshTokenExpiresAt:(0,a._L)("refresh_token_expires_at",{mode:"timestamp"}),scope:(0,n.fL)("scope"),password:(0,n.fL)("password"),createdAt:(0,a._L)("created_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date),updatedAt:(0,a._L)("updated_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date)}),c=(0,s.Px)("verifications",{id:(0,n.fL)("id").primaryKey(),identifier:(0,n.fL)("identifier").notNull(),value:(0,n.fL)("value").notNull(),expiresAt:(0,a._L)("expires_at",{mode:"timestamp"}).notNull(),createdAt:(0,a._L)("created_at",{mode:"timestamp"}).$defaultFn(()=>new Date),updatedAt:(0,a._L)("updated_at",{mode:"timestamp"}).$defaultFn(()=>new Date)}),l=(0,s.Px)("user_servers",{id:(0,n.fL)("id").primaryKey().$defaultFn(()=>crypto.randomUUID()),userId:(0,n.fL)("user_id").notNull().references(()=>i.id,{onDelete:"cascade"}),serverId:(0,n.fL)("server_id").notNull(),permission:(0,n.fL)("permission").$type().notNull().default("view"),createdAt:(0,a._L)("created_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date),updatedAt:(0,a._L)("updated_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date)},e=>({userServerIdx:(0,o.Kz)("user_server_idx").on(e.userId,e.serverId)}))}};var t=require("../../../../../webpack-runtime.js");t.C(e);var r=e=>t(t.s=e),s=t.X(0,[9836,1489,7605,5309],()=>r(26482));module.exports=s})();
1
+ "use strict";(()=>{var e={};e.id=1914,e.ids=[1914],e.modules={85890:e=>{e.exports=require("better-sqlite3")},72934:e=>{e.exports=require("next/dist/client/components/action-async-storage.external.js")},54580:e=>{e.exports=require("next/dist/client/components/request-async-storage.external.js")},45869:e=>{e.exports=require("next/dist/client/components/static-generation-async-storage.external.js")},20399:e=>{e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},30517:e=>{e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},92048:e=>{e.exports=require("fs")},55315:e=>{e.exports=require("path")},26482:(e,t,r)=>{r.r(t),r.d(t,{originalPathname:()=>g,patchFetch:()=>_,requestAsyncStorage:()=>h,routeModule:()=>f,serverHooks:()=>y,staticGenerationAsyncStorage:()=>v});var s={};r.r(s),r.d(s,{POST:()=>m,dynamic:()=>l});var n=r(3025),a=r(45086),o=r(74048),i=r(24517),d=r(78649),u=r(60154),c=r(77605);let l="force-dynamic",p=["assign","release"];async function m(e,{params:t}){try{let r=await (0,u.mk)(await (0,c.headers)()),{name:s,action:n}=await t;if(!p.includes(n))return i.NextResponse.json({error:"BadRequest",message:`Invalid action: ${n}`},{status:400});let a=(0,d.F0)({username:r.user.name||r.user.email,role:r.user.role||"user"});switch(n){case"assign":{let t=await e.json();if(!t.serverName)return i.NextResponse.json({error:"BadRequest",message:"serverName is required"},{status:400});let r=await a.assignWorld(s,t.serverName);return i.NextResponse.json(r)}case"release":{let{searchParams:t}=new URL(e.url),r="true"===t.get("force"),n=await a.releaseWorld(s,r);return i.NextResponse.json(n)}default:return i.NextResponse.json({error:"BadRequest",message:`Invalid action: ${n}`},{status:400})}}catch(e){if(e instanceof u.l4)return i.NextResponse.json({error:"Unauthorized",message:e.message},{status:e.statusCode});if(e instanceof d.zB)return i.NextResponse.json({error:e.error,message:e.message},{status:e.statusCode});return console.error("Failed to execute action:",e),i.NextResponse.json({error:"InternalServerError",message:"Failed to execute action"},{status:500})}}let f=new n.AppRouteRouteModule({definition:{kind:a.x.APP_ROUTE,page:"/api/worlds/[name]/[action]/route",pathname:"/api/worlds/[name]/[action]",filename:"route",bundlePath:"app/api/worlds/[name]/[action]/route"},resolvedPagePath:"/home/runner/work/minecraft-server-manager/minecraft-server-manager/platform/services/mcctl-console/src/app/api/worlds/[name]/[action]/route.ts",nextConfigOutput:"standalone",userland:s}),{requestAsyncStorage:h,staticGenerationAsyncStorage:v,serverHooks:y}=f,g="/api/worlds/[name]/[action]/route";function _(){return(0,o.patchFetch)({serverHooks:y,staticGenerationAsyncStorage:v})}},78649:(e,t,r)=>{r.d(t,{F0:()=>a,zB:()=>s});class s extends Error{constructor(e,t,r){super(r),this.statusCode=e,this.error=t,this.name="McctlApiError"}}class n{constructor(e){this.baseUrl=e.baseUrl.replace(/\/$/,""),this.apiKey=e.apiKey,this.userContext=e.userContext}async fetch(e,t={}){let r=`${this.baseUrl}${e}`,n={"X-API-Key":this.apiKey};t.body&&(n["Content-Type"]="application/json"),this.userContext&&(n["X-User"]=this.userContext.username,n["X-Role"]=this.userContext.role);let a=await fetch(r,{...t,headers:{...n,...t.headers}});if(!a.ok){let e=await a.json().catch(()=>({error:"UnknownError",message:a.statusText}));throw new s(a.status,e.error,e.message)}return a.json()}async getServers(){return this.fetch("/api/servers")}async getServer(e){return this.fetch(`/api/servers/${encodeURIComponent(e)}`)}async createServer(e){return this.fetch("/api/servers",{method:"POST",body:JSON.stringify(e)})}async deleteServer(e,t){return this.fetch(`/api/servers/${encodeURIComponent(e)}${t?"?force=true":""}`,{method:"DELETE"})}async startServer(e){return this.fetch(`/api/servers/${encodeURIComponent(e)}/start`,{method:"POST"})}async stopServer(e){return this.fetch(`/api/servers/${encodeURIComponent(e)}/stop`,{method:"POST"})}async restartServer(e){return this.fetch(`/api/servers/${encodeURIComponent(e)}/restart`,{method:"POST"})}async execCommand(e,t){return this.fetch(`/api/servers/${encodeURIComponent(e)}/exec`,{method:"POST",body:JSON.stringify({command:t})})}async getLogs(e,t=100){return this.fetch(`/api/servers/${encodeURIComponent(e)}/logs?lines=${t}`)}async getWorlds(){return this.fetch("/api/worlds")}async getWorld(e){return this.fetch(`/api/worlds/${encodeURIComponent(e)}`)}async createWorld(e){return this.fetch("/api/worlds",{method:"POST",body:JSON.stringify(e)})}async assignWorld(e,t){return this.fetch(`/api/worlds/${encodeURIComponent(e)}/assign`,{method:"POST",body:JSON.stringify({serverName:t})})}async releaseWorld(e,t){return this.fetch(`/api/worlds/${encodeURIComponent(e)}/release${t?"?force=true":""}`,{method:"POST"})}async deleteWorld(e,t){return this.fetch(`/api/worlds/${encodeURIComponent(e)}${t?"?force=true":""}`,{method:"DELETE"})}async getServerConfig(e){return this.fetch(`/api/servers/${encodeURIComponent(e)}/config`)}async updateServerConfig(e,t){return this.fetch(`/api/servers/${encodeURIComponent(e)}/config`,{method:"PATCH",body:JSON.stringify(t)})}async resetWorld(e){return this.fetch(`/api/servers/${encodeURIComponent(e)}/world/reset`,{method:"POST"})}async getRouterStatus(){return this.fetch("/api/router/status")}async getBackupStatus(){return this.fetch("/api/backup/status")}async pushBackup(e){let t=e?JSON.stringify({message:e}):void 0;return this.fetch("/api/backup/push",{method:"POST",body:t})}async getBackupHistory(e=20){return this.fetch(`/api/backup/history?limit=${e}`)}async restoreBackup(e){return this.fetch("/api/backup/restore",{method:"POST",body:JSON.stringify({commitHash:e})})}}function a(e){let t=process.env.MCCTL_API_URL||"http://localhost:5001",r=process.env.MCCTL_API_KEY||"";return r||console.warn("MCCTL_API_KEY is not set. API requests may fail."),new n({baseUrl:t,apiKey:r,userContext:e})}},60154:(e,t,r)=>{r.d(t,{Ke:()=>c,kF:()=>u,l4:()=>i,mk:()=>d});var s=r(31969),n=r(22587),a=r(8290),o=r(30579);class i extends Error{constructor(e,t=401){super(e),this.statusCode=t,this.name="AuthError"}}async function d(e){let t=await s.I.api.getSession({headers:e});if(!t)throw new i("Unauthorized",401);return t}async function u(e){let t=await d(e);if("admin"!==t.user.role)throw new i("Forbidden: Admin access required",403);return t}async function c(e,t,r="view"){let s=await d(e);if("admin"===s.user.role)return s;let u=await n.db.select().from(a.userServers).where((0,o.xD)((0,o.eq)(a.userServers.userId,s.user.id),(0,o.eq)(a.userServers.serverId,t))).limit(1);if(0===u.length)throw new i("Forbidden: No access to this server",403);let c=u[0].permission,l={view:1,manage:2,admin:3};if(l[c]<l[r])throw new i(`Forbidden: Requires ${r} permission`,403);return s}},31969:(e,t,r)=>{r.d(t,{I:()=>d});var s=r(33580),n=r(5944),a=r(90224),o=r(22587),i=r(8290);let d=(0,s.kj)({database:(0,n.s)(o.db,{provider:"sqlite",schema:{user:i.users,session:i.sessions,account:i.accounts,verification:i.verifications}}),emailAndPassword:{enabled:!0,requireEmailVerification:!1},session:{expiresIn:604800,updateAge:86400,cookieCache:{enabled:!0,maxAge:300}},user:{additionalFields:{role:{type:"string",required:!1,defaultValue:"user",input:!1}}},plugins:[(0,a.SA)({defaultRole:"user",adminRole:"admin"})],trustedOrigins:["http://localhost:5000","http://localhost:3000",process.env.BETTER_AUTH_URL||"http://localhost:5000"].filter(Boolean)})},22587:(e,t,r)=>{r.d(t,{db:()=>p});var s=r(85890),n=r.n(s),a=r(31590),o=r(8290),i=r(55315),d=r.n(i),u=r(92048);let c=function(){if(process.env.DATABASE_URL)return process.env.DATABASE_URL;let e=d().join(process.cwd(),"data");return d().join(e,"mcctl.db")}();!function(e){if(":memory:"===e)return;let t=d().dirname(e);(0,u.existsSync)(t)||(0,u.mkdirSync)(t,{recursive:!0})}(c);let l=new(n())(c);l.pragma("journal_mode = WAL");let p=(0,a.t)(l,{schema:o})},8290:(e,t,r)=>{r.r(t),r.d(t,{accounts:()=>u,sessions:()=>d,userServers:()=>l,users:()=>i,verifications:()=>c});var s=r(80722),n=r(10160),a=r(30304),o=r(76303);let i=(0,s.Px)("users",{id:(0,n.fL)("id").primaryKey(),name:(0,n.fL)("name").notNull(),email:(0,n.fL)("email").notNull().unique(),emailVerified:(0,a._L)("email_verified",{mode:"boolean"}).notNull().default(!1),image:(0,n.fL)("image"),role:(0,n.fL)("role").notNull().default("user"),banned:(0,a._L)("banned",{mode:"boolean"}).default(!1),banReason:(0,n.fL)("ban_reason"),banExpires:(0,a._L)("ban_expires",{mode:"timestamp"}),createdAt:(0,a._L)("created_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date),updatedAt:(0,a._L)("updated_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date)}),d=(0,s.Px)("sessions",{id:(0,n.fL)("id").primaryKey(),expiresAt:(0,a._L)("expires_at",{mode:"timestamp"}).notNull(),token:(0,n.fL)("token").notNull().unique(),ipAddress:(0,n.fL)("ip_address"),userAgent:(0,n.fL)("user_agent"),userId:(0,n.fL)("user_id").notNull().references(()=>i.id,{onDelete:"cascade"}),createdAt:(0,a._L)("created_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date),updatedAt:(0,a._L)("updated_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date)}),u=(0,s.Px)("accounts",{id:(0,n.fL)("id").primaryKey(),accountId:(0,n.fL)("account_id").notNull(),providerId:(0,n.fL)("provider_id").notNull(),userId:(0,n.fL)("user_id").notNull().references(()=>i.id,{onDelete:"cascade"}),accessToken:(0,n.fL)("access_token"),refreshToken:(0,n.fL)("refresh_token"),idToken:(0,n.fL)("id_token"),accessTokenExpiresAt:(0,a._L)("access_token_expires_at",{mode:"timestamp"}),refreshTokenExpiresAt:(0,a._L)("refresh_token_expires_at",{mode:"timestamp"}),scope:(0,n.fL)("scope"),password:(0,n.fL)("password"),createdAt:(0,a._L)("created_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date),updatedAt:(0,a._L)("updated_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date)}),c=(0,s.Px)("verifications",{id:(0,n.fL)("id").primaryKey(),identifier:(0,n.fL)("identifier").notNull(),value:(0,n.fL)("value").notNull(),expiresAt:(0,a._L)("expires_at",{mode:"timestamp"}).notNull(),createdAt:(0,a._L)("created_at",{mode:"timestamp"}).$defaultFn(()=>new Date),updatedAt:(0,a._L)("updated_at",{mode:"timestamp"}).$defaultFn(()=>new Date)}),l=(0,s.Px)("user_servers",{id:(0,n.fL)("id").primaryKey().$defaultFn(()=>crypto.randomUUID()),userId:(0,n.fL)("user_id").notNull().references(()=>i.id,{onDelete:"cascade"}),serverId:(0,n.fL)("server_id").notNull(),permission:(0,n.fL)("permission").$type().notNull().default("view"),createdAt:(0,a._L)("created_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date),updatedAt:(0,a._L)("updated_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date)},e=>({userServerIdx:(0,o.Kz)("user_server_idx").on(e.userId,e.serverId)}))}};var t=require("../../../../../webpack-runtime.js");t.C(e);var r=e=>t(t.s=e),s=t.X(0,[9836,1489,7605,5309],()=>r(26482));module.exports=s})();
@@ -1 +1 @@
1
- "use strict";(()=>{var e={};e.id=5746,e.ids=[5746],e.modules={85890:e=>{e.exports=require("better-sqlite3")},72934:e=>{e.exports=require("next/dist/client/components/action-async-storage.external.js")},54580:e=>{e.exports=require("next/dist/client/components/request-async-storage.external.js")},45869:e=>{e.exports=require("next/dist/client/components/static-generation-async-storage.external.js")},20399:e=>{e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},30517:e=>{e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},92048:e=>{e.exports=require("fs")},55315:e=>{e.exports=require("path")},20062:(e,t,r)=>{r.r(t),r.d(t,{originalPathname:()=>x,patchFetch:()=>g,requestAsyncStorage:()=>y,routeModule:()=>h,serverHooks:()=>v,staticGenerationAsyncStorage:()=>_});var s={};r.r(s),r.d(s,{DELETE:()=>f,GET:()=>m,dynamic:()=>c});var n=r(3025),a=r(45086),o=r(74048),i=r(24517),d=r(78649),u=r(31969),l=r(77605);let c="force-dynamic";function p(e){return{username:e.user.name||e.user.email,role:e.user.role||"user"}}async function m(e,{params:t}){try{let e=await u.I.api.getSession({headers:await (0,l.headers)()});if(!e)return i.NextResponse.json({error:"Unauthorized",message:"Authentication required"},{status:401});let{name:r}=await t,s=(0,d.F0)(p(e)),n=await s.getWorld(r);return i.NextResponse.json(n)}catch(e){if(e instanceof d.zB)return i.NextResponse.json({error:e.error,message:e.message},{status:e.statusCode});return console.error("Failed to fetch world:",e),i.NextResponse.json({error:"InternalServerError",message:"Failed to fetch world details"},{status:500})}}async function f(e,{params:t}){try{let r=await u.I.api.getSession({headers:await (0,l.headers)()});if(!r)return i.NextResponse.json({error:"Unauthorized",message:"Authentication required"},{status:401});let{name:s}=await t,{searchParams:n}=new URL(e.url),a="true"===n.get("force"),o=(0,d.F0)(p(r)),c=await o.deleteWorld(s,a);return i.NextResponse.json(c)}catch(e){if(e instanceof d.zB)return i.NextResponse.json({error:e.error,message:e.message},{status:e.statusCode});return console.error("Failed to delete world:",e),i.NextResponse.json({error:"InternalServerError",message:"Failed to delete world"},{status:500})}}let h=new n.AppRouteRouteModule({definition:{kind:a.x.APP_ROUTE,page:"/api/worlds/[name]/route",pathname:"/api/worlds/[name]",filename:"route",bundlePath:"app/api/worlds/[name]/route"},resolvedPagePath:"/home/runner/work/minecraft-server-manager/minecraft-server-manager/platform/services/mcctl-console/src/app/api/worlds/[name]/route.ts",nextConfigOutput:"standalone",userland:s}),{requestAsyncStorage:y,staticGenerationAsyncStorage:_,serverHooks:v}=h,x="/api/worlds/[name]/route";function g(){return(0,o.patchFetch)({serverHooks:v,staticGenerationAsyncStorage:_})}},78649:(e,t,r)=>{r.d(t,{F0:()=>a,zB:()=>s});class s extends Error{constructor(e,t,r){super(r),this.statusCode=e,this.error=t,this.name="McctlApiError"}}class n{constructor(e){this.baseUrl=e.baseUrl.replace(/\/$/,""),this.apiKey=e.apiKey,this.userContext=e.userContext}async fetch(e,t={}){let r=`${this.baseUrl}${e}`,n={"X-API-Key":this.apiKey};t.body&&(n["Content-Type"]="application/json"),this.userContext&&(n["X-User"]=this.userContext.username,n["X-Role"]=this.userContext.role);let a=await fetch(r,{...t,headers:{...n,...t.headers}});if(!a.ok){let e=await a.json().catch(()=>({error:"UnknownError",message:a.statusText}));throw new s(a.status,e.error,e.message)}return a.json()}async getServers(){return this.fetch("/api/servers")}async getServer(e){return this.fetch(`/api/servers/${encodeURIComponent(e)}`)}async createServer(e){return this.fetch("/api/servers",{method:"POST",body:JSON.stringify(e)})}async deleteServer(e,t){return this.fetch(`/api/servers/${encodeURIComponent(e)}${t?"?force=true":""}`,{method:"DELETE"})}async startServer(e){return this.fetch(`/api/servers/${encodeURIComponent(e)}/start`,{method:"POST"})}async stopServer(e){return this.fetch(`/api/servers/${encodeURIComponent(e)}/stop`,{method:"POST"})}async restartServer(e){return this.fetch(`/api/servers/${encodeURIComponent(e)}/restart`,{method:"POST"})}async execCommand(e,t){return this.fetch(`/api/servers/${encodeURIComponent(e)}/exec`,{method:"POST",body:JSON.stringify({command:t})})}async getLogs(e,t=100){return this.fetch(`/api/servers/${encodeURIComponent(e)}/logs?lines=${t}`)}async getWorlds(){return this.fetch("/api/worlds")}async getWorld(e){return this.fetch(`/api/worlds/${encodeURIComponent(e)}`)}async createWorld(e){return this.fetch("/api/worlds",{method:"POST",body:JSON.stringify(e)})}async assignWorld(e,t){return this.fetch(`/api/worlds/${encodeURIComponent(e)}/assign`,{method:"POST",body:JSON.stringify({serverName:t})})}async releaseWorld(e,t){return this.fetch(`/api/worlds/${encodeURIComponent(e)}/release${t?"?force=true":""}`,{method:"POST"})}async deleteWorld(e,t){return this.fetch(`/api/worlds/${encodeURIComponent(e)}${t?"?force=true":""}`,{method:"DELETE"})}async getServerConfig(e){return this.fetch(`/api/servers/${encodeURIComponent(e)}/config`)}async updateServerConfig(e,t){return this.fetch(`/api/servers/${encodeURIComponent(e)}/config`,{method:"PATCH",body:JSON.stringify(t)})}async resetWorld(e){return this.fetch(`/api/servers/${encodeURIComponent(e)}/world/reset`,{method:"POST"})}async getRouterStatus(){return this.fetch("/api/router/status")}}function a(e){let t=process.env.MCCTL_API_URL||"http://localhost:5001",r=process.env.MCCTL_API_KEY||"";return r||console.warn("MCCTL_API_KEY is not set. API requests may fail."),new n({baseUrl:t,apiKey:r,userContext:e})}},31969:(e,t,r)=>{r.d(t,{I:()=>d});var s=r(33580),n=r(5944),a=r(90224),o=r(22587),i=r(8290);let d=(0,s.kj)({database:(0,n.s)(o.db,{provider:"sqlite",schema:{user:i.users,session:i.sessions,account:i.accounts,verification:i.verifications}}),emailAndPassword:{enabled:!0,requireEmailVerification:!1},session:{expiresIn:604800,updateAge:86400,cookieCache:{enabled:!0,maxAge:300}},user:{additionalFields:{role:{type:"string",required:!1,defaultValue:"user",input:!1}}},plugins:[(0,a.SA)({defaultRole:"user",adminRole:"admin"})],trustedOrigins:["http://localhost:5000","http://localhost:3000",process.env.BETTER_AUTH_URL||"http://localhost:5000"].filter(Boolean)})},22587:(e,t,r)=>{r.d(t,{db:()=>p});var s=r(85890),n=r.n(s),a=r(31590),o=r(8290),i=r(55315),d=r.n(i),u=r(92048);let l=function(){if(process.env.DATABASE_URL)return process.env.DATABASE_URL;let e=d().join(process.cwd(),"data");return d().join(e,"mcctl.db")}();!function(e){if(":memory:"===e)return;let t=d().dirname(e);(0,u.existsSync)(t)||(0,u.mkdirSync)(t,{recursive:!0})}(l);let c=new(n())(l);c.pragma("journal_mode = WAL");let p=(0,a.t)(c,{schema:o})},8290:(e,t,r)=>{r.r(t),r.d(t,{accounts:()=>u,sessions:()=>d,userServers:()=>c,users:()=>i,verifications:()=>l});var s=r(80722),n=r(10160),a=r(30304),o=r(76303);let i=(0,s.Px)("users",{id:(0,n.fL)("id").primaryKey(),name:(0,n.fL)("name").notNull(),email:(0,n.fL)("email").notNull().unique(),emailVerified:(0,a._L)("email_verified",{mode:"boolean"}).notNull().default(!1),image:(0,n.fL)("image"),role:(0,n.fL)("role").notNull().default("user"),banned:(0,a._L)("banned",{mode:"boolean"}).default(!1),banReason:(0,n.fL)("ban_reason"),banExpires:(0,a._L)("ban_expires",{mode:"timestamp"}),createdAt:(0,a._L)("created_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date),updatedAt:(0,a._L)("updated_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date)}),d=(0,s.Px)("sessions",{id:(0,n.fL)("id").primaryKey(),expiresAt:(0,a._L)("expires_at",{mode:"timestamp"}).notNull(),token:(0,n.fL)("token").notNull().unique(),ipAddress:(0,n.fL)("ip_address"),userAgent:(0,n.fL)("user_agent"),userId:(0,n.fL)("user_id").notNull().references(()=>i.id,{onDelete:"cascade"}),createdAt:(0,a._L)("created_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date),updatedAt:(0,a._L)("updated_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date)}),u=(0,s.Px)("accounts",{id:(0,n.fL)("id").primaryKey(),accountId:(0,n.fL)("account_id").notNull(),providerId:(0,n.fL)("provider_id").notNull(),userId:(0,n.fL)("user_id").notNull().references(()=>i.id,{onDelete:"cascade"}),accessToken:(0,n.fL)("access_token"),refreshToken:(0,n.fL)("refresh_token"),idToken:(0,n.fL)("id_token"),accessTokenExpiresAt:(0,a._L)("access_token_expires_at",{mode:"timestamp"}),refreshTokenExpiresAt:(0,a._L)("refresh_token_expires_at",{mode:"timestamp"}),scope:(0,n.fL)("scope"),password:(0,n.fL)("password"),createdAt:(0,a._L)("created_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date),updatedAt:(0,a._L)("updated_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date)}),l=(0,s.Px)("verifications",{id:(0,n.fL)("id").primaryKey(),identifier:(0,n.fL)("identifier").notNull(),value:(0,n.fL)("value").notNull(),expiresAt:(0,a._L)("expires_at",{mode:"timestamp"}).notNull(),createdAt:(0,a._L)("created_at",{mode:"timestamp"}).$defaultFn(()=>new Date),updatedAt:(0,a._L)("updated_at",{mode:"timestamp"}).$defaultFn(()=>new Date)}),c=(0,s.Px)("user_servers",{id:(0,n.fL)("id").primaryKey().$defaultFn(()=>crypto.randomUUID()),userId:(0,n.fL)("user_id").notNull().references(()=>i.id,{onDelete:"cascade"}),serverId:(0,n.fL)("server_id").notNull(),permission:(0,n.fL)("permission").$type().notNull().default("view"),createdAt:(0,a._L)("created_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date),updatedAt:(0,a._L)("updated_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date)},e=>({userServerIdx:(0,o.Kz)("user_server_idx").on(e.userId,e.serverId)}))}};var t=require("../../../../webpack-runtime.js");t.C(e);var r=e=>t(t.s=e),s=t.X(0,[9836,1489,7605,5309],()=>r(20062));module.exports=s})();
1
+ "use strict";(()=>{var e={};e.id=5746,e.ids=[5746],e.modules={85890:e=>{e.exports=require("better-sqlite3")},72934:e=>{e.exports=require("next/dist/client/components/action-async-storage.external.js")},54580:e=>{e.exports=require("next/dist/client/components/request-async-storage.external.js")},45869:e=>{e.exports=require("next/dist/client/components/static-generation-async-storage.external.js")},20399:e=>{e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},30517:e=>{e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},92048:e=>{e.exports=require("fs")},55315:e=>{e.exports=require("path")},20062:(e,t,r)=>{r.r(t),r.d(t,{originalPathname:()=>g,patchFetch:()=>_,requestAsyncStorage:()=>y,routeModule:()=>h,serverHooks:()=>w,staticGenerationAsyncStorage:()=>v});var s={};r.r(s),r.d(s,{DELETE:()=>f,GET:()=>m,dynamic:()=>l});var n=r(3025),a=r(45086),o=r(74048),i=r(24517),d=r(78649),u=r(60154),c=r(77605);let l="force-dynamic";function p(e){return{username:e.user.name||e.user.email,role:e.user.role||"user"}}async function m(e,{params:t}){try{let e=await (0,u.mk)(await (0,c.headers)()),{name:r}=await t,s=(0,d.F0)(p(e)),n=await s.getWorld(r);return i.NextResponse.json(n)}catch(e){if(e instanceof u.l4)return i.NextResponse.json({error:"Unauthorized",message:e.message},{status:e.statusCode});if(e instanceof d.zB)return i.NextResponse.json({error:e.error,message:e.message},{status:e.statusCode});return console.error("Failed to fetch world:",e),i.NextResponse.json({error:"InternalServerError",message:"Failed to fetch world details"},{status:500})}}async function f(e,{params:t}){try{let r=await (0,u.kF)(await (0,c.headers)()),{name:s}=await t,{searchParams:n}=new URL(e.url),a="true"===n.get("force"),o=(0,d.F0)(p(r)),l=await o.deleteWorld(s,a);return i.NextResponse.json(l)}catch(e){if(e instanceof u.l4)return i.NextResponse.json({error:"Forbidden",message:e.message},{status:e.statusCode});if(e instanceof d.zB)return i.NextResponse.json({error:e.error,message:e.message},{status:e.statusCode});return console.error("Failed to delete world:",e),i.NextResponse.json({error:"InternalServerError",message:"Failed to delete world"},{status:500})}}let h=new n.AppRouteRouteModule({definition:{kind:a.x.APP_ROUTE,page:"/api/worlds/[name]/route",pathname:"/api/worlds/[name]",filename:"route",bundlePath:"app/api/worlds/[name]/route"},resolvedPagePath:"/home/runner/work/minecraft-server-manager/minecraft-server-manager/platform/services/mcctl-console/src/app/api/worlds/[name]/route.ts",nextConfigOutput:"standalone",userland:s}),{requestAsyncStorage:y,staticGenerationAsyncStorage:v,serverHooks:w}=h,g="/api/worlds/[name]/route";function _(){return(0,o.patchFetch)({serverHooks:w,staticGenerationAsyncStorage:v})}},78649:(e,t,r)=>{r.d(t,{F0:()=>a,zB:()=>s});class s extends Error{constructor(e,t,r){super(r),this.statusCode=e,this.error=t,this.name="McctlApiError"}}class n{constructor(e){this.baseUrl=e.baseUrl.replace(/\/$/,""),this.apiKey=e.apiKey,this.userContext=e.userContext}async fetch(e,t={}){let r=`${this.baseUrl}${e}`,n={"X-API-Key":this.apiKey};t.body&&(n["Content-Type"]="application/json"),this.userContext&&(n["X-User"]=this.userContext.username,n["X-Role"]=this.userContext.role);let a=await fetch(r,{...t,headers:{...n,...t.headers}});if(!a.ok){let e=await a.json().catch(()=>({error:"UnknownError",message:a.statusText}));throw new s(a.status,e.error,e.message)}return a.json()}async getServers(){return this.fetch("/api/servers")}async getServer(e){return this.fetch(`/api/servers/${encodeURIComponent(e)}`)}async createServer(e){return this.fetch("/api/servers",{method:"POST",body:JSON.stringify(e)})}async deleteServer(e,t){return this.fetch(`/api/servers/${encodeURIComponent(e)}${t?"?force=true":""}`,{method:"DELETE"})}async startServer(e){return this.fetch(`/api/servers/${encodeURIComponent(e)}/start`,{method:"POST"})}async stopServer(e){return this.fetch(`/api/servers/${encodeURIComponent(e)}/stop`,{method:"POST"})}async restartServer(e){return this.fetch(`/api/servers/${encodeURIComponent(e)}/restart`,{method:"POST"})}async execCommand(e,t){return this.fetch(`/api/servers/${encodeURIComponent(e)}/exec`,{method:"POST",body:JSON.stringify({command:t})})}async getLogs(e,t=100){return this.fetch(`/api/servers/${encodeURIComponent(e)}/logs?lines=${t}`)}async getWorlds(){return this.fetch("/api/worlds")}async getWorld(e){return this.fetch(`/api/worlds/${encodeURIComponent(e)}`)}async createWorld(e){return this.fetch("/api/worlds",{method:"POST",body:JSON.stringify(e)})}async assignWorld(e,t){return this.fetch(`/api/worlds/${encodeURIComponent(e)}/assign`,{method:"POST",body:JSON.stringify({serverName:t})})}async releaseWorld(e,t){return this.fetch(`/api/worlds/${encodeURIComponent(e)}/release${t?"?force=true":""}`,{method:"POST"})}async deleteWorld(e,t){return this.fetch(`/api/worlds/${encodeURIComponent(e)}${t?"?force=true":""}`,{method:"DELETE"})}async getServerConfig(e){return this.fetch(`/api/servers/${encodeURIComponent(e)}/config`)}async updateServerConfig(e,t){return this.fetch(`/api/servers/${encodeURIComponent(e)}/config`,{method:"PATCH",body:JSON.stringify(t)})}async resetWorld(e){return this.fetch(`/api/servers/${encodeURIComponent(e)}/world/reset`,{method:"POST"})}async getRouterStatus(){return this.fetch("/api/router/status")}async getBackupStatus(){return this.fetch("/api/backup/status")}async pushBackup(e){let t=e?JSON.stringify({message:e}):void 0;return this.fetch("/api/backup/push",{method:"POST",body:t})}async getBackupHistory(e=20){return this.fetch(`/api/backup/history?limit=${e}`)}async restoreBackup(e){return this.fetch("/api/backup/restore",{method:"POST",body:JSON.stringify({commitHash:e})})}}function a(e){let t=process.env.MCCTL_API_URL||"http://localhost:5001",r=process.env.MCCTL_API_KEY||"";return r||console.warn("MCCTL_API_KEY is not set. API requests may fail."),new n({baseUrl:t,apiKey:r,userContext:e})}},60154:(e,t,r)=>{r.d(t,{Ke:()=>c,kF:()=>u,l4:()=>i,mk:()=>d});var s=r(31969),n=r(22587),a=r(8290),o=r(30579);class i extends Error{constructor(e,t=401){super(e),this.statusCode=t,this.name="AuthError"}}async function d(e){let t=await s.I.api.getSession({headers:e});if(!t)throw new i("Unauthorized",401);return t}async function u(e){let t=await d(e);if("admin"!==t.user.role)throw new i("Forbidden: Admin access required",403);return t}async function c(e,t,r="view"){let s=await d(e);if("admin"===s.user.role)return s;let u=await n.db.select().from(a.userServers).where((0,o.xD)((0,o.eq)(a.userServers.userId,s.user.id),(0,o.eq)(a.userServers.serverId,t))).limit(1);if(0===u.length)throw new i("Forbidden: No access to this server",403);let c=u[0].permission,l={view:1,manage:2,admin:3};if(l[c]<l[r])throw new i(`Forbidden: Requires ${r} permission`,403);return s}},31969:(e,t,r)=>{r.d(t,{I:()=>d});var s=r(33580),n=r(5944),a=r(90224),o=r(22587),i=r(8290);let d=(0,s.kj)({database:(0,n.s)(o.db,{provider:"sqlite",schema:{user:i.users,session:i.sessions,account:i.accounts,verification:i.verifications}}),emailAndPassword:{enabled:!0,requireEmailVerification:!1},session:{expiresIn:604800,updateAge:86400,cookieCache:{enabled:!0,maxAge:300}},user:{additionalFields:{role:{type:"string",required:!1,defaultValue:"user",input:!1}}},plugins:[(0,a.SA)({defaultRole:"user",adminRole:"admin"})],trustedOrigins:["http://localhost:5000","http://localhost:3000",process.env.BETTER_AUTH_URL||"http://localhost:5000"].filter(Boolean)})},22587:(e,t,r)=>{r.d(t,{db:()=>p});var s=r(85890),n=r.n(s),a=r(31590),o=r(8290),i=r(55315),d=r.n(i),u=r(92048);let c=function(){if(process.env.DATABASE_URL)return process.env.DATABASE_URL;let e=d().join(process.cwd(),"data");return d().join(e,"mcctl.db")}();!function(e){if(":memory:"===e)return;let t=d().dirname(e);(0,u.existsSync)(t)||(0,u.mkdirSync)(t,{recursive:!0})}(c);let l=new(n())(c);l.pragma("journal_mode = WAL");let p=(0,a.t)(l,{schema:o})},8290:(e,t,r)=>{r.r(t),r.d(t,{accounts:()=>u,sessions:()=>d,userServers:()=>l,users:()=>i,verifications:()=>c});var s=r(80722),n=r(10160),a=r(30304),o=r(76303);let i=(0,s.Px)("users",{id:(0,n.fL)("id").primaryKey(),name:(0,n.fL)("name").notNull(),email:(0,n.fL)("email").notNull().unique(),emailVerified:(0,a._L)("email_verified",{mode:"boolean"}).notNull().default(!1),image:(0,n.fL)("image"),role:(0,n.fL)("role").notNull().default("user"),banned:(0,a._L)("banned",{mode:"boolean"}).default(!1),banReason:(0,n.fL)("ban_reason"),banExpires:(0,a._L)("ban_expires",{mode:"timestamp"}),createdAt:(0,a._L)("created_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date),updatedAt:(0,a._L)("updated_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date)}),d=(0,s.Px)("sessions",{id:(0,n.fL)("id").primaryKey(),expiresAt:(0,a._L)("expires_at",{mode:"timestamp"}).notNull(),token:(0,n.fL)("token").notNull().unique(),ipAddress:(0,n.fL)("ip_address"),userAgent:(0,n.fL)("user_agent"),userId:(0,n.fL)("user_id").notNull().references(()=>i.id,{onDelete:"cascade"}),createdAt:(0,a._L)("created_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date),updatedAt:(0,a._L)("updated_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date)}),u=(0,s.Px)("accounts",{id:(0,n.fL)("id").primaryKey(),accountId:(0,n.fL)("account_id").notNull(),providerId:(0,n.fL)("provider_id").notNull(),userId:(0,n.fL)("user_id").notNull().references(()=>i.id,{onDelete:"cascade"}),accessToken:(0,n.fL)("access_token"),refreshToken:(0,n.fL)("refresh_token"),idToken:(0,n.fL)("id_token"),accessTokenExpiresAt:(0,a._L)("access_token_expires_at",{mode:"timestamp"}),refreshTokenExpiresAt:(0,a._L)("refresh_token_expires_at",{mode:"timestamp"}),scope:(0,n.fL)("scope"),password:(0,n.fL)("password"),createdAt:(0,a._L)("created_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date),updatedAt:(0,a._L)("updated_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date)}),c=(0,s.Px)("verifications",{id:(0,n.fL)("id").primaryKey(),identifier:(0,n.fL)("identifier").notNull(),value:(0,n.fL)("value").notNull(),expiresAt:(0,a._L)("expires_at",{mode:"timestamp"}).notNull(),createdAt:(0,a._L)("created_at",{mode:"timestamp"}).$defaultFn(()=>new Date),updatedAt:(0,a._L)("updated_at",{mode:"timestamp"}).$defaultFn(()=>new Date)}),l=(0,s.Px)("user_servers",{id:(0,n.fL)("id").primaryKey().$defaultFn(()=>crypto.randomUUID()),userId:(0,n.fL)("user_id").notNull().references(()=>i.id,{onDelete:"cascade"}),serverId:(0,n.fL)("server_id").notNull(),permission:(0,n.fL)("permission").$type().notNull().default("view"),createdAt:(0,a._L)("created_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date),updatedAt:(0,a._L)("updated_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date)},e=>({userServerIdx:(0,o.Kz)("user_server_idx").on(e.userId,e.serverId)}))}};var t=require("../../../../webpack-runtime.js");t.C(e);var r=e=>t(t.s=e),s=t.X(0,[9836,1489,7605,5309],()=>r(20062));module.exports=s})();
@@ -1 +1 @@
1
- "use strict";(()=>{var e={};e.id=6541,e.ids=[6541],e.modules={85890:e=>{e.exports=require("better-sqlite3")},72934:e=>{e.exports=require("next/dist/client/components/action-async-storage.external.js")},54580:e=>{e.exports=require("next/dist/client/components/request-async-storage.external.js")},45869:e=>{e.exports=require("next/dist/client/components/static-generation-async-storage.external.js")},20399:e=>{e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},30517:e=>{e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},92048:e=>{e.exports=require("fs")},55315:e=>{e.exports=require("path")},32527:(e,t,r)=>{r.r(t),r.d(t,{originalPathname:()=>x,patchFetch:()=>g,requestAsyncStorage:()=>y,routeModule:()=>h,serverHooks:()=>v,staticGenerationAsyncStorage:()=>_});var s={};r.r(s),r.d(s,{GET:()=>m,POST:()=>f,dynamic:()=>l});var n=r(3025),o=r(45086),a=r(74048),i=r(24517),d=r(78649),u=r(31969),c=r(77605);let l="force-dynamic";function p(e){return{username:e.user.name||e.user.email,role:e.user.role||"user"}}async function m(){try{let e=await u.I.api.getSession({headers:await (0,c.headers)()});if(!e)return i.NextResponse.json({error:"Unauthorized",message:"Authentication required"},{status:401});let t=(0,d.F0)(p(e)),r=await t.getWorlds();return i.NextResponse.json(r)}catch(e){if(e instanceof d.zB)return i.NextResponse.json({error:e.error,message:e.message},{status:e.statusCode});return console.error("Failed to fetch worlds:",e),i.NextResponse.json({error:"InternalServerError",message:"Failed to fetch worlds"},{status:500})}}async function f(e){try{let t=await u.I.api.getSession({headers:await (0,c.headers)()});if(!t)return i.NextResponse.json({error:"Unauthorized",message:"Authentication required"},{status:401});let r=await e.json(),s=(0,d.F0)(p(t)),n=await s.createWorld(r);return i.NextResponse.json(n,{status:201})}catch(e){if(e instanceof d.zB)return i.NextResponse.json({error:e.error,message:e.message},{status:e.statusCode});return console.error("Failed to create world:",e),i.NextResponse.json({error:"InternalServerError",message:"Failed to create world"},{status:500})}}let h=new n.AppRouteRouteModule({definition:{kind:o.x.APP_ROUTE,page:"/api/worlds/route",pathname:"/api/worlds",filename:"route",bundlePath:"app/api/worlds/route"},resolvedPagePath:"/home/runner/work/minecraft-server-manager/minecraft-server-manager/platform/services/mcctl-console/src/app/api/worlds/route.ts",nextConfigOutput:"standalone",userland:s}),{requestAsyncStorage:y,staticGenerationAsyncStorage:_,serverHooks:v}=h,x="/api/worlds/route";function g(){return(0,a.patchFetch)({serverHooks:v,staticGenerationAsyncStorage:_})}},78649:(e,t,r)=>{r.d(t,{F0:()=>o,zB:()=>s});class s extends Error{constructor(e,t,r){super(r),this.statusCode=e,this.error=t,this.name="McctlApiError"}}class n{constructor(e){this.baseUrl=e.baseUrl.replace(/\/$/,""),this.apiKey=e.apiKey,this.userContext=e.userContext}async fetch(e,t={}){let r=`${this.baseUrl}${e}`,n={"X-API-Key":this.apiKey};t.body&&(n["Content-Type"]="application/json"),this.userContext&&(n["X-User"]=this.userContext.username,n["X-Role"]=this.userContext.role);let o=await fetch(r,{...t,headers:{...n,...t.headers}});if(!o.ok){let e=await o.json().catch(()=>({error:"UnknownError",message:o.statusText}));throw new s(o.status,e.error,e.message)}return o.json()}async getServers(){return this.fetch("/api/servers")}async getServer(e){return this.fetch(`/api/servers/${encodeURIComponent(e)}`)}async createServer(e){return this.fetch("/api/servers",{method:"POST",body:JSON.stringify(e)})}async deleteServer(e,t){return this.fetch(`/api/servers/${encodeURIComponent(e)}${t?"?force=true":""}`,{method:"DELETE"})}async startServer(e){return this.fetch(`/api/servers/${encodeURIComponent(e)}/start`,{method:"POST"})}async stopServer(e){return this.fetch(`/api/servers/${encodeURIComponent(e)}/stop`,{method:"POST"})}async restartServer(e){return this.fetch(`/api/servers/${encodeURIComponent(e)}/restart`,{method:"POST"})}async execCommand(e,t){return this.fetch(`/api/servers/${encodeURIComponent(e)}/exec`,{method:"POST",body:JSON.stringify({command:t})})}async getLogs(e,t=100){return this.fetch(`/api/servers/${encodeURIComponent(e)}/logs?lines=${t}`)}async getWorlds(){return this.fetch("/api/worlds")}async getWorld(e){return this.fetch(`/api/worlds/${encodeURIComponent(e)}`)}async createWorld(e){return this.fetch("/api/worlds",{method:"POST",body:JSON.stringify(e)})}async assignWorld(e,t){return this.fetch(`/api/worlds/${encodeURIComponent(e)}/assign`,{method:"POST",body:JSON.stringify({serverName:t})})}async releaseWorld(e,t){return this.fetch(`/api/worlds/${encodeURIComponent(e)}/release${t?"?force=true":""}`,{method:"POST"})}async deleteWorld(e,t){return this.fetch(`/api/worlds/${encodeURIComponent(e)}${t?"?force=true":""}`,{method:"DELETE"})}async getServerConfig(e){return this.fetch(`/api/servers/${encodeURIComponent(e)}/config`)}async updateServerConfig(e,t){return this.fetch(`/api/servers/${encodeURIComponent(e)}/config`,{method:"PATCH",body:JSON.stringify(t)})}async resetWorld(e){return this.fetch(`/api/servers/${encodeURIComponent(e)}/world/reset`,{method:"POST"})}async getRouterStatus(){return this.fetch("/api/router/status")}}function o(e){let t=process.env.MCCTL_API_URL||"http://localhost:5001",r=process.env.MCCTL_API_KEY||"";return r||console.warn("MCCTL_API_KEY is not set. API requests may fail."),new n({baseUrl:t,apiKey:r,userContext:e})}},31969:(e,t,r)=>{r.d(t,{I:()=>d});var s=r(33580),n=r(5944),o=r(90224),a=r(22587),i=r(8290);let d=(0,s.kj)({database:(0,n.s)(a.db,{provider:"sqlite",schema:{user:i.users,session:i.sessions,account:i.accounts,verification:i.verifications}}),emailAndPassword:{enabled:!0,requireEmailVerification:!1},session:{expiresIn:604800,updateAge:86400,cookieCache:{enabled:!0,maxAge:300}},user:{additionalFields:{role:{type:"string",required:!1,defaultValue:"user",input:!1}}},plugins:[(0,o.SA)({defaultRole:"user",adminRole:"admin"})],trustedOrigins:["http://localhost:5000","http://localhost:3000",process.env.BETTER_AUTH_URL||"http://localhost:5000"].filter(Boolean)})},22587:(e,t,r)=>{r.d(t,{db:()=>p});var s=r(85890),n=r.n(s),o=r(31590),a=r(8290),i=r(55315),d=r.n(i),u=r(92048);let c=function(){if(process.env.DATABASE_URL)return process.env.DATABASE_URL;let e=d().join(process.cwd(),"data");return d().join(e,"mcctl.db")}();!function(e){if(":memory:"===e)return;let t=d().dirname(e);(0,u.existsSync)(t)||(0,u.mkdirSync)(t,{recursive:!0})}(c);let l=new(n())(c);l.pragma("journal_mode = WAL");let p=(0,o.t)(l,{schema:a})},8290:(e,t,r)=>{r.r(t),r.d(t,{accounts:()=>u,sessions:()=>d,userServers:()=>l,users:()=>i,verifications:()=>c});var s=r(80722),n=r(10160),o=r(30304),a=r(76303);let i=(0,s.Px)("users",{id:(0,n.fL)("id").primaryKey(),name:(0,n.fL)("name").notNull(),email:(0,n.fL)("email").notNull().unique(),emailVerified:(0,o._L)("email_verified",{mode:"boolean"}).notNull().default(!1),image:(0,n.fL)("image"),role:(0,n.fL)("role").notNull().default("user"),banned:(0,o._L)("banned",{mode:"boolean"}).default(!1),banReason:(0,n.fL)("ban_reason"),banExpires:(0,o._L)("ban_expires",{mode:"timestamp"}),createdAt:(0,o._L)("created_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date),updatedAt:(0,o._L)("updated_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date)}),d=(0,s.Px)("sessions",{id:(0,n.fL)("id").primaryKey(),expiresAt:(0,o._L)("expires_at",{mode:"timestamp"}).notNull(),token:(0,n.fL)("token").notNull().unique(),ipAddress:(0,n.fL)("ip_address"),userAgent:(0,n.fL)("user_agent"),userId:(0,n.fL)("user_id").notNull().references(()=>i.id,{onDelete:"cascade"}),createdAt:(0,o._L)("created_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date),updatedAt:(0,o._L)("updated_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date)}),u=(0,s.Px)("accounts",{id:(0,n.fL)("id").primaryKey(),accountId:(0,n.fL)("account_id").notNull(),providerId:(0,n.fL)("provider_id").notNull(),userId:(0,n.fL)("user_id").notNull().references(()=>i.id,{onDelete:"cascade"}),accessToken:(0,n.fL)("access_token"),refreshToken:(0,n.fL)("refresh_token"),idToken:(0,n.fL)("id_token"),accessTokenExpiresAt:(0,o._L)("access_token_expires_at",{mode:"timestamp"}),refreshTokenExpiresAt:(0,o._L)("refresh_token_expires_at",{mode:"timestamp"}),scope:(0,n.fL)("scope"),password:(0,n.fL)("password"),createdAt:(0,o._L)("created_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date),updatedAt:(0,o._L)("updated_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date)}),c=(0,s.Px)("verifications",{id:(0,n.fL)("id").primaryKey(),identifier:(0,n.fL)("identifier").notNull(),value:(0,n.fL)("value").notNull(),expiresAt:(0,o._L)("expires_at",{mode:"timestamp"}).notNull(),createdAt:(0,o._L)("created_at",{mode:"timestamp"}).$defaultFn(()=>new Date),updatedAt:(0,o._L)("updated_at",{mode:"timestamp"}).$defaultFn(()=>new Date)}),l=(0,s.Px)("user_servers",{id:(0,n.fL)("id").primaryKey().$defaultFn(()=>crypto.randomUUID()),userId:(0,n.fL)("user_id").notNull().references(()=>i.id,{onDelete:"cascade"}),serverId:(0,n.fL)("server_id").notNull(),permission:(0,n.fL)("permission").$type().notNull().default("view"),createdAt:(0,o._L)("created_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date),updatedAt:(0,o._L)("updated_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date)},e=>({userServerIdx:(0,a.Kz)("user_server_idx").on(e.userId,e.serverId)}))}};var t=require("../../../webpack-runtime.js");t.C(e);var r=e=>t(t.s=e),s=t.X(0,[9836,1489,7605,5309],()=>r(32527));module.exports=s})();
1
+ "use strict";(()=>{var e={};e.id=6541,e.ids=[6541],e.modules={85890:e=>{e.exports=require("better-sqlite3")},72934:e=>{e.exports=require("next/dist/client/components/action-async-storage.external.js")},54580:e=>{e.exports=require("next/dist/client/components/request-async-storage.external.js")},45869:e=>{e.exports=require("next/dist/client/components/static-generation-async-storage.external.js")},20399:e=>{e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},30517:e=>{e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},92048:e=>{e.exports=require("fs")},55315:e=>{e.exports=require("path")},32527:(e,t,r)=>{r.r(t),r.d(t,{originalPathname:()=>_,patchFetch:()=>g,requestAsyncStorage:()=>y,routeModule:()=>h,serverHooks:()=>w,staticGenerationAsyncStorage:()=>v});var s={};r.r(s),r.d(s,{GET:()=>m,POST:()=>f,dynamic:()=>l});var n=r(3025),a=r(45086),o=r(74048),i=r(24517),d=r(78649),u=r(60154),c=r(77605);let l="force-dynamic";function p(e){return{username:e.user.name||e.user.email,role:e.user.role||"user"}}async function m(){try{let e=await (0,u.mk)(await (0,c.headers)()),t=(0,d.F0)(p(e)),r=await t.getWorlds();return i.NextResponse.json(r)}catch(e){if(e instanceof u.l4)return i.NextResponse.json({error:"Unauthorized",message:e.message},{status:e.statusCode});if(e instanceof d.zB)return i.NextResponse.json({error:e.error,message:e.message},{status:e.statusCode});return console.error("Failed to fetch worlds:",e),i.NextResponse.json({error:"InternalServerError",message:"Failed to fetch worlds"},{status:500})}}async function f(e){try{let t=await (0,u.mk)(await (0,c.headers)()),r=await e.json(),s=(0,d.F0)(p(t)),n=await s.createWorld(r);return i.NextResponse.json(n,{status:201})}catch(e){if(e instanceof u.l4)return i.NextResponse.json({error:"Unauthorized",message:e.message},{status:e.statusCode});if(e instanceof d.zB)return i.NextResponse.json({error:e.error,message:e.message},{status:e.statusCode});return console.error("Failed to create world:",e),i.NextResponse.json({error:"InternalServerError",message:"Failed to create world"},{status:500})}}let h=new n.AppRouteRouteModule({definition:{kind:a.x.APP_ROUTE,page:"/api/worlds/route",pathname:"/api/worlds",filename:"route",bundlePath:"app/api/worlds/route"},resolvedPagePath:"/home/runner/work/minecraft-server-manager/minecraft-server-manager/platform/services/mcctl-console/src/app/api/worlds/route.ts",nextConfigOutput:"standalone",userland:s}),{requestAsyncStorage:y,staticGenerationAsyncStorage:v,serverHooks:w}=h,_="/api/worlds/route";function g(){return(0,o.patchFetch)({serverHooks:w,staticGenerationAsyncStorage:v})}},78649:(e,t,r)=>{r.d(t,{F0:()=>a,zB:()=>s});class s extends Error{constructor(e,t,r){super(r),this.statusCode=e,this.error=t,this.name="McctlApiError"}}class n{constructor(e){this.baseUrl=e.baseUrl.replace(/\/$/,""),this.apiKey=e.apiKey,this.userContext=e.userContext}async fetch(e,t={}){let r=`${this.baseUrl}${e}`,n={"X-API-Key":this.apiKey};t.body&&(n["Content-Type"]="application/json"),this.userContext&&(n["X-User"]=this.userContext.username,n["X-Role"]=this.userContext.role);let a=await fetch(r,{...t,headers:{...n,...t.headers}});if(!a.ok){let e=await a.json().catch(()=>({error:"UnknownError",message:a.statusText}));throw new s(a.status,e.error,e.message)}return a.json()}async getServers(){return this.fetch("/api/servers")}async getServer(e){return this.fetch(`/api/servers/${encodeURIComponent(e)}`)}async createServer(e){return this.fetch("/api/servers",{method:"POST",body:JSON.stringify(e)})}async deleteServer(e,t){return this.fetch(`/api/servers/${encodeURIComponent(e)}${t?"?force=true":""}`,{method:"DELETE"})}async startServer(e){return this.fetch(`/api/servers/${encodeURIComponent(e)}/start`,{method:"POST"})}async stopServer(e){return this.fetch(`/api/servers/${encodeURIComponent(e)}/stop`,{method:"POST"})}async restartServer(e){return this.fetch(`/api/servers/${encodeURIComponent(e)}/restart`,{method:"POST"})}async execCommand(e,t){return this.fetch(`/api/servers/${encodeURIComponent(e)}/exec`,{method:"POST",body:JSON.stringify({command:t})})}async getLogs(e,t=100){return this.fetch(`/api/servers/${encodeURIComponent(e)}/logs?lines=${t}`)}async getWorlds(){return this.fetch("/api/worlds")}async getWorld(e){return this.fetch(`/api/worlds/${encodeURIComponent(e)}`)}async createWorld(e){return this.fetch("/api/worlds",{method:"POST",body:JSON.stringify(e)})}async assignWorld(e,t){return this.fetch(`/api/worlds/${encodeURIComponent(e)}/assign`,{method:"POST",body:JSON.stringify({serverName:t})})}async releaseWorld(e,t){return this.fetch(`/api/worlds/${encodeURIComponent(e)}/release${t?"?force=true":""}`,{method:"POST"})}async deleteWorld(e,t){return this.fetch(`/api/worlds/${encodeURIComponent(e)}${t?"?force=true":""}`,{method:"DELETE"})}async getServerConfig(e){return this.fetch(`/api/servers/${encodeURIComponent(e)}/config`)}async updateServerConfig(e,t){return this.fetch(`/api/servers/${encodeURIComponent(e)}/config`,{method:"PATCH",body:JSON.stringify(t)})}async resetWorld(e){return this.fetch(`/api/servers/${encodeURIComponent(e)}/world/reset`,{method:"POST"})}async getRouterStatus(){return this.fetch("/api/router/status")}async getBackupStatus(){return this.fetch("/api/backup/status")}async pushBackup(e){let t=e?JSON.stringify({message:e}):void 0;return this.fetch("/api/backup/push",{method:"POST",body:t})}async getBackupHistory(e=20){return this.fetch(`/api/backup/history?limit=${e}`)}async restoreBackup(e){return this.fetch("/api/backup/restore",{method:"POST",body:JSON.stringify({commitHash:e})})}}function a(e){let t=process.env.MCCTL_API_URL||"http://localhost:5001",r=process.env.MCCTL_API_KEY||"";return r||console.warn("MCCTL_API_KEY is not set. API requests may fail."),new n({baseUrl:t,apiKey:r,userContext:e})}},60154:(e,t,r)=>{r.d(t,{Ke:()=>c,kF:()=>u,l4:()=>i,mk:()=>d});var s=r(31969),n=r(22587),a=r(8290),o=r(30579);class i extends Error{constructor(e,t=401){super(e),this.statusCode=t,this.name="AuthError"}}async function d(e){let t=await s.I.api.getSession({headers:e});if(!t)throw new i("Unauthorized",401);return t}async function u(e){let t=await d(e);if("admin"!==t.user.role)throw new i("Forbidden: Admin access required",403);return t}async function c(e,t,r="view"){let s=await d(e);if("admin"===s.user.role)return s;let u=await n.db.select().from(a.userServers).where((0,o.xD)((0,o.eq)(a.userServers.userId,s.user.id),(0,o.eq)(a.userServers.serverId,t))).limit(1);if(0===u.length)throw new i("Forbidden: No access to this server",403);let c=u[0].permission,l={view:1,manage:2,admin:3};if(l[c]<l[r])throw new i(`Forbidden: Requires ${r} permission`,403);return s}},31969:(e,t,r)=>{r.d(t,{I:()=>d});var s=r(33580),n=r(5944),a=r(90224),o=r(22587),i=r(8290);let d=(0,s.kj)({database:(0,n.s)(o.db,{provider:"sqlite",schema:{user:i.users,session:i.sessions,account:i.accounts,verification:i.verifications}}),emailAndPassword:{enabled:!0,requireEmailVerification:!1},session:{expiresIn:604800,updateAge:86400,cookieCache:{enabled:!0,maxAge:300}},user:{additionalFields:{role:{type:"string",required:!1,defaultValue:"user",input:!1}}},plugins:[(0,a.SA)({defaultRole:"user",adminRole:"admin"})],trustedOrigins:["http://localhost:5000","http://localhost:3000",process.env.BETTER_AUTH_URL||"http://localhost:5000"].filter(Boolean)})},22587:(e,t,r)=>{r.d(t,{db:()=>p});var s=r(85890),n=r.n(s),a=r(31590),o=r(8290),i=r(55315),d=r.n(i),u=r(92048);let c=function(){if(process.env.DATABASE_URL)return process.env.DATABASE_URL;let e=d().join(process.cwd(),"data");return d().join(e,"mcctl.db")}();!function(e){if(":memory:"===e)return;let t=d().dirname(e);(0,u.existsSync)(t)||(0,u.mkdirSync)(t,{recursive:!0})}(c);let l=new(n())(c);l.pragma("journal_mode = WAL");let p=(0,a.t)(l,{schema:o})},8290:(e,t,r)=>{r.r(t),r.d(t,{accounts:()=>u,sessions:()=>d,userServers:()=>l,users:()=>i,verifications:()=>c});var s=r(80722),n=r(10160),a=r(30304),o=r(76303);let i=(0,s.Px)("users",{id:(0,n.fL)("id").primaryKey(),name:(0,n.fL)("name").notNull(),email:(0,n.fL)("email").notNull().unique(),emailVerified:(0,a._L)("email_verified",{mode:"boolean"}).notNull().default(!1),image:(0,n.fL)("image"),role:(0,n.fL)("role").notNull().default("user"),banned:(0,a._L)("banned",{mode:"boolean"}).default(!1),banReason:(0,n.fL)("ban_reason"),banExpires:(0,a._L)("ban_expires",{mode:"timestamp"}),createdAt:(0,a._L)("created_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date),updatedAt:(0,a._L)("updated_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date)}),d=(0,s.Px)("sessions",{id:(0,n.fL)("id").primaryKey(),expiresAt:(0,a._L)("expires_at",{mode:"timestamp"}).notNull(),token:(0,n.fL)("token").notNull().unique(),ipAddress:(0,n.fL)("ip_address"),userAgent:(0,n.fL)("user_agent"),userId:(0,n.fL)("user_id").notNull().references(()=>i.id,{onDelete:"cascade"}),createdAt:(0,a._L)("created_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date),updatedAt:(0,a._L)("updated_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date)}),u=(0,s.Px)("accounts",{id:(0,n.fL)("id").primaryKey(),accountId:(0,n.fL)("account_id").notNull(),providerId:(0,n.fL)("provider_id").notNull(),userId:(0,n.fL)("user_id").notNull().references(()=>i.id,{onDelete:"cascade"}),accessToken:(0,n.fL)("access_token"),refreshToken:(0,n.fL)("refresh_token"),idToken:(0,n.fL)("id_token"),accessTokenExpiresAt:(0,a._L)("access_token_expires_at",{mode:"timestamp"}),refreshTokenExpiresAt:(0,a._L)("refresh_token_expires_at",{mode:"timestamp"}),scope:(0,n.fL)("scope"),password:(0,n.fL)("password"),createdAt:(0,a._L)("created_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date),updatedAt:(0,a._L)("updated_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date)}),c=(0,s.Px)("verifications",{id:(0,n.fL)("id").primaryKey(),identifier:(0,n.fL)("identifier").notNull(),value:(0,n.fL)("value").notNull(),expiresAt:(0,a._L)("expires_at",{mode:"timestamp"}).notNull(),createdAt:(0,a._L)("created_at",{mode:"timestamp"}).$defaultFn(()=>new Date),updatedAt:(0,a._L)("updated_at",{mode:"timestamp"}).$defaultFn(()=>new Date)}),l=(0,s.Px)("user_servers",{id:(0,n.fL)("id").primaryKey().$defaultFn(()=>crypto.randomUUID()),userId:(0,n.fL)("user_id").notNull().references(()=>i.id,{onDelete:"cascade"}),serverId:(0,n.fL)("server_id").notNull(),permission:(0,n.fL)("permission").$type().notNull().default("view"),createdAt:(0,a._L)("created_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date),updatedAt:(0,a._L)("updated_at",{mode:"timestamp"}).notNull().$defaultFn(()=>new Date)},e=>({userServerIdx:(0,o.Kz)("user_server_idx").on(e.userId,e.serverId)}))}};var t=require("../../../webpack-runtime.js");t.C(e);var r=e=>t(t.s=e),s=t.X(0,[9836,1489,7605,5309],()=>r(32527));module.exports=s})();