event unification

This commit is contained in:
2025-11-12 10:28:08 +01:00
parent 69c1725c9c
commit fd17ea0620

View File

@@ -2,31 +2,46 @@ import { z } from 'zod';
// canonical events for tracking user interactions // canonical events for tracking user interactions
export type EventName = export type EventName =
// navigation & discovery
| 'page_view' | 'page_view'
| 'click' | 'view_item_page'
| 'product_view' | 'learn_more_about_item'
| 'product_hover' // cart operations
| 'search' | 'add_item_to_cart'
| 'filter_apply' | 'remove_item'
| 'sort_change'
| 'add_to_cart'
| 'remove_from_cart'
| 'checkout_start' | 'checkout_start'
| 'purchase_complete' | 'purchase_complete'
// filtering & search
| 'search'
| 'filter_for_date'
| 'filter_for_amenities'
| 'filter_for_price'
| 'sort_change'
// dwell signals (3s threshold)
| 'hover_over_title'
| 'hover_over_paragraph'
| 'hover_over_link'
| 'hover_over_button'
// session
| 'session_start'; | 'session_start';
export const eventNames: readonly EventName[] = [ export const eventNames: readonly EventName[] = [
'page_view', 'page_view',
'click', 'view_item_page',
'product_view', 'learn_more_about_item',
'product_hover', 'add_item_to_cart',
'search', 'remove_item',
'filter_apply',
'sort_change',
'add_to_cart',
'remove_from_cart',
'checkout_start', 'checkout_start',
'purchase_complete', 'purchase_complete',
'search',
'filter_for_date',
'filter_for_amenities',
'filter_for_price',
'sort_change',
'hover_over_title',
'hover_over_paragraph',
'hover_over_link',
'hover_over_button',
'session_start', 'session_start',
] as const; ] as const;
@@ -51,16 +66,21 @@ export const eventBaseSchema = z.object({
page: z.string().min(1), page: z.string().min(1),
eventName: z.enum([ eventName: z.enum([
'page_view', 'page_view',
'click', 'view_item_page',
'product_view', 'learn_more_about_item',
'product_hover', 'add_item_to_cart',
'search', 'remove_item',
'filter_apply',
'sort_change',
'add_to_cart',
'remove_from_cart',
'checkout_start', 'checkout_start',
'purchase_complete', 'purchase_complete',
'search',
'filter_for_date',
'filter_for_amenities',
'filter_for_price',
'sort_change',
'hover_over_title',
'hover_over_paragraph',
'hover_over_link',
'hover_over_button',
'session_start', 'session_start',
]), ]),
productId: z.string().optional(), productId: z.string().optional(),