{"version":3,"file":"search.cjs","names":["z","GmailBaseTool","SEARCH_DESCRIPTION","fields?: GmailBaseToolParams","arg: InferInteropZodOutput<SearchSchema>","gmail: gmail_v1.Gmail","messages: gmail_v1.Schema$Message[]","messages"],"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,SAAE,OAAO;CAC5B,OAAOA,SAAE,QAAQ;CACjB,YAAYA,SAAE,QAAQ,CAAC,UAAU;CACjC,UAAUA,SAAE,KAAK,CAAC,YAAY,SAAU,EAAC,CAAC,UAAU;AACrD,EAAC;AAGF,IAAa,cAAb,cAAiCC,2BAAc;CAC7C,OAAO;CAEP,SAAS;CAET,cAAcC;CAEd,YAAYC,QAA8B;EACxC,MAAM,OAAO;CACd;CAED,MAAM,MAAMC,KAA0C;EACpD,MAAM,EAAE,OAAO,aAAa,IAAI,WAAW,YAAY,GAAG;AAE1D,MAAI;GACF,MAAM,QAAQ,MAAM,KAAK,gBAAgB;GAEzC,MAAM,WAAW,MAAM,MAAM,MAAM,SAAS,KAAK;IAC/C,QAAQ;IACR,GAAG;IACH;GACD,EAAC;GAEF,MAAM,EAAE,MAAM,GAAG;AAEjB,OAAI,CAAC,KACH,OAAM,IAAI,MAAM;GAGlB,MAAM,EAAE,UAAU,GAAG;AAErB,OAAI,CAAC,SACH,OAAM,IAAI,MAAM;AAGlB,OAAI,aAAa,YAAY;IAC3B,MAAM,iBAAiB,MAAM,KAAK,cAAc,OAAO,SAAS;AAChE,WAAO,CAAC,qBAAqB,EAAE,MAAM,GAAG,EAAE,KAAK,UAC7C,eACD,EAAE;GACJ,WAAU,aAAa,WAAW;IACjC,MAAM,gBAAgB,MAAM,KAAK,aAAa,OAAO,SAAS;AAC9D,WAAO,CAAC,qBAAqB,EAAE,MAAM,GAAG,EAAE,KAAK,UAC7C,cACD,EAAE;GACJ;AAED,SAAM,IAAI,MAAM,CAAC,kBAAkB,EAAE,UAAU;EAChD,SAAQ,OAAO;AACd,SAAM,IAAI,MAAM,CAAC,6BAA6B,EAAE,OAAO;EACxD;CACF;CAED,MAAM,cACJC,OACAC,UACoC;EACpC,MAAM,iBAAiB,MAAM,QAAQ,IACnC,SAAS,IAAI,OAAO,YAAY;AAC9B,OAAI;IACF,MAAM,EAAE,MAAM,GAAG,MAAM,MAAM,MAAM,SAAS,IAAI;KAC9C,QAAQ;KACR,QAAQ;KACR,IAAI,QAAQ,MAAM;IACnB,EAAC;IAEF,MAAM,EAAE,SAAS,GAAG;IAEpB,MAAM,EAAE,SAAS,QAAQ,MAAM,GAAG,KAAK,mBAAmB,QAAQ;AAElE,WAAO;KACL,IAAI,QAAQ;KACZ,UAAU,QAAQ;KAClB,SAAS,KAAK;KACd;KACA;KACA;IACD;GACF,SAAQ,OAAO;AACd,UAAM,IAAI,MAAM,CAAC,8BAA8B,EAAE,OAAO;GACzD;EACF,EAAC,CACH;AACD,SAAO;CACR;CAED,MAAM,aACJD,OACAC,UACmC;EACnC,MAAM,gBAAgB,MAAM,QAAQ,IAClC,SAAS,IAAI,OAAO,YAAY;AAC9B,OAAI;IACF,MAAM,EACJ,MAAM,EAAE,sBAAU,EACnB,GAAG,MAAM,MAAM,MAAM,QAAQ,IAAI;KAChC,QAAQ;KACR,QAAQ;KACR,IAAI,QAAQ,YAAY;IACzB,EAAC;IAEF,MAAM,EAAE,SAAS,QAAQ,MAAM,GAAG,KAAK,mBACrCC,aAAW,IAAI,QAChB;AAED,WAAO;KACL,IAAI,QAAQ;KACZ,SAASA,aAAW,IAAI;KACxB;KACA;KACA;IACD;GACF,SAAQ,OAAO;AACd,UAAM,IAAI,MAAM,CAAC,6BAA6B,EAAE,OAAO;GACxD;EACF,EAAC,CACH;AACD,SAAO;CACR;AACF"}