UNPKG

@decaf-ts/utils

Version:

module management utils for decaf-ts

70 lines 2.62 kB
/* istanbul ignore file */ import https from "https"; import { Logging } from "@decaf-ts/logging"; /** * @description A simple HTTP client for downloading files. * @summary This class provides functionality to download files from HTTPS URLs. * It uses Node.js built-in https module to make requests. * * @class HttpClient */ export class HttpClient { static { this.log = Logging.for(HttpClient); } /** * @description Downloads a file from a given URL. * @summary This method sends a GET request to the specified URL and returns the response body as a string. * It handles different scenarios such as non-200 status codes and network errors. * * @param url - The URL of the file to download. * @return A promise that resolves with the file content as a string. * * @mermaid * sequenceDiagram * participant Client * participant HttpClient * participant HTTPS * participant Server * Client->>HttpClient: downloadFile(url) * HttpClient->>HTTPS: get(url) * HTTPS->>Server: GET request * Server-->>HTTPS: Response * HTTPS-->>HttpClient: Response object * alt Status code is 200 * loop For each data chunk * HTTPS->>HttpClient: 'data' event * HttpClient->>HttpClient: Accumulate data * end * HTTPS->>HttpClient: 'end' event * HttpClient-->>Client: Resolve with data * else Status code is not 200 * HttpClient-->>Client: Reject with error * end */ static async downloadFile(url) { return new Promise((resolve, reject) => { function request(url) { url = encodeURI(url); https.get(url, (res) => { if (res.statusCode === 301 || res.statusCode === 307) return request(res.headers.location); if (res.statusCode !== 200) { HttpClient.log.error(`Failed to fetch ${url} (status: ${res.statusCode})`); return reject(new Error(`Failed to fetch ${url}`)); } let data = ""; res.on("data", (chunk) => { data += chunk; }); res.on("error", (error) => { reject(error); }); res.on("end", () => { resolve(data); }); }); } request(url); }); } } //# sourceMappingURL=http.js.map