@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.
- package/README.md +509 -0
- package/dist/ai-YMnynb-t.mjs +3347 -0
- package/dist/ai-YMnynb-t.mjs.map +1 -0
- package/dist/chunk-DQk6qfdC.mjs +18 -0
- package/dist/client-CTzJVFU5.mjs +9 -0
- package/dist/client-CTzJVFU5.mjs.map +1 -0
- package/dist/client-CcFTauAh.mjs +54 -0
- package/dist/client-CcFTauAh.mjs.map +1 -0
- package/dist/client-CeOLjbac.mjs +281 -0
- package/dist/client-CeOLjbac.mjs.map +1 -0
- package/dist/client-D339NFJS.mjs +267 -0
- package/dist/client-D339NFJS.mjs.map +1 -0
- package/dist/client-next.d.mts +62 -0
- package/dist/client-next.d.mts.map +1 -0
- package/dist/client-next.mjs +525 -0
- package/dist/client-next.mjs.map +1 -0
- package/dist/client.d.mts +30 -0
- package/dist/client.d.mts.map +1 -0
- package/dist/client.mjs +186 -0
- package/dist/client.mjs.map +1 -0
- package/dist/config-DPS6bSYo.d.mts +34 -0
- package/dist/config-DPS6bSYo.d.mts.map +1 -0
- package/dist/config-P6P5adJg.mjs +287 -0
- package/dist/config-P6P5adJg.mjs.map +1 -0
- package/dist/console-8bND3mMU.mjs +128 -0
- package/dist/console-8bND3mMU.mjs.map +1 -0
- package/dist/ecommerce-Cgu4wlux.mjs +993 -0
- package/dist/ecommerce-Cgu4wlux.mjs.map +1 -0
- package/dist/emitters-6-nKo8i-.mjs +208 -0
- package/dist/emitters-6-nKo8i-.mjs.map +1 -0
- package/dist/emitters-DldkVSPp.d.mts +12 -0
- package/dist/emitters-DldkVSPp.d.mts.map +1 -0
- package/dist/index-BfNWgfa5.d.mts +1494 -0
- package/dist/index-BfNWgfa5.d.mts.map +1 -0
- package/dist/index-BkIWe--N.d.mts +953 -0
- package/dist/index-BkIWe--N.d.mts.map +1 -0
- package/dist/index-jPzXRn52.d.mts +184 -0
- package/dist/index-jPzXRn52.d.mts.map +1 -0
- package/dist/manager-DvRRjza6.d.mts +76 -0
- package/dist/manager-DvRRjza6.d.mts.map +1 -0
- package/dist/posthog-bootstrap-CYfIy_WS.mjs +1769 -0
- package/dist/posthog-bootstrap-CYfIy_WS.mjs.map +1 -0
- package/dist/posthog-bootstrap-DWxFrxlt.d.mts +81 -0
- package/dist/posthog-bootstrap-DWxFrxlt.d.mts.map +1 -0
- package/dist/providers-http-client.d.mts +37 -0
- package/dist/providers-http-client.d.mts.map +1 -0
- package/dist/providers-http-client.mjs +320 -0
- package/dist/providers-http-client.mjs.map +1 -0
- package/dist/providers-http-server.d.mts +31 -0
- package/dist/providers-http-server.d.mts.map +1 -0
- package/dist/providers-http-server.mjs +297 -0
- package/dist/providers-http-server.mjs.map +1 -0
- package/dist/providers-http.d.mts +46 -0
- package/dist/providers-http.d.mts.map +1 -0
- package/dist/providers-http.mjs +4 -0
- package/dist/server-edge.d.mts +9 -0
- package/dist/server-edge.d.mts.map +1 -0
- package/dist/server-edge.mjs +373 -0
- package/dist/server-edge.mjs.map +1 -0
- package/dist/server-next.d.mts +67 -0
- package/dist/server-next.d.mts.map +1 -0
- package/dist/server-next.mjs +193 -0
- package/dist/server-next.mjs.map +1 -0
- package/dist/server.d.mts +10 -0
- package/dist/server.mjs +7 -0
- package/dist/service-cYtBBL8x.mjs +945 -0
- package/dist/service-cYtBBL8x.mjs.map +1 -0
- package/dist/shared.d.mts +16 -0
- package/dist/shared.d.mts.map +1 -0
- package/dist/shared.mjs +93 -0
- package/dist/shared.mjs.map +1 -0
- package/dist/types-BxBnNQ0V.d.mts +354 -0
- package/dist/types-BxBnNQ0V.d.mts.map +1 -0
- package/dist/types-CBvxUEaF.d.mts +216 -0
- package/dist/types-CBvxUEaF.d.mts.map +1 -0
- package/dist/types.d.mts +4 -0
- package/dist/types.mjs +0 -0
- package/dist/vercel-types-lwakUfoI.d.mts +102 -0
- package/dist/vercel-types-lwakUfoI.d.mts.map +1 -0
- package/package.json +129 -0
- package/src/client/index.ts +164 -0
- package/src/client/manager.ts +71 -0
- package/src/client/next/components.tsx +270 -0
- package/src/client/next/hooks.ts +217 -0
- package/src/client/next/manager.ts +141 -0
- package/src/client/next.ts +144 -0
- package/src/client-next.ts +101 -0
- package/src/client.ts +89 -0
- package/src/examples/ai-sdk-patterns.ts +583 -0
- package/src/examples/emitter-patterns.ts +476 -0
- package/src/examples/nextjs-emitter-patterns.tsx +403 -0
- package/src/next/app-router.tsx +564 -0
- package/src/next/client.ts +419 -0
- package/src/next/index.ts +84 -0
- package/src/next/middleware.ts +429 -0
- package/src/next/rsc.tsx +300 -0
- package/src/next/server.ts +253 -0
- package/src/next/types.d.ts +220 -0
- package/src/providers/base-provider.ts +419 -0
- package/src/providers/console/client.ts +10 -0
- package/src/providers/console/index.ts +152 -0
- package/src/providers/console/server.ts +6 -0
- package/src/providers/console/types.ts +15 -0
- package/src/providers/http/client.ts +464 -0
- package/src/providers/http/index.ts +30 -0
- package/src/providers/http/server.ts +396 -0
- package/src/providers/http/types.ts +135 -0
- package/src/providers/posthog/client.ts +518 -0
- package/src/providers/posthog/index.ts +11 -0
- package/src/providers/posthog/server.ts +329 -0
- package/src/providers/posthog/types.ts +104 -0
- package/src/providers/segment/client.ts +113 -0
- package/src/providers/segment/index.ts +11 -0
- package/src/providers/segment/server.ts +115 -0
- package/src/providers/segment/types.ts +51 -0
- package/src/providers/vercel/client.ts +102 -0
- package/src/providers/vercel/index.ts +11 -0
- package/src/providers/vercel/server.ts +89 -0
- package/src/providers/vercel/types.ts +27 -0
- package/src/server/index.ts +103 -0
- package/src/server/manager.ts +62 -0
- package/src/server/next.ts +210 -0
- package/src/server-edge.ts +442 -0
- package/src/server-next.ts +39 -0
- package/src/server.ts +106 -0
- package/src/shared/emitters/ai/README.md +981 -0
- package/src/shared/emitters/ai/events/agent.ts +130 -0
- package/src/shared/emitters/ai/events/artifacts.ts +167 -0
- package/src/shared/emitters/ai/events/chat.ts +126 -0
- package/src/shared/emitters/ai/events/chatbot-ecommerce.ts +133 -0
- package/src/shared/emitters/ai/events/completion.ts +103 -0
- package/src/shared/emitters/ai/events/content-generation.ts +347 -0
- package/src/shared/emitters/ai/events/conversation.ts +332 -0
- package/src/shared/emitters/ai/events/product-features.ts +1402 -0
- package/src/shared/emitters/ai/events/streaming.ts +114 -0
- package/src/shared/emitters/ai/events/tool.ts +93 -0
- package/src/shared/emitters/ai/index.ts +69 -0
- package/src/shared/emitters/ai/track-ai-sdk.ts +74 -0
- package/src/shared/emitters/ai/track-ai.ts +50 -0
- package/src/shared/emitters/ai/types.ts +1041 -0
- package/src/shared/emitters/ai/utils.ts +468 -0
- package/src/shared/emitters/ecommerce/events/cart-checkout.ts +106 -0
- package/src/shared/emitters/ecommerce/events/coupon.ts +49 -0
- package/src/shared/emitters/ecommerce/events/engagement.ts +61 -0
- package/src/shared/emitters/ecommerce/events/marketplace.ts +119 -0
- package/src/shared/emitters/ecommerce/events/order.ts +199 -0
- package/src/shared/emitters/ecommerce/events/product.ts +205 -0
- package/src/shared/emitters/ecommerce/events/registry.ts +123 -0
- package/src/shared/emitters/ecommerce/events/wishlist-sharing.ts +140 -0
- package/src/shared/emitters/ecommerce/index.ts +46 -0
- package/src/shared/emitters/ecommerce/track-ecommerce.ts +53 -0
- package/src/shared/emitters/ecommerce/types.ts +314 -0
- package/src/shared/emitters/ecommerce/utils.ts +216 -0
- package/src/shared/emitters/emitter-types.ts +974 -0
- package/src/shared/emitters/emitters.ts +292 -0
- package/src/shared/emitters/helpers.ts +419 -0
- package/src/shared/emitters/index.ts +66 -0
- package/src/shared/index.ts +142 -0
- package/src/shared/ingestion/index.ts +66 -0
- package/src/shared/ingestion/schemas.ts +386 -0
- package/src/shared/ingestion/service.ts +628 -0
- package/src/shared/node22-features.ts +848 -0
- package/src/shared/providers/console-provider.ts +160 -0
- package/src/shared/types/base-types.ts +54 -0
- package/src/shared/types/console-types.ts +19 -0
- package/src/shared/types/posthog-types.ts +131 -0
- package/src/shared/types/segment-types.ts +15 -0
- package/src/shared/types/types.ts +397 -0
- package/src/shared/types/vercel-types.ts +19 -0
- package/src/shared/utils/config-client.ts +19 -0
- package/src/shared/utils/config.ts +250 -0
- package/src/shared/utils/emitter-adapter.ts +212 -0
- package/src/shared/utils/manager.test.ts +36 -0
- package/src/shared/utils/manager.ts +1322 -0
- package/src/shared/utils/posthog-bootstrap.ts +136 -0
- package/src/shared/utils/posthog-client-utils.ts +48 -0
- package/src/shared/utils/posthog-next-utils.ts +282 -0
- package/src/shared/utils/posthog-server-utils.ts +210 -0
- package/src/shared/utils/rate-limit.ts +289 -0
- package/src/shared/utils/security.ts +545 -0
- package/src/shared/utils/validation-client.ts +161 -0
- package/src/shared/utils/validation.ts +399 -0
- package/src/shared.ts +155 -0
- 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;
|