/**
 * Storage implementations for session persistence in different environments.
 *
 * This module provides different storage adapters for persisting authentication sessions
 * across page reloads and browser sessions.
 */
import type { StoredSession } from './session';
/**
 * Session storage interface for session persistence.
 * This interface can be implemented to provide custom storage solutions.
 *
 * **Important:** The methods here operate on {@link StoredSession}, which is
 * the enriched client-side session managed by the Nhost SDK. It extends the
 * raw `Session` type from `@nhost/nhost-js/auth` by adding a `decodedToken`
 * field with the parsed JWT payload. Do **not** use `auth.Session` here —
 * it is missing `decodedToken` and will cause a TypeScript error.
 *
 * @example
 * ```ts
 * import { type StoredSession, type SessionStorageBackend } from '@nhost/nhost-js/session';
 *
 * class MyCustomStorage implements SessionStorageBackend {
 *   get(): StoredSession | null { ... }
 *   set(value: StoredSession): void { ... }
 *   remove(): void { ... }
 * }
 * ```
 */
export interface SessionStorageBackend {
    /**
     * Get the current session from storage
     * @returns The stored session or null if not found
     */
    get(): StoredSession | null;
    /**
     * Set the session in storage
     * @param value - The session to store
     */
    set(value: StoredSession): void;
    /**
     * Remove the session from storage
     */
    remove(): void;
}
/**
 * Default storage key used for storing the Nhost session
 */
export declare const DEFAULT_SESSION_KEY = "nhostSession";
/**
 * Browser localStorage implementation of StorageInterface.
 * Persists the session across page reloads and browser restarts.
 */
export declare class LocalStorage implements SessionStorageBackend {
    private readonly storageKey;
    /**
     * Creates a new LocalStorage instance
     * @param options - Configuration options
     * @param options.storageKey - The key to use in localStorage (defaults to "nhostSession")
     */
    constructor(options?: {
        storageKey?: string;
    });
    /**
     * Gets the session from localStorage
     * @returns The stored session or null if not found
     */
    get(): StoredSession | null;
    /**
     * Sets the session in localStorage
     * @param value - The session to store
     */
    set(value: StoredSession): void;
    /**
     * Removes the session from localStorage
     */
    remove(): void;
}
/**
 * In-memory storage implementation for non-browser environments or when
 * persistent storage is not available or desirable.
 */
export declare class MemoryStorage implements SessionStorageBackend {
    private session;
    /**
     * Gets the session from memory
     * @returns The stored session or null if not set
     */
    get(): StoredSession | null;
    /**
     * Sets the session in memory
     * @param value - The session to store
     */
    set(value: StoredSession): void;
    /**
     * Clears the session from memory
     */
    remove(): void;
}
/**
 * Cookie-based storage implementation.
 * This storage uses web browser cookies to store the session so it's not
 * available in server-side environments. It is useful though for synchronizing
 * sessions between client and server environments.
 */
export declare class CookieStorage implements SessionStorageBackend {
    private readonly cookieName;
    private readonly expirationDays;
    private readonly secure;
    private readonly sameSite;
    /**
     * Creates a new CookieStorage instance
     * @param options - Configuration options
     * @param options.cookieName - Name of the cookie to use (defaults to "nhostSession")
     * @param options.expirationDays - Number of days until the cookie expires (defaults to 30)
     * @param options.secure - Whether to set the Secure flag on the cookie (defaults to true)
     * @param options.sameSite - SameSite policy for the cookie (defaults to "lax")
     */
    constructor(options?: {
        cookieName?: string;
        expirationDays?: number;
        secure?: boolean;
        sameSite?: 'strict' | 'lax' | 'none';
    });
    /**
     * Gets the session from cookies
     * @returns The stored session or null if not found
     */
    get(): StoredSession | null;
    /**
     * Sets the session in a cookie
     * @param value - The session to store
     */
    set(value: StoredSession): void;
    /**
     * Removes the session cookie
     */
    remove(): void;
}
//# sourceMappingURL=storageBackend.d.ts.map