diff --git a/packages/clarity-js/src/data/consent.ts b/packages/clarity-js/src/data/consent.ts new file mode 100644 index 00000000..dd2af910 --- /dev/null +++ b/packages/clarity-js/src/data/consent.ts @@ -0,0 +1,20 @@ +import { Dimension } from "@clarity-types/data"; +import * as dimension from "@src/data/dimension"; + +const enum ConsentType { + None = 0, + Implicit = 1, + General = 2 +} + +export function config(track: boolean): void { + trackConsent(track ? ConsentType.Implicit : ConsentType.None); +} + +export function consent(consent: boolean): void { + trackConsent(consent ? ConsentType.General : ConsentType.None); +} + +function trackConsent(consent: ConsentType): void { + dimension.log(Dimension.Consent, consent.toString()); +} \ No newline at end of file diff --git a/packages/clarity-js/src/data/metadata.ts b/packages/clarity-js/src/data/metadata.ts index b87484a7..0c3986c9 100644 --- a/packages/clarity-js/src/data/metadata.ts +++ b/packages/clarity-js/src/data/metadata.ts @@ -8,6 +8,7 @@ import * as scrub from "@src/core/scrub"; import * as dimension from "@src/data/dimension"; import * as metric from "@src/data/metric"; import { set } from "@src/data/variable"; +import * as trackConsent from "@src/data/consent"; export let data: Metadata = null; export let callbacks: MetadataCallbackOptions[] = []; @@ -74,6 +75,9 @@ export function start(): void { if (value) { set(key, value); } } + // Track consent config + trackConsent.config(config.track); + // Track ids using a cookie if configuration allows it track(u); } @@ -127,9 +131,11 @@ export function consent(status: boolean = true): void { return; } + trackConsent.consent(status); if (core.active()) { config.track = true; track(user(), BooleanFlag.True); + save(); } } diff --git a/packages/clarity-js/types/data.d.ts b/packages/clarity-js/types/data.d.ts index 44119f61..0986b626 100644 --- a/packages/clarity-js/types/data.d.ts +++ b/packages/clarity-js/types/data.d.ts @@ -153,7 +153,8 @@ export const enum Dimension { InitialScrollBottom = 32, AncestorOrigins = 33, Timezone = 34, - TimezoneOffset = 35 + TimezoneOffset = 35, + Consent = 36 } export const enum Check {