1 | {"version":3,"file":"hub.js","sources":["../../src/hub.ts"],"sourcesContent":["/* eslint-disable max-lines */\nimport type {\n Breadcrumb,\n BreadcrumbHint,\n Client,\n CustomSamplingContext,\n Event,\n EventHint,\n Extra,\n Extras,\n Hub as HubInterface,\n Integration,\n IntegrationClass,\n Primitive,\n Session,\n SessionContext,\n Severity,\n SeverityLevel,\n Transaction,\n TransactionContext,\n User,\n} from '@sentry/types';\nimport {\n consoleSandbox,\n dateTimestampInSeconds,\n getGlobalSingleton,\n GLOBAL_OBJ,\n isNodeEnv,\n logger,\n uuid4,\n} from '@sentry/utils';\n\nimport { DEFAULT_ENVIRONMENT } from './constants';\nimport { Scope } from './scope';\nimport { closeSession, makeSession, updateSession } from './session';\n\n/**\n * API compatibility version of this hub.\n *\n * WARNING: This number should only be increased when the global interface\n * changes and new methods are introduced.\n *\n * @hidden\n */\nexport const API_VERSION = 4;\n\n/**\n * Default maximum number of breadcrumbs added to an event. Can be overwritten\n * with {@link Options.maxBreadcrumbs}.\n */\nconst DEFAULT_BREADCRUMBS = 100;\n\n/**\n * A layer in the process stack.\n * @hidden\n */\nexport interface Layer {\n client?: Client;\n scope?: Scope;\n}\n\n/**\n * An object that contains a hub and maintains a scope stack.\n * @hidden\n */\nexport interface Carrier {\n __SENTRY__?: {\n hub?: Hub;\n /**\n * Extra Hub properties injected by various SDKs\n */\n integrations?: Integration[];\n extensions?: {\n /** Hack to prevent bundlers from breaking our usage of the domain package in the cross-platform Hub package */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n domain?: { [key: string]: any };\n } & {\n /** Extension methods for the hub, which are bound to the current Hub instance */\n // eslint-disable-next-line @typescript-eslint/ban-types\n [key: string]: Function;\n };\n };\n}\n\n/**\n * @inheritDoc\n */\nexport class Hub implements HubInterface {\n /** Is a {@link Layer}[] containing the client and scope */\n private readonly _stack: Layer[] = [{}];\n\n /** Contains the last event id of a captured event. */\n private _lastEventId?: string;\n\n /**\n * Creates a new instance of the hub, will push one {@link Layer} into the\n * internal stack on creation.\n *\n * @param client bound to the hub.\n * @param scope bound to the hub.\n * @param version number, higher number means higher priority.\n */\n public constructor(client?: Client, scope: Scope = new Scope(), private readonly _version: number = API_VERSION) {\n this.getStackTop().scope = scope;\n if (client) {\n this.bindClient(client);\n }\n }\n\n /**\n * @inheritDoc\n */\n public isOlderThan(version: number): boolean {\n return this._version < version;\n }\n\n /**\n * @inheritDoc\n */\n public bindClient(client?: Client): void {\n const top = this.getStackTop();\n top.client = client;\n if (client && client.setupIntegrations) {\n client.setupIntegrations();\n }\n }\n\n /**\n * @inheritDoc\n */\n public pushScope(): Scope {\n // We want to clone the content of prev scope\n const scope = Scope.clone(this.getScope());\n this.getStack().push({\n client: this.getClient(),\n scope,\n });\n return scope;\n }\n\n /**\n * @inheritDoc\n */\n public popScope(): boolean {\n if (this.getStack().length <= 1) return false;\n return !!this.getStack().pop();\n }\n\n /**\n * @inheritDoc\n */\n public withScope(callback: (scope: Scope) => void): void {\n const scope = this.pushScope();\n try {\n callback(scope);\n } finally {\n this.popScope();\n }\n }\n\n /**\n * @inheritDoc\n */\n public getClient<C extends Client>(): C | undefined {\n return this.getStackTop().client as C;\n }\n\n /** Returns the scope of the top stack. */\n public getScope(): Scope | undefined {\n return this.getStackTop().scope;\n }\n\n /** Returns the scope stack for domains or the process. */\n public getStack(): Layer[] {\n return this._stack;\n }\n\n /** Returns the topmost scope layer in the order domain > local > process. */\n public getStackTop(): Layer {\n return this._stack[this._stack.length - 1];\n }\n\n /**\n * @inheritDoc\n */\n public captureException(exception: unknown, hint?: EventHint): string {\n const eventId = (this._lastEventId = hint && hint.event_id ? hint.event_id : uuid4());\n const syntheticException = new Error('Sentry syntheticException');\n this._withClient((client, scope) => {\n client.captureException(\n exception,\n {\n originalException: exception,\n syntheticException,\n ...hint,\n event_id: eventId,\n },\n scope,\n );\n });\n return eventId;\n }\n\n /**\n * @inheritDoc\n */\n public captureMessage(\n message: string,\n // eslint-disable-next-line deprecation/deprecation\n level?: Severity | SeverityLevel,\n hint?: EventHint,\n ): string {\n const eventId = (this._lastEventId = hint && hint.event_id ? hint.event_id : uuid4());\n const syntheticException = new Error(message);\n this._withClient((client, scope) => {\n client.captureMessage(\n message,\n level,\n {\n originalException: message,\n syntheticException,\n ...hint,\n event_id: eventId,\n },\n scope,\n );\n });\n return eventId;\n }\n\n /**\n * @inheritDoc\n */\n public captureEvent(event: Event, hint?: EventHint): string {\n const eventId = hint && hint.event_id ? hint.event_id : uuid4();\n if (!event.type) {\n this._lastEventId = eventId;\n }\n\n this._withClient((client, scope) => {\n client.captureEvent(event, { ...hint, event_id: eventId }, scope);\n });\n return eventId;\n }\n\n /**\n * @inheritDoc\n */\n public lastEventId(): string | undefined {\n return this._lastEventId;\n }\n\n /**\n * @inheritDoc\n */\n public addBreadcrumb(breadcrumb: Breadcrumb, hint?: BreadcrumbHint): void {\n const { scope, client } = this.getStackTop();\n\n if (!scope || !client) return;\n\n const { beforeBreadcrumb = null, maxBreadcrumbs = DEFAULT_BREADCRUMBS } =\n (client.getOptions && client.getOptions()) || {};\n\n if (maxBreadcrumbs <= 0) return;\n\n const timestamp = dateTimestampInSeconds();\n const mergedBreadcrumb = { timestamp, ...breadcrumb };\n const finalBreadcrumb = beforeBreadcrumb\n ? (consoleSandbox(() => beforeBreadcrumb(mergedBreadcrumb, hint)) as Breadcrumb | null)\n : mergedBreadcrumb;\n\n if (finalBreadcrumb === null) return;\n\n if (client.emit) {\n client.emit('beforeAddBreadcrumb', finalBreadcrumb, hint);\n }\n\n scope.addBreadcrumb(finalBreadcrumb, maxBreadcrumbs);\n }\n\n /**\n * @inheritDoc\n */\n public setUser(user: User | null): void {\n const scope = this.getScope();\n if (scope) scope.setUser(user);\n }\n\n /**\n * @inheritDoc\n */\n public setTags(tags: { [key: string]: Primitive }): void {\n const scope = this.getScope();\n if (scope) scope.setTags(tags);\n }\n\n /**\n * @inheritDoc\n */\n public setExtras(extras: Extras): void {\n const scope = this.getScope();\n if (scope) scope.setExtras(extras);\n }\n\n /**\n * @inheritDoc\n */\n public setTag(key: string, value: Primitive): void {\n const scope = this.getScope();\n if (scope) scope.setTag(key, value);\n }\n\n /**\n * @inheritDoc\n */\n public setExtra(key: string, extra: Extra): void {\n const scope = this.getScope();\n if (scope) scope.setExtra(key, extra);\n }\n\n /**\n * @inheritDoc\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public setContext(name: string, context: { [key: string]: any } | null): void {\n const scope = this.getScope();\n if (scope) scope.setContext(name, context);\n }\n\n /**\n * @inheritDoc\n */\n public configureScope(callback: (scope: Scope) => void): void {\n const { scope, client } = this.getStackTop();\n if (scope && client) {\n callback(scope);\n }\n }\n\n /**\n * @inheritDoc\n */\n public run(callback: (hub: Hub) => void): void {\n const oldHub = makeMain(this);\n try {\n callback(this);\n } finally {\n makeMain(oldHub);\n }\n }\n\n /**\n * @inheritDoc\n */\n public getIntegration<T extends Integration>(integration: IntegrationClass<T>): T | null {\n const client = this.getClient();\n if (!client) return null;\n try {\n return client.getIntegration(integration);\n } catch (_oO) {\n __DEBUG_BUILD__ && logger.warn(`Cannot retrieve integration ${integration.id} from the current Hub`);\n return null;\n }\n }\n\n /**\n * @inheritDoc\n */\n public startTransaction(context: TransactionContext, customSamplingContext?: CustomSamplingContext): Transaction {\n return this._callExtensionMethod('startTransaction', context, customSamplingContext);\n }\n\n /**\n * @inheritDoc\n */\n public traceHeaders(): { [key: string]: string } {\n return this._callExtensionMethod<{ [key: string]: string }>('traceHeaders');\n }\n\n /**\n * @inheritDoc\n */\n public captureSession(endSession: boolean = false): void {\n // both send the update and pull the session from the scope\n if (endSession) {\n return this.endSession();\n }\n\n // only send the update\n this._sendSessionUpdate();\n }\n\n /**\n * @inheritDoc\n */\n public endSession(): void {\n const layer = this.getStackTop();\n const scope = layer && layer.scope;\n const session = scope && scope.getSession();\n if (session) {\n closeSession(session);\n }\n this._sendSessionUpdate();\n\n // the session is over; take it off of the scope\n if (scope) {\n scope.setSession();\n }\n }\n\n /**\n * @inheritDoc\n */\n public startSession(context?: SessionContext): Session {\n const { scope, client } = this.getStackTop();\n const { release, environment = DEFAULT_ENVIRONMENT } = (client && client.getOptions()) || {};\n\n // Will fetch userAgent if called from browser sdk\n const { userAgent } = GLOBAL_OBJ.navigator || {};\n\n const session = makeSession({\n release,\n environment,\n ...(scope && { user: scope.getUser() }),\n ...(userAgent && { userAgent }),\n ...context,\n });\n\n if (scope) {\n // End existing session if there's one\n const currentSession = scope.getSession && scope.getSession();\n if (currentSession && currentSession.status === 'ok') {\n updateSession(currentSession, { status: 'exited' });\n }\n this.endSession();\n\n // Afterwards we set the new session on the scope\n scope.setSession(session);\n }\n\n return session;\n }\n\n /**\n * Returns if default PII should be sent to Sentry and propagated in ourgoing requests\n * when Tracing is used.\n */\n public shouldSendDefaultPii(): boolean {\n const client = this.getClient();\n const options = client && client.getOptions();\n return Boolean(options && options.sendDefaultPii);\n }\n\n /**\n * Sends the current Session on the scope\n */\n private _sendSessionUpdate(): void {\n const { scope, client } = this.getStackTop();\n if (!scope) return;\n\n const session = scope.getSession();\n if (session) {\n if (client && client.captureSession) {\n client.captureSession(session);\n }\n }\n }\n\n /**\n * Internal helper function to call a method on the top client if it exists.\n *\n * @param method The method to call on the client.\n * @param args Arguments to pass to the client function.\n */\n private _withClient(callback: (client: Client, scope: Scope | undefined) => void): void {\n const { scope, client } = this.getStackTop();\n if (client) {\n callback(client, scope);\n }\n }\n\n /**\n * Calls global extension method and binding current instance to the function call\n */\n // @ts-ignore Function lacks ending return statement and return type does not include 'undefined'. ts(2366)\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _callExtensionMethod<T>(method: string, ...args: any[]): T {\n const carrier = getMainCarrier();\n const sentry = carrier.__SENTRY__;\n if (sentry && sentry.extensions && typeof sentry.extensions[method] === 'function') {\n return sentry.extensions[method].apply(this, args);\n }\n __DEBUG_BUILD__ && logger.warn(`Extension method ${method} couldn't be found, doing nothing.`);\n }\n}\n\n/**\n * Returns the global shim registry.\n *\n * FIXME: This function is problematic, because despite always returning a valid Carrier,\n * it has an optional `__SENTRY__` property, which then in turn requires us to always perform an unnecessary check\n * at the call-site. We always access the carrier through this function, so we can guarantee that `__SENTRY__` is there.\n **/\nexport function getMainCarrier(): Carrier {\n GLOBAL_OBJ.__SENTRY__ = GLOBAL_OBJ.__SENTRY__ || {\n extensions: {},\n hub: undefined,\n };\n return GLOBAL_OBJ;\n}\n\n/**\n * Replaces the current main hub with the passed one on the global object\n *\n * @returns The old replaced hub\n */\nexport function makeMain(hub: Hub): Hub {\n const registry = getMainCarrier();\n const oldHub = getHubFromCarrier(registry);\n setHubOnCarrier(registry, hub);\n return oldHub;\n}\n\n/**\n * Returns the default hub instance.\n *\n * If a hub is already registered in the global carrier but this module\n * contains a more recent version, it replaces the registered version.\n * Otherwise, the currently registered hub will be returned.\n */\nexport function getCurrentHub(): Hub {\n // Get main carrier (global for every environment)\n const registry = getMainCarrier();\n\n // If there's no hub, or its an old API, assign a new one\n if (!hasHubOnCarrier(registry) || getHubFromCarrier(registry).isOlderThan(API_VERSION)) {\n setHubOnCarrier(registry, new Hub());\n }\n\n // Prefer domains over global if they are there (applicable only to Node environment)\n if (isNodeEnv()) {\n return getHubFromActiveDomain(registry);\n }\n // Return hub that lives on a global object\n return getHubFromCarrier(registry);\n}\n\n/**\n * Try to read the hub from an active domain, and fallback to the registry if one doesn't exist\n * @returns discovered hub\n */\nfunction getHubFromActiveDomain(registry: Carrier): Hub {\n try {\n const sentry = getMainCarrier().__SENTRY__;\n const activeDomain = sentry && sentry.extensions && sentry.extensions.domain && sentry.extensions.domain.active;\n\n // If there's no active domain, just return global hub\n if (!activeDomain) {\n return getHubFromCarrier(registry);\n }\n\n // If there's no hub on current domain, or it's an old API, assign a new one\n if (!hasHubOnCarrier(activeDomain) || getHubFromCarrier(activeDomain).isOlderThan(API_VERSION)) {\n const registryHubTopStack = getHubFromCarrier(registry).getStackTop();\n setHubOnCarrier(activeDomain, new Hub(registryHubTopStack.client, Scope.clone(registryHubTopStack.scope)));\n }\n\n // Return hub that lives on a domain\n return getHubFromCarrier(activeDomain);\n } catch (_Oo) {\n // Return hub that lives on a global object\n return getHubFromCarrier(registry);\n }\n}\n\n/**\n * This will tell whether a carrier has a hub on it or not\n * @param carrier object\n */\nfunction hasHubOnCarrier(carrier: Carrier): boolean {\n return !!(carrier && carrier.__SENTRY__ && carrier.__SENTRY__.hub);\n}\n\n/**\n * This will create a new {@link Hub} and add to the passed object on\n * __SENTRY__.hub.\n * @param carrier object\n * @hidden\n */\nexport function getHubFromCarrier(carrier: Carrier): Hub {\n return getGlobalSingleton<Hub>('hub', () => new Hub(), carrier);\n}\n\n/**\n * This will set passed {@link Hub} on the passed object's __SENTRY__.hub attribute\n * @param carrier object\n * @param hub Hub\n * @returns A boolean indicating success or failure\n */\nexport function setHubOnCarrier(carrier: Carrier, hub: Hub): boolean {\n if (!carrier) return false;\n const __SENTRY__ = (carrier.__SENTRY__ = carrier.__SENTRY__ || {});\n __SENTRY__.hub = hub;\n return true;\n}\n"],"names":["scope","Scope","uuid4","dateTimestampInSeconds","consoleSandbox","logger","session","closeSession","DEFAULT_ENVIRONMENT","GLOBAL_OBJ","makeSession","updateSession","isNodeEnv","getGlobalSingleton"],"mappings":"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"} |