Orbit API
Guides d’intégration

Node.js et TypeScript

Créer un client Orbit minimal, typé et réservé au serveur.

Prérequis

Définissez ORBIT_BASE_URL et ORBIT_API_KEY dans le gestionnaire de secrets de votre service. Le code suivant doit rester dans un module serveur.

type OrbitCategory = "games" | "movies" | "anime" | "series" | "music" | "books";

type OrbitInterest = {
  id: string;
  label: string;
  category: OrbitCategory;
};

type SearchResponse = {
  data: OrbitInterest[];
  meta: {
    apiVersion: "v1";
    query: string;
    category: OrbitCategory | null;
    categories: OrbitCategory[] | null;
    limit: number;
    returnedCount: number;
  };
};

export async function searchInterests(input: {
  query: string;
  categories?: OrbitCategory[];
  limit?: number;
}) {
  const baseUrl = process.env.ORBIT_BASE_URL;
  const apiKey = process.env.ORBIT_API_KEY;
  if (!baseUrl || !apiKey) throw new Error("Orbit n’est pas configurée");

  const url = new URL(`${baseUrl}/v1/interests/search`);
  url.searchParams.set("q", input.query);
  for (const category of new Set(input.categories ?? [])) {
    url.searchParams.append("category", category);
  }
  url.searchParams.set("limit", String(input.limit ?? 20));

  const response = await fetch(url, {
    headers: { Authorization: `Bearer ${apiKey}` },
    signal: AbortSignal.timeout(5_000),
  });

  const body = await response.json();
  if (!response.ok) {
    const requestId = response.headers.get("x-request-id") ?? "absent";
    const code = body?.error?.code ?? "unknown_error";
    throw new Error(`Orbit ${response.status} ${code} (${requestId})`);
  }

  return body as SearchResponse;
}

Le délai de cinq secondes est un exemple client, pas un engagement de service. Ne journalisez ni les en-têtes, ni le corps complet, ni la clé.

Pour les 429, attendez Retry-After. Réessayez uniquement les 500, 503, délais dépassés et erreurs réseau avec une attente exponentielle bornée et légèrement aléatoire.

Continuez avec le guide de persistance.

Sur cette page