/** * Express middleware for network detection and enriched headers */ import type { Request, Response, RequestHandler } from 'express'; import type { NetworkInfo, ApiHeaders, ExpressRequestWithNetwork, EnrichedHeadersMiddlewareOptions, ExpressRequestWithEnrichedHeaders, NetworkDetectionOptions } from '@plyaz/types/api'; /** * Express middleware for network detection * Adds network information to the request object and requests Client Hints from browser * * @example * ```typescript * import express from 'express'; * import { networkDetectionMiddleware } from '@plyaz/api/utils/network/frameworks/express'; * * const app = express(); * * // Apply to all routes * app.use(networkDetectionMiddleware); * * app.get('/api/data', (req: ExpressRequestWithNetwork, res) => { * const { networkInfo } = req; * * if (networkInfo?.effectiveType === '4g') { * res.json({ quality: 'high', data: getHighQualityData() }); * } else { * res.json({ quality: 'standard', data: getStandardData() }); * } * }); * ``` */ export declare const networkDetectionMiddleware: RequestHandler; export declare function createNetworkDetectionMiddleware(options?: NetworkDetectionOptions): RequestHandler; /** * Type guard to check if request has network info * * @param req - Request to check * @returns True if request has network info */ export declare function hasNetworkInfo(req: Request | ExpressRequestWithNetwork): req is ExpressRequestWithNetwork; /** * Express route handler wrapper that provides network info * * @param handler - Route handler that receives network info * @returns Express route handler * * @example * ```typescript * app.get('/api/data', withNetworkInfo((req, res, networkInfo) => { * if (networkInfo?.saveData) { * return res.json({ mode: 'data-saver' }); * } * return res.json({ mode: 'normal' }); * })); * ``` */ export declare function withNetworkInfo(handler: (req: Request, res: Response, networkInfo: NetworkInfo) => void | Promise): RequestHandler; /** * Express middleware for enriched context headers * Collects device, network, platform, and compliance headers and sets them in AsyncLocalStorage context * * @param options - Middleware configuration options * @returns Express middleware * * @example * ```typescript * import express from 'express'; * import { enrichedHeadersMiddleware } from '@plyaz/api/network/frameworks/express'; * * const app = express(); * * // Apply enriched headers middleware * app.use(enrichedHeadersMiddleware({ * preset: 'standard', * includePerformance: true, * storeInLocals: true * })); * * // Service functions will automatically have enriched headers * app.get('/api/users', async (req, res) => { * const users = await fetchUsers({ page: 1 }); // Headers auto-included * res.json(users); * }); * ``` */ export declare function enrichedHeadersMiddleware(options?: EnrichedHeadersMiddlewareOptions): RequestHandler; /** * Express route handler wrapper that provides enriched headers * * @param handler - Route handler that receives enriched headers * @returns Express route handler * * @example * ```typescript * app.get('/api/data', withEnrichedHeaders(async (req, res, headers) => { * if (headers['x-user-region'] === 'eu') { * return res.json({ compliance: 'GDPR' }); * } * return res.json({ compliance: 'standard' }); * })); * ``` */ export declare function withEnrichedHeaders(handler: (req: Request, res: Response, headers: ApiHeaders) => void | Promise): RequestHandler; /** * Type guard to check if request has enriched headers * * @param req - Request to check * @returns True if request has enriched headers */ export declare function hasEnrichedHeaders(req: Request | ExpressRequestWithEnrichedHeaders): req is ExpressRequestWithEnrichedHeaders; //# sourceMappingURL=express.d.ts.map