59 lines
2.2 KiB
JavaScript
59 lines
2.2 KiB
JavaScript
import crypto from "node:crypto";
|
|
import fs from "node:fs";
|
|
import os from "node:os";
|
|
import path from "node:path";
|
|
import { Readable } from "node:stream";
|
|
import { pipeline } from "node:stream/promises";
|
|
|
|
const localPath = "release/Real-Debrid-Downloader Setup 1.4.61.exe";
|
|
const remoteUrl = "https://codeberg.org/Sucukdeluxe/real-debrid-downloader/releases/download/v1.4.61/Real-Debrid-Downloader%20Setup%201.4.61.exe";
|
|
const tmpPath = path.join(os.tmpdir(), "rd-verify-1.4.61.exe");
|
|
|
|
// Local file info
|
|
const localSize = fs.statSync(localPath).size;
|
|
const localHash = crypto.createHash("sha512");
|
|
localHash.update(fs.readFileSync(localPath));
|
|
const localSha = localHash.digest("hex");
|
|
console.log("Local file size:", localSize);
|
|
console.log("Local SHA512:", localSha.substring(0, 40) + "...");
|
|
|
|
// Download from Codeberg
|
|
console.log("\nDownloading from Codeberg...");
|
|
const resp = await fetch(remoteUrl, { redirect: "follow" });
|
|
console.log("Status:", resp.status);
|
|
console.log("Content-Length:", resp.headers.get("content-length"));
|
|
|
|
const source = Readable.fromWeb(resp.body);
|
|
const target = fs.createWriteStream(tmpPath);
|
|
await pipeline(source, target);
|
|
|
|
const remoteSize = fs.statSync(tmpPath).size;
|
|
const remoteHash = crypto.createHash("sha512");
|
|
remoteHash.update(fs.readFileSync(tmpPath));
|
|
const remoteSha = remoteHash.digest("hex");
|
|
console.log("\nRemote file size:", remoteSize);
|
|
console.log("Remote SHA512:", remoteSha.substring(0, 40) + "...");
|
|
|
|
console.log("\nSize match:", localSize === remoteSize);
|
|
console.log("SHA512 match:", localSha === remoteSha);
|
|
|
|
if (localSha !== remoteSha) {
|
|
console.log("\n!!! FILE ON CODEBERG IS CORRUPTED !!!");
|
|
console.log("The upload to Codeberg damaged the file.");
|
|
|
|
// Find first difference
|
|
const localBuf = fs.readFileSync(localPath);
|
|
const remoteBuf = fs.readFileSync(tmpPath);
|
|
for (let i = 0; i < Math.min(localBuf.length, remoteBuf.length); i++) {
|
|
if (localBuf[i] !== remoteBuf[i]) {
|
|
console.log(`First byte difference at offset ${i}: local=0x${localBuf[i].toString(16)} remote=0x${remoteBuf[i].toString(16)}`);
|
|
break;
|
|
}
|
|
}
|
|
} else {
|
|
console.log("\n>>> File on Codeberg is identical to local file <<<");
|
|
console.log("The problem is on the user's server (network/proxy issue).");
|
|
}
|
|
|
|
fs.unlinkSync(tmpPath);
|