LFP Webhooks
LFP Webhooks est réservé à nos projets et à nos partenaires : son dépôt est privé et le paquet n'est pas publié sur npm. Cette documentation le présente pour celles et ceux qui y ont accès.
LFP Webhooks reçoit les événements de notre service de données de la Ligue 1 et de la Ligue 2, basé sur opta-ftp-ws : buts, cartons, remplacements, compositions, changements de période, classements. Un bot Discord s'abonne aux événements qui l'intéressent, et chaque gestionnaire reçoit un payload typé d'après le seul nom de l'événement.
import { createReceiver } from '@fca.gg/lfp-webhooks'
import { listen } from '@fca.gg/lfp-webhooks/node'
const receiver = createReceiver({ secret: process.env.LFP_WEBHOOKS_SECRET })
receiver.on('match.goal', async ({ match, team, score, goal }) => {
await postGoal(match.matchId, goal.player?.showName, `${score.home} - ${score.away}`)
})
receiver.on('match.full_time', ({ match }) => closeThread(match.matchId))
await listen(receiver, 8080, { path: '/hooks/lfp' })
Ce qu'il fait
- Vérifie la signature
x-lfp-signature-256sur le corps brut, en temps constant, ou un jeton Bearer. - Répond avant de traiter : le service abandonne une livraison au-delà de dix secondes et la rejouerait, ce qui produirait un doublon.
- Écarte les rejeux grâce à l'identifiant de livraison
x-lfp-delivery. - Exécute les gestionnaires en file, dans l'ordre d'arrivée : deux buts ne peuvent pas se doubler.
- Déduit le type du payload du nom de l'événement.
Léger
Aucune dépendance. Chaque intégration est un module à part (/node, /express, /fastify, /client) et le paquet est marqué sideEffects: false : seul ce que vous importez est chargé. Le cœur ne tire que node:crypto, et node:http n'entre en mémoire que si vous importez /node. Les types ne produisent aucun code.
Le paquet est livré en ESM et en CommonJS, pour Node.js 18 ou plus récent.
Aller plus loin
- Installer le paquet et le brancher à votre serveur ;
- la liste des événements et leurs payloads ;
- signature, jeton et doublons ;
- rattraper les événements manqués avec le client de l'API.