shopkit-analytics 1.0.0
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.
- package/LICENSE +21 -0
- package/README.md +769 -0
- package/dist/adapters/index.d.mts +4 -0
- package/dist/adapters/index.d.ts +4 -0
- package/dist/adapters/index.js +2405 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/index.mjs +23 -0
- package/dist/adapters/index.mjs.map +1 -0
- package/dist/affiliate/index.d.mts +138 -0
- package/dist/affiliate/index.d.ts +138 -0
- package/dist/affiliate/index.js +816 -0
- package/dist/affiliate/index.js.map +1 -0
- package/dist/affiliate/index.mjs +74 -0
- package/dist/affiliate/index.mjs.map +1 -0
- package/dist/affiliate-tracker-BgHwibPv.d.mts +144 -0
- package/dist/affiliate-tracker-BgHwibPv.d.ts +144 -0
- package/dist/chunk-3TQR5DOP.mjs +79 -0
- package/dist/chunk-3TQR5DOP.mjs.map +1 -0
- package/dist/chunk-4MZH5OLR.mjs +2375 -0
- package/dist/chunk-4MZH5OLR.mjs.map +1 -0
- package/dist/chunk-JVEGG6JV.mjs +213 -0
- package/dist/chunk-JVEGG6JV.mjs.map +1 -0
- package/dist/chunk-P4OJDCEZ.mjs +57 -0
- package/dist/chunk-P4OJDCEZ.mjs.map +1 -0
- package/dist/chunk-TNXTKEGS.mjs +758 -0
- package/dist/chunk-TNXTKEGS.mjs.map +1 -0
- package/dist/events/index.d.mts +112 -0
- package/dist/events/index.d.ts +112 -0
- package/dist/events/index.js +2131 -0
- package/dist/events/index.js.map +1 -0
- package/dist/events/index.mjs +30 -0
- package/dist/events/index.mjs.map +1 -0
- package/dist/index-BnNRgdUv.d.ts +676 -0
- package/dist/index-GODWc1s6.d.mts +676 -0
- package/dist/index.d.mts +38 -0
- package/dist/index.d.ts +38 -0
- package/dist/index.js +3269 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +190 -0
- package/dist/index.mjs.map +1 -0
- package/dist/subscriber-43gnCKWe.d.ts +80 -0
- package/dist/subscriber-IFZJU57V.mjs +8 -0
- package/dist/subscriber-IFZJU57V.mjs.map +1 -0
- package/dist/subscriber-sWesj_5p.d.mts +80 -0
- package/dist/types.d.mts +991 -0
- package/dist/types.d.ts +991 -0
- package/dist/types.js +102 -0
- package/dist/types.js.map +1 -0
- package/dist/types.mjs +8 -0
- package/dist/types.mjs.map +1 -0
- package/package.json +110 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/affiliate/AffiliateTracker.tsx","../src/affiliate/constants.ts","../src/affiliate/affiliate-tracker.ts","../src/affiliate/hooks.ts","../src/affiliate/utils.ts"],"sourcesContent":["\"use client\";\n\n\nimport { useEffect } from \"react\";\nimport {\n captureAffiliateParams,\n configureAffiliateTracker,\n} from \"./affiliate-tracker\";\nimport type { AffiliateConfig } from \"./types\";\n\ninterface AffiliateTrackerProps {\n config?: Partial<AffiliateConfig>;\n autoCapture?: boolean;\n children?: React.ReactNode;\n}\n\nconst AffiliateTracker: React.FC<AffiliateTrackerProps> = ({\n config,\n autoCapture = true,\n children,\n}) => {\n useEffect(() => {\n // Configure the tracker if config is provided\n if (config) {\n configureAffiliateTracker(config);\n }\n\n // Auto-capture affiliate params if enabled\n if (autoCapture) {\n captureAffiliateParams();\n }\n }, [config, autoCapture]);\n\n return children ? <>{children}</> : null;\n};\n\nexport default AffiliateTracker;\nexport type { AffiliateTrackerProps };\n","/**\n * Centralized constants for affiliate tracking parameters\n */\n\n// Core UTM parameters\nexport const UTM_PARAMETERS = [\n \"utm_source\",\n \"utm_medium\",\n \"utm_campaign\",\n \"utm_term\",\n \"utm_content\",\n] as const;\n\n// Click ID parameters from various platforms\nexport const CLICK_ID_PARAMETERS = [\n \"gclid\", // Google Ads\n \"fbclid\", // Facebook\n \"msclkid\", // Microsoft Ads\n \"ttclid\", // TikTok\n \"twclid\", // Twitter\n \"li_fat_id\", // LinkedIn\n] as const;\n\n// Generic affiliate parameters\nexport const AFFILIATE_PARAMETERS = [\n \"click_id\",\n \"affiliate_id\",\n \"ref\",\n \"source\",\n \"referrer\",\n] as const;\n\n// All supported affiliate tracking parameters\nexport const ALL_AFFILIATE_PARAMETERS = [\n ...UTM_PARAMETERS,\n ...CLICK_ID_PARAMETERS,\n ...AFFILIATE_PARAMETERS,\n] as const;\n\n// Default storage configuration\nexport const STORAGE_CONFIG = {\n DEFAULT_KEY: \"affiliateParams\",\n DEFAULT_TTL: 30 * 24 * 60 * 60 * 1000, // 30 days in milliseconds\n} as const;\n\n// Attribution models\nexport const ATTRIBUTION_MODELS = {\n FIRST_TOUCH: \"first-touch\",\n LAST_TOUCH: \"last-touch\",\n} as const;\n\n// Storage types\nexport const STORAGE_TYPES = {\n SESSION: \"sessionStorage\",\n LOCAL: \"localStorage\",\n} as const;\n\n// Event types\nexport const EVENT_TYPES = {\n CAPTURE: \"capture\",\n CLEAR: \"clear\",\n EXPIRE: \"expire\",\n} as const;\n\n// Attribution channels for classification\nexport const ATTRIBUTION_CHANNELS = {\n DIRECT: \"direct\",\n PAID_SEARCH: \"paid_search\",\n ORGANIC_SEARCH: \"organic_search\",\n SOCIAL: \"social\",\n EMAIL: \"email\",\n AFFILIATE: \"affiliate\",\n REFERRAL: \"referral\",\n DISPLAY: \"display\",\n} as const;\n\n// Search engines for referrer classification\nexport const SEARCH_ENGINES = [\n \"google.com\",\n \"bing.com\",\n \"yahoo.com\",\n \"duckduckgo.com\",\n \"baidu.com\",\n \"yandex.com\",\n \"ask.com\",\n] as const;\n\n// Social media platforms for source classification\nexport const SOCIAL_PLATFORMS = [\n \"facebook\",\n \"instagram\",\n \"twitter\",\n \"linkedin\",\n \"tiktok\",\n \"youtube\",\n \"pinterest\",\n \"snapchat\",\n] as const;\n\n// Type definitions for the constants\nexport type UTMParameter = (typeof UTM_PARAMETERS)[number];\nexport type ClickIdParameter = (typeof CLICK_ID_PARAMETERS)[number];\nexport type AffiliateParameter = (typeof AFFILIATE_PARAMETERS)[number];\nexport type AllAffiliateParameter = (typeof ALL_AFFILIATE_PARAMETERS)[number];\nexport type AttributionModel =\n (typeof ATTRIBUTION_MODELS)[keyof typeof ATTRIBUTION_MODELS];\nexport type StorageType = (typeof STORAGE_TYPES)[keyof typeof STORAGE_TYPES];\nexport type EventType = (typeof EVENT_TYPES)[keyof typeof EVENT_TYPES];\nexport type AttributionChannel =\n (typeof ATTRIBUTION_CHANNELS)[keyof typeof ATTRIBUTION_CHANNELS];\n","import type {\n AffiliateParams,\n AffiliateData,\n AffiliateConfig,\n AffiliateEvent,\n} from \"./types\";\nimport {\n ALL_AFFILIATE_PARAMETERS,\n STORAGE_CONFIG,\n ATTRIBUTION_MODELS,\n STORAGE_TYPES,\n} from \"./constants\";\n\nconst DEFAULT_CONFIG: Required<AffiliateConfig> = {\n storageKey: STORAGE_CONFIG.DEFAULT_KEY,\n storageType: STORAGE_TYPES.SESSION,\n attribution: ATTRIBUTION_MODELS.LAST_TOUCH,\n ttl: STORAGE_CONFIG.DEFAULT_TTL,\n customParams: [],\n enableReferrerCapture: true,\n enableUserAgentCapture: false,\n onCapture: () => {},\n onError: () => {},\n};\n\nlet currentConfig: Required<AffiliateConfig> = { ...DEFAULT_CONFIG };\nlet eventListeners: ((event: AffiliateEvent) => void)[] = [];\n\n/**\n * Configure the affiliate tracker\n */\nexport function configureAffiliateTracker(\n config: Partial<AffiliateConfig> = {}\n): void {\n currentConfig = { ...DEFAULT_CONFIG, ...config };\n}\n\n/**\n * Generate a unique session ID\n */\nfunction generateSessionId(): string {\n return `${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n}\n\n/**\n * Get the appropriate storage object\n */\nfunction getStorage(): Storage | null {\n if (typeof window === \"undefined\") return null;\n\n try {\n return currentConfig.storageType === \"localStorage\"\n ? window.localStorage\n : window.sessionStorage;\n } catch (error) {\n currentConfig.onError(new Error(`Storage not available: ${error}`));\n return null;\n }\n}\n\n/**\n * Check if stored data has expired\n */\nfunction isExpired(timestamp: number): boolean {\n return Date.now() - timestamp > currentConfig.ttl;\n}\n\n/**\n * Emit an event to all listeners\n */\nfunction emitEvent(event: AffiliateEvent): void {\n eventListeners.forEach((listener) => {\n try {\n listener(event);\n } catch (error) {\n currentConfig.onError(new Error(`Event listener error: ${error}`));\n }\n });\n}\n\n/**\n * Add an event listener\n */\nexport function addEventListener(\n listener: (event: AffiliateEvent) => void\n): () => void {\n eventListeners.push(listener);\n\n // Return unsubscribe function\n return () => {\n const index = eventListeners.indexOf(listener);\n if (index > -1) {\n eventListeners.splice(index, 1);\n }\n };\n}\n\n/**\n * Capture affiliate parameters from URL and store them\n */\nexport function captureAffiliateParams(\n customConfig?: Partial<AffiliateConfig>\n): AffiliateData | null {\n if (typeof window === \"undefined\") return null;\n\n // Temporarily override config if provided\n const originalConfig = currentConfig;\n if (customConfig) {\n currentConfig = { ...currentConfig, ...customConfig };\n }\n\n try {\n const storage = getStorage();\n if (!storage) return null;\n\n const urlParams = new URLSearchParams(window.location.search);\n const allKeys = [\n ...ALL_AFFILIATE_PARAMETERS,\n ...currentConfig.customParams,\n ];\n const affiliateParams: AffiliateParams = {};\n\n // Extract parameters from URL\n for (const key of allKeys) {\n const value = urlParams.get(key);\n if (value) {\n affiliateParams[key] = value;\n }\n }\n\n // Capture referrer if enabled and available\n if (currentConfig.enableReferrerCapture && document.referrer) {\n affiliateParams.referrer = document.referrer;\n }\n\n // Only proceed if we have affiliate data\n if (Object.keys(affiliateParams).length === 0) {\n return null;\n }\n\n // Check existing data for attribution logic\n const existingData = getAffiliateParams();\n let shouldUpdate = true;\n\n if (existingData && currentConfig.attribution === \"first-touch\") {\n // Don't update if we already have first-touch data\n shouldUpdate = false;\n }\n\n if (shouldUpdate) {\n const affiliateData: AffiliateData = {\n ...affiliateParams,\n timestamp: Date.now(),\n sessionId: generateSessionId(),\n attribution: currentConfig.attribution,\n url: window.location.href,\n ...(currentConfig.enableUserAgentCapture && {\n userAgent: navigator.userAgent,\n }),\n };\n\n storage.setItem(currentConfig.storageKey, JSON.stringify(affiliateData));\n\n // Emit capture event\n emitEvent({\n type: \"capture\",\n data: affiliateData,\n timestamp: Date.now(),\n });\n\n currentConfig.onCapture(affiliateData);\n return affiliateData;\n }\n\n return existingData;\n } catch (error) {\n const errorObj = error instanceof Error ? error : new Error(String(error));\n currentConfig.onError(errorObj);\n return null;\n } finally {\n // Restore original config\n if (customConfig) {\n currentConfig = originalConfig;\n }\n }\n}\n\n/**\n * Get stored affiliate parameters\n */\nexport function getAffiliateParams(): AffiliateData | null {\n if (typeof window === \"undefined\") return null;\n\n try {\n const storage = getStorage();\n if (!storage) return null;\n\n const stored = storage.getItem(currentConfig.storageKey);\n if (!stored) return null;\n\n const data: AffiliateData = JSON.parse(stored);\n\n // Check if data has expired\n if (isExpired(data.timestamp)) {\n clearAffiliateParams();\n emitEvent({\n type: \"expire\",\n data,\n timestamp: Date.now(),\n });\n return null;\n }\n\n return data;\n } catch (error) {\n const errorObj = error instanceof Error ? error : new Error(String(error));\n currentConfig.onError(errorObj);\n return null;\n }\n}\n\n/**\n * Clear stored affiliate parameters\n */\nexport function clearAffiliateParams(): void {\n if (typeof window === \"undefined\") return;\n\n try {\n const storage = getStorage();\n if (!storage) return;\n\n const existingData = getAffiliateParams();\n storage.removeItem(currentConfig.storageKey);\n\n // Emit clear event\n emitEvent({\n type: \"clear\",\n data: existingData || undefined,\n timestamp: Date.now(),\n });\n } catch (error) {\n const errorObj = error instanceof Error ? error : new Error(String(error));\n currentConfig.onError(errorObj);\n }\n}\n\n/**\n * Get affiliate parameters as URL search params string\n */\nexport function getAffiliateParamsAsUrlString(): string {\n const data = getAffiliateParams();\n if (!data) return \"\";\n\n const params = new URLSearchParams();\n\n // Only include the actual affiliate parameters, not metadata\n const affiliateKeys = [\n ...ALL_AFFILIATE_PARAMETERS,\n ...currentConfig.customParams,\n ];\n\n for (const key of affiliateKeys) {\n const value = data[key];\n if (typeof value === \"string\" && value) {\n params.set(key, value);\n }\n }\n\n return params.toString();\n}\n\n/**\n * Append affiliate parameters to a URL\n */\nexport function appendAffiliateParams(url: string): string {\n const affiliateParams = getAffiliateParamsAsUrlString();\n if (!affiliateParams) return url;\n\n const separator = url.includes(\"?\") ? \"&\" : \"?\";\n return `${url}${separator}${affiliateParams}`;\n}\n\n/**\n * Check if current session has affiliate data\n */\nexport function hasAffiliateData(): boolean {\n return getAffiliateParams() !== null;\n}\n\n/**\n * Get affiliate source (utm_source or referrer domain)\n */\nexport function getAffiliateSource(): string | null {\n const data = getAffiliateParams();\n if (!data) return null;\n\n if (data.utm_source) return data.utm_source;\n if (data.referrer) {\n try {\n return new URL(data.referrer).hostname;\n } catch {\n return data.referrer;\n }\n }\n\n return null;\n}\n\n/**\n * Get current configuration\n */\nexport function getConfig(): Required<AffiliateConfig> {\n return { ...currentConfig };\n}\n\n/**\n * Reset configuration to defaults\n */\nexport function resetConfig(): void {\n currentConfig = { ...DEFAULT_CONFIG };\n}\n\n// Export constants for external use\nexport { ALL_AFFILIATE_PARAMETERS, DEFAULT_CONFIG };\n","\"use client\";\n\nimport { useState, useEffect, useCallback, useRef } from \"react\";\nimport type {\n AffiliateData,\n AffiliateConfig,\n AffiliateTrackerHookReturn,\n AffiliateEvent,\n} from \"./types\";\nimport {\n captureAffiliateParams,\n getAffiliateParams,\n clearAffiliateParams,\n configureAffiliateTracker,\n addEventListener,\n hasAffiliateData,\n getAffiliateSource,\n} from \"./affiliate-tracker\";\n\n/**\n * Hook for tracking affiliate parameters\n */\nexport function useAffiliateTracker(\n config?: Partial<AffiliateConfig>\n): AffiliateTrackerHookReturn {\n const [affiliateParams, setAffiliateParams] = useState<AffiliateData | null>(\n null\n );\n const [isLoading, setIsLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n const configRef = useRef(config);\n\n // Update config ref when config changes\n useEffect(() => {\n configRef.current = config;\n }, [config]);\n\n // Configure tracker on mount\n useEffect(() => {\n if (configRef.current) {\n configureAffiliateTracker({\n ...configRef.current,\n onError: (err) => {\n setError(err);\n configRef.current?.onError?.(err);\n },\n });\n }\n }, []);\n\n // Load initial data\n const refreshParams = useCallback(() => {\n setIsLoading(true);\n setError(null);\n\n try {\n const params = getAffiliateParams();\n setAffiliateParams(params);\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n setError(error);\n } finally {\n setIsLoading(false);\n }\n }, []);\n\n // Capture new params\n const captureParams = useCallback(() => {\n setError(null);\n\n try {\n const params = captureAffiliateParams(configRef.current);\n setAffiliateParams(params);\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n setError(error);\n }\n }, []);\n\n // Clear params\n const clearParams = useCallback(() => {\n setError(null);\n\n try {\n clearAffiliateParams();\n setAffiliateParams(null);\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n setError(error);\n }\n }, []);\n\n // Listen for events\n useEffect(() => {\n const unsubscribe = addEventListener((event: AffiliateEvent) => {\n switch (event.type) {\n case \"capture\":\n setAffiliateParams(event.data || null);\n break;\n case \"clear\":\n case \"expire\":\n setAffiliateParams(null);\n break;\n }\n });\n\n return unsubscribe;\n }, []);\n\n // Initial load\n useEffect(() => {\n refreshParams();\n }, [refreshParams]);\n\n return {\n affiliateParams,\n isLoading,\n error,\n captureParams,\n clearParams,\n refreshParams,\n };\n}\n\n/**\n * Hook for checking if affiliate data exists\n */\nexport function useHasAffiliateData(): boolean {\n const [hasData, setHasData] = useState(false);\n\n useEffect(() => {\n const checkData = () => {\n setHasData(hasAffiliateData());\n };\n\n checkData();\n\n const unsubscribe = addEventListener(() => {\n checkData();\n });\n\n return unsubscribe;\n }, []);\n\n return hasData;\n}\n\n/**\n * Hook for getting affiliate source\n */\nexport function useAffiliateSource(): string | null {\n const [source, setSource] = useState<string | null>(null);\n\n useEffect(() => {\n const updateSource = () => {\n setSource(getAffiliateSource());\n };\n\n updateSource();\n\n const unsubscribe = addEventListener(() => {\n updateSource();\n });\n\n return unsubscribe;\n }, []);\n\n return source;\n}\n\n/**\n * Hook for auto-capturing affiliate params on mount\n */\nexport function useAutoCapture(config?: Partial<AffiliateConfig>): void {\n const hasRun = useRef(false);\n\n useEffect(() => {\n if (hasRun.current) return;\n hasRun.current = true;\n\n if (config) {\n configureAffiliateTracker(config);\n }\n\n captureAffiliateParams();\n }, [config]);\n}\n\n/**\n * Hook for listening to affiliate events\n */\nexport function useAffiliateEvents(\n callback: (event: AffiliateEvent) => void,\n eventTypes?: Array<\"capture\" | \"clear\" | \"expire\">\n): void {\n const callbackRef = useRef(callback);\n const eventTypesRef = useRef(eventTypes);\n\n useEffect(() => {\n callbackRef.current = callback;\n eventTypesRef.current = eventTypes;\n });\n\n useEffect(() => {\n const unsubscribe = addEventListener((event: AffiliateEvent) => {\n if (\n !eventTypesRef.current ||\n eventTypesRef.current.includes(event.type)\n ) {\n callbackRef.current(event);\n }\n });\n\n return unsubscribe;\n }, []);\n}\n","import type { AffiliateData, AffiliateParams } from \"./types\";\nimport { getAffiliateParams, appendAffiliateParams } from \"./affiliate-tracker\";\nimport {\n ALL_AFFILIATE_PARAMETERS,\n SEARCH_ENGINES,\n SOCIAL_PLATFORMS,\n ATTRIBUTION_CHANNELS,\n} from \"./constants\";\n\n/**\n * Analytics integration utilities\n */\nexport class AffiliateAnalytics {\n /**\n * Send affiliate data to Google Analytics 4\n */\n static sendToGA4(\n eventName: string = \"affiliate_attribution\",\n customParams?: Record<string, any>\n ): void {\n const affiliateData = getAffiliateParams();\n if (!affiliateData || typeof window === \"undefined\") return;\n\n // Check if gtag is available\n if (typeof (window as any).gtag === \"function\") {\n const eventParams: Record<string, any> = {\n utm_source: affiliateData.utm_source,\n utm_medium: affiliateData.utm_medium,\n utm_campaign: affiliateData.utm_campaign,\n utm_term: affiliateData.utm_term,\n utm_content: affiliateData.utm_content,\n affiliate_id: affiliateData.affiliate_id,\n attribution_type: affiliateData.attribution,\n session_id: affiliateData.sessionId,\n ...customParams,\n };\n\n // Remove undefined values\n Object.keys(eventParams).forEach((key) => {\n if (eventParams[key] === undefined) {\n delete eventParams[key];\n }\n });\n\n (window as any).gtag(\"event\", eventName, eventParams);\n }\n }\n\n /**\n * Send affiliate data to Facebook Pixel\n */\n static sendToFacebookPixel(\n eventName: string = \"AffiliateAttribution\",\n customParams?: Record<string, any>\n ): void {\n const affiliateData = getAffiliateParams();\n if (!affiliateData || typeof window === \"undefined\") return;\n\n // Check if fbq is available\n if (typeof (window as any).fbq === \"function\") {\n const eventParams: Record<string, any> = {\n utm_source: affiliateData.utm_source,\n utm_medium: affiliateData.utm_medium,\n utm_campaign: affiliateData.utm_campaign,\n fbclid: affiliateData.fbclid,\n ...customParams,\n };\n\n // Remove undefined values\n Object.keys(eventParams).forEach((key) => {\n if (eventParams[key] === undefined) {\n delete eventParams[key];\n }\n });\n\n (window as any).fbq(\"trackCustom\", eventName, eventParams);\n }\n }\n\n /**\n * Send affiliate data to any custom analytics endpoint\n */\n static async sendToCustomEndpoint(\n endpoint: string,\n options: {\n method?: string;\n headers?: Record<string, string>;\n customData?: Record<string, any>;\n } = {}\n ): Promise<void> {\n const affiliateData = getAffiliateParams();\n if (!affiliateData) return;\n\n const { method = \"POST\", headers = {}, customData = {} } = options;\n\n try {\n await fetch(endpoint, {\n method,\n headers: {\n \"Content-Type\": \"application/json\",\n ...headers,\n },\n body: JSON.stringify({\n ...affiliateData,\n ...customData,\n }),\n });\n } catch (error) {\n console.error(\"Failed to send affiliate data to custom endpoint:\", error);\n }\n }\n}\n\n/**\n * URL manipulation utilities\n */\nexport class AffiliateUrlUtils {\n /**\n * Create affiliate links with current parameters\n */\n static createAffiliateLink(\n baseUrl: string,\n additionalParams?: Record<string, string>\n ): string {\n let url = appendAffiliateParams(baseUrl);\n\n if (additionalParams) {\n const separator = url.includes(\"?\") ? \"&\" : \"?\";\n const params = new URLSearchParams(additionalParams);\n url = `${url}${separator}${params.toString()}`;\n }\n\n return url;\n }\n\n /**\n * Extract affiliate parameters from a URL\n */\n static extractFromUrl(url: string): AffiliateParams {\n try {\n const urlObj = new URL(url);\n const params: AffiliateParams = {};\n\n // Common affiliate parameters\n const affiliateKeys = ALL_AFFILIATE_PARAMETERS;\n\n affiliateKeys.forEach((key) => {\n const value = urlObj.searchParams.get(key);\n if (value) {\n params[key] = value;\n }\n });\n\n return params;\n } catch {\n return {};\n }\n }\n\n /**\n * Clean URL by removing affiliate parameters\n */\n static cleanUrl(url: string): string {\n try {\n const urlObj = new URL(url);\n const affiliateKeys = ALL_AFFILIATE_PARAMETERS;\n\n affiliateKeys.forEach((key) => {\n urlObj.searchParams.delete(key);\n });\n\n return urlObj.toString();\n } catch {\n return url;\n }\n }\n}\n\n/**\n * Attribution utilities\n */\nexport class AffiliateAttribution {\n /**\n * Determine the attribution channel based on affiliate data\n */\n static getAttributionChannel(data?: AffiliateData): string {\n const affiliateData = data || getAffiliateParams();\n if (!affiliateData) return ATTRIBUTION_CHANNELS.DIRECT;\n\n // Check for paid search\n if (\n affiliateData.gclid ||\n affiliateData.utm_medium === \"cpc\" ||\n affiliateData.utm_medium === \"ppc\"\n ) {\n return ATTRIBUTION_CHANNELS.PAID_SEARCH;\n }\n\n // Check for social media\n if (\n affiliateData.fbclid ||\n affiliateData.ttclid ||\n affiliateData.twclid ||\n affiliateData.li_fat_id ||\n (affiliateData.utm_source &&\n SOCIAL_PLATFORMS.some((platform) =>\n affiliateData.utm_source?.includes(platform)\n ))\n ) {\n return ATTRIBUTION_CHANNELS.SOCIAL;\n }\n\n // Check for email\n if (\n affiliateData.utm_medium === \"email\" ||\n affiliateData.utm_source === \"email\"\n ) {\n return ATTRIBUTION_CHANNELS.EMAIL;\n }\n\n // Check for affiliate/referral\n if (\n affiliateData.affiliate_id ||\n affiliateData.utm_medium === \"affiliate\" ||\n affiliateData.utm_medium === \"referral\"\n ) {\n return ATTRIBUTION_CHANNELS.AFFILIATE;\n }\n\n // Check for organic search\n if (\n affiliateData.utm_medium === \"organic\" ||\n (affiliateData.referrer && this.isSearchEngine(affiliateData.referrer))\n ) {\n return ATTRIBUTION_CHANNELS.ORGANIC_SEARCH;\n }\n\n // Check for display advertising\n if (\n affiliateData.utm_medium === \"display\" ||\n affiliateData.utm_medium === \"banner\"\n ) {\n return ATTRIBUTION_CHANNELS.DISPLAY;\n }\n\n // Default to referral if we have a referrer\n if (affiliateData.referrer) {\n return ATTRIBUTION_CHANNELS.REFERRAL;\n }\n\n return ATTRIBUTION_CHANNELS.DIRECT;\n }\n\n /**\n * Check if a URL is from a search engine\n */\n private static isSearchEngine(url: string): boolean {\n const searchEngines = SEARCH_ENGINES;\n\n try {\n const hostname = new URL(url).hostname.toLowerCase();\n return searchEngines.some((engine) => hostname.includes(engine));\n } catch {\n return false;\n }\n }\n\n /**\n * Get attribution score (0-100) based on data quality\n */\n static getAttributionScore(data?: AffiliateData): number {\n const affiliateData = data || getAffiliateParams();\n if (!affiliateData) return 0;\n\n let score = 0;\n\n // Base score for having data\n score += 20;\n\n // UTM parameters (high value)\n if (affiliateData.utm_source) score += 20;\n if (affiliateData.utm_medium) score += 20;\n if (affiliateData.utm_campaign) score += 15;\n\n // Click IDs (very high value)\n if (affiliateData.gclid || affiliateData.fbclid || affiliateData.msclkid)\n score += 25;\n\n // Referrer information\n if (affiliateData.referrer) score += 10;\n\n // Additional parameters\n if (affiliateData.utm_term) score += 5;\n if (affiliateData.utm_content) score += 5;\n\n return Math.min(score, 100);\n }\n}\n\n/**\n * Testing utilities\n */\nexport class AffiliateTestUtils {\n /**\n * Mock affiliate data for testing\n */\n static mockAffiliateData(params: Partial<AffiliateData> = {}): AffiliateData {\n return {\n utm_source: \"test_source\",\n utm_medium: \"test_medium\",\n utm_campaign: \"test_campaign\",\n timestamp: Date.now(),\n sessionId: \"test-session-id\",\n attribution: \"last-touch\",\n url: \"https://example.com?utm_source=test_source&utm_medium=test_medium\",\n ...params,\n };\n }\n\n /**\n * Create test URL with affiliate parameters\n */\n static createTestUrl(\n baseUrl: string = \"https://example.com\",\n params: AffiliateParams = {}\n ): string {\n const defaultParams = {\n utm_source: \"test_source\",\n utm_medium: \"test_medium\",\n utm_campaign: \"test_campaign\",\n ...params,\n };\n\n const url = new URL(baseUrl);\n Object.entries(defaultParams).forEach(([key, value]) => {\n if (value) {\n url.searchParams.set(key, value);\n }\n });\n\n return url.toString();\n }\n\n /**\n * Simulate URL navigation for testing\n */\n static simulateNavigation(url: string): void {\n if (typeof window !== \"undefined\") {\n // Update window.location.search for testing\n Object.defineProperty(window, \"location\", {\n value: {\n ...window.location,\n search: new URL(url).search,\n href: url,\n },\n writable: true,\n });\n }\n }\n}\n\n/**\n * Validation utilities\n */\nexport class AffiliateValidation {\n /**\n * Validate affiliate parameter format\n */\n static validateParams(params: AffiliateParams): {\n isValid: boolean;\n errors: string[];\n } {\n const errors: string[] = [];\n\n // Check for required fields based on common patterns\n if (params.utm_source && params.utm_source.length > 100) {\n errors.push(\"utm_source is too long (max 100 characters)\");\n }\n\n if (params.utm_medium && params.utm_medium.length > 100) {\n errors.push(\"utm_medium is too long (max 100 characters)\");\n }\n\n if (params.utm_campaign && params.utm_campaign.length > 100) {\n errors.push(\"utm_campaign is too long (max 100 characters)\");\n }\n\n // Validate URL format for referrer\n if (params.referrer) {\n try {\n new URL(params.referrer);\n } catch {\n errors.push(\"referrer is not a valid URL\");\n }\n }\n\n return {\n isValid: errors.length === 0,\n errors,\n };\n }\n\n /**\n * Sanitize affiliate parameters\n */\n static sanitizeParams(params: AffiliateParams): AffiliateParams {\n const sanitized: AffiliateParams = {};\n\n Object.entries(params).forEach(([key, value]) => {\n if (typeof value === \"string\" && value.trim()) {\n // Basic sanitization - remove potentially harmful characters\n sanitized[key] = value\n .trim()\n .replace(/[<>'\"]/g, \"\") // Remove basic XSS characters\n .substring(0, 200); // Limit length\n }\n });\n\n return sanitized;\n }\n}\n"],"mappings":"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","names":["useEffect","useEffect","error"]}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { TEvent } from '../types.mjs';
|
|
2
|
+
export { BaseEvent, EventType, IAddPaymentInfoEvent, IAddToCartEvent, IAddressAddedGKEvent, IAddressCompletedGKEvent, IAddressSelectedGKEvent, IBeginCheckoutEvent, IButtonClickEvent, ICartPageLandEvent, ICartViewedEvent, ICheckoutCompletedEvent, ICheckoutPaymentEvent, ICheckoutStartedEvent, ICloseCartEvent, ICouponCopiedEvent, ICustomEvent, ICustomerLoggedInEvent, ICustomerRegisteredEvent, IFilterAppliedEvent, IFirstVisitEvent, IFormStartEvent, IFormSubmissionEvent, IItemPurchasedEvent, IKPMPPhoneNumberLoggedInEvent, IKPMPShopifyLoggedInEvent, IKPMPSuccessfullyLoggedOutEvent, IKPMPTruecallerLoggedInEvent, IKPMPWhatsAppLoggedInEvent, IKPPhoneNumberLoggedInEvent, IKPShopifyLoggedInEvent, IKPSuccessfullyLoggedOutEvent, IKPTruecallerLoggedInEvent, IKPWhatsAppLoggedInEvent, IMobileAddedGKEvent, INewsletterSubscriptionEvent, IOrderCompletedEvent, IOrderPlacedEvent, IOrderSuccessEvent, IPCollectionViewEvent, IPageViewEvent, IPagesScreensPerSessionEvent, IPaymentCompletedGKEvent, IPaymentMethodSelectedGKEvent, IPinCodeAddedGKEvent, IProductViewEvent, IPurchaseEvent, IQuantityChangeEvent, IRemoveFromCartEvent, IScrollEvent, ISearchEvent, ISessionStartEvent, IShopifyAbandonedCheckoutEvent, IShopifyAddToCartEvent, IShopifyCheckoutStartedEvent, IShopifyCheckoutUpdatedEvent, IShopifyOrderFulfilledEvent, IShopifyRemoveFromCartEvent, IShopifyUpdateCartEvent, ISpinformResultEvent, IStartedCheckoutGKEvent, IStartedOrderEvent, IUpdateCartEvent, IUserEngagementEvent, IUserLoginEvent, IUserSignupEvent, IViewContentEvent, IViewItemEvent, IViewSearchResultsEvent, IViewedProductEvent } from '../types.mjs';
|
|
3
|
+
import { T as TrackingAdapter } from '../subscriber-sWesj_5p.mjs';
|
|
4
|
+
export { e as eventSubscriber } from '../subscriber-sWesj_5p.mjs';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* EventPublisher class responsible for publishing events to subscribers
|
|
8
|
+
*/
|
|
9
|
+
declare class EventPublisher {
|
|
10
|
+
private static instance;
|
|
11
|
+
private subscribers;
|
|
12
|
+
/**
|
|
13
|
+
* Private constructor to enforce singleton pattern
|
|
14
|
+
*/
|
|
15
|
+
private constructor();
|
|
16
|
+
/**
|
|
17
|
+
* Get the singleton instance of EventPublisher
|
|
18
|
+
*/
|
|
19
|
+
static getInstance(): EventPublisher;
|
|
20
|
+
/**
|
|
21
|
+
* Subscribe to events
|
|
22
|
+
* @param callback Function to be called when an event is published
|
|
23
|
+
* @returns Unsubscribe function
|
|
24
|
+
*/
|
|
25
|
+
subscribe(callback: (event: TEvent) => void): () => void;
|
|
26
|
+
/**
|
|
27
|
+
* Publish an event to all subscribers
|
|
28
|
+
* @param event The event to publish
|
|
29
|
+
*/
|
|
30
|
+
publish(event: TEvent): void;
|
|
31
|
+
}
|
|
32
|
+
declare const eventPublisher: EventPublisher;
|
|
33
|
+
/**
|
|
34
|
+
* Helper function to publish events
|
|
35
|
+
* @param event The event to publish
|
|
36
|
+
*/
|
|
37
|
+
declare function publishEvent(event: TEvent): void;
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Initialize the event tracking system with the provided adapters
|
|
41
|
+
* @param adapters Array of tracking adapters to register
|
|
42
|
+
*/
|
|
43
|
+
declare function initializeEventTracking(adapters: TrackingAdapter[]): Promise<void>;
|
|
44
|
+
/**
|
|
45
|
+
* Example initialization function with common adapters
|
|
46
|
+
* This is a convenience function that shows how to set up common tracking adapters
|
|
47
|
+
* Users can customize this based on their needs
|
|
48
|
+
*/
|
|
49
|
+
declare function initTracking(config: {
|
|
50
|
+
pixelId?: string;
|
|
51
|
+
gaId?: string;
|
|
52
|
+
moengageAppId?: string;
|
|
53
|
+
moengageRegion?: string;
|
|
54
|
+
enableDebugLogs?: boolean;
|
|
55
|
+
}): Promise<void>;
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Event name constants for tracking platforms
|
|
59
|
+
*/
|
|
60
|
+
declare const EventNames: {
|
|
61
|
+
PAGE_VIEWED: string;
|
|
62
|
+
BUTTON_CLICKED: string;
|
|
63
|
+
FORM_SUBMITTED: string;
|
|
64
|
+
PRODUCT_VIEWED: string;
|
|
65
|
+
ADDED_TO_CART: string;
|
|
66
|
+
REMOVED_FROM_CART: string;
|
|
67
|
+
CHECKOUT_STARTED: string;
|
|
68
|
+
PURCHASE_COMPLETED: string;
|
|
69
|
+
SEARCH: string;
|
|
70
|
+
USER_SIGNED_UP: string;
|
|
71
|
+
USER_LOGGED_IN: string;
|
|
72
|
+
ITEM_PURCHASED: string;
|
|
73
|
+
UPDATE_CART: string;
|
|
74
|
+
CUSTOMER_REGISTERED: string;
|
|
75
|
+
CUSTOMER_LOGGED_IN: string;
|
|
76
|
+
SHOPIFY_CHECKOUT_UPDATED: string;
|
|
77
|
+
SHOPIFY_ABANDONED_CHECKOUT: string;
|
|
78
|
+
SHOPIFY_ORDER_FULFILLED: string;
|
|
79
|
+
SHOPIFY_CHECKOUT_STARTED: string;
|
|
80
|
+
SHOPIFY_ADD_TO_CART: string;
|
|
81
|
+
SHOPIFY_REMOVED_FROM_CART: string;
|
|
82
|
+
SHOPIFY_UPDATE_CART: string;
|
|
83
|
+
SPINFORM_RESULT: string;
|
|
84
|
+
COUPON_COPIED: string;
|
|
85
|
+
STARTED_CHECKOUT_GK: string;
|
|
86
|
+
MOBILE_ADDED_GK: string;
|
|
87
|
+
ADDRESS_SELECTED_GK: string;
|
|
88
|
+
ADDRESS_COMPLETED_GK: string;
|
|
89
|
+
PAYMENT_METHOD_SELECTED_GK: string;
|
|
90
|
+
PAYMENT_COMPLETED_GK: string;
|
|
91
|
+
ORDER_SUCCESS: string;
|
|
92
|
+
ORDER_COMPLETED: string;
|
|
93
|
+
PIN_CODE_ADDED_GK: string;
|
|
94
|
+
ADDRESS_ADDED_GK: string;
|
|
95
|
+
KP_MP_PHONE_NUMBER_LOGGED_IN: string;
|
|
96
|
+
KP_PHONE_NUMBER_LOGGED_IN: string;
|
|
97
|
+
KP_MP_SHOPIFY_LOGGED_IN: string;
|
|
98
|
+
KP_MP_SUCCESSFULLY_LOGGED_OUT: string;
|
|
99
|
+
KP_WHATSAPP_LOGGED_IN: string;
|
|
100
|
+
KP_MP_TRUECALLER_LOGGED_IN: string;
|
|
101
|
+
KP_MP_WHATSAPP_LOGGED_IN: string;
|
|
102
|
+
KP_TRUECALLER_LOGGED_IN: string;
|
|
103
|
+
KP_SHOPIFY_LOGGED_IN: string;
|
|
104
|
+
KP_SUCCESSFULLY_LOGGED_OUT: string;
|
|
105
|
+
};
|
|
106
|
+
/**
|
|
107
|
+
* Default currency code
|
|
108
|
+
*/
|
|
109
|
+
declare const DEFAULT_CURRENCY = "INR";
|
|
110
|
+
declare const HARDCODED_HANDLE = "ryze-gums";
|
|
111
|
+
|
|
112
|
+
export { DEFAULT_CURRENCY, EventNames, HARDCODED_HANDLE, TEvent, TrackingAdapter, eventPublisher, initTracking, initializeEventTracking, publishEvent };
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { TEvent } from '../types.js';
|
|
2
|
+
export { BaseEvent, EventType, IAddPaymentInfoEvent, IAddToCartEvent, IAddressAddedGKEvent, IAddressCompletedGKEvent, IAddressSelectedGKEvent, IBeginCheckoutEvent, IButtonClickEvent, ICartPageLandEvent, ICartViewedEvent, ICheckoutCompletedEvent, ICheckoutPaymentEvent, ICheckoutStartedEvent, ICloseCartEvent, ICouponCopiedEvent, ICustomEvent, ICustomerLoggedInEvent, ICustomerRegisteredEvent, IFilterAppliedEvent, IFirstVisitEvent, IFormStartEvent, IFormSubmissionEvent, IItemPurchasedEvent, IKPMPPhoneNumberLoggedInEvent, IKPMPShopifyLoggedInEvent, IKPMPSuccessfullyLoggedOutEvent, IKPMPTruecallerLoggedInEvent, IKPMPWhatsAppLoggedInEvent, IKPPhoneNumberLoggedInEvent, IKPShopifyLoggedInEvent, IKPSuccessfullyLoggedOutEvent, IKPTruecallerLoggedInEvent, IKPWhatsAppLoggedInEvent, IMobileAddedGKEvent, INewsletterSubscriptionEvent, IOrderCompletedEvent, IOrderPlacedEvent, IOrderSuccessEvent, IPCollectionViewEvent, IPageViewEvent, IPagesScreensPerSessionEvent, IPaymentCompletedGKEvent, IPaymentMethodSelectedGKEvent, IPinCodeAddedGKEvent, IProductViewEvent, IPurchaseEvent, IQuantityChangeEvent, IRemoveFromCartEvent, IScrollEvent, ISearchEvent, ISessionStartEvent, IShopifyAbandonedCheckoutEvent, IShopifyAddToCartEvent, IShopifyCheckoutStartedEvent, IShopifyCheckoutUpdatedEvent, IShopifyOrderFulfilledEvent, IShopifyRemoveFromCartEvent, IShopifyUpdateCartEvent, ISpinformResultEvent, IStartedCheckoutGKEvent, IStartedOrderEvent, IUpdateCartEvent, IUserEngagementEvent, IUserLoginEvent, IUserSignupEvent, IViewContentEvent, IViewItemEvent, IViewSearchResultsEvent, IViewedProductEvent } from '../types.js';
|
|
3
|
+
import { T as TrackingAdapter } from '../subscriber-43gnCKWe.js';
|
|
4
|
+
export { e as eventSubscriber } from '../subscriber-43gnCKWe.js';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* EventPublisher class responsible for publishing events to subscribers
|
|
8
|
+
*/
|
|
9
|
+
declare class EventPublisher {
|
|
10
|
+
private static instance;
|
|
11
|
+
private subscribers;
|
|
12
|
+
/**
|
|
13
|
+
* Private constructor to enforce singleton pattern
|
|
14
|
+
*/
|
|
15
|
+
private constructor();
|
|
16
|
+
/**
|
|
17
|
+
* Get the singleton instance of EventPublisher
|
|
18
|
+
*/
|
|
19
|
+
static getInstance(): EventPublisher;
|
|
20
|
+
/**
|
|
21
|
+
* Subscribe to events
|
|
22
|
+
* @param callback Function to be called when an event is published
|
|
23
|
+
* @returns Unsubscribe function
|
|
24
|
+
*/
|
|
25
|
+
subscribe(callback: (event: TEvent) => void): () => void;
|
|
26
|
+
/**
|
|
27
|
+
* Publish an event to all subscribers
|
|
28
|
+
* @param event The event to publish
|
|
29
|
+
*/
|
|
30
|
+
publish(event: TEvent): void;
|
|
31
|
+
}
|
|
32
|
+
declare const eventPublisher: EventPublisher;
|
|
33
|
+
/**
|
|
34
|
+
* Helper function to publish events
|
|
35
|
+
* @param event The event to publish
|
|
36
|
+
*/
|
|
37
|
+
declare function publishEvent(event: TEvent): void;
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Initialize the event tracking system with the provided adapters
|
|
41
|
+
* @param adapters Array of tracking adapters to register
|
|
42
|
+
*/
|
|
43
|
+
declare function initializeEventTracking(adapters: TrackingAdapter[]): Promise<void>;
|
|
44
|
+
/**
|
|
45
|
+
* Example initialization function with common adapters
|
|
46
|
+
* This is a convenience function that shows how to set up common tracking adapters
|
|
47
|
+
* Users can customize this based on their needs
|
|
48
|
+
*/
|
|
49
|
+
declare function initTracking(config: {
|
|
50
|
+
pixelId?: string;
|
|
51
|
+
gaId?: string;
|
|
52
|
+
moengageAppId?: string;
|
|
53
|
+
moengageRegion?: string;
|
|
54
|
+
enableDebugLogs?: boolean;
|
|
55
|
+
}): Promise<void>;
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Event name constants for tracking platforms
|
|
59
|
+
*/
|
|
60
|
+
declare const EventNames: {
|
|
61
|
+
PAGE_VIEWED: string;
|
|
62
|
+
BUTTON_CLICKED: string;
|
|
63
|
+
FORM_SUBMITTED: string;
|
|
64
|
+
PRODUCT_VIEWED: string;
|
|
65
|
+
ADDED_TO_CART: string;
|
|
66
|
+
REMOVED_FROM_CART: string;
|
|
67
|
+
CHECKOUT_STARTED: string;
|
|
68
|
+
PURCHASE_COMPLETED: string;
|
|
69
|
+
SEARCH: string;
|
|
70
|
+
USER_SIGNED_UP: string;
|
|
71
|
+
USER_LOGGED_IN: string;
|
|
72
|
+
ITEM_PURCHASED: string;
|
|
73
|
+
UPDATE_CART: string;
|
|
74
|
+
CUSTOMER_REGISTERED: string;
|
|
75
|
+
CUSTOMER_LOGGED_IN: string;
|
|
76
|
+
SHOPIFY_CHECKOUT_UPDATED: string;
|
|
77
|
+
SHOPIFY_ABANDONED_CHECKOUT: string;
|
|
78
|
+
SHOPIFY_ORDER_FULFILLED: string;
|
|
79
|
+
SHOPIFY_CHECKOUT_STARTED: string;
|
|
80
|
+
SHOPIFY_ADD_TO_CART: string;
|
|
81
|
+
SHOPIFY_REMOVED_FROM_CART: string;
|
|
82
|
+
SHOPIFY_UPDATE_CART: string;
|
|
83
|
+
SPINFORM_RESULT: string;
|
|
84
|
+
COUPON_COPIED: string;
|
|
85
|
+
STARTED_CHECKOUT_GK: string;
|
|
86
|
+
MOBILE_ADDED_GK: string;
|
|
87
|
+
ADDRESS_SELECTED_GK: string;
|
|
88
|
+
ADDRESS_COMPLETED_GK: string;
|
|
89
|
+
PAYMENT_METHOD_SELECTED_GK: string;
|
|
90
|
+
PAYMENT_COMPLETED_GK: string;
|
|
91
|
+
ORDER_SUCCESS: string;
|
|
92
|
+
ORDER_COMPLETED: string;
|
|
93
|
+
PIN_CODE_ADDED_GK: string;
|
|
94
|
+
ADDRESS_ADDED_GK: string;
|
|
95
|
+
KP_MP_PHONE_NUMBER_LOGGED_IN: string;
|
|
96
|
+
KP_PHONE_NUMBER_LOGGED_IN: string;
|
|
97
|
+
KP_MP_SHOPIFY_LOGGED_IN: string;
|
|
98
|
+
KP_MP_SUCCESSFULLY_LOGGED_OUT: string;
|
|
99
|
+
KP_WHATSAPP_LOGGED_IN: string;
|
|
100
|
+
KP_MP_TRUECALLER_LOGGED_IN: string;
|
|
101
|
+
KP_MP_WHATSAPP_LOGGED_IN: string;
|
|
102
|
+
KP_TRUECALLER_LOGGED_IN: string;
|
|
103
|
+
KP_SHOPIFY_LOGGED_IN: string;
|
|
104
|
+
KP_SUCCESSFULLY_LOGGED_OUT: string;
|
|
105
|
+
};
|
|
106
|
+
/**
|
|
107
|
+
* Default currency code
|
|
108
|
+
*/
|
|
109
|
+
declare const DEFAULT_CURRENCY = "INR";
|
|
110
|
+
declare const HARDCODED_HANDLE = "ryze-gums";
|
|
111
|
+
|
|
112
|
+
export { DEFAULT_CURRENCY, EventNames, HARDCODED_HANDLE, TEvent, TrackingAdapter, eventPublisher, initTracking, initializeEventTracking, publishEvent };
|