import type { SiteHttpContext } from "./http"; import { createSiteRateLimiter, type SiteRateLimiter } from "./rate-limit"; import type { SecretResolver } from "./types"; export interface SiteAdapterDeps { secrets: SecretResolver; fetch?: typeof globalThis.fetch; /** 同站共享的限流器;不传则按站点定义新建(列表/搜索/详情/下载共享) */ limiter?: SiteRateLimiter; now?: () => Date; timeoutMs?: number; userAgent?: string; /** 覆盖站点基址(测试指向 mock) */ baseUrl?: string; } export function buildHttpContext( siteId: string, deps: SiteAdapterDeps, limiterDefaults: { minIntervalMs: number; burst: number }, ): SiteHttpContext { const ctx: SiteHttpContext = { siteId, fetch: deps.fetch ?? globalThis.fetch, limiter: deps.limiter ?? createSiteRateLimiter(limiterDefaults), timeoutMs: deps.timeoutMs ?? 30_000, now: deps.now ?? (() => new Date()), }; if (deps.userAgent) ctx.userAgent = deps.userAgent; return ctx; }