@tracelog/lib 2.1.0 → 2.1.1-rc.75.2

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.
@@ -720,7 +720,7 @@ var init_performance_constants = __esm({
720
720
  var version;
721
721
  var init_package = __esm({
722
722
  "package.json"() {
723
- version = "2.0.3";
723
+ version = "2.1.1";
724
724
  }
725
725
  });
726
726
 
@@ -829,6 +829,61 @@ var init_mode_utils = __esm({
829
829
  }
830
830
  });
831
831
 
832
+ // src/utils/browser/referrer.utils.ts
833
+ var COMPOUND_TLDS, getRootDomain, isSameDomain, getExternalReferrer;
834
+ var init_referrer_utils = __esm({
835
+ "src/utils/browser/referrer.utils.ts"() {
836
+ init_logging_utils();
837
+ COMPOUND_TLDS = [
838
+ "co.uk",
839
+ "org.uk",
840
+ "com.au",
841
+ "net.au",
842
+ "com.br",
843
+ "co.nz",
844
+ "co.jp",
845
+ "com.mx",
846
+ "co.in",
847
+ "com.cn",
848
+ "co.za"
849
+ ];
850
+ getRootDomain = (hostname) => {
851
+ const parts = hostname.toLowerCase().split(".");
852
+ if (parts.length <= 2) {
853
+ return hostname.toLowerCase();
854
+ }
855
+ const lastTwo = parts.slice(-2).join(".");
856
+ if (COMPOUND_TLDS.includes(lastTwo)) {
857
+ return parts.slice(-3).join(".");
858
+ }
859
+ return parts.slice(-2).join(".");
860
+ };
861
+ isSameDomain = (hostname1, hostname2) => {
862
+ if (hostname1 === hostname2) {
863
+ return true;
864
+ }
865
+ return getRootDomain(hostname1) === getRootDomain(hostname2);
866
+ };
867
+ getExternalReferrer = () => {
868
+ const referrer = document.referrer;
869
+ if (!referrer) {
870
+ return "Direct";
871
+ }
872
+ try {
873
+ const referrerHostname = new URL(referrer).hostname.toLowerCase();
874
+ const currentHostname = window.location.hostname.toLowerCase();
875
+ if (isSameDomain(referrerHostname, currentHostname)) {
876
+ return "Direct";
877
+ }
878
+ return referrer;
879
+ } catch (error) {
880
+ log("debug", "Failed to parse referrer URL, using raw value", { error, data: { referrer } });
881
+ return referrer;
882
+ }
883
+ };
884
+ }
885
+ });
886
+
832
887
  // src/utils/browser/utm-params.utils.ts
833
888
  var getUTMParameters;
834
889
  var init_utm_params_utils = __esm({
@@ -855,6 +910,7 @@ var init_browser = __esm({
855
910
  "src/utils/browser/index.ts"() {
856
911
  init_device_detector_utils();
857
912
  init_mode_utils();
913
+ init_referrer_utils();
858
914
  init_utm_params_utils();
859
915
  }
860
916
  });
@@ -3506,7 +3562,6 @@ var init_event_manager = __esm({
3506
3562
  return queue;
3507
3563
  }
3508
3564
  buildEventPayload(data) {
3509
- const isSessionStart = data.type === "session_start" /* SESSION_START */;
3510
3565
  const currentPageUrl = data.page_url ?? this.get("pageUrl");
3511
3566
  const timestamp = this.timeManager.now();
3512
3567
  const validation = this.timeManager.validateTimestamp(timestamp);
@@ -3515,12 +3570,14 @@ var init_event_manager = __esm({
3515
3570
  data: { type: data.type, error: validation.error }
3516
3571
  });
3517
3572
  }
3573
+ const sessionReferrer = this.get("sessionReferrer");
3574
+ const sessionUtm = this.get("sessionUtm");
3518
3575
  let payload = {
3519
3576
  id: generateEventId(),
3520
3577
  type: data.type,
3521
3578
  page_url: currentPageUrl,
3522
3579
  timestamp,
3523
- ...isSessionStart && { referrer: document.referrer || "Direct" },
3580
+ ...sessionReferrer && { referrer: sessionReferrer },
3524
3581
  ...data.from_page_url && { from_page_url: data.from_page_url },
3525
3582
  ...data.scroll_data && { scroll_data: data.scroll_data },
3526
3583
  ...data.click_data && { click_data: data.click_data },
@@ -3529,7 +3586,7 @@ var init_event_manager = __esm({
3529
3586
  ...data.error_data && { error_data: data.error_data },
3530
3587
  ...data.viewport_data && { viewport_data: data.viewport_data },
3531
3588
  ...data.page_view && { page_view: data.page_view },
3532
- ...isSessionStart && getUTMParameters() && { utm: getUTMParameters() }
3589
+ ...sessionUtm && { utm: sessionUtm }
3533
3590
  };
3534
3591
  const collectApiUrls = this.get("collectApiUrls");
3535
3592
  const hasCustomBackend = Boolean(collectApiUrls?.custom);
@@ -4058,10 +4115,12 @@ var init_session_manager = __esm({
4058
4115
  }
4059
4116
  return storedSession.id;
4060
4117
  }
4061
- persistSession(sessionId, lastActivity = Date.now()) {
4118
+ persistSession(sessionId, lastActivity = Date.now(), referrer, utm) {
4062
4119
  this.saveStoredSession({
4063
4120
  id: sessionId,
4064
- lastActivity
4121
+ lastActivity,
4122
+ ...referrer && { referrer },
4123
+ ...utm && { utm }
4065
4124
  });
4066
4125
  }
4067
4126
  clearStoredSession() {
@@ -4153,17 +4212,31 @@ var init_session_manager = __esm({
4153
4212
  }
4154
4213
  const recoveredSessionId = this.recoverSession();
4155
4214
  const sessionId = recoveredSessionId ?? this.generateSessionId();
4215
+ let sessionReferrer;
4216
+ let sessionUtm;
4217
+ if (recoveredSessionId) {
4218
+ const storedSession = this.loadStoredSession();
4219
+ sessionReferrer = storedSession?.referrer ?? getExternalReferrer();
4220
+ sessionUtm = storedSession?.utm ?? getUTMParameters();
4221
+ } else {
4222
+ sessionReferrer = getExternalReferrer();
4223
+ sessionUtm = getUTMParameters();
4224
+ }
4156
4225
  log("debug", "Session tracking initialized", {
4157
4226
  data: {
4158
4227
  sessionId,
4159
4228
  wasRecovered: !!recoveredSessionId,
4160
- willEmitSessionStart: true
4229
+ willEmitSessionStart: true,
4230
+ sessionReferrer,
4231
+ hasUtm: !!sessionUtm
4161
4232
  }
4162
4233
  });
4163
4234
  this.isTracking = true;
4164
4235
  try {
4165
4236
  this.set("sessionId", sessionId);
4166
- this.persistSession(sessionId);
4237
+ this.set("sessionReferrer", sessionReferrer);
4238
+ this.set("sessionUtm", sessionUtm);
4239
+ this.persistSession(sessionId, Date.now(), sessionReferrer, sessionUtm);
4167
4240
  this.initCrossTabSync();
4168
4241
  this.shareSession(sessionId);
4169
4242
  log("debug", "Emitting SESSION_START event", {
@@ -4199,7 +4272,7 @@ var init_session_manager = __esm({
4199
4272
  this.setupSessionTimeout();
4200
4273
  const sessionId = this.get("sessionId");
4201
4274
  if (sessionId) {
4202
- this.persistSession(sessionId);
4275
+ this.persistSession(sessionId, Date.now(), this.get("sessionReferrer"), this.get("sessionUtm"));
4203
4276
  }
4204
4277
  }
4205
4278
  clearSessionTimeout() {
@@ -4254,6 +4327,8 @@ var init_session_manager = __esm({
4254
4327
  this.clearStoredSession();
4255
4328
  this.set("sessionId", null);
4256
4329
  this.set("hasStartSession", false);
4330
+ this.set("sessionReferrer", void 0);
4331
+ this.set("sessionUtm", void 0);
4257
4332
  this.isTracking = false;
4258
4333
  }
4259
4334
  /**