96 lines
2.6 KiB
JavaScript
96 lines
2.6 KiB
JavaScript
Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
|
const core = require('@sentry/core');
|
|
const utils = require('@sentry/utils');
|
|
|
|
const WINDOW = utils.GLOBAL_OBJ ;
|
|
|
|
const INTEGRATION_NAME = 'ReportingObserver';
|
|
|
|
const SETUP_CLIENTS = new WeakMap();
|
|
|
|
const _reportingObserverIntegration = ((options = {}) => {
|
|
const types = options.types || ['crash', 'deprecation', 'intervention'];
|
|
|
|
/** Handler for the reporting observer. */
|
|
function handler(reports) {
|
|
if (!SETUP_CLIENTS.has(core.getClient() )) {
|
|
return;
|
|
}
|
|
|
|
for (const report of reports) {
|
|
core.withScope(scope => {
|
|
scope.setExtra('url', report.url);
|
|
|
|
const label = `ReportingObserver [${report.type}]`;
|
|
let details = 'No details available';
|
|
|
|
if (report.body) {
|
|
// Object.keys doesn't work on ReportBody, as all properties are inheirted
|
|
const plainBody
|
|
|
|
= {};
|
|
|
|
// eslint-disable-next-line guard-for-in
|
|
for (const prop in report.body) {
|
|
plainBody[prop] = report.body[prop];
|
|
}
|
|
|
|
scope.setExtra('body', plainBody);
|
|
|
|
if (report.type === 'crash') {
|
|
const body = report.body ;
|
|
// A fancy way to create a message out of crashId OR reason OR both OR fallback
|
|
details = [body.crashId || '', body.reason || ''].join(' ').trim() || details;
|
|
} else {
|
|
const body = report.body ;
|
|
details = body.message || details;
|
|
}
|
|
}
|
|
|
|
core.captureMessage(`${label}: ${details}`);
|
|
});
|
|
}
|
|
}
|
|
|
|
return {
|
|
name: INTEGRATION_NAME,
|
|
setupOnce() {
|
|
if (!utils.supportsReportingObserver()) {
|
|
return;
|
|
}
|
|
|
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-explicit-any
|
|
const observer = new (WINDOW ).ReportingObserver(handler, {
|
|
buffered: true,
|
|
types,
|
|
});
|
|
|
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
|
|
observer.observe();
|
|
},
|
|
|
|
setup(client) {
|
|
SETUP_CLIENTS.set(client, true);
|
|
},
|
|
};
|
|
}) ;
|
|
|
|
const reportingObserverIntegration = core.defineIntegration(_reportingObserverIntegration);
|
|
|
|
/**
|
|
* Reporting API integration - https://w3c.github.io/reporting/
|
|
* @deprecated Use `reportingObserverIntegration()` instead.
|
|
*/
|
|
// eslint-disable-next-line deprecation/deprecation
|
|
const ReportingObserver = core.convertIntegrationFnToClass(
|
|
INTEGRATION_NAME,
|
|
reportingObserverIntegration,
|
|
)
|
|
|
|
;
|
|
|
|
exports.ReportingObserver = ReportingObserver;
|
|
exports.reportingObserverIntegration = reportingObserverIntegration;
|
|
//# sourceMappingURL=reportingobserver.js.map
|