92 lines
2.2 KiB
TypeScript
92 lines
2.2 KiB
TypeScript
/** 海巡搜尋來源模式(每帳號設定) */
|
||
export type SearchSourceMode =
|
||
| "mixed"
|
||
| "threads"
|
||
| "brave"
|
||
| "crawler"
|
||
| "threads_brave"
|
||
| "threads_crawler"
|
||
| "brave_crawler";
|
||
|
||
export const DEFAULT_SEARCH_SOURCE_MODE: SearchSourceMode = "mixed";
|
||
|
||
export const SEARCH_SOURCE_MODE_OPTIONS: Array<{
|
||
value: SearchSourceMode;
|
||
label: string;
|
||
hint: string;
|
||
}> = [
|
||
{
|
||
value: "mixed",
|
||
label: "混合模式",
|
||
hint: "Threads API → Brave → 爬蟲(推薦)",
|
||
},
|
||
{
|
||
value: "threads",
|
||
label: "Threads API",
|
||
hint: "僅官方 API 關鍵字搜尋",
|
||
},
|
||
{
|
||
value: "brave",
|
||
label: "Brave Search",
|
||
hint: "僅 Brave 網搜 Threads 貼文",
|
||
},
|
||
{
|
||
value: "crawler",
|
||
label: "瀏覽器爬蟲",
|
||
hint: "僅 Playwright 站內搜尋",
|
||
},
|
||
{
|
||
value: "threads_brave",
|
||
label: "API + Brave",
|
||
hint: "Threads API 不足時用 Brave,不爬蟲",
|
||
},
|
||
{
|
||
value: "threads_crawler",
|
||
label: "API + 爬蟲",
|
||
hint: "Threads API 不足時用瀏覽器,不用 Brave",
|
||
},
|
||
{
|
||
value: "brave_crawler",
|
||
label: "Brave + 爬蟲",
|
||
hint: "Brave 不足時用瀏覽器補漏",
|
||
},
|
||
];
|
||
|
||
export function parseSearchSourceMode(value: string | null | undefined): SearchSourceMode {
|
||
const valid = SEARCH_SOURCE_MODE_OPTIONS.map((o) => o.value);
|
||
if (value && valid.includes(value as SearchSourceMode)) {
|
||
return value as SearchSourceMode;
|
||
}
|
||
return DEFAULT_SEARCH_SOURCE_MODE;
|
||
}
|
||
|
||
export function modeAllowsThreads(mode: SearchSourceMode): boolean {
|
||
return (
|
||
mode === "mixed" ||
|
||
mode === "threads" ||
|
||
mode === "threads_brave" ||
|
||
mode === "threads_crawler"
|
||
);
|
||
}
|
||
|
||
export function modeAllowsBrave(mode: SearchSourceMode): boolean {
|
||
return (
|
||
mode === "mixed" ||
|
||
mode === "brave" ||
|
||
mode === "threads_brave" ||
|
||
mode === "brave_crawler"
|
||
);
|
||
}
|
||
|
||
export function modeAllowsCrawler(mode: SearchSourceMode): boolean {
|
||
return (
|
||
mode === "mixed" ||
|
||
mode === "crawler" ||
|
||
mode === "threads_crawler" ||
|
||
mode === "brave_crawler"
|
||
);
|
||
}
|
||
|
||
export function searchSourceModeLabel(mode: SearchSourceMode): string {
|
||
return SEARCH_SOURCE_MODE_OPTIONS.find((o) => o.value === mode)?.label ?? mode;
|
||
} |