feat: add Deepbrid, daily scheduling, and notification center
Add encrypted Deepbrid API accounts with account validation, provider routing, fallback, usage tracking, safe error handling, and verified 1Fichier downloads. Restore persistent recurring daily starts with local-calendar deduplication and legacy schedule compatibility. Add durable Discord package, run, remaining-volume, stall, and recovery notifications with privacy-safe telemetry and disk-failure recovery.
This commit is contained in:
+24
-10
@@ -6,6 +6,7 @@ import { AllDebridHostInfo, AppSettings, DebridFallbackProvider, DebridLinkHostL
|
||||
import { isDebridLinkApiKeyDailyLimitReached, isMegaDebridAccountDisabled, isMegaDebridAccountDailyLimitReached, isProviderDailyLimitReached, isRealDebridAccountDailyLimitReached } from "../shared/provider-daily-limits";
|
||||
import { isMegaDebridResolveFailure, germanMegaDebridResolveReason } from "../shared/mega-debrid-errors";
|
||||
import { APP_VERSION, REQUEST_RETRIES } from "./constants";
|
||||
import { DEEPBRID_ACCOUNT_ID, DeepbridClient } from "./deepbrid";
|
||||
import { pruneAccountRuntimeSession, recordAccountRuntimeAttempt, recordAccountRuntimeFailure, recordAccountRuntimeSuccess, resetAccountRuntimeSessionForProvider } from "./account-runtime";
|
||||
import { logger } from "./logger";
|
||||
import { logAccountRotation } from "./account-rotation-log";
|
||||
@@ -595,9 +596,10 @@ const PROVIDER_LABELS: Record<DebridProvider, string> = {
|
||||
megadebrid: "Mega-Debrid",
|
||||
"megadebrid-api": "Mega-Debrid API",
|
||||
"megadebrid-web": "Mega-Debrid Web",
|
||||
bestdebrid: "BestDebrid",
|
||||
alldebrid: "AllDebrid",
|
||||
ddownload: "DDownload",
|
||||
bestdebrid: "BestDebrid",
|
||||
alldebrid: "AllDebrid",
|
||||
deepbrid: "Deepbrid",
|
||||
ddownload: "DDownload",
|
||||
onefichier: "1Fichier",
|
||||
debridlink: "Debrid-Link",
|
||||
linksnappy: "LinkSnappy"
|
||||
@@ -4500,9 +4502,12 @@ export class DebridService {
|
||||
if (effectiveProvider === "megadebrid-web") {
|
||||
return Boolean(hasMegaDebridCredentials(settings) && isMegaDebridModeEnabled(settings, "web") && this.options.megaWebUnrestrict);
|
||||
}
|
||||
if (effectiveProvider === "alldebrid") {
|
||||
return Boolean(this.shouldUseAllDebridWeb(settings) || settings.allDebridToken.trim());
|
||||
}
|
||||
if (effectiveProvider === "alldebrid") {
|
||||
return Boolean(this.shouldUseAllDebridWeb(settings) || settings.allDebridToken.trim());
|
||||
}
|
||||
if (effectiveProvider === "deepbrid") {
|
||||
return Boolean(settings.deepbridApiKey.trim());
|
||||
}
|
||||
if (effectiveProvider === "ddownload") {
|
||||
return Boolean(settings.ddownloadLogin.trim() && settings.ddownloadPassword.trim());
|
||||
}
|
||||
@@ -4652,7 +4657,7 @@ export class DebridService {
|
||||
if (effectiveProvider === "megadebrid-web") {
|
||||
return MegaDebridClient.unrestrictWithAccounts(settings, "web", false, link, this.options.megaWebUnrestrict, signal);
|
||||
}
|
||||
if (effectiveProvider === "alldebrid") {
|
||||
if (effectiveProvider === "alldebrid") {
|
||||
if (this.shouldUseAllDebridWeb(settings) && this.options.allDebridWebUnrestrict) {
|
||||
const result = await this.options.allDebridWebUnrestrict(link, signal);
|
||||
if (!result) {
|
||||
@@ -4662,9 +4667,18 @@ export class DebridService {
|
||||
return result;
|
||||
}
|
||||
const adResult = await new AllDebridClient(settings.allDebridToken).unrestrictLink(link, signal);
|
||||
adResult.sourceLabel = "API";
|
||||
return adResult;
|
||||
}
|
||||
adResult.sourceLabel = "API";
|
||||
return adResult;
|
||||
}
|
||||
if (effectiveProvider === "deepbrid") {
|
||||
const result = await new DeepbridClient(settings.deepbridApiKey).unrestrictLink(link, signal);
|
||||
return {
|
||||
...result,
|
||||
sourceLabel: "API",
|
||||
sourceAccountId: DEEPBRID_ACCOUNT_ID,
|
||||
sourceAccountLabel: "Deepbrid API"
|
||||
};
|
||||
}
|
||||
if (effectiveProvider === "ddownload") {
|
||||
return this.getDdownloadClient(settings.ddownloadLogin, settings.ddownloadPassword).unrestrictLink(link, signal);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user