{"version":3,"file":"bingserpapi.cjs","names":["Tool"],"sources":["../../src/tools/bingserpapi.ts"],"sourcesContent":["import { getEnvironmentVariable } from \"@langchain/core/utils/env\";\nimport { Tool } from \"@langchain/core/tools\";\n\n/**\n * A tool for web search functionality using Bing's search engine. It\n * extends the base `Tool` class and implements the `_call` method to\n * perform the search operation. Requires an API key for Bing's search\n * engine, which can be set in the environment variables. Also accepts\n * additional parameters for the search query.\n */\nclass BingSerpAPI extends Tool {\n  static lc_name() {\n    return \"BingSerpAPI\";\n  }\n\n  /**\n   * Not implemented. Will throw an error if called.\n   */\n  toJSON() {\n    return this.toJSONNotImplemented();\n  }\n\n  name = \"bing-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  key: string;\n\n  params: Record<string, string>;\n\n  constructor(\n    apiKey: string | undefined = getEnvironmentVariable(\"BingApiKey\"),\n    params: Record<string, string> = {}\n  ) {\n    super(...arguments);\n\n    if (!apiKey) {\n      throw new Error(\n        \"BingSerpAPI API key not set. You can set it as BingApiKey in your .env file.\"\n      );\n    }\n\n    this.key = apiKey;\n    this.params = params;\n  }\n\n  /** @ignore */\n  async _call(input: string): Promise<string> {\n    const headers = { \"Ocp-Apim-Subscription-Key\": this.key };\n    const params = { q: input, textDecorations: \"true\", textFormat: \"HTML\" };\n    const searchUrl = new URL(\"https://api.bing.microsoft.com/v7.0/search\");\n\n    Object.entries(params).forEach(([key, value]) => {\n      searchUrl.searchParams.append(key, value);\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 res = await response.json();\n    const results: [] = res.webPages.value;\n\n    if (results.length === 0) {\n      return \"No good results found.\";\n    }\n    const snippets = results\n      .map((result: { snippet: string }) => result.snippet)\n      .join(\" \");\n\n    return snippets;\n  }\n}\n\nexport { BingSerpAPI };\n"],"mappings":";;;;;;;;;;;;;AAUA,IAAM,cAAN,cAA0BA,sBAAAA,KAAK;CAC7B,OAAO,UAAU;AACf,SAAO;;;;;CAMT,SAAS;AACP,SAAO,KAAK,sBAAsB;;CAGpC,OAAO;CAEP,cACE;CAEF;CAEA;CAEA,YACE,UAAA,GAAA,0BAAA,wBAAoD,aAAa,EACjE,SAAiC,EAAE,EACnC;AACA,QAAM,GAAG,UAAU;AAEnB,MAAI,CAAC,OACH,OAAM,IAAI,MACR,+EACD;AAGH,OAAK,MAAM;AACX,OAAK,SAAS;;;CAIhB,MAAM,MAAM,OAAgC;EAC1C,MAAM,UAAU,EAAE,6BAA6B,KAAK,KAAK;EACzD,MAAM,SAAS;GAAE,GAAG;GAAO,iBAAiB;GAAQ,YAAY;GAAQ;EACxE,MAAM,YAAY,IAAI,IAAI,6CAA6C;AAEvE,SAAO,QAAQ,OAAO,CAAC,SAAS,CAAC,KAAK,WAAW;AAC/C,aAAU,aAAa,OAAO,KAAK,MAAM;IACzC;EAEF,MAAM,WAAW,MAAM,MAAM,WAAW,EAAE,SAAS,CAAC;AAEpD,MAAI,CAAC,SAAS,GACZ,OAAM,IAAI,MAAM,cAAc,SAAS,SAAS;EAIlD,MAAM,WADM,MAAM,SAAS,MAAM,EACT,SAAS;AAEjC,MAAI,QAAQ,WAAW,EACrB,QAAO;AAMT,SAJiB,QACd,KAAK,WAAgC,OAAO,QAAQ,CACpD,KAAK,IAAI"}