UNPKG

@langchain/community

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