Dokumentace Rivya AI

Rivya TypeScript SDK

Použijte beta Rivya TypeScript SDK k volání Public API v1 pro modely, generování, soubory, kredity, webhooky a Chat včetně SSE streamování.

Naposledy zkontrolováno 2026/05/11

Rivya poskytuje beta TypeScript SDK pro serverové integrace s Public API.

SDK je tenký klient nad Rivya Public API v1. Nižší kontrakt zůstává OpenAPI a kontrakt schématu a metody SDK musí zůstat sladěné s tímto schématem.

Stav

Balíček je aktuálně udržovaný v tomto repozitáři jako privátní beta. Nebude publikován na npm, dokud nebudou výslovně schváleny název balíčku, metadata, changelog a release proces.

SDK podporuje:

  • výpis modelů
  • vytvoření a načtení asynchronního generování
  • upload a načtení přes Files API
  • načtení zůstatku kreditů
  • správu webhook endpointů, testovací doručení, výpis událostí, výpis doručení a rotaci secretu
  • ověření podpisu webhooku
  • nestreamovaná a streamovaná Chat completions a chatové relace vytvořené přes API

Streamování Chat je v této privátní betě dostupné přes serverové parsování SSE. Tajné API klíče držte na svém serveru.

Instalace v tomto repozitáři

Dokud je SDK v betě, používejte lokální zdroj balíčku:

pnpm --dir packages/rivya-sdk typecheck

Aplikační kód by měl držet tajný API klíč na serveru:

import { RivyaClient } from "@rivya/sdk";

const rivya = new RivyaClient({
  apiKey: process.env.RIVYA_API_KEY
});

Nevkládejte tajné API klíče do browser bundle, localStorage, analytických událostí, screenshotů ani sdílených tiketů.

Výpis modelů

models.list je veřejný a nevyžaduje API klíč:

const models = await rivya.models.list();

for (const model of models.data) {
  console.log(model.id, model.api_status, model.supported_api_inputs);
}

Vytvoření generování

Použijte generations.create pro asynchronní generování obrázku, videa nebo audia:

const generation = await rivya.generations.create(
  {
    model: "z-image",
    prompt: "Čistý editorialní produktový obrázek na jemném studiovém pozadí",
    client_request_id: "order-123-preview"
  },
  {
    idempotencyKey: "order-123-preview"
  }
);

console.log(generation.id, generation.status);

Potom pollujte pomocí generations.retrieve:

const current = await rivya.generations.retrieve(generation.id);
console.log(current.status, current.result?.primary_url);

Pro produkční zápisové požadavky používejte Idempotency-Key. SDK ho vystavuje jako idempotencyKey.

Upload souborů

Použijte files.upload pro referenční obrázky, videa nebo audio:

import { readFile } from "node:fs/promises";

const file = new Blob([await readFile("./reference.png")], {
  type: "image/png"
});

const uploaded = await rivya.files.upload({
  file,
  filename: "reference.png",
  kind: "image",
  model: "nano-banana-2",
  client_request_id: "asset-123"
});

console.log(uploaded.id, uploaded.url);

Použijte files.retrieve pro opětovné načtení nahraných metadat:

const sameFile = await rivya.files.retrieve(uploaded.id);
console.log(sameFile.mime_type, sameFile.duration_token);

Když soubor používáte v generování, předejte vrácená veřejná pole přes params.referenceMediaItems:

await rivya.generations.create({
  model: "nano-banana-2",
  prompt: "Uprav styl této produktové fotografie pro čistou editorialní stránku katalogu",
  params: {
    referenceMediaItems: [
      {
        url: uploaded.url,
        kind: uploaded.kind,
        name: uploaded.file_name,
        mimeType: uploaded.mime_type,
        durationSeconds: uploaded.duration_seconds ?? undefined,
        durationToken: uploaded.duration_token ?? undefined
      }
    ]
  }
});

Kontrola kreditů

const credits = await rivya.credits.retrieve();
console.log(credits.current_credits);

Správa webhooků

Vytvořte webhook endpoint:

