{"version":3,"file":"search.cjs","names":["z","GmailBaseTool","SEARCH_DESCRIPTION"],"sources":["../../../src/tools/gmail/search.ts"],"sourcesContent":["import { gmail_v1 } from \"googleapis\";\nimport { z } from \"zod/v3\";\nimport { InferInteropZodOutput } from \"@langchain/core/utils/types\";\nimport { GmailBaseTool, GmailBaseToolParams } from \"./base.js\";\nimport { SEARCH_DESCRIPTION } from \"./descriptions.js\";\n\nconst searchSchema = z.object({\n  query: z.string(),\n  maxResults: z.number().optional(),\n  resource: z.enum([\"messages\", \"threads\"]).optional(),\n});\nexport type SearchSchema = z.infer<typeof searchSchema>;\n\nexport class GmailSearch extends GmailBaseTool {\n  name = \"search_gmail\";\n\n  schema = searchSchema;\n\n  description = SEARCH_DESCRIPTION;\n\n  constructor(fields?: GmailBaseToolParams) {\n    super(fields);\n  }\n\n  async _call(arg: InferInteropZodOutput<SearchSchema>) {\n    const { query, maxResults = 10, resource = \"messages\" } = arg;\n\n    try {\n      const gmail = await this.getGmailClient();\n\n      const response = await gmail.users.messages.list({\n        userId: \"me\",\n        q: query,\n        maxResults,\n      });\n\n      const { data } = response;\n\n      if (!data) {\n        throw new Error(\"No data returned from Gmail\");\n      }\n\n      const { messages } = data;\n\n      if (!messages) {\n        throw new Error(\"No messages returned from Gmail\");\n      }\n\n      if (resource === \"messages\") {\n        const parsedMessages = await this.parseMessages(gmail, messages);\n        return `Result for the query ${query}:\\n${JSON.stringify(\n          parsedMessages\n        )}`;\n      } else if (resource === \"threads\") {\n        const parsedThreads = await this.parseThreads(gmail, messages);\n        return `Result for the query ${query}:\\n${JSON.stringify(\n          parsedThreads\n        )}`;\n      }\n\n      throw new Error(`Invalid resource: ${resource}`);\n    } catch (error) {\n      throw new Error(`Error while searching Gmail: ${error}`);\n    }\n  }\n\n  async parseMessages(\n    gmail: gmail_v1.Gmail,\n    messages: gmail_v1.Schema$Message[]\n  ): Promise<gmail_v1.Schema$Message[]> {\n    const parsedMessages = await Promise.all(\n      messages.map(async (message) => {\n        try {\n          const { data } = await gmail.users.messages.get({\n            userId: \"me\",\n            format: \"full\",\n            id: message.id ?? \"\",\n          });\n\n          const { payload } = data;\n\n          const { subject, sender, body } = this.parseHeaderAndBody(payload);\n\n          return {\n            id: message.id,\n            threadId: message.threadId,\n            snippet: data.snippet,\n            body,\n            subject,\n            sender,\n          };\n        } catch (error) {\n          throw new Error(`Error while fetching message: ${error}`);\n        }\n      })\n    );\n    return parsedMessages;\n  }\n\n  async parseThreads(\n    gmail: gmail_v1.Gmail,\n    messages: gmail_v1.Schema$Message[]\n  ): Promise<gmail_v1.Schema$Thread[]> {\n    const parsedThreads = await Promise.all(\n      messages.map(async (message) => {\n        try {\n          const {\n            data: { messages },\n          } = await gmail.users.threads.get({\n            userId: \"me\",\n            format: \"full\",\n            id: message.threadId ?? \"\",\n          });\n\n          const { subject, sender, body } = this.parseHeaderAndBody(\n            messages?.[0]?.payload\n          );\n\n          return {\n            id: message.threadId,\n            snippet: messages?.[0]?.snippet,\n            body,\n            subject,\n            sender,\n          };\n        } catch (error) {\n          throw new Error(`Error while fetching thread: ${error}`);\n        }\n      })\n    );\n    return parsedThreads;\n  }\n}\n"],"mappings":";;;;;AAMA,MAAM,eAAeA,OAAAA,EAAE,OAAO;CAC5B,OAAOA,OAAAA,EAAE,QAAQ;CACjB,YAAYA,OAAAA,EAAE,QAAQ,CAAC,UAAU;CACjC,UAAUA,OAAAA,EAAE,KAAK,CAAC,YAAY,UAAU,CAAC,CAAC,UAAU;CACrD,CAAC;AAGF,IAAa,cAAb,cAAiCC,aAAAA,cAAc;CAC7C,OAAO;CAEP,SAAS;CAET,cAAcC,qBAAAA;CAEd,YAAY,QAA8B;AACxC,QAAM,OAAO;;CAGf,MAAM,MAAM,KAA0C;EACpD,MAAM,EAAE,OAAO,aAAa,IAAI,WAAW,eAAe;AAE1D,MAAI;GACF,MAAM,QAAQ,MAAM,KAAK,gBAAgB;GAQzC,MAAM,EAAE,SANS,MAAM,MAAM,MAAM,SAAS,KAAK;IAC/C,QAAQ;IACR,GAAG;IACH;IACD,CAAC;AAIF,OAAI,CAAC,KACH,OAAM,IAAI,MAAM,8BAA8B;GAGhD,MAAM,EAAE,aAAa;AAErB,OAAI,CAAC,SACH,OAAM,IAAI,MAAM,kCAAkC;AAGpD,OAAI,aAAa,YAAY;IAC3B,MAAM,iBAAiB,MAAM,KAAK,cAAc,OAAO,SAAS;AAChE,WAAO,wBAAwB,MAAM,KAAK,KAAK,UAC7C,eACD;cACQ,aAAa,WAAW;IACjC,MAAM,gBAAgB,MAAM,KAAK,aAAa,OAAO,SAAS;AAC9D,WAAO,wBAAwB,MAAM,KAAK,KAAK,UAC7C,cACD;;AAGH,SAAM,IAAI,MAAM,qBAAqB,WAAW;WACzC,OAAO;AACd,SAAM,IAAI,MAAM,gCAAgC,QAAQ;;;CAI5D,MAAM,cACJ,OACA,UACoC;AA2BpC,SA1BuB,MAAM,QAAQ,IACnC,SAAS,IAAI,OAAO,YAAY;AAC9B,OAAI;IACF,MAAM,EAAE,SAAS,MAAM,MAAM,MAAM,SAAS,IAAI;KAC9C,QAAQ;KACR,QAAQ;KACR,IAAI,QAAQ,MAAM;KACnB,CAAC;IAEF,MAAM,EAAE,YAAY;IAEpB,MAAM,EAAE,SAAS,QAAQ,SAAS,KAAK,mBAAmB,QAAQ;AAElE,WAAO;KACL,IAAI,QAAQ;KACZ,UAAU,QAAQ;KAClB,SAAS,KAAK;KACd;KACA;KACA;KACD;YACM,OAAO;AACd,UAAM,IAAI,MAAM,iCAAiC,QAAQ;;IAE3D,CACH;;CAIH,MAAM,aACJ,OACA,UACmC;AA4BnC,SA3BsB,MAAM,QAAQ,IAClC,SAAS,IAAI,OAAO,YAAY;AAC9B,OAAI;IACF,MAAM,EACJ,MAAM,EAAE,eACN,MAAM,MAAM,MAAM,QAAQ,IAAI;KAChC,QAAQ;KACR,QAAQ;KACR,IAAI,QAAQ,YAAY;KACzB,CAAC;IAEF,MAAM,EAAE,SAAS,QAAQ,SAAS,KAAK,mBACrC,WAAW,IAAI,QAChB;AAED,WAAO;KACL,IAAI,QAAQ;KACZ,SAAS,WAAW,IAAI;KACxB;KACA;KACA;KACD;YACM,OAAO;AACd,UAAM,IAAI,MAAM,gCAAgC,QAAQ;;IAE1D,CACH"}