Fix critical bug: searches now respect enabled indexers

**Problem:** Prowlarr searches were querying ALL indexers instead of only
the ones enabled in user settings, causing torrents to be selected from
disabled/untrusted indexers.

**Root Cause:** The prowlarr.search() method didn't filter by indexer IDs,
and callers weren't passing enabled indexer IDs to the search.

**Changes:**
1. Added indexerIds parameter to SearchFilters interface
2. Updated prowlarr.service.ts search() to filter by indexerIds
3. Updated search-indexers.processor.ts to fetch and pass enabled indexer IDs
4. Updated interactive-search route to fetch and pass enabled indexer IDs
5. Added validation: search fails if no indexers are configured/enabled
6. Updated documentation to reflect indexer filtering behavior

**Impact:**
- Manual search: Only searches enabled indexers
- Interactive search: Only searches enabled indexers
- RSS monitoring: Already correctly filtered (no changes needed)

**Testing:** TypeScript type checking passed with no errors
This commit is contained in:
Claude
2025-12-22 16:01:06 +00:00
committed by kikootwo
parent 477a30c2eb
commit a59bbedd00
4 changed files with 60 additions and 6 deletions
@@ -31,6 +31,24 @@ export async function processSearchIndexers(payload: SearchIndexersPayload): Pro
},
});
// Get enabled indexers from configuration
const { getConfigService } = await import('../services/config.service');
const configService = getConfigService();
const indexersConfigStr = await configService.get('prowlarr_indexers');
if (!indexersConfigStr) {
throw new Error('No indexers configured. Please configure indexers in settings.');
}
const indexersConfig = JSON.parse(indexersConfigStr);
const enabledIndexerIds = indexersConfig.map((indexer: any) => indexer.id);
if (enabledIndexerIds.length === 0) {
throw new Error('No indexers enabled. Please enable at least one indexer in settings.');
}
await logger?.info(`Searching ${enabledIndexerIds.length} enabled indexers`);
// Get Prowlarr service
const prowlarr = await getProwlarrService();
@@ -39,11 +57,12 @@ export async function processSearchIndexers(payload: SearchIndexersPayload): Pro
await logger?.info(`Searching for: "${searchQuery}"`);
// Search indexers
// Search indexers - ONLY enabled ones
const searchResults = await prowlarr.search(searchQuery, {
category: 3030, // Audiobooks
minSeeders: 1, // Only torrents with at least 1 seeder
maxResults: 50, // Limit results
indexerIds: enabledIndexerIds, // Filter by enabled indexers
});
await logger?.info(`Found ${searchResults.length} results`);