@od-oneapp/analytics 2026.1.1301

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.
Files changed (184) hide show
  1. package/README.md +509 -0
  2. package/dist/ai-YMnynb-t.mjs +3347 -0
  3. package/dist/ai-YMnynb-t.mjs.map +1 -0
  4. package/dist/chunk-DQk6qfdC.mjs +18 -0
  5. package/dist/client-CTzJVFU5.mjs +9 -0
  6. package/dist/client-CTzJVFU5.mjs.map +1 -0
  7. package/dist/client-CcFTauAh.mjs +54 -0
  8. package/dist/client-CcFTauAh.mjs.map +1 -0
  9. package/dist/client-CeOLjbac.mjs +281 -0
  10. package/dist/client-CeOLjbac.mjs.map +1 -0
  11. package/dist/client-D339NFJS.mjs +267 -0
  12. package/dist/client-D339NFJS.mjs.map +1 -0
  13. package/dist/client-next.d.mts +62 -0
  14. package/dist/client-next.d.mts.map +1 -0
  15. package/dist/client-next.mjs +525 -0
  16. package/dist/client-next.mjs.map +1 -0
  17. package/dist/client.d.mts +30 -0
  18. package/dist/client.d.mts.map +1 -0
  19. package/dist/client.mjs +186 -0
  20. package/dist/client.mjs.map +1 -0
  21. package/dist/config-DPS6bSYo.d.mts +34 -0
  22. package/dist/config-DPS6bSYo.d.mts.map +1 -0
  23. package/dist/config-P6P5adJg.mjs +287 -0
  24. package/dist/config-P6P5adJg.mjs.map +1 -0
  25. package/dist/console-8bND3mMU.mjs +128 -0
  26. package/dist/console-8bND3mMU.mjs.map +1 -0
  27. package/dist/ecommerce-Cgu4wlux.mjs +993 -0
  28. package/dist/ecommerce-Cgu4wlux.mjs.map +1 -0
  29. package/dist/emitters-6-nKo8i-.mjs +208 -0
  30. package/dist/emitters-6-nKo8i-.mjs.map +1 -0
  31. package/dist/emitters-DldkVSPp.d.mts +12 -0
  32. package/dist/emitters-DldkVSPp.d.mts.map +1 -0
  33. package/dist/index-BfNWgfa5.d.mts +1494 -0
  34. package/dist/index-BfNWgfa5.d.mts.map +1 -0
  35. package/dist/index-BkIWe--N.d.mts +953 -0
  36. package/dist/index-BkIWe--N.d.mts.map +1 -0
  37. package/dist/index-jPzXRn52.d.mts +184 -0
  38. package/dist/index-jPzXRn52.d.mts.map +1 -0
  39. package/dist/manager-DvRRjza6.d.mts +76 -0
  40. package/dist/manager-DvRRjza6.d.mts.map +1 -0
  41. package/dist/posthog-bootstrap-CYfIy_WS.mjs +1769 -0
  42. package/dist/posthog-bootstrap-CYfIy_WS.mjs.map +1 -0
  43. package/dist/posthog-bootstrap-DWxFrxlt.d.mts +81 -0
  44. package/dist/posthog-bootstrap-DWxFrxlt.d.mts.map +1 -0
  45. package/dist/providers-http-client.d.mts +37 -0
  46. package/dist/providers-http-client.d.mts.map +1 -0
  47. package/dist/providers-http-client.mjs +320 -0
  48. package/dist/providers-http-client.mjs.map +1 -0
  49. package/dist/providers-http-server.d.mts +31 -0
  50. package/dist/providers-http-server.d.mts.map +1 -0
  51. package/dist/providers-http-server.mjs +297 -0
  52. package/dist/providers-http-server.mjs.map +1 -0
  53. package/dist/providers-http.d.mts +46 -0
  54. package/dist/providers-http.d.mts.map +1 -0
  55. package/dist/providers-http.mjs +4 -0
  56. package/dist/server-edge.d.mts +9 -0
  57. package/dist/server-edge.d.mts.map +1 -0
  58. package/dist/server-edge.mjs +373 -0
  59. package/dist/server-edge.mjs.map +1 -0
  60. package/dist/server-next.d.mts +67 -0
  61. package/dist/server-next.d.mts.map +1 -0
  62. package/dist/server-next.mjs +193 -0
  63. package/dist/server-next.mjs.map +1 -0
  64. package/dist/server.d.mts +10 -0
  65. package/dist/server.mjs +7 -0
  66. package/dist/service-cYtBBL8x.mjs +945 -0
  67. package/dist/service-cYtBBL8x.mjs.map +1 -0
  68. package/dist/shared.d.mts +16 -0
  69. package/dist/shared.d.mts.map +1 -0
  70. package/dist/shared.mjs +93 -0
  71. package/dist/shared.mjs.map +1 -0
  72. package/dist/types-BxBnNQ0V.d.mts +354 -0
  73. package/dist/types-BxBnNQ0V.d.mts.map +1 -0
  74. package/dist/types-CBvxUEaF.d.mts +216 -0
  75. package/dist/types-CBvxUEaF.d.mts.map +1 -0
  76. package/dist/types.d.mts +4 -0
  77. package/dist/types.mjs +0 -0
  78. package/dist/vercel-types-lwakUfoI.d.mts +102 -0
  79. package/dist/vercel-types-lwakUfoI.d.mts.map +1 -0
  80. package/package.json +129 -0
  81. package/src/client/index.ts +164 -0
  82. package/src/client/manager.ts +71 -0
  83. package/src/client/next/components.tsx +270 -0
  84. package/src/client/next/hooks.ts +217 -0
  85. package/src/client/next/manager.ts +141 -0
  86. package/src/client/next.ts +144 -0
  87. package/src/client-next.ts +101 -0
  88. package/src/client.ts +89 -0
  89. package/src/examples/ai-sdk-patterns.ts +583 -0
  90. package/src/examples/emitter-patterns.ts +476 -0
  91. package/src/examples/nextjs-emitter-patterns.tsx +403 -0
  92. package/src/next/app-router.tsx +564 -0
  93. package/src/next/client.ts +419 -0
  94. package/src/next/index.ts +84 -0
  95. package/src/next/middleware.ts +429 -0
  96. package/src/next/rsc.tsx +300 -0
  97. package/src/next/server.ts +253 -0
  98. package/src/next/types.d.ts +220 -0
  99. package/src/providers/base-provider.ts +419 -0
  100. package/src/providers/console/client.ts +10 -0
  101. package/src/providers/console/index.ts +152 -0
  102. package/src/providers/console/server.ts +6 -0
  103. package/src/providers/console/types.ts +15 -0
  104. package/src/providers/http/client.ts +464 -0
  105. package/src/providers/http/index.ts +30 -0
  106. package/src/providers/http/server.ts +396 -0
  107. package/src/providers/http/types.ts +135 -0
  108. package/src/providers/posthog/client.ts +518 -0
  109. package/src/providers/posthog/index.ts +11 -0
  110. package/src/providers/posthog/server.ts +329 -0
  111. package/src/providers/posthog/types.ts +104 -0
  112. package/src/providers/segment/client.ts +113 -0
  113. package/src/providers/segment/index.ts +11 -0
  114. package/src/providers/segment/server.ts +115 -0
  115. package/src/providers/segment/types.ts +51 -0
  116. package/src/providers/vercel/client.ts +102 -0
  117. package/src/providers/vercel/index.ts +11 -0
  118. package/src/providers/vercel/server.ts +89 -0
  119. package/src/providers/vercel/types.ts +27 -0
  120. package/src/server/index.ts +103 -0
  121. package/src/server/manager.ts +62 -0
  122. package/src/server/next.ts +210 -0
  123. package/src/server-edge.ts +442 -0
  124. package/src/server-next.ts +39 -0
  125. package/src/server.ts +106 -0
  126. package/src/shared/emitters/ai/README.md +981 -0
  127. package/src/shared/emitters/ai/events/agent.ts +130 -0
  128. package/src/shared/emitters/ai/events/artifacts.ts +167 -0
  129. package/src/shared/emitters/ai/events/chat.ts +126 -0
  130. package/src/shared/emitters/ai/events/chatbot-ecommerce.ts +133 -0
  131. package/src/shared/emitters/ai/events/completion.ts +103 -0
  132. package/src/shared/emitters/ai/events/content-generation.ts +347 -0
  133. package/src/shared/emitters/ai/events/conversation.ts +332 -0
  134. package/src/shared/emitters/ai/events/product-features.ts +1402 -0
  135. package/src/shared/emitters/ai/events/streaming.ts +114 -0
  136. package/src/shared/emitters/ai/events/tool.ts +93 -0
  137. package/src/shared/emitters/ai/index.ts +69 -0
  138. package/src/shared/emitters/ai/track-ai-sdk.ts +74 -0
  139. package/src/shared/emitters/ai/track-ai.ts +50 -0
  140. package/src/shared/emitters/ai/types.ts +1041 -0
  141. package/src/shared/emitters/ai/utils.ts +468 -0
  142. package/src/shared/emitters/ecommerce/events/cart-checkout.ts +106 -0
  143. package/src/shared/emitters/ecommerce/events/coupon.ts +49 -0
  144. package/src/shared/emitters/ecommerce/events/engagement.ts +61 -0
  145. package/src/shared/emitters/ecommerce/events/marketplace.ts +119 -0
  146. package/src/shared/emitters/ecommerce/events/order.ts +199 -0
  147. package/src/shared/emitters/ecommerce/events/product.ts +205 -0
  148. package/src/shared/emitters/ecommerce/events/registry.ts +123 -0
  149. package/src/shared/emitters/ecommerce/events/wishlist-sharing.ts +140 -0
  150. package/src/shared/emitters/ecommerce/index.ts +46 -0
  151. package/src/shared/emitters/ecommerce/track-ecommerce.ts +53 -0
  152. package/src/shared/emitters/ecommerce/types.ts +314 -0
  153. package/src/shared/emitters/ecommerce/utils.ts +216 -0
  154. package/src/shared/emitters/emitter-types.ts +974 -0
  155. package/src/shared/emitters/emitters.ts +292 -0
  156. package/src/shared/emitters/helpers.ts +419 -0
  157. package/src/shared/emitters/index.ts +66 -0
  158. package/src/shared/index.ts +142 -0
  159. package/src/shared/ingestion/index.ts +66 -0
  160. package/src/shared/ingestion/schemas.ts +386 -0
  161. package/src/shared/ingestion/service.ts +628 -0
  162. package/src/shared/node22-features.ts +848 -0
  163. package/src/shared/providers/console-provider.ts +160 -0
  164. package/src/shared/types/base-types.ts +54 -0
  165. package/src/shared/types/console-types.ts +19 -0
  166. package/src/shared/types/posthog-types.ts +131 -0
  167. package/src/shared/types/segment-types.ts +15 -0
  168. package/src/shared/types/types.ts +397 -0
  169. package/src/shared/types/vercel-types.ts +19 -0
  170. package/src/shared/utils/config-client.ts +19 -0
  171. package/src/shared/utils/config.ts +250 -0
  172. package/src/shared/utils/emitter-adapter.ts +212 -0
  173. package/src/shared/utils/manager.test.ts +36 -0
  174. package/src/shared/utils/manager.ts +1322 -0
  175. package/src/shared/utils/posthog-bootstrap.ts +136 -0
  176. package/src/shared/utils/posthog-client-utils.ts +48 -0
  177. package/src/shared/utils/posthog-next-utils.ts +282 -0
  178. package/src/shared/utils/posthog-server-utils.ts +210 -0
  179. package/src/shared/utils/rate-limit.ts +289 -0
  180. package/src/shared/utils/security.ts +545 -0
  181. package/src/shared/utils/validation-client.ts +161 -0
  182. package/src/shared/utils/validation.ts +399 -0
  183. package/src/shared.ts +155 -0
  184. package/src/types/index.ts +62 -0
