{"version":3,"file":"base.cjs","names":["Tool","google"],"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,sBAAAA,KAAK;CAC3C,OAAO;CAEP,cACE;CAEF;CAEA;CAEA;CAEA;CAEA,YACE,EAAE,aAAa,QAAQ,UAAqC;EAC1D,aAAa;GACX,cAAA,GAAA,0BAAA,wBAAoC,+BAA+B;GACnE,aAAA,GAAA,0BAAA,wBAAmC,8BAA8B;GACjE,UAAA,GAAA,0BAAA,wBAAgC,0BAA0B;GAC1D,UAAA,GAAA,0BAAA,wBAAgC,0BAA0B;GAC1D,aAAA,GAAA,0BAAA,wBACyB,8BAA8B,IAAI;GAC5D;EACD,QAAQ,CACN,4CACA,kDACD;EACF,EACD;AACA,QAAM,GAAG,UAAU;AAEnB,MAAI,CAAC,MACH,OAAM,IAAI,MAAM,wDAAwD;AAG1E,MAAI,CAAC,YACH,OAAM,IAAI,MAAM,yDAAyD;AAG3E,MAAI,CAAC,YAAY,aAAa;AAC5B,OAAI,CAAC,YAAY,YACf,OAAM,IAAI,MACR,wEACD;AAGH,OAAI,CAAC,YAAY,cAAc,CAAC,YAAY,QAC1C,OAAM,IAAI,MACR,iHACD;;AAIL,MAAI,CAAC,YAAY,WACf,OAAM,IAAI,MACR,uEACD;AAGH,OAAK,SAAS;GAAE;GAAa;GAAQ;AACrC,OAAK,aAAa,YAAY;AAC9B,OAAK,MAAM;;CAGb,WAAW;AACT,SAAO,KAAK;;CAGd,MAAM,oBAAoB;EACxB,MAAM,EAAE,aAAa,WAAW,KAAK;AAErC,MAAI,aAAa,aAAa;GAE5B,MAAM,OAAO,IAAIC,WAAAA,OAAO,KAAK,QAAQ;GACrC,MAAM,cACJ,OAAO,YAAY,gBAAgB,aAC/B,MAAM,YAAY,aAAa,GAC/B,YAAY;AAElB,QAAK,eAAe,EAElB,cAAc,aACf,CAAC;AACF,UAAOA,WAAAA,OAAO,SAAS;IAAE,SAAS;IAAM;IAAM,CAAC;;AAIjD,MAAI,KAAK,SACP,QAAO,KAAK;EAGd,MAAM,OAAO,IAAIA,WAAAA,OAAO,KAAK,IAC3B,aAAa,aACb,aAAa,SACb,aAAa,YACb,QACA,aAAa,QACd;AAED,OAAK,WAAWA,WAAAA,OAAO,SAAS;GAAE,SAAS;GAAM;GAAM,CAAC;AACxD,SAAO,KAAK;;CAGd,MAAM,MAAM,OAAe;AACzB,SAAO"}