@zaplier/sdk 1.7.9 → 1.8.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/dist/core-ultra.min.js +10 -0
- package/dist/index.cjs +59 -12
- package/dist/index.d.ts +5 -1
- package/dist/index.esm.js +59 -12
- package/dist/v2/core.d.ts +88 -0
- package/dist/v2/core.js +245 -0
- package/dist/v2/core.min.js +6 -0
- package/dist/v2/modules/anti-adblock.js +6 -0
- package/dist/v2/modules/browser-apis-C32PGYAh.js +6 -0
- package/dist/v2/modules/browser-apis-uFUJ09Rq.js +6 -0
- package/dist/v2/modules/confidence-CQp4GgvX.js +6 -0
- package/dist/v2/modules/device-signals-B35sK6Ly.js +6 -0
- package/dist/v2/modules/device-signals-ChNkNSJR.js +6 -0
- package/dist/v2/modules/dom-blockers-BamKJxCs.js +6 -0
- package/dist/v2/modules/dom-blockers-Dv-oD-zS.js +6 -0
- package/dist/v2/modules/fingerprint-CRCL21-p.js +6 -0
- package/dist/v2/modules/fingerprint-Cx012xiQ.js +6 -0
- package/dist/v2/modules/fingerprint.js +6 -0
- package/dist/v2/modules/hardware-B-ewb7VY.js +6 -0
- package/dist/v2/modules/heatmap.js +6 -0
- package/dist/v2/modules/incognito-B-8zH3xS.js +6 -0
- package/dist/v2/modules/incognito-CBxUhUOT.js +6 -0
- package/dist/v2/modules/math-BLnUnJG8.js +6 -0
- package/dist/v2/modules/plugins-enhanced-BNnyFJad.js +6 -0
- package/dist/v2/modules/plugins-enhanced-CnBdC9_k.js +6 -0
- package/dist/v2/modules/replay.js +6 -0
- package/dist/v2/modules/storage-iGy4i5YE.js +6 -0
- package/dist/v2/modules/system-Dcygxavm.js +6 -0
- package/package.json +41 -12
- package/dist/index.cjs.map +0 -1
- package/dist/index.esm.js.map +0 -1
- package/dist/index.js +0 -3517
- package/dist/index.js.map +0 -1
- package/dist/sdk.js +0 -26913
- package/dist/sdk.js.map +0 -1
- package/dist/sdk.min.js +0 -7
- package/dist/src/index.d.ts +0 -15
- package/dist/src/index.d.ts.map +0 -1
- package/dist/src/modules/anti-adblock.d.ts +0 -113
- package/dist/src/modules/anti-adblock.d.ts.map +0 -1
- package/dist/src/modules/auto-tracker.d.ts +0 -240
- package/dist/src/modules/auto-tracker.d.ts.map +0 -1
- package/dist/src/modules/bot-detection.d.ts +0 -15
- package/dist/src/modules/bot-detection.d.ts.map +0 -1
- package/dist/src/modules/fingerprint/accessibility.d.ts +0 -155
- package/dist/src/modules/fingerprint/accessibility.d.ts.map +0 -1
- package/dist/src/modules/fingerprint/audio.d.ts +0 -15
- package/dist/src/modules/fingerprint/audio.d.ts.map +0 -1
- package/dist/src/modules/fingerprint/browser-apis.d.ts +0 -108
- package/dist/src/modules/fingerprint/browser-apis.d.ts.map +0 -1
- package/dist/src/modules/fingerprint/browser.d.ts +0 -14
- package/dist/src/modules/fingerprint/browser.d.ts.map +0 -1
- package/dist/src/modules/fingerprint/canvas.d.ts +0 -14
- package/dist/src/modules/fingerprint/canvas.d.ts.map +0 -1
- package/dist/src/modules/fingerprint/confidence.d.ts +0 -89
- package/dist/src/modules/fingerprint/confidence.d.ts.map +0 -1
- package/dist/src/modules/fingerprint/datetime-locale.d.ts +0 -76
- package/dist/src/modules/fingerprint/datetime-locale.d.ts.map +0 -1
- package/dist/src/modules/fingerprint/device-signals.d.ts +0 -29
- package/dist/src/modules/fingerprint/device-signals.d.ts.map +0 -1
- package/dist/src/modules/fingerprint/dom-blockers.d.ts +0 -56
- package/dist/src/modules/fingerprint/dom-blockers.d.ts.map +0 -1
- package/dist/src/modules/fingerprint/font-preferences.d.ts +0 -70
- package/dist/src/modules/fingerprint/font-preferences.d.ts.map +0 -1
- package/dist/src/modules/fingerprint/fonts-enhanced.d.ts +0 -43
- package/dist/src/modules/fingerprint/fonts-enhanced.d.ts.map +0 -1
- package/dist/src/modules/fingerprint/fonts.d.ts +0 -14
- package/dist/src/modules/fingerprint/fonts.d.ts.map +0 -1
- package/dist/src/modules/fingerprint/hardware.d.ts +0 -40
- package/dist/src/modules/fingerprint/hardware.d.ts.map +0 -1
- package/dist/src/modules/fingerprint/hashing.d.ts +0 -29
- package/dist/src/modules/fingerprint/hashing.d.ts.map +0 -1
- package/dist/src/modules/fingerprint/incognito.d.ts +0 -6
- package/dist/src/modules/fingerprint/incognito.d.ts.map +0 -1
- package/dist/src/modules/fingerprint/math-enhanced.d.ts +0 -70
- package/dist/src/modules/fingerprint/math-enhanced.d.ts.map +0 -1
- package/dist/src/modules/fingerprint/math.d.ts +0 -32
- package/dist/src/modules/fingerprint/math.d.ts.map +0 -1
- package/dist/src/modules/fingerprint/plugins-enhanced.d.ts +0 -97
- package/dist/src/modules/fingerprint/plugins-enhanced.d.ts.map +0 -1
- package/dist/src/modules/fingerprint/screen.d.ts +0 -15
- package/dist/src/modules/fingerprint/screen.d.ts.map +0 -1
- package/dist/src/modules/fingerprint/storage.d.ts +0 -45
- package/dist/src/modules/fingerprint/storage.d.ts.map +0 -1
- package/dist/src/modules/fingerprint/system.d.ts +0 -40
- package/dist/src/modules/fingerprint/system.d.ts.map +0 -1
- package/dist/src/modules/fingerprint/webgl.d.ts +0 -15
- package/dist/src/modules/fingerprint/webgl.d.ts.map +0 -1
- package/dist/src/modules/fingerprint.d.ts +0 -35
- package/dist/src/modules/fingerprint.d.ts.map +0 -1
- package/dist/src/modules/global-interface.d.ts +0 -157
- package/dist/src/modules/global-interface.d.ts.map +0 -1
- package/dist/src/modules/heatmap.d.ts +0 -145
- package/dist/src/modules/heatmap.d.ts.map +0 -1
- package/dist/src/modules/incognito-detection.d.ts +0 -23
- package/dist/src/modules/incognito-detection.d.ts.map +0 -1
- package/dist/src/modules/session-replay.d.ts +0 -93
- package/dist/src/modules/session-replay.d.ts.map +0 -1
- package/dist/src/modules/user-agent.d.ts +0 -35
- package/dist/src/modules/user-agent.d.ts.map +0 -1
- package/dist/src/modules/visitor-persistence.d.ts +0 -51
- package/dist/src/modules/visitor-persistence.d.ts.map +0 -1
- package/dist/src/sdk.d.ts +0 -285
- package/dist/src/sdk.d.ts.map +0 -1
- package/dist/src/types/config.d.ts +0 -44
- package/dist/src/types/config.d.ts.map +0 -1
- package/dist/src/types/detection.d.ts +0 -114
- package/dist/src/types/detection.d.ts.map +0 -1
- package/dist/src/types/events.d.ts +0 -174
- package/dist/src/types/events.d.ts.map +0 -1
- package/dist/src/types/fingerprint.d.ts +0 -252
- package/dist/src/types/fingerprint.d.ts.map +0 -1
- package/dist/src/types/index.d.ts +0 -83
- package/dist/src/types/index.d.ts.map +0 -1
- package/dist/src/types/methods.d.ts +0 -83
- package/dist/src/types/methods.d.ts.map +0 -1
- package/dist/src/types/visitor.d.ts +0 -90
- package/dist/src/types/visitor.d.ts.map +0 -1
- package/dist/src/utils/browser.d.ts +0 -114
- package/dist/src/utils/browser.d.ts.map +0 -1
- package/dist/src/utils/lazy-loader.d.ts +0 -60
- package/dist/src/utils/lazy-loader.d.ts.map +0 -1
- package/dist/src/utils/session-utils.d.ts +0 -58
- package/dist/src/utils/session-utils.d.ts.map +0 -1
- package/dist/src/utils/webgl-cache.d.ts +0 -43
- package/dist/src/utils/webgl-cache.d.ts.map +0 -1
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Zaplier SDK v2.0.0 - Ultra Minimal
|
|
3
|
+
* (c) 2025 Zaplier Team
|
|
4
|
+
*/
|
|
5
|
+
function e(){const e=document.createElement("canvas"),t=e.getContext("2d")
|
|
6
|
+
t&&(t.textBaseline="top",t.font="14px Arial",t.fillText("Zaplier",2,2))
|
|
7
|
+
const n=[navigator.userAgent,navigator.language,screen.width+"x"+screen.height,(new Date).getTimezoneOffset(),e.toDataURL(),navigator.hardwareConcurrency||0,navigator.maxTouchPoints||0]
|
|
8
|
+
return btoa(n.join("|")).slice(0,32)}function t(e){return new n(e)}class n{constructor(t){this.config=t,this.visitorId=e(),this.sessionId=(()=>{const t=new Date,n=t.getFullYear()+(t.getMonth()+1+"").padStart(2,"0")+(t.getDate()+"").padStart(2,"0"),i=(t.getHours()+"").padStart(2,"0")
|
|
9
|
+
return`${e()}_${n}_${i}`})(),this.track("page_view",{url:location.href,referrer:document.referrer})}track(e,t={}){(async(e,t)=>{try{await fetch(`${e.endpoint||"https://api.zaplier.com"}/events?token=${encodeURIComponent(e.token)}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t),keepalive:1})}catch(t){e.debug}})(this.config,{eventType:"page_view"===e?"page_view":"custom",eventName:e,sessionId:this.sessionId,visitorId:this.visitorId,timestamp:(new Date).toISOString(),...t})}getVisitor(){return{visitorId:this.visitorId,sessionId:this.sessionId}}}"undefined"!=typeof window&&(window.ZaplierMinimal={ZaplierMinimal:n,init:t})
|
|
10
|
+
export{n as ZaplierMinimal,t as init}
|
package/dist/index.cjs
CHANGED
|
@@ -21386,7 +21386,7 @@ class ZaplierSDK {
|
|
|
21386
21386
|
}
|
|
21387
21387
|
}
|
|
21388
21388
|
/**
|
|
21389
|
-
* Initialize SDK
|
|
21389
|
+
* Initialize SDK - Non-blocking approach
|
|
21390
21390
|
*/
|
|
21391
21391
|
async initialize() {
|
|
21392
21392
|
try {
|
|
@@ -21400,21 +21400,19 @@ class ZaplierSDK {
|
|
|
21400
21400
|
}
|
|
21401
21401
|
return;
|
|
21402
21402
|
}
|
|
21403
|
-
//
|
|
21404
|
-
|
|
21405
|
-
// Auto-track page view if enabled
|
|
21403
|
+
// CRITICAL: Initialize basic tracking immediately (non-blocking)
|
|
21404
|
+
this.isInitialized = true;
|
|
21405
|
+
// Auto-track page view if enabled (immediate, before fingerprinting)
|
|
21406
21406
|
if (this.config.autoTrack) {
|
|
21407
21407
|
this.trackPageView();
|
|
21408
21408
|
}
|
|
21409
|
-
|
|
21410
|
-
// Initialize anti-adblock system first
|
|
21411
|
-
this.initializeAntiAdblock();
|
|
21412
|
-
// Then initialize tracking engines (they'll connect to anti-adblock)
|
|
21413
|
-
this.initializeTrackingEngines();
|
|
21414
|
-
// Initialize auto tracker
|
|
21415
|
-
this.initializeAutoTracker();
|
|
21416
|
-
// Process queued events
|
|
21409
|
+
// Process any queued events immediately
|
|
21417
21410
|
this.processEventQueue();
|
|
21411
|
+
// PERFORMANCE: Defer heavy operations to avoid blocking main thread
|
|
21412
|
+
this.deferHeavyOperations();
|
|
21413
|
+
if (this.config.debug) {
|
|
21414
|
+
console.log("[Zaplier] Core SDK initialized (deferring heavy operations)");
|
|
21415
|
+
}
|
|
21418
21416
|
if (this.config.debug) {
|
|
21419
21417
|
console.log("[Zaplier] SDK initialized successfully", {
|
|
21420
21418
|
visitorId: this.visitorId,
|
|
@@ -21426,6 +21424,55 @@ class ZaplierSDK {
|
|
|
21426
21424
|
console.error("[Zaplier] Initialization failed:", error);
|
|
21427
21425
|
}
|
|
21428
21426
|
}
|
|
21427
|
+
/**
|
|
21428
|
+
* Defer heavy operations to avoid blocking main thread
|
|
21429
|
+
*/
|
|
21430
|
+
deferHeavyOperations() {
|
|
21431
|
+
// Use requestIdleCallback for optimal performance, fallback to setTimeout
|
|
21432
|
+
const scheduleWork = (callback, timeout = 5000) => {
|
|
21433
|
+
if (typeof requestIdleCallback !== 'undefined') {
|
|
21434
|
+
requestIdleCallback(callback, { timeout });
|
|
21435
|
+
}
|
|
21436
|
+
else {
|
|
21437
|
+
setTimeout(callback, 100); // Small delay fallback
|
|
21438
|
+
}
|
|
21439
|
+
};
|
|
21440
|
+
// Schedule fingerprinting when browser is idle
|
|
21441
|
+
scheduleWork(async () => {
|
|
21442
|
+
try {
|
|
21443
|
+
await this.collectFingerprint();
|
|
21444
|
+
if (this.config.debug) {
|
|
21445
|
+
console.log("[Zaplier] Fingerprint collected (deferred)");
|
|
21446
|
+
}
|
|
21447
|
+
}
|
|
21448
|
+
catch (error) {
|
|
21449
|
+
if (this.config.debug) {
|
|
21450
|
+
console.error("[Zaplier] Deferred fingerprinting failed:", error);
|
|
21451
|
+
}
|
|
21452
|
+
}
|
|
21453
|
+
}, 3000);
|
|
21454
|
+
// Schedule anti-adblock initialization
|
|
21455
|
+
scheduleWork(() => {
|
|
21456
|
+
this.initializeAntiAdblock();
|
|
21457
|
+
if (this.config.debug) {
|
|
21458
|
+
console.log("[Zaplier] Anti-adblock initialized (deferred)");
|
|
21459
|
+
}
|
|
21460
|
+
}, 1000);
|
|
21461
|
+
// Schedule tracking engines initialization
|
|
21462
|
+
scheduleWork(() => {
|
|
21463
|
+
this.initializeTrackingEngines();
|
|
21464
|
+
if (this.config.debug) {
|
|
21465
|
+
console.log("[Zaplier] Tracking engines initialized (deferred)");
|
|
21466
|
+
}
|
|
21467
|
+
}, 2000);
|
|
21468
|
+
// Schedule auto tracker initialization
|
|
21469
|
+
scheduleWork(() => {
|
|
21470
|
+
this.initializeAutoTracker();
|
|
21471
|
+
if (this.config.debug) {
|
|
21472
|
+
console.log("[Zaplier] Auto tracker initialized (deferred)");
|
|
21473
|
+
}
|
|
21474
|
+
}, 1500);
|
|
21475
|
+
}
|
|
21429
21476
|
/**
|
|
21430
21477
|
* Initialize tracking engines (Session Replay & Heatmap)
|
|
21431
21478
|
*/
|
package/dist/index.d.ts
CHANGED
|
@@ -751,9 +751,13 @@ declare class ZaplierSDK implements ZaplierSDK$1 {
|
|
|
751
751
|
private visitorIdentityManager?;
|
|
752
752
|
constructor(userConfig: SDKConfig);
|
|
753
753
|
/**
|
|
754
|
-
* Initialize SDK
|
|
754
|
+
* Initialize SDK - Non-blocking approach
|
|
755
755
|
*/
|
|
756
756
|
private initialize;
|
|
757
|
+
/**
|
|
758
|
+
* Defer heavy operations to avoid blocking main thread
|
|
759
|
+
*/
|
|
760
|
+
private deferHeavyOperations;
|
|
757
761
|
/**
|
|
758
762
|
* Initialize tracking engines (Session Replay & Heatmap)
|
|
759
763
|
*/
|
package/dist/index.esm.js
CHANGED
|
@@ -21382,7 +21382,7 @@ class ZaplierSDK {
|
|
|
21382
21382
|
}
|
|
21383
21383
|
}
|
|
21384
21384
|
/**
|
|
21385
|
-
* Initialize SDK
|
|
21385
|
+
* Initialize SDK - Non-blocking approach
|
|
21386
21386
|
*/
|
|
21387
21387
|
async initialize() {
|
|
21388
21388
|
try {
|
|
@@ -21396,21 +21396,19 @@ class ZaplierSDK {
|
|
|
21396
21396
|
}
|
|
21397
21397
|
return;
|
|
21398
21398
|
}
|
|
21399
|
-
//
|
|
21400
|
-
|
|
21401
|
-
// Auto-track page view if enabled
|
|
21399
|
+
// CRITICAL: Initialize basic tracking immediately (non-blocking)
|
|
21400
|
+
this.isInitialized = true;
|
|
21401
|
+
// Auto-track page view if enabled (immediate, before fingerprinting)
|
|
21402
21402
|
if (this.config.autoTrack) {
|
|
21403
21403
|
this.trackPageView();
|
|
21404
21404
|
}
|
|
21405
|
-
|
|
21406
|
-
// Initialize anti-adblock system first
|
|
21407
|
-
this.initializeAntiAdblock();
|
|
21408
|
-
// Then initialize tracking engines (they'll connect to anti-adblock)
|
|
21409
|
-
this.initializeTrackingEngines();
|
|
21410
|
-
// Initialize auto tracker
|
|
21411
|
-
this.initializeAutoTracker();
|
|
21412
|
-
// Process queued events
|
|
21405
|
+
// Process any queued events immediately
|
|
21413
21406
|
this.processEventQueue();
|
|
21407
|
+
// PERFORMANCE: Defer heavy operations to avoid blocking main thread
|
|
21408
|
+
this.deferHeavyOperations();
|
|
21409
|
+
if (this.config.debug) {
|
|
21410
|
+
console.log("[Zaplier] Core SDK initialized (deferring heavy operations)");
|
|
21411
|
+
}
|
|
21414
21412
|
if (this.config.debug) {
|
|
21415
21413
|
console.log("[Zaplier] SDK initialized successfully", {
|
|
21416
21414
|
visitorId: this.visitorId,
|
|
@@ -21422,6 +21420,55 @@ class ZaplierSDK {
|
|
|
21422
21420
|
console.error("[Zaplier] Initialization failed:", error);
|
|
21423
21421
|
}
|
|
21424
21422
|
}
|
|
21423
|
+
/**
|
|
21424
|
+
* Defer heavy operations to avoid blocking main thread
|
|
21425
|
+
*/
|
|
21426
|
+
deferHeavyOperations() {
|
|
21427
|
+
// Use requestIdleCallback for optimal performance, fallback to setTimeout
|
|
21428
|
+
const scheduleWork = (callback, timeout = 5000) => {
|
|
21429
|
+
if (typeof requestIdleCallback !== 'undefined') {
|
|
21430
|
+
requestIdleCallback(callback, { timeout });
|
|
21431
|
+
}
|
|
21432
|
+
else {
|
|
21433
|
+
setTimeout(callback, 100); // Small delay fallback
|
|
21434
|
+
}
|
|
21435
|
+
};
|
|
21436
|
+
// Schedule fingerprinting when browser is idle
|
|
21437
|
+
scheduleWork(async () => {
|
|
21438
|
+
try {
|
|
21439
|
+
await this.collectFingerprint();
|
|
21440
|
+
if (this.config.debug) {
|
|
21441
|
+
console.log("[Zaplier] Fingerprint collected (deferred)");
|
|
21442
|
+
}
|
|
21443
|
+
}
|
|
21444
|
+
catch (error) {
|
|
21445
|
+
if (this.config.debug) {
|
|
21446
|
+
console.error("[Zaplier] Deferred fingerprinting failed:", error);
|
|
21447
|
+
}
|
|
21448
|
+
}
|
|
21449
|
+
}, 3000);
|
|
21450
|
+
// Schedule anti-adblock initialization
|
|
21451
|
+
scheduleWork(() => {
|
|
21452
|
+
this.initializeAntiAdblock();
|
|
21453
|
+
if (this.config.debug) {
|
|
21454
|
+
console.log("[Zaplier] Anti-adblock initialized (deferred)");
|
|
21455
|
+
}
|
|
21456
|
+
}, 1000);
|
|
21457
|
+
// Schedule tracking engines initialization
|
|
21458
|
+
scheduleWork(() => {
|
|
21459
|
+
this.initializeTrackingEngines();
|
|
21460
|
+
if (this.config.debug) {
|
|
21461
|
+
console.log("[Zaplier] Tracking engines initialized (deferred)");
|
|
21462
|
+
}
|
|
21463
|
+
}, 2000);
|
|
21464
|
+
// Schedule auto tracker initialization
|
|
21465
|
+
scheduleWork(() => {
|
|
21466
|
+
this.initializeAutoTracker();
|
|
21467
|
+
if (this.config.debug) {
|
|
21468
|
+
console.log("[Zaplier] Auto tracker initialized (deferred)");
|
|
21469
|
+
}
|
|
21470
|
+
}, 1500);
|
|
21471
|
+
}
|
|
21425
21472
|
/**
|
|
21426
21473
|
* Initialize tracking engines (Session Replay & Heatmap)
|
|
21427
21474
|
*/
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Zaplier SDK Core v2.0.0 - Performance Optimized
|
|
3
|
+
* Minimal core for instant initialization with lazy loading
|
|
4
|
+
*/
|
|
5
|
+
interface CoreConfig {
|
|
6
|
+
token: string;
|
|
7
|
+
debug?: boolean;
|
|
8
|
+
apiEndpoint?: string;
|
|
9
|
+
allow_localhost?: boolean;
|
|
10
|
+
replay?: boolean;
|
|
11
|
+
replaySampling?: number;
|
|
12
|
+
deferAdvanced?: boolean;
|
|
13
|
+
loadTimeout?: number;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Minimal SDK Core - Only essential tracking functionality
|
|
17
|
+
* Heavy operations are lazy-loaded to avoid blocking main thread
|
|
18
|
+
*/
|
|
19
|
+
declare class ZaplierCore {
|
|
20
|
+
private config;
|
|
21
|
+
private eventQueue;
|
|
22
|
+
private isInitialized;
|
|
23
|
+
private sessionId?;
|
|
24
|
+
private visitorId?;
|
|
25
|
+
private modules;
|
|
26
|
+
private readonly version;
|
|
27
|
+
constructor(config: CoreConfig);
|
|
28
|
+
/**
|
|
29
|
+
* Instant core initialization - only essential setup
|
|
30
|
+
*/
|
|
31
|
+
private initializeCore;
|
|
32
|
+
/**
|
|
33
|
+
* Track page view immediately (core functionality)
|
|
34
|
+
*/
|
|
35
|
+
trackPageView(data?: any): void;
|
|
36
|
+
/**
|
|
37
|
+
* Track custom event immediately
|
|
38
|
+
*/
|
|
39
|
+
track(eventName: string, data?: any): void;
|
|
40
|
+
/**
|
|
41
|
+
* Enable advanced features (lazy loading)
|
|
42
|
+
*/
|
|
43
|
+
enableAdvancedFeatures(): Promise<void>;
|
|
44
|
+
/**
|
|
45
|
+
* Load fingerprinting module
|
|
46
|
+
*/
|
|
47
|
+
private loadFingerprinting;
|
|
48
|
+
/**
|
|
49
|
+
* Load replay module
|
|
50
|
+
*/
|
|
51
|
+
private loadReplayModule;
|
|
52
|
+
/**
|
|
53
|
+
* Schedule advanced loading when browser is idle
|
|
54
|
+
*/
|
|
55
|
+
private scheduleAdvancedLoading;
|
|
56
|
+
/**
|
|
57
|
+
* Send event to backend (simplified)
|
|
58
|
+
*/
|
|
59
|
+
private sendEvent;
|
|
60
|
+
/**
|
|
61
|
+
* Process queued events
|
|
62
|
+
*/
|
|
63
|
+
private processEventQueue;
|
|
64
|
+
/**
|
|
65
|
+
* Generate temporary session ID
|
|
66
|
+
*/
|
|
67
|
+
private generateTempSessionId;
|
|
68
|
+
/**
|
|
69
|
+
* Generate temporary visitor ID
|
|
70
|
+
*/
|
|
71
|
+
private generateTempVisitorId;
|
|
72
|
+
/**
|
|
73
|
+
* Get visitor info (for compatibility)
|
|
74
|
+
*/
|
|
75
|
+
getVisitorInfo(): {
|
|
76
|
+
visitorId: string | undefined;
|
|
77
|
+
sessionId: string | undefined;
|
|
78
|
+
isReady: boolean;
|
|
79
|
+
hasFingerprint: boolean;
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Factory function for easy initialization
|
|
84
|
+
*/
|
|
85
|
+
declare function initZaplierCore(config: CoreConfig): ZaplierCore;
|
|
86
|
+
|
|
87
|
+
export { ZaplierCore, ZaplierCore as default, initZaplierCore };
|
|
88
|
+
export type { CoreConfig };
|
package/dist/v2/core.js
ADDED
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Zaplier SDK v2.0.0 - Performance Optimized
|
|
3
|
+
* Advanced privacy-first tracking with code splitting
|
|
4
|
+
* (c) 2025 Zaplier Team
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Zaplier SDK Core v2.0.0 - Performance Optimized
|
|
8
|
+
* Minimal core for instant initialization with lazy loading
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Minimal SDK Core - Only essential tracking functionality
|
|
12
|
+
* Heavy operations are lazy-loaded to avoid blocking main thread
|
|
13
|
+
*/
|
|
14
|
+
class ZaplierCore {
|
|
15
|
+
constructor(config) {
|
|
16
|
+
this.eventQueue = [];
|
|
17
|
+
this.isInitialized = false;
|
|
18
|
+
this.modules = new Map();
|
|
19
|
+
this.version = "2.0.0";
|
|
20
|
+
this.config = {
|
|
21
|
+
deferAdvanced: true,
|
|
22
|
+
loadTimeout: 5000,
|
|
23
|
+
debug: false,
|
|
24
|
+
...config
|
|
25
|
+
};
|
|
26
|
+
// Immediate initialization (< 1ms)
|
|
27
|
+
this.initializeCore();
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Instant core initialization - only essential setup
|
|
31
|
+
*/
|
|
32
|
+
initializeCore() {
|
|
33
|
+
try {
|
|
34
|
+
if (this.config.debug) {
|
|
35
|
+
console.log(`[Zaplier Core] v${this.version} initializing...`);
|
|
36
|
+
}
|
|
37
|
+
// Generate temporary IDs immediately
|
|
38
|
+
this.sessionId = this.generateTempSessionId();
|
|
39
|
+
this.visitorId = this.generateTempVisitorId();
|
|
40
|
+
this.isInitialized = true;
|
|
41
|
+
// Process any queued events
|
|
42
|
+
this.processEventQueue();
|
|
43
|
+
if (this.config.debug) {
|
|
44
|
+
console.log(`[Zaplier Core] Initialized in < 1ms (modules will load lazily)`);
|
|
45
|
+
}
|
|
46
|
+
// Schedule advanced features if not deferred
|
|
47
|
+
if (!this.config.deferAdvanced) {
|
|
48
|
+
this.scheduleAdvancedLoading();
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
console.error("[Zaplier Core] Initialization failed:", error);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Track page view immediately (core functionality)
|
|
57
|
+
*/
|
|
58
|
+
trackPageView(data = {}) {
|
|
59
|
+
if (this.config.debug) {
|
|
60
|
+
console.log("[Zaplier Core] Tracking page view (immediate)");
|
|
61
|
+
}
|
|
62
|
+
const event = {
|
|
63
|
+
eventType: 'page_view',
|
|
64
|
+
eventName: 'page_view',
|
|
65
|
+
sessionId: this.sessionId,
|
|
66
|
+
visitorId: this.visitorId,
|
|
67
|
+
url: window.location.href,
|
|
68
|
+
referrer: document.referrer,
|
|
69
|
+
timestamp: new Date().toISOString(),
|
|
70
|
+
...data
|
|
71
|
+
};
|
|
72
|
+
// Send immediately without heavy processing
|
|
73
|
+
this.sendEvent(event);
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Track custom event immediately
|
|
77
|
+
*/
|
|
78
|
+
track(eventName, data = {}) {
|
|
79
|
+
if (this.config.debug) {
|
|
80
|
+
console.log(`[Zaplier Core] Tracking event: ${eventName}`);
|
|
81
|
+
}
|
|
82
|
+
const event = {
|
|
83
|
+
eventType: 'custom',
|
|
84
|
+
eventName,
|
|
85
|
+
sessionId: this.sessionId,
|
|
86
|
+
visitorId: this.visitorId,
|
|
87
|
+
timestamp: new Date().toISOString(),
|
|
88
|
+
...data
|
|
89
|
+
};
|
|
90
|
+
this.sendEvent(event);
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Enable advanced features (lazy loading)
|
|
94
|
+
*/
|
|
95
|
+
async enableAdvancedFeatures() {
|
|
96
|
+
if (this.config.debug) {
|
|
97
|
+
console.log("[Zaplier Core] Loading advanced features...");
|
|
98
|
+
}
|
|
99
|
+
try {
|
|
100
|
+
// Load fingerprinting
|
|
101
|
+
await this.loadFingerprinting();
|
|
102
|
+
// Load other modules based on config
|
|
103
|
+
if (this.config.replay) {
|
|
104
|
+
await this.loadReplayModule();
|
|
105
|
+
}
|
|
106
|
+
// Add other modules as needed
|
|
107
|
+
if (this.config.debug) {
|
|
108
|
+
console.log("[Zaplier Core] Advanced features loaded");
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
catch (error) {
|
|
112
|
+
console.error("[Zaplier Core] Failed to load advanced features:", error);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Load fingerprinting module
|
|
117
|
+
*/
|
|
118
|
+
async loadFingerprinting() {
|
|
119
|
+
if (this.modules.has('fingerprint'))
|
|
120
|
+
return;
|
|
121
|
+
try {
|
|
122
|
+
const { getCompleteFingerprint } = await import('./chunks/fingerprint-BpVzoJ8I.js');
|
|
123
|
+
const fingerprint = await getCompleteFingerprint();
|
|
124
|
+
if (fingerprint.success && fingerprint.data) {
|
|
125
|
+
// Update visitor ID with real fingerprint hash
|
|
126
|
+
this.visitorId = fingerprint.data.hash || this.visitorId;
|
|
127
|
+
this.modules.set('fingerprint', fingerprint.data);
|
|
128
|
+
if (this.config.debug) {
|
|
129
|
+
console.log("[Zaplier Core] Fingerprinting loaded");
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
catch (error) {
|
|
134
|
+
console.error("[Zaplier Core] Fingerprinting failed:", error);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Load replay module
|
|
139
|
+
*/
|
|
140
|
+
async loadReplayModule() {
|
|
141
|
+
if (this.modules.has('replay'))
|
|
142
|
+
return;
|
|
143
|
+
try {
|
|
144
|
+
const { SessionReplayEngine } = await import('./chunks/session-replay-_79DdSl3.js');
|
|
145
|
+
const replayEngine = new SessionReplayEngine(this.sessionId, this.visitorId, {
|
|
146
|
+
sampleRate: this.config.replaySampling || 0.1,
|
|
147
|
+
});
|
|
148
|
+
if (replayEngine.start()) {
|
|
149
|
+
this.modules.set('replay', replayEngine);
|
|
150
|
+
if (this.config.debug) {
|
|
151
|
+
console.log("[Zaplier Core] Session replay loaded");
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
catch (error) {
|
|
156
|
+
console.error("[Zaplier Core] Replay loading failed:", error);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Schedule advanced loading when browser is idle
|
|
161
|
+
*/
|
|
162
|
+
scheduleAdvancedLoading() {
|
|
163
|
+
const scheduleWork = (callback, delay = 100) => {
|
|
164
|
+
if (typeof requestIdleCallback !== 'undefined') {
|
|
165
|
+
requestIdleCallback(callback, { timeout: this.config.loadTimeout });
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
setTimeout(callback, delay);
|
|
169
|
+
}
|
|
170
|
+
};
|
|
171
|
+
scheduleWork(() => this.enableAdvancedFeatures());
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Send event to backend (simplified)
|
|
175
|
+
*/
|
|
176
|
+
async sendEvent(event) {
|
|
177
|
+
try {
|
|
178
|
+
// Simple fetch without heavy processing
|
|
179
|
+
const response = await fetch(`${this.config.apiEndpoint || 'https://api.zaplier.com'}/events?token=${encodeURIComponent(this.config.token)}`, {
|
|
180
|
+
method: 'POST',
|
|
181
|
+
headers: {
|
|
182
|
+
'Content-Type': 'application/json',
|
|
183
|
+
},
|
|
184
|
+
body: JSON.stringify(event),
|
|
185
|
+
keepalive: true, // Important for page unload events
|
|
186
|
+
});
|
|
187
|
+
if (this.config.debug && !response.ok) {
|
|
188
|
+
console.warn(`[Zaplier Core] Event sending failed: ${response.status}`);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
catch (error) {
|
|
192
|
+
// Queue for retry if needed
|
|
193
|
+
this.eventQueue.push(event);
|
|
194
|
+
if (this.config.debug) {
|
|
195
|
+
console.warn("[Zaplier Core] Event queued for retry:", error);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Process queued events
|
|
201
|
+
*/
|
|
202
|
+
processEventQueue() {
|
|
203
|
+
if (this.eventQueue.length === 0)
|
|
204
|
+
return;
|
|
205
|
+
const events = [...this.eventQueue];
|
|
206
|
+
this.eventQueue = [];
|
|
207
|
+
events.forEach(event => this.sendEvent(event));
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Generate temporary session ID
|
|
211
|
+
*/
|
|
212
|
+
generateTempSessionId() {
|
|
213
|
+
const now = new Date();
|
|
214
|
+
const dateStr = now.getFullYear() +
|
|
215
|
+
(now.getMonth() + 1).toString().padStart(2, '0') +
|
|
216
|
+
now.getDate().toString().padStart(2, '0');
|
|
217
|
+
const hour = now.getHours().toString().padStart(2, '0');
|
|
218
|
+
return `temp_${Date.now()}_${dateStr}_${hour}`;
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Generate temporary visitor ID
|
|
222
|
+
*/
|
|
223
|
+
generateTempVisitorId() {
|
|
224
|
+
return `temp_visitor_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Get visitor info (for compatibility)
|
|
228
|
+
*/
|
|
229
|
+
getVisitorInfo() {
|
|
230
|
+
return {
|
|
231
|
+
visitorId: this.visitorId,
|
|
232
|
+
sessionId: this.sessionId,
|
|
233
|
+
isReady: this.isInitialized,
|
|
234
|
+
hasFingerprint: this.modules.has('fingerprint'),
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Factory function for easy initialization
|
|
240
|
+
*/
|
|
241
|
+
function initZaplierCore(config) {
|
|
242
|
+
return new ZaplierCore(config);
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
export { ZaplierCore, ZaplierCore as default, initZaplierCore };
|