Aller au contenu

Démarrage rapide

1. Récupérer le SDK

Clonez ou téléchargez ce dépôt, puis copiez packages/js/src/apiexpose-sdk.js à côté de votre page (gardez aussi apiexpose-sdk.d.ts si vous utilisez un outillage TypeScript). Il n'y a rien à builder.

2. Page minimale

<!DOCTYPE html>
<html>
<body>
  <h1 id="game"></h1>
  <script type="module">
    import { APIExposeClient } from './apiexpose-sdk.js';

    const client = new APIExposeClient(); // 127.0.0.1:12345 par défaut

    async function refresh() {
      let game = null;
      try { game = await client.getCurrentGame(); } catch { /* rien de sélectionné */ }
      document.getElementById('game').textContent = game?.name ?? 'aucun jeu';
    }

    client.on('game.changed', refresh);          // sélection ES et lancement
    client.on('connection.restored', refresh);   // (re)connexion
    refresh();
    client.connect();
  </script>
</body>
</html>

Ouvrez le fichier dans un navigateur sur la machine RetroBat : le titre suit le jeu sélectionné dans EmulationStation.

Afficher d'abord, connecter ensuite

Faites votre premier rafraîchissement REST avant (ou indépendamment de) connect(). Le REST répond immédiatement ; le WebSocket prend ensuite le relais. connect() ne lève jamais d'erreur et réessaie en arrière-plan.

3. Options

const client = new APIExposeClient({
  host: '127.0.0.1',
  port: 12345,          // REST + WebSocket APIExpose
  streams: null,        // null = firehose /ws unique ; ou ['score','timer','frontend']
  autoReconnect: true,
  reconnectDelayMs: 1000,
  maxReconnectDelayMs: 15000,
  log: (level, msg) => console.log(level, msg) // silencieux par défaut
});

4. S'abonner aux événements

// alias normalisés
client.on('game.changed', (e) => { /* sélection ou lancement */ });
client.on('score.changed', (e) => console.log(e.payload));
client.on('achievement.unlocked', (e) => { /* 🏆 */ });

// types bruts et jokers
client.on('retroachievements.*', (e) => console.log(e.rawType));
const off = client.on('*', (e) => console.log(e.rawType, e.payload));
off(); // chaque on() retourne sa fonction de désabonnement

Voir Événements pour la liste complète.

5. Essayer les samples

Les trois samples de samples/html fonctionnent en fichier local dans n'importe quel navigateur :

  • now-playing-basic — nom du jeu, système et visuel.
  • score-basic — HUD score + timer live.
  • event-debug-monitor — tous les événements en temps réel, avec rapport de capabilities.