@neowhale/storefront 0.2.21 → 0.2.25

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/react/context.ts","../../src/react/stores/cart-store.ts","../../src/react/stores/auth-store.ts","../../src/react/hooks/use-analytics.ts","../../src/react/hooks/use-auth.ts","../../src/react/components/analytics-tracker.tsx","../../src/react/hooks/use-cart.ts","../../src/react/components/cart-initializer.tsx","../../src/react/components/auth-initializer.tsx","../../src/react/components/pixel-initializer.tsx","../../src/behavioral/tracker.ts","../../src/react/components/behavioral-tracker.tsx","../../src/fingerprint/collector.ts","../../src/react/components/fingerprint-collector.tsx","../../src/recording/recorder.ts","../../src/react/components/session-recorder.tsx","../../src/react/provider.tsx","../../src/react/hooks/use-products.ts","../../src/react/hooks/use-client.ts","../../src/react/hooks/use-customer.ts","../../src/react/hooks/use-checkout.ts","../../src/react/hooks/use-search.ts","../../src/react/hooks/use-categories.ts","../../src/react/hooks/use-loyalty.ts","../../src/react/hooks/use-reviews.ts","../../src/react/hooks/use-wishlist.ts","../../src/react/hooks/use-recommendations.ts","../../src/react/hooks/use-locations.ts","../../src/react/hooks/use-shipping.ts","../../src/react/hooks/use-coupons.ts","../../src/react/hooks/use-referral.ts","../../src/react/components/section-renderer.tsx","../../src/react/components/qr-landing-page.tsx","../../src/react/components/landing-page.tsx"],"names":["createStore","persist","useContext","useRef","useStore","useShallow","useEffect","now","SESSION_KEY_SUFFIX","VISITOR_KEY_SUFFIX","MAX_SESSION_WAIT_MS","SESSION_POLL_MS","useCallback","useMemo","useState","jsx","jsxs","DefaultLoading","DefaultNotFound","DefaultExpired","DefaultError","containerStyle"],"mappings":"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","file":"index.js","sourcesContent":["import { createContext } from 'react'\nimport type { WhaleClient } from '../client.js'\nimport type { Product } from '../types.js'\nimport type { CartStore } from './stores/cart-store.js'\nimport type { AuthStore } from './stores/auth-store.js'\nimport type { PixelManager } from '../pixels/pixel-manager.js'\n\nexport interface WhaleContextValue {\n client: WhaleClient\n config: {\n storeId: string\n apiKey: string\n gatewayUrl: string\n proxyPath: string\n mediaSigningSecret: string\n supabaseHost: string\n storagePrefix: string\n sessionTtl: number\n debug: boolean\n trackingEnabled: boolean\n recordingRate: number\n }\n cartStore: CartStore\n authStore: AuthStore\n /** Products fetched server-side and passed via provider */\n products: Product[]\n /** Pixel manager — set after storefront config loads */\n pixelManager: PixelManager | null\n}\n\nexport const WhaleContext = createContext<WhaleContextValue | null>(null)\n","import { createStore } from 'zustand/vanilla'\nimport { persist } from 'zustand/middleware'\nimport type { WhaleClient } from '../../client.js'\nimport type { Cart, CartItem, TaxBreakdown, PaymentData, Order } from '../../types.js'\n\nexport interface CartState {\n cartId: string | null\n items: CartItem[]\n itemCount: number\n subtotal: number\n taxAmount: number\n total: number\n taxBreakdown: TaxBreakdown[]\n cartOpen: boolean\n cartLoading: boolean\n productImages: Record<string, string>\n addItemInFlight: boolean\n}\n\nexport interface CartActions {\n openCart: () => void\n closeCart: () => void\n toggleCart: () => void\n initCart: () => Promise<void>\n syncCart: () => Promise<void>\n addItem: (\n productId: string,\n quantity: number,\n tier?: string,\n unitPrice?: number,\n imageUrl?: string | null,\n productName?: string\n ) => Promise<void>\n updateQuantity: (itemId: string, quantity: number) => Promise<void>\n removeItem: (itemId: string, productName?: string) => Promise<void>\n clearCart: () => void\n checkout: (customerEmail?: string, payment?: PaymentData) => Promise<Order>\n}\n\nexport type CartStore = ReturnType<typeof createCartStore>\n\nexport function createCartStore(\n client: WhaleClient,\n storagePrefix: string,\n onAddToCart?: (productId: string, productName: string, quantity: number, price: number, tier?: string) => void,\n onRemoveFromCart?: (productId: string, productName: string) => void,\n onCartChange?: (cartId: string, total: number, itemCount: number) => void,\n) {\n return createStore<CartState & CartActions>()(\n persist(\n (set, get) => ({\n // ── Initial state ────────────────────────────────────────────────\n cartId: null,\n items: [],\n itemCount: 0,\n subtotal: 0,\n taxAmount: 0,\n total: 0,\n taxBreakdown: [],\n cartOpen: false,\n cartLoading: false,\n productImages: {},\n addItemInFlight: false,\n\n // ── Cart UI ──────────────────────────────────────────────────────\n openCart: () => set({ cartOpen: true }),\n closeCart: () => set({ cartOpen: false }),\n toggleCart: () => set((s) => ({ cartOpen: !s.cartOpen })),\n\n // ── Cart data ────────────────────────────────────────────────────\n initCart: async () => {\n const { cartId, syncCart } = get()\n\n if (cartId) {\n try {\n await syncCart()\n } catch {\n const cart = await client.createCart()\n applyCart(set, get, cart)\n }\n return\n }\n\n try {\n const cart = await client.createCart()\n applyCart(set, get, cart)\n } catch (err) {\n console.error('[whale-storefront] initCart failed:', err)\n }\n },\n\n syncCart: async () => {\n const { cartId, productImages } = get()\n if (!cartId) return\n\n try {\n const cart = await client.getCart(cartId)\n const items = (cart.items ?? []).map((item) => ({\n ...item,\n image_url: item.image_url || productImages[item.product_id] || null,\n }))\n set({\n items,\n itemCount: cart.item_count ?? 0,\n subtotal: cart.subtotal ?? 0,\n taxAmount: cart.tax_amount ?? 0,\n total: cart.total ?? 0,\n taxBreakdown: cart.tax_breakdown ?? [],\n })\n } catch (err) {\n console.error('[whale-storefront] syncCart failed:', err)\n throw err\n }\n },\n\n addItem: async (productId, quantity, tier, unitPrice, imageUrl, productName) => {\n // Race-condition guard: prevent double-click\n if (get().addItemInFlight) return\n set({ cartLoading: true, addItemInFlight: true })\n\n try {\n let { cartId } = get()\n\n if (!cartId) {\n await get().initCart()\n cartId = get().cartId\n }\n\n if (!cartId) throw new Error('Could not initialise cart')\n\n if (imageUrl) {\n set((s) => ({ productImages: { ...s.productImages, [productId]: imageUrl } }))\n }\n\n try {\n await client.addToCart(cartId, productId, quantity, { tier, unitPrice })\n } catch (err: unknown) {\n // Cart expired (404/410) — auto-recover\n const status = (err as { status?: number }).status\n if (status === 404 || status === 410) {\n const newCart = await client.createCart()\n set({ cartId: newCart.id })\n await client.addToCart(newCart.id, productId, quantity, { tier, unitPrice })\n } else {\n throw err\n }\n }\n\n await get().syncCart()\n\n // Analytics callback\n onAddToCart?.(productId, productName || '', quantity, unitPrice || 0, tier)\n\n // Sync cart state to analytics session\n const state = get()\n if (state.cartId) onCartChange?.(state.cartId, state.total, state.itemCount)\n } finally {\n set({ cartLoading: false, addItemInFlight: false })\n }\n },\n\n updateQuantity: async (itemId, quantity) => {\n set({ cartLoading: true })\n try {\n const { cartId } = get()\n if (!cartId) return\n await client.updateCartItem(cartId, itemId, quantity)\n await get().syncCart()\n\n // Sync cart state to analytics session\n const state = get()\n if (state.cartId) onCartChange?.(state.cartId, state.total, state.itemCount)\n } finally {\n set({ cartLoading: false })\n }\n },\n\n removeItem: async (itemId, productName) => {\n set({ cartLoading: true })\n try {\n const { cartId, items } = get()\n if (!cartId) return\n\n const item = items.find((i) => i.id === itemId)\n await client.removeCartItem(cartId, itemId)\n await get().syncCart()\n\n if (item) {\n onRemoveFromCart?.(item.product_id, productName || item.product_name)\n }\n\n // Sync cart state to analytics session\n const state = get()\n if (state.cartId) onCartChange?.(state.cartId, state.total, state.itemCount)\n } finally {\n set({ cartLoading: false })\n }\n },\n\n clearCart: () => {\n set({\n cartId: null,\n items: [],\n itemCount: 0,\n subtotal: 0,\n taxAmount: 0,\n total: 0,\n taxBreakdown: [],\n productImages: {},\n })\n },\n\n checkout: async (customerEmail, payment) => {\n const { cartId } = get()\n if (!cartId) throw new Error('No active cart')\n\n set({ cartLoading: true })\n try {\n const order = await client.checkout(cartId, customerEmail, payment)\n set({\n cartId: null,\n items: [],\n itemCount: 0,\n subtotal: 0,\n taxAmount: 0,\n total: 0,\n taxBreakdown: [],\n productImages: {},\n cartOpen: false,\n })\n return order\n } finally {\n set({ cartLoading: false })\n }\n },\n }),\n\n // ── Persist config ─────────────────────────────────────────────────\n {\n name: `${storagePrefix}-cart`,\n partialize: (state) => ({\n cartId: state.cartId,\n productImages: state.productImages,\n }),\n }\n )\n )\n}\n\nfunction applyCart(\n set: (partial: Partial<CartState>) => void,\n get: () => CartState,\n cart: Cart\n) {\n const productImages = get().productImages\n const items = (cart.items ?? []).map((item) => ({\n ...item,\n image_url: item.image_url || productImages[item.product_id] || null,\n }))\n set({\n cartId: cart.id,\n items,\n itemCount: cart.item_count ?? 0,\n subtotal: cart.subtotal ?? 0,\n taxAmount: cart.tax_amount ?? 0,\n total: cart.total ?? 0,\n taxBreakdown: cart.tax_breakdown ?? [],\n })\n}\n","import { createStore } from 'zustand/vanilla'\nimport { persist } from 'zustand/middleware'\nimport type { WhaleClient } from '../../client.js'\nimport type { Customer } from '../../types.js'\n\nexport interface AuthState {\n customer: Customer | null\n sessionToken: string | null\n sessionExpiresAt: string | null\n authLoading: boolean\n}\n\nexport interface AuthActions {\n sendOTP: (email: string) => Promise<boolean>\n verifyOTP: (email: string, code: string) => Promise<boolean>\n updateProfile: (data: { first_name: string; last_name: string; phone?: string; date_of_birth?: string }) => Promise<void>\n restoreSession: () => Promise<void>\n isSessionValid: () => boolean\n logout: () => void\n fetchCustomer: (id: string) => Promise<void>\n}\n\nexport type AuthStore = ReturnType<typeof createAuthStore>\n\nexport function createAuthStore(client: WhaleClient, storagePrefix: string) {\n return createStore<AuthState & AuthActions>()(\n persist(\n (set, get) => ({\n // ── Initial state ────────────────────────────────────────────────\n customer: null,\n sessionToken: null,\n sessionExpiresAt: null,\n authLoading: false,\n\n // ── Actions ──────────────────────────────────────────────────────\n sendOTP: async (email) => {\n set({ authLoading: true })\n try {\n const res = await client.sendCode(email)\n return res.sent\n } catch (err) {\n const message = err instanceof Error ? err.message : 'Could not send code'\n throw new Error(message)\n } finally {\n set({ authLoading: false })\n }\n },\n\n verifyOTP: async (email, code) => {\n set({ authLoading: true })\n try {\n const res = await client.verifyCode(email, code)\n client.setSessionToken(res.token_hash)\n set({\n sessionToken: res.token_hash,\n sessionExpiresAt: new Date(Date.now() + 30 * 24 * 60 * 60 * 1000).toISOString(),\n })\n\n if (res.customer?.id) {\n try {\n const full = await client.getCustomer(res.customer.id)\n set({ customer: full })\n } catch {\n set({ customer: res.customer })\n }\n }\n\n return res.needs_profile ?? false\n } catch (err) {\n const message = err instanceof Error ? err.message : 'Verification failed'\n throw new Error(message)\n } finally {\n set({ authLoading: false })\n }\n },\n\n updateProfile: async (data) => {\n const customer = get().customer\n if (!customer?.id) throw new Error('Not authenticated')\n const updated = await client.updateProfile(customer.id, data)\n set({ customer: updated })\n },\n\n restoreSession: async () => {\n const { sessionToken, sessionExpiresAt, customer } = get()\n if (!sessionToken || !sessionExpiresAt) return\n\n if (new Date(sessionExpiresAt) <= new Date()) {\n client.setSessionToken(null)\n set({ sessionToken: null, sessionExpiresAt: null, customer: null })\n return\n }\n\n client.setSessionToken(sessionToken)\n\n if (customer?.id) {\n try {\n const fresh = await client.getCustomer(customer.id)\n set({ customer: fresh })\n } catch {\n client.setSessionToken(null)\n set({ sessionToken: null, sessionExpiresAt: null, customer: null })\n }\n }\n },\n\n isSessionValid: () => {\n const { sessionToken, sessionExpiresAt } = get()\n if (!sessionToken || !sessionExpiresAt) return false\n return new Date(sessionExpiresAt) > new Date()\n },\n\n logout: () => {\n client.setSessionToken(null)\n set({ customer: null, sessionToken: null, sessionExpiresAt: null })\n },\n\n fetchCustomer: async (id) => {\n try {\n const customer = await client.getCustomer(id)\n set({ customer })\n } catch (err) {\n console.error('[whale-storefront] fetchCustomer failed:', err)\n }\n },\n }),\n\n // ── Persist config ─────────────────────────────────────────────────\n {\n name: `${storagePrefix}-auth`,\n partialize: (state) => ({\n sessionToken: state.sessionToken,\n sessionExpiresAt: state.sessionExpiresAt,\n customer: state.customer\n ? {\n id: state.customer.id,\n email: state.customer.email,\n first_name: state.customer.first_name,\n last_name: state.customer.last_name,\n phone: state.customer.phone,\n loyalty_points: state.customer.loyalty_points,\n loyalty_tier: state.customer.loyalty_tier,\n total_spent: state.customer.total_spent,\n total_orders: state.customer.total_orders,\n }\n : null,\n }),\n }\n )\n )\n}\n","'use client'\n\nimport { useContext, useRef, useCallback } from 'react'\nimport { WhaleContext } from '../context.js'\nimport type { EventType } from '../../types.js'\n\nconst SESSION_KEY_SUFFIX = '-analytics-session'\nconst VISITOR_KEY_SUFFIX = '-visitor-id'\n\ninterface SessionData {\n id: string\n createdAt: number\n}\n\n/** Parse UTM parameters, gclid, and fbclid from the current URL. */\nfunction parseMarketingParams(): Record<string, string> {\n if (typeof window === 'undefined') return {}\n const params = new URLSearchParams(window.location.search)\n const result: Record<string, string> = {}\n for (const key of ['utm_source', 'utm_medium', 'utm_campaign', 'utm_content', 'utm_term', 'gclid', 'fbclid']) {\n const val = params.get(key)\n if (val) result[key] = val\n }\n return result\n}\n\n/** Get or create a persistent visitor ID. */\nfunction getVisitorId(prefix: string): string {\n const key = `${prefix}${VISITOR_KEY_SUFFIX}`\n try {\n const existing = localStorage.getItem(key)\n if (existing) return existing\n } catch {}\n const id = `v-${Date.now()}-${Math.random().toString(36).slice(2, 10)}`\n try { localStorage.setItem(key, id) } catch {}\n return id\n}\n\n/** Detect device type from user agent. */\nfunction detectDevice(): string {\n if (typeof navigator === 'undefined') return 'unknown'\n const ua = navigator.userAgent\n if (/Mobi|Android/i.test(ua)) return 'mobile'\n if (/Tablet|iPad/i.test(ua)) return 'tablet'\n return 'desktop'\n}\n\nexport function useAnalytics() {\n const ctx = useContext(WhaleContext)\n if (!ctx) throw new Error('useAnalytics must be used within <WhaleProvider>')\n\n const { client, config, pixelManager } = ctx\n const sessionPromiseRef = useRef<Promise<string> | null>(null)\n const sessionKey = `${config.storagePrefix}${SESSION_KEY_SUFFIX}`\n\n const getOrCreateSession = useCallback(async (): Promise<string> => {\n if (sessionPromiseRef.current) return sessionPromiseRef.current\n\n sessionPromiseRef.current = (async () => {\n // Check stored session\n try {\n const raw = localStorage.getItem(sessionKey)\n if (raw) {\n const stored: SessionData = JSON.parse(raw)\n if (Date.now() - stored.createdAt < config.sessionTtl) {\n // Refresh last_active silently\n client.updateSession(stored.id, { last_active_at: new Date().toISOString() }).catch(() => {})\n return stored.id\n }\n }\n } catch {\n // ignore\n }\n\n // Create new\n try {\n const marketing = parseMarketingParams()\n const visitorId = getVisitorId(config.storagePrefix)\n const session = await client.createSession({\n visitor_id: visitorId,\n user_agent: navigator.userAgent,\n referrer: document.referrer || undefined,\n page_url: window.location.href,\n device: detectDevice(),\n ...marketing,\n })\n if (session?.id) {\n localStorage.setItem(sessionKey, JSON.stringify({ id: session.id, createdAt: Date.now() }))\n return session.id\n }\n } catch {\n // ignore\n }\n\n // Fallback local ID\n const fallbackId = `local-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`\n localStorage.setItem(sessionKey, JSON.stringify({ id: fallbackId, createdAt: Date.now() }))\n return fallbackId\n })()\n\n sessionPromiseRef.current.finally(() => {\n sessionPromiseRef.current = null\n })\n\n return sessionPromiseRef.current\n }, [client, config.sessionTtl, sessionKey])\n\n const trackingEnabled = config.trackingEnabled\n\n const track = useCallback(\n async (eventType: EventType, data: Record<string, unknown> = {}) => {\n if (!trackingEnabled) return\n\n // Generate shared event_id for Meta CAPI deduplication\n const eventId = crypto.randomUUID()\n\n // Fire pixel events instantly (client-side) with eventID for fbq dedup\n pixelManager?.track(eventType, { ...data, eventID: eventId })\n\n // Then fire gateway event (server-side attribution) with same event_id\n try {\n const sessionId = await getOrCreateSession()\n const visitorId = getVisitorId(config.storagePrefix)\n await client.trackEvent({\n session_id: sessionId,\n event_type: eventType,\n event_data: { ...data, event_id: eventId },\n visitor_id: visitorId,\n })\n } catch {\n // fire-and-forget\n }\n },\n [client, getOrCreateSession, pixelManager, trackingEnabled]\n )\n\n const linkCustomer = useCallback(\n async (customerId: string) => {\n if (!trackingEnabled) return\n try {\n const sessionId = await getOrCreateSession()\n if (sessionId.startsWith('local-')) return\n await client.updateSession(sessionId, { customer_id: customerId })\n } catch {\n // ignore\n }\n },\n [client, getOrCreateSession, trackingEnabled]\n )\n\n const updateSessionCart = useCallback(\n async (cartId: string, cartTotal: number, cartItemCount: number) => {\n if (!trackingEnabled) return\n try {\n const sessionId = await getOrCreateSession()\n if (sessionId.startsWith('local-')) return\n await client.updateSession(sessionId, {\n cart_id: cartId,\n cart_total: cartTotal,\n cart_item_count: cartItemCount,\n status: 'carting',\n })\n } catch {}\n },\n [client, getOrCreateSession, trackingEnabled]\n )\n\n const updateSessionOrder = useCallback(\n async (orderId: string) => {\n if (!trackingEnabled) return\n try {\n const sessionId = await getOrCreateSession()\n if (sessionId.startsWith('local-')) return\n await client.updateSession(sessionId, { order_id: orderId, status: 'converted' })\n } catch {}\n },\n [client, getOrCreateSession, trackingEnabled]\n )\n\n const trackPageView = useCallback(\n (url: string, referrer?: string) => {\n track('page_view', { url, referrer, page_url: url })\n },\n [track]\n )\n\n const trackProductView = useCallback(\n (productId: string, productName: string, category: string, price?: number) => {\n track('product_view', { product_id: productId, product_name: productName, category, price })\n },\n [track]\n )\n\n const trackCategoryView = useCallback(\n (categoryId: string, categoryName: string) => {\n track('category_view', { category_id: categoryId, category_name: categoryName })\n },\n [track]\n )\n\n const trackSearch = useCallback(\n (query: string, resultCount?: number) => {\n track('search', { query, result_count: resultCount })\n },\n [track]\n )\n\n const trackBeginCheckout = useCallback(\n (cartId: string, total: number, itemCount: number) => {\n track('begin_checkout', { cart_id: cartId, total, item_count: itemCount })\n },\n [track]\n )\n\n const trackPurchase = useCallback(\n (orderId: string, orderNumber: string, total: number) => {\n track('purchase', { order_id: orderId, order_number: orderNumber, total })\n },\n [track]\n )\n\n const trackAddToCart = useCallback(\n (productId: string, productName: string, quantity: number, price: number, tier?: string) => {\n track('add_to_cart', { product_id: productId, product_name: productName, quantity, price, tier })\n },\n [track]\n )\n\n const trackRemoveFromCart = useCallback(\n (productId: string, productName: string) => {\n track('remove_from_cart', { product_id: productId, product_name: productName })\n },\n [track]\n )\n\n return {\n track,\n trackPageView,\n trackProductView,\n trackCategoryView,\n trackSearch,\n trackBeginCheckout,\n trackPurchase,\n trackAddToCart,\n trackRemoveFromCart,\n linkCustomer,\n updateSessionCart,\n updateSessionOrder,\n getOrCreateSession,\n /** Whether tracking is globally enabled for this storefront */\n trackingEnabled,\n /** Configured recording sample rate (0–1) for behavioral session replays */\n recordingRate: config.recordingRate,\n }\n}\n","'use client'\n\nimport { useContext } from 'react'\nimport { useStore } from 'zustand'\nimport { useShallow } from 'zustand/react/shallow'\nimport { WhaleContext } from '../context.js'\n\nexport function useAuth() {\n const ctx = useContext(WhaleContext)\n if (!ctx) throw new Error('useAuth must be used within <WhaleProvider>')\n\n return useStore(ctx.authStore, useShallow((s) => ({\n customer: s.customer,\n authLoading: s.authLoading,\n sessionToken: s.sessionToken,\n isAuthenticated: s.isSessionValid(),\n sendCode: s.sendOTP,\n verifyCode: s.verifyOTP,\n updateProfile: s.updateProfile,\n restoreSession: s.restoreSession,\n logout: s.logout,\n fetchCustomer: s.fetchCustomer,\n })))\n}\n","'use client'\n\nimport { useEffect, useRef, useContext } from 'react'\nimport { WhaleContext } from '../context.js'\nimport { useAnalytics } from '../hooks/use-analytics.js'\nimport { useAuth } from '../hooks/use-auth.js'\n\n/**\n * Auto-tracks page views on pathname change and links customer sessions.\n * Rendered internally by WhaleProvider — storefronts don't need to add this manually.\n *\n * When `config.trackingEnabled` is false the component renders nothing and\n * skips all side-effects — the underlying hook guards individual calls too,\n * but short-circuiting here avoids session creation entirely.\n */\nexport function AnalyticsTracker({ pathname }: { pathname: string }) {\n const ctx = useContext(WhaleContext)\n const { trackPageView, linkCustomer } = useAnalytics()\n const { customer } = useAuth()\n const prevPathname = useRef<string | null>(null)\n const linkedCustomerId = useRef<string | null>(null)\n\n const trackingEnabled = ctx?.config.trackingEnabled ?? true\n\n // Track page views on route change\n useEffect(() => {\n if (!trackingEnabled) return\n if (pathname === prevPathname.current) return\n const referrer = prevPathname.current || (typeof document !== 'undefined' ? document.referrer : '')\n prevPathname.current = pathname\n const fullUrl = typeof window !== 'undefined' ? window.location.href : pathname\n trackPageView(fullUrl, referrer || undefined)\n }, [pathname, trackPageView, trackingEnabled])\n\n // Link customer session on login\n useEffect(() => {\n if (!trackingEnabled) return\n if (customer?.id && customer.id !== linkedCustomerId.current) {\n linkedCustomerId.current = customer.id\n linkCustomer(customer.id)\n }\n }, [customer?.id, linkCustomer, trackingEnabled])\n\n return null\n}\n","'use client'\n\nimport { useContext } from 'react'\nimport { useStore } from 'zustand'\nimport { useShallow } from 'zustand/react/shallow'\nimport { WhaleContext } from '../context.js'\nimport type { CartState, CartActions } from '../stores/cart-store.js'\n\ntype CartReturn = Pick<\n CartState & CartActions,\n 'cartId' | 'cartOpen' | 'cartLoading' | 'items' | 'itemCount' | 'subtotal' | 'taxAmount' | 'total' | 'taxBreakdown' | 'productImages' |\n 'addItem' | 'removeItem' | 'updateQuantity' | 'toggleCart' | 'openCart' | 'closeCart' | 'checkout' | 'initCart' | 'syncCart' | 'clearCart'\n>\n\nexport function useCart() {\n const ctx = useContext(WhaleContext)\n if (!ctx) throw new Error('useCart must be used within <WhaleProvider>')\n\n return useStore(ctx.cartStore, useShallow((s) => ({\n cartId: s.cartId,\n items: s.items,\n itemCount: s.itemCount,\n subtotal: s.subtotal,\n taxAmount: s.taxAmount,\n total: s.total,\n taxBreakdown: s.taxBreakdown,\n cartOpen: s.cartOpen,\n cartLoading: s.cartLoading,\n productImages: s.productImages,\n addItem: s.addItem,\n removeItem: s.removeItem,\n updateQuantity: s.updateQuantity,\n toggleCart: s.toggleCart,\n openCart: s.openCart,\n closeCart: s.closeCart,\n initCart: s.initCart,\n syncCart: s.syncCart,\n clearCart: s.clearCart,\n checkout: s.checkout,\n })))\n}\n\n/** Granular selector — only re-renders on count change */\nexport function useCartItemCount(): number {\n const ctx = useContext(WhaleContext)\n if (!ctx) throw new Error('useCartItemCount must be used within <WhaleProvider>')\n return useStore(ctx.cartStore, (s) => s.itemCount)\n}\n\n/** Granular selector — only re-renders on total change */\nexport function useCartTotal(): number {\n const ctx = useContext(WhaleContext)\n if (!ctx) throw new Error('useCartTotal must be used within <WhaleProvider>')\n return useStore(ctx.cartStore, (s) => s.total)\n}\n","'use client'\n\nimport { useEffect, useRef } from 'react'\nimport { useCart } from '../hooks/use-cart.js'\n\n/**\n * Hydrates cart from gateway on mount if a cartId is persisted.\n * Rendered internally by WhaleProvider.\n */\nexport function CartInitializer() {\n const { cartId, syncCart } = useCart()\n const initialized = useRef(false)\n\n useEffect(() => {\n if (initialized.current) return\n initialized.current = true\n if (cartId) {\n syncCart().catch(() => {\n // Cart may have expired — that's fine, addItem will auto-recover\n })\n }\n }, []) // eslint-disable-line react-hooks/exhaustive-deps\n\n return null\n}\n","'use client'\n\nimport { useEffect, useRef } from 'react'\nimport { useAuth } from '../hooks/use-auth.js'\n\n/**\n * Restores auth session on mount — syncs persisted token to client.\n * Rendered internally by WhaleProvider.\n */\nexport function AuthInitializer() {\n const { restoreSession } = useAuth()\n const restored = useRef(false)\n\n useEffect(() => {\n if (restored.current) return\n restored.current = true\n restoreSession()\n }, []) // eslint-disable-line react-hooks/exhaustive-deps\n\n return null\n}\n","'use client'\n\nimport { useEffect, useRef, useContext } from 'react'\nimport { WhaleContext } from '../context.js'\nimport { PixelManager } from '../../pixels/pixel-manager.js'\nimport type { StorefrontConfig } from '../../pixels/types.js'\n\nexport interface PixelInitializerProps {\n onReady: (manager: PixelManager) => void\n onTheme?: (theme: Record<string, unknown>) => void\n}\n\n/**\n * Fetches storefront config on mount and initializes pixel providers + theme.\n * Sets pixelManager on context so useAnalytics can dispatch events to it.\n * If the config includes a `theme` field, calls onTheme so the provider can apply it.\n * Rendered internally by WhaleProvider — storefronts don't need to add this manually.\n */\nexport function PixelInitializer({ onReady, onTheme }: PixelInitializerProps) {\n const ctx = useContext(WhaleContext)\n const initialized = useRef(false)\n\n useEffect(() => {\n if (!ctx || initialized.current) return\n if (typeof window === 'undefined') return\n initialized.current = true\n\n const { client } = ctx\n\n client.fetchStorefrontConfig().then(async (config: StorefrontConfig) => {\n // Apply theme if present\n if (config.theme && onTheme) {\n onTheme(config.theme)\n }\n\n // Initialize pixels if tracking is enabled\n if (ctx.config.trackingEnabled && config.pixels && config.pixels.length > 0) {\n const manager = new PixelManager(config.pixels)\n await manager.initialize()\n onReady(manager)\n }\n }).catch(() => {\n // Storefront config fetch failed — degrade silently\n })\n }, [ctx, onReady, onTheme])\n\n return null\n}\n","import type { BehavioralEvent, BehavioralBatch } from './types.js'\n\ninterface BehavioralTrackerConfig {\n sendBatch: (batch: BehavioralBatch) => Promise<void>\n sessionId: string\n visitorId: string\n flushIntervalMs?: number\n maxBufferSize?: number\n}\n\nconst SCROLL_MILESTONES = [25, 50, 75, 100] as const\nconst TIME_MILESTONES = [30, 60, 120, 300] as const\nconst MOUSE_THROTTLE_MS = 200\nconst MOUSE_BUFFER_MAX = 100\nconst RAGE_CLICK_COUNT = 3\nconst RAGE_CLICK_RADIUS = 50\nconst RAGE_CLICK_WINDOW_MS = 2000\nconst MAX_CLICK_HISTORY = 10\n\nexport class BehavioralTracker {\n private buffer: BehavioralEvent[] = []\n private config: Required<BehavioralTrackerConfig>\n private pageUrl = ''\n private pagePath = ''\n private flushTimer: ReturnType<typeof setInterval> | null = null\n private scrollMilestones = new Set<number>()\n private timeMilestones = new Set<number>()\n private timeTimers: ReturnType<typeof setTimeout>[] = []\n private exitIntentFired = false\n private startTime = 0\n private clickHistory: Array<{ x: number; y: number; t: number }> = []\n private mouseBuffer: Array<{ x: number; y: number; t: number }> = []\n private lastMouseTime = 0\n private listeners: Array<[EventTarget, string, EventListener]> = []\n private observer: IntersectionObserver | null = null\n private sentinels: HTMLElement[] = []\n\n constructor(config: BehavioralTrackerConfig) {\n this.config = {\n sendBatch: config.sendBatch,\n sessionId: config.sessionId,\n visitorId: config.visitorId,\n flushIntervalMs: config.flushIntervalMs ?? 10000,\n maxBufferSize: config.maxBufferSize ?? 500,\n }\n }\n\n start(): void {\n this.startTime = Date.now()\n\n this.addListener(document, 'click', this.handleClick)\n this.addListener(document, 'mousemove', this.handleMouseMove)\n this.addListener(document, 'mouseout', this.handleMouseOut)\n this.addListener(document, 'copy', this.handleCopy)\n this.addListener(document, 'visibilitychange', this.handleVisibilityChange)\n\n this.setupScrollTracking()\n this.setupTimeMilestones()\n\n this.flushTimer = setInterval(() => this.flush(), this.config.flushIntervalMs)\n }\n\n stop(): void {\n for (const [target, event, handler] of this.listeners) {\n target.removeEventListener(event, handler, { capture: true } as EventListenerOptions)\n }\n this.listeners = []\n\n if (this.flushTimer !== null) {\n clearInterval(this.flushTimer)\n this.flushTimer = null\n }\n\n this.clearTimeMilestones()\n this.cleanupScrollTracking()\n\n // Final flush with any remaining mouse data\n this.flushMouseBuffer()\n this.flush()\n }\n\n setPageContext(url: string, path: string): void {\n // Flush remaining data from previous page\n this.flushMouseBuffer()\n this.flush()\n\n this.pageUrl = url\n this.pagePath = path\n this.scrollMilestones.clear()\n this.timeMilestones.clear()\n this.exitIntentFired = false\n this.startTime = Date.now()\n this.clickHistory = []\n\n this.clearTimeMilestones()\n this.cleanupScrollTracking()\n\n this.setupTimeMilestones()\n // Delay scroll tracking setup to let the new page render\n requestAnimationFrame(() => this.setupScrollTracking())\n }\n\n // ---------------------------------------------------------------------------\n // Buffer management\n // ---------------------------------------------------------------------------\n\n private push(event: BehavioralEvent): void {\n this.buffer.push(event)\n if (this.buffer.length >= this.config.maxBufferSize) {\n this.flush()\n }\n }\n\n private flush(): void {\n if (this.buffer.length === 0) return\n\n const batch: BehavioralBatch = {\n session_id: this.config.sessionId,\n visitor_id: this.config.visitorId,\n events: this.buffer,\n }\n this.buffer = []\n\n this.config.sendBatch(batch).catch(() => {\n // sendBatch implementation handles retries and beacon fallback\n })\n }\n\n private addListener(target: EventTarget, event: string, handler: EventListener): void {\n target.addEventListener(event, handler, { passive: true, capture: true })\n this.listeners.push([target, event, handler])\n }\n\n // ---------------------------------------------------------------------------\n // Event handlers (arrow functions for stable `this`)\n // ---------------------------------------------------------------------------\n\n private handleClick = (e: Event): void => {\n const me = e as MouseEvent\n const target = me.target as Element | null\n if (!target) return\n\n const now = Date.now()\n const x = me.clientX\n const y = me.clientY\n\n // Record click for rage detection\n this.clickHistory.push({ x, y, t: now })\n if (this.clickHistory.length > MAX_CLICK_HISTORY) {\n this.clickHistory.shift()\n }\n\n // Standard click event\n const tag = target.tagName?.toLowerCase() ?? ''\n const rawText = (target as HTMLElement).textContent ?? ''\n const text = rawText.trim().slice(0, 50)\n\n this.push({\n data_type: 'click',\n data: {\n tag,\n text,\n selector: this.getSelector(target),\n x,\n y,\n timestamp: now,\n },\n page_url: this.pageUrl,\n page_path: this.pagePath,\n })\n\n // Rage click detection\n this.detectRageClick(x, y, now)\n }\n\n private handleMouseMove = (e: Event): void => {\n const me = e as MouseEvent\n const now = Date.now()\n\n if (now - this.lastMouseTime < MOUSE_THROTTLE_MS) return\n this.lastMouseTime = now\n\n this.mouseBuffer.push({ x: me.clientX, y: me.clientY, t: now })\n if (this.mouseBuffer.length > MOUSE_BUFFER_MAX) {\n this.mouseBuffer.shift()\n }\n }\n\n private handleMouseOut = (e: Event): void => {\n const me = e as MouseEvent\n if (this.exitIntentFired) return\n if (me.clientY > 0) return\n // Only fire when mouse actually leaves the document element (viewport top)\n if (me.relatedTarget !== null) return\n\n this.exitIntentFired = true\n this.push({\n data_type: 'exit_intent',\n data: {\n time_on_page_ms: Date.now() - this.startTime,\n timestamp: Date.now(),\n },\n page_url: this.pageUrl,\n page_path: this.pagePath,\n })\n }\n\n private handleCopy = (): void => {\n const selection = window.getSelection()\n const length = selection?.toString().length ?? 0\n\n this.push({\n data_type: 'copy',\n data: {\n text_length: length,\n timestamp: Date.now(),\n },\n page_url: this.pageUrl,\n page_path: this.pagePath,\n })\n }\n\n private handleVisibilityChange = (): void => {\n if (document.visibilityState !== 'hidden') return\n\n const timeSpent = Date.now() - this.startTime\n\n this.push({\n data_type: 'page_exit',\n data: {\n time_spent_ms: timeSpent,\n timestamp: Date.now(),\n },\n page_url: this.pageUrl,\n page_path: this.pagePath,\n })\n\n // Flush immediately — page may be closing\n this.flushMouseBuffer()\n this.flush()\n }\n\n // ---------------------------------------------------------------------------\n // Scroll tracking with IntersectionObserver\n // ---------------------------------------------------------------------------\n\n private setupScrollTracking(): void {\n if (typeof IntersectionObserver === 'undefined') return\n\n this.observer = new IntersectionObserver(\n (entries) => {\n for (const entry of entries) {\n if (!entry.isIntersecting) continue\n const milestone = Number(entry.target.getAttribute('data-scroll-milestone'))\n if (isNaN(milestone) || this.scrollMilestones.has(milestone)) continue\n\n this.scrollMilestones.add(milestone)\n this.push({\n data_type: 'scroll_depth',\n data: {\n depth_percent: milestone,\n timestamp: Date.now(),\n },\n page_url: this.pageUrl,\n page_path: this.pagePath,\n })\n }\n },\n { threshold: 0 },\n )\n\n const docHeight = document.documentElement.scrollHeight\n for (const pct of SCROLL_MILESTONES) {\n const sentinel = document.createElement('div')\n sentinel.setAttribute('data-scroll-milestone', String(pct))\n sentinel.style.position = 'absolute'\n sentinel.style.left = '0'\n sentinel.style.width = '1px'\n sentinel.style.height = '1px'\n sentinel.style.pointerEvents = 'none'\n sentinel.style.opacity = '0'\n sentinel.style.top = `${(docHeight * pct) / 100 - 1}px`\n document.body.appendChild(sentinel)\n this.sentinels.push(sentinel)\n this.observer.observe(sentinel)\n }\n }\n\n private cleanupScrollTracking(): void {\n if (this.observer) {\n this.observer.disconnect()\n this.observer = null\n }\n for (const sentinel of this.sentinels) {\n sentinel.remove()\n }\n this.sentinels = []\n }\n\n // ---------------------------------------------------------------------------\n // Time milestones\n // ---------------------------------------------------------------------------\n\n private setupTimeMilestones(): void {\n for (const seconds of TIME_MILESTONES) {\n const timer = setTimeout(() => {\n if (this.timeMilestones.has(seconds)) return\n this.timeMilestones.add(seconds)\n this.push({\n data_type: 'time_on_page',\n data: {\n milestone_seconds: seconds,\n timestamp: Date.now(),\n },\n page_url: this.pageUrl,\n page_path: this.pagePath,\n })\n }, seconds * 1000)\n this.timeTimers.push(timer)\n }\n }\n\n private clearTimeMilestones(): void {\n for (const timer of this.timeTimers) {\n clearTimeout(timer)\n }\n this.timeTimers = []\n }\n\n // ---------------------------------------------------------------------------\n // Rage click detection\n // ---------------------------------------------------------------------------\n\n private detectRageClick(x: number, y: number, now: number): void {\n const windowStart = now - RAGE_CLICK_WINDOW_MS\n const nearby = this.clickHistory.filter((c) => {\n if (c.t < windowStart) return false\n const dx = c.x - x\n const dy = c.y - y\n return Math.sqrt(dx * dx + dy * dy) <= RAGE_CLICK_RADIUS\n })\n\n if (nearby.length >= RAGE_CLICK_COUNT) {\n this.push({\n data_type: 'rage_click',\n data: {\n x,\n y,\n click_count: nearby.length,\n timestamp: now,\n },\n page_url: this.pageUrl,\n page_path: this.pagePath,\n })\n // Reset history to avoid repeat detections for the same burst\n this.clickHistory = []\n }\n }\n\n // ---------------------------------------------------------------------------\n // Mouse buffer flush\n // ---------------------------------------------------------------------------\n\n private flushMouseBuffer(): void {\n if (this.mouseBuffer.length === 0) return\n\n this.push({\n data_type: 'mouse_movement',\n data: {\n points: [...this.mouseBuffer],\n timestamp: Date.now(),\n },\n page_url: this.pageUrl,\n page_path: this.pagePath,\n })\n this.mouseBuffer = []\n }\n\n // ---------------------------------------------------------------------------\n // CSS selector helper\n // ---------------------------------------------------------------------------\n\n private getSelector(el: Element): string {\n const parts: string[] = []\n let current: Element | null = el\n let depth = 0\n\n while (current && depth < 3) {\n let segment = current.tagName.toLowerCase()\n\n if (current.id) {\n segment += `#${current.id}`\n } else if (current.classList.length > 0) {\n segment += `.${Array.from(current.classList).join('.')}`\n }\n\n parts.unshift(segment)\n current = current.parentElement\n depth++\n }\n\n return parts.join(' > ')\n }\n}\n","'use client'\n\nimport { useContext, useRef, useEffect } from 'react'\nimport { WhaleContext } from '../context.js'\nimport { BehavioralTracker } from '../../behavioral/tracker.js'\nimport type { BehavioralBatch } from '../../behavioral/types.js'\nimport { resilientSend } from '../../resilient-send.js'\n\nconst SESSION_KEY_SUFFIX = '-analytics-session'\nconst VISITOR_KEY_SUFFIX = '-visitor-id'\nconst MAX_SESSION_WAIT_MS = 10_000\nconst SESSION_POLL_MS = 500\n\nexport function BehavioralTrackerComponent({ pathname }: { pathname: string | null }) {\n const ctx = useContext(WhaleContext)\n const trackerRef = useRef<BehavioralTracker | null>(null)\n const initRef = useRef(false)\n\n // Mount once — never re-run this effect\n useEffect(() => {\n if (!ctx || !ctx.config.trackingEnabled) return\n if (typeof window === 'undefined') return\n\n const { config } = ctx\n let cancelled = false\n let pollTimer: ReturnType<typeof setTimeout> | null = null\n const startTime = Date.now()\n\n const readSessionId = (): string | null => {\n const key = `${config.storagePrefix}${SESSION_KEY_SUFFIX}`\n try {\n const raw = localStorage.getItem(key)\n if (raw) {\n const stored = JSON.parse(raw)\n return stored.id ?? null\n }\n } catch {}\n return null\n }\n\n const readVisitorId = (): string => {\n const key = `${config.storagePrefix}${VISITOR_KEY_SUFFIX}`\n try {\n const existing = localStorage.getItem(key)\n if (existing) return existing\n } catch {}\n const id = `v-${Date.now()}-${Math.random().toString(36).slice(2, 10)}`\n try { localStorage.setItem(key, id) } catch {}\n return id\n }\n\n const tryInit = () => {\n if (cancelled) return\n\n const sessionId = readSessionId()\n if (!sessionId) {\n if (Date.now() - startTime < MAX_SESSION_WAIT_MS) {\n pollTimer = setTimeout(tryInit, SESSION_POLL_MS)\n }\n return\n }\n\n initRef.current = true\n const visitorId = readVisitorId()\n const baseUrl = config.proxyPath\n const endpoint = `${baseUrl}/v1/stores/${config.storeId}/storefront/behavioral`\n\n const sendBatch = async (batch: BehavioralBatch): Promise<void> => {\n await resilientSend(endpoint, batch, {\n 'Content-Type': 'application/json',\n 'x-api-key': config.apiKey,\n })\n }\n\n const tracker = new BehavioralTracker({ sendBatch, sessionId, visitorId })\n tracker.start()\n trackerRef.current = tracker\n }\n\n tryInit()\n\n return () => {\n cancelled = true\n if (pollTimer) clearTimeout(pollTimer)\n if (trackerRef.current) {\n trackerRef.current.stop()\n trackerRef.current = null\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n // Update page context on pathname change\n useEffect(() => {\n if (!trackerRef.current || !pathname) return\n const url = typeof window !== 'undefined' ? window.location.href : pathname\n trackerRef.current.setPageContext(url, pathname)\n }, [pathname])\n\n return null\n}\n","export interface DeviceFingerprint {\n fingerprint_id: string\n canvas_fingerprint: string\n webgl_fingerprint: string\n audio_fingerprint: string\n screen_resolution: string\n platform: string\n timezone: string\n language: string\n hardware_concurrency: number\n device_memory: number | null\n color_depth: number\n pixel_ratio: number\n touch_support: boolean\n cookie_enabled: boolean\n do_not_track: string | null\n}\n\nasync function sha256(input: string): Promise<string> {\n const data = new TextEncoder().encode(input)\n const hash = await crypto.subtle.digest('SHA-256', data)\n return Array.from(new Uint8Array(hash))\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('')\n}\n\nasync function getCanvasFingerprint(): Promise<string> {\n try {\n const canvas = document.createElement('canvas')\n canvas.width = 256\n canvas.height = 256\n const ctx = canvas.getContext('2d')\n if (!ctx) return ''\n\n // Filled rect with gradient\n const gradient = ctx.createLinearGradient(0, 0, 256, 256)\n gradient.addColorStop(0, '#ff6b35')\n gradient.addColorStop(0.5, '#1a73e8')\n gradient.addColorStop(1, '#34a853')\n ctx.fillStyle = gradient\n ctx.fillRect(0, 0, 256, 256)\n\n // Text\n ctx.fillStyle = '#ffffff'\n ctx.font = '18px Arial'\n ctx.textBaseline = 'top'\n ctx.fillText('WhaleTools', 10, 10)\n\n // Arc / circle\n ctx.beginPath()\n ctx.arc(128, 128, 60, 0, Math.PI * 2)\n ctx.strokeStyle = '#fbbc04'\n ctx.lineWidth = 3\n ctx.stroke()\n\n // Line\n ctx.beginPath()\n ctx.moveTo(0, 0)\n ctx.lineTo(256, 256)\n ctx.strokeStyle = '#ea4335'\n ctx.lineWidth = 2\n ctx.stroke()\n\n const dataUrl = canvas.toDataURL()\n return sha256(dataUrl)\n } catch {\n return ''\n }\n}\n\nasync function getWebGLFingerprint(): Promise<string> {\n try {\n const canvas = document.createElement('canvas')\n const gl =\n canvas.getContext('webgl') || canvas.getContext('experimental-webgl')\n if (!gl || !(gl instanceof WebGLRenderingContext)) return ''\n\n const ext = gl.getExtension('WEBGL_debug_renderer_info')\n const renderer = ext\n ? gl.getParameter(ext.UNMASKED_RENDERER_WEBGL)\n : 'unknown'\n const vendor = ext\n ? gl.getParameter(ext.UNMASKED_VENDOR_WEBGL)\n : 'unknown'\n const version = gl.getParameter(gl.VERSION)\n\n const combined = `${renderer}|${vendor}|${version}`\n return sha256(combined)\n } catch {\n return ''\n }\n}\n\nasync function getAudioFingerprint(): Promise<string> {\n try {\n const AudioCtx =\n (window as any).OfflineAudioContext ||\n (window as any).webkitOfflineAudioContext\n if (!AudioCtx) return ''\n\n const context = new AudioCtx(1, 44100, 44100)\n const oscillator = context.createOscillator()\n oscillator.type = 'triangle'\n oscillator.frequency.setValueAtTime(10000, context.currentTime)\n\n const compressor = context.createDynamicsCompressor()\n compressor.threshold.setValueAtTime(-50, context.currentTime)\n compressor.knee.setValueAtTime(40, context.currentTime)\n compressor.ratio.setValueAtTime(12, context.currentTime)\n compressor.attack.setValueAtTime(0, context.currentTime)\n compressor.release.setValueAtTime(0.25, context.currentTime)\n\n oscillator.connect(compressor)\n compressor.connect(context.destination)\n oscillator.start(0)\n\n const buffer = await context.startRendering()\n const samples = buffer.getChannelData(0).slice(0, 100)\n const sampleStr = Array.from(samples)\n .map((s) => s.toString())\n .join(',')\n\n return sha256(sampleStr)\n } catch {\n return ''\n }\n}\n\nexport async function collectFingerprint(): Promise<DeviceFingerprint> {\n const [canvas_fingerprint, webgl_fingerprint, audio_fingerprint] =\n await Promise.all([\n getCanvasFingerprint(),\n getWebGLFingerprint(),\n getAudioFingerprint(),\n ])\n\n const screen_resolution = `${window.screen.width}x${window.screen.height}`\n const platform = navigator.platform || ''\n const timezone = Intl.DateTimeFormat().resolvedOptions().timeZone || ''\n const language = navigator.language || ''\n const hardware_concurrency = navigator.hardwareConcurrency || 0\n const device_memory = (navigator as any).deviceMemory ?? null\n const color_depth = window.screen.colorDepth\n const pixel_ratio = window.devicePixelRatio || 1\n const touch_support =\n 'ontouchstart' in window ||\n navigator.maxTouchPoints > 0 ||\n (navigator as any).msMaxTouchPoints > 0\n const cookie_enabled = navigator.cookieEnabled\n const do_not_track = navigator.doNotTrack ?? null\n\n const fingerprintSource = [\n canvas_fingerprint,\n webgl_fingerprint,\n audio_fingerprint,\n screen_resolution,\n platform,\n timezone,\n language,\n String(hardware_concurrency),\n ].join('|')\n\n const fingerprint_id = await sha256(fingerprintSource)\n\n return {\n fingerprint_id,\n canvas_fingerprint,\n webgl_fingerprint,\n audio_fingerprint,\n screen_resolution,\n platform,\n timezone,\n language,\n hardware_concurrency,\n device_memory,\n color_depth,\n pixel_ratio,\n touch_support,\n cookie_enabled,\n do_not_track,\n }\n}\n","'use client'\n\nimport { useContext, useRef, useEffect } from 'react'\nimport { WhaleContext } from '../context.js'\nimport { collectFingerprint } from '../../fingerprint/collector.js'\nimport { resilientSend } from '../../resilient-send.js'\n\nconst SESSION_KEY_SUFFIX = '-analytics-session'\n\nexport function FingerprintCollector() {\n const ctx = useContext(WhaleContext)\n const sent = useRef(false)\n\n useEffect(() => {\n if (!ctx || sent.current) return\n if (!ctx.config.trackingEnabled) return\n if (typeof window === 'undefined') return\n sent.current = true\n\n const { config, client } = ctx\n const prefix = config.storagePrefix\n const fpKey = `${prefix}-fingerprint-sent`\n\n const linkFingerprintToSession = (fingerprintId: string) => {\n try {\n const sessionRaw = localStorage.getItem(`${prefix}${SESSION_KEY_SUFFIX}`)\n if (sessionRaw) {\n const session = JSON.parse(sessionRaw)\n client.updateSession(session.id, { fingerprint_id: fingerprintId }).catch(() => {})\n }\n } catch {}\n }\n\n // Check if already sent this session\n const existing = localStorage.getItem(fpKey)\n if (existing) {\n linkFingerprintToSession(existing)\n return\n }\n\n // Collect and send\n collectFingerprint()\n .then(async (fp) => {\n const baseUrl = config.proxyPath\n const url = `${baseUrl}/v1/stores/${config.storeId}/storefront/fingerprints`\n\n // Send fingerprint to gateway\n await resilientSend(url, fp, {\n 'Content-Type': 'application/json',\n 'x-api-key': config.apiKey,\n }).catch(() => {})\n\n // Store fingerprint_id locally\n localStorage.setItem(fpKey, fp.fingerprint_id)\n\n // Link to current session\n linkFingerprintToSession(fp.fingerprint_id)\n })\n .catch(() => {})\n }, [ctx])\n\n return null\n}\n","/**\n * Lightweight session recorder — captures DOM mutations, scroll, mouse,\n * input changes, and viewport resizes without any external dependency.\n *\n * Events are buffered locally and flushed to the backend at a configurable\n * interval (default 5 s) or immediately when the page is being unloaded.\n */\n\nexport interface RecordingEvent {\n /** 0=full_snapshot, 1=mutation, 2=mouse, 3=scroll, 4=input, 5=resize, 6=custom */\n type: number\n timestamp: number\n data: Record<string, unknown>\n}\n\ninterface RecorderConfig {\n sendChunk: (events: RecordingEvent[], sequence: number) => Promise<void>\n /** How often buffered events are flushed (ms). Default 5 000. */\n flushIntervalMs?: number\n /** Maximum events per chunk. Default 200. */\n maxChunkSize?: number\n}\n\ntype RequiredConfig = Required<RecorderConfig>\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction now(): number {\n return Date.now()\n}\n\nfunction throttle<T extends (...args: unknown[]) => void>(\n fn: T,\n ms: number,\n): T {\n let last = 0\n let timer: ReturnType<typeof setTimeout> | null = null\n const throttled = (...args: unknown[]) => {\n const elapsed = now() - last\n if (elapsed >= ms) {\n last = now()\n fn(...args)\n } else if (!timer) {\n timer = setTimeout(() => {\n last = now()\n timer = null\n fn(...args)\n }, ms - elapsed)\n }\n }\n return throttled as unknown as T\n}\n\n/** Build a short CSS selector for an element (used in mutation / input payloads). */\nfunction shortSelector(el: Element): string {\n if (el.id) return `#${el.id}`\n let sel = el.tagName.toLowerCase()\n if (el.className && typeof el.className === 'string') {\n const cls = el.className\n .trim()\n .split(/\\s+/)\n .slice(0, 2)\n .join('.')\n if (cls) sel += `.${cls}`\n }\n return sel\n}\n\n// ---------------------------------------------------------------------------\n// SessionRecorder\n// ---------------------------------------------------------------------------\n\nexport class SessionRecorder {\n private events: RecordingEvent[] = []\n private sequence = 0\n private observer: MutationObserver | null = null\n private flushTimer: ReturnType<typeof setInterval> | null = null\n private config: RequiredConfig\n private listeners: Array<[EventTarget, string, EventListener, boolean | AddEventListenerOptions | undefined]> = []\n private started = false\n private flushing = false\n /** Pending mutations collected within the current animation frame. */\n private pendingMutations: MutationRecord[] = []\n private mutationRafId: number | null = null\n\n constructor(config: RecorderConfig) {\n this.config = {\n sendChunk: config.sendChunk,\n flushIntervalMs: config.flushIntervalMs ?? 5_000,\n maxChunkSize: config.maxChunkSize ?? 200,\n }\n }\n\n // -----------------------------------------------------------------------\n // Public API\n // -----------------------------------------------------------------------\n\n start(): void {\n if (this.started) return\n this.started = true\n\n this.captureFullSnapshot()\n this.setupMutationObserver()\n this.setupEventListeners()\n\n this.flushTimer = setInterval(() => {\n void this.flush()\n }, this.config.flushIntervalMs)\n }\n\n stop(): void {\n if (!this.started) return\n this.started = false\n\n // Tear down mutation observer\n if (this.observer) {\n this.observer.disconnect()\n this.observer = null\n }\n\n // Cancel pending mutation raf\n if (this.mutationRafId !== null) {\n cancelAnimationFrame(this.mutationRafId)\n this.mutationRafId = null\n }\n\n // Remove all event listeners\n for (const [target, event, handler, options] of this.listeners) {\n target.removeEventListener(event, handler, options as EventListenerOptions | undefined)\n }\n this.listeners = []\n\n // Stop flush timer\n if (this.flushTimer !== null) {\n clearInterval(this.flushTimer)\n this.flushTimer = null\n }\n\n // Final flush\n void this.flush()\n }\n\n // -----------------------------------------------------------------------\n // Full Snapshot (type 0)\n // -----------------------------------------------------------------------\n\n private captureFullSnapshot(): void {\n const tree = this.serializeNode(document.documentElement)\n this.push({\n type: 0,\n timestamp: now(),\n data: {\n href: location.href,\n width: window.innerWidth,\n height: window.innerHeight,\n tree: tree ?? {},\n },\n })\n }\n\n private serializeNode(node: Node): Record<string, unknown> | null {\n if (node.nodeType === Node.ELEMENT_NODE) {\n const el = node as Element\n\n // Skip <script> and <link rel=\"preload\"> to reduce payload size\n const tag = el.tagName.toLowerCase()\n if (tag === 'script' || tag === 'noscript') return null\n\n const attrs: Record<string, string> = {}\n for (const attr of Array.from(el.attributes)) {\n // Mask sensitive inputs\n if (\n attr.name === 'value' &&\n el instanceof HTMLInputElement &&\n el.type === 'password'\n ) {\n continue\n }\n attrs[attr.name] = attr.value\n }\n\n const children: Record<string, unknown>[] = []\n for (const child of Array.from(el.childNodes)) {\n const serialized = this.serializeNode(child)\n if (serialized) children.push(serialized)\n }\n\n return { tag, attrs, children }\n }\n\n if (node.nodeType === Node.TEXT_NODE) {\n const text = node.textContent || ''\n // Skip empty text nodes\n if (!text.trim()) return null\n return { text }\n }\n\n return null\n }\n\n // -----------------------------------------------------------------------\n // Mutation Observer (type 1)\n // -----------------------------------------------------------------------\n\n private setupMutationObserver(): void {\n this.observer = new MutationObserver((mutations) => {\n // Batch mutations that arrive in the same animation frame\n this.pendingMutations.push(...mutations)\n if (this.mutationRafId === null) {\n this.mutationRafId = requestAnimationFrame(() => {\n this.processMutations(this.pendingMutations)\n this.pendingMutations = []\n this.mutationRafId = null\n })\n }\n })\n\n this.observer.observe(document.documentElement, {\n childList: true,\n attributes: true,\n characterData: true,\n subtree: true,\n attributeOldValue: false,\n })\n }\n\n private processMutations(mutations: MutationRecord[]): void {\n const ts = now()\n\n const adds: Record<string, unknown>[] = []\n const removes: Record<string, unknown>[] = []\n const attrs: Record<string, unknown>[] = []\n const texts: Record<string, unknown>[] = []\n\n for (const m of mutations) {\n if (m.type === 'childList') {\n for (const node of Array.from(m.addedNodes)) {\n if (node.nodeType === Node.ELEMENT_NODE || node.nodeType === Node.TEXT_NODE) {\n const serialized = this.serializeNode(node)\n if (serialized) {\n adds.push({\n parentSelector: m.target.nodeType === Node.ELEMENT_NODE\n ? shortSelector(m.target as Element)\n : null,\n node: serialized,\n })\n }\n }\n }\n for (const node of Array.from(m.removedNodes)) {\n removes.push({\n parentSelector: m.target.nodeType === Node.ELEMENT_NODE\n ? shortSelector(m.target as Element)\n : null,\n tag: node.nodeType === Node.ELEMENT_NODE\n ? (node as Element).tagName.toLowerCase()\n : '#text',\n })\n }\n } else if (m.type === 'attributes' && m.target.nodeType === Node.ELEMENT_NODE) {\n const el = m.target as Element\n const name = m.attributeName || ''\n attrs.push({\n selector: shortSelector(el),\n name,\n value: el.getAttribute(name),\n })\n } else if (m.type === 'characterData') {\n texts.push({\n parentSelector: m.target.parentElement\n ? shortSelector(m.target.parentElement)\n : null,\n value: (m.target.textContent || '').slice(0, 200),\n })\n }\n }\n\n // Only push if there's actual data\n if (adds.length || removes.length || attrs.length || texts.length) {\n this.push({\n type: 1,\n timestamp: ts,\n data: {\n adds: adds.length ? adds : undefined,\n removes: removes.length ? removes : undefined,\n attrs: attrs.length ? attrs : undefined,\n texts: texts.length ? texts : undefined,\n },\n })\n }\n }\n\n // -----------------------------------------------------------------------\n // Event Listeners (types 2–5)\n // -----------------------------------------------------------------------\n\n private setupEventListeners(): void {\n // --- Mouse (type 2) ---\n const onMouseMove = throttle(((e: MouseEvent) => {\n this.push({\n type: 2,\n timestamp: now(),\n data: { source: 'move', x: e.clientX, y: e.clientY },\n })\n }) as (...args: unknown[]) => void, 100)\n\n const onClick = ((e: MouseEvent) => {\n const target = e.target as Element | null\n this.push({\n type: 2,\n timestamp: now(),\n data: {\n source: 'click',\n x: e.clientX,\n y: e.clientY,\n target: target ? shortSelector(target) : null,\n },\n })\n }) as EventListener\n\n this.addListener(document, 'mousemove', onMouseMove as EventListener, { passive: true, capture: true })\n this.addListener(document, 'click', onClick, { passive: true, capture: true })\n\n // --- Scroll (type 3) ---\n const onScroll = throttle(((e: Event) => {\n const target = e.target\n if (target === document || target === document.documentElement || target === window) {\n this.push({\n type: 3,\n timestamp: now(),\n data: { target: 'window', x: window.scrollX, y: window.scrollY },\n })\n } else if (target instanceof Element) {\n this.push({\n type: 3,\n timestamp: now(),\n data: {\n target: shortSelector(target),\n x: target.scrollLeft,\n y: target.scrollTop,\n },\n })\n }\n }) as (...args: unknown[]) => void, 200)\n\n this.addListener(document, 'scroll', onScroll as EventListener, { passive: true, capture: true })\n\n // --- Input (type 4) ---\n const onInput = ((e: Event) => {\n const target = e.target\n if (!(target instanceof HTMLInputElement || target instanceof HTMLTextAreaElement || target instanceof HTMLSelectElement)) {\n return\n }\n const isPassword =\n target instanceof HTMLInputElement && target.type === 'password'\n\n this.push({\n type: 4,\n timestamp: now(),\n data: {\n selector: shortSelector(target),\n tag: target.tagName.toLowerCase(),\n inputType: target instanceof HTMLInputElement ? target.type : undefined,\n value: isPassword ? '***' : (target.value || '').slice(0, 100),\n },\n })\n }) as EventListener\n\n this.addListener(document, 'input', onInput, { passive: true, capture: true })\n this.addListener(document, 'change', onInput, { passive: true, capture: true })\n\n // --- Resize (type 5) ---\n const onResize = throttle((() => {\n this.push({\n type: 5,\n timestamp: now(),\n data: { width: window.innerWidth, height: window.innerHeight },\n })\n }) as (...args: unknown[]) => void, 500)\n\n this.addListener(window, 'resize', onResize as EventListener, { passive: true })\n\n // --- Visibility change (flush on hide) ---\n const onVisibility = (() => {\n if (document.visibilityState === 'hidden') {\n void this.flush()\n }\n }) as EventListener\n\n this.addListener(document, 'visibilitychange', onVisibility)\n }\n\n // -----------------------------------------------------------------------\n // Event buffer & flushing\n // -----------------------------------------------------------------------\n\n private push(event: RecordingEvent): void {\n if (!this.started) return\n\n this.events.push(event)\n\n // Auto-flush if we've hit the chunk limit\n if (this.events.length >= this.config.maxChunkSize) {\n void this.flush()\n }\n }\n\n private async flush(): Promise<void> {\n if (this.events.length === 0) return\n if (this.flushing) return\n\n this.flushing = true\n\n // Swap out the buffer so new events accumulate independently\n const chunk = this.events\n this.events = []\n const seq = this.sequence++\n\n try {\n await this.config.sendChunk(chunk, seq)\n } catch {\n // Best-effort — if sendChunk itself handles retries / beacon fallback,\n // there's nothing else to do here.\n } finally {\n this.flushing = false\n }\n }\n\n // -----------------------------------------------------------------------\n // Listener bookkeeping\n // -----------------------------------------------------------------------\n\n private addListener(\n target: EventTarget,\n event: string,\n handler: EventListener,\n options?: AddEventListenerOptions,\n ): void {\n target.addEventListener(event, handler, options)\n this.listeners.push([target, event, handler, options])\n }\n}\n","'use client'\n\nimport { useContext, useRef, useEffect } from 'react'\nimport { WhaleContext } from '../context.js'\nimport { SessionRecorder } from '../../recording/recorder.js'\nimport type { RecordingEvent } from '../../recording/recorder.js'\nimport { resilientSend } from '../../resilient-send.js'\n\nconst SESSION_KEY_SUFFIX = '-analytics-session'\nconst VISITOR_KEY_SUFFIX = '-visitor-id'\nconst MAX_SESSION_WAIT_MS = 10_000\nconst SESSION_POLL_MS = 500\n\nexport function SessionRecorderComponent() {\n const ctx = useContext(WhaleContext)\n const recorderRef = useRef<SessionRecorder | null>(null)\n const sampledRef = useRef<boolean | null>(null)\n const initRef = useRef(false)\n\n useEffect(() => {\n if (!ctx || initRef.current) return\n if (!ctx.config.trackingEnabled) return\n if (typeof window === 'undefined') return\n\n // Determine sampling once per component lifetime\n if (sampledRef.current === null) {\n sampledRef.current = Math.random() < ctx.config.recordingRate\n }\n if (!sampledRef.current) return\n\n const { config } = ctx\n const prefix = config.storagePrefix\n let cancelled = false\n let pollTimer: ReturnType<typeof setTimeout> | null = null\n const startTime = Date.now()\n\n const tryInit = () => {\n if (cancelled) return\n\n let sessionId: string | null = null\n try {\n const sessionRaw = localStorage.getItem(`${prefix}${SESSION_KEY_SUFFIX}`)\n if (sessionRaw) {\n const session = JSON.parse(sessionRaw)\n sessionId = session.id || null\n }\n } catch {}\n\n if (!sessionId) {\n if (Date.now() - startTime < MAX_SESSION_WAIT_MS) {\n pollTimer = setTimeout(tryInit, SESSION_POLL_MS)\n return\n }\n return\n }\n\n initRef.current = true\n const visitorId = (() => {\n try {\n return localStorage.getItem(`${prefix}${VISITOR_KEY_SUFFIX}`) || 'unknown'\n } catch {\n return 'unknown'\n }\n })()\n\n const baseUrl = config.proxyPath\n const url = `${baseUrl}/v1/stores/${config.storeId}/storefront/recordings`\n const sid = sessionId\n\n const recorder = new SessionRecorder({\n sendChunk: async (events: RecordingEvent[], sequence: number) => {\n await resilientSend(url, {\n session_id: sid,\n visitor_id: visitorId,\n events,\n sequence,\n started_at: sequence === 0 ? new Date().toISOString() : undefined,\n }, {\n 'Content-Type': 'application/json',\n 'x-api-key': config.apiKey,\n })\n },\n })\n\n recorder.start()\n recorderRef.current = recorder\n }\n\n tryInit()\n\n return () => {\n cancelled = true\n if (pollTimer) clearTimeout(pollTimer)\n if (recorderRef.current) {\n recorderRef.current.stop()\n recorderRef.current = null\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n return null\n}\n","'use client'\n\nimport { useMemo, useState, useCallback, type ReactNode } from 'react'\nimport { usePathname } from 'next/navigation'\nimport { WhaleClient } from '../client.js'\nimport type { WhaleStorefrontConfig, Product } from '../types.js'\nimport type { PixelManager } from '../pixels/pixel-manager.js'\nimport { WhaleContext, type WhaleContextValue } from './context.js'\nimport { createCartStore } from './stores/cart-store.js'\nimport { createAuthStore } from './stores/auth-store.js'\nimport { AnalyticsTracker } from './components/analytics-tracker.js'\nimport { CartInitializer } from './components/cart-initializer.js'\nimport { AuthInitializer } from './components/auth-initializer.js'\nimport { PixelInitializer } from './components/pixel-initializer.js'\nimport { BehavioralTrackerComponent } from './components/behavioral-tracker.js'\nimport { FingerprintCollector } from './components/fingerprint-collector.js'\nimport { SessionRecorderComponent } from './components/session-recorder.js'\nimport { ThemeProvider, type ThemeTokens } from '@neowhale/ui'\n\n/** Read a boolean env var (NEXT_PUBLIC_*). Returns undefined when absent. */\nfunction envBool(name: string): boolean | undefined {\n if (typeof process === 'undefined') return undefined\n const raw = (process.env as Record<string, string | undefined>)[name]\n if (raw === undefined || raw === '') return undefined\n return raw !== '0' && raw.toLowerCase() !== 'false'\n}\n\n/** Read a numeric env var (NEXT_PUBLIC_*). Returns undefined when absent. */\nfunction envNumber(name: string): number | undefined {\n if (typeof process === 'undefined') return undefined\n const raw = (process.env as Record<string, string | undefined>)[name]\n if (raw === undefined || raw === '') return undefined\n const n = Number(raw)\n return Number.isFinite(n) ? n : undefined\n}\n\nexport interface WhaleProviderProps extends WhaleStorefrontConfig {\n children: ReactNode\n /** Server-fetched products passed to client for hooks */\n products?: Product[]\n /** Manual theme overrides — merged with store theme fetched from storefront config */\n theme?: Partial<ThemeTokens>\n}\n\nexport function WhaleProvider({\n children,\n products = [],\n theme: themeProp,\n storeId,\n apiKey,\n gatewayUrl,\n proxyPath,\n mediaSigningSecret,\n supabaseHost,\n storagePrefix,\n sessionTtl,\n debug,\n trackingEnabled,\n recordingRate,\n}: WhaleProviderProps) {\n const pathname = usePathname()\n const [pixelManager, setPixelManager] = useState<PixelManager | null>(null)\n const [storeTheme, setStoreTheme] = useState<Partial<ThemeTokens> | undefined>(undefined)\n\n const handlePixelReady = useCallback((manager: PixelManager) => {\n setPixelManager(manager)\n }, [])\n\n const handleTheme = useCallback((theme: Record<string, unknown>) => {\n setStoreTheme(theme as Partial<ThemeTokens>)\n }, [])\n\n const ctx = useMemo<WhaleContextValue>(() => {\n const resolvedConfig = {\n storeId,\n apiKey,\n gatewayUrl: gatewayUrl || 'https://whale-gateway.fly.dev',\n proxyPath: proxyPath || '/api/gw',\n mediaSigningSecret: mediaSigningSecret || '',\n supabaseHost: supabaseHost || '',\n storagePrefix: storagePrefix || 'whale',\n sessionTtl: sessionTtl || 30 * 60 * 1000,\n debug: debug || false,\n trackingEnabled: trackingEnabled ?? envBool('NEXT_PUBLIC_TRACKING_ENABLED') ?? true,\n recordingRate: recordingRate ?? envNumber('NEXT_PUBLIC_RECORDING_RATE') ?? 0.1,\n }\n\n const client = new WhaleClient({\n storeId,\n apiKey,\n gatewayUrl: resolvedConfig.gatewayUrl,\n proxyPath: resolvedConfig.proxyPath,\n })\n\n // Analytics callbacks wired into cart store — fire events via client directly\n // since we can't use the useAnalytics hook outside a component.\n // Read session_id from localStorage (same key pattern as useAnalytics).\n const readSessionId = (): string | undefined => {\n try {\n const raw = localStorage.getItem(`${resolvedConfig.storagePrefix}-analytics-session`)\n if (!raw) return undefined\n const stored = JSON.parse(raw) as { id: string; createdAt: number }\n if (Date.now() - stored.createdAt < resolvedConfig.sessionTtl) return stored.id\n } catch { /* ignore */ }\n return undefined\n }\n\n /** Sync cart state to the analytics session (fire-and-forget). */\n const syncCartToSession = (cartId: string, total: number, itemCount: number) => {\n const sid = readSessionId()\n if (sid && !sid.startsWith('local-')) {\n client.updateSession(sid, {\n cart_id: cartId,\n cart_total: total,\n cart_item_count: itemCount,\n status: 'carting',\n }).catch(() => {})\n }\n }\n\n const onAddToCart = resolvedConfig.trackingEnabled\n ? (productId: string, productName: string, quantity: number, price: number, tier?: string) => {\n const sid = readSessionId()\n if (sid) client.trackEvent({ session_id: sid, event_type: 'add_to_cart' as never, event_data: { product_id: productId, product_name: productName, quantity, price, tier } }).catch(() => {})\n }\n : undefined\n\n const onRemoveFromCart = resolvedConfig.trackingEnabled\n ? (productId: string, productName: string) => {\n const sid = readSessionId()\n if (sid) client.trackEvent({ session_id: sid, event_type: 'remove_from_cart' as never, event_data: { product_id: productId, product_name: productName } }).catch(() => {})\n }\n : undefined\n\n const cartStore = createCartStore(client, resolvedConfig.storagePrefix, onAddToCart, onRemoveFromCart, syncCartToSession)\n const authStore = createAuthStore(client, resolvedConfig.storagePrefix)\n\n return {\n client,\n config: resolvedConfig,\n cartStore,\n authStore,\n products,\n pixelManager: null,\n }\n // Only recreate when identity changes — storeId + apiKey\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [storeId, apiKey])\n\n // Update products and pixelManager on the context when they change\n const value = useMemo<WhaleContextValue>(\n () => ({ ...ctx, products, pixelManager }),\n [ctx, products, pixelManager]\n )\n\n // Merge store-fetched theme with manual overrides (manual takes precedence)\n const mergedTheme = useMemo<Partial<ThemeTokens> | undefined>(() => {\n if (!storeTheme && !themeProp) return undefined\n return { ...storeTheme, ...themeProp }\n }, [storeTheme, themeProp])\n\n return (\n <WhaleContext.Provider value={value}>\n <ThemeProvider theme={mergedTheme}>\n <AuthInitializer />\n <CartInitializer />\n <AnalyticsTracker pathname={pathname} />\n <PixelInitializer onReady={handlePixelReady} onTheme={handleTheme} />\n <BehavioralTrackerComponent pathname={pathname} />\n <FingerprintCollector />\n <SessionRecorderComponent />\n {children}\n </ThemeProvider>\n </WhaleContext.Provider>\n )\n}\n","'use client'\n\nimport { useContext, useState, useEffect, useMemo } from 'react'\nimport { WhaleContext } from '../context.js'\nimport type { Product } from '../../types.js'\n\n/**\n * Returns products passed via WhaleProvider.\n * Optionally filters by category or search.\n */\nexport function useProducts(opts?: {\n categoryId?: string\n search?: string\n}) {\n const ctx = useContext(WhaleContext)\n if (!ctx) throw new Error('useProducts must be used within <WhaleProvider>')\n\n const allProducts = ctx.products\n\n const products = useMemo(() => {\n let result = allProducts\n if (opts?.categoryId) {\n result = result.filter((p) => p.primary_category_id === opts.categoryId)\n }\n if (opts?.search) {\n const q = opts.search.toLowerCase()\n result = result.filter(\n (p) =>\n p.name.toLowerCase().includes(q) ||\n p.description?.toLowerCase().includes(q) ||\n p.slug.toLowerCase().includes(q)\n )\n }\n return result\n }, [allProducts, opts?.categoryId, opts?.search])\n\n return {\n products,\n allProducts,\n loading: false,\n }\n}\n\n/**\n * Returns a single product by slug from the provider's product list.\n */\nexport function useProduct(slug: string | null | undefined) {\n const ctx = useContext(WhaleContext)\n if (!ctx) throw new Error('useProduct must be used within <WhaleProvider>')\n\n const product = useMemo(() => {\n if (!slug) return null\n return ctx.products.find((p) => p.slug === slug) ?? null\n }, [ctx.products, slug])\n\n return {\n product,\n loading: false,\n }\n}\n","'use client'\n\nimport { useContext } from 'react'\nimport { WhaleContext } from '../context.js'\nimport type { WhaleClient } from '../../client.js'\n\nexport function useWhaleClient(): WhaleClient {\n const ctx = useContext(WhaleContext)\n if (!ctx) throw new Error('useWhaleClient must be used within <WhaleProvider>')\n return ctx.client\n}\n","'use client'\n\nimport { useContext, useState, useEffect, useCallback } from 'react'\nimport { useStore } from 'zustand'\nimport { WhaleContext } from '../context.js'\nimport type { Order, CustomerAnalytics } from '../../types.js'\n\nexport function useCustomerOrders() {\n const ctx = useContext(WhaleContext)\n if (!ctx) throw new Error('useCustomerOrders must be used within <WhaleProvider>')\n\n const customer = useStore(ctx.authStore, (s) => s.customer)\n const [orders, setOrders] = useState<Order[]>([])\n const [loading, setLoading] = useState(false)\n\n const refresh = useCallback(async () => {\n if (!customer?.id) {\n setOrders([])\n return\n }\n setLoading(true)\n try {\n const data = await ctx.client.getCustomerOrders(customer.id)\n setOrders(data)\n } catch {\n setOrders([])\n } finally {\n setLoading(false)\n }\n }, [customer?.id, ctx.client])\n\n useEffect(() => {\n refresh()\n }, [refresh])\n\n return { orders, loading, refresh }\n}\n\nexport function useCustomerAnalytics() {\n const ctx = useContext(WhaleContext)\n if (!ctx) throw new Error('useCustomerAnalytics must be used within <WhaleProvider>')\n\n const customer = useStore(ctx.authStore, (s) => s.customer)\n const [analytics, setAnalytics] = useState<CustomerAnalytics | null>(null)\n const [loading, setLoading] = useState(false)\n\n useEffect(() => {\n if (!customer?.id) {\n setAnalytics(null)\n return\n }\n setLoading(true)\n const name = `${customer.first_name} ${customer.last_name}`.trim()\n ctx.client\n .getCustomerAnalytics(customer.id, name || undefined)\n .then(setAnalytics)\n .catch(() => setAnalytics(null))\n .finally(() => setLoading(false))\n }, [customer?.id, customer?.first_name, customer?.last_name, ctx.client])\n\n return { analytics, loading }\n}\n","'use client'\n\nimport { useContext, useState, useCallback } from 'react'\nimport { WhaleContext } from '../context.js'\nimport type { CheckoutSession, Order, Address, PaymentData } from '../../types.js'\n\nexport function useCheckout() {\n const ctx = useContext(WhaleContext)\n if (!ctx) throw new Error('useCheckout must be used within <WhaleProvider>')\n\n const [session, setSession] = useState<CheckoutSession | null>(null)\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState<Error | null>(null)\n\n const createSession = useCallback(async (params: {\n cart_id: string\n customer_email?: string\n shipping_address?: Address\n billing_address?: Address\n shipping_method_id?: string\n coupon_code?: string\n loyalty_reward_id?: string\n selected_product_id?: string\n }) => {\n setLoading(true)\n setError(null)\n try {\n const data = await ctx.client.createCheckoutSession(params)\n setSession(data)\n return data\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err))\n setError(e)\n throw e\n } finally {\n setLoading(false)\n }\n }, [ctx.client])\n\n const updateSession = useCallback(async (params: {\n customer_email?: string\n shipping_address?: Address\n billing_address?: Address\n shipping_method_id?: string\n coupon_code?: string\n }) => {\n if (!session) throw new Error('No active checkout session')\n setLoading(true)\n setError(null)\n try {\n const data = await ctx.client.updateCheckoutSession(session.id, params)\n setSession(data)\n return data\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err))\n setError(e)\n throw e\n } finally {\n setLoading(false)\n }\n }, [ctx.client, session])\n\n const complete = useCallback(async (payment?: PaymentData, opts?: {\n loyalty_reward_id?: string\n selected_product_id?: string\n }): Promise<Order> => {\n if (!session) throw new Error('No active checkout session')\n setLoading(true)\n setError(null)\n try {\n const order = await ctx.client.completeCheckout(session.id, payment, opts)\n setSession(null)\n return order\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err))\n setError(e)\n throw e\n } finally {\n setLoading(false)\n }\n }, [ctx.client, session])\n\n const reset = useCallback(() => {\n setSession(null)\n setError(null)\n }, [])\n\n return { session, loading, error, createSession, updateSession, complete, reset }\n}\n","'use client'\n\nimport { useContext, useState, useCallback } from 'react'\nimport { WhaleContext } from '../context.js'\nimport type { Product } from '../../types.js'\n\nexport interface SearchParams {\n query: string\n category_id?: string\n min_price?: number\n max_price?: number\n sort_by?: string\n sort_order?: 'asc' | 'desc'\n limit?: number\n}\n\nexport function useSearch() {\n const ctx = useContext(WhaleContext)\n if (!ctx) throw new Error('useSearch must be used within <WhaleProvider>')\n\n const [results, setResults] = useState<Product[]>([])\n const [hasMore, setHasMore] = useState(false)\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState<Error | null>(null)\n const [cursor, setCursor] = useState<string | undefined>(undefined)\n\n const search = useCallback(async (params: SearchParams) => {\n setLoading(true)\n setError(null)\n try {\n const data = await ctx.client.searchProducts(params)\n setResults(data.data)\n setHasMore(data.has_more)\n setCursor(data.data.length > 0 ? data.data[data.data.length - 1].id : undefined)\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err))\n setError(e)\n setResults([])\n setHasMore(false)\n } finally {\n setLoading(false)\n }\n }, [ctx.client])\n\n const loadMore = useCallback(async (params: SearchParams) => {\n if (!cursor || !hasMore) return\n setLoading(true)\n setError(null)\n try {\n const data = await ctx.client.searchProducts({ ...params, starting_after: cursor })\n setResults((prev) => [...prev, ...data.data])\n setHasMore(data.has_more)\n setCursor(data.data.length > 0 ? data.data[data.data.length - 1].id : undefined)\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err))\n setError(e)\n } finally {\n setLoading(false)\n }\n }, [ctx.client, cursor, hasMore])\n\n const clear = useCallback(() => {\n setResults([])\n setHasMore(false)\n setCursor(undefined)\n setError(null)\n }, [])\n\n return { results, hasMore, loading, error, search, loadMore, clear }\n}\n","'use client'\n\nimport { useContext, useState, useEffect, useCallback, useMemo } from 'react'\nimport { WhaleContext } from '../context.js'\nimport type { Category, CategoryTreeNode } from '../../types.js'\n\nfunction buildTree(categories: Category[]): CategoryTreeNode[] {\n const map = new Map<string, CategoryTreeNode>()\n const roots: CategoryTreeNode[] = []\n\n for (const cat of categories) {\n map.set(cat.id, { ...cat, children: [] })\n }\n\n for (const cat of categories) {\n const node = map.get(cat.id)!\n if (cat.parent_id && map.has(cat.parent_id)) {\n map.get(cat.parent_id)!.children.push(node)\n } else {\n roots.push(node)\n }\n }\n\n return roots\n}\n\nexport function useCategories() {\n const ctx = useContext(WhaleContext)\n if (!ctx) throw new Error('useCategories must be used within <WhaleProvider>')\n\n const [categories, setCategories] = useState<Category[]>([])\n const [loading, setLoading] = useState(true)\n const [error, setError] = useState<Error | null>(null)\n\n const refresh = useCallback(async () => {\n setLoading(true)\n setError(null)\n try {\n const data = await ctx.client.listCategories()\n setCategories(data.data)\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err))\n setError(e)\n setCategories([])\n } finally {\n setLoading(false)\n }\n }, [ctx.client])\n\n useEffect(() => {\n refresh()\n }, [refresh])\n\n const tree = useMemo(() => buildTree(categories), [categories])\n\n const getCategory = useCallback(async (id: string) => {\n return ctx.client.getCategory(id)\n }, [ctx.client])\n\n return { categories, tree, loading, error, refresh, getCategory }\n}\n","'use client'\n\nimport { useContext, useState, useEffect, useCallback } from 'react'\nimport { useStore } from 'zustand'\nimport { WhaleContext } from '../context.js'\nimport type { LoyaltyAccount, LoyaltyReward, LoyaltyTransaction, Product } from '../../types.js'\n\nexport function useLoyalty() {\n const ctx = useContext(WhaleContext)\n if (!ctx) throw new Error('useLoyalty must be used within <WhaleProvider>')\n\n const customer = useStore(ctx.authStore, (s) => s.customer)\n const [account, setAccount] = useState<LoyaltyAccount | null>(null)\n const [rewards, setRewards] = useState<LoyaltyReward[]>([])\n const [transactions, setTransactions] = useState<LoyaltyTransaction[]>([])\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState<Error | null>(null)\n\n const refresh = useCallback(async () => {\n if (!customer?.id) {\n setAccount(null)\n setRewards([])\n setTransactions([])\n return\n }\n setLoading(true)\n setError(null)\n try {\n const [acct, rwds, txns] = await Promise.all([\n ctx.client.getLoyaltyAccount(customer.id),\n ctx.client.listLoyaltyRewards(),\n ctx.client.listLoyaltyTransactions(customer.id),\n ])\n setAccount(acct)\n setRewards(rwds.data)\n setTransactions(txns.data)\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err))\n setError(e)\n } finally {\n setLoading(false)\n }\n }, [customer?.id, ctx.client])\n\n useEffect(() => {\n refresh()\n }, [refresh])\n\n const redeemReward = useCallback(async (rewardId: string) => {\n if (!customer?.id) throw new Error('Not authenticated')\n const result = await ctx.client.redeemLoyaltyReward(customer.id, rewardId)\n await refresh()\n return result\n }, [customer?.id, ctx.client, refresh])\n\n const fetchProductsByCategory = useCallback(async (category: string, locationId: string, tier?: string): Promise<Product[]> => {\n const res = await ctx.client.listLoyaltyProducts({ category, location_id: locationId, tier })\n return res.data\n }, [ctx.client])\n\n return { account, rewards, transactions, loading, error, refresh, redeemReward, fetchProductsByCategory }\n}\n","'use client'\n\nimport { useContext, useState, useEffect, useCallback } from 'react'\nimport { WhaleContext } from '../context.js'\nimport type { Review, ReviewSummary } from '../../types.js'\n\nexport function useReviews(productId: string | null | undefined) {\n const ctx = useContext(WhaleContext)\n if (!ctx) throw new Error('useReviews must be used within <WhaleProvider>')\n\n const [reviews, setReviews] = useState<Review[]>([])\n const [summary, setSummary] = useState<ReviewSummary | null>(null)\n const [hasMore, setHasMore] = useState(false)\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState<Error | null>(null)\n\n const refresh = useCallback(async () => {\n if (!productId) {\n setReviews([])\n setSummary(null)\n return\n }\n setLoading(true)\n setError(null)\n try {\n const data = await ctx.client.listProductReviews(productId)\n setReviews(data.data)\n setSummary(data.summary ?? null)\n setHasMore(data.has_more)\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err))\n setError(e)\n setReviews([])\n setSummary(null)\n } finally {\n setLoading(false)\n }\n }, [productId, ctx.client])\n\n useEffect(() => {\n refresh()\n }, [refresh])\n\n const loadMore = useCallback(async () => {\n if (!productId || !hasMore || reviews.length === 0) return\n setLoading(true)\n setError(null)\n try {\n const cursor = reviews[reviews.length - 1].id\n const data = await ctx.client.listProductReviews(productId, { starting_after: cursor })\n setReviews((prev) => [...prev, ...data.data])\n setHasMore(data.has_more)\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err))\n setError(e)\n } finally {\n setLoading(false)\n }\n }, [productId, ctx.client, hasMore, reviews])\n\n const submit = useCallback(async (data: {\n rating: number\n title?: string\n body?: string\n customer_name?: string\n }) => {\n if (!productId) throw new Error('No product ID provided')\n const review = await ctx.client.submitReview(productId, data)\n await refresh()\n return review\n }, [productId, ctx.client, refresh])\n\n return { reviews, summary, hasMore, loading, error, refresh, loadMore, submit }\n}\n","'use client'\n\nimport { useContext, useState, useEffect, useCallback } from 'react'\nimport { useStore } from 'zustand'\nimport { WhaleContext } from '../context.js'\nimport type { WishlistItem } from '../../types.js'\n\nexport function useWishlist() {\n const ctx = useContext(WhaleContext)\n if (!ctx) throw new Error('useWishlist must be used within <WhaleProvider>')\n\n const customer = useStore(ctx.authStore, (s) => s.customer)\n const [items, setItems] = useState<WishlistItem[]>([])\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState<Error | null>(null)\n\n const refresh = useCallback(async () => {\n if (!customer?.id) {\n setItems([])\n return\n }\n setLoading(true)\n setError(null)\n try {\n const data = await ctx.client.listWishlistItems(customer.id)\n setItems(data.data)\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err))\n setError(e)\n setItems([])\n } finally {\n setLoading(false)\n }\n }, [customer?.id, ctx.client])\n\n useEffect(() => {\n refresh()\n }, [refresh])\n\n const add = useCallback(async (productId: string) => {\n if (!customer?.id) throw new Error('Not authenticated')\n setError(null)\n try {\n const item = await ctx.client.addWishlistItem(customer.id, productId)\n setItems((prev) => [...prev, item])\n return item\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err))\n setError(e)\n throw e\n }\n }, [customer?.id, ctx.client])\n\n const remove = useCallback(async (productId: string) => {\n if (!customer?.id) throw new Error('Not authenticated')\n setError(null)\n try {\n await ctx.client.removeWishlistItem(customer.id, productId)\n setItems((prev) => prev.filter((item) => item.product_id !== productId))\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err))\n setError(e)\n throw e\n }\n }, [customer?.id, ctx.client])\n\n const has = useCallback((productId: string): boolean => {\n return items.some((item) => item.product_id === productId)\n }, [items])\n\n const toggle = useCallback(async (productId: string) => {\n if (has(productId)) {\n await remove(productId)\n } else {\n await add(productId)\n }\n }, [has, add, remove])\n\n return { items, loading, error, refresh, add, remove, has, toggle }\n}\n","'use client'\n\nimport { useContext, useState, useEffect, useCallback } from 'react'\nimport { WhaleContext } from '../context.js'\nimport type { Recommendation } from '../../types.js'\n\nexport function useRecommendations(params?: {\n product_id?: string\n customer_id?: string\n limit?: number\n type?: 'similar' | 'frequently_bought_together' | 'personalized'\n}) {\n const ctx = useContext(WhaleContext)\n if (!ctx) throw new Error('useRecommendations must be used within <WhaleProvider>')\n\n const [recommendations, setRecommendations] = useState<Recommendation[]>([])\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState<Error | null>(null)\n\n // Stable dependency key to avoid infinite re-renders\n const productId = params?.product_id\n const customerId = params?.customer_id\n const limit = params?.limit\n const type = params?.type\n\n const refresh = useCallback(async () => {\n setLoading(true)\n setError(null)\n try {\n const data = await ctx.client.getRecommendations({\n product_id: productId,\n customer_id: customerId,\n limit,\n type,\n })\n setRecommendations(data.data)\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err))\n setError(e)\n setRecommendations([])\n } finally {\n setLoading(false)\n }\n }, [ctx.client, productId, customerId, limit, type])\n\n useEffect(() => {\n refresh()\n }, [refresh])\n\n return { recommendations, loading, error, refresh }\n}\n","'use client'\n\nimport { useContext, useState, useEffect, useCallback } from 'react'\nimport { WhaleContext } from '../context.js'\nimport type { Location } from '../../types.js'\n\nexport function useLocations() {\n const ctx = useContext(WhaleContext)\n if (!ctx) throw new Error('useLocations must be used within <WhaleProvider>')\n\n const [locations, setLocations] = useState<Location[]>([])\n const [loading, setLoading] = useState(true)\n const [error, setError] = useState<Error | null>(null)\n\n const refresh = useCallback(async () => {\n setLoading(true)\n setError(null)\n try {\n const data = await ctx.client.listLocations()\n setLocations(data.data)\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err))\n setError(e)\n setLocations([])\n } finally {\n setLoading(false)\n }\n }, [ctx.client])\n\n useEffect(() => {\n refresh()\n }, [refresh])\n\n const getLocation = useCallback(async (id: string) => {\n return ctx.client.getLocation(id)\n }, [ctx.client])\n\n return { locations, loading, error, refresh, getLocation }\n}\n","'use client'\n\nimport { useContext, useState, useEffect, useCallback } from 'react'\nimport { WhaleContext } from '../context.js'\nimport type { ShippingMethod, ShippingRate, Address } from '../../types.js'\n\nexport function useShipping() {\n const ctx = useContext(WhaleContext)\n if (!ctx) throw new Error('useShipping must be used within <WhaleProvider>')\n\n const [methods, setMethods] = useState<ShippingMethod[]>([])\n const [rates, setRates] = useState<ShippingRate[]>([])\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState<Error | null>(null)\n\n const refreshMethods = useCallback(async () => {\n setLoading(true)\n setError(null)\n try {\n const data = await ctx.client.listShippingMethods()\n setMethods(data.data)\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err))\n setError(e)\n setMethods([])\n } finally {\n setLoading(false)\n }\n }, [ctx.client])\n\n useEffect(() => {\n refreshMethods()\n }, [refreshMethods])\n\n const calculateRates = useCallback(async (params: {\n cart_id: string\n shipping_address: Address\n }) => {\n setLoading(true)\n setError(null)\n try {\n const data = await ctx.client.calculateShippingRates(params)\n setRates(data.data)\n return data.data\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err))\n setError(e)\n setRates([])\n throw e\n } finally {\n setLoading(false)\n }\n }, [ctx.client])\n\n return { methods, rates, loading, error, refreshMethods, calculateRates }\n}\n","'use client'\n\nimport { useContext, useState, useCallback } from 'react'\nimport { WhaleContext } from '../context.js'\nimport type { DealValidation, Cart } from '../../types.js'\n\nexport function useDeals() {\n const ctx = useContext(WhaleContext)\n if (!ctx) throw new Error('useDeals must be used within <WhaleProvider>')\n\n const [validation, setValidation] = useState<DealValidation | null>(null)\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState<Error | null>(null)\n\n const validate = useCallback(async (code: string, cartId?: string): Promise<DealValidation> => {\n setLoading(true)\n setError(null)\n try {\n const result = await ctx.client.validateDeal(code, cartId ? { cart_id: cartId } : undefined)\n setValidation(result)\n return result\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err))\n setError(e)\n setValidation(null)\n throw e\n } finally {\n setLoading(false)\n }\n }, [ctx.client])\n\n const apply = useCallback(async (cartId: string, code: string): Promise<Cart> => {\n setLoading(true)\n setError(null)\n try {\n const cart = await ctx.client.applyDeal(cartId, code)\n return cart\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err))\n setError(e)\n throw e\n } finally {\n setLoading(false)\n }\n }, [ctx.client])\n\n const remove = useCallback(async (cartId: string): Promise<Cart> => {\n setLoading(true)\n setError(null)\n try {\n const cart = await ctx.client.removeDeal(cartId)\n setValidation(null)\n return cart\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err))\n setError(e)\n throw e\n } finally {\n setLoading(false)\n }\n }, [ctx.client])\n\n const clear = useCallback(() => {\n setValidation(null)\n setError(null)\n }, [])\n\n return { validation, loading, error, validate, apply, remove, clear }\n}\n\n/** @deprecated Use useDeals instead */\nexport const useCoupons = useDeals\n","'use client'\n\nimport { useContext, useState, useEffect, useCallback } from 'react'\nimport { useStore } from 'zustand'\nimport { WhaleContext } from '../context.js'\nimport type { ReferralStatus } from '../../types.js'\n\nexport function useReferral() {\n const ctx = useContext(WhaleContext)\n if (!ctx) throw new Error('useReferral must be used within <WhaleProvider>')\n\n const customer = useStore(ctx.authStore, (s) => s.customer)\n const [status, setStatus] = useState<ReferralStatus | null>(null)\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState<Error | null>(null)\n\n const refresh = useCallback(async () => {\n if (!customer?.id) {\n setStatus(null)\n return\n }\n setLoading(true)\n setError(null)\n try {\n const result = await ctx.client.getReferralStatus(customer.id)\n setStatus(result)\n } catch (err) {\n setError(err instanceof Error ? err : new Error(String(err)))\n } finally {\n setLoading(false)\n }\n }, [customer?.id, ctx.client])\n\n useEffect(() => {\n refresh()\n }, [refresh])\n\n const enroll = useCallback(async () => {\n if (!customer?.id) throw new Error('Not authenticated')\n setLoading(true)\n setError(null)\n try {\n const result = await ctx.client.enrollReferral(customer.id)\n await refresh()\n return result\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err))\n setError(e)\n throw e\n } finally {\n setLoading(false)\n }\n }, [customer?.id, ctx.client, refresh])\n\n const attributeReferral = useCallback(\n async (code: string) => {\n if (!customer?.id) throw new Error('Not authenticated')\n setLoading(true)\n setError(null)\n try {\n const result = await ctx.client.attributeReferral(customer.id, code)\n await refresh()\n return result\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err))\n setError(e)\n throw e\n } finally {\n setLoading(false)\n }\n },\n [customer?.id, ctx.client, refresh],\n )\n\n // Auto-attribute if URL has ?code= OR localStorage has whale_ref_code\n // The code is persisted to localStorage on the /refer page so it survives the auth redirect\n useEffect(() => {\n if (!customer?.id || !status || status.referred_by) return\n if (typeof window === 'undefined') return\n const params = new URLSearchParams(window.location.search)\n const code = params.get('code') || localStorage.getItem('whale_ref_code')\n if (!code) return\n ctx.client.attributeReferral(customer.id, code).then(() => {\n localStorage.removeItem('whale_ref_code')\n refresh()\n }).catch(() => {})\n }, [customer?.id, status, ctx.client, refresh])\n\n const share = useCallback(async () => {\n if (!status?.share_url) throw new Error('Not enrolled in referral program')\n const shareData = {\n title: 'Check this out!',\n text: `Use my referral code ${status.referral_code} for rewards!`,\n url: status.share_url,\n }\n if (typeof navigator !== 'undefined' && navigator.share) {\n try {\n await navigator.share(shareData)\n return\n } catch {\n // Fall through to clipboard\n }\n }\n if (typeof navigator !== 'undefined' && navigator.clipboard) {\n await navigator.clipboard.writeText(status.share_url)\n }\n }, [status])\n\n return {\n status,\n loading,\n error,\n enroll,\n refresh,\n share,\n attributeReferral,\n referralCode: status?.referral_code ?? null,\n shareUrl: status?.share_url ?? null,\n isEnrolled: status?.enrolled ?? false,\n referredBy: status?.referred_by ?? null,\n }\n}\n","'use client'\n\nimport { useState } from 'react'\nimport type { LandingSection } from '../../types.js'\n\n// ─── Theme ────────────────────────────────────────────────────────────────────\n\nexport interface SectionTheme {\n bg: string\n fg: string\n accent: string\n surface: string\n muted: string\n fontDisplay?: string\n fontBody?: string\n}\n\n// ─── Click tracking context ───────────────────────────────────────────────────\n\nexport interface ClickTrackingContext {\n gatewayUrl?: string\n code?: string\n}\n\nfunction trackClick(tracking: ClickTrackingContext | undefined, label: string, url: string, position?: number) {\n if (!tracking?.gatewayUrl || !tracking?.code) return\n const body = JSON.stringify({ label, url, position })\n if (typeof navigator !== 'undefined' && navigator.sendBeacon) {\n navigator.sendBeacon(\n `${tracking.gatewayUrl}/q/${encodeURIComponent(tracking.code)}/click`,\n new Blob([body], { type: 'application/json' }),\n )\n }\n}\n\n// ─── Shared data shape passed to all section renderers ────────────────────────\n\nexport interface SectionData {\n store?: { id?: string; name?: string | null; logo_url?: string | null; tagline?: string | null; theme?: Record<string, unknown> | null } | null\n product?: Record<string, unknown> | null\n coa?: { url: string; viewer_url?: string | null; document_name: string } | null\n gatewayUrl?: string\n landing_page?: { slug?: string } | null\n}\n\n// ─── Section Router ───────────────────────────────────────────────────────────\n\nexport function SectionRenderer({\n section,\n data,\n theme,\n tracking,\n}: {\n section: LandingSection\n data: SectionData\n theme: SectionTheme\n tracking?: ClickTrackingContext\n}) {\n const [showCOA, setShowCOA] = useState(false)\n\n const el = (() => {\n switch (section.type) {\n case 'hero': return <HeroSection section={section} theme={theme} tracking={tracking} />\n case 'text': return <TextSection section={section} theme={theme} />\n case 'image': return <ImageSection section={section} theme={theme} />\n case 'video': return <VideoSection section={section} theme={theme} />\n case 'gallery': return <GallerySection section={section} theme={theme} />\n case 'cta': return <CTASection section={section} theme={theme} tracking={tracking} />\n case 'stats': return <StatsSection section={section} theme={theme} />\n case 'product_card': return <ProductCardSection section={section} data={data} theme={theme} tracking={tracking} />\n case 'coa_viewer': return <COAViewerSection section={section} data={data} theme={theme} onShowCOA={() => setShowCOA(true)} tracking={tracking} />\n case 'social_links': return <SocialLinksSection section={section} theme={theme} />\n case 'lead_capture': return <LeadCaptureSection section={section} data={data} theme={theme} />\n case 'divider': return <DividerSection theme={theme} />\n default: return null\n }\n })()\n\n return (\n <>\n {el}\n {showCOA && data?.coa && <COAModal coa={data.coa} theme={theme} onClose={() => setShowCOA(false)} />}\n </>\n )\n}\n\n// ─── Section Renderers ────────────────────────────────────────────────────────\n\nfunction HeroSection({ section, theme, tracking }: { section: LandingSection; theme: SectionTheme; tracking?: ClickTrackingContext }) {\n const { title, subtitle, background_image, cta_text, cta_url } = section.content as {\n title?: string; subtitle?: string; background_image?: string; cta_text?: string; cta_url?: string\n }\n\n return (\n <div\n style={{\n position: 'relative',\n minHeight: '60vh',\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n alignItems: 'center',\n textAlign: 'center',\n padding: '3rem 1.5rem',\n backgroundImage: background_image ? `url(${background_image})` : undefined,\n backgroundSize: 'cover',\n backgroundPosition: 'center',\n }}\n >\n {background_image && (\n <div style={{ position: 'absolute', inset: 0, background: 'rgba(0,0,0,0.5)' }} />\n )}\n <div style={{ position: 'relative', zIndex: 1, maxWidth: 640 }}>\n {title && (\n <h1 style={{\n fontSize: 'clamp(2rem, 8vw, 3rem)',\n fontWeight: 300,\n fontFamily: theme.fontDisplay || 'inherit',\n margin: '0 0 1rem',\n lineHeight: 1.15,\n letterSpacing: '-0.02em',\n color: theme.fg,\n }}>\n {title}\n </h1>\n )}\n {subtitle && (\n <p style={{\n fontSize: '0.85rem',\n color: theme.accent,\n margin: '0 0 2rem',\n lineHeight: 1.6,\n textTransform: 'uppercase',\n letterSpacing: '0.15em',\n }}>\n {subtitle}\n </p>\n )}\n {cta_text && cta_url && (\n <a\n href={cta_url}\n onClick={() => trackClick(tracking, cta_text!, cta_url!)}\n style={{\n display: 'inline-block',\n padding: '0.875rem 2rem',\n background: theme.fg,\n color: theme.bg,\n textDecoration: 'none',\n fontSize: '0.85rem',\n fontWeight: 500,\n letterSpacing: '0.08em',\n textTransform: 'uppercase',\n }}\n >\n {cta_text}\n </a>\n )}\n </div>\n </div>\n )\n}\n\nfunction TextSection({ section, theme }: { section: LandingSection; theme: SectionTheme }) {\n const { heading, body } = section.content as { heading?: string; body?: string }\n const align = (section.config?.align as string) || 'left'\n\n return (\n <div style={{ padding: '2rem 1.5rem', maxWidth: 640, margin: '0 auto', textAlign: align as 'left' | 'center' | 'right' }}>\n {heading && (\n <h2 style={{\n fontSize: 11,\n fontWeight: 500,\n textTransform: 'uppercase',\n letterSpacing: '0.25em',\n color: `${theme.fg}40`,\n margin: '0 0 0.75rem',\n }}>\n {heading}\n </h2>\n )}\n {body && (\n <div style={{ color: `${theme.fg}99`, lineHeight: 1.7, fontSize: '0.9rem', fontWeight: 300, whiteSpace: 'pre-wrap' }}>\n {body}\n </div>\n )}\n </div>\n )\n}\n\nfunction ImageSection({ section, theme }: { section: LandingSection; theme: SectionTheme }) {\n const { url, alt, caption } = section.content as { url?: string; alt?: string; caption?: string }\n const contained = section.config?.contained !== false\n\n if (!url) return null\n\n return (\n <div style={{ padding: contained ? '1.5rem' : 0, maxWidth: contained ? 640 : undefined, margin: contained ? '0 auto' : undefined }}>\n <img\n src={url}\n alt={alt || ''}\n style={{ width: '100%', display: 'block', objectFit: 'cover' }}\n />\n {caption && (\n <p style={{ fontSize: '0.8rem', color: theme.muted, textAlign: 'center', marginTop: '0.75rem' }}>\n {caption}\n </p>\n )}\n </div>\n )\n}\n\nfunction VideoSection({ section, theme }: { section: LandingSection; theme: SectionTheme }) {\n const { url, poster } = section.content as { url?: string; poster?: string }\n\n if (!url) return null\n\n const isEmbed = url.includes('youtube') || url.includes('youtu.be') || url.includes('vimeo')\n\n return (\n <div style={{ padding: '1.5rem', maxWidth: 640, margin: '0 auto' }}>\n {isEmbed ? (\n <div style={{ position: 'relative', paddingBottom: '56.25%', height: 0 }}>\n <iframe\n src={toEmbedUrl(url)}\n style={{ position: 'absolute', top: 0, left: 0, width: '100%', height: '100%', border: 'none' }}\n allow=\"autoplay; fullscreen\"\n title=\"Video\"\n />\n </div>\n ) : (\n <video\n src={url}\n poster={poster}\n controls\n style={{ width: '100%', display: 'block', background: theme.surface }}\n />\n )}\n </div>\n )\n}\n\nfunction GallerySection({ section, theme }: { section: LandingSection; theme: SectionTheme }) {\n const { images } = section.content as { images?: Array<{ url: string; alt?: string }> }\n const columns = (section.config?.columns as number) || 3\n\n if (!images || images.length === 0) return null\n\n return (\n <div style={{ padding: '1.5rem', maxWidth: 800, margin: '0 auto' }}>\n <div style={{ display: 'grid', gridTemplateColumns: `repeat(${columns}, 1fr)`, gap: '0.5rem' }}>\n {images.map((img, i) => (\n <div key={i} style={{ aspectRatio: '1', overflow: 'hidden', background: theme.surface }}>\n <img\n src={img.url}\n alt={img.alt || ''}\n style={{ width: '100%', height: '100%', objectFit: 'cover', display: 'block' }}\n />\n </div>\n ))}\n </div>\n </div>\n )\n}\n\nfunction CTASection({ section, theme, tracking }: { section: LandingSection; theme: SectionTheme; tracking?: ClickTrackingContext }) {\n const { title, subtitle, buttons } = section.content as {\n title?: string; subtitle?: string\n buttons?: Array<{ text: string; url: string; style?: 'primary' | 'outline' }>\n }\n\n if (!buttons || buttons.length === 0) return null\n\n return (\n <div style={{ padding: '2rem 1.5rem', maxWidth: 480, margin: '0 auto', display: 'flex', flexDirection: 'column', gap: '0.75rem' }}>\n {title && (\n <h2 style={{\n fontSize: 'clamp(1.25rem, 4vw, 1.5rem)',\n fontWeight: 300,\n fontFamily: theme.fontDisplay || 'inherit',\n margin: '0 0 0.25rem',\n lineHeight: 1.2,\n letterSpacing: '-0.02em',\n color: theme.fg,\n textAlign: 'center',\n }}>\n {title}\n </h2>\n )}\n {subtitle && (\n <p style={{\n fontSize: '0.8rem',\n color: theme.accent,\n margin: '0 0 0.75rem',\n lineHeight: 1.6,\n textTransform: 'uppercase',\n letterSpacing: '0.15em',\n textAlign: 'center',\n }}>\n {subtitle}\n </p>\n )}\n {buttons.map((btn, i) => {\n const isPrimary = btn.style !== 'outline'\n return (\n <a\n key={i}\n href={btn.url}\n onClick={() => trackClick(tracking, btn.text, btn.url, i)}\n style={{\n display: 'block',\n width: '100%',\n padding: '0.875rem',\n background: isPrimary ? theme.fg : 'transparent',\n color: isPrimary ? theme.bg : theme.fg,\n border: isPrimary ? 'none' : `1px solid ${theme.fg}20`,\n fontSize: '0.85rem',\n fontWeight: 500,\n textAlign: 'center',\n textDecoration: 'none',\n boxSizing: 'border-box',\n letterSpacing: '0.08em',\n textTransform: 'uppercase',\n }}\n >\n {btn.text}\n </a>\n )\n })}\n </div>\n )\n}\n\nfunction StatsSection({ section, theme }: { section: LandingSection; theme: SectionTheme }) {\n const { stats } = section.content as { stats?: Array<{ label: string; value: string }> }\n const layout = section.config?.layout as string | undefined\n\n if (!stats || stats.length === 0) return null\n\n // List layout = vertical key-value pairs (for details like terpenes, batch, etc.)\n if (layout === 'list') {\n return (\n <div style={{ padding: '1.5rem', maxWidth: 640, margin: '0 auto' }}>\n {stats.map((stat, i) => (\n <div key={i}>\n <div style={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'baseline',\n padding: '0.625rem 0',\n }}>\n <span style={{\n fontSize: 12,\n textTransform: 'uppercase',\n letterSpacing: '0.15em',\n color: `${theme.fg}66`,\n }}>\n {stat.label}\n </span>\n <span style={{ fontSize: 14, fontWeight: 300, color: `${theme.fg}CC` }}>\n {stat.value}\n </span>\n </div>\n {i < stats.length - 1 && (\n <hr style={{ border: 'none', borderTop: `1px solid ${theme.fg}0A`, margin: 0 }} />\n )}\n </div>\n ))}\n </div>\n )\n }\n\n // Default = grid of stat cards (cannabinoids, etc.)\n const columns = Math.min(stats.length, 4)\n\n return (\n <div style={{ padding: '1.5rem', maxWidth: 640, margin: '0 auto' }}>\n <div style={{\n display: 'grid',\n gridTemplateColumns: `repeat(${columns}, 1fr)`,\n border: `1px solid ${theme.fg}0F`,\n }}>\n {stats.map((stat, i) => (\n <div key={i} style={{\n padding: '1.25rem 0.5rem',\n textAlign: 'center',\n borderRight: i < stats.length - 1 ? `1px solid ${theme.fg}0F` : undefined,\n }}>\n <div style={{\n fontFamily: theme.fontDisplay || 'inherit',\n fontSize: 'clamp(1.5rem, 5vw, 2rem)',\n fontWeight: 300,\n lineHeight: 1,\n color: theme.fg,\n }}>\n {stat.value}\n </div>\n <div style={{\n fontSize: 11,\n fontWeight: 500,\n textTransform: 'uppercase',\n letterSpacing: '0.25em',\n color: theme.accent,\n marginTop: '0.5rem',\n }}>\n {stat.label}\n </div>\n </div>\n ))}\n </div>\n </div>\n )\n}\n\nfunction ProductCardSection({ section, data, theme, tracking }: { section: LandingSection; data: SectionData; theme: SectionTheme; tracking?: ClickTrackingContext }) {\n const product = data?.product\n const c = section.content as { name?: string; description?: string; image_url?: string; url?: string }\n\n const name = c.name || (product?.name as string) || ''\n const description = c.description || (product?.description as string) || ''\n const imageUrl = c.image_url || (product?.featured_image as string) || null\n const url = c.url || null\n\n return (\n <div style={{ padding: '1.5rem', maxWidth: 480, margin: '0 auto' }}>\n <div style={{ background: theme.surface, overflow: 'hidden' }}>\n {imageUrl && (\n <div style={{ width: '100%', aspectRatio: '1', overflow: 'hidden' }}>\n <img src={imageUrl} alt={name} style={{ width: '100%', height: '100%', objectFit: 'cover', display: 'block' }} />\n </div>\n )}\n <div style={{ padding: '1.25rem' }}>\n <h3 style={{ fontSize: '1.25rem', fontWeight: 600, margin: '0 0 0.5rem', color: theme.fg }}>{name}</h3>\n {description && (\n <p style={{ fontSize: '0.9rem', color: theme.muted, margin: '0 0 1rem', lineHeight: 1.5 }}>{description}</p>\n )}\n {url && (\n <a\n href={url}\n onClick={() => trackClick(tracking, 'View Product', url!)}\n style={{\n display: 'block',\n width: '100%',\n padding: '0.75rem',\n background: theme.fg,\n color: theme.bg,\n textAlign: 'center',\n textDecoration: 'none',\n fontSize: '0.85rem',\n fontWeight: 500,\n boxSizing: 'border-box',\n letterSpacing: '0.08em',\n textTransform: 'uppercase',\n }}\n >\n View Product\n </a>\n )}\n </div>\n </div>\n </div>\n )\n}\n\nfunction COAViewerSection({\n section,\n data,\n theme,\n onShowCOA,\n tracking,\n}: { section: LandingSection; data: SectionData; theme: SectionTheme; onShowCOA: () => void; tracking?: ClickTrackingContext }) {\n const coa = data?.coa\n const c = section.content as { button_text?: string }\n\n if (!coa) return null\n\n const buttonStyle: React.CSSProperties = {\n width: '100%',\n padding: '0.875rem',\n background: theme.accent,\n color: theme.bg,\n border: 'none',\n fontSize: '0.85rem',\n fontWeight: 500,\n cursor: 'pointer',\n letterSpacing: '0.08em',\n textTransform: 'uppercase',\n textAlign: 'center',\n textDecoration: 'none',\n display: 'block',\n boxSizing: 'border-box',\n }\n\n // If a viewer URL exists (e.g. Quantix COA page), link directly to it.\n // Otherwise fall back to the iframe modal with the raw PDF.\n const buttonLabel = c.button_text || 'View Lab Results'\n\n if (coa.viewer_url) {\n return (\n <div style={{ padding: '1.5rem', maxWidth: 480, margin: '0 auto' }}>\n <a\n href={coa.viewer_url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n onClick={() => trackClick(tracking, buttonLabel, coa.viewer_url!)}\n style={buttonStyle}\n >\n {buttonLabel}\n </a>\n </div>\n )\n }\n\n return (\n <div style={{ padding: '1.5rem', maxWidth: 480, margin: '0 auto' }}>\n <button onClick={() => { trackClick(tracking, buttonLabel, coa.url); onShowCOA() }} style={buttonStyle}>\n {buttonLabel}\n </button>\n </div>\n )\n}\n\nfunction LeadCaptureSection({ section, data, theme }: { section: LandingSection; data: SectionData; theme: SectionTheme }) {\n const c = section.content as {\n heading?: string\n subtitle?: string\n button_text?: string\n success_heading?: string\n success_message?: string\n coupon_code?: string\n gateway_url?: string\n store_id?: string\n source?: string\n landing_page_slug?: string\n tags?: string[]\n }\n\n const [firstName, setFirstName] = useState('')\n const [email, setEmail] = useState('')\n const [status, setStatus] = useState<'idle' | 'loading' | 'success' | 'error'>('idle')\n const [errorMsg, setErrorMsg] = useState('')\n\n const gatewayUrl = c.gateway_url || data.gatewayUrl || 'https://whale-gateway.fly.dev'\n const storeId = c.store_id || data.store?.id\n const slug = c.landing_page_slug || (data.landing_page as { slug?: string } | null)?.slug\n\n async function handleSubmit(e: React.FormEvent) {\n e.preventDefault()\n if (!email || !storeId) return\n\n setStatus('loading')\n setErrorMsg('')\n\n try {\n const res = await fetch(`${gatewayUrl}/v1/stores/${storeId}/storefront/leads`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n email,\n first_name: firstName || undefined,\n source: c.source || 'landing_page',\n landing_page_slug: slug || undefined,\n tags: c.tags || undefined,\n }),\n })\n\n if (!res.ok) {\n const body = await res.json().catch(() => ({}))\n throw new Error((body as { error?: { message?: string } })?.error?.message || 'Something went wrong. Please try again.')\n }\n\n setStatus('success')\n } catch (err) {\n setErrorMsg(err instanceof Error ? err.message : 'Something went wrong. Please try again.')\n setStatus('error')\n }\n }\n\n const heading = c.heading || 'get 10% off your first visit.'\n const subtitle = c.subtitle || 'drop your email and we will send you the code.'\n const buttonText = c.button_text || 'Claim My Discount'\n const successHeading = c.success_heading || 'You\\u2019re in!'\n const successMessage = c.success_message || 'Check your inbox for the discount code.'\n\n const inputStyle: React.CSSProperties = {\n flex: 1,\n minWidth: 0,\n padding: '0.875rem 1rem',\n background: theme.surface,\n border: `1px solid ${theme.fg}15`,\n color: theme.fg,\n fontSize: '0.95rem',\n fontWeight: 300,\n outline: 'none',\n boxSizing: 'border-box',\n fontFamily: 'inherit',\n transition: 'border-color 0.2s',\n }\n\n return (\n <div style={{ padding: '3.5rem 1.5rem', maxWidth: 560, margin: '0 auto' }}>\n <style>{`@keyframes lc-spin { to { transform: rotate(360deg) } }`}</style>\n <div style={{\n background: theme.surface,\n border: `1px solid ${theme.fg}12`,\n padding: 'clamp(2rem, 6vw, 3rem)',\n }}>\n {status === 'success' ? (\n <div style={{ textAlign: 'center' }}>\n <h2 style={{\n fontSize: 'clamp(1.5rem, 5vw, 2rem)',\n fontWeight: 300,\n fontFamily: theme.fontDisplay || 'inherit',\n margin: '0 0 0.75rem',\n lineHeight: 1.2,\n letterSpacing: '-0.02em',\n color: theme.fg,\n }}>\n {successHeading}\n </h2>\n <p style={{\n fontSize: '0.9rem',\n color: `${theme.fg}99`,\n margin: '0 0 1.5rem',\n lineHeight: 1.6,\n fontWeight: 300,\n }}>\n {successMessage}\n </p>\n {c.coupon_code && (\n <div style={{\n display: 'inline-block',\n padding: '0.75rem 2rem',\n background: `${theme.fg}08`,\n border: `1px dashed ${theme.fg}30`,\n fontSize: 'clamp(1.25rem, 4vw, 1.75rem)',\n fontWeight: 500,\n fontFamily: 'monospace',\n letterSpacing: '0.12em',\n color: theme.accent,\n }}>\n {c.coupon_code}\n </div>\n )}\n </div>\n ) : (\n <>\n <div style={{ textAlign: 'center', marginBottom: 'clamp(1.5rem, 4vw, 2rem)' }}>\n <h2 style={{\n fontSize: 'clamp(1.5rem, 5vw, 2.25rem)',\n fontWeight: 300,\n fontFamily: theme.fontDisplay || 'inherit',\n margin: '0 0 0.5rem',\n lineHeight: 1.15,\n letterSpacing: '-0.02em',\n color: theme.fg,\n }}>\n {heading}\n </h2>\n <p style={{\n fontSize: '0.85rem',\n color: theme.accent,\n margin: 0,\n lineHeight: 1.6,\n textTransform: 'uppercase',\n letterSpacing: '0.15em',\n }}>\n {subtitle}\n </p>\n </div>\n\n <form onSubmit={handleSubmit} style={{ display: 'flex', flexDirection: 'column', gap: '0.75rem' }}>\n <div style={{ display: 'flex', gap: '0.75rem', flexWrap: 'wrap' }}>\n <input\n type=\"text\"\n placeholder=\"First name\"\n value={firstName}\n onChange={(e) => setFirstName(e.target.value)}\n style={inputStyle}\n />\n <input\n type=\"email\"\n placeholder=\"Email address\"\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n required\n style={inputStyle}\n />\n </div>\n\n {status === 'error' && errorMsg && (\n <p style={{ fontSize: '0.8rem', color: '#e55', margin: 0, fontWeight: 400 }}>\n {errorMsg}\n </p>\n )}\n\n <button\n type=\"submit\"\n disabled={status === 'loading'}\n style={{\n width: '100%',\n padding: '0.875rem',\n background: theme.fg,\n color: theme.bg,\n border: 'none',\n fontSize: '0.85rem',\n fontWeight: 500,\n cursor: status === 'loading' ? 'wait' : 'pointer',\n letterSpacing: '0.08em',\n textTransform: 'uppercase',\n fontFamily: 'inherit',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '0.5rem',\n opacity: status === 'loading' ? 0.7 : 1,\n transition: 'opacity 0.2s',\n }}\n >\n {status === 'loading' && (\n <span style={{\n display: 'inline-block',\n width: 16,\n height: 16,\n border: `2px solid ${theme.bg}40`,\n borderTopColor: theme.bg,\n borderRadius: '50%',\n animation: 'lc-spin 0.8s linear infinite',\n }} />\n )}\n {buttonText}\n </button>\n </form>\n </>\n )}\n </div>\n </div>\n )\n}\n\nfunction SocialLinksSection({ section, theme }: { section: LandingSection; theme: SectionTheme }) {\n const { links } = section.content as { links?: Array<{ platform: string; url: string }> }\n\n if (!links || links.length === 0) return null\n\n return (\n <div style={{ padding: '1.5rem', display: 'flex', justifyContent: 'center', gap: '1.5rem', flexWrap: 'wrap' }}>\n {links.map((link, i) => (\n <a\n key={i}\n href={link.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={{\n color: theme.muted,\n textDecoration: 'none',\n fontSize: '0.85rem',\n fontWeight: 500,\n textTransform: 'capitalize',\n letterSpacing: '0.03em',\n }}\n >\n {link.platform}\n </a>\n ))}\n </div>\n )\n}\n\nfunction DividerSection({ theme }: { theme: SectionTheme }) {\n return (\n <div style={{ padding: '1rem 1.5rem', maxWidth: 640, margin: '0 auto' }}>\n <hr style={{ border: 'none', borderTop: `1px solid ${theme.fg}0A`, margin: 0 }} />\n </div>\n )\n}\n\nfunction COAModal({ coa, theme, onClose }: {\n coa: { url: string; document_name: string }; theme: SectionTheme; onClose: () => void\n}) {\n return (\n <div style={{ position: 'fixed', inset: 0, zIndex: 9999, background: 'rgba(0,0,0,0.95)', display: 'flex', flexDirection: 'column' }}>\n <div style={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n padding: '0.75rem 1rem',\n borderBottom: `1px solid ${theme.fg}10`,\n }}>\n <span style={{ color: '#fff', fontWeight: 500, fontSize: '0.85rem' }}>\n {coa.document_name || 'Lab Results'}\n </span>\n <button\n onClick={onClose}\n style={{\n background: `${theme.fg}10`,\n border: 'none',\n color: '#fff',\n fontSize: '0.85rem',\n cursor: 'pointer',\n padding: '0.375rem 0.75rem',\n }}\n >\n Close\n </button>\n </div>\n <iframe src={coa.url} style={{ flex: 1, border: 'none', background: '#fff' }} title=\"Lab Results\" />\n </div>\n )\n}\n\n// ─── Helpers ──────────────────────────────────────────────────────────────────\n\nfunction toEmbedUrl(url: string): string {\n const ytMatch = url.match(/(?:youtube\\.com\\/watch\\?v=|youtu\\.be\\/)([\\w-]+)/)\n if (ytMatch) return `https://www.youtube.com/embed/${ytMatch[1]}`\n\n const vimeoMatch = url.match(/vimeo\\.com\\/(\\d+)/)\n if (vimeoMatch) return `https://player.vimeo.com/video/${vimeoMatch[1]}`\n\n return url\n}\n","'use client'\n\nimport { useEffect, useState } from 'react'\nimport type { QRLandingData, LandingSection, LandingPageConfig } from '../../types.js'\nimport { SectionRenderer, type SectionTheme, type ClickTrackingContext } from './section-renderer.js'\n\nexport interface QRLandingPageProps {\n code: string\n gatewayUrl?: string\n /** Override rendering for any section type */\n renderSection?: (section: LandingSection, defaultRenderer: () => React.ReactNode) => React.ReactNode\n onDataLoaded?: (data: QRLandingData) => void\n onError?: (error: Error) => void\n}\n\ntype LoadState = 'loading' | 'ready' | 'not_found' | 'expired' | 'error'\n\nexport function QRLandingPage({\n code,\n gatewayUrl = 'https://whale-gateway.fly.dev',\n renderSection,\n onDataLoaded,\n onError,\n}: QRLandingPageProps) {\n const [state, setState] = useState<LoadState>('loading')\n const [data, setData] = useState<QRLandingData | null>(null)\n const [errorMsg, setErrorMsg] = useState('')\n\n useEffect(() => {\n if (!code) return\n let cancelled = false\n\n async function load() {\n try {\n const res = await fetch(`${gatewayUrl}/q/${encodeURIComponent(code)}/page`)\n if (!cancelled) {\n if (res.status === 404) { setState('not_found'); return }\n if (res.status === 410) { setState('expired'); return }\n if (!res.ok) {\n const body = await res.json().catch(() => ({}))\n throw new Error(body?.error?.message ?? `Failed to load: ${res.status}`)\n }\n const json: QRLandingData = await res.json()\n setData(json)\n setState('ready')\n onDataLoaded?.(json)\n }\n } catch (err) {\n if (!cancelled) {\n const e = err instanceof Error ? err : new Error(String(err))\n setErrorMsg(e.message)\n setState('error')\n onError?.(e)\n }\n }\n }\n\n load()\n return () => { cancelled = true }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [code, gatewayUrl])\n\n if (state === 'loading') return <DefaultLoading />\n if (state === 'not_found') return <DefaultNotFound />\n if (state === 'expired') return <DefaultExpired />\n if (state === 'error') return <DefaultError message={errorMsg} />\n if (!data) return null\n\n // If a landing page template is linked, use its sections.\n // Otherwise, auto-generate sections from product/COA data.\n const lp = data.landing_page\n const sections = lp?.sections ?? buildDefaultSections(data)\n\n const theme = extractTheme(data, lp)\n const fontFamily = lp?.font_family\n || (data.store?.theme?.fontDisplay as string)\n || 'system-ui, -apple-system, sans-serif'\n\n const logoUrl = data.qr_code.logo_url || data.store?.logo_url\n const storeName = data.store?.name\n\n const sorted = [...sections].sort((a, b) => a.order - b.order)\n const tracking: ClickTrackingContext = { gatewayUrl, code }\n\n return (\n <div style={{ minHeight: '100dvh', background: theme.bg, color: theme.fg, fontFamily }}>\n {lp?.custom_css && <style>{lp.custom_css}</style>}\n\n {/* Header */}\n {logoUrl && (\n <div style={{ padding: '1.5rem', display: 'flex', justifyContent: 'center' }}>\n <img src={logoUrl} alt={storeName || 'Store'} style={{ height: 40, objectFit: 'contain' }} />\n </div>\n )}\n\n {/* Sections */}\n {sorted.map((section) => {\n const defaultRenderer = () => (\n <SectionRenderer key={section.id} section={section} data={data} theme={theme} tracking={tracking} />\n )\n\n if (renderSection) {\n return <div key={section.id}>{renderSection(section, defaultRenderer)}</div>\n }\n\n return <SectionRenderer key={section.id} section={section} data={data} theme={theme} tracking={tracking} />\n })}\n\n {/* Footer */}\n {storeName && (\n <div style={{ padding: '2rem 1.5rem', borderTop: `1px solid ${theme.surface}`, textAlign: 'center' }}>\n <p style={{ fontSize: '0.75rem', color: theme.muted, margin: 0 }}>\n {storeName}{data.store?.tagline ? ` — ${data.store.tagline}` : ''}\n </p>\n </div>\n )}\n </div>\n )\n}\n\n// ─── Theme Extraction ─────────────────────────────────────────────────────────\n\nfunction extractTheme(data: QRLandingData, lp: LandingPageConfig | null): SectionTheme {\n const t = data.store?.theme as Record<string, unknown> | null | undefined\n const qrLp = data.qr_code.landing_page\n return {\n bg: lp?.background_color || qrLp.background_color || (t?.background as string) || '#050505',\n fg: lp?.text_color || qrLp.text_color || (t?.foreground as string) || '#fafafa',\n accent: lp?.accent_color || (t?.accent as string) || '#E8E2D9',\n surface: (t?.surface as string) || '#111',\n muted: (t?.muted as string) || '#888',\n fontDisplay: (t?.fontDisplay as string) || 'system-ui, -apple-system, sans-serif',\n fontBody: (t?.fontBody as string) || 'system-ui, -apple-system, sans-serif',\n }\n}\n\n// ─── Default Sections Builder ─────────────────────────────────────────────────\n// When no landing page template is linked, generate sections from product data.\n\nfunction buildDefaultSections(data: QRLandingData): LandingSection[] {\n const { product, coa, qr_code: qr } = data\n const cf = product?.custom_fields as Record<string, unknown> | null | undefined\n const sections: LandingSection[] = []\n let order = 0\n\n const productName = qr.landing_page.title || (product?.name as string) || qr.name\n const productImage = qr.landing_page.image_url || (product?.featured_image as string) || null\n const description = (product?.description as string) || ''\n const categoryName = (product?.category_name as string) ?? null\n const strainType = toStr(cf?.strain_type)\n const tagline = toStr(cf?.tagline)\n\n // Hero — product image with name and category/strain subtitle (no CTA here)\n if (productImage) {\n sections.push({\n id: 'auto-hero',\n type: 'hero',\n order: order++,\n content: {\n title: productName,\n subtitle: [categoryName, strainType].filter(Boolean).join(' · '),\n background_image: productImage,\n },\n })\n } else {\n sections.push({\n id: 'auto-header',\n type: 'text',\n order: order++,\n content: {\n heading: productName,\n body: [categoryName, strainType].filter(Boolean).join(' · ') || undefined,\n },\n config: { align: 'center' },\n })\n }\n\n // Tagline\n if (tagline) {\n sections.push({\n id: 'auto-tagline',\n type: 'text',\n order: order++,\n content: { body: tagline },\n config: { align: 'center' },\n })\n }\n\n // Cannabinoid stats\n const thca = toNum(cf?.thca_percentage)\n const thc = toNum(cf?.d9_percentage)\n const cbd = toNum(cf?.cbd_total)\n const stats: Array<{ label: string; value: string }> = []\n if (thca != null) stats.push({ label: 'THCa', value: `${thca.toFixed(thca >= 1 ? 1 : 2)}%` })\n if (thc != null) stats.push({ label: 'Δ9 THC', value: `${thc.toFixed(thc >= 1 ? 1 : 2)}%` })\n if (cbd != null) stats.push({ label: 'CBD', value: `${cbd.toFixed(cbd >= 1 ? 1 : 2)}%` })\n\n if (stats.length > 0) {\n sections.push({\n id: 'auto-stats',\n type: 'stats',\n order: order++,\n content: { stats },\n })\n }\n\n // Product details — genetics, terpenes, effects\n const profileDetails: Array<{ label: string; value: string }> = []\n const genetics = toStr(cf?.genetics)\n const terpenes = toStr(cf?.terpenes)\n const effects = toStr(cf?.effects)\n const flavorProfile = toStr(cf?.flavor_profile)\n const bestFor = toStr(cf?.best_for)\n\n if (genetics) profileDetails.push({ label: 'Genetics', value: genetics })\n if (terpenes) profileDetails.push({ label: 'Terpenes', value: terpenes })\n if (effects) profileDetails.push({ label: 'Effects', value: effects })\n if (flavorProfile) profileDetails.push({ label: 'Flavor', value: flavorProfile })\n if (bestFor) profileDetails.push({ label: 'Best For', value: bestFor })\n\n if (profileDetails.length > 0) {\n sections.push({\n id: 'auto-profile',\n type: 'stats',\n order: order++,\n content: { stats: profileDetails },\n config: { layout: 'list' },\n })\n }\n\n // Description\n if (description) {\n sections.push({\n id: 'auto-description',\n type: 'text',\n order: order++,\n content: { heading: 'About', body: description },\n })\n }\n\n // Lab results — single COA viewer button (the only \"View Lab Results\" on the page)\n if (coa) {\n sections.push({\n id: 'auto-coa',\n type: 'coa_viewer',\n order: order++,\n content: { button_text: 'View Lab Results' },\n })\n }\n\n // Batch & testing info — below the COA button for reference\n const labDetails: Array<{ label: string; value: string }> = []\n const batchNumber = toStr(cf?.batch_number)\n const dateTested = toStr(cf?.date_tested)\n\n if (batchNumber) labDetails.push({ label: 'Batch', value: batchNumber })\n if (dateTested) labDetails.push({ label: 'Tested', value: formatDate(dateTested) })\n\n if (labDetails.length > 0) {\n sections.push({\n id: 'auto-lab-info',\n type: 'stats',\n order: order++,\n content: { stats: labDetails },\n config: { layout: 'list' },\n })\n }\n\n // Shop link — only if product has a slug (link to storefront product page, not COA)\n const productSlug = product?.slug as string | undefined\n if (productSlug) {\n const storeDomain = data.store?.name === 'Flora Distro' ? 'floradistro.com' : null\n if (storeDomain) {\n sections.push({\n id: 'auto-shop',\n type: 'cta',\n order: order++,\n content: {\n buttons: [{ text: 'Shop This Product', url: `https://${storeDomain}/shop/${productSlug}`, style: 'outline' as const }],\n },\n })\n }\n }\n\n return sections\n}\n\n// ─── Helpers ──────────────────────────────────────────────────────────────────\n\nfunction toNum(v: unknown): number | null {\n if (v === '' || v == null) return null\n const n = Number(v)\n return Number.isFinite(n) ? n : null\n}\n\nfunction toStr(v: unknown): string | null {\n if (v == null || v === '') return null\n return String(v)\n}\n\nfunction formatDate(dateStr: string): string {\n try {\n const d = new Date(dateStr + 'T00:00:00')\n return d.toLocaleDateString('en-US', { month: 'short', day: 'numeric', year: 'numeric' })\n } catch { return dateStr }\n}\n\n// ─── State Screens ────────────────────────────────────────────────────────────\n\nconst containerStyle: React.CSSProperties = {\n minHeight: '100dvh',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n fontFamily: 'system-ui, -apple-system, sans-serif',\n background: '#050505',\n color: '#fafafa',\n textAlign: 'center',\n padding: '2rem',\n}\n\nfunction DefaultLoading() {\n return (\n <div style={containerStyle}>\n <div>\n <div style={{ width: 32, height: 32, border: '2px solid #333', borderTopColor: '#fafafa', borderRadius: '50%', animation: 'spin 0.8s linear infinite', margin: '0 auto 1rem' }} />\n <style>{`@keyframes spin { to { transform: rotate(360deg) } }`}</style>\n </div>\n </div>\n )\n}\n\nfunction DefaultNotFound() {\n return (\n <div style={containerStyle}>\n <div>\n <h1 style={{ fontSize: '1.5rem', marginBottom: '0.5rem' }}>QR Code Not Found</h1>\n <p style={{ color: '#888' }}>This QR code does not exist or has been deactivated.</p>\n </div>\n </div>\n )\n}\n\nfunction DefaultExpired() {\n return (\n <div style={containerStyle}>\n <div>\n <h1 style={{ fontSize: '1.5rem', marginBottom: '0.5rem' }}>QR Code Expired</h1>\n <p style={{ color: '#888' }}>This QR code is no longer active.</p>\n </div>\n </div>\n )\n}\n\nfunction DefaultError({ message }: { message: string }) {\n return (\n <div style={containerStyle}>\n <div>\n <h1 style={{ fontSize: '1.5rem', marginBottom: '0.5rem' }}>Something Went Wrong</h1>\n <p style={{ color: '#888' }}>{message || 'Please try scanning again.'}</p>\n </div>\n </div>\n )\n}\n","'use client'\n\nimport { useEffect, useState } from 'react'\nimport type { LandingPageRenderData, LandingSection } from '../../types.js'\nimport { SectionRenderer, type SectionTheme } from './section-renderer.js'\n\nexport interface LandingPageProps {\n slug: string\n gatewayUrl?: string\n renderSection?: (section: LandingSection, defaultRenderer: () => React.ReactNode) => React.ReactNode\n onDataLoaded?: (data: LandingPageRenderData) => void\n onError?: (error: Error) => void\n}\n\ntype LoadState = 'loading' | 'ready' | 'not_found' | 'expired' | 'error'\n\nexport function LandingPage({\n slug,\n gatewayUrl = 'https://whale-gateway.fly.dev',\n renderSection,\n onDataLoaded,\n onError,\n}: LandingPageProps) {\n const [state, setState] = useState<LoadState>('loading')\n const [data, setData] = useState<LandingPageRenderData | null>(null)\n const [errorMsg, setErrorMsg] = useState('')\n\n useEffect(() => {\n if (!slug) return\n let cancelled = false\n\n async function load() {\n try {\n const res = await fetch(`${gatewayUrl}/l/${encodeURIComponent(slug)}`)\n if (!cancelled) {\n if (res.status === 404) { setState('not_found'); return }\n if (res.status === 410) { setState('expired'); return }\n if (!res.ok) {\n const body = await res.json().catch(() => ({}))\n throw new Error(body?.error?.message ?? `Failed to load: ${res.status}`)\n }\n const json: LandingPageRenderData = await res.json()\n setData(json)\n setState('ready')\n onDataLoaded?.(json)\n }\n } catch (err) {\n if (!cancelled) {\n const e = err instanceof Error ? err : new Error(String(err))\n setErrorMsg(e.message)\n setState('error')\n onError?.(e)\n }\n }\n }\n\n load()\n return () => { cancelled = true }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [slug, gatewayUrl])\n\n if (state === 'loading') return <DefaultLoading />\n if (state === 'not_found') return <DefaultNotFound />\n if (state === 'expired') return <DefaultExpired />\n if (state === 'error') return <DefaultError message={errorMsg} />\n if (!data) return null\n\n return <PageLayout data={data} gatewayUrl={gatewayUrl} renderSection={renderSection} />\n}\n\n// ─── Page Layout ──────────────────────────────────────────────────────────────\n\nfunction PageLayout({\n data,\n gatewayUrl,\n renderSection,\n}: {\n data: LandingPageRenderData\n gatewayUrl: string\n renderSection?: LandingPageProps['renderSection']\n}) {\n const { landing_page: lp, store } = data\n\n const theme: SectionTheme = {\n bg: lp.background_color || (store?.theme?.background as string) || '#050505',\n fg: lp.text_color || (store?.theme?.foreground as string) || '#fafafa',\n accent: lp.accent_color || (store?.theme?.accent as string) || '#E8E2D9',\n surface: (store?.theme?.surface as string) || '#111',\n muted: (store?.theme?.muted as string) || '#888',\n fontDisplay: (store?.theme?.fontDisplay as string) || undefined,\n fontBody: (store?.theme?.fontBody as string) || undefined,\n }\n\n const fontFamily = lp.font_family || theme.fontDisplay || 'system-ui, -apple-system, sans-serif'\n const logoUrl = store?.logo_url\n\n const sorted = [...lp.sections].sort((a, b) => a.order - b.order)\n\n const sectionData = { ...data, gatewayUrl, landing_page: { slug: lp.slug } }\n\n return (\n <div style={{ minHeight: '100dvh', background: theme.bg, color: theme.fg, fontFamily }}>\n {lp.custom_css && <style>{lp.custom_css}</style>}\n\n {logoUrl && (\n <div style={{ padding: '1.5rem', display: 'flex', justifyContent: 'center' }}>\n <img src={logoUrl} alt={store?.name || 'Store'} style={{ height: 40, objectFit: 'contain' }} />\n </div>\n )}\n\n {sorted.map((section) => {\n const defaultRenderer = () => (\n <SectionRenderer key={section.id} section={section} data={sectionData} theme={theme} />\n )\n\n if (renderSection) {\n return <div key={section.id}>{renderSection(section, defaultRenderer)}</div>\n }\n\n return <SectionRenderer key={section.id} section={section} data={sectionData} theme={theme} />\n })}\n\n {store?.name && (\n <div style={{ padding: '2rem 1.5rem', borderTop: `1px solid ${theme.surface}`, textAlign: 'center' }}>\n <p style={{ fontSize: '0.75rem', color: theme.muted, margin: 0 }}>\n Powered by {store.name}\n </p>\n </div>\n )}\n </div>\n )\n}\n\n// ─── State Screens ────────────────────────────────────────────────────────────\n\nconst containerStyle: React.CSSProperties = {\n minHeight: '100dvh',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n fontFamily: 'system-ui, -apple-system, sans-serif',\n background: '#050505',\n color: '#fafafa',\n textAlign: 'center',\n padding: '2rem',\n}\n\nfunction DefaultLoading() {\n return (\n <div style={containerStyle}>\n <div>\n <div style={{ width: 32, height: 32, border: '2px solid #333', borderTopColor: '#fafafa', borderRadius: '50%', animation: 'spin 0.8s linear infinite', margin: '0 auto 1rem' }} />\n <style>{`@keyframes spin { to { transform: rotate(360deg) } }`}</style>\n </div>\n </div>\n )\n}\n\nfunction DefaultNotFound() {\n return (\n <div style={containerStyle}>\n <div>\n <h1 style={{ fontSize: '1.5rem', marginBottom: '0.5rem' }}>Page Not Found</h1>\n <p style={{ color: '#888' }}>This page does not exist or has been removed.</p>\n </div>\n </div>\n )\n}\n\nfunction DefaultExpired() {\n return (\n <div style={containerStyle}>\n <div>\n <h1 style={{ fontSize: '1.5rem', marginBottom: '0.5rem' }}>Page Expired</h1>\n <p style={{ color: '#888' }}>This page is no longer active.</p>\n </div>\n </div>\n )\n}\n\nfunction DefaultError({ message }: { message: string }) {\n return (\n <div style={containerStyle}>\n <div>\n <h1 style={{ fontSize: '1.5rem', marginBottom: '0.5rem' }}>Something Went Wrong</h1>\n <p style={{ color: '#888' }}>{message || 'Please try again later.'}</p>\n </div>\n </div>\n )\n}\n"]}
1
+ {"version":3,"sources":["../../src/react/context.ts","../../src/react/stores/cart-store.ts","../../src/react/stores/auth-store.ts","../../src/react/hooks/use-analytics.ts","../../src/react/hooks/use-auth.ts","../../src/react/components/analytics-tracker.tsx","../../src/react/hooks/use-cart.ts","../../src/react/components/cart-initializer.tsx","../../src/react/components/auth-initializer.tsx","../../src/react/components/pixel-initializer.tsx","../../src/behavioral/tracker.ts","../../src/react/components/behavioral-tracker.tsx","../../src/fingerprint/collector.ts","../../src/react/components/fingerprint-collector.tsx","../../src/recording/recorder.ts","../../src/react/components/session-recorder.tsx","../../src/react/provider.tsx","../../src/react/hooks/use-products.ts","../../src/react/hooks/use-client.ts","../../src/react/hooks/use-customer.ts","../../src/react/hooks/use-checkout.ts","../../src/react/hooks/use-search.ts","../../src/react/hooks/use-categories.ts","../../src/react/hooks/use-loyalty.ts","../../src/react/hooks/use-reviews.ts","../../src/react/hooks/use-wishlist.ts","../../src/react/hooks/use-recommendations.ts","../../src/react/hooks/use-locations.ts","../../src/react/hooks/use-shipping.ts","../../src/react/hooks/use-coupons.ts","../../src/react/hooks/use-referral.ts","../../src/react/components/section-renderer.tsx","../../src/react/components/qr-landing-page.tsx","../../src/react/components/landing-page.tsx"],"names":["createStore","persist","useContext","useRef","useStore","useShallow","useEffect","now","SESSION_KEY_SUFFIX","VISITOR_KEY_SUFFIX","MAX_SESSION_WAIT_MS","SESSION_POLL_MS","useCallback","useMemo","useState","jsx","jsxs","DefaultLoading","DefaultNotFound","DefaultExpired","DefaultError","containerStyle"],"mappings":"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","file":"index.js","sourcesContent":["import { createContext } from 'react'\nimport type { WhaleClient } from '../client.js'\nimport type { Product } from '../types.js'\nimport type { CartStore } from './stores/cart-store.js'\nimport type { AuthStore } from './stores/auth-store.js'\nimport type { PixelManager } from '../pixels/pixel-manager.js'\n\nexport interface WhaleContextValue {\n client: WhaleClient\n config: {\n storeId: string\n apiKey: string\n gatewayUrl: string\n proxyPath: string\n mediaSigningSecret: string\n supabaseHost: string\n storagePrefix: string\n sessionTtl: number\n debug: boolean\n trackingEnabled: boolean\n recordingRate: number\n }\n cartStore: CartStore\n authStore: AuthStore\n /** Products fetched server-side and passed via provider */\n products: Product[]\n /** Pixel manager — set after storefront config loads */\n pixelManager: PixelManager | null\n}\n\nexport const WhaleContext = createContext<WhaleContextValue | null>(null)\n","import { createStore } from 'zustand/vanilla'\nimport { persist } from 'zustand/middleware'\nimport type { WhaleClient } from '../../client.js'\nimport type { Cart, CartItem, TaxBreakdown, PaymentData, Order } from '../../types.js'\n\nexport interface CartState {\n cartId: string | null\n items: CartItem[]\n itemCount: number\n subtotal: number\n taxAmount: number\n total: number\n taxBreakdown: TaxBreakdown[]\n cartOpen: boolean\n cartLoading: boolean\n productImages: Record<string, string>\n addItemInFlight: boolean\n}\n\nexport interface CartActions {\n openCart: () => void\n closeCart: () => void\n toggleCart: () => void\n initCart: () => Promise<void>\n syncCart: () => Promise<void>\n addItem: (\n productId: string,\n quantity: number,\n tier?: string,\n unitPrice?: number,\n imageUrl?: string | null,\n productName?: string\n ) => Promise<void>\n updateQuantity: (itemId: string, quantity: number) => Promise<void>\n removeItem: (itemId: string, productName?: string) => Promise<void>\n clearCart: () => void\n checkout: (customerEmail?: string, payment?: PaymentData) => Promise<Order>\n}\n\nexport type CartStore = ReturnType<typeof createCartStore>\n\nexport function createCartStore(\n client: WhaleClient,\n storagePrefix: string,\n onAddToCart?: (productId: string, productName: string, quantity: number, price: number, tier?: string) => void,\n onRemoveFromCart?: (productId: string, productName: string) => void,\n onCartChange?: (cartId: string, total: number, itemCount: number) => void,\n) {\n return createStore<CartState & CartActions>()(\n persist(\n (set, get) => ({\n // ── Initial state ────────────────────────────────────────────────\n cartId: null,\n items: [],\n itemCount: 0,\n subtotal: 0,\n taxAmount: 0,\n total: 0,\n taxBreakdown: [],\n cartOpen: false,\n cartLoading: false,\n productImages: {},\n addItemInFlight: false,\n\n // ── Cart UI ──────────────────────────────────────────────────────\n openCart: () => set({ cartOpen: true }),\n closeCart: () => set({ cartOpen: false }),\n toggleCart: () => set((s) => ({ cartOpen: !s.cartOpen })),\n\n // ── Cart data ────────────────────────────────────────────────────\n initCart: async () => {\n const { cartId, syncCart } = get()\n\n if (cartId) {\n try {\n await syncCart()\n } catch {\n const cart = await client.createCart()\n applyCart(set, get, cart)\n }\n return\n }\n\n try {\n const cart = await client.createCart()\n applyCart(set, get, cart)\n } catch (err) {\n console.error('[whale-storefront] initCart failed:', err)\n }\n },\n\n syncCart: async () => {\n const { cartId, productImages } = get()\n if (!cartId) return\n\n try {\n const cart = await client.getCart(cartId)\n const items = (cart.items ?? []).map((item) => ({\n ...item,\n image_url: item.image_url || productImages[item.product_id] || null,\n }))\n set({\n items,\n itemCount: cart.item_count ?? 0,\n subtotal: cart.subtotal ?? 0,\n taxAmount: cart.tax_amount ?? 0,\n total: cart.total ?? 0,\n taxBreakdown: cart.tax_breakdown ?? [],\n })\n } catch (err) {\n console.error('[whale-storefront] syncCart failed:', err)\n throw err\n }\n },\n\n addItem: async (productId, quantity, tier, unitPrice, imageUrl, productName) => {\n // Race-condition guard: prevent double-click\n if (get().addItemInFlight) return\n set({ cartLoading: true, addItemInFlight: true })\n\n try {\n let { cartId } = get()\n\n if (!cartId) {\n await get().initCart()\n cartId = get().cartId\n }\n\n if (!cartId) throw new Error('Could not initialise cart')\n\n if (imageUrl) {\n set((s) => ({ productImages: { ...s.productImages, [productId]: imageUrl } }))\n }\n\n try {\n await client.addToCart(cartId, productId, quantity, { tier, unitPrice })\n } catch (err: unknown) {\n // Cart expired (404/410) — auto-recover\n const status = (err as { status?: number }).status\n if (status === 404 || status === 410) {\n const newCart = await client.createCart()\n set({ cartId: newCart.id })\n await client.addToCart(newCart.id, productId, quantity, { tier, unitPrice })\n } else {\n throw err\n }\n }\n\n await get().syncCart()\n\n // Analytics callback\n onAddToCart?.(productId, productName || '', quantity, unitPrice || 0, tier)\n\n // Sync cart state to analytics session\n const state = get()\n if (state.cartId) onCartChange?.(state.cartId, state.total, state.itemCount)\n } finally {\n set({ cartLoading: false, addItemInFlight: false })\n }\n },\n\n updateQuantity: async (itemId, quantity) => {\n set({ cartLoading: true })\n try {\n const { cartId } = get()\n if (!cartId) return\n await client.updateCartItem(cartId, itemId, quantity)\n await get().syncCart()\n\n // Sync cart state to analytics session\n const state = get()\n if (state.cartId) onCartChange?.(state.cartId, state.total, state.itemCount)\n } finally {\n set({ cartLoading: false })\n }\n },\n\n removeItem: async (itemId, productName) => {\n set({ cartLoading: true })\n try {\n const { cartId, items } = get()\n if (!cartId) return\n\n const item = items.find((i) => i.id === itemId)\n await client.removeCartItem(cartId, itemId)\n await get().syncCart()\n\n if (item) {\n onRemoveFromCart?.(item.product_id, productName || item.product_name)\n }\n\n // Sync cart state to analytics session\n const state = get()\n if (state.cartId) onCartChange?.(state.cartId, state.total, state.itemCount)\n } finally {\n set({ cartLoading: false })\n }\n },\n\n clearCart: () => {\n set({\n cartId: null,\n items: [],\n itemCount: 0,\n subtotal: 0,\n taxAmount: 0,\n total: 0,\n taxBreakdown: [],\n productImages: {},\n })\n },\n\n checkout: async (customerEmail, payment) => {\n const { cartId } = get()\n if (!cartId) throw new Error('No active cart')\n\n set({ cartLoading: true })\n try {\n const order = await client.checkout(cartId, customerEmail, payment)\n set({\n cartId: null,\n items: [],\n itemCount: 0,\n subtotal: 0,\n taxAmount: 0,\n total: 0,\n taxBreakdown: [],\n productImages: {},\n cartOpen: false,\n })\n return order\n } finally {\n set({ cartLoading: false })\n }\n },\n }),\n\n // ── Persist config ─────────────────────────────────────────────────\n {\n name: `${storagePrefix}-cart`,\n partialize: (state) => ({\n cartId: state.cartId,\n productImages: state.productImages,\n }),\n }\n )\n )\n}\n\nfunction applyCart(\n set: (partial: Partial<CartState>) => void,\n get: () => CartState,\n cart: Cart\n) {\n const productImages = get().productImages\n const items = (cart.items ?? []).map((item) => ({\n ...item,\n image_url: item.image_url || productImages[item.product_id] || null,\n }))\n set({\n cartId: cart.id,\n items,\n itemCount: cart.item_count ?? 0,\n subtotal: cart.subtotal ?? 0,\n taxAmount: cart.tax_amount ?? 0,\n total: cart.total ?? 0,\n taxBreakdown: cart.tax_breakdown ?? [],\n })\n}\n","import { createStore } from 'zustand/vanilla'\nimport { persist } from 'zustand/middleware'\nimport type { WhaleClient } from '../../client.js'\nimport type { Customer } from '../../types.js'\n\nexport interface AuthState {\n customer: Customer | null\n sessionToken: string | null\n sessionExpiresAt: string | null\n authLoading: boolean\n}\n\nexport interface AuthActions {\n sendOTP: (email: string) => Promise<boolean>\n verifyOTP: (email: string, code: string) => Promise<boolean>\n updateProfile: (data: { first_name: string; last_name: string; phone?: string; date_of_birth?: string }) => Promise<void>\n restoreSession: () => Promise<void>\n isSessionValid: () => boolean\n logout: () => void\n fetchCustomer: (id: string) => Promise<void>\n}\n\nexport type AuthStore = ReturnType<typeof createAuthStore>\n\nexport function createAuthStore(client: WhaleClient, storagePrefix: string) {\n return createStore<AuthState & AuthActions>()(\n persist(\n (set, get) => ({\n // ── Initial state ────────────────────────────────────────────────\n customer: null,\n sessionToken: null,\n sessionExpiresAt: null,\n authLoading: false,\n\n // ── Actions ──────────────────────────────────────────────────────\n sendOTP: async (email) => {\n set({ authLoading: true })\n try {\n const res = await client.sendCode(email)\n return res.sent\n } catch (err) {\n const message = err instanceof Error ? err.message : 'Could not send code'\n throw new Error(message)\n } finally {\n set({ authLoading: false })\n }\n },\n\n verifyOTP: async (email, code) => {\n set({ authLoading: true })\n try {\n const res = await client.verifyCode(email, code)\n client.setSessionToken(res.token_hash)\n set({\n sessionToken: res.token_hash,\n sessionExpiresAt: new Date(Date.now() + 30 * 24 * 60 * 60 * 1000).toISOString(),\n })\n\n if (res.customer?.id) {\n try {\n const full = await client.getCustomer(res.customer.id)\n set({ customer: full })\n } catch {\n set({ customer: res.customer })\n }\n }\n\n return res.needs_profile ?? false\n } catch (err) {\n const message = err instanceof Error ? err.message : 'Verification failed'\n throw new Error(message)\n } finally {\n set({ authLoading: false })\n }\n },\n\n updateProfile: async (data) => {\n const customer = get().customer\n if (!customer?.id) throw new Error('Not authenticated')\n const updated = await client.updateProfile(customer.id, data)\n set({ customer: updated })\n },\n\n restoreSession: async () => {\n const { sessionToken, sessionExpiresAt, customer } = get()\n if (!sessionToken || !sessionExpiresAt) return\n\n if (new Date(sessionExpiresAt) <= new Date()) {\n client.setSessionToken(null)\n set({ sessionToken: null, sessionExpiresAt: null, customer: null })\n return\n }\n\n client.setSessionToken(sessionToken)\n\n if (customer?.id) {\n try {\n const fresh = await client.getCustomer(customer.id)\n set({ customer: fresh })\n } catch {\n client.setSessionToken(null)\n set({ sessionToken: null, sessionExpiresAt: null, customer: null })\n }\n }\n },\n\n isSessionValid: () => {\n const { sessionToken, sessionExpiresAt } = get()\n if (!sessionToken || !sessionExpiresAt) return false\n return new Date(sessionExpiresAt) > new Date()\n },\n\n logout: () => {\n client.setSessionToken(null)\n set({ customer: null, sessionToken: null, sessionExpiresAt: null })\n },\n\n fetchCustomer: async (id) => {\n try {\n const customer = await client.getCustomer(id)\n set({ customer })\n } catch (err) {\n console.error('[whale-storefront] fetchCustomer failed:', err)\n }\n },\n }),\n\n // ── Persist config ─────────────────────────────────────────────────\n {\n name: `${storagePrefix}-auth`,\n partialize: (state) => ({\n sessionToken: state.sessionToken,\n sessionExpiresAt: state.sessionExpiresAt,\n customer: state.customer\n ? {\n id: state.customer.id,\n email: state.customer.email,\n first_name: state.customer.first_name,\n last_name: state.customer.last_name,\n phone: state.customer.phone,\n loyalty_points: state.customer.loyalty_points,\n loyalty_tier: state.customer.loyalty_tier,\n total_spent: state.customer.total_spent,\n total_orders: state.customer.total_orders,\n }\n : null,\n }),\n }\n )\n )\n}\n","'use client'\n\nimport { useContext, useRef, useCallback } from 'react'\nimport { WhaleContext } from '../context.js'\nimport type { EventType } from '../../types.js'\n\nconst SESSION_KEY_SUFFIX = '-analytics-session'\nconst VISITOR_KEY_SUFFIX = '-visitor-id'\n\ninterface SessionData {\n id: string\n createdAt: number\n}\n\n/** Parse UTM parameters, gclid, and fbclid from the current URL. */\nfunction parseMarketingParams(): Record<string, string> {\n if (typeof window === 'undefined') return {}\n const params = new URLSearchParams(window.location.search)\n const result: Record<string, string> = {}\n for (const key of ['utm_source', 'utm_medium', 'utm_campaign', 'utm_content', 'utm_term', 'gclid', 'fbclid']) {\n const val = params.get(key)\n if (val) result[key] = val\n }\n return result\n}\n\n/** Get or create a persistent visitor ID. */\nfunction getVisitorId(prefix: string): string {\n const key = `${prefix}${VISITOR_KEY_SUFFIX}`\n try {\n const existing = localStorage.getItem(key)\n if (existing) return existing\n } catch {}\n const id = `v-${Date.now()}-${Math.random().toString(36).slice(2, 10)}`\n try { localStorage.setItem(key, id) } catch {}\n return id\n}\n\n/** Detect device type from user agent. */\nfunction detectDevice(): string {\n if (typeof navigator === 'undefined') return 'unknown'\n const ua = navigator.userAgent\n if (/Mobi|Android/i.test(ua)) return 'mobile'\n if (/Tablet|iPad/i.test(ua)) return 'tablet'\n return 'desktop'\n}\n\nexport function useAnalytics() {\n const ctx = useContext(WhaleContext)\n if (!ctx) throw new Error('useAnalytics must be used within <WhaleProvider>')\n\n const { client, config, pixelManager } = ctx\n const sessionPromiseRef = useRef<Promise<string> | null>(null)\n const sessionKey = `${config.storagePrefix}${SESSION_KEY_SUFFIX}`\n\n const getOrCreateSession = useCallback(async (): Promise<string> => {\n if (sessionPromiseRef.current) return sessionPromiseRef.current\n\n sessionPromiseRef.current = (async () => {\n // Check stored session\n try {\n const raw = localStorage.getItem(sessionKey)\n if (raw) {\n const stored: SessionData = JSON.parse(raw)\n if (Date.now() - stored.createdAt < config.sessionTtl) {\n // Refresh last_active silently\n client.updateSession(stored.id, { last_active_at: new Date().toISOString() }).catch(() => {})\n return stored.id\n }\n }\n } catch {\n // ignore\n }\n\n // Create new\n try {\n const marketing = parseMarketingParams()\n const visitorId = getVisitorId(config.storagePrefix)\n const session = await client.createSession({\n visitor_id: visitorId,\n user_agent: navigator.userAgent,\n referrer: document.referrer || undefined,\n page_url: window.location.href,\n device: detectDevice(),\n ...marketing,\n })\n if (session?.id) {\n localStorage.setItem(sessionKey, JSON.stringify({ id: session.id, createdAt: Date.now() }))\n return session.id\n }\n } catch {\n // ignore\n }\n\n // Fallback local ID\n const fallbackId = `local-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`\n localStorage.setItem(sessionKey, JSON.stringify({ id: fallbackId, createdAt: Date.now() }))\n return fallbackId\n })()\n\n sessionPromiseRef.current.finally(() => {\n sessionPromiseRef.current = null\n })\n\n return sessionPromiseRef.current\n }, [client, config.sessionTtl, sessionKey])\n\n const trackingEnabled = config.trackingEnabled\n\n const track = useCallback(\n async (eventType: EventType, data: Record<string, unknown> = {}) => {\n if (!trackingEnabled) return\n\n // Generate shared event_id for Meta CAPI deduplication\n const eventId = crypto.randomUUID()\n\n // Fire pixel events instantly (client-side) with eventID for fbq dedup\n pixelManager?.track(eventType, { ...data, eventID: eventId })\n\n // Then fire gateway event (server-side attribution) with same event_id\n try {\n const sessionId = await getOrCreateSession()\n const visitorId = getVisitorId(config.storagePrefix)\n await client.trackEvent({\n session_id: sessionId,\n event_type: eventType,\n event_data: { ...data, event_id: eventId },\n visitor_id: visitorId,\n })\n } catch {\n // fire-and-forget\n }\n },\n [client, getOrCreateSession, pixelManager, trackingEnabled]\n )\n\n const linkCustomer = useCallback(\n async (customerId: string) => {\n if (!trackingEnabled) return\n try {\n const sessionId = await getOrCreateSession()\n if (sessionId.startsWith('local-')) return\n await client.updateSession(sessionId, { customer_id: customerId })\n } catch {\n // ignore\n }\n },\n [client, getOrCreateSession, trackingEnabled]\n )\n\n const updateSessionCart = useCallback(\n async (cartId: string, cartTotal: number, cartItemCount: number) => {\n if (!trackingEnabled) return\n try {\n const sessionId = await getOrCreateSession()\n if (sessionId.startsWith('local-')) return\n await client.updateSession(sessionId, {\n cart_id: cartId,\n cart_total: cartTotal,\n cart_item_count: cartItemCount,\n status: 'carting',\n })\n } catch {}\n },\n [client, getOrCreateSession, trackingEnabled]\n )\n\n const updateSessionOrder = useCallback(\n async (orderId: string) => {\n if (!trackingEnabled) return\n try {\n const sessionId = await getOrCreateSession()\n if (sessionId.startsWith('local-')) return\n await client.updateSession(sessionId, { order_id: orderId, status: 'converted' })\n } catch {}\n },\n [client, getOrCreateSession, trackingEnabled]\n )\n\n const trackPageView = useCallback(\n (url: string, referrer?: string) => {\n track('page_view', { url, referrer, page_url: url })\n },\n [track]\n )\n\n const trackProductView = useCallback(\n (productId: string, productName: string, category: string, price?: number) => {\n track('product_view', { product_id: productId, product_name: productName, category, price })\n },\n [track]\n )\n\n const trackCategoryView = useCallback(\n (categoryId: string, categoryName: string) => {\n track('category_view', { category_id: categoryId, category_name: categoryName })\n },\n [track]\n )\n\n const trackSearch = useCallback(\n (query: string, resultCount?: number) => {\n track('search', { query, result_count: resultCount })\n },\n [track]\n )\n\n const trackBeginCheckout = useCallback(\n (cartId: string, total: number, itemCount: number) => {\n track('begin_checkout', { cart_id: cartId, total, item_count: itemCount })\n },\n [track]\n )\n\n const trackPurchase = useCallback(\n (orderId: string, orderNumber: string, total: number) => {\n track('purchase', { order_id: orderId, order_number: orderNumber, total })\n },\n [track]\n )\n\n const trackAddToCart = useCallback(\n (productId: string, productName: string, quantity: number, price: number, tier?: string) => {\n track('add_to_cart', { product_id: productId, product_name: productName, quantity, price, tier })\n },\n [track]\n )\n\n const trackRemoveFromCart = useCallback(\n (productId: string, productName: string) => {\n track('remove_from_cart', { product_id: productId, product_name: productName })\n },\n [track]\n )\n\n return {\n track,\n trackPageView,\n trackProductView,\n trackCategoryView,\n trackSearch,\n trackBeginCheckout,\n trackPurchase,\n trackAddToCart,\n trackRemoveFromCart,\n linkCustomer,\n updateSessionCart,\n updateSessionOrder,\n getOrCreateSession,\n /** Whether tracking is globally enabled for this storefront */\n trackingEnabled,\n /** Configured recording sample rate (0–1) for behavioral session replays */\n recordingRate: config.recordingRate,\n }\n}\n","'use client'\n\nimport { useContext } from 'react'\nimport { useStore } from 'zustand'\nimport { useShallow } from 'zustand/react/shallow'\nimport { WhaleContext } from '../context.js'\n\nexport function useAuth() {\n const ctx = useContext(WhaleContext)\n if (!ctx) throw new Error('useAuth must be used within <WhaleProvider>')\n\n return useStore(ctx.authStore, useShallow((s) => ({\n customer: s.customer,\n authLoading: s.authLoading,\n sessionToken: s.sessionToken,\n isAuthenticated: s.isSessionValid(),\n sendCode: s.sendOTP,\n verifyCode: s.verifyOTP,\n updateProfile: s.updateProfile,\n restoreSession: s.restoreSession,\n logout: s.logout,\n fetchCustomer: s.fetchCustomer,\n })))\n}\n","'use client'\n\nimport { useEffect, useRef, useContext } from 'react'\nimport { WhaleContext } from '../context.js'\nimport { useAnalytics } from '../hooks/use-analytics.js'\nimport { useAuth } from '../hooks/use-auth.js'\n\n/**\n * Auto-tracks page views on pathname change and links customer sessions.\n * Rendered internally by WhaleProvider — storefronts don't need to add this manually.\n *\n * When `config.trackingEnabled` is false the component renders nothing and\n * skips all side-effects — the underlying hook guards individual calls too,\n * but short-circuiting here avoids session creation entirely.\n */\nexport function AnalyticsTracker({ pathname }: { pathname: string }) {\n const ctx = useContext(WhaleContext)\n const { trackPageView, linkCustomer } = useAnalytics()\n const { customer } = useAuth()\n const prevPathname = useRef<string | null>(null)\n const linkedCustomerId = useRef<string | null>(null)\n\n const trackingEnabled = ctx?.config.trackingEnabled ?? true\n\n // Track page views on route change\n useEffect(() => {\n if (!trackingEnabled) return\n if (pathname === prevPathname.current) return\n const referrer = prevPathname.current || (typeof document !== 'undefined' ? document.referrer : '')\n prevPathname.current = pathname\n const fullUrl = typeof window !== 'undefined' ? window.location.href : pathname\n trackPageView(fullUrl, referrer || undefined)\n }, [pathname, trackPageView, trackingEnabled])\n\n // Link customer session on login\n useEffect(() => {\n if (!trackingEnabled) return\n if (customer?.id && customer.id !== linkedCustomerId.current) {\n linkedCustomerId.current = customer.id\n linkCustomer(customer.id)\n }\n }, [customer?.id, linkCustomer, trackingEnabled])\n\n return null\n}\n","'use client'\n\nimport { useContext } from 'react'\nimport { useStore } from 'zustand'\nimport { useShallow } from 'zustand/react/shallow'\nimport { WhaleContext } from '../context.js'\nimport type { CartState, CartActions } from '../stores/cart-store.js'\n\ntype CartReturn = Pick<\n CartState & CartActions,\n 'cartId' | 'cartOpen' | 'cartLoading' | 'items' | 'itemCount' | 'subtotal' | 'taxAmount' | 'total' | 'taxBreakdown' | 'productImages' |\n 'addItem' | 'removeItem' | 'updateQuantity' | 'toggleCart' | 'openCart' | 'closeCart' | 'checkout' | 'initCart' | 'syncCart' | 'clearCart'\n>\n\nexport function useCart() {\n const ctx = useContext(WhaleContext)\n if (!ctx) throw new Error('useCart must be used within <WhaleProvider>')\n\n return useStore(ctx.cartStore, useShallow((s) => ({\n cartId: s.cartId,\n items: s.items,\n itemCount: s.itemCount,\n subtotal: s.subtotal,\n taxAmount: s.taxAmount,\n total: s.total,\n taxBreakdown: s.taxBreakdown,\n cartOpen: s.cartOpen,\n cartLoading: s.cartLoading,\n productImages: s.productImages,\n addItem: s.addItem,\n removeItem: s.removeItem,\n updateQuantity: s.updateQuantity,\n toggleCart: s.toggleCart,\n openCart: s.openCart,\n closeCart: s.closeCart,\n initCart: s.initCart,\n syncCart: s.syncCart,\n clearCart: s.clearCart,\n checkout: s.checkout,\n })))\n}\n\n/** Granular selector — only re-renders on count change */\nexport function useCartItemCount(): number {\n const ctx = useContext(WhaleContext)\n if (!ctx) throw new Error('useCartItemCount must be used within <WhaleProvider>')\n return useStore(ctx.cartStore, (s) => s.itemCount)\n}\n\n/** Granular selector — only re-renders on total change */\nexport function useCartTotal(): number {\n const ctx = useContext(WhaleContext)\n if (!ctx) throw new Error('useCartTotal must be used within <WhaleProvider>')\n return useStore(ctx.cartStore, (s) => s.total)\n}\n","'use client'\n\nimport { useEffect, useRef } from 'react'\nimport { useCart } from '../hooks/use-cart.js'\n\n/**\n * Hydrates cart from gateway on mount if a cartId is persisted.\n * Rendered internally by WhaleProvider.\n */\nexport function CartInitializer() {\n const { cartId, syncCart } = useCart()\n const initialized = useRef(false)\n\n useEffect(() => {\n if (initialized.current) return\n initialized.current = true\n if (cartId) {\n syncCart().catch(() => {\n // Cart may have expired — that's fine, addItem will auto-recover\n })\n }\n }, []) // eslint-disable-line react-hooks/exhaustive-deps\n\n return null\n}\n","'use client'\n\nimport { useEffect, useRef } from 'react'\nimport { useAuth } from '../hooks/use-auth.js'\n\n/**\n * Restores auth session on mount — syncs persisted token to client.\n * Rendered internally by WhaleProvider.\n */\nexport function AuthInitializer() {\n const { restoreSession } = useAuth()\n const restored = useRef(false)\n\n useEffect(() => {\n if (restored.current) return\n restored.current = true\n restoreSession()\n }, []) // eslint-disable-line react-hooks/exhaustive-deps\n\n return null\n}\n","'use client'\n\nimport { useEffect, useRef, useContext } from 'react'\nimport { WhaleContext } from '../context.js'\nimport { PixelManager } from '../../pixels/pixel-manager.js'\nimport type { StorefrontConfig } from '../../pixels/types.js'\n\nexport interface PixelInitializerProps {\n onReady: (manager: PixelManager) => void\n onTheme?: (theme: Record<string, unknown>) => void\n}\n\n/**\n * Fetches storefront config on mount and initializes pixel providers + theme.\n * Sets pixelManager on context so useAnalytics can dispatch events to it.\n * If the config includes a `theme` field, calls onTheme so the provider can apply it.\n * Rendered internally by WhaleProvider — storefronts don't need to add this manually.\n */\nexport function PixelInitializer({ onReady, onTheme }: PixelInitializerProps) {\n const ctx = useContext(WhaleContext)\n const initialized = useRef(false)\n\n useEffect(() => {\n if (!ctx || initialized.current) return\n if (typeof window === 'undefined') return\n initialized.current = true\n\n const { client } = ctx\n\n client.fetchStorefrontConfig().then(async (config: StorefrontConfig) => {\n // Apply theme if present\n if (config.theme && onTheme) {\n onTheme(config.theme)\n }\n\n // Initialize pixels if tracking is enabled\n if (ctx.config.trackingEnabled && config.pixels && config.pixels.length > 0) {\n const manager = new PixelManager(config.pixels)\n await manager.initialize()\n onReady(manager)\n }\n }).catch(() => {\n // Storefront config fetch failed — degrade silently\n })\n }, [ctx, onReady, onTheme])\n\n return null\n}\n","import type { BehavioralEvent, BehavioralBatch } from './types.js'\n\ninterface BehavioralTrackerConfig {\n sendBatch: (batch: BehavioralBatch) => Promise<void>\n sessionId: string\n visitorId: string\n flushIntervalMs?: number\n maxBufferSize?: number\n}\n\nconst SCROLL_MILESTONES = [25, 50, 75, 100] as const\nconst TIME_MILESTONES = [30, 60, 120, 300] as const\nconst MOUSE_THROTTLE_MS = 200\nconst MOUSE_BUFFER_MAX = 100\nconst RAGE_CLICK_COUNT = 3\nconst RAGE_CLICK_RADIUS = 50\nconst RAGE_CLICK_WINDOW_MS = 2000\nconst MAX_CLICK_HISTORY = 10\n\nexport class BehavioralTracker {\n private buffer: BehavioralEvent[] = []\n private config: Required<BehavioralTrackerConfig>\n private pageUrl = ''\n private pagePath = ''\n private flushTimer: ReturnType<typeof setInterval> | null = null\n private scrollMilestones = new Set<number>()\n private timeMilestones = new Set<number>()\n private timeTimers: ReturnType<typeof setTimeout>[] = []\n private exitIntentFired = false\n private startTime = 0\n private clickHistory: Array<{ x: number; y: number; t: number }> = []\n private mouseBuffer: Array<{ x: number; y: number; t: number }> = []\n private lastMouseTime = 0\n private listeners: Array<[EventTarget, string, EventListener]> = []\n private observer: IntersectionObserver | null = null\n private sentinels: HTMLElement[] = []\n\n constructor(config: BehavioralTrackerConfig) {\n this.config = {\n sendBatch: config.sendBatch,\n sessionId: config.sessionId,\n visitorId: config.visitorId,\n flushIntervalMs: config.flushIntervalMs ?? 10000,\n maxBufferSize: config.maxBufferSize ?? 500,\n }\n }\n\n start(): void {\n this.startTime = Date.now()\n\n this.addListener(document, 'click', this.handleClick)\n this.addListener(document, 'mousemove', this.handleMouseMove)\n this.addListener(document, 'mouseout', this.handleMouseOut)\n this.addListener(document, 'copy', this.handleCopy)\n this.addListener(document, 'visibilitychange', this.handleVisibilityChange)\n\n this.setupScrollTracking()\n this.setupTimeMilestones()\n\n this.flushTimer = setInterval(() => this.flush(), this.config.flushIntervalMs)\n }\n\n stop(): void {\n for (const [target, event, handler] of this.listeners) {\n target.removeEventListener(event, handler, { capture: true } as EventListenerOptions)\n }\n this.listeners = []\n\n if (this.flushTimer !== null) {\n clearInterval(this.flushTimer)\n this.flushTimer = null\n }\n\n this.clearTimeMilestones()\n this.cleanupScrollTracking()\n\n // Final flush with any remaining mouse data\n this.flushMouseBuffer()\n this.flush()\n }\n\n setPageContext(url: string, path: string): void {\n // Flush remaining data from previous page\n this.flushMouseBuffer()\n this.flush()\n\n this.pageUrl = url\n this.pagePath = path\n this.scrollMilestones.clear()\n this.timeMilestones.clear()\n this.exitIntentFired = false\n this.startTime = Date.now()\n this.clickHistory = []\n\n this.clearTimeMilestones()\n this.cleanupScrollTracking()\n\n this.setupTimeMilestones()\n // Delay scroll tracking setup to let the new page render\n requestAnimationFrame(() => this.setupScrollTracking())\n }\n\n // ---------------------------------------------------------------------------\n // Buffer management\n // ---------------------------------------------------------------------------\n\n private push(event: BehavioralEvent): void {\n this.buffer.push(event)\n if (this.buffer.length >= this.config.maxBufferSize) {\n this.flush()\n }\n }\n\n private flush(): void {\n if (this.buffer.length === 0) return\n\n const batch: BehavioralBatch = {\n session_id: this.config.sessionId,\n visitor_id: this.config.visitorId,\n events: this.buffer,\n }\n this.buffer = []\n\n this.config.sendBatch(batch).catch(() => {\n // sendBatch implementation handles retries and beacon fallback\n })\n }\n\n private addListener(target: EventTarget, event: string, handler: EventListener): void {\n target.addEventListener(event, handler, { passive: true, capture: true })\n this.listeners.push([target, event, handler])\n }\n\n // ---------------------------------------------------------------------------\n // Event handlers (arrow functions for stable `this`)\n // ---------------------------------------------------------------------------\n\n private handleClick = (e: Event): void => {\n const me = e as MouseEvent\n const target = me.target as Element | null\n if (!target) return\n\n const now = Date.now()\n const x = me.clientX\n const y = me.clientY\n\n // Record click for rage detection\n this.clickHistory.push({ x, y, t: now })\n if (this.clickHistory.length > MAX_CLICK_HISTORY) {\n this.clickHistory.shift()\n }\n\n // Standard click event\n const tag = target.tagName?.toLowerCase() ?? ''\n const rawText = (target as HTMLElement).textContent ?? ''\n const text = rawText.trim().slice(0, 50)\n\n this.push({\n data_type: 'click',\n data: {\n tag,\n text,\n selector: this.getSelector(target),\n x,\n y,\n timestamp: now,\n },\n page_url: this.pageUrl,\n page_path: this.pagePath,\n })\n\n // Rage click detection\n this.detectRageClick(x, y, now)\n }\n\n private handleMouseMove = (e: Event): void => {\n const me = e as MouseEvent\n const now = Date.now()\n\n if (now - this.lastMouseTime < MOUSE_THROTTLE_MS) return\n this.lastMouseTime = now\n\n this.mouseBuffer.push({ x: me.clientX, y: me.clientY, t: now })\n if (this.mouseBuffer.length > MOUSE_BUFFER_MAX) {\n this.mouseBuffer.shift()\n }\n }\n\n private handleMouseOut = (e: Event): void => {\n const me = e as MouseEvent\n if (this.exitIntentFired) return\n if (me.clientY > 0) return\n // Only fire when mouse actually leaves the document element (viewport top)\n if (me.relatedTarget !== null) return\n\n this.exitIntentFired = true\n this.push({\n data_type: 'exit_intent',\n data: {\n time_on_page_ms: Date.now() - this.startTime,\n timestamp: Date.now(),\n },\n page_url: this.pageUrl,\n page_path: this.pagePath,\n })\n }\n\n private handleCopy = (): void => {\n const selection = window.getSelection()\n const length = selection?.toString().length ?? 0\n\n this.push({\n data_type: 'copy',\n data: {\n text_length: length,\n timestamp: Date.now(),\n },\n page_url: this.pageUrl,\n page_path: this.pagePath,\n })\n }\n\n private handleVisibilityChange = (): void => {\n if (document.visibilityState !== 'hidden') return\n\n const timeSpent = Date.now() - this.startTime\n\n this.push({\n data_type: 'page_exit',\n data: {\n time_spent_ms: timeSpent,\n timestamp: Date.now(),\n },\n page_url: this.pageUrl,\n page_path: this.pagePath,\n })\n\n // Flush immediately — page may be closing\n this.flushMouseBuffer()\n this.flush()\n }\n\n // ---------------------------------------------------------------------------\n // Scroll tracking with IntersectionObserver\n // ---------------------------------------------------------------------------\n\n private setupScrollTracking(): void {\n if (typeof IntersectionObserver === 'undefined') return\n\n this.observer = new IntersectionObserver(\n (entries) => {\n for (const entry of entries) {\n if (!entry.isIntersecting) continue\n const milestone = Number(entry.target.getAttribute('data-scroll-milestone'))\n if (isNaN(milestone) || this.scrollMilestones.has(milestone)) continue\n\n this.scrollMilestones.add(milestone)\n this.push({\n data_type: 'scroll_depth',\n data: {\n depth_percent: milestone,\n timestamp: Date.now(),\n },\n page_url: this.pageUrl,\n page_path: this.pagePath,\n })\n }\n },\n { threshold: 0 },\n )\n\n const docHeight = document.documentElement.scrollHeight\n for (const pct of SCROLL_MILESTONES) {\n const sentinel = document.createElement('div')\n sentinel.setAttribute('data-scroll-milestone', String(pct))\n sentinel.style.position = 'absolute'\n sentinel.style.left = '0'\n sentinel.style.width = '1px'\n sentinel.style.height = '1px'\n sentinel.style.pointerEvents = 'none'\n sentinel.style.opacity = '0'\n sentinel.style.top = `${(docHeight * pct) / 100 - 1}px`\n document.body.appendChild(sentinel)\n this.sentinels.push(sentinel)\n this.observer.observe(sentinel)\n }\n }\n\n private cleanupScrollTracking(): void {\n if (this.observer) {\n this.observer.disconnect()\n this.observer = null\n }\n for (const sentinel of this.sentinels) {\n sentinel.remove()\n }\n this.sentinels = []\n }\n\n // ---------------------------------------------------------------------------\n // Time milestones\n // ---------------------------------------------------------------------------\n\n private setupTimeMilestones(): void {\n for (const seconds of TIME_MILESTONES) {\n const timer = setTimeout(() => {\n if (this.timeMilestones.has(seconds)) return\n this.timeMilestones.add(seconds)\n this.push({\n data_type: 'time_on_page',\n data: {\n milestone_seconds: seconds,\n timestamp: Date.now(),\n },\n page_url: this.pageUrl,\n page_path: this.pagePath,\n })\n }, seconds * 1000)\n this.timeTimers.push(timer)\n }\n }\n\n private clearTimeMilestones(): void {\n for (const timer of this.timeTimers) {\n clearTimeout(timer)\n }\n this.timeTimers = []\n }\n\n // ---------------------------------------------------------------------------\n // Rage click detection\n // ---------------------------------------------------------------------------\n\n private detectRageClick(x: number, y: number, now: number): void {\n const windowStart = now - RAGE_CLICK_WINDOW_MS\n const nearby = this.clickHistory.filter((c) => {\n if (c.t < windowStart) return false\n const dx = c.x - x\n const dy = c.y - y\n return Math.sqrt(dx * dx + dy * dy) <= RAGE_CLICK_RADIUS\n })\n\n if (nearby.length >= RAGE_CLICK_COUNT) {\n this.push({\n data_type: 'rage_click',\n data: {\n x,\n y,\n click_count: nearby.length,\n timestamp: now,\n },\n page_url: this.pageUrl,\n page_path: this.pagePath,\n })\n // Reset history to avoid repeat detections for the same burst\n this.clickHistory = []\n }\n }\n\n // ---------------------------------------------------------------------------\n // Mouse buffer flush\n // ---------------------------------------------------------------------------\n\n private flushMouseBuffer(): void {\n if (this.mouseBuffer.length === 0) return\n\n this.push({\n data_type: 'mouse_movement',\n data: {\n points: [...this.mouseBuffer],\n timestamp: Date.now(),\n },\n page_url: this.pageUrl,\n page_path: this.pagePath,\n })\n this.mouseBuffer = []\n }\n\n // ---------------------------------------------------------------------------\n // CSS selector helper\n // ---------------------------------------------------------------------------\n\n private getSelector(el: Element): string {\n const parts: string[] = []\n let current: Element | null = el\n let depth = 0\n\n while (current && depth < 3) {\n let segment = current.tagName.toLowerCase()\n\n if (current.id) {\n segment += `#${current.id}`\n } else if (current.classList.length > 0) {\n segment += `.${Array.from(current.classList).join('.')}`\n }\n\n parts.unshift(segment)\n current = current.parentElement\n depth++\n }\n\n return parts.join(' > ')\n }\n}\n","'use client'\n\nimport { useContext, useRef, useEffect } from 'react'\nimport { WhaleContext } from '../context.js'\nimport { BehavioralTracker } from '../../behavioral/tracker.js'\nimport type { BehavioralBatch } from '../../behavioral/types.js'\nimport { resilientSend } from '../../resilient-send.js'\n\nconst SESSION_KEY_SUFFIX = '-analytics-session'\nconst VISITOR_KEY_SUFFIX = '-visitor-id'\nconst MAX_SESSION_WAIT_MS = 10_000\nconst SESSION_POLL_MS = 500\n\nexport function BehavioralTrackerComponent({ pathname }: { pathname: string | null }) {\n const ctx = useContext(WhaleContext)\n const trackerRef = useRef<BehavioralTracker | null>(null)\n const initRef = useRef(false)\n\n // Mount once — never re-run this effect\n useEffect(() => {\n if (!ctx || !ctx.config.trackingEnabled) return\n if (typeof window === 'undefined') return\n\n const { config } = ctx\n let cancelled = false\n let pollTimer: ReturnType<typeof setTimeout> | null = null\n const startTime = Date.now()\n\n const readSessionId = (): string | null => {\n const key = `${config.storagePrefix}${SESSION_KEY_SUFFIX}`\n try {\n const raw = localStorage.getItem(key)\n if (raw) {\n const stored = JSON.parse(raw)\n return stored.id ?? null\n }\n } catch {}\n return null\n }\n\n const readVisitorId = (): string => {\n const key = `${config.storagePrefix}${VISITOR_KEY_SUFFIX}`\n try {\n const existing = localStorage.getItem(key)\n if (existing) return existing\n } catch {}\n const id = `v-${Date.now()}-${Math.random().toString(36).slice(2, 10)}`\n try { localStorage.setItem(key, id) } catch {}\n return id\n }\n\n const tryInit = () => {\n if (cancelled) return\n\n const sessionId = readSessionId()\n if (!sessionId) {\n if (Date.now() - startTime < MAX_SESSION_WAIT_MS) {\n pollTimer = setTimeout(tryInit, SESSION_POLL_MS)\n }\n return\n }\n\n initRef.current = true\n const visitorId = readVisitorId()\n const baseUrl = config.proxyPath\n const endpoint = `${baseUrl}/v1/stores/${config.storeId}/storefront/behavioral`\n\n const sendBatch = async (batch: BehavioralBatch): Promise<void> => {\n await resilientSend(endpoint, batch, {\n 'Content-Type': 'application/json',\n 'x-api-key': config.apiKey,\n })\n }\n\n const tracker = new BehavioralTracker({ sendBatch, sessionId, visitorId })\n tracker.start()\n trackerRef.current = tracker\n }\n\n tryInit()\n\n return () => {\n cancelled = true\n if (pollTimer) clearTimeout(pollTimer)\n if (trackerRef.current) {\n trackerRef.current.stop()\n trackerRef.current = null\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n // Update page context on pathname change\n useEffect(() => {\n if (!trackerRef.current || !pathname) return\n const url = typeof window !== 'undefined' ? window.location.href : pathname\n trackerRef.current.setPageContext(url, pathname)\n }, [pathname])\n\n return null\n}\n","export interface DeviceFingerprint {\n fingerprint_id: string\n canvas_fingerprint: string\n webgl_fingerprint: string\n audio_fingerprint: string\n screen_resolution: string\n platform: string\n timezone: string\n language: string\n hardware_concurrency: number\n device_memory: number | null\n color_depth: number\n pixel_ratio: number\n touch_support: boolean\n cookie_enabled: boolean\n do_not_track: string | null\n}\n\nasync function sha256(input: string): Promise<string> {\n const data = new TextEncoder().encode(input)\n const hash = await crypto.subtle.digest('SHA-256', data)\n return Array.from(new Uint8Array(hash))\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('')\n}\n\nasync function getCanvasFingerprint(): Promise<string> {\n try {\n const canvas = document.createElement('canvas')\n canvas.width = 256\n canvas.height = 256\n const ctx = canvas.getContext('2d')\n if (!ctx) return ''\n\n // Filled rect with gradient\n const gradient = ctx.createLinearGradient(0, 0, 256, 256)\n gradient.addColorStop(0, '#ff6b35')\n gradient.addColorStop(0.5, '#1a73e8')\n gradient.addColorStop(1, '#34a853')\n ctx.fillStyle = gradient\n ctx.fillRect(0, 0, 256, 256)\n\n // Text\n ctx.fillStyle = '#ffffff'\n ctx.font = '18px Arial'\n ctx.textBaseline = 'top'\n ctx.fillText('WhaleTools', 10, 10)\n\n // Arc / circle\n ctx.beginPath()\n ctx.arc(128, 128, 60, 0, Math.PI * 2)\n ctx.strokeStyle = '#fbbc04'\n ctx.lineWidth = 3\n ctx.stroke()\n\n // Line\n ctx.beginPath()\n ctx.moveTo(0, 0)\n ctx.lineTo(256, 256)\n ctx.strokeStyle = '#ea4335'\n ctx.lineWidth = 2\n ctx.stroke()\n\n const dataUrl = canvas.toDataURL()\n return sha256(dataUrl)\n } catch {\n return ''\n }\n}\n\nasync function getWebGLFingerprint(): Promise<string> {\n try {\n const canvas = document.createElement('canvas')\n const gl =\n canvas.getContext('webgl') || canvas.getContext('experimental-webgl')\n if (!gl || !(gl instanceof WebGLRenderingContext)) return ''\n\n const ext = gl.getExtension('WEBGL_debug_renderer_info')\n const renderer = ext\n ? gl.getParameter(ext.UNMASKED_RENDERER_WEBGL)\n : 'unknown'\n const vendor = ext\n ? gl.getParameter(ext.UNMASKED_VENDOR_WEBGL)\n : 'unknown'\n const version = gl.getParameter(gl.VERSION)\n\n const combined = `${renderer}|${vendor}|${version}`\n return sha256(combined)\n } catch {\n return ''\n }\n}\n\nasync function getAudioFingerprint(): Promise<string> {\n try {\n const AudioCtx =\n (window as any).OfflineAudioContext ||\n (window as any).webkitOfflineAudioContext\n if (!AudioCtx) return ''\n\n const context = new AudioCtx(1, 44100, 44100)\n const oscillator = context.createOscillator()\n oscillator.type = 'triangle'\n oscillator.frequency.setValueAtTime(10000, context.currentTime)\n\n const compressor = context.createDynamicsCompressor()\n compressor.threshold.setValueAtTime(-50, context.currentTime)\n compressor.knee.setValueAtTime(40, context.currentTime)\n compressor.ratio.setValueAtTime(12, context.currentTime)\n compressor.attack.setValueAtTime(0, context.currentTime)\n compressor.release.setValueAtTime(0.25, context.currentTime)\n\n oscillator.connect(compressor)\n compressor.connect(context.destination)\n oscillator.start(0)\n\n const buffer = await context.startRendering()\n const samples = buffer.getChannelData(0).slice(0, 100)\n const sampleStr = Array.from(samples as ArrayLike<number>)\n .map((s) => s.toString())\n .join(',')\n\n return sha256(sampleStr)\n } catch {\n return ''\n }\n}\n\nexport async function collectFingerprint(): Promise<DeviceFingerprint> {\n const [canvas_fingerprint, webgl_fingerprint, audio_fingerprint] =\n await Promise.all([\n getCanvasFingerprint(),\n getWebGLFingerprint(),\n getAudioFingerprint(),\n ])\n\n const screen_resolution = `${window.screen.width}x${window.screen.height}`\n const platform = navigator.platform || ''\n const timezone = Intl.DateTimeFormat().resolvedOptions().timeZone || ''\n const language = navigator.language || ''\n const hardware_concurrency = navigator.hardwareConcurrency || 0\n const device_memory = (navigator as any).deviceMemory ?? null\n const color_depth = window.screen.colorDepth\n const pixel_ratio = window.devicePixelRatio || 1\n const touch_support =\n 'ontouchstart' in window ||\n navigator.maxTouchPoints > 0 ||\n (navigator as any).msMaxTouchPoints > 0\n const cookie_enabled = navigator.cookieEnabled\n const do_not_track = navigator.doNotTrack ?? null\n\n const fingerprintSource = [\n canvas_fingerprint,\n webgl_fingerprint,\n audio_fingerprint,\n screen_resolution,\n platform,\n timezone,\n language,\n String(hardware_concurrency),\n ].join('|')\n\n const fingerprint_id = await sha256(fingerprintSource)\n\n return {\n fingerprint_id,\n canvas_fingerprint,\n webgl_fingerprint,\n audio_fingerprint,\n screen_resolution,\n platform,\n timezone,\n language,\n hardware_concurrency,\n device_memory,\n color_depth,\n pixel_ratio,\n touch_support,\n cookie_enabled,\n do_not_track,\n }\n}\n","'use client'\n\nimport { useContext, useRef, useEffect } from 'react'\nimport { WhaleContext } from '../context.js'\nimport { collectFingerprint } from '../../fingerprint/collector.js'\nimport { resilientSend } from '../../resilient-send.js'\n\nconst SESSION_KEY_SUFFIX = '-analytics-session'\n\nexport function FingerprintCollector() {\n const ctx = useContext(WhaleContext)\n const sent = useRef(false)\n\n useEffect(() => {\n if (!ctx || sent.current) return\n if (!ctx.config.trackingEnabled) return\n if (typeof window === 'undefined') return\n sent.current = true\n\n const { config, client } = ctx\n const prefix = config.storagePrefix\n const fpKey = `${prefix}-fingerprint-sent`\n\n const linkFingerprintToSession = (fingerprintId: string) => {\n try {\n const sessionRaw = localStorage.getItem(`${prefix}${SESSION_KEY_SUFFIX}`)\n if (sessionRaw) {\n const session = JSON.parse(sessionRaw)\n client.updateSession(session.id, { fingerprint_id: fingerprintId }).catch(() => {})\n }\n } catch {}\n }\n\n // Check if already sent this session\n const existing = localStorage.getItem(fpKey)\n if (existing) {\n linkFingerprintToSession(existing)\n return\n }\n\n // Collect and send\n collectFingerprint()\n .then(async (fp) => {\n const baseUrl = config.proxyPath\n const url = `${baseUrl}/v1/stores/${config.storeId}/storefront/fingerprints`\n\n // Send fingerprint to gateway\n await resilientSend(url, fp, {\n 'Content-Type': 'application/json',\n 'x-api-key': config.apiKey,\n }).catch(() => {})\n\n // Store fingerprint_id locally\n localStorage.setItem(fpKey, fp.fingerprint_id)\n\n // Link to current session\n linkFingerprintToSession(fp.fingerprint_id)\n })\n .catch(() => {})\n }, [ctx])\n\n return null\n}\n","/**\n * Lightweight session recorder — captures DOM mutations, scroll, mouse,\n * input changes, and viewport resizes without any external dependency.\n *\n * Events are buffered locally and flushed to the backend at a configurable\n * interval (default 5 s) or immediately when the page is being unloaded.\n */\n\nexport interface RecordingEvent {\n /** 0=full_snapshot, 1=mutation, 2=mouse, 3=scroll, 4=input, 5=resize, 6=custom */\n type: number\n timestamp: number\n data: Record<string, unknown>\n}\n\ninterface RecorderConfig {\n sendChunk: (events: RecordingEvent[], sequence: number) => Promise<void>\n /** How often buffered events are flushed (ms). Default 5 000. */\n flushIntervalMs?: number\n /** Maximum events per chunk. Default 200. */\n maxChunkSize?: number\n}\n\ntype RequiredConfig = Required<RecorderConfig>\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction now(): number {\n return Date.now()\n}\n\nfunction throttle<T extends (...args: unknown[]) => void>(\n fn: T,\n ms: number,\n): T {\n let last = 0\n let timer: ReturnType<typeof setTimeout> | null = null\n const throttled = (...args: unknown[]) => {\n const elapsed = now() - last\n if (elapsed >= ms) {\n last = now()\n fn(...args)\n } else if (!timer) {\n timer = setTimeout(() => {\n last = now()\n timer = null\n fn(...args)\n }, ms - elapsed)\n }\n }\n return throttled as unknown as T\n}\n\n/** Build a short CSS selector for an element (used in mutation / input payloads). */\nfunction shortSelector(el: Element): string {\n if (el.id) return `#${el.id}`\n let sel = el.tagName.toLowerCase()\n if (el.className && typeof el.className === 'string') {\n const cls = el.className\n .trim()\n .split(/\\s+/)\n .slice(0, 2)\n .join('.')\n if (cls) sel += `.${cls}`\n }\n return sel\n}\n\n// ---------------------------------------------------------------------------\n// SessionRecorder\n// ---------------------------------------------------------------------------\n\nexport class SessionRecorder {\n private events: RecordingEvent[] = []\n private sequence = 0\n private observer: MutationObserver | null = null\n private flushTimer: ReturnType<typeof setInterval> | null = null\n private config: RequiredConfig\n private listeners: Array<[EventTarget, string, EventListener, boolean | AddEventListenerOptions | undefined]> = []\n private started = false\n private flushing = false\n /** Pending mutations collected within the current animation frame. */\n private pendingMutations: MutationRecord[] = []\n private mutationRafId: number | null = null\n\n constructor(config: RecorderConfig) {\n this.config = {\n sendChunk: config.sendChunk,\n flushIntervalMs: config.flushIntervalMs ?? 5_000,\n maxChunkSize: config.maxChunkSize ?? 200,\n }\n }\n\n // -----------------------------------------------------------------------\n // Public API\n // -----------------------------------------------------------------------\n\n start(): void {\n if (this.started) return\n this.started = true\n\n this.captureFullSnapshot()\n this.setupMutationObserver()\n this.setupEventListeners()\n\n this.flushTimer = setInterval(() => {\n void this.flush()\n }, this.config.flushIntervalMs)\n }\n\n stop(): void {\n if (!this.started) return\n this.started = false\n\n // Tear down mutation observer\n if (this.observer) {\n this.observer.disconnect()\n this.observer = null\n }\n\n // Cancel pending mutation raf\n if (this.mutationRafId !== null) {\n cancelAnimationFrame(this.mutationRafId)\n this.mutationRafId = null\n }\n\n // Remove all event listeners\n for (const [target, event, handler, options] of this.listeners) {\n target.removeEventListener(event, handler, options as EventListenerOptions | undefined)\n }\n this.listeners = []\n\n // Stop flush timer\n if (this.flushTimer !== null) {\n clearInterval(this.flushTimer)\n this.flushTimer = null\n }\n\n // Final flush\n void this.flush()\n }\n\n // -----------------------------------------------------------------------\n // Full Snapshot (type 0)\n // -----------------------------------------------------------------------\n\n private captureFullSnapshot(): void {\n const tree = this.serializeNode(document.documentElement)\n this.push({\n type: 0,\n timestamp: now(),\n data: {\n href: location.href,\n width: window.innerWidth,\n height: window.innerHeight,\n tree: tree ?? {},\n },\n })\n }\n\n private serializeNode(node: Node): Record<string, unknown> | null {\n if (node.nodeType === Node.ELEMENT_NODE) {\n const el = node as Element\n\n // Skip <script> and <link rel=\"preload\"> to reduce payload size\n const tag = el.tagName.toLowerCase()\n if (tag === 'script' || tag === 'noscript') return null\n\n const attrs: Record<string, string> = {}\n for (const attr of Array.from(el.attributes)) {\n // Mask sensitive inputs\n if (\n attr.name === 'value' &&\n el instanceof HTMLInputElement &&\n el.type === 'password'\n ) {\n continue\n }\n attrs[attr.name] = attr.value\n }\n\n const children: Record<string, unknown>[] = []\n for (const child of Array.from(el.childNodes)) {\n const serialized = this.serializeNode(child)\n if (serialized) children.push(serialized)\n }\n\n return { tag, attrs, children }\n }\n\n if (node.nodeType === Node.TEXT_NODE) {\n const text = node.textContent || ''\n // Skip empty text nodes\n if (!text.trim()) return null\n return { text }\n }\n\n return null\n }\n\n // -----------------------------------------------------------------------\n // Mutation Observer (type 1)\n // -----------------------------------------------------------------------\n\n private setupMutationObserver(): void {\n this.observer = new MutationObserver((mutations) => {\n // Batch mutations that arrive in the same animation frame\n this.pendingMutations.push(...mutations)\n if (this.mutationRafId === null) {\n this.mutationRafId = requestAnimationFrame(() => {\n this.processMutations(this.pendingMutations)\n this.pendingMutations = []\n this.mutationRafId = null\n })\n }\n })\n\n this.observer.observe(document.documentElement, {\n childList: true,\n attributes: true,\n characterData: true,\n subtree: true,\n attributeOldValue: false,\n })\n }\n\n private processMutations(mutations: MutationRecord[]): void {\n const ts = now()\n\n const adds: Record<string, unknown>[] = []\n const removes: Record<string, unknown>[] = []\n const attrs: Record<string, unknown>[] = []\n const texts: Record<string, unknown>[] = []\n\n for (const m of mutations) {\n if (m.type === 'childList') {\n for (const node of Array.from(m.addedNodes)) {\n if (node.nodeType === Node.ELEMENT_NODE || node.nodeType === Node.TEXT_NODE) {\n const serialized = this.serializeNode(node)\n if (serialized) {\n adds.push({\n parentSelector: m.target.nodeType === Node.ELEMENT_NODE\n ? shortSelector(m.target as Element)\n : null,\n node: serialized,\n })\n }\n }\n }\n for (const node of Array.from(m.removedNodes)) {\n removes.push({\n parentSelector: m.target.nodeType === Node.ELEMENT_NODE\n ? shortSelector(m.target as Element)\n : null,\n tag: node.nodeType === Node.ELEMENT_NODE\n ? (node as Element).tagName.toLowerCase()\n : '#text',\n })\n }\n } else if (m.type === 'attributes' && m.target.nodeType === Node.ELEMENT_NODE) {\n const el = m.target as Element\n const name = m.attributeName || ''\n attrs.push({\n selector: shortSelector(el),\n name,\n value: el.getAttribute(name),\n })\n } else if (m.type === 'characterData') {\n texts.push({\n parentSelector: m.target.parentElement\n ? shortSelector(m.target.parentElement)\n : null,\n value: (m.target.textContent || '').slice(0, 200),\n })\n }\n }\n\n // Only push if there's actual data\n if (adds.length || removes.length || attrs.length || texts.length) {\n this.push({\n type: 1,\n timestamp: ts,\n data: {\n adds: adds.length ? adds : undefined,\n removes: removes.length ? removes : undefined,\n attrs: attrs.length ? attrs : undefined,\n texts: texts.length ? texts : undefined,\n },\n })\n }\n }\n\n // -----------------------------------------------------------------------\n // Event Listeners (types 2–5)\n // -----------------------------------------------------------------------\n\n private setupEventListeners(): void {\n // --- Mouse (type 2) ---\n const onMouseMove = throttle(((e: MouseEvent) => {\n this.push({\n type: 2,\n timestamp: now(),\n data: { source: 'move', x: e.clientX, y: e.clientY },\n })\n }) as (...args: unknown[]) => void, 100)\n\n const onClick = ((e: MouseEvent) => {\n const target = e.target as Element | null\n this.push({\n type: 2,\n timestamp: now(),\n data: {\n source: 'click',\n x: e.clientX,\n y: e.clientY,\n target: target ? shortSelector(target) : null,\n },\n })\n }) as EventListener\n\n this.addListener(document, 'mousemove', onMouseMove as EventListener, { passive: true, capture: true })\n this.addListener(document, 'click', onClick, { passive: true, capture: true })\n\n // --- Scroll (type 3) ---\n const onScroll = throttle(((e: Event) => {\n const target = e.target\n if (target === document || target === document.documentElement || target === window) {\n this.push({\n type: 3,\n timestamp: now(),\n data: { target: 'window', x: window.scrollX, y: window.scrollY },\n })\n } else if (target instanceof Element) {\n this.push({\n type: 3,\n timestamp: now(),\n data: {\n target: shortSelector(target),\n x: target.scrollLeft,\n y: target.scrollTop,\n },\n })\n }\n }) as (...args: unknown[]) => void, 200)\n\n this.addListener(document, 'scroll', onScroll as EventListener, { passive: true, capture: true })\n\n // --- Input (type 4) ---\n const onInput = ((e: Event) => {\n const target = e.target\n if (!(target instanceof HTMLInputElement || target instanceof HTMLTextAreaElement || target instanceof HTMLSelectElement)) {\n return\n }\n const isPassword =\n target instanceof HTMLInputElement && target.type === 'password'\n\n this.push({\n type: 4,\n timestamp: now(),\n data: {\n selector: shortSelector(target),\n tag: target.tagName.toLowerCase(),\n inputType: target instanceof HTMLInputElement ? target.type : undefined,\n value: isPassword ? '***' : (target.value || '').slice(0, 100),\n },\n })\n }) as EventListener\n\n this.addListener(document, 'input', onInput, { passive: true, capture: true })\n this.addListener(document, 'change', onInput, { passive: true, capture: true })\n\n // --- Resize (type 5) ---\n const onResize = throttle((() => {\n this.push({\n type: 5,\n timestamp: now(),\n data: { width: window.innerWidth, height: window.innerHeight },\n })\n }) as (...args: unknown[]) => void, 500)\n\n this.addListener(window, 'resize', onResize as EventListener, { passive: true })\n\n // --- Visibility change (flush on hide) ---\n const onVisibility = (() => {\n if (document.visibilityState === 'hidden') {\n void this.flush()\n }\n }) as EventListener\n\n this.addListener(document, 'visibilitychange', onVisibility)\n }\n\n // -----------------------------------------------------------------------\n // Event buffer & flushing\n // -----------------------------------------------------------------------\n\n private push(event: RecordingEvent): void {\n if (!this.started) return\n\n this.events.push(event)\n\n // Auto-flush if we've hit the chunk limit\n if (this.events.length >= this.config.maxChunkSize) {\n void this.flush()\n }\n }\n\n private async flush(): Promise<void> {\n if (this.events.length === 0) return\n if (this.flushing) return\n\n this.flushing = true\n\n // Swap out the buffer so new events accumulate independently\n const chunk = this.events\n this.events = []\n const seq = this.sequence++\n\n try {\n await this.config.sendChunk(chunk, seq)\n } catch {\n // Best-effort — if sendChunk itself handles retries / beacon fallback,\n // there's nothing else to do here.\n } finally {\n this.flushing = false\n }\n }\n\n // -----------------------------------------------------------------------\n // Listener bookkeeping\n // -----------------------------------------------------------------------\n\n private addListener(\n target: EventTarget,\n event: string,\n handler: EventListener,\n options?: AddEventListenerOptions,\n ): void {\n target.addEventListener(event, handler, options)\n this.listeners.push([target, event, handler, options])\n }\n}\n","'use client'\n\nimport { useContext, useRef, useEffect } from 'react'\nimport { WhaleContext } from '../context.js'\nimport { SessionRecorder } from '../../recording/recorder.js'\nimport type { RecordingEvent } from '../../recording/recorder.js'\nimport { resilientSend } from '../../resilient-send.js'\n\nconst SESSION_KEY_SUFFIX = '-analytics-session'\nconst VISITOR_KEY_SUFFIX = '-visitor-id'\nconst MAX_SESSION_WAIT_MS = 10_000\nconst SESSION_POLL_MS = 500\n\nexport function SessionRecorderComponent() {\n const ctx = useContext(WhaleContext)\n const recorderRef = useRef<SessionRecorder | null>(null)\n const sampledRef = useRef<boolean | null>(null)\n const initRef = useRef(false)\n\n useEffect(() => {\n if (!ctx || initRef.current) return\n if (!ctx.config.trackingEnabled) return\n if (typeof window === 'undefined') return\n\n // Determine sampling once per component lifetime\n if (sampledRef.current === null) {\n sampledRef.current = Math.random() < ctx.config.recordingRate\n }\n if (!sampledRef.current) return\n\n const { config } = ctx\n const prefix = config.storagePrefix\n let cancelled = false\n let pollTimer: ReturnType<typeof setTimeout> | null = null\n const startTime = Date.now()\n\n const tryInit = () => {\n if (cancelled) return\n\n let sessionId: string | null = null\n try {\n const sessionRaw = localStorage.getItem(`${prefix}${SESSION_KEY_SUFFIX}`)\n if (sessionRaw) {\n const session = JSON.parse(sessionRaw)\n sessionId = session.id || null\n }\n } catch {}\n\n if (!sessionId) {\n if (Date.now() - startTime < MAX_SESSION_WAIT_MS) {\n pollTimer = setTimeout(tryInit, SESSION_POLL_MS)\n return\n }\n return\n }\n\n initRef.current = true\n const visitorId = (() => {\n try {\n return localStorage.getItem(`${prefix}${VISITOR_KEY_SUFFIX}`) || 'unknown'\n } catch {\n return 'unknown'\n }\n })()\n\n const baseUrl = config.proxyPath\n const url = `${baseUrl}/v1/stores/${config.storeId}/storefront/recordings`\n const sid = sessionId\n\n const recorder = new SessionRecorder({\n sendChunk: async (events: RecordingEvent[], sequence: number) => {\n await resilientSend(url, {\n session_id: sid,\n visitor_id: visitorId,\n events,\n sequence,\n started_at: sequence === 0 ? new Date().toISOString() : undefined,\n }, {\n 'Content-Type': 'application/json',\n 'x-api-key': config.apiKey,\n })\n },\n })\n\n recorder.start()\n recorderRef.current = recorder\n }\n\n tryInit()\n\n return () => {\n cancelled = true\n if (pollTimer) clearTimeout(pollTimer)\n if (recorderRef.current) {\n recorderRef.current.stop()\n recorderRef.current = null\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n return null\n}\n","'use client'\n\nimport { useMemo, useState, useCallback, type ReactNode } from 'react'\nimport { usePathname } from 'next/navigation'\nimport { WhaleClient } from '../client.js'\nimport type { WhaleStorefrontConfig, Product } from '../types.js'\nimport type { PixelManager } from '../pixels/pixel-manager.js'\nimport { WhaleContext, type WhaleContextValue } from './context.js'\nimport { createCartStore } from './stores/cart-store.js'\nimport { createAuthStore } from './stores/auth-store.js'\nimport { AnalyticsTracker } from './components/analytics-tracker.js'\nimport { CartInitializer } from './components/cart-initializer.js'\nimport { AuthInitializer } from './components/auth-initializer.js'\nimport { PixelInitializer } from './components/pixel-initializer.js'\nimport { BehavioralTrackerComponent } from './components/behavioral-tracker.js'\nimport { FingerprintCollector } from './components/fingerprint-collector.js'\nimport { SessionRecorderComponent } from './components/session-recorder.js'\nimport { ThemeProvider, type ThemeTokens } from '@neowhale/ui'\n\n/** Read a boolean env var (NEXT_PUBLIC_*). Returns undefined when absent. */\nfunction envBool(name: string): boolean | undefined {\n if (typeof process === 'undefined') return undefined\n const raw = (process.env as Record<string, string | undefined>)[name]\n if (raw === undefined || raw === '') return undefined\n return raw !== '0' && raw.toLowerCase() !== 'false'\n}\n\n/** Read a numeric env var (NEXT_PUBLIC_*). Returns undefined when absent. */\nfunction envNumber(name: string): number | undefined {\n if (typeof process === 'undefined') return undefined\n const raw = (process.env as Record<string, string | undefined>)[name]\n if (raw === undefined || raw === '') return undefined\n const n = Number(raw)\n return Number.isFinite(n) ? n : undefined\n}\n\nexport interface WhaleProviderProps extends WhaleStorefrontConfig {\n children: ReactNode\n /** Server-fetched products passed to client for hooks */\n products?: Product[]\n /** Manual theme overrides — merged with store theme fetched from storefront config */\n theme?: Partial<ThemeTokens>\n}\n\nexport function WhaleProvider({\n children,\n products = [],\n theme: themeProp,\n storeId,\n apiKey,\n gatewayUrl,\n proxyPath,\n mediaSigningSecret,\n supabaseHost,\n storagePrefix,\n sessionTtl,\n debug,\n trackingEnabled,\n recordingRate,\n}: WhaleProviderProps) {\n const pathname = usePathname()\n const [pixelManager, setPixelManager] = useState<PixelManager | null>(null)\n const [storeTheme, setStoreTheme] = useState<Partial<ThemeTokens> | undefined>(undefined)\n\n const handlePixelReady = useCallback((manager: PixelManager) => {\n setPixelManager(manager)\n }, [])\n\n const handleTheme = useCallback((theme: Record<string, unknown>) => {\n setStoreTheme(theme as Partial<ThemeTokens>)\n }, [])\n\n const ctx = useMemo<WhaleContextValue>(() => {\n const resolvedConfig = {\n storeId,\n apiKey,\n gatewayUrl: gatewayUrl || 'https://whale-gateway.fly.dev',\n proxyPath: proxyPath || '/api/gw',\n mediaSigningSecret: mediaSigningSecret || '',\n supabaseHost: supabaseHost || '',\n storagePrefix: storagePrefix || 'whale',\n sessionTtl: sessionTtl || 30 * 60 * 1000,\n debug: debug || false,\n trackingEnabled: trackingEnabled ?? envBool('NEXT_PUBLIC_TRACKING_ENABLED') ?? true,\n recordingRate: recordingRate ?? envNumber('NEXT_PUBLIC_RECORDING_RATE') ?? 0.1,\n }\n\n const client = new WhaleClient({\n storeId,\n apiKey,\n gatewayUrl: resolvedConfig.gatewayUrl,\n proxyPath: resolvedConfig.proxyPath,\n })\n\n // Analytics callbacks wired into cart store — fire events via client directly\n // since we can't use the useAnalytics hook outside a component.\n // Read session_id from localStorage (same key pattern as useAnalytics).\n const readSessionId = (): string | undefined => {\n try {\n const raw = localStorage.getItem(`${resolvedConfig.storagePrefix}-analytics-session`)\n if (!raw) return undefined\n const stored = JSON.parse(raw) as { id: string; createdAt: number }\n if (Date.now() - stored.createdAt < resolvedConfig.sessionTtl) return stored.id\n } catch { /* ignore */ }\n return undefined\n }\n\n /** Sync cart state to the analytics session (fire-and-forget). */\n const syncCartToSession = (cartId: string, total: number, itemCount: number) => {\n const sid = readSessionId()\n if (sid && !sid.startsWith('local-')) {\n client.updateSession(sid, {\n cart_id: cartId,\n cart_total: total,\n cart_item_count: itemCount,\n status: 'carting',\n }).catch(() => {})\n }\n }\n\n const onAddToCart = resolvedConfig.trackingEnabled\n ? (productId: string, productName: string, quantity: number, price: number, tier?: string) => {\n const sid = readSessionId()\n if (sid) client.trackEvent({ session_id: sid, event_type: 'add_to_cart' as never, event_data: { product_id: productId, product_name: productName, quantity, price, tier } }).catch(() => {})\n }\n : undefined\n\n const onRemoveFromCart = resolvedConfig.trackingEnabled\n ? (productId: string, productName: string) => {\n const sid = readSessionId()\n if (sid) client.trackEvent({ session_id: sid, event_type: 'remove_from_cart' as never, event_data: { product_id: productId, product_name: productName } }).catch(() => {})\n }\n : undefined\n\n const cartStore = createCartStore(client, resolvedConfig.storagePrefix, onAddToCart, onRemoveFromCart, syncCartToSession)\n const authStore = createAuthStore(client, resolvedConfig.storagePrefix)\n\n return {\n client,\n config: resolvedConfig,\n cartStore,\n authStore,\n products,\n pixelManager: null,\n }\n // Only recreate when identity changes — storeId + apiKey\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [storeId, apiKey])\n\n // Update products and pixelManager on the context when they change\n const value = useMemo<WhaleContextValue>(\n () => ({ ...ctx, products, pixelManager }),\n [ctx, products, pixelManager]\n )\n\n // Merge store-fetched theme with manual overrides (manual takes precedence)\n const mergedTheme = useMemo<Partial<ThemeTokens> | undefined>(() => {\n if (!storeTheme && !themeProp) return undefined\n return { ...storeTheme, ...themeProp }\n }, [storeTheme, themeProp])\n\n return (\n <WhaleContext.Provider value={value}>\n <ThemeProvider theme={mergedTheme}>\n <AuthInitializer />\n <CartInitializer />\n <AnalyticsTracker pathname={pathname} />\n <PixelInitializer onReady={handlePixelReady} onTheme={handleTheme} />\n <BehavioralTrackerComponent pathname={pathname} />\n <FingerprintCollector />\n <SessionRecorderComponent />\n {children}\n </ThemeProvider>\n </WhaleContext.Provider>\n )\n}\n","'use client'\n\nimport { useContext, useState, useEffect, useMemo } from 'react'\nimport { WhaleContext } from '../context.js'\nimport type { Product } from '../../types.js'\n\n/**\n * Returns products passed via WhaleProvider.\n * Optionally filters by category or search.\n */\nexport function useProducts(opts?: {\n categoryId?: string\n search?: string\n}) {\n const ctx = useContext(WhaleContext)\n if (!ctx) throw new Error('useProducts must be used within <WhaleProvider>')\n\n const allProducts = ctx.products\n\n const products = useMemo(() => {\n let result = allProducts\n if (opts?.categoryId) {\n result = result.filter((p) => p.primary_category_id === opts.categoryId)\n }\n if (opts?.search) {\n const q = opts.search.toLowerCase()\n result = result.filter(\n (p) =>\n p.name.toLowerCase().includes(q) ||\n p.description?.toLowerCase().includes(q) ||\n p.slug.toLowerCase().includes(q)\n )\n }\n return result\n }, [allProducts, opts?.categoryId, opts?.search])\n\n return {\n products,\n allProducts,\n loading: false,\n }\n}\n\n/**\n * Returns a single product by slug from the provider's product list.\n */\nexport function useProduct(slug: string | null | undefined) {\n const ctx = useContext(WhaleContext)\n if (!ctx) throw new Error('useProduct must be used within <WhaleProvider>')\n\n const product = useMemo(() => {\n if (!slug) return null\n return ctx.products.find((p) => p.slug === slug) ?? null\n }, [ctx.products, slug])\n\n return {\n product,\n loading: false,\n }\n}\n","'use client'\n\nimport { useContext } from 'react'\nimport { WhaleContext } from '../context.js'\nimport type { WhaleClient } from '../../client.js'\n\nexport function useWhaleClient(): WhaleClient {\n const ctx = useContext(WhaleContext)\n if (!ctx) throw new Error('useWhaleClient must be used within <WhaleProvider>')\n return ctx.client\n}\n","'use client'\n\nimport { useContext, useState, useEffect, useCallback } from 'react'\nimport { useStore } from 'zustand'\nimport { WhaleContext } from '../context.js'\nimport type { Order, CustomerAnalytics } from '../../types.js'\n\nexport function useCustomerOrders() {\n const ctx = useContext(WhaleContext)\n if (!ctx) throw new Error('useCustomerOrders must be used within <WhaleProvider>')\n\n const customer = useStore(ctx.authStore, (s) => s.customer)\n const [orders, setOrders] = useState<Order[]>([])\n const [loading, setLoading] = useState(false)\n\n const refresh = useCallback(async () => {\n if (!customer?.id) {\n setOrders([])\n return\n }\n setLoading(true)\n try {\n const data = await ctx.client.getCustomerOrders(customer.id)\n setOrders(data)\n } catch {\n setOrders([])\n } finally {\n setLoading(false)\n }\n }, [customer?.id, ctx.client])\n\n useEffect(() => {\n refresh()\n }, [refresh])\n\n return { orders, loading, refresh }\n}\n\nexport function useCustomerAnalytics() {\n const ctx = useContext(WhaleContext)\n if (!ctx) throw new Error('useCustomerAnalytics must be used within <WhaleProvider>')\n\n const customer = useStore(ctx.authStore, (s) => s.customer)\n const [analytics, setAnalytics] = useState<CustomerAnalytics | null>(null)\n const [loading, setLoading] = useState(false)\n\n useEffect(() => {\n if (!customer?.id) {\n setAnalytics(null)\n return\n }\n setLoading(true)\n const name = `${customer.first_name} ${customer.last_name}`.trim()\n ctx.client\n .getCustomerAnalytics(customer.id, name || undefined)\n .then(setAnalytics)\n .catch(() => setAnalytics(null))\n .finally(() => setLoading(false))\n }, [customer?.id, customer?.first_name, customer?.last_name, ctx.client])\n\n return { analytics, loading }\n}\n","'use client'\n\nimport { useContext, useState, useCallback } from 'react'\nimport { WhaleContext } from '../context.js'\nimport type { CheckoutSession, Order, Address, PaymentData } from '../../types.js'\n\nexport function useCheckout() {\n const ctx = useContext(WhaleContext)\n if (!ctx) throw new Error('useCheckout must be used within <WhaleProvider>')\n\n const [session, setSession] = useState<CheckoutSession | null>(null)\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState<Error | null>(null)\n\n const createSession = useCallback(async (params: {\n cart_id: string\n customer_email?: string\n shipping_address?: Address\n billing_address?: Address\n shipping_method_id?: string\n coupon_code?: string\n loyalty_reward_id?: string\n selected_product_id?: string\n }) => {\n setLoading(true)\n setError(null)\n try {\n const data = await ctx.client.createCheckoutSession(params)\n setSession(data)\n return data\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err))\n setError(e)\n throw e\n } finally {\n setLoading(false)\n }\n }, [ctx.client])\n\n const updateSession = useCallback(async (params: {\n customer_email?: string\n shipping_address?: Address\n billing_address?: Address\n shipping_method_id?: string\n coupon_code?: string\n }) => {\n if (!session) throw new Error('No active checkout session')\n setLoading(true)\n setError(null)\n try {\n const data = await ctx.client.updateCheckoutSession(session.id, params)\n setSession(data)\n return data\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err))\n setError(e)\n throw e\n } finally {\n setLoading(false)\n }\n }, [ctx.client, session])\n\n const complete = useCallback(async (payment?: PaymentData, opts?: {\n loyalty_reward_id?: string\n selected_product_id?: string\n }): Promise<Order> => {\n if (!session) throw new Error('No active checkout session')\n setLoading(true)\n setError(null)\n try {\n const order = await ctx.client.completeCheckout(session.id, payment, opts)\n setSession(null)\n return order\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err))\n setError(e)\n throw e\n } finally {\n setLoading(false)\n }\n }, [ctx.client, session])\n\n const reset = useCallback(() => {\n setSession(null)\n setError(null)\n }, [])\n\n return { session, loading, error, createSession, updateSession, complete, reset }\n}\n","'use client'\n\nimport { useContext, useState, useCallback } from 'react'\nimport { WhaleContext } from '../context.js'\nimport type { Product } from '../../types.js'\n\nexport interface SearchParams {\n query: string\n category_id?: string\n min_price?: number\n max_price?: number\n sort_by?: string\n sort_order?: 'asc' | 'desc'\n limit?: number\n}\n\nexport function useSearch() {\n const ctx = useContext(WhaleContext)\n if (!ctx) throw new Error('useSearch must be used within <WhaleProvider>')\n\n const [results, setResults] = useState<Product[]>([])\n const [hasMore, setHasMore] = useState(false)\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState<Error | null>(null)\n const [cursor, setCursor] = useState<string | undefined>(undefined)\n\n const search = useCallback(async (params: SearchParams) => {\n setLoading(true)\n setError(null)\n try {\n const data = await ctx.client.searchProducts(params)\n setResults(data.data)\n setHasMore(data.has_more)\n setCursor(data.data.length > 0 ? data.data[data.data.length - 1].id : undefined)\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err))\n setError(e)\n setResults([])\n setHasMore(false)\n } finally {\n setLoading(false)\n }\n }, [ctx.client])\n\n const loadMore = useCallback(async (params: SearchParams) => {\n if (!cursor || !hasMore) return\n setLoading(true)\n setError(null)\n try {\n const data = await ctx.client.searchProducts({ ...params, starting_after: cursor })\n setResults((prev) => [...prev, ...data.data])\n setHasMore(data.has_more)\n setCursor(data.data.length > 0 ? data.data[data.data.length - 1].id : undefined)\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err))\n setError(e)\n } finally {\n setLoading(false)\n }\n }, [ctx.client, cursor, hasMore])\n\n const clear = useCallback(() => {\n setResults([])\n setHasMore(false)\n setCursor(undefined)\n setError(null)\n }, [])\n\n return { results, hasMore, loading, error, search, loadMore, clear }\n}\n","'use client'\n\nimport { useContext, useState, useEffect, useCallback, useMemo } from 'react'\nimport { WhaleContext } from '../context.js'\nimport type { Category, CategoryTreeNode } from '../../types.js'\n\nfunction buildTree(categories: Category[]): CategoryTreeNode[] {\n const map = new Map<string, CategoryTreeNode>()\n const roots: CategoryTreeNode[] = []\n\n for (const cat of categories) {\n map.set(cat.id, { ...cat, children: [] })\n }\n\n for (const cat of categories) {\n const node = map.get(cat.id)!\n if (cat.parent_id && map.has(cat.parent_id)) {\n map.get(cat.parent_id)!.children.push(node)\n } else {\n roots.push(node)\n }\n }\n\n return roots\n}\n\nexport function useCategories() {\n const ctx = useContext(WhaleContext)\n if (!ctx) throw new Error('useCategories must be used within <WhaleProvider>')\n\n const [categories, setCategories] = useState<Category[]>([])\n const [loading, setLoading] = useState(true)\n const [error, setError] = useState<Error | null>(null)\n\n const refresh = useCallback(async () => {\n setLoading(true)\n setError(null)\n try {\n const data = await ctx.client.listCategories()\n setCategories(data.data)\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err))\n setError(e)\n setCategories([])\n } finally {\n setLoading(false)\n }\n }, [ctx.client])\n\n useEffect(() => {\n refresh()\n }, [refresh])\n\n const tree = useMemo(() => buildTree(categories), [categories])\n\n const getCategory = useCallback(async (id: string) => {\n return ctx.client.getCategory(id)\n }, [ctx.client])\n\n return { categories, tree, loading, error, refresh, getCategory }\n}\n","'use client'\n\nimport { useContext, useState, useEffect, useCallback } from 'react'\nimport { useStore } from 'zustand'\nimport { WhaleContext } from '../context.js'\nimport type { LoyaltyAccount, LoyaltyReward, LoyaltyTransaction, Product } from '../../types.js'\n\nexport function useLoyalty() {\n const ctx = useContext(WhaleContext)\n if (!ctx) throw new Error('useLoyalty must be used within <WhaleProvider>')\n\n const customer = useStore(ctx.authStore, (s) => s.customer)\n const [account, setAccount] = useState<LoyaltyAccount | null>(null)\n const [rewards, setRewards] = useState<LoyaltyReward[]>([])\n const [transactions, setTransactions] = useState<LoyaltyTransaction[]>([])\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState<Error | null>(null)\n\n const refresh = useCallback(async () => {\n if (!customer?.id) {\n setAccount(null)\n setRewards([])\n setTransactions([])\n return\n }\n setLoading(true)\n setError(null)\n try {\n const [acct, rwds, txns] = await Promise.all([\n ctx.client.getLoyaltyAccount(customer.id),\n ctx.client.listLoyaltyRewards(),\n ctx.client.listLoyaltyTransactions(customer.id),\n ])\n setAccount(acct)\n setRewards(rwds.data)\n setTransactions(txns.data)\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err))\n setError(e)\n } finally {\n setLoading(false)\n }\n }, [customer?.id, ctx.client])\n\n useEffect(() => {\n refresh()\n }, [refresh])\n\n const redeemReward = useCallback(async (rewardId: string) => {\n if (!customer?.id) throw new Error('Not authenticated')\n const result = await ctx.client.redeemLoyaltyReward(customer.id, rewardId)\n await refresh()\n return result\n }, [customer?.id, ctx.client, refresh])\n\n const fetchProductsByCategory = useCallback(async (category: string, locationId: string, tier?: string): Promise<Product[]> => {\n const res = await ctx.client.listLoyaltyProducts({ category, location_id: locationId, tier })\n return res.data\n }, [ctx.client])\n\n return { account, rewards, transactions, loading, error, refresh, redeemReward, fetchProductsByCategory }\n}\n","'use client'\n\nimport { useContext, useState, useEffect, useCallback } from 'react'\nimport { WhaleContext } from '../context.js'\nimport type { Review, ReviewSummary } from '../../types.js'\n\nexport function useReviews(productId: string | null | undefined) {\n const ctx = useContext(WhaleContext)\n if (!ctx) throw new Error('useReviews must be used within <WhaleProvider>')\n\n const [reviews, setReviews] = useState<Review[]>([])\n const [summary, setSummary] = useState<ReviewSummary | null>(null)\n const [hasMore, setHasMore] = useState(false)\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState<Error | null>(null)\n\n const refresh = useCallback(async () => {\n if (!productId) {\n setReviews([])\n setSummary(null)\n return\n }\n setLoading(true)\n setError(null)\n try {\n const data = await ctx.client.listProductReviews(productId)\n setReviews(data.data)\n setSummary(data.summary ?? null)\n setHasMore(data.has_more)\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err))\n setError(e)\n setReviews([])\n setSummary(null)\n } finally {\n setLoading(false)\n }\n }, [productId, ctx.client])\n\n useEffect(() => {\n refresh()\n }, [refresh])\n\n const loadMore = useCallback(async () => {\n if (!productId || !hasMore || reviews.length === 0) return\n setLoading(true)\n setError(null)\n try {\n const cursor = reviews[reviews.length - 1].id\n const data = await ctx.client.listProductReviews(productId, { starting_after: cursor })\n setReviews((prev) => [...prev, ...data.data])\n setHasMore(data.has_more)\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err))\n setError(e)\n } finally {\n setLoading(false)\n }\n }, [productId, ctx.client, hasMore, reviews])\n\n const submit = useCallback(async (data: {\n rating: number\n title?: string\n body?: string\n customer_name?: string\n }) => {\n if (!productId) throw new Error('No product ID provided')\n const review = await ctx.client.submitReview(productId, data)\n await refresh()\n return review\n }, [productId, ctx.client, refresh])\n\n return { reviews, summary, hasMore, loading, error, refresh, loadMore, submit }\n}\n","'use client'\n\nimport { useContext, useState, useEffect, useCallback } from 'react'\nimport { useStore } from 'zustand'\nimport { WhaleContext } from '../context.js'\nimport type { WishlistItem } from '../../types.js'\n\nexport function useWishlist() {\n const ctx = useContext(WhaleContext)\n if (!ctx) throw new Error('useWishlist must be used within <WhaleProvider>')\n\n const customer = useStore(ctx.authStore, (s) => s.customer)\n const [items, setItems] = useState<WishlistItem[]>([])\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState<Error | null>(null)\n\n const refresh = useCallback(async () => {\n if (!customer?.id) {\n setItems([])\n return\n }\n setLoading(true)\n setError(null)\n try {\n const data = await ctx.client.listWishlistItems(customer.id)\n setItems(data.data)\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err))\n setError(e)\n setItems([])\n } finally {\n setLoading(false)\n }\n }, [customer?.id, ctx.client])\n\n useEffect(() => {\n refresh()\n }, [refresh])\n\n const add = useCallback(async (productId: string) => {\n if (!customer?.id) throw new Error('Not authenticated')\n setError(null)\n try {\n const item = await ctx.client.addWishlistItem(customer.id, productId)\n setItems((prev) => [...prev, item])\n return item\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err))\n setError(e)\n throw e\n }\n }, [customer?.id, ctx.client])\n\n const remove = useCallback(async (productId: string) => {\n if (!customer?.id) throw new Error('Not authenticated')\n setError(null)\n try {\n await ctx.client.removeWishlistItem(customer.id, productId)\n setItems((prev) => prev.filter((item) => item.product_id !== productId))\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err))\n setError(e)\n throw e\n }\n }, [customer?.id, ctx.client])\n\n const has = useCallback((productId: string): boolean => {\n return items.some((item) => item.product_id === productId)\n }, [items])\n\n const toggle = useCallback(async (productId: string) => {\n if (has(productId)) {\n await remove(productId)\n } else {\n await add(productId)\n }\n }, [has, add, remove])\n\n return { items, loading, error, refresh, add, remove, has, toggle }\n}\n","'use client'\n\nimport { useContext, useState, useEffect, useCallback } from 'react'\nimport { WhaleContext } from '../context.js'\nimport type { Recommendation } from '../../types.js'\n\nexport function useRecommendations(params?: {\n product_id?: string\n customer_id?: string\n limit?: number\n type?: 'similar' | 'frequently_bought_together' | 'personalized'\n}) {\n const ctx = useContext(WhaleContext)\n if (!ctx) throw new Error('useRecommendations must be used within <WhaleProvider>')\n\n const [recommendations, setRecommendations] = useState<Recommendation[]>([])\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState<Error | null>(null)\n\n // Stable dependency key to avoid infinite re-renders\n const productId = params?.product_id\n const customerId = params?.customer_id\n const limit = params?.limit\n const type = params?.type\n\n const refresh = useCallback(async () => {\n setLoading(true)\n setError(null)\n try {\n const data = await ctx.client.getRecommendations({\n product_id: productId,\n customer_id: customerId,\n limit,\n type,\n })\n setRecommendations(data.data)\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err))\n setError(e)\n setRecommendations([])\n } finally {\n setLoading(false)\n }\n }, [ctx.client, productId, customerId, limit, type])\n\n useEffect(() => {\n refresh()\n }, [refresh])\n\n return { recommendations, loading, error, refresh }\n}\n","'use client'\n\nimport { useContext, useState, useEffect, useCallback } from 'react'\nimport { WhaleContext } from '../context.js'\nimport type { Location } from '../../types.js'\n\nexport function useLocations() {\n const ctx = useContext(WhaleContext)\n if (!ctx) throw new Error('useLocations must be used within <WhaleProvider>')\n\n const [locations, setLocations] = useState<Location[]>([])\n const [loading, setLoading] = useState(true)\n const [error, setError] = useState<Error | null>(null)\n\n const refresh = useCallback(async () => {\n setLoading(true)\n setError(null)\n try {\n const data = await ctx.client.listLocations()\n setLocations(data.data)\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err))\n setError(e)\n setLocations([])\n } finally {\n setLoading(false)\n }\n }, [ctx.client])\n\n useEffect(() => {\n refresh()\n }, [refresh])\n\n const getLocation = useCallback(async (id: string) => {\n return ctx.client.getLocation(id)\n }, [ctx.client])\n\n return { locations, loading, error, refresh, getLocation }\n}\n","'use client'\n\nimport { useContext, useState, useEffect, useCallback } from 'react'\nimport { WhaleContext } from '../context.js'\nimport type { ShippingMethod, ShippingRate, Address } from '../../types.js'\n\nexport function useShipping() {\n const ctx = useContext(WhaleContext)\n if (!ctx) throw new Error('useShipping must be used within <WhaleProvider>')\n\n const [methods, setMethods] = useState<ShippingMethod[]>([])\n const [rates, setRates] = useState<ShippingRate[]>([])\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState<Error | null>(null)\n\n const refreshMethods = useCallback(async () => {\n setLoading(true)\n setError(null)\n try {\n const data = await ctx.client.listShippingMethods()\n setMethods(data.data)\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err))\n setError(e)\n setMethods([])\n } finally {\n setLoading(false)\n }\n }, [ctx.client])\n\n useEffect(() => {\n refreshMethods()\n }, [refreshMethods])\n\n const calculateRates = useCallback(async (params: {\n cart_id: string\n shipping_address: Address\n }) => {\n setLoading(true)\n setError(null)\n try {\n const data = await ctx.client.calculateShippingRates(params)\n setRates(data.data)\n return data.data\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err))\n setError(e)\n setRates([])\n throw e\n } finally {\n setLoading(false)\n }\n }, [ctx.client])\n\n return { methods, rates, loading, error, refreshMethods, calculateRates }\n}\n","'use client'\n\nimport { useContext, useState, useCallback } from 'react'\nimport { WhaleContext } from '../context.js'\nimport type { DealValidation, Cart } from '../../types.js'\n\nexport function useDeals() {\n const ctx = useContext(WhaleContext)\n if (!ctx) throw new Error('useDeals must be used within <WhaleProvider>')\n\n const [validation, setValidation] = useState<DealValidation | null>(null)\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState<Error | null>(null)\n\n const validate = useCallback(async (code: string, cartId?: string): Promise<DealValidation> => {\n setLoading(true)\n setError(null)\n try {\n const result = await ctx.client.validateDeal(code, cartId ? { cart_id: cartId } : undefined)\n setValidation(result)\n return result\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err))\n setError(e)\n setValidation(null)\n throw e\n } finally {\n setLoading(false)\n }\n }, [ctx.client])\n\n const apply = useCallback(async (cartId: string, code: string): Promise<Cart> => {\n setLoading(true)\n setError(null)\n try {\n const cart = await ctx.client.applyDeal(cartId, code)\n return cart\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err))\n setError(e)\n throw e\n } finally {\n setLoading(false)\n }\n }, [ctx.client])\n\n const remove = useCallback(async (cartId: string): Promise<Cart> => {\n setLoading(true)\n setError(null)\n try {\n const cart = await ctx.client.removeDeal(cartId)\n setValidation(null)\n return cart\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err))\n setError(e)\n throw e\n } finally {\n setLoading(false)\n }\n }, [ctx.client])\n\n const clear = useCallback(() => {\n setValidation(null)\n setError(null)\n }, [])\n\n return { validation, loading, error, validate, apply, remove, clear }\n}\n\n/** @deprecated Use useDeals instead */\nexport const useCoupons = useDeals\n","'use client'\n\nimport { useContext, useState, useEffect, useCallback } from 'react'\nimport { useStore } from 'zustand'\nimport { WhaleContext } from '../context.js'\nimport type { ReferralStatus } from '../../types.js'\n\nexport function useReferral() {\n const ctx = useContext(WhaleContext)\n if (!ctx) throw new Error('useReferral must be used within <WhaleProvider>')\n\n const customer = useStore(ctx.authStore, (s) => s.customer)\n const [status, setStatus] = useState<ReferralStatus | null>(null)\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState<Error | null>(null)\n\n const refresh = useCallback(async () => {\n if (!customer?.id) {\n setStatus(null)\n return\n }\n setLoading(true)\n setError(null)\n try {\n const result = await ctx.client.getReferralStatus(customer.id)\n setStatus(result)\n } catch (err) {\n setError(err instanceof Error ? err : new Error(String(err)))\n } finally {\n setLoading(false)\n }\n }, [customer?.id, ctx.client])\n\n useEffect(() => {\n refresh()\n }, [refresh])\n\n const enroll = useCallback(async () => {\n if (!customer?.id) throw new Error('Not authenticated')\n setLoading(true)\n setError(null)\n try {\n const result = await ctx.client.enrollReferral(customer.id)\n await refresh()\n return result\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err))\n setError(e)\n throw e\n } finally {\n setLoading(false)\n }\n }, [customer?.id, ctx.client, refresh])\n\n const attributeReferral = useCallback(\n async (code: string) => {\n if (!customer?.id) throw new Error('Not authenticated')\n setLoading(true)\n setError(null)\n try {\n const result = await ctx.client.attributeReferral(customer.id, code)\n await refresh()\n return result\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err))\n setError(e)\n throw e\n } finally {\n setLoading(false)\n }\n },\n [customer?.id, ctx.client, refresh],\n )\n\n // Auto-attribute if URL has ?code= OR localStorage has whale_ref_code\n // The code is persisted to localStorage on the /refer page so it survives the auth redirect\n useEffect(() => {\n if (!customer?.id || !status || status.referred_by) return\n if (typeof window === 'undefined') return\n const params = new URLSearchParams(window.location.search)\n const code = params.get('code') || localStorage.getItem('whale_ref_code')\n if (!code) return\n ctx.client.attributeReferral(customer.id, code).then(() => {\n localStorage.removeItem('whale_ref_code')\n refresh()\n }).catch(() => {})\n }, [customer?.id, status, ctx.client, refresh])\n\n const share = useCallback(async () => {\n if (!status?.share_url) throw new Error('Not enrolled in referral program')\n const shareData = {\n title: 'Check this out!',\n text: `Use my referral code ${status.referral_code} for rewards!`,\n url: status.share_url,\n }\n if (typeof navigator !== 'undefined' && navigator.share) {\n try {\n await navigator.share(shareData)\n return\n } catch {\n // Fall through to clipboard\n }\n }\n if (typeof navigator !== 'undefined' && navigator.clipboard) {\n await navigator.clipboard.writeText(status.share_url)\n }\n }, [status])\n\n return {\n status,\n loading,\n error,\n enroll,\n refresh,\n share,\n attributeReferral,\n referralCode: status?.referral_code ?? null,\n shareUrl: status?.share_url ?? null,\n isEnrolled: status?.enrolled ?? false,\n referredBy: status?.referred_by ?? null,\n }\n}\n","'use client'\n\nimport { useState } from 'react'\nimport type { LandingSection } from '../../types.js'\n\n// ─── Theme ────────────────────────────────────────────────────────────────────\n\nexport interface SectionTheme {\n bg: string\n fg: string\n accent: string\n surface: string\n muted: string\n fontDisplay?: string\n fontBody?: string\n}\n\n// ─── Click tracking context ───────────────────────────────────────────────────\n\nexport interface ClickTrackingContext {\n gatewayUrl?: string\n code?: string\n}\n\nfunction trackClick(tracking: ClickTrackingContext | undefined, label: string, url: string, position?: number) {\n if (!tracking?.gatewayUrl || !tracking?.code) return\n const body = JSON.stringify({ label, url, position })\n if (typeof navigator !== 'undefined' && navigator.sendBeacon) {\n navigator.sendBeacon(\n `${tracking.gatewayUrl}/q/${encodeURIComponent(tracking.code)}/click`,\n new Blob([body], { type: 'application/json' }),\n )\n }\n}\n\n// ─── Shared data shape passed to all section renderers ────────────────────────\n\nexport interface SectionData {\n store?: { id?: string; name?: string | null; logo_url?: string | null; tagline?: string | null; theme?: Record<string, unknown> | null } | null\n product?: Record<string, unknown> | null\n coa?: { url: string; viewer_url?: string | null; document_name: string } | null\n gatewayUrl?: string\n landing_page?: { slug?: string } | null\n}\n\n// ─── Section Router ───────────────────────────────────────────────────────────\n\nexport function SectionRenderer({\n section,\n data,\n theme,\n tracking,\n}: {\n section: LandingSection\n data: SectionData\n theme: SectionTheme\n tracking?: ClickTrackingContext\n}) {\n const [showCOA, setShowCOA] = useState(false)\n\n const el = (() => {\n switch (section.type) {\n case 'hero': return <HeroSection section={section} theme={theme} tracking={tracking} />\n case 'text': return <TextSection section={section} theme={theme} />\n case 'image': return <ImageSection section={section} theme={theme} />\n case 'video': return <VideoSection section={section} theme={theme} />\n case 'gallery': return <GallerySection section={section} theme={theme} />\n case 'cta': return <CTASection section={section} theme={theme} tracking={tracking} />\n case 'stats': return <StatsSection section={section} theme={theme} />\n case 'product_card': return <ProductCardSection section={section} data={data} theme={theme} tracking={tracking} />\n case 'coa_viewer': return <COAViewerSection section={section} data={data} theme={theme} onShowCOA={() => setShowCOA(true)} tracking={tracking} />\n case 'social_links': return <SocialLinksSection section={section} theme={theme} />\n case 'lead_capture': return <LeadCaptureSection section={section} data={data} theme={theme} />\n case 'divider': return <DividerSection theme={theme} />\n default: return null\n }\n })()\n\n return (\n <>\n {el}\n {showCOA && data?.coa && <COAModal coa={data.coa} theme={theme} onClose={() => setShowCOA(false)} />}\n </>\n )\n}\n\n// ─── Section Renderers ────────────────────────────────────────────────────────\n\nfunction HeroSection({ section, theme, tracking }: { section: LandingSection; theme: SectionTheme; tracking?: ClickTrackingContext }) {\n const { title, subtitle, background_image, cta_text, cta_url } = section.content as {\n title?: string; subtitle?: string; background_image?: string; cta_text?: string; cta_url?: string\n }\n\n return (\n <div\n style={{\n position: 'relative',\n minHeight: '60vh',\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n alignItems: 'center',\n textAlign: 'center',\n padding: '3rem 1.5rem',\n backgroundImage: background_image ? `url(${background_image})` : undefined,\n backgroundSize: 'cover',\n backgroundPosition: 'center',\n }}\n >\n {background_image && (\n <div style={{ position: 'absolute', inset: 0, background: 'rgba(0,0,0,0.5)' }} />\n )}\n <div style={{ position: 'relative', zIndex: 1, maxWidth: 640 }}>\n {title && (\n <h1 style={{\n fontSize: 'clamp(2rem, 8vw, 3rem)',\n fontWeight: 300,\n fontFamily: theme.fontDisplay || 'inherit',\n margin: '0 0 1rem',\n lineHeight: 1.15,\n letterSpacing: '-0.02em',\n color: theme.fg,\n }}>\n {title}\n </h1>\n )}\n {subtitle && (\n <p style={{\n fontSize: '0.85rem',\n color: theme.accent,\n margin: '0 0 2rem',\n lineHeight: 1.6,\n textTransform: 'uppercase',\n letterSpacing: '0.15em',\n }}>\n {subtitle}\n </p>\n )}\n {cta_text && cta_url && (\n <a\n href={cta_url}\n onClick={() => trackClick(tracking, cta_text!, cta_url!)}\n style={{\n display: 'inline-block',\n padding: '0.875rem 2rem',\n background: theme.fg,\n color: theme.bg,\n textDecoration: 'none',\n fontSize: '0.85rem',\n fontWeight: 500,\n letterSpacing: '0.08em',\n textTransform: 'uppercase',\n }}\n >\n {cta_text}\n </a>\n )}\n </div>\n </div>\n )\n}\n\nfunction TextSection({ section, theme }: { section: LandingSection; theme: SectionTheme }) {\n const { heading, body } = section.content as { heading?: string; body?: string }\n const align = (section.config?.align as string) || 'left'\n\n return (\n <div style={{ padding: '2rem 1.5rem', maxWidth: 640, margin: '0 auto', textAlign: align as 'left' | 'center' | 'right' }}>\n {heading && (\n <h2 style={{\n fontSize: 11,\n fontWeight: 500,\n textTransform: 'uppercase',\n letterSpacing: '0.25em',\n color: `${theme.fg}40`,\n margin: '0 0 0.75rem',\n }}>\n {heading}\n </h2>\n )}\n {body && (\n <div style={{ color: `${theme.fg}99`, lineHeight: 1.7, fontSize: '0.9rem', fontWeight: 300, whiteSpace: 'pre-wrap' }}>\n {body}\n </div>\n )}\n </div>\n )\n}\n\nfunction ImageSection({ section, theme }: { section: LandingSection; theme: SectionTheme }) {\n const { url, alt, caption } = section.content as { url?: string; alt?: string; caption?: string }\n const contained = section.config?.contained !== false\n\n if (!url) return null\n\n return (\n <div style={{ padding: contained ? '1.5rem' : 0, maxWidth: contained ? 640 : undefined, margin: contained ? '0 auto' : undefined }}>\n <img\n src={url}\n alt={alt || ''}\n style={{ width: '100%', display: 'block', objectFit: 'cover' }}\n />\n {caption && (\n <p style={{ fontSize: '0.8rem', color: theme.muted, textAlign: 'center', marginTop: '0.75rem' }}>\n {caption}\n </p>\n )}\n </div>\n )\n}\n\nfunction VideoSection({ section, theme }: { section: LandingSection; theme: SectionTheme }) {\n const { url, poster } = section.content as { url?: string; poster?: string }\n\n if (!url) return null\n\n const isEmbed = url.includes('youtube') || url.includes('youtu.be') || url.includes('vimeo')\n\n return (\n <div style={{ padding: '1.5rem', maxWidth: 640, margin: '0 auto' }}>\n {isEmbed ? (\n <div style={{ position: 'relative', paddingBottom: '56.25%', height: 0 }}>\n <iframe\n src={toEmbedUrl(url)}\n style={{ position: 'absolute', top: 0, left: 0, width: '100%', height: '100%', border: 'none' }}\n allow=\"autoplay; fullscreen\"\n title=\"Video\"\n />\n </div>\n ) : (\n <video\n src={url}\n poster={poster}\n controls\n style={{ width: '100%', display: 'block', background: theme.surface }}\n />\n )}\n </div>\n )\n}\n\nfunction GallerySection({ section, theme }: { section: LandingSection; theme: SectionTheme }) {\n const { images } = section.content as { images?: Array<{ url: string; alt?: string }> }\n const columns = (section.config?.columns as number) || 3\n\n if (!images || images.length === 0) return null\n\n return (\n <div style={{ padding: '1.5rem', maxWidth: 800, margin: '0 auto' }}>\n <div style={{ display: 'grid', gridTemplateColumns: `repeat(${columns}, 1fr)`, gap: '0.5rem' }}>\n {images.map((img, i) => (\n <div key={i} style={{ aspectRatio: '1', overflow: 'hidden', background: theme.surface }}>\n <img\n src={img.url}\n alt={img.alt || ''}\n style={{ width: '100%', height: '100%', objectFit: 'cover', display: 'block' }}\n />\n </div>\n ))}\n </div>\n </div>\n )\n}\n\nfunction CTASection({ section, theme, tracking }: { section: LandingSection; theme: SectionTheme; tracking?: ClickTrackingContext }) {\n const { title, subtitle, buttons } = section.content as {\n title?: string; subtitle?: string\n buttons?: Array<{ text: string; url: string; style?: 'primary' | 'outline' }>\n }\n\n if (!buttons || buttons.length === 0) return null\n\n return (\n <div style={{ padding: '2rem 1.5rem', maxWidth: 480, margin: '0 auto', display: 'flex', flexDirection: 'column', gap: '0.75rem' }}>\n {title && (\n <h2 style={{\n fontSize: 'clamp(1.25rem, 4vw, 1.5rem)',\n fontWeight: 300,\n fontFamily: theme.fontDisplay || 'inherit',\n margin: '0 0 0.25rem',\n lineHeight: 1.2,\n letterSpacing: '-0.02em',\n color: theme.fg,\n textAlign: 'center',\n }}>\n {title}\n </h2>\n )}\n {subtitle && (\n <p style={{\n fontSize: '0.8rem',\n color: theme.accent,\n margin: '0 0 0.75rem',\n lineHeight: 1.6,\n textTransform: 'uppercase',\n letterSpacing: '0.15em',\n textAlign: 'center',\n }}>\n {subtitle}\n </p>\n )}\n {buttons.map((btn, i) => {\n const isPrimary = btn.style !== 'outline'\n return (\n <a\n key={i}\n href={btn.url}\n onClick={() => trackClick(tracking, btn.text, btn.url, i)}\n style={{\n display: 'block',\n width: '100%',\n padding: '0.875rem',\n background: isPrimary ? theme.fg : 'transparent',\n color: isPrimary ? theme.bg : theme.fg,\n border: isPrimary ? 'none' : `1px solid ${theme.fg}20`,\n fontSize: '0.85rem',\n fontWeight: 500,\n textAlign: 'center',\n textDecoration: 'none',\n boxSizing: 'border-box',\n letterSpacing: '0.08em',\n textTransform: 'uppercase',\n }}\n >\n {btn.text}\n </a>\n )\n })}\n </div>\n )\n}\n\nfunction StatsSection({ section, theme }: { section: LandingSection; theme: SectionTheme }) {\n const { stats } = section.content as { stats?: Array<{ label: string; value: string }> }\n const layout = section.config?.layout as string | undefined\n\n if (!stats || stats.length === 0) return null\n\n // List layout = vertical key-value pairs (for details like terpenes, batch, etc.)\n if (layout === 'list') {\n return (\n <div style={{ padding: '1.5rem', maxWidth: 640, margin: '0 auto' }}>\n {stats.map((stat, i) => (\n <div key={i}>\n <div style={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'baseline',\n padding: '0.625rem 0',\n }}>\n <span style={{\n fontSize: 12,\n textTransform: 'uppercase',\n letterSpacing: '0.15em',\n color: `${theme.fg}66`,\n }}>\n {stat.label}\n </span>\n <span style={{ fontSize: 14, fontWeight: 300, color: `${theme.fg}CC` }}>\n {stat.value}\n </span>\n </div>\n {i < stats.length - 1 && (\n <hr style={{ border: 'none', borderTop: `1px solid ${theme.fg}0A`, margin: 0 }} />\n )}\n </div>\n ))}\n </div>\n )\n }\n\n // Default = grid of stat cards (cannabinoids, etc.)\n const columns = Math.min(stats.length, 4)\n\n return (\n <div style={{ padding: '1.5rem', maxWidth: 640, margin: '0 auto' }}>\n <div style={{\n display: 'grid',\n gridTemplateColumns: `repeat(${columns}, 1fr)`,\n border: `1px solid ${theme.fg}0F`,\n }}>\n {stats.map((stat, i) => (\n <div key={i} style={{\n padding: '1.25rem 0.5rem',\n textAlign: 'center',\n borderRight: i < stats.length - 1 ? `1px solid ${theme.fg}0F` : undefined,\n }}>\n <div style={{\n fontFamily: theme.fontDisplay || 'inherit',\n fontSize: 'clamp(1.5rem, 5vw, 2rem)',\n fontWeight: 300,\n lineHeight: 1,\n color: theme.fg,\n }}>\n {stat.value}\n </div>\n <div style={{\n fontSize: 11,\n fontWeight: 500,\n textTransform: 'uppercase',\n letterSpacing: '0.25em',\n color: theme.accent,\n marginTop: '0.5rem',\n }}>\n {stat.label}\n </div>\n </div>\n ))}\n </div>\n </div>\n )\n}\n\nfunction ProductCardSection({ section, data, theme, tracking }: { section: LandingSection; data: SectionData; theme: SectionTheme; tracking?: ClickTrackingContext }) {\n const product = data?.product\n const c = section.content as { name?: string; description?: string; image_url?: string; url?: string }\n\n const name = c.name || (product?.name as string) || ''\n const description = c.description || (product?.description as string) || ''\n const imageUrl = c.image_url || (product?.featured_image as string) || null\n const url = c.url || null\n\n return (\n <div style={{ padding: '1.5rem', maxWidth: 480, margin: '0 auto' }}>\n <div style={{ background: theme.surface, overflow: 'hidden' }}>\n {imageUrl && (\n <div style={{ width: '100%', aspectRatio: '1', overflow: 'hidden' }}>\n <img src={imageUrl} alt={name} style={{ width: '100%', height: '100%', objectFit: 'cover', display: 'block' }} />\n </div>\n )}\n <div style={{ padding: '1.25rem' }}>\n <h3 style={{ fontSize: '1.25rem', fontWeight: 600, margin: '0 0 0.5rem', color: theme.fg }}>{name}</h3>\n {description && (\n <p style={{ fontSize: '0.9rem', color: theme.muted, margin: '0 0 1rem', lineHeight: 1.5 }}>{description}</p>\n )}\n {url && (\n <a\n href={url}\n onClick={() => trackClick(tracking, 'View Product', url!)}\n style={{\n display: 'block',\n width: '100%',\n padding: '0.75rem',\n background: theme.fg,\n color: theme.bg,\n textAlign: 'center',\n textDecoration: 'none',\n fontSize: '0.85rem',\n fontWeight: 500,\n boxSizing: 'border-box',\n letterSpacing: '0.08em',\n textTransform: 'uppercase',\n }}\n >\n View Product\n </a>\n )}\n </div>\n </div>\n </div>\n )\n}\n\nfunction COAViewerSection({\n section,\n data,\n theme,\n onShowCOA,\n tracking,\n}: { section: LandingSection; data: SectionData; theme: SectionTheme; onShowCOA: () => void; tracking?: ClickTrackingContext }) {\n const coa = data?.coa\n const c = section.content as { button_text?: string }\n\n if (!coa) return null\n\n const buttonStyle: React.CSSProperties = {\n width: '100%',\n padding: '0.875rem',\n background: theme.accent,\n color: theme.bg,\n border: 'none',\n fontSize: '0.85rem',\n fontWeight: 500,\n cursor: 'pointer',\n letterSpacing: '0.08em',\n textTransform: 'uppercase',\n textAlign: 'center',\n textDecoration: 'none',\n display: 'block',\n boxSizing: 'border-box',\n }\n\n // If a viewer URL exists (e.g. Quantix COA page), link directly to it.\n // Otherwise fall back to the iframe modal with the raw PDF.\n const buttonLabel = c.button_text || 'View Lab Results'\n\n if (coa.viewer_url) {\n return (\n <div style={{ padding: '1.5rem', maxWidth: 480, margin: '0 auto' }}>\n <a\n href={coa.viewer_url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n onClick={() => trackClick(tracking, buttonLabel, coa.viewer_url!)}\n style={buttonStyle}\n >\n {buttonLabel}\n </a>\n </div>\n )\n }\n\n return (\n <div style={{ padding: '1.5rem', maxWidth: 480, margin: '0 auto' }}>\n <button onClick={() => { trackClick(tracking, buttonLabel, coa.url); onShowCOA() }} style={buttonStyle}>\n {buttonLabel}\n </button>\n </div>\n )\n}\n\nfunction LeadCaptureSection({ section, data, theme }: { section: LandingSection; data: SectionData; theme: SectionTheme }) {\n const c = section.content as {\n heading?: string\n subtitle?: string\n button_text?: string\n success_heading?: string\n success_message?: string\n coupon_code?: string\n gateway_url?: string\n store_id?: string\n source?: string\n landing_page_slug?: string\n tags?: string[]\n }\n\n const [firstName, setFirstName] = useState('')\n const [email, setEmail] = useState('')\n const [status, setStatus] = useState<'idle' | 'loading' | 'success' | 'error'>('idle')\n const [errorMsg, setErrorMsg] = useState('')\n\n const gatewayUrl = c.gateway_url || data.gatewayUrl || 'https://whale-gateway.fly.dev'\n const storeId = c.store_id || data.store?.id\n const slug = c.landing_page_slug || (data.landing_page as { slug?: string } | null)?.slug\n\n async function handleSubmit(e: React.FormEvent) {\n e.preventDefault()\n if (!email || !storeId) return\n\n setStatus('loading')\n setErrorMsg('')\n\n try {\n const res = await fetch(`${gatewayUrl}/v1/stores/${storeId}/storefront/leads`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n email,\n first_name: firstName || undefined,\n source: c.source || 'landing_page',\n landing_page_slug: slug || undefined,\n tags: c.tags || undefined,\n }),\n })\n\n if (!res.ok) {\n const body = await res.json().catch(() => ({}))\n throw new Error((body as { error?: { message?: string } })?.error?.message || 'Something went wrong. Please try again.')\n }\n\n setStatus('success')\n } catch (err) {\n setErrorMsg(err instanceof Error ? err.message : 'Something went wrong. Please try again.')\n setStatus('error')\n }\n }\n\n const heading = c.heading || 'get 10% off your first visit.'\n const subtitle = c.subtitle || 'drop your email and we will send you the code.'\n const buttonText = c.button_text || 'Claim My Discount'\n const successHeading = c.success_heading || 'You\\u2019re in!'\n const successMessage = c.success_message || 'Check your inbox for the discount code.'\n\n const inputStyle: React.CSSProperties = {\n flex: 1,\n minWidth: 0,\n padding: '0.875rem 1rem',\n background: theme.surface,\n border: `1px solid ${theme.fg}15`,\n color: theme.fg,\n fontSize: '0.95rem',\n fontWeight: 300,\n outline: 'none',\n boxSizing: 'border-box',\n fontFamily: 'inherit',\n transition: 'border-color 0.2s',\n }\n\n return (\n <div style={{ padding: '3.5rem 1.5rem', maxWidth: 560, margin: '0 auto' }}>\n <style>{`@keyframes lc-spin { to { transform: rotate(360deg) } }`}</style>\n <div style={{\n background: theme.surface,\n border: `1px solid ${theme.fg}12`,\n padding: 'clamp(2rem, 6vw, 3rem)',\n }}>\n {status === 'success' ? (\n <div style={{ textAlign: 'center' }}>\n <h2 style={{\n fontSize: 'clamp(1.5rem, 5vw, 2rem)',\n fontWeight: 300,\n fontFamily: theme.fontDisplay || 'inherit',\n margin: '0 0 0.75rem',\n lineHeight: 1.2,\n letterSpacing: '-0.02em',\n color: theme.fg,\n }}>\n {successHeading}\n </h2>\n <p style={{\n fontSize: '0.9rem',\n color: `${theme.fg}99`,\n margin: '0 0 1.5rem',\n lineHeight: 1.6,\n fontWeight: 300,\n }}>\n {successMessage}\n </p>\n {c.coupon_code && (\n <div style={{\n display: 'inline-block',\n padding: '0.75rem 2rem',\n background: `${theme.fg}08`,\n border: `1px dashed ${theme.fg}30`,\n fontSize: 'clamp(1.25rem, 4vw, 1.75rem)',\n fontWeight: 500,\n fontFamily: 'monospace',\n letterSpacing: '0.12em',\n color: theme.accent,\n }}>\n {c.coupon_code}\n </div>\n )}\n </div>\n ) : (\n <>\n <div style={{ textAlign: 'center', marginBottom: 'clamp(1.5rem, 4vw, 2rem)' }}>\n <h2 style={{\n fontSize: 'clamp(1.5rem, 5vw, 2.25rem)',\n fontWeight: 300,\n fontFamily: theme.fontDisplay || 'inherit',\n margin: '0 0 0.5rem',\n lineHeight: 1.15,\n letterSpacing: '-0.02em',\n color: theme.fg,\n }}>\n {heading}\n </h2>\n <p style={{\n fontSize: '0.85rem',\n color: theme.accent,\n margin: 0,\n lineHeight: 1.6,\n textTransform: 'uppercase',\n letterSpacing: '0.15em',\n }}>\n {subtitle}\n </p>\n </div>\n\n <form onSubmit={handleSubmit} style={{ display: 'flex', flexDirection: 'column', gap: '0.75rem' }}>\n <div style={{ display: 'flex', gap: '0.75rem', flexWrap: 'wrap' }}>\n <input\n type=\"text\"\n placeholder=\"First name\"\n value={firstName}\n onChange={(e) => setFirstName(e.target.value)}\n style={inputStyle}\n />\n <input\n type=\"email\"\n placeholder=\"Email address\"\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n required\n style={inputStyle}\n />\n </div>\n\n {status === 'error' && errorMsg && (\n <p style={{ fontSize: '0.8rem', color: '#e55', margin: 0, fontWeight: 400 }}>\n {errorMsg}\n </p>\n )}\n\n <button\n type=\"submit\"\n disabled={status === 'loading'}\n style={{\n width: '100%',\n padding: '0.875rem',\n background: theme.fg,\n color: theme.bg,\n border: 'none',\n fontSize: '0.85rem',\n fontWeight: 500,\n cursor: status === 'loading' ? 'wait' : 'pointer',\n letterSpacing: '0.08em',\n textTransform: 'uppercase',\n fontFamily: 'inherit',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '0.5rem',\n opacity: status === 'loading' ? 0.7 : 1,\n transition: 'opacity 0.2s',\n }}\n >\n {status === 'loading' && (\n <span style={{\n display: 'inline-block',\n width: 16,\n height: 16,\n border: `2px solid ${theme.bg}40`,\n borderTopColor: theme.bg,\n borderRadius: '50%',\n animation: 'lc-spin 0.8s linear infinite',\n }} />\n )}\n {buttonText}\n </button>\n </form>\n </>\n )}\n </div>\n </div>\n )\n}\n\nfunction SocialLinksSection({ section, theme }: { section: LandingSection; theme: SectionTheme }) {\n const { links } = section.content as { links?: Array<{ platform: string; url: string }> }\n\n if (!links || links.length === 0) return null\n\n return (\n <div style={{ padding: '1.5rem', display: 'flex', justifyContent: 'center', gap: '1.5rem', flexWrap: 'wrap' }}>\n {links.map((link, i) => (\n <a\n key={i}\n href={link.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={{\n color: theme.muted,\n textDecoration: 'none',\n fontSize: '0.85rem',\n fontWeight: 500,\n textTransform: 'capitalize',\n letterSpacing: '0.03em',\n }}\n >\n {link.platform}\n </a>\n ))}\n </div>\n )\n}\n\nfunction DividerSection({ theme }: { theme: SectionTheme }) {\n return (\n <div style={{ padding: '1rem 1.5rem', maxWidth: 640, margin: '0 auto' }}>\n <hr style={{ border: 'none', borderTop: `1px solid ${theme.fg}0A`, margin: 0 }} />\n </div>\n )\n}\n\nfunction COAModal({ coa, theme, onClose }: {\n coa: { url: string; document_name: string }; theme: SectionTheme; onClose: () => void\n}) {\n return (\n <div style={{ position: 'fixed', inset: 0, zIndex: 9999, background: 'rgba(0,0,0,0.95)', display: 'flex', flexDirection: 'column' }}>\n <div style={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n padding: '0.75rem 1rem',\n borderBottom: `1px solid ${theme.fg}10`,\n }}>\n <span style={{ color: '#fff', fontWeight: 500, fontSize: '0.85rem' }}>\n {coa.document_name || 'Lab Results'}\n </span>\n <button\n onClick={onClose}\n style={{\n background: `${theme.fg}10`,\n border: 'none',\n color: '#fff',\n fontSize: '0.85rem',\n cursor: 'pointer',\n padding: '0.375rem 0.75rem',\n }}\n >\n Close\n </button>\n </div>\n <iframe src={coa.url} style={{ flex: 1, border: 'none', background: '#fff' }} title=\"Lab Results\" />\n </div>\n )\n}\n\n// ─── Helpers ──────────────────────────────────────────────────────────────────\n\nfunction toEmbedUrl(url: string): string {\n const ytMatch = url.match(/(?:youtube\\.com\\/watch\\?v=|youtu\\.be\\/)([\\w-]+)/)\n if (ytMatch) return `https://www.youtube.com/embed/${ytMatch[1]}`\n\n const vimeoMatch = url.match(/vimeo\\.com\\/(\\d+)/)\n if (vimeoMatch) return `https://player.vimeo.com/video/${vimeoMatch[1]}`\n\n return url\n}\n","'use client'\n\nimport { useEffect, useState } from 'react'\nimport type { QRLandingData, LandingSection, LandingPageConfig } from '../../types.js'\nimport { SectionRenderer, type SectionTheme, type ClickTrackingContext } from './section-renderer.js'\n\nexport interface QRLandingPageProps {\n code: string\n gatewayUrl?: string\n /** Override rendering for any section type */\n renderSection?: (section: LandingSection, defaultRenderer: () => React.ReactNode) => React.ReactNode\n onDataLoaded?: (data: QRLandingData) => void\n onError?: (error: Error) => void\n}\n\ntype LoadState = 'loading' | 'ready' | 'not_found' | 'expired' | 'error'\n\nexport function QRLandingPage({\n code,\n gatewayUrl = 'https://whale-gateway.fly.dev',\n renderSection,\n onDataLoaded,\n onError,\n}: QRLandingPageProps) {\n const [state, setState] = useState<LoadState>('loading')\n const [data, setData] = useState<QRLandingData | null>(null)\n const [errorMsg, setErrorMsg] = useState('')\n\n useEffect(() => {\n if (!code) return\n let cancelled = false\n\n async function load() {\n try {\n const res = await fetch(`${gatewayUrl}/q/${encodeURIComponent(code)}/page`)\n if (!cancelled) {\n if (res.status === 404) { setState('not_found'); return }\n if (res.status === 410) { setState('expired'); return }\n if (!res.ok) {\n const body = await res.json().catch(() => ({}))\n throw new Error(body?.error?.message ?? `Failed to load: ${res.status}`)\n }\n const json: QRLandingData = await res.json()\n setData(json)\n setState('ready')\n onDataLoaded?.(json)\n }\n } catch (err) {\n if (!cancelled) {\n const e = err instanceof Error ? err : new Error(String(err))\n setErrorMsg(e.message)\n setState('error')\n onError?.(e)\n }\n }\n }\n\n load()\n return () => { cancelled = true }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [code, gatewayUrl])\n\n if (state === 'loading') return <DefaultLoading />\n if (state === 'not_found') return <DefaultNotFound />\n if (state === 'expired') return <DefaultExpired />\n if (state === 'error') return <DefaultError message={errorMsg} />\n if (!data) return null\n\n // If a landing page template is linked, use its sections.\n // Otherwise, auto-generate sections from product/COA data.\n const lp = data.landing_page\n const sections = lp?.sections ?? buildDefaultSections(data)\n\n const theme = extractTheme(data, lp)\n const fontFamily = lp?.font_family\n || (data.store?.theme?.fontDisplay as string)\n || 'system-ui, -apple-system, sans-serif'\n\n const logoUrl = data.qr_code.logo_url || data.store?.logo_url\n const storeName = data.store?.name\n\n const sorted = [...sections].sort((a, b) => a.order - b.order)\n const tracking: ClickTrackingContext = { gatewayUrl, code }\n\n return (\n <div style={{ minHeight: '100dvh', background: theme.bg, color: theme.fg, fontFamily }}>\n {lp?.custom_css && <style>{lp.custom_css}</style>}\n\n {/* Header */}\n {logoUrl && (\n <div style={{ padding: '1.5rem', display: 'flex', justifyContent: 'center' }}>\n <img src={logoUrl} alt={storeName || 'Store'} style={{ height: 40, objectFit: 'contain' }} />\n </div>\n )}\n\n {/* Sections */}\n {sorted.map((section) => {\n const defaultRenderer = () => (\n <SectionRenderer key={section.id} section={section} data={data} theme={theme} tracking={tracking} />\n )\n\n if (renderSection) {\n return <div key={section.id}>{renderSection(section, defaultRenderer)}</div>\n }\n\n return <SectionRenderer key={section.id} section={section} data={data} theme={theme} tracking={tracking} />\n })}\n\n {/* Footer */}\n {storeName && (\n <div style={{ padding: '2rem 1.5rem', borderTop: `1px solid ${theme.surface}`, textAlign: 'center' }}>\n <p style={{ fontSize: '0.75rem', color: theme.muted, margin: 0 }}>\n {storeName}{data.store?.tagline ? ` — ${data.store.tagline}` : ''}\n </p>\n </div>\n )}\n </div>\n )\n}\n\n// ─── Theme Extraction ─────────────────────────────────────────────────────────\n\nfunction extractTheme(data: QRLandingData, lp: LandingPageConfig | null): SectionTheme {\n const t = data.store?.theme as Record<string, unknown> | null | undefined\n const qrLp = data.qr_code.landing_page\n return {\n bg: lp?.background_color || qrLp.background_color || (t?.background as string) || '#050505',\n fg: lp?.text_color || qrLp.text_color || (t?.foreground as string) || '#fafafa',\n accent: lp?.accent_color || (t?.accent as string) || '#E8E2D9',\n surface: (t?.surface as string) || '#111',\n muted: (t?.muted as string) || '#888',\n fontDisplay: (t?.fontDisplay as string) || 'system-ui, -apple-system, sans-serif',\n fontBody: (t?.fontBody as string) || 'system-ui, -apple-system, sans-serif',\n }\n}\n\n// ─── Default Sections Builder ─────────────────────────────────────────────────\n// When no landing page template is linked, generate sections from product data.\n\nfunction buildDefaultSections(data: QRLandingData): LandingSection[] {\n const { product, coa, qr_code: qr } = data\n const cf = product?.custom_fields as Record<string, unknown> | null | undefined\n const sections: LandingSection[] = []\n let order = 0\n\n const productName = qr.landing_page.title || (product?.name as string) || qr.name\n const productImage = qr.landing_page.image_url || (product?.featured_image as string) || null\n const description = (product?.description as string) || ''\n const categoryName = (product?.category_name as string) ?? null\n const strainType = toStr(cf?.strain_type)\n const tagline = toStr(cf?.tagline)\n\n // Hero — product image with name and category/strain subtitle (no CTA here)\n if (productImage) {\n sections.push({\n id: 'auto-hero',\n type: 'hero',\n order: order++,\n content: {\n title: productName,\n subtitle: [categoryName, strainType].filter(Boolean).join(' · '),\n background_image: productImage,\n },\n })\n } else {\n sections.push({\n id: 'auto-header',\n type: 'text',\n order: order++,\n content: {\n heading: productName,\n body: [categoryName, strainType].filter(Boolean).join(' · ') || undefined,\n },\n config: { align: 'center' },\n })\n }\n\n // Tagline\n if (tagline) {\n sections.push({\n id: 'auto-tagline',\n type: 'text',\n order: order++,\n content: { body: tagline },\n config: { align: 'center' },\n })\n }\n\n // Detect product type from category or custom fields\n const totalMg = toNum(cf?.total_mg_per_package ?? cf?.total_mg)\n const mgPerPiece = toNum(cf?.mg_per_piece)\n const piecesPerPkg = toNum(cf?.pieces_per_package)\n const isEdible = totalMg != null || mgPerPiece != null || piecesPerPkg != null\n\n // Cannabinoid / dosage stats — layout adapts to product type\n const thca = toNum(cf?.thca_percentage)\n const thc = toNum(cf?.d9_percentage)\n const cbd = toNum(cf?.cbd_total)\n const stats: Array<{ label: string; value: string }> = []\n\n if (isEdible) {\n // Edibles: lead with dosage info (mg is what customers care about)\n if (totalMg != null) stats.push({ label: 'Total MG', value: `${fmtMg(totalMg)}` })\n if (mgPerPiece != null) stats.push({ label: 'Per Piece', value: `${fmtMg(mgPerPiece)}mg` })\n if (piecesPerPkg != null) stats.push({ label: 'Pieces', value: `${piecesPerPkg}` })\n // Still show cannabinoids if present (secondary)\n if (thc != null) stats.push({ label: 'Δ9 THC', value: `${thc.toFixed(thc >= 1 ? 1 : 2)}%` })\n } else {\n // Flower/concentrates: lead with cannabinoid percentages\n if (thca != null) stats.push({ label: 'THCa', value: `${thca.toFixed(thca >= 1 ? 1 : 2)}%` })\n if (thc != null) stats.push({ label: 'Δ9 THC', value: `${thc.toFixed(thc >= 1 ? 1 : 2)}%` })\n if (cbd != null) stats.push({ label: 'CBD', value: `${cbd.toFixed(cbd >= 1 ? 1 : 2)}%` })\n }\n\n if (stats.length > 0) {\n sections.push({\n id: 'auto-stats',\n type: 'stats',\n order: order++,\n content: { stats },\n })\n }\n\n // Edible serving info (if not already covered in stats)\n if (isEdible) {\n const servingDetails: Array<{ label: string; value: string }> = []\n const servingSize = toStr(cf?.serving_size)\n const ingredients = toStr(cf?.ingredients)\n const allergens = toStr(cf?.allergens)\n if (servingSize) servingDetails.push({ label: 'Serving Size', value: servingSize })\n if (ingredients) servingDetails.push({ label: 'Ingredients', value: ingredients })\n if (allergens) servingDetails.push({ label: 'Allergens', value: allergens })\n if (servingDetails.length > 0) {\n sections.push({\n id: 'auto-serving',\n type: 'stats',\n order: order++,\n content: { stats: servingDetails },\n config: { layout: 'list' },\n })\n }\n }\n\n // Product details — genetics, terpenes, effects\n const profileDetails: Array<{ label: string; value: string }> = []\n const genetics = toStr(cf?.genetics)\n const terpenes = toStr(cf?.terpenes)\n const effects = toStr(cf?.effects)\n const flavorProfile = toStr(cf?.flavor_profile)\n const bestFor = toStr(cf?.best_for)\n\n if (genetics) profileDetails.push({ label: 'Genetics', value: genetics })\n if (terpenes) profileDetails.push({ label: 'Terpenes', value: terpenes })\n if (effects) profileDetails.push({ label: 'Effects', value: effects })\n if (flavorProfile) profileDetails.push({ label: 'Flavor', value: flavorProfile })\n if (bestFor) profileDetails.push({ label: 'Best For', value: bestFor })\n\n if (profileDetails.length > 0) {\n sections.push({\n id: 'auto-profile',\n type: 'stats',\n order: order++,\n content: { stats: profileDetails },\n config: { layout: 'list' },\n })\n }\n\n // Description\n if (description) {\n sections.push({\n id: 'auto-description',\n type: 'text',\n order: order++,\n content: { heading: 'About', body: description },\n })\n }\n\n // Lab results — single COA viewer button (the only \"View Lab Results\" on the page)\n if (coa) {\n sections.push({\n id: 'auto-coa',\n type: 'coa_viewer',\n order: order++,\n content: { button_text: 'View Lab Results' },\n })\n }\n\n // Batch & testing info — below the COA button for reference\n const labDetails: Array<{ label: string; value: string }> = []\n const batchNumber = toStr(cf?.batch_number)\n const dateTested = toStr(cf?.date_tested)\n\n if (batchNumber) labDetails.push({ label: 'Batch', value: batchNumber })\n if (dateTested) labDetails.push({ label: 'Tested', value: formatDate(dateTested) })\n\n if (labDetails.length > 0) {\n sections.push({\n id: 'auto-lab-info',\n type: 'stats',\n order: order++,\n content: { stats: labDetails },\n config: { layout: 'list' },\n })\n }\n\n // Shop link — only if product has a slug (link to storefront product page, not COA)\n const productSlug = product?.slug as string | undefined\n if (productSlug) {\n const storeDomain = data.store?.name === 'Flora Distro' ? 'floradistro.com' : null\n if (storeDomain) {\n sections.push({\n id: 'auto-shop',\n type: 'cta',\n order: order++,\n content: {\n buttons: [{ text: 'Shop This Product', url: `https://${storeDomain}/shop/${productSlug}`, style: 'outline' as const }],\n },\n })\n }\n }\n\n return sections\n}\n\n// ─── Helpers ──────────────────────────────────────────────────────────────────\n\nfunction toNum(v: unknown): number | null {\n if (v === '' || v == null) return null\n const n = Number(v)\n return Number.isFinite(n) ? n : null\n}\n\nfunction fmtMg(mg: number): string {\n return mg === Math.floor(mg) ? `${mg}mg` : `${mg.toFixed(1)}mg`\n}\n\nfunction toStr(v: unknown): string | null {\n if (v == null || v === '') return null\n return String(v)\n}\n\nfunction formatDate(dateStr: string): string {\n try {\n const d = new Date(dateStr + 'T00:00:00')\n return d.toLocaleDateString('en-US', { month: 'short', day: 'numeric', year: 'numeric' })\n } catch { return dateStr }\n}\n\n// ─── State Screens ────────────────────────────────────────────────────────────\n\nconst containerStyle: React.CSSProperties = {\n minHeight: '100dvh',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n fontFamily: 'system-ui, -apple-system, sans-serif',\n background: '#050505',\n color: '#fafafa',\n textAlign: 'center',\n padding: '2rem',\n}\n\nfunction DefaultLoading() {\n return (\n <div style={containerStyle}>\n <div>\n <div style={{ width: 32, height: 32, border: '2px solid #333', borderTopColor: '#fafafa', borderRadius: '50%', animation: 'spin 0.8s linear infinite', margin: '0 auto 1rem' }} />\n <style>{`@keyframes spin { to { transform: rotate(360deg) } }`}</style>\n </div>\n </div>\n )\n}\n\nfunction DefaultNotFound() {\n return (\n <div style={containerStyle}>\n <div>\n <h1 style={{ fontSize: '1.5rem', marginBottom: '0.5rem' }}>QR Code Not Found</h1>\n <p style={{ color: '#888' }}>This QR code does not exist or has been deactivated.</p>\n </div>\n </div>\n )\n}\n\nfunction DefaultExpired() {\n return (\n <div style={containerStyle}>\n <div>\n <h1 style={{ fontSize: '1.5rem', marginBottom: '0.5rem' }}>QR Code Expired</h1>\n <p style={{ color: '#888' }}>This QR code is no longer active.</p>\n </div>\n </div>\n )\n}\n\nfunction DefaultError({ message }: { message: string }) {\n return (\n <div style={containerStyle}>\n <div>\n <h1 style={{ fontSize: '1.5rem', marginBottom: '0.5rem' }}>Something Went Wrong</h1>\n <p style={{ color: '#888' }}>{message || 'Please try scanning again.'}</p>\n </div>\n </div>\n )\n}\n","'use client'\n\nimport { useEffect, useState } from 'react'\nimport type { LandingPageRenderData, LandingSection } from '../../types.js'\nimport { SectionRenderer, type SectionTheme } from './section-renderer.js'\n\nexport interface LandingPageProps {\n slug: string\n gatewayUrl?: string\n renderSection?: (section: LandingSection, defaultRenderer: () => React.ReactNode) => React.ReactNode\n onDataLoaded?: (data: LandingPageRenderData) => void\n onError?: (error: Error) => void\n}\n\ntype LoadState = 'loading' | 'ready' | 'not_found' | 'expired' | 'error'\n\nexport function LandingPage({\n slug,\n gatewayUrl = 'https://whale-gateway.fly.dev',\n renderSection,\n onDataLoaded,\n onError,\n}: LandingPageProps) {\n const [state, setState] = useState<LoadState>('loading')\n const [data, setData] = useState<LandingPageRenderData | null>(null)\n const [errorMsg, setErrorMsg] = useState('')\n\n useEffect(() => {\n if (!slug) return\n let cancelled = false\n\n async function load() {\n try {\n const res = await fetch(`${gatewayUrl}/l/${encodeURIComponent(slug)}`)\n if (!cancelled) {\n if (res.status === 404) { setState('not_found'); return }\n if (res.status === 410) { setState('expired'); return }\n if (!res.ok) {\n const body = await res.json().catch(() => ({}))\n throw new Error(body?.error?.message ?? `Failed to load: ${res.status}`)\n }\n const json: LandingPageRenderData = await res.json()\n setData(json)\n setState('ready')\n onDataLoaded?.(json)\n }\n } catch (err) {\n if (!cancelled) {\n const e = err instanceof Error ? err : new Error(String(err))\n setErrorMsg(e.message)\n setState('error')\n onError?.(e)\n }\n }\n }\n\n load()\n return () => { cancelled = true }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [slug, gatewayUrl])\n\n if (state === 'loading') return <DefaultLoading />\n if (state === 'not_found') return <DefaultNotFound />\n if (state === 'expired') return <DefaultExpired />\n if (state === 'error') return <DefaultError message={errorMsg} />\n if (!data) return null\n\n return <PageLayout data={data} gatewayUrl={gatewayUrl} renderSection={renderSection} />\n}\n\n// ─── Page Layout ──────────────────────────────────────────────────────────────\n\nfunction PageLayout({\n data,\n gatewayUrl,\n renderSection,\n}: {\n data: LandingPageRenderData\n gatewayUrl: string\n renderSection?: LandingPageProps['renderSection']\n}) {\n const { landing_page: lp, store } = data\n\n const theme: SectionTheme = {\n bg: lp.background_color || (store?.theme?.background as string) || '#050505',\n fg: lp.text_color || (store?.theme?.foreground as string) || '#fafafa',\n accent: lp.accent_color || (store?.theme?.accent as string) || '#E8E2D9',\n surface: (store?.theme?.surface as string) || '#111',\n muted: (store?.theme?.muted as string) || '#888',\n fontDisplay: (store?.theme?.fontDisplay as string) || undefined,\n fontBody: (store?.theme?.fontBody as string) || undefined,\n }\n\n const fontFamily = lp.font_family || theme.fontDisplay || 'system-ui, -apple-system, sans-serif'\n const logoUrl = store?.logo_url\n\n const sorted = [...lp.sections].sort((a, b) => a.order - b.order)\n\n const sectionData = { ...data, gatewayUrl, landing_page: { slug: lp.slug } }\n\n return (\n <div style={{ minHeight: '100dvh', background: theme.bg, color: theme.fg, fontFamily }}>\n {lp.custom_css && <style>{lp.custom_css}</style>}\n\n {logoUrl && (\n <div style={{ padding: '1.5rem', display: 'flex', justifyContent: 'center' }}>\n <img src={logoUrl} alt={store?.name || 'Store'} style={{ height: 40, objectFit: 'contain' }} />\n </div>\n )}\n\n {sorted.map((section) => {\n const defaultRenderer = () => (\n <SectionRenderer key={section.id} section={section} data={sectionData} theme={theme} />\n )\n\n if (renderSection) {\n return <div key={section.id}>{renderSection(section, defaultRenderer)}</div>\n }\n\n return <SectionRenderer key={section.id} section={section} data={sectionData} theme={theme} />\n })}\n\n {store?.name && (\n <div style={{ padding: '2rem 1.5rem', borderTop: `1px solid ${theme.surface}`, textAlign: 'center' }}>\n <p style={{ fontSize: '0.75rem', color: theme.muted, margin: 0 }}>\n Powered by {store.name}\n </p>\n </div>\n )}\n </div>\n )\n}\n\n// ─── State Screens ────────────────────────────────────────────────────────────\n\nconst containerStyle: React.CSSProperties = {\n minHeight: '100dvh',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n fontFamily: 'system-ui, -apple-system, sans-serif',\n background: '#050505',\n color: '#fafafa',\n textAlign: 'center',\n padding: '2rem',\n}\n\nfunction DefaultLoading() {\n return (\n <div style={containerStyle}>\n <div>\n <div style={{ width: 32, height: 32, border: '2px solid #333', borderTopColor: '#fafafa', borderRadius: '50%', animation: 'spin 0.8s linear infinite', margin: '0 auto 1rem' }} />\n <style>{`@keyframes spin { to { transform: rotate(360deg) } }`}</style>\n </div>\n </div>\n )\n}\n\nfunction DefaultNotFound() {\n return (\n <div style={containerStyle}>\n <div>\n <h1 style={{ fontSize: '1.5rem', marginBottom: '0.5rem' }}>Page Not Found</h1>\n <p style={{ color: '#888' }}>This page does not exist or has been removed.</p>\n </div>\n </div>\n )\n}\n\nfunction DefaultExpired() {\n return (\n <div style={containerStyle}>\n <div>\n <h1 style={{ fontSize: '1.5rem', marginBottom: '0.5rem' }}>Page Expired</h1>\n <p style={{ color: '#888' }}>This page is no longer active.</p>\n </div>\n </div>\n )\n}\n\nfunction DefaultError({ message }: { message: string }) {\n return (\n <div style={containerStyle}>\n <div>\n <h1 style={{ fontSize: '1.5rem', marginBottom: '0.5rem' }}>Something Went Wrong</h1>\n <p style={{ color: '#888' }}>{message || 'Please try again later.'}</p>\n </div>\n </div>\n )\n}\n"]}