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 requestId from x-request-id header (or generates one)
  • Sets up per-request trace context
  • Adds x-njira-trace-id and x-njira-request-id response 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 }),
  })
);