Έγγραφα Rivya AI

Rivya TypeScript SDK

Χρησιμοποιήστε το Rivya TypeScript SDK beta για να καλέσετε το Public API v1 για μοντέλα, generations, files, credits, webhooks και Chat, συμπεριλαμβανομένου του SSE streaming.

Τελευταίος έλεγχος στις 2026/05/11

Το Rivya παρέχει ένα TypeScript SDK beta για server-side ενσωματώσεις με το Public API.

Το SDK είναι ένας λεπτός client πάνω από το Rivya Public API v1. Το χαμηλότερου επιπέδου contract παραμένει το OpenAPI και Schema Contract, και οι μέθοδοι του SDK πρέπει να μένουν ευθυγραμμισμένες με αυτό το schema.

Κατάσταση

Το package συντηρείται προς το παρόν μέσα σε αυτό το repository ως private beta. Δεν δημοσιεύεται στο npm μέχρι να εγκριθούν ρητά το όνομα package, τα metadata, το changelog και η διαδικασία release.

Το SDK υποστηρίζει:

  • λίστα μοντέλων
  • δημιουργία και ανάκτηση ασύγχρονων generations
  • ανέβασμα και ανάκτηση μέσω Files API
  • ανάκτηση υπολοίπου credits
  • διαχείριση webhook endpoint, test deliveries, λίστα events, λίστα deliveries και secret rotation
  • επαλήθευση webhook signature
  • non-streaming και streaming Chat completions, καθώς και API-created chat sessions

Το Chat streaming είναι διαθέσιμο σε αυτό το private beta μέσω server-side SSE parsing. Κρατήστε τα secret API keys στον server σας.

Εγκατάσταση σε αυτό το repo

Χρησιμοποιήστε το τοπικό package source όσο το SDK βρίσκεται σε beta:

pnpm --dir packages/rivya-sdk typecheck

Ο κώδικας εφαρμογής πρέπει να κρατά το secret API key στον server:

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

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

Μην τοποθετείτε secret API keys σε browser bundles, localStorage, analytics events, στιγμιότυπα οθόνης ή κοινόχρηστα tickets.

Λίστα μοντέλων

Το models.list είναι public και δεν απαιτεί API key:

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

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

Δημιουργία generation

Χρησιμοποιήστε το 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);

Έπειτα κάντε poll με το generations.retrieve:

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

Χρησιμοποιήστε Idempotency-Key για production write requests. Το 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 για να διαβάσετε ξανά τα metadata του ανεβασμένου αρχείου:

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

Όταν χρησιμοποιείτε ένα αρχείο σε generation, περάστε τα επιστρεφόμενα public πεδία μέσω 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
      }
    ]
  }
});

Έλεγχος credits

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

Διαχείριση webhooks

Δημιουργήστε ένα webhook endpoint:

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 calls. Αποθηκεύστε το στον server σας.

Άλλα webhook helpers:

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 });

Επαληθεύστε τα delivery signatures πριν εμπιστευτείτε webhook payloads:

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");
}

Ο helper του SDK χρησιμοποιεί το ίδιο HMAC-SHA256 contract που τεκμηριώνεται στα API Webhooks.

Chat

Χρησιμοποιήστε το chat.completions.create για έναν non-streaming γύρο 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."
});

Διαβάστε sessions που δημιουργήθηκαν μέσω API:

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

Χρησιμοποιήστε το chat.completions.stream για να καταναλώσετε Server-Sent Events ως async iterator:

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 είναι μόνο για εμφάνιση. Το committed αποτέλεσμα είναι διαθέσιμο μετά το 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, τον public error code, το message, το request id όταν είναι διαθέσιμο, και ένα ασφαλές υποσύνολο response-header.

Επικύρωση

Εκτελέστε τους ελέγχους SDK πριν θεωρήσετε μια αλλαγή ολοκληρωμένη:

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

Το pnpm sdk:check περιλαμβάνει static contract check και no-network runtime check για error parsing, safe error headers, idempotency headers, Bearer auth, public model listing, Chat streaming SSE parsing, Chat streaming error events και webhook signature verification.

Σχετικές σελίδες

Πίνακας περιεχομένων