@grainql/analytics-web 1.7.0 → 1.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- /* Grain Analytics Web SDK v1.7.0 | MIT License | Development Build */
1
+ /* Grain Analytics Web SDK v1.7.1 | MIT License | Development Build */
2
2
  "use strict";
3
3
  var Grain = (() => {
4
4
  var __defProp = Object.defineProperty;
@@ -299,7 +299,7 @@ var Grain = (() => {
299
299
  const response = await fetch(url, {
300
300
  method: "POST",
301
301
  headers,
302
- body: JSON.stringify({ events })
302
+ body: JSON.stringify(events)
303
303
  });
304
304
  if (!response.ok) {
305
305
  let errorMessage = `HTTP ${response.status}`;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/index.ts"],
4
- "sourcesContent": ["/**\n * Grain Analytics Web SDK\n * A lightweight, dependency-free TypeScript SDK for sending analytics events to Grain's REST API\n */\n\nexport interface GrainEvent {\n eventName: string;\n userId?: string;\n properties?: Record<string, unknown>;\n timestamp?: Date;\n}\n\nexport interface EventPayload {\n eventName: string;\n userId: string;\n properties: Record<string, unknown>;\n}\n\nexport type AuthStrategy = 'NONE' | 'SERVER_SIDE' | 'JWT';\n\nexport interface AuthProvider {\n getToken(): Promise<string> | string;\n}\n\nexport interface GrainConfig {\n tenantId: string;\n apiUrl?: string;\n authStrategy?: AuthStrategy;\n secretKey?: string; // For SERVER_SIDE auth\n authProvider?: AuthProvider; // For JWT auth\n userId?: string; // Global user ID for all events\n batchSize?: number;\n flushInterval?: number; // milliseconds\n retryAttempts?: number;\n retryDelay?: number; // milliseconds\n maxEventsPerRequest?: number; // Maximum events to send in a single API request\n debug?: boolean;\n // Remote Config options\n defaultConfigurations?: Record<string, string>; // Default values for configurations\n configCacheKey?: string; // Custom cache key for configurations\n configRefreshInterval?: number; // Auto-refresh interval in milliseconds (default: 5 minutes)\n enableConfigCache?: boolean; // Enable/disable configuration caching (default: true)\n}\n\nexport interface SendEventOptions {\n flush?: boolean; // Force immediate send\n}\n\nexport interface SetPropertyOptions {\n userId?: string; // Override global userId\n}\n\nexport interface PropertyPayload {\n userId: string;\n [key: string]: string; // All property values must be strings\n}\n\n// Remote Config interfaces\nexport interface RemoteConfigRequest {\n userId: string;\n immediateKeys: string[];\n properties?: Record<string, string>;\n}\n\nexport interface RemoteConfigResponse {\n userId: string;\n snapshotId: string;\n configurations: Record<string, string>;\n isFinal: boolean;\n qualifiedSegments: string[];\n qualifiedRuleSets: string[];\n timestamp: string;\n isFromCache: boolean;\n}\n\nexport interface RemoteConfigOptions {\n immediateKeys?: string[];\n properties?: Record<string, string>;\n userId?: string; // Override global userId\n forceRefresh?: boolean; // Force fetch from API, bypass cache\n}\n\nexport interface RemoteConfigCache {\n configurations: Record<string, string>;\n snapshotId: string;\n timestamp: string;\n userId: string;\n}\n\nexport type ConfigChangeListener = (configurations: Record<string, string>) => void;\n\n// Template event interfaces\nexport interface LoginEventProperties extends Record<string, unknown> {\n method?: string; // 'email', 'google', 'facebook', etc.\n success?: boolean;\n errorMessage?: string;\n loginAttempt?: number;\n rememberMe?: boolean;\n twoFactorEnabled?: boolean;\n}\n\nexport interface SignupEventProperties extends Record<string, unknown> {\n method?: string; // 'email', 'google', 'facebook', etc.\n source?: string; // 'landing_page', 'referral', 'ad', etc.\n plan?: string; // 'free', 'pro', 'enterprise', etc.\n success?: boolean;\n errorMessage?: string;\n}\n\nexport interface CheckoutEventProperties extends Record<string, unknown> {\n orderId?: string;\n total?: number;\n currency?: string;\n items?: Array<{\n id: string;\n name: string;\n price: number;\n quantity: number;\n }>;\n paymentMethod?: string; // 'credit_card', 'paypal', 'stripe', etc.\n success?: boolean;\n errorMessage?: string;\n couponCode?: string;\n discount?: number;\n}\n\nexport interface PageViewEventProperties extends Record<string, unknown> {\n page?: string;\n title?: string;\n referrer?: string;\n url?: string;\n userAgent?: string;\n screenResolution?: string;\n viewportSize?: string;\n}\n\nexport interface PurchaseEventProperties extends Record<string, unknown> {\n orderId?: string;\n total?: number;\n currency?: string;\n items?: Array<{\n id: string;\n name: string;\n price: number;\n quantity: number;\n category?: string;\n }>;\n paymentMethod?: string;\n shippingMethod?: string;\n tax?: number;\n shipping?: number;\n discount?: number;\n couponCode?: string;\n}\n\nexport interface SearchEventProperties extends Record<string, unknown> {\n query?: string;\n results?: number;\n filters?: Record<string, unknown>;\n sortBy?: string;\n category?: string;\n success?: boolean;\n}\n\nexport interface AddToCartEventProperties extends Record<string, unknown> {\n itemId?: string;\n itemName?: string;\n price?: number;\n quantity?: number;\n currency?: string;\n category?: string;\n variant?: string;\n}\n\nexport interface RemoveFromCartEventProperties extends Record<string, unknown> {\n itemId?: string;\n itemName?: string;\n price?: number;\n quantity?: number;\n currency?: string;\n category?: string;\n variant?: string;\n}\n\n// Error handling interfaces\nexport interface ErrorDigest {\n eventCount: number;\n totalProperties: number;\n totalSize: number;\n eventNames: string[];\n userIds: string[];\n}\n\nexport interface FormattedError {\n code: string;\n message: string;\n digest: ErrorDigest;\n timestamp: string;\n context: string;\n originalError?: unknown;\n}\n\n/**\n * Main Grain Analytics client\n */\ntype RequiredConfig = Required<Omit<GrainConfig, 'secretKey' | 'authProvider' | 'userId'>> & {\n secretKey?: string;\n authProvider?: AuthProvider;\n userId?: string;\n};\n\nexport class GrainAnalytics {\n private config: RequiredConfig;\n private eventQueue: EventPayload[] = [];\n private flushTimer: number | null = null;\n private isDestroyed = false;\n private globalUserId: string | null = null;\n private persistentAnonymousUserId: string | null = null;\n // Remote Config properties\n private configCache: RemoteConfigCache | null = null;\n private configRefreshTimer: number | null = null;\n private configChangeListeners: ConfigChangeListener[] = [];\n private configFetchPromise: Promise<RemoteConfigResponse> | null = null;\n\n constructor(config: GrainConfig) {\n this.config = {\n apiUrl: 'https://api.grainql.com',\n authStrategy: 'NONE',\n batchSize: 50,\n flushInterval: 5000, // 5 seconds\n retryAttempts: 3,\n retryDelay: 1000, // 1 second\n maxEventsPerRequest: 160, // Maximum events per API request\n debug: false,\n // Remote Config defaults\n defaultConfigurations: {},\n configCacheKey: 'grain_config',\n configRefreshInterval: 300000, // 5 minutes\n enableConfigCache: true,\n ...config,\n tenantId: config.tenantId,\n };\n\n // Set global userId if provided in config\n if (config.userId) {\n this.globalUserId = config.userId;\n }\n\n this.validateConfig();\n this.initializePersistentAnonymousUserId();\n this.setupBeforeUnload();\n this.startFlushTimer();\n this.initializeConfigCache();\n }\n\n private validateConfig(): void {\n if (!this.config.tenantId) {\n throw new Error('Grain Analytics: tenantId is required');\n }\n\n if (this.config.authStrategy === 'SERVER_SIDE' && !this.config.secretKey) {\n throw new Error('Grain Analytics: secretKey is required for SERVER_SIDE auth strategy');\n }\n\n if (this.config.authStrategy === 'JWT' && !this.config.authProvider) {\n throw new Error('Grain Analytics: authProvider is required for JWT auth strategy');\n }\n }\n\n /**\n * Generate a UUID v4 string\n */\n private generateUUID(): string {\n if (typeof crypto !== 'undefined' && crypto.randomUUID) {\n return crypto.randomUUID();\n }\n \n // Fallback for environments without crypto.randomUUID\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n const r = Math.random() * 16 | 0;\n const v = c === 'x' ? r : (r & 0x3 | 0x8);\n return v.toString(16);\n });\n }\n\n /**\n * Format UUID for anonymous user ID (remove dashes and prefix with 'temp:')\n */\n private formatAnonymousUserId(uuid: string): string {\n return `temp:${uuid.replace(/-/g, '')}`;\n }\n\n /**\n * Initialize persistent anonymous user ID from localStorage or create new one\n */\n private initializePersistentAnonymousUserId(): void {\n if (typeof window === 'undefined') return;\n\n const storageKey = `grain_anonymous_user_id_${this.config.tenantId}`;\n \n try {\n const stored = localStorage.getItem(storageKey);\n if (stored) {\n this.persistentAnonymousUserId = stored;\n this.log('Loaded persistent anonymous user ID:', this.persistentAnonymousUserId);\n } else {\n // Generate new anonymous user ID\n const uuid = this.generateUUID();\n this.persistentAnonymousUserId = this.formatAnonymousUserId(uuid);\n localStorage.setItem(storageKey, this.persistentAnonymousUserId);\n this.log('Generated new persistent anonymous user ID:', this.persistentAnonymousUserId);\n }\n } catch (error) {\n this.log('Failed to initialize persistent anonymous user ID:', error);\n // Fallback: generate temporary ID without persistence\n const uuid = this.generateUUID();\n this.persistentAnonymousUserId = this.formatAnonymousUserId(uuid);\n }\n }\n\n /**\n * Get the effective user ID (global userId or persistent anonymous ID)\n */\n private getEffectiveUserId(): string {\n return this.globalUserId || this.persistentAnonymousUserId || 'anonymous';\n }\n\n private log(...args: unknown[]): void {\n if (this.config.debug) {\n console.log('[Grain Analytics]', ...args);\n }\n }\n\n /**\n * Create error digest from events\n */\n private createErrorDigest(events: EventPayload[]): ErrorDigest {\n const eventNames = [...new Set(events.map(e => e.eventName))];\n const userIds = [...new Set(events.map(e => e.userId))];\n \n let totalProperties = 0;\n let totalSize = 0;\n \n events.forEach(event => {\n const properties = event.properties || {};\n totalProperties += Object.keys(properties).length;\n totalSize += JSON.stringify(event).length;\n });\n\n return {\n eventCount: events.length,\n totalProperties,\n totalSize,\n eventNames,\n userIds,\n };\n }\n\n /**\n * Format error with beautiful structure\n */\n private formatError(\n error: unknown,\n context: string,\n events?: EventPayload[]\n ): FormattedError {\n const digest = events ? this.createErrorDigest(events) : {\n eventCount: 0,\n totalProperties: 0,\n totalSize: 0,\n eventNames: [],\n userIds: [],\n };\n\n let code = 'UNKNOWN_ERROR';\n let message = 'An unknown error occurred';\n\n if (error instanceof Error) {\n message = error.message;\n \n // Determine error code based on error type and message\n if (message.includes('fetch failed') || message.includes('network error')) {\n code = 'NETWORK_ERROR';\n } else if (message.includes('timeout')) {\n code = 'TIMEOUT_ERROR';\n } else if (message.includes('HTTP 4')) {\n code = 'CLIENT_ERROR';\n } else if (message.includes('HTTP 5')) {\n code = 'SERVER_ERROR';\n } else if (message.includes('JSON')) {\n code = 'PARSE_ERROR';\n } else if (message.includes('auth') || message.includes('unauthorized')) {\n code = 'AUTH_ERROR';\n } else if (message.includes('rate limit') || message.includes('429')) {\n code = 'RATE_LIMIT_ERROR';\n } else {\n code = 'GENERAL_ERROR';\n }\n } else if (typeof error === 'string') {\n message = error;\n code = 'STRING_ERROR';\n } else if (error && typeof error === 'object' && 'status' in error) {\n const status = (error as { status: number }).status;\n code = `HTTP_${status}`;\n message = `HTTP ${status} error`;\n }\n\n return {\n code,\n message,\n digest,\n timestamp: new Date().toISOString(),\n context,\n originalError: error,\n };\n }\n\n /**\n * Log formatted error gracefully\n */\n private logError(formattedError: FormattedError): void {\n const { code, message, digest, timestamp, context } = formattedError;\n \n const errorOutput = {\n '\uD83D\uDEA8 Grain Analytics Error': {\n 'Error Code': code,\n 'Message': message,\n 'Context': context,\n 'Timestamp': timestamp,\n 'Event Digest': {\n 'Events': digest.eventCount,\n 'Properties': digest.totalProperties,\n 'Size (bytes)': digest.totalSize,\n 'Event Names': digest.eventNames.length > 0 ? digest.eventNames.join(', ') : 'None',\n 'User IDs': digest.userIds.length > 0 ? digest.userIds.slice(0, 3).join(', ') + (digest.userIds.length > 3 ? '...' : '') : 'None',\n }\n }\n };\n\n console.error('\uD83D\uDEA8 Grain Analytics Error:', errorOutput);\n \n // Also log in a more compact format for debugging\n if (this.config.debug) {\n console.error(`[Grain Analytics] ${code}: ${message} (${context}) - Events: ${digest.eventCount}, Props: ${digest.totalProperties}, Size: ${digest.totalSize}B`);\n }\n }\n\n /**\n * Safely execute a function with error handling\n */\n private async safeExecute<T>(\n fn: () => Promise<T>,\n context: string,\n events?: EventPayload[]\n ): Promise<T | null> {\n try {\n return await fn();\n } catch (error) {\n const formattedError = this.formatError(error, context, events);\n this.logError(formattedError);\n return null;\n }\n }\n\n private formatEvent(event: GrainEvent): EventPayload {\n return {\n eventName: event.eventName,\n userId: event.userId || this.getEffectiveUserId(),\n properties: event.properties || {},\n };\n }\n\n private async getAuthHeaders(): Promise<Record<string, string>> {\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n };\n\n switch (this.config.authStrategy) {\n case 'NONE':\n break;\n case 'SERVER_SIDE':\n headers['Authorization'] = `Chase ${this.config.secretKey}`;\n break;\n case 'JWT':\n if (this.config.authProvider) {\n const token = await this.config.authProvider.getToken();\n headers['Authorization'] = `Bearer ${token}`;\n }\n break;\n }\n\n return headers;\n }\n\n private async delay(ms: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, ms));\n }\n\n private isRetriableError(error: unknown): boolean {\n if (error instanceof Error) {\n // Check for specific network or fetch errors\n const message = error.message.toLowerCase();\n if (message.includes('fetch failed')) return true;\n if (message === 'network error') return true; // Exact match to avoid \"Non-network error\"\n if (message.includes('timeout')) return true;\n if (message.includes('connection')) return true;\n }\n \n // Check for HTTP status codes that are retriable\n if (typeof error === 'object' && error !== null && 'status' in error) {\n const status = (error as { status: number }).status;\n return status >= 500 || status === 429; // Server errors or rate limiting\n }\n \n return false;\n }\n\n private async sendEvents(events: EventPayload[]): Promise<void> {\n if (events.length === 0) return;\n\n let lastError: unknown;\n\n for (let attempt = 0; attempt <= this.config.retryAttempts; attempt++) {\n try {\n const headers = await this.getAuthHeaders();\n const url = `${this.config.apiUrl}/v1/events/${encodeURIComponent(this.config.tenantId)}/multi`;\n\n this.log(`Sending ${events.length} events to ${url} (attempt ${attempt + 1})`);\n\n const response = await fetch(url, {\n method: 'POST',\n headers,\n body: JSON.stringify({ events }),\n });\n\n if (!response.ok) {\n let errorMessage = `HTTP ${response.status}`;\n try {\n const errorBody = await response.json();\n if (errorBody?.message) {\n errorMessage = errorBody.message;\n }\n } catch {\n const errorText = await response.text();\n if (errorText) {\n errorMessage = errorText;\n }\n }\n \n const error = new Error(`Failed to send events: ${errorMessage}`) as Error & { status?: number };\n error.status = response.status;\n throw error;\n }\n\n this.log(`Successfully sent ${events.length} events`);\n return; // Success, exit retry loop\n \n } catch (error) {\n lastError = error;\n \n if (attempt === this.config.retryAttempts) {\n // Last attempt, don't retry - log error gracefully\n const formattedError = this.formatError(error, `sendEvents (attempt ${attempt + 1}/${this.config.retryAttempts + 1})`, events);\n this.logError(formattedError);\n return; // Don't throw, just return gracefully\n }\n \n if (!this.isRetriableError(error)) {\n // Non-retriable error, don't retry - log error gracefully\n const formattedError = this.formatError(error, `sendEvents (non-retriable error)`, events);\n this.logError(formattedError);\n return; // Don't throw, just return gracefully\n }\n \n const delayMs = this.config.retryDelay * Math.pow(2, attempt); // Exponential backoff\n this.log(`Retrying in ${delayMs}ms after error:`, error);\n await this.delay(delayMs);\n }\n }\n }\n\n private async sendEventsWithBeacon(events: EventPayload[]): Promise<void> {\n if (events.length === 0) return;\n\n try {\n const headers = await this.getAuthHeaders();\n const url = `${this.config.apiUrl}/v1/events/${encodeURIComponent(this.config.tenantId)}/multi`;\n\n const body = JSON.stringify({ events });\n\n // Try beacon API first (more reliable for page unload)\n if (typeof navigator !== 'undefined' && 'sendBeacon' in navigator) {\n const blob = new Blob([body], { type: 'application/json' });\n const success = navigator.sendBeacon(url, blob);\n \n if (success) {\n this.log(`Successfully sent ${events.length} events via beacon`);\n return;\n }\n }\n\n // Fallback to fetch with keepalive\n await fetch(url, {\n method: 'POST',\n headers,\n body,\n keepalive: true,\n });\n\n this.log(`Successfully sent ${events.length} events via fetch (keepalive)`);\n } catch (error) {\n // Log error gracefully for beacon failures (page unload scenarios)\n const formattedError = this.formatError(error, 'sendEventsWithBeacon', events);\n this.logError(formattedError);\n }\n }\n\n private startFlushTimer(): void {\n if (this.flushTimer) {\n clearInterval(this.flushTimer);\n }\n\n this.flushTimer = window.setInterval(() => {\n if (this.eventQueue.length > 0) {\n this.flush().catch((error) => {\n const formattedError = this.formatError(error, 'auto-flush');\n this.logError(formattedError);\n });\n }\n }, this.config.flushInterval);\n }\n\n private setupBeforeUnload(): void {\n if (typeof window === 'undefined') return;\n\n const handleBeforeUnload = () => {\n if (this.eventQueue.length > 0) {\n // Use beacon API for reliable delivery during page unload\n const eventsToSend = [...this.eventQueue];\n this.eventQueue = [];\n \n const chunks = this.chunkEvents(eventsToSend, this.config.maxEventsPerRequest);\n \n // Send first chunk with beacon (most important for page unload)\n if (chunks.length > 0) {\n this.sendEventsWithBeacon(chunks[0]).catch(() => {\n // Silently fail - page is unloading\n });\n }\n }\n };\n\n // Handle page unload\n window.addEventListener('beforeunload', handleBeforeUnload);\n window.addEventListener('pagehide', handleBeforeUnload);\n \n // Handle visibility change (page hidden)\n document.addEventListener('visibilitychange', () => {\n if (document.visibilityState === 'hidden' && this.eventQueue.length > 0) {\n const eventsToSend = [...this.eventQueue];\n this.eventQueue = [];\n \n const chunks = this.chunkEvents(eventsToSend, this.config.maxEventsPerRequest);\n \n // Send first chunk with beacon (most important for page hidden)\n if (chunks.length > 0) {\n this.sendEventsWithBeacon(chunks[0]).catch(() => {\n // Silently fail\n });\n }\n }\n });\n }\n\n /**\n * Track an analytics event\n */\n async track(eventName: string, properties?: Record<string, unknown>, options?: SendEventOptions): Promise<void>;\n async track(event: GrainEvent, options?: SendEventOptions): Promise<void>;\n async track(\n eventOrName: string | GrainEvent,\n propertiesOrOptions?: Record<string, unknown> | SendEventOptions,\n options?: SendEventOptions\n ): Promise<void> {\n try {\n if (this.isDestroyed) {\n const error = new Error('Grain Analytics: Client has been destroyed');\n const formattedError = this.formatError(error, 'track (client destroyed)');\n this.logError(formattedError);\n return;\n }\n\n let event: GrainEvent;\n let opts: SendEventOptions = {};\n\n if (typeof eventOrName === 'string') {\n event = {\n eventName: eventOrName,\n properties: propertiesOrOptions as Record<string, unknown>,\n };\n opts = options || {};\n } else {\n event = eventOrName;\n opts = propertiesOrOptions as SendEventOptions || {};\n }\n\n const formattedEvent = this.formatEvent(event);\n this.eventQueue.push(formattedEvent);\n\n this.log(`Queued event: ${event.eventName}`, event.properties);\n\n // Check if we should flush immediately\n if (opts.flush || this.eventQueue.length >= this.config.batchSize) {\n await this.flush();\n }\n } catch (error) {\n const formattedError = this.formatError(error, 'track');\n this.logError(formattedError);\n }\n }\n\n /**\n * Identify a user (sets userId for subsequent events)\n */\n identify(userId: string): void {\n this.log(`Identified user: ${userId}`);\n this.globalUserId = userId;\n // Clear persistent anonymous user ID since we now have a real user ID\n this.persistentAnonymousUserId = null;\n }\n\n /**\n * Set global user ID for all subsequent events\n */\n setUserId(userId: string | null): void {\n this.log(`Set global user ID: ${userId}`);\n this.globalUserId = userId;\n // Clear persistent anonymous user ID if setting a real user ID\n if (userId) {\n this.persistentAnonymousUserId = null;\n }\n }\n\n /**\n * Get current global user ID\n */\n getUserId(): string | null {\n return this.globalUserId;\n }\n\n /**\n * Get current effective user ID (global userId or persistent anonymous ID)\n */\n getEffectiveUserIdPublic(): string {\n return this.getEffectiveUserId();\n }\n\n /**\n * Set user properties\n */\n async setProperty(properties: Record<string, unknown>, options?: SetPropertyOptions): Promise<void> {\n try {\n if (this.isDestroyed) {\n const error = new Error('Grain Analytics: Client has been destroyed');\n const formattedError = this.formatError(error, 'setProperty (client destroyed)');\n this.logError(formattedError);\n return;\n }\n\n const userId = options?.userId || this.getEffectiveUserId();\n \n // Validate property count (max 4 properties)\n const propertyKeys = Object.keys(properties);\n if (propertyKeys.length > 4) {\n const error = new Error('Grain Analytics: Maximum 4 properties allowed per request');\n const formattedError = this.formatError(error, 'setProperty (validation)');\n this.logError(formattedError);\n return;\n }\n\n if (propertyKeys.length === 0) {\n const error = new Error('Grain Analytics: At least one property is required');\n const formattedError = this.formatError(error, 'setProperty (validation)');\n this.logError(formattedError);\n return;\n }\n\n // Serialize all values to strings\n const serializedProperties: Record<string, string> = {};\n for (const [key, value] of Object.entries(properties)) {\n if (value === null || value === undefined) {\n serializedProperties[key] = '';\n } else if (typeof value === 'string') {\n serializedProperties[key] = value;\n } else {\n serializedProperties[key] = JSON.stringify(value);\n }\n }\n\n const payload: PropertyPayload = {\n userId,\n ...serializedProperties,\n };\n\n await this.sendProperties(payload);\n } catch (error) {\n const formattedError = this.formatError(error, 'setProperty');\n this.logError(formattedError);\n }\n }\n\n /**\n * Send properties to the API\n */\n private async sendProperties(payload: PropertyPayload): Promise<void> {\n let lastError: unknown;\n\n for (let attempt = 0; attempt <= this.config.retryAttempts; attempt++) {\n try {\n const headers = await this.getAuthHeaders();\n const url = `${this.config.apiUrl}/v1/events/${encodeURIComponent(this.config.tenantId)}/properties`;\n\n this.log(`Setting properties for user ${payload.userId} (attempt ${attempt + 1})`);\n\n const response = await fetch(url, {\n method: 'POST',\n headers,\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n let errorMessage = `HTTP ${response.status}`;\n try {\n const errorBody = await response.json();\n if (errorBody?.message) {\n errorMessage = errorBody.message;\n }\n } catch {\n const errorText = await response.text();\n if (errorText) {\n errorMessage = errorText;\n }\n }\n \n const error = new Error(`Failed to set properties: ${errorMessage}`) as Error & { status?: number };\n error.status = response.status;\n throw error;\n }\n\n this.log(`Successfully set properties for user ${payload.userId}`);\n return; // Success, exit retry loop\n \n } catch (error) {\n lastError = error;\n \n if (attempt === this.config.retryAttempts) {\n // Last attempt, don't retry - log error gracefully\n const formattedError = this.formatError(error, `sendProperties (attempt ${attempt + 1}/${this.config.retryAttempts + 1})`);\n this.logError(formattedError);\n return; // Don't throw, just return gracefully\n }\n \n if (!this.isRetriableError(error)) {\n // Non-retriable error, don't retry - log error gracefully\n const formattedError = this.formatError(error, 'sendProperties (non-retriable error)');\n this.logError(formattedError);\n return; // Don't throw, just return gracefully\n }\n \n const delayMs = this.config.retryDelay * Math.pow(2, attempt); // Exponential backoff\n this.log(`Retrying in ${delayMs}ms after error:`, error);\n await this.delay(delayMs);\n }\n }\n }\n\n // Template event methods\n\n /**\n * Track user login event\n */\n async trackLogin(properties?: LoginEventProperties, options?: SendEventOptions): Promise<void> {\n try {\n return await this.track('login', properties, options);\n } catch (error) {\n const formattedError = this.formatError(error, 'trackLogin');\n this.logError(formattedError);\n }\n }\n\n /**\n * Track user signup event\n */\n async trackSignup(properties?: SignupEventProperties, options?: SendEventOptions): Promise<void> {\n try {\n return await this.track('signup', properties, options);\n } catch (error) {\n const formattedError = this.formatError(error, 'trackSignup');\n this.logError(formattedError);\n }\n }\n\n /**\n * Track checkout event\n */\n async trackCheckout(properties?: CheckoutEventProperties, options?: SendEventOptions): Promise<void> {\n try {\n return await this.track('checkout', properties, options);\n } catch (error) {\n const formattedError = this.formatError(error, 'trackCheckout');\n this.logError(formattedError);\n }\n }\n\n /**\n * Track page view event\n */\n async trackPageView(properties?: PageViewEventProperties, options?: SendEventOptions): Promise<void> {\n try {\n return await this.track('page_view', properties, options);\n } catch (error) {\n const formattedError = this.formatError(error, 'trackPageView');\n this.logError(formattedError);\n }\n }\n\n /**\n * Track purchase event\n */\n async trackPurchase(properties?: PurchaseEventProperties, options?: SendEventOptions): Promise<void> {\n try {\n return await this.track('purchase', properties, options);\n } catch (error) {\n const formattedError = this.formatError(error, 'trackPurchase');\n this.logError(formattedError);\n }\n }\n\n /**\n * Track search event\n */\n async trackSearch(properties?: SearchEventProperties, options?: SendEventOptions): Promise<void> {\n try {\n return await this.track('search', properties, options);\n } catch (error) {\n const formattedError = this.formatError(error, 'trackSearch');\n this.logError(formattedError);\n }\n }\n\n /**\n * Track add to cart event\n */\n async trackAddToCart(properties?: AddToCartEventProperties, options?: SendEventOptions): Promise<void> {\n try {\n return await this.track('add_to_cart', properties, options);\n } catch (error) {\n const formattedError = this.formatError(error, 'trackAddToCart');\n this.logError(formattedError);\n }\n }\n\n /**\n * Track remove from cart event\n */\n async trackRemoveFromCart(properties?: RemoveFromCartEventProperties, options?: SendEventOptions): Promise<void> {\n try {\n return await this.track('remove_from_cart', properties, options);\n } catch (error) {\n const formattedError = this.formatError(error, 'trackRemoveFromCart');\n this.logError(formattedError);\n }\n }\n\n /**\n * Manually flush all queued events\n */\n async flush(): Promise<void> {\n try {\n if (this.eventQueue.length === 0) return;\n\n const eventsToSend = [...this.eventQueue];\n this.eventQueue = [];\n\n // Split events into chunks to respect maxEventsPerRequest limit\n const chunks = this.chunkEvents(eventsToSend, this.config.maxEventsPerRequest);\n \n // Send all chunks sequentially to maintain order\n for (const chunk of chunks) {\n await this.sendEvents(chunk);\n }\n } catch (error) {\n const formattedError = this.formatError(error, 'flush');\n this.logError(formattedError);\n }\n }\n\n // Remote Config Methods\n\n /**\n * Initialize configuration cache from localStorage\n */\n private initializeConfigCache(): void {\n if (!this.config.enableConfigCache || typeof window === 'undefined') return;\n\n try {\n const cached = localStorage.getItem(this.config.configCacheKey);\n if (cached) {\n this.configCache = JSON.parse(cached);\n this.log('Loaded configuration from cache:', this.configCache);\n }\n } catch (error) {\n this.log('Failed to load configuration cache:', error);\n }\n }\n\n /**\n * Save configuration cache to localStorage\n */\n private saveConfigCache(cache: RemoteConfigCache): void {\n if (!this.config.enableConfigCache || typeof window === 'undefined') return;\n\n try {\n localStorage.setItem(this.config.configCacheKey, JSON.stringify(cache));\n this.log('Saved configuration to cache:', cache);\n } catch (error) {\n this.log('Failed to save configuration cache:', error);\n }\n }\n\n /**\n * Get configuration value with fallback to defaults\n */\n getConfig(key: string): string | undefined {\n // First check cache\n if (this.configCache?.configurations?.[key]) {\n return this.configCache.configurations[key];\n }\n\n // Then check defaults\n if (this.config.defaultConfigurations?.[key]) {\n return this.config.defaultConfigurations[key];\n }\n\n return undefined;\n }\n\n /**\n * Get all configurations with fallback to defaults\n */\n getAllConfigs(): Record<string, string> {\n const configs = { ...this.config.defaultConfigurations };\n \n if (this.configCache?.configurations) {\n Object.assign(configs, this.configCache.configurations);\n }\n\n return configs;\n }\n\n /**\n * Fetch configurations from API\n */\n async fetchConfig(options: RemoteConfigOptions = {}): Promise<RemoteConfigResponse | null> {\n try {\n if (this.isDestroyed) {\n const error = new Error('Grain Analytics: Client has been destroyed');\n const formattedError = this.formatError(error, 'fetchConfig (client destroyed)');\n this.logError(formattedError);\n return null;\n }\n\n const userId = options.userId || this.getEffectiveUserId();\n const immediateKeys = options.immediateKeys || [];\n const properties = options.properties || {};\n\n const request: RemoteConfigRequest = {\n userId,\n immediateKeys,\n properties,\n };\n\n let lastError: unknown;\n\n for (let attempt = 0; attempt <= this.config.retryAttempts; attempt++) {\n try {\n const headers = await this.getAuthHeaders();\n const url = `${this.config.apiUrl}/v1/client/${encodeURIComponent(this.config.tenantId)}/config/configurations`;\n\n this.log(`Fetching configurations for user ${userId} (attempt ${attempt + 1})`);\n\n const response = await fetch(url, {\n method: 'POST',\n headers,\n body: JSON.stringify(request),\n });\n\n if (!response.ok) {\n let errorMessage = `HTTP ${response.status}`;\n try {\n const errorBody = await response.json();\n if (errorBody?.message) {\n errorMessage = errorBody.message;\n }\n } catch {\n const errorText = await response.text();\n if (errorText) {\n errorMessage = errorText;\n }\n }\n \n const error = new Error(`Failed to fetch configurations: ${errorMessage}`) as Error & { status?: number };\n error.status = response.status;\n throw error;\n }\n\n const configResponse: RemoteConfigResponse = await response.json();\n \n // Update cache if successful\n if (configResponse.configurations) {\n this.updateConfigCache(configResponse, userId);\n }\n\n this.log(`Successfully fetched configurations for user ${userId}:`, configResponse);\n return configResponse;\n \n } catch (error) {\n lastError = error;\n \n if (attempt === this.config.retryAttempts) {\n // Last attempt, don't retry - log error gracefully\n const formattedError = this.formatError(error, `fetchConfig (attempt ${attempt + 1}/${this.config.retryAttempts + 1})`);\n this.logError(formattedError);\n return null;\n }\n \n if (!this.isRetriableError(error)) {\n // Non-retriable error, don't retry - log error gracefully\n const formattedError = this.formatError(error, 'fetchConfig (non-retriable error)');\n this.logError(formattedError);\n return null;\n }\n \n const delayMs = this.config.retryDelay * Math.pow(2, attempt);\n this.log(`Retrying config fetch in ${delayMs}ms after error:`, error);\n await this.delay(delayMs);\n }\n }\n\n return null;\n } catch (error) {\n const formattedError = this.formatError(error, 'fetchConfig');\n this.logError(formattedError);\n return null;\n }\n }\n\n /**\n * Get configuration asynchronously (cache-first with fallback to API)\n */\n async getConfigAsync(key: string, options: RemoteConfigOptions = {}): Promise<string | undefined> {\n try {\n // Return immediately if we have it in cache and not forcing refresh\n if (!options.forceRefresh && this.configCache?.configurations?.[key]) {\n return this.configCache.configurations[key];\n }\n\n // Return default if available and not forcing refresh\n if (!options.forceRefresh && this.config.defaultConfigurations?.[key]) {\n return this.config.defaultConfigurations[key];\n }\n\n // Fetch from API\n const response = await this.fetchConfig(options);\n if (response) {\n return response.configurations[key];\n }\n \n // Return default as fallback\n return this.config.defaultConfigurations?.[key];\n } catch (error) {\n const formattedError = this.formatError(error, 'getConfigAsync');\n this.logError(formattedError);\n // Return default as fallback\n return this.config.defaultConfigurations?.[key];\n }\n }\n\n /**\n * Get all configurations asynchronously (cache-first with fallback to API)\n */\n async getAllConfigsAsync(options: RemoteConfigOptions = {}): Promise<Record<string, string>> {\n try {\n // Return cache if available and not forcing refresh\n if (!options.forceRefresh && this.configCache?.configurations) {\n return { ...this.config.defaultConfigurations, ...this.configCache.configurations };\n }\n\n // Fetch from API\n const response = await this.fetchConfig(options);\n if (response) {\n return { ...this.config.defaultConfigurations, ...response.configurations };\n }\n \n // Return defaults as fallback\n return { ...this.config.defaultConfigurations };\n } catch (error) {\n const formattedError = this.formatError(error, 'getAllConfigsAsync');\n this.logError(formattedError);\n // Return defaults as fallback\n return { ...this.config.defaultConfigurations };\n }\n }\n\n /**\n * Update configuration cache and notify listeners\n */\n private updateConfigCache(response: RemoteConfigResponse, userId: string): void {\n const newCache: RemoteConfigCache = {\n configurations: response.configurations,\n snapshotId: response.snapshotId,\n timestamp: response.timestamp,\n userId,\n };\n\n const oldConfigs = this.configCache?.configurations || {};\n this.configCache = newCache;\n this.saveConfigCache(newCache);\n\n // Notify listeners if configurations changed\n if (JSON.stringify(oldConfigs) !== JSON.stringify(response.configurations)) {\n this.notifyConfigChangeListeners(response.configurations);\n }\n }\n\n /**\n * Add configuration change listener\n */\n addConfigChangeListener(listener: ConfigChangeListener): void {\n this.configChangeListeners.push(listener);\n }\n\n /**\n * Remove configuration change listener\n */\n removeConfigChangeListener(listener: ConfigChangeListener): void {\n const index = this.configChangeListeners.indexOf(listener);\n if (index > -1) {\n this.configChangeListeners.splice(index, 1);\n }\n }\n\n /**\n * Notify all configuration change listeners\n */\n private notifyConfigChangeListeners(configurations: Record<string, string>): void {\n this.configChangeListeners.forEach(listener => {\n try {\n listener(configurations);\n } catch (error) {\n console.error('[Grain Analytics] Config change listener error:', error);\n }\n });\n }\n\n /**\n * Start automatic configuration refresh timer\n */\n private startConfigRefreshTimer(): void {\n if (this.configRefreshTimer) {\n clearInterval(this.configRefreshTimer);\n }\n\n this.configRefreshTimer = window.setInterval(() => {\n if (!this.isDestroyed && this.globalUserId) {\n this.fetchConfig().catch((error) => {\n const formattedError = this.formatError(error, 'auto-config refresh');\n this.logError(formattedError);\n });\n }\n }, this.config.configRefreshInterval);\n }\n\n /**\n * Stop automatic configuration refresh timer\n */\n private stopConfigRefreshTimer(): void {\n if (this.configRefreshTimer) {\n clearInterval(this.configRefreshTimer);\n this.configRefreshTimer = null;\n }\n }\n\n /**\n * Preload configurations for immediate access\n */\n async preloadConfig(immediateKeys: string[] = [], properties?: Record<string, string>): Promise<void> {\n try {\n if (!this.globalUserId) {\n this.log('Cannot preload config: no user ID set');\n return;\n }\n\n const response = await this.fetchConfig({ immediateKeys, properties });\n if (response) {\n this.startConfigRefreshTimer();\n }\n } catch (error) {\n const formattedError = this.formatError(error, 'preloadConfig');\n this.logError(formattedError);\n }\n }\n\n /**\n * Split events array into chunks of specified size\n */\n private chunkEvents(events: EventPayload[], chunkSize: number): EventPayload[][] {\n const chunks: EventPayload[][] = [];\n for (let i = 0; i < events.length; i += chunkSize) {\n chunks.push(events.slice(i, i + chunkSize));\n }\n return chunks;\n }\n\n /**\n * Destroy the client and clean up resources\n */\n destroy(): void {\n this.isDestroyed = true;\n \n if (this.flushTimer) {\n clearInterval(this.flushTimer);\n this.flushTimer = null;\n }\n\n // Stop config refresh timer\n this.stopConfigRefreshTimer();\n\n // Clear config change listeners\n this.configChangeListeners = [];\n\n // Send any remaining events (in chunks if necessary)\n if (this.eventQueue.length > 0) {\n const eventsToSend = [...this.eventQueue];\n this.eventQueue = [];\n \n const chunks = this.chunkEvents(eventsToSend, this.config.maxEventsPerRequest);\n \n // Send first chunk with beacon (most important for page unload)\n if (chunks.length > 0) {\n this.sendEventsWithBeacon(chunks[0]).catch(() => {\n // Silently fail during cleanup\n });\n \n // If there are more chunks, try to send them with regular fetch\n for (let i = 1; i < chunks.length; i++) {\n this.sendEventsWithBeacon(chunks[i]).catch(() => {\n // Silently fail during cleanup\n });\n }\n }\n }\n }\n}\n\n/**\n * Create a new Grain Analytics client\n */\nexport function createGrainAnalytics(config: GrainConfig): GrainAnalytics {\n return new GrainAnalytics(config);\n}\n\n// Default export for convenience\nexport default GrainAnalytics;\n\n// Global interface for IIFE build\ndeclare global {\n interface Window {\n Grain?: {\n GrainAnalytics: typeof GrainAnalytics;\n createGrainAnalytics: typeof createGrainAnalytics;\n };\n }\n}\n\n// Auto-setup for IIFE build\nif (typeof window !== 'undefined') {\n window.Grain = {\n GrainAnalytics,\n createGrainAnalytics,\n };\n}"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/**\n * Grain Analytics Web SDK\n * A lightweight, dependency-free TypeScript SDK for sending analytics events to Grain's REST API\n */\n\nexport interface GrainEvent {\n eventName: string;\n userId?: string;\n properties?: Record<string, unknown>;\n timestamp?: Date;\n}\n\nexport interface EventPayload {\n eventName: string;\n userId: string;\n properties: Record<string, unknown>;\n}\n\nexport type AuthStrategy = 'NONE' | 'SERVER_SIDE' | 'JWT';\n\nexport interface AuthProvider {\n getToken(): Promise<string> | string;\n}\n\nexport interface GrainConfig {\n tenantId: string;\n apiUrl?: string;\n authStrategy?: AuthStrategy;\n secretKey?: string; // For SERVER_SIDE auth\n authProvider?: AuthProvider; // For JWT auth\n userId?: string; // Global user ID for all events\n batchSize?: number;\n flushInterval?: number; // milliseconds\n retryAttempts?: number;\n retryDelay?: number; // milliseconds\n maxEventsPerRequest?: number; // Maximum events to send in a single API request\n debug?: boolean;\n // Remote Config options\n defaultConfigurations?: Record<string, string>; // Default values for configurations\n configCacheKey?: string; // Custom cache key for configurations\n configRefreshInterval?: number; // Auto-refresh interval in milliseconds (default: 5 minutes)\n enableConfigCache?: boolean; // Enable/disable configuration caching (default: true)\n}\n\nexport interface SendEventOptions {\n flush?: boolean; // Force immediate send\n}\n\nexport interface SetPropertyOptions {\n userId?: string; // Override global userId\n}\n\nexport interface PropertyPayload {\n userId: string;\n [key: string]: string; // All property values must be strings\n}\n\n// Remote Config interfaces\nexport interface RemoteConfigRequest {\n userId: string;\n immediateKeys: string[];\n properties?: Record<string, string>;\n}\n\nexport interface RemoteConfigResponse {\n userId: string;\n snapshotId: string;\n configurations: Record<string, string>;\n isFinal: boolean;\n qualifiedSegments: string[];\n qualifiedRuleSets: string[];\n timestamp: string;\n isFromCache: boolean;\n}\n\nexport interface RemoteConfigOptions {\n immediateKeys?: string[];\n properties?: Record<string, string>;\n userId?: string; // Override global userId\n forceRefresh?: boolean; // Force fetch from API, bypass cache\n}\n\nexport interface RemoteConfigCache {\n configurations: Record<string, string>;\n snapshotId: string;\n timestamp: string;\n userId: string;\n}\n\nexport type ConfigChangeListener = (configurations: Record<string, string>) => void;\n\n// Template event interfaces\nexport interface LoginEventProperties extends Record<string, unknown> {\n method?: string; // 'email', 'google', 'facebook', etc.\n success?: boolean;\n errorMessage?: string;\n loginAttempt?: number;\n rememberMe?: boolean;\n twoFactorEnabled?: boolean;\n}\n\nexport interface SignupEventProperties extends Record<string, unknown> {\n method?: string; // 'email', 'google', 'facebook', etc.\n source?: string; // 'landing_page', 'referral', 'ad', etc.\n plan?: string; // 'free', 'pro', 'enterprise', etc.\n success?: boolean;\n errorMessage?: string;\n}\n\nexport interface CheckoutEventProperties extends Record<string, unknown> {\n orderId?: string;\n total?: number;\n currency?: string;\n items?: Array<{\n id: string;\n name: string;\n price: number;\n quantity: number;\n }>;\n paymentMethod?: string; // 'credit_card', 'paypal', 'stripe', etc.\n success?: boolean;\n errorMessage?: string;\n couponCode?: string;\n discount?: number;\n}\n\nexport interface PageViewEventProperties extends Record<string, unknown> {\n page?: string;\n title?: string;\n referrer?: string;\n url?: string;\n userAgent?: string;\n screenResolution?: string;\n viewportSize?: string;\n}\n\nexport interface PurchaseEventProperties extends Record<string, unknown> {\n orderId?: string;\n total?: number;\n currency?: string;\n items?: Array<{\n id: string;\n name: string;\n price: number;\n quantity: number;\n category?: string;\n }>;\n paymentMethod?: string;\n shippingMethod?: string;\n tax?: number;\n shipping?: number;\n discount?: number;\n couponCode?: string;\n}\n\nexport interface SearchEventProperties extends Record<string, unknown> {\n query?: string;\n results?: number;\n filters?: Record<string, unknown>;\n sortBy?: string;\n category?: string;\n success?: boolean;\n}\n\nexport interface AddToCartEventProperties extends Record<string, unknown> {\n itemId?: string;\n itemName?: string;\n price?: number;\n quantity?: number;\n currency?: string;\n category?: string;\n variant?: string;\n}\n\nexport interface RemoveFromCartEventProperties extends Record<string, unknown> {\n itemId?: string;\n itemName?: string;\n price?: number;\n quantity?: number;\n currency?: string;\n category?: string;\n variant?: string;\n}\n\n// Error handling interfaces\nexport interface ErrorDigest {\n eventCount: number;\n totalProperties: number;\n totalSize: number;\n eventNames: string[];\n userIds: string[];\n}\n\nexport interface FormattedError {\n code: string;\n message: string;\n digest: ErrorDigest;\n timestamp: string;\n context: string;\n originalError?: unknown;\n}\n\n/**\n * Main Grain Analytics client\n */\ntype RequiredConfig = Required<Omit<GrainConfig, 'secretKey' | 'authProvider' | 'userId'>> & {\n secretKey?: string;\n authProvider?: AuthProvider;\n userId?: string;\n};\n\nexport class GrainAnalytics {\n private config: RequiredConfig;\n private eventQueue: EventPayload[] = [];\n private flushTimer: number | null = null;\n private isDestroyed = false;\n private globalUserId: string | null = null;\n private persistentAnonymousUserId: string | null = null;\n // Remote Config properties\n private configCache: RemoteConfigCache | null = null;\n private configRefreshTimer: number | null = null;\n private configChangeListeners: ConfigChangeListener[] = [];\n private configFetchPromise: Promise<RemoteConfigResponse> | null = null;\n\n constructor(config: GrainConfig) {\n this.config = {\n apiUrl: 'https://api.grainql.com',\n authStrategy: 'NONE',\n batchSize: 50,\n flushInterval: 5000, // 5 seconds\n retryAttempts: 3,\n retryDelay: 1000, // 1 second\n maxEventsPerRequest: 160, // Maximum events per API request\n debug: false,\n // Remote Config defaults\n defaultConfigurations: {},\n configCacheKey: 'grain_config',\n configRefreshInterval: 300000, // 5 minutes\n enableConfigCache: true,\n ...config,\n tenantId: config.tenantId,\n };\n\n // Set global userId if provided in config\n if (config.userId) {\n this.globalUserId = config.userId;\n }\n\n this.validateConfig();\n this.initializePersistentAnonymousUserId();\n this.setupBeforeUnload();\n this.startFlushTimer();\n this.initializeConfigCache();\n }\n\n private validateConfig(): void {\n if (!this.config.tenantId) {\n throw new Error('Grain Analytics: tenantId is required');\n }\n\n if (this.config.authStrategy === 'SERVER_SIDE' && !this.config.secretKey) {\n throw new Error('Grain Analytics: secretKey is required for SERVER_SIDE auth strategy');\n }\n\n if (this.config.authStrategy === 'JWT' && !this.config.authProvider) {\n throw new Error('Grain Analytics: authProvider is required for JWT auth strategy');\n }\n }\n\n /**\n * Generate a UUID v4 string\n */\n private generateUUID(): string {\n if (typeof crypto !== 'undefined' && crypto.randomUUID) {\n return crypto.randomUUID();\n }\n \n // Fallback for environments without crypto.randomUUID\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n const r = Math.random() * 16 | 0;\n const v = c === 'x' ? r : (r & 0x3 | 0x8);\n return v.toString(16);\n });\n }\n\n /**\n * Format UUID for anonymous user ID (remove dashes and prefix with 'temp:')\n */\n private formatAnonymousUserId(uuid: string): string {\n return `temp:${uuid.replace(/-/g, '')}`;\n }\n\n /**\n * Initialize persistent anonymous user ID from localStorage or create new one\n */\n private initializePersistentAnonymousUserId(): void {\n if (typeof window === 'undefined') return;\n\n const storageKey = `grain_anonymous_user_id_${this.config.tenantId}`;\n \n try {\n const stored = localStorage.getItem(storageKey);\n if (stored) {\n this.persistentAnonymousUserId = stored;\n this.log('Loaded persistent anonymous user ID:', this.persistentAnonymousUserId);\n } else {\n // Generate new anonymous user ID\n const uuid = this.generateUUID();\n this.persistentAnonymousUserId = this.formatAnonymousUserId(uuid);\n localStorage.setItem(storageKey, this.persistentAnonymousUserId);\n this.log('Generated new persistent anonymous user ID:', this.persistentAnonymousUserId);\n }\n } catch (error) {\n this.log('Failed to initialize persistent anonymous user ID:', error);\n // Fallback: generate temporary ID without persistence\n const uuid = this.generateUUID();\n this.persistentAnonymousUserId = this.formatAnonymousUserId(uuid);\n }\n }\n\n /**\n * Get the effective user ID (global userId or persistent anonymous ID)\n */\n private getEffectiveUserId(): string {\n return this.globalUserId || this.persistentAnonymousUserId || 'anonymous';\n }\n\n private log(...args: unknown[]): void {\n if (this.config.debug) {\n console.log('[Grain Analytics]', ...args);\n }\n }\n\n /**\n * Create error digest from events\n */\n private createErrorDigest(events: EventPayload[]): ErrorDigest {\n const eventNames = [...new Set(events.map(e => e.eventName))];\n const userIds = [...new Set(events.map(e => e.userId))];\n \n let totalProperties = 0;\n let totalSize = 0;\n \n events.forEach(event => {\n const properties = event.properties || {};\n totalProperties += Object.keys(properties).length;\n totalSize += JSON.stringify(event).length;\n });\n\n return {\n eventCount: events.length,\n totalProperties,\n totalSize,\n eventNames,\n userIds,\n };\n }\n\n /**\n * Format error with beautiful structure\n */\n private formatError(\n error: unknown,\n context: string,\n events?: EventPayload[]\n ): FormattedError {\n const digest = events ? this.createErrorDigest(events) : {\n eventCount: 0,\n totalProperties: 0,\n totalSize: 0,\n eventNames: [],\n userIds: [],\n };\n\n let code = 'UNKNOWN_ERROR';\n let message = 'An unknown error occurred';\n\n if (error instanceof Error) {\n message = error.message;\n \n // Determine error code based on error type and message\n if (message.includes('fetch failed') || message.includes('network error')) {\n code = 'NETWORK_ERROR';\n } else if (message.includes('timeout')) {\n code = 'TIMEOUT_ERROR';\n } else if (message.includes('HTTP 4')) {\n code = 'CLIENT_ERROR';\n } else if (message.includes('HTTP 5')) {\n code = 'SERVER_ERROR';\n } else if (message.includes('JSON')) {\n code = 'PARSE_ERROR';\n } else if (message.includes('auth') || message.includes('unauthorized')) {\n code = 'AUTH_ERROR';\n } else if (message.includes('rate limit') || message.includes('429')) {\n code = 'RATE_LIMIT_ERROR';\n } else {\n code = 'GENERAL_ERROR';\n }\n } else if (typeof error === 'string') {\n message = error;\n code = 'STRING_ERROR';\n } else if (error && typeof error === 'object' && 'status' in error) {\n const status = (error as { status: number }).status;\n code = `HTTP_${status}`;\n message = `HTTP ${status} error`;\n }\n\n return {\n code,\n message,\n digest,\n timestamp: new Date().toISOString(),\n context,\n originalError: error,\n };\n }\n\n /**\n * Log formatted error gracefully\n */\n private logError(formattedError: FormattedError): void {\n const { code, message, digest, timestamp, context } = formattedError;\n \n const errorOutput = {\n '\uD83D\uDEA8 Grain Analytics Error': {\n 'Error Code': code,\n 'Message': message,\n 'Context': context,\n 'Timestamp': timestamp,\n 'Event Digest': {\n 'Events': digest.eventCount,\n 'Properties': digest.totalProperties,\n 'Size (bytes)': digest.totalSize,\n 'Event Names': digest.eventNames.length > 0 ? digest.eventNames.join(', ') : 'None',\n 'User IDs': digest.userIds.length > 0 ? digest.userIds.slice(0, 3).join(', ') + (digest.userIds.length > 3 ? '...' : '') : 'None',\n }\n }\n };\n\n console.error('\uD83D\uDEA8 Grain Analytics Error:', errorOutput);\n \n // Also log in a more compact format for debugging\n if (this.config.debug) {\n console.error(`[Grain Analytics] ${code}: ${message} (${context}) - Events: ${digest.eventCount}, Props: ${digest.totalProperties}, Size: ${digest.totalSize}B`);\n }\n }\n\n /**\n * Safely execute a function with error handling\n */\n private async safeExecute<T>(\n fn: () => Promise<T>,\n context: string,\n events?: EventPayload[]\n ): Promise<T | null> {\n try {\n return await fn();\n } catch (error) {\n const formattedError = this.formatError(error, context, events);\n this.logError(formattedError);\n return null;\n }\n }\n\n private formatEvent(event: GrainEvent): EventPayload {\n return {\n eventName: event.eventName,\n userId: event.userId || this.getEffectiveUserId(),\n properties: event.properties || {},\n };\n }\n\n private async getAuthHeaders(): Promise<Record<string, string>> {\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n };\n\n switch (this.config.authStrategy) {\n case 'NONE':\n break;\n case 'SERVER_SIDE':\n headers['Authorization'] = `Chase ${this.config.secretKey}`;\n break;\n case 'JWT':\n if (this.config.authProvider) {\n const token = await this.config.authProvider.getToken();\n headers['Authorization'] = `Bearer ${token}`;\n }\n break;\n }\n\n return headers;\n }\n\n private async delay(ms: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, ms));\n }\n\n private isRetriableError(error: unknown): boolean {\n if (error instanceof Error) {\n // Check for specific network or fetch errors\n const message = error.message.toLowerCase();\n if (message.includes('fetch failed')) return true;\n if (message === 'network error') return true; // Exact match to avoid \"Non-network error\"\n if (message.includes('timeout')) return true;\n if (message.includes('connection')) return true;\n }\n \n // Check for HTTP status codes that are retriable\n if (typeof error === 'object' && error !== null && 'status' in error) {\n const status = (error as { status: number }).status;\n return status >= 500 || status === 429; // Server errors or rate limiting\n }\n \n return false;\n }\n\n private async sendEvents(events: EventPayload[]): Promise<void> {\n if (events.length === 0) return;\n\n let lastError: unknown;\n\n for (let attempt = 0; attempt <= this.config.retryAttempts; attempt++) {\n try {\n const headers = await this.getAuthHeaders();\n const url = `${this.config.apiUrl}/v1/events/${encodeURIComponent(this.config.tenantId)}/multi`;\n\n this.log(`Sending ${events.length} events to ${url} (attempt ${attempt + 1})`);\n\n const response = await fetch(url, {\n method: 'POST',\n headers,\n body: JSON.stringify(events),\n });\n\n if (!response.ok) {\n let errorMessage = `HTTP ${response.status}`;\n try {\n const errorBody = await response.json();\n if (errorBody?.message) {\n errorMessage = errorBody.message;\n }\n } catch {\n const errorText = await response.text();\n if (errorText) {\n errorMessage = errorText;\n }\n }\n \n const error = new Error(`Failed to send events: ${errorMessage}`) as Error & { status?: number };\n error.status = response.status;\n throw error;\n }\n\n this.log(`Successfully sent ${events.length} events`);\n return; // Success, exit retry loop\n \n } catch (error) {\n lastError = error;\n \n if (attempt === this.config.retryAttempts) {\n // Last attempt, don't retry - log error gracefully\n const formattedError = this.formatError(error, `sendEvents (attempt ${attempt + 1}/${this.config.retryAttempts + 1})`, events);\n this.logError(formattedError);\n return; // Don't throw, just return gracefully\n }\n \n if (!this.isRetriableError(error)) {\n // Non-retriable error, don't retry - log error gracefully\n const formattedError = this.formatError(error, `sendEvents (non-retriable error)`, events);\n this.logError(formattedError);\n return; // Don't throw, just return gracefully\n }\n \n const delayMs = this.config.retryDelay * Math.pow(2, attempt); // Exponential backoff\n this.log(`Retrying in ${delayMs}ms after error:`, error);\n await this.delay(delayMs);\n }\n }\n }\n\n private async sendEventsWithBeacon(events: EventPayload[]): Promise<void> {\n if (events.length === 0) return;\n\n try {\n const headers = await this.getAuthHeaders();\n const url = `${this.config.apiUrl}/v1/events/${encodeURIComponent(this.config.tenantId)}/multi`;\n\n const body = JSON.stringify({ events });\n\n // Try beacon API first (more reliable for page unload)\n if (typeof navigator !== 'undefined' && 'sendBeacon' in navigator) {\n const blob = new Blob([body], { type: 'application/json' });\n const success = navigator.sendBeacon(url, blob);\n \n if (success) {\n this.log(`Successfully sent ${events.length} events via beacon`);\n return;\n }\n }\n\n // Fallback to fetch with keepalive\n await fetch(url, {\n method: 'POST',\n headers,\n body,\n keepalive: true,\n });\n\n this.log(`Successfully sent ${events.length} events via fetch (keepalive)`);\n } catch (error) {\n // Log error gracefully for beacon failures (page unload scenarios)\n const formattedError = this.formatError(error, 'sendEventsWithBeacon', events);\n this.logError(formattedError);\n }\n }\n\n private startFlushTimer(): void {\n if (this.flushTimer) {\n clearInterval(this.flushTimer);\n }\n\n this.flushTimer = window.setInterval(() => {\n if (this.eventQueue.length > 0) {\n this.flush().catch((error) => {\n const formattedError = this.formatError(error, 'auto-flush');\n this.logError(formattedError);\n });\n }\n }, this.config.flushInterval);\n }\n\n private setupBeforeUnload(): void {\n if (typeof window === 'undefined') return;\n\n const handleBeforeUnload = () => {\n if (this.eventQueue.length > 0) {\n // Use beacon API for reliable delivery during page unload\n const eventsToSend = [...this.eventQueue];\n this.eventQueue = [];\n \n const chunks = this.chunkEvents(eventsToSend, this.config.maxEventsPerRequest);\n \n // Send first chunk with beacon (most important for page unload)\n if (chunks.length > 0) {\n this.sendEventsWithBeacon(chunks[0]).catch(() => {\n // Silently fail - page is unloading\n });\n }\n }\n };\n\n // Handle page unload\n window.addEventListener('beforeunload', handleBeforeUnload);\n window.addEventListener('pagehide', handleBeforeUnload);\n \n // Handle visibility change (page hidden)\n document.addEventListener('visibilitychange', () => {\n if (document.visibilityState === 'hidden' && this.eventQueue.length > 0) {\n const eventsToSend = [...this.eventQueue];\n this.eventQueue = [];\n \n const chunks = this.chunkEvents(eventsToSend, this.config.maxEventsPerRequest);\n \n // Send first chunk with beacon (most important for page hidden)\n if (chunks.length > 0) {\n this.sendEventsWithBeacon(chunks[0]).catch(() => {\n // Silently fail\n });\n }\n }\n });\n }\n\n /**\n * Track an analytics event\n */\n async track(eventName: string, properties?: Record<string, unknown>, options?: SendEventOptions): Promise<void>;\n async track(event: GrainEvent, options?: SendEventOptions): Promise<void>;\n async track(\n eventOrName: string | GrainEvent,\n propertiesOrOptions?: Record<string, unknown> | SendEventOptions,\n options?: SendEventOptions\n ): Promise<void> {\n try {\n if (this.isDestroyed) {\n const error = new Error('Grain Analytics: Client has been destroyed');\n const formattedError = this.formatError(error, 'track (client destroyed)');\n this.logError(formattedError);\n return;\n }\n\n let event: GrainEvent;\n let opts: SendEventOptions = {};\n\n if (typeof eventOrName === 'string') {\n event = {\n eventName: eventOrName,\n properties: propertiesOrOptions as Record<string, unknown>,\n };\n opts = options || {};\n } else {\n event = eventOrName;\n opts = propertiesOrOptions as SendEventOptions || {};\n }\n\n const formattedEvent = this.formatEvent(event);\n this.eventQueue.push(formattedEvent);\n\n this.log(`Queued event: ${event.eventName}`, event.properties);\n\n // Check if we should flush immediately\n if (opts.flush || this.eventQueue.length >= this.config.batchSize) {\n await this.flush();\n }\n } catch (error) {\n const formattedError = this.formatError(error, 'track');\n this.logError(formattedError);\n }\n }\n\n /**\n * Identify a user (sets userId for subsequent events)\n */\n identify(userId: string): void {\n this.log(`Identified user: ${userId}`);\n this.globalUserId = userId;\n // Clear persistent anonymous user ID since we now have a real user ID\n this.persistentAnonymousUserId = null;\n }\n\n /**\n * Set global user ID for all subsequent events\n */\n setUserId(userId: string | null): void {\n this.log(`Set global user ID: ${userId}`);\n this.globalUserId = userId;\n // Clear persistent anonymous user ID if setting a real user ID\n if (userId) {\n this.persistentAnonymousUserId = null;\n }\n }\n\n /**\n * Get current global user ID\n */\n getUserId(): string | null {\n return this.globalUserId;\n }\n\n /**\n * Get current effective user ID (global userId or persistent anonymous ID)\n */\n getEffectiveUserIdPublic(): string {\n return this.getEffectiveUserId();\n }\n\n /**\n * Set user properties\n */\n async setProperty(properties: Record<string, unknown>, options?: SetPropertyOptions): Promise<void> {\n try {\n if (this.isDestroyed) {\n const error = new Error('Grain Analytics: Client has been destroyed');\n const formattedError = this.formatError(error, 'setProperty (client destroyed)');\n this.logError(formattedError);\n return;\n }\n\n const userId = options?.userId || this.getEffectiveUserId();\n \n // Validate property count (max 4 properties)\n const propertyKeys = Object.keys(properties);\n if (propertyKeys.length > 4) {\n const error = new Error('Grain Analytics: Maximum 4 properties allowed per request');\n const formattedError = this.formatError(error, 'setProperty (validation)');\n this.logError(formattedError);\n return;\n }\n\n if (propertyKeys.length === 0) {\n const error = new Error('Grain Analytics: At least one property is required');\n const formattedError = this.formatError(error, 'setProperty (validation)');\n this.logError(formattedError);\n return;\n }\n\n // Serialize all values to strings\n const serializedProperties: Record<string, string> = {};\n for (const [key, value] of Object.entries(properties)) {\n if (value === null || value === undefined) {\n serializedProperties[key] = '';\n } else if (typeof value === 'string') {\n serializedProperties[key] = value;\n } else {\n serializedProperties[key] = JSON.stringify(value);\n }\n }\n\n const payload: PropertyPayload = {\n userId,\n ...serializedProperties,\n };\n\n await this.sendProperties(payload);\n } catch (error) {\n const formattedError = this.formatError(error, 'setProperty');\n this.logError(formattedError);\n }\n }\n\n /**\n * Send properties to the API\n */\n private async sendProperties(payload: PropertyPayload): Promise<void> {\n let lastError: unknown;\n\n for (let attempt = 0; attempt <= this.config.retryAttempts; attempt++) {\n try {\n const headers = await this.getAuthHeaders();\n const url = `${this.config.apiUrl}/v1/events/${encodeURIComponent(this.config.tenantId)}/properties`;\n\n this.log(`Setting properties for user ${payload.userId} (attempt ${attempt + 1})`);\n\n const response = await fetch(url, {\n method: 'POST',\n headers,\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n let errorMessage = `HTTP ${response.status}`;\n try {\n const errorBody = await response.json();\n if (errorBody?.message) {\n errorMessage = errorBody.message;\n }\n } catch {\n const errorText = await response.text();\n if (errorText) {\n errorMessage = errorText;\n }\n }\n \n const error = new Error(`Failed to set properties: ${errorMessage}`) as Error & { status?: number };\n error.status = response.status;\n throw error;\n }\n\n this.log(`Successfully set properties for user ${payload.userId}`);\n return; // Success, exit retry loop\n \n } catch (error) {\n lastError = error;\n \n if (attempt === this.config.retryAttempts) {\n // Last attempt, don't retry - log error gracefully\n const formattedError = this.formatError(error, `sendProperties (attempt ${attempt + 1}/${this.config.retryAttempts + 1})`);\n this.logError(formattedError);\n return; // Don't throw, just return gracefully\n }\n \n if (!this.isRetriableError(error)) {\n // Non-retriable error, don't retry - log error gracefully\n const formattedError = this.formatError(error, 'sendProperties (non-retriable error)');\n this.logError(formattedError);\n return; // Don't throw, just return gracefully\n }\n \n const delayMs = this.config.retryDelay * Math.pow(2, attempt); // Exponential backoff\n this.log(`Retrying in ${delayMs}ms after error:`, error);\n await this.delay(delayMs);\n }\n }\n }\n\n // Template event methods\n\n /**\n * Track user login event\n */\n async trackLogin(properties?: LoginEventProperties, options?: SendEventOptions): Promise<void> {\n try {\n return await this.track('login', properties, options);\n } catch (error) {\n const formattedError = this.formatError(error, 'trackLogin');\n this.logError(formattedError);\n }\n }\n\n /**\n * Track user signup event\n */\n async trackSignup(properties?: SignupEventProperties, options?: SendEventOptions): Promise<void> {\n try {\n return await this.track('signup', properties, options);\n } catch (error) {\n const formattedError = this.formatError(error, 'trackSignup');\n this.logError(formattedError);\n }\n }\n\n /**\n * Track checkout event\n */\n async trackCheckout(properties?: CheckoutEventProperties, options?: SendEventOptions): Promise<void> {\n try {\n return await this.track('checkout', properties, options);\n } catch (error) {\n const formattedError = this.formatError(error, 'trackCheckout');\n this.logError(formattedError);\n }\n }\n\n /**\n * Track page view event\n */\n async trackPageView(properties?: PageViewEventProperties, options?: SendEventOptions): Promise<void> {\n try {\n return await this.track('page_view', properties, options);\n } catch (error) {\n const formattedError = this.formatError(error, 'trackPageView');\n this.logError(formattedError);\n }\n }\n\n /**\n * Track purchase event\n */\n async trackPurchase(properties?: PurchaseEventProperties, options?: SendEventOptions): Promise<void> {\n try {\n return await this.track('purchase', properties, options);\n } catch (error) {\n const formattedError = this.formatError(error, 'trackPurchase');\n this.logError(formattedError);\n }\n }\n\n /**\n * Track search event\n */\n async trackSearch(properties?: SearchEventProperties, options?: SendEventOptions): Promise<void> {\n try {\n return await this.track('search', properties, options);\n } catch (error) {\n const formattedError = this.formatError(error, 'trackSearch');\n this.logError(formattedError);\n }\n }\n\n /**\n * Track add to cart event\n */\n async trackAddToCart(properties?: AddToCartEventProperties, options?: SendEventOptions): Promise<void> {\n try {\n return await this.track('add_to_cart', properties, options);\n } catch (error) {\n const formattedError = this.formatError(error, 'trackAddToCart');\n this.logError(formattedError);\n }\n }\n\n /**\n * Track remove from cart event\n */\n async trackRemoveFromCart(properties?: RemoveFromCartEventProperties, options?: SendEventOptions): Promise<void> {\n try {\n return await this.track('remove_from_cart', properties, options);\n } catch (error) {\n const formattedError = this.formatError(error, 'trackRemoveFromCart');\n this.logError(formattedError);\n }\n }\n\n /**\n * Manually flush all queued events\n */\n async flush(): Promise<void> {\n try {\n if (this.eventQueue.length === 0) return;\n\n const eventsToSend = [...this.eventQueue];\n this.eventQueue = [];\n\n // Split events into chunks to respect maxEventsPerRequest limit\n const chunks = this.chunkEvents(eventsToSend, this.config.maxEventsPerRequest);\n \n // Send all chunks sequentially to maintain order\n for (const chunk of chunks) {\n await this.sendEvents(chunk);\n }\n } catch (error) {\n const formattedError = this.formatError(error, 'flush');\n this.logError(formattedError);\n }\n }\n\n // Remote Config Methods\n\n /**\n * Initialize configuration cache from localStorage\n */\n private initializeConfigCache(): void {\n if (!this.config.enableConfigCache || typeof window === 'undefined') return;\n\n try {\n const cached = localStorage.getItem(this.config.configCacheKey);\n if (cached) {\n this.configCache = JSON.parse(cached);\n this.log('Loaded configuration from cache:', this.configCache);\n }\n } catch (error) {\n this.log('Failed to load configuration cache:', error);\n }\n }\n\n /**\n * Save configuration cache to localStorage\n */\n private saveConfigCache(cache: RemoteConfigCache): void {\n if (!this.config.enableConfigCache || typeof window === 'undefined') return;\n\n try {\n localStorage.setItem(this.config.configCacheKey, JSON.stringify(cache));\n this.log('Saved configuration to cache:', cache);\n } catch (error) {\n this.log('Failed to save configuration cache:', error);\n }\n }\n\n /**\n * Get configuration value with fallback to defaults\n */\n getConfig(key: string): string | undefined {\n // First check cache\n if (this.configCache?.configurations?.[key]) {\n return this.configCache.configurations[key];\n }\n\n // Then check defaults\n if (this.config.defaultConfigurations?.[key]) {\n return this.config.defaultConfigurations[key];\n }\n\n return undefined;\n }\n\n /**\n * Get all configurations with fallback to defaults\n */\n getAllConfigs(): Record<string, string> {\n const configs = { ...this.config.defaultConfigurations };\n \n if (this.configCache?.configurations) {\n Object.assign(configs, this.configCache.configurations);\n }\n\n return configs;\n }\n\n /**\n * Fetch configurations from API\n */\n async fetchConfig(options: RemoteConfigOptions = {}): Promise<RemoteConfigResponse | null> {\n try {\n if (this.isDestroyed) {\n const error = new Error('Grain Analytics: Client has been destroyed');\n const formattedError = this.formatError(error, 'fetchConfig (client destroyed)');\n this.logError(formattedError);\n return null;\n }\n\n const userId = options.userId || this.getEffectiveUserId();\n const immediateKeys = options.immediateKeys || [];\n const properties = options.properties || {};\n\n const request: RemoteConfigRequest = {\n userId,\n immediateKeys,\n properties,\n };\n\n let lastError: unknown;\n\n for (let attempt = 0; attempt <= this.config.retryAttempts; attempt++) {\n try {\n const headers = await this.getAuthHeaders();\n const url = `${this.config.apiUrl}/v1/client/${encodeURIComponent(this.config.tenantId)}/config/configurations`;\n\n this.log(`Fetching configurations for user ${userId} (attempt ${attempt + 1})`);\n\n const response = await fetch(url, {\n method: 'POST',\n headers,\n body: JSON.stringify(request),\n });\n\n if (!response.ok) {\n let errorMessage = `HTTP ${response.status}`;\n try {\n const errorBody = await response.json();\n if (errorBody?.message) {\n errorMessage = errorBody.message;\n }\n } catch {\n const errorText = await response.text();\n if (errorText) {\n errorMessage = errorText;\n }\n }\n \n const error = new Error(`Failed to fetch configurations: ${errorMessage}`) as Error & { status?: number };\n error.status = response.status;\n throw error;\n }\n\n const configResponse: RemoteConfigResponse = await response.json();\n \n // Update cache if successful\n if (configResponse.configurations) {\n this.updateConfigCache(configResponse, userId);\n }\n\n this.log(`Successfully fetched configurations for user ${userId}:`, configResponse);\n return configResponse;\n \n } catch (error) {\n lastError = error;\n \n if (attempt === this.config.retryAttempts) {\n // Last attempt, don't retry - log error gracefully\n const formattedError = this.formatError(error, `fetchConfig (attempt ${attempt + 1}/${this.config.retryAttempts + 1})`);\n this.logError(formattedError);\n return null;\n }\n \n if (!this.isRetriableError(error)) {\n // Non-retriable error, don't retry - log error gracefully\n const formattedError = this.formatError(error, 'fetchConfig (non-retriable error)');\n this.logError(formattedError);\n return null;\n }\n \n const delayMs = this.config.retryDelay * Math.pow(2, attempt);\n this.log(`Retrying config fetch in ${delayMs}ms after error:`, error);\n await this.delay(delayMs);\n }\n }\n\n return null;\n } catch (error) {\n const formattedError = this.formatError(error, 'fetchConfig');\n this.logError(formattedError);\n return null;\n }\n }\n\n /**\n * Get configuration asynchronously (cache-first with fallback to API)\n */\n async getConfigAsync(key: string, options: RemoteConfigOptions = {}): Promise<string | undefined> {\n try {\n // Return immediately if we have it in cache and not forcing refresh\n if (!options.forceRefresh && this.configCache?.configurations?.[key]) {\n return this.configCache.configurations[key];\n }\n\n // Return default if available and not forcing refresh\n if (!options.forceRefresh && this.config.defaultConfigurations?.[key]) {\n return this.config.defaultConfigurations[key];\n }\n\n // Fetch from API\n const response = await this.fetchConfig(options);\n if (response) {\n return response.configurations[key];\n }\n \n // Return default as fallback\n return this.config.defaultConfigurations?.[key];\n } catch (error) {\n const formattedError = this.formatError(error, 'getConfigAsync');\n this.logError(formattedError);\n // Return default as fallback\n return this.config.defaultConfigurations?.[key];\n }\n }\n\n /**\n * Get all configurations asynchronously (cache-first with fallback to API)\n */\n async getAllConfigsAsync(options: RemoteConfigOptions = {}): Promise<Record<string, string>> {\n try {\n // Return cache if available and not forcing refresh\n if (!options.forceRefresh && this.configCache?.configurations) {\n return { ...this.config.defaultConfigurations, ...this.configCache.configurations };\n }\n\n // Fetch from API\n const response = await this.fetchConfig(options);\n if (response) {\n return { ...this.config.defaultConfigurations, ...response.configurations };\n }\n \n // Return defaults as fallback\n return { ...this.config.defaultConfigurations };\n } catch (error) {\n const formattedError = this.formatError(error, 'getAllConfigsAsync');\n this.logError(formattedError);\n // Return defaults as fallback\n return { ...this.config.defaultConfigurations };\n }\n }\n\n /**\n * Update configuration cache and notify listeners\n */\n private updateConfigCache(response: RemoteConfigResponse, userId: string): void {\n const newCache: RemoteConfigCache = {\n configurations: response.configurations,\n snapshotId: response.snapshotId,\n timestamp: response.timestamp,\n userId,\n };\n\n const oldConfigs = this.configCache?.configurations || {};\n this.configCache = newCache;\n this.saveConfigCache(newCache);\n\n // Notify listeners if configurations changed\n if (JSON.stringify(oldConfigs) !== JSON.stringify(response.configurations)) {\n this.notifyConfigChangeListeners(response.configurations);\n }\n }\n\n /**\n * Add configuration change listener\n */\n addConfigChangeListener(listener: ConfigChangeListener): void {\n this.configChangeListeners.push(listener);\n }\n\n /**\n * Remove configuration change listener\n */\n removeConfigChangeListener(listener: ConfigChangeListener): void {\n const index = this.configChangeListeners.indexOf(listener);\n if (index > -1) {\n this.configChangeListeners.splice(index, 1);\n }\n }\n\n /**\n * Notify all configuration change listeners\n */\n private notifyConfigChangeListeners(configurations: Record<string, string>): void {\n this.configChangeListeners.forEach(listener => {\n try {\n listener(configurations);\n } catch (error) {\n console.error('[Grain Analytics] Config change listener error:', error);\n }\n });\n }\n\n /**\n * Start automatic configuration refresh timer\n */\n private startConfigRefreshTimer(): void {\n if (this.configRefreshTimer) {\n clearInterval(this.configRefreshTimer);\n }\n\n this.configRefreshTimer = window.setInterval(() => {\n if (!this.isDestroyed && this.globalUserId) {\n this.fetchConfig().catch((error) => {\n const formattedError = this.formatError(error, 'auto-config refresh');\n this.logError(formattedError);\n });\n }\n }, this.config.configRefreshInterval);\n }\n\n /**\n * Stop automatic configuration refresh timer\n */\n private stopConfigRefreshTimer(): void {\n if (this.configRefreshTimer) {\n clearInterval(this.configRefreshTimer);\n this.configRefreshTimer = null;\n }\n }\n\n /**\n * Preload configurations for immediate access\n */\n async preloadConfig(immediateKeys: string[] = [], properties?: Record<string, string>): Promise<void> {\n try {\n if (!this.globalUserId) {\n this.log('Cannot preload config: no user ID set');\n return;\n }\n\n const response = await this.fetchConfig({ immediateKeys, properties });\n if (response) {\n this.startConfigRefreshTimer();\n }\n } catch (error) {\n const formattedError = this.formatError(error, 'preloadConfig');\n this.logError(formattedError);\n }\n }\n\n /**\n * Split events array into chunks of specified size\n */\n private chunkEvents(events: EventPayload[], chunkSize: number): EventPayload[][] {\n const chunks: EventPayload[][] = [];\n for (let i = 0; i < events.length; i += chunkSize) {\n chunks.push(events.slice(i, i + chunkSize));\n }\n return chunks;\n }\n\n /**\n * Destroy the client and clean up resources\n */\n destroy(): void {\n this.isDestroyed = true;\n \n if (this.flushTimer) {\n clearInterval(this.flushTimer);\n this.flushTimer = null;\n }\n\n // Stop config refresh timer\n this.stopConfigRefreshTimer();\n\n // Clear config change listeners\n this.configChangeListeners = [];\n\n // Send any remaining events (in chunks if necessary)\n if (this.eventQueue.length > 0) {\n const eventsToSend = [...this.eventQueue];\n this.eventQueue = [];\n \n const chunks = this.chunkEvents(eventsToSend, this.config.maxEventsPerRequest);\n \n // Send first chunk with beacon (most important for page unload)\n if (chunks.length > 0) {\n this.sendEventsWithBeacon(chunks[0]).catch(() => {\n // Silently fail during cleanup\n });\n \n // If there are more chunks, try to send them with regular fetch\n for (let i = 1; i < chunks.length; i++) {\n this.sendEventsWithBeacon(chunks[i]).catch(() => {\n // Silently fail during cleanup\n });\n }\n }\n }\n }\n}\n\n/**\n * Create a new Grain Analytics client\n */\nexport function createGrainAnalytics(config: GrainConfig): GrainAnalytics {\n return new GrainAnalytics(config);\n}\n\n// Default export for convenience\nexport default GrainAnalytics;\n\n// Global interface for IIFE build\ndeclare global {\n interface Window {\n Grain?: {\n GrainAnalytics: typeof GrainAnalytics;\n createGrainAnalytics: typeof createGrainAnalytics;\n };\n }\n}\n\n// Auto-setup for IIFE build\nif (typeof window !== 'undefined') {\n window.Grain = {\n GrainAnalytics,\n createGrainAnalytics,\n };\n}"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1,3 +1,3 @@
1
- /* Grain Analytics Web SDK v1.7.0 | MIT License */
2
- "use strict";var Grain=(()=>{var m=Object.defineProperty;var E=Object.getOwnPropertyDescriptor;var v=Object.getOwnPropertyNames;var C=Object.prototype.hasOwnProperty;var R=(g,t)=>{for(var e in t)m(g,e,{get:t[e],enumerable:!0})},P=(g,t,e,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of v(t))!C.call(g,n)&&n!==e&&m(g,n,{get:()=>t[n],enumerable:!(r=E(t,n))||r.enumerable});return g};var w=g=>P(m({},"__esModule",{value:!0}),g);var b={};R(b,{GrainAnalytics:()=>h,createGrainAnalytics:()=>y,default:()=>I});var h=class{constructor(t){this.eventQueue=[];this.flushTimer=null;this.isDestroyed=!1;this.globalUserId=null;this.persistentAnonymousUserId=null;this.configCache=null;this.configRefreshTimer=null;this.configChangeListeners=[];this.configFetchPromise=null;this.config={apiUrl:"https://api.grainql.com",authStrategy:"NONE",batchSize:50,flushInterval:5e3,retryAttempts:3,retryDelay:1e3,maxEventsPerRequest:160,debug:!1,defaultConfigurations:{},configCacheKey:"grain_config",configRefreshInterval:3e5,enableConfigCache:!0,...t,tenantId:t.tenantId},t.userId&&(this.globalUserId=t.userId),this.validateConfig(),this.initializePersistentAnonymousUserId(),this.setupBeforeUnload(),this.startFlushTimer(),this.initializeConfigCache()}validateConfig(){if(!this.config.tenantId)throw new Error("Grain Analytics: tenantId is required");if(this.config.authStrategy==="SERVER_SIDE"&&!this.config.secretKey)throw new Error("Grain Analytics: secretKey is required for SERVER_SIDE auth strategy");if(this.config.authStrategy==="JWT"&&!this.config.authProvider)throw new Error("Grain Analytics: authProvider is required for JWT auth strategy")}generateUUID(){return typeof crypto<"u"&&crypto.randomUUID?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(t){let e=Math.random()*16|0;return(t==="x"?e:e&3|8).toString(16)})}formatAnonymousUserId(t){return`temp:${t.replace(/-/g,"")}`}initializePersistentAnonymousUserId(){if(typeof window>"u")return;let t=`grain_anonymous_user_id_${this.config.tenantId}`;try{let e=localStorage.getItem(t);if(e)this.persistentAnonymousUserId=e,this.log("Loaded persistent anonymous user ID:",this.persistentAnonymousUserId);else{let r=this.generateUUID();this.persistentAnonymousUserId=this.formatAnonymousUserId(r),localStorage.setItem(t,this.persistentAnonymousUserId),this.log("Generated new persistent anonymous user ID:",this.persistentAnonymousUserId)}}catch(e){this.log("Failed to initialize persistent anonymous user ID:",e);let r=this.generateUUID();this.persistentAnonymousUserId=this.formatAnonymousUserId(r)}}getEffectiveUserId(){return this.globalUserId||this.persistentAnonymousUserId||"anonymous"}log(...t){this.config.debug&&console.log("[Grain Analytics]",...t)}createErrorDigest(t){let e=[...new Set(t.map(i=>i.eventName))],r=[...new Set(t.map(i=>i.userId))],n=0,s=0;return t.forEach(i=>{let o=i.properties||{};n+=Object.keys(o).length,s+=JSON.stringify(i).length}),{eventCount:t.length,totalProperties:n,totalSize:s,eventNames:e,userIds:r}}formatError(t,e,r){let n=r?this.createErrorDigest(r):{eventCount:0,totalProperties:0,totalSize:0,eventNames:[],userIds:[]},s="UNKNOWN_ERROR",i="An unknown error occurred";if(t instanceof Error)i=t.message,i.includes("fetch failed")||i.includes("network error")?s="NETWORK_ERROR":i.includes("timeout")?s="TIMEOUT_ERROR":i.includes("HTTP 4")?s="CLIENT_ERROR":i.includes("HTTP 5")?s="SERVER_ERROR":i.includes("JSON")?s="PARSE_ERROR":i.includes("auth")||i.includes("unauthorized")?s="AUTH_ERROR":i.includes("rate limit")||i.includes("429")?s="RATE_LIMIT_ERROR":s="GENERAL_ERROR";else if(typeof t=="string")i=t,s="STRING_ERROR";else if(t&&typeof t=="object"&&"status"in t){let o=t.status;s=`HTTP_${o}`,i=`HTTP ${o} error`}return{code:s,message:i,digest:n,timestamp:new Date().toISOString(),context:e,originalError:t}}logError(t){let{code:e,message:r,digest:n,timestamp:s,context:i}=t,o={"\u{1F6A8} Grain Analytics Error":{"Error Code":e,Message:r,Context:i,Timestamp:s,"Event Digest":{Events:n.eventCount,Properties:n.totalProperties,"Size (bytes)":n.totalSize,"Event Names":n.eventNames.length>0?n.eventNames.join(", "):"None","User IDs":n.userIds.length>0?n.userIds.slice(0,3).join(", ")+(n.userIds.length>3?"...":""):"None"}}};console.error("\u{1F6A8} Grain Analytics Error:",o),this.config.debug&&console.error(`[Grain Analytics] ${e}: ${r} (${i}) - Events: ${n.eventCount}, Props: ${n.totalProperties}, Size: ${n.totalSize}B`)}async safeExecute(t,e,r){try{return await t()}catch(n){let s=this.formatError(n,e,r);return this.logError(s),null}}formatEvent(t){return{eventName:t.eventName,userId:t.userId||this.getEffectiveUserId(),properties:t.properties||{}}}async getAuthHeaders(){let t={"Content-Type":"application/json"};switch(this.config.authStrategy){case"NONE":break;case"SERVER_SIDE":t.Authorization=`Chase ${this.config.secretKey}`;break;case"JWT":if(this.config.authProvider){let e=await this.config.authProvider.getToken();t.Authorization=`Bearer ${e}`}break}return t}async delay(t){return new Promise(e=>setTimeout(e,t))}isRetriableError(t){if(t instanceof Error){let e=t.message.toLowerCase();if(e.includes("fetch failed")||e==="network error"||e.includes("timeout")||e.includes("connection"))return!0}if(typeof t=="object"&&t!==null&&"status"in t){let e=t.status;return e>=500||e===429}return!1}async sendEvents(t){if(t.length===0)return;let e;for(let r=0;r<=this.config.retryAttempts;r++)try{let n=await this.getAuthHeaders(),s=`${this.config.apiUrl}/v1/events/${encodeURIComponent(this.config.tenantId)}/multi`;this.log(`Sending ${t.length} events to ${s} (attempt ${r+1})`);let i=await fetch(s,{method:"POST",headers:n,body:JSON.stringify({events:t})});if(!i.ok){let o=`HTTP ${i.status}`;try{let c=await i.json();c?.message&&(o=c.message)}catch{let c=await i.text();c&&(o=c)}let a=new Error(`Failed to send events: ${o}`);throw a.status=i.status,a}this.log(`Successfully sent ${t.length} events`);return}catch(n){if(e=n,r===this.config.retryAttempts){let i=this.formatError(n,`sendEvents (attempt ${r+1}/${this.config.retryAttempts+1})`,t);this.logError(i);return}if(!this.isRetriableError(n)){let i=this.formatError(n,"sendEvents (non-retriable error)",t);this.logError(i);return}let s=this.config.retryDelay*Math.pow(2,r);this.log(`Retrying in ${s}ms after error:`,n),await this.delay(s)}}async sendEventsWithBeacon(t){if(t.length!==0)try{let e=await this.getAuthHeaders(),r=`${this.config.apiUrl}/v1/events/${encodeURIComponent(this.config.tenantId)}/multi`,n=JSON.stringify({events:t});if(typeof navigator<"u"&&"sendBeacon"in navigator){let s=new Blob([n],{type:"application/json"});if(navigator.sendBeacon(r,s)){this.log(`Successfully sent ${t.length} events via beacon`);return}}await fetch(r,{method:"POST",headers:e,body:n,keepalive:!0}),this.log(`Successfully sent ${t.length} events via fetch (keepalive)`)}catch(e){let r=this.formatError(e,"sendEventsWithBeacon",t);this.logError(r)}}startFlushTimer(){this.flushTimer&&clearInterval(this.flushTimer),this.flushTimer=window.setInterval(()=>{this.eventQueue.length>0&&this.flush().catch(t=>{let e=this.formatError(t,"auto-flush");this.logError(e)})},this.config.flushInterval)}setupBeforeUnload(){if(typeof window>"u")return;let t=()=>{if(this.eventQueue.length>0){let e=[...this.eventQueue];this.eventQueue=[];let r=this.chunkEvents(e,this.config.maxEventsPerRequest);r.length>0&&this.sendEventsWithBeacon(r[0]).catch(()=>{})}};window.addEventListener("beforeunload",t),window.addEventListener("pagehide",t),document.addEventListener("visibilitychange",()=>{if(document.visibilityState==="hidden"&&this.eventQueue.length>0){let e=[...this.eventQueue];this.eventQueue=[];let r=this.chunkEvents(e,this.config.maxEventsPerRequest);r.length>0&&this.sendEventsWithBeacon(r[0]).catch(()=>{})}})}async track(t,e,r){try{if(this.isDestroyed){let o=new Error("Grain Analytics: Client has been destroyed"),a=this.formatError(o,"track (client destroyed)");this.logError(a);return}let n,s={};typeof t=="string"?(n={eventName:t,properties:e},s=r||{}):(n=t,s=e||{});let i=this.formatEvent(n);this.eventQueue.push(i),this.log(`Queued event: ${n.eventName}`,n.properties),(s.flush||this.eventQueue.length>=this.config.batchSize)&&await this.flush()}catch(n){let s=this.formatError(n,"track");this.logError(s)}}identify(t){this.log(`Identified user: ${t}`),this.globalUserId=t,this.persistentAnonymousUserId=null}setUserId(t){this.log(`Set global user ID: ${t}`),this.globalUserId=t,t&&(this.persistentAnonymousUserId=null)}getUserId(){return this.globalUserId}getEffectiveUserIdPublic(){return this.getEffectiveUserId()}async setProperty(t,e){try{if(this.isDestroyed){let o=new Error("Grain Analytics: Client has been destroyed"),a=this.formatError(o,"setProperty (client destroyed)");this.logError(a);return}let r=e?.userId||this.getEffectiveUserId(),n=Object.keys(t);if(n.length>4){let o=new Error("Grain Analytics: Maximum 4 properties allowed per request"),a=this.formatError(o,"setProperty (validation)");this.logError(a);return}if(n.length===0){let o=new Error("Grain Analytics: At least one property is required"),a=this.formatError(o,"setProperty (validation)");this.logError(a);return}let s={};for(let[o,a]of Object.entries(t))a==null?s[o]="":typeof a=="string"?s[o]=a:s[o]=JSON.stringify(a);let i={userId:r,...s};await this.sendProperties(i)}catch(r){let n=this.formatError(r,"setProperty");this.logError(n)}}async sendProperties(t){let e;for(let r=0;r<=this.config.retryAttempts;r++)try{let n=await this.getAuthHeaders(),s=`${this.config.apiUrl}/v1/events/${encodeURIComponent(this.config.tenantId)}/properties`;this.log(`Setting properties for user ${t.userId} (attempt ${r+1})`);let i=await fetch(s,{method:"POST",headers:n,body:JSON.stringify(t)});if(!i.ok){let o=`HTTP ${i.status}`;try{let c=await i.json();c?.message&&(o=c.message)}catch{let c=await i.text();c&&(o=c)}let a=new Error(`Failed to set properties: ${o}`);throw a.status=i.status,a}this.log(`Successfully set properties for user ${t.userId}`);return}catch(n){if(e=n,r===this.config.retryAttempts){let i=this.formatError(n,`sendProperties (attempt ${r+1}/${this.config.retryAttempts+1})`);this.logError(i);return}if(!this.isRetriableError(n)){let i=this.formatError(n,"sendProperties (non-retriable error)");this.logError(i);return}let s=this.config.retryDelay*Math.pow(2,r);this.log(`Retrying in ${s}ms after error:`,n),await this.delay(s)}}async trackLogin(t,e){try{return await this.track("login",t,e)}catch(r){let n=this.formatError(r,"trackLogin");this.logError(n)}}async trackSignup(t,e){try{return await this.track("signup",t,e)}catch(r){let n=this.formatError(r,"trackSignup");this.logError(n)}}async trackCheckout(t,e){try{return await this.track("checkout",t,e)}catch(r){let n=this.formatError(r,"trackCheckout");this.logError(n)}}async trackPageView(t,e){try{return await this.track("page_view",t,e)}catch(r){let n=this.formatError(r,"trackPageView");this.logError(n)}}async trackPurchase(t,e){try{return await this.track("purchase",t,e)}catch(r){let n=this.formatError(r,"trackPurchase");this.logError(n)}}async trackSearch(t,e){try{return await this.track("search",t,e)}catch(r){let n=this.formatError(r,"trackSearch");this.logError(n)}}async trackAddToCart(t,e){try{return await this.track("add_to_cart",t,e)}catch(r){let n=this.formatError(r,"trackAddToCart");this.logError(n)}}async trackRemoveFromCart(t,e){try{return await this.track("remove_from_cart",t,e)}catch(r){let n=this.formatError(r,"trackRemoveFromCart");this.logError(n)}}async flush(){try{if(this.eventQueue.length===0)return;let t=[...this.eventQueue];this.eventQueue=[];let e=this.chunkEvents(t,this.config.maxEventsPerRequest);for(let r of e)await this.sendEvents(r)}catch(t){let e=this.formatError(t,"flush");this.logError(e)}}initializeConfigCache(){if(!(!this.config.enableConfigCache||typeof window>"u"))try{let t=localStorage.getItem(this.config.configCacheKey);t&&(this.configCache=JSON.parse(t),this.log("Loaded configuration from cache:",this.configCache))}catch(t){this.log("Failed to load configuration cache:",t)}}saveConfigCache(t){if(!(!this.config.enableConfigCache||typeof window>"u"))try{localStorage.setItem(this.config.configCacheKey,JSON.stringify(t)),this.log("Saved configuration to cache:",t)}catch(e){this.log("Failed to save configuration cache:",e)}}getConfig(t){if(this.configCache?.configurations?.[t])return this.configCache.configurations[t];if(this.config.defaultConfigurations?.[t])return this.config.defaultConfigurations[t]}getAllConfigs(){let t={...this.config.defaultConfigurations};return this.configCache?.configurations&&Object.assign(t,this.configCache.configurations),t}async fetchConfig(t={}){try{if(this.isDestroyed){let o=new Error("Grain Analytics: Client has been destroyed"),a=this.formatError(o,"fetchConfig (client destroyed)");return this.logError(a),null}let e=t.userId||this.getEffectiveUserId(),r=t.immediateKeys||[],n=t.properties||{},s={userId:e,immediateKeys:r,properties:n},i;for(let o=0;o<=this.config.retryAttempts;o++)try{let a=await this.getAuthHeaders(),c=`${this.config.apiUrl}/v1/client/${encodeURIComponent(this.config.tenantId)}/config/configurations`;this.log(`Fetching configurations for user ${e} (attempt ${o+1})`);let f=await fetch(c,{method:"POST",headers:a,body:JSON.stringify(s)});if(!f.ok){let l=`HTTP ${f.status}`;try{let u=await f.json();u?.message&&(l=u.message)}catch{let u=await f.text();u&&(l=u)}let p=new Error(`Failed to fetch configurations: ${l}`);throw p.status=f.status,p}let d=await f.json();return d.configurations&&this.updateConfigCache(d,e),this.log(`Successfully fetched configurations for user ${e}:`,d),d}catch(a){if(i=a,o===this.config.retryAttempts){let f=this.formatError(a,`fetchConfig (attempt ${o+1}/${this.config.retryAttempts+1})`);return this.logError(f),null}if(!this.isRetriableError(a)){let f=this.formatError(a,"fetchConfig (non-retriable error)");return this.logError(f),null}let c=this.config.retryDelay*Math.pow(2,o);this.log(`Retrying config fetch in ${c}ms after error:`,a),await this.delay(c)}return null}catch(e){let r=this.formatError(e,"fetchConfig");return this.logError(r),null}}async getConfigAsync(t,e={}){try{if(!e.forceRefresh&&this.configCache?.configurations?.[t])return this.configCache.configurations[t];if(!e.forceRefresh&&this.config.defaultConfigurations?.[t])return this.config.defaultConfigurations[t];let r=await this.fetchConfig(e);return r?r.configurations[t]:this.config.defaultConfigurations?.[t]}catch(r){let n=this.formatError(r,"getConfigAsync");return this.logError(n),this.config.defaultConfigurations?.[t]}}async getAllConfigsAsync(t={}){try{if(!t.forceRefresh&&this.configCache?.configurations)return{...this.config.defaultConfigurations,...this.configCache.configurations};let e=await this.fetchConfig(t);return e?{...this.config.defaultConfigurations,...e.configurations}:{...this.config.defaultConfigurations}}catch(e){let r=this.formatError(e,"getAllConfigsAsync");return this.logError(r),{...this.config.defaultConfigurations}}}updateConfigCache(t,e){let r={configurations:t.configurations,snapshotId:t.snapshotId,timestamp:t.timestamp,userId:e},n=this.configCache?.configurations||{};this.configCache=r,this.saveConfigCache(r),JSON.stringify(n)!==JSON.stringify(t.configurations)&&this.notifyConfigChangeListeners(t.configurations)}addConfigChangeListener(t){this.configChangeListeners.push(t)}removeConfigChangeListener(t){let e=this.configChangeListeners.indexOf(t);e>-1&&this.configChangeListeners.splice(e,1)}notifyConfigChangeListeners(t){this.configChangeListeners.forEach(e=>{try{e(t)}catch(r){console.error("[Grain Analytics] Config change listener error:",r)}})}startConfigRefreshTimer(){this.configRefreshTimer&&clearInterval(this.configRefreshTimer),this.configRefreshTimer=window.setInterval(()=>{!this.isDestroyed&&this.globalUserId&&this.fetchConfig().catch(t=>{let e=this.formatError(t,"auto-config refresh");this.logError(e)})},this.config.configRefreshInterval)}stopConfigRefreshTimer(){this.configRefreshTimer&&(clearInterval(this.configRefreshTimer),this.configRefreshTimer=null)}async preloadConfig(t=[],e){try{if(!this.globalUserId){this.log("Cannot preload config: no user ID set");return}await this.fetchConfig({immediateKeys:t,properties:e})&&this.startConfigRefreshTimer()}catch(r){let n=this.formatError(r,"preloadConfig");this.logError(n)}}chunkEvents(t,e){let r=[];for(let n=0;n<t.length;n+=e)r.push(t.slice(n,n+e));return r}destroy(){if(this.isDestroyed=!0,this.flushTimer&&(clearInterval(this.flushTimer),this.flushTimer=null),this.stopConfigRefreshTimer(),this.configChangeListeners=[],this.eventQueue.length>0){let t=[...this.eventQueue];this.eventQueue=[];let e=this.chunkEvents(t,this.config.maxEventsPerRequest);if(e.length>0){this.sendEventsWithBeacon(e[0]).catch(()=>{});for(let r=1;r<e.length;r++)this.sendEventsWithBeacon(e[r]).catch(()=>{})}}}};function y(g){return new h(g)}var I=h;typeof window<"u"&&(window.Grain={GrainAnalytics:h,createGrainAnalytics:y});return w(b);})();
1
+ /* Grain Analytics Web SDK v1.7.1 | MIT License */
2
+ "use strict";var Grain=(()=>{var m=Object.defineProperty;var E=Object.getOwnPropertyDescriptor;var v=Object.getOwnPropertyNames;var C=Object.prototype.hasOwnProperty;var R=(g,t)=>{for(var e in t)m(g,e,{get:t[e],enumerable:!0})},P=(g,t,e,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of v(t))!C.call(g,n)&&n!==e&&m(g,n,{get:()=>t[n],enumerable:!(r=E(t,n))||r.enumerable});return g};var w=g=>P(m({},"__esModule",{value:!0}),g);var b={};R(b,{GrainAnalytics:()=>h,createGrainAnalytics:()=>y,default:()=>I});var h=class{constructor(t){this.eventQueue=[];this.flushTimer=null;this.isDestroyed=!1;this.globalUserId=null;this.persistentAnonymousUserId=null;this.configCache=null;this.configRefreshTimer=null;this.configChangeListeners=[];this.configFetchPromise=null;this.config={apiUrl:"https://api.grainql.com",authStrategy:"NONE",batchSize:50,flushInterval:5e3,retryAttempts:3,retryDelay:1e3,maxEventsPerRequest:160,debug:!1,defaultConfigurations:{},configCacheKey:"grain_config",configRefreshInterval:3e5,enableConfigCache:!0,...t,tenantId:t.tenantId},t.userId&&(this.globalUserId=t.userId),this.validateConfig(),this.initializePersistentAnonymousUserId(),this.setupBeforeUnload(),this.startFlushTimer(),this.initializeConfigCache()}validateConfig(){if(!this.config.tenantId)throw new Error("Grain Analytics: tenantId is required");if(this.config.authStrategy==="SERVER_SIDE"&&!this.config.secretKey)throw new Error("Grain Analytics: secretKey is required for SERVER_SIDE auth strategy");if(this.config.authStrategy==="JWT"&&!this.config.authProvider)throw new Error("Grain Analytics: authProvider is required for JWT auth strategy")}generateUUID(){return typeof crypto<"u"&&crypto.randomUUID?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(t){let e=Math.random()*16|0;return(t==="x"?e:e&3|8).toString(16)})}formatAnonymousUserId(t){return`temp:${t.replace(/-/g,"")}`}initializePersistentAnonymousUserId(){if(typeof window>"u")return;let t=`grain_anonymous_user_id_${this.config.tenantId}`;try{let e=localStorage.getItem(t);if(e)this.persistentAnonymousUserId=e,this.log("Loaded persistent anonymous user ID:",this.persistentAnonymousUserId);else{let r=this.generateUUID();this.persistentAnonymousUserId=this.formatAnonymousUserId(r),localStorage.setItem(t,this.persistentAnonymousUserId),this.log("Generated new persistent anonymous user ID:",this.persistentAnonymousUserId)}}catch(e){this.log("Failed to initialize persistent anonymous user ID:",e);let r=this.generateUUID();this.persistentAnonymousUserId=this.formatAnonymousUserId(r)}}getEffectiveUserId(){return this.globalUserId||this.persistentAnonymousUserId||"anonymous"}log(...t){this.config.debug&&console.log("[Grain Analytics]",...t)}createErrorDigest(t){let e=[...new Set(t.map(i=>i.eventName))],r=[...new Set(t.map(i=>i.userId))],n=0,s=0;return t.forEach(i=>{let o=i.properties||{};n+=Object.keys(o).length,s+=JSON.stringify(i).length}),{eventCount:t.length,totalProperties:n,totalSize:s,eventNames:e,userIds:r}}formatError(t,e,r){let n=r?this.createErrorDigest(r):{eventCount:0,totalProperties:0,totalSize:0,eventNames:[],userIds:[]},s="UNKNOWN_ERROR",i="An unknown error occurred";if(t instanceof Error)i=t.message,i.includes("fetch failed")||i.includes("network error")?s="NETWORK_ERROR":i.includes("timeout")?s="TIMEOUT_ERROR":i.includes("HTTP 4")?s="CLIENT_ERROR":i.includes("HTTP 5")?s="SERVER_ERROR":i.includes("JSON")?s="PARSE_ERROR":i.includes("auth")||i.includes("unauthorized")?s="AUTH_ERROR":i.includes("rate limit")||i.includes("429")?s="RATE_LIMIT_ERROR":s="GENERAL_ERROR";else if(typeof t=="string")i=t,s="STRING_ERROR";else if(t&&typeof t=="object"&&"status"in t){let o=t.status;s=`HTTP_${o}`,i=`HTTP ${o} error`}return{code:s,message:i,digest:n,timestamp:new Date().toISOString(),context:e,originalError:t}}logError(t){let{code:e,message:r,digest:n,timestamp:s,context:i}=t,o={"\u{1F6A8} Grain Analytics Error":{"Error Code":e,Message:r,Context:i,Timestamp:s,"Event Digest":{Events:n.eventCount,Properties:n.totalProperties,"Size (bytes)":n.totalSize,"Event Names":n.eventNames.length>0?n.eventNames.join(", "):"None","User IDs":n.userIds.length>0?n.userIds.slice(0,3).join(", ")+(n.userIds.length>3?"...":""):"None"}}};console.error("\u{1F6A8} Grain Analytics Error:",o),this.config.debug&&console.error(`[Grain Analytics] ${e}: ${r} (${i}) - Events: ${n.eventCount}, Props: ${n.totalProperties}, Size: ${n.totalSize}B`)}async safeExecute(t,e,r){try{return await t()}catch(n){let s=this.formatError(n,e,r);return this.logError(s),null}}formatEvent(t){return{eventName:t.eventName,userId:t.userId||this.getEffectiveUserId(),properties:t.properties||{}}}async getAuthHeaders(){let t={"Content-Type":"application/json"};switch(this.config.authStrategy){case"NONE":break;case"SERVER_SIDE":t.Authorization=`Chase ${this.config.secretKey}`;break;case"JWT":if(this.config.authProvider){let e=await this.config.authProvider.getToken();t.Authorization=`Bearer ${e}`}break}return t}async delay(t){return new Promise(e=>setTimeout(e,t))}isRetriableError(t){if(t instanceof Error){let e=t.message.toLowerCase();if(e.includes("fetch failed")||e==="network error"||e.includes("timeout")||e.includes("connection"))return!0}if(typeof t=="object"&&t!==null&&"status"in t){let e=t.status;return e>=500||e===429}return!1}async sendEvents(t){if(t.length===0)return;let e;for(let r=0;r<=this.config.retryAttempts;r++)try{let n=await this.getAuthHeaders(),s=`${this.config.apiUrl}/v1/events/${encodeURIComponent(this.config.tenantId)}/multi`;this.log(`Sending ${t.length} events to ${s} (attempt ${r+1})`);let i=await fetch(s,{method:"POST",headers:n,body:JSON.stringify(t)});if(!i.ok){let o=`HTTP ${i.status}`;try{let c=await i.json();c?.message&&(o=c.message)}catch{let c=await i.text();c&&(o=c)}let a=new Error(`Failed to send events: ${o}`);throw a.status=i.status,a}this.log(`Successfully sent ${t.length} events`);return}catch(n){if(e=n,r===this.config.retryAttempts){let i=this.formatError(n,`sendEvents (attempt ${r+1}/${this.config.retryAttempts+1})`,t);this.logError(i);return}if(!this.isRetriableError(n)){let i=this.formatError(n,"sendEvents (non-retriable error)",t);this.logError(i);return}let s=this.config.retryDelay*Math.pow(2,r);this.log(`Retrying in ${s}ms after error:`,n),await this.delay(s)}}async sendEventsWithBeacon(t){if(t.length!==0)try{let e=await this.getAuthHeaders(),r=`${this.config.apiUrl}/v1/events/${encodeURIComponent(this.config.tenantId)}/multi`,n=JSON.stringify({events:t});if(typeof navigator<"u"&&"sendBeacon"in navigator){let s=new Blob([n],{type:"application/json"});if(navigator.sendBeacon(r,s)){this.log(`Successfully sent ${t.length} events via beacon`);return}}await fetch(r,{method:"POST",headers:e,body:n,keepalive:!0}),this.log(`Successfully sent ${t.length} events via fetch (keepalive)`)}catch(e){let r=this.formatError(e,"sendEventsWithBeacon",t);this.logError(r)}}startFlushTimer(){this.flushTimer&&clearInterval(this.flushTimer),this.flushTimer=window.setInterval(()=>{this.eventQueue.length>0&&this.flush().catch(t=>{let e=this.formatError(t,"auto-flush");this.logError(e)})},this.config.flushInterval)}setupBeforeUnload(){if(typeof window>"u")return;let t=()=>{if(this.eventQueue.length>0){let e=[...this.eventQueue];this.eventQueue=[];let r=this.chunkEvents(e,this.config.maxEventsPerRequest);r.length>0&&this.sendEventsWithBeacon(r[0]).catch(()=>{})}};window.addEventListener("beforeunload",t),window.addEventListener("pagehide",t),document.addEventListener("visibilitychange",()=>{if(document.visibilityState==="hidden"&&this.eventQueue.length>0){let e=[...this.eventQueue];this.eventQueue=[];let r=this.chunkEvents(e,this.config.maxEventsPerRequest);r.length>0&&this.sendEventsWithBeacon(r[0]).catch(()=>{})}})}async track(t,e,r){try{if(this.isDestroyed){let o=new Error("Grain Analytics: Client has been destroyed"),a=this.formatError(o,"track (client destroyed)");this.logError(a);return}let n,s={};typeof t=="string"?(n={eventName:t,properties:e},s=r||{}):(n=t,s=e||{});let i=this.formatEvent(n);this.eventQueue.push(i),this.log(`Queued event: ${n.eventName}`,n.properties),(s.flush||this.eventQueue.length>=this.config.batchSize)&&await this.flush()}catch(n){let s=this.formatError(n,"track");this.logError(s)}}identify(t){this.log(`Identified user: ${t}`),this.globalUserId=t,this.persistentAnonymousUserId=null}setUserId(t){this.log(`Set global user ID: ${t}`),this.globalUserId=t,t&&(this.persistentAnonymousUserId=null)}getUserId(){return this.globalUserId}getEffectiveUserIdPublic(){return this.getEffectiveUserId()}async setProperty(t,e){try{if(this.isDestroyed){let o=new Error("Grain Analytics: Client has been destroyed"),a=this.formatError(o,"setProperty (client destroyed)");this.logError(a);return}let r=e?.userId||this.getEffectiveUserId(),n=Object.keys(t);if(n.length>4){let o=new Error("Grain Analytics: Maximum 4 properties allowed per request"),a=this.formatError(o,"setProperty (validation)");this.logError(a);return}if(n.length===0){let o=new Error("Grain Analytics: At least one property is required"),a=this.formatError(o,"setProperty (validation)");this.logError(a);return}let s={};for(let[o,a]of Object.entries(t))a==null?s[o]="":typeof a=="string"?s[o]=a:s[o]=JSON.stringify(a);let i={userId:r,...s};await this.sendProperties(i)}catch(r){let n=this.formatError(r,"setProperty");this.logError(n)}}async sendProperties(t){let e;for(let r=0;r<=this.config.retryAttempts;r++)try{let n=await this.getAuthHeaders(),s=`${this.config.apiUrl}/v1/events/${encodeURIComponent(this.config.tenantId)}/properties`;this.log(`Setting properties for user ${t.userId} (attempt ${r+1})`);let i=await fetch(s,{method:"POST",headers:n,body:JSON.stringify(t)});if(!i.ok){let o=`HTTP ${i.status}`;try{let c=await i.json();c?.message&&(o=c.message)}catch{let c=await i.text();c&&(o=c)}let a=new Error(`Failed to set properties: ${o}`);throw a.status=i.status,a}this.log(`Successfully set properties for user ${t.userId}`);return}catch(n){if(e=n,r===this.config.retryAttempts){let i=this.formatError(n,`sendProperties (attempt ${r+1}/${this.config.retryAttempts+1})`);this.logError(i);return}if(!this.isRetriableError(n)){let i=this.formatError(n,"sendProperties (non-retriable error)");this.logError(i);return}let s=this.config.retryDelay*Math.pow(2,r);this.log(`Retrying in ${s}ms after error:`,n),await this.delay(s)}}async trackLogin(t,e){try{return await this.track("login",t,e)}catch(r){let n=this.formatError(r,"trackLogin");this.logError(n)}}async trackSignup(t,e){try{return await this.track("signup",t,e)}catch(r){let n=this.formatError(r,"trackSignup");this.logError(n)}}async trackCheckout(t,e){try{return await this.track("checkout",t,e)}catch(r){let n=this.formatError(r,"trackCheckout");this.logError(n)}}async trackPageView(t,e){try{return await this.track("page_view",t,e)}catch(r){let n=this.formatError(r,"trackPageView");this.logError(n)}}async trackPurchase(t,e){try{return await this.track("purchase",t,e)}catch(r){let n=this.formatError(r,"trackPurchase");this.logError(n)}}async trackSearch(t,e){try{return await this.track("search",t,e)}catch(r){let n=this.formatError(r,"trackSearch");this.logError(n)}}async trackAddToCart(t,e){try{return await this.track("add_to_cart",t,e)}catch(r){let n=this.formatError(r,"trackAddToCart");this.logError(n)}}async trackRemoveFromCart(t,e){try{return await this.track("remove_from_cart",t,e)}catch(r){let n=this.formatError(r,"trackRemoveFromCart");this.logError(n)}}async flush(){try{if(this.eventQueue.length===0)return;let t=[...this.eventQueue];this.eventQueue=[];let e=this.chunkEvents(t,this.config.maxEventsPerRequest);for(let r of e)await this.sendEvents(r)}catch(t){let e=this.formatError(t,"flush");this.logError(e)}}initializeConfigCache(){if(!(!this.config.enableConfigCache||typeof window>"u"))try{let t=localStorage.getItem(this.config.configCacheKey);t&&(this.configCache=JSON.parse(t),this.log("Loaded configuration from cache:",this.configCache))}catch(t){this.log("Failed to load configuration cache:",t)}}saveConfigCache(t){if(!(!this.config.enableConfigCache||typeof window>"u"))try{localStorage.setItem(this.config.configCacheKey,JSON.stringify(t)),this.log("Saved configuration to cache:",t)}catch(e){this.log("Failed to save configuration cache:",e)}}getConfig(t){if(this.configCache?.configurations?.[t])return this.configCache.configurations[t];if(this.config.defaultConfigurations?.[t])return this.config.defaultConfigurations[t]}getAllConfigs(){let t={...this.config.defaultConfigurations};return this.configCache?.configurations&&Object.assign(t,this.configCache.configurations),t}async fetchConfig(t={}){try{if(this.isDestroyed){let o=new Error("Grain Analytics: Client has been destroyed"),a=this.formatError(o,"fetchConfig (client destroyed)");return this.logError(a),null}let e=t.userId||this.getEffectiveUserId(),r=t.immediateKeys||[],n=t.properties||{},s={userId:e,immediateKeys:r,properties:n},i;for(let o=0;o<=this.config.retryAttempts;o++)try{let a=await this.getAuthHeaders(),c=`${this.config.apiUrl}/v1/client/${encodeURIComponent(this.config.tenantId)}/config/configurations`;this.log(`Fetching configurations for user ${e} (attempt ${o+1})`);let f=await fetch(c,{method:"POST",headers:a,body:JSON.stringify(s)});if(!f.ok){let l=`HTTP ${f.status}`;try{let u=await f.json();u?.message&&(l=u.message)}catch{let u=await f.text();u&&(l=u)}let p=new Error(`Failed to fetch configurations: ${l}`);throw p.status=f.status,p}let d=await f.json();return d.configurations&&this.updateConfigCache(d,e),this.log(`Successfully fetched configurations for user ${e}:`,d),d}catch(a){if(i=a,o===this.config.retryAttempts){let f=this.formatError(a,`fetchConfig (attempt ${o+1}/${this.config.retryAttempts+1})`);return this.logError(f),null}if(!this.isRetriableError(a)){let f=this.formatError(a,"fetchConfig (non-retriable error)");return this.logError(f),null}let c=this.config.retryDelay*Math.pow(2,o);this.log(`Retrying config fetch in ${c}ms after error:`,a),await this.delay(c)}return null}catch(e){let r=this.formatError(e,"fetchConfig");return this.logError(r),null}}async getConfigAsync(t,e={}){try{if(!e.forceRefresh&&this.configCache?.configurations?.[t])return this.configCache.configurations[t];if(!e.forceRefresh&&this.config.defaultConfigurations?.[t])return this.config.defaultConfigurations[t];let r=await this.fetchConfig(e);return r?r.configurations[t]:this.config.defaultConfigurations?.[t]}catch(r){let n=this.formatError(r,"getConfigAsync");return this.logError(n),this.config.defaultConfigurations?.[t]}}async getAllConfigsAsync(t={}){try{if(!t.forceRefresh&&this.configCache?.configurations)return{...this.config.defaultConfigurations,...this.configCache.configurations};let e=await this.fetchConfig(t);return e?{...this.config.defaultConfigurations,...e.configurations}:{...this.config.defaultConfigurations}}catch(e){let r=this.formatError(e,"getAllConfigsAsync");return this.logError(r),{...this.config.defaultConfigurations}}}updateConfigCache(t,e){let r={configurations:t.configurations,snapshotId:t.snapshotId,timestamp:t.timestamp,userId:e},n=this.configCache?.configurations||{};this.configCache=r,this.saveConfigCache(r),JSON.stringify(n)!==JSON.stringify(t.configurations)&&this.notifyConfigChangeListeners(t.configurations)}addConfigChangeListener(t){this.configChangeListeners.push(t)}removeConfigChangeListener(t){let e=this.configChangeListeners.indexOf(t);e>-1&&this.configChangeListeners.splice(e,1)}notifyConfigChangeListeners(t){this.configChangeListeners.forEach(e=>{try{e(t)}catch(r){console.error("[Grain Analytics] Config change listener error:",r)}})}startConfigRefreshTimer(){this.configRefreshTimer&&clearInterval(this.configRefreshTimer),this.configRefreshTimer=window.setInterval(()=>{!this.isDestroyed&&this.globalUserId&&this.fetchConfig().catch(t=>{let e=this.formatError(t,"auto-config refresh");this.logError(e)})},this.config.configRefreshInterval)}stopConfigRefreshTimer(){this.configRefreshTimer&&(clearInterval(this.configRefreshTimer),this.configRefreshTimer=null)}async preloadConfig(t=[],e){try{if(!this.globalUserId){this.log("Cannot preload config: no user ID set");return}await this.fetchConfig({immediateKeys:t,properties:e})&&this.startConfigRefreshTimer()}catch(r){let n=this.formatError(r,"preloadConfig");this.logError(n)}}chunkEvents(t,e){let r=[];for(let n=0;n<t.length;n+=e)r.push(t.slice(n,n+e));return r}destroy(){if(this.isDestroyed=!0,this.flushTimer&&(clearInterval(this.flushTimer),this.flushTimer=null),this.stopConfigRefreshTimer(),this.configChangeListeners=[],this.eventQueue.length>0){let t=[...this.eventQueue];this.eventQueue=[];let e=this.chunkEvents(t,this.config.maxEventsPerRequest);if(e.length>0){this.sendEventsWithBeacon(e[0]).catch(()=>{});for(let r=1;r<e.length;r++)this.sendEventsWithBeacon(e[r]).catch(()=>{})}}}};function y(g){return new h(g)}var I=h;typeof window<"u"&&(window.Grain={GrainAnalytics:h,createGrainAnalytics:y});return w(b);})();
3
3
  //# sourceMappingURL=index.global.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/index.ts"],
4
- "sourcesContent": ["/**\n * Grain Analytics Web SDK\n * A lightweight, dependency-free TypeScript SDK for sending analytics events to Grain's REST API\n */\n\nexport interface GrainEvent {\n eventName: string;\n userId?: string;\n properties?: Record<string, unknown>;\n timestamp?: Date;\n}\n\nexport interface EventPayload {\n eventName: string;\n userId: string;\n properties: Record<string, unknown>;\n}\n\nexport type AuthStrategy = 'NONE' | 'SERVER_SIDE' | 'JWT';\n\nexport interface AuthProvider {\n getToken(): Promise<string> | string;\n}\n\nexport interface GrainConfig {\n tenantId: string;\n apiUrl?: string;\n authStrategy?: AuthStrategy;\n secretKey?: string; // For SERVER_SIDE auth\n authProvider?: AuthProvider; // For JWT auth\n userId?: string; // Global user ID for all events\n batchSize?: number;\n flushInterval?: number; // milliseconds\n retryAttempts?: number;\n retryDelay?: number; // milliseconds\n maxEventsPerRequest?: number; // Maximum events to send in a single API request\n debug?: boolean;\n // Remote Config options\n defaultConfigurations?: Record<string, string>; // Default values for configurations\n configCacheKey?: string; // Custom cache key for configurations\n configRefreshInterval?: number; // Auto-refresh interval in milliseconds (default: 5 minutes)\n enableConfigCache?: boolean; // Enable/disable configuration caching (default: true)\n}\n\nexport interface SendEventOptions {\n flush?: boolean; // Force immediate send\n}\n\nexport interface SetPropertyOptions {\n userId?: string; // Override global userId\n}\n\nexport interface PropertyPayload {\n userId: string;\n [key: string]: string; // All property values must be strings\n}\n\n// Remote Config interfaces\nexport interface RemoteConfigRequest {\n userId: string;\n immediateKeys: string[];\n properties?: Record<string, string>;\n}\n\nexport interface RemoteConfigResponse {\n userId: string;\n snapshotId: string;\n configurations: Record<string, string>;\n isFinal: boolean;\n qualifiedSegments: string[];\n qualifiedRuleSets: string[];\n timestamp: string;\n isFromCache: boolean;\n}\n\nexport interface RemoteConfigOptions {\n immediateKeys?: string[];\n properties?: Record<string, string>;\n userId?: string; // Override global userId\n forceRefresh?: boolean; // Force fetch from API, bypass cache\n}\n\nexport interface RemoteConfigCache {\n configurations: Record<string, string>;\n snapshotId: string;\n timestamp: string;\n userId: string;\n}\n\nexport type ConfigChangeListener = (configurations: Record<string, string>) => void;\n\n// Template event interfaces\nexport interface LoginEventProperties extends Record<string, unknown> {\n method?: string; // 'email', 'google', 'facebook', etc.\n success?: boolean;\n errorMessage?: string;\n loginAttempt?: number;\n rememberMe?: boolean;\n twoFactorEnabled?: boolean;\n}\n\nexport interface SignupEventProperties extends Record<string, unknown> {\n method?: string; // 'email', 'google', 'facebook', etc.\n source?: string; // 'landing_page', 'referral', 'ad', etc.\n plan?: string; // 'free', 'pro', 'enterprise', etc.\n success?: boolean;\n errorMessage?: string;\n}\n\nexport interface CheckoutEventProperties extends Record<string, unknown> {\n orderId?: string;\n total?: number;\n currency?: string;\n items?: Array<{\n id: string;\n name: string;\n price: number;\n quantity: number;\n }>;\n paymentMethod?: string; // 'credit_card', 'paypal', 'stripe', etc.\n success?: boolean;\n errorMessage?: string;\n couponCode?: string;\n discount?: number;\n}\n\nexport interface PageViewEventProperties extends Record<string, unknown> {\n page?: string;\n title?: string;\n referrer?: string;\n url?: string;\n userAgent?: string;\n screenResolution?: string;\n viewportSize?: string;\n}\n\nexport interface PurchaseEventProperties extends Record<string, unknown> {\n orderId?: string;\n total?: number;\n currency?: string;\n items?: Array<{\n id: string;\n name: string;\n price: number;\n quantity: number;\n category?: string;\n }>;\n paymentMethod?: string;\n shippingMethod?: string;\n tax?: number;\n shipping?: number;\n discount?: number;\n couponCode?: string;\n}\n\nexport interface SearchEventProperties extends Record<string, unknown> {\n query?: string;\n results?: number;\n filters?: Record<string, unknown>;\n sortBy?: string;\n category?: string;\n success?: boolean;\n}\n\nexport interface AddToCartEventProperties extends Record<string, unknown> {\n itemId?: string;\n itemName?: string;\n price?: number;\n quantity?: number;\n currency?: string;\n category?: string;\n variant?: string;\n}\n\nexport interface RemoveFromCartEventProperties extends Record<string, unknown> {\n itemId?: string;\n itemName?: string;\n price?: number;\n quantity?: number;\n currency?: string;\n category?: string;\n variant?: string;\n}\n\n// Error handling interfaces\nexport interface ErrorDigest {\n eventCount: number;\n totalProperties: number;\n totalSize: number;\n eventNames: string[];\n userIds: string[];\n}\n\nexport interface FormattedError {\n code: string;\n message: string;\n digest: ErrorDigest;\n timestamp: string;\n context: string;\n originalError?: unknown;\n}\n\n/**\n * Main Grain Analytics client\n */\ntype RequiredConfig = Required<Omit<GrainConfig, 'secretKey' | 'authProvider' | 'userId'>> & {\n secretKey?: string;\n authProvider?: AuthProvider;\n userId?: string;\n};\n\nexport class GrainAnalytics {\n private config: RequiredConfig;\n private eventQueue: EventPayload[] = [];\n private flushTimer: number | null = null;\n private isDestroyed = false;\n private globalUserId: string | null = null;\n private persistentAnonymousUserId: string | null = null;\n // Remote Config properties\n private configCache: RemoteConfigCache | null = null;\n private configRefreshTimer: number | null = null;\n private configChangeListeners: ConfigChangeListener[] = [];\n private configFetchPromise: Promise<RemoteConfigResponse> | null = null;\n\n constructor(config: GrainConfig) {\n this.config = {\n apiUrl: 'https://api.grainql.com',\n authStrategy: 'NONE',\n batchSize: 50,\n flushInterval: 5000, // 5 seconds\n retryAttempts: 3,\n retryDelay: 1000, // 1 second\n maxEventsPerRequest: 160, // Maximum events per API request\n debug: false,\n // Remote Config defaults\n defaultConfigurations: {},\n configCacheKey: 'grain_config',\n configRefreshInterval: 300000, // 5 minutes\n enableConfigCache: true,\n ...config,\n tenantId: config.tenantId,\n };\n\n // Set global userId if provided in config\n if (config.userId) {\n this.globalUserId = config.userId;\n }\n\n this.validateConfig();\n this.initializePersistentAnonymousUserId();\n this.setupBeforeUnload();\n this.startFlushTimer();\n this.initializeConfigCache();\n }\n\n private validateConfig(): void {\n if (!this.config.tenantId) {\n throw new Error('Grain Analytics: tenantId is required');\n }\n\n if (this.config.authStrategy === 'SERVER_SIDE' && !this.config.secretKey) {\n throw new Error('Grain Analytics: secretKey is required for SERVER_SIDE auth strategy');\n }\n\n if (this.config.authStrategy === 'JWT' && !this.config.authProvider) {\n throw new Error('Grain Analytics: authProvider is required for JWT auth strategy');\n }\n }\n\n /**\n * Generate a UUID v4 string\n */\n private generateUUID(): string {\n if (typeof crypto !== 'undefined' && crypto.randomUUID) {\n return crypto.randomUUID();\n }\n \n // Fallback for environments without crypto.randomUUID\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n const r = Math.random() * 16 | 0;\n const v = c === 'x' ? r : (r & 0x3 | 0x8);\n return v.toString(16);\n });\n }\n\n /**\n * Format UUID for anonymous user ID (remove dashes and prefix with 'temp:')\n */\n private formatAnonymousUserId(uuid: string): string {\n return `temp:${uuid.replace(/-/g, '')}`;\n }\n\n /**\n * Initialize persistent anonymous user ID from localStorage or create new one\n */\n private initializePersistentAnonymousUserId(): void {\n if (typeof window === 'undefined') return;\n\n const storageKey = `grain_anonymous_user_id_${this.config.tenantId}`;\n \n try {\n const stored = localStorage.getItem(storageKey);\n if (stored) {\n this.persistentAnonymousUserId = stored;\n this.log('Loaded persistent anonymous user ID:', this.persistentAnonymousUserId);\n } else {\n // Generate new anonymous user ID\n const uuid = this.generateUUID();\n this.persistentAnonymousUserId = this.formatAnonymousUserId(uuid);\n localStorage.setItem(storageKey, this.persistentAnonymousUserId);\n this.log('Generated new persistent anonymous user ID:', this.persistentAnonymousUserId);\n }\n } catch (error) {\n this.log('Failed to initialize persistent anonymous user ID:', error);\n // Fallback: generate temporary ID without persistence\n const uuid = this.generateUUID();\n this.persistentAnonymousUserId = this.formatAnonymousUserId(uuid);\n }\n }\n\n /**\n * Get the effective user ID (global userId or persistent anonymous ID)\n */\n private getEffectiveUserId(): string {\n return this.globalUserId || this.persistentAnonymousUserId || 'anonymous';\n }\n\n private log(...args: unknown[]): void {\n if (this.config.debug) {\n console.log('[Grain Analytics]', ...args);\n }\n }\n\n /**\n * Create error digest from events\n */\n private createErrorDigest(events: EventPayload[]): ErrorDigest {\n const eventNames = [...new Set(events.map(e => e.eventName))];\n const userIds = [...new Set(events.map(e => e.userId))];\n \n let totalProperties = 0;\n let totalSize = 0;\n \n events.forEach(event => {\n const properties = event.properties || {};\n totalProperties += Object.keys(properties).length;\n totalSize += JSON.stringify(event).length;\n });\n\n return {\n eventCount: events.length,\n totalProperties,\n totalSize,\n eventNames,\n userIds,\n };\n }\n\n /**\n * Format error with beautiful structure\n */\n private formatError(\n error: unknown,\n context: string,\n events?: EventPayload[]\n ): FormattedError {\n const digest = events ? this.createErrorDigest(events) : {\n eventCount: 0,\n totalProperties: 0,\n totalSize: 0,\n eventNames: [],\n userIds: [],\n };\n\n let code = 'UNKNOWN_ERROR';\n let message = 'An unknown error occurred';\n\n if (error instanceof Error) {\n message = error.message;\n \n // Determine error code based on error type and message\n if (message.includes('fetch failed') || message.includes('network error')) {\n code = 'NETWORK_ERROR';\n } else if (message.includes('timeout')) {\n code = 'TIMEOUT_ERROR';\n } else if (message.includes('HTTP 4')) {\n code = 'CLIENT_ERROR';\n } else if (message.includes('HTTP 5')) {\n code = 'SERVER_ERROR';\n } else if (message.includes('JSON')) {\n code = 'PARSE_ERROR';\n } else if (message.includes('auth') || message.includes('unauthorized')) {\n code = 'AUTH_ERROR';\n } else if (message.includes('rate limit') || message.includes('429')) {\n code = 'RATE_LIMIT_ERROR';\n } else {\n code = 'GENERAL_ERROR';\n }\n } else if (typeof error === 'string') {\n message = error;\n code = 'STRING_ERROR';\n } else if (error && typeof error === 'object' && 'status' in error) {\n const status = (error as { status: number }).status;\n code = `HTTP_${status}`;\n message = `HTTP ${status} error`;\n }\n\n return {\n code,\n message,\n digest,\n timestamp: new Date().toISOString(),\n context,\n originalError: error,\n };\n }\n\n /**\n * Log formatted error gracefully\n */\n private logError(formattedError: FormattedError): void {\n const { code, message, digest, timestamp, context } = formattedError;\n \n const errorOutput = {\n '\uD83D\uDEA8 Grain Analytics Error': {\n 'Error Code': code,\n 'Message': message,\n 'Context': context,\n 'Timestamp': timestamp,\n 'Event Digest': {\n 'Events': digest.eventCount,\n 'Properties': digest.totalProperties,\n 'Size (bytes)': digest.totalSize,\n 'Event Names': digest.eventNames.length > 0 ? digest.eventNames.join(', ') : 'None',\n 'User IDs': digest.userIds.length > 0 ? digest.userIds.slice(0, 3).join(', ') + (digest.userIds.length > 3 ? '...' : '') : 'None',\n }\n }\n };\n\n console.error('\uD83D\uDEA8 Grain Analytics Error:', errorOutput);\n \n // Also log in a more compact format for debugging\n if (this.config.debug) {\n console.error(`[Grain Analytics] ${code}: ${message} (${context}) - Events: ${digest.eventCount}, Props: ${digest.totalProperties}, Size: ${digest.totalSize}B`);\n }\n }\n\n /**\n * Safely execute a function with error handling\n */\n private async safeExecute<T>(\n fn: () => Promise<T>,\n context: string,\n events?: EventPayload[]\n ): Promise<T | null> {\n try {\n return await fn();\n } catch (error) {\n const formattedError = this.formatError(error, context, events);\n this.logError(formattedError);\n return null;\n }\n }\n\n private formatEvent(event: GrainEvent): EventPayload {\n return {\n eventName: event.eventName,\n userId: event.userId || this.getEffectiveUserId(),\n properties: event.properties || {},\n };\n }\n\n private async getAuthHeaders(): Promise<Record<string, string>> {\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n };\n\n switch (this.config.authStrategy) {\n case 'NONE':\n break;\n case 'SERVER_SIDE':\n headers['Authorization'] = `Chase ${this.config.secretKey}`;\n break;\n case 'JWT':\n if (this.config.authProvider) {\n const token = await this.config.authProvider.getToken();\n headers['Authorization'] = `Bearer ${token}`;\n }\n break;\n }\n\n return headers;\n }\n\n private async delay(ms: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, ms));\n }\n\n private isRetriableError(error: unknown): boolean {\n if (error instanceof Error) {\n // Check for specific network or fetch errors\n const message = error.message.toLowerCase();\n if (message.includes('fetch failed')) return true;\n if (message === 'network error') return true; // Exact match to avoid \"Non-network error\"\n if (message.includes('timeout')) return true;\n if (message.includes('connection')) return true;\n }\n \n // Check for HTTP status codes that are retriable\n if (typeof error === 'object' && error !== null && 'status' in error) {\n const status = (error as { status: number }).status;\n return status >= 500 || status === 429; // Server errors or rate limiting\n }\n \n return false;\n }\n\n private async sendEvents(events: EventPayload[]): Promise<void> {\n if (events.length === 0) return;\n\n let lastError: unknown;\n\n for (let attempt = 0; attempt <= this.config.retryAttempts; attempt++) {\n try {\n const headers = await this.getAuthHeaders();\n const url = `${this.config.apiUrl}/v1/events/${encodeURIComponent(this.config.tenantId)}/multi`;\n\n this.log(`Sending ${events.length} events to ${url} (attempt ${attempt + 1})`);\n\n const response = await fetch(url, {\n method: 'POST',\n headers,\n body: JSON.stringify({ events }),\n });\n\n if (!response.ok) {\n let errorMessage = `HTTP ${response.status}`;\n try {\n const errorBody = await response.json();\n if (errorBody?.message) {\n errorMessage = errorBody.message;\n }\n } catch {\n const errorText = await response.text();\n if (errorText) {\n errorMessage = errorText;\n }\n }\n \n const error = new Error(`Failed to send events: ${errorMessage}`) as Error & { status?: number };\n error.status = response.status;\n throw error;\n }\n\n this.log(`Successfully sent ${events.length} events`);\n return; // Success, exit retry loop\n \n } catch (error) {\n lastError = error;\n \n if (attempt === this.config.retryAttempts) {\n // Last attempt, don't retry - log error gracefully\n const formattedError = this.formatError(error, `sendEvents (attempt ${attempt + 1}/${this.config.retryAttempts + 1})`, events);\n this.logError(formattedError);\n return; // Don't throw, just return gracefully\n }\n \n if (!this.isRetriableError(error)) {\n // Non-retriable error, don't retry - log error gracefully\n const formattedError = this.formatError(error, `sendEvents (non-retriable error)`, events);\n this.logError(formattedError);\n return; // Don't throw, just return gracefully\n }\n \n const delayMs = this.config.retryDelay * Math.pow(2, attempt); // Exponential backoff\n this.log(`Retrying in ${delayMs}ms after error:`, error);\n await this.delay(delayMs);\n }\n }\n }\n\n private async sendEventsWithBeacon(events: EventPayload[]): Promise<void> {\n if (events.length === 0) return;\n\n try {\n const headers = await this.getAuthHeaders();\n const url = `${this.config.apiUrl}/v1/events/${encodeURIComponent(this.config.tenantId)}/multi`;\n\n const body = JSON.stringify({ events });\n\n // Try beacon API first (more reliable for page unload)\n if (typeof navigator !== 'undefined' && 'sendBeacon' in navigator) {\n const blob = new Blob([body], { type: 'application/json' });\n const success = navigator.sendBeacon(url, blob);\n \n if (success) {\n this.log(`Successfully sent ${events.length} events via beacon`);\n return;\n }\n }\n\n // Fallback to fetch with keepalive\n await fetch(url, {\n method: 'POST',\n headers,\n body,\n keepalive: true,\n });\n\n this.log(`Successfully sent ${events.length} events via fetch (keepalive)`);\n } catch (error) {\n // Log error gracefully for beacon failures (page unload scenarios)\n const formattedError = this.formatError(error, 'sendEventsWithBeacon', events);\n this.logError(formattedError);\n }\n }\n\n private startFlushTimer(): void {\n if (this.flushTimer) {\n clearInterval(this.flushTimer);\n }\n\n this.flushTimer = window.setInterval(() => {\n if (this.eventQueue.length > 0) {\n this.flush().catch((error) => {\n const formattedError = this.formatError(error, 'auto-flush');\n this.logError(formattedError);\n });\n }\n }, this.config.flushInterval);\n }\n\n private setupBeforeUnload(): void {\n if (typeof window === 'undefined') return;\n\n const handleBeforeUnload = () => {\n if (this.eventQueue.length > 0) {\n // Use beacon API for reliable delivery during page unload\n const eventsToSend = [...this.eventQueue];\n this.eventQueue = [];\n \n const chunks = this.chunkEvents(eventsToSend, this.config.maxEventsPerRequest);\n \n // Send first chunk with beacon (most important for page unload)\n if (chunks.length > 0) {\n this.sendEventsWithBeacon(chunks[0]).catch(() => {\n // Silently fail - page is unloading\n });\n }\n }\n };\n\n // Handle page unload\n window.addEventListener('beforeunload', handleBeforeUnload);\n window.addEventListener('pagehide', handleBeforeUnload);\n \n // Handle visibility change (page hidden)\n document.addEventListener('visibilitychange', () => {\n if (document.visibilityState === 'hidden' && this.eventQueue.length > 0) {\n const eventsToSend = [...this.eventQueue];\n this.eventQueue = [];\n \n const chunks = this.chunkEvents(eventsToSend, this.config.maxEventsPerRequest);\n \n // Send first chunk with beacon (most important for page hidden)\n if (chunks.length > 0) {\n this.sendEventsWithBeacon(chunks[0]).catch(() => {\n // Silently fail\n });\n }\n }\n });\n }\n\n /**\n * Track an analytics event\n */\n async track(eventName: string, properties?: Record<string, unknown>, options?: SendEventOptions): Promise<void>;\n async track(event: GrainEvent, options?: SendEventOptions): Promise<void>;\n async track(\n eventOrName: string | GrainEvent,\n propertiesOrOptions?: Record<string, unknown> | SendEventOptions,\n options?: SendEventOptions\n ): Promise<void> {\n try {\n if (this.isDestroyed) {\n const error = new Error('Grain Analytics: Client has been destroyed');\n const formattedError = this.formatError(error, 'track (client destroyed)');\n this.logError(formattedError);\n return;\n }\n\n let event: GrainEvent;\n let opts: SendEventOptions = {};\n\n if (typeof eventOrName === 'string') {\n event = {\n eventName: eventOrName,\n properties: propertiesOrOptions as Record<string, unknown>,\n };\n opts = options || {};\n } else {\n event = eventOrName;\n opts = propertiesOrOptions as SendEventOptions || {};\n }\n\n const formattedEvent = this.formatEvent(event);\n this.eventQueue.push(formattedEvent);\n\n this.log(`Queued event: ${event.eventName}`, event.properties);\n\n // Check if we should flush immediately\n if (opts.flush || this.eventQueue.length >= this.config.batchSize) {\n await this.flush();\n }\n } catch (error) {\n const formattedError = this.formatError(error, 'track');\n this.logError(formattedError);\n }\n }\n\n /**\n * Identify a user (sets userId for subsequent events)\n */\n identify(userId: string): void {\n this.log(`Identified user: ${userId}`);\n this.globalUserId = userId;\n // Clear persistent anonymous user ID since we now have a real user ID\n this.persistentAnonymousUserId = null;\n }\n\n /**\n * Set global user ID for all subsequent events\n */\n setUserId(userId: string | null): void {\n this.log(`Set global user ID: ${userId}`);\n this.globalUserId = userId;\n // Clear persistent anonymous user ID if setting a real user ID\n if (userId) {\n this.persistentAnonymousUserId = null;\n }\n }\n\n /**\n * Get current global user ID\n */\n getUserId(): string | null {\n return this.globalUserId;\n }\n\n /**\n * Get current effective user ID (global userId or persistent anonymous ID)\n */\n getEffectiveUserIdPublic(): string {\n return this.getEffectiveUserId();\n }\n\n /**\n * Set user properties\n */\n async setProperty(properties: Record<string, unknown>, options?: SetPropertyOptions): Promise<void> {\n try {\n if (this.isDestroyed) {\n const error = new Error('Grain Analytics: Client has been destroyed');\n const formattedError = this.formatError(error, 'setProperty (client destroyed)');\n this.logError(formattedError);\n return;\n }\n\n const userId = options?.userId || this.getEffectiveUserId();\n \n // Validate property count (max 4 properties)\n const propertyKeys = Object.keys(properties);\n if (propertyKeys.length > 4) {\n const error = new Error('Grain Analytics: Maximum 4 properties allowed per request');\n const formattedError = this.formatError(error, 'setProperty (validation)');\n this.logError(formattedError);\n return;\n }\n\n if (propertyKeys.length === 0) {\n const error = new Error('Grain Analytics: At least one property is required');\n const formattedError = this.formatError(error, 'setProperty (validation)');\n this.logError(formattedError);\n return;\n }\n\n // Serialize all values to strings\n const serializedProperties: Record<string, string> = {};\n for (const [key, value] of Object.entries(properties)) {\n if (value === null || value === undefined) {\n serializedProperties[key] = '';\n } else if (typeof value === 'string') {\n serializedProperties[key] = value;\n } else {\n serializedProperties[key] = JSON.stringify(value);\n }\n }\n\n const payload: PropertyPayload = {\n userId,\n ...serializedProperties,\n };\n\n await this.sendProperties(payload);\n } catch (error) {\n const formattedError = this.formatError(error, 'setProperty');\n this.logError(formattedError);\n }\n }\n\n /**\n * Send properties to the API\n */\n private async sendProperties(payload: PropertyPayload): Promise<void> {\n let lastError: unknown;\n\n for (let attempt = 0; attempt <= this.config.retryAttempts; attempt++) {\n try {\n const headers = await this.getAuthHeaders();\n const url = `${this.config.apiUrl}/v1/events/${encodeURIComponent(this.config.tenantId)}/properties`;\n\n this.log(`Setting properties for user ${payload.userId} (attempt ${attempt + 1})`);\n\n const response = await fetch(url, {\n method: 'POST',\n headers,\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n let errorMessage = `HTTP ${response.status}`;\n try {\n const errorBody = await response.json();\n if (errorBody?.message) {\n errorMessage = errorBody.message;\n }\n } catch {\n const errorText = await response.text();\n if (errorText) {\n errorMessage = errorText;\n }\n }\n \n const error = new Error(`Failed to set properties: ${errorMessage}`) as Error & { status?: number };\n error.status = response.status;\n throw error;\n }\n\n this.log(`Successfully set properties for user ${payload.userId}`);\n return; // Success, exit retry loop\n \n } catch (error) {\n lastError = error;\n \n if (attempt === this.config.retryAttempts) {\n // Last attempt, don't retry - log error gracefully\n const formattedError = this.formatError(error, `sendProperties (attempt ${attempt + 1}/${this.config.retryAttempts + 1})`);\n this.logError(formattedError);\n return; // Don't throw, just return gracefully\n }\n \n if (!this.isRetriableError(error)) {\n // Non-retriable error, don't retry - log error gracefully\n const formattedError = this.formatError(error, 'sendProperties (non-retriable error)');\n this.logError(formattedError);\n return; // Don't throw, just return gracefully\n }\n \n const delayMs = this.config.retryDelay * Math.pow(2, attempt); // Exponential backoff\n this.log(`Retrying in ${delayMs}ms after error:`, error);\n await this.delay(delayMs);\n }\n }\n }\n\n // Template event methods\n\n /**\n * Track user login event\n */\n async trackLogin(properties?: LoginEventProperties, options?: SendEventOptions): Promise<void> {\n try {\n return await this.track('login', properties, options);\n } catch (error) {\n const formattedError = this.formatError(error, 'trackLogin');\n this.logError(formattedError);\n }\n }\n\n /**\n * Track user signup event\n */\n async trackSignup(properties?: SignupEventProperties, options?: SendEventOptions): Promise<void> {\n try {\n return await this.track('signup', properties, options);\n } catch (error) {\n const formattedError = this.formatError(error, 'trackSignup');\n this.logError(formattedError);\n }\n }\n\n /**\n * Track checkout event\n */\n async trackCheckout(properties?: CheckoutEventProperties, options?: SendEventOptions): Promise<void> {\n try {\n return await this.track('checkout', properties, options);\n } catch (error) {\n const formattedError = this.formatError(error, 'trackCheckout');\n this.logError(formattedError);\n }\n }\n\n /**\n * Track page view event\n */\n async trackPageView(properties?: PageViewEventProperties, options?: SendEventOptions): Promise<void> {\n try {\n return await this.track('page_view', properties, options);\n } catch (error) {\n const formattedError = this.formatError(error, 'trackPageView');\n this.logError(formattedError);\n }\n }\n\n /**\n * Track purchase event\n */\n async trackPurchase(properties?: PurchaseEventProperties, options?: SendEventOptions): Promise<void> {\n try {\n return await this.track('purchase', properties, options);\n } catch (error) {\n const formattedError = this.formatError(error, 'trackPurchase');\n this.logError(formattedError);\n }\n }\n\n /**\n * Track search event\n */\n async trackSearch(properties?: SearchEventProperties, options?: SendEventOptions): Promise<void> {\n try {\n return await this.track('search', properties, options);\n } catch (error) {\n const formattedError = this.formatError(error, 'trackSearch');\n this.logError(formattedError);\n }\n }\n\n /**\n * Track add to cart event\n */\n async trackAddToCart(properties?: AddToCartEventProperties, options?: SendEventOptions): Promise<void> {\n try {\n return await this.track('add_to_cart', properties, options);\n } catch (error) {\n const formattedError = this.formatError(error, 'trackAddToCart');\n this.logError(formattedError);\n }\n }\n\n /**\n * Track remove from cart event\n */\n async trackRemoveFromCart(properties?: RemoveFromCartEventProperties, options?: SendEventOptions): Promise<void> {\n try {\n return await this.track('remove_from_cart', properties, options);\n } catch (error) {\n const formattedError = this.formatError(error, 'trackRemoveFromCart');\n this.logError(formattedError);\n }\n }\n\n /**\n * Manually flush all queued events\n */\n async flush(): Promise<void> {\n try {\n if (this.eventQueue.length === 0) return;\n\n const eventsToSend = [...this.eventQueue];\n this.eventQueue = [];\n\n // Split events into chunks to respect maxEventsPerRequest limit\n const chunks = this.chunkEvents(eventsToSend, this.config.maxEventsPerRequest);\n \n // Send all chunks sequentially to maintain order\n for (const chunk of chunks) {\n await this.sendEvents(chunk);\n }\n } catch (error) {\n const formattedError = this.formatError(error, 'flush');\n this.logError(formattedError);\n }\n }\n\n // Remote Config Methods\n\n /**\n * Initialize configuration cache from localStorage\n */\n private initializeConfigCache(): void {\n if (!this.config.enableConfigCache || typeof window === 'undefined') return;\n\n try {\n const cached = localStorage.getItem(this.config.configCacheKey);\n if (cached) {\n this.configCache = JSON.parse(cached);\n this.log('Loaded configuration from cache:', this.configCache);\n }\n } catch (error) {\n this.log('Failed to load configuration cache:', error);\n }\n }\n\n /**\n * Save configuration cache to localStorage\n */\n private saveConfigCache(cache: RemoteConfigCache): void {\n if (!this.config.enableConfigCache || typeof window === 'undefined') return;\n\n try {\n localStorage.setItem(this.config.configCacheKey, JSON.stringify(cache));\n this.log('Saved configuration to cache:', cache);\n } catch (error) {\n this.log('Failed to save configuration cache:', error);\n }\n }\n\n /**\n * Get configuration value with fallback to defaults\n */\n getConfig(key: string): string | undefined {\n // First check cache\n if (this.configCache?.configurations?.[key]) {\n return this.configCache.configurations[key];\n }\n\n // Then check defaults\n if (this.config.defaultConfigurations?.[key]) {\n return this.config.defaultConfigurations[key];\n }\n\n return undefined;\n }\n\n /**\n * Get all configurations with fallback to defaults\n */\n getAllConfigs(): Record<string, string> {\n const configs = { ...this.config.defaultConfigurations };\n \n if (this.configCache?.configurations) {\n Object.assign(configs, this.configCache.configurations);\n }\n\n return configs;\n }\n\n /**\n * Fetch configurations from API\n */\n async fetchConfig(options: RemoteConfigOptions = {}): Promise<RemoteConfigResponse | null> {\n try {\n if (this.isDestroyed) {\n const error = new Error('Grain Analytics: Client has been destroyed');\n const formattedError = this.formatError(error, 'fetchConfig (client destroyed)');\n this.logError(formattedError);\n return null;\n }\n\n const userId = options.userId || this.getEffectiveUserId();\n const immediateKeys = options.immediateKeys || [];\n const properties = options.properties || {};\n\n const request: RemoteConfigRequest = {\n userId,\n immediateKeys,\n properties,\n };\n\n let lastError: unknown;\n\n for (let attempt = 0; attempt <= this.config.retryAttempts; attempt++) {\n try {\n const headers = await this.getAuthHeaders();\n const url = `${this.config.apiUrl}/v1/client/${encodeURIComponent(this.config.tenantId)}/config/configurations`;\n\n this.log(`Fetching configurations for user ${userId} (attempt ${attempt + 1})`);\n\n const response = await fetch(url, {\n method: 'POST',\n headers,\n body: JSON.stringify(request),\n });\n\n if (!response.ok) {\n let errorMessage = `HTTP ${response.status}`;\n try {\n const errorBody = await response.json();\n if (errorBody?.message) {\n errorMessage = errorBody.message;\n }\n } catch {\n const errorText = await response.text();\n if (errorText) {\n errorMessage = errorText;\n }\n }\n \n const error = new Error(`Failed to fetch configurations: ${errorMessage}`) as Error & { status?: number };\n error.status = response.status;\n throw error;\n }\n\n const configResponse: RemoteConfigResponse = await response.json();\n \n // Update cache if successful\n if (configResponse.configurations) {\n this.updateConfigCache(configResponse, userId);\n }\n\n this.log(`Successfully fetched configurations for user ${userId}:`, configResponse);\n return configResponse;\n \n } catch (error) {\n lastError = error;\n \n if (attempt === this.config.retryAttempts) {\n // Last attempt, don't retry - log error gracefully\n const formattedError = this.formatError(error, `fetchConfig (attempt ${attempt + 1}/${this.config.retryAttempts + 1})`);\n this.logError(formattedError);\n return null;\n }\n \n if (!this.isRetriableError(error)) {\n // Non-retriable error, don't retry - log error gracefully\n const formattedError = this.formatError(error, 'fetchConfig (non-retriable error)');\n this.logError(formattedError);\n return null;\n }\n \n const delayMs = this.config.retryDelay * Math.pow(2, attempt);\n this.log(`Retrying config fetch in ${delayMs}ms after error:`, error);\n await this.delay(delayMs);\n }\n }\n\n return null;\n } catch (error) {\n const formattedError = this.formatError(error, 'fetchConfig');\n this.logError(formattedError);\n return null;\n }\n }\n\n /**\n * Get configuration asynchronously (cache-first with fallback to API)\n */\n async getConfigAsync(key: string, options: RemoteConfigOptions = {}): Promise<string | undefined> {\n try {\n // Return immediately if we have it in cache and not forcing refresh\n if (!options.forceRefresh && this.configCache?.configurations?.[key]) {\n return this.configCache.configurations[key];\n }\n\n // Return default if available and not forcing refresh\n if (!options.forceRefresh && this.config.defaultConfigurations?.[key]) {\n return this.config.defaultConfigurations[key];\n }\n\n // Fetch from API\n const response = await this.fetchConfig(options);\n if (response) {\n return response.configurations[key];\n }\n \n // Return default as fallback\n return this.config.defaultConfigurations?.[key];\n } catch (error) {\n const formattedError = this.formatError(error, 'getConfigAsync');\n this.logError(formattedError);\n // Return default as fallback\n return this.config.defaultConfigurations?.[key];\n }\n }\n\n /**\n * Get all configurations asynchronously (cache-first with fallback to API)\n */\n async getAllConfigsAsync(options: RemoteConfigOptions = {}): Promise<Record<string, string>> {\n try {\n // Return cache if available and not forcing refresh\n if (!options.forceRefresh && this.configCache?.configurations) {\n return { ...this.config.defaultConfigurations, ...this.configCache.configurations };\n }\n\n // Fetch from API\n const response = await this.fetchConfig(options);\n if (response) {\n return { ...this.config.defaultConfigurations, ...response.configurations };\n }\n \n // Return defaults as fallback\n return { ...this.config.defaultConfigurations };\n } catch (error) {\n const formattedError = this.formatError(error, 'getAllConfigsAsync');\n this.logError(formattedError);\n // Return defaults as fallback\n return { ...this.config.defaultConfigurations };\n }\n }\n\n /**\n * Update configuration cache and notify listeners\n */\n private updateConfigCache(response: RemoteConfigResponse, userId: string): void {\n const newCache: RemoteConfigCache = {\n configurations: response.configurations,\n snapshotId: response.snapshotId,\n timestamp: response.timestamp,\n userId,\n };\n\n const oldConfigs = this.configCache?.configurations || {};\n this.configCache = newCache;\n this.saveConfigCache(newCache);\n\n // Notify listeners if configurations changed\n if (JSON.stringify(oldConfigs) !== JSON.stringify(response.configurations)) {\n this.notifyConfigChangeListeners(response.configurations);\n }\n }\n\n /**\n * Add configuration change listener\n */\n addConfigChangeListener(listener: ConfigChangeListener): void {\n this.configChangeListeners.push(listener);\n }\n\n /**\n * Remove configuration change listener\n */\n removeConfigChangeListener(listener: ConfigChangeListener): void {\n const index = this.configChangeListeners.indexOf(listener);\n if (index > -1) {\n this.configChangeListeners.splice(index, 1);\n }\n }\n\n /**\n * Notify all configuration change listeners\n */\n private notifyConfigChangeListeners(configurations: Record<string, string>): void {\n this.configChangeListeners.forEach(listener => {\n try {\n listener(configurations);\n } catch (error) {\n console.error('[Grain Analytics] Config change listener error:', error);\n }\n });\n }\n\n /**\n * Start automatic configuration refresh timer\n */\n private startConfigRefreshTimer(): void {\n if (this.configRefreshTimer) {\n clearInterval(this.configRefreshTimer);\n }\n\n this.configRefreshTimer = window.setInterval(() => {\n if (!this.isDestroyed && this.globalUserId) {\n this.fetchConfig().catch((error) => {\n const formattedError = this.formatError(error, 'auto-config refresh');\n this.logError(formattedError);\n });\n }\n }, this.config.configRefreshInterval);\n }\n\n /**\n * Stop automatic configuration refresh timer\n */\n private stopConfigRefreshTimer(): void {\n if (this.configRefreshTimer) {\n clearInterval(this.configRefreshTimer);\n this.configRefreshTimer = null;\n }\n }\n\n /**\n * Preload configurations for immediate access\n */\n async preloadConfig(immediateKeys: string[] = [], properties?: Record<string, string>): Promise<void> {\n try {\n if (!this.globalUserId) {\n this.log('Cannot preload config: no user ID set');\n return;\n }\n\n const response = await this.fetchConfig({ immediateKeys, properties });\n if (response) {\n this.startConfigRefreshTimer();\n }\n } catch (error) {\n const formattedError = this.formatError(error, 'preloadConfig');\n this.logError(formattedError);\n }\n }\n\n /**\n * Split events array into chunks of specified size\n */\n private chunkEvents(events: EventPayload[], chunkSize: number): EventPayload[][] {\n const chunks: EventPayload[][] = [];\n for (let i = 0; i < events.length; i += chunkSize) {\n chunks.push(events.slice(i, i + chunkSize));\n }\n return chunks;\n }\n\n /**\n * Destroy the client and clean up resources\n */\n destroy(): void {\n this.isDestroyed = true;\n \n if (this.flushTimer) {\n clearInterval(this.flushTimer);\n this.flushTimer = null;\n }\n\n // Stop config refresh timer\n this.stopConfigRefreshTimer();\n\n // Clear config change listeners\n this.configChangeListeners = [];\n\n // Send any remaining events (in chunks if necessary)\n if (this.eventQueue.length > 0) {\n const eventsToSend = [...this.eventQueue];\n this.eventQueue = [];\n \n const chunks = this.chunkEvents(eventsToSend, this.config.maxEventsPerRequest);\n \n // Send first chunk with beacon (most important for page unload)\n if (chunks.length > 0) {\n this.sendEventsWithBeacon(chunks[0]).catch(() => {\n // Silently fail during cleanup\n });\n \n // If there are more chunks, try to send them with regular fetch\n for (let i = 1; i < chunks.length; i++) {\n this.sendEventsWithBeacon(chunks[i]).catch(() => {\n // Silently fail during cleanup\n });\n }\n }\n }\n }\n}\n\n/**\n * Create a new Grain Analytics client\n */\nexport function createGrainAnalytics(config: GrainConfig): GrainAnalytics {\n return new GrainAnalytics(config);\n}\n\n// Default export for convenience\nexport default GrainAnalytics;\n\n// Global interface for IIFE build\ndeclare global {\n interface Window {\n Grain?: {\n GrainAnalytics: typeof GrainAnalytics;\n createGrainAnalytics: typeof createGrainAnalytics;\n };\n }\n}\n\n// Auto-setup for IIFE build\nif (typeof window !== 'undefined') {\n window.Grain = {\n GrainAnalytics,\n createGrainAnalytics,\n };\n}"],
5
- "mappings": ";ybAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,oBAAAE,EAAA,yBAAAC,EAAA,YAAAC,IAmNO,IAAMF,EAAN,KAAqB,CAa1B,YAAYG,EAAqB,CAXjC,KAAQ,WAA6B,CAAC,EACtC,KAAQ,WAA4B,KACpC,KAAQ,YAAc,GACtB,KAAQ,aAA8B,KACtC,KAAQ,0BAA2C,KAEnD,KAAQ,YAAwC,KAChD,KAAQ,mBAAoC,KAC5C,KAAQ,sBAAgD,CAAC,EACzD,KAAQ,mBAA2D,KAGjE,KAAK,OAAS,CACZ,OAAQ,0BACR,aAAc,OACd,UAAW,GACX,cAAe,IACf,cAAe,EACf,WAAY,IACZ,oBAAqB,IACrB,MAAO,GAEP,sBAAuB,CAAC,EACxB,eAAgB,eAChB,sBAAuB,IACvB,kBAAmB,GACnB,GAAGA,EACH,SAAUA,EAAO,QACnB,EAGIA,EAAO,SACT,KAAK,aAAeA,EAAO,QAG7B,KAAK,eAAe,EACpB,KAAK,oCAAoC,EACzC,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,CAC7B,CAEQ,gBAAuB,CAC7B,GAAI,CAAC,KAAK,OAAO,SACf,MAAM,IAAI,MAAM,uCAAuC,EAGzD,GAAI,KAAK,OAAO,eAAiB,eAAiB,CAAC,KAAK,OAAO,UAC7D,MAAM,IAAI,MAAM,sEAAsE,EAGxF,GAAI,KAAK,OAAO,eAAiB,OAAS,CAAC,KAAK,OAAO,aACrD,MAAM,IAAI,MAAM,iEAAiE,CAErF,CAKQ,cAAuB,CAC7B,OAAI,OAAO,OAAW,KAAe,OAAO,WACnC,OAAO,WAAW,EAIpB,uCAAuC,QAAQ,QAAS,SAASC,EAAG,CACzE,IAAMC,EAAI,KAAK,OAAO,EAAI,GAAK,EAE/B,OADUD,IAAM,IAAMC,EAAKA,EAAI,EAAM,GAC5B,SAAS,EAAE,CACtB,CAAC,CACH,CAKQ,sBAAsBC,EAAsB,CAClD,MAAO,QAAQA,EAAK,QAAQ,KAAM,EAAE,CAAC,EACvC,CAKQ,qCAA4C,CAClD,GAAI,OAAO,OAAW,IAAa,OAEnC,IAAMC,EAAa,2BAA2B,KAAK,OAAO,QAAQ,GAElE,GAAI,CACF,IAAMC,EAAS,aAAa,QAAQD,CAAU,EAC9C,GAAIC,EACF,KAAK,0BAA4BA,EACjC,KAAK,IAAI,uCAAwC,KAAK,yBAAyB,MAC1E,CAEL,IAAMF,EAAO,KAAK,aAAa,EAC/B,KAAK,0BAA4B,KAAK,sBAAsBA,CAAI,EAChE,aAAa,QAAQC,EAAY,KAAK,yBAAyB,EAC/D,KAAK,IAAI,8CAA+C,KAAK,yBAAyB,CACxF,CACF,OAASE,EAAO,CACd,KAAK,IAAI,qDAAsDA,CAAK,EAEpE,IAAMH,EAAO,KAAK,aAAa,EAC/B,KAAK,0BAA4B,KAAK,sBAAsBA,CAAI,CAClE,CACF,CAKQ,oBAA6B,CACnC,OAAO,KAAK,cAAgB,KAAK,2BAA6B,WAChE,CAEQ,OAAOI,EAAuB,CAChC,KAAK,OAAO,OACd,QAAQ,IAAI,oBAAqB,GAAGA,CAAI,CAE5C,CAKQ,kBAAkBC,EAAqC,CAC7D,IAAMC,EAAa,CAAC,GAAG,IAAI,IAAID,EAAO,IAAIE,GAAKA,EAAE,SAAS,CAAC,CAAC,EACtDC,EAAU,CAAC,GAAG,IAAI,IAAIH,EAAO,IAAIE,GAAKA,EAAE,MAAM,CAAC,CAAC,EAElDE,EAAkB,EAClBC,EAAY,EAEhB,OAAAL,EAAO,QAAQM,GAAS,CACtB,IAAMC,EAAaD,EAAM,YAAc,CAAC,EACxCF,GAAmB,OAAO,KAAKG,CAAU,EAAE,OAC3CF,GAAa,KAAK,UAAUC,CAAK,EAAE,MACrC,CAAC,EAEM,CACL,WAAYN,EAAO,OACnB,gBAAAI,EACA,UAAAC,EACA,WAAAJ,EACA,QAAAE,CACF,CACF,CAKQ,YACNL,EACAU,EACAR,EACgB,CAChB,IAAMS,EAAST,EAAS,KAAK,kBAAkBA,CAAM,EAAI,CACvD,WAAY,EACZ,gBAAiB,EACjB,UAAW,EACX,WAAY,CAAC,EACb,QAAS,CAAC,CACZ,EAEIU,EAAO,gBACPC,EAAU,4BAEd,GAAIb,aAAiB,MACnBa,EAAUb,EAAM,QAGZa,EAAQ,SAAS,cAAc,GAAKA,EAAQ,SAAS,eAAe,EACtED,EAAO,gBACEC,EAAQ,SAAS,SAAS,EACnCD,EAAO,gBACEC,EAAQ,SAAS,QAAQ,EAClCD,EAAO,eACEC,EAAQ,SAAS,QAAQ,EAClCD,EAAO,eACEC,EAAQ,SAAS,MAAM,EAChCD,EAAO,cACEC,EAAQ,SAAS,MAAM,GAAKA,EAAQ,SAAS,cAAc,EACpED,EAAO,aACEC,EAAQ,SAAS,YAAY,GAAKA,EAAQ,SAAS,KAAK,EACjED,EAAO,mBAEPA,EAAO,wBAEA,OAAOZ,GAAU,SAC1Ba,EAAUb,EACVY,EAAO,uBACEZ,GAAS,OAAOA,GAAU,UAAY,WAAYA,EAAO,CAClE,IAAMc,EAAUd,EAA6B,OAC7CY,EAAO,QAAQE,CAAM,GACrBD,EAAU,QAAQC,CAAM,QAC1B,CAEA,MAAO,CACL,KAAAF,EACA,QAAAC,EACA,OAAAF,EACA,UAAW,IAAI,KAAK,EAAE,YAAY,EAClC,QAAAD,EACA,cAAeV,CACjB,CACF,CAKQ,SAASe,EAAsC,CACrD,GAAM,CAAE,KAAAH,EAAM,QAAAC,EAAS,OAAAF,EAAQ,UAAAK,EAAW,QAAAN,CAAQ,EAAIK,EAEhDE,EAAc,CAClB,kCAA4B,CAC1B,aAAcL,EACd,QAAWC,EACX,QAAWH,EACX,UAAaM,EACb,eAAgB,CACd,OAAUL,EAAO,WACjB,WAAcA,EAAO,gBACrB,eAAgBA,EAAO,UACvB,cAAeA,EAAO,WAAW,OAAS,EAAIA,EAAO,WAAW,KAAK,IAAI,EAAI,OAC7E,WAAYA,EAAO,QAAQ,OAAS,EAAIA,EAAO,QAAQ,MAAM,EAAG,CAAC,EAAE,KAAK,IAAI,GAAKA,EAAO,QAAQ,OAAS,EAAI,MAAQ,IAAM,MAC7H,CACF,CACF,EAEA,QAAQ,MAAM,mCAA6BM,CAAW,EAGlD,KAAK,OAAO,OACd,QAAQ,MAAM,qBAAqBL,CAAI,KAAKC,CAAO,KAAKH,CAAO,eAAeC,EAAO,UAAU,YAAYA,EAAO,eAAe,WAAWA,EAAO,SAAS,GAAG,CAEnK,CAKA,MAAc,YACZO,EACAR,EACAR,EACmB,CACnB,GAAI,CACF,OAAO,MAAMgB,EAAG,CAClB,OAASlB,EAAO,CACd,IAAMe,EAAiB,KAAK,YAAYf,EAAOU,EAASR,CAAM,EAC9D,YAAK,SAASa,CAAc,EACrB,IACT,CACF,CAEQ,YAAYP,EAAiC,CACnD,MAAO,CACL,UAAWA,EAAM,UACjB,OAAQA,EAAM,QAAU,KAAK,mBAAmB,EAChD,WAAYA,EAAM,YAAc,CAAC,CACnC,CACF,CAEA,MAAc,gBAAkD,CAC9D,IAAMW,EAAkC,CACtC,eAAgB,kBAClB,EAEA,OAAQ,KAAK,OAAO,aAAc,CAChC,IAAK,OACH,MACF,IAAK,cACHA,EAAQ,cAAmB,SAAS,KAAK,OAAO,SAAS,GACzD,MACF,IAAK,MACH,GAAI,KAAK,OAAO,aAAc,CAC5B,IAAMC,EAAQ,MAAM,KAAK,OAAO,aAAa,SAAS,EACtDD,EAAQ,cAAmB,UAAUC,CAAK,EAC5C,CACA,KACJ,CAEA,OAAOD,CACT,CAEA,MAAc,MAAME,EAA2B,CAC7C,OAAO,IAAI,QAAQC,GAAW,WAAWA,EAASD,CAAE,CAAC,CACvD,CAEQ,iBAAiBrB,EAAyB,CAChD,GAAIA,aAAiB,MAAO,CAE1B,IAAMa,EAAUb,EAAM,QAAQ,YAAY,EAI1C,GAHIa,EAAQ,SAAS,cAAc,GAC/BA,IAAY,iBACZA,EAAQ,SAAS,SAAS,GAC1BA,EAAQ,SAAS,YAAY,EAAG,MAAO,EAC7C,CAGA,GAAI,OAAOb,GAAU,UAAYA,IAAU,MAAQ,WAAYA,EAAO,CACpE,IAAMc,EAAUd,EAA6B,OAC7C,OAAOc,GAAU,KAAOA,IAAW,GACrC,CAEA,MAAO,EACT,CAEA,MAAc,WAAWZ,EAAuC,CAC9D,GAAIA,EAAO,SAAW,EAAG,OAEzB,IAAIqB,EAEJ,QAASC,EAAU,EAAGA,GAAW,KAAK,OAAO,cAAeA,IAC1D,GAAI,CACF,IAAML,EAAU,MAAM,KAAK,eAAe,EACpCM,EAAM,GAAG,KAAK,OAAO,MAAM,cAAc,mBAAmB,KAAK,OAAO,QAAQ,CAAC,SAEvF,KAAK,IAAI,WAAWvB,EAAO,MAAM,cAAcuB,CAAG,aAAaD,EAAU,CAAC,GAAG,EAE7E,IAAME,EAAW,MAAM,MAAMD,EAAK,CAChC,OAAQ,OACR,QAAAN,EACA,KAAM,KAAK,UAAU,CAAE,OAAAjB,CAAO,CAAC,CACjC,CAAC,EAED,GAAI,CAACwB,EAAS,GAAI,CAChB,IAAIC,EAAe,QAAQD,EAAS,MAAM,GAC1C,GAAI,CACF,IAAME,EAAY,MAAMF,EAAS,KAAK,EAClCE,GAAW,UACbD,EAAeC,EAAU,QAE7B,MAAQ,CACN,IAAMC,EAAY,MAAMH,EAAS,KAAK,EAClCG,IACFF,EAAeE,EAEnB,CAEA,IAAM7B,EAAQ,IAAI,MAAM,0BAA0B2B,CAAY,EAAE,EAChE,MAAA3B,EAAM,OAAS0B,EAAS,OAClB1B,CACR,CAEA,KAAK,IAAI,qBAAqBE,EAAO,MAAM,SAAS,EACpD,MAEF,OAASF,EAAO,CAGd,GAFAuB,EAAYvB,EAERwB,IAAY,KAAK,OAAO,cAAe,CAEzC,IAAMT,EAAiB,KAAK,YAAYf,EAAO,uBAAuBwB,EAAU,CAAC,IAAI,KAAK,OAAO,cAAgB,CAAC,IAAKtB,CAAM,EAC7H,KAAK,SAASa,CAAc,EAC5B,MACF,CAEA,GAAI,CAAC,KAAK,iBAAiBf,CAAK,EAAG,CAEjC,IAAMe,EAAiB,KAAK,YAAYf,EAAO,mCAAoCE,CAAM,EACzF,KAAK,SAASa,CAAc,EAC5B,MACF,CAEA,IAAMe,EAAU,KAAK,OAAO,WAAa,KAAK,IAAI,EAAGN,CAAO,EAC5D,KAAK,IAAI,eAAeM,CAAO,kBAAmB9B,CAAK,EACvD,MAAM,KAAK,MAAM8B,CAAO,CAC1B,CAEJ,CAEA,MAAc,qBAAqB5B,EAAuC,CACxE,GAAIA,EAAO,SAAW,EAEtB,GAAI,CACF,IAAMiB,EAAU,MAAM,KAAK,eAAe,EACpCM,EAAM,GAAG,KAAK,OAAO,MAAM,cAAc,mBAAmB,KAAK,OAAO,QAAQ,CAAC,SAEjFM,EAAO,KAAK,UAAU,CAAE,OAAA7B,CAAO,CAAC,EAGtC,GAAI,OAAO,UAAc,KAAe,eAAgB,UAAW,CACjE,IAAM8B,EAAO,IAAI,KAAK,CAACD,CAAI,EAAG,CAAE,KAAM,kBAAmB,CAAC,EAG1D,GAFgB,UAAU,WAAWN,EAAKO,CAAI,EAEjC,CACX,KAAK,IAAI,qBAAqB9B,EAAO,MAAM,oBAAoB,EAC/D,MACF,CACF,CAGA,MAAM,MAAMuB,EAAK,CACf,OAAQ,OACR,QAAAN,EACA,KAAAY,EACA,UAAW,EACb,CAAC,EAED,KAAK,IAAI,qBAAqB7B,EAAO,MAAM,+BAA+B,CAC5E,OAASF,EAAO,CAEd,IAAMe,EAAiB,KAAK,YAAYf,EAAO,uBAAwBE,CAAM,EAC7E,KAAK,SAASa,CAAc,CAC9B,CACF,CAEQ,iBAAwB,CAC1B,KAAK,YACP,cAAc,KAAK,UAAU,EAG/B,KAAK,WAAa,OAAO,YAAY,IAAM,CACrC,KAAK,WAAW,OAAS,GAC3B,KAAK,MAAM,EAAE,MAAOf,GAAU,CAC5B,IAAMe,EAAiB,KAAK,YAAYf,EAAO,YAAY,EAC3D,KAAK,SAASe,CAAc,CAC9B,CAAC,CAEL,EAAG,KAAK,OAAO,aAAa,CAC9B,CAEQ,mBAA0B,CAChC,GAAI,OAAO,OAAW,IAAa,OAEnC,IAAMkB,EAAqB,IAAM,CAC/B,GAAI,KAAK,WAAW,OAAS,EAAG,CAE9B,IAAMC,EAAe,CAAC,GAAG,KAAK,UAAU,EACxC,KAAK,WAAa,CAAC,EAEnB,IAAMC,EAAS,KAAK,YAAYD,EAAc,KAAK,OAAO,mBAAmB,EAGzEC,EAAO,OAAS,GAClB,KAAK,qBAAqBA,EAAO,CAAC,CAAC,EAAE,MAAM,IAAM,CAEjD,CAAC,CAEL,CACF,EAGA,OAAO,iBAAiB,eAAgBF,CAAkB,EAC1D,OAAO,iBAAiB,WAAYA,CAAkB,EAGtD,SAAS,iBAAiB,mBAAoB,IAAM,CAClD,GAAI,SAAS,kBAAoB,UAAY,KAAK,WAAW,OAAS,EAAG,CACvE,IAAMC,EAAe,CAAC,GAAG,KAAK,UAAU,EACxC,KAAK,WAAa,CAAC,EAEnB,IAAMC,EAAS,KAAK,YAAYD,EAAc,KAAK,OAAO,mBAAmB,EAGzEC,EAAO,OAAS,GAClB,KAAK,qBAAqBA,EAAO,CAAC,CAAC,EAAE,MAAM,IAAM,CAEjD,CAAC,CAEL,CACF,CAAC,CACH,CAOA,MAAM,MACJC,EACAC,EACAC,EACe,CACf,GAAI,CACF,GAAI,KAAK,YAAa,CACpB,IAAMtC,EAAQ,IAAI,MAAM,4CAA4C,EAC9De,EAAiB,KAAK,YAAYf,EAAO,0BAA0B,EACzE,KAAK,SAASe,CAAc,EAC5B,MACF,CAEA,IAAIP,EACA+B,EAAyB,CAAC,EAE1B,OAAOH,GAAgB,UACzB5B,EAAQ,CACN,UAAW4B,EACX,WAAYC,CACd,EACAE,EAAOD,GAAW,CAAC,IAEnB9B,EAAQ4B,EACRG,EAAOF,GAA2C,CAAC,GAGrD,IAAMG,EAAiB,KAAK,YAAYhC,CAAK,EAC7C,KAAK,WAAW,KAAKgC,CAAc,EAEnC,KAAK,IAAI,iBAAiBhC,EAAM,SAAS,GAAIA,EAAM,UAAU,GAGzD+B,EAAK,OAAS,KAAK,WAAW,QAAU,KAAK,OAAO,YACtD,MAAM,KAAK,MAAM,CAErB,OAASvC,EAAO,CACd,IAAMe,EAAiB,KAAK,YAAYf,EAAO,OAAO,EACtD,KAAK,SAASe,CAAc,CAC9B,CACF,CAKA,SAAS0B,EAAsB,CAC7B,KAAK,IAAI,oBAAoBA,CAAM,EAAE,EACrC,KAAK,aAAeA,EAEpB,KAAK,0BAA4B,IACnC,CAKA,UAAUA,EAA6B,CACrC,KAAK,IAAI,uBAAuBA,CAAM,EAAE,EACxC,KAAK,aAAeA,EAEhBA,IACF,KAAK,0BAA4B,KAErC,CAKA,WAA2B,CACzB,OAAO,KAAK,YACd,CAKA,0BAAmC,CACjC,OAAO,KAAK,mBAAmB,CACjC,CAKA,MAAM,YAAYhC,EAAqC6B,EAA6C,CAClG,GAAI,CACF,GAAI,KAAK,YAAa,CACpB,IAAMtC,EAAQ,IAAI,MAAM,4CAA4C,EAC9De,EAAiB,KAAK,YAAYf,EAAO,gCAAgC,EAC/E,KAAK,SAASe,CAAc,EAC5B,MACF,CAEA,IAAM0B,EAASH,GAAS,QAAU,KAAK,mBAAmB,EAGpDI,EAAe,OAAO,KAAKjC,CAAU,EAC3C,GAAIiC,EAAa,OAAS,EAAG,CAC3B,IAAM1C,EAAQ,IAAI,MAAM,2DAA2D,EAC7Ee,EAAiB,KAAK,YAAYf,EAAO,0BAA0B,EACzE,KAAK,SAASe,CAAc,EAC5B,MACF,CAEA,GAAI2B,EAAa,SAAW,EAAG,CAC7B,IAAM1C,EAAQ,IAAI,MAAM,oDAAoD,EACtEe,EAAiB,KAAK,YAAYf,EAAO,0BAA0B,EACzE,KAAK,SAASe,CAAc,EAC5B,MACF,CAGA,IAAM4B,EAA+C,CAAC,EACtD,OAAW,CAACC,EAAKC,CAAK,IAAK,OAAO,QAAQpC,CAAU,EAC9CoC,GAAU,KACZF,EAAqBC,CAAG,EAAI,GACnB,OAAOC,GAAU,SAC1BF,EAAqBC,CAAG,EAAIC,EAE5BF,EAAqBC,CAAG,EAAI,KAAK,UAAUC,CAAK,EAIpD,IAAMC,EAA2B,CAC/B,OAAAL,EACA,GAAGE,CACL,EAEA,MAAM,KAAK,eAAeG,CAAO,CACnC,OAAS9C,EAAO,CACd,IAAMe,EAAiB,KAAK,YAAYf,EAAO,aAAa,EAC5D,KAAK,SAASe,CAAc,CAC9B,CACF,CAKA,MAAc,eAAe+B,EAAyC,CACpE,IAAIvB,EAEJ,QAASC,EAAU,EAAGA,GAAW,KAAK,OAAO,cAAeA,IAC1D,GAAI,CACF,IAAML,EAAU,MAAM,KAAK,eAAe,EACpCM,EAAM,GAAG,KAAK,OAAO,MAAM,cAAc,mBAAmB,KAAK,OAAO,QAAQ,CAAC,cAEvF,KAAK,IAAI,+BAA+BqB,EAAQ,MAAM,aAAatB,EAAU,CAAC,GAAG,EAEjF,IAAME,EAAW,MAAM,MAAMD,EAAK,CAChC,OAAQ,OACR,QAAAN,EACA,KAAM,KAAK,UAAU2B,CAAO,CAC9B,CAAC,EAED,GAAI,CAACpB,EAAS,GAAI,CAChB,IAAIC,EAAe,QAAQD,EAAS,MAAM,GAC1C,GAAI,CACF,IAAME,EAAY,MAAMF,EAAS,KAAK,EAClCE,GAAW,UACbD,EAAeC,EAAU,QAE7B,MAAQ,CACN,IAAMC,EAAY,MAAMH,EAAS,KAAK,EAClCG,IACFF,EAAeE,EAEnB,CAEA,IAAM7B,EAAQ,IAAI,MAAM,6BAA6B2B,CAAY,EAAE,EACnE,MAAA3B,EAAM,OAAS0B,EAAS,OAClB1B,CACR,CAEA,KAAK,IAAI,wCAAwC8C,EAAQ,MAAM,EAAE,EACjE,MAEF,OAAS9C,EAAO,CAGd,GAFAuB,EAAYvB,EAERwB,IAAY,KAAK,OAAO,cAAe,CAEzC,IAAMT,EAAiB,KAAK,YAAYf,EAAO,2BAA2BwB,EAAU,CAAC,IAAI,KAAK,OAAO,cAAgB,CAAC,GAAG,EACzH,KAAK,SAAST,CAAc,EAC5B,MACF,CAEA,GAAI,CAAC,KAAK,iBAAiBf,CAAK,EAAG,CAEjC,IAAMe,EAAiB,KAAK,YAAYf,EAAO,sCAAsC,EACrF,KAAK,SAASe,CAAc,EAC5B,MACF,CAEA,IAAMe,EAAU,KAAK,OAAO,WAAa,KAAK,IAAI,EAAGN,CAAO,EAC5D,KAAK,IAAI,eAAeM,CAAO,kBAAmB9B,CAAK,EACvD,MAAM,KAAK,MAAM8B,CAAO,CAC1B,CAEJ,CAOA,MAAM,WAAWrB,EAAmC6B,EAA2C,CAC7F,GAAI,CACF,OAAO,MAAM,KAAK,MAAM,QAAS7B,EAAY6B,CAAO,CACtD,OAAStC,EAAO,CACd,IAAMe,EAAiB,KAAK,YAAYf,EAAO,YAAY,EAC3D,KAAK,SAASe,CAAc,CAC9B,CACF,CAKA,MAAM,YAAYN,EAAoC6B,EAA2C,CAC/F,GAAI,CACF,OAAO,MAAM,KAAK,MAAM,SAAU7B,EAAY6B,CAAO,CACvD,OAAStC,EAAO,CACd,IAAMe,EAAiB,KAAK,YAAYf,EAAO,aAAa,EAC5D,KAAK,SAASe,CAAc,CAC9B,CACF,CAKA,MAAM,cAAcN,EAAsC6B,EAA2C,CACnG,GAAI,CACF,OAAO,MAAM,KAAK,MAAM,WAAY7B,EAAY6B,CAAO,CACzD,OAAStC,EAAO,CACd,IAAMe,EAAiB,KAAK,YAAYf,EAAO,eAAe,EAC9D,KAAK,SAASe,CAAc,CAC9B,CACF,CAKA,MAAM,cAAcN,EAAsC6B,EAA2C,CACnG,GAAI,CACF,OAAO,MAAM,KAAK,MAAM,YAAa7B,EAAY6B,CAAO,CAC1D,OAAStC,EAAO,CACd,IAAMe,EAAiB,KAAK,YAAYf,EAAO,eAAe,EAC9D,KAAK,SAASe,CAAc,CAC9B,CACF,CAKA,MAAM,cAAcN,EAAsC6B,EAA2C,CACnG,GAAI,CACF,OAAO,MAAM,KAAK,MAAM,WAAY7B,EAAY6B,CAAO,CACzD,OAAStC,EAAO,CACd,IAAMe,EAAiB,KAAK,YAAYf,EAAO,eAAe,EAC9D,KAAK,SAASe,CAAc,CAC9B,CACF,CAKA,MAAM,YAAYN,EAAoC6B,EAA2C,CAC/F,GAAI,CACF,OAAO,MAAM,KAAK,MAAM,SAAU7B,EAAY6B,CAAO,CACvD,OAAStC,EAAO,CACd,IAAMe,EAAiB,KAAK,YAAYf,EAAO,aAAa,EAC5D,KAAK,SAASe,CAAc,CAC9B,CACF,CAKA,MAAM,eAAeN,EAAuC6B,EAA2C,CACrG,GAAI,CACF,OAAO,MAAM,KAAK,MAAM,cAAe7B,EAAY6B,CAAO,CAC5D,OAAStC,EAAO,CACd,IAAMe,EAAiB,KAAK,YAAYf,EAAO,gBAAgB,EAC/D,KAAK,SAASe,CAAc,CAC9B,CACF,CAKA,MAAM,oBAAoBN,EAA4C6B,EAA2C,CAC/G,GAAI,CACF,OAAO,MAAM,KAAK,MAAM,mBAAoB7B,EAAY6B,CAAO,CACjE,OAAStC,EAAO,CACd,IAAMe,EAAiB,KAAK,YAAYf,EAAO,qBAAqB,EACpE,KAAK,SAASe,CAAc,CAC9B,CACF,CAKA,MAAM,OAAuB,CAC3B,GAAI,CACF,GAAI,KAAK,WAAW,SAAW,EAAG,OAElC,IAAMmB,EAAe,CAAC,GAAG,KAAK,UAAU,EACxC,KAAK,WAAa,CAAC,EAGnB,IAAMC,EAAS,KAAK,YAAYD,EAAc,KAAK,OAAO,mBAAmB,EAG7E,QAAWa,KAASZ,EAClB,MAAM,KAAK,WAAWY,CAAK,CAE/B,OAAS/C,EAAO,CACd,IAAMe,EAAiB,KAAK,YAAYf,EAAO,OAAO,EACtD,KAAK,SAASe,CAAc,CAC9B,CACF,CAOQ,uBAA8B,CACpC,GAAI,GAAC,KAAK,OAAO,mBAAqB,OAAO,OAAW,KAExD,GAAI,CACF,IAAMiC,EAAS,aAAa,QAAQ,KAAK,OAAO,cAAc,EAC1DA,IACF,KAAK,YAAc,KAAK,MAAMA,CAAM,EACpC,KAAK,IAAI,mCAAoC,KAAK,WAAW,EAEjE,OAAShD,EAAO,CACd,KAAK,IAAI,sCAAuCA,CAAK,CACvD,CACF,CAKQ,gBAAgBiD,EAAgC,CACtD,GAAI,GAAC,KAAK,OAAO,mBAAqB,OAAO,OAAW,KAExD,GAAI,CACF,aAAa,QAAQ,KAAK,OAAO,eAAgB,KAAK,UAAUA,CAAK,CAAC,EACtE,KAAK,IAAI,gCAAiCA,CAAK,CACjD,OAASjD,EAAO,CACd,KAAK,IAAI,sCAAuCA,CAAK,CACvD,CACF,CAKA,UAAU4C,EAAiC,CAEzC,GAAI,KAAK,aAAa,iBAAiBA,CAAG,EACxC,OAAO,KAAK,YAAY,eAAeA,CAAG,EAI5C,GAAI,KAAK,OAAO,wBAAwBA,CAAG,EACzC,OAAO,KAAK,OAAO,sBAAsBA,CAAG,CAIhD,CAKA,eAAwC,CACtC,IAAMM,EAAU,CAAE,GAAG,KAAK,OAAO,qBAAsB,EAEvD,OAAI,KAAK,aAAa,gBACpB,OAAO,OAAOA,EAAS,KAAK,YAAY,cAAc,EAGjDA,CACT,CAKA,MAAM,YAAYZ,EAA+B,CAAC,EAAyC,CACzF,GAAI,CACF,GAAI,KAAK,YAAa,CACpB,IAAMtC,EAAQ,IAAI,MAAM,4CAA4C,EAC9De,EAAiB,KAAK,YAAYf,EAAO,gCAAgC,EAC/E,YAAK,SAASe,CAAc,EACrB,IACT,CAEA,IAAM0B,EAASH,EAAQ,QAAU,KAAK,mBAAmB,EACnDa,EAAgBb,EAAQ,eAAiB,CAAC,EAC1C7B,EAAa6B,EAAQ,YAAc,CAAC,EAEpCc,EAA+B,CACnC,OAAAX,EACA,cAAAU,EACA,WAAA1C,CACF,EAEIc,EAEJ,QAASC,EAAU,EAAGA,GAAW,KAAK,OAAO,cAAeA,IAC1D,GAAI,CACF,IAAML,EAAU,MAAM,KAAK,eAAe,EACpCM,EAAM,GAAG,KAAK,OAAO,MAAM,cAAc,mBAAmB,KAAK,OAAO,QAAQ,CAAC,yBAEvF,KAAK,IAAI,oCAAoCgB,CAAM,aAAajB,EAAU,CAAC,GAAG,EAE9E,IAAME,EAAW,MAAM,MAAMD,EAAK,CAChC,OAAQ,OACR,QAAAN,EACA,KAAM,KAAK,UAAUiC,CAAO,CAC9B,CAAC,EAED,GAAI,CAAC1B,EAAS,GAAI,CAChB,IAAIC,EAAe,QAAQD,EAAS,MAAM,GAC1C,GAAI,CACF,IAAME,EAAY,MAAMF,EAAS,KAAK,EAClCE,GAAW,UACbD,EAAeC,EAAU,QAE7B,MAAQ,CACN,IAAMC,EAAY,MAAMH,EAAS,KAAK,EAClCG,IACFF,EAAeE,EAEnB,CAEA,IAAM7B,EAAQ,IAAI,MAAM,mCAAmC2B,CAAY,EAAE,EACzE,MAAA3B,EAAM,OAAS0B,EAAS,OAClB1B,CACR,CAEA,IAAMqD,EAAuC,MAAM3B,EAAS,KAAK,EAGjE,OAAI2B,EAAe,gBACjB,KAAK,kBAAkBA,EAAgBZ,CAAM,EAG/C,KAAK,IAAI,gDAAgDA,CAAM,IAAKY,CAAc,EAC3EA,CAET,OAASrD,EAAO,CAGd,GAFAuB,EAAYvB,EAERwB,IAAY,KAAK,OAAO,cAAe,CAEzC,IAAMT,EAAiB,KAAK,YAAYf,EAAO,wBAAwBwB,EAAU,CAAC,IAAI,KAAK,OAAO,cAAgB,CAAC,GAAG,EACtH,YAAK,SAAST,CAAc,EACrB,IACT,CAEA,GAAI,CAAC,KAAK,iBAAiBf,CAAK,EAAG,CAEjC,IAAMe,EAAiB,KAAK,YAAYf,EAAO,mCAAmC,EAClF,YAAK,SAASe,CAAc,EACrB,IACT,CAEA,IAAMe,EAAU,KAAK,OAAO,WAAa,KAAK,IAAI,EAAGN,CAAO,EAC5D,KAAK,IAAI,4BAA4BM,CAAO,kBAAmB9B,CAAK,EACpE,MAAM,KAAK,MAAM8B,CAAO,CAC1B,CAGF,OAAO,IACT,OAAS9B,EAAO,CACd,IAAMe,EAAiB,KAAK,YAAYf,EAAO,aAAa,EAC5D,YAAK,SAASe,CAAc,EACrB,IACT,CACF,CAKA,MAAM,eAAe6B,EAAaN,EAA+B,CAAC,EAAgC,CAChG,GAAI,CAEF,GAAI,CAACA,EAAQ,cAAgB,KAAK,aAAa,iBAAiBM,CAAG,EACjE,OAAO,KAAK,YAAY,eAAeA,CAAG,EAI5C,GAAI,CAACN,EAAQ,cAAgB,KAAK,OAAO,wBAAwBM,CAAG,EAClE,OAAO,KAAK,OAAO,sBAAsBA,CAAG,EAI9C,IAAMlB,EAAW,MAAM,KAAK,YAAYY,CAAO,EAC/C,OAAIZ,EACKA,EAAS,eAAekB,CAAG,EAI7B,KAAK,OAAO,wBAAwBA,CAAG,CAChD,OAAS5C,EAAO,CACd,IAAMe,EAAiB,KAAK,YAAYf,EAAO,gBAAgB,EAC/D,YAAK,SAASe,CAAc,EAErB,KAAK,OAAO,wBAAwB6B,CAAG,CAChD,CACF,CAKA,MAAM,mBAAmBN,EAA+B,CAAC,EAAoC,CAC3F,GAAI,CAEF,GAAI,CAACA,EAAQ,cAAgB,KAAK,aAAa,eAC7C,MAAO,CAAE,GAAG,KAAK,OAAO,sBAAuB,GAAG,KAAK,YAAY,cAAe,EAIpF,IAAMZ,EAAW,MAAM,KAAK,YAAYY,CAAO,EAC/C,OAAIZ,EACK,CAAE,GAAG,KAAK,OAAO,sBAAuB,GAAGA,EAAS,cAAe,EAIrE,CAAE,GAAG,KAAK,OAAO,qBAAsB,CAChD,OAAS1B,EAAO,CACd,IAAMe,EAAiB,KAAK,YAAYf,EAAO,oBAAoB,EACnE,YAAK,SAASe,CAAc,EAErB,CAAE,GAAG,KAAK,OAAO,qBAAsB,CAChD,CACF,CAKQ,kBAAkBW,EAAgCe,EAAsB,CAC9E,IAAMa,EAA8B,CAClC,eAAgB5B,EAAS,eACzB,WAAYA,EAAS,WACrB,UAAWA,EAAS,UACpB,OAAAe,CACF,EAEMc,EAAa,KAAK,aAAa,gBAAkB,CAAC,EACxD,KAAK,YAAcD,EACnB,KAAK,gBAAgBA,CAAQ,EAGzB,KAAK,UAAUC,CAAU,IAAM,KAAK,UAAU7B,EAAS,cAAc,GACvE,KAAK,4BAA4BA,EAAS,cAAc,CAE5D,CAKA,wBAAwB8B,EAAsC,CAC5D,KAAK,sBAAsB,KAAKA,CAAQ,CAC1C,CAKA,2BAA2BA,EAAsC,CAC/D,IAAMC,EAAQ,KAAK,sBAAsB,QAAQD,CAAQ,EACrDC,EAAQ,IACV,KAAK,sBAAsB,OAAOA,EAAO,CAAC,CAE9C,CAKQ,4BAA4BC,EAA8C,CAChF,KAAK,sBAAsB,QAAQF,GAAY,CAC7C,GAAI,CACFA,EAASE,CAAc,CACzB,OAAS1D,EAAO,CACd,QAAQ,MAAM,kDAAmDA,CAAK,CACxE,CACF,CAAC,CACH,CAKQ,yBAAgC,CAClC,KAAK,oBACP,cAAc,KAAK,kBAAkB,EAGvC,KAAK,mBAAqB,OAAO,YAAY,IAAM,CAC7C,CAAC,KAAK,aAAe,KAAK,cAC5B,KAAK,YAAY,EAAE,MAAOA,GAAU,CAClC,IAAMe,EAAiB,KAAK,YAAYf,EAAO,qBAAqB,EACpE,KAAK,SAASe,CAAc,CAC9B,CAAC,CAEL,EAAG,KAAK,OAAO,qBAAqB,CACtC,CAKQ,wBAA+B,CACjC,KAAK,qBACP,cAAc,KAAK,kBAAkB,EACrC,KAAK,mBAAqB,KAE9B,CAKA,MAAM,cAAcoC,EAA0B,CAAC,EAAG1C,EAAoD,CACpG,GAAI,CACF,GAAI,CAAC,KAAK,aAAc,CACtB,KAAK,IAAI,uCAAuC,EAChD,MACF,CAEiB,MAAM,KAAK,YAAY,CAAE,cAAA0C,EAAe,WAAA1C,CAAW,CAAC,GAEnE,KAAK,wBAAwB,CAEjC,OAAST,EAAO,CACd,IAAMe,EAAiB,KAAK,YAAYf,EAAO,eAAe,EAC9D,KAAK,SAASe,CAAc,CAC9B,CACF,CAKQ,YAAYb,EAAwByD,EAAqC,CAC/E,IAAMxB,EAA2B,CAAC,EAClC,QAASyB,EAAI,EAAGA,EAAI1D,EAAO,OAAQ0D,GAAKD,EACtCxB,EAAO,KAAKjC,EAAO,MAAM0D,EAAGA,EAAID,CAAS,CAAC,EAE5C,OAAOxB,CACT,CAKA,SAAgB,CAed,GAdA,KAAK,YAAc,GAEf,KAAK,aACP,cAAc,KAAK,UAAU,EAC7B,KAAK,WAAa,MAIpB,KAAK,uBAAuB,EAG5B,KAAK,sBAAwB,CAAC,EAG1B,KAAK,WAAW,OAAS,EAAG,CAC9B,IAAMD,EAAe,CAAC,GAAG,KAAK,UAAU,EACxC,KAAK,WAAa,CAAC,EAEnB,IAAMC,EAAS,KAAK,YAAYD,EAAc,KAAK,OAAO,mBAAmB,EAG7E,GAAIC,EAAO,OAAS,EAAG,CACrB,KAAK,qBAAqBA,EAAO,CAAC,CAAC,EAAE,MAAM,IAAM,CAEjD,CAAC,EAGD,QAASyB,EAAI,EAAGA,EAAIzB,EAAO,OAAQyB,IACjC,KAAK,qBAAqBzB,EAAOyB,CAAC,CAAC,EAAE,MAAM,IAAM,CAEjD,CAAC,CAEL,CACF,CACF,CACF,EAKO,SAASpE,EAAqBE,EAAqC,CACxE,OAAO,IAAIH,EAAeG,CAAM,CAClC,CAGA,IAAOD,EAAQF,EAaX,OAAO,OAAW,MACpB,OAAO,MAAQ,CACb,eAAAA,EACA,qBAAAC,CACF",
4
+ "sourcesContent": ["/**\n * Grain Analytics Web SDK\n * A lightweight, dependency-free TypeScript SDK for sending analytics events to Grain's REST API\n */\n\nexport interface GrainEvent {\n eventName: string;\n userId?: string;\n properties?: Record<string, unknown>;\n timestamp?: Date;\n}\n\nexport interface EventPayload {\n eventName: string;\n userId: string;\n properties: Record<string, unknown>;\n}\n\nexport type AuthStrategy = 'NONE' | 'SERVER_SIDE' | 'JWT';\n\nexport interface AuthProvider {\n getToken(): Promise<string> | string;\n}\n\nexport interface GrainConfig {\n tenantId: string;\n apiUrl?: string;\n authStrategy?: AuthStrategy;\n secretKey?: string; // For SERVER_SIDE auth\n authProvider?: AuthProvider; // For JWT auth\n userId?: string; // Global user ID for all events\n batchSize?: number;\n flushInterval?: number; // milliseconds\n retryAttempts?: number;\n retryDelay?: number; // milliseconds\n maxEventsPerRequest?: number; // Maximum events to send in a single API request\n debug?: boolean;\n // Remote Config options\n defaultConfigurations?: Record<string, string>; // Default values for configurations\n configCacheKey?: string; // Custom cache key for configurations\n configRefreshInterval?: number; // Auto-refresh interval in milliseconds (default: 5 minutes)\n enableConfigCache?: boolean; // Enable/disable configuration caching (default: true)\n}\n\nexport interface SendEventOptions {\n flush?: boolean; // Force immediate send\n}\n\nexport interface SetPropertyOptions {\n userId?: string; // Override global userId\n}\n\nexport interface PropertyPayload {\n userId: string;\n [key: string]: string; // All property values must be strings\n}\n\n// Remote Config interfaces\nexport interface RemoteConfigRequest {\n userId: string;\n immediateKeys: string[];\n properties?: Record<string, string>;\n}\n\nexport interface RemoteConfigResponse {\n userId: string;\n snapshotId: string;\n configurations: Record<string, string>;\n isFinal: boolean;\n qualifiedSegments: string[];\n qualifiedRuleSets: string[];\n timestamp: string;\n isFromCache: boolean;\n}\n\nexport interface RemoteConfigOptions {\n immediateKeys?: string[];\n properties?: Record<string, string>;\n userId?: string; // Override global userId\n forceRefresh?: boolean; // Force fetch from API, bypass cache\n}\n\nexport interface RemoteConfigCache {\n configurations: Record<string, string>;\n snapshotId: string;\n timestamp: string;\n userId: string;\n}\n\nexport type ConfigChangeListener = (configurations: Record<string, string>) => void;\n\n// Template event interfaces\nexport interface LoginEventProperties extends Record<string, unknown> {\n method?: string; // 'email', 'google', 'facebook', etc.\n success?: boolean;\n errorMessage?: string;\n loginAttempt?: number;\n rememberMe?: boolean;\n twoFactorEnabled?: boolean;\n}\n\nexport interface SignupEventProperties extends Record<string, unknown> {\n method?: string; // 'email', 'google', 'facebook', etc.\n source?: string; // 'landing_page', 'referral', 'ad', etc.\n plan?: string; // 'free', 'pro', 'enterprise', etc.\n success?: boolean;\n errorMessage?: string;\n}\n\nexport interface CheckoutEventProperties extends Record<string, unknown> {\n orderId?: string;\n total?: number;\n currency?: string;\n items?: Array<{\n id: string;\n name: string;\n price: number;\n quantity: number;\n }>;\n paymentMethod?: string; // 'credit_card', 'paypal', 'stripe', etc.\n success?: boolean;\n errorMessage?: string;\n couponCode?: string;\n discount?: number;\n}\n\nexport interface PageViewEventProperties extends Record<string, unknown> {\n page?: string;\n title?: string;\n referrer?: string;\n url?: string;\n userAgent?: string;\n screenResolution?: string;\n viewportSize?: string;\n}\n\nexport interface PurchaseEventProperties extends Record<string, unknown> {\n orderId?: string;\n total?: number;\n currency?: string;\n items?: Array<{\n id: string;\n name: string;\n price: number;\n quantity: number;\n category?: string;\n }>;\n paymentMethod?: string;\n shippingMethod?: string;\n tax?: number;\n shipping?: number;\n discount?: number;\n couponCode?: string;\n}\n\nexport interface SearchEventProperties extends Record<string, unknown> {\n query?: string;\n results?: number;\n filters?: Record<string, unknown>;\n sortBy?: string;\n category?: string;\n success?: boolean;\n}\n\nexport interface AddToCartEventProperties extends Record<string, unknown> {\n itemId?: string;\n itemName?: string;\n price?: number;\n quantity?: number;\n currency?: string;\n category?: string;\n variant?: string;\n}\n\nexport interface RemoveFromCartEventProperties extends Record<string, unknown> {\n itemId?: string;\n itemName?: string;\n price?: number;\n quantity?: number;\n currency?: string;\n category?: string;\n variant?: string;\n}\n\n// Error handling interfaces\nexport interface ErrorDigest {\n eventCount: number;\n totalProperties: number;\n totalSize: number;\n eventNames: string[];\n userIds: string[];\n}\n\nexport interface FormattedError {\n code: string;\n message: string;\n digest: ErrorDigest;\n timestamp: string;\n context: string;\n originalError?: unknown;\n}\n\n/**\n * Main Grain Analytics client\n */\ntype RequiredConfig = Required<Omit<GrainConfig, 'secretKey' | 'authProvider' | 'userId'>> & {\n secretKey?: string;\n authProvider?: AuthProvider;\n userId?: string;\n};\n\nexport class GrainAnalytics {\n private config: RequiredConfig;\n private eventQueue: EventPayload[] = [];\n private flushTimer: number | null = null;\n private isDestroyed = false;\n private globalUserId: string | null = null;\n private persistentAnonymousUserId: string | null = null;\n // Remote Config properties\n private configCache: RemoteConfigCache | null = null;\n private configRefreshTimer: number | null = null;\n private configChangeListeners: ConfigChangeListener[] = [];\n private configFetchPromise: Promise<RemoteConfigResponse> | null = null;\n\n constructor(config: GrainConfig) {\n this.config = {\n apiUrl: 'https://api.grainql.com',\n authStrategy: 'NONE',\n batchSize: 50,\n flushInterval: 5000, // 5 seconds\n retryAttempts: 3,\n retryDelay: 1000, // 1 second\n maxEventsPerRequest: 160, // Maximum events per API request\n debug: false,\n // Remote Config defaults\n defaultConfigurations: {},\n configCacheKey: 'grain_config',\n configRefreshInterval: 300000, // 5 minutes\n enableConfigCache: true,\n ...config,\n tenantId: config.tenantId,\n };\n\n // Set global userId if provided in config\n if (config.userId) {\n this.globalUserId = config.userId;\n }\n\n this.validateConfig();\n this.initializePersistentAnonymousUserId();\n this.setupBeforeUnload();\n this.startFlushTimer();\n this.initializeConfigCache();\n }\n\n private validateConfig(): void {\n if (!this.config.tenantId) {\n throw new Error('Grain Analytics: tenantId is required');\n }\n\n if (this.config.authStrategy === 'SERVER_SIDE' && !this.config.secretKey) {\n throw new Error('Grain Analytics: secretKey is required for SERVER_SIDE auth strategy');\n }\n\n if (this.config.authStrategy === 'JWT' && !this.config.authProvider) {\n throw new Error('Grain Analytics: authProvider is required for JWT auth strategy');\n }\n }\n\n /**\n * Generate a UUID v4 string\n */\n private generateUUID(): string {\n if (typeof crypto !== 'undefined' && crypto.randomUUID) {\n return crypto.randomUUID();\n }\n \n // Fallback for environments without crypto.randomUUID\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n const r = Math.random() * 16 | 0;\n const v = c === 'x' ? r : (r & 0x3 | 0x8);\n return v.toString(16);\n });\n }\n\n /**\n * Format UUID for anonymous user ID (remove dashes and prefix with 'temp:')\n */\n private formatAnonymousUserId(uuid: string): string {\n return `temp:${uuid.replace(/-/g, '')}`;\n }\n\n /**\n * Initialize persistent anonymous user ID from localStorage or create new one\n */\n private initializePersistentAnonymousUserId(): void {\n if (typeof window === 'undefined') return;\n\n const storageKey = `grain_anonymous_user_id_${this.config.tenantId}`;\n \n try {\n const stored = localStorage.getItem(storageKey);\n if (stored) {\n this.persistentAnonymousUserId = stored;\n this.log('Loaded persistent anonymous user ID:', this.persistentAnonymousUserId);\n } else {\n // Generate new anonymous user ID\n const uuid = this.generateUUID();\n this.persistentAnonymousUserId = this.formatAnonymousUserId(uuid);\n localStorage.setItem(storageKey, this.persistentAnonymousUserId);\n this.log('Generated new persistent anonymous user ID:', this.persistentAnonymousUserId);\n }\n } catch (error) {\n this.log('Failed to initialize persistent anonymous user ID:', error);\n // Fallback: generate temporary ID without persistence\n const uuid = this.generateUUID();\n this.persistentAnonymousUserId = this.formatAnonymousUserId(uuid);\n }\n }\n\n /**\n * Get the effective user ID (global userId or persistent anonymous ID)\n */\n private getEffectiveUserId(): string {\n return this.globalUserId || this.persistentAnonymousUserId || 'anonymous';\n }\n\n private log(...args: unknown[]): void {\n if (this.config.debug) {\n console.log('[Grain Analytics]', ...args);\n }\n }\n\n /**\n * Create error digest from events\n */\n private createErrorDigest(events: EventPayload[]): ErrorDigest {\n const eventNames = [...new Set(events.map(e => e.eventName))];\n const userIds = [...new Set(events.map(e => e.userId))];\n \n let totalProperties = 0;\n let totalSize = 0;\n \n events.forEach(event => {\n const properties = event.properties || {};\n totalProperties += Object.keys(properties).length;\n totalSize += JSON.stringify(event).length;\n });\n\n return {\n eventCount: events.length,\n totalProperties,\n totalSize,\n eventNames,\n userIds,\n };\n }\n\n /**\n * Format error with beautiful structure\n */\n private formatError(\n error: unknown,\n context: string,\n events?: EventPayload[]\n ): FormattedError {\n const digest = events ? this.createErrorDigest(events) : {\n eventCount: 0,\n totalProperties: 0,\n totalSize: 0,\n eventNames: [],\n userIds: [],\n };\n\n let code = 'UNKNOWN_ERROR';\n let message = 'An unknown error occurred';\n\n if (error instanceof Error) {\n message = error.message;\n \n // Determine error code based on error type and message\n if (message.includes('fetch failed') || message.includes('network error')) {\n code = 'NETWORK_ERROR';\n } else if (message.includes('timeout')) {\n code = 'TIMEOUT_ERROR';\n } else if (message.includes('HTTP 4')) {\n code = 'CLIENT_ERROR';\n } else if (message.includes('HTTP 5')) {\n code = 'SERVER_ERROR';\n } else if (message.includes('JSON')) {\n code = 'PARSE_ERROR';\n } else if (message.includes('auth') || message.includes('unauthorized')) {\n code = 'AUTH_ERROR';\n } else if (message.includes('rate limit') || message.includes('429')) {\n code = 'RATE_LIMIT_ERROR';\n } else {\n code = 'GENERAL_ERROR';\n }\n } else if (typeof error === 'string') {\n message = error;\n code = 'STRING_ERROR';\n } else if (error && typeof error === 'object' && 'status' in error) {\n const status = (error as { status: number }).status;\n code = `HTTP_${status}`;\n message = `HTTP ${status} error`;\n }\n\n return {\n code,\n message,\n digest,\n timestamp: new Date().toISOString(),\n context,\n originalError: error,\n };\n }\n\n /**\n * Log formatted error gracefully\n */\n private logError(formattedError: FormattedError): void {\n const { code, message, digest, timestamp, context } = formattedError;\n \n const errorOutput = {\n '\uD83D\uDEA8 Grain Analytics Error': {\n 'Error Code': code,\n 'Message': message,\n 'Context': context,\n 'Timestamp': timestamp,\n 'Event Digest': {\n 'Events': digest.eventCount,\n 'Properties': digest.totalProperties,\n 'Size (bytes)': digest.totalSize,\n 'Event Names': digest.eventNames.length > 0 ? digest.eventNames.join(', ') : 'None',\n 'User IDs': digest.userIds.length > 0 ? digest.userIds.slice(0, 3).join(', ') + (digest.userIds.length > 3 ? '...' : '') : 'None',\n }\n }\n };\n\n console.error('\uD83D\uDEA8 Grain Analytics Error:', errorOutput);\n \n // Also log in a more compact format for debugging\n if (this.config.debug) {\n console.error(`[Grain Analytics] ${code}: ${message} (${context}) - Events: ${digest.eventCount}, Props: ${digest.totalProperties}, Size: ${digest.totalSize}B`);\n }\n }\n\n /**\n * Safely execute a function with error handling\n */\n private async safeExecute<T>(\n fn: () => Promise<T>,\n context: string,\n events?: EventPayload[]\n ): Promise<T | null> {\n try {\n return await fn();\n } catch (error) {\n const formattedError = this.formatError(error, context, events);\n this.logError(formattedError);\n return null;\n }\n }\n\n private formatEvent(event: GrainEvent): EventPayload {\n return {\n eventName: event.eventName,\n userId: event.userId || this.getEffectiveUserId(),\n properties: event.properties || {},\n };\n }\n\n private async getAuthHeaders(): Promise<Record<string, string>> {\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n };\n\n switch (this.config.authStrategy) {\n case 'NONE':\n break;\n case 'SERVER_SIDE':\n headers['Authorization'] = `Chase ${this.config.secretKey}`;\n break;\n case 'JWT':\n if (this.config.authProvider) {\n const token = await this.config.authProvider.getToken();\n headers['Authorization'] = `Bearer ${token}`;\n }\n break;\n }\n\n return headers;\n }\n\n private async delay(ms: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, ms));\n }\n\n private isRetriableError(error: unknown): boolean {\n if (error instanceof Error) {\n // Check for specific network or fetch errors\n const message = error.message.toLowerCase();\n if (message.includes('fetch failed')) return true;\n if (message === 'network error') return true; // Exact match to avoid \"Non-network error\"\n if (message.includes('timeout')) return true;\n if (message.includes('connection')) return true;\n }\n \n // Check for HTTP status codes that are retriable\n if (typeof error === 'object' && error !== null && 'status' in error) {\n const status = (error as { status: number }).status;\n return status >= 500 || status === 429; // Server errors or rate limiting\n }\n \n return false;\n }\n\n private async sendEvents(events: EventPayload[]): Promise<void> {\n if (events.length === 0) return;\n\n let lastError: unknown;\n\n for (let attempt = 0; attempt <= this.config.retryAttempts; attempt++) {\n try {\n const headers = await this.getAuthHeaders();\n const url = `${this.config.apiUrl}/v1/events/${encodeURIComponent(this.config.tenantId)}/multi`;\n\n this.log(`Sending ${events.length} events to ${url} (attempt ${attempt + 1})`);\n\n const response = await fetch(url, {\n method: 'POST',\n headers,\n body: JSON.stringify(events),\n });\n\n if (!response.ok) {\n let errorMessage = `HTTP ${response.status}`;\n try {\n const errorBody = await response.json();\n if (errorBody?.message) {\n errorMessage = errorBody.message;\n }\n } catch {\n const errorText = await response.text();\n if (errorText) {\n errorMessage = errorText;\n }\n }\n \n const error = new Error(`Failed to send events: ${errorMessage}`) as Error & { status?: number };\n error.status = response.status;\n throw error;\n }\n\n this.log(`Successfully sent ${events.length} events`);\n return; // Success, exit retry loop\n \n } catch (error) {\n lastError = error;\n \n if (attempt === this.config.retryAttempts) {\n // Last attempt, don't retry - log error gracefully\n const formattedError = this.formatError(error, `sendEvents (attempt ${attempt + 1}/${this.config.retryAttempts + 1})`, events);\n this.logError(formattedError);\n return; // Don't throw, just return gracefully\n }\n \n if (!this.isRetriableError(error)) {\n // Non-retriable error, don't retry - log error gracefully\n const formattedError = this.formatError(error, `sendEvents (non-retriable error)`, events);\n this.logError(formattedError);\n return; // Don't throw, just return gracefully\n }\n \n const delayMs = this.config.retryDelay * Math.pow(2, attempt); // Exponential backoff\n this.log(`Retrying in ${delayMs}ms after error:`, error);\n await this.delay(delayMs);\n }\n }\n }\n\n private async sendEventsWithBeacon(events: EventPayload[]): Promise<void> {\n if (events.length === 0) return;\n\n try {\n const headers = await this.getAuthHeaders();\n const url = `${this.config.apiUrl}/v1/events/${encodeURIComponent(this.config.tenantId)}/multi`;\n\n const body = JSON.stringify({ events });\n\n // Try beacon API first (more reliable for page unload)\n if (typeof navigator !== 'undefined' && 'sendBeacon' in navigator) {\n const blob = new Blob([body], { type: 'application/json' });\n const success = navigator.sendBeacon(url, blob);\n \n if (success) {\n this.log(`Successfully sent ${events.length} events via beacon`);\n return;\n }\n }\n\n // Fallback to fetch with keepalive\n await fetch(url, {\n method: 'POST',\n headers,\n body,\n keepalive: true,\n });\n\n this.log(`Successfully sent ${events.length} events via fetch (keepalive)`);\n } catch (error) {\n // Log error gracefully for beacon failures (page unload scenarios)\n const formattedError = this.formatError(error, 'sendEventsWithBeacon', events);\n this.logError(formattedError);\n }\n }\n\n private startFlushTimer(): void {\n if (this.flushTimer) {\n clearInterval(this.flushTimer);\n }\n\n this.flushTimer = window.setInterval(() => {\n if (this.eventQueue.length > 0) {\n this.flush().catch((error) => {\n const formattedError = this.formatError(error, 'auto-flush');\n this.logError(formattedError);\n });\n }\n }, this.config.flushInterval);\n }\n\n private setupBeforeUnload(): void {\n if (typeof window === 'undefined') return;\n\n const handleBeforeUnload = () => {\n if (this.eventQueue.length > 0) {\n // Use beacon API for reliable delivery during page unload\n const eventsToSend = [...this.eventQueue];\n this.eventQueue = [];\n \n const chunks = this.chunkEvents(eventsToSend, this.config.maxEventsPerRequest);\n \n // Send first chunk with beacon (most important for page unload)\n if (chunks.length > 0) {\n this.sendEventsWithBeacon(chunks[0]).catch(() => {\n // Silently fail - page is unloading\n });\n }\n }\n };\n\n // Handle page unload\n window.addEventListener('beforeunload', handleBeforeUnload);\n window.addEventListener('pagehide', handleBeforeUnload);\n \n // Handle visibility change (page hidden)\n document.addEventListener('visibilitychange', () => {\n if (document.visibilityState === 'hidden' && this.eventQueue.length > 0) {\n const eventsToSend = [...this.eventQueue];\n this.eventQueue = [];\n \n const chunks = this.chunkEvents(eventsToSend, this.config.maxEventsPerRequest);\n \n // Send first chunk with beacon (most important for page hidden)\n if (chunks.length > 0) {\n this.sendEventsWithBeacon(chunks[0]).catch(() => {\n // Silently fail\n });\n }\n }\n });\n }\n\n /**\n * Track an analytics event\n */\n async track(eventName: string, properties?: Record<string, unknown>, options?: SendEventOptions): Promise<void>;\n async track(event: GrainEvent, options?: SendEventOptions): Promise<void>;\n async track(\n eventOrName: string | GrainEvent,\n propertiesOrOptions?: Record<string, unknown> | SendEventOptions,\n options?: SendEventOptions\n ): Promise<void> {\n try {\n if (this.isDestroyed) {\n const error = new Error('Grain Analytics: Client has been destroyed');\n const formattedError = this.formatError(error, 'track (client destroyed)');\n this.logError(formattedError);\n return;\n }\n\n let event: GrainEvent;\n let opts: SendEventOptions = {};\n\n if (typeof eventOrName === 'string') {\n event = {\n eventName: eventOrName,\n properties: propertiesOrOptions as Record<string, unknown>,\n };\n opts = options || {};\n } else {\n event = eventOrName;\n opts = propertiesOrOptions as SendEventOptions || {};\n }\n\n const formattedEvent = this.formatEvent(event);\n this.eventQueue.push(formattedEvent);\n\n this.log(`Queued event: ${event.eventName}`, event.properties);\n\n // Check if we should flush immediately\n if (opts.flush || this.eventQueue.length >= this.config.batchSize) {\n await this.flush();\n }\n } catch (error) {\n const formattedError = this.formatError(error, 'track');\n this.logError(formattedError);\n }\n }\n\n /**\n * Identify a user (sets userId for subsequent events)\n */\n identify(userId: string): void {\n this.log(`Identified user: ${userId}`);\n this.globalUserId = userId;\n // Clear persistent anonymous user ID since we now have a real user ID\n this.persistentAnonymousUserId = null;\n }\n\n /**\n * Set global user ID for all subsequent events\n */\n setUserId(userId: string | null): void {\n this.log(`Set global user ID: ${userId}`);\n this.globalUserId = userId;\n // Clear persistent anonymous user ID if setting a real user ID\n if (userId) {\n this.persistentAnonymousUserId = null;\n }\n }\n\n /**\n * Get current global user ID\n */\n getUserId(): string | null {\n return this.globalUserId;\n }\n\n /**\n * Get current effective user ID (global userId or persistent anonymous ID)\n */\n getEffectiveUserIdPublic(): string {\n return this.getEffectiveUserId();\n }\n\n /**\n * Set user properties\n */\n async setProperty(properties: Record<string, unknown>, options?: SetPropertyOptions): Promise<void> {\n try {\n if (this.isDestroyed) {\n const error = new Error('Grain Analytics: Client has been destroyed');\n const formattedError = this.formatError(error, 'setProperty (client destroyed)');\n this.logError(formattedError);\n return;\n }\n\n const userId = options?.userId || this.getEffectiveUserId();\n \n // Validate property count (max 4 properties)\n const propertyKeys = Object.keys(properties);\n if (propertyKeys.length > 4) {\n const error = new Error('Grain Analytics: Maximum 4 properties allowed per request');\n const formattedError = this.formatError(error, 'setProperty (validation)');\n this.logError(formattedError);\n return;\n }\n\n if (propertyKeys.length === 0) {\n const error = new Error('Grain Analytics: At least one property is required');\n const formattedError = this.formatError(error, 'setProperty (validation)');\n this.logError(formattedError);\n return;\n }\n\n // Serialize all values to strings\n const serializedProperties: Record<string, string> = {};\n for (const [key, value] of Object.entries(properties)) {\n if (value === null || value === undefined) {\n serializedProperties[key] = '';\n } else if (typeof value === 'string') {\n serializedProperties[key] = value;\n } else {\n serializedProperties[key] = JSON.stringify(value);\n }\n }\n\n const payload: PropertyPayload = {\n userId,\n ...serializedProperties,\n };\n\n await this.sendProperties(payload);\n } catch (error) {\n const formattedError = this.formatError(error, 'setProperty');\n this.logError(formattedError);\n }\n }\n\n /**\n * Send properties to the API\n */\n private async sendProperties(payload: PropertyPayload): Promise<void> {\n let lastError: unknown;\n\n for (let attempt = 0; attempt <= this.config.retryAttempts; attempt++) {\n try {\n const headers = await this.getAuthHeaders();\n const url = `${this.config.apiUrl}/v1/events/${encodeURIComponent(this.config.tenantId)}/properties`;\n\n this.log(`Setting properties for user ${payload.userId} (attempt ${attempt + 1})`);\n\n const response = await fetch(url, {\n method: 'POST',\n headers,\n body: JSON.stringify(payload),\n });\n\n if (!response.ok) {\n let errorMessage = `HTTP ${response.status}`;\n try {\n const errorBody = await response.json();\n if (errorBody?.message) {\n errorMessage = errorBody.message;\n }\n } catch {\n const errorText = await response.text();\n if (errorText) {\n errorMessage = errorText;\n }\n }\n \n const error = new Error(`Failed to set properties: ${errorMessage}`) as Error & { status?: number };\n error.status = response.status;\n throw error;\n }\n\n this.log(`Successfully set properties for user ${payload.userId}`);\n return; // Success, exit retry loop\n \n } catch (error) {\n lastError = error;\n \n if (attempt === this.config.retryAttempts) {\n // Last attempt, don't retry - log error gracefully\n const formattedError = this.formatError(error, `sendProperties (attempt ${attempt + 1}/${this.config.retryAttempts + 1})`);\n this.logError(formattedError);\n return; // Don't throw, just return gracefully\n }\n \n if (!this.isRetriableError(error)) {\n // Non-retriable error, don't retry - log error gracefully\n const formattedError = this.formatError(error, 'sendProperties (non-retriable error)');\n this.logError(formattedError);\n return; // Don't throw, just return gracefully\n }\n \n const delayMs = this.config.retryDelay * Math.pow(2, attempt); // Exponential backoff\n this.log(`Retrying in ${delayMs}ms after error:`, error);\n await this.delay(delayMs);\n }\n }\n }\n\n // Template event methods\n\n /**\n * Track user login event\n */\n async trackLogin(properties?: LoginEventProperties, options?: SendEventOptions): Promise<void> {\n try {\n return await this.track('login', properties, options);\n } catch (error) {\n const formattedError = this.formatError(error, 'trackLogin');\n this.logError(formattedError);\n }\n }\n\n /**\n * Track user signup event\n */\n async trackSignup(properties?: SignupEventProperties, options?: SendEventOptions): Promise<void> {\n try {\n return await this.track('signup', properties, options);\n } catch (error) {\n const formattedError = this.formatError(error, 'trackSignup');\n this.logError(formattedError);\n }\n }\n\n /**\n * Track checkout event\n */\n async trackCheckout(properties?: CheckoutEventProperties, options?: SendEventOptions): Promise<void> {\n try {\n return await this.track('checkout', properties, options);\n } catch (error) {\n const formattedError = this.formatError(error, 'trackCheckout');\n this.logError(formattedError);\n }\n }\n\n /**\n * Track page view event\n */\n async trackPageView(properties?: PageViewEventProperties, options?: SendEventOptions): Promise<void> {\n try {\n return await this.track('page_view', properties, options);\n } catch (error) {\n const formattedError = this.formatError(error, 'trackPageView');\n this.logError(formattedError);\n }\n }\n\n /**\n * Track purchase event\n */\n async trackPurchase(properties?: PurchaseEventProperties, options?: SendEventOptions): Promise<void> {\n try {\n return await this.track('purchase', properties, options);\n } catch (error) {\n const formattedError = this.formatError(error, 'trackPurchase');\n this.logError(formattedError);\n }\n }\n\n /**\n * Track search event\n */\n async trackSearch(properties?: SearchEventProperties, options?: SendEventOptions): Promise<void> {\n try {\n return await this.track('search', properties, options);\n } catch (error) {\n const formattedError = this.formatError(error, 'trackSearch');\n this.logError(formattedError);\n }\n }\n\n /**\n * Track add to cart event\n */\n async trackAddToCart(properties?: AddToCartEventProperties, options?: SendEventOptions): Promise<void> {\n try {\n return await this.track('add_to_cart', properties, options);\n } catch (error) {\n const formattedError = this.formatError(error, 'trackAddToCart');\n this.logError(formattedError);\n }\n }\n\n /**\n * Track remove from cart event\n */\n async trackRemoveFromCart(properties?: RemoveFromCartEventProperties, options?: SendEventOptions): Promise<void> {\n try {\n return await this.track('remove_from_cart', properties, options);\n } catch (error) {\n const formattedError = this.formatError(error, 'trackRemoveFromCart');\n this.logError(formattedError);\n }\n }\n\n /**\n * Manually flush all queued events\n */\n async flush(): Promise<void> {\n try {\n if (this.eventQueue.length === 0) return;\n\n const eventsToSend = [...this.eventQueue];\n this.eventQueue = [];\n\n // Split events into chunks to respect maxEventsPerRequest limit\n const chunks = this.chunkEvents(eventsToSend, this.config.maxEventsPerRequest);\n \n // Send all chunks sequentially to maintain order\n for (const chunk of chunks) {\n await this.sendEvents(chunk);\n }\n } catch (error) {\n const formattedError = this.formatError(error, 'flush');\n this.logError(formattedError);\n }\n }\n\n // Remote Config Methods\n\n /**\n * Initialize configuration cache from localStorage\n */\n private initializeConfigCache(): void {\n if (!this.config.enableConfigCache || typeof window === 'undefined') return;\n\n try {\n const cached = localStorage.getItem(this.config.configCacheKey);\n if (cached) {\n this.configCache = JSON.parse(cached);\n this.log('Loaded configuration from cache:', this.configCache);\n }\n } catch (error) {\n this.log('Failed to load configuration cache:', error);\n }\n }\n\n /**\n * Save configuration cache to localStorage\n */\n private saveConfigCache(cache: RemoteConfigCache): void {\n if (!this.config.enableConfigCache || typeof window === 'undefined') return;\n\n try {\n localStorage.setItem(this.config.configCacheKey, JSON.stringify(cache));\n this.log('Saved configuration to cache:', cache);\n } catch (error) {\n this.log('Failed to save configuration cache:', error);\n }\n }\n\n /**\n * Get configuration value with fallback to defaults\n */\n getConfig(key: string): string | undefined {\n // First check cache\n if (this.configCache?.configurations?.[key]) {\n return this.configCache.configurations[key];\n }\n\n // Then check defaults\n if (this.config.defaultConfigurations?.[key]) {\n return this.config.defaultConfigurations[key];\n }\n\n return undefined;\n }\n\n /**\n * Get all configurations with fallback to defaults\n */\n getAllConfigs(): Record<string, string> {\n const configs = { ...this.config.defaultConfigurations };\n \n if (this.configCache?.configurations) {\n Object.assign(configs, this.configCache.configurations);\n }\n\n return configs;\n }\n\n /**\n * Fetch configurations from API\n */\n async fetchConfig(options: RemoteConfigOptions = {}): Promise<RemoteConfigResponse | null> {\n try {\n if (this.isDestroyed) {\n const error = new Error('Grain Analytics: Client has been destroyed');\n const formattedError = this.formatError(error, 'fetchConfig (client destroyed)');\n this.logError(formattedError);\n return null;\n }\n\n const userId = options.userId || this.getEffectiveUserId();\n const immediateKeys = options.immediateKeys || [];\n const properties = options.properties || {};\n\n const request: RemoteConfigRequest = {\n userId,\n immediateKeys,\n properties,\n };\n\n let lastError: unknown;\n\n for (let attempt = 0; attempt <= this.config.retryAttempts; attempt++) {\n try {\n const headers = await this.getAuthHeaders();\n const url = `${this.config.apiUrl}/v1/client/${encodeURIComponent(this.config.tenantId)}/config/configurations`;\n\n this.log(`Fetching configurations for user ${userId} (attempt ${attempt + 1})`);\n\n const response = await fetch(url, {\n method: 'POST',\n headers,\n body: JSON.stringify(request),\n });\n\n if (!response.ok) {\n let errorMessage = `HTTP ${response.status}`;\n try {\n const errorBody = await response.json();\n if (errorBody?.message) {\n errorMessage = errorBody.message;\n }\n } catch {\n const errorText = await response.text();\n if (errorText) {\n errorMessage = errorText;\n }\n }\n \n const error = new Error(`Failed to fetch configurations: ${errorMessage}`) as Error & { status?: number };\n error.status = response.status;\n throw error;\n }\n\n const configResponse: RemoteConfigResponse = await response.json();\n \n // Update cache if successful\n if (configResponse.configurations) {\n this.updateConfigCache(configResponse, userId);\n }\n\n this.log(`Successfully fetched configurations for user ${userId}:`, configResponse);\n return configResponse;\n \n } catch (error) {\n lastError = error;\n \n if (attempt === this.config.retryAttempts) {\n // Last attempt, don't retry - log error gracefully\n const formattedError = this.formatError(error, `fetchConfig (attempt ${attempt + 1}/${this.config.retryAttempts + 1})`);\n this.logError(formattedError);\n return null;\n }\n \n if (!this.isRetriableError(error)) {\n // Non-retriable error, don't retry - log error gracefully\n const formattedError = this.formatError(error, 'fetchConfig (non-retriable error)');\n this.logError(formattedError);\n return null;\n }\n \n const delayMs = this.config.retryDelay * Math.pow(2, attempt);\n this.log(`Retrying config fetch in ${delayMs}ms after error:`, error);\n await this.delay(delayMs);\n }\n }\n\n return null;\n } catch (error) {\n const formattedError = this.formatError(error, 'fetchConfig');\n this.logError(formattedError);\n return null;\n }\n }\n\n /**\n * Get configuration asynchronously (cache-first with fallback to API)\n */\n async getConfigAsync(key: string, options: RemoteConfigOptions = {}): Promise<string | undefined> {\n try {\n // Return immediately if we have it in cache and not forcing refresh\n if (!options.forceRefresh && this.configCache?.configurations?.[key]) {\n return this.configCache.configurations[key];\n }\n\n // Return default if available and not forcing refresh\n if (!options.forceRefresh && this.config.defaultConfigurations?.[key]) {\n return this.config.defaultConfigurations[key];\n }\n\n // Fetch from API\n const response = await this.fetchConfig(options);\n if (response) {\n return response.configurations[key];\n }\n \n // Return default as fallback\n return this.config.defaultConfigurations?.[key];\n } catch (error) {\n const formattedError = this.formatError(error, 'getConfigAsync');\n this.logError(formattedError);\n // Return default as fallback\n return this.config.defaultConfigurations?.[key];\n }\n }\n\n /**\n * Get all configurations asynchronously (cache-first with fallback to API)\n */\n async getAllConfigsAsync(options: RemoteConfigOptions = {}): Promise<Record<string, string>> {\n try {\n // Return cache if available and not forcing refresh\n if (!options.forceRefresh && this.configCache?.configurations) {\n return { ...this.config.defaultConfigurations, ...this.configCache.configurations };\n }\n\n // Fetch from API\n const response = await this.fetchConfig(options);\n if (response) {\n return { ...this.config.defaultConfigurations, ...response.configurations };\n }\n \n // Return defaults as fallback\n return { ...this.config.defaultConfigurations };\n } catch (error) {\n const formattedError = this.formatError(error, 'getAllConfigsAsync');\n this.logError(formattedError);\n // Return defaults as fallback\n return { ...this.config.defaultConfigurations };\n }\n }\n\n /**\n * Update configuration cache and notify listeners\n */\n private updateConfigCache(response: RemoteConfigResponse, userId: string): void {\n const newCache: RemoteConfigCache = {\n configurations: response.configurations,\n snapshotId: response.snapshotId,\n timestamp: response.timestamp,\n userId,\n };\n\n const oldConfigs = this.configCache?.configurations || {};\n this.configCache = newCache;\n this.saveConfigCache(newCache);\n\n // Notify listeners if configurations changed\n if (JSON.stringify(oldConfigs) !== JSON.stringify(response.configurations)) {\n this.notifyConfigChangeListeners(response.configurations);\n }\n }\n\n /**\n * Add configuration change listener\n */\n addConfigChangeListener(listener: ConfigChangeListener): void {\n this.configChangeListeners.push(listener);\n }\n\n /**\n * Remove configuration change listener\n */\n removeConfigChangeListener(listener: ConfigChangeListener): void {\n const index = this.configChangeListeners.indexOf(listener);\n if (index > -1) {\n this.configChangeListeners.splice(index, 1);\n }\n }\n\n /**\n * Notify all configuration change listeners\n */\n private notifyConfigChangeListeners(configurations: Record<string, string>): void {\n this.configChangeListeners.forEach(listener => {\n try {\n listener(configurations);\n } catch (error) {\n console.error('[Grain Analytics] Config change listener error:', error);\n }\n });\n }\n\n /**\n * Start automatic configuration refresh timer\n */\n private startConfigRefreshTimer(): void {\n if (this.configRefreshTimer) {\n clearInterval(this.configRefreshTimer);\n }\n\n this.configRefreshTimer = window.setInterval(() => {\n if (!this.isDestroyed && this.globalUserId) {\n this.fetchConfig().catch((error) => {\n const formattedError = this.formatError(error, 'auto-config refresh');\n this.logError(formattedError);\n });\n }\n }, this.config.configRefreshInterval);\n }\n\n /**\n * Stop automatic configuration refresh timer\n */\n private stopConfigRefreshTimer(): void {\n if (this.configRefreshTimer) {\n clearInterval(this.configRefreshTimer);\n this.configRefreshTimer = null;\n }\n }\n\n /**\n * Preload configurations for immediate access\n */\n async preloadConfig(immediateKeys: string[] = [], properties?: Record<string, string>): Promise<void> {\n try {\n if (!this.globalUserId) {\n this.log('Cannot preload config: no user ID set');\n return;\n }\n\n const response = await this.fetchConfig({ immediateKeys, properties });\n if (response) {\n this.startConfigRefreshTimer();\n }\n } catch (error) {\n const formattedError = this.formatError(error, 'preloadConfig');\n this.logError(formattedError);\n }\n }\n\n /**\n * Split events array into chunks of specified size\n */\n private chunkEvents(events: EventPayload[], chunkSize: number): EventPayload[][] {\n const chunks: EventPayload[][] = [];\n for (let i = 0; i < events.length; i += chunkSize) {\n chunks.push(events.slice(i, i + chunkSize));\n }\n return chunks;\n }\n\n /**\n * Destroy the client and clean up resources\n */\n destroy(): void {\n this.isDestroyed = true;\n \n if (this.flushTimer) {\n clearInterval(this.flushTimer);\n this.flushTimer = null;\n }\n\n // Stop config refresh timer\n this.stopConfigRefreshTimer();\n\n // Clear config change listeners\n this.configChangeListeners = [];\n\n // Send any remaining events (in chunks if necessary)\n if (this.eventQueue.length > 0) {\n const eventsToSend = [...this.eventQueue];\n this.eventQueue = [];\n \n const chunks = this.chunkEvents(eventsToSend, this.config.maxEventsPerRequest);\n \n // Send first chunk with beacon (most important for page unload)\n if (chunks.length > 0) {\n this.sendEventsWithBeacon(chunks[0]).catch(() => {\n // Silently fail during cleanup\n });\n \n // If there are more chunks, try to send them with regular fetch\n for (let i = 1; i < chunks.length; i++) {\n this.sendEventsWithBeacon(chunks[i]).catch(() => {\n // Silently fail during cleanup\n });\n }\n }\n }\n }\n}\n\n/**\n * Create a new Grain Analytics client\n */\nexport function createGrainAnalytics(config: GrainConfig): GrainAnalytics {\n return new GrainAnalytics(config);\n}\n\n// Default export for convenience\nexport default GrainAnalytics;\n\n// Global interface for IIFE build\ndeclare global {\n interface Window {\n Grain?: {\n GrainAnalytics: typeof GrainAnalytics;\n createGrainAnalytics: typeof createGrainAnalytics;\n };\n }\n}\n\n// Auto-setup for IIFE build\nif (typeof window !== 'undefined') {\n window.Grain = {\n GrainAnalytics,\n createGrainAnalytics,\n };\n}"],
5
+ "mappings": "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",
6
6
  "names": ["src_exports", "__export", "GrainAnalytics", "createGrainAnalytics", "src_default", "config", "c", "r", "uuid", "storageKey", "stored", "error", "args", "events", "eventNames", "e", "userIds", "totalProperties", "totalSize", "event", "properties", "context", "digest", "code", "message", "status", "formattedError", "timestamp", "errorOutput", "fn", "headers", "token", "ms", "resolve", "lastError", "attempt", "url", "response", "errorMessage", "errorBody", "errorText", "delayMs", "body", "blob", "handleBeforeUnload", "eventsToSend", "chunks", "eventOrName", "propertiesOrOptions", "options", "opts", "formattedEvent", "userId", "propertyKeys", "serializedProperties", "key", "value", "payload", "chunk", "cached", "cache", "configs", "immediateKeys", "request", "configResponse", "newCache", "oldConfigs", "listener", "index", "configurations", "chunkSize", "i"]
7
7
  }
package/dist/index.js CHANGED
@@ -295,7 +295,7 @@ class GrainAnalytics {
295
295
  const response = await fetch(url, {
296
296
  method: 'POST',
297
297
  headers,
298
- body: JSON.stringify({ events }),
298
+ body: JSON.stringify(events),
299
299
  });
300
300
  if (!response.ok) {
301
301
  let errorMessage = `HTTP ${response.status}`;
package/dist/index.mjs CHANGED
@@ -291,7 +291,7 @@ export class GrainAnalytics {
291
291
  const response = await fetch(url, {
292
292
  method: 'POST',
293
293
  headers,
294
- body: JSON.stringify({ events }),
294
+ body: JSON.stringify(events),
295
295
  });
296
296
  if (!response.ok) {
297
297
  let errorMessage = `HTTP ${response.status}`;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@grainql/analytics-web",
3
- "version": "1.7.0",
3
+ "version": "1.7.1",
4
4
  "description": "Lightweight TypeScript SDK for sending analytics events and managing remote configurations via Grain's REST API",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",