posthog-js 1.76.0 → 1.77.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (129) hide show
  1. package/dist/array.full.js +2 -2
  2. package/dist/array.full.js.map +1 -1
  3. package/dist/array.js +2 -2
  4. package/dist/array.js.map +1 -1
  5. package/dist/es.js +2 -2
  6. package/dist/es.js.map +1 -1
  7. package/dist/module.d.ts +38 -6
  8. package/dist/module.js +2 -2
  9. package/dist/module.js.map +1 -1
  10. package/lib/package.json +8 -6
  11. package/lib/src/autocapture-utils.d.ts +15 -0
  12. package/lib/src/autocapture-utils.js +303 -0
  13. package/lib/src/autocapture-utils.js.map +1 -0
  14. package/lib/src/autocapture.d.ts +27 -0
  15. package/lib/src/autocapture.js +290 -0
  16. package/lib/src/autocapture.js.map +1 -0
  17. package/lib/src/base-request-queue.d.ts +12 -0
  18. package/lib/src/base-request-queue.js +33 -0
  19. package/lib/src/base-request-queue.js.map +1 -0
  20. package/lib/src/compression.d.ts +3 -0
  21. package/lib/src/compression.js +35 -0
  22. package/lib/src/compression.js.map +1 -0
  23. package/lib/src/config.d.ts +5 -0
  24. package/lib/src/config.js +9 -0
  25. package/lib/src/config.js.map +1 -0
  26. package/lib/src/constants.d.ts +19 -0
  27. package/lib/src/constants.js +41 -0
  28. package/lib/src/constants.js.map +1 -0
  29. package/lib/src/decide.d.ts +8 -0
  30. package/lib/src/decide.js +118 -0
  31. package/lib/src/decide.js.map +1 -0
  32. package/lib/src/extensions/cloud.d.ts +1 -0
  33. package/lib/src/extensions/cloud.js +2 -0
  34. package/lib/src/extensions/cloud.js.map +1 -0
  35. package/lib/src/extensions/exceptions/error-conversion.d.ts +26 -0
  36. package/lib/src/extensions/exceptions/error-conversion.js +204 -0
  37. package/lib/src/extensions/exceptions/error-conversion.js.map +1 -0
  38. package/lib/src/extensions/exceptions/exception-autocapture.d.ts +24 -0
  39. package/lib/src/extensions/exceptions/exception-autocapture.js +164 -0
  40. package/lib/src/extensions/exceptions/exception-autocapture.js.map +1 -0
  41. package/lib/src/extensions/exceptions/stack-trace.d.ts +31 -0
  42. package/lib/src/extensions/exceptions/stack-trace.js +259 -0
  43. package/lib/src/extensions/exceptions/stack-trace.js.map +1 -0
  44. package/lib/src/extensions/exceptions/type-checking.d.ts +10 -0
  45. package/lib/src/extensions/exceptions/type-checking.js +43 -0
  46. package/lib/src/extensions/exceptions/type-checking.js.map +1 -0
  47. package/lib/src/extensions/rageclick.d.ts +10 -0
  48. package/lib/src/extensions/rageclick.js +33 -0
  49. package/lib/src/extensions/rageclick.js.map +1 -0
  50. package/lib/src/extensions/segment-integration.d.ts +44 -0
  51. package/lib/src/extensions/segment-integration.js +34 -0
  52. package/lib/src/extensions/segment-integration.js.map +1 -0
  53. package/lib/src/extensions/sentry-integration.d.ts +30 -0
  54. package/lib/src/extensions/sentry-integration.js +63 -0
  55. package/lib/src/extensions/sentry-integration.js.map +1 -0
  56. package/lib/src/extensions/sessionrecording-utils.d.ts +67 -0
  57. package/lib/src/extensions/sessionrecording-utils.js +192 -0
  58. package/lib/src/extensions/sessionrecording-utils.js.map +1 -0
  59. package/lib/src/extensions/sessionrecording.d.ts +45 -0
  60. package/lib/src/extensions/sessionrecording.js +430 -0
  61. package/lib/src/extensions/sessionrecording.js.map +1 -0
  62. package/lib/src/extensions/toolbar.d.ts +18 -0
  63. package/lib/src/extensions/toolbar.js +151 -0
  64. package/lib/src/extensions/toolbar.js.map +1 -0
  65. package/lib/src/extensions/web-performance.d.ts +20 -0
  66. package/lib/src/extensions/web-performance.js +245 -0
  67. package/lib/src/extensions/web-performance.js.map +1 -0
  68. package/lib/src/gdpr-utils.d.ts +80 -0
  69. package/lib/src/gdpr-utils.js +236 -0
  70. package/lib/src/gdpr-utils.js.map +1 -0
  71. package/lib/src/loader-globals-full.d.ts +1 -0
  72. package/lib/src/loader-globals-full.js +5 -0
  73. package/lib/src/loader-globals-full.js.map +1 -0
  74. package/lib/src/loader-globals.d.ts +1 -0
  75. package/lib/src/loader-globals.js +3 -0
  76. package/lib/src/loader-globals.js.map +1 -0
  77. package/lib/src/loader-module.d.ts +4 -0
  78. package/lib/src/loader-module.js +6 -0
  79. package/lib/src/loader-module.js.map +1 -0
  80. package/lib/src/loader-recorder-v2.d.ts +2 -0
  81. package/lib/src/loader-recorder-v2.js +15 -0
  82. package/lib/src/loader-recorder-v2.js.map +1 -0
  83. package/lib/src/loader-recorder.d.ts +2 -0
  84. package/lib/src/loader-recorder.js +15 -0
  85. package/lib/src/loader-recorder.js.map +1 -0
  86. package/lib/src/page-view.d.ts +38 -0
  87. package/lib/src/page-view.js +127 -0
  88. package/lib/src/page-view.js.map +1 -0
  89. package/lib/src/posthog-core.d.ts +701 -0
  90. package/lib/src/posthog-core.js +1916 -0
  91. package/lib/src/posthog-core.js.map +1 -0
  92. package/lib/src/posthog-featureflags.d.ts +70 -0
  93. package/lib/src/posthog-featureflags.js +438 -0
  94. package/lib/src/posthog-featureflags.js.map +1 -0
  95. package/lib/src/posthog-persistence.d.ts +57 -0
  96. package/lib/src/posthog-persistence.js +256 -0
  97. package/lib/src/posthog-persistence.js.map +1 -0
  98. package/lib/src/posthog-surveys.d.ts +57 -0
  99. package/lib/src/posthog-surveys.js +76 -0
  100. package/lib/src/posthog-surveys.js.map +1 -0
  101. package/lib/src/rate-limiter.d.ts +5 -0
  102. package/lib/src/rate-limiter.js +66 -0
  103. package/lib/src/rate-limiter.js.map +1 -0
  104. package/lib/src/request-queue.d.ts +10 -0
  105. package/lib/src/request-queue.js +146 -0
  106. package/lib/src/request-queue.js.map +1 -0
  107. package/lib/src/retry-queue.d.ts +28 -0
  108. package/lib/src/retry-queue.js +198 -0
  109. package/lib/src/retry-queue.js.map +1 -0
  110. package/lib/src/send-request.d.ts +6 -0
  111. package/lib/src/send-request.js +125 -0
  112. package/lib/src/send-request.js.map +1 -0
  113. package/lib/src/sessionid.d.ts +28 -0
  114. package/lib/src/sessionid.js +205 -0
  115. package/lib/src/sessionid.js.map +1 -0
  116. package/lib/src/storage.d.ts +7 -0
  117. package/lib/src/storage.js +291 -0
  118. package/lib/src/storage.js.map +1 -0
  119. package/lib/src/types.d.ts +294 -0
  120. package/lib/src/types.js +6 -0
  121. package/lib/src/types.js.map +1 -0
  122. package/lib/src/utils.d.ts +89 -0
  123. package/lib/src/utils.js +868 -0
  124. package/lib/src/utils.js.map +1 -0
  125. package/lib/src/uuidv7.d.ts +42 -0
  126. package/lib/src/uuidv7.js +228 -0
  127. package/lib/src/uuidv7.js.map +1 -0
  128. package/package.json +8 -6
  129. package/CHANGELOG.md +0 -1145
