diff --git a/apps/web/app/api/ai/analyze-sender-pattern/route.ts b/apps/web/app/api/ai/analyze-sender-pattern/route.ts index 299235f5a1..d4f8ea9b0c 100644 --- a/apps/web/app/api/ai/analyze-sender-pattern/route.ts +++ b/apps/web/app/api/ai/analyze-sender-pattern/route.ts @@ -93,7 +93,7 @@ async function process({ const gmail = await getGmailClientWithRefresh({ accessToken: account.access_token, refreshToken: account.refresh_token, - expiresAt: account.expires_at, + expiresAt: account.expires_at?.getTime() || null, emailAccountId, }); diff --git a/apps/web/app/api/clean/gmail/route.ts b/apps/web/app/api/clean/gmail/route.ts index 8beb34d10f..02560761b3 100644 --- a/apps/web/app/api/clean/gmail/route.ts +++ b/apps/web/app/api/clean/gmail/route.ts @@ -55,7 +55,7 @@ async function performGmailAction({ const gmail = await getGmailClientWithRefresh({ accessToken: account.account.access_token, refreshToken: account.account.refresh_token, - expiresAt: account.account.expires_at, + expiresAt: account.account.expires_at?.getTime() || null, emailAccountId, }); diff --git a/apps/web/app/api/google/contacts/route.ts b/apps/web/app/api/google/contacts/route.ts index 804ac66964..4022885923 100644 --- a/apps/web/app/api/google/contacts/route.ts +++ b/apps/web/app/api/google/contacts/route.ts @@ -33,7 +33,6 @@ export const GET = withEmailAccount(async (request) => { const client = getContactsClient({ accessToken: emailAccount?.account.access_token, refreshToken: emailAccount?.account.refresh_token, - expiryDate: emailAccount?.account.expires_at, }); const { searchParams } = new URL(request.url); diff --git a/apps/web/app/api/google/watch/all/route.ts b/apps/web/app/api/google/watch/all/route.ts index 55f9ba46ea..0a30934fa3 100644 --- a/apps/web/app/api/google/watch/all/route.ts +++ b/apps/web/app/api/google/watch/all/route.ts @@ -102,7 +102,7 @@ async function watchAllEmails() { const gmail = await getGmailClientWithRefresh({ accessToken: emailAccount.account.access_token, refreshToken: emailAccount.account.refresh_token, - expiresAt: emailAccount.account.expires_at, + expiresAt: emailAccount.account.expires_at?.getTime() || null, emailAccountId: emailAccount.id, }); diff --git a/apps/web/app/api/google/webhook/process-history.ts b/apps/web/app/api/google/webhook/process-history.ts index 01fe846cad..250d52ddf4 100644 --- a/apps/web/app/api/google/webhook/process-history.ts +++ b/apps/web/app/api/google/webhook/process-history.ts @@ -140,7 +140,7 @@ export async function processHistoryForUser( const gmail = await getGmailClientWithRefresh({ accessToken: emailAccount.account?.access_token, refreshToken: emailAccount.account?.refresh_token, - expiresAt: emailAccount.account?.expires_at, + expiresAt: emailAccount.account?.expires_at?.getTime() || null, emailAccountId: emailAccount.id, }); diff --git a/apps/web/app/api/outlook/watch/all/route.ts b/apps/web/app/api/outlook/watch/all/route.ts index 62b34b1450..20e2fe930e 100644 --- a/apps/web/app/api/outlook/watch/all/route.ts +++ b/apps/web/app/api/outlook/watch/all/route.ts @@ -98,7 +98,7 @@ async function watchAllEmails() { const outlookClient = await getOutlookClientWithRefresh({ accessToken: emailAccount.account.access_token, refreshToken: emailAccount.account.refresh_token, - expiresAt: emailAccount.account.expires_at, + expiresAt: emailAccount.account.expires_at?.getTime() || null, emailAccountId: emailAccount.id, }); diff --git a/apps/web/app/api/outlook/watch/route.ts b/apps/web/app/api/outlook/watch/route.ts index fd3e5319e6..2d260f3458 100644 --- a/apps/web/app/api/outlook/watch/route.ts +++ b/apps/web/app/api/outlook/watch/route.ts @@ -58,7 +58,7 @@ export const GET = withAuth(async (request) => { const outlookClient = await getOutlookClientWithRefresh({ accessToken: account.account.access_token, refreshToken: account.account.refresh_token, - expiresAt: account.account.expires_at, + expiresAt: account.account.expires_at?.getTime() || null, emailAccountId, }); diff --git a/apps/web/app/api/outlook/webhook/process-history.ts b/apps/web/app/api/outlook/webhook/process-history.ts index 47ca395641..5f23edf1ec 100644 --- a/apps/web/app/api/outlook/webhook/process-history.ts +++ b/apps/web/app/api/outlook/webhook/process-history.ts @@ -128,7 +128,7 @@ export async function processHistoryForUser({ const outlookClient = await getOutlookClientWithRefresh({ accessToken: emailAccount.account?.access_token, refreshToken: emailAccount.account?.refresh_token, - expiresAt: emailAccount.account?.expires_at, + expiresAt: emailAccount.account?.expires_at?.getTime() || null, emailAccountId: emailAccount.id, }); diff --git a/apps/web/app/api/user/categorize/senders/batch/handle-batch.ts b/apps/web/app/api/user/categorize/senders/batch/handle-batch.ts index fb04ba50c7..8a4bb2087f 100644 --- a/apps/web/app/api/user/categorize/senders/batch/handle-batch.ts +++ b/apps/web/app/api/user/categorize/senders/batch/handle-batch.ts @@ -69,7 +69,7 @@ async function handleBatchInternal(request: Request) { const gmail = await getGmailClientWithRefresh({ accessToken: account.access_token, refreshToken: account.refresh_token, - expiresAt: account.expires_at, + expiresAt: account.expires_at?.getTime() || null, emailAccountId, }); diff --git a/apps/web/utils/account.ts b/apps/web/utils/account.ts index dc4a90b1a4..7cc1e9bf53 100644 --- a/apps/web/utils/account.ts +++ b/apps/web/utils/account.ts @@ -21,7 +21,7 @@ export async function getGmailClientForEmail({ const gmail = getGmailClientWithRefresh({ accessToken: tokens.accessToken, refreshToken: tokens.refreshToken || "", - expiresAt: tokens.expiresAt ?? null, + expiresAt: tokens.expiresAt, emailAccountId, }); return gmail; @@ -36,7 +36,7 @@ export async function getGmailAndAccessTokenForEmail({ const gmail = await getGmailClientWithRefresh({ accessToken: tokens.accessToken, refreshToken: tokens.refreshToken || "", - expiresAt: tokens.expiresAt ?? null, + expiresAt: tokens.expiresAt, emailAccountId, }); const accessToken = getAccessTokenFromClient(gmail); @@ -59,7 +59,7 @@ export async function getGmailClientForEmailId({ const gmail = getGmailClientWithRefresh({ accessToken: account?.account.access_token, refreshToken: account?.account.refresh_token || "", - expiresAt: account?.account.expires_at ?? null, + expiresAt: account?.account.expires_at?.getTime() ?? null, emailAccountId, }); return gmail; @@ -74,7 +74,7 @@ export async function getOutlookClientForEmail({ const outlook = await getOutlookClientWithRefresh({ accessToken: tokens.accessToken, refreshToken: tokens.refreshToken || "", - expiresAt: tokens.expiresAt ?? null, + expiresAt: tokens.expiresAt, emailAccountId, }); return outlook; @@ -89,7 +89,7 @@ export async function getOutlookAndAccessTokenForEmail({ const outlook = await getOutlookClientWithRefresh({ accessToken: tokens.accessToken, refreshToken: tokens.refreshToken || "", - expiresAt: tokens.expiresAt ?? null, + expiresAt: tokens.expiresAt, emailAccountId, }); const accessToken = getOutlookAccessToken(outlook); @@ -112,7 +112,7 @@ export async function getOutlookClientForEmailId({ const outlook = await getOutlookClientWithRefresh({ accessToken: account?.account.access_token, refreshToken: account?.account.refresh_token || "", - expiresAt: account?.account.expires_at ?? null, + expiresAt: account?.account.expires_at?.getTime() ?? null, emailAccountId, }); return outlook; @@ -131,7 +131,7 @@ async function getTokens({ emailAccountId }: { emailAccountId: string }) { return { accessToken: emailAccount?.account.access_token, refreshToken: emailAccount?.account.refresh_token, - expiresAt: emailAccount?.account.expires_at, + expiresAt: emailAccount?.account.expires_at?.getTime() ?? null, }; } diff --git a/apps/web/utils/actions/categorize.ts b/apps/web/utils/actions/categorize.ts index 475b449193..cfc7c8861b 100644 --- a/apps/web/utils/actions/categorize.ts +++ b/apps/web/utils/actions/categorize.ts @@ -118,13 +118,13 @@ export const categorizeSenderAction = actionClient const userResult = await validateUserAndAiAccess({ emailAccountId }); const { emailAccount } = userResult; - if (!session.accessToken) throw new SafeError("No access token"); + if (!session.session.token) throw new SafeError("No access token"); const result = await categorizeSender( senderAddress, emailAccount, gmail, - session.accessToken, + session.session.token, ); revalidatePath(prefixPath(emailAccountId, "/smart-categories")); diff --git a/apps/web/utils/actions/user.ts b/apps/web/utils/actions/user.ts index 919b72ac13..f6024c8f0a 100644 --- a/apps/web/utils/actions/user.ts +++ b/apps/web/utils/actions/user.ts @@ -2,7 +2,6 @@ import { z } from "zod"; import { after } from "next/server"; -import { auth } from "@/utils/auth"; import prisma from "@/utils/prisma"; import { deleteUser } from "@/utils/user/delete"; import { extractGmailSignature } from "@/utils/gmail/signature"; @@ -81,10 +80,6 @@ export const resetAnalyticsAction = actionClient export const deleteAccountAction = actionClientUser .metadata({ name: "deleteAccount" }) .action(async ({ ctx: { userId } }) => { - try { - await auth.api.signOut(); - } catch {} - await deleteUser({ userId }); }); diff --git a/apps/web/utils/api-auth.ts b/apps/web/utils/api-auth.ts index 2d307bee15..cda356813a 100644 --- a/apps/web/utils/api-auth.ts +++ b/apps/web/utils/api-auth.ts @@ -77,7 +77,7 @@ export async function validateApiKeyAndGetGmailClient(request: NextRequest) { const gmail = await getGmailClientWithRefresh({ accessToken: account.access_token, refreshToken: account.refresh_token, - expiresAt: account.expires_at, + expiresAt: account.expires_at?.getTime() || null, emailAccountId: account.id, }); diff --git a/apps/web/utils/gmail/client.ts b/apps/web/utils/gmail/client.ts index 53b0dbe360..42449e1a0c 100644 --- a/apps/web/utils/gmail/client.ts +++ b/apps/web/utils/gmail/client.ts @@ -21,7 +21,7 @@ const getAuth = ({ expiresAt, ...rest }: AuthOptions) => { - const expiryDate = expiresAt ? expiresAt * 1000 : rest.expiryDate; + const expiryDate = expiresAt ? expiresAt : rest.expiryDate; const googleAuth = new auth.OAuth2({ clientId: env.GOOGLE_CLIENT_ID, @@ -63,7 +63,7 @@ export const getGmailClientWithRefresh = async ({ const auth = getAuth({ accessToken, refreshToken }); const g = gmail({ version: "v1", auth }); - const expiryDate = expiresAt ? expiresAt * 1000 : null; + const expiryDate = expiresAt ? expiresAt : null; if (expiryDate && expiryDate > Date.now()) return g; // may throw `invalid_grant` error diff --git a/apps/web/utils/outlook/client.ts b/apps/web/utils/outlook/client.ts index 32a37ee220..650c401ea5 100644 --- a/apps/web/utils/outlook/client.ts +++ b/apps/web/utils/outlook/client.ts @@ -87,7 +87,7 @@ export const getOutlookClientWithRefresh = async ({ if (!refreshToken) throw new SafeError("No refresh token"); // Check if token needs refresh - const expiryDate = expiresAt ? expiresAt * 1000 : null; + const expiryDate = expiresAt ? expiresAt : null; if (accessToken && expiryDate && expiryDate > Date.now()) { return createOutlookClient(accessToken); } diff --git a/apps/web/utils/user/get.ts b/apps/web/utils/user/get.ts index 6fc4ab0d23..3a25ba6423 100644 --- a/apps/web/utils/user/get.ts +++ b/apps/web/utils/user/get.ts @@ -87,7 +87,10 @@ export async function getEmailAccountWithAiAndTokens({ return { ...emailAccount, - tokens: emailAccount.account, + tokens: { + ...emailAccount.account, + expires_at: emailAccount.account.expires_at?.getTime() ?? null, + }, }; }