@thred-apps/thred-track 1.4.7 → 1.4.8
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/tracker.d.ts.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.esm.js +27 -1
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +27 -1
- package/dist/index.js.map +1 -1
- package/dist/thred.umd.js +1 -1
- package/dist/thred.umd.js.map +1 -1
- package/dist/utils/detector.d.ts +4 -0
- package/dist/utils/detector.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tracker.d.ts","sourceRoot":"","sources":["../../src/core/tracker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAe,QAAQ,EAAE,MAAM,UAAU,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAEzC,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAInD,qBAAa,OAAO;IAClB,OAAO,CAAC,GAAG,CAAW;IACtB,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,YAAY,CAAiC;gBAGnD,GAAG,EAAE,QAAQ,EACb,WAAW,EAAE,kBAAkB,EAC/B,MAAM,EAAE,MAAM;IAOhB;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"tracker.d.ts","sourceRoot":"","sources":["../../src/core/tracker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAe,QAAQ,EAAE,MAAM,UAAU,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAEzC,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAInD,qBAAa,OAAO;IAClB,OAAO,CAAC,GAAG,CAAW;IACtB,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,YAAY,CAAiC;gBAGnD,GAAG,EAAE,QAAQ,EACb,WAAW,EAAE,kBAAkB,EAC/B,MAAM,EAAE,MAAM;IAOhB;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAgC3B,OAAO,CAAC,mBAAmB;IAW3B,OAAO,CAAC,YAAY;IAQpB;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IA4BpC;;OAEG;IACG,eAAe,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IA6BxD;;OAEG;IACG,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAcjD;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAsGzB;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAOlC;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAuBjC;;OAEG;IACH,OAAO,IAAI,IAAI;CAMhB"}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,IAAI,SAAS,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAO7E,cAAc,SAAS,CAAC;AAIxB,qBAAa,QAAS,YAAW,SAAS;IACxC,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,GAAG,CAAW;IACtB,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,WAAW,CAAS;gBAEhB,OAAO,EAAE,YAAY;IAsBjC;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAuB3B;;OAEG;IACH,aAAa,IAAI,OAAO;IAIxB;;OAEG;IACH,YAAY,IAAI,OAAO;IAIvB;;OAEG;IACH,gBAAgB,IAAI,OAAO;IAI3B;;OAEG;IACH,YAAY,IAAI,OAAO;IAIvB;;OAEG;IACH,QAAQ,IAAI,OAAO;IAInB;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAIpC;;OAEG;IACG,eAAe,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxD;;OAEG;IACG,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjD;;OAEG;IACH,cAAc,IAAI,MAAM,GAAG,IAAI;IAI/B;;OAEG;IACH,OAAO,IAAI,IAAI;CAMhB;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,IAAI,SAAS,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAO7E,cAAc,SAAS,CAAC;AAIxB,qBAAa,QAAS,YAAW,SAAS;IACxC,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,GAAG,CAAW;IACtB,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,WAAW,CAAS;gBAEhB,OAAO,EAAE,YAAY;IAsBjC;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAuB3B;;OAEG;IACH,aAAa,IAAI,OAAO;IAIxB;;OAEG;IACH,YAAY,IAAI,OAAO;IAIvB;;OAEG;IACH,gBAAgB,IAAI,OAAO;IAI3B;;OAEG;IACH,YAAY,IAAI,OAAO;IAIvB;;OAEG;IACH,QAAQ,IAAI,OAAO;IAInB;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAIpC;;OAEG;IACG,eAAe,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxD;;OAEG;IACG,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjD;;OAEG;IACH,cAAc,IAAI,MAAM,GAAG,IAAI;IAI/B;;OAEG;IACH,OAAO,IAAI,IAAI;CAMhB;AAcD,eAAe,QAAQ,CAAC"}
|
package/dist/index.esm.js
CHANGED
|
@@ -158,6 +158,27 @@ function getBrowserKeyFromScript() {
|
|
|
158
158
|
}
|
|
159
159
|
return null;
|
|
160
160
|
}
|
|
161
|
+
/**
|
|
162
|
+
* Gets the debug mode from script tag if present
|
|
163
|
+
*/
|
|
164
|
+
function getDebugModeFromScript() {
|
|
165
|
+
if (typeof window === 'undefined' || typeof document === 'undefined') {
|
|
166
|
+
return null;
|
|
167
|
+
}
|
|
168
|
+
const scripts = document.getElementsByTagName('script');
|
|
169
|
+
for (const script of Array.from(scripts)) {
|
|
170
|
+
if (script.src.includes('thred')) {
|
|
171
|
+
try {
|
|
172
|
+
const url = new URL(script.src);
|
|
173
|
+
return url.searchParams.get('debug');
|
|
174
|
+
}
|
|
175
|
+
catch (_a) {
|
|
176
|
+
// Invalid URL
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
return null;
|
|
181
|
+
}
|
|
161
182
|
|
|
162
183
|
const FP_PROXY_URL = 'https://thredproxy.com/35ZCuyzokuT1YGd8/Hm7KPMHUZ4duyPRj?apiKey=iyqKVLQt2560EQUyjfxa';
|
|
163
184
|
const FP_PROXY_ENDPOINT = 'https://thredproxy.com/35ZCuyzokuT1YGd8/qbWl4nqUSCIDTor4';
|
|
@@ -369,6 +390,8 @@ class Tracker {
|
|
|
369
390
|
return;
|
|
370
391
|
}
|
|
371
392
|
const aiDetected = isFromAI() && !this.isDuplicateReferrer();
|
|
393
|
+
console.log('aiDetected', aiDetected);
|
|
394
|
+
console.log('isDuplicateReferrer', this.isDuplicateReferrer());
|
|
372
395
|
if (!this.config.hasChatSession && !aiDetected) {
|
|
373
396
|
this.logger.log('No chat session for this fingerprint - exiting');
|
|
374
397
|
return;
|
|
@@ -383,6 +406,8 @@ class Tracker {
|
|
|
383
406
|
isDuplicateReferrer() {
|
|
384
407
|
try {
|
|
385
408
|
const prev = sessionStorage.getItem(REFERRER_SESSION_KEY);
|
|
409
|
+
console.log('prev', prev);
|
|
410
|
+
console.log('document.referrer', document.referrer);
|
|
386
411
|
return prev !== null && prev === document.referrer.toLowerCase();
|
|
387
412
|
}
|
|
388
413
|
catch (_a) {
|
|
@@ -708,8 +733,9 @@ class ThredSDK {
|
|
|
708
733
|
*/
|
|
709
734
|
if (typeof window !== 'undefined') {
|
|
710
735
|
const browserKey = getBrowserKeyFromScript();
|
|
736
|
+
const debug = getDebugModeFromScript();
|
|
711
737
|
if (browserKey) {
|
|
712
|
-
const sdk = new ThredSDK({ browserKey });
|
|
738
|
+
const sdk = new ThredSDK({ browserKey, debug: debug === 'true' });
|
|
713
739
|
window.Thred = sdk;
|
|
714
740
|
}
|
|
715
741
|
}
|
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 * Detects if the visitor came from Google Gemini\n */\nexport function isFromGemini(): 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 isGeminiRef = referrer.includes('gemini.google.com');\n const isGeminiUtm =\n utmSource === 'gemini' ||\n utmSource.includes('gemini') ||\n utmSource === 'google_gemini';\n\n return isGeminiRef || isGeminiUtm;\n}\n\n/**\n * Detects if the visitor came from Perplexity AI\n */\nexport function isFromPerplexity(): 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 isPerplexityRef = referrer.includes('perplexity.ai');\n const isPerplexityUtm =\n utmSource === 'perplexity' ||\n utmSource.includes('perplexity');\n\n return isPerplexityRef || isPerplexityUtm;\n}\n\n/**\n * Detects if the visitor came from Anthropic Claude\n */\nexport function isFromClaude(): 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 isClaudeRef = referrer.includes('claude.ai');\n const isClaudeUtm =\n utmSource === 'claude' ||\n utmSource.includes('claude') ||\n utmSource === 'anthropic';\n\n return isClaudeRef || isClaudeUtm;\n}\n\n/**\n * Detects if the visitor came from any supported AI source.\n */\nexport function isFromAI(): boolean {\n return isFromChatGPT() || isFromGemini() || isFromPerplexity() || isFromClaude();\n}\n\nexport type AISource = 'chatgpt' | 'gemini' | 'pplx' | 'claude';\n\n/**\n * Returns the detected AI source, or null if the visitor didn't come from a known AI.\n */\nexport function getAISource(): AISource | null {\n if (isFromChatGPT()) return 'chatgpt';\n if (isFromGemini()) return 'gemini';\n if (isFromPerplexity()) return 'pplx';\n if (isFromClaude()) return 'claude';\n return null;\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 { isFromAI, getAISource } from '../utils/detector';\nimport { ThredAPI } from './api';\nimport { FingerprintManager } from './fingerprint';\n\nconst REFERRER_SESSION_KEY = 'thred_ai_referrer';\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\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 const aiDetected = isFromAI() && !this.isDuplicateReferrer();\n\n if (!this.config.hasChatSession && !aiDetected) {\n this.logger.log('No chat session for this fingerprint - exiting');\n return;\n }\n\n if (aiDetected) {\n this.saveReferrer();\n await this.trackPageView();\n }\n\n this.setupFormTracking();\n }\n\n private isDuplicateReferrer(): boolean {\n try {\n const prev = sessionStorage.getItem(REFERRER_SESSION_KEY);\n return prev !== null && prev === document.referrer.toLowerCase();\n } catch {\n return false;\n }\n }\n\n private saveReferrer(): void {\n try {\n sessionStorage.setItem(REFERRER_SESSION_KEY, document.referrer.toLowerCase());\n } catch {\n // sessionStorage unavailable\n }\n }\n\n /**\n * Track a single page view for the AI click-through landing.\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 if (!this.config?.sessionCode) {\n this.logger.warn('Cannot track page view without session code');\n return;\n }\n\n const source = getAISource();\n\n await this.api.trackPageView({\n event: 'page_view',\n data: {\n url: window.location.href,\n },\n fingerprint: fp,\n ...(source && { source }),\n sessionCode: this.config.sessionCode,\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 * 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}\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, isFromGemini, isFromPerplexity, isFromClaude, isFromAI, 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 * Check if visitor is from Google Gemini\n */\n isFromGemini(): boolean {\n return isFromGemini();\n }\n\n /**\n * Check if visitor is from Perplexity AI\n */\n isFromPerplexity(): boolean {\n return isFromPerplexity();\n }\n\n /**\n * Check if visitor is from Anthropic Claude\n */\n isFromClaude(): boolean {\n return isFromClaude();\n }\n\n /**\n * Check if visitor is from any supported AI source\n */\n isFromAI(): boolean {\n return isFromAI();\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 * Detects if the visitor came from Google Gemini\n */\nexport function isFromGemini(): 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 isGeminiRef = referrer.includes('gemini.google.com');\n const isGeminiUtm =\n utmSource === 'gemini' ||\n utmSource.includes('gemini') ||\n utmSource === 'google_gemini';\n\n return isGeminiRef || isGeminiUtm;\n}\n\n/**\n * Detects if the visitor came from Perplexity AI\n */\nexport function isFromPerplexity(): 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 isPerplexityRef = referrer.includes('perplexity.ai');\n const isPerplexityUtm =\n utmSource === 'perplexity' ||\n utmSource.includes('perplexity');\n\n return isPerplexityRef || isPerplexityUtm;\n}\n\n/**\n * Detects if the visitor came from Anthropic Claude\n */\nexport function isFromClaude(): 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 isClaudeRef = referrer.includes('claude.ai');\n const isClaudeUtm =\n utmSource === 'claude' ||\n utmSource.includes('claude') ||\n utmSource === 'anthropic';\n\n return isClaudeRef || isClaudeUtm;\n}\n\n/**\n * Detects if the visitor came from any supported AI source.\n */\nexport function isFromAI(): boolean {\n return isFromChatGPT() || isFromGemini() || isFromPerplexity() || isFromClaude();\n}\n\nexport type AISource = 'chatgpt' | 'gemini' | 'pplx' | 'claude';\n\n/**\n * Returns the detected AI source, or null if the visitor didn't come from a known AI.\n */\nexport function getAISource(): AISource | null {\n if (isFromChatGPT()) return 'chatgpt';\n if (isFromGemini()) return 'gemini';\n if (isFromPerplexity()) return 'pplx';\n if (isFromClaude()) return 'claude';\n return null;\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\n/**\n * Gets the debug mode from script tag if present\n */\nexport function getDebugModeFromScript(): 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('debug');\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 { isFromAI, getAISource } from '../utils/detector';\nimport { ThredAPI } from './api';\nimport { FingerprintManager } from './fingerprint';\n\nconst REFERRER_SESSION_KEY = 'thred_ai_referrer';\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\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 const aiDetected = isFromAI() && !this.isDuplicateReferrer();\n\n console.log('aiDetected', aiDetected);\n console.log('isDuplicateReferrer', this.isDuplicateReferrer());\n\n if (!this.config.hasChatSession && !aiDetected) {\n this.logger.log('No chat session for this fingerprint - exiting');\n return;\n }\n\n if (aiDetected) {\n this.saveReferrer();\n await this.trackPageView();\n }\n\n this.setupFormTracking();\n }\n\n private isDuplicateReferrer(): boolean {\n try {\n const prev = sessionStorage.getItem(REFERRER_SESSION_KEY);\n console.log('prev', prev);\n console.log('document.referrer', document.referrer);\n return prev !== null && prev === document.referrer.toLowerCase();\n } catch {\n return false;\n }\n }\n\n private saveReferrer(): void {\n try {\n sessionStorage.setItem(REFERRER_SESSION_KEY, document.referrer.toLowerCase());\n } catch {\n // sessionStorage unavailable\n }\n }\n\n /**\n * Track a single page view for the AI click-through landing.\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 if (!this.config?.sessionCode) {\n this.logger.warn('Cannot track page view without session code');\n return;\n }\n\n const source = getAISource();\n\n await this.api.trackPageView({\n event: 'page_view',\n data: {\n url: window.location.href,\n },\n fingerprint: fp,\n ...(source && { source }),\n sessionCode: this.config.sessionCode,\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 * 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}\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, isFromGemini, isFromPerplexity, isFromClaude, isFromAI, getBrowserKeyFromScript, getDebugModeFromScript } 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 * Check if visitor is from Google Gemini\n */\n isFromGemini(): boolean {\n return isFromGemini();\n }\n\n /**\n * Check if visitor is from Perplexity AI\n */\n isFromPerplexity(): boolean {\n return isFromPerplexity();\n }\n\n /**\n * Check if visitor is from Anthropic Claude\n */\n isFromClaude(): boolean {\n return isFromClaude();\n }\n\n /**\n * Check if visitor is from any supported AI source\n */\n isFromAI(): boolean {\n return isFromAI();\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 const debug = getDebugModeFromScript();\n if (browserKey) {\n const sdk = new ThredSDK({ browserKey, debug: debug === 'true' });\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,YAAY,GAAA;;IAC1B,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;IAEhD,MAAM,WAAW,GAAG,QAAQ,CAAC,QAAQ,CAAC,mBAAmB,CAAC;AAC1D,IAAA,MAAM,WAAW,GACf,SAAS,KAAK,QAAQ;AACtB,QAAA,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAC5B,SAAS,KAAK,eAAe;IAE/B,OAAO,WAAW,IAAI,WAAW;AACnC;AAEA;;AAEG;SACa,gBAAgB,GAAA;;IAC9B,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;IAEhD,MAAM,eAAe,GAAG,QAAQ,CAAC,QAAQ,CAAC,eAAe,CAAC;AAC1D,IAAA,MAAM,eAAe,GACnB,SAAS,KAAK,YAAY;AAC1B,QAAA,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC;IAElC,OAAO,eAAe,IAAI,eAAe;AAC3C;AAEA;;AAEG;SACa,YAAY,GAAA;;IAC1B,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;IAEhD,MAAM,WAAW,GAAG,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC;AAClD,IAAA,MAAM,WAAW,GACf,SAAS,KAAK,QAAQ;AACtB,QAAA,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAC5B,SAAS,KAAK,WAAW;IAE3B,OAAO,WAAW,IAAI,WAAW;AACnC;AAEA;;AAEG;SACa,QAAQ,GAAA;IACtB,OAAO,aAAa,EAAE,IAAI,YAAY,EAAE,IAAI,gBAAgB,EAAE,IAAI,YAAY,EAAE;AAClF;AAIA;;AAEG;SACa,WAAW,GAAA;AACzB,IAAA,IAAI,aAAa,EAAE;AAAE,QAAA,OAAO,SAAS;AACrC,IAAA,IAAI,YAAY,EAAE;AAAE,QAAA,OAAO,QAAQ;AACnC,IAAA,IAAI,gBAAgB,EAAE;AAAE,QAAA,OAAO,MAAM;AACrC,IAAA,IAAI,YAAY,EAAE;AAAE,QAAA,OAAO,QAAQ;AACnC,IAAA,OAAO,IAAI;AACb;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;AAEA;;AAEG;SACa,sBAAsB,GAAA;IACpC,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,OAAO,CAAC;YACtC;AAAE,YAAA,OAAA,EAAA,EAAM;;YAER;QACF;IACF;AAEA,IAAA,OAAO,IAAI;AACb;;AC5IA,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;;AC9FD,MAAM,oBAAoB,GAAG,mBAAmB;MAEnC,OAAO,CAAA;AAOlB,IAAA,WAAA,CACE,GAAa,EACb,WAA+B,EAC/B,MAAc,EAAA;QANR,IAAA,CAAA,MAAM,GAAuB,IAAI;QACjC,IAAA,CAAA,YAAY,GAA4B,IAAI;AAOlD,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,MAAM,UAAU,GAAG,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE;AAE5D,YAAA,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,UAAU,CAAC;YACrC,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAE9D,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,IAAI,CAAC,UAAU,EAAE;AAC9C,gBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,gDAAgD,CAAC;gBACjE;YACF;YAEA,IAAI,UAAU,EAAE;gBACd,IAAI,CAAC,YAAY,EAAE;AACnB,gBAAA,MAAM,IAAI,CAAC,aAAa,EAAE;YAC5B;YAEA,IAAI,CAAC,iBAAiB,EAAE;QAC1B,CAAC,CAAA;AAAA,IAAA;IAEO,mBAAmB,GAAA;AACzB,QAAA,IAAI;YACF,MAAM,IAAI,GAAG,cAAc,CAAC,OAAO,CAAC,oBAAoB,CAAC;AACzD,YAAA,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,QAAQ,CAAC,QAAQ,CAAC;AACnD,YAAA,OAAO,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,QAAQ,CAAC,QAAQ,CAAC,WAAW,EAAE;QAClE;AAAE,QAAA,OAAA,EAAA,EAAM;AACN,YAAA,OAAO,KAAK;QACd;IACF;IAEQ,YAAY,GAAA;AAClB,QAAA,IAAI;AACF,YAAA,cAAc,CAAC,OAAO,CAAC,oBAAoB,EAAE,QAAQ,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;QAC/E;AAAE,QAAA,OAAA,EAAA,EAAM;;QAER;IACF;AAEA;;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;YAEA,IAAI,EAAC,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,WAAW,CAAA,EAAE;AAC7B,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,6CAA6C,CAAC;gBAC/D;YACF;AAEA,YAAA,MAAM,MAAM,GAAG,WAAW,EAAE;YAE5B,MAAM,IAAI,CAAC,GAAG,CAAC,aAAa,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAC1B,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE;AACJ,oBAAA,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI;iBAC1B,EACD,WAAW,EAAE,EAAE,EAAA,GACX,MAAM,IAAI,EAAE,MAAM,EAAE,EAAC,EAAA,EACzB,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,IACpC;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;;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;IACF;AACD;;ACrTD;;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;IACH,YAAY,GAAA;QACV,OAAO,YAAY,EAAE;IACvB;AAEA;;AAEG;IACH,gBAAgB,GAAA;QACd,OAAO,gBAAgB,EAAE;IAC3B;AAEA;;AAEG;IACH,YAAY,GAAA;QACV,OAAO,YAAY,EAAE;IACvB;AAEA;;AAEG;IACH,QAAQ,GAAA;QACN,OAAO,QAAQ,EAAE;IACnB;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;AAC5C,IAAA,MAAM,KAAK,GAAG,sBAAsB,EAAE;IACtC,IAAI,UAAU,EAAE;AACd,QAAA,MAAM,GAAG,GAAG,IAAI,QAAQ,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,KAAK,MAAM,EAAE,CAAC;AAChE,QAAA,MAAc,CAAC,KAAK,GAAG,GAAG;IAC7B;AACF;;;;","x_google_ignoreList":[0]}
|
package/dist/index.js
CHANGED
|
@@ -162,6 +162,27 @@ function getBrowserKeyFromScript() {
|
|
|
162
162
|
}
|
|
163
163
|
return null;
|
|
164
164
|
}
|
|
165
|
+
/**
|
|
166
|
+
* Gets the debug mode from script tag if present
|
|
167
|
+
*/
|
|
168
|
+
function getDebugModeFromScript() {
|
|
169
|
+
if (typeof window === 'undefined' || typeof document === 'undefined') {
|
|
170
|
+
return null;
|
|
171
|
+
}
|
|
172
|
+
const scripts = document.getElementsByTagName('script');
|
|
173
|
+
for (const script of Array.from(scripts)) {
|
|
174
|
+
if (script.src.includes('thred')) {
|
|
175
|
+
try {
|
|
176
|
+
const url = new URL(script.src);
|
|
177
|
+
return url.searchParams.get('debug');
|
|
178
|
+
}
|
|
179
|
+
catch (_a) {
|
|
180
|
+
// Invalid URL
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
return null;
|
|
185
|
+
}
|
|
165
186
|
|
|
166
187
|
const FP_PROXY_URL = 'https://thredproxy.com/35ZCuyzokuT1YGd8/Hm7KPMHUZ4duyPRj?apiKey=iyqKVLQt2560EQUyjfxa';
|
|
167
188
|
const FP_PROXY_ENDPOINT = 'https://thredproxy.com/35ZCuyzokuT1YGd8/qbWl4nqUSCIDTor4';
|
|
@@ -373,6 +394,8 @@ class Tracker {
|
|
|
373
394
|
return;
|
|
374
395
|
}
|
|
375
396
|
const aiDetected = isFromAI() && !this.isDuplicateReferrer();
|
|
397
|
+
console.log('aiDetected', aiDetected);
|
|
398
|
+
console.log('isDuplicateReferrer', this.isDuplicateReferrer());
|
|
376
399
|
if (!this.config.hasChatSession && !aiDetected) {
|
|
377
400
|
this.logger.log('No chat session for this fingerprint - exiting');
|
|
378
401
|
return;
|
|
@@ -387,6 +410,8 @@ class Tracker {
|
|
|
387
410
|
isDuplicateReferrer() {
|
|
388
411
|
try {
|
|
389
412
|
const prev = sessionStorage.getItem(REFERRER_SESSION_KEY);
|
|
413
|
+
console.log('prev', prev);
|
|
414
|
+
console.log('document.referrer', document.referrer);
|
|
390
415
|
return prev !== null && prev === document.referrer.toLowerCase();
|
|
391
416
|
}
|
|
392
417
|
catch (_a) {
|
|
@@ -712,8 +737,9 @@ class ThredSDK {
|
|
|
712
737
|
*/
|
|
713
738
|
if (typeof window !== 'undefined') {
|
|
714
739
|
const browserKey = getBrowserKeyFromScript();
|
|
740
|
+
const debug = getDebugModeFromScript();
|
|
715
741
|
if (browserKey) {
|
|
716
|
-
const sdk = new ThredSDK({ browserKey });
|
|
742
|
+
const sdk = new ThredSDK({ browserKey, debug: debug === 'true' });
|
|
717
743
|
window.Thred = sdk;
|
|
718
744
|
}
|
|
719
745
|
}
|
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 * Detects if the visitor came from Google Gemini\n */\nexport function isFromGemini(): 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 isGeminiRef = referrer.includes('gemini.google.com');\n const isGeminiUtm =\n utmSource === 'gemini' ||\n utmSource.includes('gemini') ||\n utmSource === 'google_gemini';\n\n return isGeminiRef || isGeminiUtm;\n}\n\n/**\n * Detects if the visitor came from Perplexity AI\n */\nexport function isFromPerplexity(): 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 isPerplexityRef = referrer.includes('perplexity.ai');\n const isPerplexityUtm =\n utmSource === 'perplexity' ||\n utmSource.includes('perplexity');\n\n return isPerplexityRef || isPerplexityUtm;\n}\n\n/**\n * Detects if the visitor came from Anthropic Claude\n */\nexport function isFromClaude(): 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 isClaudeRef = referrer.includes('claude.ai');\n const isClaudeUtm =\n utmSource === 'claude' ||\n utmSource.includes('claude') ||\n utmSource === 'anthropic';\n\n return isClaudeRef || isClaudeUtm;\n}\n\n/**\n * Detects if the visitor came from any supported AI source.\n */\nexport function isFromAI(): boolean {\n return isFromChatGPT() || isFromGemini() || isFromPerplexity() || isFromClaude();\n}\n\nexport type AISource = 'chatgpt' | 'gemini' | 'pplx' | 'claude';\n\n/**\n * Returns the detected AI source, or null if the visitor didn't come from a known AI.\n */\nexport function getAISource(): AISource | null {\n if (isFromChatGPT()) return 'chatgpt';\n if (isFromGemini()) return 'gemini';\n if (isFromPerplexity()) return 'pplx';\n if (isFromClaude()) return 'claude';\n return null;\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 { isFromAI, getAISource } from '../utils/detector';\nimport { ThredAPI } from './api';\nimport { FingerprintManager } from './fingerprint';\n\nconst REFERRER_SESSION_KEY = 'thred_ai_referrer';\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\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 const aiDetected = isFromAI() && !this.isDuplicateReferrer();\n\n if (!this.config.hasChatSession && !aiDetected) {\n this.logger.log('No chat session for this fingerprint - exiting');\n return;\n }\n\n if (aiDetected) {\n this.saveReferrer();\n await this.trackPageView();\n }\n\n this.setupFormTracking();\n }\n\n private isDuplicateReferrer(): boolean {\n try {\n const prev = sessionStorage.getItem(REFERRER_SESSION_KEY);\n return prev !== null && prev === document.referrer.toLowerCase();\n } catch {\n return false;\n }\n }\n\n private saveReferrer(): void {\n try {\n sessionStorage.setItem(REFERRER_SESSION_KEY, document.referrer.toLowerCase());\n } catch {\n // sessionStorage unavailable\n }\n }\n\n /**\n * Track a single page view for the AI click-through landing.\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 if (!this.config?.sessionCode) {\n this.logger.warn('Cannot track page view without session code');\n return;\n }\n\n const source = getAISource();\n\n await this.api.trackPageView({\n event: 'page_view',\n data: {\n url: window.location.href,\n },\n fingerprint: fp,\n ...(source && { source }),\n sessionCode: this.config.sessionCode,\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 * 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}\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, isFromGemini, isFromPerplexity, isFromClaude, isFromAI, 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 * Check if visitor is from Google Gemini\n */\n isFromGemini(): boolean {\n return isFromGemini();\n }\n\n /**\n * Check if visitor is from Perplexity AI\n */\n isFromPerplexity(): boolean {\n return isFromPerplexity();\n }\n\n /**\n * Check if visitor is from Anthropic Claude\n */\n isFromClaude(): boolean {\n return isFromClaude();\n }\n\n /**\n * Check if visitor is from any supported AI source\n */\n isFromAI(): boolean {\n return isFromAI();\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.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 * Detects if the visitor came from Google Gemini\n */\nexport function isFromGemini(): 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 isGeminiRef = referrer.includes('gemini.google.com');\n const isGeminiUtm =\n utmSource === 'gemini' ||\n utmSource.includes('gemini') ||\n utmSource === 'google_gemini';\n\n return isGeminiRef || isGeminiUtm;\n}\n\n/**\n * Detects if the visitor came from Perplexity AI\n */\nexport function isFromPerplexity(): 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 isPerplexityRef = referrer.includes('perplexity.ai');\n const isPerplexityUtm =\n utmSource === 'perplexity' ||\n utmSource.includes('perplexity');\n\n return isPerplexityRef || isPerplexityUtm;\n}\n\n/**\n * Detects if the visitor came from Anthropic Claude\n */\nexport function isFromClaude(): 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 isClaudeRef = referrer.includes('claude.ai');\n const isClaudeUtm =\n utmSource === 'claude' ||\n utmSource.includes('claude') ||\n utmSource === 'anthropic';\n\n return isClaudeRef || isClaudeUtm;\n}\n\n/**\n * Detects if the visitor came from any supported AI source.\n */\nexport function isFromAI(): boolean {\n return isFromChatGPT() || isFromGemini() || isFromPerplexity() || isFromClaude();\n}\n\nexport type AISource = 'chatgpt' | 'gemini' | 'pplx' | 'claude';\n\n/**\n * Returns the detected AI source, or null if the visitor didn't come from a known AI.\n */\nexport function getAISource(): AISource | null {\n if (isFromChatGPT()) return 'chatgpt';\n if (isFromGemini()) return 'gemini';\n if (isFromPerplexity()) return 'pplx';\n if (isFromClaude()) return 'claude';\n return null;\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\n/**\n * Gets the debug mode from script tag if present\n */\nexport function getDebugModeFromScript(): 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('debug');\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 { isFromAI, getAISource } from '../utils/detector';\nimport { ThredAPI } from './api';\nimport { FingerprintManager } from './fingerprint';\n\nconst REFERRER_SESSION_KEY = 'thred_ai_referrer';\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\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 const aiDetected = isFromAI() && !this.isDuplicateReferrer();\n\n console.log('aiDetected', aiDetected);\n console.log('isDuplicateReferrer', this.isDuplicateReferrer());\n\n if (!this.config.hasChatSession && !aiDetected) {\n this.logger.log('No chat session for this fingerprint - exiting');\n return;\n }\n\n if (aiDetected) {\n this.saveReferrer();\n await this.trackPageView();\n }\n\n this.setupFormTracking();\n }\n\n private isDuplicateReferrer(): boolean {\n try {\n const prev = sessionStorage.getItem(REFERRER_SESSION_KEY);\n console.log('prev', prev);\n console.log('document.referrer', document.referrer);\n return prev !== null && prev === document.referrer.toLowerCase();\n } catch {\n return false;\n }\n }\n\n private saveReferrer(): void {\n try {\n sessionStorage.setItem(REFERRER_SESSION_KEY, document.referrer.toLowerCase());\n } catch {\n // sessionStorage unavailable\n }\n }\n\n /**\n * Track a single page view for the AI click-through landing.\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 if (!this.config?.sessionCode) {\n this.logger.warn('Cannot track page view without session code');\n return;\n }\n\n const source = getAISource();\n\n await this.api.trackPageView({\n event: 'page_view',\n data: {\n url: window.location.href,\n },\n fingerprint: fp,\n ...(source && { source }),\n sessionCode: this.config.sessionCode,\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 * 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}\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, isFromGemini, isFromPerplexity, isFromClaude, isFromAI, getBrowserKeyFromScript, getDebugModeFromScript } 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 * Check if visitor is from Google Gemini\n */\n isFromGemini(): boolean {\n return isFromGemini();\n }\n\n /**\n * Check if visitor is from Perplexity AI\n */\n isFromPerplexity(): boolean {\n return isFromPerplexity();\n }\n\n /**\n * Check if visitor is from Anthropic Claude\n */\n isFromClaude(): boolean {\n return isFromClaude();\n }\n\n /**\n * Check if visitor is from any supported AI source\n */\n isFromAI(): boolean {\n return isFromAI();\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 const debug = getDebugModeFromScript();\n if (browserKey) {\n const sdk = new ThredSDK({ browserKey, debug: debug === 'true' });\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(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).Thred={})}(this,function(e){"use strict";function t(e,t,i,r){return new(i||(i=Promise))(function(n,o){function s(e){try{a(r.next(e))}catch(e){o(e)}}function c(e){try{a(r.throw(e))}catch(e){o(e)}}function a(e){var t;e.done?n(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(s,c)}a((r=r.apply(e,t||[])).next())})}"function"==typeof SuppressedError&&SuppressedError;class i{constructor(e=!1,t="[Thred]"){this.debug=e,this.prefix=t}log(...e){this.debug&&console.log(this.prefix,...e)}warn(...e){this.debug&&console.warn(this.prefix,...e)}error(...e){console.error(this.prefix,...e)}}function r(){var e;if("undefined"==typeof window)return!1;const t=(null===(e=new URLSearchParams(window.location.search).get("utm_source"))||void 0===e?void 0:e.toLowerCase())||"",i=document.referrer.toLowerCase(),r=i.includes("chat.openai.com")||i.includes("chatgpt.com");return"chatgpt"===t||t.includes("chatgpt")||"chat.openai"===t||"openai"===t||r}function n(){var e;if("undefined"==typeof window)return!1;const t=(null===(e=new URLSearchParams(window.location.search).get("utm_source"))||void 0===e?void 0:e.toLowerCase())||"",i=document.referrer.toLowerCase().includes("gemini.google.com"),r="gemini"===t||t.includes("gemini")||"google_gemini"===t;return i||r}function o(){var e;if("undefined"==typeof window)return!1;const t=(null===(e=new URLSearchParams(window.location.search).get("utm_source"))||void 0===e?void 0:e.toLowerCase())||"",i=document.referrer.toLowerCase().includes("perplexity.ai"),r="perplexity"===t||t.includes("perplexity");return i||r}function s(){var e;if("undefined"==typeof window)return!1;const t=(null===(e=new URLSearchParams(window.location.search).get("utm_source"))||void 0===e?void 0:e.toLowerCase())||"",i=document.referrer.toLowerCase().includes("claude.ai"),r="claude"===t||t.includes("claude")||"anthropic"===t;return i||r}function c(){return r()||n()||o()||s()}const a="thred_fingerprint";class g{constructor(e){this.fingerprint=null,this.promise=null,this.logger=e}getFingerprint(){return t(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 e=this.readStorage();return e?(this.fingerprint=e,this.logger.log("Using stored fingerprint:",this.fingerprint),this.fingerprint):(this.promise=this.generateFingerprint(),this.promise)})}generateFingerprint(){return t(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 e=yield import("https://thredproxy.com/35ZCuyzokuT1YGd8/Hm7KPMHUZ4duyPRj?apiKey=iyqKVLQt2560EQUyjfxa"),t=yield e.load({endpoint:["https://thredproxy.com/35ZCuyzokuT1YGd8/qbWl4nqUSCIDTor4",e.defaultEndpoint]}),i=yield t.get();return this.fingerprint=i.visitorId,this.writeStorage(this.fingerprint),this.logger.log("Fingerprint generated:",this.fingerprint),this.fingerprint}catch(e){return this.logger.warn("Fingerprint generation failed:",e),null}})}getCachedFingerprint(){return this.fingerprint}clear(){this.fingerprint=null,this.promise=null,this.removeStorage()}readStorage(){try{return"undefined"!=typeof window?localStorage.getItem(a):null}catch(e){return null}}writeStorage(e){try{"undefined"!=typeof window&&localStorage.setItem(a,e)}catch(e){this.logger.warn("Failed to persist fingerprint to localStorage")}}removeStorage(){try{"undefined"!=typeof window&&localStorage.removeItem(a)}catch(e){}}}class d{constructor(e,t,i){this.baseUrl=e,this.browserKey=t,this.logger=i}fetchConfig(e){return t(this,void 0,void 0,function*(){try{const t=`${this.baseUrl}/config?fingerprint=${encodeURIComponent(e)}&browserKey=${encodeURIComponent(this.browserKey)}`;this.logger.log("Fetching config from:",t);const i=yield fetch(t,{method:"GET",headers:{Accept:"application/json"}});if(!i.ok)throw new Error(`Config request failed: ${i.status}`);const r=yield i.json();return this.logger.log("Config received:",r),r}catch(e){return this.logger.warn("Failed to fetch config:",e),null}})}trackPageView(e){return t(this,void 0,void 0,function*(){try{const t=`${this.baseUrl}/events/page-view?browserKey=${encodeURIComponent(this.browserKey)}`;this.logger.log("Tracking page view:",t);const i=yield fetch(t,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e),keepalive:!0});if(!i.ok)throw new Error(`Page view request failed: ${i.status}`);this.logger.log("Page view tracked successfully")}catch(e){this.logger.warn("Failed to track page view:",e)}})}enrichLead(e){return t(this,void 0,void 0,function*(){try{const t=`${this.baseUrl}/customers/enrich?browserKey=${encodeURIComponent(this.browserKey)}`;this.logger.log("Enriching lead:",t);const i=yield fetch(t,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e),keepalive:!0});if(!i.ok)throw new Error(`Enrich request failed: ${i.status}`);this.logger.log("Lead enriched successfully")}catch(e){this.logger.warn("Failed to enrich lead:",e)}})}}const h="thred_ai_referrer";class l{constructor(e,t,i){this.config=null,this.formObserver=null,this.api=e,this.fingerprint=t,this.logger=i}init(){return t(this,void 0,void 0,function*(){var e;const t=yield this.fingerprint.getFingerprint();if(!t)return void this.logger.warn("Cannot initialize tracker without fingerprint");if(this.config=yield this.api.fetchConfig(t),!(null===(e=this.config)||void 0===e?void 0:e.enabled))return void this.logger.log("Tracking disabled by config");const i=c()&&!this.isDuplicateReferrer();this.config.hasChatSession||i?(i&&(this.saveReferrer(),yield this.trackPageView()),this.setupFormTracking()):this.logger.log("No chat session for this fingerprint - exiting")})}isDuplicateReferrer(){try{const e=sessionStorage.getItem(h);return null!==e&&e===document.referrer.toLowerCase()}catch(e){return!1}}saveReferrer(){try{sessionStorage.setItem(h,document.referrer.toLowerCase())}catch(e){}}trackPageView(){return t(this,void 0,void 0,function*(){var e;if("undefined"==typeof window)return;const t=yield this.fingerprint.getFingerprint();if(!t)return void this.logger.warn("Cannot track page view without fingerprint");if(!(null===(e=this.config)||void 0===e?void 0:e.sessionCode))return void this.logger.warn("Cannot track page view without session code");const i=r()?"chatgpt":n()?"gemini":o()?"pplx":s()?"claude":null;yield this.api.trackPageView(Object.assign(Object.assign({event:"page_view",data:{url:window.location.href},fingerprint:t},i&&{source:i}),{sessionCode:this.config.sessionCode}))})}trackFormSubmit(e){return t(this,void 0,void 0,function*(){var t,i,r;if(!this.config||!this.config.emailId||!this.config.nameId)return void this.logger.warn("Cannot track form - no config loaded");const n=null===(t=e.get(this.config.emailId))||void 0===t?void 0:t.toString().trim(),o=null===(i=e.get(this.config.nameId))||void 0===i?void 0:i.toString().trim();let s;this.config.companyId&&(s=null===(r=e.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(e){return t(this,void 0,void 0,function*(){const t=yield this.fingerprint.getFingerprint();t?yield this.api.enrichLead({fingerprint:t,leadData:e}):this.logger.warn("Cannot identify without fingerprint")})}setupFormTracking(){if(this.config&&"undefined"!=typeof document){if("hosted"===this.config.type){const e=this.config.hostedUrlBase;return e?(this.injectFingerprintIntoLinks(document.body,e),this.formObserver=new MutationObserver(t=>{for(const i of t)for(const t of Array.from(i.addedNodes))t instanceof HTMLElement&&("A"===t.tagName&&this.injectFingerprintIntoLink(t,e),this.injectFingerprintIntoLinks(t,e))}),this.formObserver.observe(document.body,{childList:!0,subtree:!0}),void document.addEventListener("click",t=>{const i=t.target.closest("a");if(!i)return;const r=i.getAttribute("href");r&&r.includes(e)&&(r.includes("utm_fp=")||this.injectFingerprintIntoLink(i,e))},{capture:!0})):void this.logger.warn("Cannot track form - no hosted URL base")}if("custom"===this.config.type){const e=()=>{if(!this.config||!this.config.formId)return void this.logger.warn("Cannot track form - no form ID");const e=document.getElementById(this.config.formId);if(!e)return void this.logger.log("Form not found:",this.config.formId);const t=e;t.dataset.thredTracked||(this.logger.log("Attaching listener to form:",this.config.formId),t.addEventListener("submit",()=>{const e=new FormData(t);this.trackFormSubmit(e)},{capture:!0}),t.dataset.thredTracked="true")};e(),this.formObserver=new MutationObserver(()=>{e()}),this.formObserver.observe(document.body,{childList:!0,subtree:!0})}}else this.logger.warn("Cannot track form - no config or document")}injectFingerprintIntoLinks(e,t){const i=e.querySelectorAll("a[href]");for(const e of Array.from(i))this.injectFingerprintIntoLink(e,t)}injectFingerprintIntoLink(e,t){const i=e.getAttribute("href");if(!i||!i.includes(t))return;if(i.includes("utm_fp="))return;const r=this.fingerprint.getCachedFingerprint();if(r)try{const t=new URL(i,window.location.origin);t.searchParams.set("utm_fp",r),e.setAttribute("href",t.toString()),this.logger.log("Injected utm_fp into link:",t.toString())}catch(e){this.logger.warn("Failed to parse URL:",i,e)}else this.logger.warn("Cannot inject utm_fp - no cached fingerprint")}destroy(){this.formObserver&&(this.formObserver.disconnect(),this.formObserver=null)}}class f{constructor(e){this.initialized=!1,this.options=Object.assign({baseUrl:"https://api.thred.dev/v1",debug:!1,autoInit:!0},e),this.logger=new i(this.options.debug),this.fingerprint=new g(this.logger),this.api=new d(this.options.baseUrl,this.options.browserKey,this.logger),this.tracker=new l(this.api,this.fingerprint,this.logger),this.options.autoInit&&this.init()}init(){return t(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()}isFromGemini(){return n()}isFromPerplexity(){return o()}isFromClaude(){return s()}isFromAI(){return c()}trackPageView(){return t(this,void 0,void 0,function*(){yield this.tracker.trackPageView()})}trackFormSubmit(e){return t(this,void 0,void 0,function*(){yield this.tracker.trackFormSubmit(e)})}identify(e){return t(this,void 0,void 0,function*(){yield this.tracker.identify(e)})}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 e=function(){if("undefined"==typeof window||"undefined"==typeof document)return null;const e=document.getElementsByTagName("script");for(const t of Array.from(e))if(t.src.includes("thred"))try{return new URL(t.src).searchParams.get("browserKey")}catch(e){}return null}();if(e){const t=new f({browserKey:e});window.Thred=t}}e.ThredSDK=f,e.default=f,Object.defineProperty(e,"__esModule",{value:!0})});
|
|
1
|
+
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).Thred={})}(this,function(e){"use strict";function t(e,t,i,r){return new(i||(i=Promise))(function(n,o){function s(e){try{a(r.next(e))}catch(e){o(e)}}function c(e){try{a(r.throw(e))}catch(e){o(e)}}function a(e){var t;e.done?n(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(s,c)}a((r=r.apply(e,t||[])).next())})}"function"==typeof SuppressedError&&SuppressedError;class i{constructor(e=!1,t="[Thred]"){this.debug=e,this.prefix=t}log(...e){this.debug&&console.log(this.prefix,...e)}warn(...e){this.debug&&console.warn(this.prefix,...e)}error(...e){console.error(this.prefix,...e)}}function r(){var e;if("undefined"==typeof window)return!1;const t=(null===(e=new URLSearchParams(window.location.search).get("utm_source"))||void 0===e?void 0:e.toLowerCase())||"",i=document.referrer.toLowerCase(),r=i.includes("chat.openai.com")||i.includes("chatgpt.com");return"chatgpt"===t||t.includes("chatgpt")||"chat.openai"===t||"openai"===t||r}function n(){var e;if("undefined"==typeof window)return!1;const t=(null===(e=new URLSearchParams(window.location.search).get("utm_source"))||void 0===e?void 0:e.toLowerCase())||"",i=document.referrer.toLowerCase().includes("gemini.google.com"),r="gemini"===t||t.includes("gemini")||"google_gemini"===t;return i||r}function o(){var e;if("undefined"==typeof window)return!1;const t=(null===(e=new URLSearchParams(window.location.search).get("utm_source"))||void 0===e?void 0:e.toLowerCase())||"",i=document.referrer.toLowerCase().includes("perplexity.ai"),r="perplexity"===t||t.includes("perplexity");return i||r}function s(){var e;if("undefined"==typeof window)return!1;const t=(null===(e=new URLSearchParams(window.location.search).get("utm_source"))||void 0===e?void 0:e.toLowerCase())||"",i=document.referrer.toLowerCase().includes("claude.ai"),r="claude"===t||t.includes("claude")||"anthropic"===t;return i||r}function c(){return r()||n()||o()||s()}const a="thred_fingerprint";class d{constructor(e){this.fingerprint=null,this.promise=null,this.logger=e}getFingerprint(){return t(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 e=this.readStorage();return e?(this.fingerprint=e,this.logger.log("Using stored fingerprint:",this.fingerprint),this.fingerprint):(this.promise=this.generateFingerprint(),this.promise)})}generateFingerprint(){return t(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 e=yield import("https://thredproxy.com/35ZCuyzokuT1YGd8/Hm7KPMHUZ4duyPRj?apiKey=iyqKVLQt2560EQUyjfxa"),t=yield e.load({endpoint:["https://thredproxy.com/35ZCuyzokuT1YGd8/qbWl4nqUSCIDTor4",e.defaultEndpoint]}),i=yield t.get();return this.fingerprint=i.visitorId,this.writeStorage(this.fingerprint),this.logger.log("Fingerprint generated:",this.fingerprint),this.fingerprint}catch(e){return this.logger.warn("Fingerprint generation failed:",e),null}})}getCachedFingerprint(){return this.fingerprint}clear(){this.fingerprint=null,this.promise=null,this.removeStorage()}readStorage(){try{return"undefined"!=typeof window?localStorage.getItem(a):null}catch(e){return null}}writeStorage(e){try{"undefined"!=typeof window&&localStorage.setItem(a,e)}catch(e){this.logger.warn("Failed to persist fingerprint to localStorage")}}removeStorage(){try{"undefined"!=typeof window&&localStorage.removeItem(a)}catch(e){}}}class g{constructor(e,t,i){this.baseUrl=e,this.browserKey=t,this.logger=i}fetchConfig(e){return t(this,void 0,void 0,function*(){try{const t=`${this.baseUrl}/config?fingerprint=${encodeURIComponent(e)}&browserKey=${encodeURIComponent(this.browserKey)}`;this.logger.log("Fetching config from:",t);const i=yield fetch(t,{method:"GET",headers:{Accept:"application/json"}});if(!i.ok)throw new Error(`Config request failed: ${i.status}`);const r=yield i.json();return this.logger.log("Config received:",r),r}catch(e){return this.logger.warn("Failed to fetch config:",e),null}})}trackPageView(e){return t(this,void 0,void 0,function*(){try{const t=`${this.baseUrl}/events/page-view?browserKey=${encodeURIComponent(this.browserKey)}`;this.logger.log("Tracking page view:",t);const i=yield fetch(t,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e),keepalive:!0});if(!i.ok)throw new Error(`Page view request failed: ${i.status}`);this.logger.log("Page view tracked successfully")}catch(e){this.logger.warn("Failed to track page view:",e)}})}enrichLead(e){return t(this,void 0,void 0,function*(){try{const t=`${this.baseUrl}/customers/enrich?browserKey=${encodeURIComponent(this.browserKey)}`;this.logger.log("Enriching lead:",t);const i=yield fetch(t,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e),keepalive:!0});if(!i.ok)throw new Error(`Enrich request failed: ${i.status}`);this.logger.log("Lead enriched successfully")}catch(e){this.logger.warn("Failed to enrich lead:",e)}})}}const l="thred_ai_referrer";class h{constructor(e,t,i){this.config=null,this.formObserver=null,this.api=e,this.fingerprint=t,this.logger=i}init(){return t(this,void 0,void 0,function*(){var e;const t=yield this.fingerprint.getFingerprint();if(!t)return void this.logger.warn("Cannot initialize tracker without fingerprint");if(this.config=yield this.api.fetchConfig(t),!(null===(e=this.config)||void 0===e?void 0:e.enabled))return void this.logger.log("Tracking disabled by config");const i=c()&&!this.isDuplicateReferrer();console.log("aiDetected",i),console.log("isDuplicateReferrer",this.isDuplicateReferrer()),this.config.hasChatSession||i?(i&&(this.saveReferrer(),yield this.trackPageView()),this.setupFormTracking()):this.logger.log("No chat session for this fingerprint - exiting")})}isDuplicateReferrer(){try{const e=sessionStorage.getItem(l);return console.log("prev",e),console.log("document.referrer",document.referrer),null!==e&&e===document.referrer.toLowerCase()}catch(e){return!1}}saveReferrer(){try{sessionStorage.setItem(l,document.referrer.toLowerCase())}catch(e){}}trackPageView(){return t(this,void 0,void 0,function*(){var e;if("undefined"==typeof window)return;const t=yield this.fingerprint.getFingerprint();if(!t)return void this.logger.warn("Cannot track page view without fingerprint");if(!(null===(e=this.config)||void 0===e?void 0:e.sessionCode))return void this.logger.warn("Cannot track page view without session code");const i=r()?"chatgpt":n()?"gemini":o()?"pplx":s()?"claude":null;yield this.api.trackPageView(Object.assign(Object.assign({event:"page_view",data:{url:window.location.href},fingerprint:t},i&&{source:i}),{sessionCode:this.config.sessionCode}))})}trackFormSubmit(e){return t(this,void 0,void 0,function*(){var t,i,r;if(!this.config||!this.config.emailId||!this.config.nameId)return void this.logger.warn("Cannot track form - no config loaded");const n=null===(t=e.get(this.config.emailId))||void 0===t?void 0:t.toString().trim(),o=null===(i=e.get(this.config.nameId))||void 0===i?void 0:i.toString().trim();let s;this.config.companyId&&(s=null===(r=e.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(e){return t(this,void 0,void 0,function*(){const t=yield this.fingerprint.getFingerprint();t?yield this.api.enrichLead({fingerprint:t,leadData:e}):this.logger.warn("Cannot identify without fingerprint")})}setupFormTracking(){if(this.config&&"undefined"!=typeof document){if("hosted"===this.config.type){const e=this.config.hostedUrlBase;return e?(this.injectFingerprintIntoLinks(document.body,e),this.formObserver=new MutationObserver(t=>{for(const i of t)for(const t of Array.from(i.addedNodes))t instanceof HTMLElement&&("A"===t.tagName&&this.injectFingerprintIntoLink(t,e),this.injectFingerprintIntoLinks(t,e))}),this.formObserver.observe(document.body,{childList:!0,subtree:!0}),void document.addEventListener("click",t=>{const i=t.target.closest("a");if(!i)return;const r=i.getAttribute("href");r&&r.includes(e)&&(r.includes("utm_fp=")||this.injectFingerprintIntoLink(i,e))},{capture:!0})):void this.logger.warn("Cannot track form - no hosted URL base")}if("custom"===this.config.type){const e=()=>{if(!this.config||!this.config.formId)return void this.logger.warn("Cannot track form - no form ID");const e=document.getElementById(this.config.formId);if(!e)return void this.logger.log("Form not found:",this.config.formId);const t=e;t.dataset.thredTracked||(this.logger.log("Attaching listener to form:",this.config.formId),t.addEventListener("submit",()=>{const e=new FormData(t);this.trackFormSubmit(e)},{capture:!0}),t.dataset.thredTracked="true")};e(),this.formObserver=new MutationObserver(()=>{e()}),this.formObserver.observe(document.body,{childList:!0,subtree:!0})}}else this.logger.warn("Cannot track form - no config or document")}injectFingerprintIntoLinks(e,t){const i=e.querySelectorAll("a[href]");for(const e of Array.from(i))this.injectFingerprintIntoLink(e,t)}injectFingerprintIntoLink(e,t){const i=e.getAttribute("href");if(!i||!i.includes(t))return;if(i.includes("utm_fp="))return;const r=this.fingerprint.getCachedFingerprint();if(r)try{const t=new URL(i,window.location.origin);t.searchParams.set("utm_fp",r),e.setAttribute("href",t.toString()),this.logger.log("Injected utm_fp into link:",t.toString())}catch(e){this.logger.warn("Failed to parse URL:",i,e)}else this.logger.warn("Cannot inject utm_fp - no cached fingerprint")}destroy(){this.formObserver&&(this.formObserver.disconnect(),this.formObserver=null)}}class u{constructor(e){this.initialized=!1,this.options=Object.assign({baseUrl:"https://api.thred.dev/v1",debug:!1,autoInit:!0},e),this.logger=new i(this.options.debug),this.fingerprint=new d(this.logger),this.api=new g(this.options.baseUrl,this.options.browserKey,this.logger),this.tracker=new h(this.api,this.fingerprint,this.logger),this.options.autoInit&&this.init()}init(){return t(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()}isFromGemini(){return n()}isFromPerplexity(){return o()}isFromClaude(){return s()}isFromAI(){return c()}trackPageView(){return t(this,void 0,void 0,function*(){yield this.tracker.trackPageView()})}trackFormSubmit(e){return t(this,void 0,void 0,function*(){yield this.tracker.trackFormSubmit(e)})}identify(e){return t(this,void 0,void 0,function*(){yield this.tracker.identify(e)})}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 e=function(){if("undefined"==typeof window||"undefined"==typeof document)return null;const e=document.getElementsByTagName("script");for(const t of Array.from(e))if(t.src.includes("thred"))try{return new URL(t.src).searchParams.get("browserKey")}catch(e){}return null}(),t=function(){if("undefined"==typeof window||"undefined"==typeof document)return null;const e=document.getElementsByTagName("script");for(const t of Array.from(e))if(t.src.includes("thred"))try{return new URL(t.src).searchParams.get("debug")}catch(e){}return null}();if(e){const i=new u({browserKey:e,debug:"true"===t});window.Thred=i}}e.ThredSDK=u,e.default=u,Object.defineProperty(e,"__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 * Detects if the visitor came from Google Gemini\n */\nexport function isFromGemini(): 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 isGeminiRef = referrer.includes('gemini.google.com');\n const isGeminiUtm =\n utmSource === 'gemini' ||\n utmSource.includes('gemini') ||\n utmSource === 'google_gemini';\n\n return isGeminiRef || isGeminiUtm;\n}\n\n/**\n * Detects if the visitor came from Perplexity AI\n */\nexport function isFromPerplexity(): 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 isPerplexityRef = referrer.includes('perplexity.ai');\n const isPerplexityUtm =\n utmSource === 'perplexity' ||\n utmSource.includes('perplexity');\n\n return isPerplexityRef || isPerplexityUtm;\n}\n\n/**\n * Detects if the visitor came from Anthropic Claude\n */\nexport function isFromClaude(): 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 isClaudeRef = referrer.includes('claude.ai');\n const isClaudeUtm =\n utmSource === 'claude' ||\n utmSource.includes('claude') ||\n utmSource === 'anthropic';\n\n return isClaudeRef || isClaudeUtm;\n}\n\n/**\n * Detects if the visitor came from any supported AI source.\n */\nexport function isFromAI(): boolean {\n return isFromChatGPT() || isFromGemini() || isFromPerplexity() || isFromClaude();\n}\n\nexport type AISource = 'chatgpt' | 'gemini' | 'pplx' | 'claude';\n\n/**\n * Returns the detected AI source, or null if the visitor didn't come from a known AI.\n */\nexport function getAISource(): AISource | null {\n if (isFromChatGPT()) return 'chatgpt';\n if (isFromGemini()) return 'gemini';\n if (isFromPerplexity()) return 'pplx';\n if (isFromClaude()) return 'claude';\n return null;\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 { isFromAI, getAISource } from '../utils/detector';\nimport { ThredAPI } from './api';\nimport { FingerprintManager } from './fingerprint';\n\nconst REFERRER_SESSION_KEY = 'thred_ai_referrer';\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\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 const aiDetected = isFromAI() && !this.isDuplicateReferrer();\n\n if (!this.config.hasChatSession && !aiDetected) {\n this.logger.log('No chat session for this fingerprint - exiting');\n return;\n }\n\n if (aiDetected) {\n this.saveReferrer();\n await this.trackPageView();\n }\n\n this.setupFormTracking();\n }\n\n private isDuplicateReferrer(): boolean {\n try {\n const prev = sessionStorage.getItem(REFERRER_SESSION_KEY);\n return prev !== null && prev === document.referrer.toLowerCase();\n } catch {\n return false;\n }\n }\n\n private saveReferrer(): void {\n try {\n sessionStorage.setItem(REFERRER_SESSION_KEY, document.referrer.toLowerCase());\n } catch {\n // sessionStorage unavailable\n }\n }\n\n /**\n * Track a single page view for the AI click-through landing.\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 if (!this.config?.sessionCode) {\n this.logger.warn('Cannot track page view without session code');\n return;\n }\n\n const source = getAISource();\n\n await this.api.trackPageView({\n event: 'page_view',\n data: {\n url: window.location.href,\n },\n fingerprint: fp,\n ...(source && { source }),\n sessionCode: this.config.sessionCode,\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 * 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}\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, isFromGemini, isFromPerplexity, isFromClaude, isFromAI, 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 * Check if visitor is from Google Gemini\n */\n isFromGemini(): boolean {\n return isFromGemini();\n }\n\n /**\n * Check if visitor is from Perplexity AI\n */\n isFromPerplexity(): boolean {\n return isFromPerplexity();\n }\n\n /**\n * Check if visitor is from Anthropic Claude\n */\n isFromClaude(): boolean {\n return isFromClaude();\n }\n\n /**\n * Check if visitor is from any supported AI source\n */\n isFromAI(): boolean {\n return isFromAI();\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","isFromGemini","isGeminiRef","isGeminiUtm","isFromPerplexity","isPerplexityRef","isPerplexityUtm","isFromClaude","isClaudeRef","isClaudeUtm","isFromAI","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","REFERRER_SESSION_KEY","Tracker","api","formObserver","init","enabled","aiDetected","isDuplicateReferrer","hasChatSession","saveReferrer","setupFormTracking","prev","sessionStorage","sessionCode","source","Object","assign","event","data","href","trackFormSubmit","formData","emailId","nameId","email","toString","trim","name","_b","company","companyId","_c","identify","discovery","leadData","type","hostedUrlBase","injectFingerprintIntoLinks","MutationObserver","mutations","mutation","node","Array","from","addedNodes","HTMLElement","tagName","injectFingerprintIntoLink","observe","childList","subtree","addEventListener","target","closest","getAttribute","capture","attachFormListener","formId","form","getElementById","formElement","dataset","thredTracked","FormData","root","links","querySelectorAll","link","URL","origin","searchParams","set","setAttribute","err","destroy","disconnect","ThredSDK","options","initialized","autoInit","tracker","scripts","getElementsByTagName","script","src","getBrowserKeyFromScript","sdk","Thred"],"mappings":"4OAkHO,SAASA,EAAUC,EAASC,EAAYC,EAAGC,GAE9C,OAAO,IAAKD,IAAMA,EAAIE,UAAU,SAAUC,EAASC,GAC/C,SAASC,EAAUC,GAAS,IAAMC,EAAKN,EAAUO,KAAKF,GAAS,CAAE,MAAOG,GAAKL,EAAOK,EAAI,CAAE,CAC1F,SAASC,EAASJ,GAAS,IAAMC,EAAKN,EAAiB,MAAEK,GAAS,CAAE,MAAOG,GAAKL,EAAOK,EAAI,CAAE,CAC7F,SAASF,EAAKI,GAJlB,IAAeL,EAIaK,EAAOC,KAAOT,EAAQQ,EAAOL,QAJ1CA,EAIyDK,EAAOL,MAJhDA,aAAiBN,EAAIM,EAAQ,IAAIN,EAAE,SAAUG,GAAWA,EAAQG,EAAQ,IAIjBO,KAAKR,EAAWK,EAAW,CAC7GH,GAAMN,EAAYA,EAAUa,MAAMhB,EAASC,GAAc,KAAKS,OAClE,EACJ,CA8MkD,mBAApBO,iBAAiCA,sBCrUlDC,EAIX,WAAAC,CAAYC,GAAQ,EAAOC,EAAS,WAClCC,KAAKF,MAAQA,EACbE,KAAKD,OAASA,CAChB,CAEA,GAAAE,IAAOC,GACDF,KAAKF,OACPK,QAAQF,IAAID,KAAKD,UAAWG,EAEhC,CAEA,IAAAE,IAAQF,GACFF,KAAKF,OACPK,QAAQC,KAAKJ,KAAKD,UAAWG,EAEjC,CAEA,KAAAG,IAASH,GACPC,QAAQE,MAAML,KAAKD,UAAWG,EAChC,WCvBcI,UACd,GAAsB,oBAAXC,OAAwB,OAAO,EAE1C,MACMC,GAAoC,QAAxBC,EADH,IAAIC,gBAAgBH,OAAOI,SAASC,QAC1BC,IAAI,qBAAa,IAAAJ,OAAA,EAAAA,EAAEK,gBAAiB,GACvDC,EAAWC,SAASD,SAASD,cAE7BG,EACJF,EAASG,SAAS,oBAAsBH,EAASG,SAAS,eAO5D,MALgB,YAAdV,GACAA,EAAUU,SAAS,YACL,gBAAdV,GACc,WAAdA,GAEqBS,CACzB,UAKgBE,UACd,GAAsB,oBAAXZ,OAAwB,OAAO,EAE1C,MACMC,GAAoC,QAAxBC,EADH,IAAIC,gBAAgBH,OAAOI,SAASC,QAC1BC,IAAI,qBAAa,IAAAJ,OAAA,EAAAA,EAAEK,gBAAiB,GAGvDM,EAFWJ,SAASD,SAASD,cAENI,SAAS,qBAChCG,EACU,WAAdb,GACAA,EAAUU,SAAS,WACL,kBAAdV,EAEF,OAAOY,GAAeC,CACxB,UAKgBC,UACd,GAAsB,oBAAXf,OAAwB,OAAO,EAE1C,MACMC,GAAoC,QAAxBC,EADH,IAAIC,gBAAgBH,OAAOI,SAASC,QAC1BC,IAAI,qBAAa,IAAAJ,OAAA,EAAAA,EAAEK,gBAAiB,GAGvDS,EAFWP,SAASD,SAASD,cAEFI,SAAS,iBACpCM,EACU,eAAdhB,GACAA,EAAUU,SAAS,cAErB,OAAOK,GAAmBC,CAC5B,UAKgBC,UACd,GAAsB,oBAAXlB,OAAwB,OAAO,EAE1C,MACMC,GAAoC,QAAxBC,EADH,IAAIC,gBAAgBH,OAAOI,SAASC,QAC1BC,IAAI,qBAAa,IAAAJ,OAAA,EAAAA,EAAEK,gBAAiB,GAGvDY,EAFWV,SAASD,SAASD,cAENI,SAAS,aAChCS,EACU,WAAdnB,GACAA,EAAUU,SAAS,WACL,cAAdV,EAEF,OAAOkB,GAAeC,CACxB,UAKgBC,IACd,OAAOtB,KAAmBa,KAAkBG,KAAsBG,GACpE,CC/EA,MAKMI,EAAc,0BAEPC,EAKX,WAAAjC,CAAYkC,GAJJ/B,KAAAgC,YAA6B,KAE7BhC,KAAAiC,QAAyC,KAG/CjC,KAAK+B,OAASA,CAChB,CAKM,cAAAG,2CACJ,GAAIlC,KAAKgC,YAEP,OADAhC,KAAK+B,OAAO9B,IAAI,4BAA6BD,KAAKgC,aAC3ChC,KAAKgC,YAGd,GAAIhC,KAAKiC,QACP,OAAOjC,KAAKiC,QAId,MAAME,EAASnC,KAAKoC,cACpB,OAAID,GACFnC,KAAKgC,YAAcG,EACnBnC,KAAK+B,OAAO9B,IAAI,4BAA6BD,KAAKgC,aAC3ChC,KAAKgC,cAGdhC,KAAKiC,QAAUjC,KAAKqC,sBACbrC,KAAKiC,QACd,EAAC,CAEa,mBAAAI,2CACZ,GAAsB,oBAAX9B,OAET,OADAP,KAAK+B,OAAO3B,KAAK,+CACV,KAGT,IACEJ,KAAK+B,OAAO9B,IAAI,4BAEhB,MAAMqC,QAAsBC,OAjDhC,wFAkDUC,QAAWF,EAAcG,KAAK,CAClCC,SAAU,CAjDhB,2DAiDoCJ,EAAcK,mBAGxCpD,QAAkCiD,EAAG3B,MAM3C,OALAb,KAAKgC,YAAczC,EAAOqD,UAE1B5C,KAAK6C,aAAa7C,KAAKgC,aAEvBhC,KAAK+B,OAAO9B,IAAI,yBAA0BD,KAAKgC,aACxChC,KAAKgC,WACd,CAAE,MAAO3B,GAEP,OADAL,KAAK+B,OAAO3B,KAAK,iCAAkCC,GAC5C,IACT,CACF,EAAC,CAED,oBAAAyC,GACE,OAAO9C,KAAKgC,WACd,CAEA,KAAAe,GACE/C,KAAKgC,YAAc,KACnBhC,KAAKiC,QAAU,KACfjC,KAAKgD,eACP,CAEQ,WAAAZ,GACN,IACE,MAAyB,oBAAX7B,OACV0C,aAAaC,QAAQrB,GACrB,IACN,CAAE,MAAApB,GACA,OAAO,IACT,CACF,CAEQ,YAAAoC,CAAa3D,GACnB,IACwB,oBAAXqB,QACT0C,aAAaE,QAAQtB,EAAa3C,EAEtC,CAAE,MAAAuB,GACAT,KAAK+B,OAAO3B,KAAK,gDACnB,CACF,CAEQ,aAAA4C,GACN,IACwB,oBAAXzC,QACT0C,aAAaG,WAAWvB,EAE5B,CAAE,MAAApB,GAEF,CACF,QCtGW4C,EAKX,WAAAxD,CAAYyD,EAAiBC,EAAoBxB,GAC/C/B,KAAKsD,QAAUA,EACftD,KAAKuD,WAAaA,EAClBvD,KAAK+B,OAASA,CAChB,CAKM,WAAAyB,CAAYxB,2CAChB,IACE,MAAMyB,EAAM,GAAGzD,KAAKsD,8BAA8BI,mBAAmB1B,iBAA2B0B,mBAAmB1D,KAAKuD,cACxHvD,KAAK+B,OAAO9B,IAAI,wBAAyBwD,GAEzC,MAAME,QAAiBC,MAAMH,EAAK,CAChCI,OAAQ,MACRC,QAAS,CACPC,OAAQ,sBAIZ,IAAKJ,EAASK,GACZ,MAAM,IAAIC,MAAM,0BAA0BN,EAASO,UAGrD,MAAMC,QAAeR,EAASS,OAG9B,OAFApE,KAAK+B,OAAO9B,IAAI,mBAAoBkE,GAE7BA,CACT,CAAE,MAAO9D,GAEP,OADAL,KAAK+B,OAAO3B,KAAK,0BAA2BC,GACrC,IACT,CACF,EAAC,CAKK,aAAAgE,CAAcC,2CAClB,IACE,MAAMb,EAAM,GAAGzD,KAAKsD,uCAAuCI,mBAAmB1D,KAAKuD,cACnFvD,KAAK+B,OAAO9B,IAAI,sBAAuBwD,GAEvC,MAAME,QAAiBC,MAAMH,EAAK,CAChCI,OAAQ,OACRC,QAAS,CACP,eAAgB,oBAElBS,KAAMC,KAAKC,UAAUH,GACrBI,WAAW,IAGb,IAAKf,EAASK,GACZ,MAAM,IAAIC,MAAM,6BAA6BN,EAASO,UAGxDlE,KAAK+B,OAAO9B,IAAI,iCAClB,CAAE,MAAOI,GACPL,KAAK+B,OAAO3B,KAAK,6BAA8BC,EACjD,CACF,EAAC,CAKK,UAAAsE,CAAWL,2CACf,IACE,MAAMb,EAAM,GAAGzD,KAAKsD,uCAAuCI,mBAAmB1D,KAAKuD,cACnFvD,KAAK+B,OAAO9B,IAAI,kBAAmBwD,GAEnC,MAAME,QAAiBC,MAAMH,EAAK,CAChCI,OAAQ,OACRC,QAAS,CACP,eAAgB,oBAElBS,KAAMC,KAAKC,UAAUH,GACrBI,WAAW,IAGb,IAAKf,EAASK,GACZ,MAAM,IAAIC,MAAM,0BAA0BN,EAASO,UAGrDlE,KAAK+B,OAAO9B,IAAI,6BAClB,CAAE,MAAOI,GACPL,KAAK+B,OAAO3B,KAAK,yBAA0BC,EAC7C,CACF,EAAC,EC7FH,MAAMuE,EAAuB,0BAEhBC,EAOX,WAAAhF,CACEiF,EACA9C,EACAD,GANM/B,KAAAmE,OAA6B,KAC7BnE,KAAA+E,aAAwC,KAO9C/E,KAAK8E,IAAMA,EACX9E,KAAKgC,YAAcA,EACnBhC,KAAK+B,OAASA,CAChB,CAKM,IAAAiD,iDAEJ,MAAMhD,QAAoBhC,KAAKgC,YAAYE,iBAC3C,IAAKF,EAEH,YADAhC,KAAK+B,OAAO3B,KAAK,iDAKnB,GAFAJ,KAAKmE,aAAenE,KAAK8E,IAAItB,YAAYxB,KAEzB,QAAXvB,EAAAT,KAAKmE,kBAAM1D,OAAA,EAAAA,EAAEwE,SAEhB,YADAjF,KAAK+B,OAAO9B,IAAI,+BAIlB,MAAMiF,EAAatD,MAAe5B,KAAKmF,sBAElCnF,KAAKmE,OAAOiB,gBAAmBF,GAKhCA,IACFlF,KAAKqF,qBACCrF,KAAKqE,iBAGbrE,KAAKsF,qBATHtF,KAAK+B,OAAO9B,IAAI,iDAUpB,EAAC,CAEO,mBAAAkF,GACN,IACE,MAAMI,EAAOC,eAAetC,QAAQ0B,GACpC,OAAgB,OAATW,GAAiBA,IAASvE,SAASD,SAASD,aACrD,CAAE,MAAAL,GACA,OAAO,CACT,CACF,CAEQ,YAAA4E,GACN,IACEG,eAAerC,QAAQyB,EAAsB5D,SAASD,SAASD,cACjE,CAAE,MAAAL,GAEF,CACF,CAKM,aAAA4D,iDACJ,GAAsB,oBAAX9D,OAAwB,OAEnC,MAAMiC,QAAWxC,KAAKgC,YAAYE,iBAElC,IAAKM,EAEH,YADAxC,KAAK+B,OAAO3B,KAAK,8CAInB,KAAgB,QAAXK,EAAAT,KAAKmE,kBAAM1D,OAAA,EAAAA,EAAEgF,aAEhB,YADAzF,KAAK+B,OAAO3B,KAAK,+CAInB,MAAMsF,EHFJpF,IAAwB,UACxBa,IAAuB,SACvBG,IAA2B,OAC3BG,IAAuB,SACpB,WGACzB,KAAK8E,IAAIT,cAAasB,OAAAC,OAAAD,OAAAC,OAAA,CAC1BC,MAAO,YACPC,KAAM,CACJrC,IAAKlD,OAAOI,SAASoF,MAEvB/D,YAAaQ,GACTkD,GAAU,CAAEA,WAAS,CACzBD,YAAazF,KAAKmE,OAAOsB,cAE7B,EAAC,CAKK,eAAAO,CAAgBC,qDACpB,IAAKjG,KAAKmE,SAAWnE,KAAKmE,OAAO+B,UAAYlG,KAAKmE,OAAOgC,OAEvD,YADAnG,KAAK+B,OAAO3B,KAAK,wCAInB,MAAMgG,EAAyC,QAAjC3F,EAAAwF,EAASpF,IAAIb,KAAKmE,OAAO+B,oBAAQzF,OAAA,EAAAA,EAAE4F,WAAWC,OACtDC,EAAuC,QAAhCC,EAAAP,EAASpF,IAAIb,KAAKmE,OAAOgC,mBAAOK,OAAA,EAAAA,EAAEH,WAAWC,OAE1D,IAAIG,EACAzG,KAAKmE,OAAOuC,YACdD,EAA6C,QAAnCE,EAAAV,EAASpF,IAAIb,KAAKmE,OAAOuC,kBAAU,IAAAC,OAAA,EAAAA,EAAEN,WAAWC,QAG5DtG,KAAK+B,OAAO9B,IAAI,uBAAwB,CAAEmG,QAAOG,OAAME,YAElDL,GAAUG,QAKTvG,KAAK4G,SAAS,CAClBL,OACAH,QACAK,QAASA,EACTI,WAAW,IARX7G,KAAK+B,OAAO3B,KAAK,wCAUrB,EAAC,CAKK,QAAAwG,CAASE,2CACb,MAAMtE,QAAWxC,KAAKgC,YAAYE,iBAE7BM,QAKCxC,KAAK8E,IAAIH,WAAW,CACxB3C,YAAaQ,EACbsE,aANA9G,KAAK+B,OAAO3B,KAAK,sCAQrB,EAAC,CAKO,iBAAAkF,GACN,GAAKtF,KAAKmE,QAA8B,oBAAbnD,SAA3B,CAKA,GAAyB,WAArBhB,KAAKmE,OAAO4C,KAAmB,CACjC,MAAMC,EAAgBhH,KAAKmE,OAAO6C,cAClC,OAAKA,GAMLhH,KAAKiH,2BAA2BjG,SAASuD,KAAMyC,GAG/ChH,KAAK+E,aAAe,IAAImC,iBAAkBC,IACxC,IAAK,MAAMC,KAAYD,EACrB,IAAK,MAAME,KAAQC,MAAMC,KAAKH,EAASI,YAC/BH,aAAgBI,cAGD,MAAjBJ,EAAKK,SACP1H,KAAK2H,0BAA0BN,EAA2BL,GAI5DhH,KAAKiH,2BAA2BI,EAAML,MAK5ChH,KAAK+E,aAAa6C,QAAQ5G,SAASuD,KAAM,CACvCsD,WAAW,EACXC,SAAS,SAIX9G,SAAS+G,iBAAiB,QAAU1I,IAClC,MAAM2I,EAAU3I,EAAE2I,OAAuBC,QAAQ,KACjD,IAAKD,EAAQ,OAEb,MAAMjC,EAAOiC,EAAOE,aAAa,QAC5BnC,GAASA,EAAK7E,SAAS8F,KAGxBjB,EAAK7E,SAAS,YAElBlB,KAAK2H,0BAA0BK,EAA6BhB,KAC3D,CAAEmB,SAAS,UAzCZnI,KAAK+B,OAAO3B,KAAK,yCA4CrB,CACK,GAAyB,WAArBJ,KAAKmE,OAAO4C,KAAmB,CACtC,MAAMqB,EAAqB,KACzB,IAAKpI,KAAKmE,SAAWnE,KAAKmE,OAAOkE,OAE/B,YADArI,KAAK+B,OAAO3B,KAAK,kCAGnB,MAAMkI,EAAOtH,SAASuH,eAAevI,KAAKmE,OAAQkE,QAClD,IAAKC,EAEH,YADAtI,KAAK+B,OAAO9B,IAAI,kBAAmBD,KAAKmE,OAAQkE,QAIlD,MAAMG,EAAcF,EAGhBE,EAAYC,QAAQC,eAIxB1I,KAAK+B,OAAO9B,IAAI,8BAA+BD,KAAKmE,OAAQkE,QAE5DG,EAAYT,iBACV,SACA,KACE,MAAM9B,EAAW,IAAI0C,SAASH,GAC9BxI,KAAKgG,gBAAgBC,IAEvB,CAAEkC,SAAS,IAGbK,EAAYC,QAAQC,aAAe,SAIrCN,IAGApI,KAAK+E,aAAe,IAAImC,iBAAiB,KACvCkB,MAGFpI,KAAK+E,aAAa6C,QAAQ5G,SAASuD,KAAM,CACvCsD,WAAW,EACXC,SAAS,GAEb,CA/FA,MAFE9H,KAAK+B,OAAO3B,KAAK,4CAkGrB,CAKQ,0BAAA6G,CAA2B2B,EAAmB5B,GACpD,MAAM6B,EAAQD,EAAKE,iBAAoC,WACvD,IAAK,MAAMC,KAAQzB,MAAMC,KAAKsB,GAC5B7I,KAAK2H,0BAA0BoB,EAAM/B,EAEzC,CAKQ,yBAAAW,CAA0BoB,EAAyB/B,GACzD,MAAMjB,EAAOgD,EAAKb,aAAa,QAC/B,IAAKnC,IAASA,EAAK7E,SAAS8F,GAAgB,OAG5C,GAAIjB,EAAK7E,SAAS,WAAY,OAE9B,MAAMsB,EAAKxC,KAAKgC,YAAYc,uBAC5B,GAAKN,EAKL,IACE,MAAMiB,EAAM,IAAIuF,IAAIjD,EAAMxF,OAAOI,SAASsI,QAC1CxF,EAAIyF,aAAaC,IAAI,SAAU3G,GAC/BuG,EAAKK,aAAa,OAAQ3F,EAAI4C,YAC9BrG,KAAK+B,OAAO9B,IAAI,6BAA8BwD,EAAI4C,WACpD,CAAE,MAAOgD,GACPrJ,KAAK+B,OAAO3B,KAAK,uBAAwB2F,EAAMsD,EACjD,MAXErJ,KAAK+B,OAAO3B,KAAK,+CAYrB,CAKA,OAAAkJ,GACMtJ,KAAK+E,eACP/E,KAAK+E,aAAawE,aAClBvJ,KAAK+E,aAAe,KAExB,QChSWyE,EAQX,WAAA3J,CAAY4J,GAFJzJ,KAAA0J,aAAc,EAGpB1J,KAAKyJ,QAAO9D,OAAAC,OAAA,CACVtC,QAZmB,2BAanBxD,OAAO,EACP6J,UAAU,GACPF,GAGLzJ,KAAK+B,OAAS,IAAInC,EAAOI,KAAKyJ,QAAQ3J,OACtCE,KAAKgC,YAAc,IAAIF,EAAmB9B,KAAK+B,QAC/C/B,KAAK8E,IAAM,IAAIzB,EACbrD,KAAKyJ,QAAQnG,QACbtD,KAAKyJ,QAAQlG,WACbvD,KAAK+B,QAEP/B,KAAK4J,QAAU,IAAI/E,EAAQ7E,KAAK8E,IAAK9E,KAAKgC,YAAahC,KAAK+B,QAExD/B,KAAKyJ,QAAQE,UACf3J,KAAKgF,MAET,CAKM,IAAAA,2CACkB,oBAAXzE,OAKPP,KAAK0J,YACP1J,KAAK+B,OAAO3B,KAAK,4BAInBJ,KAAK+B,OAAO9B,IAAI,mCAGVD,KAAKgC,YAAYE,uBAGjBlC,KAAK4J,QAAQ5E,OAEnBhF,KAAK0J,aAAc,EACnB1J,KAAK+B,OAAO9B,IAAI,iCAlBdD,KAAK+B,OAAO3B,KAAK,qDAmBrB,EAAC,CAKD,aAAAE,GACE,OAAOA,GACT,CAKA,YAAAa,GACE,OAAOA,GACT,CAKA,gBAAAG,GACE,OAAOA,GACT,CAKA,YAAAG,GACE,OAAOA,GACT,CAKA,QAAAG,GACE,OAAOA,GACT,CAKM,aAAAyC,iDACErE,KAAK4J,QAAQvF,eACrB,EAAC,CAKK,eAAA2B,CAAgBC,iDACdjG,KAAK4J,QAAQ5D,gBAAgBC,EACrC,EAAC,CAKK,QAAAW,CAASE,iDACP9G,KAAK4J,QAAQhD,SAASE,EAC9B,EAAC,CAKD,cAAA5E,GACE,OAAOlC,KAAKgC,YAAYc,sBAC1B,CAKA,OAAAwG,GACEtJ,KAAK4J,QAAQN,UACbtJ,KAAKgC,YAAYe,QACjB/C,KAAK0J,aAAc,EACnB1J,KAAK+B,OAAO9B,IAAI,gBAClB,EAMF,GAAsB,oBAAXM,OAAwB,CACjC,MAAMgD,aJhDN,GAAsB,oBAAXhD,QAA8C,oBAAbS,SAC1C,OAAO,KAGT,MAAM6I,EAAU7I,SAAS8I,qBAAqB,UAE9C,IAAK,MAAMC,KAAUzC,MAAMC,KAAKsC,GAC9B,GAAIE,EAAOC,IAAI9I,SAAS,SACtB,IAEE,OADY,IAAI8H,IAAIe,EAAOC,KAChBd,aAAarI,IAAI,aAC9B,CAAE,MAAAJ,GAEF,CAIJ,OAAO,IACT,CI8BqBwJ,GACnB,GAAI1G,EAAY,CACd,MAAM2G,EAAM,IAAIV,EAAS,CAAEjG,eAC1BhD,OAAe4J,MAAQD,CAC1B,CACF","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 * Detects if the visitor came from Google Gemini\n */\nexport function isFromGemini(): 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 isGeminiRef = referrer.includes('gemini.google.com');\n const isGeminiUtm =\n utmSource === 'gemini' ||\n utmSource.includes('gemini') ||\n utmSource === 'google_gemini';\n\n return isGeminiRef || isGeminiUtm;\n}\n\n/**\n * Detects if the visitor came from Perplexity AI\n */\nexport function isFromPerplexity(): 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 isPerplexityRef = referrer.includes('perplexity.ai');\n const isPerplexityUtm =\n utmSource === 'perplexity' ||\n utmSource.includes('perplexity');\n\n return isPerplexityRef || isPerplexityUtm;\n}\n\n/**\n * Detects if the visitor came from Anthropic Claude\n */\nexport function isFromClaude(): 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 isClaudeRef = referrer.includes('claude.ai');\n const isClaudeUtm =\n utmSource === 'claude' ||\n utmSource.includes('claude') ||\n utmSource === 'anthropic';\n\n return isClaudeRef || isClaudeUtm;\n}\n\n/**\n * Detects if the visitor came from any supported AI source.\n */\nexport function isFromAI(): boolean {\n return isFromChatGPT() || isFromGemini() || isFromPerplexity() || isFromClaude();\n}\n\nexport type AISource = 'chatgpt' | 'gemini' | 'pplx' | 'claude';\n\n/**\n * Returns the detected AI source, or null if the visitor didn't come from a known AI.\n */\nexport function getAISource(): AISource | null {\n if (isFromChatGPT()) return 'chatgpt';\n if (isFromGemini()) return 'gemini';\n if (isFromPerplexity()) return 'pplx';\n if (isFromClaude()) return 'claude';\n return null;\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\n/**\n * Gets the debug mode from script tag if present\n */\nexport function getDebugModeFromScript(): 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('debug');\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 { isFromAI, getAISource } from '../utils/detector';\nimport { ThredAPI } from './api';\nimport { FingerprintManager } from './fingerprint';\n\nconst REFERRER_SESSION_KEY = 'thred_ai_referrer';\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\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 const aiDetected = isFromAI() && !this.isDuplicateReferrer();\n\n console.log('aiDetected', aiDetected);\n console.log('isDuplicateReferrer', this.isDuplicateReferrer());\n\n if (!this.config.hasChatSession && !aiDetected) {\n this.logger.log('No chat session for this fingerprint - exiting');\n return;\n }\n\n if (aiDetected) {\n this.saveReferrer();\n await this.trackPageView();\n }\n\n this.setupFormTracking();\n }\n\n private isDuplicateReferrer(): boolean {\n try {\n const prev = sessionStorage.getItem(REFERRER_SESSION_KEY);\n console.log('prev', prev);\n console.log('document.referrer', document.referrer);\n return prev !== null && prev === document.referrer.toLowerCase();\n } catch {\n return false;\n }\n }\n\n private saveReferrer(): void {\n try {\n sessionStorage.setItem(REFERRER_SESSION_KEY, document.referrer.toLowerCase());\n } catch {\n // sessionStorage unavailable\n }\n }\n\n /**\n * Track a single page view for the AI click-through landing.\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 if (!this.config?.sessionCode) {\n this.logger.warn('Cannot track page view without session code');\n return;\n }\n\n const source = getAISource();\n\n await this.api.trackPageView({\n event: 'page_view',\n data: {\n url: window.location.href,\n },\n fingerprint: fp,\n ...(source && { source }),\n sessionCode: this.config.sessionCode,\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 * 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}\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, isFromGemini, isFromPerplexity, isFromClaude, isFromAI, getBrowserKeyFromScript, getDebugModeFromScript } 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 * Check if visitor is from Google Gemini\n */\n isFromGemini(): boolean {\n return isFromGemini();\n }\n\n /**\n * Check if visitor is from Perplexity AI\n */\n isFromPerplexity(): boolean {\n return isFromPerplexity();\n }\n\n /**\n * Check if visitor is from Anthropic Claude\n */\n isFromClaude(): boolean {\n return isFromClaude();\n }\n\n /**\n * Check if visitor is from any supported AI source\n */\n isFromAI(): boolean {\n return isFromAI();\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 const debug = getDebugModeFromScript();\n if (browserKey) {\n const sdk = new ThredSDK({ browserKey, debug: debug === 'true' });\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","isFromGemini","isGeminiRef","isGeminiUtm","isFromPerplexity","isPerplexityRef","isPerplexityUtm","isFromClaude","isClaudeRef","isClaudeUtm","isFromAI","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","REFERRER_SESSION_KEY","Tracker","api","formObserver","init","enabled","aiDetected","isDuplicateReferrer","hasChatSession","saveReferrer","setupFormTracking","prev","sessionStorage","sessionCode","source","Object","assign","event","data","href","trackFormSubmit","formData","emailId","nameId","email","toString","trim","name","_b","company","companyId","_c","identify","discovery","leadData","type","hostedUrlBase","injectFingerprintIntoLinks","MutationObserver","mutations","mutation","node","Array","from","addedNodes","HTMLElement","tagName","injectFingerprintIntoLink","observe","childList","subtree","addEventListener","target","closest","getAttribute","capture","attachFormListener","formId","form","getElementById","formElement","dataset","thredTracked","FormData","root","links","querySelectorAll","link","URL","origin","searchParams","set","setAttribute","err","destroy","disconnect","ThredSDK","options","initialized","autoInit","tracker","scripts","getElementsByTagName","script","src","getBrowserKeyFromScript","getDebugModeFromScript","sdk","Thred"],"mappings":"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","x_google_ignoreList":[0]}
|
package/dist/utils/detector.d.ts
CHANGED
|
@@ -27,4 +27,8 @@ export declare function getAISource(): AISource | null;
|
|
|
27
27
|
* Gets the browser key from script tag if present
|
|
28
28
|
*/
|
|
29
29
|
export declare function getBrowserKeyFromScript(): string | null;
|
|
30
|
+
/**
|
|
31
|
+
* Gets the debug mode from script tag if present
|
|
32
|
+
*/
|
|
33
|
+
export declare function getDebugModeFromScript(): string | null;
|
|
30
34
|
//# sourceMappingURL=detector.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"detector.d.ts","sourceRoot":"","sources":["../../src/utils/detector.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,wBAAgB,aAAa,IAAI,OAAO,CAgBvC;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,OAAO,CActC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,CAa1C;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,OAAO,CActC;AAED;;GAEG;AACH,wBAAgB,QAAQ,IAAI,OAAO,CAElC;AAED,MAAM,MAAM,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,CAAC;AAEhE;;GAEG;AACH,wBAAgB,WAAW,IAAI,QAAQ,GAAG,IAAI,CAM7C;AAED;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,MAAM,GAAG,IAAI,CAmBvD"}
|
|
1
|
+
{"version":3,"file":"detector.d.ts","sourceRoot":"","sources":["../../src/utils/detector.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,wBAAgB,aAAa,IAAI,OAAO,CAgBvC;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,OAAO,CActC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,CAa1C;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,OAAO,CActC;AAED;;GAEG;AACH,wBAAgB,QAAQ,IAAI,OAAO,CAElC;AAED,MAAM,MAAM,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,CAAC;AAEhE;;GAEG;AACH,wBAAgB,WAAW,IAAI,QAAQ,GAAG,IAAI,CAM7C;AAED;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,MAAM,GAAG,IAAI,CAmBvD;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,GAAG,IAAI,CAmBtD"}
|