{"version":3,"file":"brave_search.cjs","names":["Tool"],"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,sBAAAA,KAAK;CACpC,OAAO,UAAU;AACf,SAAO;;CAGT,OAAO;CAEP,cACE;CAEF;CAEA,YACE,SAA4B,EAC1B,SAAA,GAAA,0BAAA,wBAA+B,uBAAuB,EACvD,EACD;AACA,SAAO;AAEP,MAAI,CAAC,OAAO,OACV,OAAM,IAAI,MACR,8GACD;AAGH,OAAK,SAAS,OAAO;;;CAIvB,MAAM,MAAM,OAAgC;EAC1C,MAAM,UAAU;GACd,wBAAwB,KAAK;GAC7B,QAAQ;GACT;EACD,MAAM,YAAY,IAAI,IACpB,oDAAoD,mBAClD,MACD,GACF;EAED,MAAM,WAAW,MAAM,MAAM,WAAW,EAAE,SAAS,CAAC;AAEpD,MAAI,CAAC,SAAS,GACZ,OAAM,IAAI,MAAM,cAAc,SAAS,SAAS;EAIlD,MAAM,oBADiB,MAAM,SAAS,MAAM,EACJ,KAAK;EAC7C,MAAM,eAAe,MAAM,QAAQ,iBAAiB,GAChD,iBAAiB,KACd,UAAkE;GACjE,OAAO,KAAK;GACZ,MAAM,KAAK;GACX,SAAS,KAAK;GACf,EACF,GACD,EAAE;AACN,SAAO,KAAK,UAAU,aAAa"}