@thred-apps/thred-track 1.1.0 → 1.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -296,7 +296,7 @@ The SDK fetches configuration from your Thred API:
296
296
  "emailId": "email",
297
297
  "nameId": "name",
298
298
  "companyId": "company",
299
- "fromChat": true
299
+ "hasChatSession": true
300
300
  }
301
301
  ```
302
302
 
@@ -29,6 +29,14 @@ export declare class Tracker {
29
29
  * Setup automatic form tracking
30
30
  */
31
31
  private setupFormTracking;
32
+ /**
33
+ * Inject utm_fp into all matching links within a root element
34
+ */
35
+ private injectFingerprintIntoLinks;
36
+ /**
37
+ * Inject utm_fp into a single link if it matches hostedUrlBase
38
+ */
39
+ private injectFingerprintIntoLink;
32
40
  /**
33
41
  * Cleanup tracker
34
42
  */
@@ -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;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAEnD,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;IA0B3B;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAiBpC;;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;IA4FzB;;OAEG;IACH,OAAO,IAAI,IAAI;CAMhB"}
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;AAEnD,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;IA8B3B;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAiBpC;;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.esm.js CHANGED
@@ -279,12 +279,17 @@ class Tracker {
279
279
  this.logger.log('Tracking disabled by config');
280
280
  return;
281
281
  }
282
- if (!this.config.fromChat) {
283
- this.logger.log('Not from ChatGPT - exiting');
282
+ if (!this.config.hasChatSession) {
283
+ this.logger.log('No chat session for this fingerprint - exiting');
284
284
  return;
285
285
  }
286
- // Track page view
287
- yield this.trackPageView();
286
+ // Only track page view if UTM is from ChatGPT
287
+ if (isFromChatGPT()) {
288
+ yield this.trackPageView();
289
+ }
290
+ else {
291
+ this.logger.log('UTM not from ChatGPT - skipping page view');
292
+ }
288
293
  // Setup form tracking
289
294
  this.setupFormTracking();
290
295
  });
@@ -367,32 +372,40 @@ class Tracker {
367
372
  this.logger.warn('Cannot track form - no hosted URL base');
368
373
  return;
369
374
  }
370
- // Attach UTM parameter to links containing hostedUrlBase
371
- document.addEventListener('click', (e) => __awaiter(this, void 0, void 0, function* () {
375
+ // Inject utm_fp into all existing matching links
376
+ this.injectFingerprintIntoLinks(document.body, hostedUrlBase);
377
+ // Watch for dynamically added links and inject utm_fp as they appear
378
+ this.formObserver = new MutationObserver((mutations) => {
379
+ for (const mutation of mutations) {
380
+ for (const node of Array.from(mutation.addedNodes)) {
381
+ if (!(node instanceof HTMLElement))
382
+ continue;
383
+ // Check if the added node itself is a matching link
384
+ if (node.tagName === 'A') {
385
+ this.injectFingerprintIntoLink(node, hostedUrlBase);
386
+ }
387
+ // Check any child links within the added node
388
+ this.injectFingerprintIntoLinks(node, hostedUrlBase);
389
+ }
390
+ }
391
+ });
392
+ this.formObserver.observe(document.body, {
393
+ childList: true,
394
+ subtree: true,
395
+ });
396
+ // Fallback: intercept clicks for links that may have had their href changed dynamically
397
+ document.addEventListener('click', (e) => {
372
398
  const target = e.target.closest('a');
373
399
  if (!target)
374
400
  return;
375
401
  const href = target.getAttribute('href');
376
402
  if (!href || !href.includes(hostedUrlBase))
377
403
  return;
378
- // Get fingerprint
379
- const fp = yield this.fingerprint.getFingerprint();
380
- if (!fp) {
381
- this.logger.warn('Cannot add UTM parameter - no fingerprint');
404
+ // Already tagged — skip
405
+ if (href.includes('utm_fp='))
382
406
  return;
383
- }
384
- // Parse URL and add utm_fp parameter
385
- try {
386
- const url = new URL(href, window.location.origin);
387
- url.searchParams.set('utm_fp', fp);
388
- // Update the href with the new URL
389
- target.setAttribute('href', url.toString());
390
- this.logger.log('Added utm_fp to link:', url.toString());
391
- }
392
- catch (err) {
393
- this.logger.warn('Failed to parse URL:', href, err);
394
- }
395
- }), { capture: true });
407
+ this.injectFingerprintIntoLink(target, hostedUrlBase);
408
+ }, { capture: true });
396
409
  return;
397
410
  }
398
411
  else if (this.config.type === 'custom') {
@@ -430,6 +443,40 @@ class Tracker {
430
443
  });
431
444
  }
432
445
  }
446
+ /**
447
+ * Inject utm_fp into all matching links within a root element
448
+ */
449
+ injectFingerprintIntoLinks(root, hostedUrlBase) {
450
+ const links = root.querySelectorAll('a[href]');
451
+ for (const link of Array.from(links)) {
452
+ this.injectFingerprintIntoLink(link, hostedUrlBase);
453
+ }
454
+ }
455
+ /**
456
+ * Inject utm_fp into a single link if it matches hostedUrlBase
457
+ */
458
+ injectFingerprintIntoLink(link, hostedUrlBase) {
459
+ const href = link.getAttribute('href');
460
+ if (!href || !href.includes(hostedUrlBase))
461
+ return;
462
+ // Already tagged — skip
463
+ if (href.includes('utm_fp='))
464
+ return;
465
+ const fp = this.fingerprint.getCachedFingerprint();
466
+ if (!fp) {
467
+ this.logger.warn('Cannot inject utm_fp - no cached fingerprint');
468
+ return;
469
+ }
470
+ try {
471
+ const url = new URL(href, window.location.origin);
472
+ url.searchParams.set('utm_fp', fp);
473
+ link.setAttribute('href', url.toString());
474
+ this.logger.log('Injected utm_fp into link:', url.toString());
475
+ }
476
+ catch (err) {
477
+ this.logger.warn('Failed to parse URL:', href, err);
478
+ }
479
+ }
433
480
  /**
434
481
  * Cleanup tracker
435
482
  */
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.js","sources":["../node_modules/tslib/tslib.es6.js","../src/utils/logger.ts","../src/utils/detector.ts","../src/core/fingerprint.ts","../src/core/api.ts","../src/core/tracker.ts","../src/index.ts"],"sourcesContent":["/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n","/**\n * Simple logger utility\n */\nexport class Logger {\n private debug: boolean;\n private prefix: string;\n\n constructor(debug = false, prefix = '[Thred]') {\n this.debug = debug;\n this.prefix = prefix;\n }\n\n log(...args: unknown[]) {\n if (this.debug) {\n console.log(this.prefix, ...args);\n }\n }\n\n warn(...args: unknown[]) {\n if (this.debug) {\n console.warn(this.prefix, ...args);\n }\n }\n\n error(...args: unknown[]) {\n console.error(this.prefix, ...args);\n }\n}\n","/**\n * Detects if the visitor came from ChatGPT\n */\nexport function isFromChatGPT(): boolean {\n if (typeof window === 'undefined') return false;\n\n const params = new URLSearchParams(window.location.search);\n const utmSource = params.get('utm_source')?.toLowerCase() || '';\n const referrer = document.referrer.toLowerCase();\n\n const isChatGPTRef =\n referrer.includes('chat.openai.com') || referrer.includes('chatgpt.com');\n const isChatGPTUtm =\n utmSource === 'chatgpt' ||\n utmSource.includes('chatgpt') ||\n utmSource === 'chat.openai' ||\n utmSource === 'openai';\n\n return isChatGPTUtm || isChatGPTRef;\n}\n\n/**\n * Gets the browser key from script tag if present\n */\nexport function getBrowserKeyFromScript(): string | null {\n if (typeof window === 'undefined' || typeof document === 'undefined') {\n return null;\n }\n\n const scripts = document.getElementsByTagName('script');\n\n for (const script of Array.from(scripts)) {\n if (script.src.includes('thred')) {\n try {\n const url = new URL(script.src);\n return url.searchParams.get('browserKey');\n } catch {\n // Invalid URL\n }\n }\n }\n\n return null;\n}\n","import type { FingerprintResult } from '../types';\nimport { Logger } from '../utils/logger';\n\nconst FP_PROXY_URL =\n 'https://thredproxy.com/35ZCuyzokuT1YGd8/Hm7KPMHUZ4duyPRj?apiKey=iyqKVLQt2560EQUyjfxa';\nconst FP_PROXY_ENDPOINT =\n 'https://thredproxy.com/35ZCuyzokuT1YGd8/qbWl4nqUSCIDTor4';\n\nexport class FingerprintManager {\n private fingerprint: string | null = null;\n private logger: Logger;\n private promise: Promise<string | null> | null = null;\n\n constructor(logger: Logger) {\n this.logger = logger;\n }\n\n /**\n * Get or generate fingerprint\n */\n async getFingerprint(): Promise<string | null> {\n // Return cached fingerprint\n if (this.fingerprint) {\n this.logger.log('Using cached fingerprint:', this.fingerprint);\n return this.fingerprint;\n }\n\n // Return existing promise if already loading\n if (this.promise) {\n return this.promise;\n }\n\n // Check global window cache\n if (\n typeof window !== 'undefined' &&\n (window as any).thredFingerprint\n ) {\n this.fingerprint = (window as any).thredFingerprint;\n this.logger.log('Using global fingerprint:', this.fingerprint);\n return this.fingerprint;\n }\n\n // Generate new fingerprint\n this.promise = this.generateFingerprint();\n return this.promise;\n }\n\n private async generateFingerprint(): Promise<string | null> {\n try {\n this.logger.log('Loading FingerprintJS...');\n\n const FingerprintJS = await import(FP_PROXY_URL);\n const fp = await FingerprintJS.load({\n endpoint: [FP_PROXY_ENDPOINT, FingerprintJS.defaultEndpoint],\n });\n\n const result: FingerprintResult = await fp.get();\n this.fingerprint = result.visitorId;\n\n // Cache globally\n if (typeof window !== 'undefined') {\n (window as any).thredFingerprint = this.fingerprint;\n }\n\n this.logger.log('Fingerprint generated:', this.fingerprint);\n return this.fingerprint;\n } catch (error) {\n this.logger.warn('Fingerprint generation failed:', error);\n return null;\n }\n }\n\n /**\n * Get cached fingerprint (synchronous)\n */\n getCachedFingerprint(): string | null {\n return this.fingerprint;\n }\n\n /**\n * Clear fingerprint cache\n */\n clear() {\n this.fingerprint = null;\n this.promise = null;\n if (typeof window !== 'undefined') {\n delete (window as any).thredFingerprint;\n }\n }\n}\n","import type {\n ThredConfig,\n PageViewPayload,\n EnrichPayload,\n} from '../types';\nimport { Logger } from '../utils/logger';\n\nexport class ThredAPI {\n private baseUrl: string;\n private browserKey: string;\n private logger: Logger;\n\n constructor(baseUrl: string, browserKey: string, logger: Logger) {\n this.baseUrl = baseUrl;\n this.browserKey = browserKey;\n this.logger = logger;\n }\n\n /**\n * Fetch configuration from API\n */\n async fetchConfig(fingerprint: string): Promise<ThredConfig | null> {\n try {\n const url = `${this.baseUrl}/config?fingerprint=${encodeURIComponent(fingerprint)}&browserKey=${encodeURIComponent(this.browserKey)}`;\n this.logger.log('Fetching config from:', url);\n\n const response = await fetch(url, {\n method: 'GET',\n headers: {\n Accept: 'application/json',\n },\n });\n\n if (!response.ok) {\n throw new Error(`Config request failed: ${response.status}`);\n }\n\n const config = await response.json();\n this.logger.log('Config received:', config);\n\n return config;\n } catch (error) {\n this.logger.warn('Failed to fetch config:', error);\n return null;\n }\n }\n\n /**\n * Send page view event\n */\n async trackPageView(payload: PageViewPayload): Promise<void> {\n try {\n const url = `${this.baseUrl}/events/page-view?browserKey=${encodeURIComponent(this.browserKey)}`;\n this.logger.log('Tracking page view:', url);\n\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(payload),\n keepalive: true,\n });\n\n if (!response.ok) {\n throw new Error(`Page view request failed: ${response.status}`);\n }\n\n this.logger.log('Page view tracked successfully');\n } catch (error) {\n this.logger.warn('Failed to track page view:', error);\n }\n }\n\n /**\n * Send lead enrichment data\n */\n async enrichLead(payload: EnrichPayload): Promise<void> {\n try {\n const url = `${this.baseUrl}/customers/enrich?browserKey=${encodeURIComponent(this.browserKey)}`;\n this.logger.log('Enriching lead:', url);\n\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(payload),\n keepalive: true,\n });\n\n if (!response.ok) {\n throw new Error(`Enrich request failed: ${response.status}`);\n }\n\n this.logger.log('Lead enriched successfully');\n } catch (error) {\n this.logger.warn('Failed to enrich lead:', error);\n }\n }\n}\n","import type { ThredConfig, LeadData } from '../types';\nimport { Logger } from '../utils/logger';\nimport { ThredAPI } from './api';\nimport { FingerprintManager } from './fingerprint';\n\nexport class Tracker {\n private api: ThredAPI;\n private fingerprint: FingerprintManager;\n private logger: Logger;\n private config: ThredConfig | null = null;\n private formObserver: MutationObserver | null = null;\n\n constructor(\n api: ThredAPI,\n fingerprint: FingerprintManager,\n logger: Logger\n ) {\n this.api = api;\n this.fingerprint = fingerprint;\n this.logger = logger;\n }\n\n /**\n * Initialize tracker with config\n */\n async init(): Promise<void> {\n // Get fingerprint\n const fingerprint = await this.fingerprint.getFingerprint();\n if (!fingerprint) {\n this.logger.warn('Cannot initialize tracker without fingerprint');\n return;\n }\n this.config = await this.api.fetchConfig(fingerprint);\n\n if (!this.config?.enabled) {\n this.logger.log('Tracking disabled by config');\n return;\n }\n\n if (!this.config.fromChat) {\n this.logger.log('Not from ChatGPT - exiting');\n return;\n }\n\n // Track page view\n await this.trackPageView();\n\n // Setup form tracking\n this.setupFormTracking();\n }\n\n /**\n * Track page view event\n */\n async trackPageView(): Promise<void> {\n const fp = await this.fingerprint.getFingerprint();\n\n if (!fp) {\n this.logger.warn('Cannot track page view without fingerprint');\n return;\n }\n\n await this.api.trackPageView({\n event: 'page_view',\n data: {\n url: window.location.href,\n },\n fingerprint: fp,\n });\n }\n\n /**\n * Track form submission and enrich lead\n */\n async trackFormSubmit(formData: FormData): Promise<void> {\n if (!this.config || !this.config.emailId || !this.config.nameId) {\n this.logger.warn('Cannot track form - no config loaded');\n return;\n }\n\n const email = formData.get(this.config.emailId)?.toString().trim();\n const name = formData.get(this.config.nameId)?.toString().trim();\n\n let company: string | undefined = undefined;\n if (this.config.companyId) {\n company = formData.get(this.config.companyId)?.toString().trim();\n }\n\n this.logger.log('Form data extracted:', { email, name, company });\n\n if (!email || !name) {\n this.logger.warn('Missing required fields (email, name)');\n return;\n }\n\n await this.identify({\n name,\n email,\n company: company,\n discovery: false,\n });\n }\n\n /**\n * Identify user and enrich lead data\n */\n async identify(leadData: LeadData): Promise<void> {\n const fp = await this.fingerprint.getFingerprint();\n\n if (!fp) {\n this.logger.warn('Cannot identify without fingerprint');\n return;\n }\n\n await this.api.enrichLead({\n fingerprint: fp,\n leadData,\n });\n }\n\n /**\n * 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 // Attach UTM parameter to links containing hostedUrlBase\n document.addEventListener('click', async (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 // Get fingerprint\n const fp = await this.fingerprint.getFingerprint();\n if (!fp) {\n this.logger.warn('Cannot add UTM parameter - no fingerprint');\n return;\n }\n\n // Parse URL and add utm_fp parameter\n try {\n const url = new URL(href, window.location.origin);\n url.searchParams.set('utm_fp', fp);\n \n // Update the href with the new URL\n target.setAttribute('href', url.toString());\n \n this.logger.log('Added utm_fp to link:', url.toString());\n } catch (err) {\n this.logger.warn('Failed to parse URL:', href, err);\n }\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 * 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, 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,\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 (this.initialized) {\n this.logger.warn('SDK already initialized');\n return;\n }\n\n this.logger.log('Initializing Thred SDK...');\n\n // Generate fingerprint\n await this.fingerprint.getFingerprint();\n\n // Initialize tracker\n await this.tracker.init();\n\n this.initialized = true;\n this.logger.log('SDK initialized successfully');\n }\n\n /**\n * Check if visitor is from ChatGPT\n */\n isFromChatGPT(): boolean {\n return isFromChatGPT();\n }\n\n /**\n * Track page view\n */\n async trackPageView(): Promise<void> {\n await this.tracker.trackPageView();\n }\n\n /**\n * Track form submission\n */\n async trackFormSubmit(formData: FormData): Promise<void> {\n await this.tracker.trackFormSubmit(formData);\n }\n\n /**\n * Identify user with lead data\n */\n async identify(leadData: LeadData): Promise<void> {\n await this.tracker.identify(leadData);\n }\n\n /**\n * Get current fingerprint\n */\n getFingerprint(): string | null {\n return this.fingerprint.getCachedFingerprint();\n }\n\n /**\n * Destroy SDK instance and cleanup\n */\n destroy(): void {\n this.tracker.destroy();\n this.fingerprint.clear();\n this.initialized = false;\n this.logger.log('SDK destroyed');\n }\n}\n\n/**\n * Auto-initialize if loaded as script tag with browserKey\n */\nif (typeof window !== 'undefined') {\n const browserKey = getBrowserKeyFromScript();\n if (browserKey) {\n const sdk = new ThredSDK({ browserKey });\n (window as any).Thred = sdk;\n }\n}\n\nexport default ThredSDK;\n"],"names":[],"mappings":"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","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"index.esm.js","sources":["../node_modules/tslib/tslib.es6.js","../src/utils/logger.ts","../src/utils/detector.ts","../src/core/fingerprint.ts","../src/core/api.ts","../src/core/tracker.ts","../src/index.ts"],"sourcesContent":["/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n","/**\n * Simple logger utility\n */\nexport class Logger {\n private debug: boolean;\n private prefix: string;\n\n constructor(debug = false, prefix = '[Thred]') {\n this.debug = debug;\n this.prefix = prefix;\n }\n\n log(...args: unknown[]) {\n if (this.debug) {\n console.log(this.prefix, ...args);\n }\n }\n\n warn(...args: unknown[]) {\n if (this.debug) {\n console.warn(this.prefix, ...args);\n }\n }\n\n error(...args: unknown[]) {\n console.error(this.prefix, ...args);\n }\n}\n","/**\n * Detects if the visitor came from ChatGPT\n */\nexport function isFromChatGPT(): boolean {\n if (typeof window === 'undefined') return false;\n\n const params = new URLSearchParams(window.location.search);\n const utmSource = params.get('utm_source')?.toLowerCase() || '';\n const referrer = document.referrer.toLowerCase();\n\n const isChatGPTRef =\n referrer.includes('chat.openai.com') || referrer.includes('chatgpt.com');\n const isChatGPTUtm =\n utmSource === 'chatgpt' ||\n utmSource.includes('chatgpt') ||\n utmSource === 'chat.openai' ||\n utmSource === 'openai';\n\n return isChatGPTUtm || isChatGPTRef;\n}\n\n/**\n * Gets the browser key from script tag if present\n */\nexport function getBrowserKeyFromScript(): string | null {\n if (typeof window === 'undefined' || typeof document === 'undefined') {\n return null;\n }\n\n const scripts = document.getElementsByTagName('script');\n\n for (const script of Array.from(scripts)) {\n if (script.src.includes('thred')) {\n try {\n const url = new URL(script.src);\n return url.searchParams.get('browserKey');\n } catch {\n // Invalid URL\n }\n }\n }\n\n return null;\n}\n","import type { FingerprintResult } from '../types';\nimport { Logger } from '../utils/logger';\n\nconst FP_PROXY_URL =\n 'https://thredproxy.com/35ZCuyzokuT1YGd8/Hm7KPMHUZ4duyPRj?apiKey=iyqKVLQt2560EQUyjfxa';\nconst FP_PROXY_ENDPOINT =\n 'https://thredproxy.com/35ZCuyzokuT1YGd8/qbWl4nqUSCIDTor4';\n\nexport class FingerprintManager {\n private fingerprint: string | null = null;\n private logger: Logger;\n private promise: Promise<string | null> | null = null;\n\n constructor(logger: Logger) {\n this.logger = logger;\n }\n\n /**\n * Get or generate fingerprint\n */\n async getFingerprint(): Promise<string | null> {\n // Return cached fingerprint\n if (this.fingerprint) {\n this.logger.log('Using cached fingerprint:', this.fingerprint);\n return this.fingerprint;\n }\n\n // Return existing promise if already loading\n if (this.promise) {\n return this.promise;\n }\n\n // Check global window cache\n if (\n typeof window !== 'undefined' &&\n (window as any).thredFingerprint\n ) {\n this.fingerprint = (window as any).thredFingerprint;\n this.logger.log('Using global fingerprint:', this.fingerprint);\n return this.fingerprint;\n }\n\n // Generate new fingerprint\n this.promise = this.generateFingerprint();\n return this.promise;\n }\n\n private async generateFingerprint(): Promise<string | null> {\n try {\n this.logger.log('Loading FingerprintJS...');\n\n const FingerprintJS = await import(FP_PROXY_URL);\n const fp = await FingerprintJS.load({\n endpoint: [FP_PROXY_ENDPOINT, FingerprintJS.defaultEndpoint],\n });\n\n const result: FingerprintResult = await fp.get();\n this.fingerprint = result.visitorId;\n\n // Cache globally\n if (typeof window !== 'undefined') {\n (window as any).thredFingerprint = this.fingerprint;\n }\n\n this.logger.log('Fingerprint generated:', this.fingerprint);\n return this.fingerprint;\n } catch (error) {\n this.logger.warn('Fingerprint generation failed:', error);\n return null;\n }\n }\n\n /**\n * Get cached fingerprint (synchronous)\n */\n getCachedFingerprint(): string | null {\n return this.fingerprint;\n }\n\n /**\n * Clear fingerprint cache\n */\n clear() {\n this.fingerprint = null;\n this.promise = null;\n if (typeof window !== 'undefined') {\n delete (window as any).thredFingerprint;\n }\n }\n}\n","import type {\n ThredConfig,\n PageViewPayload,\n EnrichPayload,\n} from '../types';\nimport { Logger } from '../utils/logger';\n\nexport class ThredAPI {\n private baseUrl: string;\n private browserKey: string;\n private logger: Logger;\n\n constructor(baseUrl: string, browserKey: string, logger: Logger) {\n this.baseUrl = baseUrl;\n this.browserKey = browserKey;\n this.logger = logger;\n }\n\n /**\n * Fetch configuration from API\n */\n async fetchConfig(fingerprint: string): Promise<ThredConfig | null> {\n try {\n const url = `${this.baseUrl}/config?fingerprint=${encodeURIComponent(fingerprint)}&browserKey=${encodeURIComponent(this.browserKey)}`;\n this.logger.log('Fetching config from:', url);\n\n const response = await fetch(url, {\n method: 'GET',\n headers: {\n Accept: 'application/json',\n },\n });\n\n if (!response.ok) {\n throw new Error(`Config request failed: ${response.status}`);\n }\n\n const config = await response.json();\n this.logger.log('Config received:', config);\n\n return config;\n } catch (error) {\n this.logger.warn('Failed to fetch config:', error);\n return null;\n }\n }\n\n /**\n * Send page view event\n */\n async trackPageView(payload: PageViewPayload): Promise<void> {\n try {\n const url = `${this.baseUrl}/events/page-view?browserKey=${encodeURIComponent(this.browserKey)}`;\n this.logger.log('Tracking page view:', url);\n\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(payload),\n keepalive: true,\n });\n\n if (!response.ok) {\n throw new Error(`Page view request failed: ${response.status}`);\n }\n\n this.logger.log('Page view tracked successfully');\n } catch (error) {\n this.logger.warn('Failed to track page view:', error);\n }\n }\n\n /**\n * Send lead enrichment data\n */\n async enrichLead(payload: EnrichPayload): Promise<void> {\n try {\n const url = `${this.baseUrl}/customers/enrich?browserKey=${encodeURIComponent(this.browserKey)}`;\n this.logger.log('Enriching lead:', url);\n\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(payload),\n keepalive: true,\n });\n\n if (!response.ok) {\n throw new Error(`Enrich request failed: ${response.status}`);\n }\n\n this.logger.log('Lead enriched successfully');\n } catch (error) {\n this.logger.warn('Failed to enrich lead:', error);\n }\n }\n}\n","import type { ThredConfig, LeadData } from '../types';\nimport { Logger } from '../utils/logger';\nimport { isFromChatGPT } from '../utils/detector';\nimport { ThredAPI } from './api';\nimport { FingerprintManager } from './fingerprint';\n\nexport class Tracker {\n private api: ThredAPI;\n private fingerprint: FingerprintManager;\n private logger: Logger;\n private config: ThredConfig | null = null;\n private formObserver: MutationObserver | null = null;\n\n constructor(\n api: ThredAPI,\n fingerprint: FingerprintManager,\n logger: Logger\n ) {\n this.api = api;\n this.fingerprint = fingerprint;\n this.logger = logger;\n }\n\n /**\n * Initialize tracker with config\n */\n async init(): Promise<void> {\n // Get fingerprint\n const fingerprint = await this.fingerprint.getFingerprint();\n if (!fingerprint) {\n this.logger.warn('Cannot initialize tracker without fingerprint');\n return;\n }\n this.config = await this.api.fetchConfig(fingerprint);\n\n if (!this.config?.enabled) {\n this.logger.log('Tracking disabled by config');\n return;\n }\n\n if (!this.config.hasChatSession) {\n this.logger.log('No chat session for this fingerprint - exiting');\n return;\n }\n\n // Only track page view if UTM is from ChatGPT\n if (isFromChatGPT()) {\n await this.trackPageView();\n } else {\n this.logger.log('UTM not from ChatGPT - skipping page view');\n }\n\n // Setup form tracking\n this.setupFormTracking();\n }\n\n /**\n * Track page view event\n */\n async trackPageView(): Promise<void> {\n const fp = await this.fingerprint.getFingerprint();\n\n if (!fp) {\n this.logger.warn('Cannot track page view without fingerprint');\n return;\n }\n\n await this.api.trackPageView({\n event: 'page_view',\n data: {\n url: window.location.href,\n },\n fingerprint: fp,\n });\n }\n\n /**\n * Track form submission and enrich lead\n */\n async trackFormSubmit(formData: FormData): Promise<void> {\n if (!this.config || !this.config.emailId || !this.config.nameId) {\n this.logger.warn('Cannot track form - no config loaded');\n return;\n }\n\n const email = formData.get(this.config.emailId)?.toString().trim();\n const name = formData.get(this.config.nameId)?.toString().trim();\n\n let company: string | undefined = undefined;\n if (this.config.companyId) {\n company = formData.get(this.config.companyId)?.toString().trim();\n }\n\n this.logger.log('Form data extracted:', { email, name, company });\n\n if (!email || !name) {\n this.logger.warn('Missing required fields (email, name)');\n return;\n }\n\n await this.identify({\n name,\n email,\n company: company,\n discovery: false,\n });\n }\n\n /**\n * Identify user and enrich lead data\n */\n async identify(leadData: LeadData): Promise<void> {\n const fp = await this.fingerprint.getFingerprint();\n\n if (!fp) {\n this.logger.warn('Cannot identify without fingerprint');\n return;\n }\n\n await this.api.enrichLead({\n fingerprint: fp,\n leadData,\n });\n }\n\n /**\n * 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, 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,\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 (this.initialized) {\n this.logger.warn('SDK already initialized');\n return;\n }\n\n this.logger.log('Initializing Thred SDK...');\n\n // Generate fingerprint\n await this.fingerprint.getFingerprint();\n\n // Initialize tracker\n await this.tracker.init();\n\n this.initialized = true;\n this.logger.log('SDK initialized successfully');\n }\n\n /**\n * Check if visitor is from ChatGPT\n */\n isFromChatGPT(): boolean {\n return isFromChatGPT();\n }\n\n /**\n * Track page view\n */\n async trackPageView(): Promise<void> {\n await this.tracker.trackPageView();\n }\n\n /**\n * Track form submission\n */\n async trackFormSubmit(formData: FormData): Promise<void> {\n await this.tracker.trackFormSubmit(formData);\n }\n\n /**\n * Identify user with lead data\n */\n async identify(leadData: LeadData): Promise<void> {\n await this.tracker.identify(leadData);\n }\n\n /**\n * Get current fingerprint\n */\n getFingerprint(): string | null {\n return this.fingerprint.getCachedFingerprint();\n }\n\n /**\n * Destroy SDK instance and cleanup\n */\n destroy(): void {\n this.tracker.destroy();\n this.fingerprint.clear();\n this.initialized = false;\n this.logger.log('SDK destroyed');\n }\n}\n\n/**\n * Auto-initialize if loaded as script tag with browserKey\n */\nif (typeof window !== 'undefined') {\n const browserKey = getBrowserKeyFromScript();\n if (browserKey) {\n const sdk = new ThredSDK({ browserKey });\n (window as any).Thred = sdk;\n }\n}\n\nexport default ThredSDK;\n"],"names":[],"mappings":"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","x_google_ignoreList":[0]}
package/dist/index.js CHANGED
@@ -283,12 +283,17 @@ class Tracker {
283
283
  this.logger.log('Tracking disabled by config');
284
284
  return;
285
285
  }
286
- if (!this.config.fromChat) {
287
- this.logger.log('Not from ChatGPT - exiting');
286
+ if (!this.config.hasChatSession) {
287
+ this.logger.log('No chat session for this fingerprint - exiting');
288
288
  return;
289
289
  }
290
- // Track page view
291
- yield this.trackPageView();
290
+ // Only track page view if UTM is from ChatGPT
291
+ if (isFromChatGPT()) {
292
+ yield this.trackPageView();
293
+ }
294
+ else {
295
+ this.logger.log('UTM not from ChatGPT - skipping page view');
296
+ }
292
297
  // Setup form tracking
293
298
  this.setupFormTracking();
294
299
  });
@@ -371,32 +376,40 @@ class Tracker {
371
376
  this.logger.warn('Cannot track form - no hosted URL base');
372
377
  return;
373
378
  }
374
- // Attach UTM parameter to links containing hostedUrlBase
375
- document.addEventListener('click', (e) => __awaiter(this, void 0, void 0, function* () {
379
+ // Inject utm_fp into all existing matching links
380
+ this.injectFingerprintIntoLinks(document.body, hostedUrlBase);
381
+ // Watch for dynamically added links and inject utm_fp as they appear
382
+ this.formObserver = new MutationObserver((mutations) => {
383
+ for (const mutation of mutations) {
384
+ for (const node of Array.from(mutation.addedNodes)) {
385
+ if (!(node instanceof HTMLElement))
386
+ continue;
387
+ // Check if the added node itself is a matching link
388
+ if (node.tagName === 'A') {
389
+ this.injectFingerprintIntoLink(node, hostedUrlBase);
390
+ }
391
+ // Check any child links within the added node
392
+ this.injectFingerprintIntoLinks(node, hostedUrlBase);
393
+ }
394
+ }
395
+ });
396
+ this.formObserver.observe(document.body, {
397
+ childList: true,
398
+ subtree: true,
399
+ });
400
+ // Fallback: intercept clicks for links that may have had their href changed dynamically
401
+ document.addEventListener('click', (e) => {
376
402
  const target = e.target.closest('a');
377
403
  if (!target)
378
404
  return;
379
405
  const href = target.getAttribute('href');
380
406
  if (!href || !href.includes(hostedUrlBase))
381
407
  return;
382
- // Get fingerprint
383
- const fp = yield this.fingerprint.getFingerprint();
384
- if (!fp) {
385
- this.logger.warn('Cannot add UTM parameter - no fingerprint');
408
+ // Already tagged — skip
409
+ if (href.includes('utm_fp='))
386
410
  return;
387
- }
388
- // Parse URL and add utm_fp parameter
389
- try {
390
- const url = new URL(href, window.location.origin);
391
- url.searchParams.set('utm_fp', fp);
392
- // Update the href with the new URL
393
- target.setAttribute('href', url.toString());
394
- this.logger.log('Added utm_fp to link:', url.toString());
395
- }
396
- catch (err) {
397
- this.logger.warn('Failed to parse URL:', href, err);
398
- }
399
- }), { capture: true });
411
+ this.injectFingerprintIntoLink(target, hostedUrlBase);
412
+ }, { capture: true });
400
413
  return;
401
414
  }
402
415
  else if (this.config.type === 'custom') {
@@ -434,6 +447,40 @@ class Tracker {
434
447
  });
435
448
  }
436
449
  }
450
+ /**
451
+ * Inject utm_fp into all matching links within a root element
452
+ */
453
+ injectFingerprintIntoLinks(root, hostedUrlBase) {
454
+ const links = root.querySelectorAll('a[href]');
455
+ for (const link of Array.from(links)) {
456
+ this.injectFingerprintIntoLink(link, hostedUrlBase);
457
+ }
458
+ }
459
+ /**
460
+ * Inject utm_fp into a single link if it matches hostedUrlBase
461
+ */
462
+ injectFingerprintIntoLink(link, hostedUrlBase) {
463
+ const href = link.getAttribute('href');
464
+ if (!href || !href.includes(hostedUrlBase))
465
+ return;
466
+ // Already tagged — skip
467
+ if (href.includes('utm_fp='))
468
+ return;
469
+ const fp = this.fingerprint.getCachedFingerprint();
470
+ if (!fp) {
471
+ this.logger.warn('Cannot inject utm_fp - no cached fingerprint');
472
+ return;
473
+ }
474
+ try {
475
+ const url = new URL(href, window.location.origin);
476
+ url.searchParams.set('utm_fp', fp);
477
+ link.setAttribute('href', url.toString());
478
+ this.logger.log('Injected utm_fp into link:', url.toString());
479
+ }
480
+ catch (err) {
481
+ this.logger.warn('Failed to parse URL:', href, err);
482
+ }
483
+ }
437
484
  /**
438
485
  * Cleanup tracker
439
486
  */
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../node_modules/tslib/tslib.es6.js","../src/utils/logger.ts","../src/utils/detector.ts","../src/core/fingerprint.ts","../src/core/api.ts","../src/core/tracker.ts","../src/index.ts"],"sourcesContent":["/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n","/**\n * Simple logger utility\n */\nexport class Logger {\n private debug: boolean;\n private prefix: string;\n\n constructor(debug = false, prefix = '[Thred]') {\n this.debug = debug;\n this.prefix = prefix;\n }\n\n log(...args: unknown[]) {\n if (this.debug) {\n console.log(this.prefix, ...args);\n }\n }\n\n warn(...args: unknown[]) {\n if (this.debug) {\n console.warn(this.prefix, ...args);\n }\n }\n\n error(...args: unknown[]) {\n console.error(this.prefix, ...args);\n }\n}\n","/**\n * Detects if the visitor came from ChatGPT\n */\nexport function isFromChatGPT(): boolean {\n if (typeof window === 'undefined') return false;\n\n const params = new URLSearchParams(window.location.search);\n const utmSource = params.get('utm_source')?.toLowerCase() || '';\n const referrer = document.referrer.toLowerCase();\n\n const isChatGPTRef =\n referrer.includes('chat.openai.com') || referrer.includes('chatgpt.com');\n const isChatGPTUtm =\n utmSource === 'chatgpt' ||\n utmSource.includes('chatgpt') ||\n utmSource === 'chat.openai' ||\n utmSource === 'openai';\n\n return isChatGPTUtm || isChatGPTRef;\n}\n\n/**\n * Gets the browser key from script tag if present\n */\nexport function getBrowserKeyFromScript(): string | null {\n if (typeof window === 'undefined' || typeof document === 'undefined') {\n return null;\n }\n\n const scripts = document.getElementsByTagName('script');\n\n for (const script of Array.from(scripts)) {\n if (script.src.includes('thred')) {\n try {\n const url = new URL(script.src);\n return url.searchParams.get('browserKey');\n } catch {\n // Invalid URL\n }\n }\n }\n\n return null;\n}\n","import type { FingerprintResult } from '../types';\nimport { Logger } from '../utils/logger';\n\nconst FP_PROXY_URL =\n 'https://thredproxy.com/35ZCuyzokuT1YGd8/Hm7KPMHUZ4duyPRj?apiKey=iyqKVLQt2560EQUyjfxa';\nconst FP_PROXY_ENDPOINT =\n 'https://thredproxy.com/35ZCuyzokuT1YGd8/qbWl4nqUSCIDTor4';\n\nexport class FingerprintManager {\n private fingerprint: string | null = null;\n private logger: Logger;\n private promise: Promise<string | null> | null = null;\n\n constructor(logger: Logger) {\n this.logger = logger;\n }\n\n /**\n * Get or generate fingerprint\n */\n async getFingerprint(): Promise<string | null> {\n // Return cached fingerprint\n if (this.fingerprint) {\n this.logger.log('Using cached fingerprint:', this.fingerprint);\n return this.fingerprint;\n }\n\n // Return existing promise if already loading\n if (this.promise) {\n return this.promise;\n }\n\n // Check global window cache\n if (\n typeof window !== 'undefined' &&\n (window as any).thredFingerprint\n ) {\n this.fingerprint = (window as any).thredFingerprint;\n this.logger.log('Using global fingerprint:', this.fingerprint);\n return this.fingerprint;\n }\n\n // Generate new fingerprint\n this.promise = this.generateFingerprint();\n return this.promise;\n }\n\n private async generateFingerprint(): Promise<string | null> {\n try {\n this.logger.log('Loading FingerprintJS...');\n\n const FingerprintJS = await import(FP_PROXY_URL);\n const fp = await FingerprintJS.load({\n endpoint: [FP_PROXY_ENDPOINT, FingerprintJS.defaultEndpoint],\n });\n\n const result: FingerprintResult = await fp.get();\n this.fingerprint = result.visitorId;\n\n // Cache globally\n if (typeof window !== 'undefined') {\n (window as any).thredFingerprint = this.fingerprint;\n }\n\n this.logger.log('Fingerprint generated:', this.fingerprint);\n return this.fingerprint;\n } catch (error) {\n this.logger.warn('Fingerprint generation failed:', error);\n return null;\n }\n }\n\n /**\n * Get cached fingerprint (synchronous)\n */\n getCachedFingerprint(): string | null {\n return this.fingerprint;\n }\n\n /**\n * Clear fingerprint cache\n */\n clear() {\n this.fingerprint = null;\n this.promise = null;\n if (typeof window !== 'undefined') {\n delete (window as any).thredFingerprint;\n }\n }\n}\n","import type {\n ThredConfig,\n PageViewPayload,\n EnrichPayload,\n} from '../types';\nimport { Logger } from '../utils/logger';\n\nexport class ThredAPI {\n private baseUrl: string;\n private browserKey: string;\n private logger: Logger;\n\n constructor(baseUrl: string, browserKey: string, logger: Logger) {\n this.baseUrl = baseUrl;\n this.browserKey = browserKey;\n this.logger = logger;\n }\n\n /**\n * Fetch configuration from API\n */\n async fetchConfig(fingerprint: string): Promise<ThredConfig | null> {\n try {\n const url = `${this.baseUrl}/config?fingerprint=${encodeURIComponent(fingerprint)}&browserKey=${encodeURIComponent(this.browserKey)}`;\n this.logger.log('Fetching config from:', url);\n\n const response = await fetch(url, {\n method: 'GET',\n headers: {\n Accept: 'application/json',\n },\n });\n\n if (!response.ok) {\n throw new Error(`Config request failed: ${response.status}`);\n }\n\n const config = await response.json();\n this.logger.log('Config received:', config);\n\n return config;\n } catch (error) {\n this.logger.warn('Failed to fetch config:', error);\n return null;\n }\n }\n\n /**\n * Send page view event\n */\n async trackPageView(payload: PageViewPayload): Promise<void> {\n try {\n const url = `${this.baseUrl}/events/page-view?browserKey=${encodeURIComponent(this.browserKey)}`;\n this.logger.log('Tracking page view:', url);\n\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(payload),\n keepalive: true,\n });\n\n if (!response.ok) {\n throw new Error(`Page view request failed: ${response.status}`);\n }\n\n this.logger.log('Page view tracked successfully');\n } catch (error) {\n this.logger.warn('Failed to track page view:', error);\n }\n }\n\n /**\n * Send lead enrichment data\n */\n async enrichLead(payload: EnrichPayload): Promise<void> {\n try {\n const url = `${this.baseUrl}/customers/enrich?browserKey=${encodeURIComponent(this.browserKey)}`;\n this.logger.log('Enriching lead:', url);\n\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(payload),\n keepalive: true,\n });\n\n if (!response.ok) {\n throw new Error(`Enrich request failed: ${response.status}`);\n }\n\n this.logger.log('Lead enriched successfully');\n } catch (error) {\n this.logger.warn('Failed to enrich lead:', error);\n }\n }\n}\n","import type { ThredConfig, LeadData } from '../types';\nimport { Logger } from '../utils/logger';\nimport { ThredAPI } from './api';\nimport { FingerprintManager } from './fingerprint';\n\nexport class Tracker {\n private api: ThredAPI;\n private fingerprint: FingerprintManager;\n private logger: Logger;\n private config: ThredConfig | null = null;\n private formObserver: MutationObserver | null = null;\n\n constructor(\n api: ThredAPI,\n fingerprint: FingerprintManager,\n logger: Logger\n ) {\n this.api = api;\n this.fingerprint = fingerprint;\n this.logger = logger;\n }\n\n /**\n * Initialize tracker with config\n */\n async init(): Promise<void> {\n // Get fingerprint\n const fingerprint = await this.fingerprint.getFingerprint();\n if (!fingerprint) {\n this.logger.warn('Cannot initialize tracker without fingerprint');\n return;\n }\n this.config = await this.api.fetchConfig(fingerprint);\n\n if (!this.config?.enabled) {\n this.logger.log('Tracking disabled by config');\n return;\n }\n\n if (!this.config.fromChat) {\n this.logger.log('Not from ChatGPT - exiting');\n return;\n }\n\n // Track page view\n await this.trackPageView();\n\n // Setup form tracking\n this.setupFormTracking();\n }\n\n /**\n * Track page view event\n */\n async trackPageView(): Promise<void> {\n const fp = await this.fingerprint.getFingerprint();\n\n if (!fp) {\n this.logger.warn('Cannot track page view without fingerprint');\n return;\n }\n\n await this.api.trackPageView({\n event: 'page_view',\n data: {\n url: window.location.href,\n },\n fingerprint: fp,\n });\n }\n\n /**\n * Track form submission and enrich lead\n */\n async trackFormSubmit(formData: FormData): Promise<void> {\n if (!this.config || !this.config.emailId || !this.config.nameId) {\n this.logger.warn('Cannot track form - no config loaded');\n return;\n }\n\n const email = formData.get(this.config.emailId)?.toString().trim();\n const name = formData.get(this.config.nameId)?.toString().trim();\n\n let company: string | undefined = undefined;\n if (this.config.companyId) {\n company = formData.get(this.config.companyId)?.toString().trim();\n }\n\n this.logger.log('Form data extracted:', { email, name, company });\n\n if (!email || !name) {\n this.logger.warn('Missing required fields (email, name)');\n return;\n }\n\n await this.identify({\n name,\n email,\n company: company,\n discovery: false,\n });\n }\n\n /**\n * Identify user and enrich lead data\n */\n async identify(leadData: LeadData): Promise<void> {\n const fp = await this.fingerprint.getFingerprint();\n\n if (!fp) {\n this.logger.warn('Cannot identify without fingerprint');\n return;\n }\n\n await this.api.enrichLead({\n fingerprint: fp,\n leadData,\n });\n }\n\n /**\n * 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 // Attach UTM parameter to links containing hostedUrlBase\n document.addEventListener('click', async (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 // Get fingerprint\n const fp = await this.fingerprint.getFingerprint();\n if (!fp) {\n this.logger.warn('Cannot add UTM parameter - no fingerprint');\n return;\n }\n\n // Parse URL and add utm_fp parameter\n try {\n const url = new URL(href, window.location.origin);\n url.searchParams.set('utm_fp', fp);\n \n // Update the href with the new URL\n target.setAttribute('href', url.toString());\n \n this.logger.log('Added utm_fp to link:', url.toString());\n } catch (err) {\n this.logger.warn('Failed to parse URL:', href, err);\n }\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 * 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, 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,\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 (this.initialized) {\n this.logger.warn('SDK already initialized');\n return;\n }\n\n this.logger.log('Initializing Thred SDK...');\n\n // Generate fingerprint\n await this.fingerprint.getFingerprint();\n\n // Initialize tracker\n await this.tracker.init();\n\n this.initialized = true;\n this.logger.log('SDK initialized successfully');\n }\n\n /**\n * Check if visitor is from ChatGPT\n */\n isFromChatGPT(): boolean {\n return isFromChatGPT();\n }\n\n /**\n * Track page view\n */\n async trackPageView(): Promise<void> {\n await this.tracker.trackPageView();\n }\n\n /**\n * Track form submission\n */\n async trackFormSubmit(formData: FormData): Promise<void> {\n await this.tracker.trackFormSubmit(formData);\n }\n\n /**\n * Identify user with lead data\n */\n async identify(leadData: LeadData): Promise<void> {\n await this.tracker.identify(leadData);\n }\n\n /**\n * Get current fingerprint\n */\n getFingerprint(): string | null {\n return this.fingerprint.getCachedFingerprint();\n }\n\n /**\n * Destroy SDK instance and cleanup\n */\n destroy(): void {\n this.tracker.destroy();\n this.fingerprint.clear();\n this.initialized = false;\n this.logger.log('SDK destroyed');\n }\n}\n\n/**\n * Auto-initialize if loaded as script tag with browserKey\n */\nif (typeof window !== 'undefined') {\n const browserKey = getBrowserKeyFromScript();\n if (browserKey) {\n const sdk = new ThredSDK({ browserKey });\n (window as any).Thred = sdk;\n }\n}\n\nexport default ThredSDK;\n"],"names":[],"mappings":"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","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"index.js","sources":["../node_modules/tslib/tslib.es6.js","../src/utils/logger.ts","../src/utils/detector.ts","../src/core/fingerprint.ts","../src/core/api.ts","../src/core/tracker.ts","../src/index.ts"],"sourcesContent":["/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n","/**\n * Simple logger utility\n */\nexport class Logger {\n private debug: boolean;\n private prefix: string;\n\n constructor(debug = false, prefix = '[Thred]') {\n this.debug = debug;\n this.prefix = prefix;\n }\n\n log(...args: unknown[]) {\n if (this.debug) {\n console.log(this.prefix, ...args);\n }\n }\n\n warn(...args: unknown[]) {\n if (this.debug) {\n console.warn(this.prefix, ...args);\n }\n }\n\n error(...args: unknown[]) {\n console.error(this.prefix, ...args);\n }\n}\n","/**\n * Detects if the visitor came from ChatGPT\n */\nexport function isFromChatGPT(): boolean {\n if (typeof window === 'undefined') return false;\n\n const params = new URLSearchParams(window.location.search);\n const utmSource = params.get('utm_source')?.toLowerCase() || '';\n const referrer = document.referrer.toLowerCase();\n\n const isChatGPTRef =\n referrer.includes('chat.openai.com') || referrer.includes('chatgpt.com');\n const isChatGPTUtm =\n utmSource === 'chatgpt' ||\n utmSource.includes('chatgpt') ||\n utmSource === 'chat.openai' ||\n utmSource === 'openai';\n\n return isChatGPTUtm || isChatGPTRef;\n}\n\n/**\n * Gets the browser key from script tag if present\n */\nexport function getBrowserKeyFromScript(): string | null {\n if (typeof window === 'undefined' || typeof document === 'undefined') {\n return null;\n }\n\n const scripts = document.getElementsByTagName('script');\n\n for (const script of Array.from(scripts)) {\n if (script.src.includes('thred')) {\n try {\n const url = new URL(script.src);\n return url.searchParams.get('browserKey');\n } catch {\n // Invalid URL\n }\n }\n }\n\n return null;\n}\n","import type { FingerprintResult } from '../types';\nimport { Logger } from '../utils/logger';\n\nconst FP_PROXY_URL =\n 'https://thredproxy.com/35ZCuyzokuT1YGd8/Hm7KPMHUZ4duyPRj?apiKey=iyqKVLQt2560EQUyjfxa';\nconst FP_PROXY_ENDPOINT =\n 'https://thredproxy.com/35ZCuyzokuT1YGd8/qbWl4nqUSCIDTor4';\n\nexport class FingerprintManager {\n private fingerprint: string | null = null;\n private logger: Logger;\n private promise: Promise<string | null> | null = null;\n\n constructor(logger: Logger) {\n this.logger = logger;\n }\n\n /**\n * Get or generate fingerprint\n */\n async getFingerprint(): Promise<string | null> {\n // Return cached fingerprint\n if (this.fingerprint) {\n this.logger.log('Using cached fingerprint:', this.fingerprint);\n return this.fingerprint;\n }\n\n // Return existing promise if already loading\n if (this.promise) {\n return this.promise;\n }\n\n // Check global window cache\n if (\n typeof window !== 'undefined' &&\n (window as any).thredFingerprint\n ) {\n this.fingerprint = (window as any).thredFingerprint;\n this.logger.log('Using global fingerprint:', this.fingerprint);\n return this.fingerprint;\n }\n\n // Generate new fingerprint\n this.promise = this.generateFingerprint();\n return this.promise;\n }\n\n private async generateFingerprint(): Promise<string | null> {\n try {\n this.logger.log('Loading FingerprintJS...');\n\n const FingerprintJS = await import(FP_PROXY_URL);\n const fp = await FingerprintJS.load({\n endpoint: [FP_PROXY_ENDPOINT, FingerprintJS.defaultEndpoint],\n });\n\n const result: FingerprintResult = await fp.get();\n this.fingerprint = result.visitorId;\n\n // Cache globally\n if (typeof window !== 'undefined') {\n (window as any).thredFingerprint = this.fingerprint;\n }\n\n this.logger.log('Fingerprint generated:', this.fingerprint);\n return this.fingerprint;\n } catch (error) {\n this.logger.warn('Fingerprint generation failed:', error);\n return null;\n }\n }\n\n /**\n * Get cached fingerprint (synchronous)\n */\n getCachedFingerprint(): string | null {\n return this.fingerprint;\n }\n\n /**\n * Clear fingerprint cache\n */\n clear() {\n this.fingerprint = null;\n this.promise = null;\n if (typeof window !== 'undefined') {\n delete (window as any).thredFingerprint;\n }\n }\n}\n","import type {\n ThredConfig,\n PageViewPayload,\n EnrichPayload,\n} from '../types';\nimport { Logger } from '../utils/logger';\n\nexport class ThredAPI {\n private baseUrl: string;\n private browserKey: string;\n private logger: Logger;\n\n constructor(baseUrl: string, browserKey: string, logger: Logger) {\n this.baseUrl = baseUrl;\n this.browserKey = browserKey;\n this.logger = logger;\n }\n\n /**\n * Fetch configuration from API\n */\n async fetchConfig(fingerprint: string): Promise<ThredConfig | null> {\n try {\n const url = `${this.baseUrl}/config?fingerprint=${encodeURIComponent(fingerprint)}&browserKey=${encodeURIComponent(this.browserKey)}`;\n this.logger.log('Fetching config from:', url);\n\n const response = await fetch(url, {\n method: 'GET',\n headers: {\n Accept: 'application/json',\n },\n });\n\n if (!response.ok) {\n throw new Error(`Config request failed: ${response.status}`);\n }\n\n const config = await response.json();\n this.logger.log('Config received:', config);\n\n return config;\n } catch (error) {\n this.logger.warn('Failed to fetch config:', error);\n return null;\n }\n }\n\n /**\n * Send page view event\n */\n async trackPageView(payload: PageViewPayload): Promise<void> {\n try {\n const url = `${this.baseUrl}/events/page-view?browserKey=${encodeURIComponent(this.browserKey)}`;\n this.logger.log('Tracking page view:', url);\n\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(payload),\n keepalive: true,\n });\n\n if (!response.ok) {\n throw new Error(`Page view request failed: ${response.status}`);\n }\n\n this.logger.log('Page view tracked successfully');\n } catch (error) {\n this.logger.warn('Failed to track page view:', error);\n }\n }\n\n /**\n * Send lead enrichment data\n */\n async enrichLead(payload: EnrichPayload): Promise<void> {\n try {\n const url = `${this.baseUrl}/customers/enrich?browserKey=${encodeURIComponent(this.browserKey)}`;\n this.logger.log('Enriching lead:', url);\n\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(payload),\n keepalive: true,\n });\n\n if (!response.ok) {\n throw new Error(`Enrich request failed: ${response.status}`);\n }\n\n this.logger.log('Lead enriched successfully');\n } catch (error) {\n this.logger.warn('Failed to enrich lead:', error);\n }\n }\n}\n","import type { ThredConfig, LeadData } from '../types';\nimport { Logger } from '../utils/logger';\nimport { isFromChatGPT } from '../utils/detector';\nimport { ThredAPI } from './api';\nimport { FingerprintManager } from './fingerprint';\n\nexport class Tracker {\n private api: ThredAPI;\n private fingerprint: FingerprintManager;\n private logger: Logger;\n private config: ThredConfig | null = null;\n private formObserver: MutationObserver | null = null;\n\n constructor(\n api: ThredAPI,\n fingerprint: FingerprintManager,\n logger: Logger\n ) {\n this.api = api;\n this.fingerprint = fingerprint;\n this.logger = logger;\n }\n\n /**\n * Initialize tracker with config\n */\n async init(): Promise<void> {\n // Get fingerprint\n const fingerprint = await this.fingerprint.getFingerprint();\n if (!fingerprint) {\n this.logger.warn('Cannot initialize tracker without fingerprint');\n return;\n }\n this.config = await this.api.fetchConfig(fingerprint);\n\n if (!this.config?.enabled) {\n this.logger.log('Tracking disabled by config');\n return;\n }\n\n if (!this.config.hasChatSession) {\n this.logger.log('No chat session for this fingerprint - exiting');\n return;\n }\n\n // Only track page view if UTM is from ChatGPT\n if (isFromChatGPT()) {\n await this.trackPageView();\n } else {\n this.logger.log('UTM not from ChatGPT - skipping page view');\n }\n\n // Setup form tracking\n this.setupFormTracking();\n }\n\n /**\n * Track page view event\n */\n async trackPageView(): Promise<void> {\n const fp = await this.fingerprint.getFingerprint();\n\n if (!fp) {\n this.logger.warn('Cannot track page view without fingerprint');\n return;\n }\n\n await this.api.trackPageView({\n event: 'page_view',\n data: {\n url: window.location.href,\n },\n fingerprint: fp,\n });\n }\n\n /**\n * Track form submission and enrich lead\n */\n async trackFormSubmit(formData: FormData): Promise<void> {\n if (!this.config || !this.config.emailId || !this.config.nameId) {\n this.logger.warn('Cannot track form - no config loaded');\n return;\n }\n\n const email = formData.get(this.config.emailId)?.toString().trim();\n const name = formData.get(this.config.nameId)?.toString().trim();\n\n let company: string | undefined = undefined;\n if (this.config.companyId) {\n company = formData.get(this.config.companyId)?.toString().trim();\n }\n\n this.logger.log('Form data extracted:', { email, name, company });\n\n if (!email || !name) {\n this.logger.warn('Missing required fields (email, name)');\n return;\n }\n\n await this.identify({\n name,\n email,\n company: company,\n discovery: false,\n });\n }\n\n /**\n * Identify user and enrich lead data\n */\n async identify(leadData: LeadData): Promise<void> {\n const fp = await this.fingerprint.getFingerprint();\n\n if (!fp) {\n this.logger.warn('Cannot identify without fingerprint');\n return;\n }\n\n await this.api.enrichLead({\n fingerprint: fp,\n leadData,\n });\n }\n\n /**\n * 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, 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,\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 (this.initialized) {\n this.logger.warn('SDK already initialized');\n return;\n }\n\n this.logger.log('Initializing Thred SDK...');\n\n // Generate fingerprint\n await this.fingerprint.getFingerprint();\n\n // Initialize tracker\n await this.tracker.init();\n\n this.initialized = true;\n this.logger.log('SDK initialized successfully');\n }\n\n /**\n * Check if visitor is from ChatGPT\n */\n isFromChatGPT(): boolean {\n return isFromChatGPT();\n }\n\n /**\n * Track page view\n */\n async trackPageView(): Promise<void> {\n await this.tracker.trackPageView();\n }\n\n /**\n * Track form submission\n */\n async trackFormSubmit(formData: FormData): Promise<void> {\n await this.tracker.trackFormSubmit(formData);\n }\n\n /**\n * Identify user with lead data\n */\n async identify(leadData: LeadData): Promise<void> {\n await this.tracker.identify(leadData);\n }\n\n /**\n * Get current fingerprint\n */\n getFingerprint(): string | null {\n return this.fingerprint.getCachedFingerprint();\n }\n\n /**\n * Destroy SDK instance and cleanup\n */\n destroy(): void {\n this.tracker.destroy();\n this.fingerprint.clear();\n this.initialized = false;\n this.logger.log('SDK destroyed');\n }\n}\n\n/**\n * Auto-initialize if loaded as script tag with browserKey\n */\nif (typeof window !== 'undefined') {\n const browserKey = getBrowserKeyFromScript();\n if (browserKey) {\n const sdk = new ThredSDK({ browserKey });\n (window as any).Thred = sdk;\n }\n}\n\nexport default ThredSDK;\n"],"names":[],"mappings":"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","x_google_ignoreList":[0]}
package/dist/thred.umd.js CHANGED
@@ -1,2 +1,2 @@
1
- !function(i,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((i="undefined"!=typeof globalThis?globalThis:i||self).Thred={})}(this,function(i){"use strict";function t(i,t,e,r){return new(e||(e=Promise))(function(n,o){function s(i){try{d(r.next(i))}catch(i){o(i)}}function g(i){try{d(r.throw(i))}catch(i){o(i)}}function d(i){var t;i.done?n(i.value):(t=i.value,t instanceof e?t:new e(function(i){i(t)})).then(s,g)}d((r=r.apply(i,t||[])).next())})}"function"==typeof SuppressedError&&SuppressedError;class e{constructor(i=!1,t="[Thred]"){this.debug=i,this.prefix=t}log(...i){this.debug&&console.log(this.prefix,...i)}warn(...i){this.debug&&console.warn(this.prefix,...i)}error(...i){console.error(this.prefix,...i)}}class r{constructor(i){this.fingerprint=null,this.promise=null,this.logger=i}getFingerprint(){return t(this,void 0,void 0,function*(){return this.fingerprint?(this.logger.log("Using cached fingerprint:",this.fingerprint),this.fingerprint):this.promise?this.promise:"undefined"!=typeof window&&window.thredFingerprint?(this.fingerprint=window.thredFingerprint,this.logger.log("Using global fingerprint:",this.fingerprint),this.fingerprint):(this.promise=this.generateFingerprint(),this.promise)})}generateFingerprint(){return t(this,void 0,void 0,function*(){try{this.logger.log("Loading FingerprintJS...");const i=yield import("https://thredproxy.com/35ZCuyzokuT1YGd8/Hm7KPMHUZ4duyPRj?apiKey=iyqKVLQt2560EQUyjfxa"),t=yield i.load({endpoint:["https://thredproxy.com/35ZCuyzokuT1YGd8/qbWl4nqUSCIDTor4",i.defaultEndpoint]}),e=yield t.get();return this.fingerprint=e.visitorId,"undefined"!=typeof window&&(window.thredFingerprint=this.fingerprint),this.logger.log("Fingerprint generated:",this.fingerprint),this.fingerprint}catch(i){return this.logger.warn("Fingerprint generation failed:",i),null}})}getCachedFingerprint(){return this.fingerprint}clear(){this.fingerprint=null,this.promise=null,"undefined"!=typeof window&&delete window.thredFingerprint}}class n{constructor(i,t,e){this.baseUrl=i,this.browserKey=t,this.logger=e}fetchConfig(i){return t(this,void 0,void 0,function*(){try{const t=`${this.baseUrl}/config?fingerprint=${encodeURIComponent(i)}&browserKey=${encodeURIComponent(this.browserKey)}`;this.logger.log("Fetching config from:",t);const e=yield fetch(t,{method:"GET",headers:{Accept:"application/json"}});if(!e.ok)throw new Error(`Config request failed: ${e.status}`);const r=yield e.json();return this.logger.log("Config received:",r),r}catch(i){return this.logger.warn("Failed to fetch config:",i),null}})}trackPageView(i){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 e=yield fetch(t,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(i),keepalive:!0});if(!e.ok)throw new Error(`Page view request failed: ${e.status}`);this.logger.log("Page view tracked successfully")}catch(i){this.logger.warn("Failed to track page view:",i)}})}enrichLead(i){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 e=yield fetch(t,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(i),keepalive:!0});if(!e.ok)throw new Error(`Enrich request failed: ${e.status}`);this.logger.log("Lead enriched successfully")}catch(i){this.logger.warn("Failed to enrich lead:",i)}})}}class o{constructor(i,t,e){this.config=null,this.formObserver=null,this.api=i,this.fingerprint=t,this.logger=e}init(){return t(this,void 0,void 0,function*(){var i;const t=yield this.fingerprint.getFingerprint();t?(this.config=yield this.api.fetchConfig(t),(null===(i=this.config)||void 0===i?void 0:i.enabled)?this.config.fromChat?(yield this.trackPageView(),this.setupFormTracking()):this.logger.log("Not from ChatGPT - exiting"):this.logger.log("Tracking disabled by config")):this.logger.warn("Cannot initialize tracker without fingerprint")})}trackPageView(){return t(this,void 0,void 0,function*(){const i=yield this.fingerprint.getFingerprint();i?yield this.api.trackPageView({event:"page_view",data:{url:window.location.href},fingerprint:i}):this.logger.warn("Cannot track page view without fingerprint")})}trackFormSubmit(i){return t(this,void 0,void 0,function*(){var t,e,r;if(!this.config||!this.config.emailId||!this.config.nameId)return void this.logger.warn("Cannot track form - no config loaded");const n=null===(t=i.get(this.config.emailId))||void 0===t?void 0:t.toString().trim(),o=null===(e=i.get(this.config.nameId))||void 0===e?void 0:e.toString().trim();let s;this.config.companyId&&(s=null===(r=i.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(i){return t(this,void 0,void 0,function*(){const t=yield this.fingerprint.getFingerprint();t?yield this.api.enrichLead({fingerprint:t,leadData:i}):this.logger.warn("Cannot identify without fingerprint")})}setupFormTracking(){if(this.config&&"undefined"!=typeof document){if("hosted"===this.config.type){const i=this.config.hostedUrlBase;return i?void document.addEventListener("click",e=>t(this,void 0,void 0,function*(){const t=e.target.closest("a");if(!t)return;const r=t.getAttribute("href");if(!r||!r.includes(i))return;const n=yield this.fingerprint.getFingerprint();if(n)try{const i=new URL(r,window.location.origin);i.searchParams.set("utm_fp",n),t.setAttribute("href",i.toString()),this.logger.log("Added utm_fp to link:",i.toString())}catch(i){this.logger.warn("Failed to parse URL:",r,i)}else this.logger.warn("Cannot add UTM parameter - no fingerprint")}),{capture:!0}):void this.logger.warn("Cannot track form - no hosted URL base")}if("custom"===this.config.type){const i=()=>{if(!this.config||!this.config.formId)return void this.logger.warn("Cannot track form - no form ID");const i=document.getElementById(this.config.formId);if(!i)return void this.logger.log("Form not found:",this.config.formId);const t=i;t.dataset.thredTracked||(this.logger.log("Attaching listener to form:",this.config.formId),t.addEventListener("submit",()=>{const i=new FormData(t);this.trackFormSubmit(i)},{capture:!0}),t.dataset.thredTracked="true")};i(),this.formObserver=new MutationObserver(()=>{i()}),this.formObserver.observe(document.body,{childList:!0,subtree:!0})}}else this.logger.warn("Cannot track form - no config or document")}destroy(){this.formObserver&&(this.formObserver.disconnect(),this.formObserver=null)}}class s{constructor(i){this.initialized=!1,this.options=Object.assign({baseUrl:"https://api.thred.dev/v1",debug:!1,autoInit:!0},i),this.logger=new e(this.options.debug),this.fingerprint=new r(this.logger),this.api=new n(this.options.baseUrl,this.options.browserKey,this.logger),this.tracker=new o(this.api,this.fingerprint,this.logger),this.options.autoInit&&this.init()}init(){return t(this,void 0,void 0,function*(){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"))})}isFromChatGPT(){return function(){var i;if("undefined"==typeof window)return!1;const t=(null===(i=new URLSearchParams(window.location.search).get("utm_source"))||void 0===i?void 0:i.toLowerCase())||"",e=document.referrer.toLowerCase(),r=e.includes("chat.openai.com")||e.includes("chatgpt.com");return"chatgpt"===t||t.includes("chatgpt")||"chat.openai"===t||"openai"===t||r}()}trackPageView(){return t(this,void 0,void 0,function*(){yield this.tracker.trackPageView()})}trackFormSubmit(i){return t(this,void 0,void 0,function*(){yield this.tracker.trackFormSubmit(i)})}identify(i){return t(this,void 0,void 0,function*(){yield this.tracker.identify(i)})}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 i=function(){if("undefined"==typeof window||"undefined"==typeof document)return null;const i=document.getElementsByTagName("script");for(const t of Array.from(i))if(t.src.includes("thred"))try{return new URL(t.src).searchParams.get("browserKey")}catch(i){}return null}();if(i){const t=new s({browserKey:i});window.Thred=t}}i.ThredSDK=s,i.default=s,Object.defineProperty(i,"__esModule",{value:!0})});
1
+ !function(i,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((i="undefined"!=typeof globalThis?globalThis:i||self).Thred={})}(this,function(i){"use strict";function t(i,t,e,n){return new(e||(e=Promise))(function(r,o){function s(i){try{c(n.next(i))}catch(i){o(i)}}function g(i){try{c(n.throw(i))}catch(i){o(i)}}function c(i){var t;i.done?r(i.value):(t=i.value,t instanceof e?t:new e(function(i){i(t)})).then(s,g)}c((n=n.apply(i,t||[])).next())})}"function"==typeof SuppressedError&&SuppressedError;class e{constructor(i=!1,t="[Thred]"){this.debug=i,this.prefix=t}log(...i){this.debug&&console.log(this.prefix,...i)}warn(...i){this.debug&&console.warn(this.prefix,...i)}error(...i){console.error(this.prefix,...i)}}function n(){var i;if("undefined"==typeof window)return!1;const t=(null===(i=new URLSearchParams(window.location.search).get("utm_source"))||void 0===i?void 0:i.toLowerCase())||"",e=document.referrer.toLowerCase(),n=e.includes("chat.openai.com")||e.includes("chatgpt.com");return"chatgpt"===t||t.includes("chatgpt")||"chat.openai"===t||"openai"===t||n}class r{constructor(i){this.fingerprint=null,this.promise=null,this.logger=i}getFingerprint(){return t(this,void 0,void 0,function*(){return this.fingerprint?(this.logger.log("Using cached fingerprint:",this.fingerprint),this.fingerprint):this.promise?this.promise:"undefined"!=typeof window&&window.thredFingerprint?(this.fingerprint=window.thredFingerprint,this.logger.log("Using global fingerprint:",this.fingerprint),this.fingerprint):(this.promise=this.generateFingerprint(),this.promise)})}generateFingerprint(){return t(this,void 0,void 0,function*(){try{this.logger.log("Loading FingerprintJS...");const i=yield import("https://thredproxy.com/35ZCuyzokuT1YGd8/Hm7KPMHUZ4duyPRj?apiKey=iyqKVLQt2560EQUyjfxa"),t=yield i.load({endpoint:["https://thredproxy.com/35ZCuyzokuT1YGd8/qbWl4nqUSCIDTor4",i.defaultEndpoint]}),e=yield t.get();return this.fingerprint=e.visitorId,"undefined"!=typeof window&&(window.thredFingerprint=this.fingerprint),this.logger.log("Fingerprint generated:",this.fingerprint),this.fingerprint}catch(i){return this.logger.warn("Fingerprint generation failed:",i),null}})}getCachedFingerprint(){return this.fingerprint}clear(){this.fingerprint=null,this.promise=null,"undefined"!=typeof window&&delete window.thredFingerprint}}class o{constructor(i,t,e){this.baseUrl=i,this.browserKey=t,this.logger=e}fetchConfig(i){return t(this,void 0,void 0,function*(){try{const t=`${this.baseUrl}/config?fingerprint=${encodeURIComponent(i)}&browserKey=${encodeURIComponent(this.browserKey)}`;this.logger.log("Fetching config from:",t);const e=yield fetch(t,{method:"GET",headers:{Accept:"application/json"}});if(!e.ok)throw new Error(`Config request failed: ${e.status}`);const n=yield e.json();return this.logger.log("Config received:",n),n}catch(i){return this.logger.warn("Failed to fetch config:",i),null}})}trackPageView(i){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 e=yield fetch(t,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(i),keepalive:!0});if(!e.ok)throw new Error(`Page view request failed: ${e.status}`);this.logger.log("Page view tracked successfully")}catch(i){this.logger.warn("Failed to track page view:",i)}})}enrichLead(i){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 e=yield fetch(t,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(i),keepalive:!0});if(!e.ok)throw new Error(`Enrich request failed: ${e.status}`);this.logger.log("Lead enriched successfully")}catch(i){this.logger.warn("Failed to enrich lead:",i)}})}}class s{constructor(i,t,e){this.config=null,this.formObserver=null,this.api=i,this.fingerprint=t,this.logger=e}init(){return t(this,void 0,void 0,function*(){var i;const t=yield this.fingerprint.getFingerprint();t?(this.config=yield this.api.fetchConfig(t),(null===(i=this.config)||void 0===i?void 0:i.enabled)?this.config.hasChatSession?(n()?yield this.trackPageView():this.logger.log("UTM not from ChatGPT - skipping page view"),this.setupFormTracking()):this.logger.log("No chat session for this fingerprint - exiting"):this.logger.log("Tracking disabled by config")):this.logger.warn("Cannot initialize tracker without fingerprint")})}trackPageView(){return t(this,void 0,void 0,function*(){const i=yield this.fingerprint.getFingerprint();i?yield this.api.trackPageView({event:"page_view",data:{url:window.location.href},fingerprint:i}):this.logger.warn("Cannot track page view without fingerprint")})}trackFormSubmit(i){return t(this,void 0,void 0,function*(){var t,e,n;if(!this.config||!this.config.emailId||!this.config.nameId)return void this.logger.warn("Cannot track form - no config loaded");const r=null===(t=i.get(this.config.emailId))||void 0===t?void 0:t.toString().trim(),o=null===(e=i.get(this.config.nameId))||void 0===e?void 0:e.toString().trim();let s;this.config.companyId&&(s=null===(n=i.get(this.config.companyId))||void 0===n?void 0:n.toString().trim()),this.logger.log("Form data extracted:",{email:r,name:o,company:s}),r&&o?yield this.identify({name:o,email:r,company:s,discovery:!1}):this.logger.warn("Missing required fields (email, name)")})}identify(i){return t(this,void 0,void 0,function*(){const t=yield this.fingerprint.getFingerprint();t?yield this.api.enrichLead({fingerprint:t,leadData:i}):this.logger.warn("Cannot identify without fingerprint")})}setupFormTracking(){if(this.config&&"undefined"!=typeof document){if("hosted"===this.config.type){const i=this.config.hostedUrlBase;return i?(this.injectFingerprintIntoLinks(document.body,i),this.formObserver=new MutationObserver(t=>{for(const e of t)for(const t of Array.from(e.addedNodes))t instanceof HTMLElement&&("A"===t.tagName&&this.injectFingerprintIntoLink(t,i),this.injectFingerprintIntoLinks(t,i))}),this.formObserver.observe(document.body,{childList:!0,subtree:!0}),void document.addEventListener("click",t=>{const e=t.target.closest("a");if(!e)return;const n=e.getAttribute("href");n&&n.includes(i)&&(n.includes("utm_fp=")||this.injectFingerprintIntoLink(e,i))},{capture:!0})):void this.logger.warn("Cannot track form - no hosted URL base")}if("custom"===this.config.type){const i=()=>{if(!this.config||!this.config.formId)return void this.logger.warn("Cannot track form - no form ID");const i=document.getElementById(this.config.formId);if(!i)return void this.logger.log("Form not found:",this.config.formId);const t=i;t.dataset.thredTracked||(this.logger.log("Attaching listener to form:",this.config.formId),t.addEventListener("submit",()=>{const i=new FormData(t);this.trackFormSubmit(i)},{capture:!0}),t.dataset.thredTracked="true")};i(),this.formObserver=new MutationObserver(()=>{i()}),this.formObserver.observe(document.body,{childList:!0,subtree:!0})}}else this.logger.warn("Cannot track form - no config or document")}injectFingerprintIntoLinks(i,t){const e=i.querySelectorAll("a[href]");for(const i of Array.from(e))this.injectFingerprintIntoLink(i,t)}injectFingerprintIntoLink(i,t){const e=i.getAttribute("href");if(!e||!e.includes(t))return;if(e.includes("utm_fp="))return;const n=this.fingerprint.getCachedFingerprint();if(n)try{const t=new URL(e,window.location.origin);t.searchParams.set("utm_fp",n),i.setAttribute("href",t.toString()),this.logger.log("Injected utm_fp into link:",t.toString())}catch(i){this.logger.warn("Failed to parse URL:",e,i)}else this.logger.warn("Cannot inject utm_fp - no cached fingerprint")}destroy(){this.formObserver&&(this.formObserver.disconnect(),this.formObserver=null)}}class g{constructor(i){this.initialized=!1,this.options=Object.assign({baseUrl:"https://api.thred.dev/v1",debug:!1,autoInit:!0},i),this.logger=new e(this.options.debug),this.fingerprint=new r(this.logger),this.api=new o(this.options.baseUrl,this.options.browserKey,this.logger),this.tracker=new s(this.api,this.fingerprint,this.logger),this.options.autoInit&&this.init()}init(){return t(this,void 0,void 0,function*(){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"))})}isFromChatGPT(){return n()}trackPageView(){return t(this,void 0,void 0,function*(){yield this.tracker.trackPageView()})}trackFormSubmit(i){return t(this,void 0,void 0,function*(){yield this.tracker.trackFormSubmit(i)})}identify(i){return t(this,void 0,void 0,function*(){yield this.tracker.identify(i)})}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 i=function(){if("undefined"==typeof window||"undefined"==typeof document)return null;const i=document.getElementsByTagName("script");for(const t of Array.from(i))if(t.src.includes("thred"))try{return new URL(t.src).searchParams.get("browserKey")}catch(i){}return null}();if(i){const t=new g({browserKey:i});window.Thred=t}}i.ThredSDK=g,i.default=g,Object.defineProperty(i,"__esModule",{value:!0})});
2
2
  //# sourceMappingURL=thred.umd.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"thred.umd.js","sources":["../node_modules/tslib/tslib.es6.js","../src/utils/logger.ts","../src/core/fingerprint.ts","../src/core/api.ts","../src/core/tracker.ts","../src/index.ts","../src/utils/detector.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","import type { FingerprintResult } from '../types';\nimport { Logger } from '../utils/logger';\n\nconst FP_PROXY_URL =\n 'https://thredproxy.com/35ZCuyzokuT1YGd8/Hm7KPMHUZ4duyPRj?apiKey=iyqKVLQt2560EQUyjfxa';\nconst FP_PROXY_ENDPOINT =\n 'https://thredproxy.com/35ZCuyzokuT1YGd8/qbWl4nqUSCIDTor4';\n\nexport class FingerprintManager {\n private fingerprint: string | null = null;\n private logger: Logger;\n private promise: Promise<string | null> | null = null;\n\n constructor(logger: Logger) {\n this.logger = logger;\n }\n\n /**\n * Get or generate fingerprint\n */\n async getFingerprint(): Promise<string | null> {\n // Return cached fingerprint\n if (this.fingerprint) {\n this.logger.log('Using cached fingerprint:', this.fingerprint);\n return this.fingerprint;\n }\n\n // Return existing promise if already loading\n if (this.promise) {\n return this.promise;\n }\n\n // Check global window cache\n if (\n typeof window !== 'undefined' &&\n (window as any).thredFingerprint\n ) {\n this.fingerprint = (window as any).thredFingerprint;\n this.logger.log('Using global fingerprint:', this.fingerprint);\n return this.fingerprint;\n }\n\n // Generate new fingerprint\n this.promise = this.generateFingerprint();\n return this.promise;\n }\n\n private async generateFingerprint(): Promise<string | null> {\n try {\n this.logger.log('Loading FingerprintJS...');\n\n const FingerprintJS = await import(FP_PROXY_URL);\n const fp = await FingerprintJS.load({\n endpoint: [FP_PROXY_ENDPOINT, FingerprintJS.defaultEndpoint],\n });\n\n const result: FingerprintResult = await fp.get();\n this.fingerprint = result.visitorId;\n\n // Cache globally\n if (typeof window !== 'undefined') {\n (window as any).thredFingerprint = this.fingerprint;\n }\n\n this.logger.log('Fingerprint generated:', this.fingerprint);\n return this.fingerprint;\n } catch (error) {\n this.logger.warn('Fingerprint generation failed:', error);\n return null;\n }\n }\n\n /**\n * Get cached fingerprint (synchronous)\n */\n getCachedFingerprint(): string | null {\n return this.fingerprint;\n }\n\n /**\n * Clear fingerprint cache\n */\n clear() {\n this.fingerprint = null;\n this.promise = null;\n if (typeof window !== 'undefined') {\n delete (window as any).thredFingerprint;\n }\n }\n}\n","import type {\n ThredConfig,\n PageViewPayload,\n EnrichPayload,\n} from '../types';\nimport { Logger } from '../utils/logger';\n\nexport class ThredAPI {\n private baseUrl: string;\n private browserKey: string;\n private logger: Logger;\n\n constructor(baseUrl: string, browserKey: string, logger: Logger) {\n this.baseUrl = baseUrl;\n this.browserKey = browserKey;\n this.logger = logger;\n }\n\n /**\n * Fetch configuration from API\n */\n async fetchConfig(fingerprint: string): Promise<ThredConfig | null> {\n try {\n const url = `${this.baseUrl}/config?fingerprint=${encodeURIComponent(fingerprint)}&browserKey=${encodeURIComponent(this.browserKey)}`;\n this.logger.log('Fetching config from:', url);\n\n const response = await fetch(url, {\n method: 'GET',\n headers: {\n Accept: 'application/json',\n },\n });\n\n if (!response.ok) {\n throw new Error(`Config request failed: ${response.status}`);\n }\n\n const config = await response.json();\n this.logger.log('Config received:', config);\n\n return config;\n } catch (error) {\n this.logger.warn('Failed to fetch config:', error);\n return null;\n }\n }\n\n /**\n * Send page view event\n */\n async trackPageView(payload: PageViewPayload): Promise<void> {\n try {\n const url = `${this.baseUrl}/events/page-view?browserKey=${encodeURIComponent(this.browserKey)}`;\n this.logger.log('Tracking page view:', url);\n\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(payload),\n keepalive: true,\n });\n\n if (!response.ok) {\n throw new Error(`Page view request failed: ${response.status}`);\n }\n\n this.logger.log('Page view tracked successfully');\n } catch (error) {\n this.logger.warn('Failed to track page view:', error);\n }\n }\n\n /**\n * Send lead enrichment data\n */\n async enrichLead(payload: EnrichPayload): Promise<void> {\n try {\n const url = `${this.baseUrl}/customers/enrich?browserKey=${encodeURIComponent(this.browserKey)}`;\n this.logger.log('Enriching lead:', url);\n\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(payload),\n keepalive: true,\n });\n\n if (!response.ok) {\n throw new Error(`Enrich request failed: ${response.status}`);\n }\n\n this.logger.log('Lead enriched successfully');\n } catch (error) {\n this.logger.warn('Failed to enrich lead:', error);\n }\n }\n}\n","import type { ThredConfig, LeadData } from '../types';\nimport { Logger } from '../utils/logger';\nimport { ThredAPI } from './api';\nimport { FingerprintManager } from './fingerprint';\n\nexport class Tracker {\n private api: ThredAPI;\n private fingerprint: FingerprintManager;\n private logger: Logger;\n private config: ThredConfig | null = null;\n private formObserver: MutationObserver | null = null;\n\n constructor(\n api: ThredAPI,\n fingerprint: FingerprintManager,\n logger: Logger\n ) {\n this.api = api;\n this.fingerprint = fingerprint;\n this.logger = logger;\n }\n\n /**\n * Initialize tracker with config\n */\n async init(): Promise<void> {\n // Get fingerprint\n const fingerprint = await this.fingerprint.getFingerprint();\n if (!fingerprint) {\n this.logger.warn('Cannot initialize tracker without fingerprint');\n return;\n }\n this.config = await this.api.fetchConfig(fingerprint);\n\n if (!this.config?.enabled) {\n this.logger.log('Tracking disabled by config');\n return;\n }\n\n if (!this.config.fromChat) {\n this.logger.log('Not from ChatGPT - exiting');\n return;\n }\n\n // Track page view\n await this.trackPageView();\n\n // Setup form tracking\n this.setupFormTracking();\n }\n\n /**\n * Track page view event\n */\n async trackPageView(): Promise<void> {\n const fp = await this.fingerprint.getFingerprint();\n\n if (!fp) {\n this.logger.warn('Cannot track page view without fingerprint');\n return;\n }\n\n await this.api.trackPageView({\n event: 'page_view',\n data: {\n url: window.location.href,\n },\n fingerprint: fp,\n });\n }\n\n /**\n * Track form submission and enrich lead\n */\n async trackFormSubmit(formData: FormData): Promise<void> {\n if (!this.config || !this.config.emailId || !this.config.nameId) {\n this.logger.warn('Cannot track form - no config loaded');\n return;\n }\n\n const email = formData.get(this.config.emailId)?.toString().trim();\n const name = formData.get(this.config.nameId)?.toString().trim();\n\n let company: string | undefined = undefined;\n if (this.config.companyId) {\n company = formData.get(this.config.companyId)?.toString().trim();\n }\n\n this.logger.log('Form data extracted:', { email, name, company });\n\n if (!email || !name) {\n this.logger.warn('Missing required fields (email, name)');\n return;\n }\n\n await this.identify({\n name,\n email,\n company: company,\n discovery: false,\n });\n }\n\n /**\n * Identify user and enrich lead data\n */\n async identify(leadData: LeadData): Promise<void> {\n const fp = await this.fingerprint.getFingerprint();\n\n if (!fp) {\n this.logger.warn('Cannot identify without fingerprint');\n return;\n }\n\n await this.api.enrichLead({\n fingerprint: fp,\n leadData,\n });\n }\n\n /**\n * 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 // Attach UTM parameter to links containing hostedUrlBase\n document.addEventListener('click', async (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 // Get fingerprint\n const fp = await this.fingerprint.getFingerprint();\n if (!fp) {\n this.logger.warn('Cannot add UTM parameter - no fingerprint');\n return;\n }\n\n // Parse URL and add utm_fp parameter\n try {\n const url = new URL(href, window.location.origin);\n url.searchParams.set('utm_fp', fp);\n \n // Update the href with the new URL\n target.setAttribute('href', url.toString());\n \n this.logger.log('Added utm_fp to link:', url.toString());\n } catch (err) {\n this.logger.warn('Failed to parse URL:', href, err);\n }\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 * 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, 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,\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 (this.initialized) {\n this.logger.warn('SDK already initialized');\n return;\n }\n\n this.logger.log('Initializing Thred SDK...');\n\n // Generate fingerprint\n await this.fingerprint.getFingerprint();\n\n // Initialize tracker\n await this.tracker.init();\n\n this.initialized = true;\n this.logger.log('SDK initialized successfully');\n }\n\n /**\n * Check if visitor is from ChatGPT\n */\n isFromChatGPT(): boolean {\n return isFromChatGPT();\n }\n\n /**\n * Track page view\n */\n async trackPageView(): Promise<void> {\n await this.tracker.trackPageView();\n }\n\n /**\n * Track form submission\n */\n async trackFormSubmit(formData: FormData): Promise<void> {\n await this.tracker.trackFormSubmit(formData);\n }\n\n /**\n * Identify user with lead data\n */\n async identify(leadData: LeadData): Promise<void> {\n await this.tracker.identify(leadData);\n }\n\n /**\n * Get current fingerprint\n */\n getFingerprint(): string | null {\n return this.fingerprint.getCachedFingerprint();\n }\n\n /**\n * Destroy SDK instance and cleanup\n */\n destroy(): void {\n this.tracker.destroy();\n this.fingerprint.clear();\n this.initialized = false;\n this.logger.log('SDK destroyed');\n }\n}\n\n/**\n * Auto-initialize if loaded as script tag with browserKey\n */\nif (typeof window !== 'undefined') {\n const browserKey = getBrowserKeyFromScript();\n if (browserKey) {\n const sdk = new ThredSDK({ browserKey });\n (window as any).Thred = sdk;\n }\n}\n\nexport default ThredSDK;\n","/**\n * Detects if the visitor came from ChatGPT\n */\nexport function isFromChatGPT(): boolean {\n if (typeof window === 'undefined') return false;\n\n const params = new URLSearchParams(window.location.search);\n const utmSource = params.get('utm_source')?.toLowerCase() || '';\n const referrer = document.referrer.toLowerCase();\n\n const isChatGPTRef =\n referrer.includes('chat.openai.com') || referrer.includes('chatgpt.com');\n const isChatGPTUtm =\n utmSource === 'chatgpt' ||\n utmSource.includes('chatgpt') ||\n utmSource === 'chat.openai' ||\n utmSource === 'openai';\n\n return isChatGPTUtm || isChatGPTRef;\n}\n\n/**\n * Gets the browser key from script tag if present\n */\nexport function getBrowserKeyFromScript(): string | null {\n if (typeof window === 'undefined' || typeof document === 'undefined') {\n return null;\n }\n\n const scripts = document.getElementsByTagName('script');\n\n for (const script of Array.from(scripts)) {\n if (script.src.includes('thred')) {\n try {\n const url = new URL(script.src);\n return url.searchParams.get('browserKey');\n } catch {\n // Invalid URL\n }\n }\n }\n\n return null;\n}\n"],"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","FingerprintManager","logger","fingerprint","promise","getFingerprint","window","thredFingerprint","generateFingerprint","FingerprintJS","import","fp","load","endpoint","defaultEndpoint","get","visitorId","getCachedFingerprint","clear","ThredAPI","baseUrl","browserKey","fetchConfig","url","encodeURIComponent","response","fetch","method","headers","Accept","ok","Error","status","config","json","trackPageView","payload","body","JSON","stringify","keepalive","enrichLead","Tracker","api","formObserver","init","_a","enabled","fromChat","setupFormTracking","event","data","location","href","trackFormSubmit","formData","emailId","nameId","email","toString","trim","name","_b","company","companyId","_c","identify","discovery","leadData","document","type","hostedUrlBase","addEventListener","target","closest","getAttribute","includes","URL","origin","searchParams","set","setAttribute","err","capture","attachFormListener","formId","form","getElementById","formElement","dataset","thredTracked","FormData","MutationObserver","observe","childList","subtree","destroy","disconnect","ThredSDK","options","initialized","Object","assign","autoInit","tracker","isFromChatGPT","utmSource","URLSearchParams","search","toLowerCase","referrer","isChatGPTRef","scripts","getElementsByTagName","script","Array","from","src","getBrowserKeyFromScript","sdk","Thred"],"mappings":"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","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"thred.umd.js","sources":["../node_modules/tslib/tslib.es6.js","../src/utils/logger.ts","../src/utils/detector.ts","../src/core/fingerprint.ts","../src/core/api.ts","../src/core/tracker.ts","../src/index.ts"],"sourcesContent":["/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n","/**\n * Simple logger utility\n */\nexport class Logger {\n private debug: boolean;\n private prefix: string;\n\n constructor(debug = false, prefix = '[Thred]') {\n this.debug = debug;\n this.prefix = prefix;\n }\n\n log(...args: unknown[]) {\n if (this.debug) {\n console.log(this.prefix, ...args);\n }\n }\n\n warn(...args: unknown[]) {\n if (this.debug) {\n console.warn(this.prefix, ...args);\n }\n }\n\n error(...args: unknown[]) {\n console.error(this.prefix, ...args);\n }\n}\n","/**\n * Detects if the visitor came from ChatGPT\n */\nexport function isFromChatGPT(): boolean {\n if (typeof window === 'undefined') return false;\n\n const params = new URLSearchParams(window.location.search);\n const utmSource = params.get('utm_source')?.toLowerCase() || '';\n const referrer = document.referrer.toLowerCase();\n\n const isChatGPTRef =\n referrer.includes('chat.openai.com') || referrer.includes('chatgpt.com');\n const isChatGPTUtm =\n utmSource === 'chatgpt' ||\n utmSource.includes('chatgpt') ||\n utmSource === 'chat.openai' ||\n utmSource === 'openai';\n\n return isChatGPTUtm || isChatGPTRef;\n}\n\n/**\n * Gets the browser key from script tag if present\n */\nexport function getBrowserKeyFromScript(): string | null {\n if (typeof window === 'undefined' || typeof document === 'undefined') {\n return null;\n }\n\n const scripts = document.getElementsByTagName('script');\n\n for (const script of Array.from(scripts)) {\n if (script.src.includes('thred')) {\n try {\n const url = new URL(script.src);\n return url.searchParams.get('browserKey');\n } catch {\n // Invalid URL\n }\n }\n }\n\n return null;\n}\n","import type { FingerprintResult } from '../types';\nimport { Logger } from '../utils/logger';\n\nconst FP_PROXY_URL =\n 'https://thredproxy.com/35ZCuyzokuT1YGd8/Hm7KPMHUZ4duyPRj?apiKey=iyqKVLQt2560EQUyjfxa';\nconst FP_PROXY_ENDPOINT =\n 'https://thredproxy.com/35ZCuyzokuT1YGd8/qbWl4nqUSCIDTor4';\n\nexport class FingerprintManager {\n private fingerprint: string | null = null;\n private logger: Logger;\n private promise: Promise<string | null> | null = null;\n\n constructor(logger: Logger) {\n this.logger = logger;\n }\n\n /**\n * Get or generate fingerprint\n */\n async getFingerprint(): Promise<string | null> {\n // Return cached fingerprint\n if (this.fingerprint) {\n this.logger.log('Using cached fingerprint:', this.fingerprint);\n return this.fingerprint;\n }\n\n // Return existing promise if already loading\n if (this.promise) {\n return this.promise;\n }\n\n // Check global window cache\n if (\n typeof window !== 'undefined' &&\n (window as any).thredFingerprint\n ) {\n this.fingerprint = (window as any).thredFingerprint;\n this.logger.log('Using global fingerprint:', this.fingerprint);\n return this.fingerprint;\n }\n\n // Generate new fingerprint\n this.promise = this.generateFingerprint();\n return this.promise;\n }\n\n private async generateFingerprint(): Promise<string | null> {\n try {\n this.logger.log('Loading FingerprintJS...');\n\n const FingerprintJS = await import(FP_PROXY_URL);\n const fp = await FingerprintJS.load({\n endpoint: [FP_PROXY_ENDPOINT, FingerprintJS.defaultEndpoint],\n });\n\n const result: FingerprintResult = await fp.get();\n this.fingerprint = result.visitorId;\n\n // Cache globally\n if (typeof window !== 'undefined') {\n (window as any).thredFingerprint = this.fingerprint;\n }\n\n this.logger.log('Fingerprint generated:', this.fingerprint);\n return this.fingerprint;\n } catch (error) {\n this.logger.warn('Fingerprint generation failed:', error);\n return null;\n }\n }\n\n /**\n * Get cached fingerprint (synchronous)\n */\n getCachedFingerprint(): string | null {\n return this.fingerprint;\n }\n\n /**\n * Clear fingerprint cache\n */\n clear() {\n this.fingerprint = null;\n this.promise = null;\n if (typeof window !== 'undefined') {\n delete (window as any).thredFingerprint;\n }\n }\n}\n","import type {\n ThredConfig,\n PageViewPayload,\n EnrichPayload,\n} from '../types';\nimport { Logger } from '../utils/logger';\n\nexport class ThredAPI {\n private baseUrl: string;\n private browserKey: string;\n private logger: Logger;\n\n constructor(baseUrl: string, browserKey: string, logger: Logger) {\n this.baseUrl = baseUrl;\n this.browserKey = browserKey;\n this.logger = logger;\n }\n\n /**\n * Fetch configuration from API\n */\n async fetchConfig(fingerprint: string): Promise<ThredConfig | null> {\n try {\n const url = `${this.baseUrl}/config?fingerprint=${encodeURIComponent(fingerprint)}&browserKey=${encodeURIComponent(this.browserKey)}`;\n this.logger.log('Fetching config from:', url);\n\n const response = await fetch(url, {\n method: 'GET',\n headers: {\n Accept: 'application/json',\n },\n });\n\n if (!response.ok) {\n throw new Error(`Config request failed: ${response.status}`);\n }\n\n const config = await response.json();\n this.logger.log('Config received:', config);\n\n return config;\n } catch (error) {\n this.logger.warn('Failed to fetch config:', error);\n return null;\n }\n }\n\n /**\n * Send page view event\n */\n async trackPageView(payload: PageViewPayload): Promise<void> {\n try {\n const url = `${this.baseUrl}/events/page-view?browserKey=${encodeURIComponent(this.browserKey)}`;\n this.logger.log('Tracking page view:', url);\n\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(payload),\n keepalive: true,\n });\n\n if (!response.ok) {\n throw new Error(`Page view request failed: ${response.status}`);\n }\n\n this.logger.log('Page view tracked successfully');\n } catch (error) {\n this.logger.warn('Failed to track page view:', error);\n }\n }\n\n /**\n * Send lead enrichment data\n */\n async enrichLead(payload: EnrichPayload): Promise<void> {\n try {\n const url = `${this.baseUrl}/customers/enrich?browserKey=${encodeURIComponent(this.browserKey)}`;\n this.logger.log('Enriching lead:', url);\n\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(payload),\n keepalive: true,\n });\n\n if (!response.ok) {\n throw new Error(`Enrich request failed: ${response.status}`);\n }\n\n this.logger.log('Lead enriched successfully');\n } catch (error) {\n this.logger.warn('Failed to enrich lead:', error);\n }\n }\n}\n","import type { ThredConfig, LeadData } from '../types';\nimport { Logger } from '../utils/logger';\nimport { isFromChatGPT } from '../utils/detector';\nimport { ThredAPI } from './api';\nimport { FingerprintManager } from './fingerprint';\n\nexport class Tracker {\n private api: ThredAPI;\n private fingerprint: FingerprintManager;\n private logger: Logger;\n private config: ThredConfig | null = null;\n private formObserver: MutationObserver | null = null;\n\n constructor(\n api: ThredAPI,\n fingerprint: FingerprintManager,\n logger: Logger\n ) {\n this.api = api;\n this.fingerprint = fingerprint;\n this.logger = logger;\n }\n\n /**\n * Initialize tracker with config\n */\n async init(): Promise<void> {\n // Get fingerprint\n const fingerprint = await this.fingerprint.getFingerprint();\n if (!fingerprint) {\n this.logger.warn('Cannot initialize tracker without fingerprint');\n return;\n }\n this.config = await this.api.fetchConfig(fingerprint);\n\n if (!this.config?.enabled) {\n this.logger.log('Tracking disabled by config');\n return;\n }\n\n if (!this.config.hasChatSession) {\n this.logger.log('No chat session for this fingerprint - exiting');\n return;\n }\n\n // Only track page view if UTM is from ChatGPT\n if (isFromChatGPT()) {\n await this.trackPageView();\n } else {\n this.logger.log('UTM not from ChatGPT - skipping page view');\n }\n\n // Setup form tracking\n this.setupFormTracking();\n }\n\n /**\n * Track page view event\n */\n async trackPageView(): Promise<void> {\n const fp = await this.fingerprint.getFingerprint();\n\n if (!fp) {\n this.logger.warn('Cannot track page view without fingerprint');\n return;\n }\n\n await this.api.trackPageView({\n event: 'page_view',\n data: {\n url: window.location.href,\n },\n fingerprint: fp,\n });\n }\n\n /**\n * Track form submission and enrich lead\n */\n async trackFormSubmit(formData: FormData): Promise<void> {\n if (!this.config || !this.config.emailId || !this.config.nameId) {\n this.logger.warn('Cannot track form - no config loaded');\n return;\n }\n\n const email = formData.get(this.config.emailId)?.toString().trim();\n const name = formData.get(this.config.nameId)?.toString().trim();\n\n let company: string | undefined = undefined;\n if (this.config.companyId) {\n company = formData.get(this.config.companyId)?.toString().trim();\n }\n\n this.logger.log('Form data extracted:', { email, name, company });\n\n if (!email || !name) {\n this.logger.warn('Missing required fields (email, name)');\n return;\n }\n\n await this.identify({\n name,\n email,\n company: company,\n discovery: false,\n });\n }\n\n /**\n * Identify user and enrich lead data\n */\n async identify(leadData: LeadData): Promise<void> {\n const fp = await this.fingerprint.getFingerprint();\n\n if (!fp) {\n this.logger.warn('Cannot identify without fingerprint');\n return;\n }\n\n await this.api.enrichLead({\n fingerprint: fp,\n leadData,\n });\n }\n\n /**\n * 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, 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,\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 (this.initialized) {\n this.logger.warn('SDK already initialized');\n return;\n }\n\n this.logger.log('Initializing Thred SDK...');\n\n // Generate fingerprint\n await this.fingerprint.getFingerprint();\n\n // Initialize tracker\n await this.tracker.init();\n\n this.initialized = true;\n this.logger.log('SDK initialized successfully');\n }\n\n /**\n * Check if visitor is from ChatGPT\n */\n isFromChatGPT(): boolean {\n return isFromChatGPT();\n }\n\n /**\n * Track page view\n */\n async trackPageView(): Promise<void> {\n await this.tracker.trackPageView();\n }\n\n /**\n * Track form submission\n */\n async trackFormSubmit(formData: FormData): Promise<void> {\n await this.tracker.trackFormSubmit(formData);\n }\n\n /**\n * Identify user with lead data\n */\n async identify(leadData: LeadData): Promise<void> {\n await this.tracker.identify(leadData);\n }\n\n /**\n * Get current fingerprint\n */\n getFingerprint(): string | null {\n return this.fingerprint.getCachedFingerprint();\n }\n\n /**\n * Destroy SDK instance and cleanup\n */\n destroy(): void {\n this.tracker.destroy();\n this.fingerprint.clear();\n this.initialized = false;\n this.logger.log('SDK destroyed');\n }\n}\n\n/**\n * Auto-initialize if loaded as script tag with browserKey\n */\nif (typeof window !== 'undefined') {\n const browserKey = getBrowserKeyFromScript();\n if (browserKey) {\n const sdk = new ThredSDK({ browserKey });\n (window as any).Thred = sdk;\n }\n}\n\nexport default ThredSDK;\n"],"names":["__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","apply","SuppressedError","Logger","constructor","debug","prefix","this","log","args","console","warn","error","isFromChatGPT","window","utmSource","_a","URLSearchParams","location","search","get","toLowerCase","referrer","document","isChatGPTRef","includes","FingerprintManager","logger","fingerprint","promise","getFingerprint","thredFingerprint","generateFingerprint","FingerprintJS","import","fp","load","endpoint","defaultEndpoint","visitorId","getCachedFingerprint","clear","ThredAPI","baseUrl","browserKey","fetchConfig","url","encodeURIComponent","response","fetch","method","headers","Accept","ok","Error","status","config","json","trackPageView","payload","body","JSON","stringify","keepalive","enrichLead","Tracker","api","formObserver","init","enabled","hasChatSession","setupFormTracking","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","Object","assign","autoInit","tracker","scripts","getElementsByTagName","script","src","getBrowserKeyFromScript","sdk","Thred"],"mappings":"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","x_google_ignoreList":[0]}
@@ -3,7 +3,7 @@
3
3
  */
4
4
  export interface ThredConfig {
5
5
  enabled: boolean;
6
- fromChat: boolean;
6
+ hasChatSession: boolean;
7
7
  type: "hosted" | "custom";
8
8
  hostedUrlBase?: string;
9
9
  formId?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,WAAW,CAAC;IACnB,IAAI,EAAE;QACJ,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;IACF,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,QAAQ,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,eAAe,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnD,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C,cAAc,IAAI,MAAM,GAAG,IAAI,CAAC;IAChC,aAAa,IAAI,OAAO,CAAC;IACzB,OAAO,IAAI,IAAI,CAAC;CACjB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,EAAE,OAAO,CAAC;IACxB,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,WAAW,CAAC;IACnB,IAAI,EAAE;QACJ,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;IACF,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,QAAQ,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,eAAe,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnD,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C,cAAc,IAAI,MAAM,GAAG,IAAI,CAAC;IAChC,aAAa,IAAI,OAAO,CAAC;IACzB,OAAO,IAAI,IAAI,CAAC;CACjB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@thred-apps/thred-track",
3
- "version": "1.1.0",
3
+ "version": "1.1.2",
4
4
  "description": "Browser SDK for lead tracking and enrichment from ChatGPT referrals",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",