resolveWebSearchChain function

List<WebSearchProvider> resolveWebSearchChain(
  1. List<String> providerIds, {
  2. required Map<String, String> secrets,
})

Resolves providerIds (auto expands to the default chain) into an ordered, deduplicated list of available providers (omp's resolveProviderCandidates, reduced). Keyed providers without a key in secrets are skipped; unknown ids throw.

Implementation

List<WebSearchProvider> resolveWebSearchChain(
  List<String> providerIds, {
  required Map<String, String> secrets,
}) {
  final byId = {for (final p in defaultWebSearchProviders) p.id: p};
  final resolved = <WebSearchProvider>[];
  for (final id in providerIds.isEmpty ? const ['auto'] : providerIds) {
    if (id == 'auto') {
      resolved.addAll(defaultWebSearchProviders);
      continue;
    }
    final provider = byId[id];
    if (provider == null) {
      throw StateError(
        'Unknown web search provider: $id '
        '(known: ${byId.keys.join(', ')}, auto)',
      );
    }
    resolved.add(provider);
  }
  final seen = <String>{};
  return [
    for (final provider in resolved)
      if (seen.add(provider.id) &&
          isWebSearchProviderAvailable(provider, secrets))
        provider,
  ];
}