@virtu3d/event-manager 0.2.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +624 -0
- package/dist/browser/index.d.mts +631 -0
- package/dist/browser/index.d.ts +631 -0
- package/dist/browser/index.js +1140 -0
- package/dist/browser/index.js.map +1 -0
- package/dist/browser/index.mjs +1104 -0
- package/dist/browser/index.mjs.map +1 -0
- package/dist/context/index.d.mts +111 -0
- package/dist/context/index.d.ts +111 -0
- package/dist/context/index.js +186 -0
- package/dist/context/index.js.map +1 -0
- package/dist/context/index.mjs +176 -0
- package/dist/context/index.mjs.map +1 -0
- package/dist/index.d.mts +568 -0
- package/dist/index.d.ts +568 -0
- package/dist/index.js +1044 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +999 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +118 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/connectors/base.connector.ts","../src/connectors/console.connector.ts","../src/connectors/otel.connector.ts","../src/connectors/cloudwatch-emf.connector.ts","../src/factories/index.ts","../src/core/router.ts","../src/core/config.ts","../src/context/index.ts","../src/utils/index.ts","../src/connectors/mixpanel.connector.ts","../src/connectors/posthog.connector.ts"],"names":["MixpanelConnector","PostHogConnector"],"mappings":"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","file":"index.js","sourcesContent":["import type {\n Connector,\n ConnectorType,\n TelemetryEvent,\n IdentifyEvent,\n PageEvent,\n ConnectorConfig,\n} from '../core/types';\n\nexport abstract class BaseConnector implements Connector {\n abstract name: string;\n abstract type: ConnectorType;\n\n protected config: ConnectorConfig;\n protected ready = false;\n\n constructor(config: ConnectorConfig = {}) {\n this.config = {\n enabled: true,\n debug: false,\n ...config,\n };\n }\n\n async init(): Promise<void> {\n if (!this.config.enabled) {\n this.log('Connector disabled, skipping init');\n return;\n }\n await this.setup();\n this.ready = true;\n }\n\n /**\n * Override this to implement connector-specific setup\n */\n protected abstract setup(): Promise<void> | void;\n\n abstract track(event: TelemetryEvent): Promise<void> | void;\n\n identify?(event: IdentifyEvent): Promise<void> | void;\n\n page?(event: PageEvent): Promise<void> | void;\n\n async shutdown(): Promise<void> {\n this.ready = false;\n }\n\n isReady(): boolean {\n return this.ready && (this.config.enabled ?? true);\n }\n\n protected log(message: string, data?: unknown): void {\n if (this.config.debug) {\n console.log(`[${this.name}] ${message}`, data || '');\n }\n }\n}\n","import { BaseConnector } from './base.connector';\nimport type { TelemetryEvent, IdentifyEvent, PageEvent, ConnectorConfig } from '../core/types';\n\nexport interface ConsoleConnectorConfig extends ConnectorConfig {\n prefix?: string;\n}\n\n/**\n * Console connector for debugging during development\n */\nexport class ConsoleConnector extends BaseConnector {\n name = 'console';\n type = 'custom' as const;\n\n private prefix: string;\n\n constructor(config: ConsoleConnectorConfig = {}) {\n super(config);\n this.prefix = config.prefix || '[Telemetry]';\n }\n\n protected setup(): void {\n // No setup needed\n }\n\n track(event: TelemetryEvent): void {\n console.log(`${this.prefix} TRACK:`, event.name, event.payload);\n }\n\n identify(event: IdentifyEvent): void {\n console.log(`${this.prefix} IDENTIFY:`, event.userId, event.traits);\n }\n\n page(event: PageEvent): void {\n console.log(`${this.prefix} PAGE:`, event.name, event.properties);\n }\n}\n\nexport function createConsoleConnector(config?: ConsoleConnectorConfig): ConsoleConnector {\n return new ConsoleConnector(config);\n}\n","import { BaseConnector } from './base.connector';\nimport type { TelemetryEvent, IdentifyEvent, PageEvent, ConnectorConfig } from '../core/types';\n\nexport interface OtelConnectorConfig extends ConnectorConfig {\n serviceName: string;\n endpoint?: string;\n /** Custom span attributes extractor */\n attributesExtractor?: (event: TelemetryEvent) => Record<string, string | number | boolean>;\n}\n\n/**\n * OpenTelemetry connector for distributed tracing\n */\nexport class OtelConnector extends BaseConnector {\n name = 'otel';\n type = 'observability' as const;\n\n private tracer: any; // Type: Tracer from @opentelemetry/api\n private context: any; // Type: ContextAPI from @opentelemetry/api\n private serviceName: string;\n private attributesExtractor?: OtelConnectorConfig['attributesExtractor'];\n\n constructor(config: OtelConnectorConfig) {\n super(config);\n this.serviceName = config.serviceName;\n this.attributesExtractor = config.attributesExtractor;\n }\n\n protected async setup(): Promise<void> {\n // Dynamic import to avoid bundling OTEL if not used\n const api = await import('@opentelemetry/api');\n this.tracer = api.trace.getTracer(this.serviceName);\n this.context = api.context;\n this.log('OTEL tracer initialized');\n }\n\n track(event: TelemetryEvent): void {\n if (!this.tracer) {\n this.log('Tracer not initialized');\n return;\n }\n\n // Pass context.active() to link span to the active HTTP request context\n const span = this.tracer.startSpan(event.name, {}, this.context.active());\n\n // Add default attributes\n span.setAttribute('event.name', event.name);\n span.setAttribute('event.timestamp', event.timestamp || new Date().toISOString());\n\n // Add custom attributes via extractor\n if (this.attributesExtractor) {\n const customAttrs = this.attributesExtractor(event);\n Object.entries(customAttrs).forEach(([key, value]) => {\n span.setAttribute(key, value);\n });\n }\n\n // Add payload as attributes (flatten first level)\n Object.entries(event.payload).forEach(([key, value]) => {\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n span.setAttribute(`payload.${key}`, value);\n }\n });\n\n // Add meta as attributes\n if (event.meta) {\n Object.entries(event.meta).forEach(([key, value]) => {\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n span.setAttribute(`meta.${key}`, value);\n }\n });\n }\n\n span.end();\n this.log('Span created', { name: event.name });\n }\n\n identify(event: IdentifyEvent): void {\n // Store user context for future spans\n this.log('Identify received', { userId: event.userId });\n }\n\n page(event: PageEvent): void {\n this.track({\n name: 'page_view',\n payload: { pageName: event.name, ...event.properties },\n timestamp: event.timestamp,\n });\n }\n}\n\nexport function createOtelConnector(config: OtelConnectorConfig): OtelConnector {\n return new OtelConnector(config);\n}\n","import { BaseConnector } from './base.connector';\nimport type { TelemetryEvent, IdentifyEvent, ConnectorConfig } from '../core/types';\nimport type { MetricMapping } from '../core/config';\n\nexport interface CloudWatchEmfConnectorConfig extends ConnectorConfig {\n /** CloudWatch namespace e.g., 'Virtu3D/Application' */\n namespace: string;\n /** Service name */\n serviceName: string;\n /** AWS Region */\n region?: string;\n /** Map event names to metric configurations */\n metricMappings?: Record<string, MetricMapping>;\n}\n\n/**\n * CloudWatch Embedded Metric Format (EMF) Connector\n *\n * Outputs structured JSON logs that CloudWatch automatically parses into metrics.\n * Works with existing Docker awslogs driver - no additional infrastructure needed.\n *\n * IMPORTANT: This is for CUSTOM BUSINESS METRICS only.\n * Application logs already go to CloudWatch via Docker awslogs driver + Pino.\n * DO NOT use this connector for application logging.\n *\n * @see https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Embedded_Metric_Format.html\n */\nexport class CloudWatchEmfConnector extends BaseConnector {\n name = 'cloudwatch-emf';\n type = 'metrics' as const;\n\n private namespace: string;\n private serviceName: string;\n private region: string;\n private metricMappings: Record<string, MetricMapping>;\n\n constructor(config: CloudWatchEmfConnectorConfig) {\n super(config);\n this.namespace = config.namespace;\n this.serviceName = config.serviceName;\n this.region = config.region || process.env.AWS_REGION || 'us-east-1';\n this.metricMappings = config.metricMappings || {};\n }\n\n protected setup(): void {\n this.log('CloudWatch EMF connector initialized', {\n namespace: this.namespace,\n serviceName: this.serviceName,\n mappedEvents: Object.keys(this.metricMappings),\n });\n }\n\n track(event: TelemetryEvent): void {\n const mapping = this.metricMappings[event.name];\n\n // If no explicit mapping, create a default count metric\n const metricConfig: MetricMapping = mapping || {\n metricName: this.toMetricName(event.name),\n unit: 'Count',\n dimensions: ['service'],\n };\n\n // Extract metric value\n const metricValue = metricConfig.valueField\n ? Number(event.payload[metricConfig.valueField]) || 1\n : 1;\n\n // Build dimensions\n const dimensions: Record<string, string> = {\n service: this.serviceName,\n };\n\n if (metricConfig.dimensions) {\n for (const dim of metricConfig.dimensions) {\n if (dim !== 'service' && event.payload[dim] !== undefined) {\n dimensions[dim] = String(event.payload[dim]);\n }\n }\n }\n\n // Add user/org context if available\n if (event.meta?.userId) dimensions['userId'] = String(event.meta.userId);\n if (event.meta?.orgId) dimensions['orgId'] = String(event.meta.orgId);\n\n // Build EMF structure\n const emfLog = {\n _aws: {\n Timestamp: Date.now(),\n CloudWatchMetrics: [\n {\n Namespace: this.namespace,\n Dimensions: [Object.keys(dimensions)],\n Metrics: [\n {\n Name: metricConfig.metricName,\n Unit: metricConfig.unit,\n },\n ],\n },\n ],\n },\n // Dimensions as top-level fields\n ...dimensions,\n // Metric value\n [metricConfig.metricName]: metricValue,\n // Additional context (not dimensions, just for log inspection)\n eventName: event.name,\n timestamp: event.timestamp,\n payload: event.payload,\n };\n\n // Output EMF JSON - CloudWatch agent or awslogs driver picks this up\n console.log(JSON.stringify(emfLog));\n\n this.log('EMF metric emitted', {\n metric: metricConfig.metricName,\n value: metricValue,\n dimensions,\n });\n }\n\n identify(event: IdentifyEvent): void {\n // Optionally track user identification as a metric\n const emfLog = {\n _aws: {\n Timestamp: Date.now(),\n CloudWatchMetrics: [\n {\n Namespace: this.namespace,\n Dimensions: [['service']],\n Metrics: [\n {\n Name: 'UserIdentified',\n Unit: 'Count',\n },\n ],\n },\n ],\n },\n service: this.serviceName,\n UserIdentified: 1,\n userId: event.userId,\n traits: event.traits,\n };\n\n console.log(JSON.stringify(emfLog));\n }\n\n /**\n * Convert event name to CloudWatch metric name\n * e.g., 'ai_chat_completed' -> 'AiChatCompleted'\n */\n private toMetricName(eventName: string): string {\n return eventName\n .split('_')\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join('');\n }\n}\n\nexport function createCloudWatchEmfConnector(\n config: CloudWatchEmfConnectorConfig\n): CloudWatchEmfConnector {\n return new CloudWatchEmfConnector(config);\n}\n","/**\n * Connector Factory Registry\n *\n * Maps connector type strings to their factory functions.\n * This allows the router to auto-instantiate connectors from config.\n */\n\nimport type { Connector, ConnectorConfig } from '../core/types';\n\n// Import all built-in connector factories (except Node.js-only connectors)\nimport { ConsoleConnector, type ConsoleConnectorConfig } from '../connectors/console.connector';\nimport { OtelConnector, type OtelConnectorConfig } from '../connectors/otel.connector';\nimport { CloudWatchEmfConnector, type CloudWatchEmfConnectorConfig } from '../connectors/cloudwatch-emf.connector';\n// Mixpanel and PostHog are loaded lazily to avoid bundling Node.js dependencies in browser builds\nimport type { MixpanelConnectorConfig } from '../connectors/mixpanel.connector';\nimport type { PostHogConnectorConfig } from '../connectors/posthog.connector';\n\n/**\n * Factory function type\n */\nexport type ConnectorFactoryFn<TConfig extends ConnectorConfig = ConnectorConfig> = (\n config: TConfig\n) => Connector;\n\n/**\n * Provider configuration for router\n */\nexport interface ProviderConfig {\n /** Unique name for this provider instance */\n name: string;\n /** Provider type - maps to factory */\n type: ConnectorTypeName;\n /** Enable/disable this provider */\n enabled?: boolean;\n /** Provider-specific configuration */\n config?: ConnectorConfig;\n}\n\n/**\n * Built-in connector type names\n */\nexport type ConnectorTypeName =\n | 'console'\n | 'otel'\n | 'otel-browser'\n | 'cloudwatch-emf'\n | 'mixpanel'\n | 'posthog';\n\n/**\n * Factory registry - maps type names to factory functions\n */\nconst factoryRegistry = new Map<string, ConnectorFactoryFn<any>>();\n\n/**\n * Register a connector factory\n */\nexport function registerFactory<TConfig extends ConnectorConfig>(\n typeName: string,\n factory: ConnectorFactoryFn<TConfig>\n): void {\n factoryRegistry.set(typeName, factory);\n}\n\n/**\n * Get a factory by type name\n */\nexport function getFactory(typeName: string): ConnectorFactoryFn | undefined {\n return factoryRegistry.get(typeName);\n}\n\n/**\n * Check if a factory is registered\n */\nexport function hasFactory(typeName: string): boolean {\n return factoryRegistry.has(typeName);\n}\n\n/**\n * Get all registered factory names\n */\nexport function getRegisteredFactories(): string[] {\n return Array.from(factoryRegistry.keys());\n}\n\n/**\n * Create a connector from type and config\n */\nexport function createConnector(typeName: string, config: ConnectorConfig): Connector {\n const factory = factoryRegistry.get(typeName);\n if (!factory) {\n throw new Error(\n `Unknown connector type: \"${typeName}\". ` +\n `Registered types: ${getRegisteredFactories().join(', ')}`\n );\n }\n return factory(config);\n}\n\n/**\n * Create connectors from provider configs\n */\nexport function createConnectorsFromConfig(providers: ProviderConfig[]): Connector[] {\n return providers\n .filter((p) => p.enabled !== false)\n .map((provider) => {\n const connector = createConnector(provider.type, provider.config || {});\n // Override name if provided\n if (provider.name && provider.name !== connector.name) {\n (connector as any).name = provider.name;\n }\n return connector;\n });\n}\n\nregisterFactory<ConsoleConnectorConfig>('console', (config) => new ConsoleConnector(config));\nregisterFactory<OtelConnectorConfig>('otel', (config) => new OtelConnector(config));\nregisterFactory<CloudWatchEmfConnectorConfig>('cloudwatch-emf', (config) => new CloudWatchEmfConnector(config));\n\n// Lazy-load Node.js-only connectors to avoid bundling their dependencies in browser builds\n// Use eval() to hide require() from static bundlers like Vite/Rollup\nregisterFactory<MixpanelConnectorConfig>('mixpanel', (config) => {\n try {\n // eslint-disable-next-line @typescript-eslint/no-implied-eval, no-new-func\n const dynamicRequire = new Function('modulePath', 'return require(modulePath)');\n const { MixpanelConnector } = dynamicRequire('../connectors/mixpanel.connector');\n return new MixpanelConnector(config);\n } catch (err) {\n throw new Error(\n 'Mixpanel connector requires Node.js environment and the \"mixpanel\" package. ' +\n 'Install with: npm install mixpanel'\n );\n }\n});\nregisterFactory<PostHogConnectorConfig>('posthog', (config) => {\n try {\n // eslint-disable-next-line @typescript-eslint/no-implied-eval, no-new-func\n const dynamicRequire = new Function('modulePath', 'return require(modulePath)');\n const { PostHogConnector } = dynamicRequire('../connectors/posthog.connector');\n return new PostHogConnector(config);\n } catch (err) {\n throw new Error(\n 'PostHog connector requires Node.js environment and the \"posthog-node\" package. ' +\n 'Install with: npm install posthog-node'\n );\n }\n});\n\nexport { factoryRegistry };\n","import type {\n Connector,\n ConnectorConfig,\n ConnectorFactory,\n TelemetryEvent,\n IdentifyEvent,\n PageEvent,\n RouterConfig,\n RouterPlugin,\n DispatchResult,\n DispatchResults,\n} from './types';\nimport { createConnectorsFromConfig, type ProviderConfig } from '../factories';\n\n/**\n * Extended router config with providers support\n */\nexport interface TelemetryRouterConfig extends RouterConfig {\n /** Provider configurations - auto-registered on construction */\n providers?: ProviderConfig[];\n}\n\nexport class TelemetryRouter {\n private connectors: Map<string, Connector> = new Map();\n private plugins: RouterPlugin[] = [];\n private config: TelemetryRouterConfig;\n private initialized = false;\n\n constructor(config: TelemetryRouterConfig = {}) {\n this.config = {\n debug: false,\n globalMeta: {},\n ...config,\n };\n this.plugins = config.plugins || [];\n\n // Auto-register connectors from providers config\n if (config.providers && config.providers.length > 0) {\n try {\n const connectors = createConnectorsFromConfig(config.providers);\n for (const connector of connectors) {\n this.registerConnector(connector);\n }\n } catch (error) {\n this.log('Failed to auto-register providers', error);\n }\n }\n }\n\n /**\n * Initialize all registered connectors\n */\n async init(): Promise<void> {\n if (this.initialized) return;\n\n const initPromises = Array.from(this.connectors.values()).map(\n async (connector) => {\n try {\n await connector.init?.();\n this.log(`Connector initialized: ${connector.name}`);\n } catch (error) {\n this.log(`Failed to initialize connector: ${connector.name}`, error);\n }\n }\n );\n\n await Promise.allSettled(initPromises);\n this.initialized = true;\n }\n\n /**\n * Register a connector instance directly\n */\n registerConnector(connector: Connector): this {\n if (this.connectors.has(connector.name)) {\n this.log(`Connector \"${connector.name}\" already registered, replacing...`);\n }\n this.connectors.set(connector.name, connector);\n this.log(`Connector registered: ${connector.name} (${connector.type})`);\n return this;\n }\n\n /**\n * Register connector using a factory\n */\n use<TConfig extends ConnectorConfig>(factory: ConnectorFactory<TConfig>, config: TConfig): this {\n const connector = factory.create(config);\n return this.registerConnector(connector);\n }\n\n /**\n * Unregister a connector by name\n */\n unregisterConnector(name: string): this {\n const connector = this.connectors.get(name);\n if (connector) {\n connector.shutdown?.();\n this.connectors.delete(name);\n this.log(`Connector unregistered: ${name}`);\n }\n return this;\n }\n\n /**\n * Add a plugin\n */\n addPlugin(plugin: RouterPlugin): this {\n this.plugins.push(plugin);\n this.log(`Plugin added: ${plugin.name}`);\n return this;\n }\n\n /**\n * Track a custom event\n */\n async track(eventName: string, payload: Record<string, unknown> = {}): Promise<DispatchResults> {\n const event: TelemetryEvent = {\n name: eventName,\n payload,\n timestamp: new Date().toISOString(),\n meta: { ...this.config.globalMeta },\n };\n\n return this.dispatch('track', event);\n }\n\n /**\n * Identify a user\n */\n async identify(userId: string, traits: Record<string, unknown> = {}): Promise<DispatchResults> {\n const event: IdentifyEvent = {\n userId,\n traits,\n timestamp: new Date().toISOString(),\n };\n\n const telemetryEvent: TelemetryEvent = {\n name: 'identify',\n payload: { userId, traits },\n timestamp: event.timestamp,\n meta: { ...this.config.globalMeta, userId },\n };\n\n return this.dispatch('identify', telemetryEvent, event);\n }\n\n /**\n * Track a page view\n */\n async page(name?: string, properties: Record<string, unknown> = {}): Promise<DispatchResults> {\n const event: PageEvent = {\n name,\n properties,\n timestamp: new Date().toISOString(),\n };\n\n const telemetryEvent: TelemetryEvent = {\n name: 'page_view',\n payload: { pageName: name, ...properties },\n timestamp: event.timestamp,\n meta: { ...this.config.globalMeta },\n };\n\n return this.dispatch('page', telemetryEvent, event);\n }\n\n /**\n * Core dispatch method - sends to all connectors in parallel\n */\n private async dispatch(\n method: 'track' | 'identify' | 'page',\n event: TelemetryEvent,\n originalEvent?: IdentifyEvent | PageEvent\n ): Promise<DispatchResults> {\n // Run beforeDispatch plugins\n let processedEvent: TelemetryEvent | null = event;\n for (const plugin of this.plugins) {\n if (plugin.beforeDispatch) {\n processedEvent = plugin.beforeDispatch(processedEvent);\n if (!processedEvent) {\n this.log(`Event blocked by plugin: ${plugin.name}`);\n return {\n event,\n results: [],\n timestamp: new Date().toISOString(),\n };\n }\n }\n }\n\n const connectors = Array.from(this.connectors.values());\n const startTime = Date.now();\n\n // Dispatch to all connectors in parallel\n const settledResults = await Promise.allSettled(\n connectors.map(async (connector) => {\n const connectorStart = Date.now();\n try {\n switch (method) {\n case 'track':\n await connector.track(processedEvent!);\n break;\n case 'identify':\n await connector.identify?.(originalEvent as IdentifyEvent);\n break;\n case 'page':\n await connector.page?.(originalEvent as PageEvent);\n break;\n }\n return {\n connector: connector.name,\n success: true,\n duration: Date.now() - connectorStart,\n };\n } catch (error) {\n return {\n connector: connector.name,\n success: false,\n error: error instanceof Error ? error : new Error(String(error)),\n duration: Date.now() - connectorStart,\n };\n }\n })\n );\n\n // Process results\n const results: DispatchResult[] = settledResults.map((result) => {\n if (result.status === 'fulfilled') {\n return result.value;\n }\n return {\n connector: 'unknown',\n success: false,\n error: result.reason,\n };\n });\n\n // Log results in debug mode\n this.log(`Event dispatched: ${event.name}`, {\n duration: Date.now() - startTime,\n results: results.map((r) => ({\n connector: r.connector,\n success: r.success,\n })),\n });\n\n // Run afterDispatch plugins\n for (const plugin of this.plugins) {\n plugin.afterDispatch?.(processedEvent!, results);\n }\n\n return {\n event: processedEvent!,\n results,\n timestamp: new Date().toISOString(),\n };\n }\n\n /**\n * Get all registered connector names\n */\n getConnectors(): string[] {\n return Array.from(this.connectors.keys());\n }\n\n /**\n * Get connectors by type\n */\n getConnectorsByType(type: Connector['type']): string[] {\n return Array.from(this.connectors.values())\n .filter((c) => c.type === type)\n .map((c) => c.name);\n }\n\n /**\n * Shutdown all connectors\n */\n async shutdown(): Promise<void> {\n const shutdownPromises = Array.from(this.connectors.values()).map(\n async (connector) => {\n try {\n await connector.shutdown?.();\n this.log(`Connector shutdown: ${connector.name}`);\n } catch (error) {\n this.log(`Failed to shutdown connector: ${connector.name}`, error);\n }\n }\n );\n\n await Promise.allSettled(shutdownPromises);\n this.connectors.clear();\n this.initialized = false;\n }\n\n /**\n * Internal logger\n */\n private log(message: string, data?: unknown): void {\n if (this.config.debug) {\n console.log(`[TelemetryRouter] ${message}`, data || '');\n }\n }\n}\n\n/**\n * Create a new TelemetryRouter instance\n */\nexport function createTelemetryRouter(config?: RouterConfig): TelemetryRouter {\n return new TelemetryRouter(config);\n}\n","/**\n * Analytics provider options\n */\nexport type AnalyticsProvider = 'mixpanel' | 'posthog' | 'segment' | 'none';\n\n/**\n * Observability provider options\n */\nexport type ObservabilityProvider = 'otel' | 'datadog' | 'newrelic' | 'none';\n\n/**\n * Metrics provider options (for custom business metrics)\n */\nexport type MetricsProvider = 'cloudwatch-emf' | 'none';\n\n/**\n * Metric mapping configuration for CloudWatch EMF\n */\nexport interface MetricMapping {\n /** CloudWatch metric name */\n metricName: string;\n /** Metric unit */\n unit: 'Count' | 'Milliseconds' | 'Bytes' | 'None' | 'Percent';\n /** Dimension fields to extract from event payload */\n dimensions?: string[];\n /** Field to use as metric value (default: 1 for count) */\n valueField?: string;\n}\n\n/**\n * Provider-specific configurations\n */\nexport interface ProviderConfigs {\n mixpanel?: {\n token: string;\n trackFields?: string[];\n debug?: boolean;\n };\n posthog?: {\n apiKey: string;\n host?: string;\n debug?: boolean;\n };\n segment?: {\n writeKey: string;\n debug?: boolean;\n };\n otel?: {\n serviceName: string;\n endpoint?: string;\n debug?: boolean;\n };\n datadog?: {\n clientToken: string;\n site?: string;\n service?: string;\n debug?: boolean;\n };\n cloudwatchEmf?: {\n namespace: string;\n serviceName: string;\n region?: string;\n /** Map event names to metric configurations */\n metricMappings?: Record<string, MetricMapping>;\n debug?: boolean;\n };\n}\n\n/**\n * Main telemetry configuration\n */\nexport interface TelemetryConfig {\n /** Application name */\n app: string;\n /** Environment (auto-detected if not provided) */\n environment?: 'browser' | 'node';\n /** Enable debug logging */\n debug?: boolean;\n /** Global metadata added to all events */\n globalMeta?: Record<string, unknown>;\n\n /** Analytics configuration */\n analytics: {\n /** Active provider - change this to switch */\n provider: AnalyticsProvider;\n } & ProviderConfigs;\n\n /** Observability configuration */\n observability: {\n /** Active provider - change this to switch */\n provider: ObservabilityProvider;\n } & ProviderConfigs;\n\n /** Custom metrics configuration */\n metrics?: {\n /** Active provider - change this to switch */\n provider: MetricsProvider;\n } & ProviderConfigs;\n}\n\n/**\n * Validate configuration\n */\nexport function validateConfig(config: TelemetryConfig): void {\n if (!config.app) {\n throw new Error('TelemetryConfig: \"app\" is required');\n }\n\n // Validate analytics provider config exists\n if (config.analytics.provider !== 'none') {\n const providerConfig = config.analytics[config.analytics.provider as keyof ProviderConfigs];\n if (!providerConfig) {\n throw new Error(\n `TelemetryConfig: Missing config for analytics provider \"${config.analytics.provider}\"`\n );\n }\n }\n\n // Validate observability provider config exists\n if (config.observability.provider !== 'none') {\n const providerConfig = config.observability[config.observability.provider as keyof ProviderConfigs];\n if (!providerConfig) {\n throw new Error(\n `TelemetryConfig: Missing config for observability provider \"${config.observability.provider}\"`\n );\n }\n }\n\n // Validate metrics provider config exists\n if (config.metrics?.provider && config.metrics.provider !== 'none') {\n const key = config.metrics.provider === 'cloudwatch-emf' ? 'cloudwatchEmf' : config.metrics.provider;\n const providerConfig = config.metrics[key as keyof ProviderConfigs];\n if (!providerConfig) {\n throw new Error(\n `TelemetryConfig: Missing config for metrics provider \"${config.metrics.provider}\"`\n );\n }\n }\n}\n","/**\n * Context Propagation Utilities\n *\n * Works in both Node.js and Browser environments.\n * Uses @opentelemetry/api for trace context propagation.\n */\n\n/**\n * Trace context structure\n */\nexport interface TraceContext {\n traceId: string;\n spanId: string;\n traceFlags: number;\n}\n\n/**\n * Get current trace headers for manual injection into HTTP requests.\n * Returns headers like { traceparent: '00-abc123...', tracestate: '...' }\n *\n * If there's an active OTEL span, uses its context.\n * Otherwise, generates a new traceparent to enable backend trace correlation.\n *\n * @example\n * ```typescript\n * const headers = getTraceHeaders();\n * fetch('/api/data', { headers });\n * ```\n */\nexport async function getTraceHeaders(): Promise<Record<string, string>> {\n try {\n const { context, propagation, trace } = await import('@opentelemetry/api');\n const headers: Record<string, string> = {};\n propagation.inject(context.active(), headers);\n\n // If OTEL didn't provide traceparent (no active span), generate one\n // This ensures trace context is always propagated to backends\n if (!headers['traceparent']) {\n const traceId = generateTraceId();\n const spanId = generateSpanId();\n headers['traceparent'] = generateTraceparent(traceId, spanId, 1);\n }\n\n return headers;\n } catch {\n // OTEL not available, generate traceparent manually\n const traceId = generateTraceId();\n const spanId = generateSpanId();\n return {\n traceparent: generateTraceparent(traceId, spanId, 1),\n };\n }\n}\n\n/**\n * Synchronous version of getTraceHeaders (requires OTEL to be pre-loaded)\n * Use this when you know OTEL is already initialized.\n *\n * If there's an active OTEL span, uses its context.\n * Otherwise, generates a new traceparent to enable backend trace correlation.\n */\nexport function getTraceHeadersSync(): Record<string, string> {\n try {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const { context, propagation } = require('@opentelemetry/api');\n const headers: Record<string, string> = {};\n propagation.inject(context.active(), headers);\n\n // If OTEL didn't provide traceparent (no active span), generate one\n if (!headers['traceparent']) {\n const traceId = generateTraceId();\n const spanId = generateSpanId();\n headers['traceparent'] = generateTraceparent(traceId, spanId, 1);\n }\n\n return headers;\n } catch {\n // OTEL not available, generate traceparent manually\n const traceId = generateTraceId();\n const spanId = generateSpanId();\n return {\n traceparent: generateTraceparent(traceId, spanId, 1),\n };\n }\n}\n\n/**\n * Extract trace context from incoming headers.\n * Use this in middleware to link incoming requests to their parent trace.\n *\n * @example\n * ```typescript\n * // Express middleware\n * app.use((req, res, next) => {\n * const traceContext = extractTraceContext(req.headers);\n * if (traceContext) {\n * req.traceId = traceContext.traceId;\n * }\n * next();\n * });\n * ```\n */\nexport async function extractTraceContext(\n headers: Record<string, string | string[] | undefined>\n): Promise<TraceContext | null> {\n try {\n const { trace, context, propagation, isSpanContextValid } = await import('@opentelemetry/api');\n\n // Normalize headers to string values (lowercase keys for consistency)\n const normalizedHeaders: Record<string, string> = {};\n for (const [key, value] of Object.entries(headers)) {\n const lowerKey = key.toLowerCase();\n if (typeof value === 'string') {\n normalizedHeaders[lowerKey] = value;\n } else if (Array.isArray(value)) {\n normalizedHeaders[lowerKey] = value[0] || '';\n }\n }\n\n const extractedContext = propagation.extract(context.active(), normalizedHeaders);\n\n // Use getSpanContext instead of getSpan - when extracting from headers,\n // there's no Span object, only SpanContext information\n const spanContext = trace.getSpanContext(extractedContext);\n\n if (!spanContext || !isSpanContextValid(spanContext)) {\n // If OTEL extraction failed, try manual parsing of traceparent\n const traceparent = normalizedHeaders['traceparent'];\n if (traceparent) {\n const parsed = parseTraceparent(traceparent);\n if (parsed) {\n return {\n traceId: parsed.traceId,\n spanId: parsed.spanId,\n traceFlags: parsed.traceFlags,\n };\n }\n }\n return null;\n }\n\n return {\n traceId: spanContext.traceId,\n spanId: spanContext.spanId,\n traceFlags: spanContext.traceFlags,\n };\n } catch {\n // Fallback to manual parsing if OTEL is not available\n const traceparent = headers['traceparent'] || headers['Traceparent'];\n if (traceparent) {\n const value = typeof traceparent === 'string' ? traceparent : traceparent[0];\n const parsed = parseTraceparent(value || '');\n if (parsed) {\n return {\n traceId: parsed.traceId,\n spanId: parsed.spanId,\n traceFlags: parsed.traceFlags,\n };\n }\n }\n return null;\n }\n}\n\n/**\n * Run a function within an extracted trace context.\n * This ensures any spans created within the function are linked to the parent trace.\n *\n * @example\n * ```typescript\n * await withTraceContext(req.headers, async () => {\n * // Any spans created here will be children of the incoming trace\n * await processRequest();\n * });\n * ```\n */\nexport async function withTraceContext<T>(\n headers: Record<string, string | string[] | undefined>,\n fn: () => T | Promise<T>\n): Promise<T> {\n try {\n const { context, propagation } = await import('@opentelemetry/api');\n\n // Normalize headers\n const normalizedHeaders: Record<string, string> = {};\n for (const [key, value] of Object.entries(headers)) {\n if (typeof value === 'string') {\n normalizedHeaders[key] = value;\n } else if (Array.isArray(value)) {\n normalizedHeaders[key] = value[0] || '';\n }\n }\n\n const extractedContext = propagation.extract(context.active(), normalizedHeaders);\n return context.with(extractedContext, fn);\n } catch {\n // OTEL not available, run function without context\n return fn();\n }\n}\n\n/**\n * Create a new span for tracking an operation.\n * The span will automatically be linked to the current trace context.\n *\n * @example\n * ```typescript\n * const span = await startSpan('fetch-user-data');\n * try {\n * const user = await fetchUser(id);\n * span.setAttribute('user.id', id);\n * span.setStatus({ code: SpanStatusCode.OK });\n * } catch (error) {\n * span.setStatus({ code: SpanStatusCode.ERROR, message: error.message });\n * throw error;\n * } finally {\n * span.end();\n * }\n * ```\n */\nexport async function startSpan(\n name: string,\n serviceName = 'telemetry'\n): Promise<any> {\n try {\n const { trace } = await import('@opentelemetry/api');\n const tracer = trace.getTracer(serviceName);\n return tracer.startSpan(name);\n } catch {\n // Return a no-op span if OTEL is not available\n return {\n setAttribute: () => {},\n setStatus: () => {},\n addEvent: () => {},\n end: () => {},\n spanContext: () => ({ traceId: '', spanId: '', traceFlags: 0 }),\n };\n }\n}\n\n/**\n * Parse a traceparent header string into its components.\n * Format: version-traceId-spanId-traceFlags (e.g., \"00-abc123...-def456...-01\")\n */\nexport function parseTraceparent(\n traceparent: string\n): { version: string; traceId: string; spanId: string; traceFlags: number } | null {\n if (!traceparent) return null;\n\n const parts = traceparent.split('-');\n if (parts.length !== 4) return null;\n\n const [version, traceId, spanId, flags] = parts;\n\n // Validate format\n if (version.length !== 2 || traceId.length !== 32 || spanId.length !== 16 || flags.length !== 2) {\n return null;\n }\n\n return {\n version,\n traceId,\n spanId,\n traceFlags: parseInt(flags, 16),\n };\n}\n\n/**\n * Generate a traceparent header string.\n * Useful for creating custom trace contexts.\n */\nexport function generateTraceparent(\n traceId: string,\n spanId: string,\n traceFlags = 1\n): string {\n const flagsHex = traceFlags.toString(16).padStart(2, '0');\n return `00-${traceId}-${spanId}-${flagsHex}`;\n}\n\n/**\n * Generate a random trace ID (32 hex characters)\n */\nexport function generateTraceId(): string {\n const bytes = new Uint8Array(16);\n if (typeof crypto !== 'undefined' && crypto.getRandomValues) {\n crypto.getRandomValues(bytes);\n } else {\n // Fallback for environments without crypto\n for (let i = 0; i < bytes.length; i++) {\n bytes[i] = Math.floor(Math.random() * 256);\n }\n }\n return Array.from(bytes)\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('');\n}\n\n/**\n * Generate a random span ID (16 hex characters)\n */\nexport function generateSpanId(): string {\n const bytes = new Uint8Array(8);\n if (typeof crypto !== 'undefined' && crypto.getRandomValues) {\n crypto.getRandomValues(bytes);\n } else {\n for (let i = 0; i < bytes.length; i++) {\n bytes[i] = Math.floor(Math.random() * 256);\n }\n }\n return Array.from(bytes)\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('');\n}\n","/**\n * Telemetry Utilities\n *\n * Common helper functions for telemetry operations.\n */\n\n// Declare globals for cross-platform detection\ndeclare const window: unknown;\ndeclare const document: unknown;\n\n/**\n * Detect current environment (browser or node)\n */\nexport function detectEnvironment(): 'browser' | 'node' {\n if (typeof window !== 'undefined' && typeof document !== 'undefined') {\n return 'browser';\n }\n return 'node';\n}\n\n/**\n * Generate a unique session ID\n */\nexport function generateSessionId(): string {\n const timestamp = Date.now().toString(36);\n const randomPart = Math.random().toString(36).substring(2, 10);\n return `${timestamp}-${randomPart}`;\n}\n\n/**\n * Generate a unique event ID\n */\nexport function generateEventId(): string {\n return `${Date.now()}-${Math.random().toString(36).substring(2, 11)}`;\n}\n\n/**\n * Safely stringify an object (handles circular references)\n */\nexport function safeStringify(obj: unknown, space?: number): string {\n const seen = new WeakSet();\n return JSON.stringify(\n obj,\n (key, value) => {\n if (typeof value === 'object' && value !== null) {\n if (seen.has(value)) {\n return '[Circular]';\n }\n seen.add(value);\n }\n // Handle BigInt\n if (typeof value === 'bigint') {\n return value.toString();\n }\n // Handle Error objects\n if (value instanceof Error) {\n return {\n name: value.name,\n message: value.message,\n stack: value.stack,\n };\n }\n return value;\n },\n space\n );\n}\n\n/**\n * Deep merge two objects\n */\nexport function deepMerge<T extends object>(target: T, source: Partial<T>): T {\n const result = { ...target };\n\n for (const key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n const sourceValue = source[key];\n const targetValue = result[key];\n\n if (isObject(sourceValue) && isObject(targetValue)) {\n (result as any)[key] = deepMerge(targetValue as object, sourceValue as object);\n } else if (sourceValue !== undefined) {\n (result as any)[key] = sourceValue;\n }\n }\n }\n\n return result;\n}\n\n/**\n * Check if value is a plain object\n */\nexport function isObject(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === 'object' && !Array.isArray(value);\n}\n\n/**\n * Sanitize sensitive fields from payload\n */\nexport function sanitizePayload(\n payload: Record<string, unknown>,\n sensitiveFields: string[] = ['password', 'token', 'secret', 'apiKey', 'api_key', 'authorization']\n): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n\n for (const [key, value] of Object.entries(payload)) {\n const lowerKey = key.toLowerCase();\n if (sensitiveFields.some((field) => lowerKey.includes(field.toLowerCase()))) {\n result[key] = '[REDACTED]';\n } else if (isObject(value)) {\n result[key] = sanitizePayload(value as Record<string, unknown>, sensitiveFields);\n } else {\n result[key] = value;\n }\n }\n\n return result;\n}\n\n/**\n * Extract specific fields from an object\n */\nexport function extractFields<T extends Record<string, unknown>>(\n obj: T,\n fields: (keyof T)[]\n): Partial<T> {\n const result: Partial<T> = {};\n for (const field of fields) {\n if (field in obj) {\n result[field] = obj[field];\n }\n }\n return result;\n}\n\n/**\n * Flatten a nested object into dot-notation keys\n */\nexport function flattenObject(\n obj: Record<string, unknown>,\n prefix = ''\n): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n\n for (const [key, value] of Object.entries(obj)) {\n const newKey = prefix ? `${prefix}.${key}` : key;\n\n if (isObject(value) && Object.keys(value).length > 0) {\n Object.assign(result, flattenObject(value as Record<string, unknown>, newKey));\n } else {\n result[newKey] = value;\n }\n }\n\n return result;\n}\n\n/**\n * Retry a function with exponential backoff\n */\nexport async function retryWithBackoff<T>(\n fn: () => Promise<T>,\n options: {\n maxRetries?: number;\n initialDelay?: number;\n maxDelay?: number;\n factor?: number;\n } = {}\n): Promise<T> {\n const { maxRetries = 3, initialDelay = 100, maxDelay = 5000, factor = 2 } = options;\n\n let lastError: Error | undefined;\n let delay = initialDelay;\n\n for (let attempt = 0; attempt <= maxRetries; attempt++) {\n try {\n return await fn();\n } catch (error) {\n lastError = error instanceof Error ? error : new Error(String(error));\n\n if (attempt === maxRetries) {\n break;\n }\n\n await sleep(delay);\n delay = Math.min(delay * factor, maxDelay);\n }\n }\n\n throw lastError;\n}\n\n/**\n * Sleep for a specified duration\n */\nexport function sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\n/**\n * Debounce a function\n */\nexport function debounce<T extends (...args: any[]) => any>(\n fn: T,\n delay: number\n): (...args: Parameters<T>) => void {\n let timeoutId: ReturnType<typeof setTimeout> | null = null;\n\n return (...args: Parameters<T>) => {\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n timeoutId = setTimeout(() => {\n fn(...args);\n timeoutId = null;\n }, delay);\n };\n}\n\n/**\n * Batch items and process in chunks\n */\nexport async function processBatch<T, R>(\n items: T[],\n processor: (batch: T[]) => Promise<R>,\n batchSize = 10\n): Promise<R[]> {\n const results: R[] = [];\n\n for (let i = 0; i < items.length; i += batchSize) {\n const batch = items.slice(i, i + batchSize);\n const result = await processor(batch);\n results.push(result);\n }\n\n return results;\n}\n\n/**\n * Create a simple in-memory cache with TTL\n */\nexport function createCache<T>(defaultTtl = 60000) {\n const cache = new Map<string, { value: T; expires: number }>();\n\n return {\n get(key: string): T | undefined {\n const entry = cache.get(key);\n if (!entry) return undefined;\n if (Date.now() > entry.expires) {\n cache.delete(key);\n return undefined;\n }\n return entry.value;\n },\n\n set(key: string, value: T, ttl = defaultTtl): void {\n cache.set(key, { value, expires: Date.now() + ttl });\n },\n\n delete(key: string): boolean {\n return cache.delete(key);\n },\n\n clear(): void {\n cache.clear();\n },\n\n size(): number {\n return cache.size;\n },\n };\n}\n","import { BaseConnector } from './base.connector';\nimport type { TelemetryEvent, IdentifyEvent, PageEvent, ConnectorConfig } from '../core/types';\n\nexport interface MixpanelConnectorConfig extends ConnectorConfig {\n token: string;\n /** Fields to extract from payload for Mixpanel */\n trackFields?: string[];\n}\n\n/**\n * Mixpanel connector for analytics\n */\nexport class MixpanelConnector extends BaseConnector {\n name = 'mixpanel';\n type = 'analytics' as const;\n\n private client: any;\n private token: string;\n private trackFields?: string[];\n\n constructor(config: MixpanelConnectorConfig) {\n super(config);\n this.token = config.token;\n this.trackFields = config.trackFields;\n }\n\n protected async setup(): Promise<void> {\n // Dynamic import\n const Mixpanel = await import('mixpanel');\n this.client = Mixpanel.init(this.token);\n this.log('Mixpanel client initialized');\n }\n\n track(event: TelemetryEvent): void {\n if (!this.client) {\n this.log('Client not initialized');\n return;\n }\n\n // Extract only specified fields if configured\n let properties: Record<string, unknown> = event.payload;\n if (this.trackFields && this.trackFields.length > 0) {\n properties = {};\n this.trackFields.forEach((field) => {\n if (event.payload[field] !== undefined) {\n properties[field] = event.payload[field];\n }\n });\n }\n\n // Add standard Mixpanel properties\n const mixpanelProps = {\n ...properties,\n distinct_id: event.meta?.userId,\n time: event.timestamp ? new Date(event.timestamp).getTime() / 1000 : undefined,\n };\n\n this.client.track(event.name, mixpanelProps);\n this.log('Event tracked', { name: event.name });\n }\n\n identify(event: IdentifyEvent): void {\n if (!this.client) return;\n\n this.client.people.set(event.userId, {\n ...event.traits,\n $last_seen: new Date().toISOString(),\n });\n this.log('User identified', { userId: event.userId });\n }\n\n page(event: PageEvent): void {\n this.track({\n name: 'Page View',\n payload: { page: event.name, ...event.properties },\n timestamp: event.timestamp,\n });\n }\n}\n\nexport function createMixpanelConnector(config: MixpanelConnectorConfig): MixpanelConnector {\n return new MixpanelConnector(config);\n}\n","import { BaseConnector } from './base.connector';\nimport type { TelemetryEvent, IdentifyEvent, PageEvent, ConnectorConfig } from '../core/types';\n\nexport interface PostHogConnectorConfig extends ConnectorConfig {\n apiKey: string;\n host?: string;\n}\n\n/**\n * PostHog connector for analytics\n */\nexport class PostHogConnector extends BaseConnector {\n name = 'posthog';\n type = 'analytics' as const;\n\n private client: any;\n private apiKey: string;\n private host: string;\n\n constructor(config: PostHogConnectorConfig) {\n super(config);\n this.apiKey = config.apiKey;\n this.host = config.host || 'https://app.posthog.com';\n }\n\n protected async setup(): Promise<void> {\n const { PostHog } = await import('posthog-node');\n this.client = new PostHog(this.apiKey, { host: this.host });\n this.log('PostHog client initialized');\n }\n\n track(event: TelemetryEvent): void {\n if (!this.client) return;\n\n this.client.capture({\n distinctId: (event.meta?.userId as string) || event.payload.user_id as string || 'anonymous',\n event: event.name,\n properties: event.payload,\n timestamp: event.timestamp ? new Date(event.timestamp) : undefined,\n });\n this.log('Event captured', { name: event.name });\n\n // Auto-flush to ensure events are sent immediately\n this.client.flush().catch(() => {});\n }\n\n identify(event: IdentifyEvent): void {\n if (!this.client) return;\n\n this.client.identify({\n distinctId: event.userId,\n properties: event.traits,\n });\n this.log('User identified', { userId: event.userId });\n }\n\n page(event: PageEvent): void {\n this.track({\n name: '$pageview',\n payload: { $current_url: event.name, ...event.properties },\n timestamp: event.timestamp,\n });\n }\n\n async shutdown(): Promise<void> {\n await this.client?.shutdown();\n await super.shutdown();\n }\n}\n\nexport function createPostHogConnector(config: PostHogConnectorConfig): PostHogConnector {\n return new PostHogConnector(config);\n}\n"]}
|