import { AmplitudeAI } from "./client.js"; //#region src/middleware.d.ts /** A static value or a `(req) => value` resolver for per-request values. */ type ValueOrResolver = T | ((req: unknown) => T | null) | null; interface MiddlewareOptions { amplitudeAI: AmplitudeAI; /** * Return the authenticated end user for this request (e.g. from your auth * middleware's session or a verified token), or `null` for anonymous * requests. Do not read it from a request header the client controls: * any caller could then send events as any user. */ userIdResolver: (req: unknown) => string | null; /** * Optional device / anonymous ID for the request (e.g. an Amplitude * `device_id` your frontend sends). Lets anonymous traffic be tracked and * still emit session-end events when there is no user ID. */ deviceIdResolver?: (req: unknown) => string | null; sessionIdResolver?: (req: unknown) => string; agentId?: string | null; env?: string | null; /** Agent code version applied to every request's session. */ agentVersion?: string | null; /** End-customer org for multi-tenant platforms (static or per-request). */ customerOrgId?: ValueOrResolver; /** Segmentation context dict (static or per-request). */ context?: ValueOrResolver>; /** Group-analytics dict (static or per-request). */ groups?: ValueOrResolver>; trackSessionEvents?: boolean; flushOnResponse?: boolean; } interface ExpressLikeRequest { headers: Record; } interface ExpressLikeResponse { on: (event: string, callback: () => void) => void; } /** * Creates Express-compatible middleware. * * Usage (mount after your authentication middleware): * app.use(createAmplitudeAIMiddleware({ * amplitudeAI: ai, * userIdResolver: (req) => req.user?.id ?? null, * })); * * `userIdResolver` must return the authenticated principal, not a value read * from a client-supplied header. The trace ID is taken from a valid W3C * `traceparent` or a short `x-trace-id` token (letters, digits, `._:-`, up to * 64 chars); anything else is ignored and a fresh trace ID is generated. */ declare function createAmplitudeAIMiddleware(options: MiddlewareOptions): (req: ExpressLikeRequest, res: ExpressLikeResponse, next: () => void) => void; //#endregion export { MiddlewareOptions, createAmplitudeAIMiddleware }; //# sourceMappingURL=middleware.d.ts.map