jason-trace-log 0.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/LICENSE +7 -0
  2. package/README.md +50 -0
  3. package/dist/lib/baseTrace.js +405 -0
  4. package/dist/lib/baseTrace.js.map +1 -0
  5. package/dist/lib/constants.js +26 -0
  6. package/dist/lib/constants.js.map +1 -0
  7. package/dist/lib/core/fetch.js +138 -0
  8. package/dist/lib/core/fetch.js.map +1 -0
  9. package/dist/lib/core/fingerprint.js +66 -0
  10. package/dist/lib/core/fingerprint.js.map +1 -0
  11. package/dist/lib/core/interface.js +3 -0
  12. package/dist/lib/core/interface.js.map +1 -0
  13. package/dist/lib/core/request.js +26 -0
  14. package/dist/lib/core/request.js.map +1 -0
  15. package/dist/lib/core/send.js +176 -0
  16. package/dist/lib/core/send.js.map +1 -0
  17. package/dist/lib/core/util.js +186 -0
  18. package/dist/lib/core/util.js.map +1 -0
  19. package/dist/lib/core/webvitals.js +63 -0
  20. package/dist/lib/core/webvitals.js.map +1 -0
  21. package/dist/lib/index.js +19 -0
  22. package/dist/lib/index.js.map +1 -0
  23. package/dist/lib/trace.js +27 -0
  24. package/dist/lib/trace.js.map +1 -0
  25. package/dist/lib/typings/common.js +131 -0
  26. package/dist/lib/typings/common.js.map +1 -0
  27. package/dist/trace-log.esm.js +1391 -0
  28. package/dist/trace-log.esm.js.map +1 -0
  29. package/dist/trace-log.umd.js +1400 -0
  30. package/dist/trace-log.umd.js.map +1 -0
  31. package/dist/trace-sdk.esm.js +1391 -0
  32. package/dist/trace-sdk.esm.js.map +1 -0
  33. package/dist/trace-sdk.umd.js +1401 -0
  34. package/dist/trace-sdk.umd.js.map +1 -0
  35. package/dist/types/baseTrace.d.ts +58 -0
  36. package/dist/types/constants.d.ts +12 -0
  37. package/dist/types/core/fetch.d.ts +21 -0
  38. package/dist/types/core/fingerprint.d.ts +14 -0
  39. package/dist/types/core/interface.d.ts +10 -0
  40. package/dist/types/core/request.d.ts +3 -0
  41. package/dist/types/core/send.d.ts +84 -0
  42. package/dist/types/core/util.d.ts +19 -0
  43. package/dist/types/core/webvitals.d.ts +8 -0
  44. package/dist/types/index.d.ts +4 -0
  45. package/dist/types/trace.d.ts +3 -0
  46. package/dist/types/typings/common.d.ts +84 -0
  47. package/package.json +140 -0
