Rokad
Gesamte Dokumentation
dhal-Dokumentation

Framework-Integrationen

Integrieren Sie Dhal v1.1 mit Express, Fastify, NestJS, Koa, Hono, node:http oder der Kern-Engine.

Repository ansehen
dhal-Dokumentation
Seite 3 von 9

Dhal v1.1 enthält Adapter für Express, Fastify, NestJS, Koa, Hono auf Node.js und node:http. Alle verwenden dieselbe Engine, Konfiguration, Speicher, Telemetrie und denselben Entscheidungslebenszyklus.

Express

ts
import { dhal } from "@rokadhq/dhal/express";
app.use(express.json({ limit: "1mb" }));
app.use(dhal({ configPath: "dhal.json" }));

Platzieren Sie Body-Parser vor Dhal, wenn Regeln bereits analysierte Inhalte prüfen sollen. Der Adapter liest req.body, optional req.rawBody, Identitäten und den finalen Antwortstatus. Verwenden Sie dhalFromEngine(engine) mit einer vorhandenen Engine.

Fastify

ts
import { dhalFastify } from "@rokadhq/dhal/fastify";
await app.register(dhalFastify({ configPath: "dhal.json" }));

Dhal prüft in preHandler und erfasst Ergebnisse in onResponse. Nutzen Sie dhalFastifyFromEngine(engine) für eine vorab erstellte Engine.

NestJS

ts
import { installDhalNest } from "@rokadhq/dhal/nest";
const app = await NestFactory.create(AppModule);
const dhal = await installDhalNest(app, { configPath: "dhal.json" });
await app.listen(3000);

Installieren Sie Dhal nach dem Erstellen der Anwendung und vor app.listen(). Dhal erkennt, ob Nest Express oder Fastify verwendet, und installiert den passenden stabilen Adapter.

ts
import { installDhalNestFromEngine } from "@rokadhq/dhal/nest";
const installation = await installDhalNestFromEngine(app, engine);

Die Installation stellt engine, die erkannte platform und close() bereit. Nest-Microservice-Transporte ohne HTTP-Adapter sind nicht Teil dieser Integration.

Koa

ts
import { dhalKoa } from "@rokadhq/dhal/koa";
app.use(dhalKoa({ configPath: "dhal.json" }));

Registrieren Sie Dhal vor den Anwendungsrouten. Der Adapter prüft vor nachgelagerter Middleware, beendet die Kette bei Blockierungen, setzt x-dhal-action und x-dhal-rule, erfasst den finalen Status und liest Identitäten aus context.state. Verwenden Sie dhalKoaFromEngine(engine) für eigene Lebenszyklusverwaltung.

Hono auf Node.js

ts
import { dhalHono } from "@rokadhq/dhal/hono";
app.use("*", dhalHono({ configPath: "dhal.json" }));

Der Adapter nutzt standardisierte Web-Request- und Response-Objekte, liefert bei Blockierung eine kontrollierte Antwort und erfasst den finalen Status. Identitäten können über context.var bereitgestellt werden. Das unterstützte v1.1-Ziel ist Hono auf Node.js; Edge-Laufzeiten gehören nicht zur Kompatibilitätszusage.

node:http

ts
import { createNodeHttpDhal } from "@rokadhq/dhal/node-http";
const protection = createNodeHttpDhal({ configPath: "dhal.json" });

Der Adapter normalisiert Methode, URL, Pfad, Header, IP, Identität und content-length. Er liest den Anfrage-Stream nicht ein.

Benutzerdefinierte Integrationen

ts
import { createDhal, type DhalRequest } from "@rokadhq/dhal";
const protection = createDhal({ configPath: "dhal.json" });
const decision = await protection.inspect(request);
await protection.recordOutcome(request, { statusCode: 401 });

Rufen Sie recordOutcome() auf, sobald die Antwort bekannt ist, damit ergebnisabhängige Signale aktualisiert werden.

Lebenszyklus und Blockierungsantworten

ts
process.once("SIGTERM", async () => {
  await protection.close(5_000);
  process.exit(0);
});

Die Adapter setzen x-dhal-action: block und x-dhal-rule: <rule id> und liefern den konfigurierten Statuscode mit kontrollierter JSON-Antwort. Geben Sie keine privaten Entscheidungsmetadaten an nicht vertrauenswürdige Clients aus.