const endpoint = await rivya.webhooks.create({
  name: "Produkční webhook",
  url: "https://example.com/rivya/webhook",
  event_types: ["generation.succeeded", "generation.failed"]
});

console.log(endpoint.id, endpoint.signing_secret);

signing_secret se vrací pouze po volání create nebo rotate. Uložte ho na serveru.

Další webhook helpery:

await rivya.webhooks.list();
await rivya.webhooks.retrieve(endpoint.id);
await rivya.webhooks.update(endpoint.id, { status: "disabled" });
await rivya.webhooks.test(endpoint.id);
await rivya.webhooks.rotateSecret(endpoint.id);
await rivya.webhooks.deliveries.list(endpoint.id, { limit: 20 });
await rivya.webhookEvents.list({ limit: 20 });

Před důvěrou k payloadu webhooku ověřte podpis doručení:

import { verifyRivyaWebhookSignature } from "@rivya/sdk";

const ok = await verifyRivyaWebhookSignature({
  rawBody,
  timestamp: request.headers.get("rivya-webhook-timestamp") || "",
  signatureHeader: request.headers.get("rivya-webhook-signature") || "",
  signingSecret: process.env.RIVYA_WEBHOOK_SIGNING_SECRET || ""
});

if (!ok) {
  throw new Error("Neplatný podpis webhooku Rivya");
}

SDK helper používá stejný HMAC-SHA256 kontrakt dokumentovaný v API Webhooks.

Chat

Použijte chat.completions.create pro jeden nestreamovaný tah Chat API:

const completion = await rivya.chat.completions.create(
  {
    model: "gpt-5-2-chat",
    message: "Napiš stručný plán uvedení nové kampaně produktových obrázků",
    client_request_id: "chat-001"
  },
  {
    idempotencyKey: "chat-001"
  }
);

console.log(completion.session_id, completion.message.content);

Pokračujte s vráceným session_id:

await rivya.chat.completions.create({
  model: "gpt-5-2-chat",
  session_id: completion.session_id,
  message: "Teď z toho udělej pětikrokový prováděcí checklist."
});

Načtěte relace vytvořené přes API:

await rivya.chat.sessions.list({ limit: 20 });
await rivya.chat.sessions.retrieve(completion.session_id);

Použijte chat.completions.stream pro čtení Server-Sent Events jako async iterator:

const stream = await rivya.chat.completions.stream(
  {
    model: "gpt-5-2-chat",
    message: "Napiš stručný plán uvedení nové kampaně produktových obrázků",
    client_request_id: "chat-stream-001"
  },
  {
    idempotencyKey: "chat-stream-001"
  }
);

for await (const event of stream) {
  if (event.event === "message.delta") {
    process.stdout.write(event.data.delta);
  }

  if (event.event === "message.completed") {
    console.log(event.data.message.id);
  }
}

message.delta slouží jen k zobrazení. Potvrzený výsledek je dostupný po message.completed a později ho lze načíst pomocí chat.sessions.retrieve.

Chyby

SDK vyhazuje RivyaAPIError pro ne-2xx odpovědi Public API:

import { RivyaAPIError } from "@rivya/sdk";

try {
  await rivya.generations.retrieve("task_missing");
} catch (error) {
  if (error instanceof RivyaAPIError) {
    console.log(error.status, error.code, error.requestId);
  }
}

RivyaAPIError obsahuje HTTP status, veřejný chybový kód, zprávu, request id, pokud je dostupné, a bezpečnou podmnožinu response headerů.

Validace

Než budete změnu považovat za dokončenou, spusťte kontroly SDK:

pnpm sdk:check
pnpm --dir packages/rivya-sdk typecheck
pnpm content:api-docs

pnpm sdk:check obsahuje statickou kontrolu kontraktu a bezsíťovou runtime kontrolu pro parsování chyb, bezpečné error headery, idempotency headery, Bearer auth, veřejný výpis modelů, parsování Chat streaming SSE, Chat streaming error events a ověření podpisu webhooku.

Související stránky

Obsah