SDK Web
Un seul fichier JavaScript sans dépendances pour les jeux HTML5, les sites web et les serveurs Node.js.
Les commentaires du code et les noms d'API restent en anglais pour correspondre aux SDK.
Prérequis#
- Versions récentes de Chrome, Edge, Firefox et Safari (desktop et mobile), ou Node.js 18+.
- La page doit être servie en HTTPS (ou depuis localhost) : l'API exige HTTPS, et Web Crypto, utilisé pour vérifier la configuration à distance, n'existe que sur les pages sécurisées.
Installation#
Chargez-le depuis votre serveur MAJACLOUD, qui le sert avec les en-têtes CORS :
<script src="https://majacloud.majanite.com/downloads/majacloud-web-1.0.0.js"></script>
<script type="module">
const mc = Majacloud.createClient({ baseUrl: 'https://majacloud.majanite.com', projectId: '<project id>', clientKey: 'pk_live_…' });
</script>Ou copiez majacloud.js dans votre projet :
// Bundlers (Vite, webpack…): copy majacloud.js into your project
import Majacloud from './majacloud.js';
// Node.js 18+
const Majacloud = require('./majacloud.js');Créer un client#
Seuls baseUrl, projectId et clientKey sont obligatoires.
const mc = Majacloud.createClient({
baseUrl: 'https://majacloud.majanite.com', // your MAJACLOUD address
projectId: '<project id>',
clientKey: 'pk_live_…', // public, safe in the browser
configPublicKey: PEM, // optional: pins Remote Config verification
storage: 'memory', // optional: 'memory' or { get, set, remove }; default localStorage
timeoutMs: 15000, // optional
maxRetries: 2, // optional
});Résultats#
Chaque appel se résout en { ok: true, value } ou { ok: false, error } et n'est jamais rejeté. value est le corps de la réponse REST sans ok, avec les mêmes champs en snake_case que dans la référence REST.
error contient code, message, status, requestId, retryAfter, details et retryable.
Événements#
Abonnez-vous avec on() ; la méthode renvoie une fonction qui annule l'abonnement.
const stop = mc.auth.on('playerChanged', (player) => {
document.querySelector('#name').textContent = player ? player.display_name : '';
});
mc.auth.on('sessionExpired', () => showSignIn());
mc.remoteConfig.on('updated', () => applyBalance());
stop(); // every on() returns an unsubscribe functionUn classement sur votre site web#
Lire un classement ne nécessite aucune connexion : un site web peut donc afficher vos meilleurs joueurs avec la seule clé client publique :
<ol id="top-players"></ol>
<script src="https://majacloud.majanite.com/downloads/majacloud-web-1.0.0.js"></script>
<script>
const mc = Majacloud.createClient({ baseUrl: 'https://majacloud.majanite.com', projectId: '<project id>', clientKey: 'pk_live_…' });
mc.leaderboards.getTop('coins', { limit: 10 }).then((top) => {
if (!top.ok) return;
document.getElementById('top-players').innerHTML = '';
for (const entry of top.value.entries) {
const li = document.createElement('li');
li.textContent = `${entry.player_name} — ${entry.score}`;
document.getElementById('top-players').append(li);
}
});
</script>Plusieurs onglets#
La session est conservée dans localStorage et partagée par tous les onglets de votre site. Les jetons de rafraîchissement changent à chaque utilisation : les onglets se relaient pour rafraîchir la session (Web Locks) et récupèrent les nouveaux jetons des autres. Ouvrir un deuxième onglet ne déconnecte donc jamais le joueur.
Côté serveur avec la clé secrète#
Sur votre propre serveur Node.js, créez le client avec secretKey au lieu de clientKey pour utiliser server.getPlayer() et server.submitScore(). Le SDK refuse une clé secrète dans un navigateur.
// Node.js on your own server only: the secret key never goes to a browser or game build
const Majacloud = require('./majacloud.js');
const admin = Majacloud.createClient({
baseUrl: 'https://majacloud.majanite.com',
projectId: process.env.MAJACLOUD_PROJECT_ID,
secretKey: process.env.MAJACLOUD_SECRET_KEY,
});
const player = await admin.server.getPlayer('player_3f9c…');
await admin.server.submitScore('coins', 'player_3f9c…', 980);mc.request(method, path, { body, auth }) appelle n'importe quel endpoint sans helper dédié, par exemple mc.request('GET', '/wallet', { auth: 'player' }).