import { Plugin, PluginID } from '../..';
import { LocationQuery, RouteLocationNormalized } from 'vue-router';
export interface VerifyParamRecord {
    /**
     * 参数名称
     */
    name: string;
    /**
     * 是否必填
     * @default true
     */
    required?: boolean;
}
/**
 * 验证参数类型
 */
export type VerifyParamType = string | VerifyParamRecord;
export interface SSOOptions {
    /**
     * 需要验证的参数列表，若存在多种情况可进行分组设置
     * @example
     * ```ts
     * // 不分组
     * createSSO({ verifyParams: ['token', { name: 'state', required: false }] })
     *
     * // 分组
     * createSSO({
     *   verifyParams: {
     *     success: ['token', { name: 'state', required: false }],
     *     error: ['error'],
     *   }
     * })
     * ```
     */
    verifyParams: VerifyParamType[] | Record<string, VerifyParamType[]>;
    /**
     * 获取单点登录地址
     * @example
     * ```ts
     * const sso = createSSO({
     *   // 获取 SSO 地址
     *   resolveSSOUri: (redirectUri) => `http://127.0.0.1:3000/login?redirect=${redirectUri}`
     * })
     * ```
     */
    resolveSSOUri: (redirectUri: string) => string;
}
/**
 * SSO Plugin ID
 */
export declare const SSO_ID: PluginID<SSO>;
/**
 * 单点登录插件
 */
export declare class SSO implements Plugin {
    /**
     * 配置项
     */
    options: SSOOptions;
    constructor(
    /**
     * 配置项
     */
    options: SSOOptions);
    id: PluginID<SSO>;
    /**
     * 需要验证的参数列表
     */
    private _verifyParams;
    /**
     * 统一化参数列表
     * @param params 参数列表
     */
    private _normalizeParams;
    /**
     * 获取不带参数的哈希路径
     */
    private _getHashWithoutParams;
    /**
     * 验证分组参数列表
     * @param route 路由
     * @param params 需要验证的参数列表
     */
    private _verifyGroupParams;
    /**
     * 验证路由是否来源于单点登录
     * @param route 路由
     */
    isFromSSO: (route: RouteLocationNormalized) => boolean;
    /**
     * 获取验证参数
     * @param route 路由
     */
    getVerifyParams: <T = LocationQuery>(route: RouteLocationNormalized) => [groupKey: string, params: T];
    /**
     * 剔除 `route.query` 里的验证参数
     * @param query 路由查询参数
     * @param params 验证参数
     */
    omitVerifyParams: (query: LocationQuery, params: any) => LocationQuery;
    /**
     * 跳转至单点登录页
     */
    gotoSSO: () => void;
    install: () => void;
}
