RikaidoDeveloper

@rikaido/sdk

Le SDK

Une classe, trois portes, zéro dépendance. C’est fetch avec les bons en-têtes et les bons types.

Installer

npm
npm install @rikaido/sdk

Le paquet est du TypeScript compilé, sans dépendance, sous licence Apache-2.0. Il tourne partout où fetch existe : Node 18+, Bun, Deno, un navigateur, un worker.

Une clé, trois portes

TypeScript
import { Rikaido } from "@rikaido/sdk";

const rikaido = new Rikaido({ apiKey: process.env.RIKAIDO_KEY! });

// Le harnais : huit contrôles, vingt codes, un seul verrou.
const verdict = await rikaido.harness.validate(recipe, { allergies: ["arachide"] });
if (!verdict.safe) throw new Error(verdict.issues[0].message);

// Le graphe : de quoi un ingrédient est fait, et ce qui le remplace.
const arachide = await rikaido.graph.ingredient("beurre d’arachide");
arachide.facts.allergens; // ["peanut"]

// Le cast : le dessin kawaii et le jouet 3D.
const tomate = await rikaido.art.portrait("tomate");
tomate.kawaiiSvg; // "<svg …"
tomate.toyUrl;    // "https://api.rikaido.app/v1/art/ingredients/tomato/toy.webp"

Ce que chaque réponse porte

Chaque réponse est l’objet de l’API, plus usage.op — l’opération qui a été comptée, lue sur l’en-tête Rikaido-Usage-Op. Un appel qui n’a pas été compté (un 400, un 404) ne l’a pas.

usage
const v = await rikaido.harness.validate(recipe);
v.usage.op; // "validate"

Les erreurs

Tout ce qui n’est pas un 2xx lance une RikaidoError avec status, code quand l’API en donne un, et la phrase de l’API comme message.

erreurs
import { RikaidoError } from "@rikaido/sdk";

try {
  await rikaido.harness.read("https://example.com/recette");
} catch (err) {
  if (err instanceof RikaidoError && err.code === "payment-required") {
    // les appels offerts du mois sont utilisés
  }
}

Les méthodes

harness.validate(recipe, constraints?, titleHint?)Verdict
harness.read(source, locale?)ReadResult
graph.ingredient(name, { neighbours? })GraphIngredient
graph.search(q, { limit?, locale? }){ matches }
art.list(){ count, ingredients }
art.portrait(name)Portrait
art.toy(name) · art.kawaii(name){ bytes, contentType }
Les fichiers eux-mêmes.

Sans le SDK

Le SDK n’a rien que l’API n’ait pas. Chaque page de référence montre l’appel en curl ; la clé voyage dans Authorization: Bearer, le corps en JSON.