bytedream d9a906fc0d
deploy / build-and-deploy (push) Failing after 35s
validate report attachment by file mime type
2026-10-31 15:00:30 +01:00
2026-10-29 13:52:20 +01:00
2026-10-29 13:52:20 +01:00
2025-10-13 21:04:21 +02:00
2025-10-13 21:04:21 +02:00
2026-10-29 13:52:20 +01:00
2026-10-31 14:31:42 +01:00
2025-11-11 01:53:56 +01:00

API

Wenn die env variable API_SECRET gesetzt ist, muss jede API Request den HTTP Header Authorization: Basic <"api:<API_SECRET>" as base64> haben.

POST /api/feedback (Erstellt Feedbackformulare)
Request Body
{
  // Interner Event Name (oder ID)
  "event": string,
  // Event Titel, wird über dem Feedbackformular angezeigt
  "title": string,
  // UUIDs aller Spieler, die das Feedback ausfüllen sollen
  "users": string[]
}
Response Codes
http code beschreibung
200 /
400 Der Request Body ist falsch
401 Es wurde ein falsches API Secret angegeben
Response Body
{
  "feedback": {
    // UUID eines Spieler
    "uuid": string
    // URL zum Feedbackformular
    "url": string
  }[]
}
GET /api/reports (Alle Reports)
Path Parameters

/

Response Codes
http code beschreibung
200 /
401 Es wurde ein falsches API Secret angegeben
Response Body
{
  "reports": {
    // Die UUID des Report Erstellers
    "reporter": string,
    // Die UUID des reporteten Spielers oder null falls ein unbekannter Spieler reportet wurde
    "reported": string | null,
    // Grund des Reports
    "reason": string,
    // Wann der Report abgeschickt wurde als UTC Millisekunden oder null falls der Report noch nicht abgeschickt wurde (=> kann noch bearbeitet werden)
    "created": number | null,
    // Status des Reports, "open" wenn er gerade bearbeitet wird, "closed" falls er bearbeitet wurde, null wenn nichts von beidem
    "status": "open" | "closed" | null,
    // Url zum Report auf der Website
    "url": string
  }[]
}
POST /api/reports (Erstellt einen Report)
Request Body
{
  // UUID des Report Erstellers
  "reporter": string,
  // UUID des Reporteten Spielers
  "reported": string | null,
  // Report Grund
  "reason": string
}
Response Codes
http code beschreibung
200 /
400 Der Request Body ist falsch
401 Es wurde ein falsches API Secret angegeben
404 Der Report Ersteller, oder der reportete Spieler, existiert nicht
Response Body
{
  // URL, wo der Ersteller den Report abschicken kann
  "url": string
}
PUT /api/reports (Erstellt einen Abgeschlossenen Report)
Request Body
{
  // UUID des Reporters. Wenn `null`, wird der Reporter als System interpretiert
  "reporter": string | null,
  // UUID des Reporteten Spielers
  "reported": string,
  // Report Grund
  "reason": string,
  // Inhalt des Reports
  "body": string | null,
  // Interne Notiz
  "notice": string | null,
  // Öffentliches Statement
  "statement": string | null,
  // ID des Strikegrundes
  "strike_reason_id": number
}
Response Codes
http code beschreibung
200 /
400 Der Request Body ist falsch
401 Es wurde ein falsches API Secret angegeben
404 Der Report Ersteller, oder der reportete Spieler, existiert nicht
Response Body

/

POST /api/users (Erstellt einen neuen Spieler)
Request Body
{
  // Vorname des Spielers
  "firstname": string,
  // Nachname des Spielers
  "lastname": string,
  // Geburtstag im YYYY-MM-DD Format
  "birthday": string,
  // Telefonnummer des Spielers
  "phone": string | null,
  // Minecraft-Username
  "username": string,
  // Minecraft-UUID mit Bindestrichen
  "uuid": string,
  // Minecraft-Edition
  "edition": "java" | "bedrock",
  // Einladungscode einer direkten Einladung (optional)
  "code": string | null | undefined
}
Response Codes
http code beschreibung
201 Der User wurde erstellt
400 Der Request Body ist falsch
401 Es wurde ein falsches API Secret angegeben
404 Der Einladungscode existiert nicht
409 Der Einladungscode wurde bereits verwendet oder der User (Username oder UUID) existiert bereits
GET /api/users/{uuid} (Status eines Spielers)
Path Parameters
parameter beschreibung
uuid UUID eines Spielers
Response Codes
http code beschreibung
200 /
400 Der Request Body ist falsch
401 Es wurde ein falsches API Secret angegeben
404 Der Spieler existiert nicht
Response Body
{
  // Vorname des Spielers
  firstname: string,
  // Nachname des Spielers
  lastname: string,
  // Nutzername des Spielers
  username: string,
  // UUID des Spielers
  uuid: string,
  // Liste aller Strikes, die der Spieler hat
  strikes: {
    // UTC Timestamp wann der Strike erstellt wurde
    "at": number,
    // Strike Gewichtung
    "weight": number,
  }[]
}
GET /api/users/{uuid}/reports (Reports eines Spielers)
Path Parameters
parameter beschreibung
uuid UUID eines Spielers
Response Codes
http code beschreibung
200 /
400 Der Request Body ist falsch
401 Es wurde ein falsches API Secret angegeben
404 Der Spieler existiert nicht
Response Body
{
  // Alle Reports, die der Spieler selber erstellt hat
  "from_self": {
    // Die UUID des reporteten Spielers oder null falls ein unbekannter Spieler reportet wurde
    "reported": string | null,
    // Grund des Reports
    "reason": string,
    // Wann der Report abgeschickt wurde als UTC Millisekunden oder null falls der Report noch nicht abgeschickt wurde (=> kann noch bearbeitet werden)
    "created": number | null,
    // Status des Reports, "open" wenn er gerade bearbeitet wird, "closed" falls er bearbeitet wurde, null wenn nichts von beidem
    "status": "open" | "closed" | null,
    // Url zum Report auf der Website
    "url": string
  }[],
  // Alle Reports, die gegen den Spieler erstellt wurden
  "to_self": {
    // Die UUID des Spielers, der den Report erstellt hat oder null falls der Report vom System kommt
    "reporter": string | null,
    // Grund des Reports
    "reason": string,
    // Wann der Report abgeschickt wurde als UTC Millisekunden oder null falls der Report noch nicht abgeschickt wurde (=> kann noch bearbeitet werden)
    "created": number | null,
    // Status des Reports, "open" wenn er gerade bearbeitet wird, "closed" falls er bearbeitet wurde, null wenn nichts von beidem
    "status": "open" | "closed" | null,
    // Url zum Report auf der Website
    "url": string
  }[]
}

