mcp-memory-libsql
by spences10
Verified
import { google } from 'googleapis';
import {
GetGmailSettingsParams,
GetGmailSettingsResponse,
GmailError
} from '../types.js';
export class SettingsService {
constructor(
private gmailClient?: ReturnType<typeof google.gmail>
) {}
/**
* Updates the Gmail client instance
* @param client - New Gmail client instance
*/
updateClient(client: ReturnType<typeof google.gmail>) {
this.gmailClient = client;
}
private ensureClient(): ReturnType<typeof google.gmail> {
if (!this.gmailClient) {
throw new GmailError(
'Gmail client not initialized',
'CLIENT_ERROR',
'Please ensure the service is initialized'
);
}
return this.gmailClient;
}
async getWorkspaceGmailSettings({ email }: GetGmailSettingsParams): Promise<GetGmailSettingsResponse> {
try {
// Get profile data
const client = this.ensureClient();
const { data: profile } = await client.users.getProfile({
userId: 'me'
});
// Get settings data
const [
{ data: autoForwarding },
{ data: imap },
{ data: language },
{ data: pop },
{ data: vacation }
] = await Promise.all([
client.users.settings.getAutoForwarding({ userId: 'me' }),
client.users.settings.getImap({ userId: 'me' }),
client.users.settings.getLanguage({ userId: 'me' }),
client.users.settings.getPop({ userId: 'me' }),
client.users.settings.getVacation({ userId: 'me' })
]);
const response: GetGmailSettingsResponse = {
profile: {
emailAddress: profile.emailAddress ?? '',
messagesTotal: typeof profile.messagesTotal === 'number' ? profile.messagesTotal : 0,
threadsTotal: typeof profile.threadsTotal === 'number' ? profile.threadsTotal : 0,
historyId: profile.historyId ?? ''
},
settings: {
...(language?.displayLanguage && {
language: {
displayLanguage: language.displayLanguage
}
}),
...(autoForwarding && {
autoForwarding: {
enabled: Boolean(autoForwarding.enabled),
...(autoForwarding.emailAddress && {
emailAddress: autoForwarding.emailAddress
})
}
}),
...(imap && {
imap: {
enabled: Boolean(imap.enabled),
...(typeof imap.autoExpunge === 'boolean' && {
autoExpunge: imap.autoExpunge
}),
...(imap.expungeBehavior && {
expungeBehavior: imap.expungeBehavior
})
}
}),
...(pop && {
pop: {
enabled: Boolean(pop.accessWindow),
...(pop.accessWindow && {
accessWindow: pop.accessWindow
})
}
}),
...(vacation && {
vacationResponder: {
enabled: Boolean(vacation.enableAutoReply),
...(vacation.startTime && {
startTime: vacation.startTime
}),
...(vacation.endTime && {
endTime: vacation.endTime
}),
...(vacation.responseSubject && {
responseSubject: vacation.responseSubject
}),
...((vacation.responseBodyHtml || vacation.responseBodyPlainText) && {
message: vacation.responseBodyHtml ?? vacation.responseBodyPlainText ?? ''
})
}
})
}
};
return response;
} catch (error) {
if (error instanceof GmailError) {
throw error;
}
throw new GmailError(
'Failed to get Gmail settings',
'SETTINGS_ERROR',
`Error: ${error instanceof Error ? error.message : 'Unknown error'}`
);
}
}
}