Rewild Your Web
web browser dweb
16
fork

Configure Feed

Select the types of activity you want to include in your feed.

at 508943f815334a02aefc47d9da365aba115ab0f5 43 lines 1.2 kB view raw
1// SPDX-License-Identifier: AGPL-3.0-or-later 2 3export class ResultsAggregator { 4 constructor(providers = []) { 5 this.providers = providers; 6 } 7 8 // Add a provider to the list 9 addProvider(provider) { 10 this.providers.push(provider); 11 } 12 13 // Remove a provider by name 14 removeProvider(name) { 15 this.providers = this.providers.filter((p) => p.name !== name); 16 } 17 18 // Query all providers in parallel and return sorted results 19 async query(text) { 20 const promises = this.providers.map(async (provider) => { 21 try { 22 const results = await provider.query(text); 23 // Tag results with provider name and icon 24 return results.map((r) => ({ 25 ...r, 26 provider: provider.name, 27 providerIcon: provider.icon, 28 })); 29 } catch (e) { 30 console.error(`Provider ${provider.name} error:`, e); 31 return []; 32 } 33 }); 34 35 const resultsArrays = await Promise.all(promises); 36 const allResults = resultsArrays.flat(); 37 38 // Sort by score (descending), defaulting to 0 if not set 39 allResults.sort((a, b) => (b.score || 0) - (a.score || 0)); 40 41 return allResults; 42 } 43}