@cloudcare/browser-core 3.1.24 → 3.2.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.
- package/cjs/browser/pageExitObservable.js +1 -1
- package/cjs/browser/pageExitObservable.js.map +1 -1
- package/cjs/console/consoleObservable.js +17 -9
- package/cjs/console/consoleObservable.js.map +1 -1
- package/cjs/dataMap.js +11 -2
- package/cjs/dataMap.js.map +1 -1
- package/cjs/helper/boundedBuffer.js +21 -17
- package/cjs/helper/boundedBuffer.js.map +1 -1
- package/cjs/helper/connectivity.js +16 -0
- package/cjs/helper/connectivity.js.map +1 -0
- package/cjs/helper/display.js +15 -12
- package/cjs/helper/display.js.map +1 -1
- package/cjs/helper/displayAlreadyInitializedError.js +13 -0
- package/cjs/helper/displayAlreadyInitializedError.js.map +1 -0
- package/cjs/helper/encoder.js +43 -0
- package/cjs/helper/encoder.js.map +1 -0
- package/cjs/helper/lifeCycle.js +0 -1
- package/cjs/helper/lifeCycle.js.map +1 -1
- package/cjs/helper/monitor.js +6 -6
- package/cjs/helper/monitor.js.map +1 -1
- package/cjs/helper/serialisation/jsonStringify.js.map +1 -1
- package/cjs/index.js +33 -0
- package/cjs/index.js.map +1 -1
- package/cjs/report/reportObservable.js +26 -20
- package/cjs/report/reportObservable.js.map +1 -1
- package/cjs/telemetry/telemetry.js +60 -31
- package/cjs/telemetry/telemetry.js.map +1 -1
- package/cjs/telemetry/types.js +2 -1
- package/cjs/telemetry/types.js.map +1 -1
- package/cjs/transport/batch.js +129 -79
- package/cjs/transport/batch.js.map +1 -1
- package/cjs/transport/flushController.js +18 -5
- package/cjs/transport/flushController.js.map +1 -1
- package/cjs/transport/httpRequest.js +35 -22
- package/cjs/transport/httpRequest.js.map +1 -1
- package/cjs/transport/index.js +4 -4
- package/cjs/transport/index.js.map +1 -1
- package/cjs/transport/startBatchWithReplica.js +26 -10
- package/cjs/transport/startBatchWithReplica.js.map +1 -1
- package/esm/browser/pageExitObservable.js +1 -1
- package/esm/browser/pageExitObservable.js.map +1 -1
- package/esm/console/consoleObservable.js +18 -10
- package/esm/console/consoleObservable.js.map +1 -1
- package/esm/dataMap.js +11 -2
- package/esm/dataMap.js.map +1 -1
- package/esm/helper/boundedBuffer.js +21 -16
- package/esm/helper/boundedBuffer.js.map +1 -1
- package/esm/helper/connectivity.js +10 -0
- package/esm/helper/connectivity.js.map +1 -0
- package/esm/helper/display.js +12 -11
- package/esm/helper/display.js.map +1 -1
- package/esm/helper/displayAlreadyInitializedError.js +7 -0
- package/esm/helper/displayAlreadyInitializedError.js.map +1 -0
- package/esm/helper/encoder.js +37 -0
- package/esm/helper/encoder.js.map +1 -0
- package/esm/helper/lifeCycle.js +0 -1
- package/esm/helper/lifeCycle.js.map +1 -1
- package/esm/helper/monitor.js +6 -6
- package/esm/helper/monitor.js.map +1 -1
- package/esm/helper/serialisation/jsonStringify.js.map +1 -1
- package/esm/index.js +3 -0
- package/esm/index.js.map +1 -1
- package/esm/report/reportObservable.js +27 -21
- package/esm/report/reportObservable.js.map +1 -1
- package/esm/telemetry/telemetry.js +57 -31
- package/esm/telemetry/telemetry.js.map +1 -1
- package/esm/telemetry/types.js +2 -1
- package/esm/telemetry/types.js.map +1 -1
- package/esm/transport/batch.js +127 -77
- package/esm/transport/batch.js.map +1 -1
- package/esm/transport/flushController.js +18 -5
- package/esm/transport/flushController.js.map +1 -1
- package/esm/transport/httpRequest.js +35 -22
- package/esm/transport/httpRequest.js.map +1 -1
- package/esm/transport/index.js +1 -1
- package/esm/transport/index.js.map +1 -1
- package/esm/transport/startBatchWithReplica.js +27 -11
- package/esm/transport/startBatchWithReplica.js.map +1 -1
- package/package.json +2 -2
- package/src/browser/pageExitObservable.js +2 -2
- package/src/console/consoleObservable.js +22 -14
- package/src/dataMap.js +11 -2
- package/src/helper/boundedBuffer.js +21 -14
- package/src/helper/connectivity.js +11 -0
- package/src/helper/display.js +16 -14
- package/src/helper/displayAlreadyInitializedError.js +7 -0
- package/src/helper/encoder.js +43 -0
- package/src/helper/lifeCycle.js +0 -1
- package/src/helper/monitor.js +6 -6
- package/src/helper/serialisation/jsonStringify.js +1 -1
- package/src/index.js +3 -0
- package/src/report/reportObservable.js +43 -27
- package/src/telemetry/telemetry.js +60 -37
- package/src/telemetry/types.js +2 -1
- package/src/transport/batch.js +154 -89
- package/src/transport/flushController.js +19 -6
- package/src/transport/httpRequest.js +34 -35
- package/src/transport/index.js +1 -1
- package/src/transport/startBatchWithReplica.js +25 -14
- package/types/index.d.ts +12 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jsonStringify.js","names":["noop","jsonStringify","value","replacer","space","_typeof","JSON","stringify","restoreObjectPrototypeToJson","detachToJsonMethod","Object","prototype","restoreArrayPrototypeToJson","Array","restoreValuePrototypeToJson","getPrototypeOf","restoreValueToJson","_unused","object","objectToJson","toJSON"],"sources":["../../../src/helper/serialisation/jsonStringify.js"],"sourcesContent":["import { noop } from '../tools'\n\n/**\n * Custom implementation of JSON.stringify that ignores some toJSON methods. We need to do that\n * because some sites badly override toJSON on certain objects. Removing all toJSON methods from\n * nested values would be too costly, so we just detach them from the root value, and native classes\n * used to build JSON values (Array and Object).\n *\n * Note: this still assumes that JSON.stringify is correct.\n */\nexport function jsonStringify(value, replacer, space) {\n if (typeof value !== 'object' || value === null) {\n return JSON.stringify(value)\n }\n\n // Note: The order matter here. We need to detach toJSON methods on parent classes before their\n // subclasses.\n var restoreObjectPrototypeToJson = detachToJsonMethod(Object.prototype)\n var restoreArrayPrototypeToJson = detachToJsonMethod(Array.prototype)\n var restoreValuePrototypeToJson = detachToJsonMethod(\n Object.getPrototypeOf(value)\n )\n var restoreValueToJson = detachToJsonMethod(value)\n\n try {\n return JSON.stringify(value, replacer, space)\n } catch {\n return '<error: unable to serialize object>'\n } finally {\n restoreObjectPrototypeToJson()\n restoreArrayPrototypeToJson()\n restoreValuePrototypeToJson()\n restoreValueToJson()\n }\n}\n\nexport function detachToJsonMethod(value) {\n const object = value\n const objectToJson = object.toJSON\n if (objectToJson) {\n delete object.toJSON\n return ()
|
|
1
|
+
{"version":3,"file":"jsonStringify.js","names":["noop","jsonStringify","value","replacer","space","_typeof","JSON","stringify","restoreObjectPrototypeToJson","detachToJsonMethod","Object","prototype","restoreArrayPrototypeToJson","Array","restoreValuePrototypeToJson","getPrototypeOf","restoreValueToJson","_unused","object","objectToJson","toJSON"],"sources":["../../../src/helper/serialisation/jsonStringify.js"],"sourcesContent":["import { noop } from '../tools'\n\n/**\n * Custom implementation of JSON.stringify that ignores some toJSON methods. We need to do that\n * because some sites badly override toJSON on certain objects. Removing all toJSON methods from\n * nested values would be too costly, so we just detach them from the root value, and native classes\n * used to build JSON values (Array and Object).\n *\n * Note: this still assumes that JSON.stringify is correct.\n */\nexport function jsonStringify(value, replacer, space) {\n if (typeof value !== 'object' || value === null) {\n return JSON.stringify(value)\n }\n\n // Note: The order matter here. We need to detach toJSON methods on parent classes before their\n // subclasses.\n var restoreObjectPrototypeToJson = detachToJsonMethod(Object.prototype)\n var restoreArrayPrototypeToJson = detachToJsonMethod(Array.prototype)\n var restoreValuePrototypeToJson = detachToJsonMethod(\n Object.getPrototypeOf(value)\n )\n var restoreValueToJson = detachToJsonMethod(value)\n\n try {\n return JSON.stringify(value, replacer, space)\n } catch {\n return '<error: unable to serialize object>'\n } finally {\n restoreObjectPrototypeToJson()\n restoreArrayPrototypeToJson()\n restoreValuePrototypeToJson()\n restoreValueToJson()\n }\n}\n\nexport function detachToJsonMethod(value) {\n const object = value\n const objectToJson = object.toJSON\n if (objectToJson) {\n delete object.toJSON\n return function () {\n object.toJSON = objectToJson\n }\n }\n return noop\n}\n"],"mappings":";AAAA,SAASA,IAAI,QAAQ,UAAU;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,aAAaA,CAACC,KAAK,EAAEC,QAAQ,EAAEC,KAAK,EAAE;EACpD,IAAIC,OAAA,CAAOH,KAAK,MAAK,QAAQ,IAAIA,KAAK,KAAK,IAAI,EAAE;IAC/C,OAAOI,IAAI,CAACC,SAAS,CAACL,KAAK,CAAC;EAC9B;;EAEA;EACA;EACA,IAAIM,4BAA4B,GAAGC,kBAAkB,CAACC,MAAM,CAACC,SAAS,CAAC;EACvE,IAAIC,2BAA2B,GAAGH,kBAAkB,CAACI,KAAK,CAACF,SAAS,CAAC;EACrE,IAAIG,2BAA2B,GAAGL,kBAAkB,CAClDC,MAAM,CAACK,cAAc,CAACb,KAAK,CAC7B,CAAC;EACD,IAAIc,kBAAkB,GAAGP,kBAAkB,CAACP,KAAK,CAAC;EAElD,IAAI;IACF,OAAOI,IAAI,CAACC,SAAS,CAACL,KAAK,EAAEC,QAAQ,EAAEC,KAAK,CAAC;EAC/C,CAAC,CAAC,OAAAa,OAAA,EAAM;IACN,OAAO,qCAAqC;EAC9C,CAAC,SAAS;IACRT,4BAA4B,CAAC,CAAC;IAC9BI,2BAA2B,CAAC,CAAC;IAC7BE,2BAA2B,CAAC,CAAC;IAC7BE,kBAAkB,CAAC,CAAC;EACtB;AACF;AAEA,OAAO,SAASP,kBAAkBA,CAACP,KAAK,EAAE;EACxC,IAAMgB,MAAM,GAAGhB,KAAK;EACpB,IAAMiB,YAAY,GAAGD,MAAM,CAACE,MAAM;EAClC,IAAID,YAAY,EAAE;IAChB,OAAOD,MAAM,CAACE,MAAM;IACpB,OAAO,YAAY;MACjBF,MAAM,CAACE,MAAM,GAAGD,YAAY;IAC9B,CAAC;EACH;EACA,OAAOnB,IAAI;AACb","ignoreList":[]}
|
package/esm/index.js
CHANGED
|
@@ -46,8 +46,11 @@ export * from './helper/serialisation/heavyCustomerDataWarning';
|
|
|
46
46
|
export * from './helper/serialisation/jsonStringify';
|
|
47
47
|
export * from './helper/serialisation/rowData';
|
|
48
48
|
export * from './helper/serialisation/storedContextManager';
|
|
49
|
+
export * from './helper/encoder';
|
|
49
50
|
export * from './user';
|
|
50
51
|
export * from './helper/polyfills';
|
|
51
52
|
export * from './telemetry/telemetry';
|
|
52
53
|
export * from './helper/catchUserErrors';
|
|
54
|
+
export * from './helper/connectivity';
|
|
55
|
+
export * from './helper/displayAlreadyInitializedError';
|
|
53
56
|
//# sourceMappingURL=index.js.map
|
package/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../src/index.js"],"sourcesContent":["export * from './helper/boundedBuffer'\nexport * from './helper/valueHistory'\nexport * from './helper/deviceInfo'\nexport * from './helper/enums'\nexport * from './helper/instrumentMethod'\nexport * from './helper/errorTools'\nexport * from './helper/byteUtils'\nexport * from './error/trackRuntimeError'\nexport * from './console/consoleObservable'\nexport * from './report/reportObservable'\nexport * from './helper/display'\nexport * from './helper/monitor'\nexport * from './helper/sanitize'\nexport * from './helper/eventEmitter'\nexport * from './helper/lifeCycle'\nexport * from './helper/limitModification'\nexport * from './helper/createEventRateLimiter'\nexport * from './helper/observable'\nexport * from './helper/tools'\nexport * from './helper/urlPolyfill'\nexport * from './helper/mobileUtil'\nexport * from './helper/getZoneJsOriginalValue'\nexport * from './helper/timer'\nexport * from './helper/readBytesFromStream'\nexport * from './tracekit'\nexport * from './configuration/configuration'\nexport * from './configuration/transportConfiguration'\nexport * from './browser/cookie'\nexport * from './browser/fetchObservable'\nexport * from './browser/xhrObservable'\nexport * from './browser/pageExitObservable'\nexport * from './browser/htmlDomUtils'\nexport * from './browser/addEventListener'\nexport * from './browser/runOnReadyState'\nexport * from './browser/scroll'\n\nexport * from './dataMap'\nexport * from './init'\nexport * from './session/sessionManagement'\nexport * from './session/sessionConstants'\nexport * from './session/sessionCookieStore'\nexport * from './session/sessionStore'\nexport * from './transport'\nexport * from './synthetics/syntheticsWorkerValues'\n\nexport * from './helper/serialisation/contextManager'\nexport * from './helper/serialisation/heavyCustomerDataWarning'\nexport * from './helper/serialisation/jsonStringify'\nexport * from './helper/serialisation/rowData'\nexport * from './helper/serialisation/storedContextManager'\nexport * from './user'\nexport * from './helper/polyfills'\nexport * from './telemetry/telemetry'\nexport * from './helper/catchUserErrors'\n"],"mappings":"AAAA,cAAc,wBAAwB;AACtC,cAAc,uBAAuB;AACrC,cAAc,qBAAqB;AACnC,cAAc,gBAAgB;AAC9B,cAAc,2BAA2B;AACzC,cAAc,qBAAqB;AACnC,cAAc,oBAAoB;AAClC,cAAc,2BAA2B;AACzC,cAAc,6BAA6B;AAC3C,cAAc,2BAA2B;AACzC,cAAc,kBAAkB;AAChC,cAAc,kBAAkB;AAChC,cAAc,mBAAmB;AACjC,cAAc,uBAAuB;AACrC,cAAc,oBAAoB;AAClC,cAAc,4BAA4B;AAC1C,cAAc,iCAAiC;AAC/C,cAAc,qBAAqB;AACnC,cAAc,gBAAgB;AAC9B,cAAc,sBAAsB;AACpC,cAAc,qBAAqB;AACnC,cAAc,iCAAiC;AAC/C,cAAc,gBAAgB;AAC9B,cAAc,8BAA8B;AAC5C,cAAc,YAAY;AAC1B,cAAc,+BAA+B;AAC7C,cAAc,wCAAwC;AACtD,cAAc,kBAAkB;AAChC,cAAc,2BAA2B;AACzC,cAAc,yBAAyB;AACvC,cAAc,8BAA8B;AAC5C,cAAc,wBAAwB;AACtC,cAAc,4BAA4B;AAC1C,cAAc,2BAA2B;AACzC,cAAc,kBAAkB;AAEhC,cAAc,WAAW;AACzB,cAAc,QAAQ;AACtB,cAAc,6BAA6B;AAC3C,cAAc,4BAA4B;AAC1C,cAAc,8BAA8B;AAC5C,cAAc,wBAAwB;AACtC,cAAc,aAAa;AAC3B,cAAc,qCAAqC;AAEnD,cAAc,uCAAuC;AACrD,cAAc,iDAAiD;AAC/D,cAAc,sCAAsC;AACpD,cAAc,gCAAgC;AAC9C,cAAc,6CAA6C;AAC3D,cAAc,QAAQ;AACtB,cAAc,oBAAoB;AAClC,cAAc,uBAAuB;AACrC,cAAc,0BAA0B","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../src/index.js"],"sourcesContent":["export * from './helper/boundedBuffer'\nexport * from './helper/valueHistory'\nexport * from './helper/deviceInfo'\nexport * from './helper/enums'\nexport * from './helper/instrumentMethod'\nexport * from './helper/errorTools'\nexport * from './helper/byteUtils'\nexport * from './error/trackRuntimeError'\nexport * from './console/consoleObservable'\nexport * from './report/reportObservable'\nexport * from './helper/display'\nexport * from './helper/monitor'\nexport * from './helper/sanitize'\nexport * from './helper/eventEmitter'\nexport * from './helper/lifeCycle'\nexport * from './helper/limitModification'\nexport * from './helper/createEventRateLimiter'\nexport * from './helper/observable'\nexport * from './helper/tools'\nexport * from './helper/urlPolyfill'\nexport * from './helper/mobileUtil'\nexport * from './helper/getZoneJsOriginalValue'\nexport * from './helper/timer'\nexport * from './helper/readBytesFromStream'\nexport * from './tracekit'\nexport * from './configuration/configuration'\nexport * from './configuration/transportConfiguration'\nexport * from './browser/cookie'\nexport * from './browser/fetchObservable'\nexport * from './browser/xhrObservable'\nexport * from './browser/pageExitObservable'\nexport * from './browser/htmlDomUtils'\nexport * from './browser/addEventListener'\nexport * from './browser/runOnReadyState'\nexport * from './browser/scroll'\n\nexport * from './dataMap'\nexport * from './init'\nexport * from './session/sessionManagement'\nexport * from './session/sessionConstants'\nexport * from './session/sessionCookieStore'\nexport * from './session/sessionStore'\nexport * from './transport'\nexport * from './synthetics/syntheticsWorkerValues'\n\nexport * from './helper/serialisation/contextManager'\nexport * from './helper/serialisation/heavyCustomerDataWarning'\nexport * from './helper/serialisation/jsonStringify'\nexport * from './helper/serialisation/rowData'\nexport * from './helper/serialisation/storedContextManager'\nexport * from './helper/encoder'\nexport * from './user'\nexport * from './helper/polyfills'\nexport * from './telemetry/telemetry'\nexport * from './helper/catchUserErrors'\nexport * from './helper/connectivity'\nexport * from './helper/displayAlreadyInitializedError'\n"],"mappings":"AAAA,cAAc,wBAAwB;AACtC,cAAc,uBAAuB;AACrC,cAAc,qBAAqB;AACnC,cAAc,gBAAgB;AAC9B,cAAc,2BAA2B;AACzC,cAAc,qBAAqB;AACnC,cAAc,oBAAoB;AAClC,cAAc,2BAA2B;AACzC,cAAc,6BAA6B;AAC3C,cAAc,2BAA2B;AACzC,cAAc,kBAAkB;AAChC,cAAc,kBAAkB;AAChC,cAAc,mBAAmB;AACjC,cAAc,uBAAuB;AACrC,cAAc,oBAAoB;AAClC,cAAc,4BAA4B;AAC1C,cAAc,iCAAiC;AAC/C,cAAc,qBAAqB;AACnC,cAAc,gBAAgB;AAC9B,cAAc,sBAAsB;AACpC,cAAc,qBAAqB;AACnC,cAAc,iCAAiC;AAC/C,cAAc,gBAAgB;AAC9B,cAAc,8BAA8B;AAC5C,cAAc,YAAY;AAC1B,cAAc,+BAA+B;AAC7C,cAAc,wCAAwC;AACtD,cAAc,kBAAkB;AAChC,cAAc,2BAA2B;AACzC,cAAc,yBAAyB;AACvC,cAAc,8BAA8B;AAC5C,cAAc,wBAAwB;AACtC,cAAc,4BAA4B;AAC1C,cAAc,2BAA2B;AACzC,cAAc,kBAAkB;AAEhC,cAAc,WAAW;AACzB,cAAc,QAAQ;AACtB,cAAc,6BAA6B;AAC3C,cAAc,4BAA4B;AAC1C,cAAc,8BAA8B;AAC5C,cAAc,wBAAwB;AACtC,cAAc,aAAa;AAC3B,cAAc,qCAAqC;AAEnD,cAAc,uCAAuC;AACrD,cAAc,iDAAiD;AAC/D,cAAc,sCAAsC;AACpD,cAAc,gCAAgC;AAC9C,cAAc,6CAA6C;AAC3D,cAAc,kBAAkB;AAChC,cAAc,QAAQ;AACtB,cAAc,oBAAoB;AAClC,cAAc,uBAAuB;AACrC,cAAc,0BAA0B;AACxC,cAAc,uBAAuB;AACrC,cAAc,yCAAyC","ignoreList":[]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { toStackTraceString } from '../helper/errorTools';
|
|
2
2
|
import { mergeObservables, Observable } from '../helper/observable';
|
|
3
|
-
import { includes, safeTruncate, filter, each } from '../helper/tools';
|
|
3
|
+
import { includes, safeTruncate, filter, each, assign, clocksNow } from '../helper/tools';
|
|
4
4
|
import { addEventListener } from '../browser/addEventListener';
|
|
5
5
|
import { DOM_EVENT } from '../helper/enums';
|
|
6
6
|
import { monitor } from '../helper/monitor';
|
|
@@ -29,7 +29,7 @@ function createReportObservable(reportTypes) {
|
|
|
29
29
|
}
|
|
30
30
|
var handleReports = monitor(function (reports) {
|
|
31
31
|
each(reports, function (report) {
|
|
32
|
-
observable.notify(
|
|
32
|
+
observable.notify(buildRawReportErrorFromReport(report));
|
|
33
33
|
});
|
|
34
34
|
});
|
|
35
35
|
var observer = new window.ReportingObserver(handleReports, {
|
|
@@ -41,37 +41,43 @@ function createReportObservable(reportTypes) {
|
|
|
41
41
|
observer.disconnect();
|
|
42
42
|
};
|
|
43
43
|
});
|
|
44
|
-
return observable;
|
|
45
44
|
}
|
|
46
45
|
function createCspViolationReportObservable(configuration) {
|
|
47
46
|
return new Observable(function (observable) {
|
|
48
|
-
var
|
|
49
|
-
observable.notify(
|
|
50
|
-
};
|
|
51
|
-
var _addEventListener = addEventListener(document, DOM_EVENT.SECURITY_POLICY_VIOLATION, handleCspViolation);
|
|
47
|
+
var _addEventListener = addEventListener(document, DOM_EVENT.SECURITY_POLICY_VIOLATION, function (event) {
|
|
48
|
+
observable.notify(buildRawReportErrorFromCspViolation(event));
|
|
49
|
+
});
|
|
52
50
|
return _addEventListener.stop;
|
|
53
51
|
});
|
|
54
|
-
return observable;
|
|
55
52
|
}
|
|
56
|
-
function
|
|
53
|
+
function buildRawReportErrorFromReport(report) {
|
|
57
54
|
var body = report.body;
|
|
58
55
|
var type = report.type;
|
|
59
|
-
return {
|
|
60
|
-
type:
|
|
61
|
-
subtype: body.id,
|
|
56
|
+
return buildRawReportError({
|
|
57
|
+
type: body.id,
|
|
62
58
|
message: type + ': ' + body.message,
|
|
59
|
+
originalError: report,
|
|
63
60
|
stack: buildStack(body.id, body.message, body.sourceFile, body.lineNumber, body.columnNumber)
|
|
64
|
-
};
|
|
61
|
+
});
|
|
65
62
|
}
|
|
66
|
-
function
|
|
67
|
-
|
|
63
|
+
function buildRawReportError(partial) {
|
|
64
|
+
return assign({
|
|
65
|
+
startClocks: clocksNow(),
|
|
66
|
+
source: ErrorSource.REPORT,
|
|
67
|
+
handling: ErrorHandling.UNHANDLED
|
|
68
|
+
}, partial);
|
|
69
|
+
}
|
|
70
|
+
function buildRawReportErrorFromCspViolation(event) {
|
|
68
71
|
var message = "'" + event.blockedURI + "' blocked by '" + event.effectiveDirective + "' directive";
|
|
69
|
-
return {
|
|
70
|
-
type:
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
72
|
+
return buildRawReportError({
|
|
73
|
+
type: event.effectiveDirective,
|
|
74
|
+
message: RawReportType.cspViolation + ': ' + message,
|
|
75
|
+
originalError: event,
|
|
76
|
+
csp: {
|
|
77
|
+
disposition: event.disposition
|
|
78
|
+
},
|
|
79
|
+
stack: buildStack(event.effectiveDirective, event.originalPolicy ? "".concat(message, " of the policy \"").concat(safeTruncate(event.originalPolicy, 100, '...'), "\"") : 'no policy', event.sourceFile, event.lineNumber, event.columnNumber)
|
|
80
|
+
});
|
|
75
81
|
}
|
|
76
82
|
function buildStack(name, message, sourceFile, lineNumber, columnNumber) {
|
|
77
83
|
return sourceFile && toStackTraceString({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reportObservable.js","names":["toStackTraceString","mergeObservables","Observable","includes","safeTruncate","filter","each","addEventListener","DOM_EVENT","monitor","RawReportType","intervention","deprecation","cspViolation","initReportObservable","configuration","apis","observables","push","createCspViolationReportObservable","reportTypes","api","length","createReportObservable","apply","observable","window","ReportingObserver","handleReports","reports","report","notify","
|
|
1
|
+
{"version":3,"file":"reportObservable.js","names":["toStackTraceString","mergeObservables","Observable","includes","safeTruncate","filter","each","assign","clocksNow","addEventListener","DOM_EVENT","monitor","RawReportType","intervention","deprecation","cspViolation","initReportObservable","configuration","apis","observables","push","createCspViolationReportObservable","reportTypes","api","length","createReportObservable","apply","observable","window","ReportingObserver","handleReports","reports","report","notify","buildRawReportErrorFromReport","observer","types","buffered","observe","disconnect","_addEventListener","document","SECURITY_POLICY_VIOLATION","event","buildRawReportErrorFromCspViolation","stop","body","type","buildRawReportError","id","message","originalError","stack","buildStack","sourceFile","lineNumber","columnNumber","partial","startClocks","source","ErrorSource","REPORT","handling","ErrorHandling","UNHANDLED","blockedURI","effectiveDirective","csp","disposition","originalPolicy","concat","name","func","url","line","column"],"sources":["../../src/report/reportObservable.js"],"sourcesContent":["import { toStackTraceString } from '../helper/errorTools'\nimport { mergeObservables, Observable } from '../helper/observable'\nimport {\n includes,\n safeTruncate,\n filter,\n each,\n assign,\n clocksNow\n} from '../helper/tools'\nimport { addEventListener } from '../browser/addEventListener'\nimport { DOM_EVENT } from '../helper/enums'\nimport { monitor } from '../helper/monitor'\nexport var RawReportType = {\n intervention: 'intervention',\n deprecation: 'deprecation',\n cspViolation: 'csp_violation'\n}\nexport function initReportObservable(configuration, apis) {\n var observables = []\n\n if (includes(apis, RawReportType.cspViolation)) {\n observables.push(createCspViolationReportObservable(configuration))\n }\n\n var reportTypes = filter(apis, function (api) {\n return api !== RawReportType.cspViolation\n })\n if (reportTypes.length) {\n observables.push(createReportObservable(reportTypes))\n }\n return mergeObservables.apply(this, observables)\n}\n\nfunction createReportObservable(reportTypes) {\n return new Observable(function (observable) {\n if (!window.ReportingObserver) {\n return\n }\n\n var handleReports = monitor(function (reports) {\n each(reports, function (report) {\n observable.notify(buildRawReportErrorFromReport(report))\n })\n })\n\n var observer = new window.ReportingObserver(handleReports, {\n types: reportTypes,\n buffered: true\n })\n\n observer.observe()\n return function () {\n observer.disconnect()\n }\n })\n}\n\nfunction createCspViolationReportObservable(configuration) {\n return new Observable(function (observable) {\n var _addEventListener = addEventListener(\n document,\n DOM_EVENT.SECURITY_POLICY_VIOLATION,\n function (event) {\n observable.notify(buildRawReportErrorFromCspViolation(event))\n }\n )\n\n return _addEventListener.stop\n })\n}\n\nfunction buildRawReportErrorFromReport(report) {\n var body = report.body\n var type = report.type\n return buildRawReportError({\n type: body.id,\n message: type + ': ' + body.message,\n originalError: report,\n stack: buildStack(\n body.id,\n body.message,\n body.sourceFile,\n body.lineNumber,\n body.columnNumber\n )\n })\n}\nfunction buildRawReportError(partial) {\n return assign(\n {\n startClocks: clocksNow(),\n source: ErrorSource.REPORT,\n handling: ErrorHandling.UNHANDLED\n },\n partial\n )\n}\nfunction buildRawReportErrorFromCspViolation(event) {\n var message =\n \"'\" +\n event.blockedURI +\n \"' blocked by '\" +\n event.effectiveDirective +\n \"' directive\"\n return buildRawReportError({\n type: event.effectiveDirective,\n message: RawReportType.cspViolation + ': ' + message,\n originalError: event,\n csp: {\n disposition: event.disposition\n },\n stack: buildStack(\n event.effectiveDirective,\n event.originalPolicy\n ? `${message} of the policy \"${safeTruncate(\n event.originalPolicy,\n 100,\n '...'\n )}\"`\n : 'no policy',\n event.sourceFile,\n event.lineNumber,\n event.columnNumber\n )\n })\n}\n\nfunction buildStack(name, message, sourceFile, lineNumber, columnNumber) {\n return (\n sourceFile &&\n toStackTraceString({\n name: name,\n message: message,\n stack: [\n {\n func: '?',\n url: sourceFile,\n line: lineNumber,\n column: columnNumber\n }\n ]\n })\n )\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { ConsoleApiName } from '../helper/display';
|
|
2
2
|
import { toStackTraceString, NO_ERROR_STACK_PRESENT_MESSAGE } from '../helper/errorTools';
|
|
3
|
+
import { createBoundedBuffer } from '../helper/boundedBuffer';
|
|
3
4
|
import { computeStackTrace } from '../tracekit';
|
|
4
5
|
import { Observable } from '../helper/observable';
|
|
6
|
+
import { getConnectivity } from '../helper/connectivity';
|
|
5
7
|
import { displayIfDebugEnabled, startMonitorErrorCollection } from '..//helper/monitor';
|
|
6
8
|
import { startsWith, assign, performDraw, timeStampNow, extend2Lev } from '../helper/tools';
|
|
7
9
|
import { jsonStringify } from '../helper/serialisation/jsonStringify';
|
|
@@ -12,35 +14,40 @@ export var TelemetryService = {
|
|
|
12
14
|
LOGS: 'browser-logs-sdk',
|
|
13
15
|
RUM: 'browser-rum-sdk'
|
|
14
16
|
};
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
17
|
+
|
|
18
|
+
// eslint-disable-next-line local-rules/disallow-side-effects
|
|
19
|
+
var preStartTelemetryBuffer = createBoundedBuffer();
|
|
20
|
+
var _onRawTelemetryEventCollected2 = function onRawTelemetryEventCollected(event) {
|
|
21
|
+
preStartTelemetryBuffer.add(function () {
|
|
22
|
+
_onRawTelemetryEventCollected2(event);
|
|
23
|
+
});
|
|
19
24
|
};
|
|
20
|
-
var onRawTelemetryEventCollected;
|
|
21
25
|
export function startTelemetry(telemetryService, configuration) {
|
|
22
26
|
var contextProvider;
|
|
23
27
|
var observable = new Observable();
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
+
var alreadySentEvents = new Set();
|
|
29
|
+
var telemetryEnabled = configuration.telemetryEnabled && performDraw(configuration.telemetrySampleRate);
|
|
30
|
+
var runtimeEnvInfo = getRuntimeEnvInfo();
|
|
31
|
+
_onRawTelemetryEventCollected2 = function _onRawTelemetryEventCollected(rawEvent) {
|
|
32
|
+
var stringifiedEvent = jsonStringify(rawEvent);
|
|
33
|
+
if (telemetryEnabled && alreadySentEvents.size < configuration.maxTelemetryEventsPerPage && !alreadySentEvents.has(stringifiedEvent)) {
|
|
34
|
+
var event = toTelemetryEvent(telemetryService, rawEvent, runtimeEnvInfo);
|
|
28
35
|
observable.notify(event);
|
|
36
|
+
alreadySentEvents.add(stringifiedEvent);
|
|
29
37
|
}
|
|
30
38
|
};
|
|
31
39
|
startMonitorErrorCollection(addTelemetryError);
|
|
32
|
-
|
|
33
|
-
maxEventsPerPage: configuration.maxTelemetryEventsPerPage,
|
|
34
|
-
sentEventCount: 0
|
|
35
|
-
});
|
|
36
|
-
function toTelemetryEvent(telemetryService, event) {
|
|
40
|
+
function toTelemetryEvent(telemetryService, event, runtimeEnvInfo) {
|
|
37
41
|
return extend2Lev({
|
|
38
42
|
type: 'telemetry',
|
|
39
43
|
date: timeStampNow(),
|
|
40
44
|
service: telemetryService,
|
|
41
45
|
version: __BUILD_ENV__SDK_VERSION__,
|
|
42
46
|
source: 'browser',
|
|
43
|
-
telemetry: event
|
|
47
|
+
telemetry: extend2Lev(event, {
|
|
48
|
+
runtime_env: runtimeEnvInfo,
|
|
49
|
+
connectivity: getConnectivity()
|
|
50
|
+
})
|
|
44
51
|
}, contextProvider !== undefined ? contextProvider() : {});
|
|
45
52
|
}
|
|
46
53
|
return {
|
|
@@ -48,39 +55,58 @@ export function startTelemetry(telemetryService, configuration) {
|
|
|
48
55
|
contextProvider = provider;
|
|
49
56
|
},
|
|
50
57
|
observable: observable,
|
|
51
|
-
enabled:
|
|
58
|
+
enabled: telemetryEnabled
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
function getRuntimeEnvInfo() {
|
|
62
|
+
return {
|
|
63
|
+
is_local_file: window.location.protocol === 'file:',
|
|
64
|
+
is_worker: 'WorkerGlobalScope' in self
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
export function startFakeTelemetry() {
|
|
68
|
+
var events = [];
|
|
69
|
+
_onRawTelemetryEventCollected2 = function _onRawTelemetryEventCollected(event) {
|
|
70
|
+
events.push(event);
|
|
52
71
|
};
|
|
72
|
+
return events;
|
|
73
|
+
}
|
|
74
|
+
export function drainPreStartTelemetry() {
|
|
75
|
+
preStartTelemetryBuffer.drain();
|
|
53
76
|
}
|
|
54
77
|
export function resetTelemetry() {
|
|
55
|
-
|
|
78
|
+
preStartTelemetryBuffer = createBoundedBuffer();
|
|
79
|
+
_onRawTelemetryEventCollected2 = function _onRawTelemetryEventCollected(event) {
|
|
80
|
+
preStartTelemetryBuffer.add(function () {
|
|
81
|
+
_onRawTelemetryEventCollected2(event);
|
|
82
|
+
});
|
|
83
|
+
};
|
|
56
84
|
}
|
|
57
85
|
export function addTelemetryDebug(message, context) {
|
|
58
|
-
displayIfDebugEnabled(
|
|
59
|
-
|
|
86
|
+
displayIfDebugEnabled(message, context);
|
|
87
|
+
_onRawTelemetryEventCollected2(assign({
|
|
60
88
|
type: TelemetryType.log,
|
|
61
89
|
message: message,
|
|
62
90
|
status: TelemetryStatusType.debug
|
|
63
91
|
}, context));
|
|
64
92
|
}
|
|
65
93
|
export function addTelemetryError(e, context) {
|
|
66
|
-
|
|
94
|
+
_onRawTelemetryEventCollected2(assign({
|
|
67
95
|
type: TelemetryType.log,
|
|
68
96
|
status: TelemetryStatusType.error
|
|
69
97
|
}, formatError(e), context));
|
|
70
98
|
}
|
|
71
99
|
export function addTelemetryConfiguration(configuration) {
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
});
|
|
77
|
-
}
|
|
100
|
+
_onRawTelemetryEventCollected2({
|
|
101
|
+
type: TelemetryType.configuration,
|
|
102
|
+
configuration: configuration
|
|
103
|
+
});
|
|
78
104
|
}
|
|
79
|
-
function
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
}
|
|
105
|
+
export function addTelemetryUsage(usage) {
|
|
106
|
+
_onRawTelemetryEventCollected2({
|
|
107
|
+
type: TelemetryType.usage,
|
|
108
|
+
usage: usage
|
|
109
|
+
});
|
|
84
110
|
}
|
|
85
111
|
export function formatError(e) {
|
|
86
112
|
if (e instanceof Error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"telemetry.js","names":["ConsoleApiName","toStackTraceString","NO_ERROR_STACK_PRESENT_MESSAGE","computeStackTrace","Observable","displayIfDebugEnabled","startMonitorErrorCollection","startsWith","assign","performDraw","timeStampNow","extend2Lev","jsonStringify","NonErrorPrefix","TelemetryStatusType","TelemetryType","ALLOWED_FRAME_URLS","TelemetryService","LOGS","RUM","telemetryConfiguration","maxEventsPerPage","sentEventCount","telemetryEnabled","onRawTelemetryEventCollected","startTelemetry","telemetryService","configuration","contextProvider","observable","telemetrySampleRate","rawEvent","event","toTelemetryEvent","notify","addTelemetryError","maxTelemetryEventsPerPage","type","date","service","version","__BUILD_ENV__SDK_VERSION__","source","telemetry","undefined","setContextProvider","provider","enabled","resetTelemetry","addTelemetryDebug","message","context","debug","addTelemetry","log","status","e","error","formatError","addTelemetryConfiguration","Error","stackTrace","kind","name","stack","scrubCustomerFrames","UNCAUGHT","filter","frame","url","some","allowedFrameUrl"],"sources":["../../src/telemetry/telemetry.js"],"sourcesContent":["import { ConsoleApiName } from '../helper/display'\nimport {\n toStackTraceString,\n NO_ERROR_STACK_PRESENT_MESSAGE\n} from '../helper/errorTools'\nimport { computeStackTrace } from '../tracekit'\nimport { Observable } from '../helper/observable'\nimport {\n displayIfDebugEnabled,\n startMonitorErrorCollection\n} from '..//helper/monitor'\nimport {\n startsWith,\n assign,\n performDraw,\n timeStampNow,\n extend2Lev\n} from '../helper/tools'\nimport { jsonStringify } from '../helper/serialisation/jsonStringify'\nimport { NonErrorPrefix } from '../helper/enums'\nimport { TelemetryStatusType, TelemetryType } from './types'\n\nconst ALLOWED_FRAME_URLS = [\n 'https://static.guance.com',\n 'http://localhost',\n '<anonymous>'\n]\n\nexport var TelemetryService = {\n LOGS: 'browser-logs-sdk',\n RUM: 'browser-rum-sdk'\n}\n\nvar telemetryConfiguration = {\n maxEventsPerPage: 0,\n sentEventCount: 0,\n telemetryEnabled: false\n}\n\nvar onRawTelemetryEventCollected\n\nexport function startTelemetry(telemetryService, configuration) {\n let contextProvider\n var observable = new Observable()\n telemetryConfiguration.telemetryEnabled =\n configuration.telemetryEnabled &&\n performDraw(configuration.telemetrySampleRate)\n\n onRawTelemetryEventCollected = function (rawEvent) {\n if (telemetryConfiguration.telemetryEnabled) {\n var event = toTelemetryEvent(telemetryService, rawEvent)\n observable.notify(event)\n }\n }\n startMonitorErrorCollection(addTelemetryError)\n\n assign(telemetryConfiguration, {\n maxEventsPerPage: configuration.maxTelemetryEventsPerPage,\n sentEventCount: 0\n })\n\n function toTelemetryEvent(telemetryService, event) {\n return extend2Lev(\n {\n type: 'telemetry',\n date: timeStampNow(),\n service: telemetryService,\n version: __BUILD_ENV__SDK_VERSION__,\n source: 'browser',\n telemetry: event // https://github.com/microsoft/TypeScript/issues/48457\n },\n contextProvider !== undefined ? contextProvider() : {}\n )\n }\n\n return {\n setContextProvider: function (provider) {\n contextProvider = provider\n },\n observable: observable,\n enabled: telemetryConfiguration.telemetryEnabled\n }\n}\n\nexport function resetTelemetry() {\n onRawTelemetryEventCollected = undefined\n}\n\nexport function addTelemetryDebug(message, context) {\n displayIfDebugEnabled(ConsoleApiName.debug, message, context)\n addTelemetry(\n assign(\n {\n type: TelemetryType.log,\n message: message,\n status: TelemetryStatusType.debug\n },\n context\n )\n )\n}\n\nexport function addTelemetryError(e, context) {\n addTelemetry(\n assign(\n {\n type: TelemetryType.log,\n status: TelemetryStatusType.error\n },\n formatError(e),\n context\n )\n )\n}\n\nexport function addTelemetryConfiguration(configuration) {\n if (telemetryConfiguration.telemetryEnabled) {\n addTelemetry({\n type: TelemetryType.configuration,\n configuration: configuration\n })\n }\n}\n\nfunction addTelemetry(event) {\n if (\n onRawTelemetryEventCollected &&\n telemetryConfiguration.sentEventCount <\n telemetryConfiguration.maxEventsPerPage\n ) {\n telemetryConfiguration.sentEventCount += 1\n onRawTelemetryEventCollected(event)\n }\n}\n\nexport function formatError(e) {\n if (e instanceof Error) {\n var stackTrace = computeStackTrace(e)\n return {\n error: {\n kind: stackTrace.name,\n stack: toStackTraceString(scrubCustomerFrames(stackTrace))\n },\n message: stackTrace.message\n }\n }\n return {\n error: {\n stack: NO_ERROR_STACK_PRESENT_MESSAGE\n },\n message: NonErrorPrefix.UNCAUGHT + ' ' + jsonStringify(e)\n }\n}\n\nexport function scrubCustomerFrames(stackTrace) {\n stackTrace.stack = stackTrace.stack.filter(function (frame) {\n return (\n !frame.url ||\n ALLOWED_FRAME_URLS.some(function (allowedFrameUrl) {\n return startsWith(frame.url, allowedFrameUrl)\n })\n )\n })\n return stackTrace\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"telemetry.js","names":["ConsoleApiName","toStackTraceString","NO_ERROR_STACK_PRESENT_MESSAGE","createBoundedBuffer","computeStackTrace","Observable","getConnectivity","displayIfDebugEnabled","startMonitorErrorCollection","startsWith","assign","performDraw","timeStampNow","extend2Lev","jsonStringify","NonErrorPrefix","TelemetryStatusType","TelemetryType","ALLOWED_FRAME_URLS","TelemetryService","LOGS","RUM","preStartTelemetryBuffer","onRawTelemetryEventCollected","event","add","startTelemetry","telemetryService","configuration","contextProvider","observable","alreadySentEvents","Set","telemetryEnabled","telemetrySampleRate","runtimeEnvInfo","getRuntimeEnvInfo","_onRawTelemetryEventCollected","rawEvent","stringifiedEvent","size","maxTelemetryEventsPerPage","has","toTelemetryEvent","notify","addTelemetryError","type","date","service","version","__BUILD_ENV__SDK_VERSION__","source","telemetry","runtime_env","connectivity","undefined","setContextProvider","provider","enabled","is_local_file","window","location","protocol","is_worker","self","startFakeTelemetry","events","push","drainPreStartTelemetry","drain","resetTelemetry","addTelemetryDebug","message","context","log","status","debug","e","error","formatError","addTelemetryConfiguration","addTelemetryUsage","usage","Error","stackTrace","kind","name","stack","scrubCustomerFrames","UNCAUGHT","filter","frame","url","some","allowedFrameUrl"],"sources":["../../src/telemetry/telemetry.js"],"sourcesContent":["import { ConsoleApiName } from '../helper/display'\nimport {\n toStackTraceString,\n NO_ERROR_STACK_PRESENT_MESSAGE\n} from '../helper/errorTools'\nimport { createBoundedBuffer } from '../helper/boundedBuffer'\nimport { computeStackTrace } from '../tracekit'\nimport { Observable } from '../helper/observable'\nimport { getConnectivity } from '../helper/connectivity'\nimport {\n displayIfDebugEnabled,\n startMonitorErrorCollection\n} from '..//helper/monitor'\nimport {\n startsWith,\n assign,\n performDraw,\n timeStampNow,\n extend2Lev\n} from '../helper/tools'\nimport { jsonStringify } from '../helper/serialisation/jsonStringify'\nimport { NonErrorPrefix } from '../helper/enums'\nimport { TelemetryStatusType, TelemetryType } from './types'\n\nconst ALLOWED_FRAME_URLS = [\n 'https://static.guance.com',\n 'http://localhost',\n '<anonymous>'\n]\n\nexport var TelemetryService = {\n LOGS: 'browser-logs-sdk',\n RUM: 'browser-rum-sdk'\n}\n\n// eslint-disable-next-line local-rules/disallow-side-effects\nvar preStartTelemetryBuffer = createBoundedBuffer()\nvar onRawTelemetryEventCollected = function (event) {\n preStartTelemetryBuffer.add(function () {\n onRawTelemetryEventCollected(event)\n })\n}\n\nexport function startTelemetry(telemetryService, configuration) {\n let contextProvider\n var observable = new Observable()\n const alreadySentEvents = new Set()\n const telemetryEnabled =\n configuration.telemetryEnabled &&\n performDraw(configuration.telemetrySampleRate)\n const runtimeEnvInfo = getRuntimeEnvInfo()\n onRawTelemetryEventCollected = function (rawEvent) {\n const stringifiedEvent = jsonStringify(rawEvent)\n if (\n telemetryEnabled &&\n alreadySentEvents.size < configuration.maxTelemetryEventsPerPage &&\n !alreadySentEvents.has(stringifiedEvent)\n ) {\n var event = toTelemetryEvent(telemetryService, rawEvent, runtimeEnvInfo)\n observable.notify(event)\n alreadySentEvents.add(stringifiedEvent)\n }\n }\n startMonitorErrorCollection(addTelemetryError)\n\n function toTelemetryEvent(telemetryService, event, runtimeEnvInfo) {\n return extend2Lev(\n {\n type: 'telemetry',\n date: timeStampNow(),\n service: telemetryService,\n version: __BUILD_ENV__SDK_VERSION__,\n source: 'browser',\n telemetry: extend2Lev(event, {\n runtime_env: runtimeEnvInfo,\n connectivity: getConnectivity()\n })\n },\n contextProvider !== undefined ? contextProvider() : {}\n )\n }\n\n return {\n setContextProvider: function (provider) {\n contextProvider = provider\n },\n observable: observable,\n enabled: telemetryEnabled\n }\n}\nfunction getRuntimeEnvInfo() {\n return {\n is_local_file: window.location.protocol === 'file:',\n is_worker: 'WorkerGlobalScope' in self\n }\n}\nexport function startFakeTelemetry() {\n const events = []\n\n onRawTelemetryEventCollected = function (event) {\n events.push(event)\n }\n\n return events\n}\nexport function drainPreStartTelemetry() {\n preStartTelemetryBuffer.drain()\n}\nexport function resetTelemetry() {\n preStartTelemetryBuffer = createBoundedBuffer()\n onRawTelemetryEventCollected = function (event) {\n preStartTelemetryBuffer.add(function () {\n onRawTelemetryEventCollected(event)\n })\n }\n}\n\nexport function addTelemetryDebug(message, context) {\n displayIfDebugEnabled(message, context)\n onRawTelemetryEventCollected(\n assign(\n {\n type: TelemetryType.log,\n message: message,\n status: TelemetryStatusType.debug\n },\n context\n )\n )\n}\n\nexport function addTelemetryError(e, context) {\n onRawTelemetryEventCollected(\n assign(\n {\n type: TelemetryType.log,\n status: TelemetryStatusType.error\n },\n formatError(e),\n context\n )\n )\n}\n\nexport function addTelemetryConfiguration(configuration) {\n onRawTelemetryEventCollected({\n type: TelemetryType.configuration,\n configuration: configuration\n })\n}\n\nexport function addTelemetryUsage(usage) {\n onRawTelemetryEventCollected({\n type: TelemetryType.usage,\n usage: usage\n })\n}\n\nexport function formatError(e) {\n if (e instanceof Error) {\n var stackTrace = computeStackTrace(e)\n return {\n error: {\n kind: stackTrace.name,\n stack: toStackTraceString(scrubCustomerFrames(stackTrace))\n },\n message: stackTrace.message\n }\n }\n return {\n error: {\n stack: NO_ERROR_STACK_PRESENT_MESSAGE\n },\n message: NonErrorPrefix.UNCAUGHT + ' ' + jsonStringify(e)\n }\n}\n\nexport function scrubCustomerFrames(stackTrace) {\n stackTrace.stack = stackTrace.stack.filter(function (frame) {\n return (\n !frame.url ||\n ALLOWED_FRAME_URLS.some(function (allowedFrameUrl) {\n return startsWith(frame.url, allowedFrameUrl)\n })\n )\n })\n return stackTrace\n}\n"],"mappings":"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","ignoreList":[]}
|
package/esm/telemetry/types.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","names":["TelemetryType","log","configuration","TelemetryStatusType","debug","error"],"sources":["../../src/telemetry/types.js"],"sourcesContent":["export var TelemetryType = {\n log: 'log',\n configuration: 'configuration'\n}\n\nexport var TelemetryStatusType = {\n debug: 'debug',\n error: 'error'\n}\n"],"mappings":"AAAA,OAAO,IAAIA,aAAa,GAAG;EACzBC,GAAG,EAAE,KAAK;EACVC,aAAa,EAAE;
|
|
1
|
+
{"version":3,"file":"types.js","names":["TelemetryType","log","configuration","usage","TelemetryStatusType","debug","error"],"sources":["../../src/telemetry/types.js"],"sourcesContent":["export var TelemetryType = {\n log: 'log',\n configuration: 'configuration',\n usage: 'usage'\n}\n\nexport var TelemetryStatusType = {\n debug: 'debug',\n error: 'error'\n}\n"],"mappings":"AAAA,OAAO,IAAIA,aAAa,GAAG;EACzBC,GAAG,EAAE,KAAK;EACVC,aAAa,EAAE,eAAe;EAC9BC,KAAK,EAAE;AACT,CAAC;AAED,OAAO,IAAIC,mBAAmB,GAAG;EAC/BC,KAAK,EAAE,OAAO;EACdC,KAAK,EAAE;AACT,CAAC","ignoreList":[]}
|
package/esm/transport/batch.js
CHANGED
|
@@ -8,7 +8,6 @@ import { isPageExitReason } from '../browser/pageExitObservable';
|
|
|
8
8
|
import { jsonStringify } from '../helper/serialisation/jsonStringify';
|
|
9
9
|
// https://en.wikipedia.org/wiki/UTF-8
|
|
10
10
|
// eslint-disable-next-line no-control-regex
|
|
11
|
-
var HAS_MULTI_BYTES_CHARACTERS = /[^\u0000-\u007F]/;
|
|
12
11
|
var CUSTOM_KEYS = 'custom_keys';
|
|
13
12
|
export var processedMessageByDataMap = function processedMessageByDataMap(message) {
|
|
14
13
|
if (!message || !message.type) return {
|
|
@@ -101,93 +100,144 @@ export var processedMessageByDataMap = function processedMessageByDataMap(messag
|
|
|
101
100
|
rowData: hasFileds ? rowData : undefined
|
|
102
101
|
};
|
|
103
102
|
};
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
var
|
|
112
|
-
|
|
113
|
-
_this.flush(event);
|
|
103
|
+
export function createBatch(options) {
|
|
104
|
+
var encoder = options.encoder;
|
|
105
|
+
var request = options.request;
|
|
106
|
+
var messageBytesLimit = options.messageBytesLimit;
|
|
107
|
+
var sendContentTypeByJson = options.sendContentTypeByJson;
|
|
108
|
+
var flushController = options.flushController;
|
|
109
|
+
var upsertBuffer = {};
|
|
110
|
+
var flushSubscription = flushController.flushObservable.subscribe(function (event) {
|
|
111
|
+
flush(event);
|
|
114
112
|
});
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
var messages = this.pushOnlyBuffer.concat(values(this.upsertBuffer));
|
|
124
|
-
this.pushOnlyBuffer = [];
|
|
125
|
-
this.upsertBuffer = {};
|
|
126
|
-
if (messages.length > 0) {
|
|
127
|
-
var payloadData = '';
|
|
128
|
-
if (this.sendContentTypeByJson) {
|
|
129
|
-
payloadData = '[' + messages.join(',') + ']';
|
|
113
|
+
function getMessageText(messages) {
|
|
114
|
+
var isEmpty = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
115
|
+
if (sendContentTypeByJson) {
|
|
116
|
+
if (isEmpty) {
|
|
117
|
+
return '[' + messages.join(',');
|
|
118
|
+
} else {
|
|
119
|
+
return ',' + messages.join(',');
|
|
120
|
+
}
|
|
130
121
|
} else {
|
|
131
|
-
|
|
122
|
+
if (isEmpty) {
|
|
123
|
+
return messages.join('\n');
|
|
124
|
+
} else {
|
|
125
|
+
return '\n' + messages.join('\n');
|
|
126
|
+
}
|
|
132
127
|
}
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
this.request.sendOnExit(payload);
|
|
128
|
+
}
|
|
129
|
+
function push(serializedMessage, estimatedMessageBytesCount, key) {
|
|
130
|
+
flushController.notifyBeforeAddMessage(estimatedMessageBytesCount);
|
|
131
|
+
if (key !== undefined) {
|
|
132
|
+
upsertBuffer[key] = serializedMessage;
|
|
133
|
+
flushController.notifyAfterAddMessage();
|
|
140
134
|
} else {
|
|
141
|
-
|
|
135
|
+
encoder.write(getMessageText([serializedMessage], encoder.isEmpty()), function (realMessageBytesCount) {
|
|
136
|
+
flushController.notifyAfterAddMessage(realMessageBytesCount - estimatedMessageBytesCount);
|
|
137
|
+
});
|
|
142
138
|
}
|
|
143
139
|
}
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
var _process = this.process(message);
|
|
147
|
-
var processedMessage = _process.processedMessage;
|
|
148
|
-
var messageBytesCount = _process.messageBytesCount;
|
|
149
|
-
if (messageBytesCount >= this.messageBytesLimit) {
|
|
150
|
-
display.warn('Discarded a message whose size was bigger than the maximum allowed size ' + this.messageBytesLimit + 'KB.');
|
|
151
|
-
return;
|
|
140
|
+
function hasMessageFor(key) {
|
|
141
|
+
return key !== undefined && upsertBuffer[key] !== undefined;
|
|
152
142
|
}
|
|
153
|
-
|
|
154
|
-
|
|
143
|
+
function remove(key) {
|
|
144
|
+
var removedMessage = upsertBuffer[key];
|
|
145
|
+
delete upsertBuffer[key];
|
|
146
|
+
var messageBytesCount = encoder.estimateEncodedBytesCount(removedMessage);
|
|
147
|
+
flushController.notifyAfterRemoveMessage(messageBytesCount);
|
|
155
148
|
}
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
processedMessage
|
|
149
|
+
function process(message) {
|
|
150
|
+
var processedMessage = '';
|
|
151
|
+
if (sendContentTypeByJson) {
|
|
152
|
+
processedMessage = jsonStringify(processedMessageByDataMap(message).rowData);
|
|
153
|
+
} else {
|
|
154
|
+
processedMessage = processedMessageByDataMap(message).rowStr;
|
|
155
|
+
}
|
|
156
|
+
return processedMessage;
|
|
157
|
+
}
|
|
158
|
+
function addOrUpdate(message, key) {
|
|
159
|
+
var serializedMessage = process(message);
|
|
160
|
+
var estimatedMessageBytesCount = encoder.estimateEncodedBytesCount(serializedMessage);
|
|
161
|
+
if (estimatedMessageBytesCount >= messageBytesLimit) {
|
|
162
|
+
display.warn("Discarded a message whose size was bigger than the maximum allowed size ".concat(messageBytesLimit, "KB."));
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
if (hasMessageFor(key)) {
|
|
166
|
+
remove(key);
|
|
167
|
+
}
|
|
168
|
+
push(serializedMessage, estimatedMessageBytesCount, key);
|
|
169
|
+
}
|
|
170
|
+
function flush(event) {
|
|
171
|
+
var upsertMessages = values(upsertBuffer).join(sendContentTypeByJson ? ',' : '\n');
|
|
172
|
+
upsertBuffer = {};
|
|
173
|
+
var isPageExit = isPageExitReason(event.reason);
|
|
174
|
+
var send = isPageExit ? request.sendOnExit : request.send;
|
|
175
|
+
if (isPageExit &&
|
|
176
|
+
// Note: checking that the encoder is async is not strictly needed, but it's an optimization:
|
|
177
|
+
// if the encoder is async we need to send two requests in some cases (one for encoded data
|
|
178
|
+
// and the other for non-encoded data). But if it's not async, we don't have to worry about
|
|
179
|
+
// it and always send a single request.
|
|
180
|
+
encoder.isAsync) {
|
|
181
|
+
// 咱不支持json 模式
|
|
182
|
+
var encoderResult = encoder.finishSync();
|
|
183
|
+
|
|
184
|
+
// Send encoded messages
|
|
185
|
+
if (encoderResult.outputBytesCount) {
|
|
186
|
+
send(formatPayloadFromEncoder(encoderResult, sendContentTypeByJson));
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
// Send messages that are not yet encoded at this point
|
|
190
|
+
var pendingMessages = [encoderResult.pendingData, upsertMessages].filter(Boolean).join('\n');
|
|
191
|
+
if (pendingMessages) {
|
|
192
|
+
send({
|
|
193
|
+
data: pendingMessages,
|
|
194
|
+
bytesCount: computeBytesCount(pendingMessages)
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
} else {
|
|
198
|
+
if (upsertMessages) {
|
|
199
|
+
var text = getMessageText([upsertMessages], encoder.isEmpty());
|
|
200
|
+
if (sendContentTypeByJson) {
|
|
201
|
+
text += ']';
|
|
202
|
+
}
|
|
203
|
+
encoder.write(text);
|
|
204
|
+
} else {
|
|
205
|
+
if (sendContentTypeByJson) {
|
|
206
|
+
encoder.write(']');
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
encoder.finish(function (encoderResult) {
|
|
210
|
+
send(formatPayloadFromEncoder(encoderResult));
|
|
211
|
+
});
|
|
212
|
+
}
|
|
164
213
|
}
|
|
165
|
-
var messageBytesCount = computeBytesCount(processedMessage);
|
|
166
214
|
return {
|
|
167
|
-
|
|
168
|
-
|
|
215
|
+
flushController: flushController,
|
|
216
|
+
add: addOrUpdate,
|
|
217
|
+
upsert: addOrUpdate,
|
|
218
|
+
stop: flushSubscription.unsubscribe
|
|
169
219
|
};
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
var
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
this.upsertBuffer[key] = processedMessage;
|
|
220
|
+
}
|
|
221
|
+
function formatPayloadFromEncoder(encoderResult, sendContentTypeByJson) {
|
|
222
|
+
var data;
|
|
223
|
+
if (typeof encoderResult.output === 'string') {
|
|
224
|
+
data = encoderResult.output;
|
|
176
225
|
} else {
|
|
177
|
-
|
|
226
|
+
data = new Blob([encoderResult.output], {
|
|
227
|
+
// This will set the 'Content-Type: text/plain' header. Reasoning:
|
|
228
|
+
// * The intake rejects the request if there is no content type.
|
|
229
|
+
// * The browser will issue CORS preflight requests if we set it to 'application/json', which
|
|
230
|
+
// could induce higher intake load (and maybe has other impacts).
|
|
231
|
+
// * Also it's not quite JSON, since we are concatenating multiple JSON objects separated by
|
|
232
|
+
// new lines.
|
|
233
|
+
type: 'text/plain'
|
|
234
|
+
});
|
|
178
235
|
}
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
var separatorBytesCount = this.flushController.getMessagesCount() > 1 ? 1 : 0;
|
|
187
|
-
this.flushController.notifyAfterRemoveMessage(messageBytesCount + separatorBytesCount);
|
|
188
|
-
};
|
|
189
|
-
batch.prototype.hasMessageFor = function (key) {
|
|
190
|
-
return key !== undefined && this.upsertBuffer[key] !== undefined;
|
|
191
|
-
};
|
|
192
|
-
export var Batch = batch;
|
|
236
|
+
return {
|
|
237
|
+
data: data,
|
|
238
|
+
type: sendContentTypeByJson ? 'application/json;UTF-8' : undefined,
|
|
239
|
+
bytesCount: encoderResult.outputBytesCount,
|
|
240
|
+
encoding: encoderResult.encoding
|
|
241
|
+
};
|
|
242
|
+
}
|
|
193
243
|
//# sourceMappingURL=batch.js.map
|