{"version":3,"file":"server-runtime-client.js","sources":["../../src/server-runtime-client.ts"],"sourcesContent":["import { createCheckInEnvelope } from './checkin';\nimport { Client } from './client';\nimport { getIsolationScope } from './currentScopes';\nimport { DEBUG_BUILD } from './debug-build';\nimport type { Scope } from './scope';\nimport { DEFAULT_TRANSPORT_BUFFER_SIZE } from './transports/base';\nimport { addUserAgentToTransportHeaders } from './transports/userAgent';\nimport type { CheckIn, MonitorConfig, SerializedCheckIn } from './types/checkin';\nimport type { Event, EventHint } from './types/event';\nimport type { ClientOptions } from './types/options';\nimport type { ParameterizedString } from './types/parameterize';\nimport type { SeverityLevel } from './types/severity';\nimport type { BaseTransportOptions, Transport } from './types/transport';\nimport { debug } from './utils/debug-logger';\nimport { eventFromMessage, eventFromUnknownInput } from './utils/eventbuilder';\nimport { uuid4 } from './utils/misc';\nimport { makePromiseBuffer } from './utils/promisebuffer';\nimport { resolvedSyncPromise } from './utils/syncpromise';\nimport { _getTraceInfoFromScope } from './utils/trace-info';\n\nexport interface ServerRuntimeClientOptions extends ClientOptions {\n platform?: string;\n runtime?: { name: string; version?: string };\n serverName?: string;\n}\n\n/**\n * The Sentry Server Runtime Client SDK.\n */\nexport class ServerRuntimeClient<\n O extends ClientOptions & ServerRuntimeClientOptions = ServerRuntimeClientOptions,\n> extends Client {\n private _disposeCallbacks: (() => void)[] = [];\n\n /**\n * Creates a new Edge SDK instance.\n * @param options Configuration options for this SDK.\n */\n public constructor(options: O) {\n addUserAgentToTransportHeaders(options);\n\n super(options);\n\n this._setUpMetricsProcessing();\n }\n\n /**\n * @inheritDoc\n */\n public eventFromException(exception: unknown, hint?: EventHint): PromiseLike {\n const event = eventFromUnknownInput(this, this._options.stackParser, exception, hint);\n event.level = 'error';\n\n return resolvedSyncPromise(event);\n }\n\n /**\n * @inheritDoc\n */\n public eventFromMessage(\n message: ParameterizedString,\n level: SeverityLevel = 'info',\n hint?: EventHint,\n ): PromiseLike {\n return resolvedSyncPromise(\n eventFromMessage(this._options.stackParser, message, level, hint, this._options.attachStacktrace),\n );\n }\n\n /**\n * @inheritDoc\n */\n public captureException(exception: unknown, hint?: EventHint, scope?: Scope): string {\n setCurrentRequestSessionErroredOrCrashed(hint);\n return super.captureException(exception, hint, scope);\n }\n\n /**\n * @inheritDoc\n */\n public captureEvent(event: Event, hint?: EventHint, scope?: Scope): string {\n // If the event is of type Exception, then a request session should be captured\n const isException = !event.type && event.exception?.values && event.exception.values.length > 0;\n if (isException) {\n setCurrentRequestSessionErroredOrCrashed(hint);\n }\n\n return super.captureEvent(event, hint, scope);\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 */\n public captureCheckIn(checkIn: CheckIn, monitorConfig?: MonitorConfig, scope?: Scope): string {\n const id = 'checkInId' in checkIn && checkIn.checkInId ? checkIn.checkInId : uuid4();\n if (!this._isEnabled()) {\n DEBUG_BUILD && debug.warn('SDK not enabled, will not capture check-in.');\n return id;\n }\n\n const options = this.getOptions();\n const { release, environment, tunnel } = options;\n\n const serializedCheckIn: SerializedCheckIn = {\n check_in_id: id,\n monitor_slug: checkIn.monitorSlug,\n status: checkIn.status,\n release,\n environment,\n };\n\n if ('duration' in checkIn) {\n serializedCheckIn.duration = checkIn.duration;\n }\n\n if (monitorConfig) {\n serializedCheckIn.monitor_config = {\n schedule: monitorConfig.schedule,\n checkin_margin: monitorConfig.checkinMargin,\n max_runtime: monitorConfig.maxRuntime,\n timezone: monitorConfig.timezone,\n failure_issue_threshold: monitorConfig.failureIssueThreshold,\n recovery_threshold: monitorConfig.recoveryThreshold,\n };\n }\n\n const [dynamicSamplingContext, traceContext] = _getTraceInfoFromScope(this, scope);\n if (traceContext) {\n serializedCheckIn.contexts = {\n trace: traceContext,\n };\n }\n\n const envelope = createCheckInEnvelope(\n serializedCheckIn,\n dynamicSamplingContext,\n this.getSdkMetadata(),\n tunnel,\n this.getDsn(),\n );\n\n DEBUG_BUILD && debug.log('Sending checkin:', checkIn.monitorSlug, checkIn.status);\n\n // sendEnvelope should not throw\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this.sendEnvelope(envelope);\n\n return id;\n }\n\n /**\n * @inheritDoc\n */\n public override registerCleanup(callback: () => void): void {\n this._disposeCallbacks.push(callback);\n }\n\n /**\n * Disposes of the client and releases all resources.\n *\n * This method clears all internal state to allow the client to be garbage collected.\n * It clears hooks, event processors, integrations, transport, and other internal references.\n *\n * Call this method after flushing to allow the client to be garbage collected.\n * After calling dispose(), the client should not be used anymore.\n *\n * Subclasses should override this method to clean up their own resources and call `super.dispose()`.\n */\n public override dispose(): void {\n DEBUG_BUILD && debug.log('Disposing client...');\n\n // Run all registered cleanup callbacks\n for (const callback of this._disposeCallbacks) {\n try {\n callback();\n } catch {\n // Ignore errors in cleanup callbacks\n }\n }\n this._disposeCallbacks.length = 0;\n\n for (const hookName of Object.keys(this._hooks)) {\n this._hooks[hookName]?.clear();\n }\n\n this._hooks = {};\n this._eventProcessors.length = 0;\n this._integrations = {};\n this._outcomes = {};\n (this as unknown as { _transport?: Transport })._transport = undefined;\n this._promiseBuffer = makePromiseBuffer(DEFAULT_TRANSPORT_BUFFER_SIZE);\n }\n\n /**\n * @inheritDoc\n */\n protected _prepareEvent(\n event: Event,\n hint: EventHint,\n currentScope: Scope,\n isolationScope: Scope,\n ): PromiseLike {\n if (this._options.platform) {\n event.platform = event.platform || this._options.platform;\n }\n\n if (this._options.runtime) {\n event.contexts = {\n ...event.contexts,\n runtime: event.contexts?.runtime || this._options.runtime,\n };\n }\n\n if (this._options.serverName) {\n event.server_name = event.server_name || this._options.serverName;\n }\n\n return super._prepareEvent(event, hint, currentScope, isolationScope);\n }\n\n /**\n * Process a server-side metric before it is captured.\n */\n private _setUpMetricsProcessing(): void {\n this.on('processMetric', metric => {\n if (this._options.serverName) {\n metric.attributes = {\n 'server.address': this._options.serverName,\n ...metric.attributes,\n };\n }\n });\n }\n}\n\nfunction setCurrentRequestSessionErroredOrCrashed(eventHint?: EventHint): void {\n const requestSession = getIsolationScope().getScopeData().sdkProcessingMetadata.requestSession;\n if (requestSession) {\n // We mutate instead of doing `setSdkProcessingMetadata` because the http integration stores away a particular\n // isolationScope. If that isolation scope is forked, setting the processing metadata here will not mutate the\n // original isolation scope that the http integration stored away.\n const isHandledException = eventHint?.mechanism?.handled ?? true;\n // A request session can go from \"errored\" -> \"crashed\" but not \"crashed\" -> \"errored\".\n // Crashed (unhandled exception) is worse than errored (handled exception).\n if (isHandledException && requestSession.status !== 'crashed') {\n requestSession.status = 'errored';\n } else if (!isHandledException) {\n requestSession.status = 'crashed';\n }\n }\n}\n"],"names":[],"mappings":"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"}