@@ -0,0 +1,868 @@
1
+ var __read = (this && this.__read) || function (o, n) {
2
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
3
+ if (!m) return o;
4
+ var i = m.call(o), r, ar = [], e;
5
+ try {
6
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
7
+ }
8
+ catch (error) { e = { error: error }; }
9
+ finally {
10
+ try {
11
+ if (r && !r.done && (m = i["return"])) m.call(i);
12
+ }
13
+ finally { if (e) throw e.error; }
14
+ }
15
+ return ar;
16
+ };
17
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
18
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
19
+ if (ar || !(i in from)) {
20
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
21
+ ar[i] = from[i];
22
+ }
23
+ }
24
+ return to.concat(ar || Array.prototype.slice.call(from));
25
+ };
26
+ import Config from './config';
27
+ /*
28
+ * Saved references to long variable names, so that closure compiler can
29
+ * minimize file size.
30
+ */
31
+ var ArrayProto = Array.prototype;
32
+ var ObjProto = Object.prototype;
33
+ var toString = ObjProto.toString;
34
+ var hasOwnProperty = ObjProto.hasOwnProperty;
35
+ var win = typeof window !== 'undefined' ? window : {};
36
+ var navigator = win.navigator || { userAgent: '' };
37
+ var document = win.document || {};
38
+ var userAgent = navigator.userAgent;
39
+ var localDomains = ['localhost', '127.0.0.1'];
40
+ var nativeForEach = ArrayProto.forEach, nativeIndexOf = ArrayProto.indexOf, nativeIsArray = Array.isArray, breaker = {};
41
+ // Console override
42
+ var logger = {
43
+ /** @type {function(...*)} */
44
+ log: function () {
45
+ var args = [];
46
+ for (var _i = 0; _i < arguments.length; _i++) {
47
+ args[_i] = arguments[_i];
48
+ }
49
+ if (Config.DEBUG && !_isUndefined(window.console) && window.console) {
50
+ // Don't log PostHog debug messages in rrweb
51
+ var log_1 = '__rrweb_original__' in window.console.log
52
+ ? window.console.log['__rrweb_original__']
53
+ : window.console.log;
54
+ try {
55
+ log_1.apply(window.console, args);
56
+ }
57
+ catch (err) {
58
+ _eachArray(args, function (arg) {
59
+ log_1(arg);
60
+ });
61
+ }
62
+ }
63
+ },
64
+ /** @type {function(...*)} */
65
+ error: function () {
66
+ var _args = [];
67
+ for (var _i = 0; _i < arguments.length; _i++) {
68
+ _args[_i] = arguments[_i];
69
+ }
70
+ if (Config.DEBUG && !_isUndefined(window.console) && window.console) {
71
+ var args = __spreadArray(['PostHog error:'], __read(_args), false);
72
+ // Don't log PostHog debug messages in rrweb
73
+ var error_1 = '__rrweb_original__' in window.console.error
74
+ ? window.console.error['__rrweb_original__']
75
+ : window.console.error;
76
+ try {
77
+ error_1.apply(window.console, args);
78
+ }
79
+ catch (err) {
80
+ _eachArray(args, function (arg) {
81
+ error_1(arg);
82
+ });
83
+ }
84
+ }
85
+ },
86
+ /** @type {function(...*)} */
87
+ critical: function () {
88
+ var _args = [];
89
+ for (var _i = 0; _i < arguments.length; _i++) {
90
+ _args[_i] = arguments[_i];
91
+ }
92
+ if (!_isUndefined(window.console) && window.console) {
93
+ var args = __spreadArray(['PostHog error:'], __read(_args), false);
94
+ // Don't log PostHog debug messages in rrweb
95
+ var error_2 = '__rrweb_original__' in window.console.error
96
+ ? window.console.error['__rrweb_original__']
97
+ : window.console.error;
98
+ try {
99
+ error_2.apply(window.console, args);
100
+ }
101
+ catch (err) {
102
+ _eachArray(args, function (arg) {
103
+ error_2(arg);
104
+ });
105
+ }
106
+ }
107
+ },
108
+ };
109
+ // UNDERSCORE
110
+ // Embed part of the Underscore Library
111
+ export var _trim = function (str) {
112
+ return str.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '');
113
+ };
114
+ export var _bind_instance_methods = function (obj) {
115
+ for (var func in obj) {
116
+ if (typeof obj[func] === 'function') {
117
+ obj[func] = obj[func].bind(obj);
118
+ }
119
+ }
120
+ };
121
+ export function _eachArray(obj, iterator, thisArg) {
122
+ if (Array.isArray(obj)) {
123
+ if (nativeForEach && obj.forEach === nativeForEach) {
124
+ obj.forEach(iterator, thisArg);
125
+ }
126
+ else if ('length' in obj && obj.length === +obj.length) {
127
+ for (var i = 0, l = obj.length; i < l; i++) {
128
+ if (i in obj && iterator.call(thisArg, obj[i], i) === breaker) {
129
+ return;
130
+ }
131
+ }
132
+ }
133
+ }
134
+ }
135
+ /**
136
+ * @param {*=} obj
137
+ * @param {function(...*)=} iterator
138
+ * @param {Object=} thisArg
139
+ */
140
+ export function _each(obj, iterator, thisArg) {
141
+ if (obj === null || obj === undefined) {
142
+ return;
143
+ }
144
+ if (Array.isArray(obj)) {
145
+ return _eachArray(obj, iterator, thisArg);
146
+ }
147
+ for (var key in obj) {
148
+ if (hasOwnProperty.call(obj, key)) {
149
+ if (iterator.call(thisArg, obj[key], key) === breaker) {
150
+ return;
151
+ }
152
+ }
153
+ }
154
+ }
155
+ export var _extend = function (obj) {
156
+ var args = [];
157
+ for (var _i = 1; _i < arguments.length; _i++) {
158
+ args[_i - 1] = arguments[_i];
159
+ }
160
+ _eachArray(args, function (source) {
161
+ for (var prop in source) {
162
+ if (source[prop] !== void 0) {
163
+ obj[prop] = source[prop];
164
+ }
165
+ }
166
+ });
167
+ return obj;
168
+ };
169
+ export var _isArray = nativeIsArray ||
170
+ function (obj) {
171
+ return toString.call(obj) === '[object Array]';
172
+ };
173
+ // from a comment on http://dbj.org/dbj/?p=286
174
+ // fails on only one very rare and deliberate custom object:
175
+ // let bomb = { toString : undefined, valueOf: function(o) { return "function BOMBA!"; }};
176
+ export var _isFunction = function (f) {
177
+ try {
178
+ return /^\s*\bfunction\b/.test(f);
179
+ }
180
+ catch (x) {
181
+ return false;
182
+ }
183
+ };
184
+ export var _include = function (obj, target) {
185
+ var found = false;
186
+ if (obj === null) {
187
+ return found;
188
+ }
189
+ if (nativeIndexOf && obj.indexOf === nativeIndexOf) {
190
+ return obj.indexOf(target) != -1;
191
+ }
192
+ _each(obj, function (value) {
193
+ if (found || (found = value === target)) {
194
+ return breaker;
195
+ }
196
+ return;
197
+ });
198
+ return found;
199
+ };
200
+ export function _includes(str, needle) {
201
+ return str.indexOf(needle) !== -1;
202
+ }
203
+ /**
204
+ * Object.entries() polyfill
205
+ * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entries
206
+ */
207
+ export function _entries(obj) {
208
+ var ownProps = Object.keys(obj);
209
+ var i = ownProps.length;
210
+ var resArray = new Array(i); // preallocate the Array
211
+ while (i--) {
212
+ resArray[i] = [ownProps[i], obj[ownProps[i]]];
213
+ }
214
+ return resArray;
215
+ }
216
+ // Underscore Addons
217
+ export var _isObject = function (obj) {
218
+ return obj === Object(obj) && !_isArray(obj);
219
+ };
220
+ export var _isEmptyObject = function (obj) {
221
+ if (_isObject(obj)) {
222
+ for (var key in obj) {
223
+ if (hasOwnProperty.call(obj, key)) {
224
+ return false;
225
+ }
226
+ }
227
+ return true;
228
+ }
229
+ return false;
230
+ };
231
+ export var _isUndefined = function (obj) {
232
+ return obj === void 0;
233
+ };
234
+ export var _isString = function (obj) {
235
+ return toString.call(obj) == '[object String]';
236
+ };
237
+ export var _isDate = function (obj) {
238
+ return toString.call(obj) == '[object Date]';
239
+ };
240
+ export var _isNumber = function (obj) {
241
+ return toString.call(obj) == '[object Number]';
242
+ };
243
+ export var _encodeDates = function (obj) {
244
+ _each(obj, function (v, k) {
245
+ if (_isDate(v)) {
246
+ obj[k] = _formatDate(v);
247
+ }
248
+ else if (_isObject(v)) {
249
+ obj[k] = _encodeDates(v); // recurse
250
+ }
251
+ });
252
+ return obj;
253
+ };
254
+ export var _timestamp = function () {
255
+ Date.now =
256
+ Date.now ||
257
+ function () {
258
+ return +new Date();
259
+ };
260
+ return Date.now();
261
+ };
262
+ export var _formatDate = function (d) {
263
+ // YYYY-MM-DDTHH:MM:SS in UTC
264
+ function pad(n) {
265
+ return n < 10 ? '0' + n : n;
266
+ }
267
+ return (d.getUTCFullYear() +
268
+ '-' +
269
+ pad(d.getUTCMonth() + 1) +
270
+ '-' +
271
+ pad(d.getUTCDate()) +
272
+ 'T' +
273
+ pad(d.getUTCHours()) +
274
+ ':' +
275
+ pad(d.getUTCMinutes()) +
276
+ ':' +
277
+ pad(d.getUTCSeconds()));
278
+ };
279
+ export var _safewrap = function (f) {
280
+ return function () {
281
+ var args = [];
282
+ for (var _i = 0; _i < arguments.length; _i++) {
283
+ args[_i] = arguments[_i];
284
+ }
285
+ try {
286
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
287
+ // @ts-ignore
288
+ return f.apply(this, args);
289
+ }
290
+ catch (e) {
291
+ logger.critical('Implementation error. Please turn on debug and contact support@posthog.com.');
292
+ logger.critical(e);
293
+ }
294
+ };
295
+ };
296
+ // eslint-disable-next-line @typescript-eslint/ban-types
297
+ export var _safewrap_class = function (klass, functions) {
298
+ for (var i = 0; i < functions.length; i++) {
299
+ klass.prototype[functions[i]] = _safewrap(klass.prototype[functions[i]]);
300
+ }
301
+ };
302
+ export var _safewrap_instance_methods = function (obj) {
303
+ for (var func in obj) {
304
+ if (typeof obj[func] === 'function') {
305
+ obj[func] = _safewrap(obj[func]);
306
+ }
307
+ }
308
+ };
309
+ export var _strip_empty_properties = function (p) {
310
+ var ret = {};
311
+ _each(p, function (v, k) {
312
+ if (_isString(v) && v.length > 0) {
313
+ ret[k] = v;
314
+ }
315
+ });
316
+ return ret;
317
+ };
318
+ /**
319
+ * Deep copies an object.
320
+ * It handles cycles by replacing all references to them with `undefined`
321
+ * Also supports customizing native values
322
+ *
323
+ * @param value
324
+ * @param customizer
325
+ * @returns {{}|undefined|*}
326
+ */
327
+ function deepCircularCopy(value, customizer) {
328
+ var COPY_IN_PROGRESS_SET = new Set();
329
+ function internalDeepCircularCopy(value, key) {
330
+ if (value !== Object(value))
331
+ return customizer ? customizer(value, key) : value; // primitive value
332
+ if (COPY_IN_PROGRESS_SET.has(value))
333
+ return undefined;
334
+ COPY_IN_PROGRESS_SET.add(value);
335
+ var result;
336
+ if (_isArray(value)) {
337
+ result = [];
338
+ _eachArray(value, function (it) {
339
+ result.push(internalDeepCircularCopy(it));
340
+ });
341
+ }
342
+ else {
343
+ result = {};
344
+ _each(value, function (val, key) {
345
+ if (!COPY_IN_PROGRESS_SET.has(val)) {
346
+ ;
347
+ result[key] = internalDeepCircularCopy(val, key);
348
+ }
349
+ });
350
+ }
351
+ return result;
352
+ }
353
+ return internalDeepCircularCopy(value);
354
+ }
355
+ var LONG_STRINGS_ALLOW_LIST = ['$performance_raw'];
356
+ export function _copyAndTruncateStrings(object, maxStringLength) {
357
+ return deepCircularCopy(object, function (value, key) {
358
+ if (key && LONG_STRINGS_ALLOW_LIST.indexOf(key) > -1) {
359
+ return value;
360
+ }
361
+ if (typeof value === 'string' && maxStringLength !== null) {
362
+ return value.slice(0, maxStringLength);
363
+ }
364
+ return value;
365
+ });
366
+ }
367
+ export function _base64Encode(data) {
368
+ var b64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
369
+ var o1, o2, o3, h1, h2, h3, h4, bits, i = 0, ac = 0, enc = '';
370
+ var tmp_arr = [];
371
+ if (!data) {
372
+ return data;
373
+ }
374
+ data = _utf8Encode(data);
375
+ do {
376
+ // pack three octets into four hexets
377
+ o1 = data.charCodeAt(i++);
378
+ o2 = data.charCodeAt(i++);
379
+ o3 = data.charCodeAt(i++);
380
+ bits = (o1 << 16) | (o2 << 8) | o3;
381
+ h1 = (bits >> 18) & 0x3f;
382
+ h2 = (bits >> 12) & 0x3f;
383
+ h3 = (bits >> 6) & 0x3f;
384
+ h4 = bits & 0x3f;
385
+ // use hexets to index into b64, and append result to encoded string
386
+ tmp_arr[ac++] = b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4);
387
+ } while (i < data.length);
388
+ enc = tmp_arr.join('');
389
+ switch (data.length % 3) {
390
+ case 1:
391
+ enc = enc.slice(0, -2) + '==';
392
+ break;
393
+ case 2:
394
+ enc = enc.slice(0, -1) + '=';
395
+ break;
396
+ }
397
+ return enc;
398
+ }
399
+ export var _utf8Encode = function (string) {
400
+ string = (string + '').replace(/\r\n/g, '\n').replace(/\r/g, '\n');
401
+ var utftext = '', start, end;
402
+ var stringl = 0, n;
403
+ start = end = 0;
404
+ stringl = string.length;
405
+ for (n = 0; n < stringl; n++) {
406
+ var c1 = string.charCodeAt(n);
407
+ var enc = null;
408
+ if (c1 < 128) {
409
+ end++;
410
+ }
411
+ else if (c1 > 127 && c1 < 2048) {
412
+ enc = String.fromCharCode((c1 >> 6) | 192, (c1 & 63) | 128);
413
+ }
414
+ else {
415
+ enc = String.fromCharCode((c1 >> 12) | 224, ((c1 >> 6) & 63) | 128, (c1 & 63) | 128);
416
+ }
417
+ if (enc !== null) {
418
+ if (end > start) {
419
+ utftext += string.substring(start, end);
420
+ }
421
+ utftext += enc;
422
+ start = end = n + 1;
423
+ }
424
+ }
425
+ if (end > start) {
426
+ utftext += string.substring(start, string.length);
427
+ }
428
+ return utftext;
429
+ };
430
+ // _.isBlockedUA()
431
+ // This is to block various web spiders from executing our JS and
432
+ // sending false capturing data
433
+ export var _isBlockedUA = function (ua) {
434
+ if (/(google web preview|baiduspider|yandexbot|bingbot|googlebot|yahoo! slurp|ahrefsbot|facebookexternalhit|facebookcatalog|applebot|semrushbot|duckduckbot|twitterbot|rogerbot|linkedinbot|mj12bot|sitebulb|bot.htm|bot.php|hubspot|crawler|prerender|gptbot)/i.test(ua)) {
435
+ return true;
436
+ }
437
+ return false;
438
+ };
439
+ /**
440
+ * @param {Object=} formdata
441
+ * @param {string=} arg_separator
442
+ */
443
+ export var _HTTPBuildQuery = function (formdata, arg_separator) {
444
+ if (arg_separator === void 0) { arg_separator = '&'; }
445
+ var use_val;
446
+ var use_key;
447
+ var tph_arr = [];
448
+ _each(formdata, function (val, key) {
449
+ use_val = encodeURIComponent(val.toString());
450
+ use_key = encodeURIComponent(key);
451
+ tph_arr[tph_arr.length] = use_key + '=' + use_val;
452
+ });
453
+ return tph_arr.join(arg_separator);
454
+ };
455
+ export var _getQueryParam = function (url, param) {
456
+ // Expects a raw URL
457
+ var cleanParam = param.replace(/[[]/, '\\[').replace(/[\]]/, '\\]');
458
+ var regexS = '[\\?&]' + cleanParam + '=([^&#]*)';
459
+ var regex = new RegExp(regexS);
460
+ var results = regex.exec(url);
461
+ if (results === null || (results && typeof results[1] !== 'string' && results[1].length)) {
462
+ return '';
463
+ }
464
+ else {
465
+ var result = results[1];
466
+ try {
467
+ result = decodeURIComponent(result);
468
+ }
469
+ catch (err) {
470
+ logger.error('Skipping decoding for malformed query param: ' + result);
471
+ }
472
+ return result.replace(/\+/g, ' ');
473
+ }
474
+ };
475
+ export var _getHashParam = function (hash, param) {
476
+ var matches = hash.match(new RegExp(param + '=([^&]*)'));
477
+ return matches ? matches[1] : null;
478
+ };
479
+ export var _register_event = (function () {
480
+ // written by Dean Edwards, 2005
481
+ // with input from Tino Zijdel - crisp@xs4all.nl
482
+ // with input from Carl Sverre - mail@carlsverre.com
483
+ // with input from PostHog
484
+ // http://dean.edwards.name/weblog/2005/10/add-event/
485
+ // https://gist.github.com/1930440
486
+ /**
487
+ * @param {Object} element
488
+ * @param {string} type
489
+ * @param {function(...*)} handler
490
+ * @param {boolean=} oldSchool
491
+ * @param {boolean=} useCapture
492
+ */
493
+ var register_event = function (element, type, handler, oldSchool, useCapture) {
494
+ if (!element) {
495
+ logger.error('No valid element provided to register_event');
496
+ return;
497
+ }
498
+ if (element.addEventListener && !oldSchool) {
499
+ element.addEventListener(type, handler, !!useCapture);
500
+ }
501
+ else {
502
+ var ontype = 'on' + type;
503
+ var old_handler = element[ontype] // can be undefined
504
+ ;
505
+ element[ontype] = makeHandler(element, handler, old_handler);
506
+ }
507
+ };
508
+ function makeHandler(element, new_handler, old_handlers) {
509
+ return function (event) {
510
+ event = event || fixEvent(window.event);
511
+ // this basically happens in firefox whenever another script
512
+ // overwrites the onload callback and doesn't pass the event
513
+ // object to previously defined callbacks. All the browsers
514
+ // that don't define window.event implement addEventListener
515
+ // so the dom_loaded handler will still be fired as usual.
516
+ if (!event) {
517
+ return undefined;
518
+ }
519
+ var ret = true;
520
+ var old_result;
521
+ if (_isFunction(old_handlers)) {
522
+ old_result = old_handlers(event);
523
+ }
524
+ var new_result = new_handler.call(element, event);
525
+ if (false === old_result || false === new_result) {
526
+ ret = false;
527
+ }
528
+ return ret;
529
+ };
530
+ }
531
+ function fixEvent(event) {
532
+ if (event) {
533
+ event.preventDefault = fixEvent.preventDefault;
534
+ event.stopPropagation = fixEvent.stopPropagation;
535
+ }
536
+ return event;
537
+ }
538
+ fixEvent.preventDefault = function () {
539
+ ;
540
+ this.returnValue = false;
541
+ };
542
+ fixEvent.stopPropagation = function () {
543
+ ;
544
+ this.cancelBubble = true;
545
+ };
546
+ return register_event;
547
+ })();
548
+ export var isLocalhost = function () {
549
+ return localDomains.includes(location.hostname);
550
+ };
551
+ export function loadScript(scriptUrlToLoad, callback) {
552
+ var addScript = function () {
553
+ var _a;
554
+ var scriptTag = document.createElement('script');
555
+ scriptTag.type = 'text/javascript';
556
+ scriptTag.src = scriptUrlToLoad;
557
+ scriptTag.onload = function (event) { return callback(undefined, event); };
558
+ scriptTag.onerror = function (error) { return callback(error); };
559
+ var scripts = document.querySelectorAll('body > script');
560
+ if (scripts.length > 0) {
561
+ (_a = scripts[0].parentNode) === null || _a === void 0 ? void 0 : _a.insertBefore(scriptTag, scripts[0]);
562
+ }
563
+ else {
564
+ // In exceptional situations this call might load before the DOM is fully ready.
565
+ document.body.appendChild(scriptTag);
566
+ }
567
+ };
568
+ if (document.body) {
569
+ addScript();
570
+ }
571
+ else {
572
+ document.addEventListener('DOMContentLoaded', addScript);
573
+ }
574
+ }
575
+ export var _info = {
576
+ campaignParams: function (customParams) {
577
+ var campaign_keywords = [
578
+ 'utm_source',
579
+ 'utm_medium',
580
+ 'utm_campaign',
581
+ 'utm_content',
582
+ 'utm_term',
583
+ 'gclid',
584
+ 'fbclid',
585
+ 'msclkid',
586
+ ].concat(customParams || []);
587
+ var params = {};
588
+ _each(campaign_keywords, function (kwkey) {
589
+ var kw = _getQueryParam(document.URL, kwkey);
590
+ if (kw.length) {
591
+ params[kwkey] = kw;
592
+ }
593
+ });
594
+ return params;
595
+ },
596
+ searchEngine: function () {
597
+ var referrer = document.referrer;
598
+ if (!referrer) {
599
+ return null;
600
+ }
601
+ else if (referrer.search('https?://(.*)google.([^/?]*)') === 0) {
602
+ return 'google';
603
+ }
604
+ else if (referrer.search('https?://(.*)bing.com') === 0) {
605
+ return 'bing';
606
+ }
607
+ else if (referrer.search('https?://(.*)yahoo.com') === 0) {
608
+ return 'yahoo';
609
+ }
610
+ else if (referrer.search('https?://(.*)duckduckgo.com') === 0) {
611
+ return 'duckduckgo';
612
+ }
613
+ else {
614
+ return null;
615
+ }
616
+ },
617
+ searchInfo: function () {
618
+ var search = _info.searchEngine(), param = search != 'yahoo' ? 'q' : 'p', ret = {};
619
+ if (search !== null) {
620
+ ret['$search_engine'] = search;
621
+ var keyword = _getQueryParam(document.referrer, param);
622
+ if (keyword.length) {
623
+ ret['ph_keyword'] = keyword;
624
+ }
625
+ }
626
+ return ret;
627
+ },
628
+ /**
629
+ * This function detects which browser is running this script.
630
+ * The order of the checks are important since many user agents
631
+ * include key words used in later checks.
632
+ */
633
+ browser: function (user_agent, vendor, opera) {
634
+ vendor = vendor || ''; // vendor is undefined for at least IE9
635
+ if (opera || _includes(user_agent, ' OPR/')) {
636
+ if (_includes(user_agent, 'Mini')) {
637
+ return 'Opera Mini';
638
+ }
639
+ return 'Opera';
640
+ }
641
+ else if (/(BlackBerry|PlayBook|BB10)/i.test(user_agent)) {
642
+ return 'BlackBerry';
643
+ }
644
+ else if (_includes(user_agent, 'IEMobile') || _includes(user_agent, 'WPDesktop')) {
645
+ return 'Internet Explorer Mobile';
646
+ }
647
+ else if (_includes(user_agent, 'SamsungBrowser/')) {
648
+ // https://developer.samsung.com/internet/user-agent-string-format
649
+ return 'Samsung Internet';
650
+ }
651
+ else if (_includes(user_agent, 'Edge') || _includes(user_agent, 'Edg/')) {
652
+ return 'Microsoft Edge';
653
+ }
654
+ else if (_includes(user_agent, 'FBIOS')) {
655
+ return 'Facebook Mobile';
656
+ }
657
+ else if (_includes(user_agent, 'Chrome')) {
658
+ return 'Chrome';
659
+ }
660
+ else if (_includes(user_agent, 'CriOS')) {
661
+ return 'Chrome iOS';
662
+ }
663
+ else if (_includes(user_agent, 'UCWEB') || _includes(user_agent, 'UCBrowser')) {
664
+ return 'UC Browser';
665
+ }
666
+ else if (_includes(user_agent, 'FxiOS')) {
667
+ return 'Firefox iOS';
668
+ }
669
+ else if (_includes(vendor, 'Apple')) {
670
+ if (_includes(user_agent, 'Mobile')) {
671
+ return 'Mobile Safari';
672
+ }
673
+ return 'Safari';
674
+ }
675
+ else if (_includes(user_agent, 'Android')) {
676
+ return 'Android Mobile';
677
+ }
678
+ else if (_includes(user_agent, 'Konqueror')) {
679
+ return 'Konqueror';
680
+ }
681
+ else if (_includes(user_agent, 'Firefox')) {
682
+ return 'Firefox';
683
+ }
684
+ else if (_includes(user_agent, 'MSIE') || _includes(user_agent, 'Trident/')) {
685
+ return 'Internet Explorer';
686
+ }
687
+ else if (_includes(user_agent, 'Gecko')) {
688
+ return 'Mozilla';
689
+ }
690
+ else {
691
+ return '';
692
+ }
693
+ },
694
+ /**
695
+ * This function detects which browser version is running this script,
696
+ * parsing major and minor version (e.g., 42.1). User agent strings from:
697
+ * http://www.useragentstring.com/pages/useragentstring.php
698
+ */
699
+ browserVersion: function (userAgent, vendor, opera) {
700
+ var browser = _info.browser(userAgent, vendor, opera);
701
+ var versionRegexs = {
702
+ 'Internet Explorer Mobile': /rv:(\d+(\.\d+)?)/,
703
+ 'Microsoft Edge': /Edge?\/(\d+(\.\d+)?)/,
704
+ Chrome: /Chrome\/(\d+(\.\d+)?)/,
705
+ 'Chrome iOS': /CriOS\/(\d+(\.\d+)?)/,
706
+ 'UC Browser': /(UCBrowser|UCWEB)\/(\d+(\.\d+)?)/,
707
+ Safari: /Version\/(\d+(\.\d+)?)/,
708
+ 'Mobile Safari': /Version\/(\d+(\.\d+)?)/,
709
+ Opera: /(Opera|OPR)\/(\d+(\.\d+)?)/,
710
+ Firefox: /Firefox\/(\d+(\.\d+)?)/,
711
+ 'Firefox iOS': /FxiOS\/(\d+(\.\d+)?)/,
712
+ Konqueror: /Konqueror:(\d+(\.\d+)?)/,
713
+ BlackBerry: /BlackBerry (\d+(\.\d+)?)/,
714
+ 'Android Mobile': /android\s(\d+(\.\d+)?)/,
715
+ 'Samsung Internet': /SamsungBrowser\/(\d+(\.\d+)?)/,
716
+ 'Internet Explorer': /(rv:|MSIE )(\d+(\.\d+)?)/,
717
+ Mozilla: /rv:(\d+(\.\d+)?)/,
718
+ };
719
+ var regex = versionRegexs[browser];
720
+ if (regex === undefined) {
721
+ return null;
722
+ }
723
+ var matches = userAgent.match(regex);
724
+ if (!matches) {
725
+ return null;
726
+ }
727
+ return parseFloat(matches[matches.length - 2]);
728
+ },
729
+ browserLanguage: function () {
730
+ return (navigator.language || // Any modern browser
731
+ navigator.userLanguage // IE11
732
+ );
733
+ },
734
+ os: function (user_agent) {
735
+ if (/Windows/i.test(user_agent)) {
736
+ if (/Phone/.test(user_agent) || /WPDesktop/.test(user_agent)) {
737
+ return { os_name: 'Windows Phone', os_version: '' };
738
+ }
739
+ var match = /Windows NT ([0-9.]+)/i.exec(user_agent);
740
+ if (match && match[1]) {
741
+ var version = match[1];
742
+ return { os_name: 'Windows', os_version: version };
743
+ }
744
+ return { os_name: 'Windows', os_version: '' };
745
+ }
746
+ else if (/(iPhone|iPad|iPod)/.test(user_agent)) {
747
+ var match = /OS (\d+)_(\d+)_?(\d+)?/i.exec(user_agent);
748
+ if (match && match[1]) {
749
+ var versionParts = [match[1], match[2], match[3] || '0'];
750
+ return { os_name: 'iOS', os_version: versionParts.join('.') };
751
+ }
752
+ return { os_name: 'iOS', os_version: '' };
753
+ }
754
+ else if (/Android/.test(user_agent)) {
755
+ var match = /Android (\d+)\.(\d+)\.?(\d+)?/i.exec(user_agent);
756
+ if (match && match[1]) {
757
+ var versionParts = [match[1], match[2], match[3] || '0'];
758
+ return { os_name: 'Android', os_version: versionParts.join('.') };
759
+ }
760
+ return { os_name: 'Android', os_version: '' };
761
+ }
762
+ else if (/(BlackBerry|PlayBook|BB10)/i.test(user_agent)) {
763
+ return { os_name: 'BlackBerry', os_version: '' };
764
+ }
765
+ else if (/Mac/i.test(user_agent)) {
766
+ var match = /Mac OS X (\d+)[_.](\d+)[_.]?(\d+)?/i.exec(user_agent);
767
+ if (match && match[1]) {
768
+ var versionParts = [match[1], match[2], match[3] || '0'];
769
+ return { os_name: 'Mac OS X', os_version: versionParts.join('.') };
770
+ }
771
+ return { os_name: 'Mac OS X', os_version: '' };
772
+ }
773
+ else if (/Linux/.test(user_agent)) {
774
+ return { os_name: 'Linux', os_version: '' };
775
+ }
776
+ else if (/CrOS/.test(user_agent)) {
777
+ return { os_name: 'Chrome OS', os_version: '' };
778
+ }
779
+ else {
780
+ return { os_name: '', os_version: '' };
781
+ }
782
+ },
783
+ device: function (user_agent) {
784
+ if (/Windows Phone/i.test(user_agent) || /WPDesktop/.test(user_agent)) {
785
+ return 'Windows Phone';
786
+ }
787
+ else if (/iPad/.test(user_agent)) {
788
+ return 'iPad';
789
+ }
790
+ else if (/iPod/.test(user_agent)) {
791
+ return 'iPod Touch';
792
+ }
793
+ else if (/iPhone/.test(user_agent)) {
794
+ return 'iPhone';
795
+ }
796
+ else if (/(BlackBerry|PlayBook|BB10)/i.test(user_agent)) {
797
+ return 'BlackBerry';
798
+ }
799
+ else if (/Android/.test(user_agent) && !/Mobile/.test(user_agent)) {
800
+ return 'Android Tablet';
801
+ }
802
+ else if (/Android/.test(user_agent)) {
803
+ return 'Android';
804
+ }
805
+ else {
806
+ return '';
807
+ }
808
+ },
809
+ deviceType: function (user_agent) {
810
+ var device = this.device(user_agent);
811
+ if (device === 'iPad' || device === 'Android Tablet') {
812
+ return 'Tablet';
813
+ }
814
+ else if (device) {
815
+ return 'Mobile';
816
+ }
817
+ else {
818
+ return 'Desktop';
819
+ }
820
+ },
821
+ referrer: function () {
822
+ return document.referrer || '$direct';
823
+ },
824
+ referringDomain: function () {
825
+ if (!document.referrer) {
826
+ return '$direct';
827
+ }
828
+ var parser = document.createElement('a'); // Unfortunately we cannot use new URL due to IE11
829
+ parser.href = document.referrer;
830
+ return parser.host;
831
+ },
832
+ properties: function () {
833
+ var _a = _info.os(userAgent), os_name = _a.os_name, os_version = _a.os_version;
834
+ return _extend(_strip_empty_properties({
835
+ $os: os_name,
836
+ $os_version: os_version,
837
+ $browser: _info.browser(userAgent, navigator.vendor, win.opera),
838
+ $device: _info.device(userAgent),
839
+ $device_type: _info.deviceType(userAgent),
840
+ }), {
841
+ $current_url: win === null || win === void 0 ? void 0 : win.location.href,
842
+ $host: win === null || win === void 0 ? void 0 : win.location.host,
843
+ $pathname: win === null || win === void 0 ? void 0 : win.location.pathname,
844
+ $browser_version: _info.browserVersion(userAgent, navigator.vendor, win.opera),
845
+ $browser_language: _info.browserLanguage(),
846
+ $screen_height: win === null || win === void 0 ? void 0 : win.screen.height,
847
+ $screen_width: win === null || win === void 0 ? void 0 : win.screen.width,
848
+ $viewport_height: win === null || win === void 0 ? void 0 : win.innerHeight,
849
+ $viewport_width: win === null || win === void 0 ? void 0 : win.innerWidth,
850
+ $lib: 'web',
851
+ $lib_version: Config.LIB_VERSION,
852
+ $insert_id: Math.random().toString(36).substring(2, 10) + Math.random().toString(36).substring(2, 10),
853
+ $time: _timestamp() / 1000, // epoch time in seconds
854
+ });
855
+ },
856
+ people_properties: function () {
857
+ var _a = _info.os(userAgent), os_name = _a.os_name, os_version = _a.os_version;
858
+ return _extend(_strip_empty_properties({
859
+ $os: os_name,
860
+ $os_version: os_version,
861
+ $browser: _info.browser(userAgent, navigator.vendor, win.opera),
862
+ }), {
863
+ $browser_version: _info.browserVersion(userAgent, navigator.vendor, win.opera),
864
+ });
865
+ },
866
+ };
867
+ export { win as window, userAgent, logger, document };
868
+ //# sourceMappingURL=utils.js.map