@sentry/browser
Version:
Official Sentry SDK for browsers
86 lines (82 loc) • 2.9 kB
JavaScript
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
const browser = require('@sentry/core/browser');
const eventbuilder = require('./eventbuilder.js');
const helpers = require('./helpers.js');
class BrowserClient extends browser.Client {
/**
* Creates a new Browser SDK instance.
*
* @param options Configuration options for this SDK.
*/
constructor(options) {
const opts = applyDefaultOptions(options);
const sdkSource = helpers.WINDOW.SENTRY_SDK_SOURCE || browser.getSDKSource();
browser.applySdkMetadata(opts, "browser", ["browser"], sdkSource);
if (opts._metadata?.sdk) {
opts._metadata.sdk.settings = {
infer_ip: opts.sendDefaultPii ? "auto" : "never",
// purposefully allowing already passed settings to override the default
...opts._metadata.sdk.settings
};
}
super(opts);
const {
sendDefaultPii,
sendClientReports,
enableLogs,
_experiments,
enableMetrics: enableMetricsOption
} = this._options;
const enableMetrics = enableMetricsOption ?? _experiments?.enableMetrics ?? true;
if (helpers.WINDOW.document && (sendClientReports || enableLogs || enableMetrics)) {
helpers.WINDOW.document.addEventListener("visibilitychange", () => {
if (helpers.WINDOW.document.visibilityState === "hidden") {
if (sendClientReports) {
this._flushOutcomes();
}
if (enableLogs) {
browser._INTERNAL_flushLogsBuffer(this);
}
if (enableMetrics) {
browser._INTERNAL_flushMetricsBuffer(this);
}
}
});
}
if (sendDefaultPii) {
this.on("beforeSendSession", browser.addAutoIpAddressToSession);
}
}
/**
* @inheritDoc
*/
eventFromException(exception, hint) {
return eventbuilder.eventFromException(this._options.stackParser, exception, hint, this._options.attachStacktrace);
}
/**
* @inheritDoc
*/
eventFromMessage(message, level = "info", hint) {
return eventbuilder.eventFromMessage(this._options.stackParser, message, level, hint, this._options.attachStacktrace);
}
/**
* @inheritDoc
*/
_prepareEvent(event, hint, currentScope, isolationScope) {
event.platform = event.platform || "javascript";
return super._prepareEvent(event, hint, currentScope, isolationScope);
}
}
function applyDefaultOptions(optionsArg) {
return {
release: typeof __SENTRY_RELEASE__ === "string" ? __SENTRY_RELEASE__ : helpers.WINDOW.SENTRY_RELEASE?.id,
// This supports the variable that sentry-webpack-plugin injects
sendClientReports: true,
// We default this to true, as it is the safer scenario
parentSpanIsAlwaysRootSpan: true,
...optionsArg
};
}
exports.BrowserClient = BrowserClient;
exports.applyDefaultOptions = applyDefaultOptions;
//# sourceMappingURL=client.js.map