/** * @packageDocumentation * High-level storage operations for consent data. * * @remarks * This module provides dual-storage functionality for consent data, * persisting to both localStorage and cookies for maximum reliability. */ import type { ConsentState } from '../..'; import { type ConsentInfo } from '../../types/consent-types'; import type { CookieOptions, StorageConfig } from './types'; /** * Saves consent data to both localStorage and cookie. * * @param data - Consent data to save * @param options - Cookie configuration options * @param config - Storage configuration * * @remarks * This function ensures dual persistence of consent data for maximum reliability. * * @throws {Error} When neither storage method succeeds * * @example * ```typescript * saveConsentToStorage({ * consents: { necessary: true, analytics: false }, * consentInfo: { time: Date.now(), type: 'custom' } * }); * ``` * * @public */ export declare function saveConsentToStorage(data: { consents: Partial; consentInfo: ConsentInfo; iabCustomVendorConsents?: Record; iabCustomVendorLegitimateInterests?: Record; }, options?: CookieOptions, config?: StorageConfig): void; /** * Retrieves consent data from localStorage or cookie (with fallback). * * @typeParam ReturnType - The expected type of the consent data * * @param config - Storage configuration * @returns Consent data or null if not found * * @remarks * Priority order (optimized for performance): * 1. Cookie (if exists) - cookies are more reliable and work across subdomains * 2. localStorage (if cookie doesn't exist) - fallback for single-domain scenarios * * This function automatically: * - Handles migration from legacy storage keys * - Always prioritizes cookies when both sources exist (better performance, no timestamp comparison) * - Syncs from the chosen source to the other storage location * - Normalizes consent data to ensure all consent values are explicit booleans * - Defaults missing consent keys to `false` (important for optimized cookie storage) * * This is especially important for cross-subdomain scenarios where: * - Cookies are shared across subdomains (e.g., `domain=.example.com`) * - localStorage is subdomain-specific * - Consent updated on one subdomain should be reflected on all subdomains * * Performance: Cookies are always prioritized when both exist to avoid timestamp comparison overhead. * * @example * ```typescript * const consent = getConsentFromStorage(); * if (consent) { * // All consent values are guaranteed to be explicit booleans * console.log('Analytics consent:', consent.consents.analytics); // true or false, never undefined * } * ``` * * @public */ export declare function getConsentFromStorage(config?: StorageConfig): ReturnType | null; /** * Deletes consent data from both localStorage and cookie. * * @param options - Cookie configuration options * @param config - Storage configuration * * @remarks * This ensures complete removal of consent data from all storage locations, * including legacy storage keys. * * @example * ```typescript * deleteConsentFromStorage(); * ``` * * @public */ export declare function deleteConsentFromStorage(options?: CookieOptions, config?: StorageConfig): void;