saltfish 0.3.63 → 0.3.64

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.
@@ -8434,6 +8434,101 @@ class CursorManager {
8434
8434
  }
8435
8435
  }
8436
8436
  }
8437
+ const TRACKING_PARAMS = [
8438
+ // UTM parameters (Google Analytics standard)
8439
+ "utm_source",
8440
+ "utm_medium",
8441
+ "utm_campaign",
8442
+ "utm_term",
8443
+ "utm_content",
8444
+ "utm_id",
8445
+ // Google Ads
8446
+ "gclid",
8447
+ // Google Click ID
8448
+ "gclsrc",
8449
+ // Google Click Source
8450
+ "gad_source",
8451
+ // Google Ads source
8452
+ "dclid",
8453
+ // Google Display Click ID
8454
+ "gbraid",
8455
+ // Google iOS App campaign ID (for privacy)
8456
+ "wbraid",
8457
+ // Google Web-to-App campaign ID (for privacy)
8458
+ // Facebook/Meta Ads
8459
+ "fbclid",
8460
+ // Facebook Click ID
8461
+ // Microsoft Ads
8462
+ "msclkid",
8463
+ // Microsoft Click ID
8464
+ // LinkedIn Ads
8465
+ "li_fat_id",
8466
+ // LinkedIn First-Party Ad Tracking ID
8467
+ // Twitter/X Ads
8468
+ "twclid",
8469
+ // Twitter Click ID
8470
+ // TikTok Ads
8471
+ "ttclid",
8472
+ // TikTok Click ID
8473
+ // Other common tracking params
8474
+ "ref",
8475
+ // Referral parameter
8476
+ "_ga",
8477
+ // Google Analytics client ID
8478
+ "_gl"
8479
+ // Google cross-domain linker
8480
+ ];
8481
+ function getCurrentTrackingParams() {
8482
+ const params = /* @__PURE__ */ new Map();
8483
+ try {
8484
+ const currentUrl = new URL(window.location.href);
8485
+ for (const param of TRACKING_PARAMS) {
8486
+ const value = currentUrl.searchParams.get(param);
8487
+ if (value !== null) {
8488
+ params.set(param, value);
8489
+ }
8490
+ }
8491
+ if (params.size > 0) {
8492
+ log(`urlParams: Found ${params.size} tracking params in current URL: ${Array.from(params.keys()).join(", ")}`);
8493
+ }
8494
+ } catch (error2) {
8495
+ }
8496
+ return params;
8497
+ }
8498
+ function appendTrackingParams(targetUrl) {
8499
+ if (!targetUrl) {
8500
+ return targetUrl;
8501
+ }
8502
+ try {
8503
+ let url;
8504
+ if (targetUrl.startsWith("/") || !targetUrl.includes("://")) {
8505
+ url = new URL(targetUrl, window.location.origin);
8506
+ } else {
8507
+ url = new URL(targetUrl);
8508
+ }
8509
+ const trackingParams = getCurrentTrackingParams();
8510
+ if (trackingParams.size === 0) {
8511
+ log("urlParams: No tracking params to append");
8512
+ return targetUrl;
8513
+ }
8514
+ let addedParams = 0;
8515
+ for (const [key, value] of trackingParams) {
8516
+ if (!url.searchParams.has(key)) {
8517
+ url.searchParams.set(key, value);
8518
+ addedParams++;
8519
+ } else {
8520
+ log(`urlParams: Skipping ${key} - already exists in target URL`);
8521
+ }
8522
+ }
8523
+ if (addedParams > 0) {
8524
+ log(`urlParams: Appended ${addedParams} tracking params to URL`);
8525
+ return url.toString();
8526
+ }
8527
+ return targetUrl;
8528
+ } catch (error2) {
8529
+ return targetUrl;
8530
+ }
8531
+ }
8437
8532
  class InteractionManager {
8438
8533
  constructor() {
8439
8534
  __publicField(this, "container", null);
@@ -8701,8 +8796,8 @@ class InteractionManager {
8701
8796
  }
8702
8797
  }
8703
8798
  }
8704
- log(`InteractionManager: Redirecting to ${buttonConfig.action.url}`);
8705
- window.location.href = buttonConfig.action.url;
8799
+ const redirectUrl = appendTrackingParams(buttonConfig.action.url);
8800
+ window.location.href = redirectUrl;
8706
8801
  } else {
8707
8802
  log(`InteractionManager: Goto button clicked, going to step "${buttonConfig.action.target}"`);
8708
8803
  store.goToStep(buttonConfig.action.target);
@@ -8721,7 +8816,8 @@ class InteractionManager {
8721
8816
  await new Promise((resolve) => setTimeout(resolve, TIMING.STATE_PROCESSING_DELAY_MS));
8722
8817
  }
8723
8818
  }
8724
- window.open(buttonConfig.action.target, "_blank");
8819
+ const openUrl = appendTrackingParams(buttonConfig.action.target);
8820
+ window.open(openUrl, "_blank");
8725
8821
  const { SaltfishPlayer: SaltfishPlayer2 } = await Promise.resolve().then(() => SaltfishPlayer$1);
8726
8822
  const player = SaltfishPlayer2.getInstance();
8727
8823
  if (player) {
@@ -12469,7 +12565,7 @@ const SaltfishPlayer$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.de
12469
12565
  __proto__: null,
12470
12566
  SaltfishPlayer
12471
12567
  }, Symbol.toStringTag, { value: "Module" }));
12472
- const version = "0.3.63";
12568
+ const version = "0.3.64";
12473
12569
  const packageJson = {
12474
12570
  version
12475
12571
  };