UNPKG

@sentry/core

Version:
88 lines (73 loc) 2.93 kB
Object.defineProperty(exports, '__esModule', { value: true }); var utils = require('@sentry/utils'); var DEFAULT_TRANSPORT_BUFFER_SIZE = 30; /** * Creates an instance of a Sentry `Transport` * * @param options * @param makeRequest */ function createTransport( options, makeRequest, buffer = utils.makePromiseBuffer(options.bufferSize || DEFAULT_TRANSPORT_BUFFER_SIZE), ) { let rateLimits = {}; var flush = (timeout) => buffer.drain(timeout); function send(envelope) { var filteredEnvelopeItems = []; // Drop rate limited items from envelope utils.forEachEnvelopeItem(envelope, (item, type) => { var envelopeItemDataCategory = utils.envelopeItemTypeToDataCategory(type); if (utils.isRateLimited(rateLimits, envelopeItemDataCategory)) { options.recordDroppedEvent('ratelimit_backoff', envelopeItemDataCategory); } else { filteredEnvelopeItems.push(item); } }); // Skip sending if envelope is empty after filtering out rate limited events if (filteredEnvelopeItems.length === 0) { return utils.resolvedSyncPromise(); } var filteredEnvelope = utils.createEnvelope(envelope[0], filteredEnvelopeItems ); // Creates client report for each item in an envelope var recordEnvelopeLoss = (reason) => { utils.forEachEnvelopeItem(filteredEnvelope, (_, type) => { options.recordDroppedEvent(reason, utils.envelopeItemTypeToDataCategory(type)); }); }; var requestTask = () => makeRequest({ body: utils.serializeEnvelope(filteredEnvelope, options.textEncoder) }).then( response => { // We don't want to throw on NOK responses, but we want to at least log them if (response.statusCode !== undefined && (response.statusCode < 200 || response.statusCode >= 300)) { (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && utils.logger.warn(`Sentry responded with status code ${response.statusCode} to sent event.`); } rateLimits = utils.updateRateLimits(rateLimits, response); }, error => { (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && utils.logger.error('Failed while sending event:', error); recordEnvelopeLoss('network_error'); }, ); return buffer.add(requestTask).then( result => result, error => { if (error instanceof utils.SentryError) { (typeof __SENTRY_DEBUG__ === 'undefined' || __SENTRY_DEBUG__) && utils.logger.error('Skipped sending event due to full buffer'); recordEnvelopeLoss('queue_overflow'); return utils.resolvedSyncPromise(); } else { throw error; } }, ); } return { send, flush, }; } exports.DEFAULT_TRANSPORT_BUFFER_SIZE = DEFAULT_TRANSPORT_BUFFER_SIZE; exports.createTransport = createTransport; //# sourceMappingURL=base.js.map