import { type Express, type Request, type Response, type NextFunction } from 'express';
import type { Logger } from 'pino';
import type { Config } from '../config.js';
import { ElsClient } from '../elsClient.js';
import { HttpTransportManager } from '../transports/http.js';
import { createJwksResolver } from './jwks.js';
import type { RedisService } from '../cache/redis.js';
import type { MiddlewareDeps } from '../middleware/withMiddleware.js';
import type { LkResolver } from './lkResolver.js';
/**
 * Создаёт Express-приложение для Streamable HTTP transport.
 *
 * Структура:
 *   - `/els/healthz`, `/els/readyz` — public, без auth
 *   - `/els/metrics` — public, Prometheus (отключаемо через MCP_METRICS_ENABLED=false)
 *   - `/els/.well-known/*` — public, без auth
 *   - `/els/mcp` — требует Bearer (ELS-key или OIDC JWT), + originGuard
 *
 * Возвращает app + manager (нужен для graceful shutdown).
 */
export interface CreateHttpAppOptions {
    config: Config;
    log: Logger;
    /** Для тестов: ManaualTransportManager / mock JWKS. */
    transportManager?: HttpTransportManager;
    jwksResolver?: ReturnType<typeof createJwksResolver>;
    /** Для тестов: внешний ElsClient (probe). */
    probeElsClient?: ElsClient;
    /** Redis для readyz / cache / DCR. */
    redis?: RedisService | null;
    /** Middleware deps (передаём в transport manager). */
    middlewareDeps?: MiddlewareDeps;
    /** LK resolver для OIDC sub → apps (передаётся в auth middleware). */
    lkResolver?: LkResolver | null;
}
export interface HttpAppHandle {
    app: Express;
    manager: HttpTransportManager;
    probeClient: ElsClient | undefined;
}
export declare function createHttpApp(opts: CreateHttpAppOptions): HttpAppHandle;
export type { NextFunction, Request, Response };
//# sourceMappingURL=app.d.ts.map