/** * Non-IAB Vendor Types * * Type definitions for custom vendors not registered with IAB. * These vendors must manually declare their data practices for transparency. * * @packageDocumentation */ /** * A custom vendor not registered with IAB. * * These vendors process data based on user consent but are not part of the * IAB Transparency & Consent Framework. They must manually declare all their * data practices to maintain the same level of transparency as IAB vendors. * * @remarks * Custom vendors are displayed separately in the consent UI with a note * that they have different privacy practices than IAB-registered vendors. * * @example * ```typescript * const internalAnalytics: NonIABVendor = { * id: 'internal-analytics', * name: 'Our Analytics Platform', * description: 'First-party analytics to understand site usage', * privacyPolicyUrl: 'https://example.com/privacy', * purposes: [1, 8, 10], // Storage, content measurement, develop services * dataCategories: [1, 2, 6, 8], * usesCookies: true, * cookieMaxAgeSeconds: 31536000, * }; * ``` * * @public */ export interface NonIABVendor { /** * Unique identifier for the vendor. * * Use a slug-like string (e.g., 'internal-analytics', 'live-chat') or a * numeric ID if you already have one. */ id: string | number; /** Display name shown to users */ name: string; /** Privacy policy URL (required for transparency) */ privacyPolicyUrl: string; /** Description of what this vendor does */ description?: string; /** * IAB purposes this vendor requires consent for. * * Uses standard IAB purpose IDs for consistency: * - 1: Store and/or access information on a device * - 2: Use limited data to select advertising * - 3: Create profiles for personalised advertising * - 4: Use profiles to select personalised advertising * - 5: Create profiles to personalise content * - 6: Use profiles to select personalised content * - 7: Measure advertising performance * - 8: Measure content performance * - 9: Understand audiences through statistics * - 10: Develop and improve services * - 11: Use limited data to select content * * @example [1, 7, 8] // Storage, ad measurement, content measurement */ purposes: number[]; /** * IAB purposes this vendor claims legitimate interest for. * * Users can object to these purposes. */ legIntPurposes?: number[]; /** * Features this vendor uses (IAB feature IDs 1-3). * * - 1: Match and combine data from other sources * - 2: Link different devices * - 3: Identify devices based on info transmitted automatically */ features?: number[]; /** * Special features requiring explicit opt-in (IAB special feature IDs 1-2). * * - 1: Use precise geolocation data * - 2: Actively scan device characteristics for identification */ specialFeatures?: number[]; /** * Data categories collected/used (IAB data category IDs 1-11). * * - 1: IP addresses * - 2: Device characteristics * - 3: Device identifiers * - 4: Probabilistic identifiers * - 5: Authentication-derived identifiers * - 6: Browsing and interaction data * - 7: User-provided data * - 8: Non-precise location data * - 9: Precise location data * - 10: Users' profiles * - 11: Privacy choices */ dataCategories?: number[]; /** Maximum cookie/storage duration in seconds */ cookieMaxAgeSeconds?: number; /** Whether this vendor uses cookies */ usesCookies?: boolean; /** Whether this vendor uses non-cookie storage (localStorage, IndexedDB, etc.) */ usesNonCookieAccess?: boolean; /** How long data is retained (in days) */ dataRetentionDays?: number; } /** * Consent state for a non-IAB vendor. * * @public */ export interface NonIABVendorConsent { /** Vendor ID */ vendorId: string | number; /** Whether the user has consented */ consented: boolean; /** Timestamp when consent was given/modified */ timestamp: number; }