Aller au contenu principal

LFP Webhooks

Paquet privé

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-256 sur 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​