@thoughtspot/visual-embed-sdk
Version:
ThoughtSpot Embed SDK
68 lines • 2.58 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.resetGlobalReportingObserver = exports.getGlobalReportingObserver = exports.registerReportingObserver = void 0;
const embedConfig_1 = require("../embed/embedConfig");
const logger_1 = require("./logger");
const errors_1 = require("../errors");
var ReportType;
(function (ReportType) {
ReportType["CSP_VIOLATION"] = "csp-violation";
ReportType["DEPRECATION"] = "deprecation";
ReportType["INTERVENTION"] = "intervention";
})(ReportType || (ReportType = {}));
let globalObserver = null;
/**
* Register a global ReportingObserver to capture all unhandled errors
* @param overrideExisting boolean to override existing observer
* @returns ReportingObserver | null
*/
function registerReportingObserver(overrideExisting = false) {
if (!(window.ReportingObserver)) {
logger_1.logger.warn(errors_1.ERROR_MESSAGE.MISSING_REPORTING_OBSERVER);
return null;
}
if (overrideExisting) {
resetGlobalReportingObserver();
}
if (globalObserver) {
return globalObserver;
}
const embedConfig = (0, embedConfig_1.getEmbedConfig)();
globalObserver = new ReportingObserver((reports) => {
reports.forEach((report) => {
const { type, url, body } = report;
const reportBody = body;
const isThoughtSpotHost = url
&& url.startsWith(embedConfig.thoughtSpotHost);
const isFrameHostError = type === ReportType.CSP_VIOLATION
&& reportBody.effectiveDirective === 'frame-ancestors';
if (isThoughtSpotHost && isFrameHostError) {
if (!embedConfig.suppressErrorAlerts) {
alert(errors_1.ERROR_MESSAGE.CSP_VIOLATION_ALERT);
}
logger_1.logger.error(errors_1.ERROR_MESSAGE.CSP_FRAME_HOST_VIOLATION_LOG_MESSAGE);
}
});
}, { buffered: true });
globalObserver.observe();
return globalObserver;
}
exports.registerReportingObserver = registerReportingObserver;
/**
* Get the global ReportingObserver
* @returns - ReportingObserver | null
*/
function getGlobalReportingObserver() {
return globalObserver;
}
exports.getGlobalReportingObserver = getGlobalReportingObserver;
/**
* Resets the global ReportingObserver
*/
function resetGlobalReportingObserver() {
if (globalObserver)
globalObserver.disconnect();
globalObserver = null;
}
exports.resetGlobalReportingObserver = resetGlobalReportingObserver;
//# sourceMappingURL=reporting.js.map
;