{"version":3,"file":"brave_search.cjs","names":["Tool","fields: BraveSearchParams","input: string","item: { title?: string; url?: string; description?: string }"],"sources":["../../src/tools/brave_search.ts"],"sourcesContent":["import { getEnvironmentVariable } from \"@langchain/core/utils/env\";\nimport { Tool } from \"@langchain/core/tools\";\n\n/**\n * Interface for the parameters required to instantiate a BraveSearch\n * instance.\n */\nexport interface BraveSearchParams {\n  apiKey?: string;\n}\n\n/**\n * Class for interacting with the Brave Search engine. It extends the Tool\n * class and requires an API key to function. The API key can be passed in\n * during instantiation or set as an environment variable named\n * 'BRAVE_SEARCH_API_KEY'.\n */\nexport class BraveSearch extends Tool {\n  static lc_name() {\n    return \"BraveSearch\";\n  }\n\n  name = \"brave-search\";\n\n  description =\n    \"a search engine. useful for when you need to answer questions about current events. input should be a search query.\";\n\n  apiKey: string;\n\n  constructor(\n    fields: BraveSearchParams = {\n      apiKey: getEnvironmentVariable(\"BRAVE_SEARCH_API_KEY\"),\n    }\n  ) {\n    super();\n\n    if (!fields.apiKey) {\n      throw new Error(\n        `Brave API key not set. Please pass it in or set it as an environment variable named \"BRAVE_SEARCH_API_KEY\".`\n      );\n    }\n\n    this.apiKey = fields.apiKey;\n  }\n\n  /** @ignore */\n  async _call(input: string): Promise<string> {\n    const headers = {\n      \"X-Subscription-Token\": this.apiKey,\n      Accept: \"application/json\",\n    };\n    const searchUrl = new URL(\n      `https://api.search.brave.com/res/v1/web/search?q=${encodeURIComponent(\n        input\n      )}`\n    );\n\n    const response = await fetch(searchUrl, { headers });\n\n    if (!response.ok) {\n      throw new Error(`HTTP error ${response.status}`);\n    }\n\n    const parsedResponse = await response.json();\n    const webSearchResults = parsedResponse.web?.results;\n    const finalResults = Array.isArray(webSearchResults)\n      ? webSearchResults.map(\n          (item: { title?: string; url?: string; description?: string }) => ({\n            title: item.title,\n            link: item.url,\n            snippet: item.description,\n          })\n        )\n      : [];\n    return JSON.stringify(finalResults);\n  }\n}\n"],"mappings":";;;;;;;;;;;;;AAiBA,IAAa,cAAb,cAAiCA,4BAAK;CACpC,OAAO,UAAU;AACf,SAAO;CACR;CAED,OAAO;CAEP,cACE;CAEF;CAEA,YACEC,SAA4B,EAC1B,+DAA+B,uBAAuB,CACvD,GACD;EACA,OAAO;AAEP,MAAI,CAAC,OAAO,OACV,OAAM,IAAI,MACR,CAAC,2GAA2G,CAAC;EAIjH,KAAK,SAAS,OAAO;CACtB;;CAGD,MAAM,MAAMC,OAAgC;EAC1C,MAAM,UAAU;GACd,wBAAwB,KAAK;GAC7B,QAAQ;EACT;EACD,MAAM,YAAY,IAAI,IACpB,CAAC,iDAAiD,EAAE,mBAClD,MACD,EAAE;EAGL,MAAM,WAAW,MAAM,MAAM,WAAW,EAAE,QAAS,EAAC;AAEpD,MAAI,CAAC,SAAS,GACZ,OAAM,IAAI,MAAM,CAAC,WAAW,EAAE,SAAS,QAAQ;EAGjD,MAAM,iBAAiB,MAAM,SAAS,MAAM;EAC5C,MAAM,mBAAmB,eAAe,KAAK;EAC7C,MAAM,eAAe,MAAM,QAAQ,iBAAiB,GAChD,iBAAiB,IACf,CAACC,UAAkE;GACjE,OAAO,KAAK;GACZ,MAAM,KAAK;GACX,SAAS,KAAK;EACf,GACF,GACD,CAAE;AACN,SAAO,KAAK,UAAU,aAAa;CACpC;AACF"}