feat: add gzip and deflate decompression support and request timeout option
This commit is contained in:
		
							
								
								
									
										15
									
								
								dist/index.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										15
									
								
								dist/index.js
									
									
									
									
										vendored
									
									
								
							@@ -2,13 +2,21 @@ import http from "http";
 | 
			
		||||
import https from "https";
 | 
			
		||||
import { URL } from "url";
 | 
			
		||||
import querystring from "querystring";
 | 
			
		||||
import zlib from "zlib";
 | 
			
		||||
const decompress = (data, header) => {
 | 
			
		||||
    if (header === "gzip")
 | 
			
		||||
        return zlib.gunzipSync(data);
 | 
			
		||||
    if (header === "deflate")
 | 
			
		||||
        return zlib.inflateSync(data);
 | 
			
		||||
    return data;
 | 
			
		||||
};
 | 
			
		||||
const readData = (res, mode) => new Promise((resolve, reject) => {
 | 
			
		||||
    const chunks = [];
 | 
			
		||||
    res
 | 
			
		||||
        .on("data", chunk => chunks.push(chunk))
 | 
			
		||||
        .on("end", () => {
 | 
			
		||||
        const data = Buffer.concat(chunks);
 | 
			
		||||
        try {
 | 
			
		||||
            const data = decompress(Buffer.concat(chunks), res.headers["content-encoding"]);
 | 
			
		||||
            if (mode === "json")
 | 
			
		||||
                resolve(JSON.parse(data.toString("utf8")));
 | 
			
		||||
            else if (mode === "buffer")
 | 
			
		||||
@@ -39,6 +47,7 @@ export default async (urlString, options = {}) => {
 | 
			
		||||
        headers: {
 | 
			
		||||
            ...options.headers,
 | 
			
		||||
            ...(body ? { "Content-Length": Buffer.byteLength(body) } : {}),
 | 
			
		||||
            "Accept-Encoding": "gzip, deflate"
 | 
			
		||||
        }
 | 
			
		||||
    };
 | 
			
		||||
    return new Promise((resolve, reject) => {
 | 
			
		||||
@@ -55,6 +64,10 @@ export default async (urlString, options = {}) => {
 | 
			
		||||
                arrayBuffer: () => readData(res, "arraybuffer")
 | 
			
		||||
            });
 | 
			
		||||
        });
 | 
			
		||||
        req.setTimeout(options.timeout || 5e3, () => {
 | 
			
		||||
            req.destroy();
 | 
			
		||||
            reject(new Error("Request timed out"));
 | 
			
		||||
        });
 | 
			
		||||
        req.on("error", reject);
 | 
			
		||||
        if (body)
 | 
			
		||||
            req.write(body);
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user