shopkit-analytics 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +769 -0
  3. package/dist/adapters/index.d.mts +4 -0
  4. package/dist/adapters/index.d.ts +4 -0
  5. package/dist/adapters/index.js +2405 -0
  6. package/dist/adapters/index.js.map +1 -0
  7. package/dist/adapters/index.mjs +23 -0
  8. package/dist/adapters/index.mjs.map +1 -0
  9. package/dist/affiliate/index.d.mts +138 -0
  10. package/dist/affiliate/index.d.ts +138 -0
  11. package/dist/affiliate/index.js +816 -0
  12. package/dist/affiliate/index.js.map +1 -0
  13. package/dist/affiliate/index.mjs +74 -0
  14. package/dist/affiliate/index.mjs.map +1 -0
  15. package/dist/affiliate-tracker-BgHwibPv.d.mts +144 -0
  16. package/dist/affiliate-tracker-BgHwibPv.d.ts +144 -0
  17. package/dist/chunk-3TQR5DOP.mjs +79 -0
  18. package/dist/chunk-3TQR5DOP.mjs.map +1 -0
  19. package/dist/chunk-4MZH5OLR.mjs +2375 -0
  20. package/dist/chunk-4MZH5OLR.mjs.map +1 -0
  21. package/dist/chunk-JVEGG6JV.mjs +213 -0
  22. package/dist/chunk-JVEGG6JV.mjs.map +1 -0
  23. package/dist/chunk-P4OJDCEZ.mjs +57 -0
  24. package/dist/chunk-P4OJDCEZ.mjs.map +1 -0
  25. package/dist/chunk-TNXTKEGS.mjs +758 -0
  26. package/dist/chunk-TNXTKEGS.mjs.map +1 -0
  27. package/dist/events/index.d.mts +112 -0
  28. package/dist/events/index.d.ts +112 -0
  29. package/dist/events/index.js +2131 -0
  30. package/dist/events/index.js.map +1 -0
  31. package/dist/events/index.mjs +30 -0
  32. package/dist/events/index.mjs.map +1 -0
  33. package/dist/index-BnNRgdUv.d.ts +676 -0
  34. package/dist/index-GODWc1s6.d.mts +676 -0
  35. package/dist/index.d.mts +38 -0
  36. package/dist/index.d.ts +38 -0
  37. package/dist/index.js +3269 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/index.mjs +190 -0
  40. package/dist/index.mjs.map +1 -0
  41. package/dist/subscriber-43gnCKWe.d.ts +80 -0
  42. package/dist/subscriber-IFZJU57V.mjs +8 -0
  43. package/dist/subscriber-IFZJU57V.mjs.map +1 -0
  44. package/dist/subscriber-sWesj_5p.d.mts +80 -0
  45. package/dist/types.d.mts +991 -0
  46. package/dist/types.d.ts +991 -0
  47. package/dist/types.js +102 -0
  48. package/dist/types.js.map +1 -0
  49. package/dist/types.mjs +8 -0
  50. package/dist/types.mjs.map +1 -0
  51. package/package.json +110 -0
