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))) {
|
if (signal?.aborted || (/aborted/i.test(errorText) && !/timeout/i.test(errorText))) {
|
||||||
throw error;
|
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))) {
|
if (signal?.aborted || (/aborted/i.test(errorText) && !/timeout/i.test(errorText))) {
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
|
if (!settings.autoProviderFallback) {
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1453,6 +1453,48 @@ describe("debrid service", () => {
|
|||||||
expect(cooldown!.category).toBe("rate_limit");
|
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 () => {
|
it("uses Mega Web only when it is configured as a separate fallback provider", async () => {
|
||||||
const settings = {
|
const settings = {
|
||||||
...defaultSettings(),
|
...defaultSettings(),
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user