import { BurdenoffEventName } from '../index'; /** * Fallback allowlist for direct RybbitSink consumers. App shells go through * AppShellProvider, which passes the wider platform-wide list instead. * Exported so tests can assert the two do not drift apart per product. */ export declare const DEFAULT_RYBBIT_ALLOWLIST: BurdenoffEventName[]; interface RybbitSinkProps { siteId: string | undefined; scriptUrl?: string; /** Map event bus names to Rybbit event names. Defaults to identity. */ rename?: Partial>; /** Only forward these event names to Rybbit. Defaults to a minimal privacy-safe list. */ allowlist?: BurdenoffEventName[]; /** Which event triggers `rybbit.identify`. */ identifyOn?: BurdenoffEventName; } /** What the user actually chose. `null` means they have never been asked. */ export type AnalyticsConsentChoice = 'granted' | 'denied'; /** * The recorded choice, or `null` when the user has never answered (BOFF-6373). * * The store used to be BOOLEAN: granting wrote `'granted'`, refusing called `removeItem`. So * "I said no" and "I have not been asked" were the same absent key, and a refusal was * unrepresentable. The banner keys its visibility off this, so refusing dismissed it only for * the life of that page and it returned on the next full load, every time. * * A consent choice that is not recorded is not consent — a compliance defect, not an annoyance. */ export declare function readAnalyticsConsentChoice(): AnalyticsConsentChoice | null; export declare function readAnalyticsConsent(): boolean; export declare function setAnalyticsConsent(granted: boolean): void; export declare function shouldDropAnalyticsKey(key: string, eventName: BurdenoffEventName): boolean; /** * RybbitSink injects the Rybbit analytics script and forwards matching * event bus emissions as Rybbit custom events. */ export declare function RybbitSink({ siteId, scriptUrl, rename, allowlist, identifyOn, }: RybbitSinkProps): null; /** * The optional-analytics prompt. * * Deliberately router-agnostic: it is exported publicly, so a consumer may render it anywhere and * calling `useLocation()` here would crash outside a Router. Route suppression is the MOUNT * SITE's job — see `ShellTelemetrySinks` in AppShellProvider, a direct child of ``. */ export declare function AnalyticsConsentBanner({ productName }: { productName?: string; }): import("react/jsx-runtime").JSX.Element | null; export {}; //# sourceMappingURL=RybbitSink.d.ts.map