@elizaos/plugin-google 2.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/README.md +22 -0
  2. package/dist/auth.d.ts +9 -0
  3. package/dist/auth.d.ts.map +1 -0
  4. package/dist/auth.js +45 -0
  5. package/dist/auth.js.map +1 -0
  6. package/dist/calendar.d.ts +26 -0
  7. package/dist/calendar.d.ts.map +1 -0
  8. package/dist/calendar.js +237 -0
  9. package/dist/calendar.js.map +1 -0
  10. package/dist/client-factory.d.ts +17 -0
  11. package/dist/client-factory.d.ts.map +1 -0
  12. package/dist/client-factory.js +66 -0
  13. package/dist/client-factory.js.map +1 -0
  14. package/dist/connector-account-provider.d.ts +23 -0
  15. package/dist/connector-account-provider.d.ts.map +1 -0
  16. package/dist/connector-account-provider.js +348 -0
  17. package/dist/connector-account-provider.js.map +1 -0
  18. package/dist/connector-credential-refs.d.ts +43 -0
  19. package/dist/connector-credential-refs.d.ts.map +1 -0
  20. package/dist/connector-credential-refs.js +252 -0
  21. package/dist/connector-credential-refs.js.map +1 -0
  22. package/dist/credential-resolver.d.ts +45 -0
  23. package/dist/credential-resolver.d.ts.map +1 -0
  24. package/dist/credential-resolver.js +525 -0
  25. package/dist/credential-resolver.js.map +1 -0
  26. package/dist/drive.d.ts +41 -0
  27. package/dist/drive.d.ts.map +1 -0
  28. package/dist/drive.js +207 -0
  29. package/dist/drive.js.map +1 -0
  30. package/dist/gmail.d.ts +89 -0
  31. package/dist/gmail.d.ts.map +1 -0
  32. package/dist/gmail.js +765 -0
  33. package/dist/gmail.js.map +1 -0
  34. package/dist/index.d.ts +16 -0
  35. package/dist/index.d.ts.map +1 -0
  36. package/dist/index.js +46 -0
  37. package/dist/index.js.map +1 -0
  38. package/dist/meet.d.ts +61 -0
  39. package/dist/meet.d.ts.map +1 -0
  40. package/dist/meet.js +329 -0
  41. package/dist/meet.js.map +1 -0
  42. package/dist/scopes.d.ts +59 -0
  43. package/dist/scopes.d.ts.map +1 -0
  44. package/dist/scopes.js +142 -0
  45. package/dist/scopes.js.map +1 -0
  46. package/dist/service.d.ts +165 -0
  47. package/dist/service.d.ts.map +1 -0
  48. package/dist/service.js +170 -0
  49. package/dist/service.js.map +1 -0
  50. package/dist/types.d.ts +492 -0
  51. package/dist/types.d.ts.map +1 -0
  52. package/dist/types.js +9 -0
  53. package/dist/types.js.map +1 -0
  54. package/package.json +72 -0
