@thred-apps/thred-track 1.2.7 → 1.2.9
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/fingerprint.d.ts +3 -6
- package/dist/core/fingerprint.d.ts.map +1 -1
- package/dist/index.esm.js +38 -21
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +38 -21
- package/dist/index.js.map +1 -1
- package/dist/thred.umd.js +1 -1
- package/dist/thred.umd.js.map +1 -1
- package/package.json +1 -1
|
@@ -9,13 +9,10 @@ export declare class FingerprintManager {
|
|
|
9
9
|
*/
|
|
10
10
|
getFingerprint(): Promise<string | null>;
|
|
11
11
|
private generateFingerprint;
|
|
12
|
-
/**
|
|
13
|
-
* Get cached fingerprint (synchronous)
|
|
14
|
-
*/
|
|
15
12
|
getCachedFingerprint(): string | null;
|
|
16
|
-
/**
|
|
17
|
-
* Clear fingerprint cache
|
|
18
|
-
*/
|
|
19
13
|
clear(): void;
|
|
14
|
+
private readStorage;
|
|
15
|
+
private writeStorage;
|
|
16
|
+
private removeStorage;
|
|
20
17
|
}
|
|
21
18
|
//# sourceMappingURL=fingerprint.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fingerprint.d.ts","sourceRoot":"","sources":["../../src/core/fingerprint.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"fingerprint.d.ts","sourceRoot":"","sources":["../../src/core/fingerprint.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AASzC,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAuC;gBAE1C,MAAM,EAAE,MAAM;IAI1B;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;YAsBhC,mBAAmB;IA2BjC,oBAAoB,IAAI,MAAM,GAAG,IAAI;IAIrC,KAAK;IAML,OAAO,CAAC,WAAW;IAUnB,OAAO,CAAC,YAAY;IAUpB,OAAO,CAAC,aAAa;CAStB"}
|
package/dist/index.esm.js
CHANGED
|
@@ -94,6 +94,7 @@ function getBrowserKeyFromScript() {
|
|
|
94
94
|
|
|
95
95
|
const FP_PROXY_URL = 'https://thredproxy.com/35ZCuyzokuT1YGd8/Hm7KPMHUZ4duyPRj?apiKey=iyqKVLQt2560EQUyjfxa';
|
|
96
96
|
const FP_PROXY_ENDPOINT = 'https://thredproxy.com/35ZCuyzokuT1YGd8/qbWl4nqUSCIDTor4';
|
|
97
|
+
const STORAGE_KEY = 'thred_fingerprint';
|
|
97
98
|
class FingerprintManager {
|
|
98
99
|
constructor(logger) {
|
|
99
100
|
this.fingerprint = null;
|
|
@@ -105,23 +106,20 @@ class FingerprintManager {
|
|
|
105
106
|
*/
|
|
106
107
|
getFingerprint() {
|
|
107
108
|
return __awaiter(this, void 0, void 0, function* () {
|
|
108
|
-
// Return cached fingerprint
|
|
109
109
|
if (this.fingerprint) {
|
|
110
110
|
this.logger.log('Using cached fingerprint:', this.fingerprint);
|
|
111
111
|
return this.fingerprint;
|
|
112
112
|
}
|
|
113
|
-
// Return existing promise if already loading
|
|
114
113
|
if (this.promise) {
|
|
115
114
|
return this.promise;
|
|
116
115
|
}
|
|
117
|
-
// Check
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
this.fingerprint =
|
|
121
|
-
this.logger.log('Using
|
|
116
|
+
// Check localStorage (persists across tabs)
|
|
117
|
+
const stored = this.readStorage();
|
|
118
|
+
if (stored) {
|
|
119
|
+
this.fingerprint = stored;
|
|
120
|
+
this.logger.log('Using stored fingerprint:', this.fingerprint);
|
|
122
121
|
return this.fingerprint;
|
|
123
122
|
}
|
|
124
|
-
// Generate new fingerprint
|
|
125
123
|
this.promise = this.generateFingerprint();
|
|
126
124
|
return this.promise;
|
|
127
125
|
});
|
|
@@ -140,10 +138,7 @@ class FingerprintManager {
|
|
|
140
138
|
});
|
|
141
139
|
const result = yield fp.get();
|
|
142
140
|
this.fingerprint = result.visitorId;
|
|
143
|
-
|
|
144
|
-
if (typeof window !== 'undefined') {
|
|
145
|
-
window.thredFingerprint = this.fingerprint;
|
|
146
|
-
}
|
|
141
|
+
this.writeStorage(this.fingerprint);
|
|
147
142
|
this.logger.log('Fingerprint generated:', this.fingerprint);
|
|
148
143
|
return this.fingerprint;
|
|
149
144
|
}
|
|
@@ -153,20 +148,42 @@ class FingerprintManager {
|
|
|
153
148
|
}
|
|
154
149
|
});
|
|
155
150
|
}
|
|
156
|
-
/**
|
|
157
|
-
* Get cached fingerprint (synchronous)
|
|
158
|
-
*/
|
|
159
151
|
getCachedFingerprint() {
|
|
160
152
|
return this.fingerprint;
|
|
161
153
|
}
|
|
162
|
-
/**
|
|
163
|
-
* Clear fingerprint cache
|
|
164
|
-
*/
|
|
165
154
|
clear() {
|
|
166
155
|
this.fingerprint = null;
|
|
167
156
|
this.promise = null;
|
|
168
|
-
|
|
169
|
-
|
|
157
|
+
this.removeStorage();
|
|
158
|
+
}
|
|
159
|
+
readStorage() {
|
|
160
|
+
try {
|
|
161
|
+
return typeof window !== 'undefined'
|
|
162
|
+
? localStorage.getItem(STORAGE_KEY)
|
|
163
|
+
: null;
|
|
164
|
+
}
|
|
165
|
+
catch (_a) {
|
|
166
|
+
return null;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
writeStorage(value) {
|
|
170
|
+
try {
|
|
171
|
+
if (typeof window !== 'undefined') {
|
|
172
|
+
localStorage.setItem(STORAGE_KEY, value);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
catch (_a) {
|
|
176
|
+
this.logger.warn('Failed to persist fingerprint to localStorage');
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
removeStorage() {
|
|
180
|
+
try {
|
|
181
|
+
if (typeof window !== 'undefined') {
|
|
182
|
+
localStorage.removeItem(STORAGE_KEY);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
catch (_a) {
|
|
186
|
+
// Ignore storage errors on cleanup
|
|
170
187
|
}
|
|
171
188
|
}
|
|
172
189
|
}
|
|
@@ -550,7 +567,7 @@ const DEFAULT_BASE_URL = 'https://api.thred.dev/v1';
|
|
|
550
567
|
class ThredSDK {
|
|
551
568
|
constructor(options) {
|
|
552
569
|
this.initialized = false;
|
|
553
|
-
this.options = Object.assign({ baseUrl: DEFAULT_BASE_URL, debug:
|
|
570
|
+
this.options = Object.assign({ baseUrl: DEFAULT_BASE_URL, debug: false, autoInit: true }, options);
|
|
554
571
|
this.logger = new Logger(this.options.debug);
|
|
555
572
|
this.fingerprint = new FingerprintManager(this.logger);
|
|
556
573
|
this.api = new ThredAPI(this.options.baseUrl, this.options.browserKey, this.logger);
|
package/dist/index.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.js","sources":["../node_modules/tslib/tslib.es6.js","../src/utils/logger.ts","../src/utils/detector.ts","../src/core/fingerprint.ts","../src/core/api.ts","../src/core/tracker.ts","../src/index.ts"],"sourcesContent":["/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n","/**\n * Simple logger utility\n */\nexport class Logger {\n private debug: boolean;\n private prefix: string;\n\n constructor(debug = false, prefix = '[Thred]') {\n this.debug = debug;\n this.prefix = prefix;\n }\n\n log(...args: unknown[]) {\n if (this.debug) {\n console.log(this.prefix, ...args);\n }\n }\n\n warn(...args: unknown[]) {\n if (this.debug) {\n console.warn(this.prefix, ...args);\n }\n }\n\n error(...args: unknown[]) {\n console.error(this.prefix, ...args);\n }\n}\n","/**\n * Detects if the visitor came from ChatGPT\n */\nexport function isFromChatGPT(): boolean {\n if (typeof window === 'undefined') return false;\n\n const params = new URLSearchParams(window.location.search);\n const utmSource = params.get('utm_source')?.toLowerCase() || '';\n const referrer = document.referrer.toLowerCase();\n\n const isChatGPTRef =\n referrer.includes('chat.openai.com') || referrer.includes('chatgpt.com');\n const isChatGPTUtm =\n utmSource === 'chatgpt' ||\n utmSource.includes('chatgpt') ||\n utmSource === 'chat.openai' ||\n utmSource === 'openai';\n\n return isChatGPTUtm || isChatGPTRef;\n}\n\n/**\n * Gets the browser key from script tag if present\n */\nexport function getBrowserKeyFromScript(): string | null {\n if (typeof window === 'undefined' || typeof document === 'undefined') {\n return null;\n }\n\n const scripts = document.getElementsByTagName('script');\n\n for (const script of Array.from(scripts)) {\n if (script.src.includes('thred')) {\n try {\n const url = new URL(script.src);\n return url.searchParams.get('browserKey');\n } catch {\n // Invalid URL\n }\n }\n }\n\n return null;\n}\n","import type { FingerprintResult } from '../types';\nimport { Logger } from '../utils/logger';\n\nconst FP_PROXY_URL =\n 'https://thredproxy.com/35ZCuyzokuT1YGd8/Hm7KPMHUZ4duyPRj?apiKey=iyqKVLQt2560EQUyjfxa';\nconst FP_PROXY_ENDPOINT =\n 'https://thredproxy.com/35ZCuyzokuT1YGd8/qbWl4nqUSCIDTor4';\n\nexport class FingerprintManager {\n private fingerprint: string | null = null;\n private logger: Logger;\n private promise: Promise<string | null> | null = null;\n\n constructor(logger: Logger) {\n this.logger = logger;\n }\n\n /**\n * Get or generate fingerprint\n */\n async getFingerprint(): Promise<string | null> {\n // Return cached fingerprint\n if (this.fingerprint) {\n this.logger.log('Using cached fingerprint:', this.fingerprint);\n return this.fingerprint;\n }\n\n // Return existing promise if already loading\n if (this.promise) {\n return this.promise;\n }\n\n // Check global window cache\n if (\n typeof window !== 'undefined' &&\n (window as any).thredFingerprint\n ) {\n this.fingerprint = (window as any).thredFingerprint;\n this.logger.log('Using global fingerprint:', this.fingerprint);\n return this.fingerprint;\n }\n\n // Generate new fingerprint\n this.promise = this.generateFingerprint();\n return this.promise;\n }\n\n private async generateFingerprint(): Promise<string | null> {\n if (typeof window === 'undefined') {\n this.logger.warn('FingerprintJS requires a browser — skipping');\n return null;\n }\n\n try {\n this.logger.log('Loading FingerprintJS...');\n\n const FingerprintJS = await import(FP_PROXY_URL);\n const fp = await FingerprintJS.load({\n endpoint: [FP_PROXY_ENDPOINT, FingerprintJS.defaultEndpoint],\n });\n\n const result: FingerprintResult = await fp.get();\n this.fingerprint = result.visitorId;\n\n // Cache globally\n if (typeof window !== 'undefined') {\n (window as any).thredFingerprint = this.fingerprint;\n }\n\n this.logger.log('Fingerprint generated:', this.fingerprint);\n return this.fingerprint;\n } catch (error) {\n this.logger.warn('Fingerprint generation failed:', error);\n return null;\n }\n }\n\n /**\n * Get cached fingerprint (synchronous)\n */\n getCachedFingerprint(): string | null {\n return this.fingerprint;\n }\n\n /**\n * Clear fingerprint cache\n */\n clear() {\n this.fingerprint = null;\n this.promise = null;\n if (typeof window !== 'undefined') {\n delete (window as any).thredFingerprint;\n }\n }\n}\n","import type {\n ThredConfig,\n PageViewPayload,\n EnrichPayload,\n} from '../types';\nimport { Logger } from '../utils/logger';\n\nexport class ThredAPI {\n private baseUrl: string;\n private browserKey: string;\n private logger: Logger;\n\n constructor(baseUrl: string, browserKey: string, logger: Logger) {\n this.baseUrl = baseUrl;\n this.browserKey = browserKey;\n this.logger = logger;\n }\n\n /**\n * Fetch configuration from API\n */\n async fetchConfig(fingerprint: string): Promise<ThredConfig | null> {\n try {\n const url = `${this.baseUrl}/config?fingerprint=${encodeURIComponent(fingerprint)}&browserKey=${encodeURIComponent(this.browserKey)}`;\n this.logger.log('Fetching config from:', url);\n\n const response = await fetch(url, {\n method: 'GET',\n headers: {\n Accept: 'application/json',\n },\n });\n\n if (!response.ok) {\n throw new Error(`Config request failed: ${response.status}`);\n }\n\n const config = await response.json();\n this.logger.log('Config received:', config);\n\n return config;\n } catch (error) {\n this.logger.warn('Failed to fetch config:', error);\n return null;\n }\n }\n\n /**\n * Send page view event\n */\n async trackPageView(payload: PageViewPayload): Promise<void> {\n try {\n const url = `${this.baseUrl}/events/page-view?browserKey=${encodeURIComponent(this.browserKey)}`;\n this.logger.log('Tracking page view:', url);\n\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(payload),\n keepalive: true,\n });\n\n if (!response.ok) {\n throw new Error(`Page view request failed: ${response.status}`);\n }\n\n this.logger.log('Page view tracked successfully');\n } catch (error) {\n this.logger.warn('Failed to track page view:', error);\n }\n }\n\n /**\n * Send lead enrichment data\n */\n async enrichLead(payload: EnrichPayload): Promise<void> {\n try {\n const url = `${this.baseUrl}/customers/enrich?browserKey=${encodeURIComponent(this.browserKey)}`;\n this.logger.log('Enriching lead:', url);\n\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(payload),\n keepalive: true,\n });\n\n if (!response.ok) {\n throw new Error(`Enrich request failed: ${response.status}`);\n }\n\n this.logger.log('Lead enriched successfully');\n } catch (error) {\n this.logger.warn('Failed to enrich lead:', error);\n }\n }\n}\n","import type { ThredConfig, LeadData } from '../types';\nimport { Logger } from '../utils/logger';\nimport { isFromChatGPT } from '../utils/detector';\nimport { ThredAPI } from './api';\nimport { FingerprintManager } from './fingerprint';\n\nexport class Tracker {\n private api: ThredAPI;\n private fingerprint: FingerprintManager;\n private logger: Logger;\n private config: ThredConfig | null = null;\n private formObserver: MutationObserver | null = null;\n private lastTrackedUrl: string | null = null;\n private popstateHandler: (() => void) | null = null;\n private originalPushState: typeof history.pushState | null = null;\n private originalReplaceState: typeof history.replaceState | null = null;\n\n constructor(\n api: ThredAPI,\n fingerprint: FingerprintManager,\n logger: Logger\n ) {\n this.api = api;\n this.fingerprint = fingerprint;\n this.logger = logger;\n }\n\n /**\n * Initialize tracker with config\n */\n async init(): Promise<void> {\n // Get fingerprint\n const fingerprint = await this.fingerprint.getFingerprint();\n if (!fingerprint) {\n this.logger.warn('Cannot initialize tracker without fingerprint');\n return;\n }\n this.config = await this.api.fetchConfig(fingerprint);\n\n if (!this.config?.enabled) {\n this.logger.log('Tracking disabled by config');\n return;\n }\n\n if (!this.config.hasChatSession && !isFromChatGPT()) {\n this.logger.log('No chat session for this fingerprint - exiting');\n return;\n }\n\n // Track initial page view\n if (isFromChatGPT()) {\n await this.trackPageView();\n } else {\n this.logger.log('UTM not from ChatGPT - skipping page view');\n }\n\n // Track SPA route changes\n this.setupRouteTracking();\n\n // Setup form tracking\n this.setupFormTracking();\n }\n\n /**\n * Track page view event\n */\n async trackPageView(): Promise<void> {\n if (typeof window === 'undefined') return;\n\n const fp = await this.fingerprint.getFingerprint();\n\n if (!fp) {\n this.logger.warn('Cannot track page view without fingerprint');\n return;\n }\n\n await this.api.trackPageView({\n event: 'page_view',\n data: {\n url: window.location.href,\n },\n fingerprint: fp,\n });\n }\n\n /**\n * Track form submission and enrich lead\n */\n async trackFormSubmit(formData: FormData): Promise<void> {\n if (!this.config || !this.config.emailId || !this.config.nameId) {\n this.logger.warn('Cannot track form - no config loaded');\n return;\n }\n\n const email = formData.get(this.config.emailId)?.toString().trim();\n const name = formData.get(this.config.nameId)?.toString().trim();\n\n let company: string | undefined = undefined;\n if (this.config.companyId) {\n company = formData.get(this.config.companyId)?.toString().trim();\n }\n\n this.logger.log('Form data extracted:', { email, name, company });\n\n if (!email || !name) {\n this.logger.warn('Missing required fields (email, name)');\n return;\n }\n\n await this.identify({\n name,\n email,\n company: company,\n discovery: false,\n });\n }\n\n /**\n * Identify user and enrich lead data\n */\n async identify(leadData: LeadData): Promise<void> {\n const fp = await this.fingerprint.getFingerprint();\n\n if (!fp) {\n this.logger.warn('Cannot identify without fingerprint');\n return;\n }\n\n await this.api.enrichLead({\n fingerprint: fp,\n leadData,\n });\n }\n\n /**\n * Track page views on SPA route changes by patching pushState/replaceState\n * and listening for popstate.\n */\n private setupRouteTracking(): void {\n if (typeof window === 'undefined') return;\n\n this.lastTrackedUrl = window.location.href;\n\n const onRouteChange = () => {\n const currentUrl = window.location.href;\n if (currentUrl === this.lastTrackedUrl) return;\n this.lastTrackedUrl = currentUrl;\n this.logger.log('Route change detected:', currentUrl);\n this.trackPageView();\n };\n\n this.popstateHandler = onRouteChange;\n window.addEventListener('popstate', this.popstateHandler);\n\n this.originalPushState = history.pushState.bind(history);\n this.originalReplaceState = history.replaceState.bind(history);\n\n history.pushState = (...args: Parameters<typeof history.pushState>) => {\n this.originalPushState!(...args);\n onRouteChange();\n };\n\n history.replaceState = (...args: Parameters<typeof history.replaceState>) => {\n this.originalReplaceState!(...args);\n onRouteChange();\n };\n }\n\n /**\n * Setup automatic form tracking\n */\n private setupFormTracking(): void {\n if (!this.config || typeof document === 'undefined') {\n this.logger.warn('Cannot track form - no config or document');\n return;\n }\n\n if (this.config.type === 'hosted') {\n const hostedUrlBase = this.config.hostedUrlBase;\n if (!hostedUrlBase) {\n this.logger.warn('Cannot track form - no hosted URL base');\n return;\n }\n\n // Inject utm_fp into all existing matching links\n this.injectFingerprintIntoLinks(document.body, hostedUrlBase);\n\n // Watch for dynamically added links and inject utm_fp as they appear\n this.formObserver = new MutationObserver((mutations) => {\n for (const mutation of mutations) {\n for (const node of Array.from(mutation.addedNodes)) {\n if (!(node instanceof HTMLElement)) continue;\n\n // Check if the added node itself is a matching link\n if (node.tagName === 'A') {\n this.injectFingerprintIntoLink(node as HTMLAnchorElement, hostedUrlBase);\n }\n\n // Check any child links within the added node\n this.injectFingerprintIntoLinks(node, hostedUrlBase);\n }\n }\n });\n\n this.formObserver.observe(document.body, {\n childList: true,\n subtree: true,\n });\n\n // Fallback: intercept clicks for links that may have had their href changed dynamically\n document.addEventListener('click', (e) => {\n const target = (e.target as HTMLElement).closest('a');\n if (!target) return;\n\n const href = target.getAttribute('href');\n if (!href || !href.includes(hostedUrlBase)) return;\n\n // Already tagged — skip\n if (href.includes('utm_fp=')) return;\n\n this.injectFingerprintIntoLink(target as HTMLAnchorElement, hostedUrlBase);\n }, { capture: true });\n\n return;\n }\n else if (this.config.type === 'custom') {\n const attachFormListener = () => {\n if (!this.config || !this.config.formId) {\n this.logger.warn('Cannot track form - no form ID');\n return;\n }\n const form = document.getElementById(this.config!.formId);\n if (!form) {\n this.logger.log('Form not found:', this.config!.formId);\n return;\n }\n\n const formElement = form as HTMLFormElement;\n\n // Check if already tracked\n if (formElement.dataset.thredTracked) {\n return;\n }\n\n this.logger.log('Attaching listener to form:', this.config!.formId);\n\n formElement.addEventListener(\n 'submit',\n () => {\n const formData = new FormData(formElement);\n this.trackFormSubmit(formData);\n },\n { capture: true }\n );\n\n formElement.dataset.thredTracked = 'true';\n };\n\n // Attach immediately if form exists\n attachFormListener();\n\n // Watch for dynamic forms\n this.formObserver = new MutationObserver(() => {\n attachFormListener();\n });\n\n this.formObserver.observe(document.body, {\n childList: true,\n subtree: true,\n });\n }\n }\n\n /**\n * Inject utm_fp into all matching links within a root element\n */\n private injectFingerprintIntoLinks(root: HTMLElement, hostedUrlBase: string): void {\n const links = root.querySelectorAll<HTMLAnchorElement>('a[href]');\n for (const link of Array.from(links)) {\n this.injectFingerprintIntoLink(link, hostedUrlBase);\n }\n }\n\n /**\n * Inject utm_fp into a single link if it matches hostedUrlBase\n */\n private injectFingerprintIntoLink(link: HTMLAnchorElement, hostedUrlBase: string): void {\n const href = link.getAttribute('href');\n if (!href || !href.includes(hostedUrlBase)) return;\n\n // Already tagged — skip\n if (href.includes('utm_fp=')) return;\n\n const fp = this.fingerprint.getCachedFingerprint();\n if (!fp) {\n this.logger.warn('Cannot inject utm_fp - no cached fingerprint');\n return;\n }\n\n try {\n const url = new URL(href, window.location.origin);\n url.searchParams.set('utm_fp', fp);\n link.setAttribute('href', url.toString());\n this.logger.log('Injected utm_fp into link:', url.toString());\n } catch (err) {\n this.logger.warn('Failed to parse URL:', href, err);\n }\n }\n\n /**\n * Cleanup tracker\n */\n destroy(): void {\n if (this.formObserver) {\n this.formObserver.disconnect();\n this.formObserver = null;\n }\n\n if (typeof window === 'undefined') return;\n\n if (this.popstateHandler) {\n window.removeEventListener('popstate', this.popstateHandler);\n this.popstateHandler = null;\n }\n\n if (this.originalPushState) {\n history.pushState = this.originalPushState;\n this.originalPushState = null;\n }\n\n if (this.originalReplaceState) {\n history.replaceState = this.originalReplaceState;\n this.originalReplaceState = null;\n }\n }\n}\n","/**\n * Thred SDK - Browser tracking and lead enrichment\n */\n\nimport type { ThredOptions, ThredSDK as IThredSDK, LeadData } from './types';\nimport { Logger } from './utils/logger';\nimport { isFromChatGPT, getBrowserKeyFromScript } from './utils/detector';\nimport { FingerprintManager } from './core/fingerprint';\nimport { ThredAPI } from './core/api';\nimport { Tracker } from './core/tracker';\n\nexport * from './types';\n\nconst DEFAULT_BASE_URL = 'https://api.thred.dev/v1';\n\nexport class ThredSDK implements IThredSDK {\n private options: ThredOptions;\n private logger: Logger;\n private fingerprint: FingerprintManager;\n private api: ThredAPI;\n private tracker: Tracker;\n private initialized = false;\n\n constructor(options: ThredOptions) {\n this.options = {\n baseUrl: DEFAULT_BASE_URL,\n debug: true,\n autoInit: true,\n ...options,\n };\n\n this.logger = new Logger(this.options.debug);\n this.fingerprint = new FingerprintManager(this.logger);\n this.api = new ThredAPI(\n this.options.baseUrl!,\n this.options.browserKey,\n this.logger\n );\n this.tracker = new Tracker(this.api, this.fingerprint, this.logger);\n\n if (this.options.autoInit) {\n this.init();\n }\n }\n\n /**\n * Initialize the SDK\n */\n async init(): Promise<void> {\n if (typeof window === 'undefined') {\n this.logger.warn('SDK requires a browser environment — skipping init');\n return;\n }\n\n if (this.initialized) {\n this.logger.warn('SDK already initialized');\n return;\n }\n\n this.logger.log('Initializing Thred SDK...');\n\n // Generate fingerprint\n await this.fingerprint.getFingerprint();\n\n // Initialize tracker\n await this.tracker.init();\n\n this.initialized = true;\n this.logger.log('SDK initialized successfully');\n }\n\n /**\n * Check if visitor is from ChatGPT\n */\n isFromChatGPT(): boolean {\n return isFromChatGPT();\n }\n\n /**\n * Track page view\n */\n async trackPageView(): Promise<void> {\n await this.tracker.trackPageView();\n }\n\n /**\n * Track form submission\n */\n async trackFormSubmit(formData: FormData): Promise<void> {\n await this.tracker.trackFormSubmit(formData);\n }\n\n /**\n * Identify user with lead data\n */\n async identify(leadData: LeadData): Promise<void> {\n await this.tracker.identify(leadData);\n }\n\n /**\n * Get current fingerprint\n */\n getFingerprint(): string | null {\n return this.fingerprint.getCachedFingerprint();\n }\n\n /**\n * Destroy SDK instance and cleanup\n */\n destroy(): void {\n this.tracker.destroy();\n this.fingerprint.clear();\n this.initialized = false;\n this.logger.log('SDK destroyed');\n }\n}\n\n/**\n * Auto-initialize if loaded as script tag with browserKey\n */\nif (typeof window !== 'undefined') {\n const browserKey = getBrowserKeyFromScript();\n if (browserKey) {\n const sdk = new ThredSDK({ browserKey });\n (window as any).Thred = sdk;\n }\n}\n\nexport default ThredSDK;\n"],"names":[],"mappings":"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","x_google_ignoreList":[0]}
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../node_modules/tslib/tslib.es6.js","../src/utils/logger.ts","../src/utils/detector.ts","../src/core/fingerprint.ts","../src/core/api.ts","../src/core/tracker.ts","../src/index.ts"],"sourcesContent":["/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n","/**\n * Simple logger utility\n */\nexport class Logger {\n private debug: boolean;\n private prefix: string;\n\n constructor(debug = false, prefix = '[Thred]') {\n this.debug = debug;\n this.prefix = prefix;\n }\n\n log(...args: unknown[]) {\n if (this.debug) {\n console.log(this.prefix, ...args);\n }\n }\n\n warn(...args: unknown[]) {\n if (this.debug) {\n console.warn(this.prefix, ...args);\n }\n }\n\n error(...args: unknown[]) {\n console.error(this.prefix, ...args);\n }\n}\n","/**\n * Detects if the visitor came from ChatGPT\n */\nexport function isFromChatGPT(): boolean {\n if (typeof window === 'undefined') return false;\n\n const params = new URLSearchParams(window.location.search);\n const utmSource = params.get('utm_source')?.toLowerCase() || '';\n const referrer = document.referrer.toLowerCase();\n\n const isChatGPTRef =\n referrer.includes('chat.openai.com') || referrer.includes('chatgpt.com');\n const isChatGPTUtm =\n utmSource === 'chatgpt' ||\n utmSource.includes('chatgpt') ||\n utmSource === 'chat.openai' ||\n utmSource === 'openai';\n\n return isChatGPTUtm || isChatGPTRef;\n}\n\n/**\n * Gets the browser key from script tag if present\n */\nexport function getBrowserKeyFromScript(): string | null {\n if (typeof window === 'undefined' || typeof document === 'undefined') {\n return null;\n }\n\n const scripts = document.getElementsByTagName('script');\n\n for (const script of Array.from(scripts)) {\n if (script.src.includes('thred')) {\n try {\n const url = new URL(script.src);\n return url.searchParams.get('browserKey');\n } catch {\n // Invalid URL\n }\n }\n }\n\n return null;\n}\n","import type { FingerprintResult } from '../types';\nimport { Logger } from '../utils/logger';\n\nconst FP_PROXY_URL =\n 'https://thredproxy.com/35ZCuyzokuT1YGd8/Hm7KPMHUZ4duyPRj?apiKey=iyqKVLQt2560EQUyjfxa';\nconst FP_PROXY_ENDPOINT =\n 'https://thredproxy.com/35ZCuyzokuT1YGd8/qbWl4nqUSCIDTor4';\n\nconst STORAGE_KEY = 'thred_fingerprint';\n\nexport class FingerprintManager {\n private fingerprint: string | null = null;\n private logger: Logger;\n private promise: Promise<string | null> | null = null;\n\n constructor(logger: Logger) {\n this.logger = logger;\n }\n\n /**\n * Get or generate fingerprint\n */\n async getFingerprint(): Promise<string | null> {\n if (this.fingerprint) {\n this.logger.log('Using cached fingerprint:', this.fingerprint);\n return this.fingerprint;\n }\n\n if (this.promise) {\n return this.promise;\n }\n\n // Check localStorage (persists across tabs)\n const stored = this.readStorage();\n if (stored) {\n this.fingerprint = stored;\n this.logger.log('Using stored fingerprint:', this.fingerprint);\n return this.fingerprint;\n }\n\n this.promise = this.generateFingerprint();\n return this.promise;\n }\n\n private async generateFingerprint(): Promise<string | null> {\n if (typeof window === 'undefined') {\n this.logger.warn('FingerprintJS requires a browser — skipping');\n return null;\n }\n\n try {\n this.logger.log('Loading FingerprintJS...');\n\n const FingerprintJS = await import(FP_PROXY_URL);\n const fp = await FingerprintJS.load({\n endpoint: [FP_PROXY_ENDPOINT, FingerprintJS.defaultEndpoint],\n });\n\n const result: FingerprintResult = await fp.get();\n this.fingerprint = result.visitorId;\n\n this.writeStorage(this.fingerprint);\n\n this.logger.log('Fingerprint generated:', this.fingerprint);\n return this.fingerprint;\n } catch (error) {\n this.logger.warn('Fingerprint generation failed:', error);\n return null;\n }\n }\n\n getCachedFingerprint(): string | null {\n return this.fingerprint;\n }\n\n clear() {\n this.fingerprint = null;\n this.promise = null;\n this.removeStorage();\n }\n\n private readStorage(): string | null {\n try {\n return typeof window !== 'undefined'\n ? localStorage.getItem(STORAGE_KEY)\n : null;\n } catch {\n return null;\n }\n }\n\n private writeStorage(value: string) {\n try {\n if (typeof window !== 'undefined') {\n localStorage.setItem(STORAGE_KEY, value);\n }\n } catch {\n this.logger.warn('Failed to persist fingerprint to localStorage');\n }\n }\n\n private removeStorage() {\n try {\n if (typeof window !== 'undefined') {\n localStorage.removeItem(STORAGE_KEY);\n }\n } catch {\n // Ignore storage errors on cleanup\n }\n }\n}\n","import type {\n ThredConfig,\n PageViewPayload,\n EnrichPayload,\n} from '../types';\nimport { Logger } from '../utils/logger';\n\nexport class ThredAPI {\n private baseUrl: string;\n private browserKey: string;\n private logger: Logger;\n\n constructor(baseUrl: string, browserKey: string, logger: Logger) {\n this.baseUrl = baseUrl;\n this.browserKey = browserKey;\n this.logger = logger;\n }\n\n /**\n * Fetch configuration from API\n */\n async fetchConfig(fingerprint: string): Promise<ThredConfig | null> {\n try {\n const url = `${this.baseUrl}/config?fingerprint=${encodeURIComponent(fingerprint)}&browserKey=${encodeURIComponent(this.browserKey)}`;\n this.logger.log('Fetching config from:', url);\n\n const response = await fetch(url, {\n method: 'GET',\n headers: {\n Accept: 'application/json',\n },\n });\n\n if (!response.ok) {\n throw new Error(`Config request failed: ${response.status}`);\n }\n\n const config = await response.json();\n this.logger.log('Config received:', config);\n\n return config;\n } catch (error) {\n this.logger.warn('Failed to fetch config:', error);\n return null;\n }\n }\n\n /**\n * Send page view event\n */\n async trackPageView(payload: PageViewPayload): Promise<void> {\n try {\n const url = `${this.baseUrl}/events/page-view?browserKey=${encodeURIComponent(this.browserKey)}`;\n this.logger.log('Tracking page view:', url);\n\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(payload),\n keepalive: true,\n });\n\n if (!response.ok) {\n throw new Error(`Page view request failed: ${response.status}`);\n }\n\n this.logger.log('Page view tracked successfully');\n } catch (error) {\n this.logger.warn('Failed to track page view:', error);\n }\n }\n\n /**\n * Send lead enrichment data\n */\n async enrichLead(payload: EnrichPayload): Promise<void> {\n try {\n const url = `${this.baseUrl}/customers/enrich?browserKey=${encodeURIComponent(this.browserKey)}`;\n this.logger.log('Enriching lead:', url);\n\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(payload),\n keepalive: true,\n });\n\n if (!response.ok) {\n throw new Error(`Enrich request failed: ${response.status}`);\n }\n\n this.logger.log('Lead enriched successfully');\n } catch (error) {\n this.logger.warn('Failed to enrich lead:', error);\n }\n }\n}\n","import type { ThredConfig, LeadData } from '../types';\nimport { Logger } from '../utils/logger';\nimport { isFromChatGPT } from '../utils/detector';\nimport { ThredAPI } from './api';\nimport { FingerprintManager } from './fingerprint';\n\nexport class Tracker {\n private api: ThredAPI;\n private fingerprint: FingerprintManager;\n private logger: Logger;\n private config: ThredConfig | null = null;\n private formObserver: MutationObserver | null = null;\n private lastTrackedUrl: string | null = null;\n private popstateHandler: (() => void) | null = null;\n private originalPushState: typeof history.pushState | null = null;\n private originalReplaceState: typeof history.replaceState | null = null;\n\n constructor(\n api: ThredAPI,\n fingerprint: FingerprintManager,\n logger: Logger\n ) {\n this.api = api;\n this.fingerprint = fingerprint;\n this.logger = logger;\n }\n\n /**\n * Initialize tracker with config\n */\n async init(): Promise<void> {\n // Get fingerprint\n const fingerprint = await this.fingerprint.getFingerprint();\n if (!fingerprint) {\n this.logger.warn('Cannot initialize tracker without fingerprint');\n return;\n }\n this.config = await this.api.fetchConfig(fingerprint);\n\n if (!this.config?.enabled) {\n this.logger.log('Tracking disabled by config');\n return;\n }\n\n if (!this.config.hasChatSession && !isFromChatGPT()) {\n this.logger.log('No chat session for this fingerprint - exiting');\n return;\n }\n\n // Track initial page view\n if (isFromChatGPT()) {\n await this.trackPageView();\n } else {\n this.logger.log('UTM not from ChatGPT - skipping page view');\n }\n\n // Track SPA route changes\n this.setupRouteTracking();\n\n // Setup form tracking\n this.setupFormTracking();\n }\n\n /**\n * Track page view event\n */\n async trackPageView(): Promise<void> {\n if (typeof window === 'undefined') return;\n\n const fp = await this.fingerprint.getFingerprint();\n\n if (!fp) {\n this.logger.warn('Cannot track page view without fingerprint');\n return;\n }\n\n await this.api.trackPageView({\n event: 'page_view',\n data: {\n url: window.location.href,\n },\n fingerprint: fp,\n });\n }\n\n /**\n * Track form submission and enrich lead\n */\n async trackFormSubmit(formData: FormData): Promise<void> {\n if (!this.config || !this.config.emailId || !this.config.nameId) {\n this.logger.warn('Cannot track form - no config loaded');\n return;\n }\n\n const email = formData.get(this.config.emailId)?.toString().trim();\n const name = formData.get(this.config.nameId)?.toString().trim();\n\n let company: string | undefined = undefined;\n if (this.config.companyId) {\n company = formData.get(this.config.companyId)?.toString().trim();\n }\n\n this.logger.log('Form data extracted:', { email, name, company });\n\n if (!email || !name) {\n this.logger.warn('Missing required fields (email, name)');\n return;\n }\n\n await this.identify({\n name,\n email,\n company: company,\n discovery: false,\n });\n }\n\n /**\n * Identify user and enrich lead data\n */\n async identify(leadData: LeadData): Promise<void> {\n const fp = await this.fingerprint.getFingerprint();\n\n if (!fp) {\n this.logger.warn('Cannot identify without fingerprint');\n return;\n }\n\n await this.api.enrichLead({\n fingerprint: fp,\n leadData,\n });\n }\n\n /**\n * Track page views on SPA route changes by patching pushState/replaceState\n * and listening for popstate.\n */\n private setupRouteTracking(): void {\n if (typeof window === 'undefined') return;\n\n this.lastTrackedUrl = window.location.href;\n\n const onRouteChange = () => {\n const currentUrl = window.location.href;\n if (currentUrl === this.lastTrackedUrl) return;\n this.lastTrackedUrl = currentUrl;\n this.logger.log('Route change detected:', currentUrl);\n this.trackPageView();\n };\n\n this.popstateHandler = onRouteChange;\n window.addEventListener('popstate', this.popstateHandler);\n\n this.originalPushState = history.pushState.bind(history);\n this.originalReplaceState = history.replaceState.bind(history);\n\n history.pushState = (...args: Parameters<typeof history.pushState>) => {\n this.originalPushState!(...args);\n onRouteChange();\n };\n\n history.replaceState = (...args: Parameters<typeof history.replaceState>) => {\n this.originalReplaceState!(...args);\n onRouteChange();\n };\n }\n\n /**\n * Setup automatic form tracking\n */\n private setupFormTracking(): void {\n if (!this.config || typeof document === 'undefined') {\n this.logger.warn('Cannot track form - no config or document');\n return;\n }\n\n if (this.config.type === 'hosted') {\n const hostedUrlBase = this.config.hostedUrlBase;\n if (!hostedUrlBase) {\n this.logger.warn('Cannot track form - no hosted URL base');\n return;\n }\n\n // Inject utm_fp into all existing matching links\n this.injectFingerprintIntoLinks(document.body, hostedUrlBase);\n\n // Watch for dynamically added links and inject utm_fp as they appear\n this.formObserver = new MutationObserver((mutations) => {\n for (const mutation of mutations) {\n for (const node of Array.from(mutation.addedNodes)) {\n if (!(node instanceof HTMLElement)) continue;\n\n // Check if the added node itself is a matching link\n if (node.tagName === 'A') {\n this.injectFingerprintIntoLink(node as HTMLAnchorElement, hostedUrlBase);\n }\n\n // Check any child links within the added node\n this.injectFingerprintIntoLinks(node, hostedUrlBase);\n }\n }\n });\n\n this.formObserver.observe(document.body, {\n childList: true,\n subtree: true,\n });\n\n // Fallback: intercept clicks for links that may have had their href changed dynamically\n document.addEventListener('click', (e) => {\n const target = (e.target as HTMLElement).closest('a');\n if (!target) return;\n\n const href = target.getAttribute('href');\n if (!href || !href.includes(hostedUrlBase)) return;\n\n // Already tagged — skip\n if (href.includes('utm_fp=')) return;\n\n this.injectFingerprintIntoLink(target as HTMLAnchorElement, hostedUrlBase);\n }, { capture: true });\n\n return;\n }\n else if (this.config.type === 'custom') {\n const attachFormListener = () => {\n if (!this.config || !this.config.formId) {\n this.logger.warn('Cannot track form - no form ID');\n return;\n }\n const form = document.getElementById(this.config!.formId);\n if (!form) {\n this.logger.log('Form not found:', this.config!.formId);\n return;\n }\n\n const formElement = form as HTMLFormElement;\n\n // Check if already tracked\n if (formElement.dataset.thredTracked) {\n return;\n }\n\n this.logger.log('Attaching listener to form:', this.config!.formId);\n\n formElement.addEventListener(\n 'submit',\n () => {\n const formData = new FormData(formElement);\n this.trackFormSubmit(formData);\n },\n { capture: true }\n );\n\n formElement.dataset.thredTracked = 'true';\n };\n\n // Attach immediately if form exists\n attachFormListener();\n\n // Watch for dynamic forms\n this.formObserver = new MutationObserver(() => {\n attachFormListener();\n });\n\n this.formObserver.observe(document.body, {\n childList: true,\n subtree: true,\n });\n }\n }\n\n /**\n * Inject utm_fp into all matching links within a root element\n */\n private injectFingerprintIntoLinks(root: HTMLElement, hostedUrlBase: string): void {\n const links = root.querySelectorAll<HTMLAnchorElement>('a[href]');\n for (const link of Array.from(links)) {\n this.injectFingerprintIntoLink(link, hostedUrlBase);\n }\n }\n\n /**\n * Inject utm_fp into a single link if it matches hostedUrlBase\n */\n private injectFingerprintIntoLink(link: HTMLAnchorElement, hostedUrlBase: string): void {\n const href = link.getAttribute('href');\n if (!href || !href.includes(hostedUrlBase)) return;\n\n // Already tagged — skip\n if (href.includes('utm_fp=')) return;\n\n const fp = this.fingerprint.getCachedFingerprint();\n if (!fp) {\n this.logger.warn('Cannot inject utm_fp - no cached fingerprint');\n return;\n }\n\n try {\n const url = new URL(href, window.location.origin);\n url.searchParams.set('utm_fp', fp);\n link.setAttribute('href', url.toString());\n this.logger.log('Injected utm_fp into link:', url.toString());\n } catch (err) {\n this.logger.warn('Failed to parse URL:', href, err);\n }\n }\n\n /**\n * Cleanup tracker\n */\n destroy(): void {\n if (this.formObserver) {\n this.formObserver.disconnect();\n this.formObserver = null;\n }\n\n if (typeof window === 'undefined') return;\n\n if (this.popstateHandler) {\n window.removeEventListener('popstate', this.popstateHandler);\n this.popstateHandler = null;\n }\n\n if (this.originalPushState) {\n history.pushState = this.originalPushState;\n this.originalPushState = null;\n }\n\n if (this.originalReplaceState) {\n history.replaceState = this.originalReplaceState;\n this.originalReplaceState = null;\n }\n }\n}\n","/**\n * Thred SDK - Browser tracking and lead enrichment\n */\n\nimport type { ThredOptions, ThredSDK as IThredSDK, LeadData } from './types';\nimport { Logger } from './utils/logger';\nimport { isFromChatGPT, getBrowserKeyFromScript } from './utils/detector';\nimport { FingerprintManager } from './core/fingerprint';\nimport { ThredAPI } from './core/api';\nimport { Tracker } from './core/tracker';\n\nexport * from './types';\n\nconst DEFAULT_BASE_URL = 'https://api.thred.dev/v1';\n\nexport class ThredSDK implements IThredSDK {\n private options: ThredOptions;\n private logger: Logger;\n private fingerprint: FingerprintManager;\n private api: ThredAPI;\n private tracker: Tracker;\n private initialized = false;\n\n constructor(options: ThredOptions) {\n this.options = {\n baseUrl: DEFAULT_BASE_URL,\n debug: false, // Set to true for development\n autoInit: true,\n ...options,\n };\n\n this.logger = new Logger(this.options.debug);\n this.fingerprint = new FingerprintManager(this.logger);\n this.api = new ThredAPI(\n this.options.baseUrl!,\n this.options.browserKey,\n this.logger\n );\n this.tracker = new Tracker(this.api, this.fingerprint, this.logger);\n\n if (this.options.autoInit) {\n this.init();\n }\n }\n\n /**\n * Initialize the SDK\n */\n async init(): Promise<void> {\n if (typeof window === 'undefined') {\n this.logger.warn('SDK requires a browser environment — skipping init');\n return;\n }\n\n if (this.initialized) {\n this.logger.warn('SDK already initialized');\n return;\n }\n\n this.logger.log('Initializing Thred SDK...');\n\n // Generate fingerprint\n await this.fingerprint.getFingerprint();\n\n // Initialize tracker\n await this.tracker.init();\n\n this.initialized = true;\n this.logger.log('SDK initialized successfully');\n }\n\n /**\n * Check if visitor is from ChatGPT\n */\n isFromChatGPT(): boolean {\n return isFromChatGPT();\n }\n\n /**\n * Track page view\n */\n async trackPageView(): Promise<void> {\n await this.tracker.trackPageView();\n }\n\n /**\n * Track form submission\n */\n async trackFormSubmit(formData: FormData): Promise<void> {\n await this.tracker.trackFormSubmit(formData);\n }\n\n /**\n * Identify user with lead data\n */\n async identify(leadData: LeadData): Promise<void> {\n await this.tracker.identify(leadData);\n }\n\n /**\n * Get current fingerprint\n */\n getFingerprint(): string | null {\n return this.fingerprint.getCachedFingerprint();\n }\n\n /**\n * Destroy SDK instance and cleanup\n */\n destroy(): void {\n this.tracker.destroy();\n this.fingerprint.clear();\n this.initialized = false;\n this.logger.log('SDK destroyed');\n }\n}\n\n/**\n * Auto-initialize if loaded as script tag with browserKey\n */\nif (typeof window !== 'undefined') {\n const browserKey = getBrowserKeyFromScript();\n if (browserKey) {\n const sdk = new ThredSDK({ browserKey });\n (window as any).Thred = sdk;\n }\n}\n\nexport default ThredSDK;\n"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAkGA;AACO,SAAS,SAAS,CAAC,OAAO,EAAE,UAAU,EAAE,CAAC,EAAE,SAAS,EAAE;AAC7D,IAAI,SAAS,KAAK,CAAC,KAAK,EAAE,EAAE,OAAO,KAAK,YAAY,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,UAAU,OAAO,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAChH,IAAI,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,EAAE,UAAU,OAAO,EAAE,MAAM,EAAE;AAC/D,QAAQ,SAAS,SAAS,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACnG,QAAQ,SAAS,QAAQ,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACtG,QAAQ,SAAS,IAAI,CAAC,MAAM,EAAE,EAAE,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;AACtH,QAAQ,IAAI,CAAC,CAAC,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,UAAU,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;AAC9E,IAAI,CAAC,CAAC,CAAC;AACP,CAAC;AA6MD;AACuB,OAAO,eAAe,KAAK,UAAU,GAAG,eAAe,GAAG,UAAU,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE;AACvH,IAAI,IAAI,CAAC,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;AAC/B,IAAI,OAAO,CAAC,CAAC,IAAI,GAAG,iBAAiB,EAAE,CAAC,CAAC,KAAK,GAAG,KAAK,EAAE,CAAC,CAAC,UAAU,GAAG,UAAU,EAAE,CAAC,CAAC;AACrF;;AC3UA;;AAEG;MACU,MAAM,CAAA;AAIjB,IAAA,WAAA,CAAY,KAAK,GAAG,KAAK,EAAE,MAAM,GAAG,SAAS,EAAA;AAC3C,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;IACtB;IAEA,GAAG,CAAC,GAAG,IAAe,EAAA;AACpB,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;YACd,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC;QACnC;IACF;IAEA,IAAI,CAAC,GAAG,IAAe,EAAA;AACrB,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;YACd,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC;QACpC;IACF;IAEA,KAAK,CAAC,GAAG,IAAe,EAAA;QACtB,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC;IACrC;AACD;;AC3BD;;AAEG;SACa,aAAa,GAAA;;IAC3B,IAAI,OAAO,MAAM,KAAK,WAAW;AAAE,QAAA,OAAO,KAAK;IAE/C,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC1D,IAAA,MAAM,SAAS,GAAG,CAAA,CAAA,EAAA,GAAA,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,WAAW,EAAE,KAAI,EAAE;IAC/D,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,WAAW,EAAE;AAEhD,IAAA,MAAM,YAAY,GAChB,QAAQ,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC;AAC1E,IAAA,MAAM,YAAY,GAChB,SAAS,KAAK,SAAS;AACvB,QAAA,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC;AAC7B,QAAA,SAAS,KAAK,aAAa;QAC3B,SAAS,KAAK,QAAQ;IAExB,OAAO,YAAY,IAAI,YAAY;AACrC;AAEA;;AAEG;SACa,uBAAuB,GAAA;IACrC,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;AACpE,QAAA,OAAO,IAAI;IACb;IAEA,MAAM,OAAO,GAAG,QAAQ,CAAC,oBAAoB,CAAC,QAAQ,CAAC;IAEvD,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;QACxC,IAAI,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;AAChC,YAAA,IAAI;gBACF,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC;gBAC/B,OAAO,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC;YAC3C;AAAE,YAAA,OAAA,EAAA,EAAM;;YAER;QACF;IACF;AAEA,IAAA,OAAO,IAAI;AACb;;ACxCA,MAAM,YAAY,GAChB,sFAAsF;AACxF,MAAM,iBAAiB,GACrB,0DAA0D;AAE5D,MAAM,WAAW,GAAG,mBAAmB;MAE1B,kBAAkB,CAAA;AAK7B,IAAA,WAAA,CAAY,MAAc,EAAA;QAJlB,IAAA,CAAA,WAAW,GAAkB,IAAI;QAEjC,IAAA,CAAA,OAAO,GAAkC,IAAI;AAGnD,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;IACtB;AAEA;;AAEG;IACG,cAAc,GAAA;;AAClB,YAAA,IAAI,IAAI,CAAC,WAAW,EAAE;gBACpB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,2BAA2B,EAAE,IAAI,CAAC,WAAW,CAAC;gBAC9D,OAAO,IAAI,CAAC,WAAW;YACzB;AAEA,YAAA,IAAI,IAAI,CAAC,OAAO,EAAE;gBAChB,OAAO,IAAI,CAAC,OAAO;YACrB;;AAGA,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE;YACjC,IAAI,MAAM,EAAE;AACV,gBAAA,IAAI,CAAC,WAAW,GAAG,MAAM;gBACzB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,2BAA2B,EAAE,IAAI,CAAC,WAAW,CAAC;gBAC9D,OAAO,IAAI,CAAC,WAAW;YACzB;AAEA,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,mBAAmB,EAAE;YACzC,OAAO,IAAI,CAAC,OAAO;QACrB,CAAC,CAAA;AAAA,IAAA;IAEa,mBAAmB,GAAA;;AAC/B,YAAA,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;AACjC,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,6CAA6C,CAAC;AAC/D,gBAAA,OAAO,IAAI;YACb;AAEA,YAAA,IAAI;AACF,gBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,0BAA0B,CAAC;AAE3C,gBAAA,MAAM,aAAa,GAAG,MAAM,OAAO,YAAY,CAAC;AAChD,gBAAA,MAAM,EAAE,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC;AAClC,oBAAA,QAAQ,EAAE,CAAC,iBAAiB,EAAE,aAAa,CAAC,eAAe,CAAC;AAC7D,iBAAA,CAAC;AAEF,gBAAA,MAAM,MAAM,GAAsB,MAAM,EAAE,CAAC,GAAG,EAAE;AAChD,gBAAA,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,SAAS;AAEnC,gBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC;gBAEnC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,wBAAwB,EAAE,IAAI,CAAC,WAAW,CAAC;gBAC3D,OAAO,IAAI,CAAC,WAAW;YACzB;YAAE,OAAO,KAAK,EAAE;gBACd,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gCAAgC,EAAE,KAAK,CAAC;AACzD,gBAAA,OAAO,IAAI;YACb;QACF,CAAC,CAAA;AAAA,IAAA;IAED,oBAAoB,GAAA;QAClB,OAAO,IAAI,CAAC,WAAW;IACzB;IAEA,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;QACnB,IAAI,CAAC,aAAa,EAAE;IACtB;IAEQ,WAAW,GAAA;AACjB,QAAA,IAAI;YACF,OAAO,OAAO,MAAM,KAAK;AACvB,kBAAE,YAAY,CAAC,OAAO,CAAC,WAAW;kBAChC,IAAI;QACV;AAAE,QAAA,OAAA,EAAA,EAAM;AACN,YAAA,OAAO,IAAI;QACb;IACF;AAEQ,IAAA,YAAY,CAAC,KAAa,EAAA;AAChC,QAAA,IAAI;AACF,YAAA,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;AACjC,gBAAA,YAAY,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC;YAC1C;QACF;AAAE,QAAA,OAAA,EAAA,EAAM;AACN,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,+CAA+C,CAAC;QACnE;IACF;IAEQ,aAAa,GAAA;AACnB,QAAA,IAAI;AACF,YAAA,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;AACjC,gBAAA,YAAY,CAAC,UAAU,CAAC,WAAW,CAAC;YACtC;QACF;AAAE,QAAA,OAAA,EAAA,EAAM;;QAER;IACF;AACD;;MCvGY,QAAQ,CAAA;AAKnB,IAAA,WAAA,CAAY,OAAe,EAAE,UAAkB,EAAE,MAAc,EAAA;AAC7D,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO;AACtB,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU;AAC5B,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;IACtB;AAEA;;AAEG;AACG,IAAA,WAAW,CAAC,WAAmB,EAAA;;AACnC,YAAA,IAAI;AACF,gBAAA,MAAM,GAAG,GAAG,CAAA,EAAG,IAAI,CAAC,OAAO,uBAAuB,kBAAkB,CAAC,WAAW,CAAC,CAAA,YAAA,EAAe,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;gBACrI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,uBAAuB,EAAE,GAAG,CAAC;AAE7C,gBAAA,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;AAChC,oBAAA,MAAM,EAAE,KAAK;AACb,oBAAA,OAAO,EAAE;AACP,wBAAA,MAAM,EAAE,kBAAkB;AAC3B,qBAAA;AACF,iBAAA,CAAC;AAEF,gBAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;oBAChB,MAAM,IAAI,KAAK,CAAC,CAAA,uBAAA,EAA0B,QAAQ,CAAC,MAAM,CAAA,CAAE,CAAC;gBAC9D;AAEA,gBAAA,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE;gBACpC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,kBAAkB,EAAE,MAAM,CAAC;AAE3C,gBAAA,OAAO,MAAM;YACf;YAAE,OAAO,KAAK,EAAE;gBACd,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,yBAAyB,EAAE,KAAK,CAAC;AAClD,gBAAA,OAAO,IAAI;YACb;QACF,CAAC,CAAA;AAAA,IAAA;AAED;;AAEG;AACG,IAAA,aAAa,CAAC,OAAwB,EAAA;;AAC1C,YAAA,IAAI;AACF,gBAAA,MAAM,GAAG,GAAG,CAAA,EAAG,IAAI,CAAC,OAAO,CAAA,6BAAA,EAAgC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;gBAChG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,qBAAqB,EAAE,GAAG,CAAC;AAE3C,gBAAA,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;AAChC,oBAAA,MAAM,EAAE,MAAM;AACd,oBAAA,OAAO,EAAE;AACP,wBAAA,cAAc,EAAE,kBAAkB;AACnC,qBAAA;AACD,oBAAA,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;AAC7B,oBAAA,SAAS,EAAE,IAAI;AAChB,iBAAA,CAAC;AAEF,gBAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;oBAChB,MAAM,IAAI,KAAK,CAAC,CAAA,0BAAA,EAA6B,QAAQ,CAAC,MAAM,CAAA,CAAE,CAAC;gBACjE;AAEA,gBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,gCAAgC,CAAC;YACnD;YAAE,OAAO,KAAK,EAAE;gBACd,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,4BAA4B,EAAE,KAAK,CAAC;YACvD;QACF,CAAC,CAAA;AAAA,IAAA;AAED;;AAEG;AACG,IAAA,UAAU,CAAC,OAAsB,EAAA;;AACrC,YAAA,IAAI;AACF,gBAAA,MAAM,GAAG,GAAG,CAAA,EAAG,IAAI,CAAC,OAAO,CAAA,6BAAA,EAAgC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;gBAChG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,iBAAiB,EAAE,GAAG,CAAC;AAEvC,gBAAA,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;AAChC,oBAAA,MAAM,EAAE,MAAM;AACd,oBAAA,OAAO,EAAE;AACP,wBAAA,cAAc,EAAE,kBAAkB;AACnC,qBAAA;AACD,oBAAA,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;AAC7B,oBAAA,SAAS,EAAE,IAAI;AAChB,iBAAA,CAAC;AAEF,gBAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;oBAChB,MAAM,IAAI,KAAK,CAAC,CAAA,uBAAA,EAA0B,QAAQ,CAAC,MAAM,CAAA,CAAE,CAAC;gBAC9D;AAEA,gBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,4BAA4B,CAAC;YAC/C;YAAE,OAAO,KAAK,EAAE;gBACd,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,wBAAwB,EAAE,KAAK,CAAC;YACnD;QACF,CAAC,CAAA;AAAA,IAAA;AACF;;MC9FY,OAAO,CAAA;AAWlB,IAAA,WAAA,CACE,GAAa,EACb,WAA+B,EAC/B,MAAc,EAAA;QAVR,IAAA,CAAA,MAAM,GAAuB,IAAI;QACjC,IAAA,CAAA,YAAY,GAA4B,IAAI;QAC5C,IAAA,CAAA,cAAc,GAAkB,IAAI;QACpC,IAAA,CAAA,eAAe,GAAwB,IAAI;QAC3C,IAAA,CAAA,iBAAiB,GAAoC,IAAI;QACzD,IAAA,CAAA,oBAAoB,GAAuC,IAAI;AAOrE,QAAA,IAAI,CAAC,GAAG,GAAG,GAAG;AACd,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW;AAC9B,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;IACtB;AAEA;;AAEG;IACG,IAAI,GAAA;;;;YAER,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE;YAC3D,IAAI,CAAC,WAAW,EAAE;AAChB,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,+CAA+C,CAAC;gBACjE;YACF;AACA,YAAA,IAAI,CAAC,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,WAAW,CAAC;YAErD,IAAI,EAAC,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,OAAO,CAAA,EAAE;AACzB,gBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,6BAA6B,CAAC;gBAC9C;YACF;YAEA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,IAAI,CAAC,aAAa,EAAE,EAAE;AACnD,gBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,gDAAgD,CAAC;gBACjE;YACF;;YAGA,IAAI,aAAa,EAAE,EAAE;AACnB,gBAAA,MAAM,IAAI,CAAC,aAAa,EAAE;YAC5B;iBAAO;AACL,gBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,2CAA2C,CAAC;YAC9D;;YAGA,IAAI,CAAC,kBAAkB,EAAE;;YAGzB,IAAI,CAAC,iBAAiB,EAAE;QAC1B,CAAC,CAAA;AAAA,IAAA;AAED;;AAEG;IACG,aAAa,GAAA;;YACjB,IAAI,OAAO,MAAM,KAAK,WAAW;gBAAE;YAEnC,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE;YAElD,IAAI,CAAC,EAAE,EAAE;AACP,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,4CAA4C,CAAC;gBAC9D;YACF;AAEA,YAAA,MAAM,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC;AAC3B,gBAAA,KAAK,EAAE,WAAW;AAClB,gBAAA,IAAI,EAAE;AACJ,oBAAA,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI;AAC1B,iBAAA;AACD,gBAAA,WAAW,EAAE,EAAE;AAChB,aAAA,CAAC;QACJ,CAAC,CAAA;AAAA,IAAA;AAED;;AAEG;AACG,IAAA,eAAe,CAAC,QAAkB,EAAA;;;AACtC,YAAA,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;AAC/D,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,sCAAsC,CAAC;gBACxD;YACF;AAEA,YAAA,MAAM,KAAK,GAAG,CAAA,EAAA,GAAA,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,QAAQ,EAAA,CAAG,IAAI,EAAE;AAClE,YAAA,MAAM,IAAI,GAAG,CAAA,EAAA,GAAA,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,QAAQ,EAAA,CAAG,IAAI,EAAE;YAEhE,IAAI,OAAO,GAAuB,SAAS;AAC3C,YAAA,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;AACzB,gBAAA,OAAO,GAAG,CAAA,EAAA,GAAA,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,QAAQ,EAAA,CAAG,IAAI,EAAE;YAClE;AAEA,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,sBAAsB,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AAEjE,YAAA,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,EAAE;AACnB,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,uCAAuC,CAAC;gBACzD;YACF;YAEA,MAAM,IAAI,CAAC,QAAQ,CAAC;gBAClB,IAAI;gBACJ,KAAK;AACL,gBAAA,OAAO,EAAE,OAAO;AAChB,gBAAA,SAAS,EAAE,KAAK;AACjB,aAAA,CAAC;QACJ,CAAC,CAAA;AAAA,IAAA;AAED;;AAEG;AACG,IAAA,QAAQ,CAAC,QAAkB,EAAA;;YAC/B,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE;YAElD,IAAI,CAAC,EAAE,EAAE;AACP,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,qCAAqC,CAAC;gBACvD;YACF;AAEA,YAAA,MAAM,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC;AACxB,gBAAA,WAAW,EAAE,EAAE;gBACf,QAAQ;AACT,aAAA,CAAC;QACJ,CAAC,CAAA;AAAA,IAAA;AAED;;;AAGG;IACK,kBAAkB,GAAA;QACxB,IAAI,OAAO,MAAM,KAAK,WAAW;YAAE;QAEnC,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI;QAE1C,MAAM,aAAa,GAAG,MAAK;AACzB,YAAA,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI;AACvC,YAAA,IAAI,UAAU,KAAK,IAAI,CAAC,cAAc;gBAAE;AACxC,YAAA,IAAI,CAAC,cAAc,GAAG,UAAU;YAChC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,wBAAwB,EAAE,UAAU,CAAC;YACrD,IAAI,CAAC,aAAa,EAAE;AACtB,QAAA,CAAC;AAED,QAAA,IAAI,CAAC,eAAe,GAAG,aAAa;QACpC,MAAM,CAAC,gBAAgB,CAAC,UAAU,EAAE,IAAI,CAAC,eAAe,CAAC;QAEzD,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC;QACxD,IAAI,CAAC,oBAAoB,GAAG,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC;AAE9D,QAAA,OAAO,CAAC,SAAS,GAAG,CAAC,GAAG,IAA0C,KAAI;AACpE,YAAA,IAAI,CAAC,iBAAkB,CAAC,GAAG,IAAI,CAAC;AAChC,YAAA,aAAa,EAAE;AACjB,QAAA,CAAC;AAED,QAAA,OAAO,CAAC,YAAY,GAAG,CAAC,GAAG,IAA6C,KAAI;AAC1E,YAAA,IAAI,CAAC,oBAAqB,CAAC,GAAG,IAAI,CAAC;AACnC,YAAA,aAAa,EAAE;AACjB,QAAA,CAAC;IACH;AAEA;;AAEG;IACK,iBAAiB,GAAA;QACvB,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;AACnD,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,2CAA2C,CAAC;YAC7D;QACF;QAEA,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE;AACjC,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa;YAC/C,IAAI,CAAC,aAAa,EAAE;AAClB,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,wCAAwC,CAAC;gBAC1D;YACF;;YAGA,IAAI,CAAC,0BAA0B,CAAC,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;;YAG7D,IAAI,CAAC,YAAY,GAAG,IAAI,gBAAgB,CAAC,CAAC,SAAS,KAAI;AACrD,gBAAA,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;AAChC,oBAAA,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;AAClD,wBAAA,IAAI,EAAE,IAAI,YAAY,WAAW,CAAC;4BAAE;;AAGpC,wBAAA,IAAI,IAAI,CAAC,OAAO,KAAK,GAAG,EAAE;AACxB,4BAAA,IAAI,CAAC,yBAAyB,CAAC,IAAyB,EAAE,aAAa,CAAC;wBAC1E;;AAGA,wBAAA,IAAI,CAAC,0BAA0B,CAAC,IAAI,EAAE,aAAa,CAAC;oBACtD;gBACF;AACF,YAAA,CAAC,CAAC;YAEF,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE;AACvC,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,OAAO,EAAE,IAAI;AACd,aAAA,CAAC;;YAGF,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAC,KAAI;gBACvC,MAAM,MAAM,GAAI,CAAC,CAAC,MAAsB,CAAC,OAAO,CAAC,GAAG,CAAC;AACrD,gBAAA,IAAI,CAAC,MAAM;oBAAE;gBAEb,MAAM,IAAI,GAAG,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC;gBACxC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC;oBAAE;;AAG5C,gBAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;oBAAE;AAE9B,gBAAA,IAAI,CAAC,yBAAyB,CAAC,MAA2B,EAAE,aAAa,CAAC;AAC5E,YAAA,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YAErB;QACF;aACK,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE;YACtC,MAAM,kBAAkB,GAAG,MAAK;AAC9B,gBAAA,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;AACvC,oBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gCAAgC,CAAC;oBAClD;gBACF;AACA,gBAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,MAAO,CAAC,MAAM,CAAC;gBACzD,IAAI,CAAC,IAAI,EAAE;AACT,oBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,iBAAiB,EAAE,IAAI,CAAC,MAAO,CAAC,MAAM,CAAC;oBACvD;gBACF;gBAEA,MAAM,WAAW,GAAG,IAAuB;;AAG3C,gBAAA,IAAI,WAAW,CAAC,OAAO,CAAC,YAAY,EAAE;oBACpC;gBACF;AAEA,gBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,6BAA6B,EAAE,IAAI,CAAC,MAAO,CAAC,MAAM,CAAC;AAEnE,gBAAA,WAAW,CAAC,gBAAgB,CAC1B,QAAQ,EACR,MAAK;AACH,oBAAA,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,WAAW,CAAC;AAC1C,oBAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;AAChC,gBAAA,CAAC,EACD,EAAE,OAAO,EAAE,IAAI,EAAE,CAClB;AAED,gBAAA,WAAW,CAAC,OAAO,CAAC,YAAY,GAAG,MAAM;AAC3C,YAAA,CAAC;;AAGD,YAAA,kBAAkB,EAAE;;AAGpB,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,gBAAgB,CAAC,MAAK;AAC5C,gBAAA,kBAAkB,EAAE;AACtB,YAAA,CAAC,CAAC;YAEF,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE;AACvC,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,OAAO,EAAE,IAAI;AACd,aAAA,CAAC;QACJ;IACF;AAEA;;AAEG;IACK,0BAA0B,CAAC,IAAiB,EAAE,aAAqB,EAAA;QACzE,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAoB,SAAS,CAAC;QACjE,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;AACpC,YAAA,IAAI,CAAC,yBAAyB,CAAC,IAAI,EAAE,aAAa,CAAC;QACrD;IACF;AAEA;;AAEG;IACK,yBAAyB,CAAC,IAAuB,EAAE,aAAqB,EAAA;QAC9E,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;QACtC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC;YAAE;;AAG5C,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;YAAE;QAE9B,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,oBAAoB,EAAE;QAClD,IAAI,CAAC,EAAE,EAAE;AACP,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,8CAA8C,CAAC;YAChE;QACF;AAEA,QAAA,IAAI;AACF,YAAA,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;YACjD,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC;YAClC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC;AACzC,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,4BAA4B,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC/D;QAAE,OAAO,GAAG,EAAE;YACZ,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,sBAAsB,EAAE,IAAI,EAAE,GAAG,CAAC;QACrD;IACF;AAEA;;AAEG;IACH,OAAO,GAAA;AACL,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AACrB,YAAA,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE;AAC9B,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI;QAC1B;QAEA,IAAI,OAAO,MAAM,KAAK,WAAW;YAAE;AAEnC,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE;YACxB,MAAM,CAAC,mBAAmB,CAAC,UAAU,EAAE,IAAI,CAAC,eAAe,CAAC;AAC5D,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI;QAC7B;AAEA,QAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE;AAC1B,YAAA,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,iBAAiB;AAC1C,YAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;QAC/B;AAEA,QAAA,IAAI,IAAI,CAAC,oBAAoB,EAAE;AAC7B,YAAA,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,oBAAoB;AAChD,YAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;QAClC;IACF;AACD;;AC/UD;;AAEG;AAWH,MAAM,gBAAgB,GAAG,0BAA0B;MAEtC,QAAQ,CAAA;AAQnB,IAAA,WAAA,CAAY,OAAqB,EAAA;QAFzB,IAAA,CAAA,WAAW,GAAG,KAAK;AAGzB,QAAA,IAAI,CAAC,OAAO,GAAA,MAAA,CAAA,MAAA,CAAA,EACV,OAAO,EAAE,gBAAgB,EACzB,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,IAAI,EAAA,EACX,OAAO,CACX;AAED,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;QAC5C,IAAI,CAAC,WAAW,GAAG,IAAI,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC;QACtD,IAAI,CAAC,GAAG,GAAG,IAAI,QAAQ,CACrB,IAAI,CAAC,OAAO,CAAC,OAAQ,EACrB,IAAI,CAAC,OAAO,CAAC,UAAU,EACvB,IAAI,CAAC,MAAM,CACZ;AACD,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC;AAEnE,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;YACzB,IAAI,CAAC,IAAI,EAAE;QACb;IACF;AAEA;;AAEG;IACG,IAAI,GAAA;;AACR,YAAA,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;AACjC,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,oDAAoD,CAAC;gBACtE;YACF;AAEA,YAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC;gBAC3C;YACF;AAEA,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,2BAA2B,CAAC;;AAG5C,YAAA,MAAM,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE;;AAGvC,YAAA,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;AAEzB,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,8BAA8B,CAAC;QACjD,CAAC,CAAA;AAAA,IAAA;AAED;;AAEG;IACH,aAAa,GAAA;QACX,OAAO,aAAa,EAAE;IACxB;AAEA;;AAEG;IACG,aAAa,GAAA;;AACjB,YAAA,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE;QACpC,CAAC,CAAA;AAAA,IAAA;AAED;;AAEG;AACG,IAAA,eAAe,CAAC,QAAkB,EAAA;;YACtC,MAAM,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,QAAQ,CAAC;QAC9C,CAAC,CAAA;AAAA,IAAA;AAED;;AAEG;AACG,IAAA,QAAQ,CAAC,QAAkB,EAAA;;YAC/B,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACvC,CAAC,CAAA;AAAA,IAAA;AAED;;AAEG;IACH,cAAc,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,oBAAoB,EAAE;IAChD;AAEA;;AAEG;IACH,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;AACtB,QAAA,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE;AACxB,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK;AACxB,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC;IAClC;AACD;AAED;;AAEG;AACH,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;AACjC,IAAA,MAAM,UAAU,GAAG,uBAAuB,EAAE;IAC5C,IAAI,UAAU,EAAE;QACd,MAAM,GAAG,GAAG,IAAI,QAAQ,CAAC,EAAE,UAAU,EAAE,CAAC;AACvC,QAAA,MAAc,CAAC,KAAK,GAAG,GAAG;IAC7B;AACF;;;;","x_google_ignoreList":[0]}
|
package/dist/index.js
CHANGED
|
@@ -98,6 +98,7 @@ function getBrowserKeyFromScript() {
|
|
|
98
98
|
|
|
99
99
|
const FP_PROXY_URL = 'https://thredproxy.com/35ZCuyzokuT1YGd8/Hm7KPMHUZ4duyPRj?apiKey=iyqKVLQt2560EQUyjfxa';
|
|
100
100
|
const FP_PROXY_ENDPOINT = 'https://thredproxy.com/35ZCuyzokuT1YGd8/qbWl4nqUSCIDTor4';
|
|
101
|
+
const STORAGE_KEY = 'thred_fingerprint';
|
|
101
102
|
class FingerprintManager {
|
|
102
103
|
constructor(logger) {
|
|
103
104
|
this.fingerprint = null;
|
|
@@ -109,23 +110,20 @@ class FingerprintManager {
|
|
|
109
110
|
*/
|
|
110
111
|
getFingerprint() {
|
|
111
112
|
return __awaiter(this, void 0, void 0, function* () {
|
|
112
|
-
// Return cached fingerprint
|
|
113
113
|
if (this.fingerprint) {
|
|
114
114
|
this.logger.log('Using cached fingerprint:', this.fingerprint);
|
|
115
115
|
return this.fingerprint;
|
|
116
116
|
}
|
|
117
|
-
// Return existing promise if already loading
|
|
118
117
|
if (this.promise) {
|
|
119
118
|
return this.promise;
|
|
120
119
|
}
|
|
121
|
-
// Check
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
this.fingerprint =
|
|
125
|
-
this.logger.log('Using
|
|
120
|
+
// Check localStorage (persists across tabs)
|
|
121
|
+
const stored = this.readStorage();
|
|
122
|
+
if (stored) {
|
|
123
|
+
this.fingerprint = stored;
|
|
124
|
+
this.logger.log('Using stored fingerprint:', this.fingerprint);
|
|
126
125
|
return this.fingerprint;
|
|
127
126
|
}
|
|
128
|
-
// Generate new fingerprint
|
|
129
127
|
this.promise = this.generateFingerprint();
|
|
130
128
|
return this.promise;
|
|
131
129
|
});
|
|
@@ -144,10 +142,7 @@ class FingerprintManager {
|
|
|
144
142
|
});
|
|
145
143
|
const result = yield fp.get();
|
|
146
144
|
this.fingerprint = result.visitorId;
|
|
147
|
-
|
|
148
|
-
if (typeof window !== 'undefined') {
|
|
149
|
-
window.thredFingerprint = this.fingerprint;
|
|
150
|
-
}
|
|
145
|
+
this.writeStorage(this.fingerprint);
|
|
151
146
|
this.logger.log('Fingerprint generated:', this.fingerprint);
|
|
152
147
|
return this.fingerprint;
|
|
153
148
|
}
|
|
@@ -157,20 +152,42 @@ class FingerprintManager {
|
|
|
157
152
|
}
|
|
158
153
|
});
|
|
159
154
|
}
|
|
160
|
-
/**
|
|
161
|
-
* Get cached fingerprint (synchronous)
|
|
162
|
-
*/
|
|
163
155
|
getCachedFingerprint() {
|
|
164
156
|
return this.fingerprint;
|
|
165
157
|
}
|
|
166
|
-
/**
|
|
167
|
-
* Clear fingerprint cache
|
|
168
|
-
*/
|
|
169
158
|
clear() {
|
|
170
159
|
this.fingerprint = null;
|
|
171
160
|
this.promise = null;
|
|
172
|
-
|
|
173
|
-
|
|
161
|
+
this.removeStorage();
|
|
162
|
+
}
|
|
163
|
+
readStorage() {
|
|
164
|
+
try {
|
|
165
|
+
return typeof window !== 'undefined'
|
|
166
|
+
? localStorage.getItem(STORAGE_KEY)
|
|
167
|
+
: null;
|
|
168
|
+
}
|
|
169
|
+
catch (_a) {
|
|
170
|
+
return null;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
writeStorage(value) {
|
|
174
|
+
try {
|
|
175
|
+
if (typeof window !== 'undefined') {
|
|
176
|
+
localStorage.setItem(STORAGE_KEY, value);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
catch (_a) {
|
|
180
|
+
this.logger.warn('Failed to persist fingerprint to localStorage');
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
removeStorage() {
|
|
184
|
+
try {
|
|
185
|
+
if (typeof window !== 'undefined') {
|
|
186
|
+
localStorage.removeItem(STORAGE_KEY);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
catch (_a) {
|
|
190
|
+
// Ignore storage errors on cleanup
|
|
174
191
|
}
|
|
175
192
|
}
|
|
176
193
|
}
|
|
@@ -554,7 +571,7 @@ const DEFAULT_BASE_URL = 'https://api.thred.dev/v1';
|
|
|
554
571
|
class ThredSDK {
|
|
555
572
|
constructor(options) {
|
|
556
573
|
this.initialized = false;
|
|
557
|
-
this.options = Object.assign({ baseUrl: DEFAULT_BASE_URL, debug:
|
|
574
|
+
this.options = Object.assign({ baseUrl: DEFAULT_BASE_URL, debug: false, autoInit: true }, options);
|
|
558
575
|
this.logger = new Logger(this.options.debug);
|
|
559
576
|
this.fingerprint = new FingerprintManager(this.logger);
|
|
560
577
|
this.api = new ThredAPI(this.options.baseUrl, this.options.browserKey, this.logger);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../node_modules/tslib/tslib.es6.js","../src/utils/logger.ts","../src/utils/detector.ts","../src/core/fingerprint.ts","../src/core/api.ts","../src/core/tracker.ts","../src/index.ts"],"sourcesContent":["/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n","/**\n * Simple logger utility\n */\nexport class Logger {\n private debug: boolean;\n private prefix: string;\n\n constructor(debug = false, prefix = '[Thred]') {\n this.debug = debug;\n this.prefix = prefix;\n }\n\n log(...args: unknown[]) {\n if (this.debug) {\n console.log(this.prefix, ...args);\n }\n }\n\n warn(...args: unknown[]) {\n if (this.debug) {\n console.warn(this.prefix, ...args);\n }\n }\n\n error(...args: unknown[]) {\n console.error(this.prefix, ...args);\n }\n}\n","/**\n * Detects if the visitor came from ChatGPT\n */\nexport function isFromChatGPT(): boolean {\n if (typeof window === 'undefined') return false;\n\n const params = new URLSearchParams(window.location.search);\n const utmSource = params.get('utm_source')?.toLowerCase() || '';\n const referrer = document.referrer.toLowerCase();\n\n const isChatGPTRef =\n referrer.includes('chat.openai.com') || referrer.includes('chatgpt.com');\n const isChatGPTUtm =\n utmSource === 'chatgpt' ||\n utmSource.includes('chatgpt') ||\n utmSource === 'chat.openai' ||\n utmSource === 'openai';\n\n return isChatGPTUtm || isChatGPTRef;\n}\n\n/**\n * Gets the browser key from script tag if present\n */\nexport function getBrowserKeyFromScript(): string | null {\n if (typeof window === 'undefined' || typeof document === 'undefined') {\n return null;\n }\n\n const scripts = document.getElementsByTagName('script');\n\n for (const script of Array.from(scripts)) {\n if (script.src.includes('thred')) {\n try {\n const url = new URL(script.src);\n return url.searchParams.get('browserKey');\n } catch {\n // Invalid URL\n }\n }\n }\n\n return null;\n}\n","import type { FingerprintResult } from '../types';\nimport { Logger } from '../utils/logger';\n\nconst FP_PROXY_URL =\n 'https://thredproxy.com/35ZCuyzokuT1YGd8/Hm7KPMHUZ4duyPRj?apiKey=iyqKVLQt2560EQUyjfxa';\nconst FP_PROXY_ENDPOINT =\n 'https://thredproxy.com/35ZCuyzokuT1YGd8/qbWl4nqUSCIDTor4';\n\nexport class FingerprintManager {\n private fingerprint: string | null = null;\n private logger: Logger;\n private promise: Promise<string | null> | null = null;\n\n constructor(logger: Logger) {\n this.logger = logger;\n }\n\n /**\n * Get or generate fingerprint\n */\n async getFingerprint(): Promise<string | null> {\n // Return cached fingerprint\n if (this.fingerprint) {\n this.logger.log('Using cached fingerprint:', this.fingerprint);\n return this.fingerprint;\n }\n\n // Return existing promise if already loading\n if (this.promise) {\n return this.promise;\n }\n\n // Check global window cache\n if (\n typeof window !== 'undefined' &&\n (window as any).thredFingerprint\n ) {\n this.fingerprint = (window as any).thredFingerprint;\n this.logger.log('Using global fingerprint:', this.fingerprint);\n return this.fingerprint;\n }\n\n // Generate new fingerprint\n this.promise = this.generateFingerprint();\n return this.promise;\n }\n\n private async generateFingerprint(): Promise<string | null> {\n if (typeof window === 'undefined') {\n this.logger.warn('FingerprintJS requires a browser — skipping');\n return null;\n }\n\n try {\n this.logger.log('Loading FingerprintJS...');\n\n const FingerprintJS = await import(FP_PROXY_URL);\n const fp = await FingerprintJS.load({\n endpoint: [FP_PROXY_ENDPOINT, FingerprintJS.defaultEndpoint],\n });\n\n const result: FingerprintResult = await fp.get();\n this.fingerprint = result.visitorId;\n\n // Cache globally\n if (typeof window !== 'undefined') {\n (window as any).thredFingerprint = this.fingerprint;\n }\n\n this.logger.log('Fingerprint generated:', this.fingerprint);\n return this.fingerprint;\n } catch (error) {\n this.logger.warn('Fingerprint generation failed:', error);\n return null;\n }\n }\n\n /**\n * Get cached fingerprint (synchronous)\n */\n getCachedFingerprint(): string | null {\n return this.fingerprint;\n }\n\n /**\n * Clear fingerprint cache\n */\n clear() {\n this.fingerprint = null;\n this.promise = null;\n if (typeof window !== 'undefined') {\n delete (window as any).thredFingerprint;\n }\n }\n}\n","import type {\n ThredConfig,\n PageViewPayload,\n EnrichPayload,\n} from '../types';\nimport { Logger } from '../utils/logger';\n\nexport class ThredAPI {\n private baseUrl: string;\n private browserKey: string;\n private logger: Logger;\n\n constructor(baseUrl: string, browserKey: string, logger: Logger) {\n this.baseUrl = baseUrl;\n this.browserKey = browserKey;\n this.logger = logger;\n }\n\n /**\n * Fetch configuration from API\n */\n async fetchConfig(fingerprint: string): Promise<ThredConfig | null> {\n try {\n const url = `${this.baseUrl}/config?fingerprint=${encodeURIComponent(fingerprint)}&browserKey=${encodeURIComponent(this.browserKey)}`;\n this.logger.log('Fetching config from:', url);\n\n const response = await fetch(url, {\n method: 'GET',\n headers: {\n Accept: 'application/json',\n },\n });\n\n if (!response.ok) {\n throw new Error(`Config request failed: ${response.status}`);\n }\n\n const config = await response.json();\n this.logger.log('Config received:', config);\n\n return config;\n } catch (error) {\n this.logger.warn('Failed to fetch config:', error);\n return null;\n }\n }\n\n /**\n * Send page view event\n */\n async trackPageView(payload: PageViewPayload): Promise<void> {\n try {\n const url = `${this.baseUrl}/events/page-view?browserKey=${encodeURIComponent(this.browserKey)}`;\n this.logger.log('Tracking page view:', url);\n\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(payload),\n keepalive: true,\n });\n\n if (!response.ok) {\n throw new Error(`Page view request failed: ${response.status}`);\n }\n\n this.logger.log('Page view tracked successfully');\n } catch (error) {\n this.logger.warn('Failed to track page view:', error);\n }\n }\n\n /**\n * Send lead enrichment data\n */\n async enrichLead(payload: EnrichPayload): Promise<void> {\n try {\n const url = `${this.baseUrl}/customers/enrich?browserKey=${encodeURIComponent(this.browserKey)}`;\n this.logger.log('Enriching lead:', url);\n\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(payload),\n keepalive: true,\n });\n\n if (!response.ok) {\n throw new Error(`Enrich request failed: ${response.status}`);\n }\n\n this.logger.log('Lead enriched successfully');\n } catch (error) {\n this.logger.warn('Failed to enrich lead:', error);\n }\n }\n}\n","import type { ThredConfig, LeadData } from '../types';\nimport { Logger } from '../utils/logger';\nimport { isFromChatGPT } from '../utils/detector';\nimport { ThredAPI } from './api';\nimport { FingerprintManager } from './fingerprint';\n\nexport class Tracker {\n private api: ThredAPI;\n private fingerprint: FingerprintManager;\n private logger: Logger;\n private config: ThredConfig | null = null;\n private formObserver: MutationObserver | null = null;\n private lastTrackedUrl: string | null = null;\n private popstateHandler: (() => void) | null = null;\n private originalPushState: typeof history.pushState | null = null;\n private originalReplaceState: typeof history.replaceState | null = null;\n\n constructor(\n api: ThredAPI,\n fingerprint: FingerprintManager,\n logger: Logger\n ) {\n this.api = api;\n this.fingerprint = fingerprint;\n this.logger = logger;\n }\n\n /**\n * Initialize tracker with config\n */\n async init(): Promise<void> {\n // Get fingerprint\n const fingerprint = await this.fingerprint.getFingerprint();\n if (!fingerprint) {\n this.logger.warn('Cannot initialize tracker without fingerprint');\n return;\n }\n this.config = await this.api.fetchConfig(fingerprint);\n\n if (!this.config?.enabled) {\n this.logger.log('Tracking disabled by config');\n return;\n }\n\n if (!this.config.hasChatSession && !isFromChatGPT()) {\n this.logger.log('No chat session for this fingerprint - exiting');\n return;\n }\n\n // Track initial page view\n if (isFromChatGPT()) {\n await this.trackPageView();\n } else {\n this.logger.log('UTM not from ChatGPT - skipping page view');\n }\n\n // Track SPA route changes\n this.setupRouteTracking();\n\n // Setup form tracking\n this.setupFormTracking();\n }\n\n /**\n * Track page view event\n */\n async trackPageView(): Promise<void> {\n if (typeof window === 'undefined') return;\n\n const fp = await this.fingerprint.getFingerprint();\n\n if (!fp) {\n this.logger.warn('Cannot track page view without fingerprint');\n return;\n }\n\n await this.api.trackPageView({\n event: 'page_view',\n data: {\n url: window.location.href,\n },\n fingerprint: fp,\n });\n }\n\n /**\n * Track form submission and enrich lead\n */\n async trackFormSubmit(formData: FormData): Promise<void> {\n if (!this.config || !this.config.emailId || !this.config.nameId) {\n this.logger.warn('Cannot track form - no config loaded');\n return;\n }\n\n const email = formData.get(this.config.emailId)?.toString().trim();\n const name = formData.get(this.config.nameId)?.toString().trim();\n\n let company: string | undefined = undefined;\n if (this.config.companyId) {\n company = formData.get(this.config.companyId)?.toString().trim();\n }\n\n this.logger.log('Form data extracted:', { email, name, company });\n\n if (!email || !name) {\n this.logger.warn('Missing required fields (email, name)');\n return;\n }\n\n await this.identify({\n name,\n email,\n company: company,\n discovery: false,\n });\n }\n\n /**\n * Identify user and enrich lead data\n */\n async identify(leadData: LeadData): Promise<void> {\n const fp = await this.fingerprint.getFingerprint();\n\n if (!fp) {\n this.logger.warn('Cannot identify without fingerprint');\n return;\n }\n\n await this.api.enrichLead({\n fingerprint: fp,\n leadData,\n });\n }\n\n /**\n * Track page views on SPA route changes by patching pushState/replaceState\n * and listening for popstate.\n */\n private setupRouteTracking(): void {\n if (typeof window === 'undefined') return;\n\n this.lastTrackedUrl = window.location.href;\n\n const onRouteChange = () => {\n const currentUrl = window.location.href;\n if (currentUrl === this.lastTrackedUrl) return;\n this.lastTrackedUrl = currentUrl;\n this.logger.log('Route change detected:', currentUrl);\n this.trackPageView();\n };\n\n this.popstateHandler = onRouteChange;\n window.addEventListener('popstate', this.popstateHandler);\n\n this.originalPushState = history.pushState.bind(history);\n this.originalReplaceState = history.replaceState.bind(history);\n\n history.pushState = (...args: Parameters<typeof history.pushState>) => {\n this.originalPushState!(...args);\n onRouteChange();\n };\n\n history.replaceState = (...args: Parameters<typeof history.replaceState>) => {\n this.originalReplaceState!(...args);\n onRouteChange();\n };\n }\n\n /**\n * Setup automatic form tracking\n */\n private setupFormTracking(): void {\n if (!this.config || typeof document === 'undefined') {\n this.logger.warn('Cannot track form - no config or document');\n return;\n }\n\n if (this.config.type === 'hosted') {\n const hostedUrlBase = this.config.hostedUrlBase;\n if (!hostedUrlBase) {\n this.logger.warn('Cannot track form - no hosted URL base');\n return;\n }\n\n // Inject utm_fp into all existing matching links\n this.injectFingerprintIntoLinks(document.body, hostedUrlBase);\n\n // Watch for dynamically added links and inject utm_fp as they appear\n this.formObserver = new MutationObserver((mutations) => {\n for (const mutation of mutations) {\n for (const node of Array.from(mutation.addedNodes)) {\n if (!(node instanceof HTMLElement)) continue;\n\n // Check if the added node itself is a matching link\n if (node.tagName === 'A') {\n this.injectFingerprintIntoLink(node as HTMLAnchorElement, hostedUrlBase);\n }\n\n // Check any child links within the added node\n this.injectFingerprintIntoLinks(node, hostedUrlBase);\n }\n }\n });\n\n this.formObserver.observe(document.body, {\n childList: true,\n subtree: true,\n });\n\n // Fallback: intercept clicks for links that may have had their href changed dynamically\n document.addEventListener('click', (e) => {\n const target = (e.target as HTMLElement).closest('a');\n if (!target) return;\n\n const href = target.getAttribute('href');\n if (!href || !href.includes(hostedUrlBase)) return;\n\n // Already tagged — skip\n if (href.includes('utm_fp=')) return;\n\n this.injectFingerprintIntoLink(target as HTMLAnchorElement, hostedUrlBase);\n }, { capture: true });\n\n return;\n }\n else if (this.config.type === 'custom') {\n const attachFormListener = () => {\n if (!this.config || !this.config.formId) {\n this.logger.warn('Cannot track form - no form ID');\n return;\n }\n const form = document.getElementById(this.config!.formId);\n if (!form) {\n this.logger.log('Form not found:', this.config!.formId);\n return;\n }\n\n const formElement = form as HTMLFormElement;\n\n // Check if already tracked\n if (formElement.dataset.thredTracked) {\n return;\n }\n\n this.logger.log('Attaching listener to form:', this.config!.formId);\n\n formElement.addEventListener(\n 'submit',\n () => {\n const formData = new FormData(formElement);\n this.trackFormSubmit(formData);\n },\n { capture: true }\n );\n\n formElement.dataset.thredTracked = 'true';\n };\n\n // Attach immediately if form exists\n attachFormListener();\n\n // Watch for dynamic forms\n this.formObserver = new MutationObserver(() => {\n attachFormListener();\n });\n\n this.formObserver.observe(document.body, {\n childList: true,\n subtree: true,\n });\n }\n }\n\n /**\n * Inject utm_fp into all matching links within a root element\n */\n private injectFingerprintIntoLinks(root: HTMLElement, hostedUrlBase: string): void {\n const links = root.querySelectorAll<HTMLAnchorElement>('a[href]');\n for (const link of Array.from(links)) {\n this.injectFingerprintIntoLink(link, hostedUrlBase);\n }\n }\n\n /**\n * Inject utm_fp into a single link if it matches hostedUrlBase\n */\n private injectFingerprintIntoLink(link: HTMLAnchorElement, hostedUrlBase: string): void {\n const href = link.getAttribute('href');\n if (!href || !href.includes(hostedUrlBase)) return;\n\n // Already tagged — skip\n if (href.includes('utm_fp=')) return;\n\n const fp = this.fingerprint.getCachedFingerprint();\n if (!fp) {\n this.logger.warn('Cannot inject utm_fp - no cached fingerprint');\n return;\n }\n\n try {\n const url = new URL(href, window.location.origin);\n url.searchParams.set('utm_fp', fp);\n link.setAttribute('href', url.toString());\n this.logger.log('Injected utm_fp into link:', url.toString());\n } catch (err) {\n this.logger.warn('Failed to parse URL:', href, err);\n }\n }\n\n /**\n * Cleanup tracker\n */\n destroy(): void {\n if (this.formObserver) {\n this.formObserver.disconnect();\n this.formObserver = null;\n }\n\n if (typeof window === 'undefined') return;\n\n if (this.popstateHandler) {\n window.removeEventListener('popstate', this.popstateHandler);\n this.popstateHandler = null;\n }\n\n if (this.originalPushState) {\n history.pushState = this.originalPushState;\n this.originalPushState = null;\n }\n\n if (this.originalReplaceState) {\n history.replaceState = this.originalReplaceState;\n this.originalReplaceState = null;\n }\n }\n}\n","/**\n * Thred SDK - Browser tracking and lead enrichment\n */\n\nimport type { ThredOptions, ThredSDK as IThredSDK, LeadData } from './types';\nimport { Logger } from './utils/logger';\nimport { isFromChatGPT, getBrowserKeyFromScript } from './utils/detector';\nimport { FingerprintManager } from './core/fingerprint';\nimport { ThredAPI } from './core/api';\nimport { Tracker } from './core/tracker';\n\nexport * from './types';\n\nconst DEFAULT_BASE_URL = 'https://api.thred.dev/v1';\n\nexport class ThredSDK implements IThredSDK {\n private options: ThredOptions;\n private logger: Logger;\n private fingerprint: FingerprintManager;\n private api: ThredAPI;\n private tracker: Tracker;\n private initialized = false;\n\n constructor(options: ThredOptions) {\n this.options = {\n baseUrl: DEFAULT_BASE_URL,\n debug: true,\n autoInit: true,\n ...options,\n };\n\n this.logger = new Logger(this.options.debug);\n this.fingerprint = new FingerprintManager(this.logger);\n this.api = new ThredAPI(\n this.options.baseUrl!,\n this.options.browserKey,\n this.logger\n );\n this.tracker = new Tracker(this.api, this.fingerprint, this.logger);\n\n if (this.options.autoInit) {\n this.init();\n }\n }\n\n /**\n * Initialize the SDK\n */\n async init(): Promise<void> {\n if (typeof window === 'undefined') {\n this.logger.warn('SDK requires a browser environment — skipping init');\n return;\n }\n\n if (this.initialized) {\n this.logger.warn('SDK already initialized');\n return;\n }\n\n this.logger.log('Initializing Thred SDK...');\n\n // Generate fingerprint\n await this.fingerprint.getFingerprint();\n\n // Initialize tracker\n await this.tracker.init();\n\n this.initialized = true;\n this.logger.log('SDK initialized successfully');\n }\n\n /**\n * Check if visitor is from ChatGPT\n */\n isFromChatGPT(): boolean {\n return isFromChatGPT();\n }\n\n /**\n * Track page view\n */\n async trackPageView(): Promise<void> {\n await this.tracker.trackPageView();\n }\n\n /**\n * Track form submission\n */\n async trackFormSubmit(formData: FormData): Promise<void> {\n await this.tracker.trackFormSubmit(formData);\n }\n\n /**\n * Identify user with lead data\n */\n async identify(leadData: LeadData): Promise<void> {\n await this.tracker.identify(leadData);\n }\n\n /**\n * Get current fingerprint\n */\n getFingerprint(): string | null {\n return this.fingerprint.getCachedFingerprint();\n }\n\n /**\n * Destroy SDK instance and cleanup\n */\n destroy(): void {\n this.tracker.destroy();\n this.fingerprint.clear();\n this.initialized = false;\n this.logger.log('SDK destroyed');\n }\n}\n\n/**\n * Auto-initialize if loaded as script tag with browserKey\n */\nif (typeof window !== 'undefined') {\n const browserKey = getBrowserKeyFromScript();\n if (browserKey) {\n const sdk = new ThredSDK({ browserKey });\n (window as any).Thred = sdk;\n }\n}\n\nexport default ThredSDK;\n"],"names":[],"mappings":";;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAkGA;AACO,SAAS,SAAS,CAAC,OAAO,EAAE,UAAU,EAAE,CAAC,EAAE,SAAS,EAAE;AAC7D,IAAI,SAAS,KAAK,CAAC,KAAK,EAAE,EAAE,OAAO,KAAK,YAAY,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,UAAU,OAAO,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAChH,IAAI,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,EAAE,UAAU,OAAO,EAAE,MAAM,EAAE;AAC/D,QAAQ,SAAS,SAAS,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACnG,QAAQ,SAAS,QAAQ,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACtG,QAAQ,SAAS,IAAI,CAAC,MAAM,EAAE,EAAE,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;AACtH,QAAQ,IAAI,CAAC,CAAC,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,UAAU,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;AAC9E,IAAI,CAAC,CAAC,CAAC;AACP,CAAC;AA6MD;AACuB,OAAO,eAAe,KAAK,UAAU,GAAG,eAAe,GAAG,UAAU,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE;AACvH,IAAI,IAAI,CAAC,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;AAC/B,IAAI,OAAO,CAAC,CAAC,IAAI,GAAG,iBAAiB,EAAE,CAAC,CAAC,KAAK,GAAG,KAAK,EAAE,CAAC,CAAC,UAAU,GAAG,UAAU,EAAE,CAAC,CAAC;AACrF;;AC3UA;;AAEG;MACU,MAAM,CAAA;AAIjB,IAAA,WAAA,CAAY,KAAK,GAAG,KAAK,EAAE,MAAM,GAAG,SAAS,EAAA;AAC3C,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;IACtB;IAEA,GAAG,CAAC,GAAG,IAAe,EAAA;AACpB,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;YACd,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC;QACnC;IACF;IAEA,IAAI,CAAC,GAAG,IAAe,EAAA;AACrB,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;YACd,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC;QACpC;IACF;IAEA,KAAK,CAAC,GAAG,IAAe,EAAA;QACtB,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC;IACrC;AACD;;AC3BD;;AAEG;SACa,aAAa,GAAA;;IAC3B,IAAI,OAAO,MAAM,KAAK,WAAW;AAAE,QAAA,OAAO,KAAK;IAE/C,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC1D,IAAA,MAAM,SAAS,GAAG,CAAA,CAAA,EAAA,GAAA,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,WAAW,EAAE,KAAI,EAAE;IAC/D,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,WAAW,EAAE;AAEhD,IAAA,MAAM,YAAY,GAChB,QAAQ,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC;AAC1E,IAAA,MAAM,YAAY,GAChB,SAAS,KAAK,SAAS;AACvB,QAAA,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC;AAC7B,QAAA,SAAS,KAAK,aAAa;QAC3B,SAAS,KAAK,QAAQ;IAExB,OAAO,YAAY,IAAI,YAAY;AACrC;AAEA;;AAEG;SACa,uBAAuB,GAAA;IACrC,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;AACpE,QAAA,OAAO,IAAI;IACb;IAEA,MAAM,OAAO,GAAG,QAAQ,CAAC,oBAAoB,CAAC,QAAQ,CAAC;IAEvD,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;QACxC,IAAI,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;AAChC,YAAA,IAAI;gBACF,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC;gBAC/B,OAAO,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC;YAC3C;AAAE,YAAA,OAAA,EAAA,EAAM;;YAER;QACF;IACF;AAEA,IAAA,OAAO,IAAI;AACb;;ACxCA,MAAM,YAAY,GAChB,sFAAsF;AACxF,MAAM,iBAAiB,GACrB,0DAA0D;MAE/C,kBAAkB,CAAA;AAK7B,IAAA,WAAA,CAAY,MAAc,EAAA;QAJlB,IAAA,CAAA,WAAW,GAAkB,IAAI;QAEjC,IAAA,CAAA,OAAO,GAAkC,IAAI;AAGnD,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;IACtB;AAEA;;AAEG;IACG,cAAc,GAAA;;;AAElB,YAAA,IAAI,IAAI,CAAC,WAAW,EAAE;gBACpB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,2BAA2B,EAAE,IAAI,CAAC,WAAW,CAAC;gBAC9D,OAAO,IAAI,CAAC,WAAW;YACzB;;AAGA,YAAA,IAAI,IAAI,CAAC,OAAO,EAAE;gBAChB,OAAO,IAAI,CAAC,OAAO;YACrB;;YAGA,IACE,OAAO,MAAM,KAAK,WAAW;gBAC5B,MAAc,CAAC,gBAAgB,EAChC;AACA,gBAAA,IAAI,CAAC,WAAW,GAAI,MAAc,CAAC,gBAAgB;gBACnD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,2BAA2B,EAAE,IAAI,CAAC,WAAW,CAAC;gBAC9D,OAAO,IAAI,CAAC,WAAW;YACzB;;AAGA,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,mBAAmB,EAAE;YACzC,OAAO,IAAI,CAAC,OAAO;QACrB,CAAC,CAAA;AAAA,IAAA;IAEa,mBAAmB,GAAA;;AAC/B,YAAA,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;AACjC,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,6CAA6C,CAAC;AAC/D,gBAAA,OAAO,IAAI;YACb;AAEA,YAAA,IAAI;AACF,gBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,0BAA0B,CAAC;AAE3C,gBAAA,MAAM,aAAa,GAAG,MAAM,OAAO,YAAY,CAAC;AAChD,gBAAA,MAAM,EAAE,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC;AAClC,oBAAA,QAAQ,EAAE,CAAC,iBAAiB,EAAE,aAAa,CAAC,eAAe,CAAC;AAC7D,iBAAA,CAAC;AAEF,gBAAA,MAAM,MAAM,GAAsB,MAAM,EAAE,CAAC,GAAG,EAAE;AAChD,gBAAA,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,SAAS;;AAGnC,gBAAA,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;AAChC,oBAAA,MAAc,CAAC,gBAAgB,GAAG,IAAI,CAAC,WAAW;gBACrD;gBAEA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,wBAAwB,EAAE,IAAI,CAAC,WAAW,CAAC;gBAC3D,OAAO,IAAI,CAAC,WAAW;YACzB;YAAE,OAAO,KAAK,EAAE;gBACd,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gCAAgC,EAAE,KAAK,CAAC;AACzD,gBAAA,OAAO,IAAI;YACb;QACF,CAAC,CAAA;AAAA,IAAA;AAED;;AAEG;IACH,oBAAoB,GAAA;QAClB,OAAO,IAAI,CAAC,WAAW;IACzB;AAEA;;AAEG;IACH,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACnB,QAAA,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;YACjC,OAAQ,MAAc,CAAC,gBAAgB;QACzC;IACF;AACD;;MCvFY,QAAQ,CAAA;AAKnB,IAAA,WAAA,CAAY,OAAe,EAAE,UAAkB,EAAE,MAAc,EAAA;AAC7D,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO;AACtB,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU;AAC5B,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;IACtB;AAEA;;AAEG;AACG,IAAA,WAAW,CAAC,WAAmB,EAAA;;AACnC,YAAA,IAAI;AACF,gBAAA,MAAM,GAAG,GAAG,CAAA,EAAG,IAAI,CAAC,OAAO,uBAAuB,kBAAkB,CAAC,WAAW,CAAC,CAAA,YAAA,EAAe,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;gBACrI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,uBAAuB,EAAE,GAAG,CAAC;AAE7C,gBAAA,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;AAChC,oBAAA,MAAM,EAAE,KAAK;AACb,oBAAA,OAAO,EAAE;AACP,wBAAA,MAAM,EAAE,kBAAkB;AAC3B,qBAAA;AACF,iBAAA,CAAC;AAEF,gBAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;oBAChB,MAAM,IAAI,KAAK,CAAC,CAAA,uBAAA,EAA0B,QAAQ,CAAC,MAAM,CAAA,CAAE,CAAC;gBAC9D;AAEA,gBAAA,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE;gBACpC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,kBAAkB,EAAE,MAAM,CAAC;AAE3C,gBAAA,OAAO,MAAM;YACf;YAAE,OAAO,KAAK,EAAE;gBACd,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,yBAAyB,EAAE,KAAK,CAAC;AAClD,gBAAA,OAAO,IAAI;YACb;QACF,CAAC,CAAA;AAAA,IAAA;AAED;;AAEG;AACG,IAAA,aAAa,CAAC,OAAwB,EAAA;;AAC1C,YAAA,IAAI;AACF,gBAAA,MAAM,GAAG,GAAG,CAAA,EAAG,IAAI,CAAC,OAAO,CAAA,6BAAA,EAAgC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;gBAChG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,qBAAqB,EAAE,GAAG,CAAC;AAE3C,gBAAA,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;AAChC,oBAAA,MAAM,EAAE,MAAM;AACd,oBAAA,OAAO,EAAE;AACP,wBAAA,cAAc,EAAE,kBAAkB;AACnC,qBAAA;AACD,oBAAA,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;AAC7B,oBAAA,SAAS,EAAE,IAAI;AAChB,iBAAA,CAAC;AAEF,gBAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;oBAChB,MAAM,IAAI,KAAK,CAAC,CAAA,0BAAA,EAA6B,QAAQ,CAAC,MAAM,CAAA,CAAE,CAAC;gBACjE;AAEA,gBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,gCAAgC,CAAC;YACnD;YAAE,OAAO,KAAK,EAAE;gBACd,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,4BAA4B,EAAE,KAAK,CAAC;YACvD;QACF,CAAC,CAAA;AAAA,IAAA;AAED;;AAEG;AACG,IAAA,UAAU,CAAC,OAAsB,EAAA;;AACrC,YAAA,IAAI;AACF,gBAAA,MAAM,GAAG,GAAG,CAAA,EAAG,IAAI,CAAC,OAAO,CAAA,6BAAA,EAAgC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;gBAChG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,iBAAiB,EAAE,GAAG,CAAC;AAEvC,gBAAA,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;AAChC,oBAAA,MAAM,EAAE,MAAM;AACd,oBAAA,OAAO,EAAE;AACP,wBAAA,cAAc,EAAE,kBAAkB;AACnC,qBAAA;AACD,oBAAA,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;AAC7B,oBAAA,SAAS,EAAE,IAAI;AAChB,iBAAA,CAAC;AAEF,gBAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;oBAChB,MAAM,IAAI,KAAK,CAAC,CAAA,uBAAA,EAA0B,QAAQ,CAAC,MAAM,CAAA,CAAE,CAAC;gBAC9D;AAEA,gBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,4BAA4B,CAAC;YAC/C;YAAE,OAAO,KAAK,EAAE;gBACd,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,wBAAwB,EAAE,KAAK,CAAC;YACnD;QACF,CAAC,CAAA;AAAA,IAAA;AACF;;MC9FY,OAAO,CAAA;AAWlB,IAAA,WAAA,CACE,GAAa,EACb,WAA+B,EAC/B,MAAc,EAAA;QAVR,IAAA,CAAA,MAAM,GAAuB,IAAI;QACjC,IAAA,CAAA,YAAY,GAA4B,IAAI;QAC5C,IAAA,CAAA,cAAc,GAAkB,IAAI;QACpC,IAAA,CAAA,eAAe,GAAwB,IAAI;QAC3C,IAAA,CAAA,iBAAiB,GAAoC,IAAI;QACzD,IAAA,CAAA,oBAAoB,GAAuC,IAAI;AAOrE,QAAA,IAAI,CAAC,GAAG,GAAG,GAAG;AACd,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW;AAC9B,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;IACtB;AAEA;;AAEG;IACG,IAAI,GAAA;;;;YAER,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE;YAC3D,IAAI,CAAC,WAAW,EAAE;AAChB,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,+CAA+C,CAAC;gBACjE;YACF;AACA,YAAA,IAAI,CAAC,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,WAAW,CAAC;YAErD,IAAI,EAAC,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,OAAO,CAAA,EAAE;AACzB,gBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,6BAA6B,CAAC;gBAC9C;YACF;YAEA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,IAAI,CAAC,aAAa,EAAE,EAAE;AACnD,gBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,gDAAgD,CAAC;gBACjE;YACF;;YAGA,IAAI,aAAa,EAAE,EAAE;AACnB,gBAAA,MAAM,IAAI,CAAC,aAAa,EAAE;YAC5B;iBAAO;AACL,gBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,2CAA2C,CAAC;YAC9D;;YAGA,IAAI,CAAC,kBAAkB,EAAE;;YAGzB,IAAI,CAAC,iBAAiB,EAAE;QAC1B,CAAC,CAAA;AAAA,IAAA;AAED;;AAEG;IACG,aAAa,GAAA;;YACjB,IAAI,OAAO,MAAM,KAAK,WAAW;gBAAE;YAEnC,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE;YAElD,IAAI,CAAC,EAAE,EAAE;AACP,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,4CAA4C,CAAC;gBAC9D;YACF;AAEA,YAAA,MAAM,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC;AAC3B,gBAAA,KAAK,EAAE,WAAW;AAClB,gBAAA,IAAI,EAAE;AACJ,oBAAA,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI;AAC1B,iBAAA;AACD,gBAAA,WAAW,EAAE,EAAE;AAChB,aAAA,CAAC;QACJ,CAAC,CAAA;AAAA,IAAA;AAED;;AAEG;AACG,IAAA,eAAe,CAAC,QAAkB,EAAA;;;AACtC,YAAA,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;AAC/D,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,sCAAsC,CAAC;gBACxD;YACF;AAEA,YAAA,MAAM,KAAK,GAAG,CAAA,EAAA,GAAA,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,QAAQ,EAAA,CAAG,IAAI,EAAE;AAClE,YAAA,MAAM,IAAI,GAAG,CAAA,EAAA,GAAA,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,QAAQ,EAAA,CAAG,IAAI,EAAE;YAEhE,IAAI,OAAO,GAAuB,SAAS;AAC3C,YAAA,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;AACzB,gBAAA,OAAO,GAAG,CAAA,EAAA,GAAA,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,QAAQ,EAAA,CAAG,IAAI,EAAE;YAClE;AAEA,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,sBAAsB,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AAEjE,YAAA,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,EAAE;AACnB,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,uCAAuC,CAAC;gBACzD;YACF;YAEA,MAAM,IAAI,CAAC,QAAQ,CAAC;gBAClB,IAAI;gBACJ,KAAK;AACL,gBAAA,OAAO,EAAE,OAAO;AAChB,gBAAA,SAAS,EAAE,KAAK;AACjB,aAAA,CAAC;QACJ,CAAC,CAAA;AAAA,IAAA;AAED;;AAEG;AACG,IAAA,QAAQ,CAAC,QAAkB,EAAA;;YAC/B,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE;YAElD,IAAI,CAAC,EAAE,EAAE;AACP,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,qCAAqC,CAAC;gBACvD;YACF;AAEA,YAAA,MAAM,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC;AACxB,gBAAA,WAAW,EAAE,EAAE;gBACf,QAAQ;AACT,aAAA,CAAC;QACJ,CAAC,CAAA;AAAA,IAAA;AAED;;;AAGG;IACK,kBAAkB,GAAA;QACxB,IAAI,OAAO,MAAM,KAAK,WAAW;YAAE;QAEnC,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI;QAE1C,MAAM,aAAa,GAAG,MAAK;AACzB,YAAA,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI;AACvC,YAAA,IAAI,UAAU,KAAK,IAAI,CAAC,cAAc;gBAAE;AACxC,YAAA,IAAI,CAAC,cAAc,GAAG,UAAU;YAChC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,wBAAwB,EAAE,UAAU,CAAC;YACrD,IAAI,CAAC,aAAa,EAAE;AACtB,QAAA,CAAC;AAED,QAAA,IAAI,CAAC,eAAe,GAAG,aAAa;QACpC,MAAM,CAAC,gBAAgB,CAAC,UAAU,EAAE,IAAI,CAAC,eAAe,CAAC;QAEzD,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC;QACxD,IAAI,CAAC,oBAAoB,GAAG,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC;AAE9D,QAAA,OAAO,CAAC,SAAS,GAAG,CAAC,GAAG,IAA0C,KAAI;AACpE,YAAA,IAAI,CAAC,iBAAkB,CAAC,GAAG,IAAI,CAAC;AAChC,YAAA,aAAa,EAAE;AACjB,QAAA,CAAC;AAED,QAAA,OAAO,CAAC,YAAY,GAAG,CAAC,GAAG,IAA6C,KAAI;AAC1E,YAAA,IAAI,CAAC,oBAAqB,CAAC,GAAG,IAAI,CAAC;AACnC,YAAA,aAAa,EAAE;AACjB,QAAA,CAAC;IACH;AAEA;;AAEG;IACK,iBAAiB,GAAA;QACvB,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;AACnD,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,2CAA2C,CAAC;YAC7D;QACF;QAEA,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE;AACjC,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa;YAC/C,IAAI,CAAC,aAAa,EAAE;AAClB,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,wCAAwC,CAAC;gBAC1D;YACF;;YAGA,IAAI,CAAC,0BAA0B,CAAC,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;;YAG7D,IAAI,CAAC,YAAY,GAAG,IAAI,gBAAgB,CAAC,CAAC,SAAS,KAAI;AACrD,gBAAA,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;AAChC,oBAAA,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;AAClD,wBAAA,IAAI,EAAE,IAAI,YAAY,WAAW,CAAC;4BAAE;;AAGpC,wBAAA,IAAI,IAAI,CAAC,OAAO,KAAK,GAAG,EAAE;AACxB,4BAAA,IAAI,CAAC,yBAAyB,CAAC,IAAyB,EAAE,aAAa,CAAC;wBAC1E;;AAGA,wBAAA,IAAI,CAAC,0BAA0B,CAAC,IAAI,EAAE,aAAa,CAAC;oBACtD;gBACF;AACF,YAAA,CAAC,CAAC;YAEF,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE;AACvC,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,OAAO,EAAE,IAAI;AACd,aAAA,CAAC;;YAGF,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAC,KAAI;gBACvC,MAAM,MAAM,GAAI,CAAC,CAAC,MAAsB,CAAC,OAAO,CAAC,GAAG,CAAC;AACrD,gBAAA,IAAI,CAAC,MAAM;oBAAE;gBAEb,MAAM,IAAI,GAAG,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC;gBACxC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC;oBAAE;;AAG5C,gBAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;oBAAE;AAE9B,gBAAA,IAAI,CAAC,yBAAyB,CAAC,MAA2B,EAAE,aAAa,CAAC;AAC5E,YAAA,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YAErB;QACF;aACK,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE;YACtC,MAAM,kBAAkB,GAAG,MAAK;AAC9B,gBAAA,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;AACvC,oBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gCAAgC,CAAC;oBAClD;gBACF;AACA,gBAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,MAAO,CAAC,MAAM,CAAC;gBACzD,IAAI,CAAC,IAAI,EAAE;AACT,oBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,iBAAiB,EAAE,IAAI,CAAC,MAAO,CAAC,MAAM,CAAC;oBACvD;gBACF;gBAEA,MAAM,WAAW,GAAG,IAAuB;;AAG3C,gBAAA,IAAI,WAAW,CAAC,OAAO,CAAC,YAAY,EAAE;oBACpC;gBACF;AAEA,gBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,6BAA6B,EAAE,IAAI,CAAC,MAAO,CAAC,MAAM,CAAC;AAEnE,gBAAA,WAAW,CAAC,gBAAgB,CAC1B,QAAQ,EACR,MAAK;AACH,oBAAA,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,WAAW,CAAC;AAC1C,oBAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC;AAChC,gBAAA,CAAC,EACD,EAAE,OAAO,EAAE,IAAI,EAAE,CAClB;AAED,gBAAA,WAAW,CAAC,OAAO,CAAC,YAAY,GAAG,MAAM;AAC3C,YAAA,CAAC;;AAGD,YAAA,kBAAkB,EAAE;;AAGpB,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,gBAAgB,CAAC,MAAK;AAC5C,gBAAA,kBAAkB,EAAE;AACtB,YAAA,CAAC,CAAC;YAEF,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE;AACvC,gBAAA,SAAS,EAAE,IAAI;AACf,gBAAA,OAAO,EAAE,IAAI;AACd,aAAA,CAAC;QACJ;IACF;AAEA;;AAEG;IACK,0BAA0B,CAAC,IAAiB,EAAE,aAAqB,EAAA;QACzE,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAoB,SAAS,CAAC;QACjE,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;AACpC,YAAA,IAAI,CAAC,yBAAyB,CAAC,IAAI,EAAE,aAAa,CAAC;QACrD;IACF;AAEA;;AAEG;IACK,yBAAyB,CAAC,IAAuB,EAAE,aAAqB,EAAA;QAC9E,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;QACtC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC;YAAE;;AAG5C,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;YAAE;QAE9B,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,oBAAoB,EAAE;QAClD,IAAI,CAAC,EAAE,EAAE;AACP,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,8CAA8C,CAAC;YAChE;QACF;AAEA,QAAA,IAAI;AACF,YAAA,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;YACjD,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC;YAClC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC;AACzC,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,4BAA4B,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC/D;QAAE,OAAO,GAAG,EAAE;YACZ,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,sBAAsB,EAAE,IAAI,EAAE,GAAG,CAAC;QACrD;IACF;AAEA;;AAEG;IACH,OAAO,GAAA;AACL,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;AACrB,YAAA,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE;AAC9B,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI;QAC1B;QAEA,IAAI,OAAO,MAAM,KAAK,WAAW;YAAE;AAEnC,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE;YACxB,MAAM,CAAC,mBAAmB,CAAC,UAAU,EAAE,IAAI,CAAC,eAAe,CAAC;AAC5D,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI;QAC7B;AAEA,QAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE;AAC1B,YAAA,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,iBAAiB;AAC1C,YAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;QAC/B;AAEA,QAAA,IAAI,IAAI,CAAC,oBAAoB,EAAE;AAC7B,YAAA,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,oBAAoB;AAChD,YAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;QAClC;IACF;AACD;;AC/UD;;AAEG;AAWH,MAAM,gBAAgB,GAAG,0BAA0B;MAEtC,QAAQ,CAAA;AAQnB,IAAA,WAAA,CAAY,OAAqB,EAAA;QAFzB,IAAA,CAAA,WAAW,GAAG,KAAK;AAGzB,QAAA,IAAI,CAAC,OAAO,GAAA,MAAA,CAAA,MAAA,CAAA,EACV,OAAO,EAAE,gBAAgB,EACzB,KAAK,EAAE,IAAI,EACX,QAAQ,EAAE,IAAI,EAAA,EACX,OAAO,CACX;AAED,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;QAC5C,IAAI,CAAC,WAAW,GAAG,IAAI,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC;QACtD,IAAI,CAAC,GAAG,GAAG,IAAI,QAAQ,CACrB,IAAI,CAAC,OAAO,CAAC,OAAQ,EACrB,IAAI,CAAC,OAAO,CAAC,UAAU,EACvB,IAAI,CAAC,MAAM,CACZ;AACD,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC;AAEnE,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;YACzB,IAAI,CAAC,IAAI,EAAE;QACb;IACF;AAEA;;AAEG;IACG,IAAI,GAAA;;AACR,YAAA,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;AACjC,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,oDAAoD,CAAC;gBACtE;YACF;AAEA,YAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC;gBAC3C;YACF;AAEA,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,2BAA2B,CAAC;;AAG5C,YAAA,MAAM,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE;;AAGvC,YAAA,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;AAEzB,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AACvB,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,8BAA8B,CAAC;QACjD,CAAC,CAAA;AAAA,IAAA;AAED;;AAEG;IACH,aAAa,GAAA;QACX,OAAO,aAAa,EAAE;IACxB;AAEA;;AAEG;IACG,aAAa,GAAA;;AACjB,YAAA,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE;QACpC,CAAC,CAAA;AAAA,IAAA;AAED;;AAEG;AACG,IAAA,eAAe,CAAC,QAAkB,EAAA;;YACtC,MAAM,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,QAAQ,CAAC;QAC9C,CAAC,CAAA;AAAA,IAAA;AAED;;AAEG;AACG,IAAA,QAAQ,CAAC,QAAkB,EAAA;;YAC/B,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACvC,CAAC,CAAA;AAAA,IAAA;AAED;;AAEG;IACH,cAAc,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,oBAAoB,EAAE;IAChD;AAEA;;AAEG;IACH,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;AACtB,QAAA,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE;AACxB,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK;AACxB,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC;IAClC;AACD;AAED;;AAEG;AACH,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;AACjC,IAAA,MAAM,UAAU,GAAG,uBAAuB,EAAE;IAC5C,IAAI,UAAU,EAAE;QACd,MAAM,GAAG,GAAG,IAAI,QAAQ,CAAC,EAAE,UAAU,EAAE,CAAC;AACvC,QAAA,MAAc,CAAC,KAAK,GAAG,GAAG;IAC7B;AACF;;;;;","x_google_ignoreList":[0]}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../node_modules/tslib/tslib.es6.js","../src/utils/logger.ts","../src/utils/detector.ts","../src/core/fingerprint.ts","../src/core/api.ts","../src/core/tracker.ts","../src/index.ts"],"sourcesContent":["/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n","/**\n * Simple logger utility\n */\nexport class Logger {\n private debug: boolean;\n private prefix: string;\n\n constructor(debug = false, prefix = '[Thred]') {\n this.debug = debug;\n this.prefix = prefix;\n }\n\n log(...args: unknown[]) {\n if (this.debug) {\n console.log(this.prefix, ...args);\n }\n }\n\n warn(...args: unknown[]) {\n if (this.debug) {\n console.warn(this.prefix, ...args);\n }\n }\n\n error(...args: unknown[]) {\n console.error(this.prefix, ...args);\n }\n}\n","/**\n * Detects if the visitor came from ChatGPT\n */\nexport function isFromChatGPT(): boolean {\n if (typeof window === 'undefined') return false;\n\n const params = new URLSearchParams(window.location.search);\n const utmSource = params.get('utm_source')?.toLowerCase() || '';\n const referrer = document.referrer.toLowerCase();\n\n const isChatGPTRef =\n referrer.includes('chat.openai.com') || referrer.includes('chatgpt.com');\n const isChatGPTUtm =\n utmSource === 'chatgpt' ||\n utmSource.includes('chatgpt') ||\n utmSource === 'chat.openai' ||\n utmSource === 'openai';\n\n return isChatGPTUtm || isChatGPTRef;\n}\n\n/**\n * Gets the browser key from script tag if present\n */\nexport function getBrowserKeyFromScript(): string | null {\n if (typeof window === 'undefined' || typeof document === 'undefined') {\n return null;\n }\n\n const scripts = document.getElementsByTagName('script');\n\n for (const script of Array.from(scripts)) {\n if (script.src.includes('thred')) {\n try {\n const url = new URL(script.src);\n return url.searchParams.get('browserKey');\n } catch {\n // Invalid URL\n }\n }\n }\n\n return null;\n}\n","import type { FingerprintResult } from '../types';\nimport { Logger } from '../utils/logger';\n\nconst FP_PROXY_URL =\n 'https://thredproxy.com/35ZCuyzokuT1YGd8/Hm7KPMHUZ4duyPRj?apiKey=iyqKVLQt2560EQUyjfxa';\nconst FP_PROXY_ENDPOINT =\n 'https://thredproxy.com/35ZCuyzokuT1YGd8/qbWl4nqUSCIDTor4';\n\nconst STORAGE_KEY = 'thred_fingerprint';\n\nexport class FingerprintManager {\n private fingerprint: string | null = null;\n private logger: Logger;\n private promise: Promise<string | null> | null = null;\n\n constructor(logger: Logger) {\n this.logger = logger;\n }\n\n /**\n * Get or generate fingerprint\n */\n async getFingerprint(): Promise<string | null> {\n if (this.fingerprint) {\n this.logger.log('Using cached fingerprint:', this.fingerprint);\n return this.fingerprint;\n }\n\n if (this.promise) {\n return this.promise;\n }\n\n // Check localStorage (persists across tabs)\n const stored = this.readStorage();\n if (stored) {\n this.fingerprint = stored;\n this.logger.log('Using stored fingerprint:', this.fingerprint);\n return this.fingerprint;\n }\n\n this.promise = this.generateFingerprint();\n return this.promise;\n }\n\n private async generateFingerprint(): Promise<string | null> {\n if (typeof window === 'undefined') {\n this.logger.warn('FingerprintJS requires a browser — skipping');\n return null;\n }\n\n try {\n this.logger.log('Loading FingerprintJS...');\n\n const FingerprintJS = await import(FP_PROXY_URL);\n const fp = await FingerprintJS.load({\n endpoint: [FP_PROXY_ENDPOINT, FingerprintJS.defaultEndpoint],\n });\n\n const result: FingerprintResult = await fp.get();\n this.fingerprint = result.visitorId;\n\n this.writeStorage(this.fingerprint);\n\n this.logger.log('Fingerprint generated:', this.fingerprint);\n return this.fingerprint;\n } catch (error) {\n this.logger.warn('Fingerprint generation failed:', error);\n return null;\n }\n }\n\n getCachedFingerprint(): string | null {\n return this.fingerprint;\n }\n\n clear() {\n this.fingerprint = null;\n this.promise = null;\n this.removeStorage();\n }\n\n private readStorage(): string | null {\n try {\n return typeof window !== 'undefined'\n ? localStorage.getItem(STORAGE_KEY)\n : null;\n } catch {\n return null;\n }\n }\n\n private writeStorage(value: string) {\n try {\n if (typeof window !== 'undefined') {\n localStorage.setItem(STORAGE_KEY, value);\n }\n } catch {\n this.logger.warn('Failed to persist fingerprint to localStorage');\n }\n }\n\n private removeStorage() {\n try {\n if (typeof window !== 'undefined') {\n localStorage.removeItem(STORAGE_KEY);\n }\n } catch {\n // Ignore storage errors on cleanup\n }\n }\n}\n","import type {\n ThredConfig,\n PageViewPayload,\n EnrichPayload,\n} from '../types';\nimport { Logger } from '../utils/logger';\n\nexport class ThredAPI {\n private baseUrl: string;\n private browserKey: string;\n private logger: Logger;\n\n constructor(baseUrl: string, browserKey: string, logger: Logger) {\n this.baseUrl = baseUrl;\n this.browserKey = browserKey;\n this.logger = logger;\n }\n\n /**\n * Fetch configuration from API\n */\n async fetchConfig(fingerprint: string): Promise<ThredConfig | null> {\n try {\n const url = `${this.baseUrl}/config?fingerprint=${encodeURIComponent(fingerprint)}&browserKey=${encodeURIComponent(this.browserKey)}`;\n this.logger.log('Fetching config from:', url);\n\n const response = await fetch(url, {\n method: 'GET',\n headers: {\n Accept: 'application/json',\n },\n });\n\n if (!response.ok) {\n throw new Error(`Config request failed: ${response.status}`);\n }\n\n const config = await response.json();\n this.logger.log('Config received:', config);\n\n return config;\n } catch (error) {\n this.logger.warn('Failed to fetch config:', error);\n return null;\n }\n }\n\n /**\n * Send page view event\n */\n async trackPageView(payload: PageViewPayload): Promise<void> {\n try {\n const url = `${this.baseUrl}/events/page-view?browserKey=${encodeURIComponent(this.browserKey)}`;\n this.logger.log('Tracking page view:', url);\n\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(payload),\n keepalive: true,\n });\n\n if (!response.ok) {\n throw new Error(`Page view request failed: ${response.status}`);\n }\n\n this.logger.log('Page view tracked successfully');\n } catch (error) {\n this.logger.warn('Failed to track page view:', error);\n }\n }\n\n /**\n * Send lead enrichment data\n */\n async enrichLead(payload: EnrichPayload): Promise<void> {\n try {\n const url = `${this.baseUrl}/customers/enrich?browserKey=${encodeURIComponent(this.browserKey)}`;\n this.logger.log('Enriching lead:', url);\n\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(payload),\n keepalive: true,\n });\n\n if (!response.ok) {\n throw new Error(`Enrich request failed: ${response.status}`);\n }\n\n this.logger.log('Lead enriched successfully');\n } catch (error) {\n this.logger.warn('Failed to enrich lead:', error);\n }\n }\n}\n","import type { ThredConfig, LeadData } from '../types';\nimport { Logger } from '../utils/logger';\nimport { isFromChatGPT } from '../utils/detector';\nimport { ThredAPI } from './api';\nimport { FingerprintManager } from './fingerprint';\n\nexport class Tracker {\n private api: ThredAPI;\n private fingerprint: FingerprintManager;\n private logger: Logger;\n private config: ThredConfig | null = null;\n private formObserver: MutationObserver | null = null;\n private lastTrackedUrl: string | null = null;\n private popstateHandler: (() => void) | null = null;\n private originalPushState: typeof history.pushState | null = null;\n private originalReplaceState: typeof history.replaceState | null = null;\n\n constructor(\n api: ThredAPI,\n fingerprint: FingerprintManager,\n logger: Logger\n ) {\n this.api = api;\n this.fingerprint = fingerprint;\n this.logger = logger;\n }\n\n /**\n * Initialize tracker with config\n */\n async init(): Promise<void> {\n // Get fingerprint\n const fingerprint = await this.fingerprint.getFingerprint();\n if (!fingerprint) {\n this.logger.warn('Cannot initialize tracker without fingerprint');\n return;\n }\n this.config = await this.api.fetchConfig(fingerprint);\n\n if (!this.config?.enabled) {\n this.logger.log('Tracking disabled by config');\n return;\n }\n\n if (!this.config.hasChatSession && !isFromChatGPT()) {\n this.logger.log('No chat session for this fingerprint - exiting');\n return;\n }\n\n // Track initial page view\n if (isFromChatGPT()) {\n await this.trackPageView();\n } else {\n this.logger.log('UTM not from ChatGPT - skipping page view');\n }\n\n // Track SPA route changes\n this.setupRouteTracking();\n\n // Setup form tracking\n this.setupFormTracking();\n }\n\n /**\n * Track page view event\n */\n async trackPageView(): Promise<void> {\n if (typeof window === 'undefined') return;\n\n const fp = await this.fingerprint.getFingerprint();\n\n if (!fp) {\n this.logger.warn('Cannot track page view without fingerprint');\n return;\n }\n\n await this.api.trackPageView({\n event: 'page_view',\n data: {\n url: window.location.href,\n },\n fingerprint: fp,\n });\n }\n\n /**\n * Track form submission and enrich lead\n */\n async trackFormSubmit(formData: FormData): Promise<void> {\n if (!this.config || !this.config.emailId || !this.config.nameId) {\n this.logger.warn('Cannot track form - no config loaded');\n return;\n }\n\n const email = formData.get(this.config.emailId)?.toString().trim();\n const name = formData.get(this.config.nameId)?.toString().trim();\n\n let company: string | undefined = undefined;\n if (this.config.companyId) {\n company = formData.get(this.config.companyId)?.toString().trim();\n }\n\n this.logger.log('Form data extracted:', { email, name, company });\n\n if (!email || !name) {\n this.logger.warn('Missing required fields (email, name)');\n return;\n }\n\n await this.identify({\n name,\n email,\n company: company,\n discovery: false,\n });\n }\n\n /**\n * Identify user and enrich lead data\n */\n async identify(leadData: LeadData): Promise<void> {\n const fp = await this.fingerprint.getFingerprint();\n\n if (!fp) {\n this.logger.warn('Cannot identify without fingerprint');\n return;\n }\n\n await this.api.enrichLead({\n fingerprint: fp,\n leadData,\n });\n }\n\n /**\n * Track page views on SPA route changes by patching pushState/replaceState\n * and listening for popstate.\n */\n private setupRouteTracking(): void {\n if (typeof window === 'undefined') return;\n\n this.lastTrackedUrl = window.location.href;\n\n const onRouteChange = () => {\n const currentUrl = window.location.href;\n if (currentUrl === this.lastTrackedUrl) return;\n this.lastTrackedUrl = currentUrl;\n this.logger.log('Route change detected:', currentUrl);\n this.trackPageView();\n };\n\n this.popstateHandler = onRouteChange;\n window.addEventListener('popstate', this.popstateHandler);\n\n this.originalPushState = history.pushState.bind(history);\n this.originalReplaceState = history.replaceState.bind(history);\n\n history.pushState = (...args: Parameters<typeof history.pushState>) => {\n this.originalPushState!(...args);\n onRouteChange();\n };\n\n history.replaceState = (...args: Parameters<typeof history.replaceState>) => {\n this.originalReplaceState!(...args);\n onRouteChange();\n };\n }\n\n /**\n * Setup automatic form tracking\n */\n private setupFormTracking(): void {\n if (!this.config || typeof document === 'undefined') {\n this.logger.warn('Cannot track form - no config or document');\n return;\n }\n\n if (this.config.type === 'hosted') {\n const hostedUrlBase = this.config.hostedUrlBase;\n if (!hostedUrlBase) {\n this.logger.warn('Cannot track form - no hosted URL base');\n return;\n }\n\n // Inject utm_fp into all existing matching links\n this.injectFingerprintIntoLinks(document.body, hostedUrlBase);\n\n // Watch for dynamically added links and inject utm_fp as they appear\n this.formObserver = new MutationObserver((mutations) => {\n for (const mutation of mutations) {\n for (const node of Array.from(mutation.addedNodes)) {\n if (!(node instanceof HTMLElement)) continue;\n\n // Check if the added node itself is a matching link\n if (node.tagName === 'A') {\n this.injectFingerprintIntoLink(node as HTMLAnchorElement, hostedUrlBase);\n }\n\n // Check any child links within the added node\n this.injectFingerprintIntoLinks(node, hostedUrlBase);\n }\n }\n });\n\n this.formObserver.observe(document.body, {\n childList: true,\n subtree: true,\n });\n\n // Fallback: intercept clicks for links that may have had their href changed dynamically\n document.addEventListener('click', (e) => {\n const target = (e.target as HTMLElement).closest('a');\n if (!target) return;\n\n const href = target.getAttribute('href');\n if (!href || !href.includes(hostedUrlBase)) return;\n\n // Already tagged — skip\n if (href.includes('utm_fp=')) return;\n\n this.injectFingerprintIntoLink(target as HTMLAnchorElement, hostedUrlBase);\n }, { capture: true });\n\n return;\n }\n else if (this.config.type === 'custom') {\n const attachFormListener = () => {\n if (!this.config || !this.config.formId) {\n this.logger.warn('Cannot track form - no form ID');\n return;\n }\n const form = document.getElementById(this.config!.formId);\n if (!form) {\n this.logger.log('Form not found:', this.config!.formId);\n return;\n }\n\n const formElement = form as HTMLFormElement;\n\n // Check if already tracked\n if (formElement.dataset.thredTracked) {\n return;\n }\n\n this.logger.log('Attaching listener to form:', this.config!.formId);\n\n formElement.addEventListener(\n 'submit',\n () => {\n const formData = new FormData(formElement);\n this.trackFormSubmit(formData);\n },\n { capture: true }\n );\n\n formElement.dataset.thredTracked = 'true';\n };\n\n // Attach immediately if form exists\n attachFormListener();\n\n // Watch for dynamic forms\n this.formObserver = new MutationObserver(() => {\n attachFormListener();\n });\n\n this.formObserver.observe(document.body, {\n childList: true,\n subtree: true,\n });\n }\n }\n\n /**\n * Inject utm_fp into all matching links within a root element\n */\n private injectFingerprintIntoLinks(root: HTMLElement, hostedUrlBase: string): void {\n const links = root.querySelectorAll<HTMLAnchorElement>('a[href]');\n for (const link of Array.from(links)) {\n this.injectFingerprintIntoLink(link, hostedUrlBase);\n }\n }\n\n /**\n * Inject utm_fp into a single link if it matches hostedUrlBase\n */\n private injectFingerprintIntoLink(link: HTMLAnchorElement, hostedUrlBase: string): void {\n const href = link.getAttribute('href');\n if (!href || !href.includes(hostedUrlBase)) return;\n\n // Already tagged — skip\n if (href.includes('utm_fp=')) return;\n\n const fp = this.fingerprint.getCachedFingerprint();\n if (!fp) {\n this.logger.warn('Cannot inject utm_fp - no cached fingerprint');\n return;\n }\n\n try {\n const url = new URL(href, window.location.origin);\n url.searchParams.set('utm_fp', fp);\n link.setAttribute('href', url.toString());\n this.logger.log('Injected utm_fp into link:', url.toString());\n } catch (err) {\n this.logger.warn('Failed to parse URL:', href, err);\n }\n }\n\n /**\n * Cleanup tracker\n */\n destroy(): void {\n if (this.formObserver) {\n this.formObserver.disconnect();\n this.formObserver = null;\n }\n\n if (typeof window === 'undefined') return;\n\n if (this.popstateHandler) {\n window.removeEventListener('popstate', this.popstateHandler);\n this.popstateHandler = null;\n }\n\n if (this.originalPushState) {\n history.pushState = this.originalPushState;\n this.originalPushState = null;\n }\n\n if (this.originalReplaceState) {\n history.replaceState = this.originalReplaceState;\n this.originalReplaceState = null;\n }\n }\n}\n","/**\n * Thred SDK - Browser tracking and lead enrichment\n */\n\nimport type { ThredOptions, ThredSDK as IThredSDK, LeadData } from './types';\nimport { Logger } from './utils/logger';\nimport { isFromChatGPT, getBrowserKeyFromScript } from './utils/detector';\nimport { FingerprintManager } from './core/fingerprint';\nimport { ThredAPI } from './core/api';\nimport { Tracker } from './core/tracker';\n\nexport * from './types';\n\nconst DEFAULT_BASE_URL = 'https://api.thred.dev/v1';\n\nexport class ThredSDK implements IThredSDK {\n private options: ThredOptions;\n private logger: Logger;\n private fingerprint: FingerprintManager;\n private api: ThredAPI;\n private tracker: Tracker;\n private initialized = false;\n\n constructor(options: ThredOptions) {\n this.options = {\n baseUrl: DEFAULT_BASE_URL,\n debug: false, // Set to true for development\n autoInit: true,\n ...options,\n };\n\n this.logger = new Logger(this.options.debug);\n this.fingerprint = new FingerprintManager(this.logger);\n this.api = new ThredAPI(\n this.options.baseUrl!,\n this.options.browserKey,\n this.logger\n );\n this.tracker = new Tracker(this.api, this.fingerprint, this.logger);\n\n if (this.options.autoInit) {\n this.init();\n }\n }\n\n /**\n * Initialize the SDK\n */\n async init(): Promise<void> {\n if (typeof window === 'undefined') {\n this.logger.warn('SDK requires a browser environment — skipping init');\n return;\n }\n\n if (this.initialized) {\n this.logger.warn('SDK already initialized');\n return;\n }\n\n this.logger.log('Initializing Thred SDK...');\n\n // Generate fingerprint\n await this.fingerprint.getFingerprint();\n\n // Initialize tracker\n await this.tracker.init();\n\n this.initialized = true;\n this.logger.log('SDK initialized successfully');\n }\n\n /**\n * Check if visitor is from ChatGPT\n */\n isFromChatGPT(): boolean {\n return isFromChatGPT();\n }\n\n /**\n * Track page view\n */\n async trackPageView(): Promise<void> {\n await this.tracker.trackPageView();\n }\n\n /**\n * Track form submission\n */\n async trackFormSubmit(formData: FormData): Promise<void> {\n await this.tracker.trackFormSubmit(formData);\n }\n\n /**\n * Identify user with lead data\n */\n async identify(leadData: LeadData): Promise<void> {\n await this.tracker.identify(leadData);\n }\n\n /**\n * Get current fingerprint\n */\n getFingerprint(): string | null {\n return this.fingerprint.getCachedFingerprint();\n }\n\n /**\n * Destroy SDK instance and cleanup\n */\n destroy(): void {\n this.tracker.destroy();\n this.fingerprint.clear();\n this.initialized = false;\n this.logger.log('SDK destroyed');\n }\n}\n\n/**\n * Auto-initialize if loaded as script tag with browserKey\n */\nif (typeof window !== 'undefined') {\n const browserKey = getBrowserKeyFromScript();\n if (browserKey) {\n const sdk = new ThredSDK({ browserKey });\n (window as any).Thred = sdk;\n }\n}\n\nexport default ThredSDK;\n"],"names":[],"mappings":"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","x_google_ignoreList":[0]}
|
package/dist/thred.umd.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
!function(t,i){"object"==typeof exports&&"undefined"!=typeof module?i(exports):"function"==typeof define&&define.amd?define(["exports"],i):i((t="undefined"!=typeof globalThis?globalThis:t||self).Thred={})}(this,function(t){"use strict";function i(t,i,e,n){return new(e||(e=Promise))(function(r,o){function s(t){try{g(n.next(t))}catch(t){o(t)}}function a(t){try{g(n.throw(t))}catch(t){o(t)}}function g(t){var i;t.done?r(t.value):(i=t.value,i instanceof e?i:new e(function(t){t(i)})).then(s,a)}g((n=n.apply(t,i||[])).next())})}"function"==typeof SuppressedError&&SuppressedError;class e{constructor(t=!1,i="[Thred]"){this.debug=t,this.prefix=i}log(...t){this.debug&&console.log(this.prefix,...t)}warn(...t){this.debug&&console.warn(this.prefix,...t)}error(...t){console.error(this.prefix,...t)}}function n(){var t;if("undefined"==typeof window)return!1;const i=(null===(t=new URLSearchParams(window.location.search).get("utm_source"))||void 0===t?void 0:t.toLowerCase())||"",e=document.referrer.toLowerCase(),n=e.includes("chat.openai.com")||e.includes("chatgpt.com");return"chatgpt"===i||i.includes("chatgpt")||"chat.openai"===i||"openai"===i||n}class r{constructor(t){this.fingerprint=null,this.promise=null,this.logger=t}getFingerprint(){return i(this,void 0,void 0,function*(){return this.fingerprint?(this.logger.log("Using cached fingerprint:",this.fingerprint),this.fingerprint):this.promise?this.promise:"undefined"!=typeof window&&window.thredFingerprint?(this.fingerprint=window.thredFingerprint,this.logger.log("Using global fingerprint:",this.fingerprint),this.fingerprint):(this.promise=this.generateFingerprint(),this.promise)})}generateFingerprint(){return i(this,void 0,void 0,function*(){if("undefined"==typeof window)return this.logger.warn("FingerprintJS requires a browser — skipping"),null;try{this.logger.log("Loading FingerprintJS...");const t=yield import("https://thredproxy.com/35ZCuyzokuT1YGd8/Hm7KPMHUZ4duyPRj?apiKey=iyqKVLQt2560EQUyjfxa"),i=yield t.load({endpoint:["https://thredproxy.com/35ZCuyzokuT1YGd8/qbWl4nqUSCIDTor4",t.defaultEndpoint]}),e=yield i.get();return this.fingerprint=e.visitorId,"undefined"!=typeof window&&(window.thredFingerprint=this.fingerprint),this.logger.log("Fingerprint generated:",this.fingerprint),this.fingerprint}catch(t){return this.logger.warn("Fingerprint generation failed:",t),null}})}getCachedFingerprint(){return this.fingerprint}clear(){this.fingerprint=null,this.promise=null,"undefined"!=typeof window&&delete window.thredFingerprint}}class o{constructor(t,i,e){this.baseUrl=t,this.browserKey=i,this.logger=e}fetchConfig(t){return i(this,void 0,void 0,function*(){try{const i=`${this.baseUrl}/config?fingerprint=${encodeURIComponent(t)}&browserKey=${encodeURIComponent(this.browserKey)}`;this.logger.log("Fetching config from:",i);const e=yield fetch(i,{method:"GET",headers:{Accept:"application/json"}});if(!e.ok)throw new Error(`Config request failed: ${e.status}`);const n=yield e.json();return this.logger.log("Config received:",n),n}catch(t){return this.logger.warn("Failed to fetch config:",t),null}})}trackPageView(t){return i(this,void 0,void 0,function*(){try{const i=`${this.baseUrl}/events/page-view?browserKey=${encodeURIComponent(this.browserKey)}`;this.logger.log("Tracking page view:",i);const e=yield fetch(i,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t),keepalive:!0});if(!e.ok)throw new Error(`Page view request failed: ${e.status}`);this.logger.log("Page view tracked successfully")}catch(t){this.logger.warn("Failed to track page view:",t)}})}enrichLead(t){return i(this,void 0,void 0,function*(){try{const i=`${this.baseUrl}/customers/enrich?browserKey=${encodeURIComponent(this.browserKey)}`;this.logger.log("Enriching lead:",i);const e=yield fetch(i,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t),keepalive:!0});if(!e.ok)throw new Error(`Enrich request failed: ${e.status}`);this.logger.log("Lead enriched successfully")}catch(t){this.logger.warn("Failed to enrich lead:",t)}})}}class s{constructor(t,i,e){this.config=null,this.formObserver=null,this.lastTrackedUrl=null,this.popstateHandler=null,this.originalPushState=null,this.originalReplaceState=null,this.api=t,this.fingerprint=i,this.logger=e}init(){return i(this,void 0,void 0,function*(){var t;const i=yield this.fingerprint.getFingerprint();i?(this.config=yield this.api.fetchConfig(i),(null===(t=this.config)||void 0===t?void 0:t.enabled)?this.config.hasChatSession||n()?(n()?yield this.trackPageView():this.logger.log("UTM not from ChatGPT - skipping page view"),this.setupRouteTracking(),this.setupFormTracking()):this.logger.log("No chat session for this fingerprint - exiting"):this.logger.log("Tracking disabled by config")):this.logger.warn("Cannot initialize tracker without fingerprint")})}trackPageView(){return i(this,void 0,void 0,function*(){if("undefined"==typeof window)return;const t=yield this.fingerprint.getFingerprint();t?yield this.api.trackPageView({event:"page_view",data:{url:window.location.href},fingerprint:t}):this.logger.warn("Cannot track page view without fingerprint")})}trackFormSubmit(t){return i(this,void 0,void 0,function*(){var i,e,n;if(!this.config||!this.config.emailId||!this.config.nameId)return void this.logger.warn("Cannot track form - no config loaded");const r=null===(i=t.get(this.config.emailId))||void 0===i?void 0:i.toString().trim(),o=null===(e=t.get(this.config.nameId))||void 0===e?void 0:e.toString().trim();let s;this.config.companyId&&(s=null===(n=t.get(this.config.companyId))||void 0===n?void 0:n.toString().trim()),this.logger.log("Form data extracted:",{email:r,name:o,company:s}),r&&o?yield this.identify({name:o,email:r,company:s,discovery:!1}):this.logger.warn("Missing required fields (email, name)")})}identify(t){return i(this,void 0,void 0,function*(){const i=yield this.fingerprint.getFingerprint();i?yield this.api.enrichLead({fingerprint:i,leadData:t}):this.logger.warn("Cannot identify without fingerprint")})}setupRouteTracking(){if("undefined"==typeof window)return;this.lastTrackedUrl=window.location.href;const t=()=>{const t=window.location.href;t!==this.lastTrackedUrl&&(this.lastTrackedUrl=t,this.logger.log("Route change detected:",t),this.trackPageView())};this.popstateHandler=t,window.addEventListener("popstate",this.popstateHandler),this.originalPushState=history.pushState.bind(history),this.originalReplaceState=history.replaceState.bind(history),history.pushState=(...i)=>{this.originalPushState(...i),t()},history.replaceState=(...i)=>{this.originalReplaceState(...i),t()}}setupFormTracking(){if(this.config&&"undefined"!=typeof document){if("hosted"===this.config.type){const t=this.config.hostedUrlBase;return t?(this.injectFingerprintIntoLinks(document.body,t),this.formObserver=new MutationObserver(i=>{for(const e of i)for(const i of Array.from(e.addedNodes))i instanceof HTMLElement&&("A"===i.tagName&&this.injectFingerprintIntoLink(i,t),this.injectFingerprintIntoLinks(i,t))}),this.formObserver.observe(document.body,{childList:!0,subtree:!0}),void document.addEventListener("click",i=>{const e=i.target.closest("a");if(!e)return;const n=e.getAttribute("href");n&&n.includes(t)&&(n.includes("utm_fp=")||this.injectFingerprintIntoLink(e,t))},{capture:!0})):void this.logger.warn("Cannot track form - no hosted URL base")}if("custom"===this.config.type){const t=()=>{if(!this.config||!this.config.formId)return void this.logger.warn("Cannot track form - no form ID");const t=document.getElementById(this.config.formId);if(!t)return void this.logger.log("Form not found:",this.config.formId);const i=t;i.dataset.thredTracked||(this.logger.log("Attaching listener to form:",this.config.formId),i.addEventListener("submit",()=>{const t=new FormData(i);this.trackFormSubmit(t)},{capture:!0}),i.dataset.thredTracked="true")};t(),this.formObserver=new MutationObserver(()=>{t()}),this.formObserver.observe(document.body,{childList:!0,subtree:!0})}}else this.logger.warn("Cannot track form - no config or document")}injectFingerprintIntoLinks(t,i){const e=t.querySelectorAll("a[href]");for(const t of Array.from(e))this.injectFingerprintIntoLink(t,i)}injectFingerprintIntoLink(t,i){const e=t.getAttribute("href");if(!e||!e.includes(i))return;if(e.includes("utm_fp="))return;const n=this.fingerprint.getCachedFingerprint();if(n)try{const i=new URL(e,window.location.origin);i.searchParams.set("utm_fp",n),t.setAttribute("href",i.toString()),this.logger.log("Injected utm_fp into link:",i.toString())}catch(t){this.logger.warn("Failed to parse URL:",e,t)}else this.logger.warn("Cannot inject utm_fp - no cached fingerprint")}destroy(){this.formObserver&&(this.formObserver.disconnect(),this.formObserver=null),"undefined"!=typeof window&&(this.popstateHandler&&(window.removeEventListener("popstate",this.popstateHandler),this.popstateHandler=null),this.originalPushState&&(history.pushState=this.originalPushState,this.originalPushState=null),this.originalReplaceState&&(history.replaceState=this.originalReplaceState,this.originalReplaceState=null))}}class a{constructor(t){this.initialized=!1,this.options=Object.assign({baseUrl:"https://api.thred.dev/v1",debug:!0,autoInit:!0},t),this.logger=new e(this.options.debug),this.fingerprint=new r(this.logger),this.api=new o(this.options.baseUrl,this.options.browserKey,this.logger),this.tracker=new s(this.api,this.fingerprint,this.logger),this.options.autoInit&&this.init()}init(){return i(this,void 0,void 0,function*(){"undefined"!=typeof window?this.initialized?this.logger.warn("SDK already initialized"):(this.logger.log("Initializing Thred SDK..."),yield this.fingerprint.getFingerprint(),yield this.tracker.init(),this.initialized=!0,this.logger.log("SDK initialized successfully")):this.logger.warn("SDK requires a browser environment — skipping init")})}isFromChatGPT(){return n()}trackPageView(){return i(this,void 0,void 0,function*(){yield this.tracker.trackPageView()})}trackFormSubmit(t){return i(this,void 0,void 0,function*(){yield this.tracker.trackFormSubmit(t)})}identify(t){return i(this,void 0,void 0,function*(){yield this.tracker.identify(t)})}getFingerprint(){return this.fingerprint.getCachedFingerprint()}destroy(){this.tracker.destroy(),this.fingerprint.clear(),this.initialized=!1,this.logger.log("SDK destroyed")}}if("undefined"!=typeof window){const t=function(){if("undefined"==typeof window||"undefined"==typeof document)return null;const t=document.getElementsByTagName("script");for(const i of Array.from(t))if(i.src.includes("thred"))try{return new URL(i.src).searchParams.get("browserKey")}catch(t){}return null}();if(t){const i=new a({browserKey:t});window.Thred=i}}t.ThredSDK=a,t.default=a,Object.defineProperty(t,"__esModule",{value:!0})});
|
|
1
|
+
!function(t,i){"object"==typeof exports&&"undefined"!=typeof module?i(exports):"function"==typeof define&&define.amd?define(["exports"],i):i((t="undefined"!=typeof globalThis?globalThis:t||self).Thred={})}(this,function(t){"use strict";function i(t,i,e,r){return new(e||(e=Promise))(function(n,o){function s(t){try{g(r.next(t))}catch(t){o(t)}}function a(t){try{g(r.throw(t))}catch(t){o(t)}}function g(t){var i;t.done?n(t.value):(i=t.value,i instanceof e?i:new e(function(t){t(i)})).then(s,a)}g((r=r.apply(t,i||[])).next())})}"function"==typeof SuppressedError&&SuppressedError;class e{constructor(t=!1,i="[Thred]"){this.debug=t,this.prefix=i}log(...t){this.debug&&console.log(this.prefix,...t)}warn(...t){this.debug&&console.warn(this.prefix,...t)}error(...t){console.error(this.prefix,...t)}}function r(){var t;if("undefined"==typeof window)return!1;const i=(null===(t=new URLSearchParams(window.location.search).get("utm_source"))||void 0===t?void 0:t.toLowerCase())||"",e=document.referrer.toLowerCase(),r=e.includes("chat.openai.com")||e.includes("chatgpt.com");return"chatgpt"===i||i.includes("chatgpt")||"chat.openai"===i||"openai"===i||r}const n="thred_fingerprint";class o{constructor(t){this.fingerprint=null,this.promise=null,this.logger=t}getFingerprint(){return i(this,void 0,void 0,function*(){if(this.fingerprint)return this.logger.log("Using cached fingerprint:",this.fingerprint),this.fingerprint;if(this.promise)return this.promise;const t=this.readStorage();return t?(this.fingerprint=t,this.logger.log("Using stored fingerprint:",this.fingerprint),this.fingerprint):(this.promise=this.generateFingerprint(),this.promise)})}generateFingerprint(){return i(this,void 0,void 0,function*(){if("undefined"==typeof window)return this.logger.warn("FingerprintJS requires a browser — skipping"),null;try{this.logger.log("Loading FingerprintJS...");const t=yield import("https://thredproxy.com/35ZCuyzokuT1YGd8/Hm7KPMHUZ4duyPRj?apiKey=iyqKVLQt2560EQUyjfxa"),i=yield t.load({endpoint:["https://thredproxy.com/35ZCuyzokuT1YGd8/qbWl4nqUSCIDTor4",t.defaultEndpoint]}),e=yield i.get();return this.fingerprint=e.visitorId,this.writeStorage(this.fingerprint),this.logger.log("Fingerprint generated:",this.fingerprint),this.fingerprint}catch(t){return this.logger.warn("Fingerprint generation failed:",t),null}})}getCachedFingerprint(){return this.fingerprint}clear(){this.fingerprint=null,this.promise=null,this.removeStorage()}readStorage(){try{return"undefined"!=typeof window?localStorage.getItem(n):null}catch(t){return null}}writeStorage(t){try{"undefined"!=typeof window&&localStorage.setItem(n,t)}catch(t){this.logger.warn("Failed to persist fingerprint to localStorage")}}removeStorage(){try{"undefined"!=typeof window&&localStorage.removeItem(n)}catch(t){}}}class s{constructor(t,i,e){this.baseUrl=t,this.browserKey=i,this.logger=e}fetchConfig(t){return i(this,void 0,void 0,function*(){try{const i=`${this.baseUrl}/config?fingerprint=${encodeURIComponent(t)}&browserKey=${encodeURIComponent(this.browserKey)}`;this.logger.log("Fetching config from:",i);const e=yield fetch(i,{method:"GET",headers:{Accept:"application/json"}});if(!e.ok)throw new Error(`Config request failed: ${e.status}`);const r=yield e.json();return this.logger.log("Config received:",r),r}catch(t){return this.logger.warn("Failed to fetch config:",t),null}})}trackPageView(t){return i(this,void 0,void 0,function*(){try{const i=`${this.baseUrl}/events/page-view?browserKey=${encodeURIComponent(this.browserKey)}`;this.logger.log("Tracking page view:",i);const e=yield fetch(i,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t),keepalive:!0});if(!e.ok)throw new Error(`Page view request failed: ${e.status}`);this.logger.log("Page view tracked successfully")}catch(t){this.logger.warn("Failed to track page view:",t)}})}enrichLead(t){return i(this,void 0,void 0,function*(){try{const i=`${this.baseUrl}/customers/enrich?browserKey=${encodeURIComponent(this.browserKey)}`;this.logger.log("Enriching lead:",i);const e=yield fetch(i,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t),keepalive:!0});if(!e.ok)throw new Error(`Enrich request failed: ${e.status}`);this.logger.log("Lead enriched successfully")}catch(t){this.logger.warn("Failed to enrich lead:",t)}})}}class a{constructor(t,i,e){this.config=null,this.formObserver=null,this.lastTrackedUrl=null,this.popstateHandler=null,this.originalPushState=null,this.originalReplaceState=null,this.api=t,this.fingerprint=i,this.logger=e}init(){return i(this,void 0,void 0,function*(){var t;const i=yield this.fingerprint.getFingerprint();i?(this.config=yield this.api.fetchConfig(i),(null===(t=this.config)||void 0===t?void 0:t.enabled)?this.config.hasChatSession||r()?(r()?yield this.trackPageView():this.logger.log("UTM not from ChatGPT - skipping page view"),this.setupRouteTracking(),this.setupFormTracking()):this.logger.log("No chat session for this fingerprint - exiting"):this.logger.log("Tracking disabled by config")):this.logger.warn("Cannot initialize tracker without fingerprint")})}trackPageView(){return i(this,void 0,void 0,function*(){if("undefined"==typeof window)return;const t=yield this.fingerprint.getFingerprint();t?yield this.api.trackPageView({event:"page_view",data:{url:window.location.href},fingerprint:t}):this.logger.warn("Cannot track page view without fingerprint")})}trackFormSubmit(t){return i(this,void 0,void 0,function*(){var i,e,r;if(!this.config||!this.config.emailId||!this.config.nameId)return void this.logger.warn("Cannot track form - no config loaded");const n=null===(i=t.get(this.config.emailId))||void 0===i?void 0:i.toString().trim(),o=null===(e=t.get(this.config.nameId))||void 0===e?void 0:e.toString().trim();let s;this.config.companyId&&(s=null===(r=t.get(this.config.companyId))||void 0===r?void 0:r.toString().trim()),this.logger.log("Form data extracted:",{email:n,name:o,company:s}),n&&o?yield this.identify({name:o,email:n,company:s,discovery:!1}):this.logger.warn("Missing required fields (email, name)")})}identify(t){return i(this,void 0,void 0,function*(){const i=yield this.fingerprint.getFingerprint();i?yield this.api.enrichLead({fingerprint:i,leadData:t}):this.logger.warn("Cannot identify without fingerprint")})}setupRouteTracking(){if("undefined"==typeof window)return;this.lastTrackedUrl=window.location.href;const t=()=>{const t=window.location.href;t!==this.lastTrackedUrl&&(this.lastTrackedUrl=t,this.logger.log("Route change detected:",t),this.trackPageView())};this.popstateHandler=t,window.addEventListener("popstate",this.popstateHandler),this.originalPushState=history.pushState.bind(history),this.originalReplaceState=history.replaceState.bind(history),history.pushState=(...i)=>{this.originalPushState(...i),t()},history.replaceState=(...i)=>{this.originalReplaceState(...i),t()}}setupFormTracking(){if(this.config&&"undefined"!=typeof document){if("hosted"===this.config.type){const t=this.config.hostedUrlBase;return t?(this.injectFingerprintIntoLinks(document.body,t),this.formObserver=new MutationObserver(i=>{for(const e of i)for(const i of Array.from(e.addedNodes))i instanceof HTMLElement&&("A"===i.tagName&&this.injectFingerprintIntoLink(i,t),this.injectFingerprintIntoLinks(i,t))}),this.formObserver.observe(document.body,{childList:!0,subtree:!0}),void document.addEventListener("click",i=>{const e=i.target.closest("a");if(!e)return;const r=e.getAttribute("href");r&&r.includes(t)&&(r.includes("utm_fp=")||this.injectFingerprintIntoLink(e,t))},{capture:!0})):void this.logger.warn("Cannot track form - no hosted URL base")}if("custom"===this.config.type){const t=()=>{if(!this.config||!this.config.formId)return void this.logger.warn("Cannot track form - no form ID");const t=document.getElementById(this.config.formId);if(!t)return void this.logger.log("Form not found:",this.config.formId);const i=t;i.dataset.thredTracked||(this.logger.log("Attaching listener to form:",this.config.formId),i.addEventListener("submit",()=>{const t=new FormData(i);this.trackFormSubmit(t)},{capture:!0}),i.dataset.thredTracked="true")};t(),this.formObserver=new MutationObserver(()=>{t()}),this.formObserver.observe(document.body,{childList:!0,subtree:!0})}}else this.logger.warn("Cannot track form - no config or document")}injectFingerprintIntoLinks(t,i){const e=t.querySelectorAll("a[href]");for(const t of Array.from(e))this.injectFingerprintIntoLink(t,i)}injectFingerprintIntoLink(t,i){const e=t.getAttribute("href");if(!e||!e.includes(i))return;if(e.includes("utm_fp="))return;const r=this.fingerprint.getCachedFingerprint();if(r)try{const i=new URL(e,window.location.origin);i.searchParams.set("utm_fp",r),t.setAttribute("href",i.toString()),this.logger.log("Injected utm_fp into link:",i.toString())}catch(t){this.logger.warn("Failed to parse URL:",e,t)}else this.logger.warn("Cannot inject utm_fp - no cached fingerprint")}destroy(){this.formObserver&&(this.formObserver.disconnect(),this.formObserver=null),"undefined"!=typeof window&&(this.popstateHandler&&(window.removeEventListener("popstate",this.popstateHandler),this.popstateHandler=null),this.originalPushState&&(history.pushState=this.originalPushState,this.originalPushState=null),this.originalReplaceState&&(history.replaceState=this.originalReplaceState,this.originalReplaceState=null))}}class g{constructor(t){this.initialized=!1,this.options=Object.assign({baseUrl:"https://api.thred.dev/v1",debug:!1,autoInit:!0},t),this.logger=new e(this.options.debug),this.fingerprint=new o(this.logger),this.api=new s(this.options.baseUrl,this.options.browserKey,this.logger),this.tracker=new a(this.api,this.fingerprint,this.logger),this.options.autoInit&&this.init()}init(){return i(this,void 0,void 0,function*(){"undefined"!=typeof window?this.initialized?this.logger.warn("SDK already initialized"):(this.logger.log("Initializing Thred SDK..."),yield this.fingerprint.getFingerprint(),yield this.tracker.init(),this.initialized=!0,this.logger.log("SDK initialized successfully")):this.logger.warn("SDK requires a browser environment — skipping init")})}isFromChatGPT(){return r()}trackPageView(){return i(this,void 0,void 0,function*(){yield this.tracker.trackPageView()})}trackFormSubmit(t){return i(this,void 0,void 0,function*(){yield this.tracker.trackFormSubmit(t)})}identify(t){return i(this,void 0,void 0,function*(){yield this.tracker.identify(t)})}getFingerprint(){return this.fingerprint.getCachedFingerprint()}destroy(){this.tracker.destroy(),this.fingerprint.clear(),this.initialized=!1,this.logger.log("SDK destroyed")}}if("undefined"!=typeof window){const t=function(){if("undefined"==typeof window||"undefined"==typeof document)return null;const t=document.getElementsByTagName("script");for(const i of Array.from(t))if(i.src.includes("thred"))try{return new URL(i.src).searchParams.get("browserKey")}catch(t){}return null}();if(t){const i=new g({browserKey:t});window.Thred=i}}t.ThredSDK=g,t.default=g,Object.defineProperty(t,"__esModule",{value:!0})});
|
|
2
2
|
//# sourceMappingURL=thred.umd.js.map
|
package/dist/thred.umd.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"thred.umd.js","sources":["../node_modules/tslib/tslib.es6.js","../src/utils/logger.ts","../src/utils/detector.ts","../src/core/fingerprint.ts","../src/core/api.ts","../src/core/tracker.ts","../src/index.ts"],"sourcesContent":["/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n","/**\n * Simple logger utility\n */\nexport class Logger {\n private debug: boolean;\n private prefix: string;\n\n constructor(debug = false, prefix = '[Thred]') {\n this.debug = debug;\n this.prefix = prefix;\n }\n\n log(...args: unknown[]) {\n if (this.debug) {\n console.log(this.prefix, ...args);\n }\n }\n\n warn(...args: unknown[]) {\n if (this.debug) {\n console.warn(this.prefix, ...args);\n }\n }\n\n error(...args: unknown[]) {\n console.error(this.prefix, ...args);\n }\n}\n","/**\n * Detects if the visitor came from ChatGPT\n */\nexport function isFromChatGPT(): boolean {\n if (typeof window === 'undefined') return false;\n\n const params = new URLSearchParams(window.location.search);\n const utmSource = params.get('utm_source')?.toLowerCase() || '';\n const referrer = document.referrer.toLowerCase();\n\n const isChatGPTRef =\n referrer.includes('chat.openai.com') || referrer.includes('chatgpt.com');\n const isChatGPTUtm =\n utmSource === 'chatgpt' ||\n utmSource.includes('chatgpt') ||\n utmSource === 'chat.openai' ||\n utmSource === 'openai';\n\n return isChatGPTUtm || isChatGPTRef;\n}\n\n/**\n * Gets the browser key from script tag if present\n */\nexport function getBrowserKeyFromScript(): string | null {\n if (typeof window === 'undefined' || typeof document === 'undefined') {\n return null;\n }\n\n const scripts = document.getElementsByTagName('script');\n\n for (const script of Array.from(scripts)) {\n if (script.src.includes('thred')) {\n try {\n const url = new URL(script.src);\n return url.searchParams.get('browserKey');\n } catch {\n // Invalid URL\n }\n }\n }\n\n return null;\n}\n","import type { FingerprintResult } from '../types';\nimport { Logger } from '../utils/logger';\n\nconst FP_PROXY_URL =\n 'https://thredproxy.com/35ZCuyzokuT1YGd8/Hm7KPMHUZ4duyPRj?apiKey=iyqKVLQt2560EQUyjfxa';\nconst FP_PROXY_ENDPOINT =\n 'https://thredproxy.com/35ZCuyzokuT1YGd8/qbWl4nqUSCIDTor4';\n\nexport class FingerprintManager {\n private fingerprint: string | null = null;\n private logger: Logger;\n private promise: Promise<string | null> | null = null;\n\n constructor(logger: Logger) {\n this.logger = logger;\n }\n\n /**\n * Get or generate fingerprint\n */\n async getFingerprint(): Promise<string | null> {\n // Return cached fingerprint\n if (this.fingerprint) {\n this.logger.log('Using cached fingerprint:', this.fingerprint);\n return this.fingerprint;\n }\n\n // Return existing promise if already loading\n if (this.promise) {\n return this.promise;\n }\n\n // Check global window cache\n if (\n typeof window !== 'undefined' &&\n (window as any).thredFingerprint\n ) {\n this.fingerprint = (window as any).thredFingerprint;\n this.logger.log('Using global fingerprint:', this.fingerprint);\n return this.fingerprint;\n }\n\n // Generate new fingerprint\n this.promise = this.generateFingerprint();\n return this.promise;\n }\n\n private async generateFingerprint(): Promise<string | null> {\n if (typeof window === 'undefined') {\n this.logger.warn('FingerprintJS requires a browser — skipping');\n return null;\n }\n\n try {\n this.logger.log('Loading FingerprintJS...');\n\n const FingerprintJS = await import(FP_PROXY_URL);\n const fp = await FingerprintJS.load({\n endpoint: [FP_PROXY_ENDPOINT, FingerprintJS.defaultEndpoint],\n });\n\n const result: FingerprintResult = await fp.get();\n this.fingerprint = result.visitorId;\n\n // Cache globally\n if (typeof window !== 'undefined') {\n (window as any).thredFingerprint = this.fingerprint;\n }\n\n this.logger.log('Fingerprint generated:', this.fingerprint);\n return this.fingerprint;\n } catch (error) {\n this.logger.warn('Fingerprint generation failed:', error);\n return null;\n }\n }\n\n /**\n * Get cached fingerprint (synchronous)\n */\n getCachedFingerprint(): string | null {\n return this.fingerprint;\n }\n\n /**\n * Clear fingerprint cache\n */\n clear() {\n this.fingerprint = null;\n this.promise = null;\n if (typeof window !== 'undefined') {\n delete (window as any).thredFingerprint;\n }\n }\n}\n","import type {\n ThredConfig,\n PageViewPayload,\n EnrichPayload,\n} from '../types';\nimport { Logger } from '../utils/logger';\n\nexport class ThredAPI {\n private baseUrl: string;\n private browserKey: string;\n private logger: Logger;\n\n constructor(baseUrl: string, browserKey: string, logger: Logger) {\n this.baseUrl = baseUrl;\n this.browserKey = browserKey;\n this.logger = logger;\n }\n\n /**\n * Fetch configuration from API\n */\n async fetchConfig(fingerprint: string): Promise<ThredConfig | null> {\n try {\n const url = `${this.baseUrl}/config?fingerprint=${encodeURIComponent(fingerprint)}&browserKey=${encodeURIComponent(this.browserKey)}`;\n this.logger.log('Fetching config from:', url);\n\n const response = await fetch(url, {\n method: 'GET',\n headers: {\n Accept: 'application/json',\n },\n });\n\n if (!response.ok) {\n throw new Error(`Config request failed: ${response.status}`);\n }\n\n const config = await response.json();\n this.logger.log('Config received:', config);\n\n return config;\n } catch (error) {\n this.logger.warn('Failed to fetch config:', error);\n return null;\n }\n }\n\n /**\n * Send page view event\n */\n async trackPageView(payload: PageViewPayload): Promise<void> {\n try {\n const url = `${this.baseUrl}/events/page-view?browserKey=${encodeURIComponent(this.browserKey)}`;\n this.logger.log('Tracking page view:', url);\n\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(payload),\n keepalive: true,\n });\n\n if (!response.ok) {\n throw new Error(`Page view request failed: ${response.status}`);\n }\n\n this.logger.log('Page view tracked successfully');\n } catch (error) {\n this.logger.warn('Failed to track page view:', error);\n }\n }\n\n /**\n * Send lead enrichment data\n */\n async enrichLead(payload: EnrichPayload): Promise<void> {\n try {\n const url = `${this.baseUrl}/customers/enrich?browserKey=${encodeURIComponent(this.browserKey)}`;\n this.logger.log('Enriching lead:', url);\n\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(payload),\n keepalive: true,\n });\n\n if (!response.ok) {\n throw new Error(`Enrich request failed: ${response.status}`);\n }\n\n this.logger.log('Lead enriched successfully');\n } catch (error) {\n this.logger.warn('Failed to enrich lead:', error);\n }\n }\n}\n","import type { ThredConfig, LeadData } from '../types';\nimport { Logger } from '../utils/logger';\nimport { isFromChatGPT } from '../utils/detector';\nimport { ThredAPI } from './api';\nimport { FingerprintManager } from './fingerprint';\n\nexport class Tracker {\n private api: ThredAPI;\n private fingerprint: FingerprintManager;\n private logger: Logger;\n private config: ThredConfig | null = null;\n private formObserver: MutationObserver | null = null;\n private lastTrackedUrl: string | null = null;\n private popstateHandler: (() => void) | null = null;\n private originalPushState: typeof history.pushState | null = null;\n private originalReplaceState: typeof history.replaceState | null = null;\n\n constructor(\n api: ThredAPI,\n fingerprint: FingerprintManager,\n logger: Logger\n ) {\n this.api = api;\n this.fingerprint = fingerprint;\n this.logger = logger;\n }\n\n /**\n * Initialize tracker with config\n */\n async init(): Promise<void> {\n // Get fingerprint\n const fingerprint = await this.fingerprint.getFingerprint();\n if (!fingerprint) {\n this.logger.warn('Cannot initialize tracker without fingerprint');\n return;\n }\n this.config = await this.api.fetchConfig(fingerprint);\n\n if (!this.config?.enabled) {\n this.logger.log('Tracking disabled by config');\n return;\n }\n\n if (!this.config.hasChatSession && !isFromChatGPT()) {\n this.logger.log('No chat session for this fingerprint - exiting');\n return;\n }\n\n // Track initial page view\n if (isFromChatGPT()) {\n await this.trackPageView();\n } else {\n this.logger.log('UTM not from ChatGPT - skipping page view');\n }\n\n // Track SPA route changes\n this.setupRouteTracking();\n\n // Setup form tracking\n this.setupFormTracking();\n }\n\n /**\n * Track page view event\n */\n async trackPageView(): Promise<void> {\n if (typeof window === 'undefined') return;\n\n const fp = await this.fingerprint.getFingerprint();\n\n if (!fp) {\n this.logger.warn('Cannot track page view without fingerprint');\n return;\n }\n\n await this.api.trackPageView({\n event: 'page_view',\n data: {\n url: window.location.href,\n },\n fingerprint: fp,\n });\n }\n\n /**\n * Track form submission and enrich lead\n */\n async trackFormSubmit(formData: FormData): Promise<void> {\n if (!this.config || !this.config.emailId || !this.config.nameId) {\n this.logger.warn('Cannot track form - no config loaded');\n return;\n }\n\n const email = formData.get(this.config.emailId)?.toString().trim();\n const name = formData.get(this.config.nameId)?.toString().trim();\n\n let company: string | undefined = undefined;\n if (this.config.companyId) {\n company = formData.get(this.config.companyId)?.toString().trim();\n }\n\n this.logger.log('Form data extracted:', { email, name, company });\n\n if (!email || !name) {\n this.logger.warn('Missing required fields (email, name)');\n return;\n }\n\n await this.identify({\n name,\n email,\n company: company,\n discovery: false,\n });\n }\n\n /**\n * Identify user and enrich lead data\n */\n async identify(leadData: LeadData): Promise<void> {\n const fp = await this.fingerprint.getFingerprint();\n\n if (!fp) {\n this.logger.warn('Cannot identify without fingerprint');\n return;\n }\n\n await this.api.enrichLead({\n fingerprint: fp,\n leadData,\n });\n }\n\n /**\n * Track page views on SPA route changes by patching pushState/replaceState\n * and listening for popstate.\n */\n private setupRouteTracking(): void {\n if (typeof window === 'undefined') return;\n\n this.lastTrackedUrl = window.location.href;\n\n const onRouteChange = () => {\n const currentUrl = window.location.href;\n if (currentUrl === this.lastTrackedUrl) return;\n this.lastTrackedUrl = currentUrl;\n this.logger.log('Route change detected:', currentUrl);\n this.trackPageView();\n };\n\n this.popstateHandler = onRouteChange;\n window.addEventListener('popstate', this.popstateHandler);\n\n this.originalPushState = history.pushState.bind(history);\n this.originalReplaceState = history.replaceState.bind(history);\n\n history.pushState = (...args: Parameters<typeof history.pushState>) => {\n this.originalPushState!(...args);\n onRouteChange();\n };\n\n history.replaceState = (...args: Parameters<typeof history.replaceState>) => {\n this.originalReplaceState!(...args);\n onRouteChange();\n };\n }\n\n /**\n * Setup automatic form tracking\n */\n private setupFormTracking(): void {\n if (!this.config || typeof document === 'undefined') {\n this.logger.warn('Cannot track form - no config or document');\n return;\n }\n\n if (this.config.type === 'hosted') {\n const hostedUrlBase = this.config.hostedUrlBase;\n if (!hostedUrlBase) {\n this.logger.warn('Cannot track form - no hosted URL base');\n return;\n }\n\n // Inject utm_fp into all existing matching links\n this.injectFingerprintIntoLinks(document.body, hostedUrlBase);\n\n // Watch for dynamically added links and inject utm_fp as they appear\n this.formObserver = new MutationObserver((mutations) => {\n for (const mutation of mutations) {\n for (const node of Array.from(mutation.addedNodes)) {\n if (!(node instanceof HTMLElement)) continue;\n\n // Check if the added node itself is a matching link\n if (node.tagName === 'A') {\n this.injectFingerprintIntoLink(node as HTMLAnchorElement, hostedUrlBase);\n }\n\n // Check any child links within the added node\n this.injectFingerprintIntoLinks(node, hostedUrlBase);\n }\n }\n });\n\n this.formObserver.observe(document.body, {\n childList: true,\n subtree: true,\n });\n\n // Fallback: intercept clicks for links that may have had their href changed dynamically\n document.addEventListener('click', (e) => {\n const target = (e.target as HTMLElement).closest('a');\n if (!target) return;\n\n const href = target.getAttribute('href');\n if (!href || !href.includes(hostedUrlBase)) return;\n\n // Already tagged — skip\n if (href.includes('utm_fp=')) return;\n\n this.injectFingerprintIntoLink(target as HTMLAnchorElement, hostedUrlBase);\n }, { capture: true });\n\n return;\n }\n else if (this.config.type === 'custom') {\n const attachFormListener = () => {\n if (!this.config || !this.config.formId) {\n this.logger.warn('Cannot track form - no form ID');\n return;\n }\n const form = document.getElementById(this.config!.formId);\n if (!form) {\n this.logger.log('Form not found:', this.config!.formId);\n return;\n }\n\n const formElement = form as HTMLFormElement;\n\n // Check if already tracked\n if (formElement.dataset.thredTracked) {\n return;\n }\n\n this.logger.log('Attaching listener to form:', this.config!.formId);\n\n formElement.addEventListener(\n 'submit',\n () => {\n const formData = new FormData(formElement);\n this.trackFormSubmit(formData);\n },\n { capture: true }\n );\n\n formElement.dataset.thredTracked = 'true';\n };\n\n // Attach immediately if form exists\n attachFormListener();\n\n // Watch for dynamic forms\n this.formObserver = new MutationObserver(() => {\n attachFormListener();\n });\n\n this.formObserver.observe(document.body, {\n childList: true,\n subtree: true,\n });\n }\n }\n\n /**\n * Inject utm_fp into all matching links within a root element\n */\n private injectFingerprintIntoLinks(root: HTMLElement, hostedUrlBase: string): void {\n const links = root.querySelectorAll<HTMLAnchorElement>('a[href]');\n for (const link of Array.from(links)) {\n this.injectFingerprintIntoLink(link, hostedUrlBase);\n }\n }\n\n /**\n * Inject utm_fp into a single link if it matches hostedUrlBase\n */\n private injectFingerprintIntoLink(link: HTMLAnchorElement, hostedUrlBase: string): void {\n const href = link.getAttribute('href');\n if (!href || !href.includes(hostedUrlBase)) return;\n\n // Already tagged — skip\n if (href.includes('utm_fp=')) return;\n\n const fp = this.fingerprint.getCachedFingerprint();\n if (!fp) {\n this.logger.warn('Cannot inject utm_fp - no cached fingerprint');\n return;\n }\n\n try {\n const url = new URL(href, window.location.origin);\n url.searchParams.set('utm_fp', fp);\n link.setAttribute('href', url.toString());\n this.logger.log('Injected utm_fp into link:', url.toString());\n } catch (err) {\n this.logger.warn('Failed to parse URL:', href, err);\n }\n }\n\n /**\n * Cleanup tracker\n */\n destroy(): void {\n if (this.formObserver) {\n this.formObserver.disconnect();\n this.formObserver = null;\n }\n\n if (typeof window === 'undefined') return;\n\n if (this.popstateHandler) {\n window.removeEventListener('popstate', this.popstateHandler);\n this.popstateHandler = null;\n }\n\n if (this.originalPushState) {\n history.pushState = this.originalPushState;\n this.originalPushState = null;\n }\n\n if (this.originalReplaceState) {\n history.replaceState = this.originalReplaceState;\n this.originalReplaceState = null;\n }\n }\n}\n","/**\n * Thred SDK - Browser tracking and lead enrichment\n */\n\nimport type { ThredOptions, ThredSDK as IThredSDK, LeadData } from './types';\nimport { Logger } from './utils/logger';\nimport { isFromChatGPT, getBrowserKeyFromScript } from './utils/detector';\nimport { FingerprintManager } from './core/fingerprint';\nimport { ThredAPI } from './core/api';\nimport { Tracker } from './core/tracker';\n\nexport * from './types';\n\nconst DEFAULT_BASE_URL = 'https://api.thred.dev/v1';\n\nexport class ThredSDK implements IThredSDK {\n private options: ThredOptions;\n private logger: Logger;\n private fingerprint: FingerprintManager;\n private api: ThredAPI;\n private tracker: Tracker;\n private initialized = false;\n\n constructor(options: ThredOptions) {\n this.options = {\n baseUrl: DEFAULT_BASE_URL,\n debug: true,\n autoInit: true,\n ...options,\n };\n\n this.logger = new Logger(this.options.debug);\n this.fingerprint = new FingerprintManager(this.logger);\n this.api = new ThredAPI(\n this.options.baseUrl!,\n this.options.browserKey,\n this.logger\n );\n this.tracker = new Tracker(this.api, this.fingerprint, this.logger);\n\n if (this.options.autoInit) {\n this.init();\n }\n }\n\n /**\n * Initialize the SDK\n */\n async init(): Promise<void> {\n if (typeof window === 'undefined') {\n this.logger.warn('SDK requires a browser environment — skipping init');\n return;\n }\n\n if (this.initialized) {\n this.logger.warn('SDK already initialized');\n return;\n }\n\n this.logger.log('Initializing Thred SDK...');\n\n // Generate fingerprint\n await this.fingerprint.getFingerprint();\n\n // Initialize tracker\n await this.tracker.init();\n\n this.initialized = true;\n this.logger.log('SDK initialized successfully');\n }\n\n /**\n * Check if visitor is from ChatGPT\n */\n isFromChatGPT(): boolean {\n return isFromChatGPT();\n }\n\n /**\n * Track page view\n */\n async trackPageView(): Promise<void> {\n await this.tracker.trackPageView();\n }\n\n /**\n * Track form submission\n */\n async trackFormSubmit(formData: FormData): Promise<void> {\n await this.tracker.trackFormSubmit(formData);\n }\n\n /**\n * Identify user with lead data\n */\n async identify(leadData: LeadData): Promise<void> {\n await this.tracker.identify(leadData);\n }\n\n /**\n * Get current fingerprint\n */\n getFingerprint(): string | null {\n return this.fingerprint.getCachedFingerprint();\n }\n\n /**\n * Destroy SDK instance and cleanup\n */\n destroy(): void {\n this.tracker.destroy();\n this.fingerprint.clear();\n this.initialized = false;\n this.logger.log('SDK destroyed');\n }\n}\n\n/**\n * Auto-initialize if loaded as script tag with browserKey\n */\nif (typeof window !== 'undefined') {\n const browserKey = getBrowserKeyFromScript();\n if (browserKey) {\n const sdk = new ThredSDK({ browserKey });\n (window as any).Thred = sdk;\n }\n}\n\nexport default ThredSDK;\n"],"names":["__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","apply","SuppressedError","Logger","constructor","debug","prefix","this","log","args","console","warn","error","isFromChatGPT","window","utmSource","_a","URLSearchParams","location","search","get","toLowerCase","referrer","document","isChatGPTRef","includes","FingerprintManager","logger","fingerprint","promise","getFingerprint","thredFingerprint","generateFingerprint","FingerprintJS","import","fp","load","endpoint","defaultEndpoint","visitorId","getCachedFingerprint","clear","ThredAPI","baseUrl","browserKey","fetchConfig","url","encodeURIComponent","response","fetch","method","headers","Accept","ok","Error","status","config","json","trackPageView","payload","body","JSON","stringify","keepalive","enrichLead","Tracker","api","formObserver","lastTrackedUrl","popstateHandler","originalPushState","originalReplaceState","init","enabled","hasChatSession","setupRouteTracking","setupFormTracking","event","data","href","trackFormSubmit","formData","emailId","nameId","email","toString","trim","name","_b","company","companyId","_c","identify","discovery","leadData","onRouteChange","currentUrl","addEventListener","history","pushState","bind","replaceState","type","hostedUrlBase","injectFingerprintIntoLinks","MutationObserver","mutations","mutation","node","Array","from","addedNodes","HTMLElement","tagName","injectFingerprintIntoLink","observe","childList","subtree","target","closest","getAttribute","capture","attachFormListener","formId","form","getElementById","formElement","dataset","thredTracked","FormData","root","links","querySelectorAll","link","URL","origin","searchParams","set","setAttribute","err","destroy","disconnect","removeEventListener","ThredSDK","options","initialized","Object","assign","autoInit","tracker","scripts","getElementsByTagName","script","src","getBrowserKeyFromScript","sdk","Thred"],"mappings":"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","x_google_ignoreList":[0]}
|
|
1
|
+
{"version":3,"file":"thred.umd.js","sources":["../node_modules/tslib/tslib.es6.js","../src/utils/logger.ts","../src/utils/detector.ts","../src/core/fingerprint.ts","../src/core/api.ts","../src/core/tracker.ts","../src/index.ts"],"sourcesContent":["/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n","/**\n * Simple logger utility\n */\nexport class Logger {\n private debug: boolean;\n private prefix: string;\n\n constructor(debug = false, prefix = '[Thred]') {\n this.debug = debug;\n this.prefix = prefix;\n }\n\n log(...args: unknown[]) {\n if (this.debug) {\n console.log(this.prefix, ...args);\n }\n }\n\n warn(...args: unknown[]) {\n if (this.debug) {\n console.warn(this.prefix, ...args);\n }\n }\n\n error(...args: unknown[]) {\n console.error(this.prefix, ...args);\n }\n}\n","/**\n * Detects if the visitor came from ChatGPT\n */\nexport function isFromChatGPT(): boolean {\n if (typeof window === 'undefined') return false;\n\n const params = new URLSearchParams(window.location.search);\n const utmSource = params.get('utm_source')?.toLowerCase() || '';\n const referrer = document.referrer.toLowerCase();\n\n const isChatGPTRef =\n referrer.includes('chat.openai.com') || referrer.includes('chatgpt.com');\n const isChatGPTUtm =\n utmSource === 'chatgpt' ||\n utmSource.includes('chatgpt') ||\n utmSource === 'chat.openai' ||\n utmSource === 'openai';\n\n return isChatGPTUtm || isChatGPTRef;\n}\n\n/**\n * Gets the browser key from script tag if present\n */\nexport function getBrowserKeyFromScript(): string | null {\n if (typeof window === 'undefined' || typeof document === 'undefined') {\n return null;\n }\n\n const scripts = document.getElementsByTagName('script');\n\n for (const script of Array.from(scripts)) {\n if (script.src.includes('thred')) {\n try {\n const url = new URL(script.src);\n return url.searchParams.get('browserKey');\n } catch {\n // Invalid URL\n }\n }\n }\n\n return null;\n}\n","import type { FingerprintResult } from '../types';\nimport { Logger } from '../utils/logger';\n\nconst FP_PROXY_URL =\n 'https://thredproxy.com/35ZCuyzokuT1YGd8/Hm7KPMHUZ4duyPRj?apiKey=iyqKVLQt2560EQUyjfxa';\nconst FP_PROXY_ENDPOINT =\n 'https://thredproxy.com/35ZCuyzokuT1YGd8/qbWl4nqUSCIDTor4';\n\nconst STORAGE_KEY = 'thred_fingerprint';\n\nexport class FingerprintManager {\n private fingerprint: string | null = null;\n private logger: Logger;\n private promise: Promise<string | null> | null = null;\n\n constructor(logger: Logger) {\n this.logger = logger;\n }\n\n /**\n * Get or generate fingerprint\n */\n async getFingerprint(): Promise<string | null> {\n if (this.fingerprint) {\n this.logger.log('Using cached fingerprint:', this.fingerprint);\n return this.fingerprint;\n }\n\n if (this.promise) {\n return this.promise;\n }\n\n // Check localStorage (persists across tabs)\n const stored = this.readStorage();\n if (stored) {\n this.fingerprint = stored;\n this.logger.log('Using stored fingerprint:', this.fingerprint);\n return this.fingerprint;\n }\n\n this.promise = this.generateFingerprint();\n return this.promise;\n }\n\n private async generateFingerprint(): Promise<string | null> {\n if (typeof window === 'undefined') {\n this.logger.warn('FingerprintJS requires a browser — skipping');\n return null;\n }\n\n try {\n this.logger.log('Loading FingerprintJS...');\n\n const FingerprintJS = await import(FP_PROXY_URL);\n const fp = await FingerprintJS.load({\n endpoint: [FP_PROXY_ENDPOINT, FingerprintJS.defaultEndpoint],\n });\n\n const result: FingerprintResult = await fp.get();\n this.fingerprint = result.visitorId;\n\n this.writeStorage(this.fingerprint);\n\n this.logger.log('Fingerprint generated:', this.fingerprint);\n return this.fingerprint;\n } catch (error) {\n this.logger.warn('Fingerprint generation failed:', error);\n return null;\n }\n }\n\n getCachedFingerprint(): string | null {\n return this.fingerprint;\n }\n\n clear() {\n this.fingerprint = null;\n this.promise = null;\n this.removeStorage();\n }\n\n private readStorage(): string | null {\n try {\n return typeof window !== 'undefined'\n ? localStorage.getItem(STORAGE_KEY)\n : null;\n } catch {\n return null;\n }\n }\n\n private writeStorage(value: string) {\n try {\n if (typeof window !== 'undefined') {\n localStorage.setItem(STORAGE_KEY, value);\n }\n } catch {\n this.logger.warn('Failed to persist fingerprint to localStorage');\n }\n }\n\n private removeStorage() {\n try {\n if (typeof window !== 'undefined') {\n localStorage.removeItem(STORAGE_KEY);\n }\n } catch {\n // Ignore storage errors on cleanup\n }\n }\n}\n","import type {\n ThredConfig,\n PageViewPayload,\n EnrichPayload,\n} from '../types';\nimport { Logger } from '../utils/logger';\n\nexport class ThredAPI {\n private baseUrl: string;\n private browserKey: string;\n private logger: Logger;\n\n constructor(baseUrl: string, browserKey: string, logger: Logger) {\n this.baseUrl = baseUrl;\n this.browserKey = browserKey;\n this.logger = logger;\n }\n\n /**\n * Fetch configuration from API\n */\n async fetchConfig(fingerprint: string): Promise<ThredConfig | null> {\n try {\n const url = `${this.baseUrl}/config?fingerprint=${encodeURIComponent(fingerprint)}&browserKey=${encodeURIComponent(this.browserKey)}`;\n this.logger.log('Fetching config from:', url);\n\n const response = await fetch(url, {\n method: 'GET',\n headers: {\n Accept: 'application/json',\n },\n });\n\n if (!response.ok) {\n throw new Error(`Config request failed: ${response.status}`);\n }\n\n const config = await response.json();\n this.logger.log('Config received:', config);\n\n return config;\n } catch (error) {\n this.logger.warn('Failed to fetch config:', error);\n return null;\n }\n }\n\n /**\n * Send page view event\n */\n async trackPageView(payload: PageViewPayload): Promise<void> {\n try {\n const url = `${this.baseUrl}/events/page-view?browserKey=${encodeURIComponent(this.browserKey)}`;\n this.logger.log('Tracking page view:', url);\n\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(payload),\n keepalive: true,\n });\n\n if (!response.ok) {\n throw new Error(`Page view request failed: ${response.status}`);\n }\n\n this.logger.log('Page view tracked successfully');\n } catch (error) {\n this.logger.warn('Failed to track page view:', error);\n }\n }\n\n /**\n * Send lead enrichment data\n */\n async enrichLead(payload: EnrichPayload): Promise<void> {\n try {\n const url = `${this.baseUrl}/customers/enrich?browserKey=${encodeURIComponent(this.browserKey)}`;\n this.logger.log('Enriching lead:', url);\n\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(payload),\n keepalive: true,\n });\n\n if (!response.ok) {\n throw new Error(`Enrich request failed: ${response.status}`);\n }\n\n this.logger.log('Lead enriched successfully');\n } catch (error) {\n this.logger.warn('Failed to enrich lead:', error);\n }\n }\n}\n","import type { ThredConfig, LeadData } from '../types';\nimport { Logger } from '../utils/logger';\nimport { isFromChatGPT } from '../utils/detector';\nimport { ThredAPI } from './api';\nimport { FingerprintManager } from './fingerprint';\n\nexport class Tracker {\n private api: ThredAPI;\n private fingerprint: FingerprintManager;\n private logger: Logger;\n private config: ThredConfig | null = null;\n private formObserver: MutationObserver | null = null;\n private lastTrackedUrl: string | null = null;\n private popstateHandler: (() => void) | null = null;\n private originalPushState: typeof history.pushState | null = null;\n private originalReplaceState: typeof history.replaceState | null = null;\n\n constructor(\n api: ThredAPI,\n fingerprint: FingerprintManager,\n logger: Logger\n ) {\n this.api = api;\n this.fingerprint = fingerprint;\n this.logger = logger;\n }\n\n /**\n * Initialize tracker with config\n */\n async init(): Promise<void> {\n // Get fingerprint\n const fingerprint = await this.fingerprint.getFingerprint();\n if (!fingerprint) {\n this.logger.warn('Cannot initialize tracker without fingerprint');\n return;\n }\n this.config = await this.api.fetchConfig(fingerprint);\n\n if (!this.config?.enabled) {\n this.logger.log('Tracking disabled by config');\n return;\n }\n\n if (!this.config.hasChatSession && !isFromChatGPT()) {\n this.logger.log('No chat session for this fingerprint - exiting');\n return;\n }\n\n // Track initial page view\n if (isFromChatGPT()) {\n await this.trackPageView();\n } else {\n this.logger.log('UTM not from ChatGPT - skipping page view');\n }\n\n // Track SPA route changes\n this.setupRouteTracking();\n\n // Setup form tracking\n this.setupFormTracking();\n }\n\n /**\n * Track page view event\n */\n async trackPageView(): Promise<void> {\n if (typeof window === 'undefined') return;\n\n const fp = await this.fingerprint.getFingerprint();\n\n if (!fp) {\n this.logger.warn('Cannot track page view without fingerprint');\n return;\n }\n\n await this.api.trackPageView({\n event: 'page_view',\n data: {\n url: window.location.href,\n },\n fingerprint: fp,\n });\n }\n\n /**\n * Track form submission and enrich lead\n */\n async trackFormSubmit(formData: FormData): Promise<void> {\n if (!this.config || !this.config.emailId || !this.config.nameId) {\n this.logger.warn('Cannot track form - no config loaded');\n return;\n }\n\n const email = formData.get(this.config.emailId)?.toString().trim();\n const name = formData.get(this.config.nameId)?.toString().trim();\n\n let company: string | undefined = undefined;\n if (this.config.companyId) {\n company = formData.get(this.config.companyId)?.toString().trim();\n }\n\n this.logger.log('Form data extracted:', { email, name, company });\n\n if (!email || !name) {\n this.logger.warn('Missing required fields (email, name)');\n return;\n }\n\n await this.identify({\n name,\n email,\n company: company,\n discovery: false,\n });\n }\n\n /**\n * Identify user and enrich lead data\n */\n async identify(leadData: LeadData): Promise<void> {\n const fp = await this.fingerprint.getFingerprint();\n\n if (!fp) {\n this.logger.warn('Cannot identify without fingerprint');\n return;\n }\n\n await this.api.enrichLead({\n fingerprint: fp,\n leadData,\n });\n }\n\n /**\n * Track page views on SPA route changes by patching pushState/replaceState\n * and listening for popstate.\n */\n private setupRouteTracking(): void {\n if (typeof window === 'undefined') return;\n\n this.lastTrackedUrl = window.location.href;\n\n const onRouteChange = () => {\n const currentUrl = window.location.href;\n if (currentUrl === this.lastTrackedUrl) return;\n this.lastTrackedUrl = currentUrl;\n this.logger.log('Route change detected:', currentUrl);\n this.trackPageView();\n };\n\n this.popstateHandler = onRouteChange;\n window.addEventListener('popstate', this.popstateHandler);\n\n this.originalPushState = history.pushState.bind(history);\n this.originalReplaceState = history.replaceState.bind(history);\n\n history.pushState = (...args: Parameters<typeof history.pushState>) => {\n this.originalPushState!(...args);\n onRouteChange();\n };\n\n history.replaceState = (...args: Parameters<typeof history.replaceState>) => {\n this.originalReplaceState!(...args);\n onRouteChange();\n };\n }\n\n /**\n * Setup automatic form tracking\n */\n private setupFormTracking(): void {\n if (!this.config || typeof document === 'undefined') {\n this.logger.warn('Cannot track form - no config or document');\n return;\n }\n\n if (this.config.type === 'hosted') {\n const hostedUrlBase = this.config.hostedUrlBase;\n if (!hostedUrlBase) {\n this.logger.warn('Cannot track form - no hosted URL base');\n return;\n }\n\n // Inject utm_fp into all existing matching links\n this.injectFingerprintIntoLinks(document.body, hostedUrlBase);\n\n // Watch for dynamically added links and inject utm_fp as they appear\n this.formObserver = new MutationObserver((mutations) => {\n for (const mutation of mutations) {\n for (const node of Array.from(mutation.addedNodes)) {\n if (!(node instanceof HTMLElement)) continue;\n\n // Check if the added node itself is a matching link\n if (node.tagName === 'A') {\n this.injectFingerprintIntoLink(node as HTMLAnchorElement, hostedUrlBase);\n }\n\n // Check any child links within the added node\n this.injectFingerprintIntoLinks(node, hostedUrlBase);\n }\n }\n });\n\n this.formObserver.observe(document.body, {\n childList: true,\n subtree: true,\n });\n\n // Fallback: intercept clicks for links that may have had their href changed dynamically\n document.addEventListener('click', (e) => {\n const target = (e.target as HTMLElement).closest('a');\n if (!target) return;\n\n const href = target.getAttribute('href');\n if (!href || !href.includes(hostedUrlBase)) return;\n\n // Already tagged — skip\n if (href.includes('utm_fp=')) return;\n\n this.injectFingerprintIntoLink(target as HTMLAnchorElement, hostedUrlBase);\n }, { capture: true });\n\n return;\n }\n else if (this.config.type === 'custom') {\n const attachFormListener = () => {\n if (!this.config || !this.config.formId) {\n this.logger.warn('Cannot track form - no form ID');\n return;\n }\n const form = document.getElementById(this.config!.formId);\n if (!form) {\n this.logger.log('Form not found:', this.config!.formId);\n return;\n }\n\n const formElement = form as HTMLFormElement;\n\n // Check if already tracked\n if (formElement.dataset.thredTracked) {\n return;\n }\n\n this.logger.log('Attaching listener to form:', this.config!.formId);\n\n formElement.addEventListener(\n 'submit',\n () => {\n const formData = new FormData(formElement);\n this.trackFormSubmit(formData);\n },\n { capture: true }\n );\n\n formElement.dataset.thredTracked = 'true';\n };\n\n // Attach immediately if form exists\n attachFormListener();\n\n // Watch for dynamic forms\n this.formObserver = new MutationObserver(() => {\n attachFormListener();\n });\n\n this.formObserver.observe(document.body, {\n childList: true,\n subtree: true,\n });\n }\n }\n\n /**\n * Inject utm_fp into all matching links within a root element\n */\n private injectFingerprintIntoLinks(root: HTMLElement, hostedUrlBase: string): void {\n const links = root.querySelectorAll<HTMLAnchorElement>('a[href]');\n for (const link of Array.from(links)) {\n this.injectFingerprintIntoLink(link, hostedUrlBase);\n }\n }\n\n /**\n * Inject utm_fp into a single link if it matches hostedUrlBase\n */\n private injectFingerprintIntoLink(link: HTMLAnchorElement, hostedUrlBase: string): void {\n const href = link.getAttribute('href');\n if (!href || !href.includes(hostedUrlBase)) return;\n\n // Already tagged — skip\n if (href.includes('utm_fp=')) return;\n\n const fp = this.fingerprint.getCachedFingerprint();\n if (!fp) {\n this.logger.warn('Cannot inject utm_fp - no cached fingerprint');\n return;\n }\n\n try {\n const url = new URL(href, window.location.origin);\n url.searchParams.set('utm_fp', fp);\n link.setAttribute('href', url.toString());\n this.logger.log('Injected utm_fp into link:', url.toString());\n } catch (err) {\n this.logger.warn('Failed to parse URL:', href, err);\n }\n }\n\n /**\n * Cleanup tracker\n */\n destroy(): void {\n if (this.formObserver) {\n this.formObserver.disconnect();\n this.formObserver = null;\n }\n\n if (typeof window === 'undefined') return;\n\n if (this.popstateHandler) {\n window.removeEventListener('popstate', this.popstateHandler);\n this.popstateHandler = null;\n }\n\n if (this.originalPushState) {\n history.pushState = this.originalPushState;\n this.originalPushState = null;\n }\n\n if (this.originalReplaceState) {\n history.replaceState = this.originalReplaceState;\n this.originalReplaceState = null;\n }\n }\n}\n","/**\n * Thred SDK - Browser tracking and lead enrichment\n */\n\nimport type { ThredOptions, ThredSDK as IThredSDK, LeadData } from './types';\nimport { Logger } from './utils/logger';\nimport { isFromChatGPT, getBrowserKeyFromScript } from './utils/detector';\nimport { FingerprintManager } from './core/fingerprint';\nimport { ThredAPI } from './core/api';\nimport { Tracker } from './core/tracker';\n\nexport * from './types';\n\nconst DEFAULT_BASE_URL = 'https://api.thred.dev/v1';\n\nexport class ThredSDK implements IThredSDK {\n private options: ThredOptions;\n private logger: Logger;\n private fingerprint: FingerprintManager;\n private api: ThredAPI;\n private tracker: Tracker;\n private initialized = false;\n\n constructor(options: ThredOptions) {\n this.options = {\n baseUrl: DEFAULT_BASE_URL,\n debug: false, // Set to true for development\n autoInit: true,\n ...options,\n };\n\n this.logger = new Logger(this.options.debug);\n this.fingerprint = new FingerprintManager(this.logger);\n this.api = new ThredAPI(\n this.options.baseUrl!,\n this.options.browserKey,\n this.logger\n );\n this.tracker = new Tracker(this.api, this.fingerprint, this.logger);\n\n if (this.options.autoInit) {\n this.init();\n }\n }\n\n /**\n * Initialize the SDK\n */\n async init(): Promise<void> {\n if (typeof window === 'undefined') {\n this.logger.warn('SDK requires a browser environment — skipping init');\n return;\n }\n\n if (this.initialized) {\n this.logger.warn('SDK already initialized');\n return;\n }\n\n this.logger.log('Initializing Thred SDK...');\n\n // Generate fingerprint\n await this.fingerprint.getFingerprint();\n\n // Initialize tracker\n await this.tracker.init();\n\n this.initialized = true;\n this.logger.log('SDK initialized successfully');\n }\n\n /**\n * Check if visitor is from ChatGPT\n */\n isFromChatGPT(): boolean {\n return isFromChatGPT();\n }\n\n /**\n * Track page view\n */\n async trackPageView(): Promise<void> {\n await this.tracker.trackPageView();\n }\n\n /**\n * Track form submission\n */\n async trackFormSubmit(formData: FormData): Promise<void> {\n await this.tracker.trackFormSubmit(formData);\n }\n\n /**\n * Identify user with lead data\n */\n async identify(leadData: LeadData): Promise<void> {\n await this.tracker.identify(leadData);\n }\n\n /**\n * Get current fingerprint\n */\n getFingerprint(): string | null {\n return this.fingerprint.getCachedFingerprint();\n }\n\n /**\n * Destroy SDK instance and cleanup\n */\n destroy(): void {\n this.tracker.destroy();\n this.fingerprint.clear();\n this.initialized = false;\n this.logger.log('SDK destroyed');\n }\n}\n\n/**\n * Auto-initialize if loaded as script tag with browserKey\n */\nif (typeof window !== 'undefined') {\n const browserKey = getBrowserKeyFromScript();\n if (browserKey) {\n const sdk = new ThredSDK({ browserKey });\n (window as any).Thred = sdk;\n }\n}\n\nexport default ThredSDK;\n"],"names":["__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","apply","SuppressedError","Logger","constructor","debug","prefix","this","log","args","console","warn","error","isFromChatGPT","window","utmSource","_a","URLSearchParams","location","search","get","toLowerCase","referrer","document","isChatGPTRef","includes","STORAGE_KEY","FingerprintManager","logger","fingerprint","promise","getFingerprint","stored","readStorage","generateFingerprint","FingerprintJS","import","fp","load","endpoint","defaultEndpoint","visitorId","writeStorage","getCachedFingerprint","clear","removeStorage","localStorage","getItem","setItem","removeItem","ThredAPI","baseUrl","browserKey","fetchConfig","url","encodeURIComponent","response","fetch","method","headers","Accept","ok","Error","status","config","json","trackPageView","payload","body","JSON","stringify","keepalive","enrichLead","Tracker","api","formObserver","lastTrackedUrl","popstateHandler","originalPushState","originalReplaceState","init","enabled","hasChatSession","setupRouteTracking","setupFormTracking","event","data","href","trackFormSubmit","formData","emailId","nameId","email","toString","trim","name","_b","company","companyId","_c","identify","discovery","leadData","onRouteChange","currentUrl","addEventListener","history","pushState","bind","replaceState","type","hostedUrlBase","injectFingerprintIntoLinks","MutationObserver","mutations","mutation","node","Array","from","addedNodes","HTMLElement","tagName","injectFingerprintIntoLink","observe","childList","subtree","target","closest","getAttribute","capture","attachFormListener","formId","form","getElementById","formElement","dataset","thredTracked","FormData","root","links","querySelectorAll","link","URL","origin","searchParams","set","setAttribute","err","destroy","disconnect","removeEventListener","ThredSDK","options","initialized","Object","assign","autoInit","tracker","scripts","getElementsByTagName","script","src","getBrowserKeyFromScript","sdk","Thred"],"mappings":"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","x_google_ignoreList":[0]}
|