From 82f00f961ed4df2531ef0c4f6dc7459d35391f34 Mon Sep 17 00:00:00 2001 From: "Calum H." Date: Sun, 11 Jan 2026 19:55:07 +0000 Subject: [PATCH] feat: switch to api-client to prevent rate limit errors on game-versions (#5089) * feat: switch to api-client to prevent rate limit errors on game-versions * feat: sentry temp * Revert "feat: sentry temp" This reverts commit aaa21a3f8099b86fa8e8d9d64845273e66c28bbe. --- apps/frontend/.prettierignore | 1 + .../server/routes/api/tags/game-versions.ts | 11 +++++--- apps/frontend/src/server/utils/api-client.ts | 25 +++++++++++++++++++ 3 files changed, 34 insertions(+), 3 deletions(-) create mode 100644 apps/frontend/src/server/utils/api-client.ts diff --git a/apps/frontend/.prettierignore b/apps/frontend/.prettierignore index b16cc950..85ab0202 100644 --- a/apps/frontend/.prettierignore +++ b/apps/frontend/.prettierignore @@ -6,3 +6,4 @@ src/generated/** src/locales/** src/public/news/feed src/assets/**/*.svg +**/.wrangler diff --git a/apps/frontend/src/server/routes/api/tags/game-versions.ts b/apps/frontend/src/server/routes/api/tags/game-versions.ts index 6593d78a..0ff557b5 100644 --- a/apps/frontend/src/server/routes/api/tags/game-versions.ts +++ b/apps/frontend/src/server/routes/api/tags/game-versions.ts @@ -1,13 +1,18 @@ import type { Labrinth } from '@modrinth/api-client' +import { useServerModrinthClient } from '~/server/utils/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 + const client = useServerModrinthClient(event) - const response = await $fetch(`${apiBaseUrl}tag/game_version`) + const response = await client.request('/tag/game_version', { + api: 'labrinth', + version: 2, + method: 'GET', + }) // nitro wont cache if we throw an error if (!response || !Array.isArray(response)) { diff --git a/apps/frontend/src/server/utils/api-client.ts b/apps/frontend/src/server/utils/api-client.ts new file mode 100644 index 00000000..87df75d2 --- /dev/null +++ b/apps/frontend/src/server/utils/api-client.ts @@ -0,0 +1,25 @@ +import { type NuxtClientConfig, NuxtModrinthClient } from '@modrinth/api-client' +import type { H3Event } from 'h3' + +async function getRateLimitKeyFromSecretsStore(): Promise { + try { + const mod = 'cloudflare:workers' + const { env } = await import(/* @vite-ignore */ mod) + return await env.RATE_LIMIT_IGNORE_KEY?.get() + } catch { + return undefined + } +} + +export function useServerModrinthClient(event: H3Event): NuxtModrinthClient { + const config = useRuntimeConfig(event) + const apiBaseUrl = (config.apiBaseUrl || config.public.apiBaseUrl).replace('/v2/', '/') + + const clientConfig: NuxtClientConfig = { + labrinthBaseUrl: apiBaseUrl, + rateLimitKey: config.rateLimitKey || getRateLimitKeyFromSecretsStore, + features: [], + } + + return new NuxtModrinthClient(clientConfig) +}