TypeScript SDK
@dyogg/sdk — client official untuk Node.js + browser (via proxy). 100% typed dari OpenAPI 3.1.
Install
npm install @dyogg/sdk
yarn add @dyogg/sdk
pnpm add @dyogg/sdk
Quick Start
import { DyoClient } from "@dyogg/sdk";
const dyo = new DyoClient({
apiKey: process.env.DYO_API_KEY!,
// apiVersion: "v1", // default v1
// baseUrl: "https://api.dyogg.com",
// fetch: undici.fetch, // custom fetch impl
});
// Player showcase
const player = await dyo.player.get("genshin", "816973814");
console.log(player.nickname, player.trust_score.tier);
// Batch
const players = await dyo.player.batch({ game: "hsr", uids: ["602891308", "602891309"] });
// Character metadata
const acheron = await dyo.character.get("hsr", 1308, { lang: "id" });
// Build analyzer
const result = await dyo.buildAnalyzer.analyze({
game: "genshin",
avatar_id: 10000098,
level: 90,
constellation: 2,
weapon: { id: 15511, level: 90, refinement: 1 },
artifacts: [ /* ... */ ],
role: "dps",
});
Configuration
new DyoClient({
apiKey: string, // required, dari dashboard
apiVersion?: "v1" | "v2", // default "v1"
baseUrl?: string, // default "https://api.dyogg.com"
timeout?: number, // ms, default 15000
maxRetries?: number, // default 3 (retry pada 429/5xx)
fetch?: typeof fetch, // inject custom fetch (undici/node-fetch)
onRateLimit?: (info) => void, // callback saat rate limit
});
Error handling
import { DyoApiError, DyoRateLimitError } from "@dyogg/sdk";
try {
await dyo.player.get("genshin", "816973814");
} catch (err) {
if (err instanceof DyoRateLimitError) {
console.log(`Retry in ${err.retryAfterSeconds}s`);
} else if (err instanceof DyoApiError) {
console.log(err.code, err.message, err.requestId);
} else {
throw err;
}
}
Streaming (ndjson)
for await (const entry of dyo.leaderboard.streamTop({ game: "hsr", avatar_id: 1308, limit: 500 })) {
console.log(entry.rank, entry.uid, entry.metric_value);
}
Type augmentation
SDK expose semua types dari OpenAPI spec:
import type { Player, Character, BuildAnalyzerRequest } from "@dyogg/sdk";
Browser usage
SDK tidak dianjurkan dipakai langsung di browser karena akan expose API key. Pattern yang benar:
// server (Next.js API route / edge function)
import { DyoClient } from "@dyogg/sdk";
const dyo = new DyoClient({ apiKey: process.env.DYO_API_KEY });
export async function GET() {
const player = await dyo.player.get("genshin", "816973814");
return Response.json(player);
}
Roadmap
- v1.1 — react hooks (
useDyoPlayer), SWR/react-query wrapper. - v1.2 — OpenTelemetry auto-instrumentation.
- v2.0 — bump saat DYO API v2 rilis.