diff --git a/Dockerfile b/Dockerfile index 21cd4ae..7c403a2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -15,10 +15,12 @@ ENV NODE_ENV=production \ NODE_OPTIONS=--max-old-space-size=640 \ NEXT_PUBLIC_SUPABASE_URL=${NEXT_PUBLIC_SUPABASE_URL} \ NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY=${NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY} +# The Webpack compiler cache is build-only and can be hundreds of megabytes. RUN if [ -z "$NEXT_PUBLIC_SUPABASE_URL" ] || [ -z "$NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY" ]; then \ echo "In Dokploy, set NEXT_PUBLIC_SUPABASE_URL and NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY under Application > Environment > Build Time Arguments." >&2; \ exit 1; \ - fi && npm run build:docker + fi && npm run build:docker \ + && rm -rf /app/.next/cache/webpack # Reuse the installation, and prune only after the build has completed. # A second independent npm ci stage could overlap with compilation in BuildKit. diff --git a/app/downloads/page.tsx b/app/downloads/page.tsx index fb0555b..6a1882f 100644 --- a/app/downloads/page.tsx +++ b/app/downloads/page.tsx @@ -34,7 +34,7 @@ export default async function Downloads() {

{t( - "The app connects to minegeo.vercel.app and keeps you signed in on this device.", + "The app connects to minegeo.site and keeps you signed in on this device.", )}

