@ohbug/browser 1.0.16 → 1.0.20

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.
@@ -1,1535 +1,59 @@
1
- (function (global, factory) {
2
- typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
3
- typeof define === 'function' && define.amd ? define(['exports'], factory) :
4
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.Ohbug = {}));
5
- }(this, (function (exports) { 'use strict';
6
-
7
- /*! *****************************************************************************
8
- Copyright (c) Microsoft Corporation.
9
-
10
- Permission to use, copy, modify, and/or distribute this software for any
11
- purpose with or without fee is hereby granted.
12
-
13
- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
14
- REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
15
- AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
16
- INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
17
- LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
18
- OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
19
- PERFORMANCE OF THIS SOFTWARE.
20
- ***************************************************************************** */
21
-
22
- var __assign$1 = function() {
23
- __assign$1 = Object.assign || function __assign(t) {
24
- for (var s, i = 1, n = arguments.length; i < n; i++) {
25
- s = arguments[i];
26
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
27
- }
28
- return t;
29
- };
30
- return __assign$1.apply(this, arguments);
31
- };
32
-
33
- function __awaiter(thisArg, _arguments, P, generator) {
34
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
35
- return new (P || (P = Promise))(function (resolve, reject) {
36
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
37
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
38
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
39
- step((generator = generator.apply(thisArg, _arguments || [])).next());
40
- });
41
- }
42
-
43
- function __generator(thisArg, body) {
44
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
45
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
46
- function verb(n) { return function (v) { return step([n, v]); }; }
47
- function step(op) {
48
- if (f) throw new TypeError("Generator is already executing.");
49
- while (_) try {
50
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
51
- if (y = 0, t) op = [op[0] & 2, t.value];
52
- switch (op[0]) {
53
- case 0: case 1: t = op; break;
54
- case 4: _.label++; return { value: op[1], done: false };
55
- case 5: _.label++; y = op[1]; op = [0]; continue;
56
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
57
- default:
58
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
59
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
60
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
61
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
62
- if (t[2]) _.ops.pop();
63
- _.trys.pop(); continue;
64
- }
65
- op = body.call(thisArg, _);
66
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
67
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
68
- }
69
- }
70
-
71
- function __spreadArray$1(to, from) {
72
- for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)
73
- to[j] = from[i];
74
- return to;
75
- }
76
-
77
- /*! *****************************************************************************
78
- Copyright (c) Microsoft Corporation.
79
-
80
- Permission to use, copy, modify, and/or distribute this software for any
81
- purpose with or without fee is hereby granted.
82
-
83
- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
84
- REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
85
- AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
86
- INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
87
- LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
88
- OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
89
- PERFORMANCE OF THIS SOFTWARE.
90
- ***************************************************************************** */
91
-
92
- function __spreadArray$2(to, from) {
93
- for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)
94
- to[j] = from[i];
95
- return to;
96
- }
97
-
98
- var prefix$1 = 'Ohbug';
99
- var logger$1 = {
100
- log: function () {
101
- var args = [];
102
- for (var _i = 0; _i < arguments.length; _i++) {
103
- args[_i] = arguments[_i];
104
- }
105
- // eslint-disable-next-line no-console
106
- console.log.apply(console, __spreadArray$2([prefix$1], args));
107
- },
108
- info: function () {
109
- var args = [];
110
- for (var _i = 0; _i < arguments.length; _i++) {
111
- args[_i] = arguments[_i];
112
- }
113
- // eslint-disable-next-line no-console
114
- console.info.apply(console, __spreadArray$2([prefix$1], args));
115
- },
116
- warn: function () {
117
- var args = [];
118
- for (var _i = 0; _i < arguments.length; _i++) {
119
- args[_i] = arguments[_i];
120
- }
121
- console.warn.apply(console, __spreadArray$2([prefix$1], args));
122
- },
123
- error: function () {
124
- var args = [];
125
- for (var _i = 0; _i < arguments.length; _i++) {
126
- args[_i] = arguments[_i];
127
- }
128
- console.error.apply(console, __spreadArray$2([prefix$1], args));
129
- },
130
- };
131
-
132
- function isString(value) {
133
- return typeof value === 'string';
134
- }
135
- function isNumber(value) {
136
- return typeof value === 'number' && parseInt("" + value, 10) === value;
137
- }
138
- function isFunction(value) {
139
- return typeof value === 'function';
140
- }
141
- function isObject(value) {
142
- return Object.prototype.toString.call(value) === '[object Object]';
143
- }
144
-
145
- var schema = {
146
- // base
147
- apiKey: {
148
- defaultValue: undefined,
149
- message: 'is required',
150
- validate: function (value) { return Boolean(value) && isString(value); },
151
- },
152
- appVersion: {
153
- defaultValue: undefined,
154
- message: 'should be a string',
155
- validate: function (value) { return value === undefined || isString(value); },
156
- },
157
- appType: {
158
- defaultValue: undefined,
159
- message: 'should be a string',
160
- validate: function (value) { return value === undefined || isString(value); },
161
- },
162
- releaseStage: {
163
- defaultValue: 'production',
164
- message: 'should be a string',
165
- validate: function (value) { return value === undefined || isString(value); },
166
- },
167
- endpoint: {
168
- defaultValue: 'http://localhost:6660/report',
169
- message: 'should be a string',
170
- validate: function (value) { return value === undefined || isString(value); },
171
- },
172
- maxActions: {
173
- defaultValue: 30,
174
- message: 'should be a number between 0 and 100',
175
- validate: function (value) {
176
- return value === undefined || (isNumber(value) && value >= 1 && value <= 100);
177
- },
178
- },
179
- // hooks
180
- created: {
181
- defaultValue: function (event) { return event; },
182
- message: 'should be a function',
183
- validate: function (value) { return value === undefined || isFunction(value); },
184
- },
185
- notified: {
186
- defaultValue: function () { },
187
- message: 'should be a function',
188
- validate: function (value) { return value === undefined || isFunction(value); },
189
- },
190
- // utils
191
- logger: {
192
- defaultValue: logger$1,
193
- message: 'should be null or an object with methods { log, info, warn, error }',
194
- validate: function (value) {
195
- return value === undefined ||
196
- (value &&
197
- ['log', 'info', 'warn', 'error'].reduce(function (accumulator, method) {
198
- return accumulator && typeof value[method] === 'function';
199
- }, true));
200
- },
201
- },
202
- // data
203
- user: {
204
- defaultValue: undefined,
205
- message: 'should be an object and have up to 6 attributes',
206
- validate: function (value) {
207
- return value === undefined ||
208
- (isObject(value) && Object.keys(value).length <= 6);
209
- },
210
- },
211
- metaData: {
212
- defaultValue: undefined,
213
- message: 'should be an object',
214
- validate: function (value) { return value === undefined || isObject(value); },
215
- },
216
- };
217
-
218
- function createExtension(extension) {
219
- return extension;
220
- }
221
- /**
222
- * Extension loading and initialization
223
- *
224
- * @param extension
225
- * @param client
226
- * @param args
227
- */
228
- function loadExtension(extension, client) {
229
- var _a;
230
- var args = [];
231
- for (var _i = 2; _i < arguments.length; _i++) {
232
- args[_i - 2] = arguments[_i];
233
- }
234
- var result = (_a = extension.init) === null || _a === void 0 ? void 0 : _a.call.apply(_a, __spreadArray$1([extension, client], args));
235
- client._extensions.push(extension);
236
- // @ts-ignore
237
- // eslint-disable-next-line no-param-reassign
238
- client._hooks.created = function (_event, _client) {
239
- var _a, _b;
240
- var funcs = __spreadArray$1([
241
- _client._config.created
242
- ], _client._extensions
243
- .filter(function (_a) {
244
- var created = _a.created;
245
- return isFunction(created);
246
- })
247
- .map(function (_a) {
248
- var created = _a.created;
249
- return created;
250
- }));
251
- if (funcs.length === 0)
252
- return (function () {
253
- var arg = [];
254
- for (var _i = 0; _i < arguments.length; _i++) {
255
- arg[_i] = arguments[_i];
256
- }
257
- return arg;
258
- })(_event, _client);
259
- if (funcs.length === 1)
260
- return (_a = funcs[0]) === null || _a === void 0 ? void 0 : _a.call(funcs, _event, _client);
261
- // @ts-ignore
262
- return (_b = funcs.reduce(function (a, b) { return function (event) { return b(a(event, _client), _client); }; })) === null || _b === void 0 ? void 0 : _b(_event, _client);
263
- };
264
- // eslint-disable-next-line no-param-reassign
265
- client._hooks.notified = function (_event, _client) {
266
- return __spreadArray$1([
267
- _client._config.notified
268
- ], _client._extensions
269
- .filter(function (_a) {
270
- var notified = _a.notified;
271
- return isFunction(notified);
272
- })
273
- .map(function (_a) {
274
- var notified = _a.notified;
275
- return notified;
276
- })).forEach(function (func) { return func === null || func === void 0 ? void 0 : func(_event, _client); });
277
- };
278
- return result || client;
279
- }
280
-
281
- var Action = /** @class */ (function () {
282
- function Action(message, data, type, timestamp) {
283
- this.type = type;
284
- this.timestamp = timestamp || new Date().toISOString();
285
- this.message = message;
286
- this.data = data;
287
- }
288
- return Action;
289
- }());
290
-
291
- function getConfigErrorMessage(errors, config) {
292
- return new Error("Invalid configuration\n" + Object.keys(errors)
293
- .map(
294
- // @ts-ignore
295
- function (key) { return "- " + key + " " + errors[key] + ", got " + JSON.stringify(config[key]); })
296
- .join('\n') + "\n ");
297
- }
298
- function getErrorMessage(message, data) {
299
- return new Error("Invalid data\n- " + message + ", got " + JSON.stringify(data));
300
- }
301
-
302
- function addMetaData(map, section, data) {
303
- if (!section)
304
- return;
305
- map[section] = data;
306
- }
307
- function getMetaData(map, section) {
308
- if (map[section]) {
309
- return map[section];
310
- }
311
- return undefined;
312
- }
313
- function deleteMetaData(map, section) {
314
- if (map[section]) {
315
- return delete map[section];
316
- }
317
- return undefined;
318
- }
319
-
320
- var Event = /** @class */ (function () {
321
- function Event(values, client) {
322
- var apiKey = values.apiKey, appVersion = values.appVersion, appType = values.appType, releaseStage = values.releaseStage, timestamp = values.timestamp, category = values.category, type = values.type, sdk = values.sdk, detail = values.detail, device = values.device, user = values.user, actions = values.actions, metaData = values.metaData;
323
- this.apiKey = apiKey;
324
- this.appVersion = appVersion;
325
- this.appType = appType;
326
- this.releaseStage = releaseStage;
327
- this.timestamp = timestamp;
328
- this.category = category;
329
- this.type = type;
330
- this.sdk = sdk;
331
- this.detail = detail;
332
- this.device = device;
333
- this.user = user;
334
- this.actions = actions;
335
- this.metaData = metaData;
336
- this._client = client;
337
- }
338
- Object.defineProperty(Event.prototype, "_isOhbugEvent", {
339
- get: function () {
340
- return true;
341
- },
342
- enumerable: false,
343
- configurable: true
344
- });
345
- /**
346
- * Add an action.
347
- * Once the threshold is reached, the oldest breadcrumbs will be deleted.
348
- * 新增一个动作。
349
- * 一旦达到阈值,最老的 Action 将被删除。
350
- *
351
- * @param message
352
- * @param data
353
- * @param type
354
- * @param timestamp
355
- */
356
- Event.prototype.addAction = function (message, data, type, timestamp) {
357
- var _a, _b;
358
- var actions = this.actions;
359
- var targetMessage = isString(message) ? message : '';
360
- var targetData = data || {};
361
- var targetType = isString(type) ? type : '';
362
- var action = new Action(targetMessage, targetData, targetType, timestamp);
363
- if (actions.length >= ((_b = (_a = this._client) === null || _a === void 0 ? void 0 : _a._config.maxActions) !== null && _b !== void 0 ? _b : 30)) {
364
- actions.shift();
365
- }
366
- actions.push(action);
367
- };
368
- /**
369
- * Get current user information
370
- * 获取当前的用户信息
371
- */
372
- Event.prototype.getUser = function () {
373
- return this.user;
374
- };
375
- /**
376
- * Set current user information
377
- * 设置当前的用户信息
378
- */
379
- Event.prototype.setUser = function (user) {
380
- var _a;
381
- if (isObject(user) && Object.keys(user).length <= 6) {
382
- this.user = __assign$1(__assign$1({}, this.user), user);
383
- return this.getUser();
384
- }
385
- (_a = this._client) === null || _a === void 0 ? void 0 : _a._logger.warn(getErrorMessage('setUser should be an object and have up to 6 attributes', user));
386
- return undefined;
387
- };
388
- /**
389
- * Add metaData
390
- * 新增 metaData
391
- *
392
- * @param section
393
- * @param data
394
- */
395
- Event.prototype.addMetaData = function (section, data) {
396
- return addMetaData(this.metaData, section, data);
397
- };
398
- /**
399
- * Get metaData
400
- * 获取 metaData
401
- *
402
- * @param section
403
- */
404
- Event.prototype.getMetaData = function (section) {
405
- return getMetaData(this.metaData, section);
406
- };
407
- /**
408
- * Delete metaData
409
- * 删除 metaData
410
- *
411
- * @param section
412
- */
413
- Event.prototype.deleteMetaData = function (section) {
414
- return deleteMetaData(this.metaData, section);
415
- };
416
- Event.prototype.toJSON = function () {
417
- var _a = this, apiKey = _a.apiKey, appVersion = _a.appVersion, appType = _a.appType, timestamp = _a.timestamp, category = _a.category, type = _a.type, sdk = _a.sdk, device = _a.device, detail = _a.detail, user = _a.user, actions = _a.actions, metaData = _a.metaData, releaseStage = _a.releaseStage;
418
- return {
419
- apiKey: apiKey,
420
- appVersion: appVersion,
421
- appType: appType,
422
- timestamp: timestamp,
423
- category: category,
424
- type: type,
425
- sdk: sdk,
426
- device: device,
427
- detail: detail,
428
- user: user,
429
- actions: actions,
430
- metaData: metaData,
431
- releaseStage: releaseStage,
432
- };
433
- };
434
- return Event;
435
- }());
436
- function createEvent(values, client) {
437
- var _a = client._config, apiKey = _a.apiKey, appVersion = _a.appVersion, appType = _a.appType, releaseStage = _a.releaseStage;
438
- var timestamp = new Date().toISOString();
439
- var device = client._device(client);
440
- var category;
441
- var type;
442
- var detail;
443
- if (isObject(values) &&
444
- Object.prototype.hasOwnProperty.call(values, 'type') &&
445
- Object.prototype.hasOwnProperty.call(values, 'detail')) {
446
- category = values.category || 'error';
447
- type = values.type;
448
- detail = values.detail;
449
- }
450
- else {
451
- category = 'error';
452
- type = 'unknownError';
453
- detail = values;
454
- }
455
- return new Event({
456
- apiKey: apiKey,
457
- appVersion: appVersion,
458
- appType: appType,
459
- timestamp: timestamp,
460
- category: category,
461
- type: type,
462
- sdk: client._sdk,
463
- device: device,
464
- user: client._user,
465
- detail: detail,
466
- actions: client._actions,
467
- metaData: client._metaData,
468
- releaseStage: releaseStage,
469
- }, client);
470
- }
471
- function isEvent(eventLike) {
472
- return Boolean(eventLike === null || eventLike === void 0 ? void 0 : eventLike._isOhbugEvent);
473
- }
474
-
475
- /**
476
- * Used to control the timing of reporting events and the related life cycle.
477
- *
478
- * @param event
479
- * @param client
480
- */
481
- function notify(event, client) {
482
- return __awaiter(this, void 0, void 0, function () {
483
- var result, e_1;
484
- return __generator(this, function (_a) {
485
- switch (_a.label) {
486
- case 0:
487
- _a.trys.push([0, 3, , 4]);
488
- result = null;
489
- if (!event) return [3 /*break*/, 2];
490
- return [4 /*yield*/, client._notifier(event)];
491
- case 1:
492
- result = _a.sent();
493
- _a.label = 2;
494
- case 2:
495
- if (isFunction(client._hooks.notified)) {
496
- client._hooks.notified(event, client);
497
- }
498
- return [2 /*return*/, result];
499
- case 3:
500
- e_1 = _a.sent();
501
- client._logger.error(e_1);
502
- return [3 /*break*/, 4];
503
- case 4: return [2 /*return*/];
504
- }
505
- });
506
- });
507
- }
508
-
509
- function verifyConfig(config, schema) {
510
- var keys = Object.keys(schema);
511
- return keys.reduce(function (accumulator, key) {
512
- var configValue = config[key];
513
- var _a = schema[key], defaultValue = _a.defaultValue, message = _a.message, validate = _a.validate;
514
- if (configValue !== undefined) {
515
- var valid = validate(configValue);
516
- if (valid) {
517
- accumulator.config[key] = configValue;
518
- }
519
- else {
520
- accumulator.config[key] = defaultValue;
521
- accumulator.errors[key] = message;
522
- }
523
- }
524
- else {
525
- // if there is no corresponding configuration, use the default value
526
- // 如果没有传入相应配置 使用默认值
527
- accumulator.config[key] = defaultValue;
528
- }
529
- return accumulator;
530
- }, {
531
- config: {},
532
- errors: {},
533
- });
534
- }
535
-
536
- var Client = /** @class */ (function () {
537
- function Client(_a) {
538
- var _this = this;
539
- var sdk = _a.sdk, baseConfig = _a.config, _b = _a.schema, schema$1 = _b === void 0 ? schema : _b, device = _a.device, notifier = _a.notifier;
540
- var _c = verifyConfig(baseConfig, schema$1), config = _c.config, errors = _c.errors;
541
- // initialization
542
- this._sdk = sdk;
543
- this._config = config;
544
- this._logger = config.logger;
545
- this._device = device;
546
- this._notifier = notifier;
547
- this._extensions = [];
548
- this._hooks = {
549
- created: config.created,
550
- notified: config.notified,
551
- };
552
- this._actions = [];
553
- this._user = config.user;
554
- this._metaData = {};
555
- if (isObject(config.metaData)) {
556
- Object.keys(config.metaData).forEach(function (key) {
557
- _this.addMetaData(key, config.metaData[key]);
558
- });
559
- }
560
- if (Object.keys(errors).length) {
561
- this._logger.warn(getConfigErrorMessage(errors, baseConfig));
562
- }
563
- }
564
- /**
565
- * Load extension
566
- * 加载扩展
567
- *
568
- * @param extension
569
- * @param args
570
- */
571
- Client.prototype.use = function (extension) {
572
- var args = [];
573
- for (var _i = 1; _i < arguments.length; _i++) {
574
- args[_i - 1] = arguments[_i];
575
- }
576
- return loadExtension.apply(void 0, __spreadArray$1([extension, this], args));
577
- };
578
- /**
579
- * Create an event, you will get a data body containing device actions and other information
580
- * 创建事件,将会得到一个含有 device actions 等信息的数据体
581
- *
582
- * @param value
583
- */
584
- Client.prototype.createEvent = function (value) {
585
- var event = createEvent(value, this);
586
- if (isFunction(this._hooks.created)) {
587
- // trigger created hook
588
- return this._hooks.created(event, this);
589
- }
590
- return event;
591
- };
592
- /**
593
- * Used to trigger the reporting interface
594
- * 用于触发上报接口
595
- *
596
- * @param eventLike
597
- * @param beforeNotify
598
- */
599
- Client.prototype.notify = function (eventLike, beforeNotify) {
600
- var event;
601
- if (Boolean(eventLike) && !isEvent(eventLike)) {
602
- event = this.createEvent(eventLike);
603
- }
604
- else {
605
- event = eventLike;
606
- }
607
- if (beforeNotify)
608
- event = beforeNotify(event);
609
- return notify(event, this);
610
- };
611
- /**
612
- * Add an action.
613
- * Once the threshold is reached, the oldest breadcrumbs will be deleted.
614
- * 新增一个动作。
615
- * 一旦达到阈值,最老的 Action 将被删除。
616
- *
617
- * @param message
618
- * @param data
619
- * @param type
620
- * @param timestamp
621
- */
622
- Client.prototype.addAction = function (message, data, type, timestamp) {
623
- var actions = this._actions;
624
- var targetMessage = isString(message) ? message : '';
625
- var targetData = data || {};
626
- var targetType = isString(type) ? type : '';
627
- var action = new Action(targetMessage, targetData, targetType, timestamp);
628
- if (actions.length >= this._config.maxActions) {
629
- actions.shift();
630
- }
631
- actions.push(action);
632
- };
633
- /**
634
- * Get current user information
635
- * 获取当前的用户信息
636
- */
637
- Client.prototype.getUser = function () {
638
- return this._user;
639
- };
640
- /**
641
- * Set current user information
642
- * 设置当前的用户信息
643
- */
644
- Client.prototype.setUser = function (user) {
645
- if (isObject(user) && Object.keys(user).length <= 6) {
646
- this._user = __assign$1(__assign$1({}, this._user), user);
647
- return this.getUser();
648
- }
649
- this._logger.warn(getErrorMessage('setUser should be an object and have up to 6 attributes', user));
650
- return undefined;
651
- };
652
- /**
653
- * Add metaData
654
- * 新增 metaData
655
- *
656
- * @param section
657
- * @param data
658
- */
659
- Client.prototype.addMetaData = function (section, data) {
660
- return addMetaData(this._metaData, section, data);
661
- };
662
- /**
663
- * Get metaData
664
- * 获取 metaData
665
- *
666
- * @param section
667
- */
668
- Client.prototype.getMetaData = function (section) {
669
- return getMetaData(this._metaData, section);
670
- };
671
- /**
672
- * Delete metaData
673
- * 删除 metaData
674
- *
675
- * @param section
676
- */
677
- Client.prototype.deleteMetaData = function (section) {
678
- return deleteMetaData(this._metaData, section);
679
- };
680
- return Client;
681
- }());
682
-
683
- /*! *****************************************************************************
684
- Copyright (c) Microsoft Corporation.
685
-
686
- Permission to use, copy, modify, and/or distribute this software for any
687
- purpose with or without fee is hereby granted.
688
-
689
- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
690
- REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
691
- AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
692
- INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
693
- LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
694
- OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
695
- PERFORMANCE OF THIS SOFTWARE.
696
- ***************************************************************************** */
697
-
698
- function __spreadArray(to, from) {
699
- for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)
700
- to[j] = from[i];
701
- return to;
702
- }
703
-
704
- var prefix = 'Ohbug';
705
- var logger = {
706
- log: function () {
707
- var args = [];
708
- for (var _i = 0; _i < arguments.length; _i++) {
709
- args[_i] = arguments[_i];
710
- }
711
- // eslint-disable-next-line no-console
712
- console.log.apply(console, __spreadArray([prefix], args));
713
- },
714
- info: function () {
715
- var args = [];
716
- for (var _i = 0; _i < arguments.length; _i++) {
717
- args[_i] = arguments[_i];
718
- }
719
- // eslint-disable-next-line no-console
720
- console.info.apply(console, __spreadArray([prefix], args));
721
- },
722
- warn: function () {
723
- var args = [];
724
- for (var _i = 0; _i < arguments.length; _i++) {
725
- args[_i] = arguments[_i];
726
- }
727
- console.warn.apply(console, __spreadArray([prefix], args));
728
- },
729
- error: function () {
730
- var args = [];
731
- for (var _i = 0; _i < arguments.length; _i++) {
732
- args[_i] = arguments[_i];
733
- }
734
- console.error.apply(console, __spreadArray([prefix], args));
735
- },
736
- };
737
-
738
- function error(condition, format) {
739
- var args = [];
740
- for (var _i = 2; _i < arguments.length; _i++) {
741
- args[_i - 2] = arguments[_i];
742
- }
743
- if (format === undefined) {
744
- throw new Error('`Ohbug warning(condition, format, ...args)` requires a warning message argument');
745
- }
746
- if (!condition) {
747
- var argIndex_1 = 0;
748
- // eslint-disable-next-line no-plusplus
749
- var message = format.replace(/%s/g, function () { return args[argIndex_1++]; });
750
- throw new Error("Ohbug " + message);
751
- }
752
- }
753
- function warning(condition, format) {
754
- var args = [];
755
- for (var _i = 2; _i < arguments.length; _i++) {
756
- args[_i - 2] = arguments[_i];
757
- }
758
- try {
759
- if (process.env.NODE_ENV !== 'production') {
760
- if (format === undefined) {
761
- throw new Error('`Ohbug warning(condition, format, ...args)` requires a warning message argument');
762
- }
763
- if (!condition) {
764
- var argIndex_2 = 0;
765
- // eslint-disable-next-line no-plusplus
766
- var message = format.replace(/%s/g, function () { return args[argIndex_2++]; });
767
- logger.warn(message);
768
- }
769
- }
770
- // eslint-disable-next-line no-empty
771
- }
772
- catch (e) { }
773
- }
774
-
775
- var fallbackGlobalObject = {};
776
- function getGlobal() {
777
- return (typeof window !== 'undefined'
778
- ? window
779
- : typeof global !== 'undefined'
780
- ? global
781
- : typeof self !== 'undefined'
782
- ? self
783
- : fallbackGlobalObject);
784
- }
785
- function getOhbugObject() {
786
- var global = getGlobal();
787
- error(Boolean(global.__OHBUG__), 'Failed to get `OhbugObject`, please confirm if `Ohbug.init`');
788
- return global.__OHBUG__;
789
- }
790
-
791
- function replace(source, name, behavior) {
792
- if (!(name in source)) {
793
- return;
794
- }
795
- var original = source[name];
796
- var wrapped = behavior(original);
797
- // eslint-disable-next-line no-param-reassign
798
- source[name] = wrapped;
799
- return original;
800
- }
801
- function parseUrl(url) {
802
- if (typeof url !== 'string') {
803
- return {};
804
- }
805
- // eslint-disable-next-line
806
- var match = url.match(/^(([^:/?#]+):)?(\/\/([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/);
807
- if (!match) {
808
- return {};
809
- }
810
- var query = match[6] || '';
811
- var fragment = match[8] || '';
812
- return {
813
- host: match[4],
814
- path: match[5],
815
- protocol: match[2],
816
- relative: match[5] + query + fragment,
817
- };
818
- }
819
-
820
- function getParentNode(node, path) {
821
- if (node.parentNode) {
822
- path.push(node.parentNode);
823
- getParentNode(node.parentNode, path);
824
- }
825
- }
826
- function getPath(node) {
827
- var path = [];
828
- path.push(node);
829
- getParentNode(node, path);
830
- return path;
831
- }
832
- var getSelector = function (event) {
833
- var immutableTarget = (event.target || event.srcElement);
834
- var target = (event.target || event.srcElement);
835
- // 获取出错元素在同级元素的 index
836
- // 储存错误元素前元素
837
- var elements = [];
838
- for (var i = 0; target &&
839
- target.nodeType === Node.ELEMENT_NODE &&
840
- target.nodeType !== Node.DOCUMENT_TYPE_NODE; target = target.previousSibling) {
841
- if (i)
842
- elements.push(target);
843
- i += 1;
844
- }
845
- // error.path 只有 chrome 实现,需要 polyfill
846
- var path =
847
- // @ts-ignore
848
- typeof event.path === 'undefined'
849
- ? getPath(event.target)
850
- : // @ts-ignore
851
- event.path;
852
- var outerHTML = immutableTarget.outerHTML;
853
- return path
854
- .reverse()
855
- .map(function (node) {
856
- return (node.localName || '') +
857
- (node.id ? "#" + node.id : '') +
858
- (node.className ? "." + node.className : '') +
859
- (node.outerHTML === outerHTML ? ":nth-child(" + elements.length + ")" : '');
860
- })
861
- .filter(function (v) { return Boolean(v); })
862
- .join(' > ');
863
- };
864
-
865
- var getDevice = function () {
866
- var device = {};
867
- if (navigator) {
868
- var language = navigator.language, userAgent = navigator.userAgent;
869
- device.language = language;
870
- device.userAgent = userAgent;
871
- }
872
- if (document) {
873
- var title = document.title;
874
- device.title = title;
875
- }
876
- if (window.location) {
877
- var url = window.location.href;
878
- device.url = url;
879
- }
880
- return device;
881
- };
882
-
883
- var version = '1.0.16';
884
-
885
- var _a, _b;
886
- var global$8 = getGlobal();
887
- var lastHref;
888
- function handleUrlChange(from, to) {
889
- var _a;
890
- var client = getOhbugObject().client;
891
- var parsedHref = parseUrl((_a = global$8 === null || global$8 === void 0 ? void 0 : global$8.location) === null || _a === void 0 ? void 0 : _a.href);
892
- var parsedFrom = parseUrl(from);
893
- var parsedTo = parseUrl(to);
894
- if (!parsedFrom.path) {
895
- parsedFrom = parsedHref;
896
- }
897
- lastHref = to;
898
- var targetFrom = from;
899
- var targetTo = to;
900
- if (parsedHref.protocol === parsedTo.protocol &&
901
- parsedHref.host === parsedTo.host) {
902
- targetTo = parsedTo.relative;
903
- }
904
- if (parsedHref.protocol === parsedFrom.protocol &&
905
- parsedHref.host === parsedFrom.host) {
906
- targetFrom = parsedFrom.relative;
907
- }
908
- if (targetFrom === targetTo)
909
- return;
910
- client.addAction("navigation to " + to, {
911
- from: from,
912
- to: to,
913
- }, 'navigation');
914
- }
915
- function historyReplacement(original) {
916
- return function call(data, title, url) {
917
- if (url) {
918
- handleUrlChange(lastHref, String(url));
919
- }
920
- return original.apply(this, [data, title, url]);
921
- };
922
- }
923
- var historyOriginal = {
924
- pushState: (_a = global$8 === null || global$8 === void 0 ? void 0 : global$8.history) === null || _a === void 0 ? void 0 : _a.pushState,
925
- replaceState: (_b = global$8 === null || global$8 === void 0 ? void 0 : global$8.history) === null || _b === void 0 ? void 0 : _b.replaceState,
926
- onpopstate: global$8 === null || global$8 === void 0 ? void 0 : global$8.onpopstate,
927
- };
928
- function historyListener() {
929
- historyOriginal.pushState = replace(global$8 === null || global$8 === void 0 ? void 0 : global$8.history, 'pushState', historyReplacement);
930
- historyOriginal.replaceState = replace(global$8 === null || global$8 === void 0 ? void 0 : global$8.history, 'replaceState', historyReplacement);
931
- historyOriginal.onpopstate = replace(global$8, 'onpopstate', function () {
932
- var _a;
933
- var current = (_a = global$8 === null || global$8 === void 0 ? void 0 : global$8.location) === null || _a === void 0 ? void 0 : _a.href;
934
- handleUrlChange(lastHref, current);
935
- });
936
- }
937
- function hashListener(e) {
938
- var oldURL = e.oldURL, newURL = e.newURL;
939
- handleUrlChange(oldURL, newURL);
940
- }
941
- function captureUrlChange() {
942
- var _a;
943
- // history
944
- historyListener();
945
- // hash
946
- (_a = global$8 === null || global$8 === void 0 ? void 0 : global$8.addEventListener) === null || _a === void 0 ? void 0 : _a.call(global$8, 'hashchange', hashListener, true);
947
- }
948
- function removeCaptureUrlChange() {
949
- var _a;
950
- // history
951
- global$8.history.pushState = historyOriginal.pushState;
952
- global$8.history.replaceState = historyOriginal.replaceState;
953
- global$8.onpopstate = historyOriginal.onpopstate;
954
- // hash
955
- (_a = global$8 === null || global$8 === void 0 ? void 0 : global$8.removeEventListener) === null || _a === void 0 ? void 0 : _a.call(global$8, 'hashchange', hashListener, true);
956
- }
957
-
958
- var global$7 = getGlobal();
959
- function listener$2(e) {
960
- if (e.target) {
961
- var client = getOhbugObject().client;
962
- var _a = e.target, tagName = _a.tagName, id = _a.id, className = _a.className, name_1 = _a.name, src = _a.src, outerHTML = _a.outerHTML, nodeType = _a.nodeType;
963
- var selector = getSelector(e);
964
- client.addAction('click node', {
965
- tagName: tagName,
966
- id: id,
967
- className: className,
968
- name: name_1,
969
- src: src,
970
- outerHTML: outerHTML,
971
- nodeType: nodeType,
972
- selector: selector,
973
- }, 'click');
974
- }
975
- }
976
- function captureClick() {
977
- var _a, _b;
978
- (_b = (_a = global$7 === null || global$7 === void 0 ? void 0 : global$7.document) === null || _a === void 0 ? void 0 : _a.addEventListener) === null || _b === void 0 ? void 0 : _b.call(_a, 'click', listener$2);
979
- }
980
- function removeCaptureClick() {
981
- var _a, _b;
982
- (_b = (_a = global$7 === null || global$7 === void 0 ? void 0 : global$7.document) === null || _a === void 0 ? void 0 : _a.removeEventListener) === null || _b === void 0 ? void 0 : _b.call(_a, 'click', listener$2);
983
- }
984
-
985
- /*! *****************************************************************************
986
- Copyright (c) Microsoft Corporation.
987
-
988
- Permission to use, copy, modify, and/or distribute this software for any
989
- purpose with or without fee is hereby granted.
990
-
991
- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
992
- REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
993
- AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
994
- INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
995
- LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
996
- OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
997
- PERFORMANCE OF THIS SOFTWARE.
998
- ***************************************************************************** */
999
-
1000
- var __assign = function() {
1001
- __assign = Object.assign || function __assign(t) {
1002
- for (var s, i = 1, n = arguments.length; i < n; i++) {
1003
- s = arguments[i];
1004
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
1005
- }
1006
- return t;
1007
- };
1008
- return __assign.apply(this, arguments);
1009
- };
1010
-
1011
- /* eslint-disable no-console */
1012
- var levels = ['log', 'info', 'warn', 'error'];
1013
- var consoleOriginal = Object.keys(levels).reduce(function (acc, cur) {
1014
- var _a;
1015
- return (__assign(__assign({}, acc), (_a = {}, _a[cur] = console[cur], _a)));
1016
- }, {
1017
- log: null,
1018
- info: null,
1019
- warn: null,
1020
- error: null,
1021
- });
1022
- function captureConsole() {
1023
- var client = getOhbugObject().client;
1024
- levels.forEach(function (level) {
1025
- consoleOriginal[level] = replace(console, level, function (origin) {
1026
- return function call() {
1027
- var args = [];
1028
- for (var _i = 0; _i < arguments.length; _i++) {
1029
- args[_i] = arguments[_i];
1030
- }
1031
- var isOhbugConsole = args.some(function (arg) { return typeof arg === 'string' && arg.includes('Ohbug'); });
1032
- if (!isOhbugConsole) {
1033
- client.addAction("console." + level, args, 'console');
1034
- }
1035
- return origin.apply(this, args);
1036
- };
1037
- });
1038
- });
1039
- }
1040
- function removeCaptureConsole() {
1041
- if (console) {
1042
- levels.forEach(function (level) {
1043
- console[level] = consoleOriginal[level];
1044
- });
1045
- }
1046
- }
1047
-
1048
- // error
1049
- var UNCAUGHT_ERROR$1 = 'uncaughtError'; // 意料之外的错误
1050
- var RESOURCE_ERROR$1 = 'resourceError'; // 资源加载错误
1051
- var UNHANDLEDREJECTION_ERROR$1 = 'unhandledrejectionError'; // unhandledrejection 错误,可能包含 Promise, react render 等错误
1052
- var AJAX_ERROR$3 = 'ajaxError'; // ajax 错误
1053
- var FETCH_ERROR$3 = 'fetchError'; // fetch 错误
1054
- var WEBSOCKET_ERROR$3 = 'websocketError'; // websocket 错误
1055
- var UNKNOWN_ERROR$1 = 'unknownError'; // 未知错误
1056
- // message
1057
- var MESSAGE = 'message'; // 主动上报的信息
1058
- // view
1059
- var VIEW = 'view'; // 用于计算 PV/UV
1060
-
1061
- var types = /*#__PURE__*/Object.freeze({
1062
- __proto__: null,
1063
- UNCAUGHT_ERROR: UNCAUGHT_ERROR$1,
1064
- RESOURCE_ERROR: RESOURCE_ERROR$1,
1065
- UNHANDLEDREJECTION_ERROR: UNHANDLEDREJECTION_ERROR$1,
1066
- AJAX_ERROR: AJAX_ERROR$3,
1067
- FETCH_ERROR: FETCH_ERROR$3,
1068
- WEBSOCKET_ERROR: WEBSOCKET_ERROR$3,
1069
- UNKNOWN_ERROR: UNKNOWN_ERROR$1,
1070
- MESSAGE: MESSAGE,
1071
- VIEW: VIEW
1072
- });
1073
-
1074
- var UNCAUGHT_ERROR = UNCAUGHT_ERROR$1;
1075
- function uncaughtErrorHandler(error) {
1076
- var message = error.message, filename = error.filename, lineno = error.lineno, colno = error.colno, _a = error.error, stack = _a.stack, name = _a.name;
1077
- var detail = {
1078
- name: name,
1079
- message: message,
1080
- filename: filename,
1081
- lineno: lineno,
1082
- colno: colno,
1083
- stack: stack,
1084
- };
1085
- var client = getOhbugObject().client;
1086
- var event = client.createEvent({
1087
- category: 'error',
1088
- type: UNCAUGHT_ERROR,
1089
- detail: detail,
1090
- });
1091
- client.notify(event);
1092
- }
1093
-
1094
- var RESOURCE_ERROR = RESOURCE_ERROR$1;
1095
- function resourceErrorHandler(error) {
1096
- var target = (error.target || error.srcElement);
1097
- var outerHTML = target.outerHTML;
1098
- var selector = getSelector(error);
1099
- var detail = {
1100
- outerHTML: outerHTML,
1101
- src: target && target.src,
1102
- tagName: target && target.tagName,
1103
- id: target && target.id,
1104
- className: target && target.className,
1105
- name: target && target.name,
1106
- // https://developer.mozilla.org/zh-CN/docs/Web/API/Node/nodeType
1107
- nodeType: target && target.nodeType,
1108
- selector: selector,
1109
- };
1110
- var client = getOhbugObject().client;
1111
- var event = client.createEvent({
1112
- category: 'error',
1113
- type: RESOURCE_ERROR,
1114
- detail: detail,
1115
- });
1116
- client.notify(event);
1117
- }
1118
-
1119
- var UNHANDLEDREJECTION_ERROR = UNHANDLEDREJECTION_ERROR$1;
1120
- function unhandledrejectionErrorHandler(error) {
1121
- var detail = {
1122
- message: error.reason.message || error.reason,
1123
- stack: error.reason.stack,
1124
- };
1125
- var client = getOhbugObject().client;
1126
- var event = client.createEvent({
1127
- category: 'error',
1128
- type: UNHANDLEDREJECTION_ERROR,
1129
- detail: detail,
1130
- });
1131
- client.notify(event);
1132
- }
1133
-
1134
- var UNKNOWN_ERROR = UNKNOWN_ERROR$1;
1135
- function unknownErrorHandler(error) {
1136
- var detail = error.message
1137
- ? error
1138
- : {
1139
- message: error,
1140
- };
1141
- var client = getOhbugObject().client;
1142
- var event = client.createEvent({
1143
- category: 'error',
1144
- type: UNKNOWN_ERROR,
1145
- detail: detail,
1146
- });
1147
- client.notify(event);
1148
- }
1149
-
1150
- var AJAX_ERROR$2 = AJAX_ERROR$3;
1151
- function ajaxErrorHandler(detail) {
1152
- var client = getOhbugObject().client;
1153
- var event = client.createEvent({
1154
- category: 'error',
1155
- type: AJAX_ERROR$2,
1156
- detail: detail,
1157
- });
1158
- client.notify(event);
1159
- }
1160
-
1161
- var FETCH_ERROR$2 = FETCH_ERROR$3;
1162
- function fetchErrorHandler(detail) {
1163
- var client = getOhbugObject().client;
1164
- var event = client.createEvent({
1165
- category: 'error',
1166
- type: FETCH_ERROR$2,
1167
- detail: detail,
1168
- });
1169
- client.notify(event);
1170
- }
1171
-
1172
- var WEBSOCKET_ERROR$2 = WEBSOCKET_ERROR$3;
1173
- function websocketErrorHandler(detail) {
1174
- var client = getOhbugObject().client;
1175
- var event = client.createEvent({
1176
- category: 'error',
1177
- type: WEBSOCKET_ERROR$2,
1178
- detail: detail,
1179
- });
1180
- client.notify(event);
1181
- }
1182
-
1183
- function scriptDispatcher(e) {
1184
- try {
1185
- var type = e.type;
1186
- if (type === 'error') {
1187
- var targetEvent = e;
1188
- var message = targetEvent.message, error = targetEvent.error;
1189
- var immutableTarget = e.target || e.srcElement;
1190
- if (message && error) {
1191
- uncaughtErrorHandler(targetEvent);
1192
- }
1193
- else if (immutableTarget) {
1194
- resourceErrorHandler(targetEvent);
1195
- }
1196
- }
1197
- else if (type === 'unhandledrejection') {
1198
- unhandledrejectionErrorHandler(e);
1199
- }
1200
- else {
1201
- unknownErrorHandler(e);
1202
- }
1203
- }
1204
- catch (error) {
1205
- unknownErrorHandler(error);
1206
- }
1207
- }
1208
-
1209
- var AJAX_ERROR$1 = AJAX_ERROR$3, FETCH_ERROR$1 = FETCH_ERROR$3, WEBSOCKET_ERROR$1 = WEBSOCKET_ERROR$3;
1210
- function networkDispatcher(type, detail) {
1211
- try {
1212
- switch (type) {
1213
- case AJAX_ERROR$1:
1214
- ajaxErrorHandler(detail);
1215
- break;
1216
- case FETCH_ERROR$1:
1217
- fetchErrorHandler(detail);
1218
- break;
1219
- case WEBSOCKET_ERROR$1:
1220
- websocketErrorHandler(detail);
1221
- break;
1222
- default:
1223
- break;
1224
- }
1225
- }
1226
- catch (error) {
1227
- unknownErrorHandler(error);
1228
- }
1229
- }
1230
-
1231
- var global$6 = getGlobal();
1232
- var AJAX_ERROR = AJAX_ERROR$3;
1233
- var access$1 = 'XMLHttpRequest' in global$6;
1234
- var xhrOriginal = access$1
1235
- ? {
1236
- open: XMLHttpRequest.prototype.open,
1237
- send: XMLHttpRequest.prototype.send,
1238
- }
1239
- : {};
1240
- /**
1241
- * capture AJAX_ERROR
1242
- */
1243
- function captureAjaxError() {
1244
- warning(access$1, 'Binding `AJAX` monitoring failed, the current environment did not find the object `XMLHttpRequest`');
1245
- if (!access$1)
1246
- return;
1247
- var client = getOhbugObject().client;
1248
- var desc = {
1249
- method: '',
1250
- url: '',
1251
- };
1252
- var xhrProto = XMLHttpRequest === null || XMLHttpRequest === void 0 ? void 0 : XMLHttpRequest.prototype;
1253
- xhrOriginal.open = replace(xhrProto, 'open', function (origin) {
1254
- return function call() {
1255
- var args = [];
1256
- for (var _i = 0; _i < arguments.length; _i++) {
1257
- args[_i] = arguments[_i];
1258
- }
1259
- var method = args[0], url = args[1];
1260
- desc.method = method;
1261
- desc.url = url;
1262
- return origin.apply(this, args);
1263
- };
1264
- });
1265
- xhrOriginal.send = replace(xhrProto, 'send', function (origin) {
1266
- return function call() {
1267
- var args = [];
1268
- for (var _i = 0; _i < arguments.length; _i++) {
1269
- args[_i] = arguments[_i];
1270
- }
1271
- this.addEventListener('readystatechange', function handle() {
1272
- if (this.readyState === 4) {
1273
- if (desc.url !== client._config.endpoint) {
1274
- var detail = {
1275
- req: {
1276
- url: desc.url,
1277
- method: desc.method,
1278
- data: args[0] || {},
1279
- },
1280
- res: {
1281
- status: this.status,
1282
- statusText: this.statusText,
1283
- response: this.response,
1284
- },
1285
- };
1286
- client.addAction('ajax', detail, 'ajax');
1287
- if (!this.status || this.status >= 400) {
1288
- networkDispatcher(AJAX_ERROR, detail);
1289
- }
1290
- }
1291
- }
1292
- });
1293
- return origin.apply(this, args);
1294
- };
1295
- });
1296
- }
1297
- function removeCaptureAjaxError() {
1298
- if (access$1 && xhrOriginal.open && xhrOriginal.send) {
1299
- var xhrProto = XMLHttpRequest === null || XMLHttpRequest === void 0 ? void 0 : XMLHttpRequest.prototype;
1300
- xhrProto.open = xhrOriginal.open;
1301
- xhrProto.send = xhrOriginal.send;
1302
- }
1303
- }
1304
-
1305
- var global$5 = getGlobal();
1306
- var FETCH_ERROR = FETCH_ERROR$3;
1307
- var access = 'fetch' in global$5;
1308
- var fetchOriginal = access ? global$5.fetch : null;
1309
- /**
1310
- * capture FETCH_ERROR
1311
- */
1312
- function captureFetchError() {
1313
- warning(access, 'Binding `fetch` monitoring failed, the current environment did not find the object `fetch`');
1314
- if (!access)
1315
- return;
1316
- var client = getOhbugObject().client;
1317
- fetchOriginal = replace(global$5, 'fetch', function (origin) {
1318
- return function call() {
1319
- var args = [];
1320
- for (var _i = 0; _i < arguments.length; _i++) {
1321
- args[_i] = arguments[_i];
1322
- }
1323
- return origin
1324
- .apply(this, args)
1325
- .then(function (res) {
1326
- var url = args[0], conf = args[1];
1327
- var detail = {
1328
- req: {
1329
- url: url,
1330
- method: conf && conf.method,
1331
- data: (conf && conf.body) || {},
1332
- },
1333
- res: {
1334
- status: res.status,
1335
- statusText: res.statusText,
1336
- },
1337
- };
1338
- client.addAction('fetch', detail, 'fetch');
1339
- if (!res.status || res.status >= 400) {
1340
- networkDispatcher(FETCH_ERROR, detail);
1341
- }
1342
- return res;
1343
- })
1344
- .catch(function (err) {
1345
- networkDispatcher(FETCH_ERROR, err);
1346
- });
1347
- };
1348
- });
1349
- }
1350
- function removeCaptureFetchError() {
1351
- if (access && fetchOriginal) {
1352
- global$5.fetch = fetchOriginal;
1353
- }
1354
- }
1355
-
1356
- var global$4 = getGlobal();
1357
- var WEBSOCKET_ERROR = WEBSOCKET_ERROR$3;
1358
- /**
1359
- * capture WEBSOCKET_ERROR
1360
- */
1361
- function captureWebSocketError() {
1362
- warning('WebSocket' in global$4, 'Binding `WebSocket` monitoring failed, the current environment did not find the object `WebSocket`');
1363
- if (!('WebSocket' in global$4))
1364
- return;
1365
- var wsProto = WebSocket === null || WebSocket === void 0 ? void 0 : WebSocket.prototype;
1366
- var backup = Object.getOwnPropertyDescriptor(wsProto, 'onerror');
1367
- Object.defineProperty(wsProto, 'onerror', {
1368
- set: function () {
1369
- var _a;
1370
- // eslint-disable-next-line prefer-rest-params
1371
- var arg = arguments[0];
1372
- (_a = backup === null || backup === void 0 ? void 0 : backup.set) === null || _a === void 0 ? void 0 : _a.call(this, function call(e) {
1373
- var _a = e.target, url = _a.url, readyState = _a.readyState, protocol = _a.protocol, extensions = _a.extensions, binaryType = _a.binaryType, bufferedAmount = _a.bufferedAmount, timeStamp = e.timeStamp;
1374
- var detail = {
1375
- url: url,
1376
- timeStamp: timeStamp,
1377
- readyState: readyState,
1378
- protocol: protocol,
1379
- extensions: extensions,
1380
- binaryType: binaryType,
1381
- bufferedAmount: bufferedAmount,
1382
- };
1383
- networkDispatcher(WEBSOCKET_ERROR, detail);
1384
- // eslint-disable-next-line prefer-rest-params
1385
- arg.apply(this, arguments);
1386
- });
1387
- },
1388
- });
1389
- }
1390
-
1391
- var global$3 = getGlobal();
1392
- function listener$1(e) {
1393
- scriptDispatcher(e);
1394
- }
1395
- /**
1396
- * capture UNCAUGHT_ERROR RESOURCE_ERROR
1397
- */
1398
- function captureUncaughtError() {
1399
- var _a;
1400
- (_a = global$3 === null || global$3 === void 0 ? void 0 : global$3.addEventListener) === null || _a === void 0 ? void 0 : _a.call(global$3, 'error', listener$1, true);
1401
- }
1402
- function removeCaptureUncaughtError() {
1403
- var _a;
1404
- (_a = global$3 === null || global$3 === void 0 ? void 0 : global$3.removeEventListener) === null || _a === void 0 ? void 0 : _a.call(global$3, 'error', listener$1, true);
1405
- }
1406
-
1407
- var global$2 = getGlobal();
1408
- function listener(e) {
1409
- scriptDispatcher(e);
1410
- }
1411
- /**
1412
- * capture UNHANDLEDREJECTION_ERROR
1413
- */
1414
- function captureUnhandledrejectionError() {
1415
- var _a;
1416
- (_a = global$2 === null || global$2 === void 0 ? void 0 : global$2.addEventListener) === null || _a === void 0 ? void 0 : _a.call(global$2, 'unhandledrejection', listener, true);
1417
- }
1418
- function removeCaptureUnhandledrejectionError() {
1419
- var _a;
1420
- (_a = global$2 === null || global$2 === void 0 ? void 0 : global$2.removeEventListener) === null || _a === void 0 ? void 0 : _a.call(global$2, 'unhandledrejection', listener, true);
1421
- }
1422
-
1423
- function captureAction() {
1424
- captureUrlChange();
1425
- captureClick();
1426
- }
1427
- function removeCaptureAction() {
1428
- removeCaptureUrlChange();
1429
- removeCaptureClick();
1430
- }
1431
- function captureNetwork() {
1432
- captureAjaxError();
1433
- captureFetchError();
1434
- captureWebSocketError();
1435
- }
1436
- function removeCaptureNetwork() {
1437
- removeCaptureAjaxError();
1438
- removeCaptureFetchError();
1439
- }
1440
- function captureScript() {
1441
- var global = getGlobal();
1442
- warning(Boolean(global.addEventListener), 'Binding script monitoring failed, the current environment did not find the object `addEventListener`');
1443
- if (!global.addEventListener)
1444
- return;
1445
- captureUncaughtError();
1446
- captureUnhandledrejectionError();
1447
- }
1448
- function removeCaptureScript() {
1449
- removeCaptureUncaughtError();
1450
- removeCaptureUnhandledrejectionError();
1451
- }
1452
- function handleCapture() {
1453
- captureScript();
1454
- captureNetwork();
1455
- captureAction();
1456
- captureConsole();
1457
- }
1458
-
1459
- var global$1 = getGlobal();
1460
- function handleDestroy() {
1461
- var _a;
1462
- (_a = global$1 === null || global$1 === void 0 ? void 0 : global$1.addEventListener) === null || _a === void 0 ? void 0 : _a.call(global$1, 'unload', function () {
1463
- removeCaptureScript();
1464
- removeCaptureNetwork();
1465
- removeCaptureAction();
1466
- removeCaptureConsole();
1467
- }, true);
1468
- }
1469
-
1470
- var extension = createExtension({
1471
- name: 'OhbugBrowser',
1472
- init: function () {
1473
- handleCapture();
1474
- handleDestroy();
1475
- },
1476
- });
1477
-
1478
- function notifier(event) {
1479
- var client = getOhbugObject().client;
1480
- var url = client._config.endpoint;
1481
- return new Promise(function (resolve, reject) {
1482
- var json = JSON.stringify(event);
1483
- if (navigator.sendBeacon) {
1484
- var result = navigator.sendBeacon(url, json);
1485
- resolve(result);
1486
- }
1487
- else {
1488
- var xhr_1 = new XMLHttpRequest();
1489
- xhr_1.onreadystatechange = function () {
1490
- if (xhr_1.readyState === XMLHttpRequest.DONE) {
1491
- if (xhr_1.status >= 200 && xhr_1.status < 300)
1492
- return resolve(xhr_1.response);
1493
- reject(xhr_1);
1494
- }
1495
- };
1496
- xhr_1.open('POST', url);
1497
- xhr_1.setRequestHeader('Content-Type', 'application/json;charset=UTF-8');
1498
- xhr_1.send(json);
1499
- }
1500
- });
1501
- }
1502
-
1503
- function createClient(config) {
1504
- var global = getGlobal();
1505
- var sdk = {
1506
- platform: 'ohbug-browser',
1507
- version: version,
1508
- };
1509
- var client = new Client({ sdk: sdk, config: config, device: getDevice, notifier: notifier });
1510
- global.__OHBUG__ = { client: client };
1511
- client.use(extension);
1512
- // eslint-disable-next-line no-console
1513
- console.log("%c @ohbug/browser %c Detected Ohbug v" + version + " %c", 'background:#333; padding: 2px 1px; color: #FFF', 'background:#FF6F61; padding: 2px 1px; color: #FFF', 'background:transparent');
1514
- return client;
1515
- }
1516
- var BrowserClient = {
1517
- _client: null,
1518
- init: function (config) {
1519
- var _a;
1520
- if (BrowserClient._client) {
1521
- (_a = BrowserClient._client._logger) === null || _a === void 0 ? void 0 : _a.log('init() has been called. Ignored.');
1522
- return BrowserClient._client;
1523
- }
1524
- BrowserClient._client = createClient(config);
1525
- return BrowserClient._client;
1526
- },
1527
- };
1528
-
1529
- exports.Client = BrowserClient;
1530
- exports.default = BrowserClient;
1531
- exports.types = types;
1532
-
1533
- Object.defineProperty(exports, '__esModule', { value: true });
1534
-
1535
- })));
1
+ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).Ohbug={})}(this,(function(e){"use strict";
2
+ /*! *****************************************************************************
3
+ Copyright (c) Microsoft Corporation.
4
+
5
+ Permission to use, copy, modify, and/or distribute this software for any
6
+ purpose with or without fee is hereby granted.
7
+
8
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
9
+ REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
10
+ AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
11
+ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
12
+ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
13
+ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
14
+ PERFORMANCE OF THIS SOFTWARE.
15
+ ***************************************************************************** */var t=function(){return(t=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e}).apply(this,arguments)};function n(e,t){for(var n=0,r=t.length,o=e.length;n<r;n++,o++)e[o]=t[n];return e}
16
+ /*! *****************************************************************************
17
+ Copyright (c) Microsoft Corporation.
18
+
19
+ Permission to use, copy, modify, and/or distribute this software for any
20
+ purpose with or without fee is hereby granted.
21
+
22
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
23
+ REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
24
+ AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
25
+ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
26
+ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
27
+ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
28
+ PERFORMANCE OF THIS SOFTWARE.
29
+ ***************************************************************************** */function r(e,t){for(var n=0,r=t.length,o=e.length;n<r;n++,o++)e[o]=t[n];return e}function o(e){return"string"==typeof e}function i(e){return"function"==typeof e}function a(e){return"[object Object]"===Object.prototype.toString.call(e)}var u={apiKey:{defaultValue:void 0,message:"is required",validate:function(e){return Boolean(e)&&o(e)}},appVersion:{defaultValue:void 0,message:"should be a string",validate:function(e){return void 0===e||o(e)}},appType:{defaultValue:void 0,message:"should be a string",validate:function(e){return void 0===e||o(e)}},releaseStage:{defaultValue:"production",message:"should be a string",validate:function(e){return void 0===e||o(e)}},endpoint:{defaultValue:"http://localhost:6660",message:"should be a string",validate:function(e){return void 0===e||o(e)}},maxActions:{defaultValue:30,message:"should be a number between 0 and 100",validate:function(e){return void 0===e||function(e){return"number"==typeof e&&parseInt(""+e,10)===e}(e)&&e>=1&&e<=100}},created:{defaultValue:function(e){return e},message:"should be a function",validate:function(e){return void 0===e||i(e)}},notified:{defaultValue:function(){},message:"should be a function",validate:function(e){return void 0===e||i(e)}},logger:{defaultValue:{log:function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];console.log.apply(console,r(["Ohbug"],e))},info:function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];console.info.apply(console,r(["Ohbug"],e))},warn:function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];console.warn.apply(console,r(["Ohbug"],e))},error:function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];console.error.apply(console,r(["Ohbug"],e))}},message:"should be null or an object with methods { log, info, warn, error }",validate:function(e){return void 0===e||e&&["log","info","warn","error"].reduce((function(t,n){return t&&"function"==typeof e[n]}),!0)}},user:{defaultValue:void 0,message:"should be an object and have up to 6 attributes",validate:function(e){return void 0===e||a(e)&&Object.keys(e).length<=6}},metaData:{defaultValue:void 0,message:"should be an object",validate:function(e){return void 0===e||a(e)}}};function c(e,t){for(var r,o=[],a=2;a<arguments.length;a++)o[a-2]=arguments[a];var u=null===(r=e.init)||void 0===r?void 0:r.call.apply(r,n([e,t],o));return t._extensions.push(e),t._hooks.created=function(e,t){var r,o,a=n([t._config.created],t._extensions.filter((function(e){return i(e.created)})).map((function(e){return e.created})));return 0===a.length?function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return e}(e,t):1===a.length?null===(r=a[0])||void 0===r?void 0:r.call(a,e,t):null===(o=a.reduce((function(e,n){return function(r){return n(e(r,t),t)}})))||void 0===o?void 0:o(e,t)},t._hooks.notified=function(e,t){return n([t._config.notified],t._extensions.filter((function(e){return i(e.notified)})).map((function(e){return e.notified}))).forEach((function(n){return null==n?void 0:n(e,t)}))},u||t}var s=function(e,t,n,r){this.type=n,this.timestamp=r||(new Date).toISOString(),this.message=e,this.data=t};function l(e,t){return new Error("Invalid data\n- "+e+", got "+JSON.stringify(t))}function f(e,t,n){t&&(e[t]=n)}function d(e,t){if(e[t])return e[t]}function p(e,t){if(e[t])return delete e[t]}var v=function(){function e(e,t){var n=e.apiKey,r=e.appVersion,o=e.appType,i=e.releaseStage,a=e.timestamp,u=e.category,c=e.type,s=e.sdk,l=e.detail,f=e.device,d=e.user,p=e.actions,v=e.metaData;this.apiKey=n,this.appVersion=r,this.appType=o,this.releaseStage=i,this.timestamp=a,this.category=u,this.type=c,this.sdk=s,this.detail=l,this.device=f,this.user=d,this.actions=p,this.metaData=v,this._client=t}return Object.defineProperty(e.prototype,"_isOhbugEvent",{get:function(){return!0},enumerable:!1,configurable:!0}),e.prototype.addAction=function(e,t,n,r){var i,a,u=this.actions,c=o(e)?e:"",l=t||{},f=o(n)?n:"",d=new s(c,l,f,r);u.length>=(null!==(a=null===(i=this._client)||void 0===i?void 0:i._config.maxActions)&&void 0!==a?a:30)&&u.shift(),u.push(d)},e.prototype.getUser=function(){return this.user},e.prototype.setUser=function(e){var n;if(a(e)&&Object.keys(e).length<=6)return this.user=t(t({},this.user),e),this.getUser();null===(n=this._client)||void 0===n||n._logger.warn(l("setUser should be an object and have up to 6 attributes",e))},e.prototype.addMetaData=function(e,t){return f(this.metaData,e,t)},e.prototype.getMetaData=function(e){return d(this.metaData,e)},e.prototype.deleteMetaData=function(e){return p(this.metaData,e)},e.prototype.toJSON=function(){var e=this;return{apiKey:e.apiKey,appVersion:e.appVersion,appType:e.appType,timestamp:e.timestamp,category:e.category,type:e.type,sdk:e.sdk,device:e.device,detail:e.detail,user:e.user,actions:e.actions,metaData:e.metaData,releaseStage:e.releaseStage}},e}();var h=function(){function e(e){var t=this,n=e.sdk,r=e.config,o=e.schema,i=void 0===o?u:o,c=e.device,s=e.notifier,l=function(e,t){return Object.keys(t).reduce((function(n,r){var o=e[r],i=t[r],a=i.defaultValue,u=i.message,c=i.validate;return void 0!==o?c(o)?n.config[r]=o:(n.config[r]=a,n.errors[r]=u):n.config[r]=a,n}),{config:{},errors:{}})}(r,i),f=l.config,d=l.errors;this._sdk=n,this._config=f,this._logger=f.logger,this._device=c,this._notifier=s,this._extensions=[],this._hooks={created:f.created,notified:f.notified},this._actions=[],this._user=f.user,this._metaData={},a(f.metaData)&&Object.keys(f.metaData).forEach((function(e){t.addMetaData(e,f.metaData[e])})),Object.keys(d).length&&this._logger.warn(function(e,t){return new Error("Invalid configuration\n"+Object.keys(e).map((function(n){return"- "+n+" "+e[n]+", got "+JSON.stringify(t[n])})).join("\n")+"\n ")}(d,r))}return e.prototype.use=function(e){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];return c.apply(void 0,n([e,this],t))},e.prototype.createEvent=function(e){var t,n,r,o,u,c,s,l,f,d,p,h,g=(t=e,s=(c=(n=this)._config).apiKey,l=c.appVersion,f=c.appType,d=c.releaseStage,p=(new Date).toISOString(),h=n._device(n),a(t)&&Object.prototype.hasOwnProperty.call(t,"type")&&Object.prototype.hasOwnProperty.call(t,"detail")?(r=t.category||"error",o=t.type,u=t.detail):(r="error",o="unknownError",u=t),new v({apiKey:s,appVersion:l,appType:f,timestamp:p,category:r,type:o,sdk:n._sdk,device:h,user:n._user,detail:u,actions:n._actions,metaData:n._metaData,releaseStage:d},n));return i(this._hooks.created)?this._hooks.created(g,this):g},e.prototype.notify=function(e,t){var n;return n=Boolean(e)&&!function(e){return Boolean(null==e?void 0:e._isOhbugEvent)}(e)?this.createEvent(e):e,t&&(n=t(n)),function(e,t){return function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{c(r.next(e))}catch(e){i(e)}}function u(e){try{c(r.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,u)}c((r=r.apply(e,t||[])).next())}))}(this,void 0,void 0,(function(){var n,r;return function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function u(i){return function(u){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!((o=(o=a.trys).length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){a.label=i[1];break}if(6===i[0]&&a.label<o[1]){a.label=o[1],o=i;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(i);break}o[2]&&a.ops.pop(),a.trys.pop();continue}i=t.call(e,a)}catch(e){i=[6,e],r=0}finally{n=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,u])}}}(this,(function(o){switch(o.label){case 0:return o.trys.push([0,3,,4]),n=null,e?[4,t._notifier(e)]:[3,2];case 1:n=o.sent(),o.label=2;case 2:return i(t._hooks.notified)&&t._hooks.notified(e,t),[2,n];case 3:return r=o.sent(),t._logger.error(r),[3,4];case 4:return[2]}}))}))}(n,this)},e.prototype.addAction=function(e,t,n,r){var i=this._actions,a=o(e)?e:"",u=t||{},c=o(n)?n:"",l=new s(a,u,c,r);i.length>=this._config.maxActions&&i.shift(),i.push(l)},e.prototype.getUser=function(){return this._user},e.prototype.setUser=function(e){if(a(e)&&Object.keys(e).length<=6)return this._user=t(t({},this._user),e),this.getUser();this._logger.warn(l("setUser should be an object and have up to 6 attributes",e))},e.prototype.addMetaData=function(e,t){return f(this._metaData,e,t)},e.prototype.getMetaData=function(e){return d(this._metaData,e)},e.prototype.deleteMetaData=function(e){return p(this._metaData,e)},e}(),g="ajaxError",y="fetchError",m="websocketError";
30
+ /*! *****************************************************************************
31
+ Copyright (c) Microsoft Corporation.
32
+
33
+ Permission to use, copy, modify, and/or distribute this software for any
34
+ purpose with or without fee is hereby granted.
35
+
36
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
37
+ REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
38
+ AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
39
+ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
40
+ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
41
+ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
42
+ PERFORMANCE OF THIS SOFTWARE.
43
+ ***************************************************************************** */
44
+ function b(e,t){for(var n=0,r=t.length,o=e.length;n<r;n++,o++)e[o]=t[n];return e}Object.freeze({__proto__:null,UNCAUGHT_ERROR:"uncaughtError",RESOURCE_ERROR:"resourceError",UNHANDLEDREJECTION_ERROR:"unhandledrejectionError",AJAX_ERROR:"ajaxError",FETCH_ERROR:"fetchError",WEBSOCKET_ERROR:"websocketError",UNKNOWN_ERROR:"unknownError",MESSAGE:"message",FEEDBACK:"feedback",VIEW:"view",REACT:"react",VUE:"vue",ANGULAR:"angular",MINIAPP_ERROR:"miniappError",MINIAPP_UNHANDLEDREJECTION_ERROR:"miniappUnhandledrejectionError",MINIAPP_PAGENOTFOUND_ERROR:"miniappPagenotfoundError",MINIAPP_MEMORYWARNING_ERROR:"miniappMemorywarningError"});var E=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];console.warn.apply(console,b(["Ohbug"],e))};function _(e,t){for(var n=[],r=2;r<arguments.length;r++)n[r-2]=arguments[r];try{if("production"!==process.env.NODE_ENV){if(void 0===t)throw new Error("`Ohbug warning(condition, format, ...args)` requires a warning message argument");if(!e){var o=0,i=t.replace(/%s/g,(function(){return n[o++]}));E(i)}}}catch(e){}}var O={};function w(){return"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:O}function R(){var e=w();return function(e,t){for(var n=[],r=2;r<arguments.length;r++)n[r-2]=arguments[r];if(void 0===t)throw new Error("`Ohbug warning(condition, format, ...args)` requires a warning message argument");if(!e){var o=0,i=t.replace(/%s/g,(function(){return n[o++]}));throw new Error("Ohbug "+i)}}(Boolean(e.__OHBUG__),"Failed to get `OhbugObject`, please confirm if `Ohbug.init`"),e.__OHBUG__}function k(e,t,n){if(t in e){var r=e[t],o=n(r);return e[t]=o,r}}function S(e){if("string"!=typeof e)return{};var t=e.match(/^(([^:/?#]+):)?(\/\/([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/);if(!t)return{};var n=t[6]||"",r=t[8]||"";return{host:t[4],path:t[5],protocol:t[2],relative:t[5]+n+r}}function j(e,t){e.parentNode&&(t.push(e.parentNode),j(e.parentNode,t))}function N(e){var t=[];return t.push(e),j(e,t),t}var T,D,L,M=function(e){for(var t=e.target||e.srcElement,n=e.target||e.srcElement,r=[],o=0;n&&n.nodeType===Node.ELEMENT_NODE&&n.nodeType!==Node.DOCUMENT_TYPE_NODE;n=n.previousSibling)o&&r.push(n),o+=1;var i=void 0===e.path?N(e.target):e.path,a=t.outerHTML;return i.reverse().map((function(e){return(e.localName||"")+(e.id?"#"+e.id:"")+(e.className?"."+e.className:"")+(e.outerHTML===a?":nth-child("+r.length+")":"")})).filter((function(e){return Boolean(e)})).join(" > ")},A=function(){var e={};if(navigator){var t=navigator.language,n=navigator.userAgent;e.language=t,e.userAgent=n}if(document){var r=document.title;e.title=r}if(window.location){var o=window.location.href;e.url=o}return e},x="1.0.19",H=w();function U(e,t){var n,r=R().client,o=S(null===(n=null==H?void 0:H.location)||void 0===n?void 0:n.href),i=S(e),a=S(t);i.path||(i=o),L=t;var u=e,c=t;o.protocol===a.protocol&&o.host===a.host&&(c=a.relative),o.protocol===i.protocol&&o.host===i.host&&(u=i.relative),u!==c&&r.addAction("navigation to "+t,{from:e,to:t},"navigation")}function P(e){return function(t,n,r){return r&&U(L,String(r)),e.apply(this,[t,n,r])}}var V={pushState:null===(T=null==H?void 0:H.history)||void 0===T?void 0:T.pushState,replaceState:null===(D=null==H?void 0:H.history)||void 0===D?void 0:D.replaceState,onpopstate:null==H?void 0:H.onpopstate};function q(e){var t=e;U(t.oldURL,t.newURL)}function B(){var e;V.pushState=k(null==H?void 0:H.history,"pushState",P),V.replaceState=k(null==H?void 0:H.history,"replaceState",P),V.onpopstate=k(H,"onpopstate",(function(e){return function(){for(var t,n=[],r=0;r<arguments.length;r++)n[r]=arguments[r];var o=null===(t=null==H?void 0:H.location)||void 0===t?void 0:t.href;return U(L,o),e.apply(this,n)}})),null===(e=null==H?void 0:H.addEventListener)||void 0===e||e.call(H,"hashchange",q,!0)}var I=w();function F(e){if(e.target){var t=R().client,n=e.target,r=n.tagName,o=n.id,i=n.className,a=n.name,u=n.src,c=n.outerHTML,s=n.nodeType,l=M(e);t.addAction("click node",{tagName:r,id:o,className:i,name:a,src:u,outerHTML:c,nodeType:s,selector:l},"click")}}
45
+ /*! *****************************************************************************
46
+ Copyright (c) Microsoft Corporation.
47
+
48
+ Permission to use, copy, modify, and/or distribute this software for any
49
+ purpose with or without fee is hereby granted.
50
+
51
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
52
+ REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
53
+ AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
54
+ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
55
+ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
56
+ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
57
+ PERFORMANCE OF THIS SOFTWARE.
58
+ ***************************************************************************** */
59
+ var X=function(){return(X=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e}).apply(this,arguments)},C=["log","info","warn","error"],W=Object.keys(C).reduce((function(e,t){var n;return X(X({},e),((n={})[t]=console[t],n))}),{log:null,info:null,warn:null,error:null});function K(e){var t=e.message?e:{message:e},n=R().client,r=n.createEvent({category:"error",type:"unknownError",detail:t});n.notify(r)}function G(e){try{var t=e.type;if("error"===t){var n=e,r=n.message,o=n.error,i=e.target||e.srcElement;r&&o?function(e){var t=e.message,n=e.filename,r=e.lineno,o=e.colno,i=e.error,a=i.stack,u={name:i.name,message:t,filename:n,lineno:r,colno:o,stack:a},c=R().client,s=c.createEvent({category:"error",type:"uncaughtError",detail:u});c.notify(s)}(n):i&&function(e){var t=e.target||e.srcElement,n=t.outerHTML,r=M(e),o={outerHTML:n,src:t&&t.src,tagName:t&&t.tagName,id:t&&t.id,className:t&&t.className,name:t&&t.name,nodeType:t&&t.nodeType,selector:r},i=R().client,a=i.createEvent({category:"error",type:"resourceError",detail:o});i.notify(a)}(n)}else"unhandledrejection"===t?function(e){var t={message:e.reason.message||e.reason,stack:e.reason.stack},n=R().client,r=n.createEvent({category:"error",type:"unhandledrejectionError",detail:t});n.notify(r)}(e):K(e)}catch(o){K(o)}}function J(e,t){try{switch(e){case g:!function(e){var t=R().client,n=t.createEvent({category:"error",type:g,detail:e});t.notify(n)}(t);break;case y:!function(e){var t=R().client,n=t.createEvent({category:"error",type:y,detail:e});t.notify(n)}(t);break;case m:!function(e){var t=R().client,n=t.createEvent({category:"error",type:m,detail:e});t.notify(n)}(t)}}catch(e){K(e)}}var Y="XMLHttpRequest"in w(),z=Y?{open:XMLHttpRequest.prototype.open,send:XMLHttpRequest.prototype.send}:{};var $=w(),Q="fetch"in $,Z=Q?$.fetch:null;var ee=w();var te=w();function ne(e){G(e)}var re=w();function oe(e){G(e)}function ie(){B(),function(){var e,t;null===(t=null===(e=null==I?void 0:I.document)||void 0===e?void 0:e.addEventListener)||void 0===t||t.call(e,"click",F)}()}function ae(){!function(){var e;H.history.pushState=V.pushState,H.history.replaceState=V.replaceState,H.onpopstate=V.onpopstate,null===(e=null==H?void 0:H.removeEventListener)||void 0===e||e.call(H,"hashchange",q,!0)}(),function(){var e,t;null===(t=null===(e=null==I?void 0:I.document)||void 0===e?void 0:e.removeEventListener)||void 0===t||t.call(e,"click",F)}()}function ue(){!function(){if(_(Y,"Binding `AJAX` monitoring failed, the current environment did not find the object `XMLHttpRequest`"),Y){var e=R().client,t={method:"",url:""},n=null===XMLHttpRequest||void 0===XMLHttpRequest?void 0:XMLHttpRequest.prototype;z.open=k(n,"open",(function(e){return function(){for(var n=[],r=0;r<arguments.length;r++)n[r]=arguments[r];var o=n[0],i=n[1];return t.method=o,t.url=i,e.apply(this,n)}})),z.send=k(n,"send",(function(n){return function(){for(var r=[],o=0;o<arguments.length;o++)r[o]=arguments[o];return this.addEventListener("readystatechange",(function(){if(4===this.readyState&&t.url!==e._config.endpoint){var n={req:{url:t.url,method:t.method,data:r[0]||{}},res:{status:this.status,statusText:this.statusText,response:this.response}};e.addAction("ajax",n,"ajax"),(!this.status||this.status>=400)&&J(g,n)}})),n.apply(this,r)}}))}}(),function(){if(_(Q,"Binding `fetch` monitoring failed, the current environment did not find the object `fetch`"),Q){var e=R().client;Z=k($,"fetch",(function(t){return function(){for(var n=[],r=0;r<arguments.length;r++)n[r]=arguments[r];return t.apply(this,n).then((function(t){var r=n[0],o=n[1],i={req:{url:r,method:o&&o.method,data:o&&o.body||{}},res:{status:t.status,statusText:t.statusText}};return e.addAction("fetch",i,"fetch"),(!t.status||t.status>=400)&&J(y,i),t}),(function(e){var t=n[0],r=n[1],o={req:{url:t,method:r&&r.method,data:r&&r.body||{}},res:{status:400,statusText:"unknownError"}};throw J(y,o),e}))}}))}}(),function(){if(_("WebSocket"in ee,"Binding `WebSocket` monitoring failed, the current environment did not find the object `WebSocket`"),"WebSocket"in ee){var e=null===WebSocket||void 0===WebSocket?void 0:WebSocket.prototype,t=Object.getOwnPropertyDescriptor(e,"onerror");Object.defineProperty(e,"onerror",{set:function(){var e,n=arguments[0];null===(e=null==t?void 0:t.set)||void 0===e||e.call(this,(function(e){var t=e.target,r=t.url,o=t.readyState,i=t.protocol,a=t.extensions,u=t.binaryType,c=t.bufferedAmount,s=e.timeStamp;J(m,{url:r,timeStamp:s,readyState:o,protocol:i,extensions:a,binaryType:u,bufferedAmount:c}),n.apply(this,arguments)}))}})}}()}function ce(){!function(){if(Y&&z.open&&z.send){var e=null===XMLHttpRequest||void 0===XMLHttpRequest?void 0:XMLHttpRequest.prototype;e.open=z.open,e.send=z.send}}(),Q&&Z&&($.fetch=Z)}function se(){var e=w();_(Boolean(e.addEventListener),"Binding script monitoring failed, the current environment did not find the object `addEventListener`"),e.addEventListener&&(function(){var e;null===(e=null==te?void 0:te.addEventListener)||void 0===e||e.call(te,"error",ne,!0)}(),function(){var e;null===(e=null==re?void 0:re.addEventListener)||void 0===e||e.call(re,"unhandledrejection",oe,!0)}())}function le(){!function(){var e;null===(e=null==te?void 0:te.removeEventListener)||void 0===e||e.call(te,"error",ne,!0)}(),function(){var e;null===(e=null==re?void 0:re.removeEventListener)||void 0===e||e.call(re,"unhandledrejection",oe,!0)}()}function fe(){var e;se(),ue(),ie(),e=R().client,C.forEach((function(t){W[t]=k(console,t,(function(n){return function(){for(var r=[],o=0;o<arguments.length;o++)r[o]=arguments[o];return r.some((function(e){return"string"==typeof e&&e.includes("Ohbug")}))||e.addAction("console."+t,r,"console"),n.apply(this,r)}}))}))}var de=w();function pe(){var e;null===(e=null==de?void 0:de.addEventListener)||void 0===e||e.call(de,"unload",(function(){le(),ce(),ae(),console&&C.forEach((function(e){console[e]=W[e]}))}),!0)}var ve={name:"OhbugBrowser",init:function(){fe(),pe()}};function he(e){var t=R().client._config.endpoint;return new Promise((function(n,r){var o=JSON.stringify(e);if(navigator.sendBeacon){var i=navigator.sendBeacon(t,o);n(i)}else{var a=new XMLHttpRequest;a.onreadystatechange=function(){if(a.readyState===XMLHttpRequest.DONE){if(a.status>=200&&a.status<300)return n(a.response);r(a)}},a.open("POST",t),a.setRequestHeader("Content-Type","application/json;charset=UTF-8"),a.send(o)}}))}var ge={_client:null,init:function(e){var t;return ge._client?(null===(t=ge._client._logger)||void 0===t||t.log("init() has been called. Ignored."),ge._client):(ge._client=function(e){var t=w(),n=new h({sdk:{platform:"ohbug-browser",version:x},config:e,device:A,notifier:he});return t.__OHBUG__={client:n},n.use(ve),console.log("%c @ohbug/browser %c Detected Ohbug v1.0.19 %c","background:#333; padding: 2px 1px; color: #FFF","background:#FF6F61; padding: 2px 1px; color: #FFF","background:transparent"),n}(e),ge._client)}};e.Client=ge,e.default=ge,Object.defineProperty(e,"__esModule",{value:!0})}));