@neowhale/storefront 0.2.27 → 0.2.29

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.
@@ -7,7 +7,9 @@ var EVENT_MAP = {
7
7
  begin_checkout: "InitiateCheckout",
8
8
  purchase: "Purchase",
9
9
  search: "Search",
10
- category_view: "ViewContent"
10
+ category_view: "ViewContent",
11
+ lead: "Lead",
12
+ cta_click: "ViewContent"
11
13
  };
12
14
  var MetaPixelProvider = class {
13
15
  constructor(pixelId) {
@@ -71,7 +73,9 @@ var EVENT_MAP2 = {
71
73
  begin_checkout: "begin_checkout",
72
74
  purchase: "purchase",
73
75
  search: "search",
74
- category_view: "view_item_list"
76
+ category_view: "view_item_list",
77
+ lead: "generate_lead",
78
+ cta_click: "select_content"
75
79
  };
76
80
  var GooglePixelProvider = class {
77
81
  constructor(measurementId) {
@@ -154,5 +158,5 @@ var PixelManager = class {
154
158
  };
155
159
 
156
160
  export { PixelManager };
157
- //# sourceMappingURL=chunk-PXS2DPVL.js.map
158
- //# sourceMappingURL=chunk-PXS2DPVL.js.map
161
+ //# sourceMappingURL=chunk-MZO7BCGU.js.map
162
+ //# sourceMappingURL=chunk-MZO7BCGU.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/pixels/meta-pixel.ts","../src/pixels/google-pixel.ts","../src/pixels/pixel-manager.ts"],"names":["EVENT_MAP"],"mappings":"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","file":"chunk-MZO7BCGU.js","sourcesContent":["import type { PixelProvider } from './types.js'\n\n/** Map SDK event names → Meta standard event names */\nconst EVENT_MAP: Record<string, string> = {\n page_view: 'PageView',\n product_view: 'ViewContent',\n add_to_cart: 'AddToCart',\n remove_from_cart: 'RemoveFromCart',\n begin_checkout: 'InitiateCheckout',\n purchase: 'Purchase',\n search: 'Search',\n category_view: 'ViewContent',\n lead: 'Lead',\n cta_click: 'ViewContent',\n}\n\nexport class MetaPixelProvider implements PixelProvider {\n readonly name = 'meta'\n private pixelId: string\n private loaded = false\n\n constructor(pixelId: string) {\n this.pixelId = pixelId\n }\n\n async load(): Promise<void> {\n if (typeof window === 'undefined') return\n if (this.loaded) return\n\n // Initialize fbq queue\n const w = window as any\n if (!w.fbq) {\n const n: any = (w.fbq = function (...args: any[]) {\n n.callMethod ? n.callMethod.apply(n, args) : n.queue.push(args)\n })\n if (!w._fbq) w._fbq = n\n n.push = n\n n.loaded = true\n n.version = '2.0'\n n.queue = []\n }\n\n // Inject script\n await new Promise<void>((resolve) => {\n const script = document.createElement('script')\n script.async = true\n script.src = 'https://connect.facebook.net/en_US/fbevents.js'\n script.onload = () => resolve()\n script.onerror = () => resolve() // don't block on load failure\n const first = document.getElementsByTagName('script')[0]\n first?.parentNode?.insertBefore(script, first)\n })\n\n w.fbq('init', this.pixelId)\n w.fbq('track', 'PageView')\n this.loaded = true\n }\n\n track(event: string, params?: Record<string, unknown>): void {\n if (typeof window === 'undefined') return\n const w = window as any\n if (typeof w.fbq !== 'function') return\n\n const metaEvent = EVENT_MAP[event]\n if (!metaEvent) return\n\n // Extract eventID for Meta dedup (fbq 4th arg), pass remaining as event params\n const { eventID, ...rest } = params ?? {}\n const hasParams = Object.keys(rest).length > 0\n const options = eventID ? { eventID } : undefined\n\n if (hasParams) {\n w.fbq('track', metaEvent, rest, options)\n } else {\n w.fbq('track', metaEvent, {}, options)\n }\n }\n\n isLoaded(): boolean {\n return this.loaded\n }\n}\n","import type { PixelProvider } from './types.js'\n\n/** Map SDK event names → GA4 recommended event names */\nconst EVENT_MAP: Record<string, string> = {\n page_view: 'page_view',\n product_view: 'view_item',\n add_to_cart: 'add_to_cart',\n remove_from_cart: 'remove_from_cart',\n begin_checkout: 'begin_checkout',\n purchase: 'purchase',\n search: 'search',\n category_view: 'view_item_list',\n lead: 'generate_lead',\n cta_click: 'select_content',\n}\n\nexport class GooglePixelProvider implements PixelProvider {\n readonly name = 'google'\n private measurementId: string\n private loaded = false\n\n constructor(measurementId: string) {\n this.measurementId = measurementId\n }\n\n async load(): Promise<void> {\n if (typeof window === 'undefined') return\n if (this.loaded) return\n\n const w = window as any\n\n // Initialize dataLayer\n w.dataLayer = w.dataLayer || []\n if (!w.gtag) {\n w.gtag = function (...args: any[]) {\n w.dataLayer.push(arguments)\n }\n w.gtag('js', new Date())\n w.gtag('config', this.measurementId)\n }\n\n // Inject gtag.js script\n await new Promise<void>((resolve) => {\n const script = document.createElement('script')\n script.async = true\n script.src = `https://www.googletagmanager.com/gtag/js?id=${this.measurementId}`\n script.onload = () => resolve()\n script.onerror = () => resolve()\n document.head.appendChild(script)\n })\n\n this.loaded = true\n }\n\n track(event: string, params?: Record<string, unknown>): void {\n if (typeof window === 'undefined') return\n const w = window as any\n if (typeof w.gtag !== 'function') return\n\n const ga4Event = EVENT_MAP[event]\n if (!ga4Event) return\n\n // Strip eventID (Meta-specific), map to GA4 params\n const { eventID, product_id, product_name, quantity, price, tier, total, order_id, order_number, cart_id, item_count, query, result_count, ...rest } = params ?? {}\n\n const ga4Params: Record<string, unknown> = { ...rest }\n\n if (total !== undefined) ga4Params.value = total\n if (order_id) ga4Params.transaction_id = order_id\n if (query) ga4Params.search_term = query\n\n // Build items array for e-commerce events\n if (product_id) {\n ga4Params.items = [{\n item_id: product_id,\n item_name: product_name,\n quantity: quantity ?? 1,\n price,\n item_variant: tier,\n }]\n }\n\n ga4Params.currency = 'USD'\n\n w.gtag('event', ga4Event, ga4Params)\n }\n\n isLoaded(): boolean {\n return this.loaded\n }\n}\n","import type { PixelConfig, PixelProvider } from './types.js'\nimport { MetaPixelProvider } from './meta-pixel.js'\nimport { GooglePixelProvider } from './google-pixel.js'\n\nexport class PixelManager {\n private providers: PixelProvider[] = []\n\n constructor(configs: PixelConfig[]) {\n for (const config of configs) {\n if (config.provider === 'meta' && config.pixel_id) {\n this.providers.push(new MetaPixelProvider(config.pixel_id))\n } else if (config.provider === 'google' && config.measurement_id) {\n this.providers.push(new GooglePixelProvider(config.measurement_id))\n }\n }\n }\n\n async initialize(): Promise<void> {\n await Promise.all(this.providers.map((p) => p.load()))\n }\n\n track(event: string, params?: Record<string, unknown>): void {\n for (const provider of this.providers) {\n if (provider.isLoaded()) {\n provider.track(event, params)\n }\n }\n }\n}\n"]}
@@ -9,7 +9,9 @@ var EVENT_MAP = {
9
9
  begin_checkout: "InitiateCheckout",
10
10
  purchase: "Purchase",
11
11
  search: "Search",
12
- category_view: "ViewContent"
12
+ category_view: "ViewContent",
13
+ lead: "Lead",
14
+ cta_click: "ViewContent"
13
15
  };
14
16
  var MetaPixelProvider = class {
15
17
  constructor(pixelId) {
@@ -73,7 +75,9 @@ var EVENT_MAP2 = {
73
75
  begin_checkout: "begin_checkout",
74
76
  purchase: "purchase",
75
77
  search: "search",
76
- category_view: "view_item_list"
78
+ category_view: "view_item_list",
79
+ lead: "generate_lead",
80
+ cta_click: "select_content"
77
81
  };
78
82
  var GooglePixelProvider = class {
79
83
  constructor(measurementId) {
@@ -156,5 +160,5 @@ var PixelManager = class {
156
160
  };
157
161
 
158
162
  exports.PixelManager = PixelManager;
159
- //# sourceMappingURL=chunk-7KXJLHGA.cjs.map
160
- //# sourceMappingURL=chunk-7KXJLHGA.cjs.map
163
+ //# sourceMappingURL=chunk-UW2U5BRY.cjs.map
164
+ //# sourceMappingURL=chunk-UW2U5BRY.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/pixels/meta-pixel.ts","../src/pixels/google-pixel.ts","../src/pixels/pixel-manager.ts"],"names":["EVENT_MAP"],"mappings":"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","file":"chunk-UW2U5BRY.cjs","sourcesContent":["import type { PixelProvider } from './types.js'\n\n/** Map SDK event names → Meta standard event names */\nconst EVENT_MAP: Record<string, string> = {\n page_view: 'PageView',\n product_view: 'ViewContent',\n add_to_cart: 'AddToCart',\n remove_from_cart: 'RemoveFromCart',\n begin_checkout: 'InitiateCheckout',\n purchase: 'Purchase',\n search: 'Search',\n category_view: 'ViewContent',\n lead: 'Lead',\n cta_click: 'ViewContent',\n}\n\nexport class MetaPixelProvider implements PixelProvider {\n readonly name = 'meta'\n private pixelId: string\n private loaded = false\n\n constructor(pixelId: string) {\n this.pixelId = pixelId\n }\n\n async load(): Promise<void> {\n if (typeof window === 'undefined') return\n if (this.loaded) return\n\n // Initialize fbq queue\n const w = window as any\n if (!w.fbq) {\n const n: any = (w.fbq = function (...args: any[]) {\n n.callMethod ? n.callMethod.apply(n, args) : n.queue.push(args)\n })\n if (!w._fbq) w._fbq = n\n n.push = n\n n.loaded = true\n n.version = '2.0'\n n.queue = []\n }\n\n // Inject script\n await new Promise<void>((resolve) => {\n const script = document.createElement('script')\n script.async = true\n script.src = 'https://connect.facebook.net/en_US/fbevents.js'\n script.onload = () => resolve()\n script.onerror = () => resolve() // don't block on load failure\n const first = document.getElementsByTagName('script')[0]\n first?.parentNode?.insertBefore(script, first)\n })\n\n w.fbq('init', this.pixelId)\n w.fbq('track', 'PageView')\n this.loaded = true\n }\n\n track(event: string, params?: Record<string, unknown>): void {\n if (typeof window === 'undefined') return\n const w = window as any\n if (typeof w.fbq !== 'function') return\n\n const metaEvent = EVENT_MAP[event]\n if (!metaEvent) return\n\n // Extract eventID for Meta dedup (fbq 4th arg), pass remaining as event params\n const { eventID, ...rest } = params ?? {}\n const hasParams = Object.keys(rest).length > 0\n const options = eventID ? { eventID } : undefined\n\n if (hasParams) {\n w.fbq('track', metaEvent, rest, options)\n } else {\n w.fbq('track', metaEvent, {}, options)\n }\n }\n\n isLoaded(): boolean {\n return this.loaded\n }\n}\n","import type { PixelProvider } from './types.js'\n\n/** Map SDK event names → GA4 recommended event names */\nconst EVENT_MAP: Record<string, string> = {\n page_view: 'page_view',\n product_view: 'view_item',\n add_to_cart: 'add_to_cart',\n remove_from_cart: 'remove_from_cart',\n begin_checkout: 'begin_checkout',\n purchase: 'purchase',\n search: 'search',\n category_view: 'view_item_list',\n lead: 'generate_lead',\n cta_click: 'select_content',\n}\n\nexport class GooglePixelProvider implements PixelProvider {\n readonly name = 'google'\n private measurementId: string\n private loaded = false\n\n constructor(measurementId: string) {\n this.measurementId = measurementId\n }\n\n async load(): Promise<void> {\n if (typeof window === 'undefined') return\n if (this.loaded) return\n\n const w = window as any\n\n // Initialize dataLayer\n w.dataLayer = w.dataLayer || []\n if (!w.gtag) {\n w.gtag = function (...args: any[]) {\n w.dataLayer.push(arguments)\n }\n w.gtag('js', new Date())\n w.gtag('config', this.measurementId)\n }\n\n // Inject gtag.js script\n await new Promise<void>((resolve) => {\n const script = document.createElement('script')\n script.async = true\n script.src = `https://www.googletagmanager.com/gtag/js?id=${this.measurementId}`\n script.onload = () => resolve()\n script.onerror = () => resolve()\n document.head.appendChild(script)\n })\n\n this.loaded = true\n }\n\n track(event: string, params?: Record<string, unknown>): void {\n if (typeof window === 'undefined') return\n const w = window as any\n if (typeof w.gtag !== 'function') return\n\n const ga4Event = EVENT_MAP[event]\n if (!ga4Event) return\n\n // Strip eventID (Meta-specific), map to GA4 params\n const { eventID, product_id, product_name, quantity, price, tier, total, order_id, order_number, cart_id, item_count, query, result_count, ...rest } = params ?? {}\n\n const ga4Params: Record<string, unknown> = { ...rest }\n\n if (total !== undefined) ga4Params.value = total\n if (order_id) ga4Params.transaction_id = order_id\n if (query) ga4Params.search_term = query\n\n // Build items array for e-commerce events\n if (product_id) {\n ga4Params.items = [{\n item_id: product_id,\n item_name: product_name,\n quantity: quantity ?? 1,\n price,\n item_variant: tier,\n }]\n }\n\n ga4Params.currency = 'USD'\n\n w.gtag('event', ga4Event, ga4Params)\n }\n\n isLoaded(): boolean {\n return this.loaded\n }\n}\n","import type { PixelConfig, PixelProvider } from './types.js'\nimport { MetaPixelProvider } from './meta-pixel.js'\nimport { GooglePixelProvider } from './google-pixel.js'\n\nexport class PixelManager {\n private providers: PixelProvider[] = []\n\n constructor(configs: PixelConfig[]) {\n for (const config of configs) {\n if (config.provider === 'meta' && config.pixel_id) {\n this.providers.push(new MetaPixelProvider(config.pixel_id))\n } else if (config.provider === 'google' && config.measurement_id) {\n this.providers.push(new GooglePixelProvider(config.measurement_id))\n }\n }\n }\n\n async initialize(): Promise<void> {\n await Promise.all(this.providers.map((p) => p.load()))\n }\n\n track(event: string, params?: Record<string, unknown>): void {\n for (const provider of this.providers) {\n if (provider.isLoaded()) {\n provider.track(event, params)\n }\n }\n }\n}\n"]}
@@ -503,5 +503,5 @@ WhaleClient.signMedia = signMedia;
503
503
 
504
504
  exports.WhaleClient = WhaleClient;
505
505
  exports.resilientSend = resilientSend;
506
- //# sourceMappingURL=chunk-VAA2KKCH.cjs.map
507
- //# sourceMappingURL=chunk-VAA2KKCH.cjs.map
506
+ //# sourceMappingURL=chunk-V5KCIYKG.cjs.map
507
+ //# sourceMappingURL=chunk-V5KCIYKG.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/resilient-send.ts","../src/client-queries.ts","../src/client.ts"],"names":[],"mappings":"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","file":"chunk-V5KCIYKG.cjs","sourcesContent":["/**\n * Resilient HTTP sender for analytics/event payloads.\n *\n * Retries transient (5xx / network) failures with linear back-off,\n * then falls back to navigator.sendBeacon so the event still lands\n * even when the tab is being unloaded.\n *\n * 4xx responses are NOT retried — they indicate a client error that\n * won't resolve by resending.\n */\n\nconst MAX_RETRIES = 2\nconst RETRY_DELAY_MS = 1000\n\nexport async function resilientSend(\n url: string,\n payload: object,\n headers: Record<string, string>,\n): Promise<void> {\n const body = JSON.stringify(payload)\n\n for (let attempt = 0; attempt <= MAX_RETRIES; attempt++) {\n try {\n const res = await fetch(url, {\n method: 'POST',\n headers,\n body,\n keepalive: true,\n })\n // Success or client-error (4xx) — don't retry\n if (res.ok || res.status < 500) return\n } catch {\n // Network error — retry\n }\n\n if (attempt < MAX_RETRIES) {\n await new Promise<void>((r) => setTimeout(r, RETRY_DELAY_MS * (attempt + 1)))\n }\n }\n\n // All retries exhausted — fire-and-forget via sendBeacon\n if (typeof navigator !== 'undefined' && navigator.sendBeacon) {\n navigator.sendBeacon(url, body)\n }\n}\n","/**\n * Extended query methods and static utilities for WhaleClient.\n * Extracted from client.ts to keep the core under 300 lines.\n */\n\nimport type {\n Customer,\n CustomerAnalytics,\n ListResponse,\n Location,\n Order,\n SendCodeResponse,\n StorefrontSession,\n VerifyCodeResponse,\n EventType,\n} from './types.js'\n\n/**\n * Paginate through all customer orders.\n */\nexport async function fetchAllCustomerOrders(\n requestFn: <T>(path: string, opts?: RequestInit) => Promise<T>,\n customerId: string\n): Promise<Order[]> {\n const encoded = encodeURIComponent(customerId)\n const all: Order[] = []\n let cursor: string | undefined\n let hasMore = true\n\n while (hasMore) {\n const params = new URLSearchParams({ customer_id: encoded, limit: '100' })\n if (cursor) params.set('starting_after', cursor)\n\n const res = await requestFn<ListResponse<Order>>(`/orders?${params}`)\n const items = res?.data ?? []\n if (items.length === 0) break\n\n all.push(...items)\n cursor = items[items.length - 1].id\n hasMore = res.has_more ?? false\n }\n\n return all\n}\n\n/**\n * Find customer analytics by ID or name (fallback).\n */\nexport async function findCustomerAnalytics(\n requestFn: <T>(path: string) => Promise<T>,\n customerId: string,\n customerName?: string\n): Promise<CustomerAnalytics | null> {\n try {\n const res = await requestFn<{ customers: CustomerAnalytics[] }>(\n '/analytics/customers?limit=200'\n )\n const byId = res.customers?.find((c) => c.customer_id === customerId)\n if (byId) return byId\n if (customerName) {\n const normalized = customerName.toLowerCase().trim()\n return (\n res.customers?.find(\n (c) => c.customer_name?.toLowerCase().trim() === normalized\n ) ?? null\n )\n }\n return null\n } catch {\n return null\n }\n}\n\n/**\n * Base64url-encode a URL string (works in both Node and browser).\n */\nexport function encodeBase64Url(url: string): string {\n if (typeof Buffer !== 'undefined') {\n return Buffer.from(url, 'utf-8')\n .toString('base64')\n .replace(/\\+/g, '-')\n .replace(/\\//g, '_')\n .replace(/=+$/, '')\n }\n return btoa(url)\n .replace(/\\+/g, '-')\n .replace(/\\//g, '_')\n .replace(/=+$/, '')\n}\n\n/**\n * Quad-FNV (128-bit) media signing — matches gateway's media-signature.ts.\n */\nexport function signMedia(\n signingSecret: string,\n encodedUrl: string,\n w: string,\n q: string,\n f: string\n): string {\n const payload = `${signingSecret}|${encodedUrl}|${w}|${q}|${f}`\n let h1 = 0x811c9dc5, h2 = 0xcbf29ce4, h3 = 0x1a47e90b, h4 = 0xe5c4a7d2\n for (let i = 0; i < payload.length; i++) {\n const c = payload.charCodeAt(i)\n h1 ^= c; h1 = Math.imul(h1, 0x01000193)\n h2 ^= c; h2 = Math.imul(h2, 0x0100019d)\n h3 ^= c; h3 = Math.imul(h3, 0x010001a5)\n h4 ^= c; h4 = Math.imul(h4, 0x010001cf)\n }\n return (\n (h1 >>> 0).toString(16).padStart(8, '0') +\n (h2 >>> 0).toString(16).padStart(8, '0') +\n (h3 >>> 0).toString(16).padStart(8, '0') +\n (h4 >>> 0).toString(16).padStart(8, '0')\n ).slice(0, 32)\n}\n","import type {\n Cart,\n CartItem,\n Category,\n CategoryTreeNode,\n CheckoutSession,\n DealValidation,\n Customer,\n CustomerAnalytics,\n ListResponse,\n Location,\n LoyaltyAccount,\n LoyaltyReward,\n LoyaltyTransaction,\n Order,\n PaymentData,\n Product,\n Recommendation,\n ReferralEnrollment,\n ReferralStatus,\n Review,\n ReviewSummary,\n SendCodeResponse,\n ShippingMethod,\n ShippingRate,\n StorefrontSession,\n VerifyCodeResponse,\n WhaleStorefrontConfig,\n WishlistItem,\n EventType,\n QRLandingData,\n} from './types.js'\n\nimport type { StorefrontConfig } from './pixels/types.js'\n\nimport {\n fetchAllCustomerOrders,\n findCustomerAnalytics,\n encodeBase64Url,\n signMedia,\n} from './client-queries.js'\n\nimport { resilientSend } from './resilient-send.js'\n\n// -- WhaleClient --\n// Stateless HTTP wrapper around whale-gateway. Works server-side and client-side.\n// No React, no browser APIs (except fetch).\n\nexport class WhaleClient {\n readonly storeId: string\n readonly apiKey: string\n readonly gatewayUrl: string\n readonly proxyPath: string\n\n private _sessionToken: string | null = null\n\n constructor(config: WhaleStorefrontConfig) {\n this.storeId = config.storeId\n this.apiKey = config.apiKey\n this.gatewayUrl = config.gatewayUrl || 'https://whale-gateway.fly.dev'\n this.proxyPath = config.proxyPath || '/api/gw'\n }\n\n // -- Token Management --\n\n setSessionToken(token: string | null): void { this._sessionToken = token }\n getSessionToken(): string | null { return this._sessionToken }\n\n // -- Base URL --\n\n private get baseUrl(): string {\n return typeof window === 'undefined' ? this.gatewayUrl : this.proxyPath\n }\n\n // -- Base Fetcher --\n\n private async request<T = unknown>(\n path: string, options: RequestInit = {}, opts?: { revalidate?: number }\n ): Promise<T> {\n const url = `${this.baseUrl}/v1/stores/${this.storeId}${path}`\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n 'x-api-key': this.apiKey,\n }\n if (this._sessionToken) headers['Authorization'] = `Bearer ${this._sessionToken}`\n\n const fetchOptions: RequestInit & { next?: { revalidate?: number } } = {\n ...options,\n headers: { ...headers, ...((options.headers as Record<string, string>) ?? {}) },\n }\n if (opts?.revalidate !== undefined) fetchOptions.next = { revalidate: opts.revalidate }\n\n const res = await fetch(url, fetchOptions)\n if (!res.ok) {\n let message = `Gateway error ${res.status}: ${res.statusText}`\n try {\n const body = await res.json()\n if (body?.message) message = body.message\n else if (typeof body?.error === 'string') message = body.error\n else if (body?.error?.message) message = body.error.message\n } catch { /* ignore parse errors */ }\n const err = new Error(message) as Error & { status: number }\n err.status = res.status\n throw err\n }\n if (res.status === 204) return undefined as T\n return res.json() as Promise<T>\n }\n\n // -- Products --\n\n async listProducts(params?: { limit?: number; starting_after?: string; status?: string }): Promise<ListResponse<Product>> {\n const sp = new URLSearchParams()\n if (params?.limit) sp.set('limit', String(params.limit))\n if (params?.starting_after) sp.set('starting_after', params.starting_after)\n if (params?.status) sp.set('status', params.status)\n const qs = sp.toString()\n return this.request<ListResponse<Product>>(`/products${qs ? `?${qs}` : ''}`)\n }\n\n async getProduct(id: string): Promise<Product> {\n return this.request<Product>(`/products/${id}`)\n }\n\n async getAllProducts(options?: {\n status?: string; maxPages?: number; revalidate?: number; filter?: (product: Product) => boolean\n }): Promise<Product[]> {\n const all: Product[] = []\n let cursor: string | undefined\n let hasMore = true\n let pages = 0\n const maxPages = options?.maxPages ?? 20\n\n while (hasMore && pages < maxPages) {\n const params = new URLSearchParams({ limit: '100' })\n if (options?.status) params.set('status', options.status)\n else params.set('status', 'published')\n if (cursor) params.set('starting_after', cursor)\n\n const data = await this.request<ListResponse<Product>>(\n `/products?${params}`, {},\n options?.revalidate !== undefined ? { revalidate: options.revalidate } : undefined\n )\n if (!data.data || data.data.length === 0) break\n for (const p of data.data) {\n if (!options?.filter || options.filter(p)) all.push(p)\n cursor = p.id\n }\n hasMore = data.has_more\n pages++\n }\n return all\n }\n\n // -- Cart --\n\n async createCart(customerEmail?: string): Promise<Cart> {\n return this.request<Cart>('/cart', {\n method: 'POST',\n body: JSON.stringify(customerEmail ? { customer_email: customerEmail } : {}),\n })\n }\n\n async getCart(cartId: string): Promise<Cart> {\n return this.request<Cart>(`/cart/${cartId}`)\n }\n\n async addToCart(cartId: string, productId: string, quantity: number, options?: { tier?: string; unitPrice?: number }): Promise<CartItem> {\n return this.request<CartItem>(`/cart/${cartId}/items`, {\n method: 'POST',\n body: JSON.stringify({\n product_id: productId, quantity,\n ...(options?.tier !== undefined && { tier: options.tier }),\n ...(options?.unitPrice !== undefined && { unit_price: options.unitPrice }),\n }),\n })\n }\n\n async updateCartItem(cartId: string, itemId: string, quantity: number): Promise<Cart> {\n return this.request<Cart>(`/cart/${cartId}/items/${itemId}`, { method: 'PATCH', body: JSON.stringify({ quantity }) })\n }\n\n async removeCartItem(cartId: string, itemId: string): Promise<void> {\n return this.request<void>(`/cart/${cartId}/items/${itemId}`, { method: 'DELETE' })\n }\n\n // -- Checkout --\n\n async checkout(cartId: string, customerEmail?: string, payment?: PaymentData, referralCode?: string): Promise<Order> {\n return this.request<Order>('/checkout', {\n method: 'POST',\n body: JSON.stringify({\n cart_id: cartId,\n ...(customerEmail && { customer_email: customerEmail }),\n ...(referralCode && { referral_code: referralCode }),\n ...(payment && {\n payment_method: payment.payment_method,\n ...(payment.opaque_data && { opaque_data: payment.opaque_data }),\n ...(payment.billTo && { bill_to: payment.billTo }),\n ...(payment.shipTo && { ship_to: payment.shipTo }),\n }),\n }),\n })\n }\n\n // -- Customers --\n\n async findCustomer(query: string): Promise<Customer[]> {\n const encoded = encodeURIComponent(query)\n const res = await this.request<{ data: Customer[] } | Customer[]>(`/customers?query=${encoded}`)\n return Array.isArray(res) ? res : res?.data ?? []\n }\n\n async getCustomer(id: string): Promise<Customer> { return this.request<Customer>(`/customers/${id}`) }\n\n async createCustomer(data: { first_name: string; last_name: string; email: string; phone?: string }): Promise<Customer> {\n return this.request<Customer>('/customers', { method: 'POST', body: JSON.stringify(data) })\n }\n\n async updateProfile(customerId: string, data: { first_name: string; last_name: string; phone?: string; date_of_birth?: string }): Promise<Customer> {\n return this.request<Customer>('/storefront/profile', {\n method: 'PATCH',\n body: JSON.stringify({ customer_id: customerId, ...data }),\n })\n }\n\n // -- Orders --\n\n async listOrders(params?: { customer_id?: string; limit?: number; starting_after?: string }): Promise<ListResponse<Order>> {\n const sp = new URLSearchParams()\n if (params?.customer_id) sp.set('customer_id', params.customer_id)\n if (params?.limit) sp.set('limit', String(params.limit))\n if (params?.starting_after) sp.set('starting_after', params.starting_after)\n const qs = sp.toString()\n return this.request<ListResponse<Order>>(`/orders${qs ? `?${qs}` : ''}`)\n }\n\n async getOrder(id: string): Promise<Order> { return this.request<Order>(`/orders/${id}`) }\n\n async getCustomerOrders(customerId: string): Promise<Order[]> {\n return fetchAllCustomerOrders((path, opts) => this.request(path, opts), customerId)\n }\n\n // -- Auth (OTP) --\n\n async sendCode(email: string): Promise<SendCodeResponse> {\n return this.request<SendCodeResponse>('/storefront/auth/send-code', { method: 'POST', body: JSON.stringify({ email }) })\n }\n\n async verifyCode(email: string, code: string): Promise<VerifyCodeResponse> {\n return this.request<VerifyCodeResponse>('/storefront/auth/verify-code', { method: 'POST', body: JSON.stringify({ email, code }) })\n }\n\n // -- Customer Analytics --\n\n async getCustomerAnalytics(customerId: string, customerName?: string): Promise<CustomerAnalytics | null> {\n return findCustomerAnalytics((path) => this.request(path), customerId, customerName)\n }\n\n // -- Locations --\n\n async listLocations(): Promise<ListResponse<Location>> { return this.request<ListResponse<Location>>('/locations') }\n\n // -- COA --\n\n getCOAEmbedUrl(productId: string): string {\n return `${this.baseUrl}/v1/stores/${this.storeId}/coa/${productId}/embed`\n }\n\n // -- Storefront Config --\n\n async fetchStorefrontConfig(): Promise<StorefrontConfig> {\n return this.request<StorefrontConfig>('/storefront/config')\n }\n\n // -- QR Landing Page --\n\n /** Fetch QR landing page data (public, no auth needed). */\n async fetchQRLandingData(code: string): Promise<QRLandingData> {\n // Public endpoint — hit gateway directly, no store prefix or API key\n const url = `${this.gatewayUrl}/q/${encodeURIComponent(code)}/page`\n const res = await fetch(url)\n if (!res.ok) {\n const body = await res.json().catch(() => ({}))\n throw new Error(body?.error?.message ?? `QR landing fetch failed: ${res.status}`)\n }\n return res.json()\n }\n\n /** Fetch landing page data by slug (public, no auth needed). */\n async fetchLandingPage(slug: string): Promise<import('./types.js').LandingPageRenderData> {\n const url = `${this.gatewayUrl}/l/${encodeURIComponent(slug)}`\n const res = await fetch(url)\n if (!res.ok) {\n const body = await res.json().catch(() => ({}))\n throw new Error(body?.error?.message ?? `Landing page fetch failed: ${res.status}`)\n }\n return res.json()\n }\n\n // -- Analytics / Storefront Sessions --\n\n async createSession(params: {\n visitor_id?: string\n user_agent?: string\n referrer?: string\n page_url?: string\n device?: string\n utm_source?: string\n utm_medium?: string\n utm_campaign?: string\n utm_content?: string\n utm_term?: string\n gclid?: string\n fbclid?: string\n latitude?: number\n longitude?: number\n geolocation_source?: 'browser_gps' | 'ip' | 'zip' | 'address' | 'manual'\n geolocation_accuracy?: number\n }): Promise<StorefrontSession> {\n return this.request<StorefrontSession>('/storefront/sessions', { method: 'POST', body: JSON.stringify(params) })\n }\n\n async updateSession(sessionId: string, params: {\n last_active_at?: string\n customer_id?: string\n customer_first_name?: string\n customer_last_name?: string\n cart_id?: string\n cart_item_count?: number\n cart_total?: number\n order_id?: string\n fingerprint_id?: string\n status?: string\n current_page?: string\n latitude?: number\n longitude?: number\n geolocation_source?: 'browser_gps' | 'ip' | 'zip' | 'address' | 'manual'\n geolocation_accuracy?: number\n }): Promise<StorefrontSession> {\n return this.request<StorefrontSession>(`/storefront/sessions/${sessionId}`, { method: 'PATCH', body: JSON.stringify(params) })\n }\n\n async trackEvent(params: { session_id: string; event_type: EventType; event_data?: Record<string, unknown>; visitor_id?: string }): Promise<void> {\n const url = `${this.baseUrl}/v1/stores/${this.storeId}/storefront/events`\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n 'x-api-key': this.apiKey,\n }\n if (this._sessionToken) headers['Authorization'] = `Bearer ${this._sessionToken}`\n // Map SDK field names to gateway field names\n const payload: Record<string, unknown> = {\n event_name: params.event_type,\n session_id: params.session_id,\n event_properties: params.event_data,\n }\n if (params.visitor_id) payload.visitor_id = params.visitor_id\n await resilientSend(url, payload, headers)\n }\n\n // -- Checkout Sessions --\n\n async createCheckoutSession(params: {\n cart_id: string\n customer_email?: string\n shipping_address?: import('./types.js').Address\n billing_address?: import('./types.js').Address\n shipping_method_id?: string\n coupon_code?: string\n referral_code?: string\n loyalty_reward_id?: string\n selected_product_id?: string\n }): Promise<CheckoutSession> {\n return this.request<CheckoutSession>('/storefront/checkout', {\n method: 'POST',\n body: JSON.stringify(params),\n })\n }\n\n async getCheckoutSession(sessionId: string): Promise<CheckoutSession> {\n return this.request<CheckoutSession>(`/storefront/checkout/${sessionId}`)\n }\n\n async updateCheckoutSession(sessionId: string, params: {\n customer_email?: string\n shipping_address?: import('./types.js').Address\n billing_address?: import('./types.js').Address\n shipping_method_id?: string\n coupon_code?: string\n }): Promise<CheckoutSession> {\n return this.request<CheckoutSession>(`/storefront/checkout/${sessionId}`, {\n method: 'PATCH',\n body: JSON.stringify(params),\n })\n }\n\n async completeCheckout(sessionId: string, payment?: PaymentData, opts?: {\n loyalty_reward_id?: string\n selected_product_id?: string\n }): Promise<Order> {\n return this.request<Order>(`/storefront/checkout/${sessionId}/complete`, {\n method: 'POST',\n body: JSON.stringify({\n ...(payment && {\n payment_method: payment.payment_method,\n ...(payment.opaque_data && { opaque_data: payment.opaque_data }),\n ...(payment.billTo && { bill_to: payment.billTo }),\n ...(payment.shipTo && { ship_to: payment.shipTo }),\n }),\n ...(opts?.loyalty_reward_id && { loyalty_reward_id: opts.loyalty_reward_id }),\n ...(opts?.selected_product_id && { selected_product_id: opts.selected_product_id }),\n }),\n })\n }\n\n // -- Search --\n\n async searchProducts(params: {\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 starting_after?: string\n }): Promise<ListResponse<Product>> {\n const sp = new URLSearchParams({ q: params.query })\n if (params.category_id) sp.set('category_id', params.category_id)\n if (params.min_price !== undefined) sp.set('min_price', String(params.min_price))\n if (params.max_price !== undefined) sp.set('max_price', String(params.max_price))\n if (params.sort_by) sp.set('sort_by', params.sort_by)\n if (params.sort_order) sp.set('sort_order', params.sort_order)\n if (params.limit) sp.set('limit', String(params.limit))\n if (params.starting_after) sp.set('starting_after', params.starting_after)\n return this.request<ListResponse<Product>>(`/products/search?${sp}`)\n }\n\n // -- Categories --\n\n async listCategories(): Promise<ListResponse<Category>> {\n return this.request<ListResponse<Category>>('/categories')\n }\n\n async getCategory(id: string): Promise<Category> {\n return this.request<Category>(`/categories/${id}`)\n }\n\n // -- Loyalty --\n\n async getLoyaltyAccount(customerId: string): Promise<LoyaltyAccount> {\n return this.request<LoyaltyAccount>(`/storefront/loyalty/${customerId}`)\n }\n\n async listLoyaltyRewards(): Promise<ListResponse<LoyaltyReward>> {\n return this.request<ListResponse<LoyaltyReward>>('/storefront/loyalty/rewards')\n }\n\n async listLoyaltyTransactions(customerId: string, params?: {\n limit?: number\n starting_after?: string\n }): Promise<ListResponse<LoyaltyTransaction>> {\n const sp = new URLSearchParams()\n if (params?.limit) sp.set('limit', String(params.limit))\n if (params?.starting_after) sp.set('starting_after', params.starting_after)\n const qs = sp.toString()\n return this.request<ListResponse<LoyaltyTransaction>>(\n `/storefront/loyalty/${customerId}/transactions${qs ? `?${qs}` : ''}`\n )\n }\n\n async listLoyaltyProducts(params: {\n category: string\n location_id: string\n tier?: string\n }): Promise<ListResponse<Product>> {\n const sp = new URLSearchParams({ category: params.category, location_id: params.location_id })\n if (params.tier) sp.set('tier', params.tier)\n return this.request<ListResponse<Product>>(`/storefront/loyalty/products?${sp}`)\n }\n\n async redeemLoyaltyReward(customerId: string, rewardId: string): Promise<{ success: boolean; points_remaining: number }> {\n return this.request<{ success: boolean; points_remaining: number }>(\n `/storefront/loyalty/${customerId}/redeem`,\n { method: 'POST', body: JSON.stringify({ reward_id: rewardId }) }\n )\n }\n\n // -- Reviews --\n\n async listProductReviews(productId: string, params?: {\n limit?: number\n starting_after?: string\n sort_by?: 'created_at' | 'rating'\n sort_order?: 'asc' | 'desc'\n }): Promise<ListResponse<Review> & { summary?: ReviewSummary }> {\n const sp = new URLSearchParams()\n if (params?.limit) sp.set('limit', String(params.limit))\n if (params?.starting_after) sp.set('starting_after', params.starting_after)\n if (params?.sort_by) sp.set('sort_by', params.sort_by)\n if (params?.sort_order) sp.set('sort_order', params.sort_order)\n const qs = sp.toString()\n return this.request<ListResponse<Review> & { summary?: ReviewSummary }>(\n `/products/${productId}/reviews${qs ? `?${qs}` : ''}`\n )\n }\n\n async submitReview(productId: string, data: {\n rating: number\n title?: string\n body?: string\n customer_name?: string\n }): Promise<Review> {\n return this.request<Review>(`/products/${productId}/reviews`, {\n method: 'POST',\n body: JSON.stringify(data),\n })\n }\n\n // -- Wishlist --\n\n async listWishlistItems(customerId: string): Promise<ListResponse<WishlistItem>> {\n return this.request<ListResponse<WishlistItem>>(`/storefront/wishlist/${customerId}`)\n }\n\n async addWishlistItem(customerId: string, productId: string): Promise<WishlistItem> {\n return this.request<WishlistItem>(`/storefront/wishlist/${customerId}`, {\n method: 'POST',\n body: JSON.stringify({ product_id: productId }),\n })\n }\n\n async removeWishlistItem(customerId: string, productId: string): Promise<void> {\n return this.request<void>(`/storefront/wishlist/${customerId}/${productId}`, {\n method: 'DELETE',\n })\n }\n\n // -- Recommendations --\n\n async getRecommendations(params?: {\n product_id?: string\n customer_id?: string\n limit?: number\n type?: 'similar' | 'frequently_bought_together' | 'personalized'\n }): Promise<{ data: Recommendation[] }> {\n const sp = new URLSearchParams()\n if (params?.product_id) sp.set('product_id', params.product_id)\n if (params?.customer_id) sp.set('customer_id', params.customer_id)\n if (params?.limit) sp.set('limit', String(params.limit))\n if (params?.type) sp.set('type', params.type)\n const qs = sp.toString()\n return this.request<{ data: Recommendation[] }>(\n `/storefront/recommendations${qs ? `?${qs}` : ''}`\n )\n }\n\n // -- Locations (extended) --\n\n async getLocation(id: string): Promise<Location> {\n return this.request<Location>(`/locations/${id}`)\n }\n\n // -- Shipping --\n\n async listShippingMethods(): Promise<ListResponse<ShippingMethod>> {\n return this.request<ListResponse<ShippingMethod>>('/storefront/shipping/methods')\n }\n\n async calculateShippingRates(params: {\n cart_id: string\n shipping_address: import('./types.js').Address\n }): Promise<{ data: ShippingRate[] }> {\n return this.request<{ data: ShippingRate[] }>('/storefront/shipping/rates', {\n method: 'POST',\n body: JSON.stringify(params),\n })\n }\n\n // -- Deals (discount codes) --\n\n async validateDeal(code: string, params?: {\n cart_id?: string\n }): Promise<DealValidation> {\n const sp = new URLSearchParams({ code })\n if (params?.cart_id) sp.set('cart_id', params.cart_id)\n return this.request<DealValidation>(`/storefront/deals/validate?${sp}`)\n }\n\n async applyDeal(cartId: string, code: string): Promise<Cart> {\n return this.request<Cart>(`/cart/${cartId}/deal`, {\n method: 'POST',\n body: JSON.stringify({ code }),\n })\n }\n\n async removeDeal(cartId: string): Promise<Cart> {\n return this.request<Cart>(`/cart/${cartId}/deal`, {\n method: 'DELETE',\n })\n }\n\n /** @deprecated Use validateDeal instead */\n async validateCoupon(code: string, params?: { cart_id?: string }): Promise<DealValidation> {\n return this.validateDeal(code, params)\n }\n\n /** @deprecated Use applyDeal instead */\n async applyCoupon(cartId: string, code: string): Promise<Cart> {\n return this.applyDeal(cartId, code)\n }\n\n /** @deprecated Use removeDeal instead */\n async removeCoupon(cartId: string): Promise<Cart> {\n return this.removeDeal(cartId)\n }\n\n // -- Referrals --\n\n async enrollReferral(customerId: string): Promise<ReferralEnrollment> {\n return this.request<ReferralEnrollment>('/storefront/referrals/enroll', {\n method: 'POST',\n body: JSON.stringify({ customer_id: customerId }),\n })\n }\n\n async getReferralStatus(customerId: string): Promise<ReferralStatus> {\n return this.request<ReferralStatus>(`/storefront/referrals/status?customer_id=${customerId}`)\n }\n\n async attributeReferral(\n customerId: string,\n referralCode: string,\n ): Promise<{ success: boolean; affiliate_id?: string; error?: string }> {\n return this.request('/storefront/referrals/attribute', {\n method: 'POST',\n body: JSON.stringify({ customer_id: customerId, referral_code: referralCode }),\n })\n }\n\n // -- Static Media Utilities --\n\n static encodeBase64Url = encodeBase64Url\n static signMedia = signMedia\n}\n"]}
@@ -500,5 +500,5 @@ WhaleClient.encodeBase64Url = encodeBase64Url;
500
500
  WhaleClient.signMedia = signMedia;
501
501
 
502
502
  export { WhaleClient, resilientSend };
503
- //# sourceMappingURL=chunk-3Q7CPJBA.js.map
504
- //# sourceMappingURL=chunk-3Q7CPJBA.js.map
503
+ //# sourceMappingURL=chunk-WNZOA4FB.js.map
504
+ //# sourceMappingURL=chunk-WNZOA4FB.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/resilient-send.ts","../src/client-queries.ts","../src/client.ts"],"names":[],"mappings":"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","file":"chunk-WNZOA4FB.js","sourcesContent":["/**\n * Resilient HTTP sender for analytics/event payloads.\n *\n * Retries transient (5xx / network) failures with linear back-off,\n * then falls back to navigator.sendBeacon so the event still lands\n * even when the tab is being unloaded.\n *\n * 4xx responses are NOT retried — they indicate a client error that\n * won't resolve by resending.\n */\n\nconst MAX_RETRIES = 2\nconst RETRY_DELAY_MS = 1000\n\nexport async function resilientSend(\n url: string,\n payload: object,\n headers: Record<string, string>,\n): Promise<void> {\n const body = JSON.stringify(payload)\n\n for (let attempt = 0; attempt <= MAX_RETRIES; attempt++) {\n try {\n const res = await fetch(url, {\n method: 'POST',\n headers,\n body,\n keepalive: true,\n })\n // Success or client-error (4xx) — don't retry\n if (res.ok || res.status < 500) return\n } catch {\n // Network error — retry\n }\n\n if (attempt < MAX_RETRIES) {\n await new Promise<void>((r) => setTimeout(r, RETRY_DELAY_MS * (attempt + 1)))\n }\n }\n\n // All retries exhausted — fire-and-forget via sendBeacon\n if (typeof navigator !== 'undefined' && navigator.sendBeacon) {\n navigator.sendBeacon(url, body)\n }\n}\n","/**\n * Extended query methods and static utilities for WhaleClient.\n * Extracted from client.ts to keep the core under 300 lines.\n */\n\nimport type {\n Customer,\n CustomerAnalytics,\n ListResponse,\n Location,\n Order,\n SendCodeResponse,\n StorefrontSession,\n VerifyCodeResponse,\n EventType,\n} from './types.js'\n\n/**\n * Paginate through all customer orders.\n */\nexport async function fetchAllCustomerOrders(\n requestFn: <T>(path: string, opts?: RequestInit) => Promise<T>,\n customerId: string\n): Promise<Order[]> {\n const encoded = encodeURIComponent(customerId)\n const all: Order[] = []\n let cursor: string | undefined\n let hasMore = true\n\n while (hasMore) {\n const params = new URLSearchParams({ customer_id: encoded, limit: '100' })\n if (cursor) params.set('starting_after', cursor)\n\n const res = await requestFn<ListResponse<Order>>(`/orders?${params}`)\n const items = res?.data ?? []\n if (items.length === 0) break\n\n all.push(...items)\n cursor = items[items.length - 1].id\n hasMore = res.has_more ?? false\n }\n\n return all\n}\n\n/**\n * Find customer analytics by ID or name (fallback).\n */\nexport async function findCustomerAnalytics(\n requestFn: <T>(path: string) => Promise<T>,\n customerId: string,\n customerName?: string\n): Promise<CustomerAnalytics | null> {\n try {\n const res = await requestFn<{ customers: CustomerAnalytics[] }>(\n '/analytics/customers?limit=200'\n )\n const byId = res.customers?.find((c) => c.customer_id === customerId)\n if (byId) return byId\n if (customerName) {\n const normalized = customerName.toLowerCase().trim()\n return (\n res.customers?.find(\n (c) => c.customer_name?.toLowerCase().trim() === normalized\n ) ?? null\n )\n }\n return null\n } catch {\n return null\n }\n}\n\n/**\n * Base64url-encode a URL string (works in both Node and browser).\n */\nexport function encodeBase64Url(url: string): string {\n if (typeof Buffer !== 'undefined') {\n return Buffer.from(url, 'utf-8')\n .toString('base64')\n .replace(/\\+/g, '-')\n .replace(/\\//g, '_')\n .replace(/=+$/, '')\n }\n return btoa(url)\n .replace(/\\+/g, '-')\n .replace(/\\//g, '_')\n .replace(/=+$/, '')\n}\n\n/**\n * Quad-FNV (128-bit) media signing — matches gateway's media-signature.ts.\n */\nexport function signMedia(\n signingSecret: string,\n encodedUrl: string,\n w: string,\n q: string,\n f: string\n): string {\n const payload = `${signingSecret}|${encodedUrl}|${w}|${q}|${f}`\n let h1 = 0x811c9dc5, h2 = 0xcbf29ce4, h3 = 0x1a47e90b, h4 = 0xe5c4a7d2\n for (let i = 0; i < payload.length; i++) {\n const c = payload.charCodeAt(i)\n h1 ^= c; h1 = Math.imul(h1, 0x01000193)\n h2 ^= c; h2 = Math.imul(h2, 0x0100019d)\n h3 ^= c; h3 = Math.imul(h3, 0x010001a5)\n h4 ^= c; h4 = Math.imul(h4, 0x010001cf)\n }\n return (\n (h1 >>> 0).toString(16).padStart(8, '0') +\n (h2 >>> 0).toString(16).padStart(8, '0') +\n (h3 >>> 0).toString(16).padStart(8, '0') +\n (h4 >>> 0).toString(16).padStart(8, '0')\n ).slice(0, 32)\n}\n","import type {\n Cart,\n CartItem,\n Category,\n CategoryTreeNode,\n CheckoutSession,\n DealValidation,\n Customer,\n CustomerAnalytics,\n ListResponse,\n Location,\n LoyaltyAccount,\n LoyaltyReward,\n LoyaltyTransaction,\n Order,\n PaymentData,\n Product,\n Recommendation,\n ReferralEnrollment,\n ReferralStatus,\n Review,\n ReviewSummary,\n SendCodeResponse,\n ShippingMethod,\n ShippingRate,\n StorefrontSession,\n VerifyCodeResponse,\n WhaleStorefrontConfig,\n WishlistItem,\n EventType,\n QRLandingData,\n} from './types.js'\n\nimport type { StorefrontConfig } from './pixels/types.js'\n\nimport {\n fetchAllCustomerOrders,\n findCustomerAnalytics,\n encodeBase64Url,\n signMedia,\n} from './client-queries.js'\n\nimport { resilientSend } from './resilient-send.js'\n\n// -- WhaleClient --\n// Stateless HTTP wrapper around whale-gateway. Works server-side and client-side.\n// No React, no browser APIs (except fetch).\n\nexport class WhaleClient {\n readonly storeId: string\n readonly apiKey: string\n readonly gatewayUrl: string\n readonly proxyPath: string\n\n private _sessionToken: string | null = null\n\n constructor(config: WhaleStorefrontConfig) {\n this.storeId = config.storeId\n this.apiKey = config.apiKey\n this.gatewayUrl = config.gatewayUrl || 'https://whale-gateway.fly.dev'\n this.proxyPath = config.proxyPath || '/api/gw'\n }\n\n // -- Token Management --\n\n setSessionToken(token: string | null): void { this._sessionToken = token }\n getSessionToken(): string | null { return this._sessionToken }\n\n // -- Base URL --\n\n private get baseUrl(): string {\n return typeof window === 'undefined' ? this.gatewayUrl : this.proxyPath\n }\n\n // -- Base Fetcher --\n\n private async request<T = unknown>(\n path: string, options: RequestInit = {}, opts?: { revalidate?: number }\n ): Promise<T> {\n const url = `${this.baseUrl}/v1/stores/${this.storeId}${path}`\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n 'x-api-key': this.apiKey,\n }\n if (this._sessionToken) headers['Authorization'] = `Bearer ${this._sessionToken}`\n\n const fetchOptions: RequestInit & { next?: { revalidate?: number } } = {\n ...options,\n headers: { ...headers, ...((options.headers as Record<string, string>) ?? {}) },\n }\n if (opts?.revalidate !== undefined) fetchOptions.next = { revalidate: opts.revalidate }\n\n const res = await fetch(url, fetchOptions)\n if (!res.ok) {\n let message = `Gateway error ${res.status}: ${res.statusText}`\n try {\n const body = await res.json()\n if (body?.message) message = body.message\n else if (typeof body?.error === 'string') message = body.error\n else if (body?.error?.message) message = body.error.message\n } catch { /* ignore parse errors */ }\n const err = new Error(message) as Error & { status: number }\n err.status = res.status\n throw err\n }\n if (res.status === 204) return undefined as T\n return res.json() as Promise<T>\n }\n\n // -- Products --\n\n async listProducts(params?: { limit?: number; starting_after?: string; status?: string }): Promise<ListResponse<Product>> {\n const sp = new URLSearchParams()\n if (params?.limit) sp.set('limit', String(params.limit))\n if (params?.starting_after) sp.set('starting_after', params.starting_after)\n if (params?.status) sp.set('status', params.status)\n const qs = sp.toString()\n return this.request<ListResponse<Product>>(`/products${qs ? `?${qs}` : ''}`)\n }\n\n async getProduct(id: string): Promise<Product> {\n return this.request<Product>(`/products/${id}`)\n }\n\n async getAllProducts(options?: {\n status?: string; maxPages?: number; revalidate?: number; filter?: (product: Product) => boolean\n }): Promise<Product[]> {\n const all: Product[] = []\n let cursor: string | undefined\n let hasMore = true\n let pages = 0\n const maxPages = options?.maxPages ?? 20\n\n while (hasMore && pages < maxPages) {\n const params = new URLSearchParams({ limit: '100' })\n if (options?.status) params.set('status', options.status)\n else params.set('status', 'published')\n if (cursor) params.set('starting_after', cursor)\n\n const data = await this.request<ListResponse<Product>>(\n `/products?${params}`, {},\n options?.revalidate !== undefined ? { revalidate: options.revalidate } : undefined\n )\n if (!data.data || data.data.length === 0) break\n for (const p of data.data) {\n if (!options?.filter || options.filter(p)) all.push(p)\n cursor = p.id\n }\n hasMore = data.has_more\n pages++\n }\n return all\n }\n\n // -- Cart --\n\n async createCart(customerEmail?: string): Promise<Cart> {\n return this.request<Cart>('/cart', {\n method: 'POST',\n body: JSON.stringify(customerEmail ? { customer_email: customerEmail } : {}),\n })\n }\n\n async getCart(cartId: string): Promise<Cart> {\n return this.request<Cart>(`/cart/${cartId}`)\n }\n\n async addToCart(cartId: string, productId: string, quantity: number, options?: { tier?: string; unitPrice?: number }): Promise<CartItem> {\n return this.request<CartItem>(`/cart/${cartId}/items`, {\n method: 'POST',\n body: JSON.stringify({\n product_id: productId, quantity,\n ...(options?.tier !== undefined && { tier: options.tier }),\n ...(options?.unitPrice !== undefined && { unit_price: options.unitPrice }),\n }),\n })\n }\n\n async updateCartItem(cartId: string, itemId: string, quantity: number): Promise<Cart> {\n return this.request<Cart>(`/cart/${cartId}/items/${itemId}`, { method: 'PATCH', body: JSON.stringify({ quantity }) })\n }\n\n async removeCartItem(cartId: string, itemId: string): Promise<void> {\n return this.request<void>(`/cart/${cartId}/items/${itemId}`, { method: 'DELETE' })\n }\n\n // -- Checkout --\n\n async checkout(cartId: string, customerEmail?: string, payment?: PaymentData, referralCode?: string): Promise<Order> {\n return this.request<Order>('/checkout', {\n method: 'POST',\n body: JSON.stringify({\n cart_id: cartId,\n ...(customerEmail && { customer_email: customerEmail }),\n ...(referralCode && { referral_code: referralCode }),\n ...(payment && {\n payment_method: payment.payment_method,\n ...(payment.opaque_data && { opaque_data: payment.opaque_data }),\n ...(payment.billTo && { bill_to: payment.billTo }),\n ...(payment.shipTo && { ship_to: payment.shipTo }),\n }),\n }),\n })\n }\n\n // -- Customers --\n\n async findCustomer(query: string): Promise<Customer[]> {\n const encoded = encodeURIComponent(query)\n const res = await this.request<{ data: Customer[] } | Customer[]>(`/customers?query=${encoded}`)\n return Array.isArray(res) ? res : res?.data ?? []\n }\n\n async getCustomer(id: string): Promise<Customer> { return this.request<Customer>(`/customers/${id}`) }\n\n async createCustomer(data: { first_name: string; last_name: string; email: string; phone?: string }): Promise<Customer> {\n return this.request<Customer>('/customers', { method: 'POST', body: JSON.stringify(data) })\n }\n\n async updateProfile(customerId: string, data: { first_name: string; last_name: string; phone?: string; date_of_birth?: string }): Promise<Customer> {\n return this.request<Customer>('/storefront/profile', {\n method: 'PATCH',\n body: JSON.stringify({ customer_id: customerId, ...data }),\n })\n }\n\n // -- Orders --\n\n async listOrders(params?: { customer_id?: string; limit?: number; starting_after?: string }): Promise<ListResponse<Order>> {\n const sp = new URLSearchParams()\n if (params?.customer_id) sp.set('customer_id', params.customer_id)\n if (params?.limit) sp.set('limit', String(params.limit))\n if (params?.starting_after) sp.set('starting_after', params.starting_after)\n const qs = sp.toString()\n return this.request<ListResponse<Order>>(`/orders${qs ? `?${qs}` : ''}`)\n }\n\n async getOrder(id: string): Promise<Order> { return this.request<Order>(`/orders/${id}`) }\n\n async getCustomerOrders(customerId: string): Promise<Order[]> {\n return fetchAllCustomerOrders((path, opts) => this.request(path, opts), customerId)\n }\n\n // -- Auth (OTP) --\n\n async sendCode(email: string): Promise<SendCodeResponse> {\n return this.request<SendCodeResponse>('/storefront/auth/send-code', { method: 'POST', body: JSON.stringify({ email }) })\n }\n\n async verifyCode(email: string, code: string): Promise<VerifyCodeResponse> {\n return this.request<VerifyCodeResponse>('/storefront/auth/verify-code', { method: 'POST', body: JSON.stringify({ email, code }) })\n }\n\n // -- Customer Analytics --\n\n async getCustomerAnalytics(customerId: string, customerName?: string): Promise<CustomerAnalytics | null> {\n return findCustomerAnalytics((path) => this.request(path), customerId, customerName)\n }\n\n // -- Locations --\n\n async listLocations(): Promise<ListResponse<Location>> { return this.request<ListResponse<Location>>('/locations') }\n\n // -- COA --\n\n getCOAEmbedUrl(productId: string): string {\n return `${this.baseUrl}/v1/stores/${this.storeId}/coa/${productId}/embed`\n }\n\n // -- Storefront Config --\n\n async fetchStorefrontConfig(): Promise<StorefrontConfig> {\n return this.request<StorefrontConfig>('/storefront/config')\n }\n\n // -- QR Landing Page --\n\n /** Fetch QR landing page data (public, no auth needed). */\n async fetchQRLandingData(code: string): Promise<QRLandingData> {\n // Public endpoint — hit gateway directly, no store prefix or API key\n const url = `${this.gatewayUrl}/q/${encodeURIComponent(code)}/page`\n const res = await fetch(url)\n if (!res.ok) {\n const body = await res.json().catch(() => ({}))\n throw new Error(body?.error?.message ?? `QR landing fetch failed: ${res.status}`)\n }\n return res.json()\n }\n\n /** Fetch landing page data by slug (public, no auth needed). */\n async fetchLandingPage(slug: string): Promise<import('./types.js').LandingPageRenderData> {\n const url = `${this.gatewayUrl}/l/${encodeURIComponent(slug)}`\n const res = await fetch(url)\n if (!res.ok) {\n const body = await res.json().catch(() => ({}))\n throw new Error(body?.error?.message ?? `Landing page fetch failed: ${res.status}`)\n }\n return res.json()\n }\n\n // -- Analytics / Storefront Sessions --\n\n async createSession(params: {\n visitor_id?: string\n user_agent?: string\n referrer?: string\n page_url?: string\n device?: string\n utm_source?: string\n utm_medium?: string\n utm_campaign?: string\n utm_content?: string\n utm_term?: string\n gclid?: string\n fbclid?: string\n latitude?: number\n longitude?: number\n geolocation_source?: 'browser_gps' | 'ip' | 'zip' | 'address' | 'manual'\n geolocation_accuracy?: number\n }): Promise<StorefrontSession> {\n return this.request<StorefrontSession>('/storefront/sessions', { method: 'POST', body: JSON.stringify(params) })\n }\n\n async updateSession(sessionId: string, params: {\n last_active_at?: string\n customer_id?: string\n customer_first_name?: string\n customer_last_name?: string\n cart_id?: string\n cart_item_count?: number\n cart_total?: number\n order_id?: string\n fingerprint_id?: string\n status?: string\n current_page?: string\n latitude?: number\n longitude?: number\n geolocation_source?: 'browser_gps' | 'ip' | 'zip' | 'address' | 'manual'\n geolocation_accuracy?: number\n }): Promise<StorefrontSession> {\n return this.request<StorefrontSession>(`/storefront/sessions/${sessionId}`, { method: 'PATCH', body: JSON.stringify(params) })\n }\n\n async trackEvent(params: { session_id: string; event_type: EventType; event_data?: Record<string, unknown>; visitor_id?: string }): Promise<void> {\n const url = `${this.baseUrl}/v1/stores/${this.storeId}/storefront/events`\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n 'x-api-key': this.apiKey,\n }\n if (this._sessionToken) headers['Authorization'] = `Bearer ${this._sessionToken}`\n // Map SDK field names to gateway field names\n const payload: Record<string, unknown> = {\n event_name: params.event_type,\n session_id: params.session_id,\n event_properties: params.event_data,\n }\n if (params.visitor_id) payload.visitor_id = params.visitor_id\n await resilientSend(url, payload, headers)\n }\n\n // -- Checkout Sessions --\n\n async createCheckoutSession(params: {\n cart_id: string\n customer_email?: string\n shipping_address?: import('./types.js').Address\n billing_address?: import('./types.js').Address\n shipping_method_id?: string\n coupon_code?: string\n referral_code?: string\n loyalty_reward_id?: string\n selected_product_id?: string\n }): Promise<CheckoutSession> {\n return this.request<CheckoutSession>('/storefront/checkout', {\n method: 'POST',\n body: JSON.stringify(params),\n })\n }\n\n async getCheckoutSession(sessionId: string): Promise<CheckoutSession> {\n return this.request<CheckoutSession>(`/storefront/checkout/${sessionId}`)\n }\n\n async updateCheckoutSession(sessionId: string, params: {\n customer_email?: string\n shipping_address?: import('./types.js').Address\n billing_address?: import('./types.js').Address\n shipping_method_id?: string\n coupon_code?: string\n }): Promise<CheckoutSession> {\n return this.request<CheckoutSession>(`/storefront/checkout/${sessionId}`, {\n method: 'PATCH',\n body: JSON.stringify(params),\n })\n }\n\n async completeCheckout(sessionId: string, payment?: PaymentData, opts?: {\n loyalty_reward_id?: string\n selected_product_id?: string\n }): Promise<Order> {\n return this.request<Order>(`/storefront/checkout/${sessionId}/complete`, {\n method: 'POST',\n body: JSON.stringify({\n ...(payment && {\n payment_method: payment.payment_method,\n ...(payment.opaque_data && { opaque_data: payment.opaque_data }),\n ...(payment.billTo && { bill_to: payment.billTo }),\n ...(payment.shipTo && { ship_to: payment.shipTo }),\n }),\n ...(opts?.loyalty_reward_id && { loyalty_reward_id: opts.loyalty_reward_id }),\n ...(opts?.selected_product_id && { selected_product_id: opts.selected_product_id }),\n }),\n })\n }\n\n // -- Search --\n\n async searchProducts(params: {\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 starting_after?: string\n }): Promise<ListResponse<Product>> {\n const sp = new URLSearchParams({ q: params.query })\n if (params.category_id) sp.set('category_id', params.category_id)\n if (params.min_price !== undefined) sp.set('min_price', String(params.min_price))\n if (params.max_price !== undefined) sp.set('max_price', String(params.max_price))\n if (params.sort_by) sp.set('sort_by', params.sort_by)\n if (params.sort_order) sp.set('sort_order', params.sort_order)\n if (params.limit) sp.set('limit', String(params.limit))\n if (params.starting_after) sp.set('starting_after', params.starting_after)\n return this.request<ListResponse<Product>>(`/products/search?${sp}`)\n }\n\n // -- Categories --\n\n async listCategories(): Promise<ListResponse<Category>> {\n return this.request<ListResponse<Category>>('/categories')\n }\n\n async getCategory(id: string): Promise<Category> {\n return this.request<Category>(`/categories/${id}`)\n }\n\n // -- Loyalty --\n\n async getLoyaltyAccount(customerId: string): Promise<LoyaltyAccount> {\n return this.request<LoyaltyAccount>(`/storefront/loyalty/${customerId}`)\n }\n\n async listLoyaltyRewards(): Promise<ListResponse<LoyaltyReward>> {\n return this.request<ListResponse<LoyaltyReward>>('/storefront/loyalty/rewards')\n }\n\n async listLoyaltyTransactions(customerId: string, params?: {\n limit?: number\n starting_after?: string\n }): Promise<ListResponse<LoyaltyTransaction>> {\n const sp = new URLSearchParams()\n if (params?.limit) sp.set('limit', String(params.limit))\n if (params?.starting_after) sp.set('starting_after', params.starting_after)\n const qs = sp.toString()\n return this.request<ListResponse<LoyaltyTransaction>>(\n `/storefront/loyalty/${customerId}/transactions${qs ? `?${qs}` : ''}`\n )\n }\n\n async listLoyaltyProducts(params: {\n category: string\n location_id: string\n tier?: string\n }): Promise<ListResponse<Product>> {\n const sp = new URLSearchParams({ category: params.category, location_id: params.location_id })\n if (params.tier) sp.set('tier', params.tier)\n return this.request<ListResponse<Product>>(`/storefront/loyalty/products?${sp}`)\n }\n\n async redeemLoyaltyReward(customerId: string, rewardId: string): Promise<{ success: boolean; points_remaining: number }> {\n return this.request<{ success: boolean; points_remaining: number }>(\n `/storefront/loyalty/${customerId}/redeem`,\n { method: 'POST', body: JSON.stringify({ reward_id: rewardId }) }\n )\n }\n\n // -- Reviews --\n\n async listProductReviews(productId: string, params?: {\n limit?: number\n starting_after?: string\n sort_by?: 'created_at' | 'rating'\n sort_order?: 'asc' | 'desc'\n }): Promise<ListResponse<Review> & { summary?: ReviewSummary }> {\n const sp = new URLSearchParams()\n if (params?.limit) sp.set('limit', String(params.limit))\n if (params?.starting_after) sp.set('starting_after', params.starting_after)\n if (params?.sort_by) sp.set('sort_by', params.sort_by)\n if (params?.sort_order) sp.set('sort_order', params.sort_order)\n const qs = sp.toString()\n return this.request<ListResponse<Review> & { summary?: ReviewSummary }>(\n `/products/${productId}/reviews${qs ? `?${qs}` : ''}`\n )\n }\n\n async submitReview(productId: string, data: {\n rating: number\n title?: string\n body?: string\n customer_name?: string\n }): Promise<Review> {\n return this.request<Review>(`/products/${productId}/reviews`, {\n method: 'POST',\n body: JSON.stringify(data),\n })\n }\n\n // -- Wishlist --\n\n async listWishlistItems(customerId: string): Promise<ListResponse<WishlistItem>> {\n return this.request<ListResponse<WishlistItem>>(`/storefront/wishlist/${customerId}`)\n }\n\n async addWishlistItem(customerId: string, productId: string): Promise<WishlistItem> {\n return this.request<WishlistItem>(`/storefront/wishlist/${customerId}`, {\n method: 'POST',\n body: JSON.stringify({ product_id: productId }),\n })\n }\n\n async removeWishlistItem(customerId: string, productId: string): Promise<void> {\n return this.request<void>(`/storefront/wishlist/${customerId}/${productId}`, {\n method: 'DELETE',\n })\n }\n\n // -- Recommendations --\n\n async getRecommendations(params?: {\n product_id?: string\n customer_id?: string\n limit?: number\n type?: 'similar' | 'frequently_bought_together' | 'personalized'\n }): Promise<{ data: Recommendation[] }> {\n const sp = new URLSearchParams()\n if (params?.product_id) sp.set('product_id', params.product_id)\n if (params?.customer_id) sp.set('customer_id', params.customer_id)\n if (params?.limit) sp.set('limit', String(params.limit))\n if (params?.type) sp.set('type', params.type)\n const qs = sp.toString()\n return this.request<{ data: Recommendation[] }>(\n `/storefront/recommendations${qs ? `?${qs}` : ''}`\n )\n }\n\n // -- Locations (extended) --\n\n async getLocation(id: string): Promise<Location> {\n return this.request<Location>(`/locations/${id}`)\n }\n\n // -- Shipping --\n\n async listShippingMethods(): Promise<ListResponse<ShippingMethod>> {\n return this.request<ListResponse<ShippingMethod>>('/storefront/shipping/methods')\n }\n\n async calculateShippingRates(params: {\n cart_id: string\n shipping_address: import('./types.js').Address\n }): Promise<{ data: ShippingRate[] }> {\n return this.request<{ data: ShippingRate[] }>('/storefront/shipping/rates', {\n method: 'POST',\n body: JSON.stringify(params),\n })\n }\n\n // -- Deals (discount codes) --\n\n async validateDeal(code: string, params?: {\n cart_id?: string\n }): Promise<DealValidation> {\n const sp = new URLSearchParams({ code })\n if (params?.cart_id) sp.set('cart_id', params.cart_id)\n return this.request<DealValidation>(`/storefront/deals/validate?${sp}`)\n }\n\n async applyDeal(cartId: string, code: string): Promise<Cart> {\n return this.request<Cart>(`/cart/${cartId}/deal`, {\n method: 'POST',\n body: JSON.stringify({ code }),\n })\n }\n\n async removeDeal(cartId: string): Promise<Cart> {\n return this.request<Cart>(`/cart/${cartId}/deal`, {\n method: 'DELETE',\n })\n }\n\n /** @deprecated Use validateDeal instead */\n async validateCoupon(code: string, params?: { cart_id?: string }): Promise<DealValidation> {\n return this.validateDeal(code, params)\n }\n\n /** @deprecated Use applyDeal instead */\n async applyCoupon(cartId: string, code: string): Promise<Cart> {\n return this.applyDeal(cartId, code)\n }\n\n /** @deprecated Use removeDeal instead */\n async removeCoupon(cartId: string): Promise<Cart> {\n return this.removeDeal(cartId)\n }\n\n // -- Referrals --\n\n async enrollReferral(customerId: string): Promise<ReferralEnrollment> {\n return this.request<ReferralEnrollment>('/storefront/referrals/enroll', {\n method: 'POST',\n body: JSON.stringify({ customer_id: customerId }),\n })\n }\n\n async getReferralStatus(customerId: string): Promise<ReferralStatus> {\n return this.request<ReferralStatus>(`/storefront/referrals/status?customer_id=${customerId}`)\n }\n\n async attributeReferral(\n customerId: string,\n referralCode: string,\n ): Promise<{ success: boolean; affiliate_id?: string; error?: string }> {\n return this.request('/storefront/referrals/attribute', {\n method: 'POST',\n body: JSON.stringify({ customer_id: customerId, referral_code: referralCode }),\n })\n }\n\n // -- Static Media Utilities --\n\n static encodeBase64Url = encodeBase64Url\n static signMedia = signMedia\n}\n"]}
@@ -284,6 +284,10 @@ interface StorefrontSession {
284
284
  customer_id?: string;
285
285
  started_at: string;
286
286
  last_active_at: string;
287
+ latitude?: number;
288
+ longitude?: number;
289
+ geolocation_source?: 'browser_gps' | 'ip' | 'zip' | 'address' | 'manual';
290
+ geolocation_accuracy?: number;
287
291
  }
288
292
  interface ListResponse<T> {
289
293
  object: 'list';
@@ -327,7 +331,7 @@ interface WhaleStorefrontConfig {
327
331
  */
328
332
  recordingRate?: number;
329
333
  }
330
- type EventType = 'page_view' | 'product_view' | 'add_to_cart' | 'remove_from_cart' | 'begin_checkout' | 'purchase' | 'category_view' | 'search';
334
+ type EventType = 'page_view' | 'product_view' | 'add_to_cart' | 'remove_from_cart' | 'begin_checkout' | 'purchase' | 'category_view' | 'search' | 'lead' | 'cta_click';
331
335
  interface QRLandingPage {
332
336
  title: string | null;
333
337
  description: string | null;
@@ -525,6 +529,10 @@ declare class WhaleClient {
525
529
  utm_term?: string;
526
530
  gclid?: string;
527
531
  fbclid?: string;
532
+ latitude?: number;
533
+ longitude?: number;
534
+ geolocation_source?: 'browser_gps' | 'ip' | 'zip' | 'address' | 'manual';
535
+ geolocation_accuracy?: number;
528
536
  }): Promise<StorefrontSession>;
529
537
  updateSession(sessionId: string, params: {
530
538
  last_active_at?: string;
@@ -538,6 +546,10 @@ declare class WhaleClient {
538
546
  fingerprint_id?: string;
539
547
  status?: string;
540
548
  current_page?: string;
549
+ latitude?: number;
550
+ longitude?: number;
551
+ geolocation_source?: 'browser_gps' | 'ip' | 'zip' | 'address' | 'manual';
552
+ geolocation_accuracy?: number;
541
553
  }): Promise<StorefrontSession>;
542
554
  trackEvent(params: {
543
555
  session_id: string;
@@ -284,6 +284,10 @@ interface StorefrontSession {
284
284
  customer_id?: string;
285
285
  started_at: string;
286
286
  last_active_at: string;
287
+ latitude?: number;
288
+ longitude?: number;
289
+ geolocation_source?: 'browser_gps' | 'ip' | 'zip' | 'address' | 'manual';
290
+ geolocation_accuracy?: number;
287
291
  }
288
292
  interface ListResponse<T> {
289
293
  object: 'list';
@@ -327,7 +331,7 @@ interface WhaleStorefrontConfig {
327
331
  */
328
332
  recordingRate?: number;
329
333
  }
330
- type EventType = 'page_view' | 'product_view' | 'add_to_cart' | 'remove_from_cart' | 'begin_checkout' | 'purchase' | 'category_view' | 'search';
334
+ type EventType = 'page_view' | 'product_view' | 'add_to_cart' | 'remove_from_cart' | 'begin_checkout' | 'purchase' | 'category_view' | 'search' | 'lead' | 'cta_click';
331
335
  interface QRLandingPage {
332
336
  title: string | null;
333
337
  description: string | null;
@@ -525,6 +529,10 @@ declare class WhaleClient {
525
529
  utm_term?: string;
526
530
  gclid?: string;
527
531
  fbclid?: string;
532
+ latitude?: number;
533
+ longitude?: number;
534
+ geolocation_source?: 'browser_gps' | 'ip' | 'zip' | 'address' | 'manual';
535
+ geolocation_accuracy?: number;
528
536
  }): Promise<StorefrontSession>;
529
537
  updateSession(sessionId: string, params: {
530
538
  last_active_at?: string;
@@ -538,6 +546,10 @@ declare class WhaleClient {
538
546
  fingerprint_id?: string;
539
547
  status?: string;
540
548
  current_page?: string;
549
+ latitude?: number;
550
+ longitude?: number;
551
+ geolocation_source?: 'browser_gps' | 'ip' | 'zip' | 'address' | 'manual';
552
+ geolocation_accuracy?: number;
541
553
  }): Promise<StorefrontSession>;
542
554
  trackEvent(params: {
543
555
  session_id: string;
package/dist/index.cjs CHANGED
@@ -1,21 +1,21 @@
1
1
  'use strict';
2
2
 
3
- var chunk7KXJLHGA_cjs = require('./chunk-7KXJLHGA.cjs');
4
- var chunkVAA2KKCH_cjs = require('./chunk-VAA2KKCH.cjs');
3
+ var chunkUW2U5BRY_cjs = require('./chunk-UW2U5BRY.cjs');
4
+ var chunkV5KCIYKG_cjs = require('./chunk-V5KCIYKG.cjs');
5
5
 
6
6
 
7
7
 
8
8
  Object.defineProperty(exports, "PixelManager", {
9
9
  enumerable: true,
10
- get: function () { return chunk7KXJLHGA_cjs.PixelManager; }
10
+ get: function () { return chunkUW2U5BRY_cjs.PixelManager; }
11
11
  });
12
12
  Object.defineProperty(exports, "WhaleClient", {
13
13
  enumerable: true,
14
- get: function () { return chunkVAA2KKCH_cjs.WhaleClient; }
14
+ get: function () { return chunkV5KCIYKG_cjs.WhaleClient; }
15
15
  });
16
16
  Object.defineProperty(exports, "resilientSend", {
17
17
  enumerable: true,
18
- get: function () { return chunkVAA2KKCH_cjs.resilientSend; }
18
+ get: function () { return chunkV5KCIYKG_cjs.resilientSend; }
19
19
  });
20
20
  //# sourceMappingURL=index.cjs.map
21
21
  //# sourceMappingURL=index.cjs.map
package/dist/index.d.cts CHANGED
@@ -1,5 +1,5 @@
1
- export { A as Address, C as Cart, a as CartItem, b as Category, c as CategoryTreeNode, d as CheckoutSession, e as CouponValidation, f as Customer, g as CustomerAnalytics, D as DealValidation, E as EventType, L as LandingPageConfig, h as LandingPageRenderData, i as LandingSection, j as ListResponse, k as Location, l as LoyaltyAccount, m as LoyaltyReward, n as LoyaltyTransaction, O as Order, o as OrderItem, P as PaymentData, p as PixelConfig, q as PricingTier, r as Product, s as ProductVariation, Q as QRLandingData, t as QRLandingPage, u as QRLandingStore, R as Recommendation, v as Review, w as ReviewSummary, S as SendCodeResponse, x as ShippingMethod, y as ShippingRate, z as StorefrontConfig, B as StorefrontSession, T as TaxBreakdown, V as VerifyCodeResponse, W as WhaleClient, F as WhaleStorefrontConfig, G as WishlistItem } from './client-BSO263Uv.cjs';
2
- export { P as PixelManager } from './pixel-manager-DJ9m2FaQ.cjs';
1
+ export { A as Address, C as Cart, a as CartItem, b as Category, c as CategoryTreeNode, d as CheckoutSession, e as CouponValidation, f as Customer, g as CustomerAnalytics, D as DealValidation, E as EventType, L as LandingPageConfig, h as LandingPageRenderData, i as LandingSection, j as ListResponse, k as Location, l as LoyaltyAccount, m as LoyaltyReward, n as LoyaltyTransaction, O as Order, o as OrderItem, P as PaymentData, p as PixelConfig, q as PricingTier, r as Product, s as ProductVariation, Q as QRLandingData, t as QRLandingPage, u as QRLandingStore, R as Recommendation, v as Review, w as ReviewSummary, S as SendCodeResponse, x as ShippingMethod, y as ShippingRate, z as StorefrontConfig, B as StorefrontSession, T as TaxBreakdown, V as VerifyCodeResponse, W as WhaleClient, F as WhaleStorefrontConfig, G as WishlistItem } from './client-CwCSPAHp.cjs';
2
+ export { P as PixelManager } from './pixel-manager-ti1xc1eC.cjs';
3
3
 
4
4
  /**
5
5
  * Resilient HTTP sender for analytics/event payloads.
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- export { A as Address, C as Cart, a as CartItem, b as Category, c as CategoryTreeNode, d as CheckoutSession, e as CouponValidation, f as Customer, g as CustomerAnalytics, D as DealValidation, E as EventType, L as LandingPageConfig, h as LandingPageRenderData, i as LandingSection, j as ListResponse, k as Location, l as LoyaltyAccount, m as LoyaltyReward, n as LoyaltyTransaction, O as Order, o as OrderItem, P as PaymentData, p as PixelConfig, q as PricingTier, r as Product, s as ProductVariation, Q as QRLandingData, t as QRLandingPage, u as QRLandingStore, R as Recommendation, v as Review, w as ReviewSummary, S as SendCodeResponse, x as ShippingMethod, y as ShippingRate, z as StorefrontConfig, B as StorefrontSession, T as TaxBreakdown, V as VerifyCodeResponse, W as WhaleClient, F as WhaleStorefrontConfig, G as WishlistItem } from './client-BSO263Uv.js';
2
- export { P as PixelManager } from './pixel-manager-BcL95odX.js';
1
+ export { A as Address, C as Cart, a as CartItem, b as Category, c as CategoryTreeNode, d as CheckoutSession, e as CouponValidation, f as Customer, g as CustomerAnalytics, D as DealValidation, E as EventType, L as LandingPageConfig, h as LandingPageRenderData, i as LandingSection, j as ListResponse, k as Location, l as LoyaltyAccount, m as LoyaltyReward, n as LoyaltyTransaction, O as Order, o as OrderItem, P as PaymentData, p as PixelConfig, q as PricingTier, r as Product, s as ProductVariation, Q as QRLandingData, t as QRLandingPage, u as QRLandingStore, R as Recommendation, v as Review, w as ReviewSummary, S as SendCodeResponse, x as ShippingMethod, y as ShippingRate, z as StorefrontConfig, B as StorefrontSession, T as TaxBreakdown, V as VerifyCodeResponse, W as WhaleClient, F as WhaleStorefrontConfig, G as WishlistItem } from './client-CwCSPAHp.js';
2
+ export { P as PixelManager } from './pixel-manager-LiLpBmPy.js';
3
3
 
4
4
  /**
5
5
  * Resilient HTTP sender for analytics/event payloads.
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- export { PixelManager } from './chunk-PXS2DPVL.js';
2
- export { WhaleClient, resilientSend } from './chunk-3Q7CPJBA.js';
1
+ export { PixelManager } from './chunk-MZO7BCGU.js';
2
+ export { WhaleClient, resilientSend } from './chunk-WNZOA4FB.js';
3
3
  //# sourceMappingURL=index.js.map
4
4
  //# sourceMappingURL=index.js.map
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkVAA2KKCH_cjs = require('../chunk-VAA2KKCH.cjs');
3
+ var chunkV5KCIYKG_cjs = require('../chunk-V5KCIYKG.cjs');
4
4
  var server = require('next/server');
5
5
 
6
6
  // src/next/headers.ts
@@ -54,7 +54,7 @@ function whaleGatewayRewrite(gatewayUrl = "https://whale-gateway.fly.dev", proxy
54
54
 
55
55
  // src/next/server.ts
56
56
  function createServerClient(config) {
57
- return new chunkVAA2KKCH_cjs.WhaleClient({
57
+ return new chunkV5KCIYKG_cjs.WhaleClient({
58
58
  storeId: config?.storeId || process.env.NEXT_PUBLIC_STORE_ID || process.env.NEXT_PUBLIC_WHALE_STORE_ID || "",
59
59
  apiKey: config?.apiKey || process.env.NEXT_PUBLIC_API_KEY || process.env.NEXT_PUBLIC_WHALE_API_KEY || "",
60
60
  gatewayUrl: config?.gatewayUrl || process.env.NEXT_PUBLIC_API_URL || process.env.NEXT_PUBLIC_WHALE_GATEWAY_URL || "https://whale-gateway.fly.dev",
@@ -87,8 +87,8 @@ function createImageLoader(config) {
87
87
  const w = String(snapWidth(width));
88
88
  const q = String(quality || 80);
89
89
  const f = "webp";
90
- const encoded = chunkVAA2KKCH_cjs.WhaleClient.encodeBase64Url(cleanSrc);
91
- const s = chunkVAA2KKCH_cjs.WhaleClient.signMedia(config.signingSecret, encoded, w, q, f);
90
+ const encoded = chunkV5KCIYKG_cjs.WhaleClient.encodeBase64Url(cleanSrc);
91
+ const s = chunkV5KCIYKG_cjs.WhaleClient.signMedia(config.signingSecret, encoded, w, q, f);
92
92
  return `${config.gatewayUrl}/v1/stores/${config.storeId}/media?url=${encoded}&w=${w}&q=${q}&f=${f}&s=${s}`;
93
93
  };
94
94
  }
@@ -1,4 +1,4 @@
1
- import { F as WhaleStorefrontConfig, W as WhaleClient, r as Product } from '../client-BSO263Uv.cjs';
1
+ import { F as WhaleStorefrontConfig, W as WhaleClient, r as Product } from '../client-CwCSPAHp.cjs';
2
2
  import { NextRequest, NextResponse } from 'next/server';
3
3
 
4
4
  /**
@@ -1,4 +1,4 @@
1
- import { F as WhaleStorefrontConfig, W as WhaleClient, r as Product } from '../client-BSO263Uv.js';
1
+ import { F as WhaleStorefrontConfig, W as WhaleClient, r as Product } from '../client-CwCSPAHp.js';
2
2
  import { NextRequest, NextResponse } from 'next/server';
3
3
 
4
4
  /**
@@ -1,4 +1,4 @@
1
- import { WhaleClient } from '../chunk-3Q7CPJBA.js';
1
+ import { WhaleClient } from '../chunk-WNZOA4FB.js';
2
2
  import { NextResponse } from 'next/server';
3
3
 
4
4
  // src/next/headers.ts
@@ -1,4 +1,4 @@
1
- import { p as PixelConfig } from './client-BSO263Uv.js';
1
+ import { p as PixelConfig } from './client-CwCSPAHp.js';
2
2
 
3
3
  declare class PixelManager {
4
4
  private providers;
@@ -1,4 +1,4 @@
1
- import { p as PixelConfig } from './client-BSO263Uv.cjs';
1
+ import { p as PixelConfig } from './client-CwCSPAHp.cjs';
2
2
 
3
3
  declare class PixelManager {
4
4
  private providers;