getu-attribution-v2-sdk 0.1.1 → 0.2.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.
- package/README.md +196 -1
- package/dist/core/AttributionSDK.d.ts +23 -0
- package/dist/core/AttributionSDK.d.ts.map +1 -1
- package/dist/core/AttributionSDK.js +90 -3
- package/dist/getuai-attribution.min.js +1 -1
- package/dist/index.d.ts +53 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.esm.js +352 -5
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +354 -5
- package/dist/queue/index.d.ts.map +1 -1
- package/dist/queue/index.js +5 -1
- package/dist/storage/index.d.ts +8 -0
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/index.js +121 -0
- package/dist/types/index.d.ts +3 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +1 -0
- package/dist/version.d.ts +6 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +5 -0
- package/package.json +4 -3
package/dist/storage/index.js
CHANGED
|
@@ -274,10 +274,131 @@ export class AttributionStorageManager {
|
|
|
274
274
|
constructor(logger) {
|
|
275
275
|
this.UTM_STORAGE_KEY = "attribution_utm_data";
|
|
276
276
|
this.SESSION_STORAGE_KEY = "attribution_session";
|
|
277
|
+
this.USER_ID_KEY = "getuai_user_id";
|
|
278
|
+
this.USER_ID_COOKIE_EXPIRES = 365; // days
|
|
277
279
|
this.logger = logger;
|
|
278
280
|
this.localStorage = new LocalStorageManager(logger);
|
|
279
281
|
this.indexedDB = new IndexedDBManager(logger);
|
|
280
282
|
}
|
|
283
|
+
// User ID management - stores in both cookie and localStorage
|
|
284
|
+
setUserId(userId) {
|
|
285
|
+
if (!userId || userId.trim() === "") {
|
|
286
|
+
this.logger.warn("Cannot set empty user ID");
|
|
287
|
+
return;
|
|
288
|
+
}
|
|
289
|
+
const trimmedUserId = userId.trim();
|
|
290
|
+
// Store in cookie
|
|
291
|
+
try {
|
|
292
|
+
this.setCookie(this.USER_ID_KEY, trimmedUserId, this.USER_ID_COOKIE_EXPIRES);
|
|
293
|
+
this.logger.debug(`👤 User ID stored in cookie: ${trimmedUserId}`);
|
|
294
|
+
}
|
|
295
|
+
catch (error) {
|
|
296
|
+
this.logger.error("Failed to store user ID in cookie:", error);
|
|
297
|
+
}
|
|
298
|
+
// Store in localStorage
|
|
299
|
+
try {
|
|
300
|
+
if (typeof localStorage !== "undefined") {
|
|
301
|
+
localStorage.setItem(this.USER_ID_KEY, trimmedUserId);
|
|
302
|
+
this.logger.debug(`👤 User ID stored in localStorage: ${trimmedUserId}`);
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
catch (error) {
|
|
306
|
+
this.logger.error("Failed to store user ID in localStorage:", error);
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
getUserId() {
|
|
310
|
+
// Try localStorage first
|
|
311
|
+
try {
|
|
312
|
+
if (typeof localStorage !== "undefined") {
|
|
313
|
+
const userId = localStorage.getItem(this.USER_ID_KEY);
|
|
314
|
+
if (userId) {
|
|
315
|
+
return userId;
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
catch (error) {
|
|
320
|
+
this.logger.debug("Failed to get user ID from localStorage:", error);
|
|
321
|
+
}
|
|
322
|
+
// Fallback to cookie
|
|
323
|
+
try {
|
|
324
|
+
const userId = this.getCookie(this.USER_ID_KEY);
|
|
325
|
+
if (userId) {
|
|
326
|
+
// Sync back to localStorage if cookie exists but localStorage doesn't
|
|
327
|
+
try {
|
|
328
|
+
if (typeof localStorage !== "undefined") {
|
|
329
|
+
localStorage.setItem(this.USER_ID_KEY, userId);
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
catch (error) {
|
|
333
|
+
// Ignore sync errors
|
|
334
|
+
}
|
|
335
|
+
return userId;
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
catch (error) {
|
|
339
|
+
this.logger.debug("Failed to get user ID from cookie:", error);
|
|
340
|
+
}
|
|
341
|
+
return null;
|
|
342
|
+
}
|
|
343
|
+
removeUserId() {
|
|
344
|
+
// Remove from cookie
|
|
345
|
+
try {
|
|
346
|
+
this.deleteCookie(this.USER_ID_KEY);
|
|
347
|
+
this.logger.debug("👤 User ID removed from cookie");
|
|
348
|
+
}
|
|
349
|
+
catch (error) {
|
|
350
|
+
this.logger.error("Failed to remove user ID from cookie:", error);
|
|
351
|
+
}
|
|
352
|
+
// Remove from localStorage
|
|
353
|
+
try {
|
|
354
|
+
if (typeof localStorage !== "undefined") {
|
|
355
|
+
localStorage.removeItem(this.USER_ID_KEY);
|
|
356
|
+
this.logger.debug("👤 User ID removed from localStorage");
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
catch (error) {
|
|
360
|
+
this.logger.error("Failed to remove user ID from localStorage:", error);
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
// Cookie helper methods
|
|
364
|
+
setCookie(name, value, days) {
|
|
365
|
+
try {
|
|
366
|
+
const expires = new Date();
|
|
367
|
+
expires.setTime(expires.getTime() + days * 24 * 60 * 60 * 1000);
|
|
368
|
+
const cookieValue = `${name}=${encodeURIComponent(value)};expires=${expires.toUTCString()};path=/;SameSite=Lax`;
|
|
369
|
+
document.cookie = cookieValue;
|
|
370
|
+
}
|
|
371
|
+
catch (error) {
|
|
372
|
+
this.logger.error("Failed to set cookie:", error);
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
getCookie(name) {
|
|
376
|
+
try {
|
|
377
|
+
const nameEQ = name + "=";
|
|
378
|
+
const ca = document.cookie.split(";");
|
|
379
|
+
for (let i = 0; i < ca.length; i++) {
|
|
380
|
+
let c = ca[i];
|
|
381
|
+
while (c.charAt(0) === " ")
|
|
382
|
+
c = c.substring(1, c.length);
|
|
383
|
+
if (c.indexOf(nameEQ) === 0) {
|
|
384
|
+
return decodeURIComponent(c.substring(nameEQ.length, c.length));
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
return null;
|
|
388
|
+
}
|
|
389
|
+
catch (error) {
|
|
390
|
+
this.logger.error("Failed to get cookie:", error);
|
|
391
|
+
return null;
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
deleteCookie(name) {
|
|
395
|
+
try {
|
|
396
|
+
document.cookie = `${name}=;expires=Thu, 01 Jan 1970 00:00:00 UTC;path=/;`;
|
|
397
|
+
}
|
|
398
|
+
catch (error) {
|
|
399
|
+
this.logger.error("Failed to delete cookie:", error);
|
|
400
|
+
}
|
|
401
|
+
}
|
|
281
402
|
async init() {
|
|
282
403
|
await this.indexedDB.init();
|
|
283
404
|
}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export declare enum EventType {
|
|
2
2
|
PAGE_VIEW = "page_view",
|
|
3
|
+
PAGE_CLICK = "page_click",// User click journey tracking
|
|
3
4
|
VIDEO_PLAY = "video_play",
|
|
4
5
|
FORM_SUBMIT = "form_submit",
|
|
5
6
|
EMAIL_VERIFICATION = "email_verification",
|
|
@@ -54,6 +55,7 @@ export interface EventData {
|
|
|
54
55
|
}
|
|
55
56
|
export interface BatchEventRequest {
|
|
56
57
|
events: EventData[];
|
|
58
|
+
sdk_version: string;
|
|
57
59
|
}
|
|
58
60
|
export declare const defaultEndpoint = "https://attribution.getu.ai/attribution/api";
|
|
59
61
|
export interface SDKConfig {
|
|
@@ -72,6 +74,7 @@ export interface SDKConfig {
|
|
|
72
74
|
excludeDomains?: string[];
|
|
73
75
|
autoCleanUTM?: boolean;
|
|
74
76
|
pageViewDebounceInterval?: number;
|
|
77
|
+
userId?: string;
|
|
75
78
|
}
|
|
76
79
|
export interface StorageInterface {
|
|
77
80
|
get(key: string): any;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
|
package/dist/types/index.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,WAAW,UAAU,CAAC"}
|
package/dist/version.js
ADDED
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "getu-attribution-v2-sdk",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "GetuAI Attribution SDK for client-side tracking",
|
|
3
|
+
"version": "0.2.2",
|
|
4
|
+
"description": "GetuAI Attribution V2 SDK for client-side tracking",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "dist/index.esm.js",
|
|
7
7
|
"browser": "dist/getuai-attribution.min.js",
|
|
@@ -25,7 +25,8 @@
|
|
|
25
25
|
"test": "jest",
|
|
26
26
|
"lint": "eslint src/**/*.ts",
|
|
27
27
|
"clean": "rimraf dist",
|
|
28
|
-
"prepublishOnly": "npm run build"
|
|
28
|
+
"prepublishOnly": "npm run build",
|
|
29
|
+
"serve": "python -m http.server 8080"
|
|
29
30
|
},
|
|
30
31
|
"keywords": [
|
|
31
32
|
"attribution",
|