/** * @packageDocumentation * Provides types and constants for managing GDPR-compliant consent categories and their configurations. */ /** * Defines all possible consent categories that can be managed within the application. * * @remarks * Each consent type represents a specific category of data processing: * * - `necessary`: Essential cookies required for basic site functionality * - `functionality`: Cookies that enable enhanced features and personalization * - `marketing`: Cookies used for advertising and marketing purposes * - `measurement`: Analytics and performance measurement cookies * - `experience`: Cookies that improve user experience and interactions * * @example * ```typescript * function isConsentRequired(type: AllConsentNames): boolean { * return type !== 'necessary'; * } * * function enableFeature(type: AllConsentNames, hasConsent: boolean) { * switch (type) { * case 'marketing': * hasConsent ? enableAds() : disableAds(); * break; * case 'measurement': * hasConsent ? enableAnalytics() : disableAnalytics(); * break; * // ... handle other types * } * } * ``` * * @public */ export type AllConsentNames = 'experience' | 'functionality' | 'marketing' | 'measurement' | 'necessary'; /** * Defines the configuration structure for each consent type. * * @remarks * Each consent type has specific properties that determine its behavior: * * - `defaultValue`: Initial consent state * - `true`: Consent is granted by default (typically only for 'necessary' cookies) * - `false`: Subject must explicitly grant consent * * - `description`: Subject-friendly explanation of the consent category * - Should be clear and concise * - Must accurately describe data usage * - Should help users make informed decisions * * - `disabled`: Whether users can modify this consent * - `true`: Users cannot change the consent state (e.g., necessary cookies) * - `false` or `undefined`: Users can toggle consent * * - `display`: Visibility in consent UI * - `true`: Show this option to users * - `false`: Hide from consent interface * * - `gdprType`: Numeric identifier for GDPR categorization * - 1: Essential/Necessary * - 2: Functional * - 3: Experience/Preferences * - 4: Analytics/Measurement * - 5: Marketing/Advertising * * - `name`: Reference to the consent type * - Must match one of {@link AllConsentNames} * * @example * ```typescript * const analyticsConsent: ConsentType = { * name: 'measurement', * gdprType: 4, * defaultValue: false, * description: 'Helps us understand how users interact with our site', * display: true, * disabled: false * }; * * const necessaryConsent: ConsentType = { * name: 'necessary', * gdprType: 1, * defaultValue: true, * description: 'Required for basic site functionality', * display: true, * disabled: true // Users cannot disable necessary cookies * }; * ``` * * @see {@link consentTypes} for the predefined consent configurations * @public */ export type ConsentType = { /** Whether consent is granted by default */ defaultValue: boolean; /** Subject-friendly description of what this consent enables */ description: string; /** Whether users can modify this consent setting */ disabled?: boolean; /** Whether to show this consent option in the UI */ display: boolean; /** GDPR category identifier (1-5) */ gdprType: number; /** The consent category name */ name: AllConsentNames; }; /** * Predefined consent type configurations that comply with GDPR requirements. * * @remarks * This array defines the standard consent categories and their default configurations. * Each entry represents a specific type of cookie or tracking technology: * * 1. Necessary (Type 1): * - Required for basic site functionality * - Cannot be disabled by users * - Enabled by default * * 2. Functionality (Type 2): * - Enables enhanced features * - Optional for users * - Disabled by default * * 3. Measurement (Type 4): * - Analytics and performance tracking * - Optional for users * - Disabled by default * * 4. Experience (Type 3): * - Subject experience improvements * - Optional for users * - Disabled by default * * 5. Marketing (Type 5): * - Advertising and marketing * - Optional for users * - Disabled by default * * @example * ```typescript * function getConsentConfig(type: AllConsentNames): ConsentType { * return consentTypes.find(consent => consent.name === type)!; * } * * function isConsentRequired(type: AllConsentNames): boolean { * const config = getConsentConfig(type); * return !config.defaultValue && !config.disabled; * } * * function getDisplayedConsents(): ConsentType[] { * return consentTypes.filter(consent => consent.display); * } * ``` * * @see {@link ConsentType} for the structure of each consent configuration * @see {@link AllConsentNames} for available consent categories * @public */ export declare const consentTypes: ConsentType[]; /** * Runtime array of all valid consent names. * * @remarks * This array is automatically derived from {@link consentTypes} to ensure * runtime validation stays in sync with the {@link AllConsentNames} type definition. * Use this for validation logic where you need to check if a string is a valid consent name. * * @example * ```typescript * function validateConsentName(name: string): AllConsentNames { * if (!allConsentNames.includes(name as AllConsentNames)) { * throw new Error(`Invalid consent name: ${name}`); * } * return name as AllConsentNames; * } * ``` * * @see {@link AllConsentNames} for the type definition * @see {@link consentTypes} for the full consent configurations * @public */ export declare const allConsentNames: AllConsentNames[]; /** * Information about the consent granted */ export type ConsentInfo = { /** * The epoch timestamp of when the consent was recorded * @example 1761911048 */ time: number; /** * The client-generated subject ID in sub_xxx format * * @remarks * This is the primary identifier for the device/browser. * Generated client-side using generateSubjectId() and stored in cookie. * New in v2.0 - replaces the server-generated consentId. * * @example 'sub_2VZxR7YmNpKq3WfLs8TgHd' */ subjectId?: string; /** * @deprecated Use subjectId instead. The id field stored the server-generated * consentId which is no longer used in v2.0. * * @remarks * This field is kept for migration purposes. If present without subjectId, * it indicates old storage format that should trigger re-consent. */ id?: string; /** * The external user ID linked to this subject * * @remarks * Set via identifyUser() to link a subject (device) to an authenticated user. * This is the user's ID from your auth system (e.g., Clerk, Auth0, etc.) * * @example 'user_123abc' */ externalId?: string; /** * Material fingerprint of the active policy when this consent was accepted. * * @remarks * Used client-side to detect when consent should be refreshed because the * active policy changed in a way that affects consent semantics. */ materialPolicyFingerprint?: string; /** * The identity provider that provided the external ID * * @remarks * Used to identify which auth system the externalId came from. * * @example 'clerk', 'auth0', 'firebase' */ identityProvider?: string; };