@od-oneapp/analytics 2026.2.1701 → 2026.2.2301-canary
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1 -1
- package/{ai-YMnynb-t.mjs → ai-Co8hBoEj.mjs} +2 -2
- package/{ai-YMnynb-t.mjs.map → ai-Co8hBoEj.mjs.map} +1 -1
- package/{client-D339NFJS.mjs → client-B8gfgflr.mjs} +1 -1
- package/{client-D339NFJS.mjs.map → client-B8gfgflr.mjs.map} +1 -1
- package/{client-CeOLjbac.mjs → client-C35AzV71.mjs} +21 -6
- package/client-C35AzV71.mjs.map +1 -0
- package/{client-CcFTauAh.mjs → client-DDehaDSz.mjs} +1 -1
- package/{client-CcFTauAh.mjs.map → client-DDehaDSz.mjs.map} +1 -1
- package/{client-CTzJVFU5.mjs → client-DK8twEdp.mjs} +2 -2
- package/{client-CTzJVFU5.mjs.map → client-DK8twEdp.mjs.map} +1 -1
- package/client-next.d.mts +7 -7
- package/client-next.d.mts.map +1 -1
- package/client-next.mjs +1615 -31
- package/client-next.mjs.map +1 -1
- package/client.d.mts +9 -9
- package/client.mjs +8 -116
- package/client.mjs.map +1 -1
- package/{config-P6P5adJg.mjs → config-6Mwe7b2O.mjs} +1 -1
- package/{config-P6P5adJg.mjs.map → config-6Mwe7b2O.mjs.map} +1 -1
- package/{config-DPS6bSYo.d.mts → config-Ciu7O6n1.d.mts} +2 -2
- package/{config-DPS6bSYo.d.mts.map → config-Ciu7O6n1.d.mts.map} +1 -1
- package/{console-8bND3mMU.mjs → console-BpU88FNF.mjs} +2 -2
- package/console-BpU88FNF.mjs.map +1 -0
- package/core-DBLE5iTF.mjs +95 -0
- package/core-DBLE5iTF.mjs.map +1 -0
- package/{ecommerce-Cgu4wlux.mjs → ecommerce-DGG1FbiH.mjs} +2 -2
- package/{ecommerce-Cgu4wlux.mjs.map → ecommerce-DGG1FbiH.mjs.map} +1 -1
- package/{emitters-DldkVSPp.d.mts → emitters-BDSsleo_.d.mts} +2 -2
- package/{emitters-DldkVSPp.d.mts.map → emitters-BDSsleo_.d.mts.map} +1 -1
- package/{emitters-6-nKo8i-.mjs → emitters-BvEelkxS.mjs} +1 -1
- package/{emitters-6-nKo8i-.mjs.map → emitters-BvEelkxS.mjs.map} +1 -1
- package/{index-jPzXRn52.d.mts → index-BWhDEs8u.d.mts} +3 -3
- package/{index-jPzXRn52.d.mts.map → index-BWhDEs8u.d.mts.map} +1 -1
- package/{index-BkIWe--N.d.mts → index-Cp-N57Zb.d.mts} +2 -2
- package/{index-BkIWe--N.d.mts.map → index-Cp-N57Zb.d.mts.map} +1 -1
- package/{index-BfNWgfa5.d.mts → index-DTvdqV7H.d.mts} +14 -2
- package/{index-BfNWgfa5.d.mts.map → index-DTvdqV7H.d.mts.map} +1 -1
- package/{manager-DvRRjza6.d.mts → manager-OJpSKwqb.d.mts} +3 -2
- package/manager-OJpSKwqb.d.mts.map +1 -0
- package/module-DVAU7zKb.mjs +5850 -0
- package/module-DVAU7zKb.mjs.map +1 -0
- package/package.json +42 -37
- package/{posthog-bootstrap-DWxFrxlt.d.mts → posthog-bootstrap-Bu1BfhVv.d.mts} +3 -3
- package/{posthog-bootstrap-DWxFrxlt.d.mts.map → posthog-bootstrap-Bu1BfhVv.d.mts.map} +1 -1
- package/{posthog-bootstrap-CYfIy_WS.mjs → posthog-bootstrap-DkPdn-hA.mjs} +81 -46
- package/posthog-bootstrap-DkPdn-hA.mjs.map +1 -0
- package/providers-http-client.d.mts +1 -1
- package/providers-http-client.d.mts.map +1 -1
- package/providers-http-client.mjs +35 -7
- package/providers-http-client.mjs.map +1 -1
- package/providers-http-server.d.mts +1 -1
- package/providers-http-server.d.mts.map +1 -1
- package/providers-http-server.mjs +19 -3
- package/providers-http-server.mjs.map +1 -1
- package/providers-http.d.mts +9 -1
- package/providers-http.d.mts.map +1 -1
- package/server-edge.d.mts +3 -3
- package/server-edge.mjs +4 -4
- package/server-edge.mjs.map +1 -1
- package/server-next.d.mts +9 -9
- package/server-next.mjs +5 -5
- package/server.d.mts +9 -9
- package/server.mjs +5 -5
- package/{service-Duqnlppl.mjs → service-NuHnv30x.mjs} +51 -119
- package/service-NuHnv30x.mjs.map +1 -0
- package/shared.d.mts +4 -4
- package/shared.mjs +3 -3
- package/{types-CBvxUEaF.d.mts → types-DEcTnnFe.d.mts} +1 -1
- package/{types-CBvxUEaF.d.mts.map → types-DEcTnnFe.d.mts.map} +1 -1
- package/{types-BxBnNQ0V.d.mts → types-cMMfHIpi.d.mts} +1 -1
- package/{types-BxBnNQ0V.d.mts.map → types-cMMfHIpi.d.mts.map} +1 -1
- package/types.d.mts +3 -3
- package/{vercel-types-lwakUfoI.d.mts → vercel-types-oM7Sn385.d.mts} +1 -1
- package/{vercel-types-lwakUfoI.d.mts.map → vercel-types-oM7Sn385.d.mts.map} +1 -1
- package/client-CeOLjbac.mjs.map +0 -1
- package/console-8bND3mMU.mjs.map +0 -1
- package/manager-DvRRjza6.d.mts.map +0 -1
- package/posthog-bootstrap-CYfIy_WS.mjs.map +0 -1
- package/service-Duqnlppl.mjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service-NuHnv30x.mjs","names":[],"sources":["../src/server/manager.ts","../src/shared/utils/validation.ts","../src/shared/ingestion/schemas.ts","../src/shared/ingestion/service.ts"],"sourcesContent":["/**\n * @fileoverview Server analytics manager with static provider registry\n * Server analytics manager with static provider registry\n */\n\nimport { SegmentServerProvider } from '@od-oneapp/integration-segment/analytics-provider/server';\nimport { VercelServerProvider } from '@od-oneapp/integration-vercel/analytics-provider/server';\n\nimport { ConsoleProvider } from '../providers/console/server';\nimport { HttpServerProvider } from '../providers/http/server';\nimport { createAnalyticsManager } from '../shared/utils/manager';\n\nimport type { AnalyticsConfig, AnalyticsManager, ProviderRegistry } from '../shared/types/types';\n\n// Static provider registry for server environments\nconst SERVER_PROVIDERS: ProviderRegistry = {\n console: config => new ConsoleProvider(config),\n http: config => new HttpServerProvider(config),\n segment: config => new SegmentServerProvider(config),\n vercel: config => new VercelServerProvider(config),\n};\n\n/**\n * Create and initialize a server analytics instance\n * This is the primary way to create analytics for server-side applications\n *\n * @example\n * ```typescript\n * const analytics = await createServerAnalytics({\n * providers: {\n * segment: { writeKey: process.env.SEGMENT_KEY! },\n * },\n * });\n * await analytics.page('/admin', { title: 'Admin Dashboard' });\n * ```\n * @param config - Analytics configuration including providers and settings\n * @returns Promise resolving to initialized analytics manager\n */\nexport async function createServerAnalytics(config: AnalyticsConfig): Promise<AnalyticsManager> {\n const manager = createAnalyticsManager(config, SERVER_PROVIDERS);\n await manager.initialize();\n return manager;\n}\n\n/**\n * Create a server analytics instance without initializing\n * Useful when you need to control initialization timing\n *\n * @example\n * ```typescript\n * const analytics = createServerAnalyticsUninitialized(config);\n * if (shouldEmit) {\n * await analytics.initialize();\n * await analytics.track('CRON Completed');\n * }\n * ```\n * @param config - Analytics configuration including providers and settings\n * @returns Uninitialized analytics manager instance\n */\nexport function createServerAnalyticsUninitialized(config: AnalyticsConfig): AnalyticsManager {\n return createAnalyticsManager(config, SERVER_PROVIDERS);\n}\n","/**\n * @fileoverview Validation utilities for analytics configuration\n *\n * This module provides comprehensive validation for analytics configurations,\n * including provider validation, environment-specific checks, and helpful\n * warnings for common misconfigurations.\n *\n * **Features**:\n * - Configuration structure validation\n * - Provider-specific field validation\n * - Environment variable validation\n * - Environment-specific warnings\n * - Detailed error reporting\n *\n * @module @od-oneapp/analytics/shared/utils/validation\n */\n\nimport { logError, logInfo, logWarn } from '@od-oneapp/shared/logger';\n\nimport { PROVIDER_REQUIREMENTS } from './config';\n\nimport type { AnalyticsConfig, ProviderConfig } from '../types/types';\n\n/**\n * Validation error structure.\n *\n * Represents a single validation error with field, message, and provider context.\n */\nexport interface ValidationError {\n /** Field name that failed validation */\n field: string;\n /** Human-readable error message */\n message: string;\n /** Provider name (or 'global' for config-level errors) */\n provider: string;\n}\n\n/**\n * Validation result structure.\n *\n * Contains validation errors, warnings, and overall validity status.\n */\nexport interface ValidationResult {\n /** Array of validation errors */\n errors: ValidationError[];\n /** Whether the configuration is valid (no errors) */\n isValid: boolean;\n /** Array of warning messages */\n warnings: string[];\n}\n\n/**\n * Comprehensive configuration validation.\n *\n * Validates the entire analytics configuration structure, including:\n * - Configuration object structure\n * - Providers object existence\n * - Individual provider configurations\n * - Environment-specific warnings\n *\n * Accepts `unknown` input for defensive validation of potentially malformed configs.\n *\n * @param {unknown} config - Analytics configuration to validate\n * @returns {ValidationResult} Validation result with errors, warnings, and validity status\n *\n * @example\n * ```typescript\n * const result = validateAnalyticsConfig(config);\n * if (!result.isValid) {\n * console.error('Validation errors:', result.errors);\n * }\n * if (result.warnings.length > 0) {\n * console.warn('Warnings:', result.warnings);\n * }\n * ```\n */\nexport function validateAnalyticsConfig(config: unknown): ValidationResult {\n const errors: ValidationError[] = [];\n const warnings: string[] = [];\n\n // Check if config exists and is an object\n if (!config || typeof config !== 'object') {\n errors.push({\n provider: 'global',\n field: 'config',\n message: 'Analytics configuration is required and must be an object',\n });\n return { isValid: false, errors, warnings };\n }\n\n const typedConfig = config as AnalyticsConfig;\n\n // Check if providers object exists\n if (!typedConfig.providers || typeof typedConfig.providers !== 'object') {\n errors.push({\n provider: 'global',\n field: 'providers',\n message: 'Providers configuration is required and must be an object',\n });\n return { isValid: false, errors, warnings };\n }\n\n // Check if at least one provider is configured\n const providerCount = Object.keys(typedConfig.providers).length;\n if (providerCount === 0) {\n warnings.push('No providers configured. Analytics will not track any events.');\n }\n\n // Validate each provider\n for (const [providerName, providerConfig] of Object.entries(typedConfig.providers)) {\n const providerErrors = validateProvider(providerName, providerConfig);\n errors.push(...providerErrors);\n }\n\n // Environment-specific warnings\n const isBrowser = typeof window !== 'undefined';\n\n // Mixpanel warning for client-side usage\n if (isBrowser && typedConfig.providers.mixpanel) {\n warnings.push(\n 'Mixpanel provider configured on client-side. Consider using server-side for better performance.',\n );\n }\n\n if (!isBrowser && typedConfig.providers.vercel) {\n warnings.push(\n 'Vercel Analytics has limited server-side support. Consider using client-side for better features.',\n );\n }\n\n return {\n isValid: errors.length === 0,\n errors,\n warnings,\n };\n}\n\n/**\n * Validate a single provider configuration.\n *\n * Checks that the provider is known and that all required fields are present.\n *\n * @param {string} providerName - Name of the provider to validate\n * @param {ProviderConfig} config - Provider configuration to validate\n * @returns {ValidationError[]} Array of validation errors (empty if valid)\n *\n * @example\n * ```typescript\n * const errors = validateProvider('posthog', { apiKey: 'phc_xxx' });\n * if (errors.length > 0) {\n * console.error('Provider errors:', errors);\n * }\n * ```\n */\nexport function validateProvider(providerName: string, config: ProviderConfig): ValidationError[] {\n const errors: ValidationError[] = [];\n\n // Check if provider is known\n const knownProviders = ['segment', 'posthog', 'vercel', 'console', 'mixpanel'];\n if (!knownProviders.includes(providerName)) {\n errors.push({\n provider: providerName,\n field: 'name',\n message: `Unknown provider '${providerName}'. Known providers: ${knownProviders.join(', ')}`,\n });\n return errors;\n }\n\n // Check required fields\n const requiredFields = PROVIDER_REQUIREMENTS[providerName] ?? [];\n for (const field of requiredFields) {\n const value = config[field as keyof ProviderConfig];\n\n if (!value) {\n errors.push({\n provider: providerName,\n field,\n message: `Required field '${field}' is missing for provider '${providerName}'`,\n });\n } else if (typeof value === 'string' && value.trim() === '') {\n errors.push({\n provider: providerName,\n field,\n message: `Required field '${field}' cannot be empty for provider '${providerName}'`,\n });\n }\n }\n\n // Provider-specific validation\n switch (providerName) {\n case 'segment':\n if (config.writeKey && !isValidSegmentWriteKey(config.writeKey)) {\n errors.push({\n provider: providerName,\n field: 'writeKey',\n message: 'Segment writeKey appears to be invalid format',\n });\n }\n break;\n\n case 'posthog':\n if (config.apiKey && !isValidPostHogApiKey(config.apiKey)) {\n errors.push({\n provider: providerName,\n field: 'apiKey',\n message: 'PostHog apiKey appears to be invalid format',\n });\n }\n break;\n }\n\n return errors;\n}\n\n/**\n * Validate environment variables for analytics.\n *\n * Checks common analytics environment variables for:\n * - Empty values\n * - Placeholder text\n * - Development environment warnings\n *\n * @returns {ValidationResult} Validation result with warnings about environment variables\n *\n * @example\n * ```typescript\n * const result = validateEnvironmentVariables();\n * if (result.warnings.length > 0) {\n * console.warn('Environment warnings:', result.warnings);\n * }\n * ```\n */\nexport function validateEnvironmentVariables(): ValidationResult {\n const errors: ValidationError[] = [];\n const warnings: string[] = [];\n\n // Check for common environment variables\n const envVars = {\n POSTHOG_API_KEY: process.env.POSTHOG_API_KEY,\n SEGMENT_WRITE_KEY: process.env.SEGMENT_WRITE_KEY,\n };\n\n for (const [varName, value] of Object.entries(envVars)) {\n if (value && typeof value === 'string') {\n if (value.trim() === '') {\n warnings.push(`Environment variable ${varName} is set but empty`);\n } else if (value.includes('your-') || value.includes('paste-')) {\n warnings.push(`Environment variable ${varName} appears to contain placeholder text`);\n }\n }\n }\n\n // Warn about development environment\n if (\n process.env.NODE_ENV === 'development' &&\n !envVars.SEGMENT_WRITE_KEY &&\n !envVars.POSTHOG_API_KEY\n ) {\n warnings.push(\n 'No analytics environment variables detected in development. Consider using console provider for debugging.',\n );\n }\n\n return {\n isValid: errors.length === 0,\n errors,\n warnings,\n };\n}\n\n/**\n * Validates Segment write key format.\n *\n * Checks that the write key matches Segment's expected format:\n * - Exactly 32 alphanumeric characters\n * - Not a placeholder value\n *\n * @param {string} writeKey - Write key to validate\n * @returns {boolean} `true` if valid, `false` otherwise\n *\n * @internal\n */\nfunction isValidSegmentWriteKey(writeKey: string): boolean {\n // Segment write keys are exactly 32 characters, alphanumeric\n if (!/^[\\dA-Za-z]{32}$/.test(writeKey)) {\n return false;\n }\n\n // Check for common placeholder patterns\n const placeholders = ['your-write-key', 'paste-key-here', 'xxxxxxxx', 'example'];\n if (placeholders.some(p => writeKey.toLowerCase().includes(p.toLowerCase()))) {\n return false;\n }\n\n return true;\n}\n\n/**\n * Validates PostHog API key format.\n *\n * Checks that the API key matches PostHog's expected format:\n * - Starts with `phc_` prefix\n * - Followed by 43 alphanumeric/dash/underscore characters\n * - Not a placeholder value\n *\n * @param {string} apiKey - API key to validate\n * @returns {boolean} `true` if valid, `false` otherwise\n *\n * @internal\n */\nfunction isValidPostHogApiKey(apiKey: string): boolean {\n // PostHog keys: phc_ prefix + 43 alphanumeric/dash/underscore characters\n if (!/^phc_[\\w-]{43}$/.test(apiKey)) {\n return false;\n }\n\n // Check for placeholder patterns\n const placeholders = ['your-api-key', 'paste-key-here', 'xxxxxxxx', 'example'];\n if (placeholders.some(p => apiKey.toLowerCase().includes(p.toLowerCase()))) {\n return false;\n }\n\n return true;\n}\n\n/**\n * Utility to throw validation errors (for strict validation).\n *\n * Validates the configuration and throws an error if validation fails.\n * Useful for ensuring configuration is valid before using analytics.\n *\n * @param {AnalyticsConfig} config - Analytics configuration to validate\n * @throws {Error} If configuration validation fails\n *\n * @example\n * ```typescript\n * try {\n * validateConfigOrThrow(config);\n * // Configuration is valid, proceed\n * } catch (error) {\n * console.error('Invalid config:', error.message);\n * }\n * ```\n */\nexport function validateConfigOrThrow(config: AnalyticsConfig): void {\n const result = validateAnalyticsConfig(config);\n\n if (!result.isValid) {\n const errorMessages = result.errors\n .map(error => `${error.provider}.${error.field}: ${error.message}`)\n .join('\\n');\n\n throw new Error(`Analytics configuration validation failed:\\n${errorMessages}`);\n }\n\n // Log warnings but don't throw\n if (result.warnings.length > 0 && config.onError) {\n config.onError(new Error('Analytics configuration warnings'), {\n provider: 'analytics',\n method: 'validateConfig',\n warnings: result.warnings,\n });\n }\n}\n\n/**\n * Development helper to check configuration.\n *\n * Logs configuration details and validation results for debugging.\n * Only useful in development environments.\n *\n * @param {AnalyticsConfig} config - Analytics configuration to debug\n * @returns {Promise<void>} Promise that resolves when debugging is complete\n *\n * @example\n * ```typescript\n * if (process.env.NODE_ENV === 'development') {\n * await debugConfig(config);\n * }\n * ```\n */\nexport async function debugConfig(config: AnalyticsConfig): Promise<void> {\n const result = validateAnalyticsConfig(config);\n\n logInfo('Analytics Configuration Debug', {\n config,\n validationResult: result,\n });\n\n if (result.errors.length > 0) {\n logError('Analytics configuration errors: Validation failed', {\n errors: result.errors,\n });\n }\n\n if (result.warnings.length > 0) {\n logWarn('Analytics configuration warnings', { warnings: result.warnings });\n }\n}\n","/**\n * @fileoverview Event Ingestion Schemas and Validation\n *\n * Defines Zod schemas for validating event ingestion payloads. These schemas\n * ensure type-safe, secure event ingestion with proper validation.\n *\n * **Key Features**:\n * - CloudEvents-style fields for future interoperability\n * - Support for single events and batched arrays\n * - Strict validation of required fields\n * - Typed extensions per event category\n *\n * @module @od-oneapp/analytics/shared/ingestion/schemas\n */\n\nimport { z } from 'zod';\n\n// =============================================================================\n// Base Schemas\n// =============================================================================\n\n/**\n * Property value schema - safe, serializable values only.\n */\nexport const PropertyValueSchema = z.union([\n z.string(),\n z.number(),\n z.boolean(),\n z.null(),\n z.date(), // Accept Date objects only; ISO strings are already handled as strings\n]);\n\n/**\n * Property object schema with nested structure support.\n */\nexport const PropertyObjectSchema: z.ZodType<Record<string, unknown>> = z.record(\n z.string(),\n z.lazy(() =>\n z.union([PropertyValueSchema, z.array(PropertyValueSchema), z.record(z.string(), z.unknown())]),\n ),\n);\n\n/**\n * Emitter context schema - contextual information about the environment.\n */\nexport const EmitterContextSchema = z\n .object({\n /** Application information */\n app: z\n .object({\n name: z.string().optional(),\n version: z.string().optional(),\n build: z.string().optional(),\n namespace: z.string().optional(),\n })\n .optional(),\n\n /** Campaign/UTM information */\n campaign: z\n .object({\n name: z.string().optional(),\n source: z.string().optional(),\n medium: z.string().optional(),\n term: z.string().optional(),\n content: z.string().optional(),\n })\n .passthrough()\n .optional(),\n\n /** Device information */\n device: z\n .object({\n id: z.string().optional(),\n manufacturer: z.string().optional(),\n model: z.string().optional(),\n name: z.string().optional(),\n type: z.string().optional(),\n version: z.string().optional(),\n })\n .optional(),\n\n /** User's IP address */\n ip: z.string().optional(),\n\n /** Library making the request */\n library: z\n .object({\n name: z.string(),\n version: z.string(),\n })\n .optional(),\n\n /** User's locale (e.g., 'en-US') */\n locale: z.string().optional(),\n\n /** Network information */\n network: z\n .object({\n bluetooth: z.boolean().optional(),\n carrier: z.string().optional(),\n cellular: z.boolean().optional(),\n wifi: z.boolean().optional(),\n })\n .optional(),\n\n /** OS information */\n os: z\n .object({\n name: z.string().optional(),\n version: z.string().optional(),\n })\n .optional(),\n\n /** Page information */\n page: z\n .object({\n path: z.string().optional(),\n // Use permissive string validation for referrer/url since real-world values\n // may be malformed, truncated, or non-standard (e.g., data: URIs, about:blank)\n referrer: z.string().optional(),\n search: z.string().optional(),\n title: z.string().optional(),\n url: z.string().optional(),\n })\n .optional(),\n\n /** Screen information */\n screen: z\n .object({\n density: z.number().optional(),\n height: z.number().int().positive().optional(),\n width: z.number().int().positive().optional(),\n })\n .optional(),\n\n /** User's timezone (tzdata string) */\n timezone: z.string().optional(),\n\n /** Group/account ID */\n groupId: z.string().optional(),\n\n /** User agent string */\n userAgent: z.string().optional(),\n\n /** Channel where request originated */\n channel: z.enum(['server', 'browser', 'mobile', 'api']).optional(),\n\n /** Location context */\n location: z\n .object({\n city: z.string().optional(),\n country: z.string().optional(),\n latitude: z.number().optional(),\n longitude: z.number().optional(),\n region: z.string().optional(),\n })\n .optional(),\n })\n .passthrough();\n\n// =============================================================================\n// Event Type Schemas\n// =============================================================================\n\n/**\n * Base payload schema - common fields for all event types.\n */\nconst BasePayloadSchema = z\n .object({\n /** Anonymous ID if user is not identified */\n anonymousId: z.string().max(255).optional(),\n\n /** User ID (at least one of userId or anonymousId required) */\n userId: z.string().max(255).optional(),\n\n /** Timestamp when the event occurred */\n timestamp: z.union([z.string().datetime(), z.date()]).optional(),\n\n /** Original timestamp before processing */\n originalTimestamp: z.union([z.string().datetime(), z.date()]).optional(),\n\n /** Context and control fields */\n context: EmitterContextSchema.optional(),\n\n /** Message ID for deduplication */\n messageId: z.string().uuid().optional(),\n })\n .refine(data => Boolean(data.anonymousId) || Boolean(data.userId), {\n message: 'Either anonymousId or userId must be provided',\n });\n\n/**\n * Track event payload schema.\n * Uses safeExtend() because BasePayloadSchema has refinements (Zod v4 requirement).\n */\nexport const TrackEventSchema = BasePayloadSchema.safeExtend({\n type: z.literal('track'),\n event: z.string().min(1).max(255),\n properties: PropertyObjectSchema.optional(),\n});\n\n/**\n * Identify event payload schema.\n * Uses safeExtend() because BasePayloadSchema has refinements (Zod v4 requirement).\n */\nexport const IdentifyEventSchema = BasePayloadSchema.safeExtend({\n type: z.literal('identify'),\n userId: z.string().min(1).max(255),\n traits: PropertyObjectSchema.optional(),\n});\n\n/**\n * Page event payload schema.\n * Uses safeExtend() because BasePayloadSchema has refinements (Zod v4 requirement).\n */\nexport const PageEventSchema = BasePayloadSchema.safeExtend({\n type: z.literal('page'),\n name: z.string().max(255).optional(),\n category: z.string().max(255).optional(),\n properties: PropertyObjectSchema.optional(),\n});\n\n/**\n * Screen event payload schema.\n * Uses safeExtend() because BasePayloadSchema has refinements (Zod v4 requirement).\n */\nexport const ScreenEventSchema = BasePayloadSchema.safeExtend({\n type: z.literal('screen'),\n name: z.string().max(255).optional(),\n category: z.string().max(255).optional(),\n properties: PropertyObjectSchema.optional(),\n});\n\n/**\n * Group event payload schema.\n * Uses safeExtend() because BasePayloadSchema has refinements (Zod v4 requirement).\n */\nexport const GroupEventSchema = BasePayloadSchema.safeExtend({\n type: z.literal('group'),\n groupId: z.string().min(1).max(255),\n traits: PropertyObjectSchema.optional(),\n});\n\n/**\n * Alias event payload schema.\n * Uses safeExtend() because BasePayloadSchema has refinements (Zod v4 requirement).\n */\nexport const AliasEventSchema = BasePayloadSchema.safeExtend({\n type: z.literal('alias'),\n userId: z.string().min(1).max(255),\n previousId: z.string().min(1).max(255),\n});\n\n/**\n * Union of all event payload schemas.\n */\nexport const EventPayloadSchema = z.discriminatedUnion('type', [\n TrackEventSchema,\n IdentifyEventSchema,\n PageEventSchema,\n ScreenEventSchema,\n GroupEventSchema,\n AliasEventSchema,\n]);\n\n// =============================================================================\n// Ingestion Request Schemas\n// =============================================================================\n\n/**\n * Single event ingestion request schema.\n */\nexport const SingleEventRequestSchema = EventPayloadSchema;\n\n/**\n * Batch event ingestion request schema.\n *\n * The batch size limit is enforced at the service level via `maxBatchSize` config\n * (default: 100) rather than in the schema, allowing for flexible configuration.\n */\nexport const BatchEventRequestSchema = z.object({\n batch: z.array(EventPayloadSchema).min(1),\n});\n\n/**\n * Combined ingestion request schema - accepts single event or batch.\n */\nexport const IngestionRequestSchema = z.union([BatchEventRequestSchema, SingleEventRequestSchema]);\n\n// =============================================================================\n// Ingestion Response Schemas\n// =============================================================================\n\n/**\n * Event processing result.\n */\nexport const EventResultSchema = z.object({\n /** Server-generated event ID */\n id: z.string().uuid(),\n\n /** Original message ID if provided */\n messageId: z.string().uuid().optional(),\n\n /** Event type */\n type: z.enum(['track', 'identify', 'page', 'screen', 'group', 'alias']),\n\n /** Processing status */\n status: z.enum(['accepted', 'rejected']),\n\n /** Error message if rejected */\n error: z.string().optional(),\n});\n\n/**\n * Dispatch outcome for analytics forwarding.\n */\nexport const IngestionDispatchResultSchema = z.object({\n /** Number of events forwarded to emitBatch */\n scheduled: z.number().int().nonnegative(),\n\n /** Number of events passed through emitBatch */\n attempted: z.number().int().nonnegative(),\n\n /** Number of events that failed during emitBatch */\n failed: z.number().int().nonnegative(),\n\n /** Dispatch status */\n status: z.enum(['skipped', 'pending', 'completed', 'completed_with_failures']),\n});\n\n/**\n * Successful ingestion response schema.\n */\nexport const IngestionSuccessResponseSchema = z.object({\n /** Whether the request was successful */\n success: z.literal(true),\n\n /** Number of events accepted */\n accepted: z.number().int().nonnegative(),\n\n /** Number of events rejected */\n rejected: z.number().int().nonnegative(),\n\n /** Per-event results */\n results: z.array(EventResultSchema),\n\n /** Optional dispatch outcome for analytics forwarding */\n dispatch: IngestionDispatchResultSchema.optional(),\n\n /** Server timestamp when events were received */\n receivedAt: z.string().datetime(),\n});\n\n/**\n * Error response schema.\n */\nexport const IngestionErrorResponseSchema = z.object({\n /** Whether the request was successful */\n success: z.literal(false),\n\n /** Error code */\n code: z.string(),\n\n /** Error message */\n error: z.string(),\n\n /** Field-level validation errors */\n fieldErrors: z\n .array(\n z.object({\n path: z.array(z.union([z.string(), z.number()])),\n message: z.string(),\n }),\n )\n .optional(),\n});\n\n/**\n * Combined response schema.\n */\nexport const IngestionResponseSchema = z.union([\n IngestionSuccessResponseSchema,\n IngestionErrorResponseSchema,\n]);\n\n// =============================================================================\n// Type Exports\n// =============================================================================\n\nexport type PropertyValue = z.infer<typeof PropertyValueSchema>;\nexport type PropertyObject = z.infer<typeof PropertyObjectSchema>;\nexport type EmitterContext = z.infer<typeof EmitterContextSchema>;\nexport type TrackEvent = z.infer<typeof TrackEventSchema>;\nexport type IdentifyEvent = z.infer<typeof IdentifyEventSchema>;\nexport type PageEvent = z.infer<typeof PageEventSchema>;\nexport type ScreenEvent = z.infer<typeof ScreenEventSchema>;\nexport type GroupEvent = z.infer<typeof GroupEventSchema>;\nexport type AliasEvent = z.infer<typeof AliasEventSchema>;\nexport type EventPayload = z.infer<typeof EventPayloadSchema>;\nexport type SingleEventRequest = z.infer<typeof SingleEventRequestSchema>;\nexport type BatchEventRequest = z.infer<typeof BatchEventRequestSchema>;\nexport type IngestionRequest = z.infer<typeof IngestionRequestSchema>;\nexport type EventResult = z.infer<typeof EventResultSchema>;\nexport type IngestionDispatchResult = z.infer<typeof IngestionDispatchResultSchema>;\nexport type IngestionSuccessResponse = z.infer<typeof IngestionSuccessResponseSchema>;\nexport type IngestionErrorResponse = z.infer<typeof IngestionErrorResponseSchema>;\nexport type IngestionResponse = z.infer<typeof IngestionResponseSchema>;\n","/**\n * @fileoverview Event Ingestion Service\n *\n * Provides server-side event ingestion functionality. Handles validation,\n * normalization, and forwarding of events to the analytics system.\n *\n * **Key Features**:\n * - Validates incoming events against Zod schemas\n * - Normalizes event payloads with defaults\n * - Forwards events to AnalyticsManager\n * - Tracks ingestion metrics\n * - Handles batch processing efficiently\n *\n * @module @od-oneapp/analytics/shared/ingestion/service\n */\n\nimport { logDebug, logError, logInfo, logWarn } from '@od-oneapp/shared/logs';\n\nimport { sanitizeProperties, validateEventName } from '../utils/security';\n\nimport { BatchEventRequestSchema, EventPayloadSchema, IngestionRequestSchema } from './schemas';\n\nimport type {\n BatchEventRequest,\n EmitterContext,\n EventPayload,\n EventResult,\n IngestionDispatchResult,\n IngestionErrorResponse,\n IngestionRequest,\n IngestionSuccessResponse,\n} from './schemas';\nimport type { EmitterPayload } from '../emitters/emitter-types';\nimport type { AnalyticsManager } from '../types/types';\n\n// =============================================================================\n// Types\n// =============================================================================\n\n/**\n * Ingestion context provided by the caller (usually the API route handler).\n */\nexport interface IngestionContext {\n /** Source identifier (app/module/emitter id) */\n source: string;\n\n /** Tenant/project ID for multi-tenancy */\n tenantId?: string;\n\n /** User ID from auth context */\n userId?: string;\n\n /** Account/organization ID */\n accountId?: string;\n\n /** Client IP address */\n ip?: string;\n\n /** Client user agent */\n userAgent?: string;\n\n /** Environment (dev/stage/prod) */\n environment?: string;\n\n /** Trace ID for observability */\n traceId?: string;\n\n /** Correlation ID for request tracing */\n correlationId?: string;\n\n /** API version */\n apiVersion?: string;\n\n /** SDK version from client */\n sdkVersion?: string;\n}\n\n/**\n * Ingestion service configuration.\n */\nexport interface IngestionServiceConfig {\n /** Maximum events per batch (default: 100) */\n maxBatchSize?: number;\n\n /** Maximum payload size in bytes (default: 1MB) */\n maxPayloadSize?: number;\n\n /** Whether to strip PII from properties (default: true in production) */\n stripPII?: boolean;\n\n /** Whether to strip HTML from properties (default: true) */\n stripHTML?: boolean;\n\n /** Timeout for processing each event in ms (default: 5000) */\n eventTimeout?: number;\n\n /** Concurrency for batch processing (default: 10) */\n batchConcurrency?: number;\n\n /** Whether to await event forwarding to analytics manager (default: false) */\n awaitDispatch?: boolean;\n}\n\n/**\n * Ingestion metrics for observability.\n */\nexport interface IngestionMetrics {\n /** Total events received */\n totalReceived: number;\n\n /** Events accepted */\n accepted: number;\n\n /** Events rejected */\n rejected: number;\n\n /** Events by type */\n byType: Record<string, number>;\n\n /** Processing time in ms */\n processingTimeMs: number;\n}\n\n// =============================================================================\n// Default Configuration\n// =============================================================================\n\nconst DEFAULT_CONFIG: Required<IngestionServiceConfig> = {\n maxBatchSize: 100,\n maxPayloadSize: 1024 * 1024, // 1MB\n stripPII: true, // Default to safe; callers can override\n stripHTML: true,\n eventTimeout: 5000,\n batchConcurrency: 10,\n awaitDispatch: false,\n};\n\n// =============================================================================\n// Utility Functions\n// =============================================================================\n\n/**\n * Generate a UUID v4.\n */\nfunction generateUUID(): string {\n return crypto.randomUUID();\n}\n\n/**\n * Get current ISO timestamp.\n */\nfunction getCurrentTimestamp(): string {\n return new Date().toISOString();\n}\n\n/**\n * Check if request is a batch request.\n */\nfunction isBatchRequest(request: IngestionRequest): request is BatchEventRequest {\n return 'batch' in request && Array.isArray(request.batch);\n}\n\n/**\n * Normalize an event payload with defaults and server metadata.\n */\nfunction normalizeEvent(\n event: EventPayload,\n context: IngestionContext,\n receivedAt: string,\n): EventPayload {\n const normalized = { ...event };\n\n // Generate message ID if not provided\n if (!normalized.messageId) {\n normalized.messageId = generateUUID();\n }\n\n // Set timestamp if not provided\n if (!normalized.timestamp) {\n normalized.timestamp = receivedAt;\n }\n\n // Preserve original timestamp\n if (!normalized.originalTimestamp) {\n normalized.originalTimestamp = normalized.timestamp;\n }\n\n // Merge context with server-provided context\n const mergedContext: EmitterContext = {\n ...normalized.context,\n channel: normalized.context?.channel ?? 'api',\n ip: context.ip ?? normalized.context?.ip,\n userAgent: context.userAgent ?? normalized.context?.userAgent,\n library: normalized.context?.library ?? {\n name: context.source,\n version: context.sdkVersion ?? 'unknown',\n },\n };\n\n normalized.context = mergedContext;\n\n // Set userId from auth context if not provided\n if (!normalized.userId && context.userId) {\n normalized.userId = context.userId;\n }\n\n return normalized;\n}\n\n/**\n * Convert EventPayload to EmitterPayload format for AnalyticsManager.\n * Explicitly maps fields to ensure type safety.\n */\nfunction toEmitterPayload(event: EventPayload): EmitterPayload {\n // Explicitly construct the EmitterPayload from EventPayload fields\n // to maintain type safety and avoid unsafe double casts\n const basePayload = {\n userId: event.userId,\n anonymousId: event.anonymousId,\n timestamp: event.timestamp,\n context: event.context,\n messageId: event.messageId,\n };\n\n switch (event.type) {\n case 'track':\n return {\n type: 'track',\n event: event.event,\n properties: event.properties,\n ...basePayload,\n } as EmitterPayload;\n case 'identify':\n return {\n type: 'identify',\n traits: event.traits,\n ...basePayload,\n } as EmitterPayload;\n case 'page':\n return {\n type: 'page',\n name: event.name,\n category: event.category,\n properties: event.properties,\n ...basePayload,\n } as EmitterPayload;\n case 'screen':\n return {\n type: 'screen',\n name: event.name,\n category: event.category,\n properties: event.properties,\n ...basePayload,\n } as EmitterPayload;\n case 'group':\n return {\n type: 'group',\n groupId: event.groupId,\n traits: event.traits,\n ...basePayload,\n } as EmitterPayload;\n case 'alias':\n return {\n type: 'alias',\n previousId: event.previousId,\n ...basePayload,\n } as EmitterPayload;\n default:\n // This should never happen due to discriminated union validation\n throw new Error(`Unknown event type: ${(event as { type: string }).type}`);\n }\n}\n\n// =============================================================================\n// Ingestion Service Class\n// =============================================================================\n\n/**\n * Event Ingestion Service.\n *\n * Handles validation, normalization, and forwarding of analytics events.\n * Designed for high-volume ingestion with batching and rate limiting support.\n *\n * @example\n * ```typescript\n * const service = new IngestionService(analyticsManager);\n *\n * const result = await service.ingest(requestBody, {\n * source: 'web-app',\n * tenantId: 'tenant-123',\n * userId: 'user-456',\n * });\n *\n * if (result.success) {\n * console.log(`Accepted ${result.accepted} events`);\n * }\n * ```\n */\nexport class IngestionService {\n private readonly config: Required<IngestionServiceConfig>;\n\n constructor(\n private readonly analyticsManager: AnalyticsManager,\n config: IngestionServiceConfig = {},\n ) {\n this.config = { ...DEFAULT_CONFIG, ...config };\n }\n\n /**\n * Parse and validate the ingestion request payload.\n *\n * @param payload - Raw request payload (parsed JSON)\n * @returns Parsed and validated request, or error response\n */\n parseRequest(\n payload: unknown,\n ): { success: true; data: IngestionRequest } | { success: false; error: IngestionErrorResponse } {\n // Validate payload size (rough estimate)\n try {\n const payloadSize = JSON.stringify(payload).length;\n if (payloadSize > this.config.maxPayloadSize) {\n return {\n success: false,\n error: {\n success: false,\n code: 'PAYLOAD_TOO_LARGE',\n error: `Payload size ${payloadSize} exceeds maximum ${this.config.maxPayloadSize} bytes`,\n },\n };\n }\n } catch {\n return {\n success: false,\n error: {\n success: false,\n code: 'INVALID_JSON',\n error: 'Failed to serialize payload for size check',\n },\n };\n }\n\n // Validate against schema\n const result = IngestionRequestSchema.safeParse(payload);\n\n if (!result.success) {\n const fieldErrors = result.error.issues.map(err => ({\n path: err.path.map(p => (typeof p === 'symbol' ? String(p) : p)),\n message: err.message,\n }));\n\n return {\n success: false,\n error: {\n success: false,\n code: 'VALIDATION_ERROR',\n error: 'Request validation failed',\n fieldErrors,\n },\n };\n }\n\n // Check batch size\n if (isBatchRequest(result.data) && result.data.batch.length > this.config.maxBatchSize) {\n return {\n success: false,\n error: {\n success: false,\n code: 'BATCH_TOO_LARGE',\n error: `Batch size ${result.data.batch.length} exceeds maximum ${this.config.maxBatchSize}`,\n },\n };\n }\n\n return { success: true, data: result.data };\n }\n\n /**\n * Ingest events from a validated request.\n *\n * @param request - Validated ingestion request\n * @param context - Ingestion context from the caller\n * @returns Ingestion response with per-event results\n */\n async ingest(\n request: IngestionRequest,\n context: IngestionContext,\n ): Promise<IngestionSuccessResponse> {\n const startTime = process.hrtime.bigint();\n const receivedAt = getCurrentTimestamp();\n\n // Extract events from request (single or batch)\n const events: EventPayload[] = isBatchRequest(request) ? request.batch : [request];\n\n const results: EventResult[] = [];\n const metrics: IngestionMetrics = {\n totalReceived: events.length,\n accepted: 0,\n rejected: 0,\n byType: {},\n processingTimeMs: 0,\n };\n\n // Process events\n const processedEvents: EmitterPayload[] = [];\n\n for (const event of events) {\n const eventId = generateUUID();\n\n try {\n // Validate event name for track events\n if (event.type === 'track') {\n const validation = validateEventName(event.event);\n if (!validation.valid) {\n results.push({\n id: eventId,\n messageId: event.messageId,\n type: event.type,\n status: 'rejected',\n error: `Invalid event name: ${validation.reason}`,\n });\n metrics.rejected++;\n continue;\n }\n }\n\n // Normalize event\n const normalized = normalizeEvent(event, context, receivedAt);\n\n // Sanitize properties\n if ('properties' in normalized && normalized.properties) {\n const sanitized = sanitizeProperties(normalized.properties, {\n stripPII: this.config.stripPII,\n stripHTML: this.config.stripHTML,\n allowDangerousKeys: false,\n });\n (normalized as { properties: Record<string, unknown> }).properties = sanitized.data;\n\n if (sanitized.warnings.length > 0) {\n logDebug('Event properties sanitized', {\n eventId,\n warnings: sanitized.warnings,\n });\n }\n }\n\n if ('traits' in normalized && normalized.traits) {\n const sanitized = sanitizeProperties(normalized.traits, {\n stripPII: this.config.stripPII,\n stripHTML: this.config.stripHTML,\n allowDangerousKeys: false,\n });\n (normalized as { traits: Record<string, unknown> }).traits = sanitized.data;\n }\n\n // Convert to emitter payload and queue for processing\n const emitterPayload = toEmitterPayload(normalized);\n processedEvents.push(emitterPayload);\n\n results.push({\n id: eventId,\n messageId: normalized.messageId,\n type: event.type,\n status: 'accepted',\n });\n\n metrics.accepted++;\n metrics.byType[event.type] = (metrics.byType[event.type] ?? 0) + 1;\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Unknown error';\n\n results.push({\n id: eventId,\n messageId: event.messageId,\n type: event.type,\n status: 'rejected',\n error: errorMessage,\n });\n\n metrics.rejected++;\n\n logWarn('Event processing failed', {\n eventId,\n type: event.type,\n error: errorMessage,\n });\n }\n }\n\n const dispatch: IngestionDispatchResult = {\n scheduled: 0,\n attempted: 0,\n failed: 0,\n status: processedEvents.length > 0 ? 'pending' : 'skipped',\n };\n\n const forwardEvents = async (): Promise<void> => {\n try {\n await this.analyticsManager.emitBatch(processedEvents, {\n timeout: this.config.eventTimeout,\n concurrency: this.config.batchConcurrency,\n failFast: false, // Process all events even if some fail\n });\n\n if (this.config.awaitDispatch) {\n dispatch.status = 'completed';\n dispatch.attempted = processedEvents.length;\n }\n } catch (error) {\n if (this.config.awaitDispatch) {\n dispatch.status = 'completed_with_failures';\n dispatch.attempted = processedEvents.length;\n dispatch.failed = processedEvents.length;\n }\n\n logError('Failed to emit events to analytics manager', {\n error: error instanceof Error ? error.message : 'Unknown error',\n eventCount: processedEvents.length,\n traceId: context.traceId,\n });\n }\n };\n\n // Forward accepted events to analytics manager.\n // Non-blocking mode (default) preserves request throughput while still\n // exposing dispatch intent in the response. For guaranteed dispatch\n // confirmation, enable `awaitDispatch`.\n if (processedEvents.length > 0) {\n dispatch.scheduled = processedEvents.length;\n\n if (this.config.awaitDispatch) {\n await forwardEvents();\n } else {\n void forwardEvents();\n }\n }\n\n // Calculate processing time\n const endTime = process.hrtime.bigint();\n metrics.processingTimeMs = Number(endTime - startTime) / 1_000_000;\n\n // Log metrics\n logInfo('Event ingestion completed', {\n traceId: context.traceId,\n source: context.source,\n tenantId: context.tenantId,\n totalReceived: metrics.totalReceived,\n accepted: metrics.accepted,\n rejected: metrics.rejected,\n processingTimeMs: metrics.processingTimeMs.toFixed(2),\n byType: metrics.byType,\n });\n\n return {\n success: true,\n accepted: metrics.accepted,\n rejected: metrics.rejected,\n results,\n dispatch,\n receivedAt,\n };\n }\n\n /**\n * Process a raw request body through parsing and ingestion.\n *\n * Convenience method that combines parseRequest and ingest.\n *\n * @param payload - Raw request payload\n * @param context - Ingestion context\n * @returns Ingestion response (success or error)\n */\n async processRequest(\n payload: unknown,\n context: IngestionContext,\n ): Promise<IngestionSuccessResponse | IngestionErrorResponse> {\n const parseResult = this.parseRequest(payload);\n\n if (!parseResult.success) {\n return parseResult.error;\n }\n\n return this.ingest(parseResult.data, context);\n }\n}\n\n// =============================================================================\n// Factory Functions\n// =============================================================================\n\n/**\n * Create an ingestion service instance.\n *\n * @param analyticsManager - Initialized AnalyticsManager instance\n * @param config - Optional service configuration\n * @returns Configured IngestionService instance\n *\n * @example\n * ```typescript\n * import { createServerAnalytics } from '@od-oneapp/analytics/server';\n * import { createIngestionService } from '@od-oneapp/analytics/server';\n *\n * const analytics = await createServerAnalytics(config);\n * const ingestionService = createIngestionService(analytics);\n * ```\n */\nexport function createIngestionService(\n analyticsManager: AnalyticsManager,\n config?: IngestionServiceConfig,\n): IngestionService {\n return new IngestionService(analyticsManager, config);\n}\n\n/**\n * Validate a single event payload.\n *\n * Useful for pre-validation before queuing events.\n *\n * @param payload - Event payload to validate\n * @returns Validation result with parsed data or errors\n */\nexport function validateEventPayload(\n payload: unknown,\n): { success: true; data: EventPayload } | { success: false; errors: string[] } {\n const result = EventPayloadSchema.safeParse(payload);\n\n if (!result.success) {\n return {\n success: false,\n errors: result.error.issues.map(\n e => `${e.path.map(p => (typeof p === 'symbol' ? String(p) : p)).join('.')}: ${e.message}`,\n ),\n };\n }\n\n return { success: true, data: result.data };\n}\n\n/**\n * Validate a batch of event payloads.\n *\n * @param payloads - Array of event payloads to validate\n * @returns Validation result with parsed data or errors\n */\nexport function validateBatchPayload(\n payloads: unknown[],\n): { success: true; data: EventPayload[] } | { success: false; errors: string[] } {\n const result = BatchEventRequestSchema.safeParse({ batch: payloads });\n\n if (!result.success) {\n return {\n success: false,\n errors: result.error.issues.map(\n e => `${e.path.map(p => (typeof p === 'symbol' ? String(p) : p)).join('.')}: ${e.message}`,\n ),\n };\n }\n\n return { success: true, data: result.data.batch };\n}\n"],"mappings":";;;;;;;;;;;;;;AAeA,MAAM,mBAAqC;CACzC,UAAS,WAAU,IAAI,gBAAgB,OAAO;CAC9C,OAAM,WAAU,IAAI,mBAAmB,OAAO;CAC9C,UAAS,WAAU,IAAI,sBAAsB,OAAO;CACpD,SAAQ,WAAU,IAAI,qBAAqB,OAAO;CACnD;;;;;;;;;;;;;;;;;AAkBD,eAAsB,sBAAsB,QAAoD;CAC9F,MAAM,UAAU,uBAAuB,QAAQ,iBAAiB;AAChE,OAAM,QAAQ,YAAY;AAC1B,QAAO;;;;;;;;;;;;;;;;;AAkBT,SAAgB,mCAAmC,QAA2C;AAC5F,QAAO,uBAAuB,QAAQ,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACgBzD,SAAgB,wBAAwB,QAAmC;CACzE,MAAM,SAA4B,EAAE;CACpC,MAAM,WAAqB,EAAE;AAG7B,KAAI,CAAC,UAAU,OAAO,WAAW,UAAU;AACzC,SAAO,KAAK;GACV,UAAU;GACV,OAAO;GACP,SAAS;GACV,CAAC;AACF,SAAO;GAAE,SAAS;GAAO;GAAQ;GAAU;;CAG7C,MAAM,cAAc;AAGpB,KAAI,CAAC,YAAY,aAAa,OAAO,YAAY,cAAc,UAAU;AACvE,SAAO,KAAK;GACV,UAAU;GACV,OAAO;GACP,SAAS;GACV,CAAC;AACF,SAAO;GAAE,SAAS;GAAO;GAAQ;GAAU;;AAK7C,KADsB,OAAO,KAAK,YAAY,UAAU,CAAC,WACnC,EACpB,UAAS,KAAK,gEAAgE;AAIhF,MAAK,MAAM,CAAC,cAAc,mBAAmB,OAAO,QAAQ,YAAY,UAAU,EAAE;EAClF,MAAM,iBAAiB,iBAAiB,cAAc,eAAe;AACrE,SAAO,KAAK,GAAG,eAAe;;CAIhC,MAAM,YAAY,OAAO,WAAW;AAGpC,KAAI,aAAa,YAAY,UAAU,SACrC,UAAS,KACP,kGACD;AAGH,KAAI,CAAC,aAAa,YAAY,UAAU,OACtC,UAAS,KACP,oGACD;AAGH,QAAO;EACL,SAAS,OAAO,WAAW;EAC3B;EACA;EACD;;;;;;;;;;;;;;;;;;;AAoBH,SAAgB,iBAAiB,cAAsB,QAA2C;CAChG,MAAM,SAA4B,EAAE;CAGpC,MAAM,iBAAiB;EAAC;EAAW;EAAW;EAAU;EAAW;EAAW;AAC9E,KAAI,CAAC,eAAe,SAAS,aAAa,EAAE;AAC1C,SAAO,KAAK;GACV,UAAU;GACV,OAAO;GACP,SAAS,qBAAqB,aAAa,sBAAsB,eAAe,KAAK,KAAK;GAC3F,CAAC;AACF,SAAO;;CAIT,MAAM,iBAAiB,sBAAsB,iBAAiB,EAAE;AAChE,MAAK,MAAM,SAAS,gBAAgB;EAClC,MAAM,QAAQ,OAAO;AAErB,MAAI,CAAC,MACH,QAAO,KAAK;GACV,UAAU;GACV;GACA,SAAS,mBAAmB,MAAM,6BAA6B,aAAa;GAC7E,CAAC;WACO,OAAO,UAAU,YAAY,MAAM,MAAM,KAAK,GACvD,QAAO,KAAK;GACV,UAAU;GACV;GACA,SAAS,mBAAmB,MAAM,kCAAkC,aAAa;GAClF,CAAC;;AAKN,SAAQ,cAAR;EACE,KAAK;AACH,OAAI,OAAO,YAAY,CAAC,uBAAuB,OAAO,SAAS,CAC7D,QAAO,KAAK;IACV,UAAU;IACV,OAAO;IACP,SAAS;IACV,CAAC;AAEJ;EAEF,KAAK;AACH,OAAI,OAAO,UAAU,CAAC,qBAAqB,OAAO,OAAO,CACvD,QAAO,KAAK;IACV,UAAU;IACV,OAAO;IACP,SAAS;IACV,CAAC;AAEJ;;AAGJ,QAAO;;;;;;;;;;;;;;AAuET,SAAS,uBAAuB,UAA2B;AAEzD,KAAI,CAAC,mBAAmB,KAAK,SAAS,CACpC,QAAO;AAKT,KADqB;EAAC;EAAkB;EAAkB;EAAY;EAAU,CAC/D,MAAK,MAAK,SAAS,aAAa,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC,CAC1E,QAAO;AAGT,QAAO;;;;;;;;;;;;;;;AAgBT,SAAS,qBAAqB,QAAyB;AAErD,KAAI,CAAC,kBAAkB,KAAK,OAAO,CACjC,QAAO;AAKT,KADqB;EAAC;EAAgB;EAAkB;EAAY;EAAU,CAC7D,MAAK,MAAK,OAAO,aAAa,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC,CACxE,QAAO;AAGT,QAAO;;;;;;;;;;;;;;;;;;;;;AAsBT,SAAgB,sBAAsB,QAA+B;CACnE,MAAM,SAAS,wBAAwB,OAAO;AAE9C,KAAI,CAAC,OAAO,SAAS;EACnB,MAAM,gBAAgB,OAAO,OAC1B,KAAI,UAAS,GAAG,MAAM,SAAS,GAAG,MAAM,MAAM,IAAI,MAAM,UAAU,CAClE,KAAK,KAAK;AAEb,QAAM,IAAI,MAAM,+CAA+C,gBAAgB;;AAIjF,KAAI,OAAO,SAAS,SAAS,KAAK,OAAO,QACvC,QAAO,wBAAQ,IAAI,MAAM,mCAAmC,EAAE;EAC5D,UAAU;EACV,QAAQ;EACR,UAAU,OAAO;EAClB,CAAC;;;;;;;;;;;;;;;;;;AAoBN,eAAsB,YAAY,QAAwC;CACxE,MAAM,SAAS,wBAAwB,OAAO;AAE9C,SAAQ,iCAAiC;EACvC;EACA,kBAAkB;EACnB,CAAC;AAEF,KAAI,OAAO,OAAO,SAAS,EACzB,UAAS,qDAAqD,EAC5D,QAAQ,OAAO,QAChB,CAAC;AAGJ,KAAI,OAAO,SAAS,SAAS,EAC3B,SAAQ,oCAAoC,EAAE,UAAU,OAAO,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;ACpX9E,MAAa,sBAAsB,EAAE,MAAM;CACzC,EAAE,QAAQ;CACV,EAAE,QAAQ;CACV,EAAE,SAAS;CACX,EAAE,MAAM;CACR,EAAE,MAAM;CACT,CAAC;;;;AAKF,MAAa,uBAA2D,EAAE,OACxE,EAAE,QAAQ,EACV,EAAE,WACA,EAAE,MAAM;CAAC;CAAqB,EAAE,MAAM,oBAAoB;CAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,SAAS,CAAC;CAAC,CAAC,CAChG,CACF;;;;AAKD,MAAa,uBAAuB,EACjC,OAAO;CAEN,KAAK,EACF,OAAO;EACN,MAAM,EAAE,QAAQ,CAAC,UAAU;EAC3B,SAAS,EAAE,QAAQ,CAAC,UAAU;EAC9B,OAAO,EAAE,QAAQ,CAAC,UAAU;EAC5B,WAAW,EAAE,QAAQ,CAAC,UAAU;EACjC,CAAC,CACD,UAAU;CAGb,UAAU,EACP,OAAO;EACN,MAAM,EAAE,QAAQ,CAAC,UAAU;EAC3B,QAAQ,EAAE,QAAQ,CAAC,UAAU;EAC7B,QAAQ,EAAE,QAAQ,CAAC,UAAU;EAC7B,MAAM,EAAE,QAAQ,CAAC,UAAU;EAC3B,SAAS,EAAE,QAAQ,CAAC,UAAU;EAC/B,CAAC,CACD,aAAa,CACb,UAAU;CAGb,QAAQ,EACL,OAAO;EACN,IAAI,EAAE,QAAQ,CAAC,UAAU;EACzB,cAAc,EAAE,QAAQ,CAAC,UAAU;EACnC,OAAO,EAAE,QAAQ,CAAC,UAAU;EAC5B,MAAM,EAAE,QAAQ,CAAC,UAAU;EAC3B,MAAM,EAAE,QAAQ,CAAC,UAAU;EAC3B,SAAS,EAAE,QAAQ,CAAC,UAAU;EAC/B,CAAC,CACD,UAAU;CAGb,IAAI,EAAE,QAAQ,CAAC,UAAU;CAGzB,SAAS,EACN,OAAO;EACN,MAAM,EAAE,QAAQ;EAChB,SAAS,EAAE,QAAQ;EACpB,CAAC,CACD,UAAU;CAGb,QAAQ,EAAE,QAAQ,CAAC,UAAU;CAG7B,SAAS,EACN,OAAO;EACN,WAAW,EAAE,SAAS,CAAC,UAAU;EACjC,SAAS,EAAE,QAAQ,CAAC,UAAU;EAC9B,UAAU,EAAE,SAAS,CAAC,UAAU;EAChC,MAAM,EAAE,SAAS,CAAC,UAAU;EAC7B,CAAC,CACD,UAAU;CAGb,IAAI,EACD,OAAO;EACN,MAAM,EAAE,QAAQ,CAAC,UAAU;EAC3B,SAAS,EAAE,QAAQ,CAAC,UAAU;EAC/B,CAAC,CACD,UAAU;CAGb,MAAM,EACH,OAAO;EACN,MAAM,EAAE,QAAQ,CAAC,UAAU;EAG3B,UAAU,EAAE,QAAQ,CAAC,UAAU;EAC/B,QAAQ,EAAE,QAAQ,CAAC,UAAU;EAC7B,OAAO,EAAE,QAAQ,CAAC,UAAU;EAC5B,KAAK,EAAE,QAAQ,CAAC,UAAU;EAC3B,CAAC,CACD,UAAU;CAGb,QAAQ,EACL,OAAO;EACN,SAAS,EAAE,QAAQ,CAAC,UAAU;EAC9B,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU;EAC9C,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU;EAC9C,CAAC,CACD,UAAU;CAGb,UAAU,EAAE,QAAQ,CAAC,UAAU;CAG/B,SAAS,EAAE,QAAQ,CAAC,UAAU;CAG9B,WAAW,EAAE,QAAQ,CAAC,UAAU;CAGhC,SAAS,EAAE,KAAK;EAAC;EAAU;EAAW;EAAU;EAAM,CAAC,CAAC,UAAU;CAGlE,UAAU,EACP,OAAO;EACN,MAAM,EAAE,QAAQ,CAAC,UAAU;EAC3B,SAAS,EAAE,QAAQ,CAAC,UAAU;EAC9B,UAAU,EAAE,QAAQ,CAAC,UAAU;EAC/B,WAAW,EAAE,QAAQ,CAAC,UAAU;EAChC,QAAQ,EAAE,QAAQ,CAAC,UAAU;EAC9B,CAAC,CACD,UAAU;CACd,CAAC,CACD,aAAa;;;;AAShB,MAAM,oBAAoB,EACvB,OAAO;CAEN,aAAa,EAAE,QAAQ,CAAC,IAAI,IAAI,CAAC,UAAU;CAG3C,QAAQ,EAAE,QAAQ,CAAC,IAAI,IAAI,CAAC,UAAU;CAGtC,WAAW,EAAE,MAAM,CAAC,EAAE,QAAQ,CAAC,UAAU,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,UAAU;CAGhE,mBAAmB,EAAE,MAAM,CAAC,EAAE,QAAQ,CAAC,UAAU,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,UAAU;CAGxE,SAAS,qBAAqB,UAAU;CAGxC,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,UAAU;CACxC,CAAC,CACD,QAAO,SAAQ,QAAQ,KAAK,YAAY,IAAI,QAAQ,KAAK,OAAO,EAAE,EACjE,SAAS,iDACV,CAAC;;;;;AAMJ,MAAa,mBAAmB,kBAAkB,WAAW;CAC3D,MAAM,EAAE,QAAQ,QAAQ;CACxB,OAAO,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,IAAI;CACjC,YAAY,qBAAqB,UAAU;CAC5C,CAAC;;;;;AAMF,MAAa,sBAAsB,kBAAkB,WAAW;CAC9D,MAAM,EAAE,QAAQ,WAAW;CAC3B,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,IAAI;CAClC,QAAQ,qBAAqB,UAAU;CACxC,CAAC;;;;;AAMF,MAAa,kBAAkB,kBAAkB,WAAW;CAC1D,MAAM,EAAE,QAAQ,OAAO;CACvB,MAAM,EAAE,QAAQ,CAAC,IAAI,IAAI,CAAC,UAAU;CACpC,UAAU,EAAE,QAAQ,CAAC,IAAI,IAAI,CAAC,UAAU;CACxC,YAAY,qBAAqB,UAAU;CAC5C,CAAC;;;;;AAMF,MAAa,oBAAoB,kBAAkB,WAAW;CAC5D,MAAM,EAAE,QAAQ,SAAS;CACzB,MAAM,EAAE,QAAQ,CAAC,IAAI,IAAI,CAAC,UAAU;CACpC,UAAU,EAAE,QAAQ,CAAC,IAAI,IAAI,CAAC,UAAU;CACxC,YAAY,qBAAqB,UAAU;CAC5C,CAAC;;;;;AAMF,MAAa,mBAAmB,kBAAkB,WAAW;CAC3D,MAAM,EAAE,QAAQ,QAAQ;CACxB,SAAS,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,IAAI;CACnC,QAAQ,qBAAqB,UAAU;CACxC,CAAC;;;;;AAMF,MAAa,mBAAmB,kBAAkB,WAAW;CAC3D,MAAM,EAAE,QAAQ,QAAQ;CACxB,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,IAAI;CAClC,YAAY,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,IAAI;CACvC,CAAC;;;;AAKF,MAAa,qBAAqB,EAAE,mBAAmB,QAAQ;CAC7D;CACA;CACA;CACA;CACA;CACA;CACD,CAAC;;;;AASF,MAAa,2BAA2B;;;;;;;AAQxC,MAAa,0BAA0B,EAAE,OAAO,EAC9C,OAAO,EAAE,MAAM,mBAAmB,CAAC,IAAI,EAAE,EAC1C,CAAC;;;;AAKF,MAAa,yBAAyB,EAAE,MAAM,CAAC,yBAAyB,yBAAyB,CAAC;;;;AASlG,MAAa,oBAAoB,EAAE,OAAO;CAExC,IAAI,EAAE,QAAQ,CAAC,MAAM;CAGrB,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,UAAU;CAGvC,MAAM,EAAE,KAAK;EAAC;EAAS;EAAY;EAAQ;EAAU;EAAS;EAAQ,CAAC;CAGvE,QAAQ,EAAE,KAAK,CAAC,YAAY,WAAW,CAAC;CAGxC,OAAO,EAAE,QAAQ,CAAC,UAAU;CAC7B,CAAC;;;;AAKF,MAAa,gCAAgC,EAAE,OAAO;CAEpD,WAAW,EAAE,QAAQ,CAAC,KAAK,CAAC,aAAa;CAGzC,WAAW,EAAE,QAAQ,CAAC,KAAK,CAAC,aAAa;CAGzC,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,aAAa;CAGtC,QAAQ,EAAE,KAAK;EAAC;EAAW;EAAW;EAAa;EAA0B,CAAC;CAC/E,CAAC;;;;AAKF,MAAa,iCAAiC,EAAE,OAAO;CAErD,SAAS,EAAE,QAAQ,KAAK;CAGxB,UAAU,EAAE,QAAQ,CAAC,KAAK,CAAC,aAAa;CAGxC,UAAU,EAAE,QAAQ,CAAC,KAAK,CAAC,aAAa;CAGxC,SAAS,EAAE,MAAM,kBAAkB;CAGnC,UAAU,8BAA8B,UAAU;CAGlD,YAAY,EAAE,QAAQ,CAAC,UAAU;CAClC,CAAC;;;;AAKF,MAAa,+BAA+B,EAAE,OAAO;CAEnD,SAAS,EAAE,QAAQ,MAAM;CAGzB,MAAM,EAAE,QAAQ;CAGhB,OAAO,EAAE,QAAQ;CAGjB,aAAa,EACV,MACC,EAAE,OAAO;EACP,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,QAAQ,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC;EAChD,SAAS,EAAE,QAAQ;EACpB,CAAC,CACH,CACA,UAAU;CACd,CAAC;;;;AAKF,MAAa,0BAA0B,EAAE,MAAM,CAC7C,gCACA,6BACD,CAAC;;;;;;;;;;;;;;;;;;;AChQF,MAAM,iBAAmD;CACvD,cAAc;CACd,gBAAgB,OAAO;CACvB,UAAU;CACV,WAAW;CACX,cAAc;CACd,kBAAkB;CAClB,eAAe;CAChB;;;;AASD,SAAS,eAAuB;AAC9B,QAAO,OAAO,YAAY;;;;;AAM5B,SAAS,sBAA8B;AACrC,yBAAO,IAAI,MAAM,EAAC,aAAa;;;;;AAMjC,SAAS,eAAe,SAAyD;AAC/E,QAAO,WAAW,WAAW,MAAM,QAAQ,QAAQ,MAAM;;;;;AAM3D,SAAS,eACP,OACA,SACA,YACc;CACd,MAAM,aAAa,EAAE,GAAG,OAAO;AAG/B,KAAI,CAAC,WAAW,UACd,YAAW,YAAY,cAAc;AAIvC,KAAI,CAAC,WAAW,UACd,YAAW,YAAY;AAIzB,KAAI,CAAC,WAAW,kBACd,YAAW,oBAAoB,WAAW;AAe5C,YAAW,UAX2B;EACpC,GAAG,WAAW;EACd,SAAS,WAAW,SAAS,WAAW;EACxC,IAAI,QAAQ,MAAM,WAAW,SAAS;EACtC,WAAW,QAAQ,aAAa,WAAW,SAAS;EACpD,SAAS,WAAW,SAAS,WAAW;GACtC,MAAM,QAAQ;GACd,SAAS,QAAQ,cAAc;GAChC;EACF;AAKD,KAAI,CAAC,WAAW,UAAU,QAAQ,OAChC,YAAW,SAAS,QAAQ;AAG9B,QAAO;;;;;;AAOT,SAAS,iBAAiB,OAAqC;CAG7D,MAAM,cAAc;EAClB,QAAQ,MAAM;EACd,aAAa,MAAM;EACnB,WAAW,MAAM;EACjB,SAAS,MAAM;EACf,WAAW,MAAM;EAClB;AAED,SAAQ,MAAM,MAAd;EACE,KAAK,QACH,QAAO;GACL,MAAM;GACN,OAAO,MAAM;GACb,YAAY,MAAM;GAClB,GAAG;GACJ;EACH,KAAK,WACH,QAAO;GACL,MAAM;GACN,QAAQ,MAAM;GACd,GAAG;GACJ;EACH,KAAK,OACH,QAAO;GACL,MAAM;GACN,MAAM,MAAM;GACZ,UAAU,MAAM;GAChB,YAAY,MAAM;GAClB,GAAG;GACJ;EACH,KAAK,SACH,QAAO;GACL,MAAM;GACN,MAAM,MAAM;GACZ,UAAU,MAAM;GAChB,YAAY,MAAM;GAClB,GAAG;GACJ;EACH,KAAK,QACH,QAAO;GACL,MAAM;GACN,SAAS,MAAM;GACf,QAAQ,MAAM;GACd,GAAG;GACJ;EACH,KAAK,QACH,QAAO;GACL,MAAM;GACN,YAAY,MAAM;GAClB,GAAG;GACJ;EACH,QAEE,OAAM,IAAI,MAAM,uBAAwB,MAA2B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;AA6BhF,IAAa,mBAAb,MAA8B;CAC5B,AAAiB;CAEjB,YACE,AAAiB,kBACjB,SAAiC,EAAE,EACnC;EAFiB;AAGjB,OAAK,SAAS;GAAE,GAAG;GAAgB,GAAG;GAAQ;;;;;;;;CAShD,aACE,SAC+F;AAE/F,MAAI;GACF,MAAM,cAAc,KAAK,UAAU,QAAQ,CAAC;AAC5C,OAAI,cAAc,KAAK,OAAO,eAC5B,QAAO;IACL,SAAS;IACT,OAAO;KACL,SAAS;KACT,MAAM;KACN,OAAO,gBAAgB,YAAY,mBAAmB,KAAK,OAAO,eAAe;KAClF;IACF;UAEG;AACN,UAAO;IACL,SAAS;IACT,OAAO;KACL,SAAS;KACT,MAAM;KACN,OAAO;KACR;IACF;;EAIH,MAAM,SAAS,uBAAuB,UAAU,QAAQ;AAExD,MAAI,CAAC,OAAO,QAMV,QAAO;GACL,SAAS;GACT,OAAO;IACL,SAAS;IACT,MAAM;IACN,OAAO;IACP,aAXgB,OAAO,MAAM,OAAO,KAAI,SAAQ;KAClD,MAAM,IAAI,KAAK,KAAI,MAAM,OAAO,MAAM,WAAW,OAAO,EAAE,GAAG,EAAG;KAChE,SAAS,IAAI;KACd,EAAE;IASA;GACF;AAIH,MAAI,eAAe,OAAO,KAAK,IAAI,OAAO,KAAK,MAAM,SAAS,KAAK,OAAO,aACxE,QAAO;GACL,SAAS;GACT,OAAO;IACL,SAAS;IACT,MAAM;IACN,OAAO,cAAc,OAAO,KAAK,MAAM,OAAO,mBAAmB,KAAK,OAAO;IAC9E;GACF;AAGH,SAAO;GAAE,SAAS;GAAM,MAAM,OAAO;GAAM;;;;;;;;;CAU7C,MAAM,OACJ,SACA,SACmC;EACnC,MAAM,YAAY,QAAQ,OAAO,QAAQ;EACzC,MAAM,aAAa,qBAAqB;EAGxC,MAAM,SAAyB,eAAe,QAAQ,GAAG,QAAQ,QAAQ,CAAC,QAAQ;EAElF,MAAM,UAAyB,EAAE;EACjC,MAAM,UAA4B;GAChC,eAAe,OAAO;GACtB,UAAU;GACV,UAAU;GACV,QAAQ,EAAE;GACV,kBAAkB;GACnB;EAGD,MAAM,kBAAoC,EAAE;AAE5C,OAAK,MAAM,SAAS,QAAQ;GAC1B,MAAM,UAAU,cAAc;AAE9B,OAAI;AAEF,QAAI,MAAM,SAAS,SAAS;KAC1B,MAAM,aAAa,kBAAkB,MAAM,MAAM;AACjD,SAAI,CAAC,WAAW,OAAO;AACrB,cAAQ,KAAK;OACX,IAAI;OACJ,WAAW,MAAM;OACjB,MAAM,MAAM;OACZ,QAAQ;OACR,OAAO,uBAAuB,WAAW;OAC1C,CAAC;AACF,cAAQ;AACR;;;IAKJ,MAAM,aAAa,eAAe,OAAO,SAAS,WAAW;AAG7D,QAAI,gBAAgB,cAAc,WAAW,YAAY;KACvD,MAAM,YAAY,mBAAmB,WAAW,YAAY;MAC1D,UAAU,KAAK,OAAO;MACtB,WAAW,KAAK,OAAO;MACvB,oBAAoB;MACrB,CAAC;AACF,KAAC,WAAuD,aAAa,UAAU;AAE/E,SAAI,UAAU,SAAS,SAAS,EAC9B,UAAS,8BAA8B;MACrC;MACA,UAAU,UAAU;MACrB,CAAC;;AAIN,QAAI,YAAY,cAAc,WAAW,OAMvC,CAAC,WAAmD,SALlC,mBAAmB,WAAW,QAAQ;KACtD,UAAU,KAAK,OAAO;KACtB,WAAW,KAAK,OAAO;KACvB,oBAAoB;KACrB,CAAC,CACqE;IAIzE,MAAM,iBAAiB,iBAAiB,WAAW;AACnD,oBAAgB,KAAK,eAAe;AAEpC,YAAQ,KAAK;KACX,IAAI;KACJ,WAAW,WAAW;KACtB,MAAM,MAAM;KACZ,QAAQ;KACT,CAAC;AAEF,YAAQ;AACR,YAAQ,OAAO,MAAM,SAAS,QAAQ,OAAO,MAAM,SAAS,KAAK;YAC1D,OAAO;IACd,MAAM,eAAe,iBAAiB,QAAQ,MAAM,UAAU;AAE9D,YAAQ,KAAK;KACX,IAAI;KACJ,WAAW,MAAM;KACjB,MAAM,MAAM;KACZ,QAAQ;KACR,OAAO;KACR,CAAC;AAEF,YAAQ;AAER,YAAQ,2BAA2B;KACjC;KACA,MAAM,MAAM;KACZ,OAAO;KACR,CAAC;;;EAIN,MAAM,WAAoC;GACxC,WAAW;GACX,WAAW;GACX,QAAQ;GACR,QAAQ,gBAAgB,SAAS,IAAI,YAAY;GAClD;EAED,MAAM,gBAAgB,YAA2B;AAC/C,OAAI;AACF,UAAM,KAAK,iBAAiB,UAAU,iBAAiB;KACrD,SAAS,KAAK,OAAO;KACrB,aAAa,KAAK,OAAO;KACzB,UAAU;KACX,CAAC;AAEF,QAAI,KAAK,OAAO,eAAe;AAC7B,cAAS,SAAS;AAClB,cAAS,YAAY,gBAAgB;;YAEhC,OAAO;AACd,QAAI,KAAK,OAAO,eAAe;AAC7B,cAAS,SAAS;AAClB,cAAS,YAAY,gBAAgB;AACrC,cAAS,SAAS,gBAAgB;;AAGpC,aAAS,8CAA8C;KACrD,OAAO,iBAAiB,QAAQ,MAAM,UAAU;KAChD,YAAY,gBAAgB;KAC5B,SAAS,QAAQ;KAClB,CAAC;;;AAQN,MAAI,gBAAgB,SAAS,GAAG;AAC9B,YAAS,YAAY,gBAAgB;AAErC,OAAI,KAAK,OAAO,cACd,OAAM,eAAe;OAErB,CAAK,eAAe;;EAKxB,MAAM,UAAU,QAAQ,OAAO,QAAQ;AACvC,UAAQ,mBAAmB,OAAO,UAAU,UAAU,GAAG;AAGzD,UAAQ,6BAA6B;GACnC,SAAS,QAAQ;GACjB,QAAQ,QAAQ;GAChB,UAAU,QAAQ;GAClB,eAAe,QAAQ;GACvB,UAAU,QAAQ;GAClB,UAAU,QAAQ;GAClB,kBAAkB,QAAQ,iBAAiB,QAAQ,EAAE;GACrD,QAAQ,QAAQ;GACjB,CAAC;AAEF,SAAO;GACL,SAAS;GACT,UAAU,QAAQ;GAClB,UAAU,QAAQ;GAClB;GACA;GACA;GACD;;;;;;;;;;;CAYH,MAAM,eACJ,SACA,SAC4D;EAC5D,MAAM,cAAc,KAAK,aAAa,QAAQ;AAE9C,MAAI,CAAC,YAAY,QACf,QAAO,YAAY;AAGrB,SAAO,KAAK,OAAO,YAAY,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;AAwBjD,SAAgB,uBACd,kBACA,QACkB;AAClB,QAAO,IAAI,iBAAiB,kBAAkB,OAAO;;;;;;;;;;AAWvD,SAAgB,qBACd,SAC8E;CAC9E,MAAM,SAAS,mBAAmB,UAAU,QAAQ;AAEpD,KAAI,CAAC,OAAO,QACV,QAAO;EACL,SAAS;EACT,QAAQ,OAAO,MAAM,OAAO,KAC1B,MAAK,GAAG,EAAE,KAAK,KAAI,MAAM,OAAO,MAAM,WAAW,OAAO,EAAE,GAAG,EAAG,CAAC,KAAK,IAAI,CAAC,IAAI,EAAE,UAClF;EACF;AAGH,QAAO;EAAE,SAAS;EAAM,MAAM,OAAO;EAAM;;;;;;;;AAS7C,SAAgB,qBACd,UACgF;CAChF,MAAM,SAAS,wBAAwB,UAAU,EAAE,OAAO,UAAU,CAAC;AAErE,KAAI,CAAC,OAAO,QACV,QAAO;EACL,SAAS;EACT,QAAQ,OAAO,MAAM,OAAO,KAC1B,MAAK,GAAG,EAAE,KAAK,KAAI,MAAM,OAAO,MAAM,WAAW,OAAO,EAAE,GAAG,EAAG,CAAC,KAAK,IAAI,CAAC,IAAI,EAAE,UAClF;EACF;AAGH,QAAO;EAAE,SAAS;EAAM,MAAM,OAAO,KAAK;EAAO"}
|
package/shared.d.mts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { c as ProviderConfig, d as TrackingOptions, i as AnalyticsProvider, n as AnalyticsContext, r as AnalyticsManager, t as AnalyticsConfig } from "./types-
|
|
2
|
-
import { i as page, n as group, o as track, r as identify, t as alias } from "./emitters-
|
|
3
|
-
import { t as index_d_exports$1 } from "./index-
|
|
4
|
-
import { t as index_d_exports } from "./index-
|
|
1
|
+
import { c as ProviderConfig, d as TrackingOptions, i as AnalyticsProvider, n as AnalyticsContext, r as AnalyticsManager, t as AnalyticsConfig } from "./types-cMMfHIpi.mjs";
|
|
2
|
+
import { i as page, n as group, o as track, r as identify, t as alias } from "./emitters-BDSsleo_.mjs";
|
|
3
|
+
import { t as index_d_exports$1 } from "./index-BWhDEs8u.mjs";
|
|
4
|
+
import { t as index_d_exports } from "./index-Cp-N57Zb.mjs";
|
|
5
5
|
|
|
6
6
|
//#region src/shared.d.ts
|
|
7
7
|
declare function createAnalytics(config: AnalyticsConfig): Promise<AnalyticsManager>;
|
package/shared.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { i as page, n as group, o as track, r as identify, t as alias } from "./emitters-
|
|
2
|
-
import { t as ecommerce_exports } from "./ecommerce-
|
|
3
|
-
import { t as ai_exports } from "./ai-
|
|
1
|
+
import { i as page, n as group, o as track, r as identify, t as alias } from "./emitters-BvEelkxS.mjs";
|
|
2
|
+
import { t as ecommerce_exports } from "./ecommerce-DGG1FbiH.mjs";
|
|
3
|
+
import { t as ai_exports } from "./ai-Co8hBoEj.mjs";
|
|
4
4
|
|
|
5
5
|
//#region src/shared.ts
|
|
6
6
|
/**
|
|
@@ -213,4 +213,4 @@ interface EcommerceEventSpec<T = any> {
|
|
|
213
213
|
type EcommerceEventProperties = BaseProductProperties | ExtendedProductProperties | ProductListProperties | CartProperties | CheckoutProperties | OrderProperties | CouponProperties | WishlistProperties | (BaseProductProperties & SharingProperties) | (CartProperties & SharingProperties) | ReviewProperties;
|
|
214
214
|
//#endregion
|
|
215
215
|
export { SearchResultsProperties as C, ReviewProperties as S, WishlistProperties as T, ProductListProperties as _, CheckoutProgressProperties as a, RegistryProperties as b, ECOMMERCE_EVENTS as c, EcommerceEventSpec as d, EngagementProperties as f, ProductComparisonProperties as g, OrderStatusProperties as h, CartUpdateProperties as i, EcommerceEventName as l, OrderProperties as m, CartAbandonmentProperties as n, CheckoutProperties as o, ExtendedProductProperties as p, CartProperties as r, CouponProperties as s, BaseProductProperties as t, EcommerceEventProperties as u, RecommendationProperties as v, SharingProperties as w, ReturnProperties as x, RegistryItemProperties as y };
|
|
216
|
-
//# sourceMappingURL=types-
|
|
216
|
+
//# sourceMappingURL=types-DEcTnnFe.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types-
|
|
1
|
+
{"version":3,"file":"types-DEcTnnFe.d.mts","names":[],"sources":["../src/shared/emitters/ecommerce/types.ts"],"mappings":"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"}
|
|
@@ -351,4 +351,4 @@ interface AnalyticsManager {
|
|
|
351
351
|
}
|
|
352
352
|
//#endregion
|
|
353
353
|
export { GroupTraits as A, EmitterPagePayload as C, EmitterTrackPayload as D, EmitterScreenPayload as E, UserTraits as F, Properties as M, PropertyObject as N, EmitterUserTraits as O, PropertyValue as P, EmitterOptions as S, EmitterProduct as T, EmitterEventProperties as _, EcommerceEventSpec as a, EmitterIdentifyPayload as b, ProviderConfig as c, TrackingOptions as d, AnalyticsEmitter as f, EmitterContext as g, EmitterConfig as h, AnalyticsProvider as i, PageProperties as j, IntegrationConfig as k, ProviderFactory as l, EmitterBasePayload as m, AnalyticsContext as n, ErrorContext as o, EmitterAliasPayload as p, AnalyticsManager as r, PostHogBootstrap as s, AnalyticsConfig as t, ProviderRegistry as u, EmitterGroupPayload as v, EmitterPayload as w, EmitterIntegrations as x, EmitterGroupTraits as y };
|
|
354
|
-
//# sourceMappingURL=types-
|
|
354
|
+
//# sourceMappingURL=types-cMMfHIpi.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types-
|
|
1
|
+
{"version":3,"file":"types-cMMfHIpi.d.mts","names":[],"sources":["../src/shared/types/base-types.ts","../src/shared/emitters/emitter-types.ts","../src/shared/types/types.ts"],"mappings":"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"}
|
package/types.d.mts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { C as EmitterPagePayload, D as EmitterTrackPayload, S as EmitterOptions, b as EmitterIdentifyPayload, c as ProviderConfig, d as TrackingOptions, g as EmitterContext, i as AnalyticsProvider, n as AnalyticsContext, p as EmitterAliasPayload, r as AnalyticsManager, t as AnalyticsConfig, u as ProviderRegistry, v as EmitterGroupPayload, w as EmitterPayload } from "./types-
|
|
2
|
-
import { d as EcommerceEventSpec, m as OrderProperties, p as ExtendedProductProperties, r as CartProperties, t as BaseProductProperties } from "./types-
|
|
3
|
-
import { a as ConsoleConfig, c as PostHogConfig, i as SegmentOptions, l as PostHogOptions, n as VercelOptions, o as ConsoleOptions, r as SegmentConfig, s as BootstrapData, t as VercelConfig } from "./vercel-types-
|
|
1
|
+
import { C as EmitterPagePayload, D as EmitterTrackPayload, S as EmitterOptions, b as EmitterIdentifyPayload, c as ProviderConfig, d as TrackingOptions, g as EmitterContext, i as AnalyticsProvider, n as AnalyticsContext, p as EmitterAliasPayload, r as AnalyticsManager, t as AnalyticsConfig, u as ProviderRegistry, v as EmitterGroupPayload, w as EmitterPayload } from "./types-cMMfHIpi.mjs";
|
|
2
|
+
import { d as EcommerceEventSpec, m as OrderProperties, p as ExtendedProductProperties, r as CartProperties, t as BaseProductProperties } from "./types-DEcTnnFe.mjs";
|
|
3
|
+
import { a as ConsoleConfig, c as PostHogConfig, i as SegmentOptions, l as PostHogOptions, n as VercelOptions, o as ConsoleOptions, r as SegmentConfig, s as BootstrapData, t as VercelConfig } from "./vercel-types-oM7Sn385.mjs";
|
|
4
4
|
export { type AnalyticsConfig, type AnalyticsContext, type AnalyticsManager, type AnalyticsProvider, type BaseProductProperties, type BootstrapData, type CartProperties, type ConsoleConfig, type ConsoleOptions, type EcommerceEventSpec, type EmitterAliasPayload, type EmitterContext, type EmitterGroupPayload, type EmitterIdentifyPayload, type EmitterOptions, type EmitterPagePayload, type EmitterPayload, type EmitterTrackPayload, type ExtendedProductProperties, type OrderProperties, type PostHogConfig, type PostHogOptions, type ProviderConfig, type ProviderRegistry, type SegmentConfig, type SegmentOptions, type TrackingOptions, type VercelConfig, type VercelOptions };
|
|
@@ -99,4 +99,4 @@ interface VercelConfig {
|
|
|
99
99
|
type VercelOptions = Record<string, any>;
|
|
100
100
|
//#endregion
|
|
101
101
|
export { ConsoleConfig as a, PostHogConfig as c, SegmentOptions as i, PostHogOptions as l, VercelOptions as n, ConsoleOptions as o, SegmentConfig as r, BootstrapData as s, VercelConfig as t };
|
|
102
|
-
//# sourceMappingURL=vercel-types-
|
|
102
|
+
//# sourceMappingURL=vercel-types-oM7Sn385.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vercel-types-
|
|
1
|
+
{"version":3,"file":"vercel-types-oM7Sn385.d.mts","names":[],"sources":["../src/shared/types/posthog-types.ts","../src/shared/types/console-types.ts","../src/shared/types/segment-types.ts","../src/shared/types/vercel-types.ts"],"mappings":";UAKiB,aAAA;EACf,MAAA;EACA,OAAA;IAEE,QAAA;IACA,OAAA;IACA,WAAA;IACA,gBAAA;IACA,iBAAA;IACA,yBAAA;IACA,sBAAA;IACA,WAAA;IACA,gBAAA;IACA,MAAA,IAAU,OAAA;IAGV,eAAA;IACA,gBAAA;IACA,WAAA;IAGA,YAAA;IACA,gBAAA;IACA,uBAAA;IAGA,iBAAA;MACE,aAAA;MACA,gBAAA;QACE,KAAA;QACA,IAAA;QACA,gBAAA;QACA,KAAA;QACA,KAAA;QACA,MAAA;QACA,QAAA;QACA,KAAA;QACA,MAAA;QACA,GAAA;QACA,IAAA;QACA,IAAA;QACA,GAAA;QACA,IAAA;MAAA;MAEF,wBAAA;MACA,YAAA;MACA,gBAAA;MACA,aAAA;MACA,QAAA;QACE,iBAAA;QACA,UAAA;MAAA;IAAA;IAKJ,WAAA,IAAe,KAAA;IACf,mBAAA,IAAuB,UAAA,OAAiB,KAAA;IAGxC,KAAA;IACA,uBAAA;IAGA,OAAA;IACA,aAAA;IAGA,aAAA;MACE,KAAA,GAAQ,YAAA;MACR,IAAA;QACE,UAAA;QACA,IAAA;MAAA;IAAA;IAKJ,SAAA,GAAY,aAAA;EAAA;AAAA;AAAA,UAaC,aAAA;EACf,UAAA;AAAA;AAAA,KAmCU,cAAA,GAAiB,MAAA;;;UC7HZ,aAAA;EACf,OAAA;IAEM,MAAA;IACA,YAAA;IACA,QAAA;IACA,MAAA;EAAA;AAAA;AAAA,KAKI,cAAA,GAAiB,MAAA;;;UCXZ,aAAA;EACf,OAAA;IACE,YAAA,GAAe,MAAA;IACf,OAAA,GAAU,MAAA;IACV,WAAA;EAAA;EAEF,QAAA;AAAA;AAAA,KAGU,cAAA,GAAiB,MAAA;;;UCTZ,YAAA;EAGf,OAAA;IACE,IAAA;IACA,KAAA;IACA,UAAA,IAAc,KAAA;EAAA;AAAA;AAAA,KAON,aAAA,GAAgB,MAAA"}
|
package/client-CeOLjbac.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"client-CeOLjbac.mjs","names":[],"sources":["../src/providers/posthog/client.ts"],"sourcesContent":["/**\n * @fileoverview PostHog client-side (browser) provider implementation\n *\n * Provides client-side integration with PostHog Analytics including feature flags support.\n * Supports full PostHog tracking including capture, identify, reset, group, alias, and feature flags.\n *\n * @remarks\n * This provider:\n * - Uses PostHog JavaScript SDK for browser tracking\n * - Supports bootstrap data for SSR optimization\n * - Handles feature flags and experiments\n * - Integrates with PostHog's analytics dashboard\n *\n * @module @repo/analytics/providers/posthog/client\n */\n\n// Simple console fallbacks - observability integration can be added later\nimport type {\n BootstrapData,\n EnhancedPostHogProvider,\n ExperimentInfo,\n PostHogConfig,\n} from './types';\nimport type { AnalyticsProvider, ProviderConfig } from '../../shared/types/types';\nconst logDebug = (_message: string, _context?: any) => {\n // No-op to avoid console warnings in production\n // TODO: Add proper debug logging via observability package\n};\nconst logError = (_message: string, _error?: Error, _context?: any) => {\n // No-op to avoid console warnings in production\n // TODO: Add proper error logging via observability package\n};\nconst logWarn = (_message: string, _context?: any) => {\n // No-op to avoid console warnings in production\n // TODO: Add proper error logging via observability package\n};\n\ndeclare global {\n interface Window {\n posthog?: {\n init: (apiKey: string, options?: any) => void;\n capture: (event: string, properties?: any) => void;\n identify: (userId: string, properties?: any) => void;\n reset: () => void;\n group: (groupType: string, groupKey: string, properties?: any) => void;\n alias: (alias: string) => void;\n people?: {\n set: (properties: any) => void;\n set_once: (properties: any) => void;\n };\n register: (properties: any) => void;\n\n // Feature flag methods\n isFeatureEnabled: (flag: string) => boolean;\n getFeatureFlag: (flag: string) => any;\n getFeatureFlagPayload: (flag: string) => any;\n getAllFlags: () => Record<string, any>;\n onFeatureFlags: (callback: (flags: string[], variants: Record<string, any>) => void) => void;\n\n // Experiment methods\n getActiveMatchingFeatureFlags: () => string[];\n\n // Utility methods\n get_distinct_id: () => string;\n shutdown: () => Promise<void>;\n };\n }\n}\n\nexport class PostHogClientProvider implements AnalyticsProvider, Partial<EnhancedPostHogProvider> {\n readonly name = 'posthog';\n private config: PostHogConfig;\n private isInitialized = false;\n private posthogInstance: any = null;\n private retryQueue: { method: string; args: any[] }[] = [];\n private isOnline = true;\n private debugMode = false;\n\n constructor(config: ProviderConfig) {\n if (!config.apiKey) {\n throw new Error('PostHog apiKey is required');\n }\n\n this.config = {\n apiKey: config.apiKey,\n options: config.options,\n };\n\n // Set up debug mode\n this.debugMode =\n config.options?.debug === true ||\n (typeof window !== 'undefined' && window.location.search.includes('debug=posthog'));\n\n // Monitor network status for retry queue\n if (typeof window !== 'undefined') {\n window.addEventListener('online', () => {\n this.isOnline = true;\n void this.flushRetryQueue();\n });\n\n window.addEventListener('offline', () => {\n this.isOnline = false;\n });\n }\n }\n\n async initialize(): Promise<void> {\n if (this.isInitialized) return;\n\n try {\n // Dynamically import PostHog (optional dependency)\n const { default: posthog } = await import('posthog-js');\n\n // Extract bootstrap data if provided\n const bootstrap = this.config.options?.bootstrap;\n\n // Initialize PostHog with enhanced options and all missing configurations\n const initOptions: any = {\n // Core PostHog configuration with PostHog recommended defaults\n api_host: 'https://app.posthog.com',\n capture_pageleave: true, // Important for engagement tracking\n capture_pageview: false, // We handle pageviews manually\n ui_host: 'https://app.posthog.com',\n\n opt_in_site_apps: false, // Conservative default\n // Privacy & GDPR compliance\n person_profiles: 'identified_only', // GDPR-friendly default\n respect_dnt: true, // Respect Do Not Track headers\n\n // Performance optimizations\n uuid_version: 'v7', // Better performance than v4\n batch_flush_interval_ms: 10000, // 10 second batching\n request_batching: true, // Batch requests for better performance\n\n // Session recording with safe defaults\n session_recording: {\n maskAllInputs: false,\n maskInputOptions: {\n email: false,\n number: false,\n password: true, // Always mask passwords\n text: false,\n },\n recordCanvas: false, // Performance consideration\n recordCrossOriginIframes: false, // Conservative default\n sampling: {\n minimumDurationMs: 1000, // Only record sessions > 1s\n sampleRate: 1, // Record all sessions by default\n },\n },\n\n // Debug mode\n debug: this.debugMode,\n\n // Apply user configuration (this will override defaults)\n ...this.config.options,\n\n // Add bootstrap data if available (must be last to not be overridden)\n ...(bootstrap && {\n bootstrap: {\n distinctID: bootstrap.distinctID,\n },\n }),\n };\n\n posthog.init(this.config.apiKey, initOptions);\n\n // Store instance references\n this.posthogInstance = posthog;\n window.posthog = posthog as any;\n\n this.isInitialized = true;\n } catch {\n throw new Error('PostHog JS SDK not available. Install with: npm install posthog-js');\n }\n }\n\n async track(event: string, properties: any = {}): Promise<void> {\n if (!this.isInitialized || !this.posthogInstance) {\n await this.queueEvent('track', [event, properties]);\n return;\n }\n\n try {\n // Debug logging\n await this.log('Tracking event:', event, properties);\n\n // Validate properties in debug mode\n if (this.debugMode) {\n await this.validateEventProperties(event, properties);\n }\n\n this.posthogInstance.capture(event, properties);\n } catch (error) {\n // Queue event if offline\n if (!this.isOnline) {\n await this.queueEvent('track', [event, properties]);\n }\n\n // Enhanced error reporting\n await this.reportError(error, 'track', { event, properties });\n }\n }\n\n async identify(userId: string, traits: any = {}): Promise<void> {\n if (!this.isInitialized || !this.posthogInstance) {\n return;\n }\n\n try {\n this.posthogInstance.identify(userId, traits);\n } catch {\n // Silently fail to avoid disrupting app flow\n }\n }\n\n async page(name?: string, properties: any = {}): Promise<void> {\n if (!this.isInitialized || !this.posthogInstance) {\n return;\n }\n\n try {\n this.posthogInstance.capture('$pageview', {\n $current_url: window.location.href,\n $title: name ?? document.title,\n ...properties,\n });\n } catch {\n // Silently fail to avoid disrupting app flow\n }\n }\n\n async group(groupId: string, traits: any = {}): Promise<void> {\n if (!this.isInitialized || !this.posthogInstance) {\n return;\n }\n\n try {\n this.posthogInstance.group('company', groupId, traits);\n } catch {\n // Silently fail to avoid disrupting app flow\n }\n }\n\n async alias(userId: string, _previousId: string): Promise<void> {\n if (!this.isInitialized || !this.posthogInstance) {\n return;\n }\n\n try {\n this.posthogInstance.alias(userId);\n } catch {\n // Silently fail to avoid disrupting app flow\n }\n }\n\n // Feature Flag Methods\n async getAllFlags(userId?: string): Promise<Record<string, any>> {\n if (!this.isInitialized || !this.posthogInstance) {\n return {};\n }\n\n try {\n if (userId) {\n // If userId provided, identify first to ensure flags are for correct user\n await this.identify(userId);\n }\n\n return this.posthogInstance.getAllFlags() ?? {};\n } catch {\n return {};\n }\n }\n\n async getFeatureFlag(flag: string, userId?: string): Promise<any> {\n if (!this.isInitialized || !this.posthogInstance) {\n return false;\n }\n\n try {\n if (userId) {\n await this.identify(userId);\n }\n\n return this.posthogInstance.getFeatureFlag(flag);\n } catch {\n return false;\n }\n }\n\n async isFeatureEnabled(flag: string, userId?: string): Promise<boolean> {\n if (!this.isInitialized || !this.posthogInstance) {\n return false;\n }\n\n try {\n if (userId) {\n await this.identify(userId);\n }\n\n return this.posthogInstance.isFeatureEnabled(flag) ?? false;\n } catch {\n return false;\n }\n }\n\n async getFeatureFlagPayload(flag: string, userId?: string): Promise<any | null> {\n if (!this.isInitialized || !this.posthogInstance) {\n return null;\n }\n\n try {\n if (userId) {\n await this.identify(userId);\n }\n\n return this.posthogInstance.getFeatureFlagPayload(flag) ?? null;\n } catch {\n return null;\n }\n }\n\n async getActiveExperiments(userId?: string): Promise<ExperimentInfo[]> {\n if (!this.isInitialized || !this.posthogInstance) {\n return [];\n }\n\n try {\n if (userId) {\n await this.identify(userId);\n }\n\n const activeFlags = this.posthogInstance.getActiveMatchingFeatureFlags() ?? [];\n return activeFlags.map((flag: string) => ({\n key: flag,\n payload: this.posthogInstance.getFeatureFlagPayload(flag),\n variant: this.posthogInstance.getFeatureFlag(flag),\n }));\n } catch {\n return [];\n }\n }\n\n // Bootstrap method (not typically used on client, but included for completeness)\n async getBootstrapData(distinctId: string): Promise<BootstrapData> {\n if (!this.isInitialized || !this.posthogInstance) {\n return { distinctID: distinctId };\n }\n\n try {\n await this.getAllFlags();\n\n return {\n distinctID: distinctId,\n };\n } catch {\n return { distinctID: distinctId };\n }\n }\n\n // Utility Methods\n reset(): void {\n if (!this.isInitialized || !this.posthogInstance) {\n return;\n }\n\n try {\n this.posthogInstance.reset();\n } catch {\n // Silently fail\n }\n }\n\n async shutdown(): Promise<void> {\n if (!this.isInitialized || !this.posthogInstance) {\n return;\n }\n\n try {\n if (this.posthogInstance.shutdown) {\n await this.posthogInstance.shutdown();\n }\n } catch {\n // Silently fail\n }\n }\n\n // Get distinct ID for bootstrap purposes\n getDistinctId(): string | null {\n if (!this.isInitialized || !this.posthogInstance) {\n return null;\n }\n\n try {\n return this.posthogInstance.get_distinct_id();\n } catch {\n return null;\n }\n }\n\n // Enhanced error handling and utility methods\n private async queueEvent(method: string, args: any[]) {\n this.retryQueue.push({ args, method });\n await this.log(`Queued ${method} event for retry: `, args);\n }\n\n private async flushRetryQueue() {\n await this.log(`Flushing retry queue with ${this.retryQueue.length} events`);\n\n while (this.retryQueue.length > 0) {\n const item = this.retryQueue.shift();\n if (!item) break;\n const { args, method } = item;\n try {\n await (this as any)[method](...args);\n } catch {\n // Re-queue failed events (limit retries)\n if (this.retryQueue.length < 100) {\n // Prevent infinite queue growth\n await this.queueEvent(method, args);\n }\n break;\n }\n }\n }\n\n private log(...args: any[]) {\n if (this.debugMode) {\n logDebug('PostHog Debug:', { args });\n }\n }\n\n private async validateEventProperties(event: string, properties: any) {\n // Check for reserved property names\n const reserved = new Set(['$set', '$set_once', '$unset', 'distinct_id', '$groups']);\n const conflicts = Object.keys(properties).filter(\n key => reserved.has(key) && !key.startsWith('$'),\n );\n\n if (conflicts.length > 0) {\n logWarn('PostHog: Properties may conflict with reserved names:', {\n conflicts: conflicts.join(', '),\n event,\n });\n }\n\n // Check for circular references\n try {\n JSON.stringify(properties);\n } catch (error) {\n logWarn('PostHog: Event properties contain circular references:', {\n event,\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n\n private async reportError(error: any, method: string, context: any) {\n if (this.debugMode) {\n logError('PostHog Error:', error instanceof Error ? error : new Error(String(error)), {\n method,\n context,\n });\n }\n\n // Could emit error event to other analytics providers\n // this.emit('analytics_error', { provider: 'posthog', method, error: error.message, context });\n }\n\n // Consent management methods\n async optIn(): Promise<void> {\n if (this.posthogInstance) {\n this.posthogInstance.opt_in_capturing();\n await this.log('User opted in to tracking');\n }\n }\n\n async optOut(): Promise<void> {\n if (this.posthogInstance) {\n this.posthogInstance.opt_out_capturing();\n await this.log('User opted out of tracking');\n }\n }\n\n hasOptedOut(): boolean {\n return this.posthogInstance ? this.posthogInstance.has_opted_out_capturing() : false;\n }\n\n // Enhanced group analytics\n async groupIdentify(\n groupType: string,\n groupKey: string,\n groupProperties: any,\n options?: { setAsDefault?: boolean },\n ): Promise<void> {\n if (!this.isInitialized || !this.posthogInstance) {\n return;\n }\n\n try {\n await this.log('Group identify:', groupType, groupKey, groupProperties);\n\n // Set group properties\n this.posthogInstance.group(groupType, groupKey, groupProperties);\n\n // Optionally set as default group for user\n if (options?.setAsDefault) {\n this.posthogInstance.register({\n [`$groups`]: {\n [groupType]: groupKey,\n },\n });\n }\n } catch (error) {\n await this.reportError(error, 'groupIdentify', { groupKey, groupProperties, groupType });\n }\n }\n}\n"],"mappings":"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"}
|
package/console-8bND3mMU.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"console-8bND3mMU.mjs","names":[],"sources":["../src/providers/console/index.ts"],"sourcesContent":["/**\n * @fileoverview Console provider - works in both client and server environments\n *\n * Provides console-based analytics logging for development and debugging.\n * Useful for testing analytics events without sending data to external services.\n *\n * @remarks\n * This provider:\n * - Logs analytics events to console\n * - Works in both browser and Node.js environments\n * - Useful for development and debugging\n * - Integrates with observability package for structured logging\n *\n * @module @od-oneapp/analytics/providers/console\n */\n\nimport { logDebug, logWarn } from '@repo/shared/logger';\n\nimport type { ConsoleConfig } from './types';\nimport type { AnalyticsProvider, ProviderConfig } from '../../shared/types/types';\n\nexport class ConsoleProvider implements AnalyticsProvider {\n readonly name = 'console';\n private config: ConsoleConfig;\n private isInitialized = false;\n\n constructor(config: ProviderConfig) {\n const options = config.options as ConsoleConfig | undefined;\n this.config = {\n prefix: '[Analytics]',\n logLevel: 'info',\n colorize: false,\n ...options,\n };\n }\n\n async initialize(): Promise<void> {\n if (this.isInitialized) return;\n\n // Reduce noisy logs: only log in development or explicit debug\n const isDev = process.env.NODE_ENV !== 'production';\n const isDebug = process.env.NEXT_PUBLIC_OBSERVABILITY_DEBUG === 'true';\n if (isDev || isDebug) {\n this.log('Console Analytics Provider initialized', {\n config: this.config,\n });\n }\n\n this.isInitialized = true;\n }\n\n async track(event: string, properties: any = {}, _context?: any): Promise<void> {\n if (!this.isInitialized) {\n logWarn('Console provider not initialized', {\n provider: 'console',\n operation: 'track',\n event,\n });\n return;\n }\n\n this.log('TRACK', {\n event,\n properties,\n timestamp: new Date().toISOString(),\n });\n }\n\n async identify(userId: string, traits: any = {}, _context?: any): Promise<void> {\n if (!this.isInitialized) {\n logWarn('Console provider not initialized', {\n provider: 'console',\n operation: 'identify',\n userId,\n });\n return;\n }\n\n this.log('IDENTIFY', {\n timestamp: new Date().toISOString(),\n traits,\n userId,\n });\n }\n\n async page(name?: string, properties: any = {}, _context?: any): Promise<void> {\n if (!this.isInitialized) {\n logWarn('Console provider not initialized', {\n provider: 'console',\n operation: 'page',\n metadata: { name },\n });\n return;\n }\n\n this.log('PAGE', {\n name,\n properties,\n timestamp: new Date().toISOString(),\n });\n }\n\n async group(groupId: string, traits: any = {}, _context?: any): Promise<void> {\n if (!this.isInitialized) {\n logWarn('Console provider not initialized', {\n provider: 'console',\n operation: 'group',\n metadata: { groupId },\n });\n return;\n }\n\n this.log('GROUP', {\n groupId,\n timestamp: new Date().toISOString(),\n traits,\n });\n }\n\n async alias(userId: string, previousId: string, _context?: any): Promise<void> {\n if (!this.isInitialized) {\n logWarn('Console provider not initialized', {\n provider: 'console',\n operation: 'alias',\n userId,\n metadata: { previousId },\n });\n return;\n }\n\n this.log('ALIAS', {\n previousId,\n timestamp: new Date().toISOString(),\n userId,\n });\n }\n\n private log(action: string, data: any): void {\n const { logLevel, prefix } = this.config;\n\n if (logLevel === 'error') return; // Don't log analytics in error-only mode\n\n const message = `${prefix} ${action}`;\n\n // Use analytics logger instead of console directly\n logDebug(message, {\n provider: 'console',\n operation: action.toLowerCase(),\n metadata: data,\n });\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAqBA,IAAa,kBAAb,MAA0D;CACxD,AAAS,OAAO;CAChB,AAAQ;CACR,AAAQ,gBAAgB;CAExB,YAAY,QAAwB;AAElC,OAAK,SAAS;GACZ,QAAQ;GACR,UAAU;GACV,UAAU;GACV,GALc,OAAO;GAMtB;;CAGH,MAAM,aAA4B;AAChC,MAAI,KAAK,cAAe;AAIR,UAAQ,IAAI;AAE1B,OAAK,IAAI,0CAA0C,EACjD,QAAQ,KAAK,QACd,CAAC;AAGJ,OAAK,gBAAgB;;CAGvB,MAAM,MAAM,OAAe,aAAkB,EAAE,EAAE,UAA+B;AAC9E,MAAI,CAAC,KAAK,eAAe;AACvB,WAAQ,oCAAoC;IAC1C,UAAU;IACV,WAAW;IACX;IACD,CAAC;AACF;;AAGF,OAAK,IAAI,SAAS;GAChB;GACA;GACA,4BAAW,IAAI,MAAM,EAAC,aAAa;GACpC,CAAC;;CAGJ,MAAM,SAAS,QAAgB,SAAc,EAAE,EAAE,UAA+B;AAC9E,MAAI,CAAC,KAAK,eAAe;AACvB,WAAQ,oCAAoC;IAC1C,UAAU;IACV,WAAW;IACX;IACD,CAAC;AACF;;AAGF,OAAK,IAAI,YAAY;GACnB,4BAAW,IAAI,MAAM,EAAC,aAAa;GACnC;GACA;GACD,CAAC;;CAGJ,MAAM,KAAK,MAAe,aAAkB,EAAE,EAAE,UAA+B;AAC7E,MAAI,CAAC,KAAK,eAAe;AACvB,WAAQ,oCAAoC;IAC1C,UAAU;IACV,WAAW;IACX,UAAU,EAAE,MAAM;IACnB,CAAC;AACF;;AAGF,OAAK,IAAI,QAAQ;GACf;GACA;GACA,4BAAW,IAAI,MAAM,EAAC,aAAa;GACpC,CAAC;;CAGJ,MAAM,MAAM,SAAiB,SAAc,EAAE,EAAE,UAA+B;AAC5E,MAAI,CAAC,KAAK,eAAe;AACvB,WAAQ,oCAAoC;IAC1C,UAAU;IACV,WAAW;IACX,UAAU,EAAE,SAAS;IACtB,CAAC;AACF;;AAGF,OAAK,IAAI,SAAS;GAChB;GACA,4BAAW,IAAI,MAAM,EAAC,aAAa;GACnC;GACD,CAAC;;CAGJ,MAAM,MAAM,QAAgB,YAAoB,UAA+B;AAC7E,MAAI,CAAC,KAAK,eAAe;AACvB,WAAQ,oCAAoC;IAC1C,UAAU;IACV,WAAW;IACX;IACA,UAAU,EAAE,YAAY;IACzB,CAAC;AACF;;AAGF,OAAK,IAAI,SAAS;GAChB;GACA,4BAAW,IAAI,MAAM,EAAC,aAAa;GACnC;GACD,CAAC;;CAGJ,AAAQ,IAAI,QAAgB,MAAiB;EAC3C,MAAM,EAAE,UAAU,WAAW,KAAK;AAElC,MAAI,aAAa,QAAS;AAK1B,WAHgB,GAAG,OAAO,GAAG,UAGX;GAChB,UAAU;GACV,WAAW,OAAO,aAAa;GAC/B,UAAU;GACX,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"manager-DvRRjza6.d.mts","names":[],"sources":["../src/shared/utils/manager.ts"],"mappings":";;;cAoKa,gBAAA;EAAA,QAoBD,MAAA;EAAA,QACA,kBAAA;EAAA,QApBF,SAAA;EAAA,QACA,OAAA;EAAA,QACA,aAAA;EAAA,iBAGS,eAAA;EAAA,iBAGA,UAAA;EAAA,iBAGA,WAAA;cAQP,MAAA,EAAQ,eAAA,EACR,kBAAA,EAAoB,gBAAA;EAOxB,UAAA,CAAA,GAAc,OAAA;EAsGpB,UAAA,CAAW,OAAA,EAAS,gBAAA;EAiCpB,UAAA,CAAA,GAAc,gBAAA;EASR,KAAA,CAAM,OAAA,EAAS,mBAAA,GAAsB,OAAA;EACrC,KAAA,CAAM,KAAA,UAAe,UAAA,GAAa,UAAA,EAAY,OAAA,GAAU,eAAA,GAAkB,OAAA;EA4G1E,QAAA,CAAS,OAAA,EAAS,sBAAA,GAAyB,OAAA;EAC3C,QAAA,CAAS,MAAA,UAAgB,MAAA,GAAS,UAAA,EAAY,OAAA,GAAU,eAAA,GAAkB,OAAA;EAmG1E,IAAA,CAAK,OAAA,EAAS,kBAAA,GAAqB,OAAA;EACnC,IAAA,CAAK,IAAA,WAAe,UAAA,GAAa,cAAA,EAAgB,OAAA,GAAU,eAAA,GAAkB,OAAA;EA+F7E,MAAA,CAAO,OAAA,EAAS,oBAAA,GAAuB,OAAA;EACvC,MAAA,CACJ,IAAA,WACA,UAAA,GAAa,cAAA,EACb,OAAA,GAAU,eAAA,GACT,OAAA;EA2FG,KAAA,CAAM,OAAA,EAAS,mBAAA,GAAsB,OAAA;EACrC,KAAA,CAAM,OAAA,UAAiB,MAAA,GAAS,WAAA,EAAa,OAAA,GAAU,eAAA,GAAkB,OAAA;EAmGzE,KAAA,CAAM,OAAA,EAAS,mBAAA,GAAsB,OAAA;EACrC,KAAA,CAAM,MAAA,UAAgB,UAAA,UAAoB,OAAA,GAAU,eAAA,GAAkB,OAAA;EAuF5E,kBAAA,CAAA;EAOA,WAAA,CAAY,IAAA,WAAe,iBAAA;EAO3B,KAAA,CAAA;EAQM,QAAA,CAAA,GAAY,OAAA;EAyBZ,IAAA,CAAK,OAAA,EAAS,cAAA,EAAgB,OAAA;IAAY,OAAA;EAAA,IAAqB,OAAA;EAAA,QAqEvD,oBAAA;EAqBR,qBAAA,CAAsB,OAAA,EAAS,cAAA,GAAiB,OAAA;EAShD,SAAA,CACJ,QAAA,EAAU,cAAA,IACV,OAAA;IACE,OAAA;IACA,WAAA;IACA,QAAA;EAAA,IAED,OAAA;EA+CH,aAAA,CAAA,IAAkB,OAAA,EAAS,cAAA,KAAmB,OAAA;EAUxC,cAAA,CAAe,SAAA,EAAW,kBAAA,GAAqB,OAAA;EAAA,QAO7C,kBAAA;EAyDR,mBAAA,CAAA;IACE,SAAA,EAAW,MAAA;MAGP,UAAA;MACA,SAAA;MACA,UAAA;MACA,UAAA;MACA,WAAA;IAAA;IAGJ,MAAA;MACE,cAAA;MACA,SAAA;MACA,WAAA;QACE,GAAA;QACA,SAAA;QACA,QAAA;QACA,QAAA;QACA,YAAA;MAAA;IAAA;EAAA;EAyCA,WAAA,CAAY,OAAA,YAAyB,OAAA;IACzC,OAAA;IACA,SAAA,EAAW,MAAA;IACX,OAAA,EAAS,UAAA,CAAW,gBAAA;IACpB,cAAA;EAAA;AAAA;AAAA,iBAqDY,sBAAA,CACd,MAAA,EAAQ,eAAA,EACR,kBAAA,EAAoB,gBAAA,GACnB,gBAAA"}
|