@microsoft/signalr
Version:
ASP.NET Core SignalR Client
104 lines • 4.73 kB
JavaScript
// 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 __());
};
})();
var __assign = (this && this.__assign) || Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
import { AbortError, HttpError, TimeoutError } from "./Errors";
import { HttpClient, HttpResponse } from "./HttpClient";
import { LogLevel } from "./ILogger";
import { isArrayBuffer } from "./Utils";
var requestModule;
if (typeof XMLHttpRequest === "undefined") {
// In order to ignore the dynamic require in webpack builds we need to do this magic
// @ts-ignore: TS doesn't know about these names
var requireFunc = typeof __webpack_require__ === "function" ? __non_webpack_require__ : require;
requestModule = requireFunc("request");
}
/** @private */
var NodeHttpClient = /** @class */ (function (_super) {
__extends(NodeHttpClient, _super);
function NodeHttpClient(logger) {
var _this = _super.call(this) || this;
if (typeof requestModule === "undefined") {
throw new Error("The 'request' module could not be loaded.");
}
_this.logger = logger;
_this.cookieJar = requestModule.jar();
_this.request = requestModule.defaults({ jar: _this.cookieJar });
return _this;
}
NodeHttpClient.prototype.send = function (httpRequest) {
var _this = this;
// Check that abort was not signaled before calling send
if (httpRequest.abortSignal) {
if (httpRequest.abortSignal.aborted) {
return Promise.reject(new AbortError());
}
}
return new Promise(function (resolve, reject) {
var requestBody;
if (isArrayBuffer(httpRequest.content)) {
requestBody = Buffer.from(httpRequest.content);
}
else {
requestBody = httpRequest.content || "";
}
var currentRequest = _this.request(httpRequest.url, {
body: requestBody,
// If binary is expected 'null' should be used, otherwise for text 'utf8'
encoding: httpRequest.responseType === "arraybuffer" ? null : "utf8",
headers: __assign({
// Tell auth middleware to 401 instead of redirecting
"X-Requested-With": "XMLHttpRequest" }, httpRequest.headers),
method: httpRequest.method,
timeout: httpRequest.timeout,
}, function (error, response, body) {
if (httpRequest.abortSignal) {
httpRequest.abortSignal.onabort = null;
}
if (error) {
if (error.code === "ETIMEDOUT") {
_this.logger.log(LogLevel.Warning, "Timeout from HTTP request.");
reject(new TimeoutError());
}
_this.logger.log(LogLevel.Warning, "Error from HTTP request. " + error);
reject(error);
return;
}
if (response.statusCode >= 200 && response.statusCode < 300) {
resolve(new HttpResponse(response.statusCode, response.statusMessage || "", body));
}
else {
reject(new HttpError(response.statusMessage || "", response.statusCode || 0));
}
});
if (httpRequest.abortSignal) {
httpRequest.abortSignal.onabort = function () {
currentRequest.abort();
reject(new AbortError());
};
}
});
};
NodeHttpClient.prototype.getCookieString = function (url) {
return this.cookieJar.getCookieString(url);
};
return NodeHttpClient;
}(HttpClient));
export { NodeHttpClient };
//# sourceMappingURL=NodeHttpClient.js.map