package/dist/index.mjs ADDED
@@ -0,0 +1,190 @@
1
+ "use client";
2
+ import {
3
+ initTracking,
4
+ initializeEventTracking
5
+ } from "./chunk-P4OJDCEZ.mjs";
6
+ import {
7
+ AffiliateTracker_default,
8
+ captureAffiliateParams,
9
+ clearAffiliateParams,
10
+ getAffiliateParams,
11
+ getAffiliateSource,
12
+ hasAffiliateData,
13
+ useAffiliateSource,
14
+ useAffiliateTracker,
15
+ useHasAffiliateData
16
+ } from "./chunk-TNXTKEGS.mjs";
17
+ import {
18
+ BaseAdapter,
19
+ DEFAULT_CURRENCY,
20
+ EventNames,
21
+ GoogleAdapter,
22
+ HARDCODED_HANDLE,
23
+ KwikCheckoutAdapter,
24
+ KwikPassAdapter,
25
+ MoengageAdapter,
26
+ PixelAdapter,
27
+ PostHogAdapter,
28
+ ShopifyAdapter,
29
+ createAdapterLogger,
30
+ createLogger,
31
+ logger
32
+ } from "./chunk-4MZH5OLR.mjs";
33
+ import {
34
+ EventType
35
+ } from "./chunk-3TQR5DOP.mjs";
36
+ import {
37
+ eventPublisher,
38
+ eventSubscriber,
39
+ publishEvent
40
+ } from "./chunk-JVEGG6JV.mjs";
41
+
42
+ // src/ShopkitAnalytics.tsx
43
+ import { useEffect } from "react";
44
+ import { useShopifyCookies } from "@shopify/hydrogen-react";
45
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
46
+ var ShopkitAnalytics = ({
47
+ config,
48
+ children,
49
+ onInitialized,
50
+ onError
51
+ }) => {
52
+ useShopifyCookies({
53
+ hasUserConsent: true,
54
+ domain: config.shopify?.domain || ""
55
+ });
56
+ useEffect(() => {
57
+ const initializeAnalytics = async () => {
58
+ if (config.autoInitialize === false) return;
59
+ const loggerConfig = {
60
+ enabled: config.logger?.enabled ?? config.enableDebugLogs ?? true,
61
+ level: config.logger?.level ?? "info",
62
+ name: "@shopkit/analytics",
63
+ prettyPrint: config.logger?.prettyPrint ?? false
64
+ };
65
+ const logger2 = createLogger(loggerConfig);
66
+ try {
67
+ logger2.info("Starting initialization...");
68
+ const adapters = [];
69
+ const addLoggerConfig = (adapterConfig) => ({
70
+ ...adapterConfig,
71
+ enableDebugLogs: loggerConfig.enabled,
72
+ logLevel: loggerConfig.level
73
+ });
74
+ if (config.googleAnalytics) {
75
+ const gaAdapter = new GoogleAdapter(
76
+ addLoggerConfig(config.googleAnalytics)
77
+ );
78
+ adapters.push(gaAdapter);
79
+ logger2.info("Added Google Analytics adapter");
80
+ }
81
+ if (config.facebookPixel) {
82
+ const pixelAdapter = new PixelAdapter(
83
+ addLoggerConfig(config.facebookPixel)
84
+ );
85
+ adapters.push(pixelAdapter);
86
+ logger2.info("Added Facebook Pixel adapter");
87
+ }
88
+ if (config.moengage) {
89
+ const moengageAdapter = new MoengageAdapter(
90
+ addLoggerConfig(config.moengage)
91
+ );
92
+ adapters.push(moengageAdapter);
93
+ logger2.info("Added MoEngage adapter");
94
+ }
95
+ if (config.posthog) {
96
+ const posthogAdapter = new PostHogAdapter(
97
+ addLoggerConfig(config.posthog)
98
+ );
99
+ adapters.push(posthogAdapter);
100
+ logger2.info("Added PostHog adapter");
101
+ }
102
+ if (config.shopify) {
103
+ const shopifyAdapter = new ShopifyAdapter(
104
+ addLoggerConfig(config.shopify)
105
+ );
106
+ adapters.push(shopifyAdapter);
107
+ logger2.info("Added Shopify Analytics adapter");
108
+ }
109
+ if (config.kwikpass) {
110
+ const kwikpassAdapter = new KwikPassAdapter(
111
+ addLoggerConfig(config.kwikpass)
112
+ );
113
+ adapters.push(kwikpassAdapter);
114
+ logger2.info("Added KwikPass Analytics adapter");
115
+ }
116
+ if (config.kwikcheckout) {
117
+ const kwikcheckoutAdapter = new KwikCheckoutAdapter(
118
+ addLoggerConfig(config.kwikcheckout)
119
+ );
120
+ adapters.push(kwikcheckoutAdapter);
121
+ logger2.info("Added KwikCheckout Analytics adapter");
122
+ }
123
+ if (config.customAdapters) {
124
+ adapters.push(...config.customAdapters);
125
+ logger2.info(`Added ${config.customAdapters.length} custom adapters`);
126
+ }
127
+ if (adapters.length === 0) {
128
+ logger2.warn("No analytics adapters configured");
129
+ } else {
130
+ await initializeEventTracking(adapters);
131
+ logger2.info("Event tracking initialized with adapters", {
132
+ adapters: adapters.map((a) => a.name)
133
+ });
134
+ }
135
+ logger2.info("Initialization completed successfully");
136
+ onInitialized?.();
137
+ } catch (err) {
138
+ const error = err instanceof Error ? err : new Error("Unknown initialization error");
139
+ logger2.error("Initialization failed", error);
140
+ onError?.(error);
141
+ }
142
+ };
143
+ initializeAnalytics();
144
+ }, [config, onInitialized, onError]);
145
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
146
+ config.affiliate?.enabled !== false && /* @__PURE__ */ jsx(
147
+ AffiliateTracker_default,
148
+ {
149
+ config: config.affiliate?.config,
150
+ autoCapture: config.affiliate?.autoCapture
151
+ }
152
+ ),
153
+ children ? /* @__PURE__ */ jsx(Fragment, { children }) : null
154
+ ] });
155
+ };
156
+ var ShopkitAnalytics_default = ShopkitAnalytics;
157
+ export {
158
+ AffiliateTracker_default as AffiliateTracker,
159
+ BaseAdapter,
160
+ DEFAULT_CURRENCY,
161
+ EventNames,
162
+ EventType,
163
+ GoogleAdapter,
164
+ HARDCODED_HANDLE,
165
+ KwikCheckoutAdapter,
166
+ KwikPassAdapter,
167
+ MoengageAdapter,
168
+ PixelAdapter,
169
+ PostHogAdapter,
170
+ ShopifyAdapter,
171
+ ShopkitAnalytics_default as ShopkitAnalytics,
172
+ captureAffiliateParams,
173
+ clearAffiliateParams,
174
+ createAdapterLogger,
175
+ createLogger,
176
+ ShopkitAnalytics_default as default,
177
+ eventPublisher,
178
+ eventSubscriber,
179
+ getAffiliateParams,
180
+ getAffiliateSource,
181
+ hasAffiliateData,
182
+ initTracking,
183
+ initializeEventTracking,
184
+ logger,
185
+ publishEvent,
186
+ useAffiliateSource,
187
+ useAffiliateTracker,
188
+ useHasAffiliateData
189
+ };
190
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +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":"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","names":["logger"]}
@@ -0,0 +1,80 @@
1
+ import { TEvent } from './types.js';
2
+
3
+ /**
4
+ * Interface for tracking adapters
5
+ */
6
+ interface TrackingAdapter {
7
+ /**
8
+ * Name of the tracking adapter
9
+ */
10
+ name: string;
11
+ /**
12
+ * Whether the adapter is enabled
13
+ */
14
+ isEnabled: () => boolean;
15
+ /**
16
+ * Initialize the adapter
17
+ */
18
+ initialize: () => Promise<void>;
19
+ /**
20
+ * Track an event
21
+ */
22
+ trackEvent: (event: TEvent) => Promise<void>;
23
+ }
24
+ /**
25
+ * EventSubscriber class responsible for managing tracking adapters and forwarding events
26
+ */
27
+ declare class EventSubscriber {
28
+ private static instance;
29
+ private adapters;
30
+ private initialized;
31
+ private eventQueue;
32
+ private unsubscribe;
33
+ /**
34
+ * Private constructor to enforce singleton pattern
35
+ */
36
+ private constructor();
37
+ /**
38
+ * Get the singleton instance of EventSubscriber
39
+ */
40
+ static getInstance(): EventSubscriber;
41
+ /**
42
+ * Register a tracking adapter
43
+ * @param adapter The tracking adapter to register
44
+ */
45
+ registerAdapter(adapter: TrackingAdapter): void;
46
+ /**
47
+ * Unregister a tracking adapter by name
48
+ * @param adapterName The name of the adapter to unregister
49
+ */
50
+ unregisterAdapter(adapterName: string): void;
51
+ /**
52
+ * Initialize all registered adapters
53
+ */
54
+ initialize(): Promise<void>;
55
+ /**
56
+ * Initialize a single adapter
57
+ * @param adapter The adapter to initialize
58
+ */
59
+ private initializeAdapter;
60
+ /**
61
+ * Handle an event by forwarding it to all enabled adapters
62
+ * @param event The event to handle
63
+ */
64
+ private handleEvent;
65
+ /**
66
+ * Process any events that were queued before initialization
67
+ */
68
+ private processEventQueue;
69
+ /**
70
+ * Shutdown the subscriber and all adapters
71
+ */
72
+ shutdown(): void;
73
+ /**
74
+ * Get all registered adapters
75
+ */
76
+ getAdapters(): TrackingAdapter[];
77
+ }
78
+ declare const eventSubscriber: EventSubscriber;
79
+
80
+ export { type TrackingAdapter as T, eventSubscriber as e };
@@ -0,0 +1,8 @@
1
+ "use client";
2
+ import {
3
+ eventSubscriber
4
+ } from "./chunk-JVEGG6JV.mjs";
5
+ export {
6
+ eventSubscriber
7
+ };
8
+ //# sourceMappingURL=subscriber-IFZJU57V.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,80 @@
1
+ import { TEvent } from './types.mjs';
2
+
3
+ /**
4
+ * Interface for tracking adapters
5
+ */
6
+ interface TrackingAdapter {
7
+ /**
8
+ * Name of the tracking adapter
9
+ */
10
+ name: string;
11
+ /**
12
+ * Whether the adapter is enabled
13
+ */
14
+ isEnabled: () => boolean;
15
+ /**
16
+ * Initialize the adapter
17
+ */
18
+ initialize: () => Promise<void>;
19
+ /**
20
+ * Track an event
21
+ */
22
+ trackEvent: (event: TEvent) => Promise<void>;
23
+ }
24
+ /**
25
+ * EventSubscriber class responsible for managing tracking adapters and forwarding events
26
+ */
27
+ declare class EventSubscriber {
28
+ private static instance;
29
+ private adapters;
30
+ private initialized;
31
+ private eventQueue;
32
+ private unsubscribe;
33
+ /**
34
+ * Private constructor to enforce singleton pattern
35
+ */
36
+ private constructor();
37
+ /**
38
+ * Get the singleton instance of EventSubscriber
39
+ */
40
+ static getInstance(): EventSubscriber;
41
+ /**
42
+ * Register a tracking adapter
43
+ * @param adapter The tracking adapter to register
44
+ */
45
+ registerAdapter(adapter: TrackingAdapter): void;
46
+ /**
47
+ * Unregister a tracking adapter by name
48
+ * @param adapterName The name of the adapter to unregister
49
+ */
50
+ unregisterAdapter(adapterName: string): void;
51
+ /**
52
+ * Initialize all registered adapters
53
+ */
54
+ initialize(): Promise<void>;
55
+ /**
56
+ * Initialize a single adapter
57
+ * @param adapter The adapter to initialize
58
+ */
59
+ private initializeAdapter;
60
+ /**
61
+ * Handle an event by forwarding it to all enabled adapters
62
+ * @param event The event to handle
63
+ */
64
+ private handleEvent;
65
+ /**
66
+ * Process any events that were queued before initialization
67
+ */
68
+ private processEventQueue;
69
+ /**
70
+ * Shutdown the subscriber and all adapters
71
+ */
72
+ shutdown(): void;
73
+ /**
74
+ * Get all registered adapters
75
+ */
76
+ getAdapters(): TrackingAdapter[];
77
+ }
78
+ declare const eventSubscriber: EventSubscriber;
79
+
80
+ export { type TrackingAdapter as T, eventSubscriber as e };