{"version":3,"file":"providers-BeNnIsBG.mjs","names":[],"sources":["../src/core/providers.ts"],"sourcesContent":["export const builtinProviders = [\n  \"brave\",\n  \"context\",\n  \"exa\",\n  \"firecrawl\",\n  \"jina\",\n  \"mojeek\",\n  \"openai-codex\",\n  \"searxng\",\n  \"serpapi\",\n  \"serpbase\",\n  \"tavily\",\n  \"tinyfish\",\n] as const;\n\nexport type WebSearchProviderName = (typeof builtinProviders)[number];\n\nconst providerApiKeyEnvVars = {\n  brave: \"BRAVE_API_KEY\",\n  context: \"CONTEXT_DEV_API_KEY\",\n  exa: \"EXA_API_KEY\",\n  firecrawl: \"FIRECRAWL_API_KEY\",\n  jina: \"JINA_API_KEY\",\n  mojeek: \"MOJEEK_API_KEY\",\n  \"openai-codex\": \"OPENAI_CODEX_ACCESS_TOKEN\",\n  searxng: null,\n  serpapi: \"SERPAPI_API_KEY\",\n  serpbase: \"SERPBASE_API_KEY\",\n  tavily: \"TAVILY_API_KEY\",\n  tinyfish: \"TINYFISH_API_KEY\",\n} as const satisfies Record<WebSearchProviderName, string | null>;\n\nexport const providerDetectionOrder = [\n  \"exa\",\n  \"brave\",\n  \"context\",\n  \"firecrawl\",\n  \"jina\",\n  \"tavily\",\n  \"tinyfish\",\n  \"serpapi\",\n  \"serpbase\",\n  \"mojeek\",\n  \"openai-codex\",\n] as const satisfies readonly WebSearchProviderName[];\n\nexport function providerApiKeyEnvVar(name: string): string | null {\n  if (isBuiltinProviderName(name)) return providerApiKeyEnvVars[name];\n  return `${name.toUpperCase().replaceAll(/[^A-Z0-9]/gu, \"_\")}_API_KEY`;\n}\n\nfunction isBuiltinProviderName(name: string): name is WebSearchProviderName {\n  return Object.hasOwn(providerApiKeyEnvVars, name);\n}\n\n/*\n * Result caps and category lists a built-in adapter clamps to. The manifest advertises the same\n * values, and both read them here so neither side has a copy to drift.\n */\nexport const FIRECRAWL_MAX_RESULTS = 100;\nexport const JINA_MAX_RESULTS = 20;\nexport const JINA_SEARCH_CATEGORIES = [\"web\", \"images\", \"news\"] as const;\nexport const OPENAI_CODEX_MAX_RESULTS = 100;\nexport const SERPBASE_MAX_RESULTS = 20;\nexport const SERPBASE_SEARCH_CATEGORIES = [\"images\", \"image\", \"news\", \"videos\", \"video\"] as const;\nexport const TAVILY_SEARCH_TOPICS = [\"general\", \"news\", \"finance\"] as const;\nexport const TINYFISH_SEARCH_CATEGORIES = [\"news\", \"research_paper\"] as const;\n"],"mappings":";AAAA,MAAa,mBAAmB;CAC9B;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF;AAIA,MAAM,wBAAwB;CAC5B,OAAO;CACP,SAAS;CACT,KAAK;CACL,WAAW;CACX,MAAM;CACN,QAAQ;CACR,gBAAgB;CAChB,SAAS;CACT,SAAS;CACT,UAAU;CACV,QAAQ;CACR,UAAU;AACZ;AAEA,MAAa,yBAAyB;CACpC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF;AAEA,SAAgB,qBAAqB,MAA6B;CAChE,IAAI,sBAAsB,IAAI,GAAG,OAAO,sBAAsB;CAC9D,OAAO,GAAG,KAAK,YAAY,CAAC,CAAC,WAAW,eAAe,GAAG,EAAE;AAC9D;AAEA,SAAS,sBAAsB,MAA6C;CAC1E,OAAO,OAAO,OAAO,uBAAuB,IAAI;AAClD;AAQA,MAAa,yBAAyB;CAAC;CAAO;CAAU;AAAM;AAG9D,MAAa,6BAA6B;CAAC;CAAU;CAAS;CAAQ;CAAU;AAAO;AACvF,MAAa,uBAAuB;CAAC;CAAW;CAAQ;AAAS;AACjE,MAAa,6BAA6B,CAAC,QAAQ,gBAAgB"}