89 lines
3.9 KiB
JavaScript
89 lines
3.9 KiB
JavaScript
"use strict";
|
|
// Copyright (c) .NET Foundation. All rights reserved.
|
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
|
var __extends = (this && this.__extends) || (function () {
|
|
var extendStatics = Object.setPrototypeOf ||
|
|
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
|
|
return function (d, b) {
|
|
extendStatics(d, b);
|
|
function __() { this.constructor = d; }
|
|
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
};
|
|
})();
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
var Errors_1 = require("./Errors");
|
|
var HttpClient_1 = require("./HttpClient");
|
|
var ILogger_1 = require("./ILogger");
|
|
var XhrHttpClient = /** @class */ (function (_super) {
|
|
__extends(XhrHttpClient, _super);
|
|
function XhrHttpClient(logger) {
|
|
var _this = _super.call(this) || this;
|
|
_this.logger = logger;
|
|
return _this;
|
|
}
|
|
/** @inheritDoc */
|
|
XhrHttpClient.prototype.send = function (request) {
|
|
var _this = this;
|
|
// Check that abort was not signaled before calling send
|
|
if (request.abortSignal && request.abortSignal.aborted) {
|
|
return Promise.reject(new Errors_1.AbortError());
|
|
}
|
|
if (!request.method) {
|
|
return Promise.reject(new Error("No method defined."));
|
|
}
|
|
if (!request.url) {
|
|
return Promise.reject(new Error("No url defined."));
|
|
}
|
|
return new Promise(function (resolve, reject) {
|
|
var xhr = new XMLHttpRequest();
|
|
xhr.open(request.method, request.url, true);
|
|
xhr.withCredentials = request.withCredentials === undefined ? true : request.withCredentials;
|
|
xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
|
|
// Explicitly setting the Content-Type header for React Native on Android platform.
|
|
xhr.setRequestHeader("Content-Type", "text/plain;charset=UTF-8");
|
|
var headers = request.headers;
|
|
if (headers) {
|
|
Object.keys(headers)
|
|
.forEach(function (header) {
|
|
xhr.setRequestHeader(header, headers[header]);
|
|
});
|
|
}
|
|
if (request.responseType) {
|
|
xhr.responseType = request.responseType;
|
|
}
|
|
if (request.abortSignal) {
|
|
request.abortSignal.onabort = function () {
|
|
xhr.abort();
|
|
reject(new Errors_1.AbortError());
|
|
};
|
|
}
|
|
if (request.timeout) {
|
|
xhr.timeout = request.timeout;
|
|
}
|
|
xhr.onload = function () {
|
|
if (request.abortSignal) {
|
|
request.abortSignal.onabort = null;
|
|
}
|
|
if (xhr.status >= 200 && xhr.status < 300) {
|
|
resolve(new HttpClient_1.HttpResponse(xhr.status, xhr.statusText, xhr.response || xhr.responseText));
|
|
}
|
|
else {
|
|
reject(new Errors_1.HttpError(xhr.statusText, xhr.status));
|
|
}
|
|
};
|
|
xhr.onerror = function () {
|
|
_this.logger.log(ILogger_1.LogLevel.Warning, "Error from HTTP request. " + xhr.status + ": " + xhr.statusText + ".");
|
|
reject(new Errors_1.HttpError(xhr.statusText, xhr.status));
|
|
};
|
|
xhr.ontimeout = function () {
|
|
_this.logger.log(ILogger_1.LogLevel.Warning, "Timeout from HTTP request.");
|
|
reject(new Errors_1.TimeoutError());
|
|
};
|
|
xhr.send(request.content || "");
|
|
});
|
|
};
|
|
return XhrHttpClient;
|
|
}(HttpClient_1.HttpClient));
|
|
exports.XhrHttpClient = XhrHttpClient;
|
|
//# sourceMappingURL=XhrHttpClient.js.map
|