workspaces to dashboards, imap email sync, ffmpeg tool, tts fix, file browser refresh, automation sidebar reorder

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-02 20:00:45 +00:00
co-authored by Claude Opus 4.6
parent bd362dc586
commit 927267e041
98 changed files with 1176 additions and 802 deletions
+12 -2
View File
@@ -12,7 +12,7 @@ import {
} from 'officerdb';
const GOOGLE_SCOPES = [
'https://www.googleapis.com/auth/gmail.readonly',
'https://mail.google.com/',
'https://www.googleapis.com/auth/calendar.readonly',
'https://www.googleapis.com/auth/userinfo.email',
];
@@ -131,6 +131,15 @@ integrationsRouter.get('/google/status', async (ctx) => {
integrationsRouter.delete('/google/connection', async (ctx) => {
const user = ctx.get('user');
const connection = await getUserIntegration(user.id, 'google');
const connConfig = connection?.config as Record<string, unknown> | undefined;
// Revoke token at Google so the old grant is fully removed
const token = (connConfig?.refreshToken as string) || (connConfig?.accessToken as string);
if (token) {
fetch(`https://oauth2.googleapis.com/revoke?token=${token}`, { method: 'POST' }).catch(() => {});
}
await deleteUserIntegration(user.id, 'google');
return ctx.json({ ok: true });
});
@@ -157,6 +166,7 @@ integrationsRouter.get('/google/authorize', async (ctx) => {
scope: GOOGLE_SCOPES.join(' '),
access_type: 'offline',
prompt: 'consent',
include_granted_scopes: 'false',
state,
});
@@ -244,7 +254,7 @@ export const googleCallbackHandler = async (ctx: any) => {
// Auto-add /email to dock
try {
const existing = await getDockPaths(dbUser.id);
const paths = existing ?? ['/', '/files', '/automation', '/projects', '/workspaces', '/chat'];
const paths = existing ?? ['/', '/files', '/automation', '/projects', '/dashboards', '/chat'];
if (!paths.includes('/email')) {
paths.push('/email');