Mabarin

Mabarin JavaScript SDK

Setup sekali, gunakan semua layanan game.

Panduan resmi untuk Web, HTML5, Vite, dan Next.js. Semua request client menujuapi.mabar.studio, sedangkan service role Supabase tetap aman di server Mabarin.

1. Setup project

Buat project dari Dashboard, aktifkan fitur yang dibutuhkan, lalu hubungkan Supabase milik project tersebut.

  1. 1Login ke Dashboard Mabarin dan buat project.
  2. 2Buka Config, isi Supabase Project URL dan Service Role Key.
  3. 3Copy Mabarin schema v5 dari Config lalu jalankan di Supabase SQL Editor.
  4. 4Aktifkan feature Auth, Database, Achievement, Mission, Friends, Community, Shop, atau Coins sesuai kebutuhan.
  5. 5Simpan API Key project untuk dipakai saat initialize SDK.
Jangan pernah memasukkan Supabase Service Role Key ke source game. Client hanya menggunakan Mabarin API Key.

2. Install SDK

NPM, Vite, atau Next.js

bash
npm install @mabar/sdk
javascript
import { MabarClient } from '@mabar/sdk';

const mabarin = new MabarClient();

Plain HTML melalui CDN

html
<script src="https://mabarin.mabar.studio/sdk/mabar.min.js"></script>
<script>
  const mabarin = new Mabar.MabarClient();
</script>

3. Initialize

Initialize memvalidasi API Key dan menyiapkan modul SDK. Setelah login, initialize kembali dengan identitas user agar method yang memiliki default UID dapat bekerja.

javascript
const mabarin = new MabarClient();

await mabarin.initialize({
  apiKey: 'YOUR_MABARIN_API_KEY'
});

const user = await mabarin.auth.login(email, password);

await mabarin.initialize({
  apiKey: 'YOUR_MABARIN_API_KEY',
  userId: user.uid,
  name: user.displayName || 'Player'
});
Endpoint default sudah https://api.mabar.studio. Gunakan opsi apiUrl hanya untuk development atau self-hosted gateway.

4. Authentication

javascript
const registered = await mabarin.auth.register(
  'player@example.com',
  'password-min-8',
  'Player One'
);

const user = await mabarin.auth.login('player@example.com', 'password-min-8');
const guest = await mabarin.auth.loginGuest('Guest Player');
const googleUser = await mabarin.auth.loginWithGoogle(googleIdToken);

console.log(mabarin.auth.currentUser);
mabarin.auth.logout();
Google provider harus diaktifkan pada Supabase Auth project developer. Session disimpan per API Key di localStorage.

5. Profile & Database

javascript
const profile = await mabarin.profile.get(uid);
await mabarin.profile.update('level', 7);
await mabarin.profile.update({ class: 'mage', region: 'id' });
await mabarin.profile.remove('region');

const saves = mabarin.db.collection('game_saves');
const created = await saves.add({ slot: 1, stage: 4 });
const save = await saves.doc(created.id).get();
await saves.doc(created.id).update({ stage: 5 });
await saves.doc(created.id).delete();
Operasi Database, update profile, dan remove profile membutuhkan user yang sudah login.

6. Score & Leaderboard

Game session sekali pakai

javascript
const { gameId } = await mabarin.gameStart('tap_game', user.uid, user.displayName);

// gameId hanya dapat diakhiri satu kali.
const result = await mabarin.gameEnd(gameId, 125);

const board = await mabarin.leaderboard('tap_game', 20, user.uid);
const myRank = await mabarin.userboard('tap_game', user.uid);

Scoring rule

javascript
mabarin.score.track('hit_enemy', 3);
mabarin.score.track('finish_level');

const score = await mabarin.score.submit({
  mode: 'classic',
  userId: user.uid,
  displayName: user.displayName,
  highScoreOnly: true
});

7. Achievement & Mission

Definisi, target, currency reward, dan item reward dibuat developer dari Dashboard. Client hanya membaca dan mengirim progress.

javascript
const achievements = await mabarin.achievement.list(user.uid);
const achievement = await mabarin.achievement.get('first_win', user.uid);
await mabarin.achievement.submit('first_win', {
  uid: user.uid,
  amount: 1
});

const missions = await mabarin.mission.list(user.uid);
await mabarin.mission.submit('daily_match', {
  uid: user.uid,
  amount: 1
});
amount adalah tambahan progress, bukan jumlah reward. Reward diberikan server satu kali saat target tercapai.

8. Friends & Community

javascript
const friends = await mabarin.friends.list(user.uid);
await mabarin.friends.add(user.uid, targetUid);
await mabarin.friends.remove(user.uid, targetUid);

const communities = await mabarin.community.list();
const community = await mabarin.community.get(clanId);
const created = await mabarin.community.create(user.uid, 'Mabar Squad');
await mabarin.community.join(user.uid, clanId);
await mabarin.community.leave(user.uid);
Mutasi Friends dan Community membutuhkan token login yang UID-nya sama dengan UID request.

9. Shop & multi-currency

Currency seperti Coin, Gem, atau Gold dibuat dari Dashboard. Item Shop memilih currency dan harga yang valid.

javascript
const currencies = await mabarin.coins.list();
const gem = await mabarin.coins.get('gem');
const balances = await mabarin.coins.balance(user.uid);
const gemBalance = await mabarin.coins.balance(user.uid, 'gem');
const transactions = await mabarin.coins.log(user.uid, 'gem');

const items = await mabarin.shop.list();
const purchase = await mabarin.shop.buy(user.uid, 'starter_sword');
const inventory = await mabarin.shop.inventory(user.uid);
Tidak ada API publik untuk grant atau deduct currency. Saldo hanya berubah melalui Shop, reward Achievement/Mission, dan sumber server resmi lainnya. Transaksi Shop tidak berjalan jika feature Coins nonaktif.

10. Realtime room

javascript
await mabarin.initialize({
  apiKey: 'YOUR_MABARIN_API_KEY',
  userId: user.uid,
  name: user.displayName
});

await mabarin.room.createRoom('Weekend Match', 'ABCD', 4, true);
// Player lain:
await mabarin.room.join('ABCD');

mabarin.room.on('room:state', ({ room }) => console.log(room));
mabarin.room.on('room:message', ({ from, payload }) => {
  console.log(from, payload);
});

mabarin.room.send({ action: 'move', x: 10, y: 20 });
mabarin.room.setReady(true);
mabarin.room.start(); // host only
mabarin.room.leave();
Pengirim tidak menerima echo untuk room:message. Terapkan aksi pengirim secara lokal lalu broadcast ke pemain lain.

11. Security checklist

  • Service Role Key hanya disimpan melalui Config Dashboard.
  • Gunakan Auth untuk write profile, database, friends, community, shop, wallet, achievement, dan mission.
  • Jangan percaya UID dari input tanpa token user.
  • Jalankan schema terbaru setelah Dashboard menampilkan perubahan schema.
  • Nonaktifkan feature yang belum digunakan.
  • Gunakan Debug App untuk menguji konfigurasi sebelum integrasi ke game.

Siap menguji integrasi?

Gunakan project key milikmu pada Debug App, atau lanjut kelola feature dari Dashboard.