@xylabs/pixel 5.0.83 → 5.0.84

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 (40) hide show
  1. package/README.md +96 -0
  2. package/dist/browser/Api/Api.d.ts +6 -0
  3. package/dist/browser/Api/Api.d.ts.map +1 -1
  4. package/dist/browser/Api/UserEvent.d.ts +1 -0
  5. package/dist/browser/Api/UserEvent.d.ts.map +1 -1
  6. package/dist/browser/Api/UserEventSystem.d.ts +1 -0
  7. package/dist/browser/Api/UserEventSystem.d.ts.map +1 -1
  8. package/dist/browser/CommonFields.d.ts +1 -0
  9. package/dist/browser/CommonFields.d.ts.map +1 -1
  10. package/dist/browser/ExIds.d.ts +1 -0
  11. package/dist/browser/ExIds.d.ts.map +1 -1
  12. package/dist/browser/FunnelStartedFields.d.ts +1 -0
  13. package/dist/browser/FunnelStartedFields.d.ts.map +1 -1
  14. package/dist/browser/Pixel.d.ts +21 -0
  15. package/dist/browser/Pixel.d.ts.map +1 -1
  16. package/dist/browser/PurchaseFields.d.ts +1 -0
  17. package/dist/browser/PurchaseFields.d.ts.map +1 -1
  18. package/dist/browser/Referrer.d.ts +5 -0
  19. package/dist/browser/Referrer.d.ts.map +1 -1
  20. package/dist/browser/TestStartedFields.d.ts +1 -0
  21. package/dist/browser/TestStartedFields.d.ts.map +1 -1
  22. package/dist/browser/UniqueUserId.d.ts +2 -0
  23. package/dist/browser/UniqueUserId.d.ts.map +1 -1
  24. package/dist/browser/UserClickFields.d.ts +1 -0
  25. package/dist/browser/UserClickFields.d.ts.map +1 -1
  26. package/dist/browser/UserEventHandler.d.ts +5 -0
  27. package/dist/browser/UserEventHandler.d.ts.map +1 -1
  28. package/dist/browser/UtmFields.d.ts +10 -0
  29. package/dist/browser/UtmFields.d.ts.map +1 -1
  30. package/dist/browser/ViewContentFields.d.ts +1 -0
  31. package/dist/browser/ViewContentFields.d.ts.map +1 -1
  32. package/dist/browser/XyLabsTrackingEventJson.d.ts +1 -0
  33. package/dist/browser/XyLabsTrackingEventJson.d.ts.map +1 -1
  34. package/dist/browser/XyUserEventHandler.d.ts +6 -0
  35. package/dist/browser/XyUserEventHandler.d.ts.map +1 -1
  36. package/dist/browser/getSystemInfo.d.ts +5 -0
  37. package/dist/browser/getSystemInfo.d.ts.map +1 -1
  38. package/dist/browser/index.mjs +44 -0
  39. package/dist/browser/index.mjs.map +1 -1
  40. package/package.json +8 -8
package/README.md CHANGED
@@ -54,6 +54,8 @@ Event Client for xylabs ESB
54
54
 
55
55
  ***
56
56
 
57
+ HTTP client for sending tracking events to the XY Labs pixel API.
58
+
57
59
  ## Constructors
58
60
 
59
61
  ### Constructor
@@ -80,22 +82,30 @@ new PixelApi(baseUri?): PixelApi;
80
82
  trackEvents(events): Promise<any>;
81
83
  ```
82
84
 
85
+ Sends an array of user events to the tracking API.
86
+
83
87
  ### Parameters
84
88
 
85
89
  #### events
86
90
 
87
91
  [`UserEvent`](#../interfaces/UserEvent)[]
88
92
 
93
+ The events to submit
94
+
89
95
  ### Returns
90
96
 
91
97
  `Promise`\<`any`\>
92
98
 
99
+ The response data from the API
100
+
93
101
  ### <a id="Referrer"></a>Referrer
94
102
 
95
103
  [**@xylabs/pixel**](#../README)
96
104
 
97
105
  ***
98
106
 
107
+ Tracks and persists the document referrer in both session and local storage.
108
+
99
109
  ## Constructors
100
110
 
101
111
  ### Constructor
@@ -137,6 +147,8 @@ toJson():
137
147
  | undefined;
138
148
  ```
139
149
 
150
+ Returns the referrer data as a JSON object, or undefined if both values are empty.
151
+
140
152
  ### Returns
141
153
 
142
154
  \| \{
@@ -145,12 +157,16 @@ toJson():
145
157
  \}
146
158
  \| `undefined`
147
159
 
160
+ An object with local and session referrer strings, or undefined
161
+
148
162
  ### <a id="UniqueUserId"></a>UniqueUserId
149
163
 
