{"version":3,"file":"base.cjs","names":["Tool","auth","google","input: string"],"sources":["../../../src/tools/google_calendar/base.ts"],"sourcesContent":["import { google, calendar_v3 } from \"googleapis\";\nimport { Tool } from \"@langchain/core/tools\";\nimport { getEnvironmentVariable } from \"@langchain/core/utils/env\";\nimport { BaseLanguageModel } from \"@langchain/core/language_models/base\";\n\nexport interface GoogleCalendarAgentParams {\n  credentials?: {\n    clientEmail?: string;\n    privateKey?: string;\n    keyfile?: string;\n    subject?: string;\n    accessToken?: string | (() => Promise<string>);\n    calendarId?: string;\n  };\n  scopes?: string[];\n  model?: BaseLanguageModel;\n}\n\nexport class GoogleCalendarBase extends Tool {\n  name = \"Google Calendar\";\n\n  description =\n    \"A tool to lookup Google Calendar events and create events in Google Calendar\";\n\n  protected calendarId: string;\n\n  protected llm: BaseLanguageModel;\n\n  protected params: GoogleCalendarAgentParams;\n\n  protected calendar?: calendar_v3.Calendar;\n\n  constructor(\n    { credentials, scopes, model }: GoogleCalendarAgentParams = {\n      credentials: {\n        clientEmail: getEnvironmentVariable(\"GOOGLE_CALENDAR_CLIENT_EMAIL\"),\n        privateKey: getEnvironmentVariable(\"GOOGLE_CALENDAR_PRIVATE_KEY\"),\n        keyfile: getEnvironmentVariable(\"GOOGLE_CALENDAR_KEYFILE\"),\n        subject: getEnvironmentVariable(\"GOOGLE_CALENDAR_SUBJECT\"),\n        calendarId:\n          getEnvironmentVariable(\"GOOGLE_CALENDAR_CALENDAR_ID\") || \"primary\",\n      },\n      scopes: [\n        \"https://www.googleapis.com/auth/calendar\",\n        \"https://www.googleapis.com/auth/calendar.events\",\n      ],\n    }\n  ) {\n    super(...arguments);\n\n    if (!model) {\n      throw new Error(\"Missing llm instance to interact with Google Calendar\");\n    }\n\n    if (!credentials) {\n      throw new Error(\"Missing credentials to authenticate to Google Calendar\");\n    }\n\n    if (!credentials.accessToken) {\n      if (!credentials.clientEmail) {\n        throw new Error(\n          \"Missing GOOGLE_CALENDAR_CLIENT_EMAIL to interact with Google Calendar\"\n        );\n      }\n\n      if (!credentials.privateKey && !credentials.keyfile) {\n        throw new Error(\n          \"Missing GOOGLE_CALENDAR_PRIVATE_KEY or GOOGLE_CALENDAR_KEYFILE or accessToken to interact with Google Calendar\"\n        );\n      }\n    }\n\n    if (!credentials.calendarId) {\n      throw new Error(\n        \"Missing GOOGLE_CALENDAR_CALENDAR_ID to interact with Google Calendar\"\n      );\n    }\n\n    this.params = { credentials, scopes };\n    this.calendarId = credentials.calendarId;\n    this.llm = model;\n  }\n\n  getModel() {\n    return this.llm;\n  }\n\n  async getCalendarClient() {\n    const { credentials, scopes } = this.params;\n\n    if (credentials?.accessToken) {\n      // always return a new instance so that we don't end up using expired access tokens\n      const auth = new google.auth.OAuth2();\n      const accessToken =\n        typeof credentials.accessToken === \"function\"\n          ? await credentials.accessToken()\n          : credentials.accessToken;\n\n      auth.setCredentials({\n        // get fresh access token if a function is provided\n        access_token: accessToken,\n      });\n      return google.calendar({ version: \"v3\", auth });\n    }\n\n    // when not using access token its ok to use singleton instance\n    if (this.calendar) {\n      return this.calendar;\n    }\n\n    const auth = new google.auth.JWT(\n      credentials?.clientEmail,\n      credentials?.keyfile,\n      credentials?.privateKey,\n      scopes,\n      credentials?.subject\n    );\n\n    this.calendar = google.calendar({ version: \"v3\", auth });\n    return this.calendar;\n  }\n\n  async _call(input: string) {\n    return input;\n  }\n}\n"],"mappings":";;;;;;AAkBA,IAAa,qBAAb,cAAwCA,4BAAK;CAC3C,OAAO;CAEP,cACE;CAEF,AAAU;CAEV,AAAU;CAEV,AAAU;CAEV,AAAU;CAEV,YACE,EAAE,aAAa,QAAQ,OAAkC,GAAG;EAC1D,aAAa;GACX,oEAAoC,+BAA+B;GACnE,mEAAmC,8BAA8B;GACjE,gEAAgC,0BAA0B;GAC1D,gEAAgC,0BAA0B;GAC1D,mEACyB,8BAA8B,IAAI;EAC5D;EACD,QAAQ,CACN,4CACA,iDACD;CACF,GACD;EACA,MAAM,GAAG,UAAU;AAEnB,MAAI,CAAC,MACH,OAAM,IAAI,MAAM;AAGlB,MAAI,CAAC,YACH,OAAM,IAAI,MAAM;AAGlB,MAAI,CAAC,YAAY,aAAa;AAC5B,OAAI,CAAC,YAAY,YACf,OAAM,IAAI,MACR;AAIJ,OAAI,CAAC,YAAY,cAAc,CAAC,YAAY,QAC1C,OAAM,IAAI,MACR;EAGL;AAED,MAAI,CAAC,YAAY,WACf,OAAM,IAAI,MACR;EAIJ,KAAK,SAAS;GAAE;GAAa;EAAQ;EACrC,KAAK,aAAa,YAAY;EAC9B,KAAK,MAAM;CACZ;CAED,WAAW;AACT,SAAO,KAAK;CACb;CAED,MAAM,oBAAoB;EACxB,MAAM,EAAE,aAAa,QAAQ,GAAG,KAAK;AAErC,MAAI,aAAa,aAAa;GAE5B,MAAMC,SAAO,IAAIC,kBAAO,KAAK;GAC7B,MAAM,cACJ,OAAO,YAAY,gBAAgB,aAC/B,MAAM,YAAY,aAAa,GAC/B,YAAY;GAElBD,OAAK,eAAe,EAElB,cAAc,YACf,EAAC;AACF,UAAOC,kBAAO,SAAS;IAAE,SAAS;IAAM;GAAM,EAAC;EAChD;AAGD,MAAI,KAAK,SACP,QAAO,KAAK;EAGd,MAAM,OAAO,IAAIA,kBAAO,KAAK,IAC3B,aAAa,aACb,aAAa,SACb,aAAa,YACb,QACA,aAAa;EAGf,KAAK,WAAWA,kBAAO,SAAS;GAAE,SAAS;GAAM;EAAM,EAAC;AACxD,SAAO,KAAK;CACb;CAED,MAAM,MAAMC,OAAe;AACzB,SAAO;CACR;AACF"}