SDK TypeScript

@hela/sdk est un client TypeScript léger, sans dépendance, qui fonctionne dans Node 18+, Deno, Bun et les runtimes edge. Il encapsule l'authentification, la pagination, les réessais et la vérification des webhooks.

Installation

npm install @hela/sdk

Un client

import { Hela } from "@hela/sdk";

const hela = new Hela({
  baseUrl: "https://api.example.com/v1",
  apiKey: process.env.HELA_KEY!,
  companyId: "4c1d…",
});

Lire

const sales = await hela.sales.list({ from: "2026-09-01", to: "2026-09-30" });
const one = await hela.sales.get(sales[0].id);
const receivables = await hela.reports.receivables();

// Les collections à curseur s'itèrent sans se soucier des pages :
for await (const event of hela.events.iterate({ type: "invoice.paid" })) {
  console.log(event.id, event.data.number);
}

Écrire

const sale = await hela.sales.create(
  {
    businessUnitId: "…",
    partnerId: "…",
    lines: [{ itemId: "…", quantity: 2, unitPrice: 12.5 }],
  },
  { idempotencyKey: "web-order-1042" },
);

await hela.sales.recordPayment(sale.id, { walletId: "…", amount: 25 });

Le SDK envoie l'en-tête Idempotency-Key si vous le donnez, et réessaie de lui-même les 429 et 5xx avec un délai croissant (trois fois par défaut).

L'argent

import { toMajor, toMinor } from "@hela/sdk";

toMajor(12500, "USD"); // 125
toMajor(20000, "CDF"); // 20000 — pas de décimales
toMinor(125, "USD");   // 12500

Les réponses restent en unité mineure : convertissez à l'affichage, jamais au stockage.

Vérifier un webhook

import { verifyWebhook } from "@hela/sdk";

app.post("/hooks/hela", express.raw({ type: "application/json" }), (req, res) => {
  const ok = verifyWebhook(process.env.HELA_WEBHOOK_SECRET!, req.body.toString("utf8"), req.header("Hela-Signature") ?? "");
  if (!ok) return res.status(400).end();
  const event = JSON.parse(req.body.toString("utf8"));
  queue.push(event);
  res.status(200).end();
});

Erreurs

Toute réponse non-2xx lève une HelaError qui porte status, code (le code stable, par exemple field-required:walletId) et requestId.

try {
  await hela.sales.recordPayment(id, { walletId, amount: 999 });
} catch (error) {
  if (error instanceof HelaError && error.code === "amount-above-outstanding") {
    // …
  }
}

Types

Les types sont générés depuis le schéma OpenAPI du serveur et publiés avec le paquet. Pour une version du serveur plus récente que le SDK, régénérez-les :

npx @hela/sdk generate https://api.example.com/v1/openapi.json > src/hela-types.ts

Code source

Le SDK vit dans le dépôt Hela, sous packages/sdk. Licence MIT.

فقرة خاطئة أو ناقصة؟ راسلنا.