shopkit-analytics 1.0.2 → 1.0.4
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 +35 -100
- package/dist/adapters/index.d.mts +2 -1
- package/dist/adapters/index.d.ts +2 -1
- package/dist/adapters/index.js +230 -64
- package/dist/adapters/index.js.map +1 -1
- package/dist/adapters/index.mjs +4 -2
- package/dist/chunk-4RDPDMGW.mjs +68 -0
- package/dist/chunk-4RDPDMGW.mjs.map +1 -0
- package/dist/{chunk-3NR2AKE4.mjs → chunk-G3VBIGO4.mjs} +1 -1
- package/dist/chunk-G3VBIGO4.mjs.map +1 -0
- package/dist/chunk-NC25KOAF.mjs +156 -0
- package/dist/chunk-NC25KOAF.mjs.map +1 -0
- package/dist/chunk-NGPUKV7E.mjs +46 -0
- package/dist/chunk-NGPUKV7E.mjs.map +1 -0
- package/dist/{chunk-U3UOXFS4.mjs → chunk-NJQ2MOM2.mjs} +206 -116
- package/dist/chunk-NJQ2MOM2.mjs.map +1 -0
- package/dist/chunk-NKDB4KX2.mjs +2 -0
- package/dist/chunk-NKDB4KX2.mjs.map +1 -0
- package/dist/{chunk-BNV3EVHH.mjs → chunk-QCS5UARA.mjs} +2 -2
- package/dist/events/index.js +218 -54
- package/dist/events/index.js.map +1 -1
- package/dist/events/index.mjs +10 -8
- package/dist/experiment/index.d.mts +25 -0
- package/dist/experiment/index.d.ts +25 -0
- package/dist/experiment/index.js +74 -0
- package/dist/experiment/index.js.map +1 -0
- package/dist/experiment/index.mjs +15 -0
- package/dist/experiment/index.mjs.map +1 -0
- package/dist/{index-DS9OI5Mz.d.ts → index-D_8w5bL_.d.ts} +13 -0
- package/dist/{index-Bym1_EAp.d.mts → index-th6sBtE3.d.mts} +13 -0
- package/dist/index.d.mts +6 -2
- package/dist/index.d.ts +6 -2
- package/dist/index.js +400 -64
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +31 -8
- package/dist/index.mjs.map +1 -1
- package/dist/services/index.d.mts +51 -0
- package/dist/services/index.d.ts +51 -0
- package/dist/services/index.js +180 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/index.mjs +11 -0
- package/dist/services/index.mjs.map +1 -0
- package/dist/types-C__2IBCj.d.mts +7 -0
- package/dist/types-C__2IBCj.d.ts +7 -0
- package/dist/types.d.mts +1 -1
- package/dist/types.d.ts +1 -1
- package/dist/types.js.map +1 -1
- package/dist/types.mjs +1 -1
- package/dist/utils/index.d.mts +19 -0
- package/dist/utils/index.d.ts +19 -0
- package/dist/utils/index.js +93 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/index.mjs +12 -0
- package/dist/utils/index.mjs.map +1 -0
- package/package.json +19 -1
- package/templates/nextjs/README.md +206 -0
- package/templates/nextjs/api-events-route.ts +62 -0
- package/dist/chunk-3NR2AKE4.mjs.map +0 -1
- package/dist/chunk-U3UOXFS4.mjs.map +0 -1
- /package/dist/{chunk-BNV3EVHH.mjs.map → chunk-QCS5UARA.mjs.map} +0 -0
package/dist/index.mjs
CHANGED
|
@@ -2,7 +2,12 @@
|
|
|
2
2
|
import {
|
|
3
3
|
initTracking,
|
|
4
4
|
initializeEventTracking
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-QCS5UARA.mjs";
|
|
6
|
+
import {
|
|
7
|
+
eventPublisher,
|
|
8
|
+
eventSubscriber,
|
|
9
|
+
publishEvent
|
|
10
|
+
} from "./chunk-HCA4E2RA.mjs";
|
|
6
11
|
import {
|
|
7
12
|
AffiliateTracker_default,
|
|
8
13
|
captureAffiliateParams,
|
|
@@ -14,6 +19,7 @@ import {
|
|
|
14
19
|
useAffiliateTracker,
|
|
15
20
|
useHasAffiliateData
|
|
16
21
|
} from "./chunk-TNXTKEGS.mjs";
|
|
22
|
+
import "./chunk-NKDB4KX2.mjs";
|
|
17
23
|
import {
|
|
18
24
|
BaseAdapter,
|
|
19
25
|
DEFAULT_CURRENCY,
|
|
@@ -28,15 +34,24 @@ import {
|
|
|
28
34
|
createAdapterLogger,
|
|
29
35
|
createLogger,
|
|
30
36
|
logger
|
|
31
|
-
} from "./chunk-
|
|
37
|
+
} from "./chunk-NJQ2MOM2.mjs";
|
|
32
38
|
import {
|
|
33
|
-
|
|
34
|
-
|
|
39
|
+
PRIMA_EXPERIMENT_COOKIES,
|
|
40
|
+
PRIMA_EXPERIMENT_COOKIE_NAMES,
|
|
41
|
+
getExperimentParams,
|
|
42
|
+
hasExperimentData
|
|
43
|
+
} from "./chunk-NGPUKV7E.mjs";
|
|
35
44
|
import {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
45
|
+
FacebookCAPIService,
|
|
46
|
+
createFacebookCAPIService
|
|
47
|
+
} from "./chunk-NC25KOAF.mjs";
|
|
48
|
+
import {
|
|
49
|
+
generateEventId,
|
|
50
|
+
getBrowserInfo
|
|
51
|
+
} from "./chunk-4RDPDMGW.mjs";
|
|
52
|
+
import {
|
|
53
|
+
EventType
|
|
54
|
+
} from "./chunk-G3VBIGO4.mjs";
|
|
40
55
|
|
|
41
56
|
// src/ShopkitAnalytics.tsx
|
|
42
57
|
import { useEffect } from "react";
|
|
@@ -159,10 +174,13 @@ export {
|
|
|
159
174
|
DEFAULT_CURRENCY,
|
|
160
175
|
EventNames,
|
|
161
176
|
EventType,
|
|
177
|
+
FacebookCAPIService,
|
|
162
178
|
GoogleAdapter,
|
|
163
179
|
KwikCheckoutAdapter,
|
|
164
180
|
KwikPassAdapter,
|
|
165
181
|
MoengageAdapter,
|
|
182
|
+
PRIMA_EXPERIMENT_COOKIES,
|
|
183
|
+
PRIMA_EXPERIMENT_COOKIE_NAMES,
|
|
166
184
|
PixelAdapter,
|
|
167
185
|
PostHogAdapter,
|
|
168
186
|
ShopifyAdapter,
|
|
@@ -170,13 +188,18 @@ export {
|
|
|
170
188
|
captureAffiliateParams,
|
|
171
189
|
clearAffiliateParams,
|
|
172
190
|
createAdapterLogger,
|
|
191
|
+
createFacebookCAPIService,
|
|
173
192
|
createLogger,
|
|
174
193
|
ShopkitAnalytics_default as default,
|
|
175
194
|
eventPublisher,
|
|
176
195
|
eventSubscriber,
|
|
196
|
+
generateEventId,
|
|
177
197
|
getAffiliateParams,
|
|
178
198
|
getAffiliateSource,
|
|
199
|
+
getBrowserInfo,
|
|
200
|
+
getExperimentParams,
|
|
179
201
|
hasAffiliateData,
|
|
202
|
+
hasExperimentData,
|
|
180
203
|
initTracking,
|
|
181
204
|
initializeEventTracking,
|
|
182
205
|
logger,
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/ShopkitAnalytics.tsx"],"sourcesContent":["\"use client\";\n\nimport React, { useEffect } from \"react\";\nimport { useShopifyCookies } from \"@shopify/hydrogen-react\";\nimport { initializeEventTracking } from \"./events/init\";\nimport { AffiliateTracker } from \"./affiliate\";\nimport { createLogger, type LoggerConfig } from \"./logger\";\nimport {\n GoogleAdapter,\n PixelAdapter,\n MoengageAdapter,\n PostHogAdapter,\n ShopifyAdapter,\n KwikPassAdapter,\n KwikCheckoutAdapter,\n} from \"./adapters\";\nimport type {\n GoogleAdapterConfig,\n PixelAdapterConfig,\n MoengageAdapterConfig,\n PostHogAdapterConfig,\n ShopifyAdapterConfig,\n KwikPassConfig,\n KwikCheckoutConfig,\n} from \"./adapters\";\nimport type { TrackingAdapter } from \"./events/subscriber\";\nimport type { AffiliateConfig } from \"./affiliate/types\";\n\nexport interface ShopkitAnalyticsConfig {\n // Analytics Adapters\n googleAnalytics?: GoogleAdapterConfig;\n facebookPixel?: PixelAdapterConfig;\n moengage?: MoengageAdapterConfig;\n posthog?: PostHogAdapterConfig;\n shopify?: ShopifyAdapterConfig;\n kwikpass?: KwikPassConfig;\n kwikcheckout?: KwikCheckoutConfig;\n customAdapters?: TrackingAdapter[];\n\n // Affiliate Tracking\n affiliate?: {\n enabled?: boolean;\n config?: Partial<AffiliateConfig>;\n autoCapture?: boolean;\n };\n\n // Logger Settings\n logger?: LoggerConfig;\n\n // General Settings (deprecated - use logger.enabled instead)\n enableDebugLogs?: boolean;\n autoInitialize?: boolean;\n}\n\nexport interface ShopkitAnalyticsProps {\n config: ShopkitAnalyticsConfig;\n children?: React.ReactNode;\n onInitialized?: () => void;\n onError?: (error: Error) => void;\n}\n\nconst ShopkitAnalytics: React.FC<ShopkitAnalyticsProps> = ({\n config,\n children,\n onInitialized,\n onError,\n}) => {\n // Enable Shopify cookies if Shopify adapter is configured\n useShopifyCookies({\n hasUserConsent: true,\n domain: config.shopify?.domain || \"\",\n });\n\n useEffect(() => {\n const initializeAnalytics = async () => {\n if (config.autoInitialize === false) return;\n\n // Create logger instance\n const loggerConfig: LoggerConfig = {\n enabled: config.logger?.enabled ?? config.enableDebugLogs ?? true,\n level: config.logger?.level ?? \"info\",\n name: \"@shopkit/analytics\",\n prettyPrint: config.logger?.prettyPrint ?? false,\n };\n\n const logger = createLogger(loggerConfig);\n\n try {\n logger.info(\"Starting initialization...\");\n\n const adapters: TrackingAdapter[] = [];\n\n // Helper function to add logger config to adapter config\n const addLoggerConfig = (adapterConfig: any) => ({\n ...adapterConfig,\n enableDebugLogs: loggerConfig.enabled,\n logLevel: loggerConfig.level,\n });\n\n // Google Analytics 4\n if (config.googleAnalytics) {\n const gaAdapter = new GoogleAdapter(\n addLoggerConfig(config.googleAnalytics)\n );\n adapters.push(gaAdapter);\n logger.info(\"Added Google Analytics adapter\");\n }\n\n // Facebook Pixel\n if (config.facebookPixel) {\n const pixelAdapter = new PixelAdapter(\n addLoggerConfig(config.facebookPixel)\n );\n adapters.push(pixelAdapter);\n logger.info(\"Added Facebook Pixel adapter\");\n }\n\n // MoEngage\n if (config.moengage) {\n const moengageAdapter = new MoengageAdapter(\n addLoggerConfig(config.moengage)\n );\n adapters.push(moengageAdapter);\n logger.info(\"Added MoEngage adapter\");\n }\n\n // PostHog\n if (config.posthog) {\n const posthogAdapter = new PostHogAdapter(\n addLoggerConfig(config.posthog)\n );\n adapters.push(posthogAdapter);\n logger.info(\"Added PostHog adapter\");\n }\n\n // Shopify Analytics\n if (config.shopify) {\n const shopifyAdapter = new ShopifyAdapter(\n addLoggerConfig(config.shopify)\n );\n adapters.push(shopifyAdapter);\n logger.info(\"Added Shopify Analytics adapter\");\n }\n\n // KwikPass Analytics\n if (config.kwikpass) {\n const kwikpassAdapter = new KwikPassAdapter(\n addLoggerConfig(config.kwikpass)\n );\n adapters.push(kwikpassAdapter);\n logger.info(\"Added KwikPass Analytics adapter\");\n }\n\n // KwikCheckout Analytics\n if (config.kwikcheckout) {\n const kwikcheckoutAdapter = new KwikCheckoutAdapter(\n addLoggerConfig(config.kwikcheckout)\n );\n adapters.push(kwikcheckoutAdapter);\n logger.info(\"Added KwikCheckout Analytics adapter\");\n }\n\n // Custom adapters\n if (config.customAdapters) {\n adapters.push(...config.customAdapters);\n logger.info(`Added ${config.customAdapters.length} custom adapters`);\n }\n\n if (adapters.length === 0) {\n logger.warn(\"No analytics adapters configured\");\n } else {\n // Initialize the event tracking system\n await initializeEventTracking(adapters);\n logger.info(\"Event tracking initialized with adapters\", {\n adapters: adapters.map((a) => a.name),\n });\n }\n\n logger.info(\"Initialization completed successfully\");\n onInitialized?.();\n } catch (err) {\n const error =\n err instanceof Error\n ? err\n : new Error(\"Unknown initialization error\");\n logger.error(\"Initialization failed\", error);\n onError?.(error);\n }\n };\n\n initializeAnalytics();\n }, [config, onInitialized, onError]);\n\n return (\n <>\n {/* Affiliate Tracker */}\n {config.affiliate?.enabled !== false && (\n <AffiliateTracker\n config={config.affiliate?.config}\n autoCapture={config.affiliate?.autoCapture}\n />\n )}\n\n {children ? <>{children}</> : null}\n </>\n );\n};\n\nexport default ShopkitAnalytics;\n"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../src/ShopkitAnalytics.tsx"],"sourcesContent":["\"use client\";\n\nimport React, { useEffect } from \"react\";\nimport { useShopifyCookies } from \"@shopify/hydrogen-react\";\nimport { initializeEventTracking } from \"./events/init\";\nimport { AffiliateTracker } from \"./affiliate\";\nimport { createLogger, type LoggerConfig } from \"./logger\";\nimport {\n GoogleAdapter,\n PixelAdapter,\n MoengageAdapter,\n PostHogAdapter,\n ShopifyAdapter,\n KwikPassAdapter,\n KwikCheckoutAdapter,\n} from \"./adapters\";\nimport type {\n GoogleAdapterConfig,\n PixelAdapterConfig,\n MoengageAdapterConfig,\n PostHogAdapterConfig,\n ShopifyAdapterConfig,\n KwikPassConfig,\n KwikCheckoutConfig,\n} from \"./adapters\";\nimport type { TrackingAdapter } from \"./events/subscriber\";\nimport type { AffiliateConfig } from \"./affiliate/types\";\n\nexport interface ShopkitAnalyticsConfig {\n // Analytics Adapters\n googleAnalytics?: GoogleAdapterConfig;\n facebookPixel?: PixelAdapterConfig;\n moengage?: MoengageAdapterConfig;\n posthog?: PostHogAdapterConfig;\n shopify?: ShopifyAdapterConfig;\n kwikpass?: KwikPassConfig;\n kwikcheckout?: KwikCheckoutConfig;\n customAdapters?: TrackingAdapter[];\n\n // Affiliate Tracking\n affiliate?: {\n enabled?: boolean;\n config?: Partial<AffiliateConfig>;\n autoCapture?: boolean;\n };\n\n // Logger Settings\n logger?: LoggerConfig;\n\n // General Settings (deprecated - use logger.enabled instead)\n enableDebugLogs?: boolean;\n autoInitialize?: boolean;\n}\n\nexport interface ShopkitAnalyticsProps {\n config: ShopkitAnalyticsConfig;\n children?: React.ReactNode;\n onInitialized?: () => void;\n onError?: (error: Error) => void;\n}\n\nconst ShopkitAnalytics: React.FC<ShopkitAnalyticsProps> = ({\n config,\n children,\n onInitialized,\n onError,\n}) => {\n // Enable Shopify cookies if Shopify adapter is configured\n useShopifyCookies({\n hasUserConsent: true,\n domain: config.shopify?.domain || \"\",\n });\n\n useEffect(() => {\n const initializeAnalytics = async () => {\n if (config.autoInitialize === false) return;\n\n // Create logger instance\n const loggerConfig: LoggerConfig = {\n enabled: config.logger?.enabled ?? config.enableDebugLogs ?? true,\n level: config.logger?.level ?? \"info\",\n name: \"@shopkit/analytics\",\n prettyPrint: config.logger?.prettyPrint ?? false,\n };\n\n const logger = createLogger(loggerConfig);\n\n try {\n logger.info(\"Starting initialization...\");\n\n const adapters: TrackingAdapter[] = [];\n\n // Helper function to add logger config to adapter config\n const addLoggerConfig = (adapterConfig: any) => ({\n ...adapterConfig,\n enableDebugLogs: loggerConfig.enabled,\n logLevel: loggerConfig.level,\n });\n\n // Google Analytics 4\n if (config.googleAnalytics) {\n const gaAdapter = new GoogleAdapter(\n addLoggerConfig(config.googleAnalytics)\n );\n adapters.push(gaAdapter);\n logger.info(\"Added Google Analytics adapter\");\n }\n\n // Facebook Pixel\n if (config.facebookPixel) {\n const pixelAdapter = new PixelAdapter(\n addLoggerConfig(config.facebookPixel)\n );\n adapters.push(pixelAdapter);\n logger.info(\"Added Facebook Pixel adapter\");\n }\n\n // MoEngage\n if (config.moengage) {\n const moengageAdapter = new MoengageAdapter(\n addLoggerConfig(config.moengage)\n );\n adapters.push(moengageAdapter);\n logger.info(\"Added MoEngage adapter\");\n }\n\n // PostHog\n if (config.posthog) {\n const posthogAdapter = new PostHogAdapter(\n addLoggerConfig(config.posthog)\n );\n adapters.push(posthogAdapter);\n logger.info(\"Added PostHog adapter\");\n }\n\n // Shopify Analytics\n if (config.shopify) {\n const shopifyAdapter = new ShopifyAdapter(\n addLoggerConfig(config.shopify)\n );\n adapters.push(shopifyAdapter);\n logger.info(\"Added Shopify Analytics adapter\");\n }\n\n // KwikPass Analytics\n if (config.kwikpass) {\n const kwikpassAdapter = new KwikPassAdapter(\n addLoggerConfig(config.kwikpass)\n );\n adapters.push(kwikpassAdapter);\n logger.info(\"Added KwikPass Analytics adapter\");\n }\n\n // KwikCheckout Analytics\n if (config.kwikcheckout) {\n const kwikcheckoutAdapter = new KwikCheckoutAdapter(\n addLoggerConfig(config.kwikcheckout)\n );\n adapters.push(kwikcheckoutAdapter);\n logger.info(\"Added KwikCheckout Analytics adapter\");\n }\n\n // Custom adapters\n if (config.customAdapters) {\n adapters.push(...config.customAdapters);\n logger.info(`Added ${config.customAdapters.length} custom adapters`);\n }\n\n if (adapters.length === 0) {\n logger.warn(\"No analytics adapters configured\");\n } else {\n // Initialize the event tracking system\n await initializeEventTracking(adapters);\n logger.info(\"Event tracking initialized with adapters\", {\n adapters: adapters.map((a) => a.name),\n });\n }\n\n logger.info(\"Initialization completed successfully\");\n onInitialized?.();\n } catch (err) {\n const error =\n err instanceof Error\n ? err\n : new Error(\"Unknown initialization error\");\n logger.error(\"Initialization failed\", error);\n onError?.(error);\n }\n };\n\n initializeAnalytics();\n }, [config, onInitialized, onError]);\n\n return (\n <>\n {/* Affiliate Tracker */}\n {config.affiliate?.enabled !== false && (\n <AffiliateTracker\n config={config.affiliate?.config}\n autoCapture={config.affiliate?.autoCapture}\n />\n )}\n\n {children ? <>{children}</> : null}\n </>\n );\n};\n\nexport default ShopkitAnalytics;\n"],"mappings":"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","names":["logger"]}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { TEvent } from '../types.mjs';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Facebook CAPI Configuration
|
|
5
|
+
*/
|
|
6
|
+
interface FacebookCAPIConfig {
|
|
7
|
+
accessToken: string;
|
|
8
|
+
pixelId: string;
|
|
9
|
+
testEventCode?: string;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Facebook CAPI Service for server-side event tracking
|
|
13
|
+
* Only handles events that are implemented in PixelAdapter
|
|
14
|
+
*/
|
|
15
|
+
declare class FacebookCAPIService {
|
|
16
|
+
private config;
|
|
17
|
+
private baseUrl;
|
|
18
|
+
constructor(config: FacebookCAPIConfig);
|
|
19
|
+
/**
|
|
20
|
+
* Send events to Facebook CAPI
|
|
21
|
+
*/
|
|
22
|
+
sendEvents(events: TEvent[], userInfo?: {
|
|
23
|
+
clientIpAddress?: string;
|
|
24
|
+
clientUserAgent?: string;
|
|
25
|
+
fbc?: string;
|
|
26
|
+
fbp?: string;
|
|
27
|
+
}): Promise<void>;
|
|
28
|
+
/**
|
|
29
|
+
* Check if event type is supported (matches PixelAdapter implementation)
|
|
30
|
+
*/
|
|
31
|
+
private isSupportedEvent;
|
|
32
|
+
/**
|
|
33
|
+
* Convert internal event to Facebook CAPI event format
|
|
34
|
+
* Only handles events implemented in PixelAdapter
|
|
35
|
+
*/
|
|
36
|
+
private convertToFacebookEvent;
|
|
37
|
+
/**
|
|
38
|
+
* Map internal event types to Facebook event names (matching PixelAdapter)
|
|
39
|
+
*/
|
|
40
|
+
private mapEventName;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Create Facebook CAPI service instance
|
|
44
|
+
*/
|
|
45
|
+
declare function createFacebookCAPIService(config?: {
|
|
46
|
+
accessToken: string;
|
|
47
|
+
pixelId: string;
|
|
48
|
+
testEventCode?: string;
|
|
49
|
+
}): FacebookCAPIService | null;
|
|
50
|
+
|
|
51
|
+
export { type FacebookCAPIConfig, FacebookCAPIService, createFacebookCAPIService };
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { TEvent } from '../types.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Facebook CAPI Configuration
|
|
5
|
+
*/
|
|
6
|
+
interface FacebookCAPIConfig {
|
|
7
|
+
accessToken: string;
|
|
8
|
+
pixelId: string;
|
|
9
|
+
testEventCode?: string;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Facebook CAPI Service for server-side event tracking
|
|
13
|
+
* Only handles events that are implemented in PixelAdapter
|
|
14
|
+
*/
|
|
15
|
+
declare class FacebookCAPIService {
|
|
16
|
+
private config;
|
|
17
|
+
private baseUrl;
|
|
18
|
+
constructor(config: FacebookCAPIConfig);
|
|
19
|
+
/**
|
|
20
|
+
* Send events to Facebook CAPI
|
|
21
|
+
*/
|
|
22
|
+
sendEvents(events: TEvent[], userInfo?: {
|
|
23
|
+
clientIpAddress?: string;
|
|
24
|
+
clientUserAgent?: string;
|
|
25
|
+
fbc?: string;
|
|
26
|
+
fbp?: string;
|
|
27
|
+
}): Promise<void>;
|
|
28
|
+
/**
|
|
29
|
+
* Check if event type is supported (matches PixelAdapter implementation)
|
|
30
|
+
*/
|
|
31
|
+
private isSupportedEvent;
|
|
32
|
+
/**
|
|
33
|
+
* Convert internal event to Facebook CAPI event format
|
|
34
|
+
* Only handles events implemented in PixelAdapter
|
|
35
|
+
*/
|
|
36
|
+
private convertToFacebookEvent;
|
|
37
|
+
/**
|
|
38
|
+
* Map internal event types to Facebook event names (matching PixelAdapter)
|
|
39
|
+
*/
|
|
40
|
+
private mapEventName;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Create Facebook CAPI service instance
|
|
44
|
+
*/
|
|
45
|
+
declare function createFacebookCAPIService(config?: {
|
|
46
|
+
accessToken: string;
|
|
47
|
+
pixelId: string;
|
|
48
|
+
testEventCode?: string;
|
|
49
|
+
}): FacebookCAPIService | null;
|
|
50
|
+
|
|
51
|
+
export { type FacebookCAPIConfig, FacebookCAPIService, createFacebookCAPIService };
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
"use strict";
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all)
|
|
9
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from))
|
|
14
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
+
}
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
20
|
+
|
|
21
|
+
// src/services/facebook-capi.ts
|
|
22
|
+
var facebook_capi_exports = {};
|
|
23
|
+
__export(facebook_capi_exports, {
|
|
24
|
+
FacebookCAPIService: () => FacebookCAPIService,
|
|
25
|
+
createFacebookCAPIService: () => createFacebookCAPIService
|
|
26
|
+
});
|
|
27
|
+
module.exports = __toCommonJS(facebook_capi_exports);
|
|
28
|
+
var FacebookCAPIService = class {
|
|
29
|
+
constructor(config) {
|
|
30
|
+
this.baseUrl = "https://graph.facebook.com/v18.0";
|
|
31
|
+
this.config = config;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Send events to Facebook CAPI
|
|
35
|
+
*/
|
|
36
|
+
async sendEvents(events, userInfo) {
|
|
37
|
+
if (!this.config.accessToken || !this.config.pixelId) {
|
|
38
|
+
console.warn("Facebook CAPI: Missing access token or pixel ID");
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
const supportedEvents = events.filter(
|
|
42
|
+
(event) => this.isSupportedEvent(event.type)
|
|
43
|
+
);
|
|
44
|
+
if (supportedEvents.length === 0) {
|
|
45
|
+
console.log("Facebook CAPI: No supported events to send");
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
const capiEvents = supportedEvents.map(
|
|
49
|
+
(event) => this.convertToFacebookEvent(event, userInfo)
|
|
50
|
+
);
|
|
51
|
+
const payload = {
|
|
52
|
+
data: capiEvents,
|
|
53
|
+
test_event_code: this.config.testEventCode
|
|
54
|
+
};
|
|
55
|
+
try {
|
|
56
|
+
const response = await fetch(
|
|
57
|
+
`${this.baseUrl}/${this.config.pixelId}/events?access_token=${this.config.accessToken}`,
|
|
58
|
+
{
|
|
59
|
+
method: "POST",
|
|
60
|
+
headers: {
|
|
61
|
+
"Content-Type": "application/json"
|
|
62
|
+
},
|
|
63
|
+
body: JSON.stringify(payload)
|
|
64
|
+
}
|
|
65
|
+
);
|
|
66
|
+
if (!response.ok) {
|
|
67
|
+
const errorData = await response.json();
|
|
68
|
+
console.error("Facebook CAPI Error:", errorData);
|
|
69
|
+
throw new Error(`Facebook CAPI request failed: ${response.status}`);
|
|
70
|
+
}
|
|
71
|
+
const result = await response.json();
|
|
72
|
+
console.log("Facebook CAPI: Events sent successfully", {
|
|
73
|
+
events_received: result.events_received,
|
|
74
|
+
messages: result.messages
|
|
75
|
+
});
|
|
76
|
+
} catch (error) {
|
|
77
|
+
console.error("Facebook CAPI: Failed to send events", error);
|
|
78
|
+
throw error;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Check if event type is supported (matches PixelAdapter implementation)
|
|
83
|
+
*/
|
|
84
|
+
isSupportedEvent(eventType) {
|
|
85
|
+
return [
|
|
86
|
+
"page_view" /* PAGE_VIEW */,
|
|
87
|
+
"product_view" /* PRODUCT_VIEW */,
|
|
88
|
+
"add_to_cart" /* ADD_TO_CART */,
|
|
89
|
+
"search" /* SEARCH */
|
|
90
|
+
].includes(eventType);
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Convert internal event to Facebook CAPI event format
|
|
94
|
+
* Only handles events implemented in PixelAdapter
|
|
95
|
+
*/
|
|
96
|
+
convertToFacebookEvent(event, userInfo) {
|
|
97
|
+
const baseEvent = {
|
|
98
|
+
event_name: this.mapEventName(event.type),
|
|
99
|
+
event_time: Math.floor((event.timestamp || Date.now()) / 1e3),
|
|
100
|
+
event_id: event.eventId,
|
|
101
|
+
action_source: "website",
|
|
102
|
+
user_data: userInfo ? {
|
|
103
|
+
client_ip_address: userInfo.clientIpAddress,
|
|
104
|
+
client_user_agent: userInfo.clientUserAgent,
|
|
105
|
+
fbc: userInfo.fbc,
|
|
106
|
+
fbp: userInfo.fbp
|
|
107
|
+
} : void 0
|
|
108
|
+
};
|
|
109
|
+
switch (event.type) {
|
|
110
|
+
case "page_view" /* PAGE_VIEW */:
|
|
111
|
+
baseEvent.custom_data = {};
|
|
112
|
+
break;
|
|
113
|
+
case "product_view" /* PRODUCT_VIEW */:
|
|
114
|
+
const productEvent = event;
|
|
115
|
+
baseEvent.custom_data = {
|
|
116
|
+
content_type: "product_group",
|
|
117
|
+
content_ids: [productEvent.productId],
|
|
118
|
+
content_name: productEvent.productName,
|
|
119
|
+
content_category: productEvent.event_category,
|
|
120
|
+
value: productEvent.price,
|
|
121
|
+
currency: productEvent.currency || "INR"
|
|
122
|
+
};
|
|
123
|
+
break;
|
|
124
|
+
case "add_to_cart" /* ADD_TO_CART */:
|
|
125
|
+
const cartEvent = event;
|
|
126
|
+
baseEvent.custom_data = {
|
|
127
|
+
content_type: "product_group",
|
|
128
|
+
content_ids: [cartEvent.productId],
|
|
129
|
+
content_name: cartEvent.productName,
|
|
130
|
+
value: cartEvent.price,
|
|
131
|
+
currency: cartEvent.currency || "INR"
|
|
132
|
+
};
|
|
133
|
+
break;
|
|
134
|
+
case "search" /* SEARCH */:
|
|
135
|
+
const searchEvent = event;
|
|
136
|
+
baseEvent.custom_data = {
|
|
137
|
+
search_string: searchEvent.searchTerm,
|
|
138
|
+
content_category: "product",
|
|
139
|
+
content_ids: searchEvent.content_ids || []
|
|
140
|
+
};
|
|
141
|
+
break;
|
|
142
|
+
default:
|
|
143
|
+
baseEvent.custom_data = {};
|
|
144
|
+
break;
|
|
145
|
+
}
|
|
146
|
+
return baseEvent;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Map internal event types to Facebook event names (matching PixelAdapter)
|
|
150
|
+
*/
|
|
151
|
+
mapEventName(eventType) {
|
|
152
|
+
const eventMap = {
|
|
153
|
+
["page_view" /* PAGE_VIEW */]: "PageView",
|
|
154
|
+
["product_view" /* PRODUCT_VIEW */]: "ViewContent",
|
|
155
|
+
["add_to_cart" /* ADD_TO_CART */]: "AddToCart",
|
|
156
|
+
["search" /* SEARCH */]: "Search"
|
|
157
|
+
};
|
|
158
|
+
return eventMap[eventType] || "CustomEvent";
|
|
159
|
+
}
|
|
160
|
+
};
|
|
161
|
+
function createFacebookCAPIService(config) {
|
|
162
|
+
const accessToken = config?.accessToken || process.env.FACEBOOK_CAPI_ACCESS_TOKEN;
|
|
163
|
+
const pixelId = config?.pixelId || process.env.NEXT_PUBLIC_PIXEL_ID;
|
|
164
|
+
const testEventCode = config?.testEventCode || process.env.FACEBOOK_TEST_EVENT_CODE;
|
|
165
|
+
if (!accessToken || !pixelId) {
|
|
166
|
+
console.warn("Facebook CAPI: Missing access token or pixel ID");
|
|
167
|
+
return null;
|
|
168
|
+
}
|
|
169
|
+
return new FacebookCAPIService({
|
|
170
|
+
accessToken,
|
|
171
|
+
pixelId,
|
|
172
|
+
testEventCode
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
176
|
+
0 && (module.exports = {
|
|
177
|
+
FacebookCAPIService,
|
|
178
|
+
createFacebookCAPIService
|
|
179
|
+
});
|
|
180
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/services/facebook-capi.ts"],"sourcesContent":["import {\n TEvent,\n EventType,\n type IAddToCartEvent,\n type IProductViewEvent,\n type ISearchEvent,\n} from \"../types\";\n\n/**\n * Facebook CAPI Configuration\n */\nexport interface FacebookCAPIConfig {\n accessToken: string;\n pixelId: string;\n testEventCode?: string;\n}\n\n/**\n * Facebook CAPI Event Data Structure\n */\ninterface FacebookCAPIEvent {\n event_name: string;\n event_time: number;\n event_id?: string;\n user_data?: {\n client_ip_address?: string;\n client_user_agent?: string;\n fbc?: string;\n fbp?: string;\n };\n custom_data?: {\n currency?: string;\n value?: number;\n content_ids?: string[];\n content_type?: string;\n content_name?: string;\n content_category?: string;\n search_string?: string;\n [key: string]: any;\n };\n action_source: string;\n}\n\n/**\n * Facebook CAPI Service for server-side event tracking\n * Only handles events that are implemented in PixelAdapter\n */\nexport class FacebookCAPIService {\n private config: FacebookCAPIConfig;\n private baseUrl = \"https://graph.facebook.com/v18.0\";\n\n constructor(config: FacebookCAPIConfig) {\n this.config = config;\n }\n\n /**\n * Send events to Facebook CAPI\n */\n public async sendEvents(\n events: TEvent[],\n userInfo?: {\n clientIpAddress?: string;\n clientUserAgent?: string;\n fbc?: string;\n fbp?: string;\n }\n ): Promise<void> {\n if (!this.config.accessToken || !this.config.pixelId) {\n console.warn(\"Facebook CAPI: Missing access token or pixel ID\");\n return;\n }\n\n // Filter events to only supported ones\n const supportedEvents = events.filter((event) =>\n this.isSupportedEvent(event.type)\n );\n\n if (supportedEvents.length === 0) {\n console.log(\"Facebook CAPI: No supported events to send\");\n return;\n }\n\n const capiEvents = supportedEvents.map((event) =>\n this.convertToFacebookEvent(event, userInfo)\n );\n\n const payload = {\n data: capiEvents,\n test_event_code: this.config.testEventCode,\n };\n\n try {\n const response = await fetch(\n `${this.baseUrl}/${this.config.pixelId}/events?access_token=${this.config.accessToken}`,\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(payload),\n }\n );\n\n if (!response.ok) {\n const errorData = await response.json();\n console.error(\"Facebook CAPI Error:\", errorData);\n throw new Error(`Facebook CAPI request failed: ${response.status}`);\n }\n\n const result = await response.json();\n console.log(\"Facebook CAPI: Events sent successfully\", {\n events_received: result.events_received,\n messages: result.messages,\n });\n } catch (error) {\n console.error(\"Facebook CAPI: Failed to send events\", error);\n throw error;\n }\n }\n\n /**\n * Check if event type is supported (matches PixelAdapter implementation)\n */\n private isSupportedEvent(eventType: EventType): boolean {\n return [\n EventType.PAGE_VIEW,\n EventType.PRODUCT_VIEW,\n EventType.ADD_TO_CART,\n EventType.SEARCH,\n ].includes(eventType);\n }\n\n /**\n * Convert internal event to Facebook CAPI event format\n * Only handles events implemented in PixelAdapter\n */\n private convertToFacebookEvent(\n event: TEvent,\n userInfo?: {\n clientIpAddress?: string;\n clientUserAgent?: string;\n fbc?: string;\n fbp?: string;\n }\n ): FacebookCAPIEvent {\n const baseEvent: FacebookCAPIEvent = {\n event_name: this.mapEventName(event.type),\n event_time: Math.floor((event.timestamp || Date.now()) / 1000),\n event_id: event.eventId,\n action_source: \"website\",\n user_data: userInfo\n ? {\n client_ip_address: userInfo.clientIpAddress,\n client_user_agent: userInfo.clientUserAgent,\n fbc: userInfo.fbc,\n fbp: userInfo.fbp,\n }\n : undefined,\n };\n\n // Add custom data based on event type (matching PixelAdapter logic)\n switch (event.type) {\n case EventType.PAGE_VIEW:\n baseEvent.custom_data = {};\n break;\n\n case EventType.PRODUCT_VIEW:\n const productEvent = event as IProductViewEvent;\n baseEvent.custom_data = {\n content_type: \"product_group\",\n content_ids: [productEvent.productId],\n content_name: productEvent.productName,\n content_category: productEvent.event_category,\n value: productEvent.price,\n currency: productEvent.currency || \"INR\",\n };\n break;\n\n case EventType.ADD_TO_CART:\n const cartEvent = event as IAddToCartEvent;\n baseEvent.custom_data = {\n content_type: \"product_group\",\n content_ids: [cartEvent.productId],\n content_name: cartEvent.productName,\n value: cartEvent.price,\n currency: cartEvent.currency || \"INR\",\n };\n break;\n\n case EventType.SEARCH:\n const searchEvent = event as ISearchEvent;\n baseEvent.custom_data = {\n search_string: searchEvent.searchTerm,\n content_category: \"product\",\n content_ids: searchEvent.content_ids || [],\n };\n break;\n\n default:\n baseEvent.custom_data = {};\n break;\n }\n\n return baseEvent;\n }\n\n /**\n * Map internal event types to Facebook event names (matching PixelAdapter)\n */\n private mapEventName(eventType: EventType): string {\n const eventMap: Record<EventType, string> = {\n [EventType.PAGE_VIEW]: \"PageView\",\n [EventType.PRODUCT_VIEW]: \"ViewContent\",\n [EventType.ADD_TO_CART]: \"AddToCart\",\n [EventType.SEARCH]: \"Search\",\n } as Record<EventType, string>;\n\n return eventMap[eventType] || \"CustomEvent\";\n }\n}\n\n/**\n * Create Facebook CAPI service instance\n */\nexport function createFacebookCAPIService(config?: {\n accessToken: string;\n pixelId: string;\n testEventCode?: string;\n}): FacebookCAPIService | null {\n const accessToken =\n config?.accessToken || process.env.FACEBOOK_CAPI_ACCESS_TOKEN;\n const pixelId = config?.pixelId || process.env.NEXT_PUBLIC_PIXEL_ID;\n const testEventCode =\n config?.testEventCode || process.env.FACEBOOK_TEST_EVENT_CODE;\n\n if (!accessToken || !pixelId) {\n console.warn(\"Facebook CAPI: Missing access token or pixel ID\");\n return null;\n }\n\n return new FacebookCAPIService({\n accessToken,\n pixelId,\n testEventCode,\n });\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
package/dist/types.d.mts
CHANGED
|
@@ -289,7 +289,7 @@ interface IViewedProductEvent extends BaseEvent {
|
|
|
289
289
|
productName: string;
|
|
290
290
|
price: number;
|
|
291
291
|
currency: string;
|
|
292
|
-
viewDuration
|
|
292
|
+
viewDuration?: number;
|
|
293
293
|
}
|
|
294
294
|
interface IPCollectionViewEvent extends BaseEvent {
|
|
295
295
|
type: EventType.COLLECTION_VIEW;
|
package/dist/types.d.ts
CHANGED
|
@@ -289,7 +289,7 @@ interface IViewedProductEvent extends BaseEvent {
|
|
|
289
289
|
productName: string;
|
|
290
290
|
price: number;
|
|
291
291
|
currency: string;
|
|
292
|
-
viewDuration
|
|
292
|
+
viewDuration?: number;
|
|
293
293
|
}
|
|
294
294
|
interface IPCollectionViewEvent extends BaseEvent {
|
|
295
295
|
type: EventType.COLLECTION_VIEW;
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/types.ts"],"sourcesContent":["/**\n * Event types that can be tracked across the application\n */\nexport enum EventType {\n PRODUCT_VIEW = \"product_view\",\n PAGE_VIEW = \"page_view\",\n BUTTON_CLICK = \"button_click\",\n FORM_SUBMISSION = \"form_submission\",\n VIEW_ITEM = \"view_item\",\n VIEWED_PRODUCT = \"viewed_product\",\n CHECKOUT_PAYMENT = \"checkout_payment\",\n COLLECTION_VIEW = \"collection_view\",\n ADD_TO_CART = \"add_to_cart\",\n REMOVE_FROM_CART = \"remove_from_cart\",\n CHECKOUT_STARTED = \"checkout_started\",\n CHECKOUT_COMPLETED = \"checkout_completed\",\n SEARCH = \"search\",\n USER_SIGNUP = \"user_signup\",\n USER_LOGIN = \"user_login\",\n CUSTOM = \"custom\",\n USER_ENGAGEMENT = \"user_engagement\",\n SESSION_START = \"session_start\",\n FIRST_VISIT = \"first_visit\",\n SCROLL = \"scroll\",\n FORM_START = \"form_start\",\n ADD_PAYMENT_INFO = \"add_payment_info\",\n CART_VIEWED = \"cart_viewed\",\n VIEW_CONTENT = \"view_content\",\n PURCHASE = \"purchase\",\n VIEW_SEARCH_RESULTS = \"view_search_results\",\n ORDER_PLACED = \"order_placed\",\n BEGIN_CHECKOUT = \"begin_checkout\",\n\n // GoKwik Checkout events (actually used)\n STARTED_CHECKOUT_GK = \"started_checkout_gk\",\n MOBILE_ADDED_GK = \"mobile_added_gk\",\n ADDRESS_SELECTED_GK = \"address_selected_gk\",\n ADDRESS_COMPLETED_GK = \"address_completed_gk\",\n PAYMENT_METHOD_SELECTED_GK = \"payment_method_selected_gk\",\n PAYMENT_COMPLETED_GK = \"payment_completed_gk\",\n ORDER_SUCCESS = \"order_success\",\n ORDER_COMPLETED = \"order_completed\",\n PIN_CODE_ADDED_GK = \"pin_code_added_gk\",\n ADDRESS_ADDED_GK = \"address_added_gk\",\n}\n\n/**\n * Base event interface that all events should implement\n */\nexport interface BaseEvent {\n type: EventType;\n timestamp?: number;\n eventId?: string;\n event_category?: string;\n description?: string;\n [key: string]: any;\n}\n\n/**\n * Page view event\n */\nexport interface IPageViewEvent extends BaseEvent {\n type: EventType.PAGE_VIEW;\n path: string;\n title: string;\n referrer?: string;\n // GA4 specific parameters\n batch_ordering_id?: string;\n batch_page_id?: string;\n campaign?: string;\n campaign_id?: string;\n content?: string;\n debug_mode?: boolean;\n engagement_time_msec?: number;\n entrances?: number;\n ga_session_id?: string;\n ga_session_number?: number;\n gclid?: string;\n ignore_referrer?: boolean;\n medium?: string;\n page_location?: string;\n page_path?: string;\n page_referrer?: string;\n page_title?: string;\n page_source?: string;\n page_term?: string;\n user_id?: string;\n user_properties?: Record<string, any>;\n session_engaged?: boolean;\n}\n\n/**\n * User engagement event\n */\nexport interface IUserEngagementEvent extends BaseEvent {\n type: EventType.USER_ENGAGEMENT;\n engagementTime?: number; // in seconds\n pagePath?: string;\n pageTitle?: string;\n scrollDepth?: number; // in percentage\n formId?: string;\n formName?: string;\n formFields?: Array<{\n fieldName: string;\n fieldValue: string;\n }>;\n buttonId?: string;\n buttonText?: string;\n location?: string;\n customProperties?: Record<string, any>;\n // GA4 specific parameters\n batch_ordering_id?: string;\n batch_page_id?: string;\n campaign?: string;\n ga_session_id?: string;\n ga_session_number?: number;\n gclid?: string;\n ignore_referrer?: boolean;\n medium?: string;\n page_location?: string;\n page_path?: string;\n page_referrer?: string;\n page_title?: string;\n source?: string;\n srsltid?: string;\n term?: string;\n user_id?: string;\n user_properties?: Record<string, any>;\n session_engaged?: boolean;\n}\n\n/**\n * Session start event\n */\nexport interface ISessionStartEvent extends BaseEvent {\n type: EventType.SESSION_START;\n sessionId: string;\n userId?: string;\n userAgent?: string;\n referrer?: string;\n pagePath: string;\n pageTitle: string;\n timestamp: number;\n customProperties?: Record<string, any>;\n}\n\n/**\n * First visit event\n */\nexport interface IFirstVisitEvent extends BaseEvent {\n type: EventType.FIRST_VISIT;\n userId?: string;\n userAgent?: string;\n referrer?: string;\n pagePath: string;\n pageTitle: string;\n timestamp: number;\n customProperties?: Record<string, any>;\n}\n\n/**\n * Scroll event\n */\nexport interface IScrollEvent extends BaseEvent {\n type: EventType.SCROLL;\n scrollDepth: number; // in percentage\n pagePath: string;\n pageTitle: string;\n timestamp: number;\n customProperties?: Record<string, any>;\n // GA4 specific parameters\n batch_ordering_id?: string;\n batch_page_id?: string;\n engagement_time_msec?: number;\n ga_session_id?: string;\n ga_session_number?: number;\n ignore_referrer?: boolean;\n page_location?: string;\n page_referrer?: string;\n page_title?: string;\n percent_scrolled?: number;\n}\n\n/**\n * Form start event\n */\nexport interface IFormStartEvent extends BaseEvent {\n type: EventType.FORM_START;\n formId: string;\n formName?: string;\n pagePath: string;\n pageTitle: string;\n timestamp: number;\n customProperties?: Record<string, any>;\n}\n\n/**\n * Form submission event\n */\nexport interface IFormSubmissionEvent extends BaseEvent {\n type: EventType.FORM_SUBMISSION;\n formId: string;\n formName?: string;\n success: boolean;\n pagePath: string;\n pageTitle: string;\n timestamp: number;\n customProperties?: Record<string, any>;\n}\n\n/**\n * User signup event\n */\nexport interface IUserSignupEvent extends BaseEvent {\n type: EventType.USER_SIGNUP;\n userId?: string;\n method?: string;\n success: boolean;\n pagePath: string;\n pageTitle: string;\n timestamp: number;\n customProperties?: Record<string, any>;\n}\n\n/**\n * User login event\n */\nexport interface IUserLoginEvent extends BaseEvent {\n type: EventType.USER_LOGIN;\n userId?: string;\n method?: string;\n success: boolean;\n pagePath: string;\n pageTitle: string;\n timestamp: number;\n customProperties?: Record<string, any>;\n}\n\n/**\n * Button click event\n */\nexport interface IButtonClickEvent extends BaseEvent {\n type: EventType.BUTTON_CLICK;\n buttonId?: string;\n buttonText?: string;\n location: string;\n}\n\n/**\n * View item event for e-commerce tracking\n */\nexport interface IViewItemEvent extends BaseEvent {\n type: EventType.VIEW_ITEM;\n currency: string;\n value: number;\n items: Array<{\n item_id: string;\n item_name: string;\n price: number;\n currency: string;\n }>;\n // GA4 specific parameters\n batch_ordering_id?: string;\n batch_page_id?: string;\n campaign?: string;\n ecomm_pagetype?: string;\n ecomm_prodid?: string;\n ecomm_totalvalue?: number;\n engagement_time_msec?: number;\n ga_session_id?: string;\n ga_session_number?: number;\n gclid?: string;\n ignore_referrer?: boolean;\n medium?: string;\n page_location?: string;\n page_path?: string;\n page_referrer?: string;\n page_title?: string;\n source?: string;\n srsltid?: string;\n term?: string;\n user_id?: string;\n user_properties?: Record<string, any>;\n session_engaged?: boolean;\n}\n\n/**\n * Checkout payment event\n */\nexport interface ICheckoutPaymentEvent extends BaseEvent {\n type: EventType.CHECKOUT_PAYMENT;\n cartValue: number;\n currency: string;\n itemCount: number;\n items: Array<{\n productId: string;\n productName: string;\n price: number;\n quantity: number;\n }>;\n}\n\n/**\n * Viewed product event after 20 seconds\n */\nexport interface IViewedProductEvent extends BaseEvent {\n type: EventType.VIEWED_PRODUCT;\n productId: string;\n productName: string;\n price: number;\n currency: string;\n viewDuration: number;\n}\n\nexport interface IPCollectionViewEvent extends BaseEvent {\n type: EventType.COLLECTION_VIEW;\n productId: string;\n productName: string;\n price?: number;\n currency?: string;\n category?: string;\n}\n\n/**\n * Add to cart event\n */\nexport interface IAddToCartEvent extends BaseEvent {\n type: EventType.ADD_TO_CART;\n productId: string;\n productName: string;\n price: number;\n currency?: string;\n quantity?: number;\n variant?: string;\n // GA4 specific parameters\n batch_ordering_id?: string;\n batch_page_id?: string;\n ecomm_pagetype?: string;\n ecomm_prodid?: string;\n ecomm_totalvalue?: number;\n value?: number;\n engagement_time_msec?: number;\n ga_session_id?: string;\n ga_session_number?: number;\n ignore_referrer?: boolean;\n page_location?: string;\n page_referrer?: string;\n page_title?: string;\n user_id?: string;\n user_properties?: Record<string, any>;\n session_engaged?: boolean;\n}\n\n/**\n * Remove from cart event\n */\nexport interface IRemoveFromCartEvent extends BaseEvent {\n type: EventType.REMOVE_FROM_CART;\n productId: string;\n productName: string;\n price: number;\n currency?: string;\n quantity: number;\n variant?: string;\n}\n\n/**\n * Checkout started event\n */\nexport interface ICheckoutStartedEvent extends BaseEvent {\n type: EventType.CHECKOUT_STARTED;\n cartValue: number;\n currency?: string;\n itemCount: number;\n items: Array<{\n productId: string;\n productName: string;\n price: number;\n quantity: number;\n variant?: string;\n }>;\n coupon?: string;\n discount?: number | string;\n}\n\n/**\n * Checkout completed event\n */\nexport interface ICheckoutCompletedEvent extends BaseEvent {\n type: EventType.CHECKOUT_COMPLETED;\n orderId: string;\n cartValue: number;\n currency?: string;\n itemCount: number;\n items: Array<{\n productId: string;\n productName: string;\n price: number;\n quantity: number;\n variant?: string;\n }>;\n}\n\n/**\n * Cart viewed event\n */\nexport interface ICartViewedEvent extends BaseEvent {\n type: EventType.CART_VIEWED;\n cartId: string;\n products: Array<{\n variantId: string;\n price: number;\n quantity: number;\n }>;\n}\n\n/**\n * Search event\n */\nexport interface ISearchEvent extends BaseEvent {\n type: EventType.SEARCH;\n searchTerm: string;\n content_ids: string[];\n resultsCount?: number;\n}\n\n/**\n * View content event (for Facebook Pixel ViewContent)\n */\nexport interface IViewContentEvent extends BaseEvent {\n type: EventType.VIEW_CONTENT;\n content_type?: string;\n content_ids?: string[];\n content_name?: string;\n content_category?: string;\n value?: number;\n currency?: string;\n items?: Array<any>;\n // GA4 specific parameters\n batch_ordering_id?: string;\n batch_page_id?: string;\n campaign?: string;\n ga_session_id?: string;\n engagement_time_msec?: number;\n session_engaged?: boolean;\n page_title?: string;\n page_location?: string;\n page_referrer?: string;\n user_id?: string;\n user_properties?: Record<string, any>;\n}\n\n/**\n * Purchase event (for Facebook Pixel Purchase)\n */\nexport interface IPurchaseEvent extends BaseEvent {\n type: EventType.PURCHASE;\n value: number;\n currency?: string;\n content_type?: string;\n content_ids?: string[];\n num_items?: number;\n contents?: Array<{\n id: string;\n quantity: number;\n item_price?: number;\n }>;\n transaction_id?: string;\n coupon?: string;\n shipping?: number;\n tax?: number;\n items?: Array<any>;\n // GA4 specific parameters\n batch_ordering_id?: string;\n batch_page_id?: string;\n campaign?: string;\n ga_session_id?: string;\n engagement_time_msec?: number;\n session_engaged?: boolean;\n page_title?: string;\n page_location?: string;\n page_referrer?: string;\n user_id?: string;\n user_properties?: Record<string, any>;\n}\n\n/**\n * View search results event (for GA4)\n */\nexport interface IViewSearchResultsEvent extends BaseEvent {\n type: EventType.VIEW_SEARCH_RESULTS;\n search_term?: string;\n // GA4 specific parameters\n batch_ordering_id?: string;\n batch_page_id?: string;\n campaign?: string;\n campaign_id?: string;\n content?: string;\n ga_session_id?: string;\n ga_session_number?: number;\n gclid?: string;\n medium?: string;\n page_location?: string;\n page_path?: string;\n page_referrer?: string;\n page_title?: string;\n source?: string;\n srsltid?: string;\n term?: string;\n user_id?: string;\n user_properties?: Record<string, any>;\n session_engaged?: boolean;\n engagement_time_msec?: number;\n}\n\n/**\n * Order placed event (for GA4)\n */\nexport interface IOrderPlacedEvent extends BaseEvent {\n type: EventType.ORDER_PLACED;\n transaction_id?: string;\n order_id?: string;\n total_amount?: number;\n value: number;\n currency?: string;\n items?: Array<any>;\n // GA4 specific parameters\n batch_ordering_id?: string;\n batch_page_id?: string;\n coupon?: string;\n discount?: number;\n engagement_time_msec?: number;\n ga_session_id?: string;\n ga_session_number?: number;\n ignore_referrer?: boolean;\n page_location?: string;\n page_referrer?: string;\n page_title?: string;\n payment_type?: string;\n shipping?: number;\n shipping_name?: string;\n tax?: number;\n user_id?: string;\n user_properties?: Record<string, any>;\n session_engaged?: boolean;\n}\n\n/**\n * Begin checkout event (for GA4)\n */\nexport interface IBeginCheckoutEvent extends BaseEvent {\n type: EventType.BEGIN_CHECKOUT;\n currency?: string;\n value: number;\n coupon?: string;\n items?: Array<any>;\n // GA4 specific parameters\n batch_ordering_id?: string;\n batch_page_id?: string;\n ecomm_pagetype?: string;\n ecomm_prodid?: string;\n ecomm_totalvalue?: number;\n engagement_time_msec?: number;\n ga_session_id?: string;\n ga_session_number?: number;\n ignore_referrer?: boolean;\n page_location?: string;\n page_referrer?: string;\n page_title?: string;\n user_id?: string;\n user_properties?: Record<string, any>;\n session_engaged?: boolean;\n}\n\n/**\n * Custom event for any other tracking needs\n */\nexport interface ICustomEvent extends BaseEvent {\n type: EventType.CUSTOM;\n name: string;\n properties?: Record<string, any>;\n}\n\n/**\n * Add Payment Info event\n */\nexport interface IAddPaymentInfoEvent extends BaseEvent {\n type: EventType.ADD_PAYMENT_INFO;\n cartValue: number;\n currency?: string;\n itemCount: number;\n paymentType?: string;\n items: Array<{\n productId: string;\n productName: string;\n price: number;\n quantity: number;\n variant?: string;\n }>;\n}\n\n/**\n * Started checkout GK event\n */\nexport interface IStartedCheckoutGKEvent extends BaseEvent {\n type: EventType.STARTED_CHECKOUT_GK;\n cartValue?: number;\n currency?: string;\n}\n\n/**\n * Mobile added GK event\n */\nexport interface IMobileAddedGKEvent extends BaseEvent {\n type: EventType.MOBILE_ADDED_GK;\n mobile?: string;\n}\n\n/**\n * Address selected GK event\n */\nexport interface IAddressSelectedGKEvent extends BaseEvent {\n type: EventType.ADDRESS_SELECTED_GK;\n addressId?: string;\n}\n\n/**\n * Address completed GK event\n */\nexport interface IAddressCompletedGKEvent extends BaseEvent {\n type: EventType.ADDRESS_COMPLETED_GK;\n addressId?: string;\n}\n\n/**\n * Payment method selected GK event\n */\nexport interface IPaymentMethodSelectedGKEvent extends BaseEvent {\n type: EventType.PAYMENT_METHOD_SELECTED_GK;\n paymentMethod?: string;\n}\n\n/**\n * Payment completed GK event\n */\nexport interface IPaymentCompletedGKEvent extends BaseEvent {\n type: EventType.PAYMENT_COMPLETED_GK;\n amount?: number;\n currency?: string;\n}\n\n/**\n * Order success event\n */\nexport interface IOrderSuccessEvent extends BaseEvent {\n type: EventType.ORDER_SUCCESS;\n orderId?: string;\n amount?: number;\n currency?: string;\n}\n\n/**\n * Order completed event\n */\nexport interface IOrderCompletedEvent extends BaseEvent {\n type: EventType.ORDER_COMPLETED;\n orderId?: string;\n amount?: number;\n currency?: string;\n}\n\n/**\n * PIN code added GK event\n */\nexport interface IPinCodeAddedGKEvent extends BaseEvent {\n type: EventType.PIN_CODE_ADDED_GK;\n pinCode?: string;\n}\n\n/**\n * Address added GK event\n */\nexport interface IAddressAddedGKEvent extends BaseEvent {\n type: EventType.ADDRESS_ADDED_GK;\n addressId?: string;\n}\n\n/**\n * Product view event\n */\nexport interface IProductViewEvent extends BaseEvent {\n type: EventType.PRODUCT_VIEW;\n event_category: string;\n description: string;\n productId: string;\n productName: string;\n price: number;\n currency?: string;\n category?: string;\n}\n\n/**\n * Union type of all possible events\n */\nexport type TEvent =\n | IProductViewEvent\n | IPageViewEvent\n | IButtonClickEvent\n | IFormSubmissionEvent\n | IViewItemEvent\n | IPCollectionViewEvent\n | IAddToCartEvent\n | IRemoveFromCartEvent\n | ICheckoutStartedEvent\n | ICheckoutCompletedEvent\n | ICartViewedEvent\n | ISearchEvent\n | IUserSignupEvent\n | IUserLoginEvent\n | IViewContentEvent\n | IPurchaseEvent\n | IViewSearchResultsEvent\n | IOrderPlacedEvent\n | IBeginCheckoutEvent\n | ICustomEvent\n | IUserEngagementEvent\n | ISessionStartEvent\n | IFirstVisitEvent\n | IScrollEvent\n | IFormStartEvent\n | IAddPaymentInfoEvent\n | IStartedCheckoutGKEvent\n | IMobileAddedGKEvent\n | IAddressSelectedGKEvent\n | IAddressCompletedGKEvent\n | IPaymentMethodSelectedGKEvent\n | IPaymentCompletedGKEvent\n | IOrderSuccessEvent\n | IOrderCompletedEvent\n | IPinCodeAddedGKEvent\n | IAddressAddedGKEvent\n | IViewedProductEvent\n | ICheckoutPaymentEvent;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGO,IAAK,YAAL,kBAAKA,eAAL;AACL,EAAAA,WAAA,kBAAe;AACf,EAAAA,WAAA,eAAY;AACZ,EAAAA,WAAA,kBAAe;AACf,EAAAA,WAAA,qBAAkB;AAClB,EAAAA,WAAA,eAAY;AACZ,EAAAA,WAAA,oBAAiB;AACjB,EAAAA,WAAA,sBAAmB;AACnB,EAAAA,WAAA,qBAAkB;AAClB,EAAAA,WAAA,iBAAc;AACd,EAAAA,WAAA,sBAAmB;AACnB,EAAAA,WAAA,sBAAmB;AACnB,EAAAA,WAAA,wBAAqB;AACrB,EAAAA,WAAA,YAAS;AACT,EAAAA,WAAA,iBAAc;AACd,EAAAA,WAAA,gBAAa;AACb,EAAAA,WAAA,YAAS;AACT,EAAAA,WAAA,qBAAkB;AAClB,EAAAA,WAAA,mBAAgB;AAChB,EAAAA,WAAA,iBAAc;AACd,EAAAA,WAAA,YAAS;AACT,EAAAA,WAAA,gBAAa;AACb,EAAAA,WAAA,sBAAmB;AACnB,EAAAA,WAAA,iBAAc;AACd,EAAAA,WAAA,kBAAe;AACf,EAAAA,WAAA,cAAW;AACX,EAAAA,WAAA,yBAAsB;AACtB,EAAAA,WAAA,kBAAe;AACf,EAAAA,WAAA,oBAAiB;AAGjB,EAAAA,WAAA,yBAAsB;AACtB,EAAAA,WAAA,qBAAkB;AAClB,EAAAA,WAAA,yBAAsB;AACtB,EAAAA,WAAA,0BAAuB;AACvB,EAAAA,WAAA,gCAA6B;AAC7B,EAAAA,WAAA,0BAAuB;AACvB,EAAAA,WAAA,mBAAgB;AAChB,EAAAA,WAAA,qBAAkB;AAClB,EAAAA,WAAA,uBAAoB;AACpB,EAAAA,WAAA,sBAAmB;AAxCT,SAAAA;AAAA,GAAA;","names":["EventType"]}
|
|
1
|
+
{"version":3,"sources":["../src/types.ts"],"sourcesContent":["/**\n * Event types that can be tracked across the application\n */\nexport enum EventType {\n PRODUCT_VIEW = \"product_view\",\n PAGE_VIEW = \"page_view\",\n BUTTON_CLICK = \"button_click\",\n FORM_SUBMISSION = \"form_submission\",\n VIEW_ITEM = \"view_item\",\n VIEWED_PRODUCT = \"viewed_product\",\n CHECKOUT_PAYMENT = \"checkout_payment\",\n COLLECTION_VIEW = \"collection_view\",\n ADD_TO_CART = \"add_to_cart\",\n REMOVE_FROM_CART = \"remove_from_cart\",\n CHECKOUT_STARTED = \"checkout_started\",\n CHECKOUT_COMPLETED = \"checkout_completed\",\n SEARCH = \"search\",\n USER_SIGNUP = \"user_signup\",\n USER_LOGIN = \"user_login\",\n CUSTOM = \"custom\",\n USER_ENGAGEMENT = \"user_engagement\",\n SESSION_START = \"session_start\",\n FIRST_VISIT = \"first_visit\",\n SCROLL = \"scroll\",\n FORM_START = \"form_start\",\n ADD_PAYMENT_INFO = \"add_payment_info\",\n CART_VIEWED = \"cart_viewed\",\n VIEW_CONTENT = \"view_content\",\n PURCHASE = \"purchase\",\n VIEW_SEARCH_RESULTS = \"view_search_results\",\n ORDER_PLACED = \"order_placed\",\n BEGIN_CHECKOUT = \"begin_checkout\",\n\n // GoKwik Checkout events (actually used)\n STARTED_CHECKOUT_GK = \"started_checkout_gk\",\n MOBILE_ADDED_GK = \"mobile_added_gk\",\n ADDRESS_SELECTED_GK = \"address_selected_gk\",\n ADDRESS_COMPLETED_GK = \"address_completed_gk\",\n PAYMENT_METHOD_SELECTED_GK = \"payment_method_selected_gk\",\n PAYMENT_COMPLETED_GK = \"payment_completed_gk\",\n ORDER_SUCCESS = \"order_success\",\n ORDER_COMPLETED = \"order_completed\",\n PIN_CODE_ADDED_GK = \"pin_code_added_gk\",\n ADDRESS_ADDED_GK = \"address_added_gk\",\n}\n\n/**\n * Base event interface that all events should implement\n */\nexport interface BaseEvent {\n type: EventType;\n timestamp?: number;\n eventId?: string;\n event_category?: string;\n description?: string;\n [key: string]: any;\n}\n\n/**\n * Page view event\n */\nexport interface IPageViewEvent extends BaseEvent {\n type: EventType.PAGE_VIEW;\n path: string;\n title: string;\n referrer?: string;\n // GA4 specific parameters\n batch_ordering_id?: string;\n batch_page_id?: string;\n campaign?: string;\n campaign_id?: string;\n content?: string;\n debug_mode?: boolean;\n engagement_time_msec?: number;\n entrances?: number;\n ga_session_id?: string;\n ga_session_number?: number;\n gclid?: string;\n ignore_referrer?: boolean;\n medium?: string;\n page_location?: string;\n page_path?: string;\n page_referrer?: string;\n page_title?: string;\n page_source?: string;\n page_term?: string;\n user_id?: string;\n user_properties?: Record<string, any>;\n session_engaged?: boolean;\n}\n\n/**\n * User engagement event\n */\nexport interface IUserEngagementEvent extends BaseEvent {\n type: EventType.USER_ENGAGEMENT;\n engagementTime?: number; // in seconds\n pagePath?: string;\n pageTitle?: string;\n scrollDepth?: number; // in percentage\n formId?: string;\n formName?: string;\n formFields?: Array<{\n fieldName: string;\n fieldValue: string;\n }>;\n buttonId?: string;\n buttonText?: string;\n location?: string;\n customProperties?: Record<string, any>;\n // GA4 specific parameters\n batch_ordering_id?: string;\n batch_page_id?: string;\n campaign?: string;\n ga_session_id?: string;\n ga_session_number?: number;\n gclid?: string;\n ignore_referrer?: boolean;\n medium?: string;\n page_location?: string;\n page_path?: string;\n page_referrer?: string;\n page_title?: string;\n source?: string;\n srsltid?: string;\n term?: string;\n user_id?: string;\n user_properties?: Record<string, any>;\n session_engaged?: boolean;\n}\n\n/**\n * Session start event\n */\nexport interface ISessionStartEvent extends BaseEvent {\n type: EventType.SESSION_START;\n sessionId: string;\n userId?: string;\n userAgent?: string;\n referrer?: string;\n pagePath: string;\n pageTitle: string;\n timestamp: number;\n customProperties?: Record<string, any>;\n}\n\n/**\n * First visit event\n */\nexport interface IFirstVisitEvent extends BaseEvent {\n type: EventType.FIRST_VISIT;\n userId?: string;\n userAgent?: string;\n referrer?: string;\n pagePath: string;\n pageTitle: string;\n timestamp: number;\n customProperties?: Record<string, any>;\n}\n\n/**\n * Scroll event\n */\nexport interface IScrollEvent extends BaseEvent {\n type: EventType.SCROLL;\n scrollDepth: number; // in percentage\n pagePath: string;\n pageTitle: string;\n timestamp: number;\n customProperties?: Record<string, any>;\n // GA4 specific parameters\n batch_ordering_id?: string;\n batch_page_id?: string;\n engagement_time_msec?: number;\n ga_session_id?: string;\n ga_session_number?: number;\n ignore_referrer?: boolean;\n page_location?: string;\n page_referrer?: string;\n page_title?: string;\n percent_scrolled?: number;\n}\n\n/**\n * Form start event\n */\nexport interface IFormStartEvent extends BaseEvent {\n type: EventType.FORM_START;\n formId: string;\n formName?: string;\n pagePath: string;\n pageTitle: string;\n timestamp: number;\n customProperties?: Record<string, any>;\n}\n\n/**\n * Form submission event\n */\nexport interface IFormSubmissionEvent extends BaseEvent {\n type: EventType.FORM_SUBMISSION;\n formId: string;\n formName?: string;\n success: boolean;\n pagePath: string;\n pageTitle: string;\n timestamp: number;\n customProperties?: Record<string, any>;\n}\n\n/**\n * User signup event\n */\nexport interface IUserSignupEvent extends BaseEvent {\n type: EventType.USER_SIGNUP;\n userId?: string;\n method?: string;\n success: boolean;\n pagePath: string;\n pageTitle: string;\n timestamp: number;\n customProperties?: Record<string, any>;\n}\n\n/**\n * User login event\n */\nexport interface IUserLoginEvent extends BaseEvent {\n type: EventType.USER_LOGIN;\n userId?: string;\n method?: string;\n success: boolean;\n pagePath: string;\n pageTitle: string;\n timestamp: number;\n customProperties?: Record<string, any>;\n}\n\n/**\n * Button click event\n */\nexport interface IButtonClickEvent extends BaseEvent {\n type: EventType.BUTTON_CLICK;\n buttonId?: string;\n buttonText?: string;\n location: string;\n}\n\n/**\n * View item event for e-commerce tracking\n */\nexport interface IViewItemEvent extends BaseEvent {\n type: EventType.VIEW_ITEM;\n currency: string;\n value: number;\n items: Array<{\n item_id: string;\n item_name: string;\n price: number;\n currency: string;\n }>;\n // GA4 specific parameters\n batch_ordering_id?: string;\n batch_page_id?: string;\n campaign?: string;\n ecomm_pagetype?: string;\n ecomm_prodid?: string;\n ecomm_totalvalue?: number;\n engagement_time_msec?: number;\n ga_session_id?: string;\n ga_session_number?: number;\n gclid?: string;\n ignore_referrer?: boolean;\n medium?: string;\n page_location?: string;\n page_path?: string;\n page_referrer?: string;\n page_title?: string;\n source?: string;\n srsltid?: string;\n term?: string;\n user_id?: string;\n user_properties?: Record<string, any>;\n session_engaged?: boolean;\n}\n\n/**\n * Checkout payment event\n */\nexport interface ICheckoutPaymentEvent extends BaseEvent {\n type: EventType.CHECKOUT_PAYMENT;\n cartValue: number;\n currency: string;\n itemCount: number;\n items: Array<{\n productId: string;\n productName: string;\n price: number;\n quantity: number;\n }>;\n}\n\n/**\n * Viewed product event after 20 seconds\n */\nexport interface IViewedProductEvent extends BaseEvent {\n type: EventType.VIEWED_PRODUCT;\n productId: string;\n productName: string;\n price: number;\n currency: string;\n viewDuration?: number;\n}\n\nexport interface IPCollectionViewEvent extends BaseEvent {\n type: EventType.COLLECTION_VIEW;\n productId: string;\n productName: string;\n price?: number;\n currency?: string;\n category?: string;\n}\n\n/**\n * Add to cart event\n */\nexport interface IAddToCartEvent extends BaseEvent {\n type: EventType.ADD_TO_CART;\n productId: string;\n productName: string;\n price: number;\n currency?: string;\n quantity?: number;\n variant?: string;\n // GA4 specific parameters\n batch_ordering_id?: string;\n batch_page_id?: string;\n ecomm_pagetype?: string;\n ecomm_prodid?: string;\n ecomm_totalvalue?: number;\n value?: number;\n engagement_time_msec?: number;\n ga_session_id?: string;\n ga_session_number?: number;\n ignore_referrer?: boolean;\n page_location?: string;\n page_referrer?: string;\n page_title?: string;\n user_id?: string;\n user_properties?: Record<string, any>;\n session_engaged?: boolean;\n}\n\n/**\n * Remove from cart event\n */\nexport interface IRemoveFromCartEvent extends BaseEvent {\n type: EventType.REMOVE_FROM_CART;\n productId: string;\n productName: string;\n price: number;\n currency?: string;\n quantity: number;\n variant?: string;\n}\n\n/**\n * Checkout started event\n */\nexport interface ICheckoutStartedEvent extends BaseEvent {\n type: EventType.CHECKOUT_STARTED;\n cartValue: number;\n currency?: string;\n itemCount: number;\n items: Array<{\n productId: string;\n productName: string;\n price: number;\n quantity: number;\n variant?: string;\n }>;\n coupon?: string;\n discount?: number | string;\n}\n\n/**\n * Checkout completed event\n */\nexport interface ICheckoutCompletedEvent extends BaseEvent {\n type: EventType.CHECKOUT_COMPLETED;\n orderId: string;\n cartValue: number;\n currency?: string;\n itemCount: number;\n items: Array<{\n productId: string;\n productName: string;\n price: number;\n quantity: number;\n variant?: string;\n }>;\n}\n\n/**\n * Cart viewed event\n */\nexport interface ICartViewedEvent extends BaseEvent {\n type: EventType.CART_VIEWED;\n cartId: string;\n products: Array<{\n variantId: string;\n price: number;\n quantity: number;\n }>;\n}\n\n/**\n * Search event\n */\nexport interface ISearchEvent extends BaseEvent {\n type: EventType.SEARCH;\n searchTerm: string;\n content_ids: string[];\n resultsCount?: number;\n}\n\n/**\n * View content event (for Facebook Pixel ViewContent)\n */\nexport interface IViewContentEvent extends BaseEvent {\n type: EventType.VIEW_CONTENT;\n content_type?: string;\n content_ids?: string[];\n content_name?: string;\n content_category?: string;\n value?: number;\n currency?: string;\n items?: Array<any>;\n // GA4 specific parameters\n batch_ordering_id?: string;\n batch_page_id?: string;\n campaign?: string;\n ga_session_id?: string;\n engagement_time_msec?: number;\n session_engaged?: boolean;\n page_title?: string;\n page_location?: string;\n page_referrer?: string;\n user_id?: string;\n user_properties?: Record<string, any>;\n}\n\n/**\n * Purchase event (for Facebook Pixel Purchase)\n */\nexport interface IPurchaseEvent extends BaseEvent {\n type: EventType.PURCHASE;\n value: number;\n currency?: string;\n content_type?: string;\n content_ids?: string[];\n num_items?: number;\n contents?: Array<{\n id: string;\n quantity: number;\n item_price?: number;\n }>;\n transaction_id?: string;\n coupon?: string;\n shipping?: number;\n tax?: number;\n items?: Array<any>;\n // GA4 specific parameters\n batch_ordering_id?: string;\n batch_page_id?: string;\n campaign?: string;\n ga_session_id?: string;\n engagement_time_msec?: number;\n session_engaged?: boolean;\n page_title?: string;\n page_location?: string;\n page_referrer?: string;\n user_id?: string;\n user_properties?: Record<string, any>;\n}\n\n/**\n * View search results event (for GA4)\n */\nexport interface IViewSearchResultsEvent extends BaseEvent {\n type: EventType.VIEW_SEARCH_RESULTS;\n search_term?: string;\n // GA4 specific parameters\n batch_ordering_id?: string;\n batch_page_id?: string;\n campaign?: string;\n campaign_id?: string;\n content?: string;\n ga_session_id?: string;\n ga_session_number?: number;\n gclid?: string;\n medium?: string;\n page_location?: string;\n page_path?: string;\n page_referrer?: string;\n page_title?: string;\n source?: string;\n srsltid?: string;\n term?: string;\n user_id?: string;\n user_properties?: Record<string, any>;\n session_engaged?: boolean;\n engagement_time_msec?: number;\n}\n\n/**\n * Order placed event (for GA4)\n */\nexport interface IOrderPlacedEvent extends BaseEvent {\n type: EventType.ORDER_PLACED;\n transaction_id?: string;\n order_id?: string;\n total_amount?: number;\n value: number;\n currency?: string;\n items?: Array<any>;\n // GA4 specific parameters\n batch_ordering_id?: string;\n batch_page_id?: string;\n coupon?: string;\n discount?: number;\n engagement_time_msec?: number;\n ga_session_id?: string;\n ga_session_number?: number;\n ignore_referrer?: boolean;\n page_location?: string;\n page_referrer?: string;\n page_title?: string;\n payment_type?: string;\n shipping?: number;\n shipping_name?: string;\n tax?: number;\n user_id?: string;\n user_properties?: Record<string, any>;\n session_engaged?: boolean;\n}\n\n/**\n * Begin checkout event (for GA4)\n */\nexport interface IBeginCheckoutEvent extends BaseEvent {\n type: EventType.BEGIN_CHECKOUT;\n currency?: string;\n value: number;\n coupon?: string;\n items?: Array<any>;\n // GA4 specific parameters\n batch_ordering_id?: string;\n batch_page_id?: string;\n ecomm_pagetype?: string;\n ecomm_prodid?: string;\n ecomm_totalvalue?: number;\n engagement_time_msec?: number;\n ga_session_id?: string;\n ga_session_number?: number;\n ignore_referrer?: boolean;\n page_location?: string;\n page_referrer?: string;\n page_title?: string;\n user_id?: string;\n user_properties?: Record<string, any>;\n session_engaged?: boolean;\n}\n\n/**\n * Custom event for any other tracking needs\n */\nexport interface ICustomEvent extends BaseEvent {\n type: EventType.CUSTOM;\n name: string;\n properties?: Record<string, any>;\n}\n\n/**\n * Add Payment Info event\n */\nexport interface IAddPaymentInfoEvent extends BaseEvent {\n type: EventType.ADD_PAYMENT_INFO;\n cartValue: number;\n currency?: string;\n itemCount: number;\n paymentType?: string;\n items: Array<{\n productId: string;\n productName: string;\n price: number;\n quantity: number;\n variant?: string;\n }>;\n}\n\n/**\n * Started checkout GK event\n */\nexport interface IStartedCheckoutGKEvent extends BaseEvent {\n type: EventType.STARTED_CHECKOUT_GK;\n cartValue?: number;\n currency?: string;\n}\n\n/**\n * Mobile added GK event\n */\nexport interface IMobileAddedGKEvent extends BaseEvent {\n type: EventType.MOBILE_ADDED_GK;\n mobile?: string;\n}\n\n/**\n * Address selected GK event\n */\nexport interface IAddressSelectedGKEvent extends BaseEvent {\n type: EventType.ADDRESS_SELECTED_GK;\n addressId?: string;\n}\n\n/**\n * Address completed GK event\n */\nexport interface IAddressCompletedGKEvent extends BaseEvent {\n type: EventType.ADDRESS_COMPLETED_GK;\n addressId?: string;\n}\n\n/**\n * Payment method selected GK event\n */\nexport interface IPaymentMethodSelectedGKEvent extends BaseEvent {\n type: EventType.PAYMENT_METHOD_SELECTED_GK;\n paymentMethod?: string;\n}\n\n/**\n * Payment completed GK event\n */\nexport interface IPaymentCompletedGKEvent extends BaseEvent {\n type: EventType.PAYMENT_COMPLETED_GK;\n amount?: number;\n currency?: string;\n}\n\n/**\n * Order success event\n */\nexport interface IOrderSuccessEvent extends BaseEvent {\n type: EventType.ORDER_SUCCESS;\n orderId?: string;\n amount?: number;\n currency?: string;\n}\n\n/**\n * Order completed event\n */\nexport interface IOrderCompletedEvent extends BaseEvent {\n type: EventType.ORDER_COMPLETED;\n orderId?: string;\n amount?: number;\n currency?: string;\n}\n\n/**\n * PIN code added GK event\n */\nexport interface IPinCodeAddedGKEvent extends BaseEvent {\n type: EventType.PIN_CODE_ADDED_GK;\n pinCode?: string;\n}\n\n/**\n * Address added GK event\n */\nexport interface IAddressAddedGKEvent extends BaseEvent {\n type: EventType.ADDRESS_ADDED_GK;\n addressId?: string;\n}\n\n/**\n * Product view event\n */\nexport interface IProductViewEvent extends BaseEvent {\n type: EventType.PRODUCT_VIEW;\n event_category: string;\n description: string;\n productId: string;\n productName: string;\n price: number;\n currency?: string;\n category?: string;\n}\n\n/**\n * Union type of all possible events\n */\nexport type TEvent =\n | IProductViewEvent\n | IPageViewEvent\n | IButtonClickEvent\n | IFormSubmissionEvent\n | IViewItemEvent\n | IPCollectionViewEvent\n | IAddToCartEvent\n | IRemoveFromCartEvent\n | ICheckoutStartedEvent\n | ICheckoutCompletedEvent\n | ICartViewedEvent\n | ISearchEvent\n | IUserSignupEvent\n | IUserLoginEvent\n | IViewContentEvent\n | IPurchaseEvent\n | IViewSearchResultsEvent\n | IOrderPlacedEvent\n | IBeginCheckoutEvent\n | ICustomEvent\n | IUserEngagementEvent\n | ISessionStartEvent\n | IFirstVisitEvent\n | IScrollEvent\n | IFormStartEvent\n | IAddPaymentInfoEvent\n | IStartedCheckoutGKEvent\n | IMobileAddedGKEvent\n | IAddressSelectedGKEvent\n | IAddressCompletedGKEvent\n | IPaymentMethodSelectedGKEvent\n | IPaymentCompletedGKEvent\n | IOrderSuccessEvent\n | IOrderCompletedEvent\n | IPinCodeAddedGKEvent\n | IAddressAddedGKEvent\n | IViewedProductEvent\n | ICheckoutPaymentEvent;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGO,IAAK,YAAL,kBAAKA,eAAL;AACL,EAAAA,WAAA,kBAAe;AACf,EAAAA,WAAA,eAAY;AACZ,EAAAA,WAAA,kBAAe;AACf,EAAAA,WAAA,qBAAkB;AAClB,EAAAA,WAAA,eAAY;AACZ,EAAAA,WAAA,oBAAiB;AACjB,EAAAA,WAAA,sBAAmB;AACnB,EAAAA,WAAA,qBAAkB;AAClB,EAAAA,WAAA,iBAAc;AACd,EAAAA,WAAA,sBAAmB;AACnB,EAAAA,WAAA,sBAAmB;AACnB,EAAAA,WAAA,wBAAqB;AACrB,EAAAA,WAAA,YAAS;AACT,EAAAA,WAAA,iBAAc;AACd,EAAAA,WAAA,gBAAa;AACb,EAAAA,WAAA,YAAS;AACT,EAAAA,WAAA,qBAAkB;AAClB,EAAAA,WAAA,mBAAgB;AAChB,EAAAA,WAAA,iBAAc;AACd,EAAAA,WAAA,YAAS;AACT,EAAAA,WAAA,gBAAa;AACb,EAAAA,WAAA,sBAAmB;AACnB,EAAAA,WAAA,iBAAc;AACd,EAAAA,WAAA,kBAAe;AACf,EAAAA,WAAA,cAAW;AACX,EAAAA,WAAA,yBAAsB;AACtB,EAAAA,WAAA,kBAAe;AACf,EAAAA,WAAA,oBAAiB;AAGjB,EAAAA,WAAA,yBAAsB;AACtB,EAAAA,WAAA,qBAAkB;AAClB,EAAAA,WAAA,yBAAsB;AACtB,EAAAA,WAAA,0BAAuB;AACvB,EAAAA,WAAA,gCAA6B;AAC7B,EAAAA,WAAA,0BAAuB;AACvB,EAAAA,WAAA,mBAAgB;AAChB,EAAAA,WAAA,qBAAkB;AAClB,EAAAA,WAAA,uBAAoB;AACpB,EAAAA,WAAA,sBAAmB;AAxCT,SAAAA;AAAA,GAAA;","names":["EventType"]}
|
package/dist/types.mjs
CHANGED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generate a unique event ID for deduplication
|
|
3
|
+
* Format: timestamp_randomString_eventType
|
|
4
|
+
*/
|
|
5
|
+
declare function generateEventId(eventType: string): string;
|
|
6
|
+
/**
|
|
7
|
+
* Extract browser information for CAPI user data
|
|
8
|
+
*/
|
|
9
|
+
declare function getBrowserInfo(): {
|
|
10
|
+
clientUserAgent?: string;
|
|
11
|
+
fbc?: string;
|
|
12
|
+
fbp?: string;
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Get client IP address (this will be handled server-side)
|
|
16
|
+
*/
|
|
17
|
+
declare function getClientIpAddress(request?: Request): string | undefined;
|
|
18
|
+
|
|
19
|
+
export { generateEventId, getBrowserInfo, getClientIpAddress };
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generate a unique event ID for deduplication
|
|
3
|
+
* Format: timestamp_randomString_eventType
|
|
4
|
+
*/
|
|
5
|
+
declare function generateEventId(eventType: string): string;
|
|
6
|
+
/**
|
|
7
|
+
* Extract browser information for CAPI user data
|
|
8
|
+
*/
|
|
9
|
+
declare function getBrowserInfo(): {
|
|
10
|
+
clientUserAgent?: string;
|
|
11
|
+
fbc?: string;
|
|
12
|
+
fbp?: string;
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Get client IP address (this will be handled server-side)
|
|
16
|
+
*/
|
|
17
|
+
declare function getClientIpAddress(request?: Request): string | undefined;
|
|
18
|
+
|
|
19
|
+
export { generateEventId, getBrowserInfo, getClientIpAddress };
|