import type { TokenStatus } from '@microsoft/teams.api';
import type { Client as HttpClient, EventEmitter } from '@microsoft/teams.common';
import type { IActivityContext } from '../contexts';
import type { Router } from '../router';
import type { AppEvents, IPlugin } from '../types';
import type { PluginAdditionalContext } from '../types/app-routing';
import { OAuthFlow } from '.';
type OAuthFlowRegistryOptions<TPlugin extends IPlugin> = {
    readonly defaultConnectionName?: string;
    readonly router: Router<PluginAdditionalContext<TPlugin>>;
    readonly client: HttpClient;
    readonly events: EventEmitter<AppEvents<TPlugin>>;
    readonly graphBaseUrl?: string;
};
/**
 * Owns either the legacy default OAuth flow or registered flows.
 */
export declare class OAuthFlowRegistry<TPlugin extends IPlugin = IPlugin> {
    private readonly flows;
    private usesRegisteredFlows;
    /**
     * Creates the registry and installs routes for all flows.
     *
     * Omitting `defaultConnectionName` starts the registry in registered-flow mode.
     */
    constructor(options: OAuthFlowRegistryOptions<TPlugin>);
    /**
     * Adds a flow. The first registration removes the legacy
     * implicit flow; subsequent additions of the same name are rejected.
     */
    add(flow: OAuthFlow<TPlugin>): void;
    /**
     * Resolves a flow by connection name.
     */
    get(connectionName: string): OAuthFlow<TPlugin>;
    /** Returns every flow in the active legacy or registered-flow mode. */
    getAll(): OAuthFlow<TPlugin>[];
    /**
     * Gets and corrects token-service status for every registered connection.
     *
     * Silent SSO can leave the status endpoint stale, so disconnected or omitted
     * flows are checked directly for a cached token.
     */
    getConnectionStatus(context: IActivityContext): Promise<TokenStatus[]>;
    /**
     * Validates a connection before a deprecated context OAuth helper runs.
     */
    validate(connectionName: string, connectionNameProvided: boolean): void;
    /**
     * Records pending attribution for a flow.
     */
    recordPending(context: IActivityContext, connectionName: string, supportsSso: boolean): void;
    private registerRoutes;
    private normalize;
}
export {};
