From eca3819bcdf8f2a715c1f5e212ab4d81e3bbfd45 Mon Sep 17 00:00:00 2001 From: Florian Dold Date: Thu, 16 Feb 2023 13:54:19 +0100 Subject: taler-util: node http fixes --- packages/taler-util/src/http-impl.node.ts | 33 ++++++++++++++++++++++++++----- 1 file changed, 28 insertions(+), 5 deletions(-) (limited to 'packages/taler-util/src') diff --git a/packages/taler-util/src/http-impl.node.ts b/packages/taler-util/src/http-impl.node.ts index da7a759aa..8f215e596 100644 --- a/packages/taler-util/src/http-impl.node.ts +++ b/packages/taler-util/src/http-impl.node.ts @@ -20,6 +20,7 @@ * Imports. */ import * as http from "node:http"; +import * as https from "node:https"; import { RequestOptions } from "node:http"; import { TalerError } from "./errors.js"; import { encodeBody, HttpLibArgs } from "./http-common.js"; @@ -62,7 +63,6 @@ export class HttpLibImpl implements HttpRequestLibrary { async fetch(url: string, opt?: HttpRequestOptions): Promise { const method = opt?.method?.toUpperCase() ?? "GET"; - let body = opt?.body; logger.trace(`Requesting ${method} ${url}`); @@ -94,19 +94,33 @@ export class HttpLibImpl implements HttpRequestLibrary { reqBody = encodeBody(opt.body); } + let path = parsedUrl.pathname; + if (parsedUrl.search != null) { + path += parsedUrl.search; + } + + let protocol: string; + if (parsedUrl.protocol === "https:") { + protocol = "https:"; + } else if (parsedUrl.protocol === "http:") { + protocol = "http:"; + } else { + throw Error(`unsupported protocol (${parsedUrl.protocol})`); + } + const options: RequestOptions = { - protocol: parsedUrl.protocol, + protocol, port: parsedUrl.port, host: parsedUrl.hostname, method: method, - path: parsedUrl.pathname, + path, headers: opt?.headers, }; const chunks: Uint8Array[] = []; return new Promise((resolve, reject) => { - const req = http.request(options, (res) => { + const handler = (res: http.IncomingMessage) => { res.on("data", (d) => { chunks.push(d); }); @@ -145,7 +159,16 @@ export class HttpLibImpl implements HttpRequestLibrary { res.on("error", (e) => { reject(e); }); - }); + }; + + let req: http.ClientRequest; + if (options.protocol === "http:") { + req = http.request(options, handler); + } else if (options.protocol === "https:") { + req = https.request(options, handler); + } else { + throw new Error(`unsupported protocol ${options.protocol}`); + } if (reqBody) { req.write(new Uint8Array(reqBody)); -- cgit v1.2.3