package/README.md ADDED
@@ -0,0 +1,22 @@
1
+ # Google Plugin
2
+
3
+ Workspace Google integration for ElizaOS.
4
+
5
+ This plugin is the home for Gmail, Google Calendar, Google Drive, and Google Meet capability
6
+ services under one selected-scope OAuth grant. It intentionally does not include Google Chat;
7
+ `@elizaos/plugin-google-chat` remains the bot connector for Google Chat spaces.
8
+
9
+ The implementation is account-scoped: every capability method starts with `accountId`, and OAuth
10
+ scopes are derived from selected capabilities instead of requesting all Google Workspace scopes.
11
+ Credential persistence is intentionally out of scope. The default
12
+ `DefaultGoogleCredentialResolver` reads from the shared connector account manager/storage and
13
+ credential vault services when the host provides them; consumers can still inject a
14
+ `GoogleCredentialResolver` for tests or custom hosts.
15
+
16
+ Current capability modules:
17
+
18
+ - Gmail: search, get, and send messages.
19
+ - Calendar: list and create events, including optional Meet links.
20
+ - Drive: search and read file metadata.
21
+ - Meet: create spaces, read spaces/conference records/participants/transcripts/recordings, end an
22
+ active conference, and generate a structured report from Meet artifacts.
package/dist/auth.d.ts ADDED
@@ -0,0 +1,9 @@
1
+ import { type GoogleCapability } from "./scopes.js";
2
+ import { type GoogleAuthResolutionRequest, type GoogleCredentialResolver, type GoogleOAuthProviderConfig, type GoogleOAuthProviderMetadata } from "./types.js";
3
+ export declare const GOOGLE_OAUTH_PROVIDER_METADATA: GoogleOAuthProviderMetadata;
4
+ export declare function getGoogleOAuthProviderMetadata(): GoogleOAuthProviderMetadata;
5
+ export declare function getGoogleOAuthProviderConfig(capabilities: readonly GoogleCapability[]): GoogleOAuthProviderConfig;
6
+ export declare class MissingGoogleCredentialResolver implements GoogleCredentialResolver {
7
+ getAuthClient(request: GoogleAuthResolutionRequest): Promise<never>;
8
+ }
9
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,gBAAgB,EAGtB,MAAM,aAAa,CAAC;AACrB,OAAO,EAEL,KAAK,2BAA2B,EAChC,KAAK,wBAAwB,EAC7B,KAAK,yBAAyB,EAC9B,KAAK,2BAA2B,EACjC,MAAM,YAAY,CAAC;AAEpB,eAAO,MAAM,8BAA8B,EAAE,2BAe5C,CAAC;AAEF,wBAAgB,8BAA8B,IAAI,2BAA2B,CAE5E;AAED,wBAAgB,4BAA4B,CAC1C,YAAY,EAAE,SAAS,gBAAgB,EAAE,GACxC,yBAAyB,CAe3B;AAED,qBAAa,+BAAgC,YAAW,wBAAwB;IACxE,aAAa,CAAC,OAAO,EAAE,2BAA2B,GAAG,OAAO,CAAC,KAAK,CAAC;CAQ1E"}
package/dist/auth.js ADDED
@@ -0,0 +1,45 @@
1
+ import { GOOGLE_CAPABILITIES, GOOGLE_IDENTITY_SCOPES, normalizeGoogleCapabilities, scopesForGoogleCapabilities, } from "./scopes.js";
2
+ import { GOOGLE_SERVICE_NAME, } from "./types.js";
3
+ export const GOOGLE_OAUTH_PROVIDER_METADATA = {
4
+ provider: GOOGLE_SERVICE_NAME,
5
+ label: "Google Workspace",
6
+ authorizationEndpoint: "https://accounts.google.com/o/oauth2/v2/auth",
7
+ tokenEndpoint: "https://oauth2.googleapis.com/token",
8
+ revokeEndpoint: "https://oauth2.googleapis.com/revoke",
9
+ clientIdSetting: "GOOGLE_CLIENT_ID",
10
+ clientSecretSetting: "GOOGLE_CLIENT_SECRET",
11
+ redirectUriSetting: "GOOGLE_REDIRECT_URI",
12
+ responseType: "code",
13
+ accessType: "offline",
14
+ prompt: "consent",
15
+ supportsPkce: true,
16
+ identityScopes: GOOGLE_IDENTITY_SCOPES,
17
+ capabilities: GOOGLE_CAPABILITIES,
18
+ };
19
+ export function getGoogleOAuthProviderMetadata() {
20
+ return GOOGLE_OAUTH_PROVIDER_METADATA;
21
+ }
22
+ export function getGoogleOAuthProviderConfig(capabilities) {
23
+ const normalized = normalizeGoogleCapabilities(capabilities);
24
+ return {
25
+ provider: GOOGLE_SERVICE_NAME,
26
+ authUrl: GOOGLE_OAUTH_PROVIDER_METADATA.authorizationEndpoint,
27
+ tokenUrl: GOOGLE_OAUTH_PROVIDER_METADATA.tokenEndpoint,
28
+ capabilities: normalized,
29
+ scopes: scopesForGoogleCapabilities(normalized),
30
+ authorizationParams: {
31
+ access_type: "offline",
32
+ prompt: "consent",
33
+ include_granted_scopes: "true",
34
+ },
35
+ };
36
+ }
37
+ export class MissingGoogleCredentialResolver {
38
+ async getAuthClient(request) {
39
+ throw new Error(`Google auth client for account ${request.accountId} is not available. ` +
40
+ `Requested capabilities: ${request.capabilities.join(", ") || "identity"}; ` +
41
+ `scopes: ${request.scopes.join(" ") || "none"}. ` +
42
+ "Inject a GoogleCredentialResolver backed by the shared connector account OAuth store.");
43
+ }
44
+ }
45
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EAEtB,2BAA2B,EAC3B,2BAA2B,GAC5B,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,mBAAmB,GAKpB,MAAM,YAAY,CAAC;AAEpB,MAAM,CAAC,MAAM,8BAA8B,GAAgC;IACzE,QAAQ,EAAE,mBAAmB;IAC7B,KAAK,EAAE,kBAAkB;IACzB,qBAAqB,EAAE,8CAA8C;IACrE,aAAa,EAAE,qCAAqC;IACpD,cAAc,EAAE,sCAAsC;IACtD,eAAe,EAAE,kBAAkB;IACnC,mBAAmB,EAAE,sBAAsB;IAC3C,kBAAkB,EAAE,qBAAqB;IACzC,YAAY,EAAE,MAAM;IACpB,UAAU,EAAE,SAAS;IACrB,MAAM,EAAE,SAAS;IACjB,YAAY,EAAE,IAAI;IAClB,cAAc,EAAE,sBAAsB;IACtC,YAAY,EAAE,mBAAmB;CAClC,CAAC;AAEF,MAAM,UAAU,8BAA8B;IAC5C,OAAO,8BAA8B,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,4BAA4B,CAC1C,YAAyC;IAEzC,MAAM,UAAU,GAAG,2BAA2B,CAAC,YAAY,CAAC,CAAC;IAE7D,OAAO;QACL,QAAQ,EAAE,mBAAmB;QAC7B,OAAO,EAAE,8BAA8B,CAAC,qBAAqB;QAC7D,QAAQ,EAAE,8BAA8B,CAAC,aAAa;QACtD,YAAY,EAAE,UAAU;QACxB,MAAM,EAAE,2BAA2B,CAAC,UAAU,CAAC;QAC/C,mBAAmB,EAAE;YACnB,WAAW,EAAE,SAAS;YACtB,MAAM,EAAE,SAAS;YACjB,sBAAsB,EAAE,MAAM;SAC/B;KACF,CAAC;AACJ,CAAC;AAED,MAAM,OAAO,+BAA+B;IAC1C,KAAK,CAAC,aAAa,CAAC,OAAoC;QACtD,MAAM,IAAI,KAAK,CACb,kCAAkC,OAAO,CAAC,SAAS,qBAAqB;YACtE,2BAA2B,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,UAAU,IAAI;YAC5E,WAAW,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,MAAM,IAAI;YACjD,uFAAuF,CAC1F,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,26 @@
1
+ import type { GoogleApiClientFactory } from "./client-factory.js";
2
+ import type { GoogleAccountRef, GoogleCalendarEvent, GoogleCalendarEventInput, GoogleCalendarEventPatchInput, GoogleCalendarListEntry } from "./types.js";
3
+ export declare class GoogleCalendarClient {
4
+ private readonly clientFactory;
5
+ constructor(clientFactory: GoogleApiClientFactory);
6
+ listCalendars(params: GoogleAccountRef): Promise<GoogleCalendarListEntry[]>;
7
+ listEvents(params: GoogleAccountRef & {
8
+ calendarId?: string;
9
+ timeMin?: string;
10
+ timeMax?: string;
11
+ limit?: number;
12
+ timeZone?: string;
13
+ }): Promise<GoogleCalendarEvent[]>;
14
+ getEvent(params: GoogleAccountRef & {
15
+ calendarId?: string;
16
+ eventId: string;
17
+ timeZone?: string;
18
+ }): Promise<GoogleCalendarEvent>;
19
+ createEvent(params: GoogleCalendarEventInput): Promise<GoogleCalendarEvent>;
20
+ updateEvent(params: GoogleCalendarEventPatchInput): Promise<GoogleCalendarEvent>;
21
+ deleteEvent(params: GoogleAccountRef & {
22
+ calendarId?: string;
23
+ eventId: string;
24
+ }): Promise<void>;
25
+ }
26
+ //# sourceMappingURL=calendar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calendar.d.ts","sourceRoot":"","sources":["../src/calendar.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,KAAK,EACV,gBAAgB,EAChB,mBAAmB,EACnB,wBAAwB,EACxB,6BAA6B,EAC7B,uBAAuB,EAExB,MAAM,YAAY,CAAC;AAEpB,qBAAa,oBAAoB;IACnB,OAAO,CAAC,QAAQ,CAAC,aAAa;gBAAb,aAAa,EAAE,sBAAsB;IAE5D,aAAa,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,uBAAuB,EAAE,CAAC;IAkB3E,UAAU,CACd,MAAM,EAAE,gBAAgB,GAAG;QACzB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,GACA,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAoB3B,QAAQ,CACZ,MAAM,EAAE,gBAAgB,GAAG;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GACrF,OAAO,CAAC,mBAAmB,CAAC;IAczB,WAAW,CAAC,MAAM,EAAE,wBAAwB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IA+B3E,WAAW,CAAC,MAAM,EAAE,6BAA6B,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAsDhF,WAAW,CACf,MAAM,EAAE,gBAAgB,GAAG;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAClE,OAAO,CAAC,IAAI,CAAC;CAkBjB"}
@@ -0,0 +1,237 @@
1
+ import { randomUUID } from "node:crypto";
2
+ export class GoogleCalendarClient {
3
+ clientFactory;
4
+ constructor(clientFactory) {
5
+ this.clientFactory = clientFactory;
6
+ }
7
+ async listCalendars(params) {
8
+ const calendar = await this.clientFactory.calendar(params, ["calendar.read"], "calendar.listCalendars");
9
+ const response = await calendar.calendarList.list({
10
+ minAccessRole: "reader",
11
+ showDeleted: false,
12
+ showHidden: false,
13
+ });
14
+ return (response.data.items ?? [])
15
+ .filter((entry) => !entry.deleted && !entry.hidden)
16
+ .map(mapCalendarListEntry)
17
+ .filter((entry) => entry !== null);
18
+ }
19
+ async listEvents(params) {
20
+ const calendar = await this.clientFactory.calendar(params, ["calendar.read"], "calendar.listEvents");
21
+ const calendarId = params.calendarId ?? "primary";
22
+ const response = await calendar.events.list({
23
+ calendarId,
24
+ timeMin: params.timeMin,
25
+ timeMax: params.timeMax,
26
+ maxResults: params.limit ?? 25,
27
+ singleEvents: true,
28
+ orderBy: "startTime",
29
+ timeZone: params.timeZone,
30
+ });
31
+ return (response.data.items ?? []).map((event) => mapEvent(event, calendarId, params.timeZone));
32
+ }
33
+ async getEvent(params) {
34
+ const calendar = await this.clientFactory.calendar(params, ["calendar.read"], "calendar.getEvent");
35
+ const calendarId = params.calendarId ?? "primary";
36
+ const response = await calendar.events.get({
37
+ calendarId,
38
+ eventId: params.eventId,
39
+ });
40
+ return mapEvent(response.data, calendarId, params.timeZone);
41
+ }
42
+ async createEvent(params) {
43
+ const calendar = await this.clientFactory.calendar(params, ["calendar.write"], "calendar.createEvent");
44
+ const calendarId = params.calendarId ?? "primary";
45
+ const response = await calendar.events.insert({
46
+ calendarId,
47
+ conferenceDataVersion: params.createMeetLink ? 1 : undefined,
48
+ requestBody: {
49
+ summary: params.title,
50
+ description: params.description,
51
+ location: params.location,
52
+ start: toEventDateTime(params.start, params.timeZone),
53
+ end: toEventDateTime(params.end, params.timeZone),
54
+ attendees: params.attendees?.map(toCalendarAttendee),
55
+ conferenceData: params.createMeetLink
56
+ ? {
57
+ createRequest: {
58
+ requestId: randomUUID(),
59
+ conferenceSolutionKey: { type: "hangoutsMeet" },
60
+ },
61
+ }
62
+ : undefined,
63
+ },
64
+ });
65
+ return mapEvent(response.data, calendarId, params.timeZone);
66
+ }
67
+ async updateEvent(params) {
68
+ const calendar = await this.clientFactory.calendar(params, ["calendar.write"], "calendar.updateEvent");
69
+ const calendarId = params.calendarId ?? "primary";
70
+ const needsExistingEventContext = Boolean(params.start || params.end) && (!params.timeZone || !params.start || !params.end);
71
+ const existing = needsExistingEventContext
72
+ ? (await calendar.events.get({
73
+ calendarId,
74
+ eventId: params.eventId,
75
+ })).data
76
+ : null;
77
+ const effectiveTimeZone = params.timeZone ?? existing?.start?.timeZone ?? existing?.end?.timeZone ?? undefined;
78
+ const { start, end } = normalizePatchBounds({
79
+ start: params.start,
80
+ end: params.end,
81
+ existing,
82
+ });
83
+ const requestBody = {};
84
+ if (params.title !== undefined) {
85
+ requestBody.summary = params.title;
86
+ }
87
+ if (params.description !== undefined) {
88
+ requestBody.description = params.description;
89
+ }
90
+ if (params.location !== undefined) {
91
+ requestBody.location = params.location;
92
+ }
93
+ if (start !== undefined) {
94
+ requestBody.start = toEventDateTime(start, effectiveTimeZone);
95
+ }
96
+ if (end !== undefined) {
97
+ requestBody.end = toEventDateTime(end, effectiveTimeZone);
98
+ }
99
+ if (params.attendees !== undefined) {
100
+ requestBody.attendees = params.attendees.map(toCalendarAttendee);
101
+ }
102
+ const response = await calendar.events.patch({
103
+ calendarId,
104
+ eventId: params.eventId,
105
+ requestBody,
106
+ });
107
+ return mapEvent(response.data, calendarId, effectiveTimeZone);
108
+ }
109
+ async deleteEvent(params) {
110
+ const calendar = await this.clientFactory.calendar(params, ["calendar.write"], "calendar.deleteEvent");
111
+ try {
112
+ await calendar.events.delete({
113
+ calendarId: params.calendarId ?? "primary",
114
+ eventId: params.eventId,
115
+ });
116
+ }
117
+ catch (error) {
118
+ if (googleErrorStatus(error) === 410) {
119
+ return;
120
+ }
121
+ throw error;
122
+ }
123
+ }
124
+ }
125
+ function mapCalendarListEntry(entry) {
126
+ const calendarId = entry.id?.trim();
127
+ if (!calendarId) {
128
+ return null;
129
+ }
130
+ return {
131
+ calendarId,
132
+ summary: entry.summaryOverride?.trim() || entry.summary?.trim() || calendarId,
133
+ description: entry.description?.trim() || null,
134
+ primary: Boolean(entry.primary),
135
+ accessRole: entry.accessRole?.trim() || "reader",
136
+ backgroundColor: entry.backgroundColor?.trim() || null,
137
+ foregroundColor: entry.foregroundColor?.trim() || null,
138
+ timeZone: entry.timeZone?.trim() || null,
139
+ selected: entry.selected !== false,
140
+ };
141
+ }
142
+ function mapEvent(event, calendarId, fallbackTimeZone) {
143
+ const start = readEventInstant(event.start, fallbackTimeZone);
144
+ const end = readEventInstant(event.end, start?.timeZone ?? fallbackTimeZone);
145
+ return {
146
+ id: event.id ?? "",
147
+ calendarId,
148
+ title: event.summary ?? undefined,
149
+ status: event.status ?? undefined,
150
+ start: start?.iso ?? event.start?.dateTime ?? event.start?.date ?? undefined,
151
+ end: end?.iso ?? event.end?.dateTime ?? event.end?.date ?? undefined,
152
+ isAllDay: start?.isAllDay,
153
+ timeZone: start?.timeZone ?? end?.timeZone ?? null,
154
+ htmlLink: event.htmlLink ?? undefined,
155
+ meetLink: event.hangoutLink ?? event.conferenceData?.entryPoints?.[0]?.uri ?? undefined,
156
+ attendees: event.attendees?.map((attendee) => ({
157
+ email: attendee.email ?? "",
158
+ name: attendee.displayName ?? undefined,
159
+ })),
160
+ location: event.location ?? undefined,
161
+ description: event.description ?? undefined,
162
+ organizer: event.organizer
163
+ ? {
164
+ email: event.organizer.email ?? "",
165
+ name: event.organizer.displayName ?? undefined,
166
+ self: Boolean(event.organizer.self),
167
+ }
168
+ : undefined,
169
+ metadata: {
170
+ iCalUID: event.iCalUID ?? null,
171
+ recurringEventId: event.recurringEventId ?? null,
172
+ createdAt: event.created ?? null,
173
+ updatedAt: event.updated ?? null,
174
+ },
175
+ };
176
+ }
177
+ function eventDateValue(value) {
178
+ return value?.dateTime ?? value?.date ?? undefined;
179
+ }
180
+ function readEventInstant(value, fallbackTimeZone) {
181
+ if (!value) {
182
+ return null;
183
+ }
184
+ if (typeof value.dateTime === "string" && value.dateTime.trim().length > 0) {
185
+ return {
186
+ iso: new Date(value.dateTime).toISOString(),
187
+ isAllDay: false,
188
+ timeZone: value.timeZone?.trim() || null,
189
+ };
190
+ }
191
+ if (typeof value.date === "string" && value.date.trim().length > 0) {
192
+ const iso = new Date(`${value.date}T00:00:00.000Z`).toISOString();
193
+ return {
194
+ iso,
195
+ isAllDay: true,
196
+ timeZone: value.timeZone?.trim() || fallbackTimeZone?.trim() || null,
197
+ };
198
+ }
199
+ return null;
200
+ }
201
+ function normalizePatchBounds(params) {
202
+ let start = params.start;
203
+ let end = params.end;
204
+ if (!params.existing || Boolean(start) === Boolean(end)) {
205
+ return { start, end };
206
+ }
207
+ const existingStart = eventDateValue(params.existing.start);
208
+ const existingEnd = eventDateValue(params.existing.end);
209
+ const existingDurationMs = existingStart && existingEnd ? Date.parse(existingEnd) - Date.parse(existingStart) : Number.NaN;
210
+ const fallbackDurationMs = Number.isFinite(existingDurationMs) && existingDurationMs > 0
211
+ ? existingDurationMs
212
+ : 60 * 60 * 1000;
213
+ if (start && !end) {
214
+ end = new Date(new Date(start).getTime() + fallbackDurationMs).toISOString();
215
+ }
216
+ else if (end && !start) {
217
+ start = new Date(new Date(end).getTime() - fallbackDurationMs).toISOString();
218
+ }
219
+ return { start, end };
220
+ }
221
+ function toEventDateTime(value, timeZone) {
222
+ if (/^\d{4}-\d{2}-\d{2}$/.test(value)) {
223
+ return { date: value, timeZone };
224
+ }
225
+ return { dateTime: value, timeZone };
226
+ }
227
+ function toCalendarAttendee(address) {
228
+ return {
229
+ email: address.email,
230
+ displayName: address.name,
231
+ };
232
+ }
233
+ function googleErrorStatus(error) {
234
+ const candidate = error;
235
+ return candidate.response?.status ?? candidate.status ?? candidate.code;
236
+ }
237
+ //# sourceMappingURL=calendar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calendar.js","sourceRoot":"","sources":["../src/calendar.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAYzC,MAAM,OAAO,oBAAoB;IACF;IAA7B,YAA6B,aAAqC;QAArC,kBAAa,GAAb,aAAa,CAAwB;IAAG,CAAC;IAEtE,KAAK,CAAC,aAAa,CAAC,MAAwB;QAC1C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,CAChD,MAAM,EACN,CAAC,eAAe,CAAC,EACjB,wBAAwB,CACzB,CAAC;QACF,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC;YAChD,aAAa,EAAE,QAAQ;YACvB,WAAW,EAAE,KAAK;YAClB,UAAU,EAAE,KAAK;SAClB,CAAC,CAAC;QAEH,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;aAC/B,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;aAClD,GAAG,CAAC,oBAAoB,CAAC;aACzB,MAAM,CAAC,CAAC,KAAK,EAAoC,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC;IACzE,CAAC;IAED,KAAK,CAAC,UAAU,CACd,MAMC;QAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,CAChD,MAAM,EACN,CAAC,eAAe,CAAC,EACjB,qBAAqB,CACtB,CAAC;QACF,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,SAAS,CAAC;QAClD,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC;YAC1C,UAAU;YACV,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,UAAU,EAAE,MAAM,CAAC,KAAK,IAAI,EAAE;YAC9B,YAAY,EAAE,IAAI;YAClB,OAAO,EAAE,WAAW;YACpB,QAAQ,EAAE,MAAM,CAAC,QAAQ;SAC1B,CAAC,CAAC;QAEH,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;IAClG,CAAC;IAED,KAAK,CAAC,QAAQ,CACZ,MAAsF;QAEtF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,CAChD,MAAM,EACN,CAAC,eAAe,CAAC,EACjB,mBAAmB,CACpB,CAAC;QACF,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,SAAS,CAAC;QAClD,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC;YACzC,UAAU;YACV,OAAO,EAAE,MAAM,CAAC,OAAO;SACxB,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC9D,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,MAAgC;QAChD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,CAChD,MAAM,EACN,CAAC,gBAAgB,CAAC,EAClB,sBAAsB,CACvB,CAAC;QACF,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,SAAS,CAAC;QAClD,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;YAC5C,UAAU;YACV,qBAAqB,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;YAC5D,WAAW,EAAE;gBACX,OAAO,EAAE,MAAM,CAAC,KAAK;gBACrB,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,KAAK,EAAE,eAAe,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC;gBACrD,GAAG,EAAE,eAAe,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC;gBACjD,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC,kBAAkB,CAAC;gBACpD,cAAc,EAAE,MAAM,CAAC,cAAc;oBACnC,CAAC,CAAC;wBACE,aAAa,EAAE;4BACb,SAAS,EAAE,UAAU,EAAE;4BACvB,qBAAqB,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE;yBAChD;qBACF;oBACH,CAAC,CAAC,SAAS;aACd;SACF,CAAC,CAAC;QAEH,OAAO,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC9D,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,MAAqC;QACrD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,CAChD,MAAM,EACN,CAAC,gBAAgB,CAAC,EAClB,sBAAsB,CACvB,CAAC;QACF,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,SAAS,CAAC;QAClD,MAAM,yBAAyB,GAC7B,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC5F,MAAM,QAAQ,GAAG,yBAAyB;YACxC,CAAC,CAAC,CACE,MAAM,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC;gBACxB,UAAU;gBACV,OAAO,EAAE,MAAM,CAAC,OAAO;aACxB,CAAC,CACH,CAAC,IAAI;YACR,CAAC,CAAC,IAAI,CAAC;QACT,MAAM,iBAAiB,GACrB,MAAM,CAAC,QAAQ,IAAI,QAAQ,EAAE,KAAK,EAAE,QAAQ,IAAI,QAAQ,EAAE,GAAG,EAAE,QAAQ,IAAI,SAAS,CAAC;QACvF,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,oBAAoB,CAAC;YAC1C,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,QAAQ;SACT,CAAC,CAAC;QACH,MAAM,WAAW,GAA6B,EAAE,CAAC;QAEjD,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC/B,WAAW,CAAC,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC;QACrC,CAAC;QACD,IAAI,MAAM,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YACrC,WAAW,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;QAC/C,CAAC;QACD,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YAClC,WAAW,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QACzC,CAAC;QACD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,WAAW,CAAC,KAAK,GAAG,eAAe,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;QAChE,CAAC;QACD,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,WAAW,CAAC,GAAG,GAAG,eAAe,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC;QAC5D,CAAC;QACD,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YACnC,WAAW,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QACnE,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC;YAC3C,UAAU;YACV,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,WAAW;SACZ,CAAC,CAAC;QAEH,OAAO,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,UAAU,EAAE,iBAAiB,CAAC,CAAC;IAChE,CAAC;IAED,KAAK,CAAC,WAAW,CACf,MAAmE;QAEnE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,CAChD,MAAM,EACN,CAAC,gBAAgB,CAAC,EAClB,sBAAsB,CACvB,CAAC;QACF,IAAI,CAAC;YACH,MAAM,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;gBAC3B,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,SAAS;gBAC1C,OAAO,EAAE,MAAM,CAAC,OAAO;aACxB,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,iBAAiB,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC;gBACrC,OAAO;YACT,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;CACF;AAED,SAAS,oBAAoB,CAC3B,KAA2C;IAE3C,MAAM,UAAU,GAAG,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC;IACpC,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO;QACL,UAAU;QACV,OAAO,EAAE,KAAK,CAAC,eAAe,EAAE,IAAI,EAAE,IAAI,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,UAAU;QAC7E,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,IAAI;QAC9C,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC;QAC/B,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,QAAQ;QAChD,eAAe,EAAE,KAAK,CAAC,eAAe,EAAE,IAAI,EAAE,IAAI,IAAI;QACtD,eAAe,EAAE,KAAK,CAAC,eAAe,EAAE,IAAI,EAAE,IAAI,IAAI;QACtD,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,IAAI;QACxC,QAAQ,EAAE,KAAK,CAAC,QAAQ,KAAK,KAAK;KACnC,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ,CACf,KAA+B,EAC/B,UAAkB,EAClB,gBAAyB;IAEzB,MAAM,KAAK,GAAG,gBAAgB,CAAC,KAAK,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;IAC9D,MAAM,GAAG,GAAG,gBAAgB,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,IAAI,gBAAgB,CAAC,CAAC;IAC7E,OAAO;QACL,EAAE,EAAE,KAAK,CAAC,EAAE,IAAI,EAAE;QAClB,UAAU;QACV,KAAK,EAAE,KAAK,CAAC,OAAO,IAAI,SAAS;QACjC,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,SAAS;QACjC,KAAK,EAAE,KAAK,EAAE,GAAG,IAAI,KAAK,CAAC,KAAK,EAAE,QAAQ,IAAI,KAAK,CAAC,KAAK,EAAE,IAAI,IAAI,SAAS;QAC5E,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,KAAK,CAAC,GAAG,EAAE,QAAQ,IAAI,KAAK,CAAC,GAAG,EAAE,IAAI,IAAI,SAAS;QACpE,QAAQ,EAAE,KAAK,EAAE,QAAQ;QACzB,QAAQ,EAAE,KAAK,EAAE,QAAQ,IAAI,GAAG,EAAE,QAAQ,IAAI,IAAI;QAClD,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,SAAS;QACrC,QAAQ,EAAE,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,cAAc,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,SAAS;QACvF,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YAC7C,KAAK,EAAE,QAAQ,CAAC,KAAK,IAAI,EAAE;YAC3B,IAAI,EAAE,QAAQ,CAAC,WAAW,IAAI,SAAS;SACxC,CAAC,CAAC;QACH,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,SAAS;QACrC,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,SAAS;QAC3C,SAAS,EAAE,KAAK,CAAC,SAAS;YACxB,CAAC,CAAC;gBACE,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE;gBAClC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,IAAI,SAAS;gBAC9C,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC;aACpC;YACH,CAAC,CAAC,SAAS;QACb,QAAQ,EAAE;YACR,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,IAAI;YAC9B,gBAAgB,EAAE,KAAK,CAAC,gBAAgB,IAAI,IAAI;YAChD,SAAS,EAAE,KAAK,CAAC,OAAO,IAAI,IAAI;YAChC,SAAS,EAAE,KAAK,CAAC,OAAO,IAAI,IAAI;SACjC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,KAAmD;IACzE,OAAO,KAAK,EAAE,QAAQ,IAAI,KAAK,EAAE,IAAI,IAAI,SAAS,CAAC;AACrD,CAAC;AAED,SAAS,gBAAgB,CACvB,KAAmD,EACnD,gBAAyB;IAEzB,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3E,OAAO;YACL,GAAG,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE;YAC3C,QAAQ,EAAE,KAAK;YACf,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,IAAI;SACzC,CAAC;IACJ,CAAC;IACD,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnE,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,gBAAgB,CAAC,CAAC,WAAW,EAAE,CAAC;QAClE,OAAO;YACL,GAAG;YACH,QAAQ,EAAE,IAAI;YACd,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,gBAAgB,EAAE,IAAI,EAAE,IAAI,IAAI;SACrE,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,oBAAoB,CAAC,MAI7B;IACC,IAAI,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;IACzB,IAAI,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;IACrB,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACxD,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;IACxB,CAAC;IAED,MAAM,aAAa,GAAG,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC5D,MAAM,WAAW,GAAG,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IACxD,MAAM,kBAAkB,GACtB,aAAa,IAAI,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;IAClG,MAAM,kBAAkB,GACtB,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAC,IAAI,kBAAkB,GAAG,CAAC;QAC3D,CAAC,CAAC,kBAAkB;QACpB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IAErB,IAAI,KAAK,IAAI,CAAC,GAAG,EAAE,CAAC;QAClB,GAAG,GAAG,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,GAAG,kBAAkB,CAAC,CAAC,WAAW,EAAE,CAAC;IAC/E,CAAC;SAAM,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;QACzB,KAAK,GAAG,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,GAAG,kBAAkB,CAAC,CAAC,WAAW,EAAE,CAAC;IAC/E,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;AACxB,CAAC;AAED,SAAS,eAAe,CACtB,KAAa,EACb,QAA4B;IAE5B,IAAI,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACtC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;IACnC,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;AACvC,CAAC;AAED,SAAS,kBAAkB,CAAC,OAA2B;IACrD,OAAO;QACL,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,WAAW,EAAE,OAAO,CAAC,IAAI;KAC1B,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAc;IACvC,MAAM,SAAS,GAAG,KAIjB,CAAC;IACF,OAAO,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,SAAS,CAAC,MAAM,IAAI,SAAS,CAAC,IAAI,CAAC;AAC1E,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { type calendar_v3, type docs_v1, type drive_v3, type gmail_v1, type meet_v2, type sheets_v4 } from "googleapis";
2
+ import { type GoogleCapability } from "./scopes.js";
3
+ import { type GoogleAccountRef, type GoogleCredentialResolver } from "./types.js";
4
+ export declare class GoogleApiClientFactory {
5
+ private credentialResolver;
6
+ constructor(credentialResolver?: GoogleCredentialResolver);
7
+ setCredentialResolver(credentialResolver: GoogleCredentialResolver): void;
8
+ gmail(account: GoogleAccountRef, capabilities: readonly GoogleCapability[], reason: string): Promise<gmail_v1.Gmail>;
9
+ calendar(account: GoogleAccountRef, capabilities: readonly GoogleCapability[], reason: string): Promise<calendar_v3.Calendar>;
10
+ drive(account: GoogleAccountRef, capabilities: readonly GoogleCapability[], reason: string): Promise<drive_v3.Drive>;
11
+ docs(account: GoogleAccountRef, capabilities: readonly GoogleCapability[], reason: string): Promise<docs_v1.Docs>;
12
+ sheets(account: GoogleAccountRef, capabilities: readonly GoogleCapability[], reason: string): Promise<sheets_v4.Sheets>;
13
+ meet(account: GoogleAccountRef, capabilities: readonly GoogleCapability[], reason: string): Promise<meet_v2.Meet>;
14
+ private apiOptions;
15
+ private resolveAuthClient;
16
+ }
17
+ //# sourceMappingURL=client-factory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client-factory.d.ts","sourceRoot":"","sources":["../src/client-factory.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,OAAO,EACZ,KAAK,QAAQ,EACb,KAAK,QAAQ,EAEb,KAAK,OAAO,EACZ,KAAK,SAAS,EACf,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,KAAK,gBAAgB,EAA+B,MAAM,aAAa,CAAC;AACjF,OAAO,EAEL,KAAK,gBAAgB,EAErB,KAAK,wBAAwB,EAC9B,MAAM,YAAY,CAAC;AAgBpB,qBAAa,sBAAsB;IAE/B,OAAO,CAAC,kBAAkB;gBAAlB,kBAAkB,GAAE,wBAAgE;IAG9F,qBAAqB,CAAC,kBAAkB,EAAE,wBAAwB,GAAG,IAAI;IAInE,KAAK,CACT,OAAO,EAAE,gBAAgB,EACzB,YAAY,EAAE,SAAS,gBAAgB,EAAE,EACzC,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;IAKpB,QAAQ,CACZ,OAAO,EAAE,gBAAgB,EACzB,YAAY,EAAE,SAAS,gBAAgB,EAAE,EACzC,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC;IAK1B,KAAK,CACT,OAAO,EAAE,gBAAgB,EACzB,YAAY,EAAE,SAAS,gBAAgB,EAAE,EACzC,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;IAKpB,IAAI,CACR,OAAO,EAAE,gBAAgB,EACzB,YAAY,EAAE,SAAS,gBAAgB,EAAE,EACzC,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;IAKlB,MAAM,CACV,OAAO,EAAE,gBAAgB,EACzB,YAAY,EAAE,SAAS,gBAAgB,EAAE,EACzC,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC;IAKtB,IAAI,CACR,OAAO,EAAE,gBAAgB,EACzB,YAAY,EAAE,SAAS,gBAAgB,EAAE,EACzC,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;IAKxB,OAAO,CAAC,UAAU;YAQJ,iBAAiB;CAahC"}
@@ -0,0 +1,66 @@
1
+ import { google, } from "googleapis";
2
+ import { MissingGoogleCredentialResolver } from "./auth.js";
3
+ import { scopesForGoogleCapabilities } from "./scopes.js";
4
+ import { GOOGLE_SERVICE_NAME, } from "./types.js";
5
+ function mockGoogleRootUrl() {
6
+ const raw = process.env.ELIZA_MOCK_GOOGLE_BASE?.trim();
7
+ if (!raw)
8
+ return undefined;
9
+ try {
10
+ const url = new URL(raw);
11
+ if (!url.pathname.endsWith("/")) {
12
+ url.pathname = `${url.pathname}/`;
13
+ }
14
+ return url.toString();
15
+ }
16
+ catch {
17
+ return raw.endsWith("/") ? raw : `${raw}/`;
18
+ }
19
+ }
20
+ export class GoogleApiClientFactory {
21
+ credentialResolver;
22
+ constructor(credentialResolver = new MissingGoogleCredentialResolver()) {
23
+ this.credentialResolver = credentialResolver;
24
+ }
25
+ setCredentialResolver(credentialResolver) {
26
+ this.credentialResolver = credentialResolver;
27
+ }
28
+ async gmail(account, capabilities, reason) {
29
+ const auth = await this.resolveAuthClient(account, capabilities, reason);
30
+ return google.gmail(this.apiOptions("v1", auth));
31
+ }
32
+ async calendar(account, capabilities, reason) {
33
+ const auth = await this.resolveAuthClient(account, capabilities, reason);
34
+ return google.calendar(this.apiOptions("v3", auth));
35
+ }
36
+ async drive(account, capabilities, reason) {
37
+ const auth = await this.resolveAuthClient(account, capabilities, reason);
38
+ return google.drive(this.apiOptions("v3", auth));
39
+ }
40
+ async docs(account, capabilities, reason) {
41
+ const auth = await this.resolveAuthClient(account, capabilities, reason);
42
+ return google.docs(this.apiOptions("v1", auth));
43
+ }
44
+ async sheets(account, capabilities, reason) {
45
+ const auth = await this.resolveAuthClient(account, capabilities, reason);
46
+ return google.sheets(this.apiOptions("v4", auth));
47
+ }
48
+ async meet(account, capabilities, reason) {
49
+ const auth = await this.resolveAuthClient(account, capabilities, reason);
50
+ return google.meet(this.apiOptions("v2", auth));
51
+ }
52
+ apiOptions(version, auth) {
53
+ const rootUrl = mockGoogleRootUrl();
54
+ return rootUrl ? { version, auth, rootUrl } : { version, auth };
55
+ }
56
+ async resolveAuthClient(account, capabilities, reason) {
57
+ return this.credentialResolver.getAuthClient({
58
+ provider: GOOGLE_SERVICE_NAME,
59
+ accountId: account.accountId,
60
+ capabilities,
61
+ scopes: scopesForGoogleCapabilities(capabilities),
62
+ reason,
63
+ });
64
+ }
65
+ }
66
+ //# sourceMappingURL=client-factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client-factory.js","sourceRoot":"","sources":["../src/client-factory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Google ConnectorAccountManager provider.
3
+ *
4
+ * Bridges plugin-google to the @elizaos/core ConnectorAccountManager so the
5
+ * generic HTTP CRUD + OAuth surface (packages/agent/src/api/connector-account-routes.ts)
6
+ * can list, create, patch, delete, and run the OAuth flow for Google accounts
7
+ * using a single consolidated grant covering Gmail, Calendar, Drive, and Meet.
8
+ *
9
+ * Single OAuth grant per account: callers may pass `scopes` to the manager's
10
+ * startOAuth to limit which capabilities are requested. By default all
11
+ * capabilities (gmail.read+send+manage, calendar.read+write, drive.read+write,
12
+ * meet.create+read) are requested; granted capabilities are recorded on the
13
+ * returned account so downstream consumers know which surfaces are usable.
14
+ */
15
+ import { type ConnectorAccountProvider, type IAgentRuntime } from "@elizaos/core";
16
+ /**
17
+ * Build the Google ConnectorAccountManager provider. Exposes listAccounts (from
18
+ * manager-owned storage), CRUD adapters, and a single consolidated PKCE OAuth
19
+ * flow that returns a Google account hydrated with the granted capabilities,
20
+ * scopes, and userinfo identity.
21
+ */
22
+ export declare function createGoogleConnectorAccountProvider(runtime: IAgentRuntime): ConnectorAccountProvider;
23
+ //# sourceMappingURL=connector-account-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connector-account-provider.d.ts","sourceRoot":"","sources":["../src/connector-account-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,EAIL,KAAK,wBAAwB,EAO7B,KAAK,aAAa,EAEnB,MAAM,eAAe,CAAC;AAgNvB;;;;;GAKG;AACH,wBAAgB,oCAAoC,CAClD,OAAO,EAAE,aAAa,GACrB,wBAAwB,CAwN1B"}