/** * Next.js middleware for network detection */ import type { NextApiRequest, NextApiResponse, NextApiHandler } from 'next'; import type { NetworkInfo, NextApiRequestWithNetwork } from '@plyaz/types/api'; /** * Next.js middleware for network detection * Adds network information to the request object and requests Client Hints from browser * * @param handler - Next.js API route handler * @returns Wrapped handler with network detection * * @example * ```typescript * // pages/api/data.ts * import { withNetworkDetection } from '@plyaz/api/utils/network/frameworks/nextjs'; * * export default withNetworkDetection(async (req, res) => { * const { networkInfo } = req; * * if (networkInfo?.saveData) { * // Return minimal data for users with data saver enabled * return res.json({ data: getMinimalData() }); * } * * if (networkInfo?.effectiveType === '2g' || networkInfo?.effectiveType === 'slow-2g') { * // Return cached or simplified data for slow connections * return res.json({ data: getCachedData() }); * } * * // Return full data for good connections * return res.json({ data: getFullData() }); * }); * ``` */ export declare function withNetworkDetection(handler: (req: T, res: NextApiResponse) => Promise | void): NextApiHandler; /** * Next.js Edge Runtime middleware for network detection * Works with Next.js 13+ Edge API Routes * * @example * ```typescript * // app/api/data/route.ts * import { NextRequest, NextResponse } from 'next/server'; * import { getNetworkInfoFromRequest } from '@plyaz/api/utils/network/frameworks/nextjs'; * * export async function GET(request: NextRequest) { * const networkInfo = getNetworkInfoFromRequest(request); * * if (networkInfo?.saveData) { * return NextResponse.json({ data: getMinimalData() }); * } * * return NextResponse.json({ data: getFullData() }); * } * * export const runtime = 'edge'; * ``` */ export declare function getNetworkInfoFromRequest(request: Request): NetworkInfo; /** * Next.js middleware helper to add Client Hints headers to response * * @param response - Next.js response or NextResponse * @returns Response with Client Hints headers added * * @example * ```typescript * import { NextResponse } from 'next/server'; * import { addClientHintsToResponse } from '@plyaz/api/utils/network/frameworks/nextjs'; * * export function middleware() { * const response = NextResponse.next(); * return addClientHintsToResponse(response); * } * ``` */ export declare function addClientHintsToResponse(response: T): T; /** * 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: NextApiRequest | NextApiRequestWithNetwork): req is NextApiRequestWithNetwork; //# sourceMappingURL=nextjs.d.ts.map