UNPKG

@langchain/community

Version:
1 lines 5.52 kB
{"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"}