Documentation officielle du projet

Collecteurs de données

ZEvent, Team G-Doc et Twitch sont collectés par trois Workers Cloudflare indépendants, avec leurs propres déploiements, Durable Objects, alarmes et journaux.

Workers déployés

Worker Source Hors événement / pendant
zevent-source-zevent API officielle ZEvent 60 s / 15 s
zevent-source-gdoc API Team G-Doc Goals : 60 s / 30 s
Planning : 2 min / 5 min
zevent-source-twitch API Helix Twitch 60 s / 60 s

Liste des participants

L’API officielle ZEvent est la source d’autorité. Le collecteur active les nouveaux participants, actualise leurs identifiants et marque comme retirés ceux qui disparaissent. Les abonnements sont conservés en cas de retour, mais un participant retiré n’apparaît plus dans l’autocomplétion et n’est plus envoyé à Twitch.

Chaque Worker a un Cron d’amorçage toutes les minutes. Une alarme Durable Object maintient ensuite sa fréquence propre et applique un backoff plafonné à cinq minutes en cas d’erreur.

Les variables versionnées EVENT_START_AT et EVENT_END_AT définissent la fenêtre de l’édition. Les alarmes changent automatiquement de cadence au début et à la fin. Le planning G-Doc est moins souvent chargé pendant l’événement, tandis que les donation goals sont rafraîchis plus vite.

Service Bindings

Le runtime Discord appelle les collecteurs par ZEVENT_COLLECTOR, GDOC_COLLECTOR et TWITCH_COLLECTOR. Les collecteurs ne possèdent pas le token Discord et ne publient aucune URL workers.dev.

Logs séparés

Ouvre Workers & Pages puis le Worker de la source concernée et consulte Observability → Logs. Un Tail Worker n’est pas nécessaire tant que les logs natifs suffisent.

Activer ou suspendre un collecteur

Un opérateur peut contrôler ZEvent, Team G-Doc et Twitch depuis la liste des sources du panneau d’administration. Le changement est audité, ne demande aucun redéploiement et prend effet au prochain passage planifié. Une source suspendue apparaît comme inactive sur la page de statut et n’est pas considérée en erreur.

ZEvent et G-Doc sont actifs par défaut. Twitch est initialement inactif.

Préparer Twitch avant sa première activation

  1. Crée une application dans la console développeur Twitch.
  2. Ajoute TWITCH_CLIENT_ID et TWITCH_CLIENT_SECRET aux Secrets GitHub.
  3. Laisse TWITCH_LIVE_NOTIFICATIONS=false pour éviter les doublons avec ZEvent.
  4. Déploie les secrets, puis ouvre le panneau d’administration.
  5. Dans la liste des sources, clique sur Activer pour Twitch.

TWITCH_LIVE_NOTIFICATIONS=false désactive uniquement les alertes Twitch de début de live qui feraient doublon avec ZEvent. Les changements de titre et de jeu restent disponibles.

Activation sans variable GitHub

Il n’existe pas de variable TWITCH_ENABLED. Les secrets autorisent l’accès à Helix ; l’état d’activation est indépendant et conservé dans D1.

Twitch accepte 100 identifiants par requête /streams. Pour 296 streamers suivis, le collecteur effectue donc trois requêtes par minute.

Pour un live existant, Twitch compare aussi le titre et le jeu. Les préférences title_changes et game_changes de /follow live sont indépendantes et désactivées par défaut. Un premier snapshot ou un nouvel identifiant de stream initialise les valeurs sans produire de fausse alerte.

Journal détaillé

Chaque passage enregistre séparément les volumes observés, les modifications réelles, les notifications créées et sa durée. Les changements couvrent notamment la cagnotte, l’audience, les mises en ligne, les fins de live, les participations G-Doc et les événements ajoutés, modifiés ou supprimés. Ces valeurs alimentent les détails dépliables de la page de statut.

La métrique apiRequests compte chaque appel externe tenté, y compris lorsqu’il échoue. La page de statut distingue ainsi une collecte complète du nombre de requêtes ZEvent, G-Doc, Twitch Helix, Twitch OAuth ou Discord produites par cette exécution. Il ne s’agit pas du compteur de facturation interne des Durable Objects Cloudflare.

Vérifier localement

pnpm collectors:typecheck
pnpm collectors:test
pnpm collectors:bundle