123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- Object.defineProperty(exports, '__esModule', { value: true });
- const core = require('@sentry/core');
- const utils$1 = require('@sentry/utils');
- const utils = require('./utils.js');
- /**
- * Creates a Transport that uses the Fetch API to send events to Sentry.
- */
- function makeFetchTransport(
- options,
- nativeFetch = utils.getNativeFetchImplementation(),
- ) {
- let pendingBodySize = 0;
- let pendingCount = 0;
- function makeRequest(request) {
- const requestSize = request.body.length;
- pendingBodySize += requestSize;
- pendingCount++;
- const requestOptions = {
- body: request.body,
- method: 'POST',
- referrerPolicy: 'origin',
- headers: options.headers,
- // Outgoing requests are usually cancelled when navigating to a different page, causing a "TypeError: Failed to
- // fetch" error and sending a "network_error" client-outcome - in Chrome, the request status shows "(cancelled)".
- // The `keepalive` flag keeps outgoing requests alive, even when switching pages. We want this since we're
- // frequently sending events right before the user is switching pages (eg. whenfinishing navigation transactions).
- // Gotchas:
- // - `keepalive` isn't supported by Firefox
- // - As per spec (https://fetch.spec.whatwg.org/#http-network-or-cache-fetch):
- // If the sum of contentLength and inflightKeepaliveBytes is greater than 64 kibibytes, then return a network error.
- // We will therefore only activate the flag when we're below that limit.
- // There is also a limit of requests that can be open at the same time, so we also limit this to 15
- // See https://github.com/getsentry/sentry-javascript/pull/7553 for details
- keepalive: pendingBodySize <= 60000 && pendingCount < 15,
- ...options.fetchOptions,
- };
- try {
- return nativeFetch(options.url, requestOptions).then(response => {
- pendingBodySize -= requestSize;
- pendingCount--;
- return {
- statusCode: response.status,
- headers: {
- 'x-sentry-rate-limits': response.headers.get('X-Sentry-Rate-Limits'),
- 'retry-after': response.headers.get('Retry-After'),
- },
- };
- });
- } catch (e) {
- utils.clearCachedFetchImplementation();
- pendingBodySize -= requestSize;
- pendingCount--;
- return utils$1.rejectedSyncPromise(e);
- }
- }
- return core.createTransport(options, makeRequest);
- }
- exports.makeFetchTransport = makeFetchTransport;
- //# sourceMappingURL=fetch.js.map
|