warframe-worldstate-parser
Version:
An Open parser for Warframe's Worldstate in Javascript
46 lines (45 loc) • 1.45 kB
JavaScript
//#region lib/supporting/FetchProxy.ts
const proxyUrl = process.env.PROXY_URL ?? void 0;
const isCI = process.env.CI === "true";
const ciTimeout = process.env.CI_TIMEOUT ? parseInt(process.env.CI_TIMEOUT, 10) : 6e4;
const localTimeout = process.env.LOCAL_TIMEOUT ? parseInt(process.env.LOCAL_TIMEOUT, 10) : 12e6;
const fetchProxy = async (url, { session = "parser-session", contentType = "application/json" } = {
session: "parser-session",
contentType: "application/json"
}) => {
if (proxyUrl) {
const text = await (await fetch(`${proxyUrl}/v1`, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
cmd: "request.get",
url,
session,
maxTimeout: isCI ? ciTimeout : localTimeout,
returnOnlyCookies: false,
returnPageContent: true
})
})).text();
const { solution } = JSON.parse(text);
if (!solution?.response) throw solution;
if (contentType === "application/json") return {
ok: solution.responseCode === 200,
status: solution.responseCode,
json: async () => {
try {
return JSON.parse(solution.response);
} catch (_error) {
return {};
}
}
};
if (contentType === "text/html") return {
ok: solution.responseCode === 200,
status: solution.responseCode,
text: async () => solution.response.replace(/<\/?[^>]+(>|$)/g, "")
};
return solution.response;
} else return fetch(url);
};
//#endregion
export { fetchProxy };