import type { DataRetriever, DataRetrieverContext, SeoMeta } from './runtime.router.types';
/**
 * Creates an internal SEO retriever that fetches SEO metadata for a route.
 * This retriever is automatically added to all routes and executes in parallel
 * with user-provided retrievers.
 *
 * The SEO retriever handles both browser and serverless rendering environments:
 * - Browser: Fetches SEO data from API endpoint (already merged with defaults by Lambda)
 * - Serverless rendering: Returns null (SEO data is already in the page from Lambda)
 *
 * The backend Lambda handler (LambdaRuntimeSeoByRoute) uses SeoProvider to merge
 * route-specific metadata with defaults before returning, ensuring:
 * - Default SEO metadata is always applied as a base
 * - Route-specific metadata is merged on top of defaults
 * - No state leakage occurs between routes
 *
 * @param {string} routePath - The path of the route to fetch SEO metadata for
 * @returns {DataRetriever} A data retriever function that returns SEO metadata
 *
 * @example
 * const seoRetriever = createSeoRetriever('/products/:id');
 * const result = await seoRetriever(context);
 * // result = { seoMeta: { title: '...', description: '...', ... } }
 */
export declare function createSeoRetriever(routePath: string): DataRetriever;
/**
 * Fetches SEO metadata for a route from the backend.
 * Handles both browser and serverless rendering environments differently:
 *
 * - Browser: Makes an API call to fetch SEO data from the dedicated SEO API endpoint
 *   The backend Lambda handler merges route-specific metadata with defaults before returning
 * - Serverless rendering: Returns null (data is already in the page from Lambda serverless rendering)
 *
 * For dynamic routes (e.g., `/products/:id`), route parameters are replaced with
 * actual values from the context before fetching.
 *
 * The returned metadata is already merged with defaults by the backend, ensuring:
 * - All SEO fields have values (either route-specific or default)
 * - No state leakage between routes
 * - Consistent behavior across all routes
 *
 * @param {string} routePath - The route path to fetch SEO metadata for (may contain params like `:id`)
 * @param {DataRetrieverContext} ctx - Context containing route params for dynamic routes
 * @returns {Promise<SeoMeta | null>} SEO metadata (merged with defaults) or null if unavailable
 *
 * @example
 * // For a static route
 * const seoMeta = await fetchSeoMetadata('/about', ctx);
 * // Fetches from: ${PURE_ENV_API_BASE_URL}/seo-meta?route=%2Fabout
 * // Returns: Merged metadata (route-specific + defaults)
 *
 * @example
 * // For a dynamic route
 * const seoMeta = await fetchSeoMetadata('/products/:id', { params: { id: '123' }, ... });
 * // Fetches from: ${PURE_ENV_API_BASE_URL}/seo-meta?route=%2Fproducts%2F123
 * // Returns: Merged metadata (route-specific + defaults)
 */
export declare function fetchSeoMetadata(routePath: string, ctx: DataRetrieverContext): Promise<SeoMeta | null>;
/**
 * Returns default SEO metadata as a fallback when fetching fails.
 * These defaults ensure the application always has valid SEO metadata
 * even when the backend is unavailable or returns errors.
 *
 * Includes all SEO fields to ensure proper meta tag management:
 * - Basic meta tags (title, description, robots)
 * - Open Graph tags for social media sharing
 * - Twitter Card tags for Twitter sharing
 * - Canonical URL
 *
 * @returns {SeoMeta} Default SEO metadata object with all fields populated
 */
export declare function getDefaultSeoMeta(): SeoMeta;
