import type { Pool } from 'pg';
type AuthStatus = 400 | 401 | 403 | 404 | 409 | 500;
export declare class AuthError extends Error {
    readonly status: AuthStatus;
    readonly code: string;
    constructor(message: string, status: AuthStatus, code: string);
}
export interface ErpProfile extends Record<string, unknown> {
    id?: string;
    authUserId: string;
    email?: string;
    nome?: string;
    empresaId?: string;
    nivel?: string;
    tipo?: string;
    ativo?: boolean;
    permissoes?: Record<string, unknown>;
    modulosPermitidos?: string[];
}
export interface AuthenticatedUser {
    id: string;
    email: string;
    role: string;
    metadata: Record<string, unknown>;
    profile: ErpProfile;
    companyName: string | null;
}
export interface IssuedSession {
    accessToken: string;
    refreshToken: string;
    tokenType: 'Bearer';
    expiresIn: number;
    expiresAt: string;
    refreshExpiresAt: string;
    sessionId: string;
    user: AuthenticatedUser;
}
export interface RequestContext {
    userAgent?: string | null | undefined;
}
export declare class AuthService {
    private readonly pool;
    constructor(pool?: Pool);
    signIn(emailInput: unknown, password: unknown, request?: RequestContext): Promise<IssuedSession>;
    refresh(refreshToken: unknown, request?: RequestContext): Promise<IssuedSession>;
    getUser(accessToken: unknown): Promise<AuthenticatedUser>;
    signOut(accessToken: unknown, refreshToken?: unknown): Promise<void>;
    private revokeSession;
    private loadAuthenticatedUser;
    private loadCompanyName;
}
export declare const authService: AuthService;
export {};
//# sourceMappingURL=service.d.ts.map