@datalyr/web 1.7.1 → 1.7.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.
@@ -9,6 +9,7 @@ export declare class AttributionManager {
9
9
  private queryParamsCache;
10
10
  private UTM_PARAMS;
11
11
  private CLICK_IDS;
12
+ private CLICK_ID_ALIASES;
12
13
  private DEFAULT_TRACKED_PARAMS;
13
14
  constructor(options?: {
14
15
  attributionWindow?: number;
@@ -1 +1 @@
1
- {"version":3,"file":"attribution.d.ts","sourceRoot":"","sources":["../src/attribution.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAEvD,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,aAAa,CAAW;IAChC,OAAO,CAAC,gBAAgB,CAAuC;IAC/D,OAAO,CAAC,UAAU,CAA2E;IAE7F,OAAO,CAAC,SAAS,CAgBf;IAEF,OAAO,CAAC,sBAAsB,CAO5B;gBAEU,OAAO,GAAE;QACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;KACrB;IAMN;;;OAGG;IACH,UAAU,IAAI,IAAI;IAIlB;;OAEG;IACH,kBAAkB,IAAI,WAAW;IAoEjC;;;;;OAKG;IACH,eAAe,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI;IAwB/C;;;OAGG;IACH,aAAa,IAAI,WAAW,GAAG,IAAI;IASnC;;OAEG;IACH,cAAc,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI;IAQ9C;;;OAGG;IACH,YAAY,IAAI,WAAW,GAAG,IAAI;IASlC;;OAEG;IACH,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,GAAG,IAAI;IAqBhE;;OAEG;IACH,UAAU,IAAI,UAAU,EAAE;IAI1B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAqExB;;;OAGG;IACH,OAAO,CAAC,UAAU;IAKlB;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAKxB;;OAEG;IACH,kBAAkB,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAiFzC;;OAEG;IACH,OAAO,CAAC,eAAe;IAuDvB;;OAEG;IACH,OAAO,CAAC,eAAe;IA2BvB;;;;;OAKG;IACH,OAAO,CAAC,gBAAgB;IAKxB;;OAEG;IACH,OAAO,CAAC,eAAe;IAQvB;;OAEG;IACH,oBAAoB,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO;IAKvD;;OAEG;IACH,uBAAuB,IAAI,IAAI;CAYhC"}
1
+ {"version":3,"file":"attribution.d.ts","sourceRoot":"","sources":["../src/attribution.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAEvD,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,aAAa,CAAW;IAChC,OAAO,CAAC,gBAAgB,CAAuC;IAC/D,OAAO,CAAC,UAAU,CAA2E;IAE7F,OAAO,CAAC,SAAS,CAgBf;IAMF,OAAO,CAAC,gBAAgB,CAGtB;IAEF,OAAO,CAAC,sBAAsB,CAO5B;gBAEU,OAAO,GAAE;QACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;KACrB;IAMN;;;OAGG;IACH,UAAU,IAAI,IAAI;IAIlB;;OAEG;IACH,kBAAkB,IAAI,WAAW;IAiFjC;;;;;OAKG;IACH,eAAe,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI;IAwB/C;;;OAGG;IACH,aAAa,IAAI,WAAW,GAAG,IAAI;IASnC;;OAEG;IACH,cAAc,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI;IAQ9C;;;OAGG;IACH,YAAY,IAAI,WAAW,GAAG,IAAI;IASlC;;OAEG;IACH,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,GAAG,IAAI;IAqBhE;;OAEG;IACH,UAAU,IAAI,UAAU,EAAE;IAI1B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAyExB;;;OAGG;IACH,OAAO,CAAC,UAAU;IAKlB;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAKxB;;OAEG;IACH,kBAAkB,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAiFzC;;OAEG;IACH,OAAO,CAAC,eAAe;IAuDvB;;OAEG;IACH,OAAO,CAAC,eAAe;IA2BvB;;;;;OAKG;IACH,OAAO,CAAC,gBAAgB;IAKxB;;OAEG;IACH,OAAO,CAAC,eAAe;IAQvB;;OAEG;IACH,oBAAoB,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO;IAKvD;;OAEG;IACH,uBAAuB,IAAI,IAAI;CAYhC"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @datalyr/web v1.7.1
2
+ * @datalyr/web v1.7.2
3
3
  * Datalyr Web SDK - Modern attribution tracking for web applications
4
4
  * (c) 2026 Datalyr Inc.
5
5
  * Released under the MIT License
@@ -1363,7 +1363,7 @@ class AttributionManager {
1363
1363
  'msclkid', // Microsoft/Bing
1364
1364
  'twclid', // Twitter/X
1365
1365
  'li_fat_id', // LinkedIn
1366
- 'sclid', // Snapchat
1366
+ 'sclid', // Snapchat (canonical internal name — see CLICK_ID_ALIASES)
1367
1367
  'dclid', // Google Display/DoubleClick
1368
1368
  'epik', // Pinterest
1369
1369
  'rdt_cid', // Reddit
@@ -1371,6 +1371,15 @@ class AttributionManager {
1371
1371
  'irclid', // Impact Radius
1372
1372
  'ko_click_id' // Klaviyo
1373
1373
  ];
1374
+ // Real ad-platform URL params whose value we store under a canonical internal
1375
+ // name. Snapchat appends &ScCid= (alias `sccid`) to the landing URL — it does
1376
+ // NOT use `sclid`. Query-param lookup is case-sensitive, so capture the real
1377
+ // params and normalize to `sclid`, which ingest / the MV / server-side
1378
+ // attribution all key on. Without this, real Snap ad clicks captured nothing.
1379
+ this.CLICK_ID_ALIASES = {
1380
+ ScCid: 'sclid',
1381
+ sccid: 'sclid',
1382
+ };
1374
1383
  // Default tracked params matching dl.js
1375
1384
  this.DEFAULT_TRACKED_PARAMS = [
1376
1385
  'lyr', // Datalyr partner tracking
@@ -1427,6 +1436,18 @@ class AttributionManager {
1427
1436
  attribution[clickId] = value;
1428
1437
  }
1429
1438
  }
1439
+ // Aliased click IDs (e.g. Snap's ScCid/sccid → canonical sclid). Param lookup
1440
+ // above is case-sensitive and uses canonical names, so check the real params here.
1441
+ for (const [param, canonical] of Object.entries(this.CLICK_ID_ALIASES)) {
1442
+ const value = params[param];
1443
+ if (value && !attribution[canonical]) {
1444
+ if (!attribution.clickId) {
1445
+ attribution.clickId = value;
1446
+ attribution.clickIdType = canonical;
1447
+ }
1448
+ attribution[canonical] = value;
1449
+ }
1450
+ }
1430
1451
  // Capture custom tracked parameters
1431
1452
  for (const param of this.trackedParams) {
1432
1453
  const value = params[param];
@@ -1551,6 +1572,9 @@ class AttributionManager {
1551
1572
  // TikTok cookies
1552
1573
  adCookies._ttp = cookies.get('_ttp');
1553
1574
  adCookies._ttc = cookies.get('_ttc');
1575
+ // Snapchat first-party cookie (Snap Pixel sets _scid). Flows to the server as
1576
+ // cookies._scid and is sent on the Snap CAPI event as sc_cookie1 (raw).
1577
+ adCookies._scid = cookies.get('_scid');
1554
1578
  // Generate _fbp if missing (Facebook browser ID)
1555
1579
  if (!adCookies._fbp && (this.hasClickId('fbclid') || adCookies._fbc)) {
1556
1580
  const timestamp = Date.now();