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
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
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
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.
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
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
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
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
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
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.