personalization-middleware
Version:
Next.js middleware for request-based personalization
96 lines (90 loc) • 2.53 kB
TypeScript
import { NextRequest, NextResponse } from 'next/server';
interface MiddlewareConfig {
/**
* The API endpoint that evaluates segments based on context
*/
apiEndpoint: string;
/**
* API key for authentication
*/
apiKey: string;
/**
* Custom header name for segments (default: 'x-user-segments')
*/
headerName?: string;
}
declare function createMiddleware(config: MiddlewareConfig): (request: NextRequest) => Promise<NextResponse<unknown>>;
declare const createPersonalizationMiddleware: typeof createMiddleware;
declare const config: {
matcher: string[];
};
interface DeviceInfo {
browser: {
name?: string;
version?: string;
};
os: {
name?: string;
version?: string;
};
device: {
type?: string;
model?: string;
vendor?: string;
};
}
interface UtmParams {
source?: string;
medium?: string;
campaign?: string;
term?: string;
content?: string;
}
interface GeolocationInfo {
country?: string;
region?: string;
city?: string;
}
interface CustomAttributes {
[key: string]: string | number | boolean | null;
}
interface RequestContext {
utm: UtmParams;
geolocation?: GeolocationInfo;
device: {
deviceType?: string;
browser?: string;
os?: string;
};
userId?: string;
sessionId?: string;
referrer?: string;
customAttributes?: CustomAttributes;
}
interface Segment {
id: string;
name: string;
description?: string;
active?: boolean;
ruleCount?: number;
}
interface SegmentEvaluationResult {
segments: Segment[];
context: RequestContext;
timestamp: number;
requestId: string;
}
interface SegmentEvaluatorConfig {
apiEndpoint: string;
apiKey: string;
timeout?: number;
maxRetries?: number;
}
declare function collectRequestContext(request: NextRequest): RequestContext;
declare class SegmentEvaluator {
private config;
constructor(config: SegmentEvaluatorConfig);
evaluateSegments(context: RequestContext): Promise<SegmentEvaluationResult>;
}
declare function createSegmentEvaluator(config: SegmentEvaluatorConfig): SegmentEvaluator;
export { type CustomAttributes, type DeviceInfo, type GeolocationInfo, type MiddlewareConfig, type RequestContext, type Segment, type SegmentEvaluationResult, type SegmentEvaluatorConfig, type UtmParams, collectRequestContext, config, createMiddleware, createPersonalizationMiddleware, createSegmentEvaluator };