@@ -107,7 +107,7 @@ export default async function Downloads() {

{t( - "Java 21 for 1.21.11; Java 25 for 26.1 and 26.2. Both tools connect to minegeo.vercel.app automatically.", + "Java 21 for 1.21.11; Java 25 for 26.1 and 26.2. Both tools connect to minegeo.site automatically.", )}

diff --git a/components/DeveloperDocumentation.tsx b/components/DeveloperDocumentation.tsx index 37d1ccd..75b1218 100644 --- a/components/DeveloperDocumentation.tsx +++ b/components/DeveloperDocumentation.tsx @@ -29,7 +29,7 @@ export function DeveloperDocumentation({ locale }: { locale: string }) {

{l("Base URL", "Базовый адрес")}:{" "} - https://minegeo.vercel.app/api/dev/v1 + https://minegeo.site/api/dev/v1

@@ -124,8 +124,8 @@ export function DeveloperDocumentation({ locale }: { locale: string }) {

{l( - "GET /maps/{id} returns {map: {...}}. GET /me returns {account: {...}}. GET /me/maps uses the maps list envelope; GET /me/games uses {games: [...], pagination: {...}}. Map url values are relative to https://minegeo.vercel.app.", - "GET /maps/{id} возвращает {map: {...}}, GET /me — {account: {...}}. GET /me/maps использует список maps; GET /me/games — {games: [...], pagination: {...}}. Поле url карты содержит путь относительно https://minegeo.vercel.app.", + "GET /maps/{id} returns {map: {...}}. GET /me returns {account: {...}}. GET /me/maps uses the maps list envelope; GET /me/games uses {games: [...], pagination: {...}}. Map url values are relative to https://minegeo.site.", + "GET /maps/{id} возвращает {map: {...}}, GET /me — {account: {...}}. GET /me/maps использует список maps; GET /me/games — {games: [...], pagination: {...}}. Поле url карты содержит путь относительно https://minegeo.site.", )}

{l("Rate limits", "Ограничения запросов")}

diff --git a/desktop/main.cjs b/desktop/main.cjs index 2c1882d..2e8d422 100644 --- a/desktop/main.cjs +++ b/desktop/main.cjs @@ -154,7 +154,7 @@ function createWindow() { title: "MineGeo", message: `MineGeo Desktop ${app.getVersion()}`, detail: - "Play at minegeo.vercel.app. Requires an internet connection.", + "Play at minegeo.site. Requires an internet connection.", }), }, ], diff --git a/desktop/navigation.cjs b/desktop/navigation.cjs index 253c5f0..caebf1d 100644 --- a/desktop/navigation.cjs +++ b/desktop/navigation.cjs @@ -1,4 +1,4 @@ -const SITE_URL = "https://minegeo.vercel.app"; +const SITE_URL = "https://minegeo.site"; function isInternal(value) { try { return new URL(value).origin === SITE_URL; diff --git a/docs/bug-reports.md b/docs/bug-reports.md index b163ec0..412ad5b 100644 --- a/docs/bug-reports.md +++ b/docs/bug-reports.md @@ -78,7 +78,7 @@ variables in Vercel: - `LINEAR_PROJECT_ID`: optional project UUID or Linear project identifier. Enable **Comment and Issue** events on the team webhook and set its URL to -`https://minegeo.vercel.app/api/support/linear`. Redeploy after saving environment +`https://minegeo.site/api/support/linear`. Redeploy after saving environment variables. Keys stay server-side and must never be pasted into issue descriptions, client configuration, or source uploads. @@ -96,7 +96,7 @@ for durable timers. No additional secret or cron is needed. Validation: `npm test`, `npm run typecheck`, `npm run build`, and `node scripts/test-bug-reports-sql.mjs` (uses the isolated PGlite installation under `.data/sql-verification`, as the other SQL verification scripts do). -`node scripts/test-bug-retention-http.mjs https://minegeo.vercel.app` verifies +`node scripts/test-bug-retention-http.mjs https://minegeo.site` verifies the deployed flow with a clearly labeled temporary report and screenshot. It checks ownership, Done synchronization, the three-day deadline, and deletion from both systems by advancing only that test report's deadline. The fixture ID diff --git a/docs/desktop.md b/docs/desktop.md index 1eabd4c..26c1012 100644 --- a/docs/desktop.md +++ b/docs/desktop.md @@ -1,6 +1,6 @@ # MineGeo Desktop -The Windows x64 client is a portable Electron EXE. Open it directly; no installation or administrator access is needed. It connects to https://minegeo.vercel.app and requires internet access. Website updates appear automatically on reload; Electron runtime updates require a new EXE. +The Windows x64 client is a portable Electron EXE. Open it directly; no installation or administrator access is needed. It connects to https://minegeo.site and requires internet access. Website updates appear automatically on reload; Electron runtime updates require a new EXE. The EXE extracts its runtime into a temporary directory while running. Sign-in, cookies, and site preferences persist separately in `%APPDATA%/minegeo-desktop`. Removing the EXE does not clear that profile. External HTTPS links open in the default browser. The client has no Node.js bridge to the remote site, uses Chromium sandboxing and context isolation, and denies device permissions. diff --git a/docs/developer-api.md b/docs/developer-api.md index 2ac1a58..6a1cf00 100644 --- a/docs/developer-api.md +++ b/docs/developer-api.md @@ -19,7 +19,7 @@ Version 1 is read-only. No key grants uploads, edits, publication, moderation or ## Requests -Base URL: `https://minegeo.vercel.app/api/dev/v1` +Base URL: `https://minegeo.site/api/dev/v1` Every request requires `Authorization: Bearer `. Developer keys start with `mg_dev_`. Browser session cookies do not authenticate these endpoints. No MineGeo SDK is provided. @@ -30,7 +30,7 @@ import os import requests response = requests.get( - "https://minegeo.vercel.app/api/dev/v1/maps", + "https://minegeo.site/api/dev/v1/maps", headers={"Authorization": f"Bearer {os.environ['MINEGEO_API_KEY']}"}, params={"limit": 20, "offset": 0}, timeout=20, diff --git a/docs/discord-integration.md b/docs/discord-integration.md index a041864..4eebb2a 100644 --- a/docs/discord-integration.md +++ b/docs/discord-integration.md @@ -56,7 +56,7 @@ Add these for **Production**: | `DISCORD_BOT_TOKEN` | Bot token from the Developer Portal, without `Bot ` in front | Yes | | `DISCORD_MAPS_CHANNEL_ID` | Numeric channel ID for new approved maps | No | | `DISCORD_PARTIES_CHANNEL_ID` | Numeric channel ID where **all published parties** appear | No | -| `MINEGEO_URL` | `https://minegeo.vercel.app` (already configured) | No | +| `MINEGEO_URL` | `https://minegeo.site` (already configured) | No | Use **Sensitive** for the token, and never prefix these names with `NEXT_PUBLIC_`. Leave a channel variable blank to disable that announcement type. A Discord diff --git a/docs/forum.md b/docs/forum.md index 93f8c31..b5fb9d9 100644 --- a/docs/forum.md +++ b/docs/forum.md @@ -20,8 +20,8 @@ or custom ports are accepted. No forum API key is needed for these links. Welcome to MineGeo! :D -Play at https://minegeo.vercel.app and find the player guide at -https://minegeo.vercel.app/docs. +Play at https://minegeo.site and find the player guide at +https://minegeo.site/docs. This is our place to share maps, find people to play with, ask for help, and suggest what MineGeo should do next. English and Russian are welcome. diff --git a/docs/gitbook/README.md b/docs/gitbook/README.md index 78e10d9..e616017 100644 --- a/docs/gitbook/README.md +++ b/docs/gitbook/README.md @@ -6,7 +6,7 @@ Welcome, explorer! MineGeo drops you into a Minecraft view and asks one question ## Just want to play? -1. Open [Play & maps](https://minegeo.vercel.app/servers). +1. Open [Play & maps](https://minegeo.site/servers). 2. Choose a map. 3. Choose Easy for a relaxed first game. 4. Click **Start exploring**. diff --git a/docs/gitbook/creating-maps.md b/docs/gitbook/creating-maps.md index bb36972..5193967 100644 --- a/docs/gitbook/creating-maps.md +++ b/docs/gitbook/creating-maps.md @@ -13,7 +13,7 @@ Uploading does not immediately make your map public. A **draft** is a map only y ## How do I take the pictures? -Use the MineGeo capture mod from [Downloads](https://minegeo.vercel.app/downloads). A mod is an add-on for Minecraft. It helps you capture views and send them to MineGeo. +Use the MineGeo capture mod from [Downloads](https://minegeo.site/downloads). A mod is an add-on for Minecraft. It helps you capture views and send them to MineGeo. Open **Capture your Minecraft world** in these docs for the next steps. If you have never installed a Minecraft mod, ask a friend who has, or your server owner, to help. You do not need a capture tool just to play other people's maps. diff --git a/docs/gitbook/desktop.md b/docs/gitbook/desktop.md index aa2fd05..f09e1af 100644 --- a/docs/gitbook/desktop.md +++ b/docs/gitbook/desktop.md @@ -4,7 +4,7 @@ Want MineGeo in its own window? The Windows app plays the same online game as th ## Get the app -1. Open [Downloads](https://minegeo.vercel.app/downloads). +1. Open [Downloads](https://minegeo.site/downloads). 2. Choose the **Windows x64** download. 3. When it finishes, open the downloaded MineGeo file. You can usually find it in your Downloads folder. 4. Play as a guest or sign in to your account. @@ -23,4 +23,4 @@ The app remembers your sign-in on that computer. Choose **Sign out** when using ## If it will not open the game -Check your internet connection and try [MineGeo in your browser](https://minegeo.vercel.app). Tell support whether both versions fail or only the app. +Check your internet connection and try [MineGeo in your browser](https://minegeo.site). Tell support whether both versions fail or only the app. diff --git a/docs/gitbook/playing.md b/docs/gitbook/playing.md index 095619c..d1a4ca4 100644 --- a/docs/gitbook/playing.md +++ b/docs/gitbook/playing.md @@ -4,7 +4,7 @@ Your goal is to work out where the view was taken. You do not need to know Minec ## Play a round -1. Open [Play & maps](https://minegeo.vercel.app/servers), choose a map, and keep **Solo** selected. +1. Open [Play & maps](https://minegeo.site/servers), choose a map, and keep **Solo** selected. 2. Pick a difficulty and click **Start exploring**. 3. Drag the picture to look around. You can turn your view, but you cannot walk around. 4. Look for a mountain, beach, river, road, or interesting building. @@ -31,4 +31,4 @@ A familiar reaction when every mountain looks like your mountain. [Meme source: ## See how you did -At the end, compare your guesses with the real locations. Visit the [Leaderboard](https://minegeo.vercel.app/leaderboard) to search for players or choose a difficulty. Your best full-game score is used for ranking. Multiplayer has its own results, and private imported maps do not add leaderboard scores. +At the end, compare your guesses with the real locations. Visit the [Leaderboard](https://minegeo.site/leaderboard) to search for players or choose a difficulty. Your best full-game score is used for ranking. Multiplayer has its own results, and private imported maps do not add leaderboard scores. diff --git a/docs/gitbook/server-plugin.md b/docs/gitbook/server-plugin.md index caf208a..16708e7 100644 --- a/docs/gitbook/server-plugin.md +++ b/docs/gitbook/server-plugin.md @@ -4,7 +4,7 @@ This page is for players who want to make a map. If you only want to guess locat ## Before you start -You need Minecraft Java and the matching MineGeo capture mod from [Downloads](https://minegeo.vercel.app/downloads). The page lists the supported Minecraft versions and what to install alongside it. +You need Minecraft Java and the matching MineGeo capture mod from [Downloads](https://minegeo.site/downloads). The page lists the supported Minecraft versions and what to install alongside it. If mod installation is new to you, ask a friend or server owner for help with that part. Choose the download matching your Minecraft version. Your server does not need its own MineGeo plugin for you to use the capture mod. diff --git a/docs/gitbook/support.md b/docs/gitbook/support.md index c249ea7..2342061 100644 --- a/docs/gitbook/support.md +++ b/docs/gitbook/support.md @@ -4,7 +4,7 @@ Found something broken? Tell us what happened so we can help. ## Send a report -1. Click **Report a bug** in the header, or open [Support](https://minegeo.vercel.app/support). +1. Click **Report a bug** in the header, or open [Support](https://minegeo.site/support). 2. Give it a clear title, such as “The map stays blank when I start a game”. 3. Describe what you clicked, what you expected, and what happened instead. 4. Add a screenshot if it helps. You can attach one PNG, JPG, or WebP picture up to **5 MB**. diff --git a/docs/gitbook/troubleshooting.md b/docs/gitbook/troubleshooting.md index 3b543f9..b2924db 100644 --- a/docs/gitbook/troubleshooting.md +++ b/docs/gitbook/troubleshooting.md @@ -42,7 +42,7 @@ Try the browser you originally used. Guest reports depend on that browser rememb ## The Windows app will not load -Check your connection, then try [MineGeo in your browser](https://minegeo.vercel.app). Tell support whether the website works and the app does not, or both fail. +Check your connection, then try [MineGeo in your browser](https://minegeo.site). Tell support whether the website works and the app does not, or both fail. ## Discord still shows a closed party diff --git a/docs/prometheus.md b/docs/prometheus.md index 52afdcf..08e673d 100644 --- a/docs/prometheus.md +++ b/docs/prometheus.md @@ -19,7 +19,7 @@ No new Vercel environment variables or Supabase keys are needed. use **Refresh status** to update it. Prometheus must be able to reach MineGeo's public HTTPS address. The endpoint is -`https://minegeo.vercel.app/api/metrics`, protected by an Authorization bearer +`https://minegeo.site/api/metrics`, protected by an Authorization bearer header. Browser login cookies, plugin credentials, and URL query tokens do not grant access. The generated job scrapes once a minute with a 20-second timeout and does not forward credentials through redirects. Keep the configuration diff --git a/docs/server-plugin.md b/docs/server-plugin.md index fd3e1de..8b739d3 100644 --- a/docs/server-plugin.md +++ b/docs/server-plugin.md @@ -11,7 +11,7 @@ minegeo server play.your-minecraft-server.example minegeo link ``` -The website URL is built in: `https://minegeo.vercel.app`. Existing `website` settings are removed on startup; no URL configuration is needed. `minegeo website` displays the fixed endpoint. Account tokens remain private local configuration. +The website URL is built in: `https://minegeo.site`. Existing `website` settings are removed on startup; no URL configuration is needed. `minegeo website` displays the fixed endpoint. Account tokens remain private local configuration. `minegeo server` sets the Minecraft connection hostname/IP, including a non-default port if needed. It is separate from the MineGeo website URL. Use the address players enter in Minecraft, or set `server-address` in `config.yml` and reload before exporting. The plugin records it in each export. Contributions to checked maps reject a missing or different capture address; old exports need to be recreated after configuring it. The map owner can override or clear the expected address in panorama settings. See [contribution server checks](panorama-contributions.md#contribution-server-check). diff --git a/lib/discord-client.ts b/lib/discord-client.ts index e01be31..42f8783 100644 --- a/lib/discord-client.ts +++ b/lib/discord-client.ts @@ -146,7 +146,7 @@ export class DiscordClient { headers: { Authorization: `Bot ${this.token}`, "Content-Type": "application/json", - "User-Agent": "MineGeo (https://minegeo.vercel.app, 1.0)", + "User-Agent": "MineGeo (https://minegeo.site, 1.0)", }, ...(body ? { body: JSON.stringify(body) } : {}), signal: AbortSignal.timeout(15_000), diff --git a/public/desktop/MineGeo-1.0.0-windows-x64.exe b/public/desktop/MineGeo-1.0.0-windows-x64.exe index ac8d7ba..5fecfb1 100644 Binary files a/public/desktop/MineGeo-1.0.0-windows-x64.exe and b/public/desktop/MineGeo-1.0.0-windows-x64.exe differ diff --git a/public/desktop/MineGeo-1.0.0-windows-x64.exe.sha256 b/public/desktop/MineGeo-1.0.0-windows-x64.exe.sha256 index e198783..6ed8ba7 100644 --- a/public/desktop/MineGeo-1.0.0-windows-x64.exe.sha256 +++ b/public/desktop/MineGeo-1.0.0-windows-x64.exe.sha256 @@ -1 +1 @@ -6cae2a0b8ddf37083377b2f68bbba690cbaafa933c64eb7a5e797da43294059f MineGeo-1.0.0-windows-x64.exe +332c548fc3ff749489d30f15a1954485aced863fee04ffd2ccd4381197c26c65 MineGeo-1.0.0-windows-x64.exe diff --git a/scripts/supervise.mjs b/scripts/supervise.mjs index e528838..5e4f622 100644 --- a/scripts/supervise.mjs +++ b/scripts/supervise.mjs @@ -13,12 +13,19 @@ function run(args) { windowsHide: true, }); children.push(c); - c.on("exit", (code) => { + c.on("error", (error) => { if (!stopping) { + console.error(`Unable to start MineGeo process: ${error.message}`); + stop(1); + } + }); + c.on("exit", (code, signal) => { + if (!stopping) { + const reason = code === null ? `signal ${signal ?? "unknown"}` : `code ${code}`; console.error( - `MineGeo process exited (${code}). Shutting down companion process.`, + `MineGeo process exited (${reason}). Shutting down companion process.`, ); - stop(code ?? 1); + stop(code === 0 ? 1 : (code ?? 1)); } }); return c; @@ -26,8 +33,30 @@ function run(args) { function stop(code = 0) { if (stopping) return; stopping = true; - for (const c of children) c.kill("SIGTERM"); - setTimeout(() => process.exit(code), 500).unref(); + const running = (child) => child.exitCode === null && child.signalCode === null; + for (const c of children) { + if (running(c)) c.kill("SIGTERM"); + } + + const forceStop = setTimeout(() => { + for (const c of children) { + if (running(c)) c.kill("SIGKILL"); + } + process.exit(code); + }, 8_000); + + Promise.all( + children.map( + (c) => + new Promise((resolve) => { + if (!running(c)) resolve(); + else c.once("close", resolve); + }), + ), + ).then(() => { + clearTimeout(forceStop); + process.exitCode = code; + }); } process.on("SIGINT", () => stop()); process.on("SIGTERM", () => stop()); diff --git a/scripts/test-admin-permissions-production.mjs b/scripts/test-admin-permissions-production.mjs index 00b99db..305a0e5 100644 --- a/scripts/test-admin-permissions-production.mjs +++ b/scripts/test-admin-permissions-production.mjs @@ -2,7 +2,7 @@ import assert from "node:assert/strict"; import { randomUUID, randomBytes } from "node:crypto"; import { createClient } from "@supabase/supabase-js"; process.loadEnvFile(".env.local"); -const origin = process.argv[2] || "https://minegeo.vercel.app"; +const origin = process.argv[2] || "https://minegeo.site"; const db = createClient( process.env.NEXT_PUBLIC_SUPABASE_URL, process.env.SUPABASE_SECRET_KEY, diff --git a/scripts/test-bug-reports-browser.mjs b/scripts/test-bug-reports-browser.mjs index b8f3da9..704ca81 100644 --- a/scripts/test-bug-reports-browser.mjs +++ b/scripts/test-bug-reports-browser.mjs @@ -6,7 +6,7 @@ import { createClient } from "@supabase/supabase-js"; import sharp from "sharp"; process.loadEnvFile(".env.local"); -const origin = process.argv[2] || "https://minegeo.vercel.app"; +const origin = process.argv[2] || "https://minegeo.site"; const db = createClient( process.env.NEXT_PUBLIC_SUPABASE_URL, process.env.SUPABASE_SECRET_KEY, diff --git a/scripts/test-bug-retention-http.mjs b/scripts/test-bug-retention-http.mjs index 166ad42..25438e1 100644 --- a/scripts/test-bug-retention-http.mjs +++ b/scripts/test-bug-retention-http.mjs @@ -4,7 +4,7 @@ import { mkdir, writeFile } from "node:fs/promises"; import { createClient } from "@supabase/supabase-js"; import sharp from "sharp"; process.loadEnvFile(".env.local"); -const origin = new URL(process.argv[2] || "https://minegeo.vercel.app").origin; +const origin = new URL(process.argv[2] || "https://minegeo.site").origin; const db = createClient( process.env.NEXT_PUBLIC_SUPABASE_URL, process.env.SUPABASE_SECRET_KEY, diff --git a/scripts/test-discord-http.mjs b/scripts/test-discord-http.mjs index bb55b1e..4b5241d 100644 --- a/scripts/test-discord-http.mjs +++ b/scripts/test-discord-http.mjs @@ -3,7 +3,7 @@ import { randomUUID, randomBytes } from "node:crypto"; import { mkdir, writeFile } from "node:fs/promises"; import { createClient } from "@supabase/supabase-js"; process.loadEnvFile(".env.local"); -const origin = process.argv[2] || "https://minegeo.vercel.app"; +const origin = process.argv[2] || "https://minegeo.site"; const db = createClient( process.env.NEXT_PUBLIC_SUPABASE_URL, process.env.SUPABASE_SECRET_KEY, diff --git a/scripts/test-map-sharing-browser.ts b/scripts/test-map-sharing-browser.ts index dad4043..5617a24 100644 --- a/scripts/test-map-sharing-browser.ts +++ b/scripts/test-map-sharing-browser.ts @@ -8,7 +8,7 @@ import { datasetSchema, faces } from "../shared/protocol"; import { readMapArchive } from "../shared/map-archive"; process.loadEnvFile(".env.local"); -const origin = new URL(process.argv[2] || "https://minegeo.vercel.app").origin; +const origin = new URL(process.argv[2] || "https://minegeo.site").origin; const db = createClient( process.env.NEXT_PUBLIC_SUPABASE_URL!, process.env.SUPABASE_SECRET_KEY!, diff --git a/scripts/test-profile-appearance-browser.mjs b/scripts/test-profile-appearance-browser.mjs index 22c36b9..f8a920a 100644 --- a/scripts/test-profile-appearance-browser.mjs +++ b/scripts/test-profile-appearance-browser.mjs @@ -5,7 +5,7 @@ import { chromium } from "@playwright/test"; import { createClient } from "@supabase/supabase-js"; process.loadEnvFile(".env.local"); -const origin = process.argv[2] || "https://minegeo.vercel.app", +const origin = process.argv[2] || "https://minegeo.site", reportId = process.argv[3]; assert.match( reportId ?? "", diff --git a/shared/desktop-release.json b/shared/desktop-release.json index 2677efe..ebd15af 100644 --- a/shared/desktop-release.json +++ b/shared/desktop-release.json @@ -1,6 +1,6 @@ { "version": "1.0.0", "file": "/desktop/MineGeo-1.0.0-windows-x64.exe", - "bytes": 100277533, - "sha256": "6cae2a0b8ddf37083377b2f68bbba690cbaafa933c64eb7a5e797da43294059f" + "bytes": 100189725, + "sha256": "332c548fc3ff749489d30f15a1954485aced863fee04ffd2ccd4381197c26c65" } diff --git a/shared/developer-docs.ts b/shared/developer-docs.ts index 10bc151..5c43e0a 100644 --- a/shared/developer-docs.ts +++ b/shared/developer-docs.ts @@ -77,7 +77,7 @@ export const developerPythonExample = `import os import requests response = requests.get( - "https://minegeo.vercel.app/api/dev/v1/maps", + "https://minegeo.site/api/dev/v1/maps", headers={"Authorization": f"Bearer {os.environ['MINEGEO_API_KEY']}"}, params={"limit": 20, "offset": 0}, timeout=20, diff --git a/shared/locales/ru.json b/shared/locales/ru.json index 100c4f3..4f4b0b2 100644 --- a/shared/locales/ru.json +++ b/shared/locales/ru.json @@ -686,7 +686,7 @@ "Players can only be removed before the match starts": "Удалять игроков можно только до начала игры", "Minecraft Java 1.21.11, 26.1 & 26.2 + Fabric Loader + Fabric API": "Minecraft Java 1.21.11, 26.1 и 26.2 + Fabric Loader + Fabric API", "Bukkit/Paper 1.21.11, 26.1 & 26.2": "Bukkit/Paper 1.21.11, 26.1 и 26.2", - "Java 21 for 1.21.11; Java 25 for 26.1 and 26.2. Both tools connect to minegeo.vercel.app automatically.": "Java 21 для 1.21.11; Java 25 для 26.1 и 26.2. Оба инструмента автоматически подключаются к minegeo.vercel.app.", + "Java 21 for 1.21.11; Java 25 for 26.1 and 26.2. Both tools connect to minegeo.site automatically.": "Java 21 для 1.21.11; Java 25 для 26.1 и 26.2. Оба инструмента автоматически подключаются к minegeo.site.", "Put the JAR in plugins/ and restart. Set server-name and server-address in plugins/MineGeo/config.yml, then run /minegeo reload. Permission: minegeo.admin. The same plugin JAR supports all three versions.": "Поместите JAR в plugins/ и перезапустите сервер. Укажите server-name и server-address в plugins/MineGeo/config.yml, затем выполните /minegeo reload. Разрешение: minegeo.admin. Один JAR плагина поддерживает все три версии.", "The newest eligible capture is selected automatically. Choose the original capture only if you want its older terrain.": "Автоматически выбирается самый новый подходящий снимок. Выбирай исходный снимок, только если нужен старый ландшафт.", "Last successful refresh used: {capture}.": "Последнее успешное обновление использовало: {capture}.", @@ -866,7 +866,7 @@ "Your next expedition, on your desktop.": "Следующая экспедиция — на вашем компьютере.", "Download the portable app, run the EXE, and start exploring. No installation needed.": "Скачайте портативное приложение, запустите EXE и начните исследование. Установка не нужна.", "Windows 10/11 · 64-bit · Version {version} · Internet required": "Windows 10/11 · 64 бита · Версия {version} · Нужен интернет", - "The app connects to minegeo.vercel.app and keeps you signed in on this device.": "Приложение подключается к minegeo.vercel.app и сохраняет вход на этом устройстве.", + "The app connects to minegeo.site and keeps you signed in on this device.": "Приложение подключается к minegeo.site и сохраняет вход на этом устройстве.", "This release is unsigned. Windows may show a publisher warning when you open it.": "Эта версия без цифровой подписи. При запуске Windows может показать предупреждение об издателе.", "Prometheus & Grafana": "Prometheus и Grafana", "Track games, maps, multiplayer, uploads, and reports in your own Grafana dashboard. Admin permission is required to manage access.": "Следите за играми, картами, мультиплеером, загрузками и обращениями на своей панели Grafana. Для управления доступом нужны права администратора.", diff --git a/shared/player-docs.json b/shared/player-docs.json index 5a5e66c..680bdce 100644 --- a/shared/player-docs.json +++ b/shared/player-docs.json @@ -2,12 +2,12 @@ { "title": "Welcome to MineGeo", "slug": "welcome", - "markdown": "# Welcome to MineGeo\n\nWelcome, explorer! MineGeo drops you into a Minecraft view and asks one question: **where are you?** Look for clues, pick a spot on the map, and see how close you got.\n\n> Me: “I know this place.” Also me: guesses on the other side of the map. 🗿\n\n## Just want to play?\n\n1. Open [Play & maps](https://minegeo.vercel.app/servers).\n2. Choose a map.\n3. Choose Easy for a relaxed first game.\n4. Click **Start exploring**.\n\nYou can play public maps without an account or Minecraft installed. A game has five rounds. Read **Your first game** in the page menu if you want a walkthrough.\n\n## Find your guide\n\n- **Multiplayer and chat:** invite friends and talk while you play.\n- **Accounts and appearance:** change your name, theme, or glow color.\n- **Windows desktop client:** play in a separate app.\n- **Create and publish a map:** let others explore your Minecraft builds.\n- **Share and import maps:** play a map your friend sent as a ZIP file.\n- **Bug reports and support:** get help when something breaks.\n\n## A small heads-up\n\nYou need an internet connection. Sign in to host a party or keep your own maps. These instructions use the English button names; Russian is available in the site's footer.\n\nMineGeo is an independent community project, not affiliated with Mojang or Microsoft." + "markdown": "# Welcome to MineGeo\n\nWelcome, explorer! MineGeo drops you into a Minecraft view and asks one question: **where are you?** Look for clues, pick a spot on the map, and see how close you got.\n\n> Me: “I know this place.” Also me: guesses on the other side of the map. 🗿\n\n## Just want to play?\n\n1. Open [Play & maps](https://minegeo.site/servers).\n2. Choose a map.\n3. Choose Easy for a relaxed first game.\n4. Click **Start exploring**.\n\nYou can play public maps without an account or Minecraft installed. A game has five rounds. Read **Your first game** in the page menu if you want a walkthrough.\n\n## Find your guide\n\n- **Multiplayer and chat:** invite friends and talk while you play.\n- **Accounts and appearance:** change your name, theme, or glow color.\n- **Windows desktop client:** play in a separate app.\n- **Create and publish a map:** let others explore your Minecraft builds.\n- **Share and import maps:** play a map your friend sent as a ZIP file.\n- **Bug reports and support:** get help when something breaks.\n\n## A small heads-up\n\nYou need an internet connection. Sign in to host a party or keep your own maps. These instructions use the English button names; Russian is available in the site's footer.\n\nMineGeo is an independent community project, not affiliated with Mojang or Microsoft." }, { "title": "Your first game", "slug": "playing", - "markdown": "# Your first game\n\nYour goal is to work out where the view was taken. You do not need to know Minecraft coordinates to enjoy a game.\n\n## Play a round\n\n1. Open [Play & maps](https://minegeo.vercel.app/servers), choose a map, and keep **Solo** selected.\n2. Pick a difficulty and click **Start exploring**.\n3. Drag the picture to look around. You can turn your view, but you cannot walk around.\n4. Look for a mountain, beach, river, road, or interesting building.\n5. Open the small map in the bottom-right corner. Click where you think you are to place a pin.\n6. Move the pin if you change your mind, then submit your guess before time runs out.\n\n## Pick your pace\n\n- **Easy:** 3 minutes per round, with zoom. A good place to start.\n- **Normal:** 90 seconds per round, with zoom.\n- **Hard:** 30 seconds per round, without zoom. Bring your detective hat.\n\n> “Just one more look around.” The timer: 0:01. 💀\n\n## How points work\n\nA closer guess earns more points. You can get up to **5,000 per round** and **25,000 across all five rounds**. If the clock runs out without a guess, that round gets zero. You can still finish the game.\n\nNorth is at the top of the map. Compare shapes: a bend in a river or the edge of a forest can be easier to spot than a single house.\n\n![Confused Math Lady meme: a puzzled face surrounded by equations](https://i.imgflip.com/6677gf.png)\n\nA familiar reaction when every mountain looks like your mountain. [Meme source: Imgflip](https://imgflip.com/memetemplate/373211007/Confusion).\n\n## See how you did\n\nAt the end, compare your guesses with the real locations. Visit the [Leaderboard](https://minegeo.vercel.app/leaderboard) to search for players or choose a difficulty. Your best full-game score is used for ranking. Multiplayer has its own results, and private imported maps do not add leaderboard scores." + "markdown": "# Your first game\n\nYour goal is to work out where the view was taken. You do not need to know Minecraft coordinates to enjoy a game.\n\n## Play a round\n\n1. Open [Play & maps](https://minegeo.site/servers), choose a map, and keep **Solo** selected.\n2. Pick a difficulty and click **Start exploring**.\n3. Drag the picture to look around. You can turn your view, but you cannot walk around.\n4. Look for a mountain, beach, river, road, or interesting building.\n5. Open the small map in the bottom-right corner. Click where you think you are to place a pin.\n6. Move the pin if you change your mind, then submit your guess before time runs out.\n\n## Pick your pace\n\n- **Easy:** 3 minutes per round, with zoom. A good place to start.\n- **Normal:** 90 seconds per round, with zoom.\n- **Hard:** 30 seconds per round, without zoom. Bring your detective hat.\n\n> “Just one more look around.” The timer: 0:01. 💀\n\n## How points work\n\nA closer guess earns more points. You can get up to **5,000 per round** and **25,000 across all five rounds**. If the clock runs out without a guess, that round gets zero. You can still finish the game.\n\nNorth is at the top of the map. Compare shapes: a bend in a river or the edge of a forest can be easier to spot than a single house.\n\n![Confused Math Lady meme: a puzzled face surrounded by equations](https://i.imgflip.com/6677gf.png)\n\nA familiar reaction when every mountain looks like your mountain. [Meme source: Imgflip](https://imgflip.com/memetemplate/373211007/Confusion).\n\n## See how you did\n\nAt the end, compare your guesses with the real locations. Visit the [Leaderboard](https://minegeo.site/leaderboard) to search for players or choose a difficulty. Your best full-game score is used for ranking. Multiplayer has its own results, and private imported maps do not add leaderboard scores." }, { "title": "Multiplayer and chat", @@ -22,17 +22,17 @@ { "title": "Windows desktop client", "slug": "desktop", - "markdown": "# Windows desktop client\n\nWant MineGeo in its own window? The Windows app plays the same online game as the website.\n\n## Get the app\n\n1. Open [Downloads](https://minegeo.vercel.app/downloads).\n2. Choose the **Windows x64** download.\n3. When it finishes, open the downloaded MineGeo file. You can usually find it in your Downloads folder.\n4. Play as a guest or sign in to your account.\n\nThere is no installation wizard. You need an internet connection. The current app is for Windows; on Mac or Linux, use the website instead.\n\n## A Windows warning?\n\nThe current app may show an unknown-publisher warning. Download it only from MineGeo's official Downloads page. If you are unsure about the warning, use the website or ask support for help.\n\n## Updates and sign-in\n\nWebsite changes appear when the app reloads. When a new desktop app is released, download the new version from Downloads.\n\nThe app remembers your sign-in on that computer. Choose **Sign out** when using a shared computer. Removing the downloaded app file does not automatically sign you out.\n\n## If it will not open the game\n\nCheck your internet connection and try [MineGeo in your browser](https://minegeo.vercel.app). Tell support whether both versions fail or only the app." + "markdown": "# Windows desktop client\n\nWant MineGeo in its own window? The Windows app plays the same online game as the website.\n\n## Get the app\n\n1. Open [Downloads](https://minegeo.site/downloads).\n2. Choose the **Windows x64** download.\n3. When it finishes, open the downloaded MineGeo file. You can usually find it in your Downloads folder.\n4. Play as a guest or sign in to your account.\n\nThere is no installation wizard. You need an internet connection. The current app is for Windows; on Mac or Linux, use the website instead.\n\n## A Windows warning?\n\nThe current app may show an unknown-publisher warning. Download it only from MineGeo's official Downloads page. If you are unsure about the warning, use the website or ask support for help.\n\n## Updates and sign-in\n\nWebsite changes appear when the app reloads. When a new desktop app is released, download the new version from Downloads.\n\nThe app remembers your sign-in on that computer. Choose **Sign out** when using a shared computer. Removing the downloaded app file does not automatically sign you out.\n\n## If it will not open the game\n\nCheck your internet connection and try [MineGeo in your browser](https://minegeo.site). Tell support whether both versions fail or only the app." }, { "title": "Create and publish a map", "slug": "creating-maps", - "markdown": "# Create and publish a map\n\nBuilt something worth getting lost in? Turn it into a map for other players.\n\n## The short version\n\n1. Capture views in Minecraft with a MineGeo capture tool.\n2. Upload them to your account.\n3. Check your private map and choose the views you want to use.\n4. Send it for review when it is ready.\n\nUploading does not immediately make your map public. A **draft** is a map only you can work on before sharing it publicly.\n\n## How do I take the pictures?\n\nUse the MineGeo capture mod from [Downloads](https://minegeo.vercel.app/downloads). A mod is an add-on for Minecraft. It helps you capture views and send them to MineGeo.\n\nOpen **Capture your Minecraft world** in these docs for the next steps. If you have never installed a Minecraft mod, ask a friend who has, or your server owner, to help. You do not need a capture tool just to play other people's maps.\n\n## Check your map\n\nAfter uploading, open **My account**, find your map, and click **Open map**. Wait for the pictures to finish preparing.\n\nGive it a clear name and description. Look all the way around each view: can a player see useful clues? Keep at least **five locations**. A map can hold up to **24**. Save your changes.\n\n> Your beautiful base: 10/10. Your ability to recognize its back wall: 0/10. 😅\n\n## Let everyone play\n\nClick **Submit for review**. A Moderator or Admin will check the map. If they return it, read their feedback, make the changes, and send it again.\n\nWhile a public map's update is being checked, players can still enjoy its previous approved version. Some editing controls are unavailable during review.\n\nA map imported from a friend's ZIP cannot be submitted as your own. You can play that copy privately instead." + "markdown": "# Create and publish a map\n\nBuilt something worth getting lost in? Turn it into a map for other players.\n\n## The short version\n\n1. Capture views in Minecraft with a MineGeo capture tool.\n2. Upload them to your account.\n3. Check your private map and choose the views you want to use.\n4. Send it for review when it is ready.\n\nUploading does not immediately make your map public. A **draft** is a map only you can work on before sharing it publicly.\n\n## How do I take the pictures?\n\nUse the MineGeo capture mod from [Downloads](https://minegeo.site/downloads). A mod is an add-on for Minecraft. It helps you capture views and send them to MineGeo.\n\nOpen **Capture your Minecraft world** in these docs for the next steps. If you have never installed a Minecraft mod, ask a friend who has, or your server owner, to help. You do not need a capture tool just to play other people's maps.\n\n## Check your map\n\nAfter uploading, open **My account**, find your map, and click **Open map**. Wait for the pictures to finish preparing.\n\nGive it a clear name and description. Look all the way around each view: can a player see useful clues? Keep at least **five locations**. A map can hold up to **24**. Save your changes.\n\n> Your beautiful base: 10/10. Your ability to recognize its back wall: 0/10. 😅\n\n## Let everyone play\n\nClick **Submit for review**. A Moderator or Admin will check the map. If they return it, read their feedback, make the changes, and send it again.\n\nWhile a public map's update is being checked, players can still enjoy its previous approved version. Some editing controls are unavailable during review.\n\nA map imported from a friend's ZIP cannot be submitted as your own. You can play that copy privately instead." }, { "title": "Capture your Minecraft world", "slug": "server-plugin", - "markdown": "# Capture your Minecraft world\n\nThis page is for players who want to make a map. If you only want to guess locations, you can skip it!\n\n## Before you start\n\nYou need Minecraft Java and the matching MineGeo capture mod from [Downloads](https://minegeo.vercel.app/downloads). The page lists the supported Minecraft versions and what to install alongside it.\n\nIf mod installation is new to you, ask a friend or server owner for help with that part. Choose the download matching your Minecraft version. Your server does not need its own MineGeo plugin for you to use the capture mod.\n\n## Capture a new map\n\n1. Open Minecraft with the capture mod installed.\n2. Join the world or server you want to show.\n3. Press **G** to open MineGeo's capture panel.\n4. Follow the sign-in steps to connect your MineGeo account.\n5. For a new map, leave **Add to map ID** empty.\n6. Capture at least **five different viewpoints**, up to 24, then upload.\n7. Return to **My account** on MineGeo and open your map when it is ready.\n\nA viewpoint is the place you stand when taking a view. Spread them around interesting parts of the world so players have something to recognize.\n\n## Pick useful views\n\n- Show landmarks, paths, rivers, hills, and buildings.\n- Check the view is clear rather than completely blocked by a wall.\n- Capture places you have permission to share.\n- Preview the finished pictures before sending the map for review.\n\n## What if my server owner handles maps?\n\nAsk them whether they can make a map with MineGeo's server plugin. You do not need to type server commands or manage the server yourself.\n\n## Adding views to someone else's map?\n\nRead **Contribute panoramas** first. You will need the owner's map ID, which tells MineGeo which map should receive your views." + "markdown": "# Capture your Minecraft world\n\nThis page is for players who want to make a map. If you only want to guess locations, you can skip it!\n\n## Before you start\n\nYou need Minecraft Java and the matching MineGeo capture mod from [Downloads](https://minegeo.site/downloads). The page lists the supported Minecraft versions and what to install alongside it.\n\nIf mod installation is new to you, ask a friend or server owner for help with that part. Choose the download matching your Minecraft version. Your server does not need its own MineGeo plugin for you to use the capture mod.\n\n## Capture a new map\n\n1. Open Minecraft with the capture mod installed.\n2. Join the world or server you want to show.\n3. Press **G** to open MineGeo's capture panel.\n4. Follow the sign-in steps to connect your MineGeo account.\n5. For a new map, leave **Add to map ID** empty.\n6. Capture at least **five different viewpoints**, up to 24, then upload.\n7. Return to **My account** on MineGeo and open your map when it is ready.\n\nA viewpoint is the place you stand when taking a view. Spread them around interesting parts of the world so players have something to recognize.\n\n## Pick useful views\n\n- Show landmarks, paths, rivers, hills, and buildings.\n- Check the view is clear rather than completely blocked by a wall.\n- Capture places you have permission to share.\n- Preview the finished pictures before sending the map for review.\n\n## What if my server owner handles maps?\n\nAsk them whether they can make a map with MineGeo's server plugin. You do not need to type server commands or manage the server yourself.\n\n## Adding views to someone else's map?\n\nRead **Contribute panoramas** first. You will need the owner's map ID, which tells MineGeo which map should receive your views." }, { "title": "Contribute panoramas", @@ -47,7 +47,7 @@ { "title": "Bug reports and support", "slug": "support", - "markdown": "# Bug reports and support\n\nFound something broken? Tell us what happened so we can help.\n\n## Send a report\n\n1. Click **Report a bug** in the header, or open [Support](https://minegeo.vercel.app/support).\n2. Give it a clear title, such as “The map stays blank when I start a game”.\n3. Describe what you clicked, what you expected, and what happened instead.\n4. Add a screenshot if it helps. You can attach one PNG, JPG, or WebP picture up to **5 MB**.\n5. Click **Send bug report**.\n\nA screenshot is a picture of what is on your screen. On Windows, press **Windows + Shift + S**, select the area, and save the picture before attaching it. Hide private messages, passwords, and other personal information first.\n\n## Example\n\n“I opened a map, chose Normal, and clicked Start exploring. The timer started, but the picture stayed blank. I tried refreshing once. I am playing in the Windows app.”\n\nYou do not need technical words or a perfect explanation. Tell us what you saw.\n\n## Read and send replies\n\nOpen the report from **Your bug reports** on the support page. Staff replies appear there, and you can send more information in the same conversation. You do not need another app or a separate support account.\n\nIf the report says it is still waiting to be delivered, keep an eye on that message. A saved report may not have reached support yet.\n\n## Keep access to your report\n\nSigning in is the easiest way to keep your reports. If you sent one as a guest, return using the same browser. Sign in there and choose **Keep this report in my account**.\n\nClearing your browser data before linking a guest report may lose access to it.\n\n## Rewards\n\nStaff may award a username glow and **Bug finder** badge for a confirmed bug. If you receive a glow, choose its color in settings. A guest must link the report to an account to receive a pending account reward.\n\n## Finished with the report?\n\nOnce support has received it, you can choose **Close report**. Staff can close it too. It becomes **Done** and you cannot send more messages.\n\n**Closed reports, messages, and screenshots are deleted after three days.** The page shows the deletion date. Save anything you need before then. Account rewards you have already received stay with your account." + "markdown": "# Bug reports and support\n\nFound something broken? Tell us what happened so we can help.\n\n## Send a report\n\n1. Click **Report a bug** in the header, or open [Support](https://minegeo.site/support).\n2. Give it a clear title, such as “The map stays blank when I start a game”.\n3. Describe what you clicked, what you expected, and what happened instead.\n4. Add a screenshot if it helps. You can attach one PNG, JPG, or WebP picture up to **5 MB**.\n5. Click **Send bug report**.\n\nA screenshot is a picture of what is on your screen. On Windows, press **Windows + Shift + S**, select the area, and save the picture before attaching it. Hide private messages, passwords, and other personal information first.\n\n## Example\n\n“I opened a map, chose Normal, and clicked Start exploring. The timer started, but the picture stayed blank. I tried refreshing once. I am playing in the Windows app.”\n\nYou do not need technical words or a perfect explanation. Tell us what you saw.\n\n## Read and send replies\n\nOpen the report from **Your bug reports** on the support page. Staff replies appear there, and you can send more information in the same conversation. You do not need another app or a separate support account.\n\nIf the report says it is still waiting to be delivered, keep an eye on that message. A saved report may not have reached support yet.\n\n## Keep access to your report\n\nSigning in is the easiest way to keep your reports. If you sent one as a guest, return using the same browser. Sign in there and choose **Keep this report in my account**.\n\nClearing your browser data before linking a guest report may lose access to it.\n\n## Rewards\n\nStaff may award a username glow and **Bug finder** badge for a confirmed bug. If you receive a glow, choose its color in settings. A guest must link the report to an account to receive a pending account reward.\n\n## Finished with the report?\n\nOnce support has received it, you can choose **Close report**. Staff can close it too. It becomes **Done** and you cannot send more messages.\n\n**Closed reports, messages, and screenshots are deleted after three days.** The page shows the deletion date. Save anything you need before then. Account rewards you have already received stay with your account." }, { "title": "Content reports and appeals", @@ -57,7 +57,7 @@ { "title": "Troubleshooting", "slug": "troubleshooting", - "markdown": "# Troubleshooting\n\nStart with the problem closest to yours. If these steps do not help, use **Report a bug** and tell us what you see.\n\n## The picture is blank or loading forever\n\nCheck your internet connection and refresh once. Try a different map. If only one map fails, mention which one in your report. In multiplayer, the timer keeps running while you refresh.\n\n## I cannot host a party\n\nSign in first. Hosting needs an account; joining a friend's invitation does not. Your host name comes from your account's Display Name.\n\n## My friend's invite will not work\n\nAsk whether the party is full, already started, or closed. The host can create a fresh party if needed. Old unfinished parties expire after 24 hours.\n\n## My upload is taking a while\n\nOpen the map from **My account** and read its progress message. Preparing a large map can take time. If it shows an error, include that message in a bug report. Repeatedly uploading the same map usually will not help.\n\n> Upload button: clicked. Me, one second later: “Are we there yet?” ⏳\n\n![Mr Bean Waiting meme: Mr Bean checks his watch and waits in a field](https://i.imgflip.com/21ajtl.jpg)\n\nThe classic waiting reaction. Check the progress message before trying the upload again. [Meme source: Imgflip](https://imgflip.com/memetemplate/123104217/Mr-bean-waiting).\n\n## I cannot publish a friend's ZIP map\n\nThat is expected. You can play the imported copy privately and invite friends. Only the original owner can submit the original map for public review.\n\n## My contribution disappeared\n\nContributions leave the dashboard list after five days, but they are not deleted. Use the direct link if you kept it, or ask the map owner for help.\n\n## The capture says I am on the wrong server\n\nCheck that you joined the server the map owner told you to use. If it still fails, ask them to check the expected server address.\n\n## I cannot open an old guest bug report\n\nTry the browser you originally used. Guest reports depend on that browser remembering you. For future reports, sign in or choose Keep this report in my account. Closed reports are deleted after three days.\n\n## The Windows app will not load\n\nCheck your connection, then try [MineGeo in your browser](https://minegeo.vercel.app). Tell support whether the website works and the app does not, or both fail.\n\n## Discord still shows a closed party\n\nThe message turns red and should disappear five minutes after the closed notice reaches Discord. If delivery is delayed, the invite's lobby page shows whether the party is actually open." + "markdown": "# Troubleshooting\n\nStart with the problem closest to yours. If these steps do not help, use **Report a bug** and tell us what you see.\n\n## The picture is blank or loading forever\n\nCheck your internet connection and refresh once. Try a different map. If only one map fails, mention which one in your report. In multiplayer, the timer keeps running while you refresh.\n\n## I cannot host a party\n\nSign in first. Hosting needs an account; joining a friend's invitation does not. Your host name comes from your account's Display Name.\n\n## My friend's invite will not work\n\nAsk whether the party is full, already started, or closed. The host can create a fresh party if needed. Old unfinished parties expire after 24 hours.\n\n## My upload is taking a while\n\nOpen the map from **My account** and read its progress message. Preparing a large map can take time. If it shows an error, include that message in a bug report. Repeatedly uploading the same map usually will not help.\n\n> Upload button: clicked. Me, one second later: “Are we there yet?” ⏳\n\n![Mr Bean Waiting meme: Mr Bean checks his watch and waits in a field](https://i.imgflip.com/21ajtl.jpg)\n\nThe classic waiting reaction. Check the progress message before trying the upload again. [Meme source: Imgflip](https://imgflip.com/memetemplate/123104217/Mr-bean-waiting).\n\n## I cannot publish a friend's ZIP map\n\nThat is expected. You can play the imported copy privately and invite friends. Only the original owner can submit the original map for public review.\n\n## My contribution disappeared\n\nContributions leave the dashboard list after five days, but they are not deleted. Use the direct link if you kept it, or ask the map owner for help.\n\n## The capture says I am on the wrong server\n\nCheck that you joined the server the map owner told you to use. If it still fails, ask them to check the expected server address.\n\n## I cannot open an old guest bug report\n\nTry the browser you originally used. Guest reports depend on that browser remembering you. For future reports, sign in or choose Keep this report in my account. Closed reports are deleted after three days.\n\n## The Windows app will not load\n\nCheck your connection, then try [MineGeo in your browser](https://minegeo.site). Tell support whether the website works and the app does not, or both fail.\n\n## Discord still shows a closed party\n\nThe message turns red and should disappear five minutes after the closed notice reaches Discord. If delivery is delayed, the invite's lobby page shows whether the party is actually open." }, { "title": "Community and badges", diff --git a/tests/desktop.test.ts b/tests/desktop.test.ts index 2620f82..2718673 100644 --- a/tests/desktop.test.ts +++ b/tests/desktop.test.ts @@ -5,11 +5,11 @@ const require = createRequire(import.meta.url); const { isInternal, isExternal } = require("../desktop/navigation.cjs"); test("desktop navigation confines remote content to the production origin", () => { - assert.equal(isInternal("https://minegeo.vercel.app/play?map=1"), true); + assert.equal(isInternal("https://minegeo.site/play?map=1"), true); for (const url of [ - "http://minegeo.vercel.app", - "https://minegeo.vercel.app.evil.test", - "https://minegeo.vercel.app@evil.test", + "http://minegeo.site", + "https://minegeo.site.evil.test", + "https://minegeo.site@evil.test", "file:///C:/Windows", "javascript:alert(1)", "not a URL", diff --git a/tests/developer-api.test.ts b/tests/developer-api.test.ts index bf015b8..4cc9e35 100644 --- a/tests/developer-api.test.ts +++ b/tests/developer-api.test.ts @@ -21,7 +21,7 @@ function request( authorization = `Bearer ${token}`, method = "GET", ) { - return new Request(`https://minegeo.vercel.app/api/dev/v1/${path}`, { + return new Request(`https://minegeo.site/api/dev/v1/${path}`, { method, headers: { authorization, cookie: "admin=ignored" }, }); diff --git a/tests/discord.test.ts b/tests/discord.test.ts index ac52b97..6821cda 100644 --- a/tests/discord.test.ts +++ b/tests/discord.test.ts @@ -36,7 +36,7 @@ const source = { limit: 8, }; test("closed Discord parties turn red, lose their join prompt, and delete idempotently", async () => { - const payload = closedPartyMessage("https://minegeo.vercel.app", target); + const payload = closedPartyMessage("https://minegeo.site", target); assert.equal(payload.embeds[0].color, 0xed4245); assert.ok(payload.embeds[0].description.includes("five minutes")); assert.ok(!JSON.stringify(payload).includes("Join this party")); @@ -59,7 +59,7 @@ test("closed Discord parties turn red, lose their join prompt, and delete idempo await client.closeParty( channel, messageId, - "https://minegeo.vercel.app", + "https://minegeo.site", target, ), true, @@ -73,7 +73,7 @@ test("closed Discord parties turn red, lose their join prompt, and delete idempo await missing.closeParty( channel, messageId, - "https://minegeo.vercel.app", + "https://minegeo.site", target, ), false, @@ -94,7 +94,7 @@ test("closed Discord parties turn red, lose their join prompt, and delete idempo }); test("Discord config requires a public HTTPS site and valid channel IDs without exposing a public token", () => { const env = { - MINEGEO_URL: "https://minegeo.vercel.app", + MINEGEO_URL: "https://minegeo.site", DISCORD_BOT_TOKEN: "test-token", DISCORD_PARTIES_CHANNEL_ID: channel, }; @@ -123,20 +123,20 @@ test("Discord announcements use fixed public links, bounded escaped text, suppre const body = announcementMessage( job.id, "party", - "https://minegeo.vercel.app", + "https://minegeo.site", source, ); assert.deepEqual(body.allowed_mentions, { parse: [] }); assert.equal( body.embeds[0].url, - `https://minegeo.vercel.app/multiplayer/${target}`, + `https://minegeo.site/multiplayer/${target}`, ); assert.ok(!body.embeds[0].title.includes("[click](")); assert.equal(body.nonce.length, 24); assert.equal(body.enforce_nonce, true); assert.equal( body.nonce, - announcementMessage(job.id, "party", "https://minegeo.vercel.app", source) + announcementMessage(job.id, "party", "https://minegeo.site", source) .nonce, ); assert.notEqual( @@ -144,11 +144,11 @@ test("Discord announcements use fixed public links, bounded escaped text, suppre announcementMessage( "another", "party", - "https://minegeo.vercel.app", + "https://minegeo.site", source, ).nonce, ); - const map = announcementMessage(job.id, "map", "https://minegeo.vercel.app", { + const map = announcementMessage(job.id, "map", "https://minegeo.site", { ...source, name: "A".repeat(500), locations: 10, @@ -160,7 +160,7 @@ test("Discord REST sends the bot token only to Discord, confirms message and cha const payload = announcementMessage( job.id, "party", - "https://minegeo.vercel.app", + "https://minegeo.site", source, ); const client = new DiscordClient("private-token", async (url, init) => { @@ -221,7 +221,7 @@ test("durable delivery skips unavailable parties, records acknowledged sends and await deliverDiscordAnnouncement( { ...job, attempts: options.attempts ?? 1 }, { - origin: "https://minegeo.vercel.app", + origin: "https://minegeo.site", channel, now: () => 1000, load: async () => options.source, diff --git a/tests/prometheus.test.ts b/tests/prometheus.test.ts index 1d79abd..8ccdd1b 100644 --- a/tests/prometheus.test.ts +++ b/tests/prometheus.test.ts @@ -105,11 +105,11 @@ test("scrape returns Prometheus text on success and fails closed during database test("copyable YAML scopes bearer credentials to the HTTPS metrics target and disallows malformed setup", () => { const config = prometheusConfig( - "https://minegeo.vercel.app/api/metrics", + "https://minegeo.site/api/metrics", token, ); assert.match(config, /metrics_path: "\/api\/metrics"/); - assert.match(config, /targets: \["minegeo.vercel.app"\]/); + assert.match(config, /targets: \["minegeo.site"\]/); assert.match(config, /follow_redirects: false/); assert.match(config, /type: Bearer/); assert.match(config, /scrape_interval: 60s/);