Files
supabase/packages/common/hooks/useFirstTouchStore.ts
Sean Oliver c8e98cec0e feat(growth): in-memory first-touch attribution store (#43570)
## Changes

Introduces two new files in `packages/common`:

- **`telemetry-first-touch-store.ts`** — a module-scoped singleton that
holds first-touch attribution data (referrer, UTM params, page URL) in
memory. Writes once on first load, cleared after the initial pageview
event fires or on opt-out. No device storage involved.
- **`useFirstTouchStore.tsx`** — a React hook that captures attribution
data on initial page load and writes it into the store, gated on the
`enabled` flag so it only runs where consent has been handled.

Trade-off: data is lost on a hard reload before consent is granted —
accepted edge case per GROWTH-656.

Follows the same module-scope pattern already used by `posthogClient`
and `consentState`.

## Testing

- Verify first-touch data is captured on initial load and readable by
`PageTelemetry` after consent
- Verify no cookie is set before consent
- Verify data is cleared after initial pageview fires

GROWTH-656
2026-03-30 11:00:35 -07:00

18 lines
472 B
TypeScript

import { useEffect } from 'react'
import { setFirstTouchData } from '../telemetry-first-touch-store'
import { getSharedTelemetryData } from '../telemetry-utils'
interface UseFirstTouchStoreProps {
enabled: boolean
}
export function useFirstTouchStore({ enabled }: UseFirstTouchStoreProps) {
useEffect(() => {
if (!enabled) return
const telemetryData = getSharedTelemetryData(window.location.pathname)
setFirstTouchData(telemetryData)
}, [enabled])
}