UNPKG

@sentry/core

Version:
1 lines 6.96 kB
{"version":3,"file":"base.js","sources":["../../../src/transports/base.ts"],"sourcesContent":["import type {\n Envelope,\n EnvelopeItem,\n EnvelopeItemType,\n Event,\n EventDropReason,\n EventItem,\n InternalBaseTransportOptions,\n Transport,\n TransportMakeRequestResponse,\n TransportRequestExecutor,\n} from '@sentry/types';\nimport type { PromiseBuffer, RateLimits } from '@sentry/utils';\nimport {\n createEnvelope,\n envelopeItemTypeToDataCategory,\n forEachEnvelopeItem,\n isRateLimited,\n logger,\n makePromiseBuffer,\n resolvedSyncPromise,\n SentryError,\n serializeEnvelope,\n updateRateLimits,\n} from '@sentry/utils';\n\nexport const DEFAULT_TRANSPORT_BUFFER_SIZE = 30;\n\n/**\n * Creates an instance of a Sentry `Transport`\n *\n * @param options\n * @param makeRequest\n */\nexport function createTransport(\n options: InternalBaseTransportOptions,\n makeRequest: TransportRequestExecutor,\n buffer: PromiseBuffer<void | TransportMakeRequestResponse> = makePromiseBuffer(\n options.bufferSize || DEFAULT_TRANSPORT_BUFFER_SIZE,\n ),\n): Transport {\n let rateLimits: RateLimits = {};\n const flush = (timeout?: number): PromiseLike<boolean> => buffer.drain(timeout);\n\n function send(envelope: Envelope): PromiseLike<void | TransportMakeRequestResponse> {\n const filteredEnvelopeItems: EnvelopeItem[] = [];\n\n // Drop rate limited items from envelope\n forEachEnvelopeItem(envelope, (item, type) => {\n const envelopeItemDataCategory = envelopeItemTypeToDataCategory(type);\n if (isRateLimited(rateLimits, envelopeItemDataCategory)) {\n const event: Event | undefined = getEventForEnvelopeItem(item, type);\n options.recordDroppedEvent('ratelimit_backoff', envelopeItemDataCategory, event);\n } else {\n filteredEnvelopeItems.push(item);\n }\n });\n\n // Skip sending if envelope is empty after filtering out rate limited events\n if (filteredEnvelopeItems.length === 0) {\n return resolvedSyncPromise();\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const filteredEnvelope: Envelope = createEnvelope(envelope[0], filteredEnvelopeItems as any);\n\n // Creates client report for each item in an envelope\n const recordEnvelopeLoss = (reason: EventDropReason): void => {\n forEachEnvelopeItem(filteredEnvelope, (item, type) => {\n const event: Event | undefined = getEventForEnvelopeItem(item, type);\n options.recordDroppedEvent(reason, envelopeItemTypeToDataCategory(type), event);\n });\n };\n\n const requestTask = (): PromiseLike<void | TransportMakeRequestResponse> =>\n makeRequest({ body: serializeEnvelope(filteredEnvelope, options.textEncoder) }).then(\n response => {\n // We don't want to throw on NOK responses, but we want to at least log them\n if (response.statusCode !== undefined && (response.statusCode < 200 || response.statusCode >= 300)) {\n __DEBUG_BUILD__ && logger.warn(`Sentry responded with status code ${response.statusCode} to sent event.`);\n }\n\n rateLimits = updateRateLimits(rateLimits, response);\n return response;\n },\n error => {\n recordEnvelopeLoss('network_error');\n throw error;\n },\n );\n\n return buffer.add(requestTask).then(\n result => result,\n error => {\n if (error instanceof SentryError) {\n __DEBUG_BUILD__ && logger.error('Skipped sending event because buffer is full.');\n recordEnvelopeLoss('queue_overflow');\n return resolvedSyncPromise();\n } else {\n throw error;\n }\n },\n );\n }\n\n // We use this to identifify if the transport is the base transport\n // TODO (v8): Remove this again as we'll no longer need it\n send.__sentry__baseTransport__ = true;\n\n return {\n send,\n flush,\n };\n}\n\nfunction getEventForEnvelopeItem(item: Envelope[1][number], type: EnvelopeItemType): Event | undefined {\n if (type !== 'event' && type !== 'transaction') {\n return undefined;\n }\n\n return Array.isArray(item) ? (item as EventItem)[1] : undefined;\n}\n"],"names":["makePromiseBuffer","forEachEnvelopeItem","envelopeItemTypeToDataCategory","isRateLimited","resolvedSyncPromise","createEnvelope","serializeEnvelope","logger","updateRateLimits","SentryError"],"mappings":"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"}