/**
 * Module dependencies.
 */
import OAuth2Strategy, { InternalOAuthError, VerifyCallback } from "passport-oauth2";
declare type StrategyOptions = {
    pem?: string;
    callbackURL: string;
    scope: string[];
} & OAuth2Strategy.StrategyOptions;
declare type InputStrategyOptions = Partial<StrategyOptions> & Pick<StrategyOptions, "clientID" | "clientSecret" | "scope" | "callbackURL">;
declare type UserProfile = {
    provider: string;
    id: string;
    username: string;
    displayName: string;
};
declare class OAuthStrategyWithPEM<T = any, U = any> extends OAuth2Strategy {
    pem?: string;
    constructor(options: StrategyOptions, verify: VerifyFunction<T, U>);
}
declare type VerifyFunction<T, U = any> = (accessToken: string, refreshToken: string, profile: T, verified: VerifyCallback) => void;
declare type DoneCallback = (e: InternalOAuthError | null, payload?: UserProfile) => void;
/**
 * `Strategy` constructor.
 *
 * The Twitch authentication strategy authenticates requests by delegating to
 * Twitch using the OAuth 2.0 protocol.
 *
 * Applications must supply a `verify` callback which accepts an `accessToken`,
 * `refreshToken` and service-specific `profile`, and then calls the `done`
 * callback supplying a `user`, which should be set to `false` if the
 * credentials are not valid.  If an exception occured, `err` should be set.
 *
 * Options:
 *   - `clientID`      your Twitch application"s client id
 *   - `clientSecret`  your Twitch application"s client secret
 *   - `callbackURL`   URL to which Twitch will redirect the user after granting authorization
 *   - `pem`           Signing certificate used for decoding a user's OIDC token
 *
 * Examples:
 *
 *     passport.use(new TwitchStrategy({
 *         clientID: "123-456-789",
 *         clientSecret: "shhh-its-a-secret"
 *         callbackURL: "https://www.example.net/auth/twitch/callback"
 *       },
 *       function(accessToken, refreshToken, profile, done) {
 *         User.findOrCreate(..., function (err, user) {
 *           done(err, user)
 *         })
 *       }
 *     ))
 *
 * @param {InputStrategyOptions} options
 * @param {VerifyFunction} verify
 * @api public
 */
declare class Strategy<T = any, U = any, Y extends {
    forceVerify: boolean;
} = any> extends OAuthStrategyWithPEM<T, U> {
    private readonly __userProfileURL;
    constructor(options: InputStrategyOptions, verify: VerifyFunction<T, U>);
    /**
     * Retrieve user profile from Twitch.
     *
     * This function constructs a normalized profile, with the following properties:
     *
     *   - `provider`         always set to `twitch`
     *   - `id`
     *   - `username`
     *   - `displayName`
     *
     * @param {String} accessToken
     * @param {((e: InternalOAuthError | null, payload: UserProfile | undefined) => void)} done
     * @api protected
     */
    userProfile(accessToken: string, done: (e: InternalOAuthError | null, payload?: UserProfile) => void): void;
    authorizationParams(options: Y): any;
}
export { Strategy, DoneCallback };
//# sourceMappingURL=oauth2.d.ts.map