@@ -0,0 +1,1401 @@
1
+ (function (global, factory) {
2
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
3
+ typeof define === 'function' && define.amd ? define(['exports'], factory) :
4
+ (factory((global.index = {})));
5
+ }(this, (function (exports) { 'use strict';
6
+
7
+ /*! *****************************************************************************
8
+ Copyright (c) Microsoft Corporation. All rights reserved.
9
+ Licensed under the Apache License, Version 2.0 (the "License"); you may not use
10
+ this file except in compliance with the License. You may obtain a copy of the
11
+ License at http://www.apache.org/licenses/LICENSE-2.0
12
+
13
+ THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14
+ KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
15
+ WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
16
+ MERCHANTABLITY OR NON-INFRINGEMENT.
17
+
18
+ See the Apache Version 2.0 License for specific language governing permissions
19
+ and limitations under the License.
20
+ ***************************************************************************** */
21
+ /* global Reflect, Promise */
22
+
23
+ var extendStatics = function(d, b) {
24
+ extendStatics = Object.setPrototypeOf ||
25
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
26
+ function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
27
+ return extendStatics(d, b);
28
+ };
29
+
30
+ function __extends(d, b) {
31
+ extendStatics(d, b);
32
+ function __() { this.constructor = d; }
33
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
34
+ }
35
+
36
+ var __assign = function() {
37
+ __assign = Object.assign || function __assign(t) {
38
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
39
+ s = arguments[i];
40
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
41
+ }
42
+ return t;
43
+ };
44
+ return __assign.apply(this, arguments);
45
+ };
46
+
47
+ function __awaiter(thisArg, _arguments, P, generator) {
48
+ return new (P || (P = Promise))(function (resolve, reject) {
49
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
50
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
51
+ function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
52
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
53
+ });
54
+ }
55
+
56
+ function __generator(thisArg, body) {
57
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
58
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
59
+ function verb(n) { return function (v) { return step([n, v]); }; }
60
+ function step(op) {
61
+ if (f) throw new TypeError("Generator is already executing.");
62
+ while (_) try {
63
+ 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;
64
+ if (y = 0, t) op = [op[0] & 2, t.value];
65
+ switch (op[0]) {
66
+ case 0: case 1: t = op; break;
67
+ case 4: _.label++; return { value: op[1], done: false };
68
+ case 5: _.label++; y = op[1]; op = [0]; continue;
69
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
70
+ default:
71
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
72
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
73
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
74
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
75
+ if (t[2]) _.ops.pop();
76
+ _.trys.pop(); continue;
77
+ }
78
+ op = body.call(thisArg, _);
79
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
80
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
81
+ }
82
+ }
83
+
84
+ var e,n,t,i,a=-1,o=function(e){addEventListener("pageshow",(function(n){n.persisted&&(a=n.timeStamp,e(n));}),!0);},c=function(){return window.performance&&performance.getEntriesByType&&performance.getEntriesByType("navigation")[0]},u=function(){var e=c();return e&&e.activationStart||0},f=function(e,n){var t=c(),i="navigate";a>=0?i="back-forward-cache":t&&(document.prerendering||u()>0?i="prerender":document.wasDiscarded?i="restore":t.type&&(i=t.type.replace(/_/g,"-")));return {name:e,value:void 0===n?-1:n,rating:"good",delta:0,entries:[],id:"v3-".concat(Date.now(),"-").concat(Math.floor(8999999999999*Math.random())+1e12),navigationType:i}},s=function(e,n,t){try{if(PerformanceObserver.supportedEntryTypes.includes(e)){var i=new PerformanceObserver((function(e){Promise.resolve().then((function(){n(e.getEntries());}));}));return i.observe(Object.assign({type:e,buffered:!0},t||{})),i}}catch(e){}},d=function(e,n,t,i){var r,a;return function(o){n.value>=0&&(o||i)&&((a=n.value-(r||0))||void 0===r)&&(r=n.value,n.delta=a,n.rating=function(e,n){return e>n[1]?"poor":e>n[0]?"needs-improvement":"good"}(n.value,t),e(n));}},l=function(e){requestAnimationFrame((function(){return requestAnimationFrame((function(){return e()}))}));},p=function(e){var n=function(n){"pagehide"!==n.type&&"hidden"!==document.visibilityState||e(n);};addEventListener("visibilitychange",n,!0),addEventListener("pagehide",n,!0);},v=function(e){var n=!1;return function(t){n||(e(t),n=!0);}},m=-1,h=function(){return "hidden"!==document.visibilityState||document.prerendering?1/0:0},g=function(e){"hidden"===document.visibilityState&&m>-1&&(m="visibilitychange"===e.type?e.timeStamp:0,T());},y=function(){addEventListener("visibilitychange",g,!0),addEventListener("prerenderingchange",g,!0);},T=function(){removeEventListener("visibilitychange",g,!0),removeEventListener("prerenderingchange",g,!0);},E=function(){return m<0&&(m=h(),y(),o((function(){setTimeout((function(){m=h(),y();}),0);}))),{get firstHiddenTime(){return m}}},C=function(e){document.prerendering?addEventListener("prerenderingchange",(function(){return e()}),!0):e();},L=[1800,3e3],w=function(e,n){n=n||{},C((function(){var t,i=E(),r=f("FCP"),a=s("paint",(function(e){e.forEach((function(e){"first-contentful-paint"===e.name&&(a.disconnect(),e.startTime<i.firstHiddenTime&&(r.value=Math.max(e.startTime-u(),0),r.entries.push(e),t(!0)));}));}));a&&(t=d(e,r,L,n.reportAllChanges),o((function(i){r=f("FCP"),t=d(e,r,L,n.reportAllChanges),l((function(){r.value=performance.now()-i.timeStamp,t(!0);}));})));}));},b=[.1,.25],S=function(e,n){n=n||{},w(v((function(){var t,i=f("CLS",0),r=0,a=[],c=function(e){e.forEach((function(e){if(!e.hadRecentInput){var n=a[0],t=a[a.length-1];r&&e.startTime-t.startTime<1e3&&e.startTime-n.startTime<5e3?(r+=e.value,a.push(e)):(r=e.value,a=[e]);}})),r>i.value&&(i.value=r,i.entries=a,t());},u=s("layout-shift",c);u&&(t=d(e,i,b,n.reportAllChanges),p((function(){c(u.takeRecords()),t(!0);})),o((function(){r=0,i=f("CLS",0),t=d(e,i,b,n.reportAllChanges),l((function(){return t()}));})),setTimeout(t,0));})));},A={passive:!0,capture:!0},I=new Date,P=function(i,r){e||(e=r,n=i,t=new Date,k(removeEventListener),F());},F=function(){if(n>=0&&n<t-I){var r={entryType:"first-input",name:e.type,target:e.target,cancelable:e.cancelable,startTime:e.timeStamp,processingStart:e.timeStamp+n};i.forEach((function(e){e(r);})),i=[];}},M=function(e){if(e.cancelable){var n=(e.timeStamp>1e12?new Date:performance.now())-e.timeStamp;"pointerdown"==e.type?function(e,n){var t=function(){P(e,n),r();},i=function(){r();},r=function(){removeEventListener("pointerup",t,A),removeEventListener("pointercancel",i,A);};addEventListener("pointerup",t,A),addEventListener("pointercancel",i,A);}(n,e):P(n,e);}},k=function(e){["mousedown","keydown","touchstart","pointerdown"].forEach((function(n){return e(n,M,A)}));},D=[100,300],x=function(t,r){r=r||{},C((function(){var a,c=E(),u=f("FID"),l=function(e){e.startTime<c.firstHiddenTime&&(u.value=e.processingStart-e.startTime,u.entries.push(e),a(!0));},m=function(e){e.forEach(l);},h=s("first-input",m);a=d(t,u,D,r.reportAllChanges),h&&p(v((function(){m(h.takeRecords()),h.disconnect();}))),h&&o((function(){var o;u=f("FID"),a=d(t,u,D,r.reportAllChanges),i=[],n=-1,e=null,k(addEventListener),o=l,i.push(o),F();}));}));},U=[2500,4e3],V={},W=function(e,n){n=n||{},C((function(){var t,i=E(),r=f("LCP"),a=function(e){var n=e[e.length-1];n&&n.startTime<i.firstHiddenTime&&(r.value=Math.max(n.startTime-u(),0),r.entries=[n],t());},c=s("largest-contentful-paint",a);if(c){t=d(e,r,U,n.reportAllChanges);var m=v((function(){V[r.id]||(a(c.takeRecords()),c.disconnect(),V[r.id]=!0,t(!0));}));["keydown","click"].forEach((function(e){addEventListener(e,(function(){return setTimeout(m,0)}),!0);})),p(m),o((function(i){r=f("LCP"),t=d(e,r,U,n.reportAllChanges),l((function(){r.value=performance.now()-i.timeStamp,V[r.id]=!0,t(!0);}));}));}}));};
85
+
86
+ /**
87
+ * @typedef {Object<string,any>} Result
88
+ * @typedef {import('web-vitals').Metric | Object<string,any>} Metric
89
+ * @typedef {{ effectiveType: 'slow-2g' | '2g' | '3g' | '4g', rtt: number, downlink: number }} NetworkInformation
90
+ *
91
+ * @typedef {object} CreateApiReporterOptions
92
+ * @prop {object} [initial]
93
+ * @prop {(metric: Metric, result: Result) => Result} [mapMetric]
94
+ * @prop {(result: Result) => Result | void} [beforeSend]
95
+ * @prop {(url: string, result: Result) => any} [onSend]
96
+ */
97
+
98
+ /**
99
+ * Create Web Vitals API reporter, that accepts `Metric` values and sends it to `url`
100
+ * using `navigator.sendBeacon` when available or fallbacks back to XMLHttpRequest.
101
+ *
102
+ * The function sends request only once.
103
+ * Use `onSend` to implement a custom logic.
104
+ *
105
+ * @param {string} url
106
+ * @param {CreateApiReporterOptions} [opts]
107
+ * @return {(metric: Metric) => void}
108
+ */
109
+
110
+ function createApiReporter(url, opts = {}) {
111
+ let isSent = false;
112
+ let isCalled = false;
113
+ let result = /** @type {Result} */ ({ id: generateUniqueId(), ...opts.initial });
114
+
115
+ const sendValues = () => {
116
+ if (isSent) return // data is already sent
117
+ if (!isCalled) return // no data collected
118
+
119
+ result.duration = now();
120
+ if (opts.beforeSend) {
121
+ const newResult = opts.beforeSend(result);
122
+ if (newResult) result = { ...result, ...newResult };
123
+ }
124
+ isSent = true;
125
+ if (opts.onSend) {
126
+ opts.onSend(url, result);
127
+ } else {
128
+ if (typeof navigator === 'undefined') return
129
+ if (navigator.sendBeacon) return navigator.sendBeacon(url, JSON.stringify(result))
130
+ const client = new XMLHttpRequest();
131
+ client.open('POST', url, false); // third parameter indicates sync xhr
132
+ client.setRequestHeader('Content-Type', 'text/plain;charset=UTF-8');
133
+ client.send(JSON.stringify(result));
134
+ }
135
+ };
136
+
137
+ const mapMetric =
138
+ opts.mapMetric ||
139
+ function (metric) {
140
+ const isWebVital = ['FCP', 'TTFB', 'LCP', 'CLS', 'FID'].indexOf(metric.name) !== -1;
141
+ return { [metric.name]: isWebVital ? round(metric.value, metric.name === 'CLS' ? 4 : 0) : metric.value }
142
+ };
143
+
144
+ /** @param {Metric} metric */
145
+ const report = (metric) => {
146
+ if (!isCalled) isCalled = true;
147
+ result = { ...result, ...mapMetric(metric, result) };
148
+ };
149
+
150
+ // should be the last call to capture latest CLS
151
+ setTimeout(() => {
152
+ // Safari does not fire "visibilitychange" on the tab close
153
+ // So we have 2 options: loose Safari data, or loose LCP/CLS that depends on "visibilitychange" logic.
154
+ // Current solution: if LCP/CLS supported, use `onHidden` otherwise, use `pagehide` to fire the callback in the end.
155
+ //
156
+ // More details: https://github.com/treosh/web-vitals-reporter/issues/3
157
+ const supportedEntryTypes = (PerformanceObserver && PerformanceObserver.supportedEntryTypes) || [];
158
+ const isLatestVisibilityChangeSupported = supportedEntryTypes.indexOf('layout-shift') !== -1;
159
+
160
+ if (isLatestVisibilityChangeSupported) {
161
+ const onVisibilityChange = () => {
162
+ if (document.visibilityState === 'hidden') {
163
+ sendValues();
164
+ removeEventListener('visibilitychange', onVisibilityChange, true);
165
+ }
166
+ };
167
+ addEventListener('visibilitychange', onVisibilityChange, true);
168
+ } else {
169
+ addEventListener('pagehide', sendValues, { capture: true, once: true });
170
+ }
171
+ });
172
+
173
+ return report
174
+ }
175
+
176
+ /**
177
+ * Get device information.
178
+ * - Effective connection type: https://developer.mozilla.org/en-US/docs/Web/API/NetworkInformation
179
+ * - Device memory: https://developer.mozilla.org/en-US/docs/Web/API/Navigator/deviceMemory
180
+ */
181
+
182
+ function getDeviceInfo() {
183
+ const nav = /** @type {null | (Navigator & { deviceMemory: number, connection: NetworkInformation })} */ (typeof navigator ===
184
+ 'undefined'
185
+ ? null
186
+ : navigator);
187
+ const conn = nav && nav.connection ? nav.connection : null;
188
+ return {
189
+ url: location ? location.href : null,
190
+ referrer: document ? document.referrer : null,
191
+ userAgent: nav ? nav.userAgent : null,
192
+ memory: nav ? nav.deviceMemory : undefined,
193
+ cpus: nav ? nav.hardwareConcurrency : undefined,
194
+ connection: conn ? { effectiveType: conn.effectiveType, rtt: conn.rtt, downlink: conn.downlink } : undefined,
195
+ }
196
+ }
197
+
198
+ /**
199
+ * Get time since a session started.
200
+ */
201
+
202
+ function now() {
203
+ const perf = typeof performance === 'undefined' ? null : performance;
204
+ return perf && perf.now ? round(perf.now()) : null
205
+ }
206
+
207
+ /**
208
+ * Round, source: https://stackoverflow.com/a/18358056
209
+ *
210
+ * @param {number} val
211
+ * @param {number} [precision]
212
+ * @return {number}
213
+ */
214
+
215
+ function round(val, precision = 0) {
216
+ // @ts-ignore
217
+ return +(Math.round(`${val}e+${precision}`) + `e-${precision}`)
218
+ }
219
+
220
+ /**
221
+ * Generate a unique id, copied from:
222
+ * https://github.com/GoogleChrome/web-vitals/blob/master/src/lib/generateUniqueID.ts
223
+ */
224
+
225
+ function generateUniqueId() {
226
+ return `v1-${Date.now()}-${Math.floor(Math.random() * (9e12 - 1)) + 1e12}`
227
+ }
228
+
229
+ var SCORE_RANGE_LCP = [2500, 4500];
230
+ var SCORE_RANGE_FID = [100, 300];
231
+ var SCORE_RANGE_CLS = [0.1, 0.25];
232
+ var score = function (value, range) {
233
+ return value < range[0] ? 'good' : value < range[1] ? 'needs improvement' : 'poor';
234
+ };
235
+ function generateUniqueId$1() {
236
+ return "v1-".concat(Date.now(), "-").concat(Math.floor(Math.random() * (9e12 - 1)) + 1e12);
237
+ }
238
+ function round$1(val, precision) {
239
+ if (precision === void 0) { precision = 0; }
240
+ // @ts-ignore
241
+ return +(Math.round("".concat(val, "e+").concat(precision)) + "e-".concat(precision));
242
+ }
243
+ function mapMetric(metric) {
244
+ var _a;
245
+ var isWebVital = ['FCP', 'TTFB', 'LCP', 'CLS', 'FID'].indexOf(metric.name) !== -1;
246
+ return _a = {},
247
+ _a[metric.name] = isWebVital ? round$1(metric.value, metric.name === 'CLS' ? 4 : 0) : metric.value,
248
+ _a["".concat(metric.name, "Rating")] = metric.rating,
249
+ _a;
250
+ }
251
+ var sendToAnalytics = createApiReporter('/analytics', {
252
+ initial: getDeviceInfo(),
253
+ beforeSend: function (result) {
254
+ console.log('beforeSend');
255
+ var LCP = result.LCP, FID = result.FID, CLS = result.CLS;
256
+ console.info('web-vitals: ', result);
257
+ if (!LCP || !FID || !CLS)
258
+ return; // Core Web Vitals are not supported
259
+ // return extra attributes to merge into the final result
260
+ return {
261
+ LCPScore: score(LCP, SCORE_RANGE_LCP),
262
+ // FIDScore: FID < 100 ? 'good' : FID < 300 ? 'needs improvement' : 'poor',
263
+ FIDScore: score(FID, SCORE_RANGE_FID),
264
+ // CLSScore: CLS < 0.1 ? 'good' : CLS < 0.25 ? 'needs improvement' : 'poor'
265
+ CLSScore: score(CLS, SCORE_RANGE_CLS),
266
+ };
267
+ },
268
+ });
269
+ var onVitals = function (saveMetric) {
270
+ console.log('webvitals setup');
271
+ W(saveMetric);
272
+ x(saveMetric);
273
+ S(saveMetric);
274
+ // onTTFB(saveMetric)
275
+ // onINP(saveMetric)
276
+ // onFCP(saveMetric)
277
+ };
278
+
279
+ /**
280
+ * base64.ts
281
+ *
282
+ * Licensed under the BSD 3-Clause License.
283
+ * http://opensource.org/licenses/BSD-3-Clause
284
+ *
285
+ * References:
286
+ * http://en.wikipedia.org/wiki/Base64
287
+ *
288
+ * @author Dan Kogai (https://github.com/dankogai)
289
+ */
290
+ const _hasBuffer = typeof Buffer === 'function';
291
+ const _TD = typeof TextDecoder === 'function' ? new TextDecoder() : undefined;
292
+ const _TE = typeof TextEncoder === 'function' ? new TextEncoder() : undefined;
293
+ const b64ch = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
294
+ const b64chs = Array.prototype.slice.call(b64ch);
295
+ const b64tab = ((a) => {
296
+ let tab = {};
297
+ a.forEach((c, i) => tab[c] = i);
298
+ return tab;
299
+ })(b64chs);
300
+ const _fromCC = String.fromCharCode.bind(String);
301
+ const _U8Afrom = typeof Uint8Array.from === 'function'
302
+ ? Uint8Array.from.bind(Uint8Array)
303
+ : (it) => new Uint8Array(Array.prototype.slice.call(it, 0));
304
+ const _mkUriSafe = (src) => src
305
+ .replace(/=/g, '').replace(/[+\/]/g, (m0) => m0 == '+' ? '-' : '_');
306
+ /**
307
+ * polyfill version of `btoa`
308
+ */
309
+ const btoaPolyfill = (bin) => {
310
+ // console.log('polyfilled');
311
+ let u32, c0, c1, c2, asc = '';
312
+ const pad = bin.length % 3;
313
+ for (let i = 0; i < bin.length;) {
314
+ if ((c0 = bin.charCodeAt(i++)) > 255 ||
315
+ (c1 = bin.charCodeAt(i++)) > 255 ||
316
+ (c2 = bin.charCodeAt(i++)) > 255)
317
+ throw new TypeError('invalid character found');
318
+ u32 = (c0 << 16) | (c1 << 8) | c2;
319
+ asc += b64chs[u32 >> 18 & 63]
320
+ + b64chs[u32 >> 12 & 63]
321
+ + b64chs[u32 >> 6 & 63]
322
+ + b64chs[u32 & 63];
323
+ }
324
+ return pad ? asc.slice(0, pad - 3) + "===".substring(pad) : asc;
325
+ };
326
+ /**
327
+ * does what `window.btoa` of web browsers do.
328
+ * @param {String} bin binary string
329
+ * @returns {string} Base64-encoded string
330
+ */
331
+ const _btoa = typeof btoa === 'function' ? (bin) => btoa(bin)
332
+ : _hasBuffer ? (bin) => Buffer.from(bin, 'binary').toString('base64')
333
+ : btoaPolyfill;
334
+ const _fromUint8Array = _hasBuffer
335
+ ? (u8a) => Buffer.from(u8a).toString('base64')
336
+ : (u8a) => {
337
+ // cf. https://stackoverflow.com/questions/12710001/how-to-convert-uint8-array-to-base64-encoded-string/12713326#12713326
338
+ const maxargs = 0x1000;
339
+ let strs = [];
340
+ for (let i = 0, l = u8a.length; i < l; i += maxargs) {
341
+ strs.push(_fromCC.apply(null, u8a.subarray(i, i + maxargs)));
342
+ }
343
+ return _btoa(strs.join(''));
344
+ };
345
+ // This trick is found broken https://github.com/dankogai/js-base64/issues/130
346
+ // const utob = (src: string) => unescape(encodeURIComponent(src));
347
+ // reverting good old fationed regexp
348
+ const cb_utob = (c) => {
349
+ if (c.length < 2) {
350
+ var cc = c.charCodeAt(0);
351
+ return cc < 0x80 ? c
352
+ : cc < 0x800 ? (_fromCC(0xc0 | (cc >>> 6))
353
+ + _fromCC(0x80 | (cc & 0x3f)))
354
+ : (_fromCC(0xe0 | ((cc >>> 12) & 0x0f))
355
+ + _fromCC(0x80 | ((cc >>> 6) & 0x3f))
356
+ + _fromCC(0x80 | (cc & 0x3f)));
357
+ }
358
+ else {
359
+ var cc = 0x10000
360
+ + (c.charCodeAt(0) - 0xD800) * 0x400
361
+ + (c.charCodeAt(1) - 0xDC00);
362
+ return (_fromCC(0xf0 | ((cc >>> 18) & 0x07))
363
+ + _fromCC(0x80 | ((cc >>> 12) & 0x3f))
364
+ + _fromCC(0x80 | ((cc >>> 6) & 0x3f))
365
+ + _fromCC(0x80 | (cc & 0x3f)));
366
+ }
367
+ };
368
+ const re_utob = /[\uD800-\uDBFF][\uDC00-\uDFFFF]|[^\x00-\x7F]/g;
369
+ /**
370
+ * @deprecated should have been internal use only.
371
+ * @param {string} src UTF-8 string
372
+ * @returns {string} UTF-16 string
373
+ */
374
+ const utob = (u) => u.replace(re_utob, cb_utob);
375
+ //
376
+ const _encode = _hasBuffer
377
+ ? (s) => Buffer.from(s, 'utf8').toString('base64')
378
+ : _TE
379
+ ? (s) => _fromUint8Array(_TE.encode(s))
380
+ : (s) => _btoa(utob(s));
381
+ /**
382
+ * converts a UTF-8-encoded string to a Base64 string.
383
+ * @param {boolean} [urlsafe] if `true` make the result URL-safe
384
+ * @returns {string} Base64 string
385
+ */
386
+ const encode = (src, urlsafe = false) => urlsafe
387
+ ? _mkUriSafe(_encode(src))
388
+ : _encode(src);
389
+
390
+ var TraceDataSeverity;
391
+ (function (TraceDataSeverity) {
392
+ // 其他
393
+ TraceDataSeverity["Else"] = "else";
394
+ // 错误级别
395
+ TraceDataSeverity["Error"] = "error";
396
+ // 告警级别
397
+ TraceDataSeverity["Warning"] = "warning";
398
+ // 日志级别
399
+ TraceDataSeverity["Info"] = "info";
400
+ // 调试级别
401
+ TraceDataSeverity["Debug"] = "debug";
402
+ /** 上报的错误等级 */
403
+ // 低危级别
404
+ TraceDataSeverity["Low"] = "low";
405
+ // 普通级别
406
+ TraceDataSeverity["Normal"] = "normal";
407
+ // 高危级别
408
+ TraceDataSeverity["High"] = "high";
409
+ // 极其严重
410
+ TraceDataSeverity["Critical"] = "critical";
411
+ })(TraceDataSeverity || (TraceDataSeverity = {}));
412
+ var TraceTypes;
413
+ (function (TraceTypes) {
414
+ // PVUV
415
+ TraceTypes["PAGE_VIEW"] = "PageView";
416
+ // Event
417
+ TraceTypes["EVENT"] = "EVENT";
418
+ // 性能
419
+ TraceTypes["PERF"] = "Perf";
420
+ // 资源
421
+ TraceTypes["RESOURCE"] = "Resource";
422
+ // 动作、行为类型
423
+ TraceTypes["ACTION"] = "Action";
424
+ // 请求类型
425
+ TraceTypes["FETCH"] = "Fetch";
426
+ // 代码错误
427
+ TraceTypes["CODE_ERROR"] = "CodeError";
428
+ // 日志
429
+ TraceTypes["CONSOLE"] = "Console";
430
+ // 其它
431
+ TraceTypes["CUSTOMER"] = "Customer";
432
+ })(TraceTypes || (TraceTypes = {}));
433
+ var TraceClientTypes;
434
+ (function (TraceClientTypes) {
435
+ // 安卓
436
+ TraceClientTypes["ANDROID_H5"] = "android";
437
+ // iOS
438
+ TraceClientTypes["IOS_H5"] = "ios";
439
+ // PC端
440
+ TraceClientTypes["PC_H5"] = "pc";
441
+ // 浏览器
442
+ TraceClientTypes["BROWSER_H5"] = "browser";
443
+ })(TraceClientTypes || (TraceClientTypes = {}));
444
+ var BrowserType;
445
+ (function (BrowserType) {
446
+ // 手机端浏览器
447
+ BrowserType["MOBILE"] = "mobile";
448
+ // PC浏览器
449
+ BrowserType["PC"] = "pc";
450
+ // webview
451
+ BrowserType["WEBVIEW"] = "webview";
452
+ // 小程序
453
+ BrowserType["MINI_PROGRAM"] = "miniProgram";
454
+ })(BrowserType || (BrowserType = {}));
455
+ var TraceLevelType;
456
+ (function (TraceLevelType) {
457
+ // 告警级别
458
+ TraceLevelType["Error"] = "error";
459
+ // 预警级别
460
+ TraceLevelType["Warn"] = "warn";
461
+ // 普通日志
462
+ TraceLevelType["Info"] = "info";
463
+ // 调试日志
464
+ TraceLevelType["Debug"] = "debug";
465
+ })(TraceLevelType || (TraceLevelType = {}));
466
+ var BreadcrumbTypes;
467
+ (function (BreadcrumbTypes) {
468
+ BreadcrumbTypes["ROUTE"] = "Route";
469
+ BreadcrumbTypes["CLICK"] = "UI.Click";
470
+ BreadcrumbTypes["CONSOLE"] = "Console";
471
+ BreadcrumbTypes["FETCH"] = "Fetch";
472
+ BreadcrumbTypes["UNHANDLEDREJECTION"] = "Unhandledrejection";
473
+ BreadcrumbTypes["RESOURCE"] = "Resource";
474
+ BreadcrumbTypes["CODE_ERROR"] = "Code Error";
475
+ BreadcrumbTypes["CUSTOMER"] = "Customer";
476
+ })(BreadcrumbTypes || (BreadcrumbTypes = {}));
477
+ var TraceDataTypes;
478
+ (function (TraceDataTypes) {
479
+ TraceDataTypes["UNKNOWN"] = "UNKNOWN";
480
+ TraceDataTypes["UNKNOWN_FUNCTION"] = "UNKNOWN_FUNCTION";
481
+ TraceDataTypes["JAVASCRIPT"] = "JAVASCRIPT";
482
+ TraceDataTypes["LOG"] = "LOG";
483
+ TraceDataTypes["HTTP"] = "HTTP";
484
+ TraceDataTypes["VUE"] = "VUE";
485
+ TraceDataTypes["REACT"] = "REACT";
486
+ TraceDataTypes["RESOURCE"] = "RESOURCE";
487
+ TraceDataTypes["PROMISE"] = "PROMISE";
488
+ TraceDataTypes["ROUTE"] = "ROUTE";
489
+ TraceDataTypes["PERF"] = "PERF";
490
+ })(TraceDataTypes || (TraceDataTypes = {}));
491
+ var BreadcrumbsCategorys;
492
+ (function (BreadcrumbsCategorys) {
493
+ BreadcrumbsCategorys["Http"] = "http";
494
+ BreadcrumbsCategorys["User"] = "user";
495
+ BreadcrumbsCategorys["Debug"] = "debug";
496
+ BreadcrumbsCategorys["Exception"] = "exception";
497
+ BreadcrumbsCategorys["Lifecycle"] = "lifecycle";
498
+ })(BreadcrumbsCategorys || (BreadcrumbsCategorys = {}));
499
+ var TraceBaseDataName;
500
+ (function (TraceBaseDataName) {
501
+ TraceBaseDataName["Fetch"] = "Fetch";
502
+ TraceBaseDataName["TypeError"] = "TypeError";
503
+ TraceBaseDataName["Unhandledrejection"] = "Unhandledrejection";
504
+ TraceBaseDataName["Log"] = "Log";
505
+ TraceBaseDataName["Perf"] = "Perf";
506
+ TraceBaseDataName["Resource"] = "Resource";
507
+ })(TraceBaseDataName || (TraceBaseDataName = {}));
508
+ var SendMethod;
509
+ (function (SendMethod) {
510
+ // 图片
511
+ SendMethod["IMG"] = "img";
512
+ // beacon
513
+ SendMethod["BEACON"] = "beacon";
514
+ // 华为云日志 lts
515
+ SendMethod["LTS"] = "lts";
516
+ })(SendMethod || (SendMethod = {}));
517
+
518
+ // 获取时间
519
+ var getTimestamp = function () { return Date.now(); };
520
+ var isResourceTarget = function (target) {
521
+ return target instanceof HTMLScriptElement ||
522
+ target instanceof HTMLLinkElement ||
523
+ target instanceof HTMLImageElement ||
524
+ target instanceof HTMLVideoElement ||
525
+ target instanceof HTMLAudioElement;
526
+ };
527
+ /**
528
+ * 根据字符串生成hashcode
529
+ *
530
+ * @export
531
+ * @param {string} str
532
+ * @return {*} {number} 可为正数和负数
533
+ */
534
+ function hashCode(str) {
535
+ var hash = 0;
536
+ if (str.length == 0)
537
+ return hash;
538
+ for (var i = 0; i < str.length; i++) {
539
+ var char = str.charCodeAt(i);
540
+ hash = (hash << 5) - hash + char;
541
+ hash = hash & hash;
542
+ }
543
+ return hash;
544
+ }
545
+ function dataTypes2BreadcrumbsType(data) {
546
+ switch (data) {
547
+ case TraceDataTypes.JAVASCRIPT:
548
+ case TraceDataTypes.UNKNOWN:
549
+ case TraceDataTypes.UNKNOWN_FUNCTION:
550
+ case TraceDataTypes.REACT:
551
+ case TraceDataTypes.VUE:
552
+ return BreadcrumbTypes.CODE_ERROR;
553
+ case TraceDataTypes.PROMISE:
554
+ return BreadcrumbTypes.UNHANDLEDREJECTION;
555
+ case TraceDataTypes.HTTP:
556
+ return BreadcrumbTypes.FETCH;
557
+ case TraceDataTypes.PERF:
558
+ case TraceDataTypes.LOG:
559
+ return BreadcrumbTypes.CONSOLE;
560
+ case TraceDataTypes.RESOURCE:
561
+ return BreadcrumbTypes.RESOURCE;
562
+ case TraceDataTypes.ROUTE:
563
+ return BreadcrumbTypes.ROUTE;
564
+ default:
565
+ return BreadcrumbTypes.CUSTOMER;
566
+ }
567
+ }
568
+ function dataCategory2BreadcrumbsCategory(data) {
569
+ switch (data) {
570
+ case TraceDataTypes.JAVASCRIPT:
571
+ case TraceDataTypes.UNKNOWN:
572
+ case TraceDataTypes.UNKNOWN_FUNCTION:
573
+ return BreadcrumbsCategorys.Exception;
574
+ case TraceDataTypes.REACT:
575
+ case TraceDataTypes.VUE:
576
+ return BreadcrumbsCategorys.Lifecycle;
577
+ case TraceDataTypes.PROMISE:
578
+ return BreadcrumbsCategorys.Exception;
579
+ case TraceDataTypes.HTTP:
580
+ return BreadcrumbsCategorys.Http;
581
+ case TraceDataTypes.PERF:
582
+ case TraceDataTypes.LOG:
583
+ return BreadcrumbsCategorys.Debug;
584
+ case TraceDataTypes.RESOURCE:
585
+ return BreadcrumbsCategorys.Http;
586
+ case TraceDataTypes.ROUTE:
587
+ return BreadcrumbsCategorys.Lifecycle;
588
+ }
589
+ }
590
+ function getTraceDataLevel(level) {
591
+ switch (level) {
592
+ case TraceDataSeverity.High:
593
+ case TraceDataSeverity.Critical:
594
+ case TraceDataSeverity.Error:
595
+ return TraceLevelType.Error;
596
+ case TraceDataSeverity.Warning:
597
+ return TraceLevelType.Warn;
598
+ case TraceDataSeverity.Debug:
599
+ case TraceDataSeverity.Low:
600
+ return TraceLevelType.Debug;
601
+ default:
602
+ return TraceLevelType.Info;
603
+ }
604
+ }
605
+ function getTraceDataType(type) {
606
+ switch (type) {
607
+ case TraceDataTypes.PROMISE:
608
+ case TraceDataTypes.UNKNOWN:
609
+ case TraceDataTypes.UNKNOWN_FUNCTION:
610
+ case TraceDataTypes.JAVASCRIPT:
611
+ return TraceTypes.CODE_ERROR;
612
+ case TraceDataTypes.REACT:
613
+ case TraceDataTypes.VUE:
614
+ case TraceDataTypes.ROUTE:
615
+ return TraceTypes.EVENT;
616
+ case TraceDataTypes.PERF:
617
+ return TraceTypes.PERF;
618
+ case TraceDataTypes.HTTP:
619
+ return TraceTypes.FETCH;
620
+ case TraceDataTypes.RESOURCE:
621
+ return TraceTypes.RESOURCE;
622
+ default:
623
+ return TraceTypes.CUSTOMER;
624
+ }
625
+ }
626
+ function getPerfLevel(data) {
627
+ var level = TraceLevelType.Info;
628
+ if (data.LCPRating === 'poor'
629
+ || data.FIDRating === 'poor'
630
+ || data.FCPRating === 'poor'
631
+ || data.TTFBRating === 'poor'
632
+ || data.CLSRating === 'poor'
633
+ || data.INPRating === 'poor') {
634
+ // console.log('[getPerfLevel] error')
635
+ level = TraceLevelType.Error;
636
+ return;
637
+ }
638
+ if (data.LCPRating === 'needs improvement'
639
+ || data.CLSRating === 'needs improvement'
640
+ || data.FCPRating === 'needs improvement'
641
+ || data.FIDRating === 'needs improvement'
642
+ || data.INPRating === 'needs improvement'
643
+ || data.TTFBRating === 'needs improvement') {
644
+ // console.log('[getPerfLevel] warn')
645
+ level = TraceLevelType.Warn;
646
+ return;
647
+ }
648
+ return level;
649
+ }
650
+ function uuid() {
651
+ return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
652
+ /* tslint:disable */
653
+ var r = (Math.random() * 16) | 0;
654
+ /* tslint:disable */
655
+ var v = c === 'x' ? r : (r & 0x3) | 0x8;
656
+ return v.toString(16);
657
+ });
658
+ }
659
+ function safeStringify(obj) {
660
+ var set = new Set();
661
+ var str = JSON.stringify(obj, function (_key, value) {
662
+ if (set.has(value)) {
663
+ return '';
664
+ }
665
+ typeof value === 'object' && set.add(value);
666
+ return value;
667
+ });
668
+ set.clear();
669
+ return str;
670
+ }
671
+
672
+ var originFetch = window.fetch;
673
+ // 拦截fetch
674
+ var interceptFetch = function (_a) {
675
+ var pagePath = _a.pagePath, onError = _a.onError, onBefore = _a.onBefore, onAfter = _a.onAfter;
676
+ return function () {
677
+ var args = [];
678
+ for (var _i = 0; _i < arguments.length; _i++) {
679
+ args[_i] = arguments[_i];
680
+ }
681
+ return __awaiter(void 0, void 0, void 0, function () {
682
+ var url, options, startTime, traceId, traceSegmentId, appId, appVersion, traceIdStr, segmentId, service, instance, endpoint, peer, index, values, res, err_1;
683
+ return __generator(this, function (_a) {
684
+ switch (_a.label) {
685
+ case 0:
686
+ url = args[0], options = args[1];
687
+ startTime = getTimestamp();
688
+ traceId = uuid();
689
+ traceSegmentId = uuid();
690
+ appId = uuid();
691
+ appVersion = 'v1.0.0';
692
+ if (Object.prototype.toString.call(args[0]) === '[object Request]') {
693
+ url = new URL(url.url);
694
+ }
695
+ else {
696
+ if (args[0].startsWith('http://') || args[0].startsWith('https://')) {
697
+ url = new URL(args[0]);
698
+ }
699
+ else if (args[0].startsWith('//')) {
700
+ url = new URL("".concat(window.location.protocol).concat(args[0]));
701
+ }
702
+ else {
703
+ url = new URL(window.location.href);
704
+ url.pathname = args[0];
705
+ }
706
+ }
707
+ traceIdStr = String(encode(traceId));
708
+ segmentId = String(encode(traceSegmentId));
709
+ service = String(encode(appId));
710
+ instance = String(encode(appVersion));
711
+ endpoint = String(encode(pagePath));
712
+ peer = String(encode(url.host));
713
+ index = 1;
714
+ values = "".concat(1, "-").concat(traceIdStr, "-").concat(segmentId, "-").concat(index, "-").concat(service, "-").concat(instance, "-").concat(endpoint, "-").concat(peer);
715
+ if (!options) {
716
+ options = {};
717
+ }
718
+ if (!options.headers) {
719
+ options.headers = {};
720
+ }
721
+ options.headers['sw8'] = values;
722
+ _a.label = 1;
723
+ case 1:
724
+ _a.trys.push([1, 3, , 4]);
725
+ onBefore && onBefore({
726
+ url: url,
727
+ method: options.method,
728
+ options: options
729
+ });
730
+ return [4 /*yield*/, originFetch(url, options)];
731
+ case 2:
732
+ res = _a.sent();
733
+ onAfter && onAfter(res);
734
+ return [3 /*break*/, 4];
735
+ case 3:
736
+ err_1 = _a.sent();
737
+ if (!!options.signal && err_1.name == 'AbortError') {
738
+ onError({
739
+ url: url,
740
+ status: res.status,
741
+ statusText: res.statusText,
742
+ method: options.method,
743
+ body: options.body,
744
+ elapsedTime: getTimestamp() - startTime,
745
+ });
746
+ }
747
+ else {
748
+ throw err_1;
749
+ }
750
+ return [3 /*break*/, 4];
751
+ case 4:
752
+ if (!(res.ok && res.status >= 200 && res.status < 300)) {
753
+ onError({
754
+ url: url,
755
+ status: res.status,
756
+ statusText: res.statusText,
757
+ method: options.method,
758
+ body: options.body,
759
+ elapsedTime: getTimestamp() - startTime,
760
+ });
761
+ }
762
+ return [2 /*return*/, res];
763
+ }
764
+ });
765
+ });
766
+ };
767
+ };
768
+
769
+ // https://www.cnblogs.com/cute/p/13142139.html
770
+ function bin2hex(str) {
771
+ // discuss at: http://phpjs.org/functions/bin2hex/
772
+ // original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
773
+ // bugfixed by: Onno Marsman
774
+ // bugfixed by: Linuxworld
775
+ // improved by: ntoniazzi (http://phpjs.org/functions/bin2hex:361#comment_177616)
776
+ // example 1: bin2hex('Kev');
777
+ // returns 1: '4b6576'
778
+ // example 2: bin2hex(String.fromCharCode(0x00));
779
+ // returns 2: '00'
780
+ // https://gist.github.com/cythrawll/8603752
781
+ // let i = 0
782
+ var o = '';
783
+ // let l: number
784
+ var n = null;
785
+ str += '';
786
+ for (var i = 0, l = str.length; i < l; i++) {
787
+ n = str.charCodeAt(i).toString(16);
788
+ o += n.length < 2 ? '0' + n : n;
789
+ }
790
+ return o;
791
+ }
792
+ /**
793
+ * 生成唯一ID(非用户ID)
794
+ * 通过HTML5 Canvas API创建一个接近不重复的唯一指纹ID
795
+ * @param content
796
+ * @returns
797
+ */
798
+ var getFingerprintId = function (content, options) {
799
+ if (!content) {
800
+ console.error("content is empty");
801
+ return null;
802
+ }
803
+ var canvas = document.createElement('canvas');
804
+ var ctx = canvas.getContext("2d");
805
+ // 如果不存在,则返回空值,说明不支持Canvas指纹
806
+ if (!ctx)
807
+ return null;
808
+ var txt = content || 'geekbang';
809
+ ctx.textBaseline = options && options.textBaseline ? options.textBaseline : "top";
810
+ ctx.font = options && options.font ? options.font : "14px 'Arial'";
811
+ ctx.fillStyle = options && options.reactStyle ? options.reactStyle : "#f60";
812
+ // 先画一个62x20矩形内容
813
+ ctx.fillRect(125, 1, 62, 20);
814
+ ctx.fillStyle = options && options.contentStyle ? options.contentStyle : "#069";
815
+ // 把字填充到矩形内
816
+ ctx.fillText(txt, 2, 15);
817
+ // ctx.fillStyle = "rgba(102, 204, 0, 0.7)";
818
+ // ctx.fillText(txt, 4, 17);
819
+ var b64 = canvas.toDataURL().replace("data:image/png;base64,", "");
820
+ var bin = atob(b64);
821
+ var crc = bin2hex(bin.slice(-16, -12));
822
+ return crc;
823
+ };
824
+
825
+ function unwrapExports (x) {
826
+ return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
827
+ }
828
+
829
+ function createCommonjsModule(fn, module) {
830
+ return module = { exports: {} }, fn(module, module.exports), module.exports;
831
+ }
832
+
833
+ var websdk_min = createCommonjsModule(function (module, exports) {
834
+ !function(e,t){module.exports=t();}(window,function(){return n=[function(e,t,n){function o(e){return (o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function i(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,function(e){e=function(e,t){if("object"!==o(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0===n)return ("string"===t?String:Number)(e);n=n.call(e,t||"default");if("object"!==o(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}(e,"string");return "symbol"===o(e)?e:String(e)}(r.key),r);}}Object.defineProperty(t,"__esModule",{value:!0}),t.webPrint=void 0;var c=n(3),n=function(){function e(){if(!(this instanceof e))throw new TypeError("Cannot call a class as a function");this.logLevel=c.LogLevel.OFF;}var t,n;return t=e,(n=[{key:"initLogLevel",value:function(e){e&&(c.LogLevel[e.debug]?this.logLevel=e.debug:e.debug&&"boolean"==typeof e.debug?this.logLevel=c.LogLevel.DEBUG:this.logLevel=c.LogLevel.OFF);}},{key:"log",value:function(e){1<=this.isEnumVal(this.logLevel)&&console.log("LTSSDK:".concat(e));}},{key:"warn",value:function(e){2<=this.isEnumVal(this.logLevel)&&console.warn("LTSSDK:".concat(e));}},{key:"error",value:function(e){3<=this.isEnumVal(this.logLevel)&&console.error("LTSSDK:".concat(e));}},{key:"isEnumVal",value:function(e){return [c.LogLevel.OFF,c.LogLevel.INFO,c.LogLevel.WARN,c.LogLevel.ERROR,c.LogLevel.DEBUG].indexOf(e)}}])&&i(t.prototype,n),Object.defineProperty(t,"prototype",{writable:!1}),e}();t.webPrint=new n;},function(e,n,t){function r(e){return (r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}Object.defineProperty(n,"__esModule",{value:!0}),n.checkConfigKey=n.checkLabels=n.checkObjectTypeAndLength=n.checkPattern=n.checkLogParamString=n.excludeObject=n.isValidString=n.isEmpty=void 0;var o=t(0),i="The length of $1 exceeds the maximum value of $2.",c="$1 is null.",a="$1 is invalid.";function l(e){return !e||""===e}n.isEmpty=l;n.isValidString=function(e,t){return l(e)?(o.webPrint.warn("LTS.0001|".concat(c.replace("$1",t))),!1):"string"==typeof e||(o.webPrint.warn("LTS.0002|".concat(a.replace("$1",t))),!1)},n.excludeObject=function(e,t){return "object"!==r(e)||(o.webPrint.warn("LTS.0002|".concat(a.replace("$1",t))),!1)},n.checkLogParamString=function(e,t,n){return t?!(String(t).length>n&&(o.webPrint.warn("LTS.0003|".concat(i.replace("$1",e).replace("$2",n))),1)):(o.webPrint.warn("LTS.0001|".concat(c.replace("$1",e))),!1)},n.checkPattern=function(e,t,n){return !!n.test(t)||(o.webPrint.warn("LTS.0006|".concat(e," doesn't match pattern.")),!1)},n.checkObjectTypeAndLength=function(e,t,n){return e&&"object"!==r(e)||"boolean"==typeof e?(o.webPrint.warn("LTS.0002|".concat(a.replace("$1",t))),!1):!(Object.keys(e).length>n&&(o.webPrint.warn("LTS.0003|".concat(i.replace("$1",t).replace("$2",n))),1))},n.checkLabels=function(e){var t;return !e||!(!(0, n.checkObjectTypeAndLength)(e,"labels",50)||!(0, n.checkLogParamString)("labels value",JSON.stringify(e),30720))&&(t=!0,Object.keys(e||{}).forEach(function(e){(0, n.checkLogParamString)("labels key:".concat(e),e,64)||(t=!1),(0, n.checkPattern)("labels key:".concat(e),e,/^[a-zA-Z][A-Za-z0-9_]*$/)||(t=!1);}),t)};n.checkConfigKey=function(e){var t,n=new Set(["url","region","projectId","groupId","streamId","group","cacheThreshold","timeThreshold","debug","platform","logLevel","timeInterval"]);return !e||(t=!0,Object.keys(e).forEach(function(e){n.has(e)||(t=!1);}),t||o.webPrint.warn("LTS.0007|Invalid configuration parameters."),t)};},function(e,t,n){function r(e){return function(e){if(Array.isArray(e))return o(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){var n;if(e)return "string"==typeof e?o(e,t):"Map"===(n="Object"===(n=Object.prototype.toString.call(e).slice(8,-1))&&e.constructor?e.constructor.name:n)||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?o(e,t):void 0}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}Object.defineProperty(t,"__esModule",{value:!0}),t.getLabelMap=t.getHeader=t.getBodyArray=void 0;var i=n(9),c=n(10).version,a=(t.getBodyArray=function(e,t,n){return l(n,e)?a(t,n):null},function(e,t){return {labels:e&&JSON.parse(e)||{},logs:(t||[]).map(function(e){return {contents:[Object.assign(Object.assign({},null==e?void 0:e.content),{__client_time__:e.log_time_ns})]}})}}),l=function(e,t){return !(!e||0===e.length||(t=(e=t||{}).groupId,e=e.streamId,!t)||!e)},u=(t.getLabelMap=function(e){var t=new Map;return e.forEach(function(e){t.has(e.labels)?t.set(e.labels,[].concat(r(t.get(e.labels)),[e])):t.set(e.labels,[e]);}),t},t.getHeader=function(e){var t="X-Sdk-date",n="Lts-Sdk-Version",r={"Content-Type":"application/json"};return r["Lts-Sdk-Request-Id"]=i.UUID.create(),r[n]=c,r[t]=u(),Object.assign(Object.assign({},r),e)},function(){try{return (new Date).toISOString().replace(/\.[\d]{3}Z/,"Z").replace(/(\:)|(\-)/g,"")}catch(e){return ""}});},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.LogLevel=t.REGIONS=t.POLICY_CONSTANTS=void 0,t.POLICY_CONSTANTS={TIME_MIN:1,TIME_MAX:1800,THRESHOLD_MIN:30,THRESHOLD_MAX:1e3},t.REGIONS={"cn-north-7":"cn-north-7","cn-north-4":"cn-north-4","cn-north-6":"cn-north-6","cn-north-5":"cn-north-5","cn-north-9":"cn-north-9","cn-east-3":"cn-east-3","cn-south-1":"cn-south-1","ru-northwest-2":"ru-northwest-2","af-south-1":"af-south-1","cn-north-1":"cn-north-1","cn-east-2":"cn-east-2","cn-south-4":"cn-south-4","cn-south-2":"cn-south-2","cn-southwest-2":"cn-southwest-2","ap-southeast-2":"ap-southeast-2","ap-southeast-3":"ap-southeast-3","ap-southeast-1":"ap-southeast-1","cn-north-2":"cn-north-2"},t.LogLevel={OFF:"OFF",INFO:"INFO",WARN:"WARN",ERROR:"ERROR",DEBUG:"DEBUG"};},function(e,t,n){e.exports=n(5);},function(e,t,n){function o(e){return (o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function i(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,function(e){e=function(e,t){if("object"!==o(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0===n)return ("string"===t?String:Number)(e);n=n.call(e,t||"default");if("object"!==o(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}(e,"string");return "symbol"===o(e)?e:String(e)}(r.key),r);}}Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var c=n(6),a=n(11),l=n(0),u=n(1),n=function(){function t(e){if(!(this instanceof t))throw new TypeError("Cannot call a class as a function");this.uploading=!1,this.sendService={reportFlag:!1,url:""},this.logRecords=[],this.config(e);}var e,n;return e=t,(n=[{key:"config",value:function(e){(0, u.checkObjectTypeAndLength)(e,"Configuration",11)&&(this.webConfig=Object.assign(Object.assign({},this.webConfig),e),l.webPrint.initLogLevel(this.webConfig),this.webConfig.timeThreshold=(null==(e=this.webConfig)?void 0:e.timeInterval)||(null==(e=this.webConfig)?void 0:e.timeThreshold)||3),a.default.checkConfig(this.webConfig)?(this.sendService.reportFlag=!0,this.sendService.url=a.default.updateUrl(this.webConfig),this.logUploadPolicyScheduleTime(),l.webPrint.log("init success")):(this.sendService.reportFlag=!1,l.webPrint.error("Failed to initialize the sdk."));}},{key:"reportImmediately",value:function(e,t){l.webPrint.initLogLevel(this.webConfig),this.sendService.reportFlag?(c.default.writeLog(Object.assign(Object.assign({},this.webConfig),this.sendService),this.logRecords,e,t),c.default.uploadData(Object.assign(Object.assign({},this.webConfig),this.sendService),this.logRecords)):l.webPrint.log("LTS.0100|The LTSSDK is not initialized.");}},{key:"report",value:function(e,t){l.webPrint.initLogLevel(this.webConfig),this.sendService.reportFlag?e?c.default.writeLog(Object.assign(Object.assign({},this.webConfig),this.sendService),this.logRecords,e,t):l.webPrint.warn("LTS.0001|Content is null."):l.webPrint.log("LTS.0100|The LTSSDK is not initialized.");}},{key:"logUploadPolicyScheduleTime",value:function(){var e;this.webConfig.timeThreshold&&!this.uploading&&(e=1e3*this.webConfig.timeThreshold,this.setHeartbeatFunc(e));}},{key:"setHeartbeatFunc",value:function(e){var t=this;this.sendTimer=setTimeout(function(){t.uploading=!0,t.logRecords=t.logRecords.filter(function(e){return "SUCCESS"!==e.sendState}),c.default.uploadData(Object.assign(Object.assign({},t.webConfig),t.sendService),t.logRecords),t.uploading=!1,t.logUploadPolicyScheduleTime();},e);}}])&&i(e.prototype,n),Object.defineProperty(e,"prototype",{writable:!1}),t}();t.default=n;},function(e,t,n){function o(e){return (o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function i(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,function(e){e=function(e,t){if("object"!==o(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0===n)return ("string"===t?String:Number)(e);n=n.call(e,t||"default");if("object"!==o(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}(e,"string");return "symbol"===o(e)?e:String(e)}(r.key),r);}}Object.defineProperty(t,"__esModule",{value:!0});var c=n(7),a=n(2),l=n(1),u=n(0),n=function(){function e(){if(!(this instanceof e))throw new TypeError("Cannot call a class as a function");this.failTime=0,this.failTimer=null,this.failLockTime=1,this.censor=function(e,t){return t==1/0||t==-1/0?String(t):t};}var t,n;return t=e,(n=[{key:"uploadData",value:function(n,e){var r=this;n.reportFlag&&(10<=this.failTime?this.initTimeLock():(e=e.filter(function(e){return "READY"===e.sendState||"RESEND"===e.sendState}),(e=(0, a.getLabelMap)(e))&&0!==e.size&&e.forEach(function(e,t){e=r.getLogListSplitByBodyLimit(e);r.sendDataByPackage(e,t,n);})));}},{key:"getLogListSplitByBodyLimit",value:function(t){var n,r,o,i;return t&&0!==t.length?(n=[],i=o=r=0,t.forEach(function(e){e=JSON.stringify(e).length;96256<=(i+=e)&&(n.push(t.slice(r,o)),i=e,r=o),o++;}),r!==o&&n.push(t.slice(r,o)),n):[]}},{key:"sendDataByPackage",value:function(e,r,o){var i=this;e.forEach(function(t){var e,n=(0, a.getBodyArray)(o,r,t);"string"==typeof n&&(0, l.isEmpty)(n)||(e=(0, a.getHeader)({}),t.forEach(function(e){e.sendState="SENDING";}),(0, c.default)(n,e,o).then(function(){i.doUploadSuccess(t,o);},function(e){i.doUploadFail(o,t,e);}).catch(function(e){i.doUploadFail(o,t,e);}));});}},{key:"initTimeLock",value:function(){var e=this;this.failTimer||(this.failLockTime=this.failLockTime<32?2*this.failLockTime:32,this.failTimer=setTimeout(function(){e.failTime=0,e.failTimer=null;},6e4*this.failLockTime));}},{key:"doUploadFail",value:function(e,t,n){this.failTime++,t.forEach(function(e){e.sendState="RESEND";}),u.webPrint.initLogLevel(e),u.webPrint.error("LTS.0300|Request failed, response code=".concat(n.status||"--",", error=").concat(n.statusText||"send fail","."));}},{key:"doUploadSuccess",value:function(e,t){this.failTime=0,this.failLockTime=1,e.forEach(function(e){e.sendState="SUCCESS";}),u.webPrint.initLogLevel(t),u.webPrint.log("senddata success.");}},{key:"logUploadPolicyThreshold",value:function(e,t){e.cacheThreshold&&t.filter(function(e){return "READY"===e.sendState||"RESEND"===e.sendState}).length>=e.cacheThreshold&&this.uploadData(e,t);}},{key:"writeLog",value:function(t,n,e,r){var o=this;e&&(0, l.checkLabels)(r)&&(Array.isArray(e)?e.forEach(function(e){o.addLogToList(t,n,e,r);}):this.addLogToList(t,n,e,r));}},{key:"addLogToList",value:function(e,t,n,r){(0, l.checkObjectTypeAndLength)(n,"content",300)?(r={labels:JSON.stringify(r,this.censor),content:this.formatLogContent(n),sendState:"READY",log_time_ns:(new Date).getTime()},t.push(r),this.logUploadPolicyThreshold(e,t)):(u.webPrint.initLogLevel(e),u.webPrint.warn("LTS.0002|Log content is invalid."));}},{key:"formatLogContent",value:function(e){var t=JSON.stringify(e,this.censor);return 30720<(null==t?void 0:t.length)?{content:t.substring(0,30720)}:e}}])&&i(t.prototype,n),Object.defineProperty(t,"prototype",{writable:!1}),e}();t.default=new n;},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r=n(8);t.default=function(e,t,n){return (new r.default).webRequest(e,t,n)};},function(e,t,n){function o(e){return (o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function i(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,function(e){e=function(e,t){if("object"!==o(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0===n)return ("string"===t?String:Number)(e);n=n.call(e,t||"default");if("object"!==o(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}(e,"string");return "symbol"===o(e)?e:String(e)}(r.key),r);}}Object.defineProperty(t,"__esModule",{value:!0});var c=n(2),n=function(){function e(){if(!(this instanceof e))throw new TypeError("Cannot call a class as a function")}var t,n;return t=e,(n=[{key:"webRequest",value:function(e,t,n){return n.url?(t=(0, c.getHeader)(t),null!==window&&void 0!==window&&window.XMLHttpRequest?this.sendByAjax(e,t,n):"undefined"!=typeof fetch?this.sendByBeacon(e,t,n):Promise.reject(new Error("not supported"))):Promise.reject(new Error("check the config."))}},{key:"sendByBeacon",value:function(e,r,t){var o;return "undefined"!=typeof fetch?(o=null==t?void 0:t.url,new Promise(function(t,n){fetch(o,{method:"POST",body:JSON.stringify(e),headers:r}).then(function(e){200===e.status?t():n(e);}).catch(function(e){n(e);});})):Promise.reject(new Error("missing fetch method"))}},{key:"sendByAjax",value:function(f,d,b){return new Promise(function(e,t){var n=null==b?void 0:b.url;if(window.XMLHttpRequest&&n){var r=new XMLHttpRequest;if(r.timeout=15e3,r.onabort=function(){t(new Error("The request was aborted!"));},r.onerror=function(){t(new Error("An error occurred during the transaction!"));},r.ontimeout=function(){t(new Error("Timeout!"));},r.onload=function(){r.readyState===r.DONE&&200===r.status?e():t(new Error("senddata fail!"));},b&&"get"===String(b.method).toLocaleLowerCase()){r.open("GET",n+"?"+f,!0);for(var o=0,i=Object.keys(d);o<i.length;o++){var c=i[o];r.setRequestHeader(c,d[c]);}r.send();}else{var a=b&&b.async;r.open("POST",n,null==a||a);for(var l=0,u=Object.keys(d);l<u.length;l++){var s=u[l];r.setRequestHeader(s,d[s]);}r.send(JSON.stringify(f));}}else t(new Error("url is missing"));})}}])&&i(t.prototype,n),Object.defineProperty(t,"prototype",{writable:!1}),e}();t.default=n;},function(e,t,n){function o(e){return (o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function i(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,function(e){e=function(e,t){if("object"!==o(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0===n)return ("string"===t?String:Number)(e);n=n.call(e,t||"default");if("object"!==o(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}(e,"string");return "symbol"===o(e)?e:String(e)}(r.key),r);}}Object.defineProperty(t,"__esModule",{value:!0}),t.UUID=void 0;var r=function(){function e(){if(!(this instanceof e))throw new TypeError("Cannot call a class as a function")}var t,n;return t=e,(n=[{key:"create",value:function(){var e=Math.floor(Math.random()*(Math.pow(2,12)-1+1))+0,t=Math.floor(Math.random()*(Math.pow(2,32)-1+1))+0,n=Math.floor(Math.random()*(Math.pow(2,16)-1+1))+0,r=Math.floor(Math.random()*(Math.pow(2,6)-1+1))+0,o=Math.floor(Math.random()*(Math.pow(2,8)-1+1))+0,i=(0|Math.random()*(1<<30))+(0|Math.random()*(1<<18))*(1<<30);function c(e,t,n){n=n||"0";for(var r=t-(e=String(e)).length;0<r;r>>>=1,n+=n)1&r&&(e=n+e);return e}return [c(t.toString(16),8),c(n.toString(16),4),c((16384|e).toString(16),4),c((128|r).toString(16),2),c(o.toString(16),2),c(i.toString(16),12)].join("")}}])&&i(t.prototype,n),Object.defineProperty(t,"prototype",{writable:!1}),e}();t.UUID=new r;},function(e){e.exports=JSON.parse('{"name":"@cloud/lts-web-sdk","version":"1.0.24","description":"lts-web-sdk","main":"./websdk.min.js","license":"MIT","scripts":{"debug":"http-serve -p 8080","build":"rimraf dist && cross-env NODE_ENV=development webpack --config webpack.config.js","build:prod":"rimraf dist && tsc -p tsconfig.json && cross-env NODE_ENV=production webpack --config webpack.config.js","lint":"eslint --ext .js src/","jest":"jest --coverage --watch","fix-lint":"eslint --ext .js src/ --fix","build:baidu":"rimraf lib && npx babel src --out-dir dist/src","build:bd":"rimraf dist && tsc -p tsconfig.json && cross-env NODE_ENV=production webpack --config webpack.config.js","build:cdn":"rimraf dist && tsc -p tsconfig.json && cross-env NODE_ENV=production webpack --config webpack-cdn.config.js","tsc":"tsc -p tsconfig.json","test":"mocha --exit","test-report":"tsc -p tsconfig.json && nyc --reporter=html mocha --exit"},"devDependencies":{"@babel/cli":"^7.4.3","@babel/core":"^7.4.3","@babel/preset-env":"^7.4.3","@cloud/eslint-config-cbc":"^1.7.3","babel-eslint":"^10.1.0","babel-loader":"^8.0.5","babel-plugin-syntax-dynamic-import":"^6.18.0","cross-env":"^5.2.1","eslint":"^6.1.0","http-serve":"^1.0.1","jest":"^27.4.5","mocha":"^10.2.0","nyc":"^15.1.0","sinon":"^15.2.0","uglifyjs-webpack-plugin":"^2.1.2","webpack":"^4.29.6","webpack-cli":"^3.3.0"}}');},function(e,t,n){function o(e){return (o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function i(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,function(e){e=function(e,t){if("object"!==o(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0===n)return ("string"===t?String:Number)(e);n=n.call(e,t||"default");if("object"!==o(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}(e,"string");return "symbol"===o(e)?e:String(e)}(r.key),r);}}Object.defineProperty(t,"__esModule",{value:!0});var c=n(1),a=n(3),l=n(0),n=function(){function e(){var t=this;if(!(this instanceof e))throw new TypeError("Cannot call a class as a function");this.checkConfig=function(e){return !!e&&t.checkReportPolices(e)&&t.checkLogConfig(e)&&t.checkUrl(e)&&t.checkRegion(e)&&t.checkProjectId(e)&&(0, c.checkConfigKey)(e)},this.checkProjectId=function(e){e=null==e?void 0:e.projectId;return !(!(0, c.isValidString)(e,"projectId")||!(0, c.checkLogParamString)("projectId",e,128))},this.checkRegion=function(e){return !(!(0, c.checkLogParamString)("region",null==e?void 0:e.region,128)||!a.REGIONS[null==e?void 0:e.region]&&(l.webPrint.warn("LTS.0009|Unsupported region."),1))},this.checkUrl=function(e){return !(null!=e&&e.url&&!(0, c.checkLogParamString)("url",null==e?void 0:e.url,128)||null!=e&&e.url&&("string"!=typeof(null==e?void 0:e.url)||!/^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]+$/.test(null==e?void 0:e.url))&&(l.webPrint.warn("LTS.0006|Url doesn't match pattern."),1))},this.checkLogConfig=function(e){var t=null==e?void 0:e.groupId;return !!((0, c.isValidString)(t,"groupId")&&(0, c.checkLogParamString)("groupId",t,128)&&(t=null==e?void 0:e.streamId,(0, c.isValidString)(t,"streamId"))&&(0, c.checkLogParamString)("streamId",t,128))};}var t,n;return t=e,(n=[{key:"updateUrl",value:function(e){var t=null==e?void 0:e.url,t=(null!=(t=t||"https://lts-access.".concat(e.region,".myhuaweicloud.com"))?t:"").split(",")[0];return "".concat(t,"/v3/").concat(e.projectId,"/lts/groups/").concat(e.groupId,"/streams/").concat(e.streamId,"/logs")}},{key:"checkReportPolices",value:function(e){if(e)return this.checkThreshold(e,"timeThreshold",a.POLICY_CONSTANTS.TIME_MIN,a.POLICY_CONSTANTS.TIME_MAX,"timeInterval")&&this.checkThreshold(e,"cacheThreshold",a.POLICY_CONSTANTS.THRESHOLD_MIN,a.POLICY_CONSTANTS.THRESHOLD_MAX)}},{key:"checkThreshold",value:function(e,t,n,r,o){var i=e[t];if(void 0===i)e[t]=30;else{if("number"!=typeof i)return l.webPrint.warn("LTS.0002|".concat(o||t," is invalid.")),!1;if(i<n||r<i)return l.webPrint.warn("LTS.0004|The value of ".concat(o||t," must be between ").concat(n," and ").concat(r,".")),!1}return !0}}])&&i(t.prototype,n),Object.defineProperty(t,"prototype",{writable:!1}),e}();t.default=new n;}],r={},o.m=n,o.c=r,o.d=function(e,t,n){o.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n});},o.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0});},o.t=function(t,e){if(1&e&&(t=o(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var n=Object.create(null);if(o.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var r in t)o.d(n,r,function(e){return t[e]}.bind(null,r));return n},o.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(t,"a",t),t},o.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},o.p="",o(o.s=4);function o(e){var t;return (r[e]||(t=r[e]={i:e,l:!1,exports:{}},n[e].call(t.exports,t,t.exports,o),t.l=!0,t)).exports}var n,r;});
835
+ });
836
+
837
+ var LTS_WEB_SDK = unwrapExports(websdk_min);
838
+ var websdk_min_1 = websdk_min.lib;
839
+
840
+ var ltsInstance = null;
841
+ function getDeviceClient() {
842
+ var _a, _b, _c;
843
+ if (typeof navigator === 'undefined') {
844
+ return {};
845
+ }
846
+ return {
847
+ name: navigator.userAgent,
848
+ version: navigator.appVersion,
849
+ language: navigator.language,
850
+ platform: navigator.platform,
851
+ screen: {
852
+ width: ((_a = window.screen) === null || _a === void 0 ? void 0 : _a.width) || 0,
853
+ height: ((_b = window.screen) === null || _b === void 0 ? void 0 : _b.height) || 0,
854
+ colorDepth: ((_c = window.screen) === null || _c === void 0 ? void 0 : _c.colorDepth) || 0
855
+ },
856
+ viewport: {
857
+ width: window.innerWidth || 0,
858
+ height: window.innerHeight || 0
859
+ }
860
+ };
861
+ }
862
+ function convertTraceDataToLTS(traceData) {
863
+ var data = traceData.data;
864
+ var hasStack = data && 'stack' in data && data.stack;
865
+ var exception = hasStack
866
+ ? {
867
+ values: [
868
+ {
869
+ value: data.message || data.name || 'Unknown error',
870
+ stacktrace: {
871
+ frames: data.stack.split('\n').map(function (line) {
872
+ var _a, _b, _c, _d;
873
+ return ({
874
+ filename: ((_a = line.match(/\((.+):\d+:\d+\)/)) === null || _a === void 0 ? void 0 : _a.pop()) || 'unknown',
875
+ lineno: parseInt(((_b = line.match(/:(\d+):/)) === null || _b === void 0 ? void 0 : _b.pop()) || '0'),
876
+ colno: parseInt(((_c = line.match(/:\d+:(\d+)\)/)) === null || _c === void 0 ? void 0 : _c.pop()) || '0'),
877
+ function: ((_d = line.match(/at\s+(.+)\s+\(/)) === null || _d === void 0 ? void 0 : _d.pop()) || 'unknown'
878
+ });
879
+ })
880
+ }
881
+ }
882
+ ]
883
+ }
884
+ : undefined;
885
+ var tags = {};
886
+ if (traceData.fpId)
887
+ tags.fpId = traceData.fpId;
888
+ if (traceData.pid)
889
+ tags.pid = traceData.pid;
890
+ if (traceData.appId)
891
+ tags.appId = traceData.appId;
892
+ if (traceData.uid)
893
+ tags.uid = String(traceData.uid);
894
+ if (data && 'tag' in data && data.tag) {
895
+ tags.tag = data.tag;
896
+ }
897
+ var hasUrl = data && 'url' in data && data.url;
898
+ var request = hasUrl
899
+ ? {
900
+ url: data.url || '',
901
+ method: 'method' in data && data.method ? data.method : 'GET',
902
+ headers: {},
903
+ data: 'body' in data && data.body ? data.body : undefined
904
+ }
905
+ : undefined;
906
+ return {
907
+ client: getDeviceClient(),
908
+ environment: traceData.bt || 'unknown',
909
+ tags: tags,
910
+ level: traceData.level || 'info',
911
+ exception: exception,
912
+ transaction: traceData.traceId,
913
+ extra: {
914
+ type: traceData.type,
915
+ url: traceData.url,
916
+ ua: traceData.ua,
917
+ createdAt: traceData.createdAt,
918
+ updatedAt: traceData.updatedAt,
919
+ breadcrumbs: traceData.breadcrumbs,
920
+ perf: traceData.perf
921
+ },
922
+ request: request
923
+ };
924
+ }
925
+ function sendByLTS(ltsConfig, data) {
926
+ try {
927
+ if (!ltsInstance) {
928
+ ltsInstance = new LTS_WEB_SDK({
929
+ region: ltsConfig.region,
930
+ projectId: ltsConfig.projectId,
931
+ groupId: ltsConfig.groupId,
932
+ streamId: ltsConfig.streamId,
933
+ debug: ltsConfig.debug || false
934
+ });
935
+ }
936
+ var ltsData = convertTraceDataToLTS(data);
937
+ ltsInstance.reportImmediately(ltsData);
938
+ }
939
+ catch (error) {
940
+ console.error('Failed to send data to LTS:', error);
941
+ }
942
+ }
943
+ // 使用sendBeacon发送数据
944
+ function sendBeacon(url, data) {
945
+ if (typeof navigator === 'undefined')
946
+ return;
947
+ navigator.sendBeacon && navigator.sendBeacon(url, JSON.stringify(data));
948
+ }
949
+ // 使用img发送数据
950
+ function sendByImg(url, data) {
951
+ var spliceStr = url.indexOf('?') === -1 ? '?' : '&';
952
+ var imageUrl = "".concat(url).concat(spliceStr, "data=").concat(encodeURIComponent(safeStringify(data)));
953
+ var img = new Image();
954
+ img.src = imageUrl;
955
+ img.onload = function () {
956
+ console.log('Tracking data sent successfully!');
957
+ img = null;
958
+ };
959
+ img.onerror = function (err) {
960
+ console.error('Failed to send tracking data.', err);
961
+ img = null;
962
+ };
963
+ }
964
+ // 统一的发送接口
965
+ function send(method, url, ltsConfig, data) {
966
+ switch (method) {
967
+ case SendMethod.BEACON:
968
+ if (url) {
969
+ sendBeacon(url, data);
970
+ }
971
+ else {
972
+ console.warn('dsn is required for beacon method');
973
+ }
974
+ break;
975
+ case SendMethod.LTS:
976
+ if (ltsConfig) {
977
+ sendByLTS(ltsConfig, data);
978
+ }
979
+ else {
980
+ console.warn('ltsConfig is required for lts method');
981
+ }
982
+ break;
983
+ case SendMethod.IMG:
984
+ default:
985
+ if (url) {
986
+ sendByImg(url, data);
987
+ }
988
+ else {
989
+ console.warn('dsn is required for img method');
990
+ }
991
+ break;
992
+ }
993
+ }
994
+
995
+ var BaseTrace = /** @class */ (function () {
996
+ function BaseTrace(options) {
997
+ var _this = this;
998
+ // 日志上报后端API
999
+ this.dsn = '';
1000
+ // 页面ID
1001
+ this.pageId = '';
1002
+ //
1003
+ this.userAgent = navigator.userAgent;
1004
+ //
1005
+ this.browserType = BrowserType.MOBILE;
1006
+ // fingerprintId
1007
+ this.fpId = '';
1008
+ // user id
1009
+ this.uid = '';
1010
+ // appId
1011
+ this.appId = '';
1012
+ // 是否开启debug状态
1013
+ this.debug = true;
1014
+ // 发送方式
1015
+ this.sendMethod = SendMethod.IMG;
1016
+ // 性能日志数据
1017
+ this.perfData = {
1018
+ id: ''
1019
+ };
1020
+ // 存储错误资源数据
1021
+ this.resources = [];
1022
+ this.result = {};
1023
+ // 记录用户行为
1024
+ this.breadcrumb = [];
1025
+ // 最大存储用户行为
1026
+ this.maxBreadcrumb = 10;
1027
+ // 是否开启用户行为
1028
+ this.breadcrumbEnabled = true;
1029
+ this.observer = null;
1030
+ // 存储链路日志数据
1031
+ this.queue = [];
1032
+ // 发送请求时间间隔
1033
+ this.sendTimer = 1000;
1034
+ console.log('BaseTrace constructor.');
1035
+ this.pageId = uuid();
1036
+ this.dsn = options.dsn || '';
1037
+ this.appId = options.appId;
1038
+ this.debug = !!options.debug;
1039
+ this.sendMethod = options.sendMethod || SendMethod.IMG;
1040
+ this.ltsConfig = options.ltsConfig;
1041
+ this.perfData = {
1042
+ id: generateUniqueId$1()
1043
+ };
1044
+ this.fpId = getFingerprintId('TraceCourse');
1045
+ this.observer = new PerformanceObserver(function (list, observer) {
1046
+ list.getEntries().forEach(function (entry) {
1047
+ _this.debug && console.debug("name : ".concat(entry.name));
1048
+ _this.debug && console.debug("type : ".concat(entry.entryType));
1049
+ _this.debug && console.debug("duration: ".concat(entry.duration));
1050
+ if (entry.entryType === 'resource') {
1051
+ _this.handleObserverResource(entry);
1052
+ }
1053
+ });
1054
+ });
1055
+ }
1056
+ BaseTrace.prototype.log = function (log) {
1057
+ this.saveBreadcrumb({
1058
+ name: 'customer-log',
1059
+ level: log.level,
1060
+ type: dataTypes2BreadcrumbsType(log.type),
1061
+ category: dataCategory2BreadcrumbsCategory(log.type),
1062
+ message: log.message,
1063
+ time: getTimestamp()
1064
+ });
1065
+ this.debug && console.debug("log: ".concat(JSON.stringify(log)));
1066
+ this.send(log);
1067
+ };
1068
+ BaseTrace.prototype.info = function (message, tag) {
1069
+ this.log({
1070
+ name: 'customer-info',
1071
+ type: TraceDataTypes.LOG,
1072
+ level: TraceDataSeverity.Info,
1073
+ message: message,
1074
+ time: getTimestamp(),
1075
+ dataId: hashCode("".concat(message, "|").concat(tag || '')),
1076
+ tag: tag
1077
+ });
1078
+ };
1079
+ BaseTrace.prototype.warn = function (message, tag) {
1080
+ this.log({
1081
+ name: 'customer-warning',
1082
+ type: TraceDataTypes.LOG,
1083
+ level: TraceDataSeverity.Warning,
1084
+ message: message,
1085
+ time: getTimestamp(),
1086
+ dataId: hashCode("".concat(message, "|").concat(tag || '')),
1087
+ tag: tag
1088
+ });
1089
+ };
1090
+ BaseTrace.prototype.error = function (message, tag) {
1091
+ this.log({
1092
+ name: 'customer-error',
1093
+ type: TraceDataTypes.LOG,
1094
+ level: TraceDataSeverity.Error,
1095
+ message: message,
1096
+ time: getTimestamp(),
1097
+ dataId: hashCode("".concat(message, "|").concat(tag || '')),
1098
+ tag: tag
1099
+ });
1100
+ };
1101
+ BaseTrace.prototype.setTraceData = function (data) {
1102
+ var type = TraceTypes.CONSOLE;
1103
+ var level = TraceLevelType.Debug;
1104
+ var _data = null;
1105
+ var perf = null;
1106
+ if (!!data.dataId) {
1107
+ type = getTraceDataType(data.type);
1108
+ level = getTraceDataLevel(data.level);
1109
+ _data = data;
1110
+ }
1111
+ if (!!data.id) {
1112
+ type = TraceTypes.PERF;
1113
+ level = getPerfLevel(data);
1114
+ perf = data;
1115
+ }
1116
+ var traceData = {
1117
+ type: type,
1118
+ level: level,
1119
+ createdAt: getTimestamp(),
1120
+ updatedAt: getTimestamp(),
1121
+ data: _data,
1122
+ perf: perf,
1123
+ breadcrumbs: this.breadcrumb,
1124
+ traceId: uuid(),
1125
+ ua: this.userAgent,
1126
+ bt: this.browserType,
1127
+ fpId: this.fpId,
1128
+ appId: this.appId,
1129
+ clientType: TraceClientTypes.BROWSER_H5,
1130
+ url: document.URL,
1131
+ pid: this.pageId,
1132
+ uid: this.uid
1133
+ };
1134
+ this.debug && console.log('[setTraceData]traceData: ', traceData);
1135
+ return traceData;
1136
+ };
1137
+ BaseTrace.prototype.send = function (data) {
1138
+ var traceData = this.setTraceData(data);
1139
+ send(this.sendMethod, this.dsn, this.ltsConfig, traceData);
1140
+ };
1141
+ BaseTrace.prototype.createPerfReport = function () {
1142
+ var _this = this;
1143
+ var report = function (metric) {
1144
+ _this.perfData = __assign(__assign({}, _this.perfData), mapMetric(metric));
1145
+ };
1146
+ setTimeout(function () {
1147
+ var supportedEntryTypes = (PerformanceObserver && PerformanceObserver.supportedEntryTypes) || [];
1148
+ var isLatestVisibilityChangeSupported = supportedEntryTypes.indexOf('layout-shift') !== -1;
1149
+ if (isLatestVisibilityChangeSupported) {
1150
+ var onVisibilityChange = function () {
1151
+ if (document.visibilityState === 'hidden') {
1152
+ console.log('this.send', _this.perfData);
1153
+ _this.send(_this.perfData);
1154
+ // removeEventListener('visibilitychange', onVisibilityChange, true)
1155
+ }
1156
+ };
1157
+ addEventListener('visibilitychange', onVisibilityChange, true);
1158
+ }
1159
+ else {
1160
+ addEventListener('pagehide', function () {
1161
+ console.log('pagehide', _this.perfData);
1162
+ _this.send(_this.perfData);
1163
+ }, { capture: true, once: true });
1164
+ }
1165
+ });
1166
+ return report;
1167
+ };
1168
+ BaseTrace.prototype.saveError = function (event) {
1169
+ console.log('[onResourceError] event: ', event);
1170
+ var target = event.target || event.srcElement;
1171
+ var isResTarget = isResourceTarget(target);
1172
+ if (!isResTarget) {
1173
+ var traceData = {
1174
+ dataId: hashCode("".concat(event.type, "-").concat(event.error.stack)),
1175
+ name: 'script-error',
1176
+ level: TraceDataSeverity.Error,
1177
+ message: event.message,
1178
+ time: getTimestamp(),
1179
+ type: TraceDataTypes.JAVASCRIPT,
1180
+ stack: event.error.stack
1181
+ };
1182
+ this.resources.push(traceData);
1183
+ this.breadcrumb.push({
1184
+ name: event.error.name,
1185
+ type: BreadcrumbTypes.CODE_ERROR,
1186
+ category: BreadcrumbsCategorys.Exception,
1187
+ level: TraceDataSeverity.Error,
1188
+ message: event.message,
1189
+ stack: event.error.stack,
1190
+ time: getTimestamp()
1191
+ });
1192
+ this.queue.push(this.setTraceData(traceData));
1193
+ }
1194
+ else {
1195
+ var url = target.getAttribute('src') || target.getAttribute('href');
1196
+ var traceData = {
1197
+ dataId: hashCode("".concat(target.nodeName.toLowerCase(), "-").concat(event.message).concat(url)),
1198
+ name: 'resource-load-error',
1199
+ level: TraceDataSeverity.Warning,
1200
+ message: event.message,
1201
+ time: getTimestamp(),
1202
+ type: TraceDataTypes.RESOURCE,
1203
+ stack: null
1204
+ };
1205
+ this.resources.push(traceData);
1206
+ this.breadcrumb.push({
1207
+ name: traceData.name,
1208
+ type: BreadcrumbTypes.RESOURCE,
1209
+ category: BreadcrumbsCategorys.Exception,
1210
+ level: TraceDataSeverity.Warning,
1211
+ message: event.message,
1212
+ time: getTimestamp()
1213
+ });
1214
+ this.queue.push(this.setTraceData(traceData));
1215
+ }
1216
+ };
1217
+ BaseTrace.prototype.handleObserverResource = function (entry) {
1218
+ if (entry.entryType === 'resource') {
1219
+ var level = TraceDataSeverity.Info;
1220
+ if (entry.duration > 1000 && entry.duration < 1500) {
1221
+ level = TraceDataSeverity.Warning;
1222
+ }
1223
+ else if (entry.duration > 1500) {
1224
+ level = TraceDataSeverity.Error;
1225
+ }
1226
+ entry.duration > 1000 &&
1227
+ this.resources.push({
1228
+ url: entry.name,
1229
+ name: "".concat(entry.entryType, "-duration-").concat(entry.initiatorType),
1230
+ type: TraceDataTypes.PERF,
1231
+ level: level,
1232
+ message: "duration:".concat(Math.round(entry.duration)),
1233
+ time: getTimestamp(),
1234
+ dataId: hashCode("".concat(entry.entryType, "-").concat(entry.name))
1235
+ });
1236
+ }
1237
+ };
1238
+ // 这里的构造数据有问题,后续需要更新
1239
+ BaseTrace.prototype.onFetchError = function (message) {
1240
+ console.log('[onFetchError] message: ', message);
1241
+ var traceBaseData = {
1242
+ dataId: hashCode("".concat(message.url, "-").concat(message.method, "-").concat(message.status, "-").concat(message.statusText)),
1243
+ name: 'fetch-error',
1244
+ level: TraceDataSeverity.Critical,
1245
+ message: '',
1246
+ time: getTimestamp(),
1247
+ type: TraceDataTypes.HTTP
1248
+ };
1249
+ var errorData = __assign(__assign({}, traceBaseData), { url: message.url, status: message.status, message: message.statusText, method: message.method, body: message.body, elapsedTime: message.elapsedTime, httpType: 'fetch' });
1250
+ console.log('error data: ', errorData);
1251
+ this.queue.push(this.setTraceData(errorData));
1252
+ };
1253
+ BaseTrace.prototype.onGlobalError = function () {
1254
+ var _t = this;
1255
+ console.log('onGlobalError');
1256
+ window.addEventListener('error', function (event) {
1257
+ _t.saveError(event);
1258
+ });
1259
+ window.addEventListener('unhandledrejection', function (event) {
1260
+ // _t.saveError(event)
1261
+ console.log(event);
1262
+ if (event instanceof PromiseRejectionEvent) {
1263
+ var errorEvent = new ErrorEvent('promiseRejection', {
1264
+ message: event.reason.toString(),
1265
+ // filename: event.filename,
1266
+ // lineno: event.lineno,
1267
+ // colno: event.colno,
1268
+ error: event.reason
1269
+ });
1270
+ _t.saveError(errorEvent);
1271
+ }
1272
+ else if (event instanceof ErrorEvent) {
1273
+ _t.saveError(event);
1274
+ }
1275
+ });
1276
+ };
1277
+ BaseTrace.prototype.onGlobalClick = function () {
1278
+ var _this = this;
1279
+ window.addEventListener('click', function (event) {
1280
+ var target = event.target;
1281
+ var innerHTML = target.innerHTML;
1282
+ var bc = {
1283
+ name: 'click',
1284
+ level: TraceDataSeverity.Normal,
1285
+ type: BreadcrumbTypes.CLICK,
1286
+ category: BreadcrumbsCategorys.User,
1287
+ message: innerHTML,
1288
+ time: getTimestamp()
1289
+ };
1290
+ _this.saveBreadcrumb(bc);
1291
+ });
1292
+ };
1293
+ BaseTrace.prototype.onObserverResource = function () {
1294
+ // const observer = new PerformanceObserver((list, observer) => {
1295
+ // list.getEntries().forEach((entry) => {
1296
+ // console.log(`name : ${entry.name}`);
1297
+ // console.log(`type : ${entry.entryType}`);
1298
+ // console.log(`duration: ${entry.duration}`);
1299
+ // _t.handleObserverResource(entry)
1300
+ // });
1301
+ // });
1302
+ // observer.observe({
1303
+ // entryTypes: ["resource"],
1304
+ // });
1305
+ };
1306
+ BaseTrace.prototype.saveBreadcrumb = function (data) {
1307
+ if (this.breadcrumbEnabled) {
1308
+ this.breadcrumb.push(data);
1309
+ if (this.breadcrumb.length > this.maxBreadcrumb) {
1310
+ this.breadcrumb.shift();
1311
+ }
1312
+ }
1313
+ };
1314
+ BaseTrace.prototype.setUserId = function (userId) {
1315
+ this.uid = userId;
1316
+ };
1317
+ // 初始化实例
1318
+ BaseTrace.init = function (options) {
1319
+ var traceSdk = new BaseTrace(options);
1320
+ traceSdk.onGlobalError();
1321
+ // traceSdk.onObserverResource()
1322
+ traceSdk.observer.observe({
1323
+ entryTypes: ['resource']
1324
+ });
1325
+ window.fetch = interceptFetch({
1326
+ pagePath: '',
1327
+ onError: function (error) {
1328
+ traceSdk.onFetchError(error);
1329
+ },
1330
+ onBefore: function (props) {
1331
+ traceSdk.saveBreadcrumb({
1332
+ name: 'fetch',
1333
+ level: TraceDataSeverity.Normal,
1334
+ type: BreadcrumbTypes.FETCH,
1335
+ category: BreadcrumbsCategorys.Http,
1336
+ message: props.url,
1337
+ time: getTimestamp(),
1338
+ request: {
1339
+ method: props.method,
1340
+ url: props.url,
1341
+ options: props.options
1342
+ }
1343
+ });
1344
+ },
1345
+ onAfter: function (result) {
1346
+ traceSdk.saveBreadcrumb({
1347
+ name: 'fetch',
1348
+ level: TraceDataSeverity.Normal,
1349
+ type: BreadcrumbTypes.FETCH,
1350
+ category: BreadcrumbsCategorys.Http,
1351
+ message: result.status,
1352
+ time: getTimestamp(),
1353
+ response: {
1354
+ status: result.status,
1355
+ statusText: result.statusText
1356
+ }
1357
+ });
1358
+ }
1359
+ });
1360
+ // 监听页面性能
1361
+ onVitals(traceSdk.createPerfReport());
1362
+ setInterval(function () {
1363
+ // console.log('[queue] traceSdk.queue: ', traceSdk.queue)
1364
+ var data = traceSdk.queue.shift();
1365
+ // console.log('[queue] data: ', data)
1366
+ if (data)
1367
+ send(traceSdk.sendMethod, traceSdk.dsn, traceSdk.ltsConfig, data);
1368
+ }, traceSdk.sendTimer);
1369
+ // @ts-ignore
1370
+ window.traceSdk = traceSdk;
1371
+ return traceSdk;
1372
+ };
1373
+ return BaseTrace;
1374
+ }());
1375
+
1376
+ var TraceSdk = /** @class */ (function (_super) {
1377
+ __extends(TraceSdk, _super);
1378
+ function TraceSdk() {
1379
+ return _super !== null && _super.apply(this, arguments) || this;
1380
+ }
1381
+ return TraceSdk;
1382
+ }(BaseTrace));
1383
+
1384
+ var instance;
1385
+ var init = function (options) {
1386
+ if (instance) {
1387
+ return instance;
1388
+ }
1389
+ instance = TraceSdk.init(options);
1390
+ console.log('instance: ', instance);
1391
+ return instance;
1392
+ };
1393
+ // @ts-ignore
1394
+ window.traceSdkInit = init;
1395
+
1396
+ exports.init = init;
1397
+
1398
+ Object.defineProperty(exports, '__esModule', { value: true });
1399
+
1400
+ })));
1401
+ //# sourceMappingURL=trace-sdk.umd.js.map