LIVE · AUDIT-KETEN · EU-GEHOST
SYSTEEM · 99,99% UPTIME
v 1.0 ↗ GEMAAKT IN DE EU

@nexbasira/node

Server-side TypeScript-SDK. Dekt elke resource van de publieke API met getypeerde request- + response-vormen, cursor-paginatiehelpers en een webhook-handtekeningverificator die in constante tijd draait.

Installeren

npm install @nexbasira/node

Vereist Node 18+. ESM + CommonJS beide ondersteund.

Initialiseren

import { NexBasira } from "@nexbasira/node";

const nb = new NexBasira({
  apiKey: process.env.NB_PUBLIC_KEY!,    // nb_pub_*
  apiSecret: process.env.NB_SECRET_KEY!, // nb_sec_*
  // baseURL: "https://app.nexbasira.com/api/v1/public", // default
  // timeout: 30_000,                                          // default
});

Resources

Elke resource van de publieke API heeft een getypeerde client op de cvp-instance:

nb.sessions       // create / list / retrieve / end / invite
nb.evidence       // list / retrieve / signed download URL
nb.whiteboards    // list per session
nb.webhooks       // register / rotate-secret / test-fire / constructEvent
nb.branding       // read-only
nb.org            // read-only

Veelvoorkomende patronen

Aanmaken + uitnodigen

const session = await nb.sessions.create({
  notes: "Vehicle damage claim CL-2026-0042",
  scheduled_for: "2026-05-23T10:00:00Z",
  locale: "fr",
});

const invite = await nb.sessions.invite(session.id, {
  recipient_email: "alex@policyholder.com",
  send_email: true,
});

console.log(invite.url); // shown ONCE

Async-iterator-paginatie

List-endpoints retourneren een async iterator die transparant pagineert. Geen "vergeet niet de cursor uit de vorige response door te geven" meer:

for await (const session of nb.sessions.list({ limit: 50 })) {
  console.log(session.id, session.status);
}

// Or a single page if you want pagination control:
const page = await nb.sessions.listPage({ limit: 25 });
// page.data, page.has_more, page.next_cursor

Idempotente POST

Geef een idempotencyKey mee om een schrijfbewerking retry-veilig te maken:

const session = await nb.sessions.create(
  { notes: "..." },
  { idempotencyKey: crypto.randomUUID() },
);

De backend cachet de response op (key, credential) gedurende 24 uur. Een herhaalde POST met dezelfde sleutel retourneert de oorspronkelijke response zonder de resource opnieuw aan te maken.

Een webhook verifiëren

import express from "express";
import { NexBasira, InvalidSignatureError } from "@nexbasira/node";

const app = express();
const nb = new NexBasira({ apiKey: "...", apiSecret: "..." });

// IMPORTANT: use express.raw() — constructEvent needs the untouched
// bytes the signature was computed over.
app.post("/nb-webhook", express.raw({ type: "application/json" }), (req, res) => {
  try {
    const event = nb.webhooks.constructEvent(
      req.body,
      req.header("NB-Signature")!,
      process.env.NB_WEBHOOK_SECRET!,
    );
    // event.type is type-narrowed; event.data is the resource shape
    switch (event.type) {
      case "session.completed":
        return onCompleted(event.data, res);
      case "audit.anchored":
        return onAnchored(event.data, res);
    }
    res.status(204).end();
  } catch (err) {
    if (err instanceof InvalidSignatureError) {
      return res.status(401).send("bad signature");
    }
    throw err;
  }
});

Getypeerde fouten

De SDK gooit een kleine hiërarchie van getypeerde fouten, zodat u elke klasse bewust kunt afhandelen:

KlasseWanneer
AuthenticationError401 — verkeerde credentials of ontbrekende sleutel
PermissionError403 — credential mist de scope
NotFoundError404 — resource bestaat niet of zit niet in uw org
RateLimitError429 — throttle bereikt. Heeft retryAfterMs
InvalidSignatureErrorAlleen vanuit constructEvent() — verkeerde / ontbrekende / verlopen handtekening
NexBasiraErrorBasisklasse — vang deze op voor "elke SDK-fout"
try {
  await nb.sessions.create({ ... });
} catch (err) {
  if (err instanceof RateLimitError) {
    await sleep(err.retryAfterMs);
    return retry();
  }
  if (err instanceof NexBasiraError) {
    log.warn({ status: err.status, code: err.code }, "cvp error");
  }
  throw err;
}

OpenAPI-types

De SDK wordt geleverd met request- + response-types gegenereerd door openapi-typescript onder @nexbasira/node/types. Importeer ze direct als u sterk getypeerde handlers wilt bovenstrooms van de SDK-call:

import type { Session, Evidence, WebhookEvent } from "@nexbasira/node/types";

function onSessionCompleted(session: Session) {
  // ...
}

Wat nu