getu-attribution-v2-sdk 0.3.1 → 0.3.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 CHANGED
@@ -253,6 +253,7 @@ enum EventType {
253
253
  // Pre-conversion signals
254
254
  PAGE_VIEW = "page_view",
255
255
  PAGE_CLICK = "page_click",
256
+ BUTTON_CLICK = "button_click",
256
257
  VIDEO_PLAY = "video_play",
257
258
 
258
259
  // Registration funnel
@@ -272,6 +273,9 @@ enum EventType {
272
273
 
273
274
  // Post-conversion / back-office conversion
274
275
  AUDIT_APPROVED = "audit_approved",
276
+
277
+ // User-defined custom events
278
+ CUSTOM = "custom",
275
279
  }
276
280
  ```
277
281
 
@@ -317,6 +321,28 @@ await trackPageClick("user_123", {
317
321
  });
318
322
  ```
319
323
 
324
+ ### Track Button Click
325
+
326
+ ```javascript
327
+ // Basic - button name only
328
+ await trackButtonClick("Sign Up");
329
+
330
+ // With user ID
331
+ await trackButtonClick("Buy Now", "user_123");
332
+
333
+ // With extra data
334
+ await trackButtonClick("Download Report", "user_123", {
335
+ section: "hero",
336
+ page: "/pricing",
337
+ variant: "primary",
338
+ });
339
+
340
+ // Without button name (anonymous click)
341
+ await trackButtonClick();
342
+ ```
343
+
344
+ The event will be sent with `event_data.button_name` set to the provided name.
345
+
320
346
  ### Track Purchase
321
347
 
322
348
  **Method 1: Traditional format (user_id required)**
@@ -541,21 +567,32 @@ await trackAddToCart("user_123", {
541
567
 
542
568
  ### Track Custom Event
543
569
 
570
+ Use `trackCustomEvent` to track any user-defined event with a custom name. The event name is required and must be non-empty.
571
+
544
572
  ```javascript
545
- await trackEvent(
546
- EventType.ADD_TO_CART,
547
- {
548
- product_id: "prod_123",
549
- product_name: "Widget",
550
- price: 29.99,
551
- quantity: 2,
552
- },
573
+ // Basic - event name only
574
+ await trackCustomEvent("webinar_registered");
575
+
576
+ // With custom data
577
+ await trackCustomEvent("webinar_registered", {
578
+ webinar_id: "webinar_123",
579
+ webinar_title: "Advanced Analytics",
580
+ });
581
+
582
+ // With user ID and revenue
583
+ await trackCustomEvent(
584
+ "subscription_upgraded",
585
+ { plan: "pro", billing_cycle: "annual" },
553
586
  "user_123", // tracking_user_id (optional)
554
- 29.99, // revenue (optional)
555
- Currency.USD // currency (optional)
587
+ 299.00, // revenue (optional)
588
+ Currency.USD // currency (optional, default: USD)
556
589
  );
557
590
  ```
558
591
 
592
+ Custom events are **batched** (not sent immediately). Use `flush()` to force-send pending events.
593
+
594
+ **Validation**: An empty or whitespace-only event name will be rejected client-side with a console error.
595
+
559
596
  ---
560
597
 
561
598
  ## Auto-Tracking
@@ -887,6 +924,27 @@ await trackAddToCart("user_123", {
887
924
  });
888
925
  ```
889
926
 
927
+ #### `trackCustomEvent(customEventName, eventData?, tracking_user_id?, revenue?, currency?): Promise<void>`
928
+
929
+ Track a user-defined custom event. The `customEventName` is required and must be a non-empty string.
930
+
931
+ | Parameter | Type | Required | Description |
932
+ |-----------|------|----------|-------------|
933
+ | `customEventName` | string | **Yes** | Event name (e.g. `"webinar_registered"`) |
934
+ | `eventData` | object | No | Arbitrary key-value payload |
935
+ | `tracking_user_id` | string | No | User identifier; falls back to stored user ID |
936
+ | `revenue` | number | No | Revenue amount |
937
+ | `currency` | Currency | No | Currency code (default: `Currency.USD`) |
938
+
939
+ ```javascript
940
+ await trackCustomEvent("feature_used", {
941
+ feature: "export_csv",
942
+ records_count: 500,
943
+ });
944
+ ```
945
+
946
+ Custom events are **batched**. Call `flush()` to force immediate delivery.
947
+
890
948
  ### Attribution Functions
891
949
 
892
950
  #### `getAttributionData(): AttributionData | null`
@@ -0,0 +1,130 @@
1
+ import { SDKConfig, EventType, AttributionData, Currency, UserSession, UserTraits } from "../types";
2
+ export declare class AttributionSDK {
3
+ private config;
4
+ private logger;
5
+ private storage;
6
+ private httpClient;
7
+ private queue;
8
+ private session;
9
+ private initialized;
10
+ private autoTrackEnabled;
11
+ private pageViewTrackTimes;
12
+ private cachedPublicIP;
13
+ private publicIPFetchPromise;
14
+ private initialPageViewTriggered;
15
+ private spaTrackingEnabled;
16
+ private lastTrackedPath;
17
+ private originalPushState;
18
+ private originalReplaceState;
19
+ private popstateHandler;
20
+ constructor(config: SDKConfig);
21
+ init(): Promise<void>;
22
+ trackEvent(eventType: EventType, eventData?: Record<string, any>, tracking_user_id?: string, revenue?: number, currency?: Currency, custom_event_name?: string): Promise<void>;
23
+ trackCustomEvent(customEventName: string, eventData?: Record<string, any>, tracking_user_id?: string, revenue?: number, currency?: Currency): Promise<void>;
24
+ trackPageView(pageData?: Record<string, any>, tracking_user_id?: string): Promise<void>;
25
+ private cleanupPageViewTrackTimes;
26
+ private ensurePublicIPFetched;
27
+ private fetchPublicIP;
28
+ trackPurchase(tracking_user_id: string, revenue: number, currency?: Currency, purchaseData?: Record<string, any>): Promise<void>;
29
+ trackLogin(tracking_user_id: string, loginData?: Record<string, any>): Promise<void>;
30
+ trackSignup(tracking_user_id: string, signupData?: Record<string, any>): Promise<void>;
31
+ trackFormSubmit(tracking_user_id?: string, formData?: Record<string, any>): Promise<void>;
32
+ trackVideoPlay(tracking_user_id?: string, videoData?: Record<string, any>): Promise<void>;
33
+ trackEmailVerification(tracking_user_id: string, verificationData?: Record<string, any>): Promise<void>;
34
+ trackAuditApproved(tracking_user_id: string, auditData?: Record<string, any>): Promise<void>;
35
+ trackPurchaseAuto(options: {
36
+ revenue: number;
37
+ currency?: Currency;
38
+ purchaseData?: Record<string, any>;
39
+ tracking_user_id?: string;
40
+ }): Promise<void>;
41
+ trackLoginAuto(options: {
42
+ loginData?: Record<string, any>;
43
+ tracking_user_id?: string;
44
+ }): Promise<void>;
45
+ trackSignupAuto(options: {
46
+ signupData?: Record<string, any>;
47
+ tracking_user_id?: string;
48
+ }): Promise<void>;
49
+ trackEmailVerificationAuto(options: {
50
+ verificationData?: Record<string, any>;
51
+ tracking_user_id?: string;
52
+ }): Promise<void>;
53
+ trackProductView(tracking_user_id?: string, productData?: Record<string, any>): Promise<void>;
54
+ trackAddToCart(tracking_user_id?: string, cartData?: Record<string, any>): Promise<void>;
55
+ trackPageClick(tracking_user_id?: string, clickData?: Record<string, any>): Promise<void>;
56
+ trackButtonClick(buttonName?: string, tracking_user_id?: string, clickData?: Record<string, any>): Promise<void>;
57
+ getAttributionData(): AttributionData | null;
58
+ addUTMToURL(url: string): string;
59
+ getCurrentUTMParams(): Record<string, string>;
60
+ private getUTMParams;
61
+ private initializeUserId;
62
+ setUserId(userId: string): void;
63
+ getUserId(): string | null;
64
+ removeUserId(): void;
65
+ /**
66
+ * Identify user and set user attributes
67
+ * Used to explicitly set user information, e.g., after login
68
+ *
69
+ * @param userId User unique identifier
70
+ * @param traits User attributes
71
+ *
72
+ * @example
73
+ * sdk.identify('user-123', {
74
+ * email: 'user@example.com',
75
+ * name: 'John Doe',
76
+ * company_name: 'Acme Inc'
77
+ * });
78
+ */
79
+ identify(userId: string, traits?: UserTraits): Promise<void>;
80
+ /**
81
+ * Get current user traits
82
+ */
83
+ getUserTraits(): UserTraits | null;
84
+ /**
85
+ * Get current session ID
86
+ */
87
+ getSessionId(): string | null;
88
+ private initializeSession;
89
+ private extractAndStoreUTMData;
90
+ private setupAutoTracking;
91
+ private setupFormTracking;
92
+ private serializeFormFields;
93
+ private getFormFieldKey;
94
+ private normalizeFormFieldKey;
95
+ private serializeFormValue;
96
+ /**
97
+ * Extract standardized lead fields from form data
98
+ * @param formData Serialized form data
99
+ * @returns Extracted user traits
100
+ */
101
+ private extractLeadFields;
102
+ private setupLinkTracking;
103
+ private handleCrossDomainUTM;
104
+ private setupNetworkHandlers;
105
+ private setupVisibilityHandlers;
106
+ private setupBeforeUnloadHandler;
107
+ private flushOnUnload;
108
+ private retryPendingEvents;
109
+ private getCurrentPath;
110
+ private setupSPATracking;
111
+ private cleanupSPATracking;
112
+ private updateSessionActivity;
113
+ flush(): Promise<void>;
114
+ getStatus(): {
115
+ initialized: boolean;
116
+ session: UserSession | null;
117
+ queueSize: number;
118
+ online: boolean;
119
+ crossDomainUTM: {
120
+ enabled: boolean;
121
+ currentParams: Record<string, string>;
122
+ };
123
+ spaTracking: {
124
+ enabled: boolean;
125
+ currentPath: string;
126
+ };
127
+ };
128
+ destroy(): void;
129
+ }
130
+ //# sourceMappingURL=AttributionSDK.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AttributionSDK.d.ts","sourceRoot":"","sources":["../../src/core/AttributionSDK.ts"],"names":[],"mappings":"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"}