UNPKG

5.9 kBJavaScriptView Raw
1"use strict";
2var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3 function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4 return new (P || (P = Promise))(function (resolve, reject) {
5 function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6 function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7 function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8 step((generator = generator.apply(thisArg, _arguments || [])).next());
9 });
10};
11var __importDefault = (this && this.__importDefault) || function (mod) {
12 return (mod && mod.__esModule) ? mod : { "default": mod };
13};
14var __importStar = (this && this.__importStar) || function (mod) {
15 if (mod && mod.__esModule) return mod;
16 var result = {};
17 if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
18 result["default"] = mod;
19 return result;
20};
21Object.defineProperty(exports, "__esModule", { value: true });
22const debug_1 = __importDefault(require("debug"));
23const http_proxy_agent_1 = __importDefault(require("http-proxy-agent"));
24const node_fetch_1 = __importDefault(require("node-fetch"));
25const node_fetch_2 = require("node-fetch");
26const error_1 = __importDefault(require("./error"));
27const requestResponseLog_1 = __importDefault(require("./requestResponseLog"));
28const requestResponseLogEntry_1 = __importStar(require("./requestResponseLogEntry"));
29const debug = debug_1.default("HttpClient");
30class HttpClient {
31 constructor(options) {
32 debug("constructor");
33 this.authorizationHeader = options.authorizationHeader;
34 this.proxy = options.proxy;
35 this.logRequestResponse = options.logRequestResponse || false;
36 this.origin = options.origin || "";
37 }
38 getHttpResponse(url, requestInit, expectedHttpStatusCode, context) {
39 return __awaiter(this, void 0, void 0, function* () {
40 if (!requestInit.headers) {
41 requestInit.headers = new node_fetch_2.Headers();
42 }
43 if (!requestInit.method) {
44 requestInit.method = "UNDEFINED";
45 }
46 if (!context.description) {
47 context.description = "";
48 }
49 if (this.authorizationHeader) {
50 requestInit.headers.append("Authorization", this.authorizationHeader);
51 }
52 requestInit.headers.append("User-Agent", "nextcloud-node-client");
53 // set the proxy
54 if (this.proxy) {
55 debug("proxy agent used");
56 const options = {
57 host: this.proxy.host,
58 port: this.proxy.port,
59 protocol: this.proxy.protocol,
60 };
61 const proxyAgent = http_proxy_agent_1.default(options);
62 requestInit.agent = proxyAgent;
63 if (this.proxy.proxyAuthorizationHeader) {
64 requestInit.headers.append("Proxy-Authorization", this.proxy.proxyAuthorizationHeader);
65 }
66 }
67 debug("getHttpResponse request header %O", requestInit.headers);
68 debug("getHttpResponse url:%s, %O", url, requestInit);
69 const response = yield node_fetch_1.default(url, requestInit);
70 if (this.logRequestResponse) {
71 const responseText = yield response.text();
72 // overwrite response functions as the body uses a stearm object...
73 response.text = () => __awaiter(this, void 0, void 0, function* () {
74 return responseText;
75 });
76 response.json = () => __awaiter(this, void 0, void 0, function* () {
77 return JSON.parse(responseText);
78 });
79 response.buffer = () => __awaiter(this, void 0, void 0, function* () {
80 return Buffer.from(responseText);
81 });
82 const reqLogEntry = new requestResponseLogEntry_1.RequestLogEntry(url.replace(this.origin, ""), requestInit.method, context.description, requestInit.body);
83 const resLogEntry = new requestResponseLogEntry_1.ResponseLogEntry(response.status, yield response.text(), response.headers.get("Content-Type"), response.headers.get("Content-Location") || "");
84 const rrLog = requestResponseLog_1.default.getInstance();
85 yield rrLog.addEntry(new requestResponseLogEntry_1.default(reqLogEntry, resLogEntry));
86 }
87 const responseContentType = response.headers.get("content-type");
88 if (expectedHttpStatusCode.indexOf(response.status) === -1) {
89 debug("getHttpResponse unexpected status response %s", response.status + " " + response.statusText);
90 debug("getHttpResponse description %s", context.description);
91 debug("getHttpResponse expected %s", expectedHttpStatusCode.join(","));
92 debug("getHttpResponse headers %s", JSON.stringify(response.headers, null, 4));
93 debug("getHttpResponse request body %s", requestInit.body);
94 debug("getHttpResponse text %s", yield response.text());
95 throw new error_1.default(`HTTP response status ${response.status} not expected. Expected status: ${expectedHttpStatusCode.join(",")} - status text: ${response.statusText}`, "ERR_UNEXPECTED_HTTP_STATUS", {
96 expectedHttpStatusCodes: expectedHttpStatusCode,
97 responseStatus: response.status,
98 responseStatusText: response.statusText,
99 });
100 }
101 return response;
102 });
103 }
104}
105exports.HttpClient = HttpClient;