import { z } from 'zod';
export declare const UserSchema: z.ZodObject<{
    id: z.ZodString;
    email: z.ZodString;
    name: z.ZodString;
    role: z.ZodEnum<["user", "admin", "developer"]>;
    permissions: z.ZodArray<z.ZodString, "many">;
    createdAt: z.ZodDate;
    lastLogin: z.ZodOptional<z.ZodDate>;
    metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
}, "strip", z.ZodTypeAny, {
    name: string;
    id: string;
    role: "user" | "admin" | "developer";
    email: string;
    createdAt: Date;
    permissions: string[];
    metadata?: Record<string, any> | undefined;
    lastLogin?: Date | undefined;
}, {
    name: string;
    id: string;
    role: "user" | "admin" | "developer";
    email: string;
    createdAt: Date;
    permissions: string[];
    metadata?: Record<string, any> | undefined;
    lastLogin?: Date | undefined;
}>;
export type User = z.infer<typeof UserSchema>;
export declare const TokenPayloadSchema: z.ZodObject<{
    userId: z.ZodString;
    email: z.ZodString;
    role: z.ZodEnum<["user", "admin", "developer"]>;
    permissions: z.ZodArray<z.ZodString, "many">;
    iat: z.ZodOptional<z.ZodNumber>;
    exp: z.ZodOptional<z.ZodNumber>;
}, "strip", z.ZodTypeAny, {
    role: "user" | "admin" | "developer";
    email: string;
    userId: string;
    permissions: string[];
    iat?: number | undefined;
    exp?: number | undefined;
}, {
    role: "user" | "admin" | "developer";
    email: string;
    userId: string;
    permissions: string[];
    iat?: number | undefined;
    exp?: number | undefined;
}>;
export type TokenPayload = z.infer<typeof TokenPayloadSchema>;
export interface AuthConfig {
    jwtSecret: string;
    jwtExpiresIn: string;
    refreshTokenExpiresIn: string;
    bcryptRounds: number;
}
export declare class AuthService {
    private config;
    constructor(config?: Partial<AuthConfig>);
    hashPassword(password: string): Promise<string>;
    verifyPassword(password: string, hash: string): Promise<boolean>;
    generateAccessToken(user: User): string;
    generateRefreshToken(userId: string): string;
    verifyToken(token: string): TokenPayload;
    decodeToken(token: string): TokenPayload | null;
    hasPermission(user: User | TokenPayload, permission: string): boolean;
    hasAnyPermission(user: User | TokenPayload, permissions: string[]): boolean;
    hasAllPermissions(user: User | TokenPayload, permissions: string[]): boolean;
    generateApiKey(): string;
    validateApiKey(apiKey: string): boolean;
}
export declare class AuthError extends Error {
    code: string;
    statusCode: number;
    constructor(message: string, code: string, statusCode?: number);
}
export declare class PermissionError extends AuthError {
    constructor(message?: string, permission?: string);
}
export declare const Permissions: {
    readonly AI: {
        readonly USE_OPENAI: "ai:use_openai";
        readonly USE_VISION: "ai:use_vision";
        readonly USE_EMBEDDINGS: "ai:use_embeddings";
        readonly UNLIMITED_REQUESTS: "ai:unlimited_requests";
    };
    readonly COLLABORATION: {
        readonly CREATE_ROOM: "collab:create_room";
        readonly JOIN_ROOM: "collab:join_room";
        readonly EDIT_DOCUMENT: "collab:edit_document";
        readonly DELETE_ROOM: "collab:delete_room";
    };
    readonly ADMIN: {
        readonly MANAGE_USERS: "admin:manage_users";
        readonly VIEW_ANALYTICS: "admin:view_analytics";
        readonly SYSTEM_CONFIG: "admin:system_config";
    };
};
export type Permission = typeof Permissions[keyof typeof Permissions][keyof typeof Permissions[keyof typeof Permissions]];
//# sourceMappingURL=auth-service.d.ts.map