diff --git a/src/sendgb.js b/src/sendgb.js
index b934996..4a14a99 100644
--- a/src/sendgb.js
+++ b/src/sendgb.js
@@ -1,12 +1,58 @@
import fs from "fs";
const C = {
- info: msg => console.log("\x1b[36m[i]\x1b[0m " + msg),
- ok: msg => console.log("\x1b[32m[✓]\x1b[0m " + msg),
- warn: msg => console.log("\x1b[33m[!]\x1b[0m " + msg),
- err: msg => console.log("\x1b[31m[✗]\x1b[0m " + msg),
+ info: (msg) => console.log("\x1b[36m[i]\x1b[0m " + msg),
+ ok: (msg) => console.log("\x1b[32m[✓]\x1b[0m " + msg),
+ warn: (msg) => console.log("\x1b[33m[!]\x1b[0m " + msg),
+ err: (msg) => console.log("\x1b[31m[✗]\x1b[0m " + msg),
};
+async function download(res, rfilename) {
+ if (!res.ok || !res.body) {
+ C.err(`Download failed (${res.status})`);
+ process.exit(1);
+ }
+
+ C.info("Content-type: " + res.headers.get("content-type"));
+ const filename =
+ rfilename ??
+ res.headers
+ .get("content-disposition")
+ ?.match(/filename="?([^"]+)"?/)?.[1] ??
+ `${url.replace(base, "")}-sendgb.zip`;
+
+ C.info(`Downloading ${filename}`);
+
+ const file = fs.createWriteStream(filename);
+ const reader = res.body.getReader();
+
+ let downloaded = 0;
+ const total = Number(res.headers.get("content-length")) || 0;
+ const start = Date.now();
+
+ while (true) {
+ const { done, value } = await reader.read();
+ if (done) break;
+
+ file.write(value);
+ downloaded += value.length;
+
+ if (total) {
+ const pct = ((downloaded / total) * 100).toFixed(1);
+ const mb = (downloaded / 1024 / 1024).toFixed(2);
+ const tmb = (total / 1024 / 1024).toFixed(2);
+ process.stdout.write(`\r${pct}% ${mb}/${tmb} MB`);
+ } else {
+ const mb = (downloaded / 1024 / 1024).toFixed(2);
+ process.stdout.write(`\r${mb} MB`);
+ }
+ }
+
+ file.end();
+
+ process.stdout.write("\n");
+ C.ok(`Saved as ${filename} in ${((Date.now() - start) / 1000).toFixed(1)}s`);
+}
const base = "https://sendgb.com/";
const url = process.argv[2];
@@ -22,7 +68,7 @@ const html = await page.text();
const sendgb_session = page.headers
.getSetCookie()
- .find(c => c.startsWith("sendgb_ses="))
+ .find((c) => c.startsWith("sendgb_ses="))
?.split(";")[0]
.split("=")
.at(-1);
@@ -43,61 +89,58 @@ if (!link || !secret || !total_files) {
process.exit(1);
}
-C.info(`Files: ${total_files}`);
-C.info("Requesting ZIP…");
+if (link == "#") {
+ const filename = get(
+ /
([^<]*)<\/div>/gm,
+ );
+ C.info(`File: ${filename}`);
+ C.info("Requesting file…");
+ const res_cf_link = await fetch(
+ "https://www.sendgb.com/src/download_one.php?uploadId=" +
+ url.replace(base, "") +
+ "&sc=" +
+ secret +
+ "&file=" +
+ encodeURIComponent(filename) +
+ "&private_id=",
+ {
+ headers: {
+ "User-Agent": "Mozilla/5.0",
+ },
+ },
+ );
-const res = await fetch(link, {
- method: "POST",
- body: new URLSearchParams({
- action: "download",
- secret_code: secret,
- private_id: "",
- download_id: url.replace(base, ""),
- total_files
- }),
- headers: {
- "User-Agent": "Mozilla/5.0"
- }
-});
+ let cf_link = { success: false };
-if (!res.ok || !res.body) {
- C.err(`Download failed (${res.status})`);
- process.exit(1);
-}
+ try {
+ cf_link = await res_cf_link.json();
+ } catch {}
-C.info("Content-type: " + res.headers.get("content-type"))
-const filename =
- res.headers.get("content-disposition")?.match(/filename="?([^"]+)"?/)?.[1]
- ?? `${url.replace(base, '')}-sendgb.zip`;
+ if (cf_link.success) {
+ C.info("Cloudflare link succesfully retrieved.");
+ const res = await fetch(cf_link.url);
-C.info(`Downloading ${filename}`);
-
-const file = fs.createWriteStream(filename);
-const reader = res.body.getReader();
-
-let downloaded = 0;
-const total = Number(res.headers.get("content-length")) || 0;
-const start = Date.now();
-
-while (true) {
- const { done, value } = await reader.read();
- if (done) break;
-
- file.write(value);
- downloaded += value.length;
-
- if (total) {
- const pct = ((downloaded / total) * 100).toFixed(1);
- const mb = (downloaded / 1024 / 1024).toFixed(2);
- const tmb = (total / 1024 / 1024).toFixed(2);
- process.stdout.write(`\r${pct}% ${mb}/${tmb} MB`);
+ await download(res, filename.replace("/", "_"));
} else {
- const mb = (downloaded / 1024 / 1024).toFixed(2);
- process.stdout.write(`\r${mb} MB`);
+ C.err("Could not succesfully retrieve cloudflare link.");
}
+} else {
+ C.info(`Files: ${total_files}`);
+ C.info("Requesting ZIP…");
+
+ const res = await fetch(link, {
+ method: "POST",
+ body: new URLSearchParams({
+ action: "download",
+ secret_code: secret,
+ private_id: "",
+ download_id: url.replace(base, ""),
+ total_files,
+ }),
+ headers: {
+ "User-Agent": "Mozilla/5.0",
+ },
+ });
+
+ await download(res);
}
-
-file.end();
-
-process.stdout.write("\n");
-C.ok(`Saved as ${filename} in ${((Date.now() - start) / 1000).toFixed(1)}s`);