You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

74 lines
2.3 KiB

import { parseString } from "xml2js";
import https from "https";
/**
* Perform an RSS/XML request
*/
export function rssRequest<T = any>(url: string, headers: {[key: string]: string} = {}) {
return new Promise<[number|undefined, T]>((resolve, reject) => {
https.get(url, { headers: { "User-Agent": "Autoplex", "Accept": "application/rss+xml" } }, (response) => {
if (response.statusCode !== 200) {
reject("Status error: " + response.statusCode);
return;
}
response.setEncoding("utf-8");
let body = "";
response.on("data", (chunk) => body += chunk);
response.on("end", () => parseString(body, (err, result) => {
if (err) {
reject(err);
return;
}
resolve([response.statusCode, result]);
}));
});
});
}
/**
* Perform a generic GET request
*/
export function jsonRequest<T = any>(url: string, headers: {[key: string]: string} = {}) {
return new Promise<[number|undefined, T]>((resolve, reject) => {
https.get(url, { headers: { "User-Agent": "Autoplex", "Accept": "*/*", ...headers} }, (response) => {
response.setEncoding("utf-8");
let body = "";
response.on("data", (chunk) => body += chunk);
response.on("end", () => resolve([response.statusCode, JSON.parse(body)]));
});
});
}
/**
* Perform a generic GET request
*/
export function request(url: string, timeout: number = 10000, headers: {[key: string]: string} = {}) {
return new Promise<[number|undefined, string]>((resolve, reject) => {
https.get(url, { headers: { "User-Agent": "Autoplex", "Accept": "*/*", ...headers }, timeout }, (response) => {
if (response.statusCode !== 200) {
reject("Status error: " + response.statusCode);
return;
}
response.setEncoding("utf-8");
let body = "";
response.on("data", (chunk) => body += chunk);
response.on("end", () => resolve([response.statusCode, body]));
}).on("timeout", () => reject("timeout"));
});
}
export function convertToBytes(size: number, unit: string, throwUnknownUnit: boolean = true) {
switch(unit.toUpperCase()) {
case "GB":
return Math.ceil(size*1024*1024*1024);
case "MB":
return Math.ceil(size*1024*1024);
case "KB":
return Math.ceil(size*1024*1024);
default:
if (throwUnknownUnit) {
throw new Error("Unknown unit provided");
}
return Math.ceil(size);
}
}