/// <reference types="node" />
import { Logger } from "../shared/Logger";
import { Server } from "../Server";
import { IService } from "../Service";
import { IAuthProvider } from "../auth";
import { ConfigurableServiceBase, ConfigurableServiceConfig } from "./ConfigurableServiceBase";
import { User } from "../realms";
import { StatsSink } from "../stats";
import { EventEmitter } from "events";
import { StrictEventEmitter } from "strict-event-emitter-types";
export interface AuthServiceConfiguration extends ConfigurableServiceConfig {
    enableRuntimeConfiguration?: boolean;
    refreshTokenTtl?: number;
    userTokenTtl?: number;
    accessTokenTtl?: number;
    allowAnyUserToRetrieveUserInfo?: boolean;
}
export interface IAuthProviderConfig {
    type: string;
    name?: string;
    config?: any;
    forceCodeConfig?: boolean;
}
export declare class AuthService extends ConfigurableServiceBase<AuthServiceConfiguration> {
    logger: Logger;
    server: Server;
    private privateKey;
    private refreshTokenTtl;
    private userTokenTtl;
    private accessTokenTtl;
    private cleanupInterval;
    private adminRealm;
    private tokenRevocationRealm;
    private realmDirectoryClient;
    private providers;
    private defaultProviders;
    private runtimeConfigurationEnabled;
    private allowAnyUserToRetrieveUserInfo;
    private authCounter;
    stats: StatsSink;
    constructor(config?: AuthServiceConfiguration);
    protected setConfigCore(config?: AuthServiceConfiguration): void;
    addProvider(provider: IAuthProvider): void;
    setDefaultProviders(providers: IAuthProviderConfig[]): void;
    getUserByProviderId(provider: string, providerId: string): User;
    createOrUpdateUser(providerId: string, provider: string, isAdmin: boolean, metadata?: {
        [key: string]: string;
    }, userId?: string): Promise<User>;
    updateUserMetadata(user: User | string, metadata?: {
        [key: string]: string;
    }): Promise<void>;
    private updateUserMetadataInTransaction;
    protected startCore(server: Server): Promise<void>;
    private stopping;
    protected stopCore(): Promise<void>;
    private authenticate;
    private userToken;
    private accessToken;
    private validateStatus;
    private revokeToken;
    private getUserById;
    private getUserByProviderIdApi;
    private createOrUpdateUserApi;
    private patchUserApi;
    private getProviders;
    private addOrUpdateProviderApi;
    private removeProviderApi;
    private updateProviderData;
    private updateProviderAccount;
    private deleteUser;
    private enhanceLog;
    private createProvider;
    private startProvider;
    private stopProvider;
    private pruneRevocationTokens;
    private readonly providerQueue;
    private hasPendingProviderOperations;
    private enqueueProviderOperation;
    private stopProviderQueue;
    private generateUniqueId;
    private requireAdminOrUserId;
    private requireRuntimeConfiguration;
    private deleteUserWithUserId;
}
interface AuthServiceEvents {
    userCreated: {
        user: User;
        totalUsers: number;
    };
}
export interface AuthService extends StrictEventEmitter<EventEmitter, AuthServiceEvents>, IService {
}
export {};
