summaryrefslogtreecommitdiff
path: root/shared/logger/node_modules/@sentry/browser/esm/sdk.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/sdk.js
init commit
Diffstat (limited to 'shared/logger/node_modules/@sentry/browser/esm/sdk.js')
-rw-r--r--shared/logger/node_modules/@sentry/browser/esm/sdk.js293
1 files changed, 293 insertions, 0 deletions
diff --git a/shared/logger/node_modules/@sentry/browser/esm/sdk.js b/shared/logger/node_modules/@sentry/browser/esm/sdk.js
new file mode 100644
index 0000000..2b4edf2
--- /dev/null
+++ b/shared/logger/node_modules/@sentry/browser/esm/sdk.js
@@ -0,0 +1,293 @@
+import { Integrations, getIntegrationsToSetup, initAndBind, getReportDialogEndpoint, getCurrentHub } from '@sentry/core';
+import { stackParserFromStackParserOptions, supportsFetch, logger, resolvedSyncPromise, addInstrumentationHandler } from '@sentry/utils';
+import { BrowserClient } from './client.js';
+import { WINDOW, wrap as wrap$1 } from './helpers.js';
+import { GlobalHandlers } from './integrations/globalhandlers.js';
+import { TryCatch } from './integrations/trycatch.js';
+import { Breadcrumbs } from './integrations/breadcrumbs.js';
+import { LinkedErrors } from './integrations/linkederrors.js';
+import { HttpContext } from './integrations/httpcontext.js';
+import { Dedupe } from './integrations/dedupe.js';
+import { defaultStackParser } from './stack-parsers.js';
+import { makeFetchTransport } from './transports/fetch.js';
+import { makeXHRTransport } from './transports/xhr.js';
+
+const defaultIntegrations = [
+ new Integrations.InboundFilters(),
+ new Integrations.FunctionToString(),
+ new TryCatch(),
+ new Breadcrumbs(),
+ new GlobalHandlers(),
+ new LinkedErrors(),
+ new Dedupe(),
+ new HttpContext(),
+];
+
+/**
+ * A magic string that build tooling can leverage in order to inject a release value into the SDK.
+ */
+
+/**
+ * The Sentry Browser SDK Client.
+ *
+ * To use this SDK, call the {@link init} function as early as possible when
+ * loading the web page. To set context information or send manual events, use
+ * the provided methods.
+ *
+ * @example
+ *
+ * ```
+ *
+ * import { init } from '@sentry/browser';
+ *
+ * init({
+ * dsn: '__DSN__',
+ * // ...
+ * });
+ * ```
+ *
+ * @example
+ * ```
+ *
+ * import { configureScope } from '@sentry/browser';
+ * configureScope((scope: Scope) => {
+ * scope.setExtra({ battery: 0.7 });
+ * scope.setTag({ user_mode: 'admin' });
+ * scope.setUser({ id: '4711' });
+ * });
+ * ```
+ *
+ * @example
+ * ```
+ *
+ * import { addBreadcrumb } from '@sentry/browser';
+ * addBreadcrumb({
+ * message: 'My Breadcrumb',
+ * // ...
+ * });
+ * ```
+ *
+ * @example
+ *
+ * ```
+ *
+ * import * as Sentry from '@sentry/browser';
+ * Sentry.captureMessage('Hello, world!');
+ * Sentry.captureException(new Error('Good bye'));
+ * Sentry.captureEvent({
+ * message: 'Manual',
+ * stacktrace: [
+ * // ...
+ * ],
+ * });
+ * ```
+ *
+ * @see {@link BrowserOptions} for documentation on configuration options.
+ */
+function init(options = {}) {
+ if (options.defaultIntegrations === undefined) {
+ options.defaultIntegrations = defaultIntegrations;
+ }
+ if (options.release === undefined) {
+ // This allows build tooling to find-and-replace __SENTRY_RELEASE__ to inject a release value
+ if (typeof __SENTRY_RELEASE__ === 'string') {
+ options.release = __SENTRY_RELEASE__;
+ }
+
+ // This supports the variable that sentry-webpack-plugin injects
+ if (WINDOW.SENTRY_RELEASE && WINDOW.SENTRY_RELEASE.id) {
+ options.release = WINDOW.SENTRY_RELEASE.id;
+ }
+ }
+ if (options.autoSessionTracking === undefined) {
+ options.autoSessionTracking = true;
+ }
+ if (options.sendClientReports === undefined) {
+ options.sendClientReports = true;
+ }
+
+ const clientOptions = {
+ ...options,
+ stackParser: stackParserFromStackParserOptions(options.stackParser || defaultStackParser),
+ integrations: getIntegrationsToSetup(options),
+ transport: options.transport || (supportsFetch() ? makeFetchTransport : makeXHRTransport),
+ };
+
+ initAndBind(BrowserClient, clientOptions);
+
+ if (options.autoSessionTracking) {
+ startSessionTracking();
+ }
+}
+
+/**
+ * Present the user with a report dialog.
+ *
+ * @param options Everything is optional, we try to fetch all info need from the global scope.
+ */
+function showReportDialog(options = {}, hub = getCurrentHub()) {
+ // doesn't work without a document (React Native)
+ if (!WINDOW.document) {
+ (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && logger.error('Global document not defined in showReportDialog call');
+ return;
+ }
+
+ const { client, scope } = hub.getStackTop();
+ const dsn = options.dsn || (client && client.getDsn());
+ if (!dsn) {
+ (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && logger.error('DSN not configured for showReportDialog call');
+ return;
+ }
+
+ if (scope) {
+ options.user = {
+ ...scope.getUser(),
+ ...options.user,
+ };
+ }
+
+ if (!options.eventId) {
+ options.eventId = hub.lastEventId();
+ }
+
+ const script = WINDOW.document.createElement('script');
+ script.async = true;
+ script.src = getReportDialogEndpoint(dsn, options);
+
+ if (options.onLoad) {
+ script.onload = options.onLoad;
+ }
+
+ const injectionPoint = WINDOW.document.head || WINDOW.document.body;
+ if (injectionPoint) {
+ injectionPoint.appendChild(script);
+ } else {
+ (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && logger.error('Not injecting report dialog. No injection point found in HTML');
+ }
+}
+
+/**
+ * This is the getter for lastEventId.
+ *
+ * @returns The last event id of a captured event.
+ */
+function lastEventId() {
+ return getCurrentHub().lastEventId();
+}
+
+/**
+ * This function is here to be API compatible with the loader.
+ * @hidden
+ */
+function forceLoad() {
+ // Noop
+}
+
+/**
+ * This function is here to be API compatible with the loader.
+ * @hidden
+ */
+function onLoad(callback) {
+ callback();
+}
+
+/**
+ * Call `flush()` on the current client, if there is one. See {@link Client.flush}.
+ *
+ * @param timeout Maximum time in ms the client should wait to flush its event queue. Omitting this parameter will cause
+ * the client to wait until all events are sent before resolving the promise.
+ * @returns A promise which resolves to `true` if the queue successfully drains before the timeout, or `false` if it
+ * doesn't (or if there's no client defined).
+ */
+function flush(timeout) {
+ const client = getCurrentHub().getClient();
+ if (client) {
+ return client.flush(timeout);
+ }
+ (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && logger.warn('Cannot flush events. No client defined.');
+ return resolvedSyncPromise(false);
+}
+
+/**
+ * Call `close()` on the current client, if there is one. See {@link Client.close}.
+ *
+ * @param timeout Maximum time in ms the client should wait to flush its event queue before shutting down. Omitting this
+ * parameter will cause the client to wait until all events are sent before disabling itself.
+ * @returns A promise which resolves to `true` if the queue successfully drains before the timeout, or `false` if it
+ * doesn't (or if there's no client defined).
+ */
+function close(timeout) {
+ const client = getCurrentHub().getClient();
+ if (client) {
+ return client.close(timeout);
+ }
+ (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && logger.warn('Cannot flush events and disable SDK. No client defined.');
+ return resolvedSyncPromise(false);
+}
+
+/**
+ * Wrap code within a try/catch block so the SDK is able to capture errors.
+ *
+ * @param fn A function to wrap.
+ *
+ * @returns The result of wrapped function call.
+ */
+// eslint-disable-next-line @typescript-eslint/no-explicit-any
+function wrap(fn) {
+ return wrap$1(fn)();
+}
+
+function startSessionOnHub(hub) {
+ hub.startSession({ ignoreDuration: true });
+ hub.captureSession();
+}
+
+/**
+ * Enable automatic Session Tracking for the initial page load.
+ */
+function startSessionTracking() {
+ if (typeof WINDOW.document === 'undefined') {
+ (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) &&
+ logger.warn('Session tracking in non-browser environment with @sentry/browser is not supported.');
+ return;
+ }
+
+ const hub = getCurrentHub();
+
+ // The only way for this to be false is for there to be a version mismatch between @sentry/browser (>= 6.0.0) and
+ // @sentry/hub (< 5.27.0). In the simple case, there won't ever be such a mismatch, because the two packages are
+ // pinned at the same version in package.json, but there are edge cases where it's possible. See
+ // https://github.com/getsentry/sentry-javascript/issues/3207 and
+ // https://github.com/getsentry/sentry-javascript/issues/3234 and
+ // https://github.com/getsentry/sentry-javascript/issues/3278.
+ if (!hub.captureSession) {
+ return;
+ }
+
+ // The session duration for browser sessions does not track a meaningful
+ // concept that can be used as a metric.
+ // Automatically captured sessions are akin to page views, and thus we
+ // discard their duration.
+ startSessionOnHub(hub);
+
+ // We want to create a session for every navigation as well
+ addInstrumentationHandler('history', ({ from, to }) => {
+ // Don't create an additional session for the initial route or if the location did not change
+ if (!(from === undefined || from === to)) {
+ startSessionOnHub(getCurrentHub());
+ }
+ });
+}
+
+/**
+ * Captures user feedback and sends it to Sentry.
+ */
+function captureUserFeedback(feedback) {
+ const client = getCurrentHub().getClient();
+ if (client) {
+ client.captureUserFeedback(feedback);
+ }
+}
+
+export { captureUserFeedback, close, defaultIntegrations, flush, forceLoad, init, lastEventId, onLoad, showReportDialog, wrap };
+//# sourceMappingURL=sdk.js.map