Créer un plugin
Ajouter un service dans Butin. (Le contrat d'API est en cours de stabilisation.)
Un plugin enseigne à Butin comment se connecter à un service et comment extraire ses données. La plupart des plugins sont concis et largement déclaratifs : décrivez le mécanisme de connexion et les données à requérir, renvoyez un format normalisé, et le moteur générique de Butin s'occupe de l'affichage. La quasi-totalité des plugins ne requiert aucun code d'interface graphique.
Remarque : le contrat d'API de
@butinapp/sdkpoursuit son évolution avant la version publique officielle ; cette documentation constitue une vue d'ensemble et non une référence d'API figée. La source de vérité demeure le dépôt lui-même. ConsultezCLAUDE.mdet le paquet@butinapp/sdkavant de concevoir un plugin.
Structure générale
import { definePlugin } from '@butinapp/sdk'
import { billing } from '@butinapp/sdk/presets'
export const acme = definePlugin({
meta: { id: 'acme', name: 'Acme' },
session: { loginUrl: 'https://acme.com/login', cookieDomains: ['acme.com'] },
auth: { kind: 'cookie' },
capabilities: [
{
id: 'billing',
label: 'Facturation',
collect: async ({ client }) => billing.result({/* … */})
}
]
})Un plugin s'articule autour de trois dimensions déclaratives :
- Transport — Node standard, ou un contexte Electron doté d'une véritable empreinte de navigateur pour les services requérant un moteur de rendu complet.
- Authentification — simple témoin (cookie), témoin associé à un jeton extrait de la page, jeton JWT de courte durée, jeton d'actualisation tournant, clé d'API pérenne, etc. Les cas usuels ne réclament aucun code spécifique.
- Format d'extraction — JSON, GraphQL, parsing HTML, etc. — pris en charge dans la fonction
collect()de chaque capacité. Le contrat d'API normalise le client authentifié en entrée et le résultat en sortie, en vous laissant toute liberté sur la méthode d'analyse.
Pour débuter
- Rétro-ingéniez les requêtes réseau réelles du service (l'enregistreur de session intégré facilite cette étape).
- Créez le dossier du plugin sous
plugins/. - Réunissez le descripteur
definePluginet les fonctions de transformation pure dans un fichier unique, accompagné de tests basés sur des captures réelles (fixtures). - Vérifiez le typage et exécutez les tests — aucun compte réel n'est nécessaire pour exécuter les tests de transformation pure.
Le guide complet et à jour est disponible dans le dépôt. Prenez exemple sur les plugins existants sous plugins/, et ouvrez un ticket ou une discussion sur GitHub en cas de question !