/// <reference types="koa-bodyparser" />
import Application from 'koa';
import { VerifyOptions, SignOptions } from 'jsonwebtoken';
import { RouterContext } from 'koa-router';
import { TokenType } from '../utils';
/**
 * 令牌类，提供令牌的生成和解析功能
 *
 * ```js
 * const jwt = new Token(
 * config.getItem("secret"),
 * config.getItem("accessExp"),
 * config.getItem("refreshExp")
 * );
 * ```
 */
declare class Token {
    /**
     * 令牌的secret值，用于令牌的加密
     */
    secret: string | undefined;
    /**
     * access token 默认的过期时间
     */
    accessExp: number;
    /**
     * refresh token 默认的过期时间
     */
    refreshExp: number;
    /**
     * 构造函数
     * @param secret 牌的secret值
     * @param accessExp access token 过期时间
     * @param refreshExp refresh token 过期时间
     */
    constructor(secret?: string, accessExp?: number, refreshExp?: number);
    /**
     * 挂载到 ctx 上
     */
    initApp(app: Application, secret?: string, accessExp?: number, refreshExp?: number): void;
    /**
     * 生成access_token
     * @param identity 标识位
     */
    createAccessToken(identity: string | number): string;
    /**
     * 生成refresh_token
     * @param identity 标识位
     */
    createRefreshToken(identity: string | number): string;
    /**
     * verifyToken 验证token
     * 若过期，抛出ExpiredTokenException
     * 若失效，抛出InvalidTokenException
     *
     * @param token 令牌
     */
    verifyToken(token: string, type?: TokenType): any;
}
/**
 * jwt 的实例
 */
declare const jwt: Token;
/**
 * 生成access token
 * @param payload 负载，支持 string 和 object
 * @param options 参数
 */
declare function createAccessToken(payload: string | object, options?: SignOptions): string;
/**
 * 生成refresh token
 * @param payload 负载，支持 string 和 object
 * @param options 参数
 */
declare function createRefreshToken(payload: string | object, options?: SignOptions): string;
/**
 * 验证 access token
 * @param token 令牌
 * @param options 选项
 */
declare function verifyAccessToken(token: string, options?: VerifyOptions): any;
/**
 * 验证 refresh token
 * @param token 令牌
 * @param options 选项
 */
declare function verifyRefreshToken(token: string, options?: VerifyOptions): any;
/**
 * 颁发令牌
 * @param user 用户
 */
declare function getTokens(user: any): {
    accessToken: string;
    refreshToken: string;
};
/**
 * 解析请求头
 * @param ctx koa 的context
 * @param type 令牌的类型
 */
declare function parseHeader(ctx: RouterContext, type?: TokenType): any;
export { Token, jwt, getTokens, parseHeader, createAccessToken, createRefreshToken, verifyAccessToken, verifyRefreshToken };
