Guides d’intégration
Supabase Edge Functions
Protéger une clé Orbit dans les secrets d’une Edge Function Supabase.
Installez les valeurs dans le coffre de secrets du projet consommateur :
supabase secrets set \
ORBIT_BASE_URL="https://anvhjdjxovzjnvpmjtkl.supabase.co/functions/v1/api" \
ORBIT_API_KEY="votre-cle-orbit-dev"La commande ci-dessus est illustrative : évitez de laisser une vraie clé dans l’historique du terminal. Préférez une saisie sécurisée ou l’outil de secrets de votre CI.
const categories = new Set(["games", "movies", "anime", "series", "music", "books"]);
Deno.serve(async (request) => {
const input = await request.json();
const query = typeof input.q === "string" ? input.q.trim() : "";
const category = typeof input.category === "string" ? input.category : null;
if (!query || query.length > 100 || (category && !categories.has(category))) {
return Response.json({ error: "invalid_request" }, { status: 400 });
}
const baseUrl = Deno.env.get("ORBIT_BASE_URL");
const apiKey = Deno.env.get("ORBIT_API_KEY");
if (!baseUrl || !apiKey) {
return Response.json({ error: "not_configured" }, { status: 503 });
}
const url = new URL(`${baseUrl}/v1/interests/search`);
url.searchParams.set("q", query);
if (category) url.searchParams.set("category", category);
const response = await fetch(url, {
headers: { Authorization: `Bearer ${apiKey}` },
signal: AbortSignal.timeout(5_000),
});
const headers = new Headers({
"content-type": "application/json",
"cache-control": "private, no-store",
});
for (const name of [
"x-request-id",
"x-ratelimit-limit",
"x-ratelimit-remaining",
"x-ratelimit-reset",
"x-orbit-daily-ratelimit-limit",
"x-orbit-daily-ratelimit-remaining",
"x-orbit-daily-ratelimit-reset",
"retry-after",
]) {
const value = response.headers.get(name);
if (value) headers.set(name, value);
}
return new Response(response.body, {
status: response.status,
headers,
});
});Validez l’utilisateur ou l’appel entrant selon les règles de votre produit. Une clé Supabase publiable du projet consommateur n’est ni une clé Orbit ni un remplacement de votre authentification applicative.