shopkit-analytics 1.0.1 → 1.0.3
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 +193 -3
- package/dist/adapters/index.d.mts +3 -2
- package/dist/adapters/index.d.ts +3 -2
- package/dist/adapters/index.js +1220 -615
- package/dist/adapters/index.js.map +1 -1
- package/dist/adapters/index.mjs +4 -2
- package/dist/{chunk-3TQR5DOP.mjs → chunk-3NR2AKE4.mjs} +1 -31
- package/dist/chunk-3NR2AKE4.mjs.map +1 -0
- package/dist/chunk-4RDPDMGW.mjs +68 -0
- package/dist/chunk-4RDPDMGW.mjs.map +1 -0
- package/dist/{chunk-JVEGG6JV.mjs → chunk-HCA4E2RA.mjs} +19 -13
- package/dist/chunk-HCA4E2RA.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-4MZH5OLR.mjs → chunk-NJQ2MOM2.mjs} +1145 -618
- package/dist/chunk-NJQ2MOM2.mjs.map +1 -0
- package/dist/chunk-NKDB4KX2.mjs +2 -0
- package/dist/{chunk-P4OJDCEZ.mjs → chunk-QCS5UARA.mjs} +3 -3
- package/dist/events/index.d.mts +9 -41
- package/dist/events/index.d.ts +9 -41
- package/dist/events/index.js +973 -498
- package/dist/events/index.js.map +1 -1
- package/dist/events/index.mjs +11 -11
- 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-BnNRgdUv.d.ts → index-D_8w5bL_.d.ts} +87 -17
- package/dist/{index-GODWc1s6.d.mts → index-th6sBtE3.d.mts} +87 -17
- package/dist/index.d.mts +10 -6
- package/dist/index.d.ts +10 -6
- package/dist/index.js +1408 -660
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +31 -10
- 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/{subscriber-43gnCKWe.d.ts → subscriber-BDAm_BAi.d.ts} +38 -2
- package/dist/{subscriber-sWesj_5p.d.mts → subscriber-BoyOlh9t.d.mts} +38 -2
- package/dist/subscriber-VF3IYUCU.mjs +8 -0
- package/dist/subscriber-VF3IYUCU.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 +4 -340
- package/dist/types.d.ts +4 -340
- package/dist/types.js +0 -30
- 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 +21 -8
- package/templates/nextjs/README.md +206 -0
- package/templates/nextjs/api-events-route.ts +62 -0
- package/dist/chunk-3TQR5DOP.mjs.map +0 -1
- package/dist/chunk-4MZH5OLR.mjs.map +0 -1
- package/dist/chunk-JVEGG6JV.mjs.map +0 -1
- package/dist/subscriber-IFZJU57V.mjs +0 -8
- /package/dist/{subscriber-IFZJU57V.mjs.map → chunk-NKDB4KX2.mjs.map} +0 -0
- /package/dist/{chunk-P4OJDCEZ.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,12 +19,12 @@ 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,
|
|
20
26
|
EventNames,
|
|
21
27
|
GoogleAdapter,
|
|
22
|
-
HARDCODED_HANDLE,
|
|
23
28
|
KwikCheckoutAdapter,
|
|
24
29
|
KwikPassAdapter,
|
|
25
30
|
MoengageAdapter,
|
|
@@ -29,15 +34,24 @@ import {
|
|
|
29
34
|
createAdapterLogger,
|
|
30
35
|
createLogger,
|
|
31
36
|
logger
|
|
32
|
-
} from "./chunk-
|
|
37
|
+
} from "./chunk-NJQ2MOM2.mjs";
|
|
33
38
|
import {
|
|
34
|
-
|
|
35
|
-
|
|
39
|
+
PRIMA_EXPERIMENT_COOKIES,
|
|
40
|
+
PRIMA_EXPERIMENT_COOKIE_NAMES,
|
|
41
|
+
getExperimentParams,
|
|
42
|
+
hasExperimentData
|
|
43
|
+
} from "./chunk-NGPUKV7E.mjs";
|
|
36
44
|
import {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
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-3NR2AKE4.mjs";
|
|
41
55
|
|
|
42
56
|
// src/ShopkitAnalytics.tsx
|
|
43
57
|
import { useEffect } from "react";
|
|
@@ -160,11 +174,13 @@ export {
|
|
|
160
174
|
DEFAULT_CURRENCY,
|
|
161
175
|
EventNames,
|
|
162
176
|
EventType,
|
|
177
|
+
FacebookCAPIService,
|
|
163
178
|
GoogleAdapter,
|
|
164
|
-
HARDCODED_HANDLE,
|
|
165
179
|
KwikCheckoutAdapter,
|
|
166
180
|
KwikPassAdapter,
|
|
167
181
|
MoengageAdapter,
|
|
182
|
+
PRIMA_EXPERIMENT_COOKIES,
|
|
183
|
+
PRIMA_EXPERIMENT_COOKIE_NAMES,
|
|
168
184
|
PixelAdapter,
|
|
169
185
|
PostHogAdapter,
|
|
170
186
|
ShopifyAdapter,
|
|
@@ -172,13 +188,18 @@ export {
|
|
|
172
188
|
captureAffiliateParams,
|
|
173
189
|
clearAffiliateParams,
|
|
174
190
|
createAdapterLogger,
|
|
191
|
+
createFacebookCAPIService,
|
|
175
192
|
createLogger,
|
|
176
193
|
ShopkitAnalytics_default as default,
|
|
177
194
|
eventPublisher,
|
|
178
195
|
eventSubscriber,
|
|
196
|
+
generateEventId,
|
|
179
197
|
getAffiliateParams,
|
|
180
198
|
getAffiliateSource,
|
|
199
|
+
getBrowserInfo,
|
|
200
|
+
getExperimentParams,
|
|
181
201
|
hasAffiliateData,
|
|
202
|
+
hasExperimentData,
|
|
182
203
|
initTracking,
|
|
183
204
|
initializeEventTracking,
|
|
184
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":[]}
|
|
@@ -1,5 +1,40 @@
|
|
|
1
1
|
import { TEvent } from './types.js';
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* Adapter-specific parameter types for event customization
|
|
5
|
+
* This file contains type definitions for adapter-specific overrides
|
|
6
|
+
* that can be passed as the second parameter to publishEvent()
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Base adapter parameter interface
|
|
10
|
+
* All adapters support event_name override and any custom parameters
|
|
11
|
+
*/
|
|
12
|
+
interface IBaseAdapterParams {
|
|
13
|
+
event_name?: string;
|
|
14
|
+
[key: string]: any;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Adapter-specific parameter overrides
|
|
18
|
+
* Simple interface that allows any adapter name with any parameters
|
|
19
|
+
*/
|
|
20
|
+
interface IAdapterParams {
|
|
21
|
+
[adapterName: string]: IBaseAdapterParams;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Type-safe adapter parameter definitions for known adapters
|
|
25
|
+
* This provides IntelliSense for common adapter names while still allowing flexibility
|
|
26
|
+
*/
|
|
27
|
+
interface TAdapterParams {
|
|
28
|
+
GoogleAnalytics?: IBaseAdapterParams;
|
|
29
|
+
FacebookPixel?: IBaseAdapterParams;
|
|
30
|
+
MoEngage?: IBaseAdapterParams;
|
|
31
|
+
PostHog?: IBaseAdapterParams;
|
|
32
|
+
ShopifyAnalytics?: IBaseAdapterParams;
|
|
33
|
+
KwikPass?: IBaseAdapterParams;
|
|
34
|
+
KwikCheckout?: IBaseAdapterParams;
|
|
35
|
+
[adapterName: string]: IBaseAdapterParams | undefined;
|
|
36
|
+
}
|
|
37
|
+
|
|
3
38
|
/**
|
|
4
39
|
* Interface for tracking adapters
|
|
5
40
|
*/
|
|
@@ -19,7 +54,7 @@ interface TrackingAdapter {
|
|
|
19
54
|
/**
|
|
20
55
|
* Track an event
|
|
21
56
|
*/
|
|
22
|
-
trackEvent: (event: TEvent) => Promise<void>;
|
|
57
|
+
trackEvent: (event: TEvent, params?: TAdapterParams) => Promise<void>;
|
|
23
58
|
}
|
|
24
59
|
/**
|
|
25
60
|
* EventSubscriber class responsible for managing tracking adapters and forwarding events
|
|
@@ -60,6 +95,7 @@ declare class EventSubscriber {
|
|
|
60
95
|
/**
|
|
61
96
|
* Handle an event by forwarding it to all enabled adapters
|
|
62
97
|
* @param event The event to handle
|
|
98
|
+
* @param params Optional adapter-specific parameters
|
|
63
99
|
*/
|
|
64
100
|
private handleEvent;
|
|
65
101
|
/**
|
|
@@ -77,4 +113,4 @@ declare class EventSubscriber {
|
|
|
77
113
|
}
|
|
78
114
|
declare const eventSubscriber: EventSubscriber;
|
|
79
115
|
|
|
80
|
-
export { type TrackingAdapter as T, eventSubscriber as e };
|
|
116
|
+
export { type IAdapterParams as I, type TrackingAdapter as T, type TAdapterParams as a, type IBaseAdapterParams as b, eventSubscriber as e };
|
|
@@ -1,5 +1,40 @@
|
|
|
1
1
|
import { TEvent } from './types.mjs';
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* Adapter-specific parameter types for event customization
|
|
5
|
+
* This file contains type definitions for adapter-specific overrides
|
|
6
|
+
* that can be passed as the second parameter to publishEvent()
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Base adapter parameter interface
|
|
10
|
+
* All adapters support event_name override and any custom parameters
|
|
11
|
+
*/
|
|
12
|
+
interface IBaseAdapterParams {
|
|
13
|
+
event_name?: string;
|
|
14
|
+
[key: string]: any;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Adapter-specific parameter overrides
|
|
18
|
+
* Simple interface that allows any adapter name with any parameters
|
|
19
|
+
*/
|
|
20
|
+
interface IAdapterParams {
|
|
21
|
+
[adapterName: string]: IBaseAdapterParams;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Type-safe adapter parameter definitions for known adapters
|
|
25
|
+
* This provides IntelliSense for common adapter names while still allowing flexibility
|
|
26
|
+
*/
|
|
27
|
+
interface TAdapterParams {
|
|
28
|
+
GoogleAnalytics?: IBaseAdapterParams;
|
|
29
|
+
FacebookPixel?: IBaseAdapterParams;
|
|
30
|
+
MoEngage?: IBaseAdapterParams;
|
|
31
|
+
PostHog?: IBaseAdapterParams;
|
|
32
|
+
ShopifyAnalytics?: IBaseAdapterParams;
|
|
33
|
+
KwikPass?: IBaseAdapterParams;
|
|
34
|
+
KwikCheckout?: IBaseAdapterParams;
|
|
35
|
+
[adapterName: string]: IBaseAdapterParams | undefined;
|
|
36
|
+
}
|
|
37
|
+
|
|
3
38
|
/**
|
|
4
39
|
* Interface for tracking adapters
|
|
5
40
|
*/
|
|
@@ -19,7 +54,7 @@ interface TrackingAdapter {
|
|
|
19
54
|
/**
|
|
20
55
|
* Track an event
|
|
21
56
|
*/
|
|
22
|
-
trackEvent: (event: TEvent) => Promise<void>;
|
|
57
|
+
trackEvent: (event: TEvent, params?: TAdapterParams) => Promise<void>;
|
|
23
58
|
}
|
|
24
59
|
/**
|
|
25
60
|
* EventSubscriber class responsible for managing tracking adapters and forwarding events
|
|
@@ -60,6 +95,7 @@ declare class EventSubscriber {
|
|
|
60
95
|
/**
|
|
61
96
|
* Handle an event by forwarding it to all enabled adapters
|
|
62
97
|
* @param event The event to handle
|
|
98
|
+
* @param params Optional adapter-specific parameters
|
|
63
99
|
*/
|
|
64
100
|
private handleEvent;
|
|
65
101
|
/**
|
|
@@ -77,4 +113,4 @@ declare class EventSubscriber {
|
|
|
77
113
|
}
|
|
78
114
|
declare const eventSubscriber: EventSubscriber;
|
|
79
115
|
|
|
80
|
-
export { type TrackingAdapter as T, eventSubscriber as e };
|
|
116
|
+
export { type IAdapterParams as I, type TrackingAdapter as T, type TAdapterParams as a, type IBaseAdapterParams as b, eventSubscriber as e };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|