feat(downloads): 多下载器路由:默认下载器、站点指定下载器、别名
照 MP(chain/download/submission.py:明确指定 or 站点下载器 or 默认): - 迁移 0063:downloader_instance.is_default(至多一个,唯一索引)、site.downloader_instance_id - pickInstance:明确指定 > 站点指定 > 默认 > 第一个可用;自动下载(gates)与手动下载共用 - 设置:下载器名称改称别名,新增「设为默认下载器」;站点编辑新增「下载器」选择 - 测试 downloader-routing.test.ts Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
1 parent
64e1dfb1d2
commit
135c50048f
12 files changed
+196
-11
No files matched your search
@@ -262,8 +262,15 @@ export function registerInstanceRoutes(app: ModuleApp, ctx: ServerContext) {
|
||||
throw new ApiException("validation_failed", "API Key 认证需要填写 API Key");
|
||||
return { ...curSettings, ...(next.settings ?? {}), authKind };
|
||||
};
|
||||
/** 默认下载器至多一个:设新的之前先取消旧的 */
|
||||
const clearDefault = (exceptId?: string) => {
|
||||
let q = ctx.db.updateTable("downloader_instance").set({ is_default: false }).where("is_default", "=", true);
|
||||
if (exceptId) q = q.where("id", "!=", exceptId);
|
||||
return q.execute();
|
||||
};
|
||||
endpoint(app, DL.create, async ({ body, actor }) => {
|
||||
const { credential: rawCredential, authKind, ...rest } = body;
|
||||
if (rest.isDefault) await clearDefault();
|
||||
const credential = secretInput(rawCredential) ?? undefined;
|
||||
const settings = dlAuth(authKind, { ...rest, ...(credential ? { credential } : {}) });
|
||||
const keep = authKind !== "none" && credential;
|
||||
@@ -291,6 +298,7 @@ export function registerInstanceRoutes(app: ModuleApp, ctx: ServerContext) {
|
||||
const { credential: rawCredential, authKind, ...rest } = body;
|
||||
const credential = secretInput(rawCredential);
|
||||
const cur = await getRow("downloader_instance", params.id);
|
||||
if (rest.isDefault) await clearDefault(params.id);
|
||||
const curAuth = ((cur.settings ?? {}) as Record<string, unknown>).authKind;
|
||||
if (credential === null && (authKind ?? curAuth) === "api_key")
|
||||
throw new ApiException("validation_failed", "API Key 认证不能清除 API Key;不用认证时把认证方式改为无认证");
|
||||
|
||||
Reference in new issue
Block a user