Rivya TypeScript SDK
Використовуйте Rivya TypeScript SDK beta для викликів Public API v1: моделей, генерацій, файлів, кредитів, webhooks і Chat, включно з потоковим передаванням SSE.
Востаннє переглянуто 2026/05/11
Rivya надає TypeScript SDK beta для серверних інтеграцій із Public API.
SDK є тонким клієнтом над Rivya Public API v1. Нижчорівневим контрактом лишається OpenAPI і контракт схеми, а методи SDK мають залишатися узгодженими з цією схемою.
Статус
Пакет наразі підтримується всередині цього репозиторію як приватна бета. Його не публікують у npm, доки назву пакета, метадані, журнал змін і процес релізу не буде явно затверджено.
SDK підтримує:
- перегляд списку моделей
- створення та отримання асинхронних генерацій
- завантаження й отримання через Files API
- отримання балансу кредитів
- керування кінцевими точками webhook, тестові доставки, список подій, список доставок і ротацію секрету
- перевірку webhook-підпису
- Chat completions без потокового передавання і з потоковим передаванням, а також chat-сесії, створені через API
Потокове передавання Chat доступне в цій приватній бета-версії через серверний парсер SSE. Тримайте секретні API-ключі на своєму сервері.
Встановлення в цьому репозиторії
Поки SDK у beta, використовуйте локальне джерело package:
pnpm --dir packages/rivya-sdk typecheckКод застосунку має зберігати секретний API-ключ на сервері:
import { RivyaClient } from "@rivya/sdk";
const rivya = new RivyaClient({
apiKey: process.env.RIVYA_API_KEY
});Не розміщуйте секретні API-ключі у браузерних bundles, localStorage, аналітичних подіях, скриншотах або спільних тікетах.
Перегляд моделей
models.list є публічним і не потребує API-ключа:
const models = await rivya.models.list();
for (const model of models.data) {
console.log(model.id, model.api_status, model.supported_api_inputs);
}Створення генерації
Використовуйте generations.create для асинхронної генерації зображень, відео або аудіо:
const generation = await rivya.generations.create(
{
model: "z-image",
prompt: "A clean editorial product image on a soft studio background",
client_request_id: "order-123-preview"
},
{
idempotencyKey: "order-123-preview"
}
);
console.log(generation.id, generation.status);Потім опитуйте через generations.retrieve:
const current = await rivya.generations.retrieve(generation.id);
console.log(current.status, current.result?.primary_url);Використовуйте Idempotency-Key для production-запитів на запис. SDK надає це як idempotencyKey.
Завантаження файлів
Використовуйте files.upload для референс-зображень, відео або аудіо:
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);Використовуйте files.retrieve, щоб знову прочитати метадані завантаження:
const sameFile = await rivya.files.retrieve(uploaded.id);
console.log(sameFile.mime_type, sameFile.duration_token);Коли використовуєте файл у генерації, передайте повернені публічні поля через params.referenceMediaItems:
await rivya.generations.create({
model: "nano-banana-2",
prompt: "Restyle this product photo for a clean editorial catalog page",
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
}
]
}
});Перевірка кредитів
const credits = await rivya.credits.retrieve();
console.log(credits.current_credits);Керування Webhooks
Створіть кінцеву точку webhook:
const endpoint = await rivya.webhooks.create({
name: "Production webhook",
url: "https://example.com/rivya/webhook",
event_types: ["generation.succeeded", "generation.failed"]
});
console.log(endpoint.id, endpoint.signing_secret);signing_secret повертається лише після викликів create або rotate. Зберігайте його на своєму сервері.
Інші допоміжні методи webhook:
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 });Перевіряйте підписи доставок, перш ніж довіряти корисному навантаженню webhook:
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("Invalid Rivya webhook signature");
}Допоміжний метод SDK використовує той самий контракт HMAC-SHA256, задокументований в API Webhooks.
Chat
Використовуйте chat.completions.create для одного ходу Chat API без потокового передавання:
const completion = await rivya.chat.completions.create(
{
model: "gpt-5-2-chat",
message: "Write a concise launch plan for a new product image campaign",
client_request_id: "chat-001"
},
{
idempotencyKey: "chat-001"
}
);
console.log(completion.session_id, completion.message.content);Продовжуйте з поверненим session_id:
await rivya.chat.completions.create({
model: "gpt-5-2-chat",
session_id: completion.session_id,
message: "Now turn that into a 5-step execution checklist."
});Читайте сесії, створені через API:
await rivya.chat.sessions.list({ limit: 20 });
await rivya.chat.sessions.retrieve(completion.session_id);Використовуйте chat.completions.stream, щоб споживати Server-Sent Events як асинхронний ітератор:
const stream = await rivya.chat.completions.stream(
{
model: "gpt-5-2-chat",
message: "Write a concise launch plan for a new product image campaign",
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 призначений лише для відображення. Зафіксований результат доступний після message.completed, і його можна прочитати пізніше через chat.sessions.retrieve.
Помилки
SDK викидає RivyaAPIError для non-2xx відповідей 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 містить HTTP status, публічний error code, message, request id за наявності й безпечну підмножину response headers.
Валідація
Запустіть перевірки SDK, перш ніж вважати зміну завершеною:
pnpm sdk:check
pnpm --dir packages/rivya-sdk typecheck
pnpm content:api-docspnpm sdk:check містить статичну перевірку контракту й перевірку виконання без мережі для розбору помилок, безпечних заголовків помилок, заголовків ідемпотентності, автентифікації Bearer, публічного списку моделей, розбору SSE для потокового передавання Chat, подій помилок потокового передавання Chat і перевірки webhook-підписів.
Пов'язані сторінки
Швидкий старт Rivya API
Створіть API-ключ, виберіть модель, надішліть асинхронну задачу генерації та відправте один хід Chat API з необов'язковим потоковим передаванням SSE.
API Webhooks
Створюйте підписані кінцеві точки webhook Rivya API, перевіряйте підписи доставок, переглядайте спроби доставки та надсилайте безпечні тестові події.