1 | "use strict";
|
2 | var __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 | };
|
11 | var __importDefault = (this && this.__importDefault) || function (mod) {
|
12 | return (mod && mod.__esModule) ? mod : { "default": mod };
|
13 | };
|
14 | var __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 | };
|
21 | Object.defineProperty(exports, "__esModule", { value: true });
|
22 | const debug_1 = __importDefault(require("debug"));
|
23 | const http_proxy_agent_1 = __importDefault(require("http-proxy-agent"));
|
24 | const node_fetch_1 = __importDefault(require("node-fetch"));
|
25 | const node_fetch_2 = require("node-fetch");
|
26 | const error_1 = __importDefault(require("./error"));
|
27 | const requestResponseLog_1 = __importDefault(require("./requestResponseLog"));
|
28 | const requestResponseLogEntry_1 = __importStar(require("./requestResponseLogEntry"));
|
29 | const debug = debug_1.default("HttpClient");
|
30 | class 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 |
|
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 |
|
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 | }
|
105 | exports.HttpClient = HttpClient;
|