@mayaross/auth
v1.0.0
Published
SDK for mayar-cli to authenticate via mayar auth service
Readme
@mayaross/auth
SDK untuk autentikasi mayar-cli via mayar auth service menggunakan Google OAuth + SSE.
Instalasi
npm install @mayaross/authTidak ada dependency eksternal — hanya menggunakan built-in Node.js (https, http, child_process). Membutuhkan Node.js >= 18.
Flow
mayar login
│
├─ 1. Minta appid + URL ke server → GET /token/cli/initiate
│
├─ 2. Buka browser ke auth URL → /oauth2/google?state=appid,<uuid>
│
├─ 3. Subscribe SSE → GET /token/cli/stream?appid=<uuid>
│ (tunggu token, max 5 menit)
│
├─ 4. User login Google di browser
│
└─ 5. Server push token via SSE → CLI terima, simpan credentialsPenggunaan
Login satu langkah
const { MayarAuth } = require('@mayaross/auth');
const auth = new MayarAuth('https://auth.mayar.id');
try {
const token = await auth.login({
onUrl: ({ url }) => {
console.log(`Membuka browser untuk login...`);
console.log(`Jika browser tidak terbuka, buka URL ini:\n${url}`);
}
});
// token = "authToken,refreshToken"
console.log('Login berhasil!');
// simpan token ke ~/.mayar/credentials atau keychain
} catch (e) {
console.error('Login gagal:', e.message);
}Manual step-by-step
const { MayarAuth } = require('@mayaross/auth');
const auth = new MayarAuth('https://auth.mayar.id');
// 1. Dapatkan appid dan URL login
const { appid, url } = await auth.initiate();
console.log('Buka URL ini di browser:', url);
// 2. (opsional) buka browser secara manual
auth.openBrowser(url);
// 3. Tunggu token via SSE
const token = await auth.listenForToken(appid);
console.log('Token diterima:', token);API
new MayarAuth(baseUrl, opts?)
| Parameter | Type | Default | Keterangan |
|-----------|------|---------|------------|
| baseUrl | string | 'https://auth.mayar.id' | Base URL auth server |
| opts.timeoutMs | number | 300000 (5 menit) | Timeout tunggu login |
auth.login(opts?)
Full login flow: initiate → buka browser → tunggu token via SSE.
login(opts?: {
openBrowser?: boolean, // default: true. Set false untuk print URL saja
onUrl?: ({ appid, url }) => void // callback sebelum browser dibuka
}): Promise<string> // "authToken,refreshToken"auth.initiate()
Minta appid dan url dari server.
initiate(): Promise<{ appid: string, url: string }>auth.listenForToken(appid)
Konek ke SSE stream dan tunggu token. Resolve saat token diterima, reject saat timeout.
listenForToken(appid: string): Promise<string> // "authToken,refreshToken"auth.openBrowser(url)
Buka URL di browser default. Support macOS, Linux, Windows.
openBrowser(url: string): voidFormat Token
Token yang dikembalikan berupa string dengan format:
authToken,refreshToken- authToken — JWT RS256, berlaku 24 jam
- refreshToken — JWT RS256, berlaku 7 hari, digunakan untuk refresh otomatis via
/validate
Untuk decode payload:
const [authToken] = token.split(',');
const payload = JSON.parse(
Buffer.from(authToken.split('.')[1], 'base64url').toString()
);
// { sub: email, role, name, exp, ... }Contoh Integrasi di mayar-cli
// commands/login.js
const { MayarAuth } = require('@mayaross/auth');
const fs = require('fs');
const os = require('os');
const path = require('path');
const CREDENTIALS_PATH = path.join(os.homedir(), '.mayar', 'credentials.json');
async function loginCommand() {
const auth = new MayarAuth(process.env.MAYAR_AUTH_URL || 'https://auth.mayar.id');
console.log('Menghubungkan ke mayar...');
const token = await auth.login({
onUrl: ({ url }) => {
console.log('\nJika browser tidak terbuka otomatis, buka URL ini:');
console.log(url + '\n');
}
});
const [authToken] = token.split(',');
const { sub: email, name, exp } = JSON.parse(
Buffer.from(authToken.split('.')[1], 'base64url').toString()
);
fs.mkdirSync(path.dirname(CREDENTIALS_PATH), { recursive: true });
fs.writeFileSync(CREDENTIALS_PATH, JSON.stringify({ token, email, name }, null, 2));
console.log(`\nLogin berhasil sebagai ${name} (${email})`);
console.log(`Token berlaku hingga ${new Date(exp * 1000).toLocaleString()}`);
}
module.exports = { loginCommand };Server Endpoints
SDK ini mengonsumsi dua endpoint dari auth server:
| Endpoint | Method | Keterangan |
|----------|--------|------------|
| /token/cli/initiate | GET | Generate appid + auth URL |
| /token/cli/stream?appid=<uuid> | GET (SSE) | Stream token setelah user login |
