@sentry/browser
Version:
Official Sentry SDK for browsers
64 lines • 3.01 kB
JavaScript
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