@datalyr/web 1.0.0 → 1.0.1
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/LICENSE +1 -1
- package/dist/attribution.d.ts +1 -0
- package/dist/attribution.d.ts.map +1 -1
- package/dist/container.d.ts.map +1 -1
- package/dist/datalyr.cjs.js +76 -21
- package/dist/datalyr.cjs.js.map +1 -1
- package/dist/datalyr.esm.js +76 -21
- package/dist/datalyr.esm.js.map +1 -1
- package/dist/datalyr.esm.min.js +1 -1
- package/dist/datalyr.esm.min.js.map +1 -1
- package/dist/datalyr.js +76 -21
- package/dist/datalyr.js.map +1 -1
- package/dist/datalyr.min.js +1 -1
- package/dist/datalyr.min.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/queue.d.ts +0 -1
- package/dist/queue.d.ts.map +1 -1
- package/dist/types.d.ts +2 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/LICENSE
CHANGED
package/dist/attribution.d.ts
CHANGED
|
@@ -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,UAAU,CAA2E;
|
|
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,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;;OAEG;IACH,kBAAkB,IAAI,WAAW;IAwDjC;;OAEG;IACH,eAAe,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI;IAU/C;;OAEG;IACH,aAAa,IAAI,WAAW,GAAG,IAAI;IAInC;;OAEG;IACH,cAAc,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI;IAO9C;;OAEG;IACH,YAAY,IAAI,WAAW,GAAG,IAAI;IAIlC;;OAEG;IACH,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,GAAG,IAAI;IAqBhE;;OAEG;IACH,UAAU,IAAI,UAAU,EAAE;IAI1B;;OAEG;IACH,kBAAkB,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAgDzC;;OAEG;IACH,OAAO,CAAC,eAAe;IA6CvB;;OAEG;IACH,OAAO,CAAC,eAAe;IA2BvB;;OAEG;IACH,OAAO,CAAC,eAAe;IAQvB;;OAEG;IACH,oBAAoB,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO;IAKvD;;OAEG;IACH,uBAAuB,IAAI,IAAI;CAYhC"}
|
package/dist/container.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"container.d.ts","sourceRoot":"","sources":["../src/container.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"container.d.ts","sourceRoot":"","sources":["../src/container.ts"],"names":[],"mappings":"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"}
|
package/dist/datalyr.cjs.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @datalyr/web v1.0.
|
|
2
|
+
* @datalyr/web v1.0.1
|
|
3
3
|
* Datalyr Web SDK - Modern attribution tracking for web applications
|
|
4
4
|
* (c) 2025 Datalyr Inc.
|
|
5
5
|
* Released under the MIT License
|
|
@@ -809,9 +809,36 @@ class SessionManager {
|
|
|
809
809
|
class AttributionManager {
|
|
810
810
|
constructor(options = {}) {
|
|
811
811
|
this.UTM_PARAMS = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content'];
|
|
812
|
-
|
|
812
|
+
// Updated to match dl.js - includes ALL ad platform click IDs
|
|
813
|
+
this.CLICK_IDS = [
|
|
814
|
+
'fbclid', // Facebook/Meta
|
|
815
|
+
'gclid', // Google Ads
|
|
816
|
+
'gbraid', // Google Ads (iOS)
|
|
817
|
+
'wbraid', // Google Ads (web)
|
|
818
|
+
'ttclid', // TikTok
|
|
819
|
+
'msclkid', // Microsoft/Bing
|
|
820
|
+
'twclid', // Twitter/X
|
|
821
|
+
'li_fat_id', // LinkedIn
|
|
822
|
+
'sclid', // Snapchat
|
|
823
|
+
'dclid', // Google Display/DoubleClick
|
|
824
|
+
'epik', // Pinterest
|
|
825
|
+
'rdt_cid', // Reddit
|
|
826
|
+
'obclid', // Outbrain
|
|
827
|
+
'irclid', // Impact Radius
|
|
828
|
+
'ko_click_id' // Klaviyo
|
|
829
|
+
];
|
|
830
|
+
// Default tracked params matching dl.js
|
|
831
|
+
this.DEFAULT_TRACKED_PARAMS = [
|
|
832
|
+
'lyr', // Datalyr partner tracking
|
|
833
|
+
'ref', // Generic referral
|
|
834
|
+
'source', // Generic source (non-UTM)
|
|
835
|
+
'campaign', // Generic campaign (non-UTM)
|
|
836
|
+
'medium', // Generic medium (non-UTM)
|
|
837
|
+
'gad_source' // Google Ads source parameter
|
|
838
|
+
];
|
|
813
839
|
this.attributionWindow = options.attributionWindow || 30 * 24 * 60 * 60 * 1000; // 30 days
|
|
814
|
-
|
|
840
|
+
// Merge default tracked params with user-provided ones
|
|
841
|
+
this.trackedParams = [...this.DEFAULT_TRACKED_PARAMS, ...(options.trackedParams || [])];
|
|
815
842
|
}
|
|
816
843
|
/**
|
|
817
844
|
* Capture current attribution from URL
|
|
@@ -898,9 +925,9 @@ class AttributionManager {
|
|
|
898
925
|
const touchpoint = {
|
|
899
926
|
timestamp: Date.now(),
|
|
900
927
|
sessionId,
|
|
901
|
-
source: attribution.source,
|
|
902
|
-
medium: attribution.medium,
|
|
903
|
-
campaign: attribution.campaign
|
|
928
|
+
source: attribution.source || undefined,
|
|
929
|
+
medium: attribution.medium || undefined,
|
|
930
|
+
campaign: attribution.campaign || undefined
|
|
904
931
|
};
|
|
905
932
|
journey.push(touchpoint);
|
|
906
933
|
// Keep last 30 touchpoints
|
|
@@ -1072,7 +1099,6 @@ class EventQueue {
|
|
|
1072
1099
|
this.recentEventIds = new Set();
|
|
1073
1100
|
this.MAX_RECENT_EVENT_IDS = 1000;
|
|
1074
1101
|
this.OFFLINE_QUEUE_KEY = 'dl_offline_queue';
|
|
1075
|
-
this.currentEndpointIndex = 0;
|
|
1076
1102
|
this.config = {
|
|
1077
1103
|
batchSize: config.batchSize || 10,
|
|
1078
1104
|
flushInterval: config.flushInterval || 5000,
|
|
@@ -1133,7 +1159,10 @@ class EventQueue {
|
|
|
1133
1159
|
const toDelete = this.recentEventIds.size - this.MAX_RECENT_EVENT_IDS;
|
|
1134
1160
|
const iterator = this.recentEventIds.values();
|
|
1135
1161
|
for (let i = 0; i < toDelete; i++) {
|
|
1136
|
-
|
|
1162
|
+
const next = iterator.next();
|
|
1163
|
+
if (!next.done) {
|
|
1164
|
+
this.recentEventIds.delete(next.value);
|
|
1165
|
+
}
|
|
1137
1166
|
}
|
|
1138
1167
|
}
|
|
1139
1168
|
return false;
|
|
@@ -1244,7 +1273,6 @@ class EventQueue {
|
|
|
1244
1273
|
throw new Error(`HTTP ${response.status}: ${response.statusText}`);
|
|
1245
1274
|
}
|
|
1246
1275
|
this.log(`Batch sent successfully to ${currentEndpoint}: ${events.length} events`);
|
|
1247
|
-
this.currentEndpointIndex = 0; // Reset to primary on success
|
|
1248
1276
|
}
|
|
1249
1277
|
catch (error) {
|
|
1250
1278
|
// Try next fallback endpoint if available
|
|
@@ -2058,8 +2086,8 @@ class ContainerManager {
|
|
|
2058
2086
|
document.head.appendChild(script);
|
|
2059
2087
|
// Initialize gtag
|
|
2060
2088
|
window.dataLayer = window.dataLayer || [];
|
|
2061
|
-
function gtag() {
|
|
2062
|
-
window.dataLayer.push(
|
|
2089
|
+
function gtag(...args) {
|
|
2090
|
+
window.dataLayer.push(args);
|
|
2063
2091
|
}
|
|
2064
2092
|
window.gtag = gtag;
|
|
2065
2093
|
gtag('js', new Date());
|
|
@@ -2078,7 +2106,7 @@ class ContainerManager {
|
|
|
2078
2106
|
initializeTikTokPixel(config) {
|
|
2079
2107
|
try {
|
|
2080
2108
|
// Load TikTok Pixel script
|
|
2081
|
-
(function (w,
|
|
2109
|
+
(function (w, _d, t) {
|
|
2082
2110
|
w.TiktokAnalyticsObject = t;
|
|
2083
2111
|
var ttq = w[t] = w[t] || [];
|
|
2084
2112
|
ttq.methods = ['page', 'track', 'identify', 'instances', 'debug', 'on', 'off', 'once', 'ready', 'alias', 'group', 'enableCookie', 'disableCookie'];
|
|
@@ -2095,6 +2123,7 @@ class ContainerManager {
|
|
|
2095
2123
|
return e;
|
|
2096
2124
|
};
|
|
2097
2125
|
ttq.load = function (e, n) {
|
|
2126
|
+
var _a;
|
|
2098
2127
|
var i = 'https://analytics.tiktok.com/i18n/pixel/events.js';
|
|
2099
2128
|
ttq._i = ttq._i || {};
|
|
2100
2129
|
ttq._i[e] = [];
|
|
@@ -2105,7 +2134,7 @@ class ContainerManager {
|
|
|
2105
2134
|
o.async = true;
|
|
2106
2135
|
o.src = i + '?sdkid=' + e + '&lib=' + t;
|
|
2107
2136
|
var a = document.getElementsByTagName('script')[0];
|
|
2108
|
-
a.parentNode.insertBefore(o, a);
|
|
2137
|
+
(_a = a.parentNode) === null || _a === void 0 ? void 0 : _a.insertBefore(o, a);
|
|
2109
2138
|
};
|
|
2110
2139
|
})(window, document, 'ttq');
|
|
2111
2140
|
// Initialize pixel
|
|
@@ -2121,7 +2150,7 @@ class ContainerManager {
|
|
|
2121
2150
|
* Track event to all initialized pixels
|
|
2122
2151
|
*/
|
|
2123
2152
|
trackToPixels(eventName, properties = {}) {
|
|
2124
|
-
var _a, _b, _c,
|
|
2153
|
+
var _a, _b, _c, _e, _f, _g;
|
|
2125
2154
|
// Track to Meta Pixel
|
|
2126
2155
|
if (((_b = (_a = this.pixels) === null || _a === void 0 ? void 0 : _a.meta) === null || _b === void 0 ? void 0 : _b.enabled) && window.fbq) {
|
|
2127
2156
|
try {
|
|
@@ -2132,7 +2161,7 @@ class ContainerManager {
|
|
|
2132
2161
|
}
|
|
2133
2162
|
}
|
|
2134
2163
|
// Track to Google Tag
|
|
2135
|
-
if (((
|
|
2164
|
+
if (((_e = (_c = this.pixels) === null || _c === void 0 ? void 0 : _c.google) === null || _e === void 0 ? void 0 : _e.enabled) && window.gtag) {
|
|
2136
2165
|
try {
|
|
2137
2166
|
window.gtag('event', eventName, properties);
|
|
2138
2167
|
}
|
|
@@ -2141,7 +2170,7 @@ class ContainerManager {
|
|
|
2141
2170
|
}
|
|
2142
2171
|
}
|
|
2143
2172
|
// Track to TikTok Pixel
|
|
2144
|
-
if (((
|
|
2173
|
+
if (((_g = (_f = this.pixels) === null || _f === void 0 ? void 0 : _f.tiktok) === null || _g === void 0 ? void 0 : _g.enabled) && window.ttq) {
|
|
2145
2174
|
try {
|
|
2146
2175
|
// Map common events to TikTok names
|
|
2147
2176
|
const tiktokEventMap = {
|
|
@@ -2643,13 +2672,39 @@ class Datalyr {
|
|
|
2643
2672
|
// Create payload with both camelCase and snake_case fields
|
|
2644
2673
|
const identityFields = this.identity.getIdentityFields();
|
|
2645
2674
|
const eventId = generateUUID();
|
|
2646
|
-
|
|
2675
|
+
// Ensure we have all required identity fields
|
|
2676
|
+
const distinctId = identityFields.distinct_id;
|
|
2677
|
+
const anonymousId = identityFields.anonymous_id;
|
|
2678
|
+
const visitorId = identityFields.visitor_id || anonymousId;
|
|
2679
|
+
const sessionId = identityFields.session_id;
|
|
2680
|
+
const payload = {
|
|
2647
2681
|
// Required fields
|
|
2648
|
-
workspaceId: this.config.workspaceId,
|
|
2649
|
-
|
|
2650
|
-
|
|
2682
|
+
workspaceId: this.config.workspaceId,
|
|
2683
|
+
workspace_id: this.config.workspaceId, // Snake case alias
|
|
2684
|
+
eventId: eventId,
|
|
2685
|
+
event_id: eventId, // Snake case alias (same ID)
|
|
2686
|
+
eventName,
|
|
2687
|
+
event_name: eventName, // Snake case alias
|
|
2688
|
+
eventData,
|
|
2689
|
+
event_data: eventData, // Snake case alias
|
|
2690
|
+
source: 'web',
|
|
2691
|
+
timestamp: new Date().toISOString(),
|
|
2692
|
+
// Identity fields (explicit to satisfy TypeScript)
|
|
2693
|
+
distinct_id: distinctId,
|
|
2694
|
+
anonymous_id: anonymousId,
|
|
2695
|
+
visitor_id: visitorId,
|
|
2696
|
+
visitorId: visitorId,
|
|
2697
|
+
user_id: identityFields.user_id,
|
|
2698
|
+
canonical_id: identityFields.canonical_id,
|
|
2699
|
+
sessionId: sessionId,
|
|
2700
|
+
session_id: sessionId,
|
|
2701
|
+
// Resolution metadata
|
|
2702
|
+
resolution_method: 'browser_sdk',
|
|
2703
|
+
resolution_confidence: 1.0,
|
|
2651
2704
|
// SDK metadata
|
|
2652
|
-
sdk_version: '1.0.0',
|
|
2705
|
+
sdk_version: '1.0.0',
|
|
2706
|
+
sdk_name: 'datalyr-web-sdk'
|
|
2707
|
+
};
|
|
2653
2708
|
return payload;
|
|
2654
2709
|
}
|
|
2655
2710
|
/**
|