From 03d2ba8a39e3b7006c61f4c5a6fb8b66c307677f Mon Sep 17 00:00:00 2001 From: fero Date: Thu, 11 Jul 2024 21:16:59 -0700 Subject: [PATCH 001/465] Merge servers platform with monorepo --- apps/frontend/.env | 3 + apps/frontend/nuxt.config.ts | 2 + .../images/games/minecraft-java-edition.png | Bin 0 -> 7718 bytes apps/frontend/src/assets/images/pyro.svg | 1 + .../src/assets/images/utils/navtabs/cloud.svg | 3 + .../src/assets/images/utils/navtabs/cog.svg | 3 + .../src/assets/images/utils/navtabs/cube.svg | 3 + .../src/assets/images/utils/navtabs/home.svg | 3 + .../src/components/ui/icon/CaretRight.vue | 9 + .../src/components/ui/icon/ContentCube.vue | 16 ++ .../components/ui/servers/PoweredByPyro.vue | 10 + .../components/ui/servers/ServerListing.vue | 68 ++++++ .../components/ui/servers/ServerSkeleton.vue | 18 ++ .../src/components/ui/servers/ServerStats.vue | 206 ++++++++++++++++ apps/frontend/src/composables/pyroFetch.ts | 34 +++ apps/frontend/src/layouts/default.vue | 5 + apps/frontend/src/pages/servers/index.vue | 3 + .../src/pages/servers/manage/[id].vue | 222 ++++++++++++++++++ .../src/pages/servers/manage/[id]/backups.vue | 3 + .../src/pages/servers/manage/[id]/content.vue | 60 +++++ .../src/pages/servers/manage/[id]/index.vue | 158 +++++++++++++ .../src/pages/servers/manage/[id]/options.vue | 34 +++ .../servers/manage/[id]/options/index.vue | 34 +++ .../servers/manage/[id]/options/info.vue | 25 ++ .../manage/[id]/options/properties.vue | 53 +++++ .../src/pages/servers/manage/index.vue | 162 +++++++++++++ apps/frontend/src/types/servers.ts | 34 +++ apps/frontend/src/utils/common-messages.ts | 4 + 28 files changed, 1176 insertions(+) create mode 100644 apps/frontend/.env create mode 100644 apps/frontend/src/assets/images/games/minecraft-java-edition.png create mode 100644 apps/frontend/src/assets/images/pyro.svg create mode 100644 apps/frontend/src/assets/images/utils/navtabs/cloud.svg create mode 100644 apps/frontend/src/assets/images/utils/navtabs/cog.svg create mode 100644 apps/frontend/src/assets/images/utils/navtabs/cube.svg create mode 100644 apps/frontend/src/assets/images/utils/navtabs/home.svg create mode 100644 apps/frontend/src/components/ui/icon/CaretRight.vue create mode 100644 apps/frontend/src/components/ui/icon/ContentCube.vue create mode 100644 apps/frontend/src/components/ui/servers/PoweredByPyro.vue create mode 100644 apps/frontend/src/components/ui/servers/ServerListing.vue create mode 100644 apps/frontend/src/components/ui/servers/ServerSkeleton.vue create mode 100644 apps/frontend/src/components/ui/servers/ServerStats.vue create mode 100644 apps/frontend/src/composables/pyroFetch.ts create mode 100644 apps/frontend/src/pages/servers/index.vue create mode 100644 apps/frontend/src/pages/servers/manage/[id].vue create mode 100644 apps/frontend/src/pages/servers/manage/[id]/backups.vue create mode 100644 apps/frontend/src/pages/servers/manage/[id]/content.vue create mode 100644 apps/frontend/src/pages/servers/manage/[id]/index.vue create mode 100644 apps/frontend/src/pages/servers/manage/[id]/options.vue create mode 100644 apps/frontend/src/pages/servers/manage/[id]/options/index.vue create mode 100644 apps/frontend/src/pages/servers/manage/[id]/options/info.vue create mode 100644 apps/frontend/src/pages/servers/manage/[id]/options/properties.vue create mode 100644 apps/frontend/src/pages/servers/manage/index.vue create mode 100644 apps/frontend/src/types/servers.ts diff --git a/apps/frontend/.env b/apps/frontend/.env new file mode 100644 index 000000000..67c4acfe1 --- /dev/null +++ b/apps/frontend/.env @@ -0,0 +1,3 @@ +BASE_URL=https://api.modrinth.com/v2/ +BROWSER_BASE_URL=https://api.modrinth.com/v2/ +PYRO_BASE_URL=https://3436-144-172-172-236.ngrok-free.app/ diff --git a/apps/frontend/nuxt.config.ts b/apps/frontend/nuxt.config.ts index e8de813c9..55dc3b64c 100644 --- a/apps/frontend/nuxt.config.ts +++ b/apps/frontend/nuxt.config.ts @@ -300,8 +300,10 @@ export default defineNuxtConfig({ apiBaseUrl: process.env.BASE_URL ?? globalThis.BASE_URL ?? getApiUrl(), // @ts-ignore rateLimitKey: process.env.RATE_LIMIT_IGNORE_KEY ?? globalThis.RATE_LIMIT_IGNORE_KEY, + pyroBaseUrl: process.env.PYRO_BASE_URL, public: { apiBaseUrl: getApiUrl(), + pyroBaseUrl: process.env.PYRO_BASE_URL, siteUrl: getDomain(), production: isProduction(), featureFlagOverrides: getFeatureFlagOverrides(), diff --git a/apps/frontend/src/assets/images/games/minecraft-java-edition.png b/apps/frontend/src/assets/images/games/minecraft-java-edition.png new file mode 100644 index 0000000000000000000000000000000000000000..7ba55fa1a2810e49613f8da0dc4fad6873ab7ab5 GIT binary patch literal 7718 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 \ No newline at end of file diff --git a/apps/frontend/src/assets/images/utils/navtabs/cloud.svg b/apps/frontend/src/assets/images/utils/navtabs/cloud.svg new file mode 100644 index 000000000..d1f6d097b --- /dev/null +++ b/apps/frontend/src/assets/images/utils/navtabs/cloud.svg @@ -0,0 +1,3 @@ + + + diff --git a/apps/frontend/src/assets/images/utils/navtabs/cog.svg b/apps/frontend/src/assets/images/utils/navtabs/cog.svg new file mode 100644 index 000000000..56499bf7b --- /dev/null +++ b/apps/frontend/src/assets/images/utils/navtabs/cog.svg @@ -0,0 +1,3 @@ + + + diff --git a/apps/frontend/src/assets/images/utils/navtabs/cube.svg b/apps/frontend/src/assets/images/utils/navtabs/cube.svg new file mode 100644 index 000000000..9721e1d15 --- /dev/null +++ b/apps/frontend/src/assets/images/utils/navtabs/cube.svg @@ -0,0 +1,3 @@ + + + diff --git a/apps/frontend/src/assets/images/utils/navtabs/home.svg b/apps/frontend/src/assets/images/utils/navtabs/home.svg new file mode 100644 index 000000000..b30bd473b --- /dev/null +++ b/apps/frontend/src/assets/images/utils/navtabs/home.svg @@ -0,0 +1,3 @@ + + + diff --git a/apps/frontend/src/components/ui/icon/CaretRight.vue b/apps/frontend/src/components/ui/icon/CaretRight.vue new file mode 100644 index 000000000..3fca78155 --- /dev/null +++ b/apps/frontend/src/components/ui/icon/CaretRight.vue @@ -0,0 +1,9 @@ + diff --git a/apps/frontend/src/components/ui/icon/ContentCube.vue b/apps/frontend/src/components/ui/icon/ContentCube.vue new file mode 100644 index 000000000..284a2705b --- /dev/null +++ b/apps/frontend/src/components/ui/icon/ContentCube.vue @@ -0,0 +1,16 @@ + diff --git a/apps/frontend/src/components/ui/servers/PoweredByPyro.vue b/apps/frontend/src/components/ui/servers/PoweredByPyro.vue new file mode 100644 index 000000000..658a7e4ff --- /dev/null +++ b/apps/frontend/src/components/ui/servers/PoweredByPyro.vue @@ -0,0 +1,10 @@ + + + diff --git a/apps/frontend/src/components/ui/servers/ServerListing.vue b/apps/frontend/src/components/ui/servers/ServerListing.vue new file mode 100644 index 000000000..21b1b0d0e --- /dev/null +++ b/apps/frontend/src/components/ui/servers/ServerListing.vue @@ -0,0 +1,68 @@ + + + diff --git a/apps/frontend/src/components/ui/servers/ServerSkeleton.vue b/apps/frontend/src/components/ui/servers/ServerSkeleton.vue new file mode 100644 index 000000000..f4b21bc23 --- /dev/null +++ b/apps/frontend/src/components/ui/servers/ServerSkeleton.vue @@ -0,0 +1,18 @@ + + + diff --git a/apps/frontend/src/components/ui/servers/ServerStats.vue b/apps/frontend/src/components/ui/servers/ServerStats.vue new file mode 100644 index 000000000..8927ea496 --- /dev/null +++ b/apps/frontend/src/components/ui/servers/ServerStats.vue @@ -0,0 +1,206 @@ + + + diff --git a/apps/frontend/src/composables/pyroFetch.ts b/apps/frontend/src/composables/pyroFetch.ts new file mode 100644 index 000000000..e397101a3 --- /dev/null +++ b/apps/frontend/src/composables/pyroFetch.ts @@ -0,0 +1,34 @@ +function normalizeUrl(base: string, path: string): string { + const normalizedBase = base.endsWith("/") ? base.slice(0, -1) : base; + const normalizedUrl = path.startsWith("/") ? path.slice(1) : path; + return `${normalizedBase}/${normalizedUrl}`; +} + +// 0 pre-launch +type TAPIVersion = 0; +type TMethod = "GET" | "POST" | "PUT" | "DELETE"; + +export async function usePyroFetch( + version: TAPIVersion = 0, + path: string, + method: TMethod = "GET", + authToken?: string | undefined, + // eslint-disable-next-line @typescript-eslint/no-unused-vars + options?: any, +): Promise { + const config = useRuntimeConfig(); + const base = import.meta.server ? config.pyroBaseUrl : config.public.pyroBaseUrl; + + const fullUrl: string = normalizeUrl(`${base}modrinth/v${version}`, path); + + return await $fetch(fullUrl, { + method, + headers: { + Accept: "application/json", + Authorization: authToken ? `${authToken}` : "", + "ngrok-skip-browser-warning": "true", + "Access-Control-Allow-Origin": "*", + "Access-Control-Allow-Headers": "*", + }, + }); +} diff --git a/apps/frontend/src/layouts/default.vue b/apps/frontend/src/layouts/default.vue index 4be98be2a..db3550727 100644 --- a/apps/frontend/src/layouts/default.vue +++ b/apps/frontend/src/layouts/default.vue @@ -99,6 +99,10 @@
+ + + {{ formatMessage(commonMessages.serversLabel) }} + {{ formatMessage(commonMessages.collectionsLabel) }} @@ -426,6 +430,7 @@ import { XIcon, IssuesIcon, ReportIcon, + ServerIcon, } from "@modrinth/assets"; import { Button } from "@modrinth/ui"; import HamburgerIcon from "~/assets/images/utils/hamburger.svg?component"; diff --git a/apps/frontend/src/pages/servers/index.vue b/apps/frontend/src/pages/servers/index.vue new file mode 100644 index 000000000..7b8b46cb0 --- /dev/null +++ b/apps/frontend/src/pages/servers/index.vue @@ -0,0 +1,3 @@ + diff --git a/apps/frontend/src/pages/servers/manage/[id].vue b/apps/frontend/src/pages/servers/manage/[id].vue new file mode 100644 index 000000000..0e7be2ced --- /dev/null +++ b/apps/frontend/src/pages/servers/manage/[id].vue @@ -0,0 +1,222 @@ + + + + + diff --git a/apps/frontend/src/pages/servers/manage/[id]/backups.vue b/apps/frontend/src/pages/servers/manage/[id]/backups.vue new file mode 100644 index 000000000..211198c7d --- /dev/null +++ b/apps/frontend/src/pages/servers/manage/[id]/backups.vue @@ -0,0 +1,3 @@ + diff --git a/apps/frontend/src/pages/servers/manage/[id]/content.vue b/apps/frontend/src/pages/servers/manage/[id]/content.vue new file mode 100644 index 000000000..810f00b89 --- /dev/null +++ b/apps/frontend/src/pages/servers/manage/[id]/content.vue @@ -0,0 +1,60 @@ + + + diff --git a/apps/frontend/src/pages/servers/manage/[id]/index.vue b/apps/frontend/src/pages/servers/manage/[id]/index.vue new file mode 100644 index 000000000..c14e70ece --- /dev/null +++ b/apps/frontend/src/pages/servers/manage/[id]/index.vue @@ -0,0 +1,158 @@ + + + diff --git a/apps/frontend/src/pages/servers/manage/[id]/options.vue b/apps/frontend/src/pages/servers/manage/[id]/options.vue new file mode 100644 index 000000000..69db4df2f --- /dev/null +++ b/apps/frontend/src/pages/servers/manage/[id]/options.vue @@ -0,0 +1,34 @@ + + + diff --git a/apps/frontend/src/pages/servers/manage/[id]/options/index.vue b/apps/frontend/src/pages/servers/manage/[id]/options/index.vue new file mode 100644 index 000000000..270328af7 --- /dev/null +++ b/apps/frontend/src/pages/servers/manage/[id]/options/index.vue @@ -0,0 +1,34 @@ + + + diff --git a/apps/frontend/src/pages/servers/manage/[id]/options/info.vue b/apps/frontend/src/pages/servers/manage/[id]/options/info.vue new file mode 100644 index 000000000..ff073329e --- /dev/null +++ b/apps/frontend/src/pages/servers/manage/[id]/options/info.vue @@ -0,0 +1,25 @@ + + + diff --git a/apps/frontend/src/pages/servers/manage/[id]/options/properties.vue b/apps/frontend/src/pages/servers/manage/[id]/options/properties.vue new file mode 100644 index 000000000..24288e52d --- /dev/null +++ b/apps/frontend/src/pages/servers/manage/[id]/options/properties.vue @@ -0,0 +1,53 @@ + + + diff --git a/apps/frontend/src/pages/servers/manage/index.vue b/apps/frontend/src/pages/servers/manage/index.vue new file mode 100644 index 000000000..df05c9ab8 --- /dev/null +++ b/apps/frontend/src/pages/servers/manage/index.vue @@ -0,0 +1,162 @@ + + + + + diff --git a/apps/frontend/src/types/servers.ts b/apps/frontend/src/types/servers.ts new file mode 100644 index 000000000..194ccb20d --- /dev/null +++ b/apps/frontend/src/types/servers.ts @@ -0,0 +1,34 @@ +export interface Mod { + id: string + filename: string + modrinth_ids: { + project_id: string + version_id: string + } +} + +export interface Server { + server_id: string + net: { + ip: string + port: number + domain: string + } + modpack: string + game: string + loader: string + version: string + mods: Mod[] +} + +export interface Servers { + servers: Server[] +} + +export interface Stats { + cpu_percent: number + ram_usage_bytes: number + ram_total_bytes: number + storage_usage_bytes: number + storage_total_bytes: number +} diff --git a/apps/frontend/src/utils/common-messages.ts b/apps/frontend/src/utils/common-messages.ts index aa5b69f9e..5540d0bd8 100644 --- a/apps/frontend/src/utils/common-messages.ts +++ b/apps/frontend/src/utils/common-messages.ts @@ -107,6 +107,10 @@ export const commonMessages = defineMessages({ id: "label.scopes", defaultMessage: "Scopes", }, + serversLabel: { + id: "label.servers", + defaultMessage: "Servers", + }, settingsLabel: { id: "label.settings", defaultMessage: "Settings", From 7f9a80382e259df6a14f6331215c7a036082f7a7 Mon Sep 17 00:00:00 2001 From: TheWander02 <48934424+thewander02@users.noreply.github.com> Date: Fri, 12 Jul 2024 20:07:32 -0700 Subject: [PATCH 002/465] chore: migrate icons to packages --- .../src/assets/images/utils/navtabs/home.svg | 3 - .../src/components/ui/icon/CaretRight.vue | 9 -- .../src/components/ui/icon/ContentCube.vue | 16 --- .../components/ui/servers/PoweredByPyro.vue | 2 +- .../components/ui/servers/ServerListing.vue | 26 +--- .../src/components/ui/servers/ServerStats.vue | 131 ++---------------- .../src/pages/servers/manage/[id].vue | 82 +---------- .../src/pages/servers/manage/[id]/content.vue | 15 +- .../src/pages/servers/manage/[id]/index.vue | 31 +---- .../src/pages/servers/manage/[id]/options.vue | 10 +- .../src/pages/servers/manage/index.vue | 17 +-- .../assets/external}/pyro.svg | 0 .../assets/{icons => external}/youtube.svg | 0 .../assets/icons}/cloud.svg | 0 .../navtabs => packages/assets/icons}/cog.svg | 0 packages/assets/icons/cpu.svg | 14 ++ .../assets/icons}/cube.svg | 0 packages/assets/icons/db.svg | 14 ++ packages/assets/icons/loader.svg | 19 +++ packages/assets/icons/test.svg | 14 ++ packages/assets/index.ts | 16 ++- 21 files changed, 110 insertions(+), 309 deletions(-) delete mode 100644 apps/frontend/src/assets/images/utils/navtabs/home.svg delete mode 100644 apps/frontend/src/components/ui/icon/CaretRight.vue delete mode 100644 apps/frontend/src/components/ui/icon/ContentCube.vue rename {apps/frontend/src/assets/images => packages/assets/external}/pyro.svg (100%) rename packages/assets/{icons => external}/youtube.svg (100%) rename {apps/frontend/src/assets/images/utils/navtabs => packages/assets/icons}/cloud.svg (100%) rename {apps/frontend/src/assets/images/utils/navtabs => packages/assets/icons}/cog.svg (100%) create mode 100644 packages/assets/icons/cpu.svg rename {apps/frontend/src/assets/images/utils/navtabs => packages/assets/icons}/cube.svg (100%) create mode 100644 packages/assets/icons/db.svg create mode 100644 packages/assets/icons/loader.svg create mode 100644 packages/assets/icons/test.svg diff --git a/apps/frontend/src/assets/images/utils/navtabs/home.svg b/apps/frontend/src/assets/images/utils/navtabs/home.svg deleted file mode 100644 index b30bd473b..000000000 --- a/apps/frontend/src/assets/images/utils/navtabs/home.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/apps/frontend/src/components/ui/icon/CaretRight.vue b/apps/frontend/src/components/ui/icon/CaretRight.vue deleted file mode 100644 index 3fca78155..000000000 --- a/apps/frontend/src/components/ui/icon/CaretRight.vue +++ /dev/null @@ -1,9 +0,0 @@ - diff --git a/apps/frontend/src/components/ui/icon/ContentCube.vue b/apps/frontend/src/components/ui/icon/ContentCube.vue deleted file mode 100644 index 284a2705b..000000000 --- a/apps/frontend/src/components/ui/icon/ContentCube.vue +++ /dev/null @@ -1,16 +0,0 @@ - diff --git a/apps/frontend/src/components/ui/servers/PoweredByPyro.vue b/apps/frontend/src/components/ui/servers/PoweredByPyro.vue index 658a7e4ff..a560a94e7 100644 --- a/apps/frontend/src/components/ui/servers/PoweredByPyro.vue +++ b/apps/frontend/src/components/ui/servers/PoweredByPyro.vue @@ -6,5 +6,5 @@ diff --git a/apps/frontend/src/components/ui/servers/ServerListing.vue b/apps/frontend/src/components/ui/servers/ServerListing.vue index 21b1b0d0e..224e471eb 100644 --- a/apps/frontend/src/components/ui/servers/ServerListing.vue +++ b/apps/frontend/src/components/ui/servers/ServerListing.vue @@ -8,7 +8,7 @@

