/**
 * This file is part of the @egodigital/egoose distribution.
 * Copyright (c) e.GO Digital GmbH, Aachen, Germany (https://www.e-go-digital.com/)
 *
 * @egodigital/egoose is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as
 * published by the Free Software Foundation, version 3.
 *
 * @egodigital/egoose is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
 */
import * as express from 'express';
/**
 * Data from 'https://graph.microsoft.com/v1.0/me'.
 */
export interface MicrosoftMe {
    /**
     * The display name.
     */
    "displayName"?: string;
    /**
     * The given name.
     */
    "givenName"?: string;
    /**
     * The ID.
     */
    "id": string;
    /**
     * The mail address.
     */
    "mail"?: string;
    /**
     * The surname.
     */
    "surname"?: string;
    /**
     * The user's principal name.
     */
    "userPrincipalName"?: string;
}
/**
 * Data for a Microsoft Access token.
 */
export interface MicrosoftOAuthAccessToken {
    /**
     * The token.
     */
    "access_token": string;
    /**
     * The time, in seconds, the token expires in.
     */
    "expires_in": string;
    /**
     * The refresh token.
     */
    "refresh_token": string;
    /**
     * The scope.
     */
    "scope": string;
    /**
     * The type, like "Bearer".
     */
    "token_type": string;
}
/**
 * Options for 'registerForMicrosoftOAuth()' function.
 */
export interface RegisterForMicrosoftOAuthOptions {
    /**
     * Is invoked, when an access token has been received.
     *
     * @param {MicrosoftOAuthAccessToken} token The token.
     * @param {express.Request} req The request context.
     * @param {express.Response} res The response context.
     */
    onAccessToken: (token: MicrosoftOAuthAccessToken, req: express.Request, res: express.Response) => void | PromiseLike<void>;
    /**
     * A custom error response function.
     *
     * @param {string} error The error (code).
     * @param {string} description The (error) description.
     * @param {express.Request} req The request context.
     * @param {express.Response} res The response context.
     */
    onError?: (error: string, description: string, req: express.Request, res: express.Response) => any;
    /**
     * A custom server error response function.
     *
     * @param {any} err The error.
     * @param {express.Request} req The request context.
     * @param {express.Response} res The response context.
     */
    onServerError?: (err: any, req: express.Request, res: express.Response) => any;
    /**
     * A custom success response function.
     *
     * @param {express.Request} req The request context.
     * @param {express.Response} res The response context.
     */
    onSuccess?: (req: express.Request, res: express.Response) => any;
    /**
     * The custom redirect (base) path. Default: '/oauth/microsoft'
     */
    redirectPath?: string;
}
/**
 * Returns the information from 'https://graph.microsoft.com/v1.0/me'.
 *
 * @param {string | MicrosoftOAuthAccessToken} token The token.
 *
 * @return {Promise<false|MicrosoftMe>} The promise with the data or (false) if failed.
 */
export declare function getMicrosoftMe(token: string | MicrosoftOAuthAccessToken): Promise<false | MicrosoftMe>;
/**
 * Returns the login URL for Microsoft OAuth.
 *
 * @return {string} The login URL.
 */
export declare function getMicrosoftOAuthLoginUrl(): string;
/**
 * Registers an Express instance for Microsoft OAuth.
 *
 * @param {express.Express | express.Router} hostOrRouter The host or router.
 * @param {RegisterForMicrosoftOAuthOptions} opts The options.
 */
export declare function registerForMicrosoftOAuth(hostOrRouter: express.Express | express.Router, opts: RegisterForMicrosoftOAuthOptions): void;
