@elizaos/plugin-google 2.0.3-beta.5 → 2.0.3-beta.7
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.
- package/dist/auth.d.ts +9 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +45 -0
- package/dist/auth.js.map +1 -0
- package/dist/calendar.d.ts +26 -0
- package/dist/calendar.d.ts.map +1 -0
- package/dist/calendar.js +237 -0
- package/dist/calendar.js.map +1 -0
- package/dist/client-factory.d.ts +17 -0
- package/dist/client-factory.d.ts.map +1 -0
- package/dist/client-factory.js +74 -0
- package/dist/client-factory.js.map +1 -0
- package/dist/connector-account-provider.d.ts +23 -0
- package/dist/connector-account-provider.d.ts.map +1 -0
- package/dist/connector-account-provider.js +361 -0
- package/dist/connector-account-provider.js.map +1 -0
- package/dist/connector-credential-refs.d.ts +43 -0
- package/dist/connector-credential-refs.d.ts.map +1 -0
- package/dist/connector-credential-refs.js +252 -0
- package/dist/connector-credential-refs.js.map +1 -0
- package/dist/credential-resolver.d.ts +45 -0
- package/dist/credential-resolver.d.ts.map +1 -0
- package/dist/credential-resolver.js +529 -0
- package/dist/credential-resolver.js.map +1 -0
- package/dist/drive.d.ts +41 -0
- package/dist/drive.d.ts.map +1 -0
- package/dist/drive.js +207 -0
- package/dist/drive.js.map +1 -0
- package/dist/gmail.d.ts +89 -0
- package/dist/gmail.d.ts.map +1 -0
- package/dist/gmail.js +765 -0
- package/dist/gmail.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +47 -0
- package/dist/index.js.map +1 -0
- package/dist/lifeops-message-adapter.d.ts +23 -0
- package/dist/lifeops-message-adapter.d.ts.map +1 -0
- package/dist/lifeops-message-adapter.js +268 -0
- package/dist/lifeops-message-adapter.js.map +1 -0
- package/dist/meet.d.ts +61 -0
- package/dist/meet.d.ts.map +1 -0
- package/dist/meet.js +329 -0
- package/dist/meet.js.map +1 -0
- package/dist/scopes.d.ts +59 -0
- package/dist/scopes.d.ts.map +1 -0
- package/dist/scopes.js +142 -0
- package/dist/scopes.js.map +1 -0
- package/dist/service.d.ts +165 -0
- package/dist/service.d.ts.map +1 -0
- package/dist/service.js +170 -0
- package/dist/service.js.map +1 -0
- package/dist/types.d.ts +492 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +9 -0
- package/dist/types.js.map +1 -0
- package/package.json +3 -3
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
|
package/dist/auth.js.map
ADDED
|
@@ -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"}
|
package/dist/calendar.js
ADDED
|
@@ -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":"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"}
|
|
@@ -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;AAkBpB,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;IAYxB,OAAO,CAAC,UAAU;YASJ,iBAAiB;CAahC"}
|
|
@@ -0,0 +1,74 @@
|
|
|
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 googleRootUrlOverride() {
|
|
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
|
+
// The `as <ns>.Options` casts at each call site bridge a TypeScript
|
|
53
|
+
// identity mismatch: bun's isolated linker installs two copies of
|
|
54
|
+
// google-auth-library (one direct, one nested under googleapis-common),
|
|
55
|
+
// so `Auth.OAuth2Client` from 'googleapis' and the `OAuth2Client` baked
|
|
56
|
+
// into each `<ns>.Options['auth']` resolve to different physical classes.
|
|
57
|
+
// Runtime is fine: these casts pin TS to the correct Options shape per
|
|
58
|
+
// method without an override or a global `any`.
|
|
59
|
+
apiOptions(version, auth) {
|
|
60
|
+
const rootUrl = googleRootUrlOverride();
|
|
61
|
+
const apiAuth = auth;
|
|
62
|
+
return rootUrl ? { version, auth: apiAuth, rootUrl } : { version, auth: apiAuth };
|
|
63
|
+
}
|
|
64
|
+
async resolveAuthClient(account, capabilities, reason) {
|
|
65
|
+
return this.credentialResolver.getAuthClient({
|
|
66
|
+
provider: GOOGLE_SERVICE_NAME,
|
|
67
|
+
accountId: account.accountId,
|
|
68
|
+
capabilities,
|
|
69
|
+
scopes: scopesForGoogleCapabilities(capabilities),
|
|
70
|
+
reason,
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
//# 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;AA+NvB;;;;;GAKG;AACH,wBAAgB,oCAAoC,CAClD,OAAO,EAAE,aAAa,GACrB,wBAAwB,CAwN1B"}
|