chore: archive AgentDock v1 implementation

This commit is contained in:
leefer
2026-08-24 17:14:08 +08:00
commit f512bd58ec
66 changed files with 10663 additions and 0 deletions
+37
View File
@@ -0,0 +1,37 @@
const LOOPBACK_HOSTS = new Set(["localhost", "127.0.0.1", "[::1]"]);
export function parseMulticaCallbackUrl(value) {
if (typeof value !== "string" || !value || value.length > 12_000) {
throw new Error("请粘贴完整的 Multica 回调链接");
}
let url;
try {
url = new URL(value);
} catch {
throw new Error("回调链接格式不正确");
}
const port = Number(url.port);
if (url.protocol !== "http:" || !LOOPBACK_HOSTS.has(url.hostname) || url.pathname !== "/callback") {
throw new Error("只接受 Multica 生成的 localhost 回调链接");
}
if (!Number.isInteger(port) || port < 1024 || port > 65535) {
throw new Error("回调链接缺少有效端口");
}
if (!url.searchParams.get("token") || !url.searchParams.get("state")) {
throw new Error("回调链接缺少 token 或 state");
}
return url;
}
export async function relayMulticaCallback(value, fetchImpl = fetch) {
const url = parseMulticaCallbackUrl(value);
const response = await fetchImpl(url, {
method: "GET",
redirect: "manual",
signal: AbortSignal.timeout(8_000),
});
if (!response.ok) throw new Error(`Multica 回调未被接受 (${response.status})`);
return { ok: true };
}