import { EndpointOptions } from "./EndpointOptions";
import { OctokitResponse } from "./OctokitResponse";
import { RequestInterface } from "./RequestInterface";
import { RequestParameters } from "./RequestParameters";
import { Route } from "./Route";
/**
 * Interface to implement complex authentication strategies for Octokit.
 * An object Implementing the AuthInterface can directly be passed as the
 * `auth` option in the Octokit constructor.
 *
 * For the official implementations of the most common authentication
 * strategies, see https://github.com/octokit/auth.js
 */
export interface AuthInterface<AuthOptions extends any[], Authentication extends any> {
    (...args: AuthOptions): Promise<Authentication>;
    hook: {
        /**
         * Sends a request using the passed `request` instance
         *
         * @param {object} endpoint Must set `method` and `url`. Plus URL, query or body parameters, as well as `headers`, `mediaType.{format|previews}`, `request`, or `baseUrl`.
         */
        <T = any>(request: RequestInterface, options: EndpointOptions): Promise<OctokitResponse<T>>;
        /**
         * Sends a request using the passed `request` instance
         *
         * @param {string} route Request method + URL. Example: `'GET /orgs/:org'`
         * @param {object} [parameters] URL, query or body parameters, as well as `headers`, `mediaType.{format|previews}`, `request`, or `baseUrl`.
         */
        <T = any>(request: RequestInterface, route: Route, parameters?: RequestParameters): Promise<OctokitResponse<T>>;
    };
}
