From 4106c3c846eccbddd86067bb89afbcfe54579637 Mon Sep 17 00:00:00 2001 From: yohlo Date: Wed, 26 Aug 2026 18:58:31 -0700 Subject: [PATCH 1/2] fix(build): keep supertokens server init out of the client module graph - ensureSuperTokensBackend moved to the health route handler; the dynamic imports in exclusions and alerts dragged recipes into the client build --- src/app/routes/api/health.ts | 2 ++ src/lib/telemetry/alerts.server.ts | 2 -- src/lib/telemetry/exclusions.server.ts | 2 -- src/locales/de/messages.po | 16 ++++++++-------- src/locales/en/messages.po | 16 ++++++++-------- src/locales/es/messages.po | 16 ++++++++-------- src/locales/ja/messages.po | 16 ++++++++-------- 7 files changed, 34 insertions(+), 36 deletions(-) diff --git a/src/app/routes/api/health.ts b/src/app/routes/api/health.ts index 7f49fd1..0b78142 100644 --- a/src/app/routes/api/health.ts +++ b/src/app/routes/api/health.ts @@ -1,11 +1,13 @@ import { createFileRoute } from "@tanstack/react-router"; import { ensureTelemetryScheduler } from "@/lib/telemetry/scheduler.server"; import { getHealthSnapshot } from "@/lib/telemetry/health.server"; +import { ensureSuperTokensBackend } from "@/lib/supertokens/server"; export const Route = createFileRoute("/api/health")({ server: { handlers: { GET: async () => { + ensureSuperTokensBackend(); ensureTelemetryScheduler(); const snapshot = await getHealthSnapshot(); diff --git a/src/lib/telemetry/alerts.server.ts b/src/lib/telemetry/alerts.server.ts index c68bb60..1d68be4 100644 --- a/src/lib/telemetry/alerts.server.ts +++ b/src/lib/telemetry/alerts.server.ts @@ -31,8 +31,6 @@ const getAdminPlayerIds = async (): Promise => { return adminPlayersCache.playerIds; } - const { ensureSuperTokensBackend } = await import("@/lib/supertokens/server"); - ensureSuperTokensBackend(); const UserRoles = (await import("supertokens-node/recipe/userroles")).default; const UserMetadata = (await import("supertokens-node/recipe/usermetadata")).default; const response = await UserRoles.getUsersThatHaveRole("public", ADMIN_ROLE); diff --git a/src/lib/telemetry/exclusions.server.ts b/src/lib/telemetry/exclusions.server.ts index e95ad68..1ba4e2e 100644 --- a/src/lib/telemetry/exclusions.server.ts +++ b/src/lib/telemetry/exclusions.server.ts @@ -27,8 +27,6 @@ export const getExcludedPlayerIds = async (): Promise> => { if (phones.length > 0) { try { - const { ensureSuperTokensBackend } = await import("@/lib/supertokens/server"); - ensureSuperTokensBackend(); const SuperTokens = (await import("supertokens-node")).default; const { pbAdmin } = await import("@/lib/pocketbase/client"); for (const phoneNumber of phones) { diff --git a/src/locales/de/messages.po b/src/locales/de/messages.po index 23dcdc5..5f4c29c 100644 --- a/src/locales/de/messages.po +++ b/src/locales/de/messages.po @@ -105,7 +105,7 @@ msgid "{0} Badge Holders" msgstr "{0} Abzeichen-Inhaber" #. placeholder {0}: recentErrors.totalItems -#: src/lib/telemetry/alerts.server.ts:110 +#: src/lib/telemetry/alerts.server.ts:108 msgid "{0} client errors in the last 15 minutes" msgstr "{0} Client-Fehler in den letzten 15 Minuten" @@ -167,7 +167,7 @@ msgstr "{count, plural, one {Spieler (#)} other {Spieler (#)}}" msgid "{count, plural, one {Teams (#)} other {Teams (#)}}" msgstr "{count, plural, one {Teams (#)} other {Teams (#)}}" -#: src/lib/telemetry/alerts.server.ts:173 +#: src/lib/telemetry/alerts.server.ts:171 msgid "{deniedCount} denied admin access attempts in the last 15 minutes" msgstr "{deniedCount} abgelehnte Admin-Zugriffsversuche in den letzten 15 Minuten" @@ -206,7 +206,7 @@ msgstr "{n, plural, one {# garantiertes Spiel} other {# garantierte Spiele}}" msgid "{n, plural, one {# wildcard} other {# wildcards}}" msgstr "{n, plural, one {# Wildcard} other {# Wildcards}}" -#: src/lib/telemetry/alerts.server.ts:160 +#: src/lib/telemetry/alerts.server.ts:158 msgid "{name} failed {count} times in the last 15 minutes" msgstr "{name} ist in den letzten 15 Minuten {count} Mal fehlgeschlagen" @@ -392,7 +392,7 @@ msgid "A code was sent to +1 ({0}) {1}-{2}" msgstr "Ein Code wurde an +1 ({0}) {1}-{2} gesendet" #. placeholder {0}: info.message.slice(0, 120) -#: src/lib/telemetry/alerts.server.ts:131 +#: src/lib/telemetry/alerts.server.ts:129 msgid "A new error appeared: {0}" msgstr "Ein neuer Fehler ist aufgetreten: {0}" @@ -718,7 +718,7 @@ msgstr "Knete" msgid "Clear selected player" msgstr "Ausgewählten Spieler entfernen" -#: src/lib/telemetry/alerts.server.ts:109 +#: src/lib/telemetry/alerts.server.ts:107 msgid "Client error spike" msgstr "Anstieg von Client-Fehlern" @@ -908,7 +908,7 @@ msgstr "Tiefsee" msgid "Default" msgstr "Standard" -#: src/lib/telemetry/alerts.server.ts:172 +#: src/lib/telemetry/alerts.server.ts:170 msgid "Denied access attempt" msgstr "Abgelehnter Zugriffsversuch" @@ -1687,7 +1687,7 @@ msgstr "Nie" msgid "Never active" msgstr "Nie aktiv" -#: src/lib/telemetry/alerts.server.ts:130 +#: src/lib/telemetry/alerts.server.ts:128 msgid "New client error" msgstr "Neuer Client-Fehler" @@ -2321,7 +2321,7 @@ msgstr "Testbenachrichtigung senden" msgid "Series is tied" msgstr "Serie steht unentschieden" -#: src/lib/telemetry/alerts.server.ts:159 +#: src/lib/telemetry/alerts.server.ts:157 msgid "Server function failing" msgstr "Serverfunktion schlägt fehl" diff --git a/src/locales/en/messages.po b/src/locales/en/messages.po index 7c5d971..ec52447 100644 --- a/src/locales/en/messages.po +++ b/src/locales/en/messages.po @@ -105,7 +105,7 @@ msgid "{0} Badge Holders" msgstr "{0} Badge Holders" #. placeholder {0}: recentErrors.totalItems -#: src/lib/telemetry/alerts.server.ts:110 +#: src/lib/telemetry/alerts.server.ts:108 msgid "{0} client errors in the last 15 minutes" msgstr "{0} client errors in the last 15 minutes" @@ -167,7 +167,7 @@ msgstr "{count, plural, one {Players (#)} other {Players (#)}}" msgid "{count, plural, one {Teams (#)} other {Teams (#)}}" msgstr "{count, plural, one {Teams (#)} other {Teams (#)}}" -#: src/lib/telemetry/alerts.server.ts:173 +#: src/lib/telemetry/alerts.server.ts:171 msgid "{deniedCount} denied admin access attempts in the last 15 minutes" msgstr "{deniedCount} denied admin access attempts in the last 15 minutes" @@ -206,7 +206,7 @@ msgstr "{n, plural, one {# match guaranteed} other {# matches guaranteed}}" msgid "{n, plural, one {# wildcard} other {# wildcards}}" msgstr "{n, plural, one {# wildcard} other {# wildcards}}" -#: src/lib/telemetry/alerts.server.ts:160 +#: src/lib/telemetry/alerts.server.ts:158 msgid "{name} failed {count} times in the last 15 minutes" msgstr "{name} failed {count} times in the last 15 minutes" @@ -392,7 +392,7 @@ msgid "A code was sent to +1 ({0}) {1}-{2}" msgstr "A code was sent to +1 ({0}) {1}-{2}" #. placeholder {0}: info.message.slice(0, 120) -#: src/lib/telemetry/alerts.server.ts:131 +#: src/lib/telemetry/alerts.server.ts:129 msgid "A new error appeared: {0}" msgstr "A new error appeared: {0}" @@ -718,7 +718,7 @@ msgstr "Claymation" msgid "Clear selected player" msgstr "Clear selected player" -#: src/lib/telemetry/alerts.server.ts:109 +#: src/lib/telemetry/alerts.server.ts:107 msgid "Client error spike" msgstr "Client error spike" @@ -908,7 +908,7 @@ msgstr "Deep Sea" msgid "Default" msgstr "Default" -#: src/lib/telemetry/alerts.server.ts:172 +#: src/lib/telemetry/alerts.server.ts:170 msgid "Denied access attempt" msgstr "Denied access attempt" @@ -1687,7 +1687,7 @@ msgstr "Never" msgid "Never active" msgstr "Never active" -#: src/lib/telemetry/alerts.server.ts:130 +#: src/lib/telemetry/alerts.server.ts:128 msgid "New client error" msgstr "New client error" @@ -2321,7 +2321,7 @@ msgstr "Send test notification" msgid "Series is tied" msgstr "Series is tied" -#: src/lib/telemetry/alerts.server.ts:159 +#: src/lib/telemetry/alerts.server.ts:157 msgid "Server function failing" msgstr "Server function failing" diff --git a/src/locales/es/messages.po b/src/locales/es/messages.po index ee9e995..718526c 100644 --- a/src/locales/es/messages.po +++ b/src/locales/es/messages.po @@ -105,7 +105,7 @@ msgid "{0} Badge Holders" msgstr "Poseedores de la insignia {0}" #. placeholder {0}: recentErrors.totalItems -#: src/lib/telemetry/alerts.server.ts:110 +#: src/lib/telemetry/alerts.server.ts:108 msgid "{0} client errors in the last 15 minutes" msgstr "{0} errores de cliente en los últimos 15 minutos" @@ -167,7 +167,7 @@ msgstr "{count, plural, one {Jugadores (#)} other {Jugadores (#)}}" msgid "{count, plural, one {Teams (#)} other {Teams (#)}}" msgstr "{count, plural, one {Equipos (#)} other {Equipos (#)}}" -#: src/lib/telemetry/alerts.server.ts:173 +#: src/lib/telemetry/alerts.server.ts:171 msgid "{deniedCount} denied admin access attempts in the last 15 minutes" msgstr "{deniedCount} intentos de acceso de administrador denegados en los últimos 15 minutos" @@ -206,7 +206,7 @@ msgstr "{n, plural, one {# partido garantizado} other {# partidos garantizados}} msgid "{n, plural, one {# wildcard} other {# wildcards}}" msgstr "{n, plural, one {# comodín} other {# comodines}}" -#: src/lib/telemetry/alerts.server.ts:160 +#: src/lib/telemetry/alerts.server.ts:158 msgid "{name} failed {count} times in the last 15 minutes" msgstr "{name} falló {count} veces en los últimos 15 minutos" @@ -392,7 +392,7 @@ msgid "A code was sent to +1 ({0}) {1}-{2}" msgstr "Se envió un código al +1 ({0}) {1}-{2}" #. placeholder {0}: info.message.slice(0, 120) -#: src/lib/telemetry/alerts.server.ts:131 +#: src/lib/telemetry/alerts.server.ts:129 msgid "A new error appeared: {0}" msgstr "Apareció un nuevo error: {0}" @@ -718,7 +718,7 @@ msgstr "Plastilina" msgid "Clear selected player" msgstr "Quitar jugador seleccionado" -#: src/lib/telemetry/alerts.server.ts:109 +#: src/lib/telemetry/alerts.server.ts:107 msgid "Client error spike" msgstr "Aumento de errores de cliente" @@ -908,7 +908,7 @@ msgstr "Mar Profundo" msgid "Default" msgstr "Predeterminado" -#: src/lib/telemetry/alerts.server.ts:172 +#: src/lib/telemetry/alerts.server.ts:170 msgid "Denied access attempt" msgstr "Intento de acceso denegado" @@ -1687,7 +1687,7 @@ msgstr "Nunca" msgid "Never active" msgstr "Nunca activo" -#: src/lib/telemetry/alerts.server.ts:130 +#: src/lib/telemetry/alerts.server.ts:128 msgid "New client error" msgstr "Nuevo error de cliente" @@ -2321,7 +2321,7 @@ msgstr "Enviar notificación de prueba" msgid "Series is tied" msgstr "La serie está empatada" -#: src/lib/telemetry/alerts.server.ts:159 +#: src/lib/telemetry/alerts.server.ts:157 msgid "Server function failing" msgstr "Función del servidor fallando" diff --git a/src/locales/ja/messages.po b/src/locales/ja/messages.po index ee4b4ab..616d4ed 100644 --- a/src/locales/ja/messages.po +++ b/src/locales/ja/messages.po @@ -105,7 +105,7 @@ msgid "{0} Badge Holders" msgstr "{0}バッジ保有者" #. placeholder {0}: recentErrors.totalItems -#: src/lib/telemetry/alerts.server.ts:110 +#: src/lib/telemetry/alerts.server.ts:108 msgid "{0} client errors in the last 15 minutes" msgstr "過去15分間に{0}件のクライアントエラーが発生しました" @@ -167,7 +167,7 @@ msgstr "{count, plural, one {プレイヤー(#)} other {プレイヤー(# msgid "{count, plural, one {Teams (#)} other {Teams (#)}}" msgstr "{count, plural, one {チーム(#)} other {チーム(#)}}" -#: src/lib/telemetry/alerts.server.ts:173 +#: src/lib/telemetry/alerts.server.ts:171 msgid "{deniedCount} denied admin access attempts in the last 15 minutes" msgstr "過去15分間に{deniedCount}件の管理者アクセス拒否がありました" @@ -206,7 +206,7 @@ msgstr "{n, plural, one {#試合保証} other {#試合保証}}" msgid "{n, plural, one {# wildcard} other {# wildcards}}" msgstr "{n, plural, one {#ワイルドカード} other {#ワイルドカード}}" -#: src/lib/telemetry/alerts.server.ts:160 +#: src/lib/telemetry/alerts.server.ts:158 msgid "{name} failed {count} times in the last 15 minutes" msgstr "{name}が過去15分間に{count}回失敗しました" @@ -392,7 +392,7 @@ msgid "A code was sent to +1 ({0}) {1}-{2}" msgstr "認証コードを +1 ({0}) {1}-{2} に送信しました" #. placeholder {0}: info.message.slice(0, 120) -#: src/lib/telemetry/alerts.server.ts:131 +#: src/lib/telemetry/alerts.server.ts:129 msgid "A new error appeared: {0}" msgstr "新しいエラーが発生しました: {0}" @@ -718,7 +718,7 @@ msgstr "クレイ" msgid "Clear selected player" msgstr "選択したプレイヤーを解除" -#: src/lib/telemetry/alerts.server.ts:109 +#: src/lib/telemetry/alerts.server.ts:107 msgid "Client error spike" msgstr "クライアントエラー急増" @@ -908,7 +908,7 @@ msgstr "深海" msgid "Default" msgstr "デフォルト" -#: src/lib/telemetry/alerts.server.ts:172 +#: src/lib/telemetry/alerts.server.ts:170 msgid "Denied access attempt" msgstr "アクセス拒否の試行" @@ -1687,7 +1687,7 @@ msgstr "なし" msgid "Never active" msgstr "アクティビティなし" -#: src/lib/telemetry/alerts.server.ts:130 +#: src/lib/telemetry/alerts.server.ts:128 msgid "New client error" msgstr "新しいクライアントエラー" @@ -2321,7 +2321,7 @@ msgstr "テスト通知を送信" msgid "Series is tied" msgstr "シリーズはタイです" -#: src/lib/telemetry/alerts.server.ts:159 +#: src/lib/telemetry/alerts.server.ts:157 msgid "Server function failing" msgstr "サーバー関数が失敗しています" From f13e5b752a2add00eb36048bc48cb22279223fc5 Mon Sep 17 00:00:00 2001 From: yohlo Date: Wed, 26 Aug 2026 19:12:33 -0700 Subject: [PATCH 2/2] refactor(enrollment): drop count header, keep player-count warnings --- .../enrollment/enrollment-stats.tsx | 48 ------------------- .../enrollment/enrollment-warnings.tsx | 28 +++++++++++ .../enrollment/free-agent-section.tsx | 4 +- .../components/enrollment/team-section.tsx | 3 -- src/locales/de/messages.po | 23 ++++----- src/locales/en/messages.po | 23 ++++----- src/locales/es/messages.po | 23 ++++----- src/locales/ja/messages.po | 23 ++++----- 8 files changed, 70 insertions(+), 105 deletions(-) delete mode 100644 src/features/tournaments/components/enrollment/enrollment-stats.tsx create mode 100644 src/features/tournaments/components/enrollment/enrollment-warnings.tsx diff --git a/src/features/tournaments/components/enrollment/enrollment-stats.tsx b/src/features/tournaments/components/enrollment/enrollment-stats.tsx deleted file mode 100644 index 5fa382f..0000000 --- a/src/features/tournaments/components/enrollment/enrollment-stats.tsx +++ /dev/null @@ -1,48 +0,0 @@ -import { Alert, Group, Stack, Text } from "@mantine/core"; -import { WarningCircleIcon } from "@phosphor-icons/react"; -import { Trans, Plural } from "@lingui/react/macro"; - -interface EnrollmentStatsProps { - count: number; - regional?: boolean; -} - -const EnrollmentStats = (props: EnrollmentStatsProps) => { - const hasOddPlayers = props.count % 2 !== 0; - const hasEnoughPlayers = props.count >= 2; - - return ( - - - - {props.count} - - - {props.regional ? ( - - ) : ( - Enrolled Teams - )} - - - - {props.regional && !hasEnoughPlayers && ( - }> - Need at least 2 players to create teams - - )} - - {props.regional && hasOddPlayers && ( - }> - Cannot create teams with an odd number of players. Please have one player unenroll. - - )} - - ); -}; - -export default EnrollmentStats; diff --git a/src/features/tournaments/components/enrollment/enrollment-warnings.tsx b/src/features/tournaments/components/enrollment/enrollment-warnings.tsx new file mode 100644 index 0000000..0263b70 --- /dev/null +++ b/src/features/tournaments/components/enrollment/enrollment-warnings.tsx @@ -0,0 +1,28 @@ +import { Alert, Stack } from "@mantine/core"; +import { WarningCircleIcon } from "@phosphor-icons/react"; +import { Trans } from "@lingui/react/macro"; + +const EnrollmentWarnings = ({ count }: { count: number }) => { + const hasOddPlayers = count % 2 !== 0; + const hasEnoughPlayers = count >= 2; + + if (hasEnoughPlayers && !hasOddPlayers) return null; + + return ( + + {!hasEnoughPlayers && ( + }> + Need at least 2 players to create teams + + )} + + {hasEnoughPlayers && hasOddPlayers && ( + }> + Cannot create teams with an odd number of players. Please have one player unenroll. + + )} + + ); +}; + +export default EnrollmentWarnings; diff --git a/src/features/tournaments/components/enrollment/free-agent-section.tsx b/src/features/tournaments/components/enrollment/free-agent-section.tsx index 24ffa6e..d377473 100644 --- a/src/features/tournaments/components/enrollment/free-agent-section.tsx +++ b/src/features/tournaments/components/enrollment/free-agent-section.tsx @@ -18,7 +18,7 @@ import Typeahead, { TypeaheadOption } from "@/components/typeahead"; import { usePlayers } from "@/features/players/queries"; import useAdminEnrollPlayer from "../../hooks/use-admin-enroll-player"; import useAdminUnenrollPlayer from "../../hooks/use-admin-unenroll-player"; -import EnrollmentStats from "./enrollment-stats"; +import EnrollmentWarnings from "./enrollment-warnings"; interface FreeAgentSectionProps { tournamentId: string; @@ -117,7 +117,7 @@ const FreeAgentSection = ({ tournamentId }: FreeAgentSectionProps) => { return ( - + { return ( <> - -