import { AuthStatus, Session, User } from '@frank-auth/client';
import { FrankAuthConfig } from '../types';
export interface MiddlewareAuthState {
    isLoaded: boolean;
    isAuthenticated: boolean;
    user: User | null;
    session: Session | null;
    organizationId: string | null;
    error: Error | null;
}
export interface MiddlewareHookConfig extends FrankAuthConfig {
    /**
     * Enable automatic token refresh
     * @default true
     */
    enableAutoRefresh?: boolean;
    /**
     * Refresh token interval in milliseconds
     * @default 300000 (5 minutes)
     */
    refreshInterval?: number;
    /**
     * Redirect to sign in when unauthenticated
     * @default true
     */
    redirectToSignIn?: boolean;
    /**
     * Sign in path for redirects
     * @default '/sign-in'
     */
    signInPath?: string;
    /**
     * Enable debug logging
     * @default false
     */
    debug?: boolean;
}
export interface AuthActions {
    /**
     * Manually refresh authentication state
     */
    refresh: () => Promise<void>;
    /**
     * Sign out the current user
     */
    signOut: () => Promise<void>;
    /**
     * Switch to a different organization
     */
    switchOrganization: (organizationId: string) => Promise<void>;
    /**
     * Check if user has specific permission
     */
    hasPermission: (permission: string) => Promise<boolean>;
    /**
     * Get fresh auth status from server
     */
    getAuthStatus: () => Promise<AuthStatus>;
}
/**
 * Main authentication hook that works with middleware
 */
export declare function useAuth(): MiddlewareAuthState & AuthActions;
/**
 * Hook for authentication state only
 */
export declare function useAuthState(): MiddlewareAuthState;
/**
 * Hook for current user information
 */
export declare function useUser(): {
    user: User | null;
    isLoaded: boolean;
    error: Error | null;
};
/**
 * Hook for session management
 */
export declare function useSession(): {
    session: Session | null;
    isLoaded: boolean;
    refresh: () => Promise<void>;
    signOut: () => Promise<void>;
};
/**
 * Hook for organization management
 */
export declare function useOrganization(): {
    organizationId: string | null;
    switchOrganization: (organizationId: string) => Promise<void>;
    isLoaded: boolean;
};
/**
 * Hook for permission checking
 */
export declare function usePermissions(): {
    hasPermission: (permission: string) => Promise<boolean>;
    checkPermissions: (permissions: string[]) => Promise<Record<string, boolean>>;
};
/**
 * Hook for protected routes
 */
export declare function useProtectedRoute(options?: {
    redirectTo?: string;
    requiredPermission?: string;
    requiredOrganization?: boolean;
}): {
    isLoaded: boolean;
    isAuthorized: boolean | null;
};
//# sourceMappingURL=use-middleware.d.ts.map