UNPKG

@sentry/browser

Version:
64 lines 3.01 kB
Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = require("tslib"); var utils_1 = require("@sentry/utils"); var base_1 = require("./base"); /** `XHR` based transport */ var XHRTransport = /** @class */ (function (_super) { tslib_1.__extends(XHRTransport, _super); function XHRTransport() { return _super !== null && _super.apply(this, arguments) || this; } /** * @param sentryRequest Prepared SentryRequest to be delivered * @param originalPayload Original payload used to create SentryRequest */ XHRTransport.prototype._sendRequest = function (sentryRequest, originalPayload) { var _this = this; // eslint-disable-next-line deprecation/deprecation if (this._isRateLimited(sentryRequest.type)) { this.recordLostEvent('ratelimit_backoff', sentryRequest.type); return Promise.reject({ event: originalPayload, type: sentryRequest.type, // eslint-disable-next-line deprecation/deprecation reason: "Transport for " + sentryRequest.type + " requests locked till " + this._disabledUntil(sentryRequest.type) + " due to too many requests.", status: 429, }); } return this._buffer .add(function () { return new utils_1.SyncPromise(function (resolve, reject) { var request = new XMLHttpRequest(); request.onreadystatechange = function () { if (request.readyState === 4) { var headers = { 'x-sentry-rate-limits': request.getResponseHeader('X-Sentry-Rate-Limits'), 'retry-after': request.getResponseHeader('Retry-After'), }; _this._handleResponse({ requestType: sentryRequest.type, response: request, headers: headers, resolve: resolve, reject: reject }); } }; request.open('POST', sentryRequest.url); for (var header in _this.options.headers) { if (Object.prototype.hasOwnProperty.call(_this.options.headers, header)) { request.setRequestHeader(header, _this.options.headers[header]); } } request.send(sentryRequest.body); }); }) .then(undefined, function (reason) { // It's either buffer rejection or any other xhr/fetch error, which are treated as NetworkError. if (reason instanceof utils_1.SentryError) { _this.recordLostEvent('queue_overflow', sentryRequest.type); } else { _this.recordLostEvent('network_error', sentryRequest.type); } throw reason; }); }; return XHRTransport; }(base_1.BaseTransport)); exports.XHRTransport = XHRTransport; //# sourceMappingURL=xhr.js.map