@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,51 @@
1
+ /**
2
+ * @fileoverview Segment provider type definitions
3
+ *
4
+ * Defines TypeScript types and interfaces for Segment Analytics provider configuration.
5
+ * Includes browser and server-specific options.
6
+ *
7
+ * @module @repo/analytics/providers/segment/types
8
+ */
9
+
10
+ import type { BaseProviderConfig } from '../base-provider';
11
+
12
+ export interface SegmentConfig extends BaseProviderConfig {
13
+ writeKey: string;
14
+ options?: SegmentOptions | undefined;
15
+ }
16
+
17
+ interface SegmentOptions {
18
+ // Segment Analytics 2.0 options
19
+ integrations?: Record<string, any>;
20
+ timeout?: number;
21
+ retryQueue?: boolean;
22
+ plugins?: any[];
23
+
24
+ // Browser-specific options
25
+ anonymousId?: string;
26
+ initialPageview?: boolean;
27
+ cookie?: {
28
+ name?: string;
29
+ maxage?: number;
30
+ domain?: string;
31
+ path?: string;
32
+ sameSite?: 'Strict' | 'Lax' | 'None';
33
+ secure?: boolean;
34
+ };
35
+
36
+ // Server-specific options
37
+ flushAt?: number;
38
+ flushInterval?: number;
39
+ maxEventsInBatch?: number;
40
+ maxRetries?: number;
41
+ requestTimeout?: number;
42
+
43
+ // Advanced options
44
+ debug?: boolean;
45
+ disable?: boolean;
46
+ disableClientPersistence?: boolean;
47
+ useBeacon?: boolean;
48
+ apiHost?: string;
49
+ cdnURL?: string;
50
+ cdnSettings?: any;
51
+ }
@@ -0,0 +1,102 @@
1
+ /**
2
+ * @fileoverview Vercel Analytics client-side (browser) provider implementation
3
+ *
4
+ * Provides client-side integration with Vercel Analytics for web analytics tracking.
5
+ * Supports automatic page view tracking and custom event tracking.
6
+ *
7
+ * @remarks
8
+ * This provider:
9
+ * - Uses @vercel/analytics package for client-side tracking
10
+ * - Supports dynamic imports to avoid SSR issues
11
+ * - Handles initialization and event tracking
12
+ * - Integrates with Vercel's analytics dashboard
13
+ *
14
+ * @module @repo/analytics/providers/vercel/client
15
+ */
16
+
17
+ import type { VercelConfig } from './types';
18
+ import type { AnalyticsProvider, ProviderConfig } from '../../shared/types/types';
19
+
20
+ // Vercel Analytics types are handled by @vercel/analytics package
21
+
22
+ export class VercelClientProvider implements AnalyticsProvider {
23
+ readonly name = 'vercel';
24
+ private config: VercelConfig;
25
+ private isInitialized = false;
26
+
27
+ constructor(config: ProviderConfig) {
28
+ this.config = {
29
+ options: config.options,
30
+ };
31
+ }
32
+
33
+ async initialize(): Promise<void> {
34
+ if (this.isInitialized) return;
35
+
36
+ try {
37
+ // Dynamically import Vercel Analytics
38
+ const { inject } = await import('@vercel/analytics');
39
+
40
+ // Initialize Vercel Analytics
41
+ inject(this.config.options);
42
+
43
+ this.isInitialized = true;
44
+ } catch {
45
+ throw new Error(
46
+ 'Vercel Analytics not available. Install with: npm install @vercel/analytics',
47
+ );
48
+ }
49
+ }
50
+
51
+ async track(event: string, properties: any = {}): Promise<void> {
52
+ if (!this.isInitialized) {
53
+ return;
54
+ }
55
+
56
+ try {
57
+ // Import track function dynamically to avoid SSR issues
58
+ const { track } = await import('@vercel/analytics');
59
+ track(event, properties);
60
+ } catch {
61
+ // Silently fail to avoid disrupting app flow
62
+ }
63
+ }
64
+
65
+ async identify(userId: string, traits: any = {}): Promise<void> {
66
+ // Vercel Analytics doesn't have a native identify method
67
+ // We can track this as a custom event
68
+ await this.track('User Identified', {
69
+ userId,
70
+ ...traits,
71
+ });
72
+ }
73
+
74
+ async page(name?: string, properties: any = {}): Promise<void> {
75
+ // Vercel Analytics automatically tracks page views
76
+ // We can track additional page data as custom events if needed
77
+ if (name || Object.keys(properties).length > 0) {
78
+ await this.track('Page View', {
79
+ page: name,
80
+ ...properties,
81
+ });
82
+ }
83
+ }
84
+
85
+ async group(groupId: string, traits: any = {}): Promise<void> {
86
+ // Vercel Analytics doesn't have a native group method
87
+ // We can track this as a custom event
88
+ await this.track('Group Identified', {
89
+ groupId,
90
+ ...traits,
91
+ });
92
+ }
93
+
94
+ async alias(userId: string, previousId: string): Promise<void> {
95
+ // Vercel Analytics doesn't have a native alias method
96
+ // We can track this as a custom event
97
+ await this.track('User Aliased', {
98
+ previousId,
99
+ userId,
100
+ });
101
+ }
102
+ }
@@ -0,0 +1,11 @@
1
+ /**
2
+ * @fileoverview Vercel provider shared logic and exports
3
+ *
4
+ * Barrel export file for Vercel Analytics provider implementations and types.
5
+ *
6
+ * @module @repo/analytics/providers/vercel
7
+ */
8
+
9
+ // Export provider implementations
10
+ // Export types
11
+ export type * from './types';
@@ -0,0 +1,89 @@
1
+ /**
2
+ * @fileoverview Vercel Analytics server-side (Node.js) provider implementation
3
+ *
4
+ * Provides server-side integration with Vercel Analytics.
5
+ * Note: Vercel Analytics is primarily client-side focused.
6
+ * Server-side tracking is limited and mainly for custom events.
7
+ *
8
+ * @remarks
9
+ * This provider:
10
+ * - Provides minimal server-side support
11
+ * - Most tracking should be done client-side
12
+ * - Can be extended for custom server-side events
13
+ *
14
+ * @module @repo/analytics/providers/vercel/server
15
+ */
16
+
17
+ import type { AnalyticsProvider, ProviderConfig } from '../../shared/types/types';
18
+
19
+ export class VercelServerProvider implements AnalyticsProvider {
20
+ readonly name = 'vercel';
21
+ private isInitialized = false;
22
+ private readonly config: ProviderConfig;
23
+
24
+ constructor(config: ProviderConfig) {
25
+ this.config = config;
26
+ // Server-side Vercel Analytics is limited - most tracking happens client-side
27
+ }
28
+
29
+ async initialize(): Promise<void> {
30
+ if (this.isInitialized) return;
31
+
32
+ // Vercel Analytics doesn't require server-side initialization
33
+ // Just mark as initialized
34
+ this.isInitialized = true;
35
+
36
+ // Note: Limited server-side support. Consider using client-side tracking for better features.
37
+ }
38
+
39
+ async track(event: string, properties: any = {}): Promise<void> {
40
+ if (!this.isInitialized) {
41
+ return;
42
+ }
43
+
44
+ try {
45
+ // Parameters are deliberately unused until server-side tracking is implemented.
46
+ void event;
47
+ void properties;
48
+ void this.config;
49
+ // For server-side, we can use Vercel's Speed Insights API if available
50
+ // Server-side tracking is limited - most tracking happens client-side
51
+ // In production, you might want to send to Vercel's API endpoint
52
+ // This would require additional setup and is not part of the standard SDK
53
+ } catch {
54
+ // Silently fail to avoid disrupting app flow
55
+ }
56
+ }
57
+
58
+ async identify(userId: string, traits: any = {}): Promise<void> {
59
+ // Track as custom event on server
60
+ await this.track('User Identified', {
61
+ userId,
62
+ ...traits,
63
+ });
64
+ }
65
+
66
+ async page(name?: string, properties: any = {}): Promise<void> {
67
+ // Track page view on server (limited utility)
68
+ await this.track('Page View (Server)', {
69
+ page: name,
70
+ ...properties,
71
+ });
72
+ }
73
+
74
+ async group(groupId: string, traits: any = {}): Promise<void> {
75
+ // Track as custom event on server
76
+ await this.track('Group Identified', {
77
+ groupId,
78
+ ...traits,
79
+ });
80
+ }
81
+
82
+ async alias(userId: string, previousId: string): Promise<void> {
83
+ // Track as custom event on server
84
+ await this.track('User Aliased', {
85
+ previousId,
86
+ userId,
87
+ });
88
+ }
89
+ }
@@ -0,0 +1,27 @@
1
+ /**
2
+ * @fileoverview Vercel provider type definitions
3
+ *
4
+ * Defines TypeScript types and interfaces for Vercel Analytics provider configuration.
5
+ *
6
+ * @module @repo/analytics/providers/vercel/types
7
+ */
8
+
9
+ export interface VercelConfig {
10
+ // Vercel Analytics doesn't require configuration in most cases
11
+ // It auto-detects the environment and deployment context
12
+ options?: VercelOptions | undefined;
13
+ }
14
+
15
+ interface VercelOptions {
16
+ // Vercel Web Analytics options
17
+ debug?: boolean;
18
+ disabled?: boolean;
19
+
20
+ // Custom event tracking options
21
+ beforeSend?: (event: any) => any | null;
22
+
23
+ // Advanced options
24
+ mode?: 'auto' | 'development' | 'production';
25
+ framework?: string;
26
+ dsn?: string;
27
+ }
@@ -0,0 +1,103 @@
1
+ /**
2
+ * @fileoverview Server-side analytics exports
3
+ * Server-side analytics exports
4
+ * Complete analytics solution for server/Node.js environments
5
+ *
6
+ * @example
7
+ * ```typescript
8
+ * import { createServerAnalytics, track, ecommerce } from '@od-oneapp/analytics/server';
9
+ *
10
+ * const analytics = await createServerAnalytics({
11
+ * providers: {
12
+ * segment: { writeKey: 'xxx' },
13
+ * http: { endpoint: 'https://api.example.com/ingest' }
14
+ * }
15
+ * });
16
+ *
17
+ * // Preferred: Use emitters
18
+ * await analytics.emit(track('API Called', { endpoint: '/users' }));
19
+ * await analytics.emit(ecommerce.orderCompleted({ order_id: '123' }));
20
+ * ```
21
+ */
22
+
23
+ import { SegmentServerProvider } from '@integrations/segment/analytics-provider/server';
24
+ import { VercelServerProvider } from '@integrations/vercel/analytics-provider/server';
25
+
26
+ import { ConsoleProvider } from '../providers/console/server';
27
+ import { HttpServerProvider } from '../providers/http/server';
28
+ import { createAnalyticsManager } from '../shared/utils/manager';
29
+
30
+ import type { AnalyticsConfig, AnalyticsManager, ProviderRegistry } from '../shared/types/types';
31
+
32
+ // Server-specific provider registry
33
+ const SERVER_PROVIDERS: ProviderRegistry = {
34
+ console: config => new ConsoleProvider(config),
35
+ http: config => new HttpServerProvider(config),
36
+ segment: config => new SegmentServerProvider(config),
37
+ vercel: config => new VercelServerProvider(config),
38
+ };
39
+
40
+ // ============================================================================
41
+ // CORE ANALYTICS FUNCTIONS
42
+ // ============================================================================
43
+
44
+ /**
45
+ * Create and initialize a server analytics instance
46
+ * This is the primary way to create analytics for server-side applications
47
+ */
48
+ export async function createServerAnalytics(config: AnalyticsConfig): Promise<AnalyticsManager> {
49
+ const manager = createAnalyticsManager(config, SERVER_PROVIDERS);
50
+ await manager.initialize();
51
+ return manager;
52
+ }
53
+
54
+ /**
55
+ * Create a server analytics instance without initializing
56
+ * Useful when you need to control initialization timing
57
+ *
58
+ * @deprecated This function is currently unused but kept for potential future use
59
+ */
60
+ // function _createServerAnalyticsUninitialized(config: AnalyticsConfig): AnalyticsManager {
61
+ // return createAnalyticsManager(config, SERVER_PROVIDERS);
62
+ // }
63
+
64
+ // ============================================================================
65
+ // EMITTERS - PRIMARY INTERFACE
66
+ // ============================================================================
67
+
68
+ // Export all core emitters - these are the preferred way to track events
69
+ export {} from '../shared/emitters';
70
+
71
+ // ============================================================================
72
+ // ADAPTER UTILITIES
73
+ // ============================================================================
74
+
75
+ export {} from '../shared/utils/emitter-adapter';
76
+
77
+ // ============================================================================
78
+ // TYPES
79
+ // ============================================================================
80
+
81
+ // Core analytics types;
82
+
83
+ // Emitter types;
84
+
85
+ // Provider-specific types;
86
+
87
+ // Ecommerce types;
88
+
89
+ // ============================================================================
90
+ // CONFIGURATION UTILITIES
91
+ // ============================================================================
92
+
93
+ // ============================================================================
94
+ // VALIDATION UTILITIES
95
+ // ============================================================================
96
+
97
+ // ============================================================================
98
+ // ADVANCED UTILITIES
99
+ // ============================================================================
100
+
101
+ // Manager utilities
102
+
103
+ // Export Node 22+ enhanced features for server-side use
@@ -0,0 +1,62 @@
1
+ /**
2
+ * @fileoverview Server analytics manager with static provider registry
3
+ * Server analytics manager with static provider registry
4
+ */
5
+
6
+ import { SegmentServerProvider } from '@integrations/segment/analytics-provider/server';
7
+ import { VercelServerProvider } from '@integrations/vercel/analytics-provider/server';
8
+
9
+ import { ConsoleProvider } from '../providers/console/server';
10
+ import { HttpServerProvider } from '../providers/http/server';
11
+ import { createAnalyticsManager } from '../shared/utils/manager';
12
+
13
+ import type { AnalyticsConfig, AnalyticsManager, ProviderRegistry } from '../shared/types/types';
14
+
15
+ // Static provider registry for server environments
16
+ const SERVER_PROVIDERS: ProviderRegistry = {
17
+ console: config => new ConsoleProvider(config),
18
+ http: config => new HttpServerProvider(config),
19
+ segment: config => new SegmentServerProvider(config),
20
+ vercel: config => new VercelServerProvider(config),
21
+ };
22
+
23
+ /**
24
+ * Create and initialize a server analytics instance
25
+ * This is the primary way to create analytics for server-side applications
26
+ *
27
+ * @example
28
+ * ```typescript
29
+ * const analytics = await createServerAnalytics({
30
+ * providers: {
31
+ * segment: { writeKey: process.env.SEGMENT_KEY! },
32
+ * },
33
+ * });
34
+ * await analytics.page('/admin', { title: 'Admin Dashboard' });
35
+ * ```
36
+ * @param config - Analytics configuration including providers and settings
37
+ * @returns Promise resolving to initialized analytics manager
38
+ */
39
+ export async function createServerAnalytics(config: AnalyticsConfig): Promise<AnalyticsManager> {
40
+ const manager = createAnalyticsManager(config, SERVER_PROVIDERS);
41
+ await manager.initialize();
42
+ return manager;
43
+ }
44
+
45
+ /**
46
+ * Create a server analytics instance without initializing
47
+ * Useful when you need to control initialization timing
48
+ *
49
+ * @example
50
+ * ```typescript
51
+ * const analytics = createServerAnalyticsUninitialized(config);
52
+ * if (shouldEmit) {
53
+ * await analytics.initialize();
54
+ * await analytics.track('CRON Completed');
55
+ * }
56
+ * ```
57
+ * @param config - Analytics configuration including providers and settings
58
+ * @returns Uninitialized analytics manager instance
59
+ */
60
+ export function createServerAnalyticsUninitialized(config: AnalyticsConfig): AnalyticsManager {
61
+ return createAnalyticsManager(config, SERVER_PROVIDERS);
62
+ }
@@ -0,0 +1,210 @@
1
+ /**
2
+ * @fileoverview Server-side Next.js analytics exports
3
+ * Server-side Next.js analytics exports
4
+ * Complete Next.js 15 integration for server components, API routes, and middleware
5
+ *
6
+ * @example
7
+ * ```typescript
8
+ * import {
9
+ * createNextJSServerAnalytics,
10
+ * trackServerEvent,
11
+ * getServerFeatureFlag,
12
+ * createAnalyticsMiddleware
13
+ * } from '@od-oneapp/analytics/server/next';
14
+ *
15
+ * // Server component
16
+ * export default async function Page() {
17
+ * await trackServerEvent('Page Viewed', { path: '/home' });
18
+ * return <div>Page content</div>;
19
+ * }
20
+ *
21
+ * // Middleware
22
+ * export const middleware = createAnalyticsMiddleware({
23
+ * providers: { segment: { writeKey: process.env.SEGMENT_WRITE_KEY } }
24
+ * });
25
+ * ```
26
+ */
27
+
28
+ // ============================================================================
29
+ // CORE SERVER ANALYTICS (re-export everything from server)
30
+ // ============================================================================
31
+
32
+ // Re-export everything from server for convenience
33
+ export * from '.';
34
+
35
+ // ============================================================================
36
+ // REACT SERVER COMPONENTS
37
+ // ============================================================================
38
+
39
+ export {
40
+ // Context management for RSCs
41
+ ServerAnalyticsProvider,
42
+ getServerBootstrapData,
43
+ identifyServerUser,
44
+ identifyUserAction,
45
+ // Server Actions support
46
+ trackEventAction,
47
+ // Server component tracking functions
48
+ trackServerEvent,
49
+ trackServerPageView,
50
+ withServerPageTracking,
51
+ } from '../next/rsc';
52
+
53
+ // ============================================================================
54
+ // NEXT.JS SERVER ANALYTICS MANAGER
55
+ // ============================================================================
56
+
57
+ export {
58
+ // Next.js server analytics manager
59
+ NextJSServerAnalyticsManager,
60
+ createNextJSServerAnalytics,
61
+ createNextJSServerAnalyticsWithBootstrap,
62
+ } from '../next/server';
63
+
64
+ export type { NextJSServerAnalyticsConfig } from '../next/server';
65
+
66
+ // ============================================================================
67
+ // POSTHOG SERVER-SIDE BOOTSTRAP
68
+ // ============================================================================
69
+
70
+ export { getPostHogBootstrapDataOnServer } from '../next/server';
71
+
72
+ // Additional PostHog utilities
73
+ export {
74
+ // PostHog Next.js utilities
75
+ createPostHogConfig,
76
+ createPostHogMiddleware,
77
+ createPostHogServerClient,
78
+ createPostHogSuspenseData,
79
+ getCompleteBootstrapData,
80
+ getOrGenerateDistinctId,
81
+ getPostHogBootstrapData,
82
+ } from '../shared/utils/posthog-next-utils';
83
+
84
+ // ============================================================================
85
+ // MIDDLEWARE INTEGRATION
86
+ // ============================================================================
87
+
88
+ export {
89
+ // Analytics middleware for edge runtime
90
+ createAnalyticsMiddleware,
91
+ } from '../next/middleware';
92
+
93
+ export type {
94
+ // Middleware types
95
+ AnalyticsMiddlewareConfig,
96
+ } from '../next/middleware';
97
+
98
+ // ============================================================================
99
+ // NEXT.JS TYPES
100
+ // ============================================================================
101
+
102
+ export type {
103
+ AddToCartEvent,
104
+ // Next.js specific types that actually exist
105
+ AnalyticsEvent,
106
+ AnalyticsMiddlewareContext,
107
+ AnalyticsProviderProps,
108
+ CheckoutEvent,
109
+ EventName,
110
+ EventProperties,
111
+ FormErrorEvent,
112
+ FormStartEvent,
113
+ FormSubmitEvent,
114
+ PageViewEvent,
115
+ ProductViewEvent,
116
+ PurchaseEvent,
117
+ TrackedComponentProps,
118
+ TypedTrackFunction,
119
+ UseAnalyticsReturn,
120
+ } from '../next/types';
121
+
122
+ // ============================================================================
123
+ // USAGE EXAMPLES & PATTERNS
124
+ // ============================================================================
125
+
126
+ /**
127
+ * Example usage patterns for server-side Next.js analytics
128
+ *
129
+ * @example Server component tracking
130
+ * ```typescript
131
+ * import { trackServerEvent, getServerFeatureFlag } from '@od-oneapp/analytics/server/next';
132
+ * import { cookies } from 'next/headers';
133
+ *
134
+ * export default async function HomePage() {
135
+ * // Track page view
136
+ * await trackServerEvent('Page Viewed', {
137
+ * path: '/home',
138
+ * title: 'Home Page'
139
+ * });
140
+ *
141
+ * // Check feature flag
142
+ * const showBeta = await getServerFeatureFlag('beta-feature', cookies());
143
+ *
144
+ * return (
145
+ * <div>
146
+ * <h1>Welcome</h1>
147
+ * {showBeta && <BetaFeature />}
148
+ * </div>
149
+ * );
150
+ * }
151
+ * ```
152
+ *
153
+ * @example API route tracking
154
+ * ```typescript
155
+ * import { createServerAnalytics, track } from '@od-oneapp/analytics/server/next';
156
+ *
157
+ * const analytics = await createServerAnalytics({
158
+ * providers: {
159
+ * segment: { writeKey: process.env.SEGMENT_WRITE_KEY }
160
+ * }
161
+ * });
162
+ *
163
+ * export async function POST(request: Request) {
164
+ * await analytics.emit(track('API Called', {
165
+ * endpoint: '/api/users',
166
+ * method: 'POST'
167
+ * }));
168
+ *
169
+ * // Handle request...
170
+ * }
171
+ * ```
172
+ *
173
+ * @example Server Actions
174
+ * ```typescript
175
+ * 'use server';
176
+ * import { trackServerAction } from '@od-oneapp/analytics/server/next';
177
+ *
178
+ * export async function submitForm(formData: FormData) {
179
+ * await trackServerAction('Form Submitted', {
180
+ * form_id: 'contact',
181
+ * email: formData.get('email')
182
+ * });
183
+ *
184
+ * // Process form...
185
+ * }
186
+ * ```
187
+ *
188
+ * @example Middleware setup
189
+ * ```typescript
190
+ * // middleware.ts
191
+ * import { createAnalyticsMiddleware } from '@od-oneapp/analytics/server/next';
192
+ *
193
+ * export const middleware = createAnalyticsMiddleware({
194
+ * providers: {
195
+ * segment: { writeKey: process.env.SEGMENT_WRITE_KEY }
196
+ * },
197
+ * matchers: ['/api/*', '/app/*'],
198
+ * exclude: ['/api/health'],
199
+ * extractUserId: (request) => request.headers.get('x-user-id'),
200
+ * extractContext: (request) => ({
201
+ * ip: request.ip,
202
+ * country: request.geo?.country
203
+ * })
204
+ * });
205
+ *
206
+ * export const config = {
207
+ * matcher: ['/((?!_next/static|favicon.ico).*)']
208
+ * };
209
+ * ```
210
+ */