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.