diff --git a/apps/frontend/src/plugins/update-game-versions.ts b/apps/frontend/src/plugins/update-game-versions.ts new file mode 100644 index 00000000..5ded4362 --- /dev/null +++ b/apps/frontend/src/plugins/update-game-versions.ts @@ -0,0 +1,17 @@ +import type { Labrinth } from '@modrinth/api-client' + +export default defineNuxtPlugin(async () => { + try { + const gameVersions = await $fetch('/api/tags/game-versions') + + if (gameVersions && gameVersions.length > 0) { + const state = useState<{ gameVersions: Labrinth.Tags.v2.GameVersion[] }>('generatedState') + + if (state.value) { + state.value.gameVersions = gameVersions + } + } + } catch (error) { + console.error('[Game Version Updater] Failed to fetch:', error) + } +}) diff --git a/apps/frontend/src/server/routes/api/tags/game-versions.ts b/apps/frontend/src/server/routes/api/tags/game-versions.ts new file mode 100644 index 00000000..71d0e716 --- /dev/null +++ b/apps/frontend/src/server/routes/api/tags/game-versions.ts @@ -0,0 +1,17 @@ +import type { Labrinth } from '@modrinth/api-client' + +const CACHE_MAX_AGE = 60 * 10 // 10 minutes + +export default defineCachedEventHandler( + async (event) => { + const config = useRuntimeConfig(event) + const apiBaseUrl = config.apiBaseUrl || config.public.apiBaseUrl + + return await $fetch(`${apiBaseUrl}tag/game_version`) + }, + { + maxAge: CACHE_MAX_AGE, + name: 'game-versions', + getKey: () => 'game-versions', + }, +)