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.