All Downloads are FREE. Search and download functionalities are using the official Maven repository.

package.build.esm.exports.js.map Maven / Gradle / Ivy

There is a newer version: 8.39.0
Show newest version
{"version":3,"file":"exports.js","sources":["../../src/exports.ts"],"sourcesContent":["import type {\n  CaptureContext,\n  CheckIn,\n  Event,\n  EventHint,\n  EventProcessor,\n  Extra,\n  Extras,\n  FinishedCheckIn,\n  MonitorConfig,\n  Primitive,\n  Session,\n  SessionContext,\n  SeverityLevel,\n  User,\n} from '@sentry/types';\nimport { GLOBAL_OBJ, isThenable, logger, timestampInSeconds, uuid4 } from '@sentry/utils';\n\nimport { DEFAULT_ENVIRONMENT } from './constants';\nimport { getClient, getCurrentScope, getIsolationScope, withIsolationScope } from './currentScopes';\nimport { DEBUG_BUILD } from './debug-build';\nimport { closeSession, makeSession, updateSession } from './session';\nimport type { ExclusiveEventHintOrCaptureContext } from './utils/prepareEvent';\nimport { parseEventHintOrCaptureContext } from './utils/prepareEvent';\n\n/**\n * Captures an exception event and sends it to Sentry.\n *\n * @param exception The exception to capture.\n * @param hint Optional additional data to attach to the Sentry event.\n * @returns the id of the captured Sentry event.\n */\nexport function captureException(\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  exception: any,\n  hint?: ExclusiveEventHintOrCaptureContext,\n): string {\n  return getCurrentScope().captureException(exception, parseEventHintOrCaptureContext(hint));\n}\n\n/**\n * Captures a message event and sends it to Sentry.\n *\n * @param message The message to send to Sentry.\n * @param captureContext Define the level of the message or pass in additional data to attach to the message.\n * @returns the id of the captured message.\n */\nexport function captureMessage(message: string, captureContext?: CaptureContext | SeverityLevel): string {\n  // This is necessary to provide explicit scopes upgrade, without changing the original\n  // arity of the `captureMessage(message, level)` method.\n  const level = typeof captureContext === 'string' ? captureContext : undefined;\n  const context = typeof captureContext !== 'string' ? { captureContext } : undefined;\n  return getCurrentScope().captureMessage(message, level, context);\n}\n\n/**\n * Captures a manually created event and sends it to Sentry.\n *\n * @param event The event to send to Sentry.\n * @param hint Optional additional data to attach to the Sentry event.\n * @returns the id of the captured event.\n */\nexport function captureEvent(event: Event, hint?: EventHint): string {\n  return getCurrentScope().captureEvent(event, hint);\n}\n\n/**\n * Sets context data with the given name.\n * @param name of the context\n * @param context Any kind of data. This data will be normalized.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function setContext(name: string, context: { [key: string]: any } | null): void {\n  getIsolationScope().setContext(name, context);\n}\n\n/**\n * Set an object that will be merged sent as extra data with the event.\n * @param extras Extras object to merge into current context.\n */\nexport function setExtras(extras: Extras): void {\n  getIsolationScope().setExtras(extras);\n}\n\n/**\n * Set key:value that will be sent as extra data with the event.\n * @param key String of extra\n * @param extra Any kind of data. This data will be normalized.\n */\nexport function setExtra(key: string, extra: Extra): void {\n  getIsolationScope().setExtra(key, extra);\n}\n\n/**\n * Set an object that will be merged sent as tags data with the event.\n * @param tags Tags context object to merge into current context.\n */\nexport function setTags(tags: { [key: string]: Primitive }): void {\n  getIsolationScope().setTags(tags);\n}\n\n/**\n * Set key:value that will be sent as tags data with the event.\n *\n * Can also be used to unset a tag, by passing `undefined`.\n *\n * @param key String key of tag\n * @param value Value of tag\n */\nexport function setTag(key: string, value: Primitive): void {\n  getIsolationScope().setTag(key, value);\n}\n\n/**\n * Updates user context information for future events.\n *\n * @param user User context object to be set in the current context. Pass `null` to unset the user.\n */\nexport function setUser(user: User | null): void {\n  getIsolationScope().setUser(user);\n}\n\n/**\n * The last error event id of the isolation scope.\n *\n * Warning: This function really returns the last recorded error event id on the current\n * isolation scope. If you call this function after handling a certain error and another error\n * is captured in between, the last one is returned instead of the one you might expect.\n * Also, ids of events that were never sent to Sentry (for example because\n * they were dropped in `beforeSend`) could be returned.\n *\n * @returns The last event id of the isolation scope.\n */\nexport function lastEventId(): string | undefined {\n  return getIsolationScope().lastEventId();\n}\n\n/**\n * Create a cron monitor check in and send it to Sentry.\n *\n * @param checkIn An object that describes a check in.\n * @param upsertMonitorConfig An optional object that describes a monitor config. Use this if you want\n * to create a monitor automatically when sending a check in.\n */\nexport function captureCheckIn(checkIn: CheckIn, upsertMonitorConfig?: MonitorConfig): string {\n  const scope = getCurrentScope();\n  const client = getClient();\n  if (!client) {\n    DEBUG_BUILD && logger.warn('Cannot capture check-in. No client defined.');\n  } else if (!client.captureCheckIn) {\n    DEBUG_BUILD && logger.warn('Cannot capture check-in. Client does not support sending check-ins.');\n  } else {\n    return client.captureCheckIn(checkIn, upsertMonitorConfig, scope);\n  }\n\n  return uuid4();\n}\n\n/**\n * Wraps a callback with a cron monitor check in. The check in will be sent to Sentry when the callback finishes.\n *\n * @param monitorSlug The distinct slug of the monitor.\n * @param upsertMonitorConfig An optional object that describes a monitor config. Use this if you want\n * to create a monitor automatically when sending a check in.\n */\nexport function withMonitor(\n  monitorSlug: CheckIn['monitorSlug'],\n  callback: () => T,\n  upsertMonitorConfig?: MonitorConfig,\n): T {\n  const checkInId = captureCheckIn({ monitorSlug, status: 'in_progress' }, upsertMonitorConfig);\n  const now = timestampInSeconds();\n\n  function finishCheckIn(status: FinishedCheckIn['status']): void {\n    captureCheckIn({ monitorSlug, status, checkInId, duration: timestampInSeconds() - now });\n  }\n\n  return withIsolationScope(() => {\n    let maybePromiseResult: T;\n    try {\n      maybePromiseResult = callback();\n    } catch (e) {\n      finishCheckIn('error');\n      throw e;\n    }\n\n    if (isThenable(maybePromiseResult)) {\n      Promise.resolve(maybePromiseResult).then(\n        () => {\n          finishCheckIn('ok');\n        },\n        () => {\n          finishCheckIn('error');\n        },\n      );\n    } else {\n      finishCheckIn('ok');\n    }\n\n    return maybePromiseResult;\n  });\n}\n\n/**\n * Call `flush()` on the current client, if there is one. See {@link Client.flush}.\n *\n * @param timeout Maximum time in ms the client should wait to flush its event queue. Omitting this parameter will cause\n * the client to wait until all events are sent before resolving the promise.\n * @returns A promise which resolves to `true` if the queue successfully drains before the timeout, or `false` if it\n * doesn't (or if there's no client defined).\n */\nexport async function flush(timeout?: number): Promise {\n  const client = getClient();\n  if (client) {\n    return client.flush(timeout);\n  }\n  DEBUG_BUILD && logger.warn('Cannot flush events. No client defined.');\n  return Promise.resolve(false);\n}\n\n/**\n * Call `close()` on the current client, if there is one. See {@link Client.close}.\n *\n * @param timeout Maximum time in ms the client should wait to flush its event queue before shutting down. Omitting this\n * parameter will cause the client to wait until all events are sent before disabling itself.\n * @returns A promise which resolves to `true` if the queue successfully drains before the timeout, or `false` if it\n * doesn't (or if there's no client defined).\n */\nexport async function close(timeout?: number): Promise {\n  const client = getClient();\n  if (client) {\n    return client.close(timeout);\n  }\n  DEBUG_BUILD && logger.warn('Cannot flush events and disable SDK. No client defined.');\n  return Promise.resolve(false);\n}\n\n/**\n * Returns true if Sentry has been properly initialized.\n */\nexport function isInitialized(): boolean {\n  return !!getClient();\n}\n\n/** If the SDK is initialized & enabled. */\nexport function isEnabled(): boolean {\n  const client = getClient();\n  return !!client && client.getOptions().enabled !== false && !!client.getTransport();\n}\n\n/**\n * Add an event processor.\n * This will be added to the current isolation scope, ensuring any event that is processed in the current execution\n * context will have the processor applied.\n */\nexport function addEventProcessor(callback: EventProcessor): void {\n  getIsolationScope().addEventProcessor(callback);\n}\n\n/**\n * Start a session on the current isolation scope.\n *\n * @param context (optional) additional properties to be applied to the returned session object\n *\n * @returns the new active session\n */\nexport function startSession(context?: SessionContext): Session {\n  const client = getClient();\n  const isolationScope = getIsolationScope();\n  const currentScope = getCurrentScope();\n\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    user: currentScope.getUser() || isolationScope.getUser(),\n    ...(userAgent && { userAgent }),\n    ...context,\n  });\n\n  // End existing session if there's one\n  const currentSession = isolationScope.getSession();\n  if (currentSession && currentSession.status === 'ok') {\n    updateSession(currentSession, { status: 'exited' });\n  }\n\n  endSession();\n\n  // Afterwards we set the new session on the scope\n  isolationScope.setSession(session);\n\n  // TODO (v8): Remove this and only use the isolation scope(?).\n  // For v7 though, we can't \"soft-break\" people using getCurrentHub().getScope().setSession()\n  currentScope.setSession(session);\n\n  return session;\n}\n\n/**\n * End the session on the current isolation scope.\n */\nexport function endSession(): void {\n  const isolationScope = getIsolationScope();\n  const currentScope = getCurrentScope();\n\n  const session = currentScope.getSession() || isolationScope.getSession();\n  if (session) {\n    closeSession(session);\n  }\n  _sendSessionUpdate();\n\n  // the session is over; take it off of the scope\n  isolationScope.setSession();\n\n  // TODO (v8): Remove this and only use the isolation scope(?).\n  // For v7 though, we can't \"soft-break\" people using getCurrentHub().getScope().setSession()\n  currentScope.setSession();\n}\n\n/**\n * Sends the current Session on the scope\n */\nfunction _sendSessionUpdate(): void {\n  const isolationScope = getIsolationScope();\n  const currentScope = getCurrentScope();\n  const client = getClient();\n  // TODO (v8): Remove currentScope and only use the isolation scope(?).\n  // For v7 though, we can't \"soft-break\" people using getCurrentHub().getScope().setSession()\n  const session = currentScope.getSession() || isolationScope.getSession();\n  if (session && client) {\n    client.captureSession(session);\n  }\n}\n\n/**\n * Sends the current session on the scope to Sentry\n *\n * @param end If set the session will be marked as exited and removed from the scope.\n *            Defaults to `false`.\n */\nexport function captureSession(end: boolean = false): void {\n  // both send the update and pull the session from the scope\n  if (end) {\n    endSession();\n    return;\n  }\n\n  // only send the update\n  _sendSessionUpdate();\n}\n"],"names":[],"mappings":"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"}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy