@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,140 @@
1
+ /**
2
+ * @fileoverview Wishlist, sharing, and review-related ecommerce events
3
+ * Wishlist, sharing, and review-related ecommerce events
4
+ */
5
+
6
+ import {
7
+ type BaseProductProperties,
8
+ type CartProperties,
9
+ ECOMMERCE_EVENTS,
10
+ type EcommerceEventSpec,
11
+ type ReviewProperties,
12
+ type SharingProperties,
13
+ type WishlistProperties,
14
+ } from '../types';
15
+ import {
16
+ cleanProperties,
17
+ normalizeProductProperties,
18
+ normalizeProducts,
19
+ validateRequiredProperties,
20
+ } from '../utils';
21
+
22
+ /**
23
+ * Track when a product is added to wishlist
24
+ */
25
+ export function productAddedToWishlist(properties: WishlistProperties): EcommerceEventSpec {
26
+ const { wishlist_id, wishlist_name, ...productProps } = properties;
27
+ const normalizedProduct = normalizeProductProperties(productProps);
28
+ validateRequiredProperties(normalizedProduct, ['product_id']);
29
+
30
+ return {
31
+ name: ECOMMERCE_EVENTS.PRODUCT_ADDED_TO_WISHLIST,
32
+ category: 'ecommerce',
33
+ properties: cleanProperties({
34
+ wishlist_id,
35
+ wishlist_name,
36
+ ...normalizedProduct,
37
+ }),
38
+ requiredProperties: ['product_id'],
39
+ };
40
+ }
41
+
42
+ /**
43
+ * Track when a product is removed from wishlist
44
+ */
45
+ export function productRemovedFromWishlist(properties: WishlistProperties): EcommerceEventSpec {
46
+ const { wishlist_id, wishlist_name, ...productProps } = properties;
47
+ const normalizedProduct = normalizeProductProperties(productProps);
48
+ validateRequiredProperties(normalizedProduct, ['product_id']);
49
+
50
+ return {
51
+ name: ECOMMERCE_EVENTS.PRODUCT_REMOVED_FROM_WISHLIST,
52
+ category: 'ecommerce',
53
+ properties: cleanProperties({
54
+ wishlist_id,
55
+ wishlist_name,
56
+ ...normalizedProduct,
57
+ }),
58
+ requiredProperties: ['product_id'],
59
+ };
60
+ }
61
+
62
+ /**
63
+ * Track when a wishlist product is added to cart
64
+ */
65
+ export function wishlistProductAddedToCart(
66
+ properties: WishlistProperties & { cart_id?: string },
67
+ ): EcommerceEventSpec {
68
+ const { cart_id, wishlist_id, wishlist_name, ...productProps } = properties;
69
+ const normalizedProduct = normalizeProductProperties(productProps);
70
+ validateRequiredProperties(normalizedProduct, ['product_id']);
71
+
72
+ return {
73
+ name: ECOMMERCE_EVENTS.WISHLIST_PRODUCT_ADDED_TO_CART,
74
+ category: 'ecommerce',
75
+ properties: cleanProperties({
76
+ cart_id,
77
+ wishlist_id,
78
+ wishlist_name,
79
+ ...normalizedProduct,
80
+ }),
81
+ requiredProperties: ['product_id'],
82
+ };
83
+ }
84
+
85
+ /**
86
+ * Track when a product is shared
87
+ */
88
+ export function productShared(
89
+ properties: BaseProductProperties & SharingProperties,
90
+ ): EcommerceEventSpec {
91
+ const { recipient, share_message, share_via, ...productProps } = properties;
92
+ const normalizedProduct = normalizeProductProperties(productProps);
93
+ validateRequiredProperties(normalizedProduct, ['product_id']);
94
+
95
+ return {
96
+ name: ECOMMERCE_EVENTS.PRODUCT_SHARED,
97
+ category: 'ecommerce',
98
+ properties: cleanProperties({
99
+ recipient,
100
+ share_message,
101
+ share_via,
102
+ ...normalizedProduct,
103
+ }),
104
+ requiredProperties: ['product_id'],
105
+ };
106
+ }
107
+
108
+ /**
109
+ * Track when a cart is shared
110
+ */
111
+ export function cartShared(properties: CartProperties & SharingProperties): EcommerceEventSpec {
112
+ const { cart_id, products, recipient, share_message, share_via } = properties;
113
+
114
+ return {
115
+ name: ECOMMERCE_EVENTS.CART_SHARED,
116
+ category: 'ecommerce',
117
+ properties: cleanProperties({
118
+ cart_id,
119
+ products: products ? normalizeProducts(products) : undefined,
120
+ recipient,
121
+ share_message,
122
+ share_via,
123
+ }),
124
+ requiredProperties: [],
125
+ };
126
+ }
127
+
128
+ /**
129
+ * Track when a product is reviewed
130
+ */
131
+ export function productReviewed(properties: ReviewProperties): EcommerceEventSpec {
132
+ validateRequiredProperties(properties, ['product_id']);
133
+
134
+ return {
135
+ name: ECOMMERCE_EVENTS.PRODUCT_REVIEWED,
136
+ category: 'ecommerce',
137
+ properties: cleanProperties(properties),
138
+ requiredProperties: ['product_id'],
139
+ };
140
+ }
@@ -0,0 +1,46 @@
1
+ /**
2
+ * @fileoverview Platform-standard ecommerce events
3
+ *
4
+ * This module provides comprehensive ecommerce event tracking following industry
5
+ * best practices (Segment.io ecommerce spec, Google Analytics Enhanced Ecommerce).
6
+ *
7
+ * **Event Categories**:
8
+ * - **Cart & Checkout**: Add to cart, remove from cart, checkout started, checkout completed
9
+ * - **Orders**: Order placed, order updated, order refunded, order cancelled
10
+ * - **Products**: Product viewed, product added, product removed, product shared
11
+ * - **Coupons**: Coupon applied, coupon removed, coupon viewed
12
+ * - **Engagement**: Product list viewed, product list filtered, product searched
13
+ * - **Marketplace**: Seller viewed, seller contacted, review submitted
14
+ * - **Registry**: Registry created, registry item added, registry shared
15
+ * - **Wishlist**: Wishlist item added, wishlist item removed, wishlist shared
16
+ *
17
+ * **Usage**: Import event functions and use with `analytics.emit()`:
18
+ * ```typescript
19
+ * import { ecommerce } from '@od-oneapp/analytics/shared';
20
+ * await analytics.emit(ecommerce.productViewed({ productId: 'prod-123' }));
21
+ * ```
22
+ *
23
+ * @module @od-oneapp/analytics/shared/emitters/ecommerce
24
+ */
25
+
26
+ // Export all types
27
+ export * from './types';
28
+
29
+ // Export utilities
30
+ export * from './utils';
31
+
32
+ // Export all event functions
33
+ export * from './events/cart-checkout';
34
+ export * from './events/coupon';
35
+ export * from './events/engagement';
36
+ export * from './events/marketplace';
37
+ export * from './events/order';
38
+ export * from './events/product';
39
+ export * from './events/registry';
40
+ export * from './events/wishlist-sharing';
41
+
42
+ // Export tracking functionality
43
+ export * from './track-ecommerce';
44
+
45
+ // Re-export commonly used constants for convenience
46
+ export { ECOMMERCE_EVENTS } from './types';
@@ -0,0 +1,53 @@
1
+ /**
2
+ * @fileoverview Ecommerce tracking wrapper that integrates with the core emitter system
3
+ * Ecommerce 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 { EcommerceEventSpec } from './types';
10
+
11
+ /**
12
+ * Convert an ecommerce event specification to a track payload
13
+ *
14
+ * @param eventSpec - The ecommerce event specification
15
+ * @param options - Optional emitter options
16
+ * @returns Track payload ready to be sent to analytics providers
17
+ */
18
+ export function trackEcommerce(
19
+ eventSpec: EcommerceEventSpec,
20
+ options?: EmitterOptions,
21
+ ): EmitterTrackPayload {
22
+ // Add ecommerce context to options
23
+ const enrichedOptions: EmitterOptions = {
24
+ ...options,
25
+ context: {
26
+ ...options?.context,
27
+ // Add ecommerce-specific context if needed
28
+ ...(eventSpec.category && {
29
+ // Store category as a custom field since EmitterContext doesn't have category
30
+ traits: {
31
+ ...options?.context?.traits,
32
+ event_category: eventSpec.category,
33
+ },
34
+ }),
35
+ },
36
+ };
37
+
38
+ // Return the track payload with the event name and properties
39
+ return track(eventSpec.name, eventSpec.properties, enrichedOptions);
40
+ }
41
+
42
+ /**
43
+ * Helper to create a tracking function for a specific ecommerce event
44
+ * This allows for cleaner usage in applications
45
+ */
46
+ export function createEcommerceTracker<T extends Record<string, any>>(
47
+ eventFactory: (properties: T) => EcommerceEventSpec,
48
+ ) {
49
+ return (properties: T, options?: EmitterOptions): EmitterTrackPayload => {
50
+ const eventSpec = eventFactory(properties);
51
+ return trackEcommerce(eventSpec, options);
52
+ };
53
+ }
@@ -0,0 +1,314 @@
1
+ /**
2
+ * @fileoverview Platform-standard ecommerce event types
3
+ * Platform-standard ecommerce event types
4
+ * Based on industry best practices for ecommerce tracking
5
+ */
6
+
7
+ // Base product properties shared across events
8
+ export interface BaseProductProperties {
9
+ affiliate_link?: string | undefined;
10
+ affiliate_network?: string | undefined;
11
+ availability?: 'in_stock' | 'out_of_stock' | 'preorder' | 'discontinued' | undefined;
12
+ brand?: string | undefined;
13
+ category?: string | undefined;
14
+ commission_amount?: number | undefined;
15
+ commission_rate?: number | undefined;
16
+ condition?: 'new' | 'used' | 'refurbished' | undefined;
17
+ coupon?: string | undefined;
18
+ gtin?: string | undefined;
19
+ image_url?: string | undefined;
20
+ // Marketplace/affiliate properties (optional for any product)
21
+ merchant_id?: string | undefined;
22
+ merchant_name?: string | undefined;
23
+ merchant_url?: string | undefined;
24
+ mpn?: string | undefined;
25
+ name?: string | undefined;
26
+ original_price?: number | undefined;
27
+ position?: number | undefined;
28
+ price?: number | undefined;
29
+ product_id: string;
30
+ quantity?: number | undefined;
31
+ sale_price?: number | undefined;
32
+ url?: string | undefined;
33
+ variant?: string | undefined;
34
+ }
35
+
36
+ // Extended product properties for detailed tracking
37
+ export interface ExtendedProductProperties extends BaseProductProperties {
38
+ currency?: string | undefined;
39
+ value?: number | undefined;
40
+ }
41
+
42
+ // Registry-specific properties
43
+ export interface RegistryProperties {
44
+ co_registrant_id?: string | undefined;
45
+ co_registrant_name?: string | undefined;
46
+ event_date?: string | undefined;
47
+ privacy_setting?: 'public' | 'private' | 'unlisted' | undefined;
48
+ registry_id: string;
49
+ registry_name?: string | undefined;
50
+ registry_type?: 'wedding' | 'baby' | 'birthday' | 'universal' | 'custom' | undefined;
51
+ registry_url?: string | undefined;
52
+ }
53
+
54
+ // Registry item properties
55
+ export interface RegistryItemProperties extends BaseProductProperties {
56
+ merchant_id?: string | undefined;
57
+ merchant_name?: string | undefined;
58
+ notes?: string | undefined;
59
+ priority?: 'high' | 'medium' | 'low' | undefined;
60
+ purchased_quantity?: number | undefined;
61
+ registry_id: string;
62
+ requested_quantity?: number | undefined;
63
+ }
64
+
65
+ // Properties for product list events
66
+ export interface ProductListProperties {
67
+ category?: string | undefined;
68
+ list_id?: string | undefined;
69
+ products?: BaseProductProperties[] | undefined;
70
+ }
71
+
72
+ // Properties for cart events
73
+ export interface CartProperties {
74
+ cart_id?: string | undefined;
75
+ products?: BaseProductProperties[] | undefined;
76
+ }
77
+
78
+ // Properties for checkout events
79
+ export interface CheckoutProperties {
80
+ checkout_id?: string | undefined;
81
+ payment_method?: string | undefined;
82
+ products?: BaseProductProperties[] | undefined;
83
+ shipping_method?: string | undefined;
84
+ step?: number | undefined;
85
+ }
86
+
87
+ // Properties for order events
88
+ export interface OrderProperties {
89
+ affiliation?: string | undefined;
90
+ coupon?: string | undefined;
91
+ currency?: string | undefined;
92
+ discount?: number | undefined;
93
+ order_id: string;
94
+ products?: BaseProductProperties[] | undefined;
95
+ revenue?: number | undefined;
96
+ shipping?: number | undefined;
97
+ tax?: number | undefined;
98
+ total?: number | undefined;
99
+ }
100
+
101
+ // Properties for coupon events
102
+ export interface CouponProperties {
103
+ cart_id?: string | undefined;
104
+ coupon_id?: string | undefined;
105
+ coupon_name?: string | undefined;
106
+ discount?: number | undefined;
107
+ order_id?: string | undefined;
108
+ reason?: string | undefined;
109
+ }
110
+
111
+ // Properties for wishlist events
112
+ export interface WishlistProperties extends BaseProductProperties {
113
+ wishlist_id?: string | undefined;
114
+ wishlist_name?: string | undefined;
115
+ }
116
+
117
+ // Properties for sharing events
118
+ export interface SharingProperties {
119
+ recipient?: string | undefined;
120
+ share_message?: string | undefined;
121
+ share_via?: string | undefined;
122
+ }
123
+
124
+ // Properties for review events
125
+ export interface ReviewProperties {
126
+ product_id: string;
127
+ rating?: string | undefined;
128
+ review_body?: string | undefined;
129
+ review_id?: string | undefined;
130
+ }
131
+
132
+ // Properties for search results
133
+ export interface SearchResultsProperties {
134
+ filters_applied?: Record<string, any>;
135
+ products?: BaseProductProperties[];
136
+ query: string;
137
+ results_count: number;
138
+ sort_order?: string;
139
+ }
140
+
141
+ // Properties for cart updates
142
+ export interface CartUpdateProperties {
143
+ action: 'added' | 'removed' | 'updated';
144
+ cart_id?: string;
145
+ cart_total?: number;
146
+ product: BaseProductProperties;
147
+ quantity_change?: number;
148
+ }
149
+
150
+ // Properties for cart abandonment
151
+ export interface CartAbandonmentProperties {
152
+ abandonment_reason?: 'timeout' | 'navigation' | 'closed';
153
+ cart_id: string;
154
+ cart_value: number;
155
+ products: BaseProductProperties[];
156
+ time_in_cart?: number;
157
+ }
158
+
159
+ // Properties for checkout progression
160
+ export interface CheckoutProgressProperties {
161
+ action: 'viewed' | 'completed' | 'abandoned' | 'error';
162
+ checkout_id?: string;
163
+ error_message?: string;
164
+ payment_method?: string;
165
+ products?: BaseProductProperties[];
166
+ shipping_method?: string;
167
+ step: number;
168
+ step_name: string;
169
+ }
170
+
171
+ // Properties for order status updates
172
+ export interface OrderStatusProperties {
173
+ carrier?: string;
174
+ estimated_delivery?: string;
175
+ order_id: string;
176
+ previous_status?: string;
177
+ status:
178
+ | 'confirmed'
179
+ | 'processing'
180
+ | 'shipped'
181
+ | 'out_for_delivery'
182
+ | 'delivered'
183
+ | 'returned'
184
+ | 'failed';
185
+ tracking_number?: string;
186
+ }
187
+
188
+ // Properties for product comparison
189
+ export interface ProductComparisonProperties {
190
+ action: 'added' | 'removed' | 'viewed';
191
+ comparison_list?: BaseProductProperties[];
192
+ product: BaseProductProperties;
193
+ }
194
+
195
+ // Properties for recommendations
196
+ export interface RecommendationProperties {
197
+ algorithm?: string;
198
+ products: BaseProductProperties[];
199
+ recommendation_type:
200
+ | 'similar'
201
+ | 'frequently_bought'
202
+ | 'trending'
203
+ | 'personalized'
204
+ | 'upsell'
205
+ | 'cross_sell';
206
+ source: string; // e.g., 'product_page', 'cart', 'checkout'
207
+ }
208
+
209
+ // Properties for engagement events
210
+ export interface EngagementProperties {
211
+ action_type: 'price_alert' | 'back_in_stock' | 'favorite';
212
+ notification_method?: 'email' | 'sms' | 'push';
213
+ product_id: string;
214
+ threshold_price?: number;
215
+ }
216
+
217
+ // Properties for returns
218
+ export interface ReturnProperties {
219
+ order_id: string;
220
+ products: BaseProductProperties[];
221
+ reason: string;
222
+ refund_amount?: number;
223
+ return_id?: string;
224
+ return_method?: 'mail' | 'store' | 'pickup';
225
+ }
226
+
227
+ // Standard ecommerce event names
228
+ export const ECOMMERCE_EVENTS = {
229
+ PRODUCT_CLICKED: 'Product Clicked',
230
+ PRODUCT_COMPARED: 'Product Compared',
231
+ PRODUCT_LIST_FILTERED: 'Product List Filtered',
232
+ PRODUCT_LIST_VIEWED: 'Product List Viewed',
233
+ PRODUCT_RECOMMENDATION_CLICKED: 'Product Recommendation Clicked',
234
+ PRODUCT_RECOMMENDATION_VIEWED: 'Product Recommendation Viewed',
235
+ // Search & Discovery events
236
+ PRODUCT_SEARCHED: 'Product Searched',
237
+ PRODUCT_VIEWED: 'Product Viewed',
238
+ SEARCH_RESULTS_VIEWED: 'Search Results Viewed',
239
+
240
+ CART_ABANDONED: 'Cart Abandoned',
241
+ // Cart events
242
+ CART_UPDATED: 'Cart Updated',
243
+ CART_VIEWED: 'Cart Viewed',
244
+
245
+ // Checkout events
246
+ CHECKOUT_PROGRESSED: 'Checkout Progressed',
247
+
248
+ ORDER_CANCELLED: 'Order Cancelled',
249
+ // Order events
250
+ ORDER_COMPLETED: 'Order Completed',
251
+ ORDER_FAILED: 'Order Failed',
252
+ ORDER_REFUNDED: 'Order Refunded',
253
+ ORDER_STATUS_UPDATED: 'Order Status Updated',
254
+
255
+ // Coupon events
256
+ COUPON_APPLIED: 'Coupon Applied',
257
+ COUPON_REMOVED: 'Coupon Removed',
258
+
259
+ // Wishlist events
260
+ PRODUCT_ADDED_TO_WISHLIST: 'Product Added to Wishlist',
261
+ PRODUCT_REMOVED_FROM_WISHLIST: 'Product Removed from Wishlist',
262
+ WISHLIST_PRODUCT_ADDED_TO_CART: 'Wishlist Product Added to Cart',
263
+
264
+ CART_SHARED: 'Cart Shared',
265
+ // Sharing events
266
+ PRODUCT_SHARED: 'Product Shared',
267
+
268
+ // Review events
269
+ PRODUCT_REVIEWED: 'Product Reviewed',
270
+
271
+ AFFILIATE_CONVERSION_TRACKED: 'Affiliate Conversion Tracked',
272
+ AFFILIATE_LINK_CLICKED: 'Affiliate Link Clicked',
273
+ // Marketplace-specific events
274
+ MERCHANT_SELECTED: 'Merchant Selected',
275
+ PRICE_COMPARISON_VIEWED: 'Price Comparison Viewed',
276
+
277
+ REGISTRY_ITEM_MANAGED: 'Registry Item Managed',
278
+ // Registry events
279
+ REGISTRY_MANAGED: 'Registry Managed',
280
+ REGISTRY_SHARED: 'Registry Shared',
281
+ REGISTRY_VIEWED: 'Registry Viewed',
282
+
283
+ RETURN_COMPLETED: 'Return Completed',
284
+ // Post-purchase events
285
+ RETURN_REQUESTED: 'Return Requested',
286
+
287
+ BACK_IN_STOCK_REQUESTED: 'Back In Stock Requested',
288
+ // Engagement events
289
+ PRICE_ALERT_SET: 'Price Alert Set',
290
+ } as const;
291
+
292
+ export type EcommerceEventName = (typeof ECOMMERCE_EVENTS)[keyof typeof ECOMMERCE_EVENTS];
293
+
294
+ // Event specification interface
295
+ export interface EcommerceEventSpec<T = any> {
296
+ category: 'ecommerce';
297
+ name: EcommerceEventName;
298
+ properties: T;
299
+ requiredProperties: (keyof T)[];
300
+ }
301
+
302
+ // Union type for all ecommerce event properties
303
+ export type EcommerceEventProperties =
304
+ | BaseProductProperties
305
+ | ExtendedProductProperties
306
+ | ProductListProperties
307
+ | CartProperties
308
+ | CheckoutProperties
309
+ | OrderProperties
310
+ | CouponProperties
311
+ | WishlistProperties
312
+ | (BaseProductProperties & SharingProperties)
313
+ | (CartProperties & SharingProperties)
314
+ | ReviewProperties;