52 lines
1.3 KiB
TypeScript
52 lines
1.3 KiB
TypeScript
export type SearchType = "threads_keyword" | "web_search" | "crawler";
|
||
|
||
export type KeywordPriority = "high" | "medium" | "low";
|
||
|
||
export type SearchProviderName = "threads" | "brave" | "crawler";
|
||
|
||
export interface SearchRequest {
|
||
keyword: string;
|
||
limit: number;
|
||
since?: Date;
|
||
source: SearchProviderName;
|
||
searchType: SearchType;
|
||
priority?: KeywordPriority;
|
||
/** 直接指定 Brave 查詢(略過 keyword query builder) */
|
||
query?: string;
|
||
/** 巡邏模式:檢查 high priority + 每日額度(預設 true) */
|
||
patrolMode?: boolean;
|
||
/** 僅保留 threads.com 結果(預設 true) */
|
||
threadsOnly?: boolean;
|
||
}
|
||
|
||
export interface SearchResult {
|
||
title: string;
|
||
url: string;
|
||
snippet: string;
|
||
author: string;
|
||
publishedAt?: Date;
|
||
source: SearchProviderName;
|
||
threadId?: string;
|
||
raw?: Record<string, unknown>;
|
||
}
|
||
|
||
export interface SearchResponse {
|
||
provider: SearchProviderName;
|
||
results: SearchResult[];
|
||
status: "success" | "unavailable" | "skipped";
|
||
skipReason?: string;
|
||
quotaUsed?: number;
|
||
quotaLimit?: number;
|
||
}
|
||
|
||
export interface KeywordInput {
|
||
value: string;
|
||
limit: number;
|
||
priority: KeywordPriority;
|
||
}
|
||
|
||
export interface SearchProvider {
|
||
name(): SearchProviderName;
|
||
enabled(): boolean;
|
||
search(req: SearchRequest): Promise<SearchResponse>;
|
||
} |