Documentation

Tout ce qu'il faut pour connecter une application front à un coffre : stockage JSON, sessions multijoueurs et temps réel. La référence API complète (Swagger) détaille chaque endpoint.

1. Le coffre

Chaque application dispose d'un coffre identifié par un token axm_…. Ce token part dans le header X-API-Key de chaque requête ; il n'y a ni cookie ni session. Créez un coffre depuis votre espace connecté et copiez son token.

2. Stocker : lire & écrire le payload

Le coffre contient un seul document JSON (objet ou tableau, structure libre).

const API = 'https://hub.exemple.fr/api';
const TOKEN = 'axm_votre_token_ici';

// Lire
const { payload } = await fetch(`${API}/storages`, {
    headers: { 'X-API-Key': TOKEN },
}).then(r => r.json());

// Écrire (REMPLACE tout le payload, ce n'est pas un merge)
await fetch(`${API}/storages`, {
    method: 'POST',
    headers: { 'X-API-Key': TOKEN, 'Content-Type': 'application/json' },
    body: JSON.stringify({ score: 42 }),
});
200{"payload": {...}} — les données du coffre
401Header X-API-Key absent
403Origine refusée, ou écriture sur un coffre verrouillé
404Token inconnu, ou coffre désactivé
422Corps non-JSON, ou payload scalaire

3. Restreindre les origines

Par défaut un coffre répond à toutes les origines. Ajoutez des règles d'accès (url exacte, wildcard https://*.monjeu.fr, ou regex) sur la page du coffre pour limiter les sites autorisés. Le CORS est géré automatiquement par le hub.

4. Sessions & temps réel

Pour le multijoueur, ouvrez une session (partie/lobby). Le créateur en devient l'admin et le premier participant ; les autres rejoignent avec l'id de session. Chaque membre reçoit un secret à conserver.

// Créer une session (→ admin + 1er participant)
const s = await fetch(`${API}/sessions`, {
    method: 'POST',
    headers: { 'X-API-Key': TOKEN, 'Content-Type': 'application/json' },
    body: JSON.stringify({ ownerId: 'client-abc', owner: { pseudo: 'Alice' } }),
}).then(r => r.json());
// → s.session.id (à partager), s.participant.secret, s.ownerSecret

Le temps réel (si activé sur le coffre) passe par trois canaux :

publicDiffusion à toute la session (tout membre publie).
adminPrivé entre l'admin et un participant.
inboxMessage direct vers un participant.
// S'abonner : le hub ne délivre un ticket que pour vos canaux autorisés
const sub = await fetch(`${API}/sessions/${sessionId}/realtime/subscribe`, {
    headers: { 'X-API-Key': TOKEN, 'X-Participant-Secret': secret },
}).then(r => r.json());

new EventSource(sub.subscribeUrl).onmessage = (e) => {
    const { channel, event, data, from } = JSON.parse(e.data);
    // router sur channel + event ; `from` = id du participant, ou "admin"
};

// Publier sur le canal public
await fetch(`${API}/sessions/${sessionId}/realtime/publish`, {
    method: 'POST',
    headers: { 'X-API-Key': TOKEN, 'X-Participant-Secret': secret, 'Content-Type': 'application/json' },
    body: JSON.stringify({ channel: 'public', event: 'chat.message', data: { text: 'coucou' } }),
});

Guide d'intégration détaillé (sessions, participants, mots de passe, expiration) : voir la référence API.