summaryrefslogtreecommitdiff
path: root/shared/logger/node_modules/@sentry/browser/esm/client.js
diff options
context:
space:
mode:
authorrxliuli <rxliuli@gmail.com>2025-11-04 05:03:50 +0800
committerrxliuli <rxliuli@gmail.com>2025-11-04 05:03:50 +0800
commitbce557cc2dc767628bed6aac87301a1be7c5431b (patch)
treeb51a051228d01fe3306cd7626d4a96768aadb944 /shared/logger/node_modules/@sentry/browser/esm/client.js
init commit
Diffstat (limited to 'shared/logger/node_modules/@sentry/browser/esm/client.js')
-rw-r--r--shared/logger/node_modules/@sentry/browser/esm/client.js139
1 files changed, 139 insertions, 0 deletions
diff --git a/shared/logger/node_modules/@sentry/browser/esm/client.js b/shared/logger/node_modules/@sentry/browser/esm/client.js
new file mode 100644
index 0000000..a171d99
--- /dev/null
+++ b/shared/logger/node_modules/@sentry/browser/esm/client.js
@@ -0,0 +1,139 @@
+import { BaseClient, SDK_VERSION } from '@sentry/core';
+import { getSDKSource, logger, createClientReportEnvelope, dsnToString } from '@sentry/utils';
+import { eventFromException, eventFromMessage } from './eventbuilder.js';
+import { WINDOW } from './helpers.js';
+import { BREADCRUMB_INTEGRATION_ID } from './integrations/breadcrumbs.js';
+import { createUserFeedbackEnvelope } from './userfeedback.js';
+
+/**
+ * Configuration options for the Sentry Browser SDK.
+ * @see @sentry/types Options for more information.
+ */
+
+/**
+ * The Sentry Browser SDK Client.
+ *
+ * @see BrowserOptions for documentation on configuration options.
+ * @see SentryClient for usage documentation.
+ */
+class BrowserClient extends BaseClient {
+ /**
+ * Creates a new Browser SDK instance.
+ *
+ * @param options Configuration options for this SDK.
+ */
+ constructor(options) {
+ const sdkSource = WINDOW.SENTRY_SDK_SOURCE || getSDKSource();
+
+ options._metadata = options._metadata || {};
+ options._metadata.sdk = options._metadata.sdk || {
+ name: 'sentry.javascript.browser',
+ packages: [
+ {
+ name: `${sdkSource}:@sentry/browser`,
+ version: SDK_VERSION,
+ },
+ ],
+ version: SDK_VERSION,
+ };
+
+ super(options);
+
+ if (options.sendClientReports && WINDOW.document) {
+ WINDOW.document.addEventListener('visibilitychange', () => {
+ if (WINDOW.document.visibilityState === 'hidden') {
+ this._flushOutcomes();
+ }
+ });
+ }
+ }
+
+ /**
+ * @inheritDoc
+ */
+ eventFromException(exception, hint) {
+ return eventFromException(this._options.stackParser, exception, hint, this._options.attachStacktrace);
+ }
+
+ /**
+ * @inheritDoc
+ */
+ eventFromMessage(
+ message,
+ // eslint-disable-next-line deprecation/deprecation
+ level = 'info',
+ hint,
+ ) {
+ return eventFromMessage(this._options.stackParser, message, level, hint, this._options.attachStacktrace);
+ }
+
+ /**
+ * @inheritDoc
+ */
+ sendEvent(event, hint) {
+ // We only want to add the sentry event breadcrumb when the user has the breadcrumb integration installed and
+ // activated its `sentry` option.
+ // We also do not want to use the `Breadcrumbs` class here directly, because we do not want it to be included in
+ // bundles, if it is not used by the SDK.
+ // This all sadly is a bit ugly, but we currently don't have a "pre-send" hook on the integrations so we do it this
+ // way for now.
+ const breadcrumbIntegration = this.getIntegrationById(BREADCRUMB_INTEGRATION_ID) ;
+ // We check for definedness of `addSentryBreadcrumb` in case users provided their own integration with id
+ // "Breadcrumbs" that does not have this function.
+ if (breadcrumbIntegration && breadcrumbIntegration.addSentryBreadcrumb) {
+ breadcrumbIntegration.addSentryBreadcrumb(event);
+ }
+
+ super.sendEvent(event, hint);
+ }
+
+ /**
+ * Sends user feedback to Sentry.
+ */
+ captureUserFeedback(feedback) {
+ if (!this._isEnabled()) {
+ (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && logger.warn('SDK not enabled, will not capture user feedback.');
+ return;
+ }
+
+ const envelope = createUserFeedbackEnvelope(feedback, {
+ metadata: this.getSdkMetadata(),
+ dsn: this.getDsn(),
+ tunnel: this.getOptions().tunnel,
+ });
+ void this._sendEnvelope(envelope);
+ }
+
+ /**
+ * @inheritDoc
+ */
+ _prepareEvent(event, hint, scope) {
+ event.platform = event.platform || 'javascript';
+ return super._prepareEvent(event, hint, scope);
+ }
+
+ /**
+ * Sends client reports as an envelope.
+ */
+ _flushOutcomes() {
+ const outcomes = this._clearOutcomes();
+
+ if (outcomes.length === 0) {
+ (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && logger.log('No outcomes to send');
+ return;
+ }
+
+ if (!this._dsn) {
+ (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && logger.log('No dsn provided, will not send outcomes');
+ return;
+ }
+
+ (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && logger.log('Sending outcomes:', outcomes);
+
+ const envelope = createClientReportEnvelope(outcomes, this._options.tunnel && dsnToString(this._dsn));
+ void this._sendEnvelope(envelope);
+ }
+}
+
+export { BrowserClient };
+//# sourceMappingURL=client.js.map