Express (TypeScript)
Add NjiraAI middleware to Express apps for automatic context and tracing.
Install
npm install @njiraai/sdk
Middleware
import express from "express";
import { NjiraAI } from "@njiraai/sdk";
const app = express();
app.use(express.json());
const njira = new NjiraAI({
apiKey: process.env.NJIRA_API_KEY!,
projectId: process.env.NJIRA_PROJECT_ID!,
mode: "active",
});
// Add middleware - creates request context and flushes traces
app.use(njira.middleware.express());
app.post("/chat", async (req, res) => {
const { message } = req.body;
// Enforce before processing
const decision = await njira.enforcePre({
input: message,
metadata: { endpoint: "/chat" },
});
if (decision.verdict === "block") {
return res.status(403).json({
error: "Blocked",
reasons: decision.reasons,
traceId: decision.traceId,
});
}
// Your LLM logic here
const response = `Echo: ${message}`;
res.json({ response, traceId: decision.traceId });
});
app.listen(3000);
What the middleware does
- Creates/propagates
requestIdfromx-request-idheader (or generates one) - Sets up per-request trace context
- Adds
x-njira-trace-idandx-njira-request-idresponse headers - Flushes traces on response finish
Custom user/tags extraction
app.use(
njira.middleware.express({
getUser: (req) => req.headers["x-user-id"] as string,
getTags: (req) => ({ tenant: req.headers["x-tenant"] as string }),
})
);