/// <reference types="node" />
import { EventEmitter } from 'events';
import { NextFunction, Request, RequestHandler, Response, Router } from 'express';
import { XuiNodeOptions } from './xuiNodeOptions.interface';
import { XuiLogger } from '../util';
import { XuiNodeMiddlewareInterface } from './xuiNodeMiddleware.interface';
export declare class XuiNode extends EventEmitter {
    protected readonly router: Router;
    protected readonly middlewares: Array<string>;
    protected readonly logger: XuiLogger;
    authenticateMiddleware: any;
    constructor(router?: Router, middlewares?: Array<string>, logger?: XuiLogger);
    authenticate: (req: Request, res: Response, next: NextFunction) => void;
    /**
     * the proxied authenticate method which is publicly exposed
     * what constitutes a user being unauthenticated?
     * @see https://github.com/jaredhanson/passport/blob/597e289d6fa27a2c35d16dd411de284123e3817e/lib/http/request.js#L92
     * @param req
     * @param res
     * @param next
     */
    authenticateDefault: (req: Request, res: Response, next: NextFunction) => void | Response<any, Record<string, any>>;
    configure: (options: XuiNodeOptions) => RequestHandler;
    /**
     * Import a middleware layer.
     *
     * @param {string} middleware - ie. 's2s'
     * @return {Promise<any>}
     */
    importMiddleware: (middleware: string) => Promise<typeof import("../../auth") | typeof import("../../session")>;
    applyMiddleware: (middleware: string, options: XuiNodeOptions) => Promise<void>;
    applyMiddlewareLayer: (middlewareLayer: any, options: any) => void;
    /**
     * helper method to proxy any listened events onto the correct middleware
     * @param middleware - any middleware layer e.g s2s, oidc, fileStore etc this typically extends EventEmitter
     */
    proxyEvents: (middleware: XuiNodeMiddlewareInterface) => void;
}
export declare const xuiNode: XuiNode;
//# sourceMappingURL=xuiNode.class.d.ts.map