Webhook

Die env variable WEBHOOK_ENDPOINT muss gesetzt und eine valide HTTP URL sein. Es können auch mehrere Endpoints gesetzt sein, dafür müssen die URLs mit einem komma getrennt sein.

Bei bestimmten Aktionen wird an den Webhook Endpoint ein Webhook gesendet. Die Art des Webhooks wird dabei durch den x-webhook-action HTTP Header angegeben und hat einen festgelegten JSON Body.

Das Webhook wir so oft gesendet, bis der angegebene Webhook Endpoint eine Response mit Status 200 zurücksendet.

Alle Webhooks:

Beschreibung HTTP Header Body
Ein neuer Nutzer hat sich registriert
x-webhook-action: signup
{
  // Vorname des Nutzers
  firstname: string,
  // Nachname des Nutzers
  lastname: string,
  // Geburtstag des Nutzers im YYYY-MM-DD format
  birthday: string,
  // Telefonnummer des Nutzers. null wenn keine angegeben wurde
  telephone: string | null,
  // Spielername des Nutzers
  username: string,
  // Minecraft-Edition des Nutzers
  edition: 'java' | 'bedrock'
  // UUID des Nutzers. null wenn keine UUID ermittelt werden konnte
  uuid: string | null,
  // IP-Adresse des Users
  ip: string
}
Ein neuer Report wurde erstellt
x-webhook-action: report
{
  // Username des Reporters. null wenn der Report vom System gemacht wurde
  reporter: string | null,
  // Username des reporteten Spielers. null wenn Spieler unbekannt ist
  reported: string | null,
  // Grund des Reports
  reason: string
}
Ein neuer Strike wurde erstellt
x-webhook-action: strike
{
  // UUID des Spielers, der gestriked wurde
  uuid: string
}

Environment Variables

Name Default Beschreibung
HOST 0.0.0.0 Bind-Adresse des Webservers
PORT 8080 Port des Webservers
ROOT_URL http://localhost:4321 Vollständige öffentliche URL inklusive Subpath
DATABASE_URI - MariaDB URI. Muss gesetzt sein.
API_SECRET - Basic-Auth-Passwort für externe API-Endpunkte. Ohne Wert ist die API-Authentifizierung deaktiviert
ADMIN_USER - Benutzername für den default Admin User. Ohne Wert ist der Admin User deaktiviert
ADMIN_PASSWORD - Passwort für den default Admin User. Ohne Wert ist der Admin User deaktiviert
ADMIN_COOKIE muelleel Name des Admin-Session-Cookies
UPLOAD_PATH - Verzeichnis für Report-Anhänge. Ohne Wert sind Uploads deaktiviert
VIDEO_PATH - Verzeichnis für Videos. Ohne Wert sind die Video-Routen deaktiviert
CACHE_PATH OS-Temp-Verzeichnis Verzeichnis für generierte Caches, z.B. Video Thumbnails
MAX_UPLOAD_BYTES 20971520 Maximale Gesamtgröße aller Report-Anhänge eines Reports in Bytes
START_DATE 1970-01-01 Startdatum/Startzeit für Countdown und Anmeldung
WEBHOOK_ENDPOINT - Kommaseparierte Liste von Webhook-URLs
STATISTICS_ENDPOINT - Endpoint für Live-Statistiken. Ohne Wert werden keine Statistiken geladen
STATISTICS_INTERVAL 1800 Abfrageintervall für Live-Statistiken in Sekunden
TEAMSPEAK_LINK http://example.com Link zum TeamSpeak-Server
DISCORD_LINK http://example.com Link zum Discord-Server
PAYPAL_LINK http://example.com Link für PayPal Spenden
SERVER_IP http://example.com Öffentliche Minecraft-Server-Adresse
OPENXBL_API_KEY - API-Key für die Xbox-/Bedrock-UUID-Suche. Ohne Key schlägt die Bedrock-UUID-Ermittlung fehl
LOG_LEVEL Dev: debug, Prod: warn Log-Level, als trace, debug, info, warn oder error
Languages
TypeScript 39.4%
Svelte 36%
Astro 21.1%
Nix 1.5%
JavaScript 1.3%
Other 0.7%