import { Request, Response, NextFunction } from 'express';
export interface AuthRequest extends Request {
    ownerId?: string;
    adminId?: string;
    parentAdminId?: string;
    adminFlags?: {
        canManageVisitors: boolean;
        canManageApprovers: boolean;
        canManageSettings: boolean;
        canApproveRequests: boolean;
        canScanCheckpoint: boolean;
        canManageSubAdmins: boolean;
        canSeeAllVisitors: boolean;
    };
}
export declare function requireAuth(req: AuthRequest, res: Response, next: NextFunction): Promise<void>;
export declare function blockIfSuspended(req: AuthRequest, res: Response, next: NextFunction): Promise<void>;
export declare function isSubAdminSession(req: AuthRequest): boolean;
export interface PlatformAuthRequest extends Request {
    platformAdminId?: string;
}
export declare function requirePlatformAuth(req: PlatformAuthRequest, res: Response, next: NextFunction): void;
export interface MixedAuthRequest extends AuthRequest, PlatformAuthRequest {
}
export declare function requireAuthOrPlatform(req: MixedAuthRequest, res: Response, next: NextFunction): Promise<void>;
export declare function requireOwnerOnly(req: AuthRequest, res: Response, next: NextFunction): void;
export declare function requireOwnerOrSubAdminManager(req: AuthRequest, res: Response, next: NextFunction): void;
export declare function requireFlag(flag: keyof NonNullable<AuthRequest['adminFlags']>): (req: AuthRequest, res: Response, next: NextFunction) => void;
export interface ApproverAuthRequest extends Request {
    approverId?: string;
    ownerId?: string;
}
export declare function requireApproverAuth(req: ApproverAuthRequest, res: Response, next: NextFunction): Promise<void>;
export declare function requireAnyAuth(req: AuthRequest & ApproverAuthRequest & VisitorCheckpointAuthRequest, res: Response, next: NextFunction): Promise<void>;
export interface VisitorCheckpointAuthRequest extends Request {
    visitorCheckpointId?: string;
    ownerId?: string;
}
export declare function requireVisitorCheckpointAuth(req: VisitorCheckpointAuthRequest, res: Response, next: NextFunction): Promise<void>;
export type ScanActor = 'CHECKPOINT' | 'OWNER' | 'ADMIN' | 'APPROVER';
export interface ScanContext {
    ownerId: string;
    actor: ScanActor;
    checkpointId?: string;
    adminId?: string;
    approverId?: string;
}
export interface ScanAuthRequest extends Request {
    scanContext?: ScanContext;
    visitorCheckpointId?: string;
    ownerId?: string;
    adminId?: string;
    approverId?: string;
    adminFlags?: AuthRequest['adminFlags'];
}
export declare function requireScanAccess(req: ScanAuthRequest, res: Response, next: NextFunction): Promise<void>;
//# sourceMappingURL=auth.d.ts.map