scope.js.map 33 KB

1
  1. {"version":3,"file":"scope.js","sources":["../../src/scope.ts"],"sourcesContent":["/* eslint-disable max-lines */\nimport type {\n Attachment,\n Breadcrumb,\n CaptureContext,\n Client,\n Context,\n Contexts,\n Event,\n EventHint,\n EventProcessor,\n Extra,\n Extras,\n Primitive,\n PropagationContext,\n RequestSession,\n Scope as ScopeInterface,\n ScopeContext,\n ScopeData,\n Session,\n Severity,\n SeverityLevel,\n Span,\n Transaction,\n User,\n} from '@sentry/types';\nimport { dateTimestampInSeconds, isPlainObject, logger, uuid4 } from '@sentry/utils';\n\nimport { getGlobalEventProcessors, notifyEventProcessors } from './eventProcessors';\nimport { updateSession } from './session';\nimport { applyScopeDataToEvent } from './utils/applyScopeDataToEvent';\n\n/**\n * Default value for maximum number of breadcrumbs added to an event.\n */\nconst DEFAULT_MAX_BREADCRUMBS = 100;\n\n/**\n * The global scope is kept in this module.\n * When accessing this via `getGlobalScope()` we'll make sure to set one if none is currently present.\n */\nlet globalScope: ScopeInterface | undefined;\n\n/**\n * Holds additional event information. {@link Scope.applyToEvent} will be\n * called by the client before an event will be sent.\n */\nexport class Scope implements ScopeInterface {\n /** Flag if notifying is happening. */\n protected _notifyingListeners: boolean;\n\n /** Callback for client to receive scope changes. */\n protected _scopeListeners: Array<(scope: Scope) => void>;\n\n /** Callback list that will be called after {@link applyToEvent}. */\n protected _eventProcessors: EventProcessor[];\n\n /** Array of breadcrumbs. */\n protected _breadcrumbs: Breadcrumb[];\n\n /** User */\n protected _user: User;\n\n /** Tags */\n protected _tags: { [key: string]: Primitive };\n\n /** Extra */\n protected _extra: Extras;\n\n /** Contexts */\n protected _contexts: Contexts;\n\n /** Attachments */\n protected _attachments: Attachment[];\n\n /** Propagation Context for distributed tracing */\n protected _propagationContext: PropagationContext;\n\n /**\n * A place to stash data which is needed at some point in the SDK's event processing pipeline but which shouldn't get\n * sent to Sentry\n */\n protected _sdkProcessingMetadata: { [key: string]: unknown };\n\n /** Fingerprint */\n protected _fingerprint?: string[];\n\n /** Severity */\n // eslint-disable-next-line deprecation/deprecation\n protected _level?: Severity | SeverityLevel;\n\n /**\n * Transaction Name\n */\n protected _transactionName?: string;\n\n /** Span */\n protected _span?: Span;\n\n /** Session */\n protected _session?: Session;\n\n /** Request Mode Session Status */\n protected _requestSession?: RequestSession;\n\n /** The client on this scope */\n protected _client?: Client;\n\n // NOTE: Any field which gets added here should get added not only to the constructor but also to the `clone` method.\n\n public constructor() {\n this._notifyingListeners = false;\n this._scopeListeners = [];\n this._eventProcessors = [];\n this._breadcrumbs = [];\n this._attachments = [];\n this._user = {};\n this._tags = {};\n this._extra = {};\n this._contexts = {};\n this._sdkProcessingMetadata = {};\n this._propagationContext = generatePropagationContext();\n }\n\n /**\n * Inherit values from the parent scope.\n * @deprecated Use `scope.clone()` and `new Scope()` instead.\n */\n public static clone(scope?: Scope): Scope {\n return scope ? scope.clone() : new Scope();\n }\n\n /**\n * Clone this scope instance.\n */\n public clone(): Scope {\n const newScope = new Scope();\n newScope._breadcrumbs = [...this._breadcrumbs];\n newScope._tags = { ...this._tags };\n newScope._extra = { ...this._extra };\n newScope._contexts = { ...this._contexts };\n newScope._user = this._user;\n newScope._level = this._level;\n newScope._span = this._span;\n newScope._session = this._session;\n newScope._transactionName = this._transactionName;\n newScope._fingerprint = this._fingerprint;\n newScope._eventProcessors = [...this._eventProcessors];\n newScope._requestSession = this._requestSession;\n newScope._attachments = [...this._attachments];\n newScope._sdkProcessingMetadata = { ...this._sdkProcessingMetadata };\n newScope._propagationContext = { ...this._propagationContext };\n newScope._client = this._client;\n\n return newScope;\n }\n\n /** Update the client on the scope. */\n public setClient(client: Client | undefined): void {\n this._client = client;\n }\n\n /**\n * Get the client assigned to this scope.\n *\n * It is generally recommended to use the global function `Sentry.getClient()` instead, unless you know what you are doing.\n */\n public getClient(): Client | undefined {\n return this._client;\n }\n\n /**\n * Add internal on change listener. Used for sub SDKs that need to store the scope.\n * @hidden\n */\n public addScopeListener(callback: (scope: Scope) => void): void {\n this._scopeListeners.push(callback);\n }\n\n /**\n * @inheritDoc\n */\n public addEventProcessor(callback: EventProcessor): this {\n this._eventProcessors.push(callback);\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public setUser(user: User | null): this {\n // If null is passed we want to unset everything, but still define keys,\n // so that later down in the pipeline any existing values are cleared.\n this._user = user || {\n email: undefined,\n id: undefined,\n ip_address: undefined,\n segment: undefined,\n username: undefined,\n };\n\n if (this._session) {\n updateSession(this._session, { user });\n }\n\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public getUser(): User | undefined {\n return this._user;\n }\n\n /**\n * @inheritDoc\n */\n public getRequestSession(): RequestSession | undefined {\n return this._requestSession;\n }\n\n /**\n * @inheritDoc\n */\n public setRequestSession(requestSession?: RequestSession): this {\n this._requestSession = requestSession;\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public setTags(tags: { [key: string]: Primitive }): this {\n this._tags = {\n ...this._tags,\n ...tags,\n };\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public setTag(key: string, value: Primitive): this {\n this._tags = { ...this._tags, [key]: value };\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public setExtras(extras: Extras): this {\n this._extra = {\n ...this._extra,\n ...extras,\n };\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public setExtra(key: string, extra: Extra): this {\n this._extra = { ...this._extra, [key]: extra };\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public setFingerprint(fingerprint: string[]): this {\n this._fingerprint = fingerprint;\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public setLevel(\n // eslint-disable-next-line deprecation/deprecation\n level: Severity | SeverityLevel,\n ): this {\n this._level = level;\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * Sets the transaction name on the scope for future events.\n * @deprecated Use extra or tags instead.\n */\n public setTransactionName(name?: string): this {\n this._transactionName = name;\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public setContext(key: string, context: Context | null): this {\n if (context === null) {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete this._contexts[key];\n } else {\n this._contexts[key] = context;\n }\n\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * Sets the Span on the scope.\n * @param span Span\n * @deprecated Instead of setting a span on a scope, use `startSpan()`/`startSpanManual()` instead.\n */\n public setSpan(span?: Span): this {\n this._span = span;\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * Returns the `Span` if there is one.\n * @deprecated Use `getActiveSpan()` instead.\n */\n public getSpan(): Span | undefined {\n return this._span;\n }\n\n /**\n * Returns the `Transaction` attached to the scope (if there is one).\n * @deprecated You should not rely on the transaction, but just use `startSpan()` APIs instead.\n */\n public getTransaction(): Transaction | undefined {\n // Often, this span (if it exists at all) will be a transaction, but it's not guaranteed to be. Regardless, it will\n // have a pointer to the currently-active transaction.\n const span = this._span;\n // Cannot replace with getRootSpan because getRootSpan returns a span, not a transaction\n // Also, this method will be removed anyway.\n // eslint-disable-next-line deprecation/deprecation\n return span && span.transaction;\n }\n\n /**\n * @inheritDoc\n */\n public setSession(session?: Session): this {\n if (!session) {\n delete this._session;\n } else {\n this._session = session;\n }\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public getSession(): Session | undefined {\n return this._session;\n }\n\n /**\n * @inheritDoc\n */\n public update(captureContext?: CaptureContext): this {\n if (!captureContext) {\n return this;\n }\n\n const scopeToMerge = typeof captureContext === 'function' ? captureContext(this) : captureContext;\n\n if (scopeToMerge instanceof Scope) {\n const scopeData = scopeToMerge.getScopeData();\n\n this._tags = { ...this._tags, ...scopeData.tags };\n this._extra = { ...this._extra, ...scopeData.extra };\n this._contexts = { ...this._contexts, ...scopeData.contexts };\n if (scopeData.user && Object.keys(scopeData.user).length) {\n this._user = scopeData.user;\n }\n if (scopeData.level) {\n this._level = scopeData.level;\n }\n if (scopeData.fingerprint.length) {\n this._fingerprint = scopeData.fingerprint;\n }\n if (scopeToMerge.getRequestSession()) {\n this._requestSession = scopeToMerge.getRequestSession();\n }\n if (scopeData.propagationContext) {\n this._propagationContext = scopeData.propagationContext;\n }\n } else if (isPlainObject(scopeToMerge)) {\n const scopeContext = captureContext as ScopeContext;\n this._tags = { ...this._tags, ...scopeContext.tags };\n this._extra = { ...this._extra, ...scopeContext.extra };\n this._contexts = { ...this._contexts, ...scopeContext.contexts };\n if (scopeContext.user) {\n this._user = scopeContext.user;\n }\n if (scopeContext.level) {\n this._level = scopeContext.level;\n }\n if (scopeContext.fingerprint) {\n this._fingerprint = scopeContext.fingerprint;\n }\n if (scopeContext.requestSession) {\n this._requestSession = scopeContext.requestSession;\n }\n if (scopeContext.propagationContext) {\n this._propagationContext = scopeContext.propagationContext;\n }\n }\n\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public clear(): this {\n this._breadcrumbs = [];\n this._tags = {};\n this._extra = {};\n this._user = {};\n this._contexts = {};\n this._level = undefined;\n this._transactionName = undefined;\n this._fingerprint = undefined;\n this._requestSession = undefined;\n this._span = undefined;\n this._session = undefined;\n this._notifyScopeListeners();\n this._attachments = [];\n this._propagationContext = generatePropagationContext();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public addBreadcrumb(breadcrumb: Breadcrumb, maxBreadcrumbs?: number): this {\n const maxCrumbs = typeof maxBreadcrumbs === 'number' ? maxBreadcrumbs : DEFAULT_MAX_BREADCRUMBS;\n\n // No data has been changed, so don't notify scope listeners\n if (maxCrumbs <= 0) {\n return this;\n }\n\n const mergedBreadcrumb = {\n timestamp: dateTimestampInSeconds(),\n ...breadcrumb,\n };\n\n const breadcrumbs = this._breadcrumbs;\n breadcrumbs.push(mergedBreadcrumb);\n this._breadcrumbs = breadcrumbs.length > maxCrumbs ? breadcrumbs.slice(-maxCrumbs) : breadcrumbs;\n\n this._notifyScopeListeners();\n\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public getLastBreadcrumb(): Breadcrumb | undefined {\n return this._breadcrumbs[this._breadcrumbs.length - 1];\n }\n\n /**\n * @inheritDoc\n */\n public clearBreadcrumbs(): this {\n this._breadcrumbs = [];\n this._notifyScopeListeners();\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public addAttachment(attachment: Attachment): this {\n this._attachments.push(attachment);\n return this;\n }\n\n /**\n * @inheritDoc\n * @deprecated Use `getScopeData()` instead.\n */\n public getAttachments(): Attachment[] {\n const data = this.getScopeData();\n\n return data.attachments;\n }\n\n /**\n * @inheritDoc\n */\n public clearAttachments(): this {\n this._attachments = [];\n return this;\n }\n\n /** @inheritDoc */\n public getScopeData(): ScopeData {\n const {\n _breadcrumbs,\n _attachments,\n _contexts,\n _tags,\n _extra,\n _user,\n _level,\n _fingerprint,\n _eventProcessors,\n _propagationContext,\n _sdkProcessingMetadata,\n _transactionName,\n _span,\n } = this;\n\n return {\n breadcrumbs: _breadcrumbs,\n attachments: _attachments,\n contexts: _contexts,\n tags: _tags,\n extra: _extra,\n user: _user,\n level: _level,\n fingerprint: _fingerprint || [],\n eventProcessors: _eventProcessors,\n propagationContext: _propagationContext,\n sdkProcessingMetadata: _sdkProcessingMetadata,\n transactionName: _transactionName,\n span: _span,\n };\n }\n\n /**\n * Applies data from the scope to the event and runs all event processors on it.\n *\n * @param event Event\n * @param hint Object containing additional information about the original exception, for use by the event processors.\n * @hidden\n * @deprecated Use `applyScopeDataToEvent()` directly\n */\n public applyToEvent(\n event: Event,\n hint: EventHint = {},\n additionalEventProcessors: EventProcessor[] = [],\n ): PromiseLike<Event | null> {\n applyScopeDataToEvent(event, this.getScopeData());\n\n // TODO (v8): Update this order to be: Global > Client > Scope\n const eventProcessors: EventProcessor[] = [\n ...additionalEventProcessors,\n // eslint-disable-next-line deprecation/deprecation\n ...getGlobalEventProcessors(),\n ...this._eventProcessors,\n ];\n\n return notifyEventProcessors(eventProcessors, event, hint);\n }\n\n /**\n * Add data which will be accessible during event processing but won't get sent to Sentry\n */\n public setSDKProcessingMetadata(newData: { [key: string]: unknown }): this {\n this._sdkProcessingMetadata = { ...this._sdkProcessingMetadata, ...newData };\n\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public setPropagationContext(context: PropagationContext): this {\n this._propagationContext = context;\n return this;\n }\n\n /**\n * @inheritDoc\n */\n public getPropagationContext(): PropagationContext {\n return this._propagationContext;\n }\n\n /**\n * Capture an exception for this scope.\n *\n * @param exception The exception to capture.\n * @param hint Optinal additional data to attach to the Sentry event.\n * @returns the id of the captured Sentry event.\n */\n public captureException(exception: unknown, hint?: EventHint): string {\n const eventId = hint && hint.event_id ? hint.event_id : uuid4();\n\n if (!this._client) {\n logger.warn('No client configured on scope - will not capture exception!');\n return eventId;\n }\n\n const syntheticException = new Error('Sentry syntheticException');\n\n this._client.captureException(\n exception,\n {\n originalException: exception,\n syntheticException,\n ...hint,\n event_id: eventId,\n },\n this,\n );\n\n return eventId;\n }\n\n /**\n * Capture a message for this scope.\n *\n * @param message The message to capture.\n * @param level An optional severity level to report the message with.\n * @param hint Optional additional data to attach to the Sentry event.\n * @returns the id of the captured message.\n */\n public captureMessage(message: string, level?: SeverityLevel, hint?: EventHint): string {\n const eventId = hint && hint.event_id ? hint.event_id : uuid4();\n\n if (!this._client) {\n logger.warn('No client configured on scope - will not capture message!');\n return eventId;\n }\n\n const syntheticException = new Error(message);\n\n this._client.captureMessage(\n message,\n level,\n {\n originalException: message,\n syntheticException,\n ...hint,\n event_id: eventId,\n },\n this,\n );\n\n return eventId;\n }\n\n /**\n * Captures a manually created event for this scope and sends it to Sentry.\n *\n * @param exception The event to capture.\n * @param hint Optional additional data to attach to the Sentry event.\n * @returns the id of the captured event.\n */\n public captureEvent(event: Event, hint?: EventHint): string {\n const eventId = hint && hint.event_id ? hint.event_id : uuid4();\n\n if (!this._client) {\n logger.warn('No client configured on scope - will not capture event!');\n return eventId;\n }\n\n this._client.captureEvent(event, { ...hint, event_id: eventId }, this);\n\n return eventId;\n }\n\n /**\n * This will be called on every set call.\n */\n protected _notifyScopeListeners(): void {\n // We need this check for this._notifyingListeners to be able to work on scope during updates\n // If this check is not here we'll produce endless recursion when something is done with the scope\n // during the callback.\n if (!this._notifyingListeners) {\n this._notifyingListeners = true;\n this._scopeListeners.forEach(callback => {\n callback(this);\n });\n this._notifyingListeners = false;\n }\n }\n}\n\n/**\n * Get the global scope.\n * This scope is applied to _all_ events.\n */\nexport function getGlobalScope(): ScopeInterface {\n if (!globalScope) {\n globalScope = new Scope();\n }\n\n return globalScope;\n}\n\n/**\n * This is mainly needed for tests.\n * DO NOT USE this, as this is an internal API and subject to change.\n * @hidden\n */\nexport function setGlobalScope(scope: ScopeInterface | undefined): void {\n globalScope = scope;\n}\n\nfunction generatePropagationContext(): PropagationContext {\n return {\n traceId: uuid4(),\n spanId: uuid4().substring(16),\n };\n}\n"],"names":["updateSession","isPlainObject","dateTimestampInSeconds","applyScopeDataToEvent","eventProcessors","getGlobalEventProcessors","notifyEventProcessors","uuid4","logger"],"mappings":"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"}