@@ -0,0 +1,114 @@
1
+ /**
2
+ * @fileoverview Streaming-related AI SDK v6 events
3
+ * Streaming-related AI SDK v6 events
4
+ */
5
+
6
+ import { trackAISDK } from '../track-ai-sdk';
7
+ import { AI_SDK_EVENTS, type AISdkEventSpec, type StreamingSDKProperties } from '../types';
8
+ import { cleanProperties, normalizeBaseProperties, validateRequiredProperties } from '../utils';
9
+
10
+ import type { EmitterOptions, EmitterTrackPayload } from '../../emitter-types';
11
+
12
+ /**
13
+ * Track when streaming starts
14
+ */
15
+ export function streamStarted(
16
+ properties: StreamingSDKProperties,
17
+ options?: EmitterOptions,
18
+ ): EmitterTrackPayload {
19
+ validateRequiredProperties(properties, ['model_id', 'stream_type']);
20
+
21
+ const normalizedProps = {
22
+ ...normalizeBaseProperties(properties),
23
+ stream_type: properties.stream_type,
24
+ };
25
+
26
+ const eventSpec: AISdkEventSpec = {
27
+ name: AI_SDK_EVENTS.STREAM_STARTED,
28
+ category: 'ai-sdk',
29
+ properties: cleanProperties(normalizedProps),
30
+ requiredProperties: ['model_id', 'stream_type'],
31
+ };
32
+
33
+ return trackAISDK(eventSpec, options);
34
+ }
35
+
36
+ /**
37
+ * Track when a stream chunk is received
38
+ */
39
+ export function streamChunkReceived(
40
+ properties: StreamingSDKProperties,
41
+ options?: EmitterOptions,
42
+ ): EmitterTrackPayload {
43
+ validateRequiredProperties(properties, ['model_id', 'stream_type']);
44
+
45
+ const normalizedProps = {
46
+ ...normalizeBaseProperties(properties),
47
+ stream_type: properties.stream_type,
48
+ chunk_index: properties.chunk_index,
49
+ };
50
+
51
+ const eventSpec: AISdkEventSpec = {
52
+ name: AI_SDK_EVENTS.STREAM_CHUNK_RECEIVED,
53
+ category: 'ai-sdk',
54
+ properties: cleanProperties(normalizedProps),
55
+ requiredProperties: ['model_id', 'stream_type'],
56
+ };
57
+
58
+ return trackAISDK(eventSpec, options);
59
+ }
60
+
61
+ /**
62
+ * Track when streaming completes
63
+ */
64
+ export function streamCompleted(
65
+ properties: StreamingSDKProperties,
66
+ options?: EmitterOptions,
67
+ ): EmitterTrackPayload {
68
+ validateRequiredProperties(properties, ['model_id', 'stream_type']);
69
+
70
+ const normalizedProps = {
71
+ ...normalizeBaseProperties(properties),
72
+ stream_type: properties.stream_type,
73
+ chunk_count: properties.chunk_count,
74
+ stream_duration_ms: properties.stream_duration_ms,
75
+ time_to_first_chunk_ms: properties.time_to_first_chunk_ms,
76
+ chunks_per_second: properties.chunks_per_second,
77
+ };
78
+
79
+ const eventSpec: AISdkEventSpec = {
80
+ name: AI_SDK_EVENTS.STREAM_COMPLETED,
81
+ category: 'ai-sdk',
82
+ properties: cleanProperties(normalizedProps),
83
+ requiredProperties: ['model_id', 'stream_type'],
84
+ };
85
+
86
+ return trackAISDK(eventSpec, options);
87
+ }
88
+
89
+ /**
90
+ * Track when streaming fails
91
+ */
92
+ export function streamFailed(
93
+ properties: StreamingSDKProperties & { error_message: string },
94
+ options?: EmitterOptions,
95
+ ): EmitterTrackPayload {
96
+ validateRequiredProperties(properties, ['model_id', 'stream_type', 'error_message']);
97
+
98
+ const normalizedProps = {
99
+ ...normalizeBaseProperties(properties),
100
+ stream_type: properties.stream_type,
101
+ error_message: properties.error_message,
102
+ chunk_count: properties.chunk_count,
103
+ stream_duration_ms: properties.stream_duration_ms,
104
+ };
105
+
106
+ const eventSpec: AISdkEventSpec = {
107
+ name: AI_SDK_EVENTS.STREAM_FAILED,
108
+ category: 'ai-sdk',
109
+ properties: cleanProperties(normalizedProps),
110
+ requiredProperties: ['model_id', 'stream_type', 'error_message'],
111
+ };
112
+
113
+ return trackAISDK(eventSpec, options);
114
+ }
@@ -0,0 +1,93 @@
1
+ /**
2
+ * @fileoverview Tool-related AI SDK v6 events
3
+ * Tool-related AI SDK v6 events
4
+ */
5
+
6
+ import { trackAISDK } from '../track-ai-sdk';
7
+ import { AI_SDK_EVENTS, type AISdkEventSpec, type ToolCallSDKProperties } from '../types';
8
+ import { cleanProperties, normalizeBaseProperties, validateRequiredProperties } from '../utils';
9
+
10
+ import type { EmitterOptions, EmitterTrackPayload } from '../../emitter-types';
11
+
12
+ /**
13
+ * Track when a tool call starts
14
+ */
15
+ export function toolCallStarted(
16
+ properties: ToolCallSDKProperties,
17
+ options?: EmitterOptions,
18
+ ): EmitterTrackPayload {
19
+ validateRequiredProperties(properties, ['model_id', 'tool_name']);
20
+
21
+ const normalizedProps = {
22
+ ...normalizeBaseProperties(properties),
23
+ tool_name: properties.tool_name,
24
+ tool_type: properties.tool_type,
25
+ input_size: properties.input_size,
26
+ };
27
+
28
+ const eventSpec: AISdkEventSpec = {
29
+ name: AI_SDK_EVENTS.TOOL_CALL_STARTED,
30
+ category: 'ai-sdk',
31
+ properties: cleanProperties(normalizedProps),
32
+ requiredProperties: ['model_id', 'tool_name'],
33
+ };
34
+
35
+ return trackAISDK(eventSpec, options);
36
+ }
37
+
38
+ /**
39
+ * Track when a tool call completes successfully
40
+ */
41
+ export function toolCallCompleted(
42
+ properties: ToolCallSDKProperties,
43
+ options?: EmitterOptions,
44
+ ): EmitterTrackPayload {
45
+ validateRequiredProperties(properties, ['model_id', 'tool_name', 'result_status']);
46
+
47
+ const normalizedProps = {
48
+ ...normalizeBaseProperties(properties),
49
+ tool_name: properties.tool_name,
50
+ tool_type: properties.tool_type,
51
+ result_status: properties.result_status,
52
+ execution_time_ms: properties.execution_time_ms,
53
+ input_size: properties.input_size,
54
+ output_size: properties.output_size,
55
+ };
56
+
57
+ const eventSpec: AISdkEventSpec = {
58
+ name: AI_SDK_EVENTS.TOOL_CALL_COMPLETED,
59
+ category: 'ai-sdk',
60
+ properties: cleanProperties(normalizedProps),
61
+ requiredProperties: ['model_id', 'tool_name', 'result_status'],
62
+ };
63
+
64
+ return trackAISDK(eventSpec, options);
65
+ }
66
+
67
+ /**
68
+ * Track when a tool call fails
69
+ */
70
+ export function toolCallFailed(
71
+ properties: ToolCallSDKProperties & { error_message: string },
72
+ options?: EmitterOptions,
73
+ ): EmitterTrackPayload {
74
+ validateRequiredProperties(properties, ['model_id', 'tool_name', 'error_message']);
75
+
76
+ const normalizedProps = {
77
+ ...normalizeBaseProperties(properties),
78
+ tool_name: properties.tool_name,
79
+ tool_type: properties.tool_type,
80
+ result_status: 'error' as const,
81
+ error_message: properties.error_message,
82
+ execution_time_ms: properties.execution_time_ms,
83
+ };
84
+
85
+ const eventSpec: AISdkEventSpec = {
86
+ name: AI_SDK_EVENTS.TOOL_CALL_FAILED,
87
+ category: 'ai-sdk',
88
+ properties: cleanProperties(normalizedProps),
89
+ requiredProperties: ['model_id', 'tool_name', 'error_message'],
90
+ };
91
+
92
+ return trackAISDK(eventSpec, options);
93
+ }
@@ -0,0 +1,69 @@
1
+ /**
2
+ * @fileoverview AI Product Analytics
3
+ *
4
+ * Comprehensive tracking for AI product features like ChatGPT, Claude, and GitHub Copilot.
5
+ * Track how users interact with your AI-powered chat interface, code generation tools,
6
+ * and collaborative AI features.
7
+ *
8
+ * **90+ Events Covering**:
9
+ * - **Conversation & Messaging**: Message regeneration, branching, editing
10
+ * - **Content Generation**: Code, images, summaries, translations
11
+ * - **Artifacts & Canvas**: Interactive artifacts (Claude-style)
12
+ * - **Files & Attachments**: Upload, processing, referencing
13
+ * - **Context & Memory**: Custom instructions, RAG, memory
14
+ * - **Collaboration**: Sharing, forking, team workspaces
15
+ * - **User Interactions**: Copy, execute, download, modify
16
+ * - **Workspace**: Organization, search, tags
17
+ * - **Feedback & Quality**: Ratings, bug reports, quality issues
18
+ * - **System & Performance**: Model selection, errors, performance
19
+ * - **Tools & Functions**: Tool calls, plugins, extensions
20
+ * - **Search & Citations**: Web search, citations, browsing
21
+ *
22
+ * **Usage**: Import event functions and use with `analytics.emit()`:
23
+ * ```typescript
24
+ * import { ai } from '@od-oneapp/analytics/shared';
25
+ * await analytics.emit(ai.messageSent({ messageId: 'msg-123' }));
26
+ * ```
27
+ *
28
+ * @module @od-oneapp/analytics/shared/emitters/ai
29
+ */
30
+
31
+ // Export all types
32
+ export * from './types';
33
+
34
+ // Export utilities
35
+ export * from './utils';
36
+
37
+ // Export tracking functionality
38
+ export * from './track-ai';
39
+ export * from './track-ai-sdk';
40
+
41
+ // Re-export event constants for convenience
42
+ export { AI_EVENTS, AI_SDK_EVENTS } from './types';
43
+
44
+ // Export AI product feature events
45
+ // Organized by product capability for easy discoverability
46
+
47
+ // Core conversation features (ChatGPT/Claude-style)
48
+ export * from './events/conversation';
49
+
50
+ // Content generation (code, images, text)
51
+ export * from './events/content-generation';
52
+
53
+ // Interactive artifacts & canvas (Claude-style)
54
+ export * from './events/artifacts';
55
+
56
+ // All additional product features
57
+ export * from './events/product-features';
58
+
59
+ // =============================================================================
60
+ // AI SDK V6 EVENTS
61
+ // =============================================================================
62
+ // Export AI SDK v6 event tracking functions
63
+
64
+ export * from './events/agent';
65
+ export * from './events/chat';
66
+ export * from './events/chatbot-ecommerce';
67
+ export * from './events/completion';
68
+ export * from './events/streaming';
69
+ export * from './events/tool';
@@ -0,0 +1,74 @@
1
+ /**
2
+ * @fileoverview AI SDK v6 tracking wrapper that integrates with the core emitter system
3
+ * AI SDK v6 tracking wrapper that integrates with the core emitter system
4
+ *
5
+ * Provides tracking for AI SDK v6 operations including:
6
+ * - Agent execution
7
+ * - Completions and text generation
8
+ * - Tool calls and function calling
9
+ * - Streaming responses
10
+ * - Chat sessions
11
+ * - E-commerce chatbot interactions
12
+ */
13
+
14
+ import { track } from '../emitters';
15
+
16
+ import type { EmitterOptions, EmitterTrackPayload } from '../emitter-types';
17
+
18
+ /**
19
+ * AI SDK event specification
20
+ */
21
+ export interface AISdkEventSpec {
22
+ /** Event name following AI SDK v6 naming conventions */
23
+ name: string;
24
+ /** Event category (always 'ai-sdk' for AI SDK events) */
25
+ category: 'ai-sdk';
26
+ /** Event properties */
27
+ properties: Record<string, any>;
28
+ /** Required property names for validation */
29
+ requiredProperties?: string[];
30
+ }
31
+
32
+ /**
33
+ * Convert an AI SDK event specification to a track payload
34
+ *
35
+ * @param eventSpec - The AI SDK event specification
36
+ * @param options - Optional emitter options
37
+ * @returns Track payload ready to be sent to analytics providers
38
+ */
39
+ export function trackAISDK(
40
+ eventSpec: AISdkEventSpec,
41
+ options?: EmitterOptions,
42
+ ): EmitterTrackPayload {
43
+ // Add AI SDK-specific context to options
44
+ const enrichedOptions: EmitterOptions = {
45
+ ...options,
46
+ context: {
47
+ ...options?.context,
48
+ // Add AI SDK-specific context
49
+ traits: {
50
+ ...options?.context?.traits,
51
+ event_category: eventSpec.category,
52
+ },
53
+ },
54
+ };
55
+
56
+ // Return the track payload with the event name and properties
57
+ return track(eventSpec.name, eventSpec.properties, enrichedOptions);
58
+ }
59
+
60
+ /**
61
+ * Helper to create a tracking function for a specific AI SDK event
62
+ * This allows for cleaner usage in applications
63
+ *
64
+ * @param eventFactory - Function that creates an event spec from properties
65
+ * @returns Tracking function for the specific event
66
+ */
67
+ export function createAISDKTracker<T extends Record<string, any>>(
68
+ eventFactory: (properties: T) => AISdkEventSpec,
69
+ ) {
70
+ return (properties: T, options?: EmitterOptions): EmitterTrackPayload => {
71
+ const eventSpec = eventFactory(properties);
72
+ return trackAISDK(eventSpec, options);
73
+ };
74
+ }
@@ -0,0 +1,50 @@
1
+ /**
2
+ * @fileoverview AI tracking wrapper that integrates with the core emitter system
3
+ * AI tracking wrapper that integrates with the core emitter system
4
+ */
5
+
6
+ import { track } from '../emitters';
7
+
8
+ import type { EmitterOptions, EmitterTrackPayload } from '../emitter-types';
9
+ import type { AIEventSpec } from './types';
10
+
11
+ /**
12
+ * Convert an AI event specification to a track payload
13
+ *
14
+ * @param eventSpec - The AI event specification
15
+ * @param options - Optional emitter options
16
+ * @returns Track payload ready to be sent to analytics providers
17
+ */
18
+ export function trackAI(eventSpec: AIEventSpec, options?: EmitterOptions): EmitterTrackPayload {
19
+ // Add AI-specific context to options
20
+ const enrichedOptions: EmitterOptions = {
21
+ ...options,
22
+ context: {
23
+ ...options?.context,
24
+ // Add AI-specific context
25
+ ...(eventSpec.category && {
26
+ // Store category as a custom field since EmitterContext doesn't have category
27
+ traits: {
28
+ ...options?.context?.traits,
29
+ event_category: eventSpec.category,
30
+ },
31
+ }),
32
+ },
33
+ };
34
+
35
+ // Return the track payload with the event name and properties
36
+ return track(eventSpec.name, eventSpec.properties, enrichedOptions);
37
+ }
38
+
39
+ /**
40
+ * Helper to create a tracking function for a specific AI event
41
+ * This allows for cleaner usage in applications
42
+ */
43
+ export function createAITracker<T extends Record<string, any>>(
44
+ eventFactory: (properties: T) => AIEventSpec,
45
+ ) {
46
+ return (properties: T, options?: EmitterOptions): EmitterTrackPayload => {
47
+ const eventSpec = eventFactory(properties);
48
+ return trackAI(eventSpec, options);
49
+ };
50
+ }