The manga title to search for.
Optional
token: stringOptional authentication token.
Optional search service configuration.
Optional
abortSignal: AbortSignalOptional abort signal to cancel the search.
Optional
specificPage: numberA promise resolving to an array of MangaMatch objects.
export async function searchMangaByTitle(
title: string,
token?: string,
config: Partial<SearchServiceConfig> = {},
abortSignal?: AbortSignal,
specificPage?: number,
): Promise<MangaSearchResponse> {
const searchConfig = { ...DEFAULT_SEARCH_CONFIG, ...config };
const cacheKey = generateCacheKey(title);
// Handle cache operations
if (searchConfig.bypassCache && cacheKey) {
handleCacheBypass(title, cacheKey);
} else if (!searchConfig.bypassCache) {
const cachedResult = processCachedResults(title, cacheKey);
if (cachedResult) {
return cachedResult;
}
} else if (searchConfig.exactMatchingOnly) {
console.log(
`🔍 MANUAL SEARCH: Ensuring exact matching is correctly configured`,
);
searchConfig.exactMatchingOnly = true;
}
// Execute the search
const searchQuery = title;
await acquireRateLimit();
const { results, lastPageInfo } = await executeSearchLoop(
searchQuery,
searchConfig,
token,
abortSignal,
specificPage,
);
// Process and filter results
const rankedResults = processSearchResults(results, title, searchConfig);
let filteredResults = applyContentFiltering(
rankedResults,
title,
searchConfig,
);
filteredResults = handleNoResultsFallback(
filteredResults,
results,
searchConfig,
);
// Handle Comick fallback if needed
const { results: finalResults, comickSourceMap } =
await executeComickFallback(title, token, filteredResults, searchConfig);
// Build and return final response
return buildFinalResponse(finalResults, title, comickSourceMap, lastPageInfo);
}
Search for manga by title with rate limiting and caching.