/// <reference types="node" />
import { OAuthConfigType, WindowOptions } from "../";
import { BrowserWindow } from "electron";
import { EventEmitter } from "events";
import { ResponseType } from "../utils";
export interface OAuth2EmitterType {
    emit(event: "before-authorize-request", parameters: object): boolean;
    emit(event: "before-access-token-request", parameters: object, headers: object): boolean;
}
export default interface OAuth2Provider {
    on(event: "before-authorize-request", listener: (query: {
        [key: string]: any;
    }) => void): this;
    on(event: "before-access-token-request", listener: (parameters: {
        [key: string]: any;
    }, headers: {
        [key: string]: any;
    }) => void): this;
}
export default class OAuth2Provider extends EventEmitter implements OAuth2EmitterType {
    config: OAuthConfigType;
    finished: boolean;
    userCancelError?: Error;
    constructor(config: OAuthConfigType);
    /**
     * Initiate OAuth2 flow.
     *
     * if grant_type is "code" or "token", you need to pass "window" argument.
     * In other cases it is not necessary.
     *
     * @example
     * ```js
     *  const window = new BrowserWindow({
     *    width: 600,
     *    height: 800,
     *    webPreferences: {
     *      nodeIntegration: false // We recommend disabling nodeIntegration for security.
     *      contextIsolation: true // We recommend enabling contextIsolation for security.
     *      // see https://github.com/electron/electron/blob/master/docs/tutorial/security.md
     *    },
     *  })
     *  const provider = new OAuth2Provider(config)
     *  provider.perform(window)
     *    .then(console.log)
     *    .catch(console.error)
     * ```
     *
     */
    perform(window?: BrowserWindow, windowOptions?: WindowOptions): Promise<ResponseType | string>;
}
//# sourceMappingURL=index.d.ts.map