feat(adapters): RSS and PT site adapters ported from MoviePilot v3 + mocks (W1-3b)

- rss: port of MP RssHelper._parse_impl/get_rss_link semantics with safe
  XML (entities off, DTD/ENTITY rejected, size/item caps), ETag/Last-Modified,
  backoff + Retry-After, circuit breaker with manual reset, passkey redaction,
  overlap-window GUID+digest dedupe
- sites/spider: TS port of MP SiteSpider (indexer schema, search URL builder,
  field DSL, filters, Jinja templates via nunjucks, login-page detection);
  audiences definition hand-written as JSON; raw category id preserved;
  shared per-site token bucket
- sites/mteam: port of MP MTorrentSpider (params, result mapping, promo
  factors, genDlToken flow) without embedding the API key in enclosures;
  business code/message checks
- testkit: mock RSS server, mock NexusPHP site, mock M-Team API
- docs: W1-3b migration mapping appended to porting ledger

Co-Authored-By: Claude Fable 5.1 <[email protected]>
This commit is contained in:
rootandClaude Fable 5.1 committed 2026-09-27 18:10:34 +08:00
1 parent ef2e504a94
commit a6d049db81
47 files changed
+5414

No files matched your search

+61
View File
@@ -0,0 +1,61 @@
export { audiencesDefinition, loadIndexerDefinition } from "./definitions";
export type { SiteAdapterDeps } from "./deps";
export { createMteamAdapter, mteamTorrentToRelease } from "./mteam/adapter";
export { type MteamApiPath, mteamPost } from "./mteam/client";
export { type MteamDefinition, mteamApiBase, mteamDefinition } from "./mteam/definition";
export {
findImdbid,
getDownloadVolumeFactor,
getUploadVolumeFactor,
type MteamTorrentJson,
mteamSearchParams,
parseMteamResult,
} from "./mteam/spider";
export { createSiteRateLimiter, type RateLimiterOptions, type SiteRateLimiter } from "./rate-limit";
export { createSiteAdapter, getSiteAdapter, SITE_DEFINITIONS, type SiteDefinition } from "./registry";
export { clearSearchText, createSpiderSiteAdapter } from "./spider/adapter";
export { parseDetailPage } from "./spider/detail";
export { promotionFromFactors, spiderTorrentToRelease } from "./spider/map";
export type {
IndexerDefinition,
SpiderCategoryConfig,
SpiderCategoryItem,
SpiderFieldSelector,
SpiderFields,
SpiderFilter,
UmtSiteExtension,
} from "./spider/schema";
export {
combineUrl,
type MediaKind,
type MpMediaType,
parseSizeMp,
resolveCategoryMediaType,
SiteSpider,
type SiteSpiderQuery,
type SpiderTorrent,
selectMediaCategories,
} from "./spider/spider";
export {
type DownloadTarget,
type HitAndRun,
type PromotionType,
type SecretResolver,
type SiteAdapter,
type SiteCallOptions,
type SiteCapabilities,
type SiteCategory,
type SiteCredentialKind,
SiteError,
type SiteErrorKind,
type SiteHealth,
type SiteHealthStatus,
type SiteKind,
type SiteListFilters,
type SitePage,
type SitePromotion,
type SiteRelease,
type SiteReleaseDetail,
staticSecretResolver,
} from "./types";
export { parseCount, parseSiteTime } from "./util";