Manga title to search for
Optionaltoken: stringOptional authentication token
Optional search service configuration
OptionalabortSignal: AbortSignalOptional abort signal to cancel search
OptionalspecificPage: numberOptional specific page number (disables pagination)
OptionalkenmeiManga: KenmeiMangaOptional Kenmei manga context for custom rule evaluation
Promise resolving to manga search response with matches
export async function searchMangaByTitle(
title: string,
token?: string,
config: Partial<SearchServiceConfig> = {},
abortSignal?: AbortSignal,
specificPage?: number,
kenmeiManga?: KenmeiManga,
): Promise<MangaSearchResponse> {
const searchConfig = { ...DEFAULT_SEARCH_CONFIG, ...config };
const cacheKey = generateCacheKey(title);
// Check cache first
const cachedResult = handleCacheCheck(
title,
cacheKey,
kenmeiManga,
searchConfig.bypassCache ?? false,
);
if (cachedResult) {
return cachedResult;
}
if (searchConfig.exactMatchingOnly) {
console.debug(
`[MangaSearchService] 🔍 MANUAL SEARCH: Ensuring exact matching is correctly configured`,
);
searchConfig.exactMatchingOnly = true;
}
// Execute the search
const { filteredResults, lastPageInfo } = await executeAndProcessSearch(
title,
searchConfig,
token,
abortSignal,
specificPage,
kenmeiManga,
);
// Extra searches logic
const extraResults = await performExtraSearches(
title,
searchConfig,
token,
abortSignal,
specificPage,
kenmeiManga,
filteredResults,
);
// Handle fallback sources
const { finalResults, comickSourceMap, mangaDexSourceMap } =
await handleFallbackSources(extraResults, title, token, searchConfig);
storeFallbackSourceMetadata(
title,
comickSourceMap,
mangaDexSourceMap,
searchConfig,
);
// Build and return final response
return buildFinalResponse(
finalResults,
title,
comickSourceMap,
mangaDexSourceMap,
lastPageInfo,
);
}
Search for manga by title with rate limiting and caching.
Main entry point coordinating cache checking, AniList API search with pagination, result ranking/filtering, fallback sources (Comick, MangaDex), and confidence scoring.
Note: Custom accept rules only apply when kenmeiManga context is provided (automatic matching flows). Manual searches that do not provide kenmeiManga will not have accept rules applied, only skip rules are skipped (they don't apply to manual searches). This is by design: accept rules require Kenmei context to evaluate properly.