import { createTransport, SENTRY_BUFFER_FULL_ERROR, suppressTracing } from '@sentry/core'; const DEFAULT_TRANSPORT_BUFFER_SIZE = 30; class IsolatedPromiseBuffer { constructor(_bufferSize = DEFAULT_TRANSPORT_BUFFER_SIZE) { this.$ = []; this._taskProducers = []; this._bufferSize = _bufferSize; } /** * @inheritdoc */ add(taskProducer) { if (this._taskProducers.length >= this._bufferSize) { return Promise.reject(SENTRY_BUFFER_FULL_ERROR); } this._taskProducers.push(taskProducer); return Promise.resolve({}); } /** * @inheritdoc */ drain(timeout) { const oldTaskProducers = [...this._taskProducers]; this._taskProducers = []; const drainController = new AbortController(); this.drainSignal = drainController.signal; let tasks; try { tasks = oldTaskProducers.map((taskProducer) => taskProducer()); } finally { this.drainSignal = void 0; } return new Promise((resolve) => { const timer = setTimeout(() => { if (timeout && timeout > 0) { drainController.abort(); resolve(false); } }, timeout); Promise.all( tasks.map( (task) => task.then(null, () => { }) ) ).then(() => { clearTimeout(timer); resolve(true); }); }); } } function makeCloudflareTransport(options) { const buffer = new IsolatedPromiseBuffer(options.bufferSize); function makeRequest(request) { const drainSignal = buffer.drainSignal; const callerSignal = options.fetchOptions?.signal ?? void 0; const signal = drainSignal && callerSignal ? AbortSignal.any([drainSignal, callerSignal]) : drainSignal ?? callerSignal; const requestOptions = { body: request.body, method: "POST", headers: options.headers, ...options.fetchOptions, ...signal ? { signal } : {} }; return suppressTracing(() => { return (options.fetch ?? fetch)(options.url, requestOptions).then(async (response) => { try { await response.text(); } catch { } return { statusCode: response.status, headers: { "x-sentry-rate-limits": response.headers.get("X-Sentry-Rate-Limits"), "retry-after": response.headers.get("Retry-After") } }; }); }); } return createTransport(options, makeRequest, buffer); } export { IsolatedPromiseBuffer, makeCloudflareTransport }; //# sourceMappingURL=transport.js.map