test

- +
@@ -23,31 +23,13 @@
- - - - + {{ loader }} {{ version }}
- + {{ mods?.length }} Mod @@ -62,6 +44,8 @@ diff --git a/apps/frontend/src/types/servers.ts b/apps/frontend/src/types/servers.ts index 194ccb20d..fd9b0648c 100644 --- a/apps/frontend/src/types/servers.ts +++ b/apps/frontend/src/types/servers.ts @@ -1,34 +1,34 @@ export interface Mod { - id: string - filename: string + id: string; + filename: string; modrinth_ids: { - project_id: string - version_id: string - } + project_id: string; + version_id: string; + }; } export interface Server { - server_id: string + server_id: string; net: { - ip: string - port: number - domain: string - } - modpack: string - game: string - loader: string - version: string - mods: Mod[] + ip: string; + port: number; + domain: string; + }; + modpack: string; + game: string; + loader: string; + version: string; + mods: Mod[]; } export interface Servers { - servers: Server[] + servers: Server[]; } export interface Stats { - cpu_percent: number - ram_usage_bytes: number - ram_total_bytes: number - storage_usage_bytes: number - storage_total_bytes: number + cpu_percent: number; + ram_usage_bytes: number; + ram_total_bytes: number; + storage_usage_bytes: number; + storage_total_bytes: number; } diff --git a/packages/assets/index.ts b/packages/assets/index.ts index 9cbe1ce78..409982b76 100644 --- a/packages/assets/index.ts +++ b/packages/assets/index.ts @@ -314,4 +314,4 @@ export const CloudIcon = _CloudIcon export const CogIcon = _CogIcon export const CPUIcon = _CPUIcon export const DBIcon = _DBIcon -export const LoaderIcon = _LoaderIcon \ No newline at end of file +export const LoaderIcon = _LoaderIcon From 43422ff997d47429e11aa0b1ab9a17279e0befd2 Mon Sep 17 00:00:00 2001 From: TheWander02 <48934424+thewander02@users.noreply.github.com> Date: Fri, 12 Jul 2024 21:19:01 -0700 Subject: [PATCH 004/465] chore: migrate remaining css colors to tailwind colors --- apps/frontend/src/components/ui/servers/ServerListing.vue | 6 +++--- apps/frontend/src/components/ui/servers/ServerSkeleton.vue | 2 +- apps/frontend/src/components/ui/servers/ServerStats.vue | 6 +++--- apps/frontend/src/pages/servers/manage/[id].vue | 4 ++-- apps/frontend/src/pages/servers/manage/[id]/content.vue | 4 ++-- apps/frontend/src/pages/servers/manage/[id]/index.vue | 2 +- apps/frontend/src/pages/servers/manage/index.vue | 2 +- apps/frontend/tailwind.config.js | 1 + 8 files changed, 14 insertions(+), 13 deletions(-) diff --git a/apps/frontend/src/components/ui/servers/ServerListing.vue b/apps/frontend/src/components/ui/servers/ServerListing.vue index 224e471eb..6887c3c1f 100644 --- a/apps/frontend/src/components/ui/servers/ServerListing.vue +++ b/apps/frontend/src/components/ui/servers/ServerListing.vue @@ -1,7 +1,7 @@ diff --git a/apps/frontend/src/components/ui/servers/ServerStats.vue b/apps/frontend/src/components/ui/servers/ServerStats.vue index 8d80b6cd2..3cc391e45 100644 --- a/apps/frontend/src/components/ui/servers/ServerStats.vue +++ b/apps/frontend/src/components/ui/servers/ServerStats.vue @@ -1,7 +1,7 @@ From 7d51a82fea028541708fb75687d00898e374cf20 Mon Sep 17 00:00:00 2001 From: TheWander02 <48934424+thewander02@users.noreply.github.com> Date: Tue, 23 Jul 2024 23:03:30 -0700 Subject: [PATCH 023/465] feat: working log color parsing, update create server to use new auth --- apps/frontend/package.json | 1 + .../src/components/ui/servers/Log.vue | 58 -------------- .../src/components/ui/servers/LogParser.vue | 56 +++++++++++++ .../src/pages/servers/manage/[id]/index.vue | 4 +- .../src/pages/servers/new/[id]/index.vue | 78 +++++++++++++++---- pnpm-lock.yaml | 17 ++++ 6 files changed, 137 insertions(+), 77 deletions(-) delete mode 100644 apps/frontend/src/components/ui/servers/Log.vue create mode 100644 apps/frontend/src/components/ui/servers/LogParser.vue diff --git a/apps/frontend/package.json b/apps/frontend/package.json index 856f043dc..b4b438e50 100644 --- a/apps/frontend/package.json +++ b/apps/frontend/package.json @@ -38,6 +38,7 @@ "@modrinth/ui": "workspace:*", "@modrinth/utils": "workspace:*", "@vintl/vintl": "^4.4.1", + "ansi-to-html": "^0.7.2", "dayjs": "^1.11.7", "floating-vue": "2.0.0-beta.20", "fuse.js": "^6.6.2", diff --git a/apps/frontend/src/components/ui/servers/Log.vue b/apps/frontend/src/components/ui/servers/Log.vue deleted file mode 100644 index 07ad41208..000000000 --- a/apps/frontend/src/components/ui/servers/Log.vue +++ /dev/null @@ -1,58 +0,0 @@ - - - - - diff --git a/apps/frontend/src/components/ui/servers/LogParser.vue b/apps/frontend/src/components/ui/servers/LogParser.vue new file mode 100644 index 000000000..8238deefc --- /dev/null +++ b/apps/frontend/src/components/ui/servers/LogParser.vue @@ -0,0 +1,56 @@ + + + diff --git a/apps/frontend/src/pages/servers/manage/[id]/index.vue b/apps/frontend/src/pages/servers/manage/[id]/index.vue index e4754cad7..11ccc7cb9 100644 --- a/apps/frontend/src/pages/servers/manage/[id]/index.vue +++ b/apps/frontend/src/pages/servers/manage/[id]/index.vue @@ -32,7 +32,7 @@ style="white-space: pre; word-wrap: break-word; width: 100%; line-height: 170%" >
@@ -52,7 +52,7 @@ import type { Stats, WSAuth, WSEvent } from "~/types/servers"; import { useNotifications } from "@/composables/notifs"; import { defineComponent } from "vue"; import { createVirtualScroller } from "vue-typed-virtual-list"; -import Log from "~/components/ui/servers/Log.vue"; +import LogParser from "~/components/ui/servers/LogParser.vue"; const VirtualScroller = createVirtualScroller(); diff --git a/apps/frontend/src/pages/servers/new/[id]/index.vue b/apps/frontend/src/pages/servers/new/[id]/index.vue index eae524c1b..ff42dbf45 100644 --- a/apps/frontend/src/pages/servers/new/[id]/index.vue +++ b/apps/frontend/src/pages/servers/new/[id]/index.vue @@ -57,24 +57,68 @@ interface IntServer { const createServer = async () => { loading = true; - const server: IntServer = await usePyroFetch( - auth.value.token, - `servers/create`, - 0, - "POST", - "application/json", - { - name: serverName.value, - specs: { - cpu: 4.0, - memory_mb: 8192, - swap_mb: 8192, - }, - source: { - modrinthid: pack.versions.slice(-1)[0], - }, + + let path = "servers/create"; + const version = 0; + const body = { + name: serverName.value, + specs: { + cpu: 4.0, + memory_mb: 8192, + swap_mb: 8192, + }, + source: { + modrinthid: pack.versions.slice(-1)[0], }, - ); + user_id: auth.value.user.id, + }; + const method = "POST"; + + const config = useRuntimeConfig(); + + const timeout = 10000; + let retryAmount = 3; + + let base = import.meta.server ? config.pyroBaseUrl : config.public.pyroBaseUrl; + + if (!base) { + throw new Error( + "Cannot pyrofetch without base url. Make sure to set a PYRO_BASE_URL in environment variables (10001)", + ); + } + + if (base.endsWith("/")) { + base = base.slice(0, -1); + } + + if (path.startsWith("/")) { + path = path.slice(1); + } + + const fullUrl: string = `${base}/modrinth/v${version}/${path}`; + + const request: any = { + method, + headers: { + Accept: "application/json", + "ngrok-skip-browser-warning": "true", + "X-Pinggy-No-Screen": "true", + "X-Master-Key": "3fYRT/6OZ8EO9IzR7aYp2N1ukR3NDrey4/geRvYI9TbYLT1hdAHc8MR0KSjZ2EQ9", + "Access-Control-Allow-Origin": "*", + "Access-Control-Allow-Methods": "*", + "User-Agent": "Pyro/1.0 (https://pyro.host)", + "Content-Type": "application/json", + retry: 0, + Vary: "Accept", + }, + timeout, + retry: retryAmount, + }; + + request.body = JSON.stringify(body); + + const server: IntServer = await $fetch(fullUrl, request); + const serverId = server.uuid; await new Promise((resolve) => setTimeout(resolve, 3000)); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 94e99a79b..fbf5b8cd5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -134,6 +134,9 @@ importers: '@vintl/vintl': specifier: ^4.4.1 version: 4.4.1(typescript@5.5.3)(vue@3.4.31(typescript@5.5.3)) + ansi-to-html: + specifier: ^0.7.2 + version: 0.7.2 dayjs: specifier: ^1.11.7 version: 1.11.11 @@ -2433,6 +2436,11 @@ packages: resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} engines: {node: '>=12'} + ansi-to-html@0.7.2: + resolution: {integrity: sha512-v6MqmEpNlxF+POuyhKkidusCHWWkaLcGRURzivcU3I9tv7k4JVhFcnukrM5Rlk2rUywdZuzYAZ+kbZqWCnfN3g==} + engines: {node: '>=8.0.0'} + hasBin: true + any-promise@1.3.0: resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} @@ -3060,6 +3068,9 @@ packages: resolution: {integrity: sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA==} engines: {node: '>=10.13.0'} + entities@2.2.0: + resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} + entities@3.0.1: resolution: {integrity: sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==} engines: {node: '>=0.12'} @@ -8356,6 +8367,10 @@ snapshots: ansi-styles@6.2.1: {} + ansi-to-html@0.7.2: + dependencies: + entities: 2.2.0 + any-promise@1.3.0: {} anymatch@3.1.3: @@ -8970,6 +8985,8 @@ snapshots: graceful-fs: 4.2.11 tapable: 2.2.1 + entities@2.2.0: {} + entities@3.0.1: {} entities@4.5.0: {} From a81f7a7b2e057830daba10ebb23ca86075828038 Mon Sep 17 00:00:00 2001 From: TheWander02 <48934424+thewander02@users.noreply.github.com> Date: Wed, 24 Jul 2024 21:02:31 -0700 Subject: [PATCH 024/465] feat: switch to servers using a store, various data improvments, backups tab front end imp, display pack img in server list. various fixes --- apps/frontend/nuxt.config.ts | 2 +- apps/frontend/package.json | 2 + .../src/components/ui/servers/PyroLoading.vue | 79 ++++++ .../components/ui/servers/ServerListing.vue | 31 ++- .../src/pages/servers/manage/[id].vue | 102 ++----- .../src/pages/servers/manage/[id]/backups.vue | 256 +++++++++++++++++- .../src/pages/servers/manage/[id]/content.vue | 79 +++--- .../servers/manage/[id]/options/index.vue | 26 +- .../servers/manage/[id]/options/info.vue | 26 +- .../manage/[id]/options/properties.vue | 14 +- .../src/pages/servers/manage/index.vue | 9 +- apps/frontend/src/types/servers.ts | 61 +++++ apps/frontend/stores/servers.ts | 33 +++ pnpm-lock.yaml | 21 ++ 14 files changed, 588 insertions(+), 153 deletions(-) create mode 100644 apps/frontend/src/components/ui/servers/PyroLoading.vue create mode 100644 apps/frontend/stores/servers.ts diff --git a/apps/frontend/nuxt.config.ts b/apps/frontend/nuxt.config.ts index 39c9920a4..7cd5f13e5 100644 --- a/apps/frontend/nuxt.config.ts +++ b/apps/frontend/nuxt.config.ts @@ -337,7 +337,7 @@ export default defineNuxtConfig({ }, }, }, - modules: ["@vintl/nuxt", "@nuxtjs/turnstile"], + modules: ["@vintl/nuxt", "@nuxtjs/turnstile", '@pinia/nuxt',], vintl: { defaultLocale: "en-US", locales: [ diff --git a/apps/frontend/package.json b/apps/frontend/package.json index b4b438e50..11aec6693 100644 --- a/apps/frontend/package.json +++ b/apps/frontend/package.json @@ -37,6 +37,7 @@ "@modrinth/assets": "workspace:*", "@modrinth/ui": "workspace:*", "@modrinth/utils": "workspace:*", + "@pinia/nuxt": "^0.5.1", "@vintl/vintl": "^4.4.1", "ansi-to-html": "^0.7.2", "dayjs": "^1.11.7", @@ -48,6 +49,7 @@ "jszip": "^3.10.1", "markdown-it": "14.1.0", "pathe": "^1.1.2", + "pinia": "^2.1.7", "qrcode.vue": "^3.4.0", "semver": "^7.5.4", "vue-multiselect": "3.0.0-alpha.2", diff --git a/apps/frontend/src/components/ui/servers/PyroLoading.vue b/apps/frontend/src/components/ui/servers/PyroLoading.vue new file mode 100644 index 000000000..63874f027 --- /dev/null +++ b/apps/frontend/src/components/ui/servers/PyroLoading.vue @@ -0,0 +1,79 @@ + + + + + diff --git a/apps/frontend/src/components/ui/servers/ServerListing.vue b/apps/frontend/src/components/ui/servers/ServerListing.vue index 1ce6e2677..388dd9c33 100644 --- a/apps/frontend/src/components/ui/servers/ServerListing.vue +++ b/apps/frontend/src/components/ui/servers/ServerListing.vue @@ -1,10 +1,10 @@ diff --git a/apps/frontend/src/pages/servers/manage/[id].vue b/apps/frontend/src/pages/servers/manage/[id].vue index 2aa58ab59..72f03f782 100644 --- a/apps/frontend/src/pages/servers/manage/[id].vue +++ b/apps/frontend/src/pages/servers/manage/[id].vue @@ -6,7 +6,13 @@ class="mx-auto flex min-h-screen w-full max-w-[1280px] flex-col gap-6 px-4 sm:px-6" >
- +
@@ -100,9 +106,7 @@
-
- -
+
{ - return await usePyroFetch(auth.value.token, `servers/${serverId}`); -}); - -const pid: any = await toRaw(useBaseFetch(`version/${await data.value.modpack}`)); -const project: any = await toRaw(useBaseFetch(`project/${pid.project_id}`)); +await serverStore.fetchServerData(serverId); +const { data, status } = await useLazyAsyncData("specificServer", async () => + serverStore.getServerData(serverId), +); const copyText = (ip: string) => { navigator.clipboard.writeText(ip); }; - - diff --git a/apps/frontend/src/pages/servers/manage/[id]/backups.vue b/apps/frontend/src/pages/servers/manage/[id]/backups.vue index 211198c7d..018f28102 100644 --- a/apps/frontend/src/pages/servers/manage/[id]/backups.vue +++ b/apps/frontend/src/pages/servers/manage/[id]/backups.vue @@ -1,3 +1,257 @@ + + diff --git a/apps/frontend/src/pages/servers/manage/[id]/content.vue b/apps/frontend/src/pages/servers/manage/[id]/content.vue index 3b5a0df32..6372f9a86 100644 --- a/apps/frontend/src/pages/servers/manage/[id]/content.vue +++ b/apps/frontend/src/pages/servers/manage/[id]/content.vue @@ -1,53 +1,58 @@ diff --git a/apps/frontend/src/pages/servers/manage/[id]/options/properties.vue b/apps/frontend/src/pages/servers/manage/[id]/options/properties.vue index 2b7c9adb4..4fc117dfb 100644 --- a/apps/frontend/src/pages/servers/manage/[id]/options/properties.vue +++ b/apps/frontend/src/pages/servers/manage/[id]/options/properties.vue @@ -6,8 +6,9 @@ :key="index" class="mb-4 flex justify-between gap-4" > -
- +
diff --git a/apps/frontend/src/pages/servers/manage/index.vue b/apps/frontend/src/pages/servers/manage/index.vue index 2f97f5803..f064a5162 100644 --- a/apps/frontend/src/pages/servers/manage/index.vue +++ b/apps/frontend/src/pages/servers/manage/index.vue @@ -75,14 +75,17 @@
    -
    +

    No servers found

diff --git a/apps/frontend/src/types/servers.ts b/apps/frontend/src/types/servers.ts index abce2f43b..d51e88df3 100644 --- a/apps/frontend/src/types/servers.ts +++ b/apps/frontend/src/types/servers.ts @@ -7,6 +7,65 @@ export interface Mod { }; } +interface License { + id: string; + name: string; + url: string; +} + +interface DonationUrl { + id: string; + platform: string; + url: string; +} + +interface GalleryItem { + url: string; + featured: boolean; + title: string; + description: string; + created: string; + ordering: number; +} + +interface Project { + slug: string; + title: string; + description: string; + categories: string[]; + client_side: 'required' | 'optional'; + server_side: 'required' | 'optional'; + body: string; + status: 'approved' | 'pending' | 'rejected'; + requested_status: 'approved' | 'pending' | 'rejected'; + additional_categories: string[]; + issues_url: string; + source_url: string; + wiki_url: string; + discord_url: string; + donation_urls: DonationUrl[]; + project_type: 'mod' | 'resourcepack' | 'map' | 'plugin'; // Adjust types as needed + downloads: number; + icon_url: string; + color: number; + thread_id: string; + monetization_status: 'monetized' | 'non-monetized'; + id: string; + team: string; + body_url: string | null; + moderator_message: string | null; + published: string; + updated: string; + approved: string; + queued: string; + followers: number; + license: License; + versions: string[]; + game_versions: string[]; + loaders: string[]; + gallery: GalleryItem[]; +} + export interface Server { server_id: string; name: string; @@ -17,6 +76,8 @@ export interface Server { domain: string; }; modpack: string | null; + modpack_id: string | null; + project: Project | null; game: string; loader: string | null; loader_version: string | null; diff --git a/apps/frontend/stores/servers.ts b/apps/frontend/stores/servers.ts new file mode 100644 index 000000000..7f4eefda9 --- /dev/null +++ b/apps/frontend/stores/servers.ts @@ -0,0 +1,33 @@ +import { defineStore } from 'pinia' +import type { Server } from '~/types/servers' + +// Define the store using Pinia +export const useServerStore = defineStore('servers', { + state: () => ({ + serverData: {} as Record + }), + actions: { + async fetchServerData(serverId: string) { + const auth = await useAuth() // Ensure useAuth is properly typed + let data = await usePyroFetch(auth.value.token, `servers/${serverId}`) + + // Fetch additional project information + const pid: any = await toRaw(useBaseFetch(`version/${await data.modpack}`)) + const project: any = await toRaw(useBaseFetch(`project/${pid.project_id}`)) + + // Update server data + data.modpack_id = pid.id + data.project = project + this.serverData[serverId] = data + }, + updateServerData(serverId: string, data: Partial) { + this.serverData[serverId] = { + ...this.serverData[serverId], + ...data + } + } + }, + getters: { + getServerData: (state) => (serverId: string) => state.serverData[serverId] + } +}) \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index fbf5b8cd5..1c258d45f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -131,6 +131,9 @@ importers: '@modrinth/utils': specifier: workspace:* version: link:../../packages/utils + '@pinia/nuxt': + specifier: ^0.5.1 + version: 0.5.1(magicast@0.3.4)(rollup@4.18.0)(typescript@5.5.3)(vue@3.4.31(typescript@5.5.3)) '@vintl/vintl': specifier: ^4.4.1 version: 4.4.1(typescript@5.5.3)(vue@3.4.31(typescript@5.5.3)) @@ -164,6 +167,9 @@ importers: pathe: specifier: ^1.1.2 version: 1.1.2 + pinia: + specifier: ^2.1.7 + version: 2.1.7(typescript@5.5.3)(vue@3.4.31(typescript@5.5.3)) qrcode.vue: specifier: ^3.4.0 version: 3.4.1(vue@3.4.31(typescript@5.5.3)) @@ -1657,6 +1663,9 @@ packages: resolution: {integrity: sha512-HNjmfLQEVRZmHRET336f20H/8kOozUGwk7yajvsonjNxbj2wBTK1WsQuHkD5yYh9RxFGL2EyDHryOihOwUoKDA==} engines: {node: '>= 10.0.0'} + '@pinia/nuxt@0.5.1': + resolution: {integrity: sha512-6wT6TqY81n+7/x3Yhf0yfaJVKkZU42AGqOR0T3+UvChcaOJhSma7OWPN64v+ptYlznat+fS1VTwNAcbi2lzHnw==} + '@pkgjs/parseargs@0.11.0': resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} @@ -7411,6 +7420,18 @@ snapshots: '@parcel/watcher-win32-ia32': 2.4.1 '@parcel/watcher-win32-x64': 2.4.1 + '@pinia/nuxt@0.5.1(magicast@0.3.4)(rollup@4.18.0)(typescript@5.5.3)(vue@3.4.31(typescript@5.5.3))': + dependencies: + '@nuxt/kit': 3.12.3(magicast@0.3.4)(rollup@4.18.0) + pinia: 2.1.7(typescript@5.5.3)(vue@3.4.31(typescript@5.5.3)) + transitivePeerDependencies: + - '@vue/composition-api' + - magicast + - rollup + - supports-color + - typescript + - vue + '@pkgjs/parseargs@0.11.0': optional: true From 023fd6eb01e86a78d9e6c7e7cee17f6659ea5236 Mon Sep 17 00:00:00 2001 From: TheWander02 <48934424+thewander02@users.noreply.github.com> Date: Thu, 25 Jul 2024 16:36:48 -0700 Subject: [PATCH 025/465] feat: loader icon, etc --- apps/frontend/src/components/ui/CopyCode.vue | 3 +- .../src/components/ui/servers/LoaderIcon.vue | 174 ++++++++++++++++++ .../components/ui/servers/ServerListing.vue | 5 +- .../src/components/ui/servers/ServerStats.vue | 13 +- .../src/pages/servers/manage/[id].vue | 4 +- .../manage/[id]/options/properties.vue | 90 ++++----- 6 files changed, 235 insertions(+), 54 deletions(-) create mode 100644 apps/frontend/src/components/ui/servers/LoaderIcon.vue diff --git a/apps/frontend/src/components/ui/CopyCode.vue b/apps/frontend/src/components/ui/CopyCode.vue index e42fe01ee..7161a3a6b 100644 --- a/apps/frontend/src/components/ui/CopyCode.vue +++ b/apps/frontend/src/components/ui/CopyCode.vue @@ -45,7 +45,7 @@ export default { margin: 0; padding: 0.25rem 0.5rem; background-color: var(--color-code-bg); - width: min-content; + width: fit-content; border-radius: 10px; user-select: text; transition: @@ -55,7 +55,6 @@ export default { outline 0.2s ease-in-out; span { - max-width: 10rem; overflow: hidden; text-overflow: ellipsis; } diff --git a/apps/frontend/src/components/ui/servers/LoaderIcon.vue b/apps/frontend/src/components/ui/servers/LoaderIcon.vue new file mode 100644 index 000000000..7e4120b75 --- /dev/null +++ b/apps/frontend/src/components/ui/servers/LoaderIcon.vue @@ -0,0 +1,174 @@ + + + diff --git a/apps/frontend/src/components/ui/servers/ServerListing.vue b/apps/frontend/src/components/ui/servers/ServerListing.vue index 388dd9c33..9f968fca1 100644 --- a/apps/frontend/src/components/ui/servers/ServerListing.vue +++ b/apps/frontend/src/components/ui/servers/ServerListing.vue @@ -47,7 +47,7 @@
- + {{ loader }} {{ loader_version }}
@@ -68,7 +68,8 @@ diff --git a/apps/frontend/src/pages/servers/manage/[id].vue b/apps/frontend/src/pages/servers/manage/[id].vue index 72f03f782..e840603e9 100644 --- a/apps/frontend/src/pages/servers/manage/[id].vue +++ b/apps/frontend/src/pages/servers/manage/[id].vue @@ -37,7 +37,7 @@
- + {{ data && data.loader && data.loader.charAt(0).toUpperCase() + data.loader.slice(1) @@ -224,11 +224,11 @@ import { CopyIcon, PlayIcon, BoxIcon, - LoaderIcon, LeftArrowIcon, } from "@modrinth/assets"; import { useServerStore } from "~~/stores/servers"; import PyroLoading from "~/components/ui/servers/PyroLoading.vue"; +import LoaderIcon from "~/components/ui/servers/LoaderIcon.vue"; const route = useNativeRoute(); const serverId = route.params.id as string; diff --git a/apps/frontend/src/pages/servers/manage/[id]/options/properties.vue b/apps/frontend/src/pages/servers/manage/[id]/options/properties.vue index 4fc117dfb..093a8d3ac 100644 --- a/apps/frontend/src/pages/servers/manage/[id]/options/properties.vue +++ b/apps/frontend/src/pages/servers/manage/[id]/options/properties.vue @@ -1,52 +1,58 @@ diff --git a/apps/frontend/src/pages/servers/manage/[id]/content.vue b/apps/frontend/src/pages/servers/manage/[id]/content.vue index 6372f9a86..242c0b159 100644 --- a/apps/frontend/src/pages/servers/manage/[id]/content.vue +++ b/apps/frontend/src/pages/servers/manage/[id]/content.vue @@ -41,7 +41,7 @@ diff --git a/apps/frontend/src/pages/servers/manage/index.vue b/apps/frontend/src/pages/servers/manage/index.vue index 00f480e70..cddc0c256 100644 --- a/apps/frontend/src/pages/servers/manage/index.vue +++ b/apps/frontend/src/pages/servers/manage/index.vue @@ -88,15 +88,12 @@ :server_id="server.server_id" :name="server.name" :state="server.state" - :net="server.net" - :modpack="server.modpack" :game="server.game" :loader="server.loader" :loader_version="server.loader_version" :mc_version="server.mc_version" - :mods="server.mods" - :modpack_id="server.modpack_id" :project="server.project" + :mods="server.mods" />
diff --git a/apps/frontend/src/pages/servers/new/[id]/index.vue b/apps/frontend/src/pages/servers/new/[id]/index.vue index 8909c80d3..2469a2909 100644 --- a/apps/frontend/src/pages/servers/new/[id]/index.vue +++ b/apps/frontend/src/pages/servers/new/[id]/index.vue @@ -58,14 +58,14 @@ interface IntServer { const createServer = async () => { loading = true; - let path = "servers/create"; + let path = "create"; const version = 0; const body = { name: serverName.value, specs: { cpu: 4.0, - memory_mb: 8192, - swap_mb: 8192, + memory_mb: 4192, + swap_mb: 4192, }, source: { modrinthid: pack.versions.slice(-1)[0], diff --git a/apps/frontend/src/stores/servers.ts b/apps/frontend/src/stores/servers.ts index 7f4eefda9..14670831c 100644 --- a/apps/frontend/src/stores/servers.ts +++ b/apps/frontend/src/stores/servers.ts @@ -8,16 +8,17 @@ export const useServerStore = defineStore('servers', { }), actions: { async fetchServerData(serverId: string) { - const auth = await useAuth() // Ensure useAuth is properly typed + const auth = await useAuth() let data = await usePyroFetch(auth.value.token, `servers/${serverId}`) // Fetch additional project information - const pid: any = await toRaw(useBaseFetch(`version/${await data.modpack}`)) - const project: any = await toRaw(useBaseFetch(`project/${pid.project_id}`)) - - // Update server data - data.modpack_id = pid.id - data.project = project + if (data.modpack) { + const pid: any = await toRaw(useBaseFetch(`version/${await data.modpack}`)) + const project: any = await toRaw(useBaseFetch(`project/${pid.project_id}`)) + // Update server data + data.modpack_id = pid.id + data.project = project + } this.serverData[serverId] = data }, updateServerData(serverId: string, data: Partial) { From dede5cb3c7a40bd11e8b0092751ed1b3a2751f4a Mon Sep 17 00:00:00 2001 From: TheWander02 <48934424+thewander02@users.noreply.github.com> Date: Fri, 2 Aug 2024 23:19:56 -0700 Subject: [PATCH 029/465] feat: downloading modpacks, various changes and fixes --- apps/frontend/src/pages/servers/manage/[id].vue | 3 +-- .../src/pages/servers/manage/[id]/backups.vue | 14 ++++++++++++-- apps/frontend/src/pages/servers/new/[id]/index.vue | 5 +++-- 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/apps/frontend/src/pages/servers/manage/[id].vue b/apps/frontend/src/pages/servers/manage/[id].vue index 762e89c77..de4ed3e38 100644 --- a/apps/frontend/src/pages/servers/manage/[id].vue +++ b/apps/frontend/src/pages/servers/manage/[id].vue @@ -42,8 +42,7 @@ {{ data && data.loader && data.loader.charAt(0).toUpperCase() + data.loader.slice(1) }} - {{ data?.loader_version }} +
diff --git a/apps/frontend/src/pages/servers/manage/[id]/backups.vue b/apps/frontend/src/pages/servers/manage/[id]/backups.vue index 8d8faac9c..e0c898b3f 100644 --- a/apps/frontend/src/pages/servers/manage/[id]/backups.vue +++ b/apps/frontend/src/pages/servers/manage/[id]/backups.vue @@ -168,7 +168,10 @@
{{ backup.name }}
-
+
Latest
@@ -184,8 +187,9 @@ { id: 'delete', action: () => deleteBackupModal.show(), color: 'red' }, ]" direction="right" + class="bg-transparent" > - + @@ -234,6 +238,8 @@ const { data: backupsData, status: backupsStatus } = await useLazyAsyncData( "backupsData", async () => usePyroFetch(auth.value.token, `servers/${serverId}/backups`), ); +const latestBackup = backupsData.value?.reduce((a, b) => (a.created_at > b.created_at ? a : b)); +backupsData.value?.sort((a, b) => (a.created_at > b.created_at ? -1 : 1)); const createBackupModal = ref(null); const renameBackupModal = ref(null); @@ -302,5 +308,9 @@ const initiateDownload = async (backupId: string) => { "GET", "application/json", ); + const a = document.createElement("a"); + a.href = downloadurl.download_url; + a.download = "backup.zip"; + a.click(); }; diff --git a/apps/frontend/src/pages/servers/new/[id]/index.vue b/apps/frontend/src/pages/servers/new/[id]/index.vue index 2469a2909..69f7a1e0a 100644 --- a/apps/frontend/src/pages/servers/new/[id]/index.vue +++ b/apps/frontend/src/pages/servers/new/[id]/index.vue @@ -58,7 +58,7 @@ interface IntServer { const createServer = async () => { loading = true; - let path = "create"; + let path = "servers/create"; const version = 0; const body = { name: serverName.value, @@ -68,7 +68,8 @@ const createServer = async () => { swap_mb: 4192, }, source: { - modrinthid: pack.versions.slice(-1)[0], + project_id: packId, + version_id: pack.versions.slice(-1)[0], }, user_id: auth.value.user.id, }; From 41edbc077a9330ab91d472ae4a87b387bf37e15e Mon Sep 17 00:00:00 2001 From: TheWander02 <48934424+thewander02@users.noreply.github.com> Date: Sat, 3 Aug 2024 15:45:35 -0700 Subject: [PATCH 030/465] chore: fix case to be sentence casing --- .../src/components/ui/servers/ServerStats.vue | 10 +++++----- .../frontend/src/pages/servers/manage/[id].vue | 2 +- .../src/pages/servers/manage/[id]/backups.vue | 18 +++++++++--------- .../src/pages/servers/manage/[id]/content.vue | 2 +- .../src/pages/servers/manage/[id]/index.vue | 8 ++++---- 5 files changed, 20 insertions(+), 20 deletions(-) diff --git a/apps/frontend/src/components/ui/servers/ServerStats.vue b/apps/frontend/src/components/ui/servers/ServerStats.vue index 33e0ca16a..8ada5a5be 100644 --- a/apps/frontend/src/components/ui/servers/ServerStats.vue +++ b/apps/frontend/src/components/ui/servers/ServerStats.vue @@ -13,7 +13,7 @@
-

CPU Usage

+

CPU usage

@@ -46,7 +46,7 @@
-

Memory Usage

+

Memory usage

@@ -75,7 +75,7 @@ -

Storage Usage

+

Storage usage

@@ -87,11 +87,11 @@ class="flex h-5 flex-row items-center gap-2 text-sm" > -

Server Properties

+

Server properties

-

Paper Configuration

+

Paper configuration

diff --git a/apps/frontend/src/pages/servers/manage/[id].vue b/apps/frontend/src/pages/servers/manage/[id].vue index de4ed3e38..b4543abff 100644 --- a/apps/frontend/src/pages/servers/manage/[id].vue +++ b/apps/frontend/src/pages/servers/manage/[id].vue @@ -17,7 +17,7 @@
- All Servers + All servers

diff --git a/apps/frontend/src/pages/servers/manage/[id]/backups.vue b/apps/frontend/src/pages/servers/manage/[id]/backups.vue index e0c898b3f..2c6981b15 100644 --- a/apps/frontend/src/pages/servers/manage/[id]/backups.vue +++ b/apps/frontend/src/pages/servers/manage/[id]/backups.vue @@ -12,7 +12,7 @@ size="sm" alt="Server Icon" /> -
Create Backup
+
Create backup
- + @@ -50,7 +50,7 @@ size="sm" alt="Server Icon" /> -
Rename Backup
+
Rename backup
- + @@ -85,7 +85,7 @@ size="sm" alt="Server Icon" /> -
Restore Backup
+
Restore backup
- + @@ -119,7 +119,7 @@ size="sm" alt="Server Icon" /> -
Delete Backup
+
Delete backup
- + @@ -154,7 +154,7 @@ {{ data.backup_quota - data.used_backup_quota }} Slots avaliable - + diff --git a/apps/frontend/src/pages/servers/manage/[id]/content.vue b/apps/frontend/src/pages/servers/manage/[id]/content.vue index 242c0b159..83b178c51 100644 --- a/apps/frontend/src/pages/servers/manage/[id]/content.vue +++ b/apps/frontend/src/pages/servers/manage/[id]/content.vue @@ -5,7 +5,7 @@

- Current Instance + Current instance

From 048a44f13873dad04fd3522475336b8c6797c1ac Mon Sep 17 00:00:00 2001 From: TheWander02 <48934424+thewander02@users.noreply.github.com> Date: Sun, 4 Aug 2024 17:19:27 -0700 Subject: [PATCH 031/465] fix: power buttons --- apps/frontend/src/pages/servers/manage/[id]/index.vue | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/apps/frontend/src/pages/servers/manage/[id]/index.vue b/apps/frontend/src/pages/servers/manage/[id]/index.vue index 62f9cf9d7..84196fb81 100644 --- a/apps/frontend/src/pages/servers/manage/[id]/index.vue +++ b/apps/frontend/src/pages/servers/manage/[id]/index.vue @@ -88,17 +88,18 @@ type TPowerAction = "restart" | "start" | "stop" | "kill"; const isActioning = ref(false); const sendPowerAction = async (action: TPowerAction) => { + console.log("Sending power action", action); isActioning.value = true; const actionName = action.charAt(0).toUpperCase() + action.slice(1); // @ts-ignore app.$notify({ group: "server", title: `${actionName}ing server`, - text: `Your server is now ${actionName.toLow()}ing, this may take a few moments`, + text: `Your server is now ${actionName}ing, this may take a few moments`, type: "success", }); await usePyroFetch(auth.value.token, `servers/${serverId}/power`, 0, "POST", "application/json", { - action: action, + action: actionName, }); isActioning.value = false; }; @@ -143,7 +144,7 @@ const stats = ref({ const connectWebSocket = async () => { const wsAuth = await usePyroFetch(auth.value.token, `servers/${serverId}/ws`); - socket = new WebSocket(`ws://103.114.160.194:6527/v0/ws`); + socket = new WebSocket(`ws://103.114.160.194:6443/v0/ws`); await reauth(); socket.onmessage = (event) => { From 27d9dce805dfc51cd212e317d134d0a069bb555f Mon Sep 17 00:00:00 2001 From: fero Date: Sun, 4 Aug 2024 18:14:27 -0700 Subject: [PATCH 032/465] feat: scroll to bottom of console on interval --- .../src/pages/servers/manage/[id]/index.vue | 35 +++++++------------ 1 file changed, 12 insertions(+), 23 deletions(-) diff --git a/apps/frontend/src/pages/servers/manage/[id]/index.vue b/apps/frontend/src/pages/servers/manage/[id]/index.vue index 84196fb81..02b8200e1 100644 --- a/apps/frontend/src/pages/servers/manage/[id]/index.vue +++ b/apps/frontend/src/pages/servers/manage/[id]/index.vue @@ -27,6 +27,7 @@ >
-
@@ -50,7 +48,6 @@ import { ExpandIcon, UpdatedIcon } from "@modrinth/assets"; import { Button } from "@modrinth/ui"; import type { Stats, WSAuth, WSEvent } from "~/types/servers"; import { useNotifications } from "@/composables/notifs"; -import { defineComponent } from "vue"; import { createVirtualScroller } from "vue-typed-virtual-list"; import LogParser from "~/components/ui/servers/LogParser.vue"; @@ -59,31 +56,15 @@ const VirtualScroller = createVirtualScroller(); const app = useNuxtApp(); const notifications = useNotifications(); const isFullScreen = ref(false); +type VirtualListInstance = InstanceType; +const scroller = ref(null); const config = useRuntimeConfig(); const route = useNativeRoute(); -// eslint-disable-next-line @typescript-eslint/no-unused-vars + const serverId = route.params.id; const auth = await useAuth(); -const toggleFullScreen = () => { - const consoleElement = document.querySelector(".console-container"); - const conElement = document.getElementById("console"); - if (!consoleElement || !conElement) return; - - if (!document.fullscreenElement) { - consoleElement.requestFullscreen().then(() => { - isFullScreen.value = true; - }); - conElement.style.height = "100%"; - } else { - document.exitFullscreen().then(() => { - isFullScreen.value = false; - }); - conElement.style.height = "300px"; - } -}; - type TPowerAction = "restart" | "start" | "stop" | "kill"; const isActioning = ref(false); @@ -187,6 +168,14 @@ const connectWebSocket = async () => { }; }; +onMounted(() => { + setInterval(() => { + if (scroller.value) { + scroller.value.scrollTo(consoleOutput.value.length - 1); + } + }, 500); +}); + onMounted(() => { connectWebSocket(); }); From 393e4058aa90c66937b197b59d9b6fbbea340e44 Mon Sep 17 00:00:00 2001 From: fero Date: Sun, 4 Aug 2024 19:00:24 -0700 Subject: [PATCH 033/465] feat: refactor ws logic, add online indicator, reactive power buttons, bug fixes and performance improvements --- .../src/pages/servers/manage/[id]/index.vue | 184 +++++++++++------- 1 file changed, 119 insertions(+), 65 deletions(-) diff --git a/apps/frontend/src/pages/servers/manage/[id]/index.vue b/apps/frontend/src/pages/servers/manage/[id]/index.vue index 02b8200e1..ec9759605 100644 --- a/apps/frontend/src/pages/servers/manage/[id]/index.vue +++ b/apps/frontend/src/pages/servers/manage/[id]/index.vue @@ -1,24 +1,65 @@ From afbf4a0791d85987ee8fb940667ba0245e46a01f Mon Sep 17 00:00:00 2001 From: fero Date: Sun, 4 Aug 2024 19:01:23 -0700 Subject: [PATCH 034/465] fix(serverslist): bug fixes and performance improvements --- apps/frontend/src/pages/servers/manage/index.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/frontend/src/pages/servers/manage/index.vue b/apps/frontend/src/pages/servers/manage/index.vue index cddc0c256..b905a8af1 100644 --- a/apps/frontend/src/pages/servers/manage/index.vue +++ b/apps/frontend/src/pages/servers/manage/index.vue @@ -74,7 +74,7 @@

No servers found

-

- + + Get Started + + From 4e1701b9b8431d8fd5cd443a00183c21972d2938 Mon Sep 17 00:00:00 2001 From: Evan Song Date: Fri, 6 Sep 2024 15:08:08 -0700 Subject: [PATCH 212/465] chore: set body and layout backgrounds to accent-contrast to match page theme --- apps/frontend/src/pages/servers/index.vue | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/apps/frontend/src/pages/servers/index.vue b/apps/frontend/src/pages/servers/index.vue index 2f6edde48..394a045e2 100644 --- a/apps/frontend/src/pages/servers/index.vue +++ b/apps/frontend/src/pages/servers/index.vue @@ -87,7 +87,24 @@ From 28e69bc31648a290bef07aaa73e84756332e5d52 Mon Sep 17 00:00:00 2001 From: Evan Song Date: Sat, 7 Sep 2024 09:51:15 -0700 Subject: [PATCH 217/465] feat: marketing meta tags --- apps/frontend/src/pages/servers/index.vue | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/apps/frontend/src/pages/servers/index.vue b/apps/frontend/src/pages/servers/index.vue index acd6bc263..13138c8d4 100644 --- a/apps/frontend/src/pages/servers/index.vue +++ b/apps/frontend/src/pages/servers/index.vue @@ -196,8 +196,8 @@

Experience the fastest, most reliable hosting

- DDoS protection built-in. 99.999% uptime guarantee. The most powerful hardware. - Powered by Pyro's custom-built software. + DDoS protection built-in. 99.999% uptime. SSDs. Ryzen 9s. Powered by Pyro's custom + software that keeps your server running smoothly.

@@ -240,8 +240,8 @@

Backups included

- Never lose your progress. Backup your server up to 15 times. Restore from any backup - with a single click. + Backup your server up to 15 times and store them forever. Restore your progress at any + time with a single click. Just like a time machine.

+
@@ -276,6 +277,17 @@ import { ref, computed, onMounted, onUnmounted } from "vue"; import { ButtonStyled } from "@modrinth/ui"; +const title = "Modrinth Servers"; +const description = + "Start your own Minecraft server directly in the Modrinth app. Play your favorite mods, plugins, and datapacks — without the hassle of setup."; + +useSeoMeta({ + title, + description, + ogTitle: title, + ogDescription: description, +}); + const words = ["friends", "medieval-masters", "create-server", "mega-smp", "spookypack"]; const currentWordIndex = ref(0); const currentText = ref(""); From a25ffb24a64aa3dd83339cf5f803a0671ded0912 Mon Sep 17 00:00:00 2001 From: Evan Song Date: Sat, 7 Sep 2024 09:52:08 -0700 Subject: [PATCH 218/465] bug fixes and performance improvements --- apps/frontend/src/pages/servers/index.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/frontend/src/pages/servers/index.vue b/apps/frontend/src/pages/servers/index.vue index 13138c8d4..6d42dd44a 100644 --- a/apps/frontend/src/pages/servers/index.vue +++ b/apps/frontend/src/pages/servers/index.vue @@ -245,7 +245,7 @@
Date: Sat, 7 Sep 2024 09:54:07 -0700 Subject: [PATCH 219/465] chore: use tw for section bgs --- apps/frontend/src/pages/servers/index.vue | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/apps/frontend/src/pages/servers/index.vue b/apps/frontend/src/pages/servers/index.vue index 6d42dd44a..c48464e16 100644 --- a/apps/frontend/src/pages/servers/index.vue +++ b/apps/frontend/src/pages/servers/index.vue @@ -71,7 +71,9 @@
-
+
-
+
{ ); } -.section-hero { - background: radial-gradient( - 65% 50% at 50% -10%, - var(--color-brand-highlight) 0%, - var(--color-accent-contrast) 100% - ); -} - .faded-brand-line { background: linear-gradient(to right, var(--color-brand-highlight), transparent); } From b5a2e1e4cab814f1e28700476053f7d9ed1ebdc7 Mon Sep 17 00:00:00 2001 From: Evan Song Date: Sat, 7 Sep 2024 10:17:56 -0700 Subject: [PATCH 220/465] feat: marketing 3 --- apps/frontend/src/pages/servers/index.vue | 33 +++++++++++++++++++---- 1 file changed, 28 insertions(+), 5 deletions(-) diff --git a/apps/frontend/src/pages/servers/index.vue b/apps/frontend/src/pages/servers/index.vue index c48464e16..1c04d0c70 100644 --- a/apps/frontend/src/pages/servers/index.vue +++ b/apps/frontend/src/pages/servers/index.vue @@ -1,5 +1,5 @@ - diff --git a/apps/frontend/src/components/ui/servers/ServerGameLabel.vue b/apps/frontend/src/components/ui/servers/ServerGameLabel.vue index f191e701b..3d5f60a38 100644 --- a/apps/frontend/src/components/ui/servers/ServerGameLabel.vue +++ b/apps/frontend/src/components/ui/servers/ServerGameLabel.vue @@ -7,20 +7,9 @@
- diff --git a/apps/frontend/src/components/ui/servers/ServerListing.vue b/apps/frontend/src/components/ui/servers/ServerListing.vue index e61788f40..1156d3f2b 100644 --- a/apps/frontend/src/components/ui/servers/ServerListing.vue +++ b/apps/frontend/src/components/ui/servers/ServerListing.vue @@ -27,7 +27,7 @@ :loader="loader!" :loader-version="loader_version ?? ''" /> - +
diff --git a/apps/frontend/src/components/ui/servers/ServerLoaderLabel.vue b/apps/frontend/src/components/ui/servers/ServerLoaderLabel.vue index f6dc57bf3..e731533f1 100644 --- a/apps/frontend/src/components/ui/servers/ServerLoaderLabel.vue +++ b/apps/frontend/src/components/ui/servers/ServerLoaderLabel.vue @@ -10,20 +10,9 @@ - diff --git a/apps/frontend/src/components/ui/servers/ServerModLabel.vue b/apps/frontend/src/components/ui/servers/ServerModLabel.vue index f7050f6b0..74336bb7f 100644 --- a/apps/frontend/src/components/ui/servers/ServerModLabel.vue +++ b/apps/frontend/src/components/ui/servers/ServerModLabel.vue @@ -12,28 +12,14 @@ - From 3696dfbec098226b9e075ff85dea1be47605b5ab Mon Sep 17 00:00:00 2001 From: Evan Song Date: Sun, 8 Sep 2024 23:57:43 -0700 Subject: [PATCH 250/465] fix padding --- apps/frontend/src/pages/servers/manage/index.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/frontend/src/pages/servers/manage/index.vue b/apps/frontend/src/pages/servers/manage/index.vue index 0b2309260..60727a53e 100644 --- a/apps/frontend/src/pages/servers/manage/index.vue +++ b/apps/frontend/src/pages/servers/manage/index.vue @@ -1,7 +1,7 @@ diff --git a/apps/frontend/src/pages/servers/manage/[id]/content/index.vue b/apps/frontend/src/pages/servers/manage/[id]/content/index.vue index b646cbac0..cc340bc4c 100644 --- a/apps/frontend/src/pages/servers/manage/[id]/content/index.vue +++ b/apps/frontend/src/pages/servers/manage/[id]/content/index.vue @@ -1,54 +1 @@ - - - + diff --git a/apps/frontend/src/pages/servers/manage/[id]/content/files.vue b/apps/frontend/src/pages/servers/manage/[id]/content/mods.vue similarity index 100% rename from apps/frontend/src/pages/servers/manage/[id]/content/files.vue rename to apps/frontend/src/pages/servers/manage/[id]/content/mods.vue diff --git a/apps/frontend/src/pages/servers/manage/[id]/files.vue b/apps/frontend/src/pages/servers/manage/[id]/files.vue new file mode 100644 index 000000000..485c1f2b9 --- /dev/null +++ b/apps/frontend/src/pages/servers/manage/[id]/files.vue @@ -0,0 +1,69 @@ + + + diff --git a/apps/frontend/src/pages/servers/manage/[id]/options/properties.vue b/apps/frontend/src/pages/servers/manage/[id]/options/properties.vue index e79022be0..80226b4cd 100644 --- a/apps/frontend/src/pages/servers/manage/[id]/options/properties.vue +++ b/apps/frontend/src/pages/servers/manage/[id]/options/properties.vue @@ -56,7 +56,7 @@

Config not available

- We couldent find a config, make sure you have started your server at least once.
+ We couldn't find a config, make sure you have started your server at least once.
If this issue persists, please contact support.
From 3f0e0c4daaa5a263d0acc9c8e2e402fff618f192 Mon Sep 17 00:00:00 2001 From: TheWander02 <48934424+thewander02@users.noreply.github.com> Date: Wed, 11 Sep 2024 11:37:29 -0700 Subject: [PATCH 254/465] fix(frontend): oops --- apps/frontend/src/components/ui/servers/ServerSidebar.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/frontend/src/components/ui/servers/ServerSidebar.vue b/apps/frontend/src/components/ui/servers/ServerSidebar.vue index 9cce01910..0ab3b74d1 100644 --- a/apps/frontend/src/components/ui/servers/ServerSidebar.vue +++ b/apps/frontend/src/components/ui/servers/ServerSidebar.vue @@ -1,6 +1,6 @@ + + diff --git a/apps/app-frontend/src/store/servers.ts b/apps/app-frontend/src/store/servers.ts index 75fc19002..8a237166d 100644 --- a/apps/app-frontend/src/store/servers.ts +++ b/apps/app-frontend/src/store/servers.ts @@ -97,9 +97,11 @@ export const useServerStore = defineStore('servers', { } }, - async requestWebsocket(serverId: string) { + async requestWebsocket(auth: string, serverId: string) { try { - return await usePyroFetch(`servers/${serverId}/ws`) + return await usePyroFetch(`servers/${serverId}/ws`, { + session: auth, + }) } catch (error) { console.error('Error requesting websocket:', error) throw error diff --git a/apps/app/capabilities/plugins.json b/apps/app/capabilities/plugins.json index 126febf02..52c27ae43 100644 --- a/apps/app/capabilities/plugins.json +++ b/apps/app/capabilities/plugins.json @@ -2,9 +2,7 @@ "identifier": "plugins", "description": "", "local": true, - "windows": [ - "main" - ], + "windows": ["main"], "permissions": [ "dialog:allow-open", "dialog:allow-confirm", @@ -21,6 +19,7 @@ "window-state:default", "window-state:allow-restore-state", "window-state:allow-save-window-state", + "websocket:default", "auth:default", "import:default", diff --git a/apps/app/gen/schemas/capabilities.json b/apps/app/gen/schemas/capabilities.json index 797ab23f5..2d4c35cfa 100644 --- a/apps/app/gen/schemas/capabilities.json +++ b/apps/app/gen/schemas/capabilities.json @@ -1 +1 @@ -{"ads":{"identifier":"ads","description":"","remote":{"urls":["https://modrinth.com/*","http://localhost:3000/*"]},"local":false,"webviews":["ads-window"],"permissions":["ads:default"]},"core":{"identifier":"core","description":"","local":true,"windows":["main"],"permissions":["core:default","core:path:default","core:event:default","core:window:default","core:app:default","core:resources:default","core:menu:default","core:tray:default","core:window:allow-create","core:window:allow-maximize","core:window:allow-toggle-maximize","core:window:allow-unmaximize","core:window:allow-minimize","core:window:allow-unminimize","core:window:allow-show","core:window:allow-hide","core:window:allow-close","core:window:allow-set-decorations","core:window:allow-start-dragging","core:webview:allow-set-webview-zoom"]},"plugins":{"identifier":"plugins","description":"","local":true,"windows":["main"],"permissions":["dialog:allow-open","dialog:allow-confirm","shell:allow-open","os:allow-platform","os:allow-version","os:allow-os-type","os:allow-family","os:allow-arch","os:allow-exe-extension","os:allow-locale","os:allow-hostname","deep-link:default","window-state:default","window-state:allow-restore-state","window-state:allow-save-window-state","auth:default","import:default","jre:default","logs:default","metadata:default","mr-auth:default","profile-create:default","pack:default","process:default","profile:default","cache:default","settings:default","tags:default","utils:default","ads:default"]},"updater":{"identifier":"updater","description":"","local":true,"windows":["main"],"permissions":["updater:default"]}} \ No newline at end of file +{"ads":{"identifier":"ads","description":"","remote":{"urls":["https://modrinth.com/*","http://localhost:3000/*"]},"local":false,"webviews":["ads-window"],"permissions":["ads:default"]},"core":{"identifier":"core","description":"","local":true,"windows":["main"],"permissions":["core:default","core:path:default","core:event:default","core:window:default","core:app:default","core:resources:default","core:menu:default","core:tray:default","core:window:allow-create","core:window:allow-maximize","core:window:allow-toggle-maximize","core:window:allow-unmaximize","core:window:allow-minimize","core:window:allow-unminimize","core:window:allow-show","core:window:allow-hide","core:window:allow-close","core:window:allow-set-decorations","core:window:allow-start-dragging","core:webview:allow-set-webview-zoom"]},"plugins":{"identifier":"plugins","description":"","local":true,"windows":["main"],"permissions":["dialog:allow-open","dialog:allow-confirm","shell:allow-open","os:allow-platform","os:allow-version","os:allow-os-type","os:allow-family","os:allow-arch","os:allow-exe-extension","os:allow-locale","os:allow-hostname","deep-link:default","window-state:default","window-state:allow-restore-state","window-state:allow-save-window-state","websocket:default","auth:default","import:default","jre:default","logs:default","metadata:default","mr-auth:default","profile-create:default","pack:default","process:default","profile:default","cache:default","settings:default","tags:default","utils:default","ads:default"]},"updater":{"identifier":"updater","description":"","local":true,"windows":["main"],"permissions":["updater:default"]}} \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2c840eeb9..08fde211d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -70,6 +70,9 @@ importers: '@vintl/vintl': specifier: ^4.4.1 version: 4.4.1(typescript@5.5.4)(vue@3.4.31(typescript@5.5.4)) + ansi-to-html: + specifier: ^0.7.2 + version: 0.7.2 dayjs: specifier: ^1.11.10 version: 1.11.11 @@ -100,6 +103,9 @@ importers: vue-virtual-scroller: specifier: v2.0.0-beta.8 version: 2.0.0-beta.8(vue@3.4.31(typescript@5.5.4)) + vue3-apexcharts: + specifier: ^1.6.0 + version: 1.6.0(apexcharts@3.49.2)(vue@3.4.31(typescript@5.5.4)) devDependencies: '@eslint/compat': specifier: ^1.1.1 @@ -6179,6 +6185,12 @@ packages: apexcharts: '> 3.0.0' vue: '> 3.0.0' + vue3-apexcharts@1.6.0: + resolution: {integrity: sha512-gemKFXpw4TuVcllwyKJGYjTwiJQxxCUwbXsiiEEZjs0zc9jvOHvreN8frXz7QbnYqMqOHF9D1TBqwENvoPNjLw==} + peerDependencies: + apexcharts: '> 3.0.0' + vue: '> 3.0.0' + vue@3.4.31: resolution: {integrity: sha512-njqRrOy7W3YLAlVqSKpBebtZpDVg21FPoaq1I7f/+qqBThK9ChAIjkRWgeP6Eat+8C+iia4P3OYqpATP21BCoQ==} peerDependencies: @@ -9936,24 +9948,23 @@ snapshots: - eslint-import-resolver-webpack - supports-color - eslint-module-utils@2.8.1(@typescript-eslint/parser@6.21.0(eslint@9.10.0(jiti@1.21.6))(typescript@5.5.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0(eslint@9.10.0(jiti@1.21.6))(typescript@5.5.3))(eslint-plugin-import@2.29.1)(eslint@9.10.0(jiti@1.21.6)))(eslint@9.10.0(jiti@1.21.6)): + eslint-module-utils@2.8.1(@typescript-eslint/parser@6.21.0(eslint@9.10.0(jiti@1.21.6))(typescript@5.5.3))(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0(eslint@9.10.0(jiti@1.21.6))(typescript@5.5.3))(eslint-plugin-import@2.29.1)(eslint@9.10.0(jiti@1.21.6)))(eslint@9.10.0(jiti@1.21.6)): dependencies: debug: 3.2.7 optionalDependencies: '@typescript-eslint/parser': 6.21.0(eslint@9.10.0(jiti@1.21.6))(typescript@5.5.3) eslint: 9.10.0(jiti@1.21.6) - eslint-import-resolver-node: 0.3.9 eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.21.0(eslint@9.10.0(jiti@1.21.6))(typescript@5.5.3))(eslint-plugin-import@2.29.1)(eslint@9.10.0(jiti@1.21.6)) transitivePeerDependencies: - supports-color - eslint-module-utils@2.8.1(@typescript-eslint/parser@6.21.0(eslint@9.10.0(jiti@1.21.6))(typescript@5.5.3))(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0(eslint@9.10.0(jiti@1.21.6))(typescript@5.5.3))(eslint-plugin-import@2.29.1)(eslint@9.10.0(jiti@1.21.6)))(eslint@9.10.0(jiti@1.21.6)): + eslint-module-utils@2.8.1(@typescript-eslint/parser@7.16.1(eslint@9.10.0(jiti@1.21.6))(typescript@5.5.3))(eslint-import-resolver-node@0.3.9)(eslint@9.10.0(jiti@1.21.6)): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 6.21.0(eslint@9.10.0(jiti@1.21.6))(typescript@5.5.3) + '@typescript-eslint/parser': 7.16.1(eslint@9.10.0(jiti@1.21.6))(typescript@5.5.3) eslint: 9.10.0(jiti@1.21.6) - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.21.0(eslint@9.10.0(jiti@1.21.6))(typescript@5.5.3))(eslint-plugin-import@2.29.1)(eslint@9.10.0(jiti@1.21.6)) + eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color @@ -9996,7 +10007,7 @@ snapshots: doctrine: 2.1.0 eslint: 9.10.0(jiti@1.21.6) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@6.21.0(eslint@9.10.0(jiti@1.21.6))(typescript@5.5.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0(eslint@9.10.0(jiti@1.21.6))(typescript@5.5.3))(eslint-plugin-import@2.29.1)(eslint@9.10.0(jiti@1.21.6)))(eslint@9.10.0(jiti@1.21.6)) + eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.16.1(eslint@9.10.0(jiti@1.21.6))(typescript@5.5.3))(eslint-import-resolver-node@0.3.9)(eslint@9.10.0(jiti@1.21.6)) hasown: 2.0.2 is-core-module: 2.15.0 is-glob: 4.0.3 @@ -10023,7 +10034,7 @@ snapshots: doctrine: 2.1.0 eslint: 9.10.0(jiti@1.21.6) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@6.21.0(eslint@9.10.0(jiti@1.21.6))(typescript@5.5.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.21.0(eslint@9.10.0(jiti@1.21.6))(typescript@5.5.3))(eslint-plugin-import@2.29.1)(eslint@9.10.0(jiti@1.21.6)))(eslint@9.10.0(jiti@1.21.6)) + eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.16.1(eslint@9.10.0(jiti@1.21.6))(typescript@5.5.3))(eslint-import-resolver-node@0.3.9)(eslint@9.10.0(jiti@1.21.6)) hasown: 2.0.2 is-core-module: 2.15.0 is-glob: 4.0.3 @@ -13165,6 +13176,11 @@ snapshots: apexcharts: 3.49.2 vue: 3.4.31(typescript@5.5.4) + vue3-apexcharts@1.6.0(apexcharts@3.49.2)(vue@3.4.31(typescript@5.5.4)): + dependencies: + apexcharts: 3.49.2 + vue: 3.4.31(typescript@5.5.4) + vue@3.4.31(typescript@5.5.3): dependencies: '@vue/compiler-dom': 3.4.31 From 81310aac6cbb3664fff4cbd6dcb69728b071d892 Mon Sep 17 00:00:00 2001 From: Evan Song Date: Sat, 14 Sep 2024 17:16:53 -0700 Subject: [PATCH 292/465] chore(app): clean --- .../src/pages/servers/manage/options/Index.vue | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/apps/app-frontend/src/pages/servers/manage/options/Index.vue b/apps/app-frontend/src/pages/servers/manage/options/Index.vue index 05b71fe06..dcf56b80e 100644 --- a/apps/app-frontend/src/pages/servers/manage/options/Index.vue +++ b/apps/app-frontend/src/pages/servers/manage/options/Index.vue @@ -3,15 +3,11 @@ From 24d1a2fcb0dc8efef5d8a1852e28b3e89a50d275 Mon Sep 17 00:00:00 2001 From: Evan Song Date: Sat, 14 Sep 2024 17:17:24 -0700 Subject: [PATCH 293/465] chore(app): consolidate websocket logic --- .../src/pages/servers/manage/Overview.vue | 121 ++++++++++++++---- 1 file changed, 96 insertions(+), 25 deletions(-) diff --git a/apps/app-frontend/src/pages/servers/manage/Overview.vue b/apps/app-frontend/src/pages/servers/manage/Overview.vue index 58274fdd5..f7784113e 100644 --- a/apps/app-frontend/src/pages/servers/manage/Overview.vue +++ b/apps/app-frontend/src/pages/servers/manage/Overview.vue @@ -1,6 +1,6 @@ + From 5e498552975cfbe36feb090dd43cf5d8e1ff8967 Mon Sep 17 00:00:00 2001 From: Evan Song Date: Sat, 21 Sep 2024 14:12:23 -0700 Subject: [PATCH 302/465] fix(app): sending power actions to servers --- apps/app-frontend/src/pages/servers/manage/Overview.vue | 2 +- apps/app-frontend/src/store/servers.ts | 3 ++- apps/app-frontend/src/store/websocket.ts | 4 ++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/apps/app-frontend/src/pages/servers/manage/Overview.vue b/apps/app-frontend/src/pages/servers/manage/Overview.vue index 91d27066b..09820c53a 100644 --- a/apps/app-frontend/src/pages/servers/manage/Overview.vue +++ b/apps/app-frontend/src/pages/servers/manage/Overview.vue @@ -97,7 +97,7 @@ const animateMarginTop = () => { } const sendPowerAction = async (serverId: string, action: 'restart' | 'start' | 'stop' | 'kill') => { - await webSocketStore.sendPowerAction(serverId, action) + await webSocketStore.sendPowerAction(props.credentials.session, serverId, action) } onMounted(() => { diff --git a/apps/app-frontend/src/store/servers.ts b/apps/app-frontend/src/store/servers.ts index 2693a80ec..2c7d95412 100644 --- a/apps/app-frontend/src/store/servers.ts +++ b/apps/app-frontend/src/store/servers.ts @@ -108,9 +108,10 @@ export const useServerStore = defineStore('servers', { } }, - async sendPowerAction(serverId: string, action: string) { + async sendPowerAction(auth: string, serverId: string, action: string) { try { await usePyroFetch(`servers/${serverId}/power`, { + session: auth, method: 'POST', body: { action }, }) diff --git a/apps/app-frontend/src/store/websocket.ts b/apps/app-frontend/src/store/websocket.ts index 90a063ada..f6d8ab0d6 100644 --- a/apps/app-frontend/src/store/websocket.ts +++ b/apps/app-frontend/src/store/websocket.ts @@ -182,14 +182,14 @@ export const useWebSocketStore = defineStore('webSocket', () => { } } - async function sendPowerAction(serverId: string, action: 'restart' | 'start' | 'stop' | 'kill') { + async function sendPowerAction(auth: string, serverId: string, action: 'restart' | 'start' | 'stop' | 'kill') { const connection = getOrCreateConnection(serverId) const actionName = action.charAt(0).toUpperCase() + action.slice(1) console.log(`${actionName}ing server ${serverId}`) try { connection.isActioning = true - await serverStore.sendPowerAction(serverId, actionName) + await serverStore.sendPowerAction(auth, serverId, actionName) } catch (error) { console.error(`Error ${actionName}ing server:`, error) connection.errorTitle = `Failed to ${actionName.toLowerCase()} server` From 664f230ea0742140b67c02c7f998d2cde92be553 Mon Sep 17 00:00:00 2001 From: Evan Song Date: Sat, 21 Sep 2024 14:18:06 -0700 Subject: [PATCH 303/465] chore(app): improve session types --- apps/app-frontend/src/store/credentials.ts | 2 ++ apps/app-frontend/src/store/servers.ts | 12 +++++++----- apps/app-frontend/src/store/websocket.ts | 3 ++- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/apps/app-frontend/src/store/credentials.ts b/apps/app-frontend/src/store/credentials.ts index 69ae9455f..1da521ad8 100644 --- a/apps/app-frontend/src/store/credentials.ts +++ b/apps/app-frontend/src/store/credentials.ts @@ -22,6 +22,8 @@ export interface Credentials { user: User | null } +export type SessionToken = Credentials['session'] + export const useCredentialsStore = defineStore('credentials', () => { const credentials = ref(null) const error = ref(null) diff --git a/apps/app-frontend/src/store/servers.ts b/apps/app-frontend/src/store/servers.ts index 2c7d95412..316ef1684 100644 --- a/apps/app-frontend/src/store/servers.ts +++ b/apps/app-frontend/src/store/servers.ts @@ -3,12 +3,14 @@ import { defineStore } from 'pinia' import type { Project, Server, ServerBackup, WSAuth } from '@/types/servers' import { toRaw } from 'vue' import { useFetch } from '@/helpers/fetch' +import type { SessionToken } from './credentials' interface ServerState { serverData: Record error: Error | null } + export const useServerStore = defineStore('servers', { state: (): ServerState => ({ serverData: {}, @@ -16,7 +18,7 @@ export const useServerStore = defineStore('servers', { }), actions: { - async fetchServerData(auth: string, serverId: string) { + async fetchServerData(auth: SessionToken, serverId: string) { try { const data = await usePyroFetch(`servers/${serverId}`, { session: auth, @@ -44,7 +46,7 @@ export const useServerStore = defineStore('servers', { } }, - async listServers(auth: string) { + async listServers(auth: SessionToken) { try { return await usePyroFetch<{ servers: Server[] }>('servers', { session: auth, @@ -74,7 +76,7 @@ export const useServerStore = defineStore('servers', { } }, - async fetchServerBackups(auth: string, serverId: string) { + async fetchServerBackups(auth: SessionToken, serverId: string) { try { const result = await usePyroFetch(`servers/${serverId}/backups`, { session: auth, @@ -97,7 +99,7 @@ export const useServerStore = defineStore('servers', { } }, - async requestWebsocket(auth: string, serverId: string): Promise { + async requestWebsocket(auth: SessionToken, serverId: string): Promise { try { return await usePyroFetch(`servers/${serverId}/ws`, { session: auth, @@ -108,7 +110,7 @@ export const useServerStore = defineStore('servers', { } }, - async sendPowerAction(auth: string, serverId: string, action: string) { + async sendPowerAction(auth: SessionToken, serverId: string, action: string) { try { await usePyroFetch(`servers/${serverId}/power`, { session: auth, diff --git a/apps/app-frontend/src/store/websocket.ts b/apps/app-frontend/src/store/websocket.ts index f6d8ab0d6..8218cff64 100644 --- a/apps/app-frontend/src/store/websocket.ts +++ b/apps/app-frontend/src/store/websocket.ts @@ -3,6 +3,7 @@ import { ref, computed } from 'vue' import WebSocket from '@tauri-apps/plugin-websocket' import { useServerStore } from './servers' import type { WSEvent, ServerState, Stats } from '@/types/servers' +import type { SessionToken } from './credentials' interface ServerConnection { socket: WebSocket | null @@ -182,7 +183,7 @@ export const useWebSocketStore = defineStore('webSocket', () => { } } - async function sendPowerAction(auth: string, serverId: string, action: 'restart' | 'start' | 'stop' | 'kill') { + async function sendPowerAction(auth: SessionToken, serverId: string, action: 'restart' | 'start' | 'stop' | 'kill') { const connection = getOrCreateConnection(serverId) const actionName = action.charAt(0).toUpperCase() + action.slice(1) console.log(`${actionName}ing server ${serverId}`) From ebde45640034f44b0c972978ec3c673b4abf8f15 Mon Sep 17 00:00:00 2001 From: Evan Song Date: Sat, 21 Sep 2024 14:24:24 -0700 Subject: [PATCH 304/465] chore(global): improve pyrofetch headers type --- apps/app-frontend/src/helpers/pyroFetch.ts | 5 +++-- apps/frontend/src/composables/pyroFetch.ts | 4 +++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/apps/app-frontend/src/helpers/pyroFetch.ts b/apps/app-frontend/src/helpers/pyroFetch.ts index e18795e42..3deadc6c2 100644 --- a/apps/app-frontend/src/helpers/pyroFetch.ts +++ b/apps/app-frontend/src/helpers/pyroFetch.ts @@ -30,8 +30,9 @@ export async function usePyroFetch(path: string, options: PyroFetchOptions = const fullUrl = `https://archon.pyro.host/modrinth/v${version}/${path.replace(/^\//, '')}` - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const headers: any = { + type HeadersRecord = Record + + const headers: HeadersRecord = { Accept: accept, Authorization: `Bearer ${authToken}`, 'Access-Control-Allow-Headers': 'Authorization', diff --git a/apps/frontend/src/composables/pyroFetch.ts b/apps/frontend/src/composables/pyroFetch.ts index 3f5570795..d1308cc97 100644 --- a/apps/frontend/src/composables/pyroFetch.ts +++ b/apps/frontend/src/composables/pyroFetch.ts @@ -49,7 +49,9 @@ export async function usePyroFetch(path: string, options: PyroFetchOptions = ? `https://${override.url}/${path.replace(/^\//, "")}` : `${base}/modrinth/v${version}/${path.replace(/^\//, "")}`; - const headers: any = { + type HeadersRecord = Record; + + const headers: HeadersRecord = { Accept: accept, Authorization: `Bearer ${override?.token ?? authToken}`, "Access-Control-Allow-Headers": "Authorization", From 0ba8204a7c4ab0cf7572e5a514e3acf4ee92bf97 Mon Sep 17 00:00:00 2001 From: TheWander02 <48934424+thewander02@users.noreply.github.com> Date: Mon, 23 Sep 2024 02:50:48 -0700 Subject: [PATCH 305/465] feat(frontend): major files work (wip), various fixes n improvements --- .../src/components/ui/servers/FileItem.vue | 48 ++- .../src/pages/servers/manage/[id]/backups.vue | 2 +- .../src/pages/servers/manage/[id]/files.vue | 367 +++++++++++++++--- apps/frontend/src/stores/servers.ts | 39 ++ 4 files changed, 387 insertions(+), 69 deletions(-) diff --git a/apps/frontend/src/components/ui/servers/FileItem.vue b/apps/frontend/src/components/ui/servers/FileItem.vue index 3c98d05f1..224fa8fb5 100644 --- a/apps/frontend/src/components/ui/servers/FileItem.vue +++ b/apps/frontend/src/components/ui/servers/FileItem.vue @@ -1,9 +1,8 @@