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.
- package/dist/array.full.js +2 -2
- package/dist/array.full.js.map +1 -1
- package/dist/array.js +2 -2
- package/dist/array.js.map +1 -1
- package/dist/es.js +2 -2
- package/dist/es.js.map +1 -1
- package/dist/module.d.ts +38 -6
- package/dist/module.js +2 -2
- package/dist/module.js.map +1 -1
- package/lib/package.json +8 -6
- package/lib/src/autocapture-utils.d.ts +15 -0
- package/lib/src/autocapture-utils.js +303 -0
- package/lib/src/autocapture-utils.js.map +1 -0
- package/lib/src/autocapture.d.ts +27 -0
- package/lib/src/autocapture.js +290 -0
- package/lib/src/autocapture.js.map +1 -0
- package/lib/src/base-request-queue.d.ts +12 -0
- package/lib/src/base-request-queue.js +33 -0
- package/lib/src/base-request-queue.js.map +1 -0
- package/lib/src/compression.d.ts +3 -0
- package/lib/src/compression.js +35 -0
- package/lib/src/compression.js.map +1 -0
- package/lib/src/config.d.ts +5 -0
- package/lib/src/config.js +9 -0
- package/lib/src/config.js.map +1 -0
- package/lib/src/constants.d.ts +19 -0
- package/lib/src/constants.js +41 -0
- package/lib/src/constants.js.map +1 -0
- package/lib/src/decide.d.ts +8 -0
- package/lib/src/decide.js +118 -0
- package/lib/src/decide.js.map +1 -0
- package/lib/src/extensions/cloud.d.ts +1 -0
- package/lib/src/extensions/cloud.js +2 -0
- package/lib/src/extensions/cloud.js.map +1 -0
- package/lib/src/extensions/exceptions/error-conversion.d.ts +26 -0
- package/lib/src/extensions/exceptions/error-conversion.js +204 -0
- package/lib/src/extensions/exceptions/error-conversion.js.map +1 -0
- package/lib/src/extensions/exceptions/exception-autocapture.d.ts +24 -0
- package/lib/src/extensions/exceptions/exception-autocapture.js +164 -0
- package/lib/src/extensions/exceptions/exception-autocapture.js.map +1 -0
- package/lib/src/extensions/exceptions/stack-trace.d.ts +31 -0
- package/lib/src/extensions/exceptions/stack-trace.js +259 -0
- package/lib/src/extensions/exceptions/stack-trace.js.map +1 -0
- package/lib/src/extensions/exceptions/type-checking.d.ts +10 -0
- package/lib/src/extensions/exceptions/type-checking.js +43 -0
- package/lib/src/extensions/exceptions/type-checking.js.map +1 -0
- package/lib/src/extensions/rageclick.d.ts +10 -0
- package/lib/src/extensions/rageclick.js +33 -0
- package/lib/src/extensions/rageclick.js.map +1 -0
- package/lib/src/extensions/segment-integration.d.ts +44 -0
- package/lib/src/extensions/segment-integration.js +34 -0
- package/lib/src/extensions/segment-integration.js.map +1 -0
- package/lib/src/extensions/sentry-integration.d.ts +30 -0
- package/lib/src/extensions/sentry-integration.js +63 -0
- package/lib/src/extensions/sentry-integration.js.map +1 -0
- package/lib/src/extensions/sessionrecording-utils.d.ts +67 -0
- package/lib/src/extensions/sessionrecording-utils.js +192 -0
- package/lib/src/extensions/sessionrecording-utils.js.map +1 -0
- package/lib/src/extensions/sessionrecording.d.ts +45 -0
- package/lib/src/extensions/sessionrecording.js +430 -0
- package/lib/src/extensions/sessionrecording.js.map +1 -0
- package/lib/src/extensions/toolbar.d.ts +18 -0
- package/lib/src/extensions/toolbar.js +151 -0
- package/lib/src/extensions/toolbar.js.map +1 -0
- package/lib/src/extensions/web-performance.d.ts +20 -0
- package/lib/src/extensions/web-performance.js +245 -0
- package/lib/src/extensions/web-performance.js.map +1 -0
- package/lib/src/gdpr-utils.d.ts +80 -0
- package/lib/src/gdpr-utils.js +236 -0
- package/lib/src/gdpr-utils.js.map +1 -0
- package/lib/src/loader-globals-full.d.ts +1 -0
- package/lib/src/loader-globals-full.js +5 -0
- package/lib/src/loader-globals-full.js.map +1 -0
- package/lib/src/loader-globals.d.ts +1 -0
- package/lib/src/loader-globals.js +3 -0
- package/lib/src/loader-globals.js.map +1 -0
- package/lib/src/loader-module.d.ts +4 -0
- package/lib/src/loader-module.js +6 -0
- package/lib/src/loader-module.js.map +1 -0
- package/lib/src/loader-recorder-v2.d.ts +2 -0
- package/lib/src/loader-recorder-v2.js +15 -0
- package/lib/src/loader-recorder-v2.js.map +1 -0
- package/lib/src/loader-recorder.d.ts +2 -0
- package/lib/src/loader-recorder.js +15 -0
- package/lib/src/loader-recorder.js.map +1 -0
- package/lib/src/page-view.d.ts +38 -0
- package/lib/src/page-view.js +127 -0
- package/lib/src/page-view.js.map +1 -0
- package/lib/src/posthog-core.d.ts +701 -0
- package/lib/src/posthog-core.js +1916 -0
- package/lib/src/posthog-core.js.map +1 -0
- package/lib/src/posthog-featureflags.d.ts +70 -0
- package/lib/src/posthog-featureflags.js +438 -0
- package/lib/src/posthog-featureflags.js.map +1 -0
- package/lib/src/posthog-persistence.d.ts +57 -0
- package/lib/src/posthog-persistence.js +256 -0
- package/lib/src/posthog-persistence.js.map +1 -0
- package/lib/src/posthog-surveys.d.ts +57 -0
- package/lib/src/posthog-surveys.js +76 -0
- package/lib/src/posthog-surveys.js.map +1 -0
- package/lib/src/rate-limiter.d.ts +5 -0
- package/lib/src/rate-limiter.js +66 -0
- package/lib/src/rate-limiter.js.map +1 -0
- package/lib/src/request-queue.d.ts +10 -0
- package/lib/src/request-queue.js +146 -0
- package/lib/src/request-queue.js.map +1 -0
- package/lib/src/retry-queue.d.ts +28 -0
- package/lib/src/retry-queue.js +198 -0
- package/lib/src/retry-queue.js.map +1 -0
- package/lib/src/send-request.d.ts +6 -0
- package/lib/src/send-request.js +125 -0
- package/lib/src/send-request.js.map +1 -0
- package/lib/src/sessionid.d.ts +28 -0
- package/lib/src/sessionid.js +205 -0
- package/lib/src/sessionid.js.map +1 -0
- package/lib/src/storage.d.ts +7 -0
- package/lib/src/storage.js +291 -0
- package/lib/src/storage.js.map +1 -0
- package/lib/src/types.d.ts +294 -0
- package/lib/src/types.js +6 -0
- package/lib/src/types.js.map +1 -0
- package/lib/src/utils.d.ts +89 -0
- package/lib/src/utils.js +868 -0
- package/lib/src/utils.js.map +1 -0
- package/lib/src/uuidv7.d.ts +42 -0
- package/lib/src/uuidv7.js +228 -0
- package/lib/src/uuidv7.js.map +1 -0
- package/package.json +8 -6
- package/CHANGELOG.md +0 -1145
package/lib/src/utils.js
ADDED
|
@@ -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
|