/** * Network Header Detection Utilities * Parse and utilize HTTP Client Hints headers for network-aware capabilities */ import type { PartialNetworkInfoFromHeaders, ApiClientOptions, NetworkRequest, NetworkResponse } from '@plyaz/types/api'; import { NETWORK_QUALITY } from '@plyaz/types/api'; /** * Network Client Hints headers interface */ /** * Partial network info from headers (with null for missing values) */ /** * Valid Client Hint header names */ export declare const CLIENT_HINT_HEADERS: { readonly SAVE_DATA: "save-data"; readonly ECT: "ect"; readonly RTT: "rtt"; readonly DOWNLINK: "downlink"; readonly DEVICE_MEMORY: "device-memory"; readonly ACCEPT_CH: "Accept-CH"; readonly ACCEPT_CH_LIFETIME: "Accept-CH-Lifetime"; }; /** * Get network information from HTTP headers * * @param headers - Request headers containing Client Hints * @returns Partial network information * * @example * ```typescript * // In a Next.js API route * const networkInfo = getNetworkInfoFromHeaders(req.headers); * if (networkInfo.saveData) { * // Serve lighter content * } * ``` */ export declare function getNetworkInfoFromHeaders(headers: Headers | Record): PartialNetworkInfoFromHeaders; /** * Get Client Hint request headers * These headers request the browser to send network information * * @returns Headers to request Client Hints * * @example * ```typescript * // In Next.js middleware * const response = NextResponse.next(); * const hintHeaders = getClientHintHeaders(); * Object.entries(hintHeaders).forEach(([key, value]) => { * response.headers.set(key, value); * }); * ``` */ export declare function getClientHintHeaders(): Record; /** * Infer network quality from Client Hints * * @param headers - Request headers * @returns Network quality level */ export declare function getNetworkQualityFromHeaders(headers: Headers | Record): NETWORK_QUALITY; /** * Check if Save-Data header is enabled * * @param headers - Request headers * @returns True if data saver is enabled */ export declare function isDataSaverEnabledFromHeaders(headers: Headers | Record): boolean; /** * Create network-aware configuration from headers * Combines existing presets based on detected network quality * * @param headers - Request headers * @returns Configuration adjustments based on network * * @example * ```typescript * import { getEnv } from '@utils/environment'; * const config = getNetworkConfigFromHeaders(req.headers); * const apiClient = createApiClient({ * ...config, * baseURL: getEnv('API_URL') * }); * ``` */ export declare function getNetworkConfigFromHeaders(headers: Headers | Record): Partial; /** * Middleware for Next.js API routes with network detection * * @example * ```typescript * // pages/api/data.ts * import { withNetworkDetection } from '@plyaz/api'; * * export default withNetworkDetection(async (req, res) => { * const { networkQuality, saveData } = req; * * if (saveData) { * // Return minimal data * return res.json({ data: 'minimal' }); * } * * // Return full data * return res.json({ data: 'full' }); * }); * ``` */ export declare function withNetworkDetection(handler: (req: TReq, res: TRes) => Promise | void): (req: TReq, res: TRes) => Promise; //# sourceMappingURL=headers.d.ts.map