posthog-js 1.87.2 → 1.87.4

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