import type { NavigatorContextProvider } from '../../../app/navigator-context-provider.js';
import { type SearchEngine, type SearchEngineOptions } from '../../../app/search-engine/search-engine.js';
import type { Controller } from '../../../controllers/controller/headless-controller.js';
import type { LegacySearchAction } from '../../../features/analytics/analytics-utils.js';
import type { ControllerDefinitionsMap } from '../../common/types/controllers.js';
import type { EngineDefinition, EngineDefinitionOptions } from '../../common/types/engine.js';
import type { InferControllerPropsMapFromDefinitions, InferControllerStaticStateMapFromDefinitions } from '../../common/types/inference.js';
/**
 * The SSR search engine.
 *
 * @group Engine
 */
export interface SSRSearchEngine extends SearchEngine {
    /**
     * Waits for the search to be completed and returns a promise that resolves to a `SearchCompletedAction`.
     */
    waitForSearchCompletedAction(): Promise<SearchCompletedAction>;
}
/**
 * The options to create a search engine definition in SSR.
 *
 * @group Engine
 */
export type SearchEngineDefinitionOptions<TControllers extends ControllerDefinitionsMap<SSRSearchEngine, Controller>> = EngineDefinitionOptions<SearchEngineOptions, TControllers>;
export type SearchCompletedAction = ReturnType<LegacySearchAction['fulfilled' | 'rejected']>;
export type SearchEngineDefinition<TControllers extends ControllerDefinitionsMap<SSRSearchEngine, Controller>> = EngineDefinition<SSRSearchEngine, TControllers>;
/**
 * Initializes a Search engine definition in SSR with given controllers definitions and search engine config.
 *
 * @param options - The search engine definition
 * @returns Three utility functions to fetch the initial state of the engine in SSR, hydrate the state in CSR,
 *  and a build function that can be used for edge cases requiring more control.
 *
 * @group Engine
 */
export declare function defineSearchEngine<TControllerDefinitions extends ControllerDefinitionsMap<SearchEngine, Controller>>(options: SearchEngineDefinitionOptions<TControllerDefinitions>): {
    fetchStaticState: import("../../common/types/fetch-static-state.js").FetchStaticState<import("redux").AnyAction, InferControllerStaticStateMapFromDefinitions<TControllerDefinitions>, InferControllerPropsMapFromDefinitions<TControllerDefinitions>>;
    hydrateStaticState: import("../../common/types/hydrate-static-state.js").HydrateStaticState<SSRSearchEngine, import("../../common/types/inference.js").InferControllersMapFromDefinition<TControllerDefinitions>, import("redux").AnyAction, InferControllerPropsMapFromDefinitions<TControllerDefinitions>>;
    setNavigatorContextProvider: (navigatorContextProvider: NavigatorContextProvider) => void;
};
