export interface AuthUser {
    id: string | number;
    username?: string;
    email?: string;
    roles: string[];
    permissions?: string[];
    tenantId?: string | number;
    sessionId?: string;
    [key: string]: any;
}
export interface AuthRequest {
    username: string;
    password: string;
    tenantId?: string | number;
    rememberMe?: boolean;
}
export interface ExternalAuthOptions {
    baseUrl: string;
    apiKey?: string;
    endpoints: {
        validate: string;
        verify: string;
        refresh: string;
        logout?: string;
    };
    timeout?: number;
    retries?: number;
    cache?: {
        enabled: boolean;
        ttl: number;
    };
}
export interface AuthToken {
    accessToken: string;
    refreshToken?: string;
    expiresIn: number;
    tokenType: string;
}
export interface AuthValidationResult {
    isValid: boolean;
    user?: AuthUser;
    error?: string;
}
export interface AuthVerificationResult {
    isValid: boolean;
    token?: AuthToken;
    error?: string;
}
export interface AuthMiddlewareOptions {
    externalAuth?: ExternalAuthOptions;
    jwt: {
        secret: string;
        ignoreExpiration?: boolean;
    };
    excludePaths?: string[];
    errorHandling?: {
        throwUnauthorized?: boolean;
        logErrors?: boolean;
    };
}
export interface AuthProvider {
    authenticate(credentials: AuthRequest): Promise<AuthToken>;
    validateToken(token: string): Promise<AuthValidationResult>;
    refreshToken(refreshToken: string): Promise<AuthToken>;
    logout(token: string, userId?: string | number): Promise<boolean>;
}
