diff --git a/packages/cloudflare/src/transport.ts b/packages/cloudflare/src/transport.ts index 40b8549df9cd..108a0e915656 100644 --- a/packages/cloudflare/src/transport.ts +++ b/packages/cloudflare/src/transport.ts @@ -1,5 +1,5 @@ import type { BaseTransportOptions, Transport, TransportMakeRequestResponse, TransportRequest } from '@sentry/core'; -import { SentryError, createTransport, suppressTracing } from '@sentry/core'; +import { SENTRY_BUFFER_FULL_ERROR, createTransport, suppressTracing } from '@sentry/core'; export interface CloudflareTransportOptions extends BaseTransportOptions { /** Fetch API init parameters. */ @@ -38,7 +38,7 @@ export class IsolatedPromiseBuffer { */ public add(taskProducer: () => PromiseLike): PromiseLike { if (this._taskProducers.length >= this._bufferSize) { - return Promise.reject(new SentryError('Not adding Promise because buffer limit was reached.')); + return Promise.reject(SENTRY_BUFFER_FULL_ERROR); } this._taskProducers.push(taskProducer); diff --git a/packages/cloudflare/test/transport.test.ts b/packages/cloudflare/test/transport.test.ts index d3aca638eba1..d02ef18079be 100644 --- a/packages/cloudflare/test/transport.test.ts +++ b/packages/cloudflare/test/transport.test.ts @@ -1,4 +1,4 @@ -import { createEnvelope, serializeEnvelope } from '@sentry/core'; +import { SENTRY_BUFFER_FULL_ERROR, createEnvelope, serializeEnvelope } from '@sentry/core'; import type { EventEnvelope, EventItem } from '@sentry/core'; import { afterAll, describe, expect, it, vi } from 'vitest'; @@ -140,7 +140,12 @@ describe('IsolatedPromiseBuffer', () => { await ipb.add(task2); await ipb.add(task3); - await expect(ipb.add(task4)).rejects.toThrowError('Not adding Promise because buffer limit was reached.'); + try { + await ipb.add(task4); + throw new Error('Should not be called'); + } catch (error) { + expect(error).toBe(SENTRY_BUFFER_FULL_ERROR); + } }); it('should not throw when one of the tasks throws when drained', async () => { diff --git a/packages/core/src/transports/base.ts b/packages/core/src/transports/base.ts index 9296095428cf..2b7de82ba4e1 100644 --- a/packages/core/src/transports/base.ts +++ b/packages/core/src/transports/base.ts @@ -14,9 +14,8 @@ import { forEachEnvelopeItem, serializeEnvelope, } from '../utils-hoist/envelope'; -import { SentryError } from '../utils-hoist/error'; import { logger } from '../utils-hoist/logger'; -import { type PromiseBuffer, makePromiseBuffer } from '../utils-hoist/promisebuffer'; +import { type PromiseBuffer, makePromiseBuffer, SENTRY_BUFFER_FULL_ERROR } from '../utils-hoist/promisebuffer'; import { type RateLimits, isRateLimited, updateRateLimits } from '../utils-hoist/ratelimit'; import { resolvedSyncPromise } from '../utils-hoist/syncpromise'; @@ -85,7 +84,7 @@ export function createTransport( return buffer.add(requestTask).then( result => result, error => { - if (error instanceof SentryError) { + if (error === SENTRY_BUFFER_FULL_ERROR) { DEBUG_BUILD && logger.error('Skipped sending event because buffer is full.'); recordEnvelopeLoss('queue_overflow'); return resolvedSyncPromise({}); diff --git a/packages/core/src/utils-hoist/index.ts b/packages/core/src/utils-hoist/index.ts index 4f22928eff86..88801545f3d5 100644 --- a/packages/core/src/utils-hoist/index.ts +++ b/packages/core/src/utils-hoist/index.ts @@ -53,7 +53,7 @@ export { objectify, } from './object'; export { basename, dirname, isAbsolute, join, normalizePath, relative, resolve } from './path'; -export { makePromiseBuffer } from './promisebuffer'; +export { makePromiseBuffer, SENTRY_BUFFER_FULL_ERROR } from './promisebuffer'; export type { PromiseBuffer } from './promisebuffer'; export { severityLevelFromString } from './severity'; diff --git a/packages/core/src/utils-hoist/promisebuffer.ts b/packages/core/src/utils-hoist/promisebuffer.ts index 32b90e4d8519..d7eb82443fda 100644 --- a/packages/core/src/utils-hoist/promisebuffer.ts +++ b/packages/core/src/utils-hoist/promisebuffer.ts @@ -1,4 +1,3 @@ -import { SentryError } from './error'; import { SyncPromise, rejectedSyncPromise, resolvedSyncPromise } from './syncpromise'; export interface PromiseBuffer { @@ -9,6 +8,8 @@ export interface PromiseBuffer { drain(timeout?: number): PromiseLike; } +export const SENTRY_BUFFER_FULL_ERROR = Symbol.for('SentryBufferFullError'); + /** * Creates an new PromiseBuffer object with the specified limit * @param limit max number of promises that can be stored in the buffer @@ -42,7 +43,7 @@ export function makePromiseBuffer(limit?: number): PromiseBuffer { */ function add(taskProducer: () => PromiseLike): PromiseLike { if (!isReady()) { - return rejectedSyncPromise(new SentryError('Not adding Promise because buffer limit was reached.')); + return rejectedSyncPromise(SENTRY_BUFFER_FULL_ERROR); } // start the task and add its promise to the queue diff --git a/packages/vercel-edge/src/transports/index.ts b/packages/vercel-edge/src/transports/index.ts index e938477b3003..e1ce24c501c7 100644 --- a/packages/vercel-edge/src/transports/index.ts +++ b/packages/vercel-edge/src/transports/index.ts @@ -1,5 +1,5 @@ import type { BaseTransportOptions, Transport, TransportMakeRequestResponse, TransportRequest } from '@sentry/core'; -import { SentryError, createTransport, suppressTracing } from '@sentry/core'; +import { SENTRY_BUFFER_FULL_ERROR, createTransport, suppressTracing } from '@sentry/core'; export interface VercelEdgeTransportOptions extends BaseTransportOptions { /** Fetch API init parameters. */ @@ -38,7 +38,7 @@ export class IsolatedPromiseBuffer { */ public add(taskProducer: () => PromiseLike): PromiseLike { if (this._taskProducers.length >= this._bufferSize) { - return Promise.reject(new SentryError('Not adding Promise because buffer limit was reached.')); + return Promise.reject(SENTRY_BUFFER_FULL_ERROR); } this._taskProducers.push(taskProducer); diff --git a/packages/vercel-edge/test/transports/index.test.ts b/packages/vercel-edge/test/transports/index.test.ts index 4434a177d0f8..a7e6bd342fb5 100644 --- a/packages/vercel-edge/test/transports/index.test.ts +++ b/packages/vercel-edge/test/transports/index.test.ts @@ -1,6 +1,6 @@ import { afterAll, describe, expect, it, vi } from 'vitest'; -import { createEnvelope, serializeEnvelope } from '@sentry/core'; +import { SENTRY_BUFFER_FULL_ERROR, createEnvelope, serializeEnvelope } from '@sentry/core'; import type { EventEnvelope, EventItem } from '@sentry/core'; import type { VercelEdgeTransportOptions } from '../../src/transports'; @@ -139,7 +139,12 @@ describe('IsolatedPromiseBuffer', () => { await ipb.add(task2); await ipb.add(task3); - await expect(ipb.add(task4)).rejects.toThrowError('Not adding Promise because buffer limit was reached.'); + try { + await ipb.add(task4); + throw new Error('Should not be called'); + } catch (error) { + expect(error).toBe(SENTRY_BUFFER_FULL_ERROR); + } }); it('should not throw when one of the tasks throws when drained', async () => {