Aller au contenu
Avancé

API interne

L'API que le bot expose au site : rôle, sécurité et points d'entrée.

Le bot expose une API HTTP qui tourne dans son propre processus. C'est elle qui permet au site d'afficher des chiffres réels — latence de la passerelle, nombre de serveurs, permissions effectives — puisque seul le bot les connaît. Il n'existe pas d'API publique : celle-ci n'est pas destinée à des applications tierces.

Elle n'écoute pas sur Internet

Par défaut, l'API n'est accessible que depuis la machine du bot (127.0.0.1:8787). Le site l'appelle depuis son serveur, jamais depuis le navigateur : le jeton partagé ne peut donc pas fuir. Ne l'exposez pas publiquement.

Configuration

Le bot et le site partagent un jeton. Il se génère une fois, et doit être identique des deux côtés — sinon l'API répond 401 et la page Statut affiche « Dégradé » en le disant explicitement.

Générer le jeton partagé
python -c "import secrets; print(secrets.token_urlsafe(48))"

# .env du bot          →  GS_API_TOKEN=<valeur>
# .env.local du site   →  BOT_API_TOKEN=<même valeur>

Authentification

Requête authentifiée
curl http://127.0.0.1:8787/api/status \
  -H "Authorization: Bearer $GS_API_TOKEN"

Le jeton est comparé en temps constant. Seule /api/health y échappe : c'est une sonde de disponibilité, elle ne révèle ni latence, ni nombre de serveurs.

Points d'entrée

MéthodeRouteDescription
GET/api/healthSonde de disponibilité (sans jeton)
GET/api/health/botÉtat de la passerelle Discord, latence, uptime
GET/api/health/databaseVraie requête SQL et sa latence
GET/api/health/robloxJoignabilité réelle de l'API Roblox
GET/api/statusStatut complet du bot et de la base
GET/api/commandsRegistre des commandes, construit depuis l'arbre réel
GET/api/guildsServeurs où le bot est présent
GET/api/guilds/:idSalons, rôles et permissions du bot
GET/api/guilds/:id/members/:uidAppartenance et droits réels d'un membre
GET/api/guilds/:id/settingsRéglages réels, module par module
PATCH/api/guilds/:id/settingsModifier des réglages (validés côté bot)
GET/api/guilds/:id/logsJournal d'audit, pagination par curseur
GET/api/guilds/:id/robloxGroupes, correspondances, état de synchro
POST/api/guilds/:id/roblox/syncResynchroniser les rôles Roblox
POST/api/verification/sessionOuvrir une session de vérification
POST/api/verification/linkEnregistrer une liaison Discord ↔ Roblox
DELETE/api/verification/:discord_idDélier un compte et retirer ses rôles
GET/api/support/ticketsLister les demandes de support
POST/api/support/ticketsOuvrir une demande

Ce que l'API ne fait pas

  • Elle ne renvoie jamais de secret : ni jeton du bot, ni clé d'IA, ni identifiants Roblox.
  • Elle ne vérifie pas les droits de l'utilisateur final : elle fait confiance à son appelant, et c'est précisément pour ça qu'elle reste locale. Le site revalide chaque accès de son côté.
  • Elle ne renvoie jamais de trace d'exécution en cas d'erreur — seulement un message court.

Limites de débit

Le site limite ses propres routes /api à 120 requêtes par minute et par adresse (60 pour /api/health, qui déclenche de vraies sondes réseau). Un dépassement renvoie 429 avec l'en-tête Retry-After.

API interne — Documentation · Ghost's Sanctuary