150
164
  [**@xylabs/pixel**](#../README)
151
165
 
152
166
  ***
153
167
 
168
+ Generates and persists a unique user identifier in localStorage.
169
+
154
170
  ## Constructors
155
171
 
156
172
  ### Constructor
@@ -179,6 +195,8 @@ id: string;
179
195
  toString(): string;
180
196
  ```
181
197
 
198
+ Returns the unique user ID as a string.
199
+
182
200
  ### Returns
183
201
 
184
202
  `string`
@@ -189,6 +207,8 @@ toString(): string;
189
207
 
190
208
  ***
191
209
 
210
+ Abstract base class for handling user tracking events.
211
+
192
212
  ## Extended by
193
213
 
194
214
  - [`XyUserEventHandler`](#XyUserEventHandler)
@@ -219,6 +239,8 @@ new UserEventHandler<TData>(): UserEventHandler<TData>;
219
239
  abstract funnelStarted<T>(fields): Promisable<void>;
220
240
  ```
221
241
 
242
+ Tracks a funnel-started event.
243
+
222
244
  ### Type Parameters
223
245
 
224
246
  #### T
@@ -243,6 +265,8 @@ abstract funnelStarted<T>(fields): Promisable<void>;
243
265
  abstract testStarted<T>(fields): Promisable<void>;
244
266
  ```
245
267
 
268
+ Tracks a test-started event.
269
+
246
270
  ### Type Parameters
247
271
 
248
272
  #### T
@@ -267,6 +291,8 @@ abstract testStarted<T>(fields): Promisable<void>;
267
291
  abstract userClick<T>(fields): Promisable<void>;
268
292
  ```
269
293
 
294
+ Tracks a user click event.
295
+
270
296
  ### Type Parameters
271
297
 
272
298
  #### T
@@ -291,6 +317,8 @@ abstract userClick<T>(fields): Promisable<void>;
291
317
  abstract viewContent<T>(fields): Promisable<void>;
292
318
  ```
293
319
 
320
+ Tracks a view-content event.
321
+
294
322
  ### Type Parameters
295
323
 
296
324
  #### T
@@ -313,6 +341,8 @@ abstract viewContent<T>(fields): Promisable<void>;
313
341
 
314
342
  ***
315
343
 
344
+ Tracks UTM campaign parameters from query strings, persisting history in localStorage.
345
+
316
346
  ## Constructors
317
347
 
318
348
  ### Constructor
@@ -341,10 +371,14 @@ fields: Record<string, string>[] = [];
341
371
  getUtmRecord(): Record<string, string> | null;
342
372
  ```
343
373
 
374
+ Parses UTM parameters from the current URL query string.
375
+
344
376
  ### Returns
345
377
 
346
378
  `Record`\<`string`, `string`\> \| `null`
347
379
 
380
+ A record of UTM key-value pairs, or null if none are present
381
+
348
382
  ***
349
383
 
350
384
  ### toString()
@@ -353,6 +387,8 @@ getUtmRecord(): Record<string, string> | null;
353
387
  toString(): string;
354
388
  ```
355
389
 
390
+ Returns the UTM fields history as a JSON string.
391
+
356
392
  ### Returns
357
393
 
358
394
  `string`
@@ -365,16 +401,22 @@ toString(): string;
365
401
  update(): Record<string, string>[];
366
402
  ```
367
403
 
404
+ Checks the query string for new UTM values and appends them to the history if changed.
405
+
368
406
  ### Returns
369
407
 
370
408
  `Record`\<`string`, `string`\>[]
371
409
 
410
+ The current UTM fields array, or undefined if empty
411
+
372
412
  ### <a id="XyPixel"></a>XyPixel
373
413
 
374
414
  [**@xylabs/pixel**](#../README)
375
415
 
376
416
  ***
377
417
 
418
+ Singleton pixel tracker that queues and sends user events to the XY Labs tracking API.
419
+
378
420
  ## Properties
379
421
 
380
422
  ### api
@@ -441,6 +483,8 @@ queue: UserEvent[] = [];
441
483
  get static instance(): XyPixel;
442
484
  ```
443
485
 
486
+ Returns the singleton XyPixel instance, throwing if not yet initialized.
487
+
444
488
  #### Returns
445
489
 
446
490
  `XyPixel`
@@ -453,16 +497,22 @@ get static instance(): XyPixel;
453
497
  static init(pixelId): XyPixel;
454
498
  ```
455
499
 
500
+ Initializes the XyPixel singleton with the given pixel ID.
501
+
456
502
  ### Parameters
457
503
 
458
504
  #### pixelId
459
505
 
460
506
  `string`
461
507
 
508
+ The pixel identifier for this tracking instance
509
+
462
510
  ### Returns
463
511
 
464
512
  `XyPixel`
465
513
 
514
+ The newly created XyPixel instance
515
+
466
516
  ***
467
517
 
468
518
  ### selectApi()
@@ -471,12 +521,16 @@ static init(pixelId): XyPixel;
471
521
  static selectApi(api): void;
472
522
  ```
473
523
 
524
+ Replaces the default PixelApi instance used for sending events.
525
+
474
526
  ### Parameters
475
527
 
476
528
  #### api
477
529
 
478
530
  [`PixelApi`](#PixelApi)
479
531
 
532
+ The PixelApi instance to use
533
+
480
534
  ### Returns
481
535
 
482
536
  `void`
@@ -489,12 +543,16 @@ static selectApi(api): void;
489
543
  identify(email?): void;
490
544
  ```
491
545
 
546
+ Associates an email address with this pixel instance, hashing it for privacy.
547
+
492
548
  ### Parameters
493
549
 
494
550
  #### email?
495
551
 
496
552
  `string`
497
553
 
554
+ The email address to identify the user with
555
+
498
556
  ### Returns
499
557
 
500
558
  `void`
@@ -510,6 +568,8 @@ send<T>(
510
568
  eventId?): Promise<void>;
511
569
  ```
512
570
 
571
+ Queues a tracking event and attempts to flush the queue to the API.
572
+
513
573
  ### Type Parameters
514
574
 
515
575
  #### T
@@ -522,14 +582,20 @@ eventId?): Promise<void>;
522
582
 
523
583
  `string`
524
584
 
585
+ The event name
586
+
525
587
  #### fields?
526
588
 
527
589
  `T`
528
590
 
591
+ Optional event-specific fields
592
+
529
593
  #### eventId?
530
594
 
531
595
  `string`
532
596
 
597
+ Optional unique event identifier
598
+
533
599
  ### Returns
534
600
 
535
601
  `Promise`\<`void`\>
@@ -540,6 +606,8 @@ eventId?): Promise<void>;
540
606
 
541
607
  ***
542
608
 
609
+ Concrete event handler that sends tracking events through the XyPixel singleton.
610
+
543
611
  ## Extends
544
612
 
545
613
  - [`UserEventHandler`](#UserEventHandler)\<`T`\>
@@ -574,6 +642,8 @@ new XyUserEventHandler<T>(): XyUserEventHandler<T>;
574
642
  funnelStarted(fields): Promise<void>;
575
643
  ```
576
644
 
645
+ Sends a funnel-started event via the pixel API.
646
+
577
647
  ### Parameters
578
648
 
579
649
  #### fields
@@ -596,6 +666,8 @@ funnelStarted(fields): Promise<void>;
596
666
  purchase(fields): Promise<void>;
597
667
  ```
598
668
 
669
+ Sends a purchase event via the pixel API.
670
+
599
671
  ### Parameters
600
672
 
601
673
  #### fields
@@ -614,6 +686,8 @@ purchase(fields): Promise<void>;
614
686
  testStarted(fields): Promise<void>;
615
687
  ```
616
688
 
689
+ Sends a test-started event via the pixel API.
690
+
617
691
  ### Parameters
618
692
 
619
693
  #### fields
@@ -636,6 +710,8 @@ testStarted(fields): Promise<void>;
636
710
  userClick(fields): Promise<void>;
637
711
  ```
638
712
 
713
+ Sends a user click event via the pixel API.
714
+
639
715
  ### Parameters
640
716
 
641
717
  #### fields
@@ -658,6 +734,8 @@ userClick(fields): Promise<void>;
658
734
  viewContent(fields): Promise<void>;
659
735
  ```
660
736
 
737
+ Sends a view-content event via the pixel API.
738
+
661
739
  ### Parameters
662
740
 
663
741
  #### fields
@@ -680,6 +758,8 @@ viewContent(fields): Promise<void>;
680
758
 
681
759
  ***
682
760
 
761
+ Common fields shared across all tracking event types.
762
+
683
763
  ## Extended by
684
764
 
685
765
  - [`FunnelStartedFields`](#FunnelStartedFields)
@@ -710,6 +790,8 @@ optional testData: string;
710
790
 
711
791
  ***
712
792
 
793
+ Fields for a funnel-started tracking event.
794
+
713
795
  ## Extends
714
796
 
715
797
  - [`CommonFields`](#CommonFields)
@@ -752,6 +834,8 @@ name: string;
752
834
 
753
835
  ***
754
836
 
837
+ Fields for a purchase tracking event.
838
+
755
839
  ## Extends
756
840
 
757
841
  - [`CommonFields`](#CommonFields)
@@ -818,6 +902,8 @@ optional value: number;
818
902
 
819
903
  ***
820
904
 
905
+ Fields for a test-started tracking event (e.g. A/B test).
906
+
821
907
  ## Extends
822
908
 
823
909
  - [`CommonFields`](#CommonFields)
@@ -860,6 +946,8 @@ name: string;
860
946
 
861
947
  ***
862
948
 
949
+ Fields for a user click tracking event.
950
+
863
951
  ## Extends
864
952
 
865
953
  - [`CommonFields`](#CommonFields)
@@ -926,6 +1014,8 @@ optional placement: string;
926
1014
 
927
1015
  ***
928
1016
 
1017
+ Represents a single user tracking event to be sent to the pixel API.
1018
+
929
1019
  ## Properties
930
1020
 
931
1021
  ### cid
@@ -1080,6 +1170,8 @@ optional utm: Record<string, string>[] | Record<string, string[]>;
1080
1170
 
1081
1171
  ***
1082
1172
 
1173
+ Fields for a view-content tracking event.
1174
+
1083
1175
  ## Extends
1084
1176
 
1085
1177
  - [`CommonFields`](#CommonFields)
@@ -1130,6 +1222,8 @@ path: string;
1130
1222
 
1131
1223
  ***
1132
1224
 
1225
+ JSON structure for an XY Labs tracking event as stored or transmitted.
1226
+
1133
1227
  ## Properties
1134
1228
 
1135
1229
  ### cid
@@ -1286,6 +1380,8 @@ optional utm: Record<string, string>[] | Record<string, string[]>;
1286
1380
  type UserEventSystem = Bowser.Parser.ParsedResult;
1287
1381
  ```
1288
1382
 
1383
+ Parsed browser/OS/engine information from the user agent string.
1384
+
1289
1385
 
1290
1386
  Part of [sdk-js](https://www.npmjs.com/package/@xyo-network/sdk-js)
1291
1387
 
@@ -1,7 +1,13 @@
1
1
  import type { UserEvent } from './UserEvent.ts';
2
+ /** HTTP client for sending tracking events to the XY Labs pixel API. */
2
3
  export declare class PixelApi {
3
4
  private endPoint;
4
5
  constructor(baseUri?: string);
6
+ /**
7
+ * Sends an array of user events to the tracking API.
8
+ * @param events - The events to submit
9
+ * @returns The response data from the API
10
+ */
5
11
  trackEvents(events: UserEvent[]): Promise<any>;
6
12
  }
7
13
  //# sourceMappingURL=Api.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Api.d.ts","sourceRoot":"","sources":["../../../src/Api/Api.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAQ/C,qBAAa,QAAQ;IACnB,OAAO,CAAC,QAAQ,CAAQ;gBAGZ,OAAO,SAAS;IAItB,WAAW,CAAC,MAAM,EAAE,SAAS,EAAE;CAGtC"}
1
+ {"version":3,"file":"Api.d.ts","sourceRoot":"","sources":["../../../src/Api/Api.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAQ/C,wEAAwE;AACxE,qBAAa,QAAQ;IACnB,OAAO,CAAC,QAAQ,CAAQ;gBAGZ,OAAO,SAAS;IAI5B;;;;OAIG;IACG,WAAW,CAAC,MAAM,EAAE,SAAS,EAAE;CAGtC"}
@@ -1,5 +1,6 @@
1
1
  import type { ExIds } from '../ExIds.ts';
2
2
  import type { UserEventSystem } from './UserEventSystem.ts';
3
+ /** Represents a single user tracking event to be sent to the pixel API. */
3
4
  export interface UserEvent {
4
5
  cid: string;
5
6
  create_time?: number;
@@ -1 +1 @@
1
- {"version":3,"file":"UserEvent.d.ts","sourceRoot":"","sources":["../../../src/Api/UserEvent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAE3D,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,MAAM,CAAA;IACX,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,KAAK,CAAC,EAAE,KAAK,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAChC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;IAC7C,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,eAAe,CAAA;IACxB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;CAC1D"}
1
+ {"version":3,"file":"UserEvent.d.ts","sourceRoot":"","sources":["../../../src/Api/UserEvent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAE3D,2EAA2E;AAC3E,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,MAAM,CAAA;IACX,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,KAAK,CAAC,EAAE,KAAK,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAChC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;IAC7C,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,eAAe,CAAA;IACxB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;CAC1D"}
@@ -1,3 +1,4 @@
1
1
  import type Bowser from 'bowser';
2
+ /** Parsed browser/OS/engine information from the user agent string. */
2
3
  export type UserEventSystem = Bowser.Parser.ParsedResult;
3
4
  //# sourceMappingURL=UserEventSystem.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"UserEventSystem.d.ts","sourceRoot":"","sources":["../../../src/Api/UserEventSystem.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAA;AAEhC,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,CAAA"}
1
+ {"version":3,"file":"UserEventSystem.d.ts","sourceRoot":"","sources":["../../../src/Api/UserEventSystem.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAA;AAEhC,uEAAuE;AACvE,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,CAAA"}
@@ -1,3 +1,4 @@
1
+ /** Common fields shared across all tracking event types. */
1
2
  export interface CommonFields {
2
3
  funnel?: string;
3
4
  testData?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"CommonFields.d.ts","sourceRoot":"","sources":["../../src/CommonFields.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB"}
1
+ {"version":3,"file":"CommonFields.d.ts","sourceRoot":"","sources":["../../src/CommonFields.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB"}
@@ -1,3 +1,4 @@
1
+ /** External tracking identifiers from third-party cookies and sessions (Facebook, Google, TikTok, etc.). */
1
2
  export interface ExIds {
2
3
  fbc?: string;
3
4
  fbp?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"ExIds.d.ts","sourceRoot":"","sources":["../../src/ExIds.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,KAAK;IACpB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB"}
1
+ {"version":3,"file":"ExIds.d.ts","sourceRoot":"","sources":["../../src/ExIds.ts"],"names":[],"mappings":"AAAA,4GAA4G;AAC5G,MAAM,WAAW,KAAK;IACpB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB"}
@@ -1,4 +1,5 @@
1
1
  import type { CommonFields } from './CommonFields.ts';
2
+ /** Fields for a funnel-started tracking event. */
2
3
  export interface FunnelStartedFields extends CommonFields {
3
4
  name: string;
4
5
  }
@@ -1 +1 @@
1
- {"version":3,"file":"FunnelStartedFields.d.ts","sourceRoot":"","sources":["../../src/FunnelStartedFields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAErD,MAAM,WAAW,mBAAoB,SAAQ,YAAY;IACvD,IAAI,EAAE,MAAM,CAAA;CACb"}
1
+ {"version":3,"file":"FunnelStartedFields.d.ts","sourceRoot":"","sources":["../../src/FunnelStartedFields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAErD,kDAAkD;AAClD,MAAM,WAAW,mBAAoB,SAAQ,YAAY;IACvD,IAAI,EAAE,MAAM,CAAA;CACb"}
@@ -2,6 +2,7 @@ import type { JsonObject } from '@xylabs/object';
2
2
  import type { UserEvent } from './Api/index.ts';
3
3
  import { PixelApi } from './Api/index.ts';
4
4
  import type { ExIds } from './ExIds.ts';
5
+ /** Singleton pixel tracker that queues and sends user events to the XY Labs tracking API. */
5
6
  export declare class XyPixel {
6
7
  static api: PixelApi;
7
8
  private static _instance?;
@@ -14,11 +15,31 @@ export declare class XyPixel {
14
15
  queue: UserEvent[];
15
16
  private queueMutex;
16
17
  private constructor();
18
+ /** Returns the singleton XyPixel instance, throwing if not yet initialized. */
17
19
  static get instance(): XyPixel;
20
+ /**
21
+ * Initializes the XyPixel singleton with the given pixel ID.
22
+ * @param pixelId - The pixel identifier for this tracking instance
23
+ * @returns The newly created XyPixel instance
24
+ */
18
25
  static init(pixelId: string): XyPixel;
26
+ /**
27
+ * Replaces the default PixelApi instance used for sending events.
28
+ * @param api - The PixelApi instance to use
29
+ */
19
30
  static selectApi(api: PixelApi): void;
20
31
  private static utmFields;
32
+ /**
33
+ * Associates an email address with this pixel instance, hashing it for privacy.
34
+ * @param email - The email address to identify the user with
35
+ */
21
36
  identify(email?: string): void;
37
+ /**
38
+ * Queues a tracking event and attempts to flush the queue to the API.
39
+ * @param event - The event name
40
+ * @param fields - Optional event-specific fields
41
+ * @param eventId - Optional unique event identifier
42
+ */
22
43
  send<T extends JsonObject>(event: string, fields?: T, eventId?: string): Promise<void>;
23
44
  private tryFlushQueue;
24
45
  private updateFbId;
@@ -1 +1 @@
1
- {"version":3,"file":"Pixel.d.ts","sourceRoot":"","sources":["../../src/Pixel.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAKhD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAQvC,qBAAa,OAAO;IAClB,MAAM,CAAC,GAAG,WAAiB;IAE3B,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAS;IAClC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAW;IAEtC,GAAG,SAAwB;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,KAAK,CAAC,EAAE,KAAK,CAAA;IACb,OAAO,CAAC,EAAE,MAAM,CAAA;IAEhB,KAAK,EAAE,SAAS,EAAE,CAAK;IAEvB,OAAO,CAAC,UAAU,CAAc;IAEhC,OAAO;IAKP,MAAM,KAAK,QAAQ,IAAI,OAAO,CAE7B;IAED,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM;IAK3B,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,QAAQ;IAI9B,OAAO,CAAC,MAAM,CAAC,SAAS,CAKvB;IAED,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM;IAQjB,IAAI,CAAC,CAAC,SAAS,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM;YAsB9D,aAAa;IAqB3B,OAAO,CAAC,UAAU;CAWnB"}
1
+ {"version":3,"file":"Pixel.d.ts","sourceRoot":"","sources":["../../src/Pixel.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAKhD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAQvC,6FAA6F;AAC7F,qBAAa,OAAO;IAClB,MAAM,CAAC,GAAG,WAAiB;IAE3B,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAS;IAClC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAW;IAEtC,GAAG,SAAwB;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,KAAK,CAAC,EAAE,KAAK,CAAA;IACb,OAAO,CAAC,EAAE,MAAM,CAAA;IAEhB,KAAK,EAAE,SAAS,EAAE,CAAK;IAEvB,OAAO,CAAC,UAAU,CAAc;IAEhC,OAAO;IAKP,+EAA+E;IAC/E,MAAM,KAAK,QAAQ,IAAI,OAAO,CAE7B;IAED;;;;OAIG;IACH,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM;IAK3B;;;OAGG;IACH,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,QAAQ;IAI9B,OAAO,CAAC,MAAM,CAAC,SAAS,CAKvB;IAED;;;OAGG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM;IAQvB;;;;;OAKG;IACG,IAAI,CAAC,CAAC,SAAS,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM;YAsB9D,aAAa;IAqB3B,OAAO,CAAC,UAAU;CAWnB"}
@@ -1,4 +1,5 @@
1
1
  import type { CommonFields } from './CommonFields.ts';
2
+ /** Fields for a purchase tracking event. */
2
3
  export interface PurchaseFields extends CommonFields {
3
4
  id: string;
4
5
  name?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"PurchaseFields.d.ts","sourceRoot":"","sources":["../../src/PurchaseFields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAErD,MAAM,WAAW,cAAe,SAAQ,YAAY;IAClD,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;CACf"}
1
+ {"version":3,"file":"PurchaseFields.d.ts","sourceRoot":"","sources":["../../src/PurchaseFields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAErD,4CAA4C;AAC5C,MAAM,WAAW,cAAe,SAAQ,YAAY;IAClD,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;CACf"}
@@ -1,8 +1,13 @@
1
+ /** Tracks and persists the document referrer in both session and local storage. */
1
2
  export declare class Referrer {
2
3
  private static storageId;
3
4
  local: string;
4
5
  session: string;
5
6
  constructor();
7
+ /**
8
+ * Returns the referrer data as a JSON object, or undefined if both values are empty.
9
+ * @returns An object with local and session referrer strings, or undefined
10
+ */
6
11
  toJson(): {
7
12
  local: string;
8
13
  session: string;
@@ -1 +1 @@
1
- {"version":3,"file":"Referrer.d.ts","sourceRoot":"","sources":["../../src/Referrer.ts"],"names":[],"mappings":"AAAA,qBAAa,QAAQ;IACnB,OAAO,CAAC,MAAM,CAAC,SAAS,CAAmB;IAC3C,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;;IAQf,MAAM;;;;IASN,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,cAAc;CAMvB"}
1
+ {"version":3,"file":"Referrer.d.ts","sourceRoot":"","sources":["../../src/Referrer.ts"],"names":[],"mappings":"AAAA,mFAAmF;AACnF,qBAAa,QAAQ;IACnB,OAAO,CAAC,MAAM,CAAC,SAAS,CAAmB;IAC3C,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;;IAQf;;;OAGG;IACH,MAAM;;;;IASN,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,cAAc;CAMvB"}
@@ -1,4 +1,5 @@
1
1
  import type { CommonFields } from './CommonFields.ts';
2
+ /** Fields for a test-started tracking event (e.g. A/B test). */
2
3
  export interface TestStartedFields extends CommonFields {
3
4
  name: string;
4
5
  }
@@ -1 +1 @@
1
- {"version":3,"file":"TestStartedFields.d.ts","sourceRoot":"","sources":["../../src/TestStartedFields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAErD,MAAM,WAAW,iBAAkB,SAAQ,YAAY;IACrD,IAAI,EAAE,MAAM,CAAA;CACb"}
1
+ {"version":3,"file":"TestStartedFields.d.ts","sourceRoot":"","sources":["../../src/TestStartedFields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAErD,gEAAgE;AAChE,MAAM,WAAW,iBAAkB,SAAQ,YAAY;IACrD,IAAI,EAAE,MAAM,CAAA;CACb"}
@@ -1,7 +1,9 @@
1
+ /** Generates and persists a unique user identifier in localStorage. */
1
2
  export declare class UniqueUserId {
2
3
  private static localStorageId;
3
4
  id: string;
4
5
  constructor();
6
+ /** Returns the unique user ID as a string. */
5
7
  toString(): string;
6
8
  private generateId;
7
9
  }
@@ -1 +1 @@
1
- {"version":3,"file":"UniqueUserId.d.ts","sourceRoot":"","sources":["../../src/UniqueUserId.ts"],"names":[],"mappings":"AAAA,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAC,cAAc,CAAc;IAC3C,EAAE,EAAE,MAAM,CAAA;;IAOV,QAAQ;IAIR,OAAO,CAAC,UAAU;CAGnB"}
1
+ {"version":3,"file":"UniqueUserId.d.ts","sourceRoot":"","sources":["../../src/UniqueUserId.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAC,cAAc,CAAc;IAC3C,EAAE,EAAE,MAAM,CAAA;;IAOV,8CAA8C;IAC9C,QAAQ;IAIR,OAAO,CAAC,UAAU;CAGnB"}
@@ -1,4 +1,5 @@
1
1
  import type { CommonFields } from './CommonFields.ts';
2
+ /** Fields for a user click tracking event. */
2
3
  export interface UserClickFields extends CommonFields {
3
4
  elementName: string;
4
5
  elementType: string;
@@ -1 +1 @@
1
- {"version":3,"file":"UserClickFields.d.ts","sourceRoot":"","sources":["../../src/UserClickFields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAErD,MAAM,WAAW,eAAgB,SAAQ,YAAY;IACnD,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB"}
1
+ {"version":3,"file":"UserClickFields.d.ts","sourceRoot":"","sources":["../../src/UserClickFields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAErD,8CAA8C;AAC9C,MAAM,WAAW,eAAgB,SAAQ,YAAY;IACnD,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB"}
@@ -4,10 +4,15 @@ import type { FunnelStartedFields } from './FunnelStartedFields.ts';
4
4
  import type { TestStartedFields } from './TestStartedFields.ts';
5
5
  import type { UserClickFields } from './UserClickFields.ts';
6
6
  import type { ViewContentFields } from './ViewContentFields.ts';
7
+ /** Abstract base class for handling user tracking events. */
7
8
  export declare abstract class UserEventHandler<TData extends EmptyObject> {
9
+ /** Tracks a funnel-started event. */
8
10
  abstract funnelStarted<T extends TData>(fields: T | FunnelStartedFields): Promisable<void>;
11
+ /** Tracks a test-started event. */
9
12
  abstract testStarted<T extends TData>(fields: T | TestStartedFields): Promisable<void>;
13
+ /** Tracks a user click event. */
10
14
  abstract userClick<T extends TData>(fields: T | UserClickFields): Promisable<void>;
15
+ /** Tracks a view-content event. */
11
16
  abstract viewContent<T extends TData>(fields: T | ViewContentFields): Promisable<void>;
12
17
  }
13
18
  //# sourceMappingURL=UserEventHandler.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"UserEventHandler.d.ts","sourceRoot":"","sources":["../../src/UserEventHandler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AACjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAEjD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AACnE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAC3D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAE/D,8BAAsB,gBAAgB,CAAC,KAAK,SAAS,WAAW;IAC9D,QAAQ,CAAC,aAAa,CAAC,CAAC,SAAS,KAAK,EAAE,MAAM,EAAE,CAAC,GAAG,mBAAmB,GAAG,UAAU,CAAC,IAAI,CAAC;IAC1F,QAAQ,CAAC,WAAW,CAAC,CAAC,SAAS,KAAK,EAAE,MAAM,EAAE,CAAC,GAAG,iBAAiB,GAAG,UAAU,CAAC,IAAI,CAAC;IACtF,QAAQ,CAAC,SAAS,CAAC,CAAC,SAAS,KAAK,EAAE,MAAM,EAAE,CAAC,GAAG,eAAe,GAAG,UAAU,CAAC,IAAI,CAAC;IAClF,QAAQ,CAAC,WAAW,CAAC,CAAC,SAAS,KAAK,EAAE,MAAM,EAAE,CAAC,GAAG,iBAAiB,GAAG,UAAU,CAAC,IAAI,CAAC;CACvF"}
1
+ {"version":3,"file":"UserEventHandler.d.ts","sourceRoot":"","sources":["../../src/UserEventHandler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AACjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAEjD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AACnE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAC3D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAE/D,6DAA6D;AAC7D,8BAAsB,gBAAgB,CAAC,KAAK,SAAS,WAAW;IAC9D,qCAAqC;IACrC,QAAQ,CAAC,aAAa,CAAC,CAAC,SAAS,KAAK,EAAE,MAAM,EAAE,CAAC,GAAG,mBAAmB,GAAG,UAAU,CAAC,IAAI,CAAC;IAC1F,mCAAmC;IACnC,QAAQ,CAAC,WAAW,CAAC,CAAC,SAAS,KAAK,EAAE,MAAM,EAAE,CAAC,GAAG,iBAAiB,GAAG,UAAU,CAAC,IAAI,CAAC;IACtF,iCAAiC;IACjC,QAAQ,CAAC,SAAS,CAAC,CAAC,SAAS,KAAK,EAAE,MAAM,EAAE,CAAC,GAAG,eAAe,GAAG,UAAU,CAAC,IAAI,CAAC;IAClF,mCAAmC;IACnC,QAAQ,CAAC,WAAW,CAAC,CAAC,SAAS,KAAK,EAAE,MAAM,EAAE,CAAC,GAAG,iBAAiB,GAAG,UAAU,CAAC,IAAI,CAAC;CACvF"}
@@ -1,9 +1,19 @@
1
+ /** Tracks UTM campaign parameters from query strings, persisting history in localStorage. */
1
2
  export declare class UtmFields {
2
3
  private static localStorageId;
3
4
  fields: Record<string, string>[];
4
5
  constructor();
6
+ /**
7
+ * Parses UTM parameters from the current URL query string.
8
+ * @returns A record of UTM key-value pairs, or null if none are present
9
+ */
5
10
  getUtmRecord: () => Record<string, string> | null;
11
+ /** Returns the UTM fields history as a JSON string. */
6
12
  toString(): string;
13
+ /**
14
+ * Checks the query string for new UTM values and appends them to the history if changed.
15
+ * @returns The current UTM fields array, or undefined if empty
16
+ */
7
17
  update(): Record<string, string>[];
8
18
  }
9
19
  //# sourceMappingURL=UtmFields.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"UtmFields.d.ts","sourceRoot":"","sources":["../../src/UtmFields.ts"],"names":[],"mappings":"AAEA,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAC,cAAc,CAAc;IAC3C,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAK;;IAgBrC,YAAY,sCAWX;IAED,QAAQ;IAKR,MAAM;CAOP"}
1
+ {"version":3,"file":"UtmFields.d.ts","sourceRoot":"","sources":["../../src/UtmFields.ts"],"names":[],"mappings":"AAEA,6FAA6F;AAC7F,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAC,cAAc,CAAc;IAC3C,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAK;;IAgBrC;;;OAGG;IACH,YAAY,sCAWX;IAED,uDAAuD;IACvD,QAAQ;IAIR;;;OAGG;IAEH,MAAM;CAOP"}
@@ -1,4 +1,5 @@
1
1
  import type { CommonFields } from './CommonFields.ts';
2
+ /** Fields for a view-content tracking event. */
2
3
  export interface ViewContentFields extends CommonFields {
3
4
  name: string;
4
5
  path: string;
@@ -1 +1 @@
1
- {"version":3,"file":"ViewContentFields.d.ts","sourceRoot":"","sources":["../../src/ViewContentFields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAErD,MAAM,WAAW,iBAAkB,SAAQ,YAAY;IACrD,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;CACb"}
1
+ {"version":3,"file":"ViewContentFields.d.ts","sourceRoot":"","sources":["../../src/ViewContentFields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAErD,gDAAgD;AAChD,MAAM,WAAW,iBAAkB,SAAQ,YAAY;IACrD,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;CACb"}
@@ -1,3 +1,4 @@
1
+ /** JSON structure for an XY Labs tracking event as stored or transmitted. */
1
2
  export interface XyLabsTrackingEventJson {
2
3
  cid: string;
3
4
  create_time?: number;
@@ -1 +1 @@
1
- {"version":3,"file":"XyLabsTrackingEventJson.d.ts","sourceRoot":"","sources":["../../src/XyLabsTrackingEventJson.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,uBAAuB;IACtC,GAAG,EAAE,MAAM,CAAA;IACX,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAChC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;CAC1D"}
1
+ {"version":3,"file":"XyLabsTrackingEventJson.d.ts","sourceRoot":"","sources":["../../src/XyLabsTrackingEventJson.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,MAAM,WAAW,uBAAuB;IACtC,GAAG,EAAE,MAAM,CAAA;IACX,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAChC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;CAC1D"}
@@ -5,12 +5,18 @@ import type { TestStartedFields } from './TestStartedFields.ts';
5
5
  import type { UserClickFields } from './UserClickFields.ts';
6
6
  import { UserEventHandler } from './UserEventHandler.ts';
7
7
  import type { ViewContentFields } from './ViewContentFields.ts';
8
+ /** Concrete event handler that sends tracking events through the XyPixel singleton. */
8
9
  export declare class XyUserEventHandler<T extends EmptyObject = EmptyObject> extends UserEventHandler<T> {
9
10
  constructor();
11
+ /** Sends a funnel-started event via the pixel API. */
10
12
  funnelStarted(fields: T | FunnelStartedFields): Promise<void>;
13
+ /** Sends a purchase event via the pixel API. */
11
14
  purchase(fields: T | PurchaseFields): Promise<void>;
15
+ /** Sends a test-started event via the pixel API. */
12
16
  testStarted(fields: T | TestStartedFields): Promise<void>;
17
+ /** Sends a user click event via the pixel API. */
13
18
  userClick(fields: T | UserClickFields): Promise<void>;
19
+ /** Sends a view-content event via the pixel API. */
14
20
  viewContent(fields: T | ViewContentFields): Promise<void>;
15
21
  }
16
22
  //# sourceMappingURL=XyUserEventHandler.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"XyUserEventHandler.d.ts","sourceRoot":"","sources":["../../src/XyUserEventHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAoB,MAAM,gBAAgB,CAAA;AAEnE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAEnE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAE/D,qBAAa,kBAAkB,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,CAAE,SAAQ,gBAAgB,CAAC,CAAC,CAAC;;IAKxF,aAAa,CAAC,MAAM,EAAE,CAAC,GAAG,mBAAmB;IAI7C,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG,cAAc;IAInC,WAAW,CAAC,MAAM,EAAE,CAAC,GAAG,iBAAiB;IAIzC,SAAS,CAAC,MAAM,EAAE,CAAC,GAAG,eAAe;IAIrC,WAAW,CAAC,MAAM,EAAE,CAAC,GAAG,iBAAiB;CAGhD"}
1
+ {"version":3,"file":"XyUserEventHandler.d.ts","sourceRoot":"","sources":["../../src/XyUserEventHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAoB,MAAM,gBAAgB,CAAA;AAEnE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAEnE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAE/D,uFAAuF;AACvF,qBAAa,kBAAkB,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,CAAE,SAAQ,gBAAgB,CAAC,CAAC,CAAC;;IAK9F,sDAAsD;IAChD,aAAa,CAAC,MAAM,EAAE,CAAC,GAAG,mBAAmB;IAInD,gDAAgD;IAC1C,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG,cAAc;IAIzC,oDAAoD;IAC9C,WAAW,CAAC,MAAM,EAAE,CAAC,GAAG,iBAAiB;IAI/C,kDAAkD;IAC5C,SAAS,CAAC,MAAM,EAAE,CAAC,GAAG,eAAe;IAI3C,oDAAoD;IAC9C,WAAW,CAAC,MAAM,EAAE,CAAC,GAAG,iBAAiB;CAGhD"}
@@ -1,3 +1,8 @@
1
1
  import Bowser from 'bowser';
2
+ /**
3
+ * Returns parsed browser, OS, and engine information from the user agent string.
4
+ * Results are cached after the first call.
5
+ * @returns The parsed system info, or undefined if parsing fails
6
+ */
2
7
  export declare const getSystemInfo: () => Bowser.Parser.ParsedResult | undefined;
3
8
  //# sourceMappingURL=getSystemInfo.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"getSystemInfo.d.ts","sourceRoot":"","sources":["../../src/getSystemInfo.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAA;AAM3B,eAAO,MAAM,aAAa,8CAQzB,CAAA"}
1
+ {"version":3,"file":"getSystemInfo.d.ts","sourceRoot":"","sources":["../../src/getSystemInfo.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAA;AAM3B;;;;GAIG;AACH,eAAO,MAAM,aAAa,8CAQzB,CAAA"}
@@ -12,6 +12,11 @@ var PixelApi = class {
12
12
  constructor(baseUri = "prod") {
13
13
  this.endPoint = isUndefined(apiBaseUri[baseUri]) ? baseUri : `${apiBaseUri[baseUri]}/t/event/queue`;
14
14
  }
15
+ /**
16
+ * Sends an array of user events to the tracking API.
17
+ * @param events - The events to submit
18
+ * @returns The response data from the API
19
+ */
15
20
  async trackEvents(events) {
16
21
  return (await axios.post(this.endPoint, events)).data;
17
22
  }
@@ -46,6 +51,10 @@ var Referrer = class _Referrer {
46
51
  this.local = this.getFromLocal() ?? document.referrer;
47
52
  globalThis.localStorage.setItem(_Referrer.storageId, this.local);
48
53
  }
54
+ /**
55
+ * Returns the referrer data as a JSON object, or undefined if both values are empty.
56
+ * @returns An object with local and session referrer strings, or undefined
57
+ */
49
58
  toJson() {
50
59
  if (this.local.length > 0 || this.session.length > 0) {
51
60
  return {
@@ -76,6 +85,7 @@ var UniqueUserId = class _UniqueUserId {
76
85
  this.id = globalThis.localStorage.getItem(_UniqueUserId.localStorageId) ?? this.generateId();
77
86
  globalThis.localStorage.setItem(_UniqueUserId.localStorageId, this.id);
78
87
  }
88
+ /** Returns the unique user ID as a string. */
79
89
  toString() {
80
90
  return this.id;
81
91
  }
@@ -102,6 +112,10 @@ var UtmFields = class _UtmFields {
102
112
  this.update();
103
113
  globalThis.localStorage.setItem(_UtmFields.localStorageId, JSON.stringify(this.fields));
104
114
  }
115
+ /**
116
+ * Parses UTM parameters from the current URL query string.
117
+ * @returns A record of UTM key-value pairs, or null if none are present
118
+ */
105
119
  getUtmRecord = () => {
106
120
  const record = {};
107
121
  const parsedQueryString = document.location.search.split("?")[1]?.split("&") ?? [];
@@ -114,9 +128,14 @@ var UtmFields = class _UtmFields {
114
128
  }
115
129
  return Object.keys(record).length > 0 ? record : null;
116
130
  };
131
+ /** Returns the UTM fields history as a JSON string. */
117
132
  toString() {
118
133
  return JSON.stringify(this.fields);
119
134
  }
135
+ /**
136
+ * Checks the query string for new UTM values and appends them to the history if changed.
137
+ * @returns The current UTM fields array, or undefined if empty
138
+ */
120
139
  // check the query string and if there an new/updated utm values, add them to the fields
121
140
  update() {
122
141
  const record = this.getUtmRecord();
@@ -144,13 +163,23 @@ var XyPixel = class _XyPixel {
144
163
  this.pixelId = pixelId;
145
164
  this.email_hash = localStorage.getItem(emailHashLocalStorageName);
146
165
  }
166
+ /** Returns the singleton XyPixel instance, throwing if not yet initialized. */
147
167
  static get instance() {
148
168
  return assertEx(this._instance, () => "XyPixel uninitialized");
149
169
  }
170
+ /**
171
+ * Initializes the XyPixel singleton with the given pixel ID.
172
+ * @param pixelId - The pixel identifier for this tracking instance
173
+ * @returns The newly created XyPixel instance
174
+ */
150
175
  static init(pixelId) {
151
176
  this._instance = new _XyPixel(pixelId);
152
177
  return this._instance;
153
178
  }
179
+ /**
180
+ * Replaces the default PixelApi instance used for sending events.
181
+ * @param api - The PixelApi instance to use
182
+ */
154
183
  static selectApi(api) {
155
184
  this.api = api;
156
185
  }
@@ -160,6 +189,10 @@ var XyPixel = class _XyPixel {
160
189
  }
161
190
  return this.utmFieldsObj;
162
191
  };
192
+ /**
193
+ * Associates an email address with this pixel instance, hashing it for privacy.
194
+ * @param email - The email address to identify the user with
195
+ */
163
196
  identify(email) {
164
197
  this.email = email;
165
198
  this.email_hash = email !== void 0 && email.length > 0 ? md5.hash(email, true) : void 0;
@@ -167,6 +200,12 @@ var XyPixel = class _XyPixel {
167
200
  localStorage.setItem(emailHashLocalStorageName, this.email_hash);
168
201
  }
169
202
  }
203
+ /**
204
+ * Queues a tracking event and attempts to flush the queue to the API.
205
+ * @param event - The event name
206
+ * @param fields - Optional event-specific fields
207
+ * @param eventId - Optional unique event identifier
208
+ */
170
209
  async send(event, fields, eventId) {
171
210
  this.updateFbId();
172
211
  const utm = _XyPixel.utmFields().update();
@@ -229,18 +268,23 @@ var XyUserEventHandler = class extends UserEventHandler {
229
268
  constructor() {
230
269
  super();
231
270
  }
271
+ /** Sends a funnel-started event via the pixel API. */
232
272
  async funnelStarted(fields) {
233
273
  return await XyPixel.instance.send("FunnelStarted", toSafeJsonObject(fields, [], 10));
234
274
  }
275
+ /** Sends a purchase event via the pixel API. */
235
276
  async purchase(fields) {
236
277
  return await XyPixel.instance.send("Purchase", toSafeJsonObject(fields, [], 10));
237
278
  }
279
+ /** Sends a test-started event via the pixel API. */
238
280
  async testStarted(fields) {
239
281
  return await XyPixel.instance.send("TestStarted", toSafeJsonObject(fields, [], 10));
240
282
  }
283
+ /** Sends a user click event via the pixel API. */
241
284
  async userClick(fields) {
242
285
  return await XyPixel.instance.send("ViewPage", toSafeJsonObject(fields, [], 10));
243
286
  }
287
+ /** Sends a view-content event via the pixel API. */
244
288
  async viewContent(fields) {
245
289
  return await XyPixel.instance.send("ViewContent", toSafeJsonObject(fields, [], 10));
246
290
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/Api/Api.ts","../../src/Pixel.ts","../../src/getSystemInfo.ts","../../src/Referrer.ts","../../src/UniqueUserId.ts","../../src/UtmFields.ts","../../src/UserEventHandler.ts","../../src/XyUserEventHandler.ts"],"sourcesContent":["import { isUndefined } from '@xylabs/typeof'\nimport axios from 'axios'\n\nimport type { UserEvent } from './UserEvent.ts'\n\nconst apiBaseUri: Record<string, string> = {\n beta: 'https://pixel.xylabs.com',\n local: 'http://localhost:3030',\n prod: 'https://pixel.xylabs.com',\n}\n\nexport class PixelApi {\n private endPoint: string\n\n /* baseUri can either be a preset (prod, beta, local), or a specific uri */\n constructor(baseUri = 'prod') {\n this.endPoint = isUndefined(apiBaseUri[baseUri]) ? baseUri : `${apiBaseUri[baseUri]}/t/event/queue`\n }\n\n async trackEvents(events: UserEvent[]) {\n return (await axios.post(this.endPoint, events)).data\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport type { JsonObject } from '@xylabs/object'\nimport { Mutex } from 'async-mutex'\nimport Cookies from 'js-cookie'\nimport md5 from 'spark-md5'\n\nimport type { UserEvent } from './Api/index.ts'\nimport { PixelApi } from './Api/index.ts'\nimport type { ExIds } from './ExIds.ts'\nimport { getSystemInfo } from './getSystemInfo.ts'\nimport { Referrer } from './Referrer.ts'\nimport { UniqueUserId } from './UniqueUserId.ts'\nimport { UtmFields } from './UtmFields.ts'\n\nconst emailHashLocalStorageName = 'xy_email_hash'\n\nexport class XyPixel {\n static api = new PixelApi()\n\n private static _instance?: XyPixel\n private static utmFieldsObj: UtmFields\n\n cid = new UniqueUserId().id\n email?: string\n email_hash?: string | null\n exids?: ExIds\n pixelId?: string\n\n queue: UserEvent[] = []\n\n private queueMutex = new Mutex()\n\n private constructor(pixelId: string) {\n this.pixelId = pixelId\n this.email_hash = localStorage.getItem(emailHashLocalStorageName)\n }\n\n static get instance(): XyPixel {\n return assertEx(this._instance, () => 'XyPixel uninitialized')\n }\n\n static init(pixelId: string) {\n this._instance = new XyPixel(pixelId)\n return this._instance\n }\n\n static selectApi(api: PixelApi) {\n this.api = api\n }\n\n private static utmFields = () => {\n if (this.utmFieldsObj === undefined) {\n this.utmFieldsObj = new UtmFields()\n }\n return this.utmFieldsObj\n }\n\n identify(email?: string) {\n this.email = email\n this.email_hash = (email !== undefined && email.length > 0) ? md5.hash(email, true) : undefined\n if (this.email_hash !== undefined) {\n localStorage.setItem(emailHashLocalStorageName, this.email_hash)\n }\n }\n\n async send<T extends JsonObject>(event: string, fields?: T, eventId?: string) {\n this.updateFbId()\n const utm = XyPixel.utmFields().update()\n const referrer = new Referrer()\n this.queue.push({\n cid: this.cid,\n create_time: Date.now(),\n email_hash: this.email_hash ?? undefined,\n event,\n event_id: eventId,\n exids: this.exids,\n fields,\n host: document.location.host,\n pathname: document.location.pathname,\n pixel: this.pixelId,\n referrer: referrer.toJson(),\n system: getSystemInfo(),\n utm,\n })\n await this.tryFlushQueue()\n }\n\n private async tryFlushQueue() {\n await this.queueMutex.runExclusive(async () => {\n if (this.queue.length === 0) return\n const api = XyPixel.api\n if (api !== undefined) {\n const events = this.queue\n this.queue = []\n try {\n await api.trackEvents(events)\n } catch (ex) {\n if (events !== undefined) {\n // put it back since it failed\n this.queue = [...this.queue, ...events]\n }\n // eslint-disable-next-line no-console\n console.error(ex)\n }\n }\n })\n }\n\n private updateFbId() {\n this.exids = {\n fbc: Cookies.get('_fbc'),\n fbp: Cookies.get('_fbp'),\n ga: Cookies.get('_ga'),\n gclid: Cookies.get('_gcl_aw'),\n rdt_uid: Cookies.get('rdt_uid'),\n scid: Cookies.get('_scid'),\n tt_sessionId: sessionStorage.getItem('tt_sessionId') ?? undefined,\n }\n }\n}\n","import Bowser from 'bowser'\n\nimport type { UserEventSystem } from './Api/index.ts'\n\nlet systemInfo: UserEventSystem | undefined\n\nexport const getSystemInfo = () => {\n try {\n systemInfo = systemInfo || Bowser.getParser(globalThis.navigator.userAgent).getResult()\n } catch (ex) {\n // eslint-disable-next-line no-console\n console.log(`getSystemInfo Error: ${ex}`)\n }\n return systemInfo\n}\n","export class Referrer {\n private static storageId = '_coin_referrer'\n local: string\n session: string\n constructor() {\n this.session = this.getFromSession() ?? document.referrer\n sessionStorage.setItem(Referrer.storageId, this.session)\n this.local = this.getFromLocal() ?? document.referrer\n globalThis.localStorage.setItem(Referrer.storageId, this.local)\n }\n\n toJson() {\n if ((this.local.length > 0) || (this.session.length > 0)) {\n return {\n local: this.local,\n session: this.session,\n }\n }\n }\n\n private getFromLocal() {\n const value = globalThis.localStorage.getItem(Referrer.storageId)\n if (value !== null && value.length > 0) {\n return value\n }\n }\n\n private getFromSession() {\n const value = sessionStorage.getItem(Referrer.storageId)\n if (value !== null && value.length > 0) {\n return value\n }\n }\n}\n","export class UniqueUserId {\n private static localStorageId = '_coin_cid'\n id: string\n\n constructor() {\n this.id = globalThis.localStorage.getItem(UniqueUserId.localStorageId) ?? this.generateId()\n globalThis.localStorage.setItem(UniqueUserId.localStorageId, this.id)\n }\n\n toString() {\n return this.id\n }\n\n private generateId() {\n return crypto.randomUUID()\n }\n}\n","import isEqual from 'fast-deep-equal'\n\nexport class UtmFields {\n private static localStorageId = '_coin_utm'\n fields: Record<string, string>[] = []\n constructor() {\n const storedString = globalThis.localStorage.getItem(UtmFields.localStorageId) ?? '[]'\n try {\n this.fields = JSON.parse(storedString)\n } catch {\n this.fields = []\n }\n // this clears the old object version if needed\n if (!Array.isArray(this.fields)) {\n this.fields = []\n }\n this.update()\n globalThis.localStorage.setItem(UtmFields.localStorageId, JSON.stringify(this.fields))\n }\n\n getUtmRecord = () => {\n const record: Record<string, string> = {}\n const parsedQueryString = document.location.search.split('?')[1]?.split('&') ?? []\n for (const item of parsedQueryString) {\n const [fullKey, value] = item.split('=')\n const [keyCategory, keyName] = fullKey.split('_')\n if (keyCategory === 'utm') {\n record[keyName] = value\n }\n }\n return Object.keys(record).length > 0 ? record : null\n }\n\n toString() {\n return JSON.stringify(this.fields)\n }\n\n // check the query string and if there an new/updated utm values, add them to the fields\n update() {\n const record = this.getUtmRecord()\n if (record && !isEqual(this.fields.at(-1), record)) {\n this.fields.push(record)\n }\n return this.fields ?? undefined\n }\n}\n","import type { EmptyObject } from '@xylabs/object'\nimport type { Promisable } from '@xylabs/promise'\n\nimport type { FunnelStartedFields } from './FunnelStartedFields.ts'\nimport type { TestStartedFields } from './TestStartedFields.ts'\nimport type { UserClickFields } from './UserClickFields.ts'\nimport type { ViewContentFields } from './ViewContentFields.ts'\n\nexport abstract class UserEventHandler<TData extends EmptyObject> {\n abstract funnelStarted<T extends TData>(fields: T | FunnelStartedFields): Promisable<void>\n abstract testStarted<T extends TData>(fields: T | TestStartedFields): Promisable<void>\n abstract userClick<T extends TData>(fields: T | UserClickFields): Promisable<void>\n abstract viewContent<T extends TData>(fields: T | ViewContentFields): Promisable<void>\n}\n","import { type EmptyObject, toSafeJsonObject } from '@xylabs/object'\n\nimport type { FunnelStartedFields } from './FunnelStartedFields.ts'\nimport { XyPixel } from './Pixel.ts'\nimport type { PurchaseFields } from './PurchaseFields.ts'\nimport type { TestStartedFields } from './TestStartedFields.ts'\nimport type { UserClickFields } from './UserClickFields.ts'\nimport { UserEventHandler } from './UserEventHandler.ts'\nimport type { ViewContentFields } from './ViewContentFields.ts'\n\nexport class XyUserEventHandler<T extends EmptyObject = EmptyObject> extends UserEventHandler<T> {\n constructor() {\n super()\n }\n\n async funnelStarted(fields: T | FunnelStartedFields) {\n return await XyPixel.instance.send('FunnelStarted', toSafeJsonObject(fields, [], 10))\n }\n\n async purchase(fields: T | PurchaseFields) {\n return await XyPixel.instance.send('Purchase', toSafeJsonObject(fields, [], 10))\n }\n\n async testStarted(fields: T | TestStartedFields) {\n return await XyPixel.instance.send('TestStarted', toSafeJsonObject(fields, [], 10))\n }\n\n async userClick(fields: T | UserClickFields) {\n return await XyPixel.instance.send('ViewPage', toSafeJsonObject(fields, [], 10))\n }\n\n async viewContent(fields: T | ViewContentFields) {\n return await XyPixel.instance.send('ViewContent', toSafeJsonObject(fields, [], 10))\n }\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/Api/Api.ts","../../src/Pixel.ts","../../src/getSystemInfo.ts","../../src/Referrer.ts","../../src/UniqueUserId.ts","../../src/UtmFields.ts","../../src/UserEventHandler.ts","../../src/XyUserEventHandler.ts"],"sourcesContent":["import { isUndefined } from '@xylabs/typeof'\nimport axios from 'axios'\n\nimport type { UserEvent } from './UserEvent.ts'\n\nconst apiBaseUri: Record<string, string> = {\n beta: 'https://pixel.xylabs.com',\n local: 'http://localhost:3030',\n prod: 'https://pixel.xylabs.com',\n}\n\n/** HTTP client for sending tracking events to the XY Labs pixel API. */\nexport class PixelApi {\n private endPoint: string\n\n /* baseUri can either be a preset (prod, beta, local), or a specific uri */\n constructor(baseUri = 'prod') {\n this.endPoint = isUndefined(apiBaseUri[baseUri]) ? baseUri : `${apiBaseUri[baseUri]}/t/event/queue`\n }\n\n /**\n * Sends an array of user events to the tracking API.\n * @param events - The events to submit\n * @returns The response data from the API\n */\n async trackEvents(events: UserEvent[]) {\n return (await axios.post(this.endPoint, events)).data\n }\n}\n","import { assertEx } from '@xylabs/assert'\nimport type { JsonObject } from '@xylabs/object'\nimport { Mutex } from 'async-mutex'\nimport Cookies from 'js-cookie'\nimport md5 from 'spark-md5'\n\nimport type { UserEvent } from './Api/index.ts'\nimport { PixelApi } from './Api/index.ts'\nimport type { ExIds } from './ExIds.ts'\nimport { getSystemInfo } from './getSystemInfo.ts'\nimport { Referrer } from './Referrer.ts'\nimport { UniqueUserId } from './UniqueUserId.ts'\nimport { UtmFields } from './UtmFields.ts'\n\nconst emailHashLocalStorageName = 'xy_email_hash'\n\n/** Singleton pixel tracker that queues and sends user events to the XY Labs tracking API. */\nexport class XyPixel {\n static api = new PixelApi()\n\n private static _instance?: XyPixel\n private static utmFieldsObj: UtmFields\n\n cid = new UniqueUserId().id\n email?: string\n email_hash?: string | null\n exids?: ExIds\n pixelId?: string\n\n queue: UserEvent[] = []\n\n private queueMutex = new Mutex()\n\n private constructor(pixelId: string) {\n this.pixelId = pixelId\n this.email_hash = localStorage.getItem(emailHashLocalStorageName)\n }\n\n /** Returns the singleton XyPixel instance, throwing if not yet initialized. */\n static get instance(): XyPixel {\n return assertEx(this._instance, () => 'XyPixel uninitialized')\n }\n\n /**\n * Initializes the XyPixel singleton with the given pixel ID.\n * @param pixelId - The pixel identifier for this tracking instance\n * @returns The newly created XyPixel instance\n */\n static init(pixelId: string) {\n this._instance = new XyPixel(pixelId)\n return this._instance\n }\n\n /**\n * Replaces the default PixelApi instance used for sending events.\n * @param api - The PixelApi instance to use\n */\n static selectApi(api: PixelApi) {\n this.api = api\n }\n\n private static utmFields = () => {\n if (this.utmFieldsObj === undefined) {\n this.utmFieldsObj = new UtmFields()\n }\n return this.utmFieldsObj\n }\n\n /**\n * Associates an email address with this pixel instance, hashing it for privacy.\n * @param email - The email address to identify the user with\n */\n identify(email?: string) {\n this.email = email\n this.email_hash = (email !== undefined && email.length > 0) ? md5.hash(email, true) : undefined\n if (this.email_hash !== undefined) {\n localStorage.setItem(emailHashLocalStorageName, this.email_hash)\n }\n }\n\n /**\n * Queues a tracking event and attempts to flush the queue to the API.\n * @param event - The event name\n * @param fields - Optional event-specific fields\n * @param eventId - Optional unique event identifier\n */\n async send<T extends JsonObject>(event: string, fields?: T, eventId?: string) {\n this.updateFbId()\n const utm = XyPixel.utmFields().update()\n const referrer = new Referrer()\n this.queue.push({\n cid: this.cid,\n create_time: Date.now(),\n email_hash: this.email_hash ?? undefined,\n event,\n event_id: eventId,\n exids: this.exids,\n fields,\n host: document.location.host,\n pathname: document.location.pathname,\n pixel: this.pixelId,\n referrer: referrer.toJson(),\n system: getSystemInfo(),\n utm,\n })\n await this.tryFlushQueue()\n }\n\n private async tryFlushQueue() {\n await this.queueMutex.runExclusive(async () => {\n if (this.queue.length === 0) return\n const api = XyPixel.api\n if (api !== undefined) {\n const events = this.queue\n this.queue = []\n try {\n await api.trackEvents(events)\n } catch (ex) {\n if (events !== undefined) {\n // put it back since it failed\n this.queue = [...this.queue, ...events]\n }\n // eslint-disable-next-line no-console\n console.error(ex)\n }\n }\n })\n }\n\n private updateFbId() {\n this.exids = {\n fbc: Cookies.get('_fbc'),\n fbp: Cookies.get('_fbp'),\n ga: Cookies.get('_ga'),\n gclid: Cookies.get('_gcl_aw'),\n rdt_uid: Cookies.get('rdt_uid'),\n scid: Cookies.get('_scid'),\n tt_sessionId: sessionStorage.getItem('tt_sessionId') ?? undefined,\n }\n }\n}\n","import Bowser from 'bowser'\n\nimport type { UserEventSystem } from './Api/index.ts'\n\nlet systemInfo: UserEventSystem | undefined\n\n/**\n * Returns parsed browser, OS, and engine information from the user agent string.\n * Results are cached after the first call.\n * @returns The parsed system info, or undefined if parsing fails\n */\nexport const getSystemInfo = () => {\n try {\n systemInfo = systemInfo || Bowser.getParser(globalThis.navigator.userAgent).getResult()\n } catch (ex) {\n // eslint-disable-next-line no-console\n console.log(`getSystemInfo Error: ${ex}`)\n }\n return systemInfo\n}\n","/** Tracks and persists the document referrer in both session and local storage. */\nexport class Referrer {\n private static storageId = '_coin_referrer'\n local: string\n session: string\n constructor() {\n this.session = this.getFromSession() ?? document.referrer\n sessionStorage.setItem(Referrer.storageId, this.session)\n this.local = this.getFromLocal() ?? document.referrer\n globalThis.localStorage.setItem(Referrer.storageId, this.local)\n }\n\n /**\n * Returns the referrer data as a JSON object, or undefined if both values are empty.\n * @returns An object with local and session referrer strings, or undefined\n */\n toJson() {\n if ((this.local.length > 0) || (this.session.length > 0)) {\n return {\n local: this.local,\n session: this.session,\n }\n }\n }\n\n private getFromLocal() {\n const value = globalThis.localStorage.getItem(Referrer.storageId)\n if (value !== null && value.length > 0) {\n return value\n }\n }\n\n private getFromSession() {\n const value = sessionStorage.getItem(Referrer.storageId)\n if (value !== null && value.length > 0) {\n return value\n }\n }\n}\n","/** Generates and persists a unique user identifier in localStorage. */\nexport class UniqueUserId {\n private static localStorageId = '_coin_cid'\n id: string\n\n constructor() {\n this.id = globalThis.localStorage.getItem(UniqueUserId.localStorageId) ?? this.generateId()\n globalThis.localStorage.setItem(UniqueUserId.localStorageId, this.id)\n }\n\n /** Returns the unique user ID as a string. */\n toString() {\n return this.id\n }\n\n private generateId() {\n return crypto.randomUUID()\n }\n}\n","import isEqual from 'fast-deep-equal'\n\n/** Tracks UTM campaign parameters from query strings, persisting history in localStorage. */\nexport class UtmFields {\n private static localStorageId = '_coin_utm'\n fields: Record<string, string>[] = []\n constructor() {\n const storedString = globalThis.localStorage.getItem(UtmFields.localStorageId) ?? '[]'\n try {\n this.fields = JSON.parse(storedString)\n } catch {\n this.fields = []\n }\n // this clears the old object version if needed\n if (!Array.isArray(this.fields)) {\n this.fields = []\n }\n this.update()\n globalThis.localStorage.setItem(UtmFields.localStorageId, JSON.stringify(this.fields))\n }\n\n /**\n * Parses UTM parameters from the current URL query string.\n * @returns A record of UTM key-value pairs, or null if none are present\n */\n getUtmRecord = () => {\n const record: Record<string, string> = {}\n const parsedQueryString = document.location.search.split('?')[1]?.split('&') ?? []\n for (const item of parsedQueryString) {\n const [fullKey, value] = item.split('=')\n const [keyCategory, keyName] = fullKey.split('_')\n if (keyCategory === 'utm') {\n record[keyName] = value\n }\n }\n return Object.keys(record).length > 0 ? record : null\n }\n\n /** Returns the UTM fields history as a JSON string. */\n toString() {\n return JSON.stringify(this.fields)\n }\n\n /**\n * Checks the query string for new UTM values and appends them to the history if changed.\n * @returns The current UTM fields array, or undefined if empty\n */\n // check the query string and if there an new/updated utm values, add them to the fields\n update() {\n const record = this.getUtmRecord()\n if (record && !isEqual(this.fields.at(-1), record)) {\n this.fields.push(record)\n }\n return this.fields ?? undefined\n }\n}\n","import type { EmptyObject } from '@xylabs/object'\nimport type { Promisable } from '@xylabs/promise'\n\nimport type { FunnelStartedFields } from './FunnelStartedFields.ts'\nimport type { TestStartedFields } from './TestStartedFields.ts'\nimport type { UserClickFields } from './UserClickFields.ts'\nimport type { ViewContentFields } from './ViewContentFields.ts'\n\n/** Abstract base class for handling user tracking events. */\nexport abstract class UserEventHandler<TData extends EmptyObject> {\n /** Tracks a funnel-started event. */\n abstract funnelStarted<T extends TData>(fields: T | FunnelStartedFields): Promisable<void>\n /** Tracks a test-started event. */\n abstract testStarted<T extends TData>(fields: T | TestStartedFields): Promisable<void>\n /** Tracks a user click event. */\n abstract userClick<T extends TData>(fields: T | UserClickFields): Promisable<void>\n /** Tracks a view-content event. */\n abstract viewContent<T extends TData>(fields: T | ViewContentFields): Promisable<void>\n}\n","import { type EmptyObject, toSafeJsonObject } from '@xylabs/object'\n\nimport type { FunnelStartedFields } from './FunnelStartedFields.ts'\nimport { XyPixel } from './Pixel.ts'\nimport type { PurchaseFields } from './PurchaseFields.ts'\nimport type { TestStartedFields } from './TestStartedFields.ts'\nimport type { UserClickFields } from './UserClickFields.ts'\nimport { UserEventHandler } from './UserEventHandler.ts'\nimport type { ViewContentFields } from './ViewContentFields.ts'\n\n/** Concrete event handler that sends tracking events through the XyPixel singleton. */\nexport class XyUserEventHandler<T extends EmptyObject = EmptyObject> extends UserEventHandler<T> {\n constructor() {\n super()\n }\n\n /** Sends a funnel-started event via the pixel API. */\n async funnelStarted(fields: T | FunnelStartedFields) {\n return await XyPixel.instance.send('FunnelStarted', toSafeJsonObject(fields, [], 10))\n }\n\n /** Sends a purchase event via the pixel API. */\n async purchase(fields: T | PurchaseFields) {\n return await XyPixel.instance.send('Purchase', toSafeJsonObject(fields, [], 10))\n }\n\n /** Sends a test-started event via the pixel API. */\n async testStarted(fields: T | TestStartedFields) {\n return await XyPixel.instance.send('TestStarted', toSafeJsonObject(fields, [], 10))\n }\n\n /** Sends a user click event via the pixel API. */\n async userClick(fields: T | UserClickFields) {\n return await XyPixel.instance.send('ViewPage', toSafeJsonObject(fields, [], 10))\n }\n\n /** Sends a view-content event via the pixel API. */\n async viewContent(fields: T | ViewContentFields) {\n return await XyPixel.instance.send('ViewContent', toSafeJsonObject(fields, [], 10))\n }\n}\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xylabs/pixel",
3
- "version": "5.0.83",
3
+ "version": "5.0.84",
4
4
  "description": "Event Client for xylabs ESB",
5
5
  "homepage": "https://xylabs.com",
6
6
  "bugs": {
@@ -35,10 +35,10 @@
35
35
  "!**/*.test.*"
36
36
  ],
37
37
  "dependencies": {
38
- "@xylabs/assert": "~5.0.83",
39
- "@xylabs/object": "~5.0.83",
40
- "@xylabs/promise": "~5.0.83",
41
- "@xylabs/typeof": "~5.0.83",
38
+ "@xylabs/assert": "~5.0.84",
39
+ "@xylabs/object": "~5.0.84",
40
+ "@xylabs/promise": "~5.0.84",
41
+ "@xylabs/typeof": "~5.0.84",
42
42
  "async-mutex": "~0.5.0",
43
43
  "bowser": "2.14.1",
44
44
  "fast-deep-equal": "~3.1.3",
@@ -49,9 +49,9 @@
49
49
  "@types/js-cookie": "~3.0.6",
50
50
  "@types/node": "~25.4.0",
51
51
  "@types/spark-md5": "~3.0.5",
52
- "@xylabs/ts-scripts-yarn3": "~7.4.11",
53
- "@xylabs/tsconfig": "~7.4.11",
54
- "@xylabs/tsconfig-dom": "~7.4.11",
52
+ "@xylabs/ts-scripts-yarn3": "~7.4.13",
53
+ "@xylabs/tsconfig": "~7.4.13",
54
+ "@xylabs/tsconfig-dom": "~7.4.13",
55
55
  "axios": "^1.13.6",
56
56
  "typescript": "~5.9.3",
57
57
  "vitest": "~4.0.18"