/**
 * LK API resolvers.
 *
 * Два резолвера дёргают LK backend и кэшируются в Redis (если доступен):
 *
 * 1. `resolveOidcSubApps(sub)` — `GET /api/internal/users/{sub}/apps`
 *    возвращает список доступных пользователю appSlugs.
 *    Кэш: `mcp:oidc:apps:{sub}` TTL 5 min.
 *
 * 2. `resolveAppTier(appSlug)` — `GET /api/internal/apps/{slug}/billing/tier`
 *    возвращает один из `FREE`/`STANDARD`/`PREMIUM`/`UNLIMITED`.
 *    Кэш: `mcp:tier:{appSlug}` TTL 30 sec.
 *
 * TODO (LK backend): оба эндпоинта **пока не реализованы** — резолверы
 * корректно отрабатывают 404/500/timeout, возвращая fallback значения.
 * Когда эндпоинты появятся, никакого изменения кода не потребуется.
 *
 * Все вызовы — best-effort: при недоступности LK сервис **не** падает,
 * а использует safety-net fallback (`MCP_OIDC_DEMO_APP_SLUG`,
 * `config.defaultTier`).
 */
import type { Logger } from 'pino';
import type { Tier } from '../billing/limits.js';
/** Минимальный интерфейс Redis-клиента, который нам нужен. */
export interface RedisLike {
    get(key: string): Promise<string | null>;
    set(key: string, value: string, mode: string, duration: number): Promise<unknown>;
}
export interface LkResolverOptions {
    /** LK API base URL (без trailing slash). Если null — резолвер сразу fallback'ит. */
    lkApiBaseUrl?: string | null;
    /** Internal-API service-token (Bearer) для авторизации в LK. */
    lkApiToken?: string | null;
    /** Redis-клиент для кэша. Если null — резолвер не кэширует. */
    redis?: RedisLike | null;
    /** Fallback appSlug при недоступности LK. */
    fallbackAppSlug?: string;
    /** Fallback tier при недоступности LK. */
    fallbackTier: Tier;
    log?: Logger;
    /** Override fetch для тестов. */
    fetchImpl?: typeof fetch;
}
export interface SubAppsResult {
    /** Доступные appSlugs (минимум один — fallback'ом). */
    apps: string[];
    /** True → ответ из LK, false → fallback. */
    fromLk: boolean;
}
export interface TierResult {
    tier: Tier;
    /** True → ответ из LK, false → fallback. */
    fromLk: boolean;
}
export interface LkResolver {
    resolveOidcSubApps(sub: string): Promise<SubAppsResult>;
    resolveAppTier(appSlug: string): Promise<TierResult>;
}
export declare function createLkResolver(opts: LkResolverOptions): LkResolver;
//# sourceMappingURL=lkResolver.d.ts.map