Fix: 1fichier/DDownload-Fehler respektiert jetzt "Auto-Fallback aus"
Wenn ein 1fichier- oder DDownload-Link beim Entsperren scheiterte, fiel das Tool bisher trotzdem auf die Provider-Kette (z.B. Mega-Debrid) durch — auch wenn der Nutzer den automatischen Anbieter-Fallback in den Einstellungen ausgeschaltet hatte. Damit wurde ein anderer Anbieter (und dessen Tageslimit/ Account) ungewollt verbraucht, obwohl der Nutzer genau das unterbinden wollte. Jetzt prüfen die catch-Blöcke beider Hoster zusätzlich autoProviderFallback: ist er aus, wird der Fehler direkt weitergereicht statt still auf den nächsten Anbieter umzuschalten. Die Abbruch-Behandlung (User-Cancel/echtes aborted) bleibt unverändert davor. Wichtig: Die Dateinamen-Auflösung (getLinkInfos) bleibt bewusst NICHT betroffen — deren Fehlschlag muss weiterhin nicht-fatal sein. Test: 1fichier liefert KO + Fallback aus → Linkgenerierung wird abgelehnt und die Mega-Debrid-getLink-Route nachweislich nicht aufgerufen.
This commit is contained in:
parent
8196263ac3
commit
21fb09b208
@ -3741,6 +3741,9 @@ export class DebridService {
|
||||
if (signal?.aborted || (/aborted/i.test(errorText) && !/timeout/i.test(errorText))) {
|
||||
throw error;
|
||||
}
|
||||
if (!settings.autoProviderFallback) {
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -3757,6 +3760,9 @@ export class DebridService {
|
||||
if (signal?.aborted || (/aborted/i.test(errorText) && !/timeout/i.test(errorText))) {
|
||||
throw error;
|
||||
}
|
||||
if (!settings.autoProviderFallback) {
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -1453,6 +1453,48 @@ describe("debrid service", () => {
|
||||
expect(cooldown!.category).toBe("rate_limit");
|
||||
});
|
||||
|
||||
it("does not fall through a failed 1fichier link to the provider chain when autoProviderFallback is off", async () => {
|
||||
let megaGetLinkCalled = false;
|
||||
const settings = {
|
||||
...defaultSettings(),
|
||||
token: "",
|
||||
bestToken: "",
|
||||
allDebridToken: "",
|
||||
oneFichierApiKey: "1f-key",
|
||||
megaLogin: "user",
|
||||
megaPassword: "pass",
|
||||
megaCredentials: "user:pass",
|
||||
megaDebridApiEnabled: true,
|
||||
megaDebridWebEnabled: false,
|
||||
megaDebridPreferApi: true,
|
||||
providerPrimary: "megadebrid" as const,
|
||||
providerSecondary: "none" as const,
|
||||
providerTertiary: "none" as const,
|
||||
autoProviderFallback: false
|
||||
};
|
||||
|
||||
globalThis.fetch = (async (input: RequestInfo | URL): Promise<Response> => {
|
||||
const url = typeof input === "string" ? input : input instanceof URL ? input.toString() : input.url;
|
||||
if (url.includes("api.1fichier.com")) {
|
||||
return new Response(JSON.stringify({ status: "KO", message: "not available" }), { status: 500, headers: { "Content-Type": "application/json" } });
|
||||
}
|
||||
if (url.includes("action=connectUser")) {
|
||||
return new Response(JSON.stringify({ response_code: "ok", token: "tok", vip_end: Math.floor(Date.now() / 1000) + 999999 }), { status: 200, headers: { "Content-Type": "application/json" } });
|
||||
}
|
||||
if (url.includes("action=getLink")) {
|
||||
megaGetLinkCalled = true;
|
||||
return new Response(JSON.stringify({ response_code: "ok", debridLink: "https://mega-cdn.example/file.rar", filename: "file.rar" }), { status: 200, headers: { "Content-Type": "application/json" } });
|
||||
}
|
||||
return new Response("not-found", { status: 404 });
|
||||
}) as typeof fetch;
|
||||
|
||||
const service = new DebridService(settings);
|
||||
const result = await service.unrestrictLink("https://1fichier.com/?abc12345xyz").then((r) => ({ ok: true, r }), (e: unknown) => ({ ok: false, e }));
|
||||
|
||||
expect(result.ok).toBe(false);
|
||||
expect(megaGetLinkCalled).toBe(false);
|
||||
});
|
||||
|
||||
it("uses Mega Web only when it is configured as a separate fallback provider", async () => {
|
||||
const settings = {
|
||||
...defaultSettings(),
|
||||
|
||||
Loading…
Reference in New Issue
Block a user