From 14b25824ef102ec10e455bdd7d7a0d6e1f7edfb8 Mon Sep 17 00:00:00 2001
From: Eliezer Steinbock <3090527+elie222@users.noreply.github.com>
Date: Tue, 16 Dec 2025 20:46:10 +0200
Subject: [PATCH 1/3] adjust logging code
---
.../(app)/[emailAccountId]/debug/drafts/page.tsx | 2 +-
.../call-analyze-pattern-api.ts | 2 +-
apps/web/app/api/outlook/webhook/route.ts | 6 ++----
apps/web/utils/email/bulk-action-tracking.ts | 2 +-
apps/web/utils/email/google.ts | 14 ++++++--------
apps/web/utils/email/microsoft.ts | 10 +++++-----
apps/web/utils/outlook/batch.ts | 6 +++---
apps/web/utils/outlook/label.ts | 4 ++--
apps/web/utils/outlook/spam.ts | 2 +-
apps/web/utils/outlook/trash.ts | 2 +-
10 files changed, 23 insertions(+), 27 deletions(-)
diff --git a/apps/web/app/(app)/[emailAccountId]/debug/drafts/page.tsx b/apps/web/app/(app)/[emailAccountId]/debug/drafts/page.tsx
index 5b068738e8..d2e75d4f32 100644
--- a/apps/web/app/(app)/[emailAccountId]/debug/drafts/page.tsx
+++ b/apps/web/app/(app)/[emailAccountId]/debug/drafts/page.tsx
@@ -41,7 +41,7 @@ export default function DebugDraftsPage() {
return (
-
Drafts
+
Drafts generated by Inbox Zero
{data?.executedActions.length === 0 ? (
diff --git a/apps/web/app/api/ai/analyze-sender-pattern/call-analyze-pattern-api.ts b/apps/web/app/api/ai/analyze-sender-pattern/call-analyze-pattern-api.ts
index b3e46f6a29..53568e985d 100644
--- a/apps/web/app/api/ai/analyze-sender-pattern/call-analyze-pattern-api.ts
+++ b/apps/web/app/api/ai/analyze-sender-pattern/call-analyze-pattern-api.ts
@@ -34,7 +34,7 @@ export async function analyzeSenderPattern(body: AnalyzeSenderPatternBody) {
logger.error("Error in sender pattern analysis", {
emailAccountId: body.emailAccountId,
from: body.from,
- error: error instanceof Error ? error.message : error,
+ error,
});
}
}
diff --git a/apps/web/app/api/outlook/webhook/route.ts b/apps/web/app/api/outlook/webhook/route.ts
index 90a12ff0ef..9a5b602b4d 100644
--- a/apps/web/app/api/outlook/webhook/route.ts
+++ b/apps/web/app/api/outlook/webhook/route.ts
@@ -95,9 +95,7 @@ async function processNotificationsAsync(
{ watchEmailsSubscriptionId: subscriptionId },
logger,
).catch((error) => {
- logger.error("Error getting email account", {
- error: error instanceof Error ? error.message : error,
- });
+ logger.error("Error getting email account", { error });
return null;
});
@@ -110,7 +108,7 @@ async function processNotificationsAsync(
});
} else {
logger.error("Error processing notification (no email account found)", {
- error: error instanceof Error ? error.message : error,
+ error,
});
}
}
diff --git a/apps/web/utils/email/bulk-action-tracking.ts b/apps/web/utils/email/bulk-action-tracking.ts
index 4dfa8426c8..ba2bc81caf 100644
--- a/apps/web/utils/email/bulk-action-tracking.ts
+++ b/apps/web/utils/email/bulk-action-tracking.ts
@@ -88,7 +88,7 @@ export async function updateEmailMessagesForSender(options: {
sender,
emailAccountId,
action,
- error: error instanceof Error ? error.message : error,
+ error,
});
// Don't throw - this is analytics, shouldn't break the main flow
}
diff --git a/apps/web/utils/email/google.ts b/apps/web/utils/email/google.ts
index 7aed1e6ee2..0ac2e1bbca 100644
--- a/apps/web/utils/email/google.ts
+++ b/apps/web/utils/email/google.ts
@@ -294,7 +294,7 @@ export class GmailProvider implements EmailProvider {
log.info("Message archived successfully");
} catch (error) {
log.error("Failed to archive message", {
- error: error instanceof Error ? error.message : error,
+ error,
});
throw error;
}
@@ -315,9 +315,7 @@ export class GmailProvider implements EmailProvider {
},
});
} catch (error) {
- log.error("Failed to archive messages bulk", {
- error: error instanceof Error ? error.message : error,
- });
+ log.error("Failed to archive messages bulk", { error });
throw error;
}
}
@@ -394,7 +392,7 @@ export class GmailProvider implements EmailProvider {
} catch (error) {
log.error("Failed to archive messages from sender", {
sender,
- error: error instanceof Error ? error.message : error,
+ error,
});
// continue processing remaining pages
nextPageToken = undefined;
@@ -452,7 +450,7 @@ export class GmailProvider implements EmailProvider {
} catch (error) {
log.error("Failed to get messages from sender", {
sender,
- error: error instanceof Error ? error.message : error,
+ error,
});
// continue processing remaining senders
nextPageToken = undefined;
@@ -471,7 +469,7 @@ export class GmailProvider implements EmailProvider {
log.error("Failed to trash thread for sender", {
sender,
threadId,
- error: error instanceof Error ? error.message : error,
+ error,
});
// Continue processing remaining threads
}
@@ -508,7 +506,7 @@ export class GmailProvider implements EmailProvider {
} catch (error) {
log.error("Failed to track trash operation for sender", {
sender,
- error: error instanceof Error ? error.message : error,
+ error,
});
}
}
diff --git a/apps/web/utils/email/microsoft.ts b/apps/web/utils/email/microsoft.ts
index 478bdd8615..cc9762002c 100644
--- a/apps/web/utils/email/microsoft.ts
+++ b/apps/web/utils/email/microsoft.ts
@@ -115,7 +115,7 @@ export class OutlookProvider implements EmailProvider {
} catch (error) {
this.logger.error("getThread failed", {
threadId,
- error: error instanceof Error ? error.message : error,
+ error,
errorCode: (error as any)?.code,
});
throw error;
@@ -154,7 +154,7 @@ export class OutlookProvider implements EmailProvider {
const err = error as any;
this.logger.error("getMessage failed", {
messageId,
- error: error instanceof Error ? error.message : error,
+ error,
errorCode: err?.code,
});
throw error;
@@ -558,7 +558,7 @@ export class OutlookProvider implements EmailProvider {
const err = error as any;
this.logger.error("getThreadMessages failed", {
threadId,
- error: error instanceof Error ? error.message : error,
+ error,
errorCode: err?.code,
});
throw error;
@@ -932,7 +932,7 @@ export class OutlookProvider implements EmailProvider {
this.logger.warn("Failed to fetch thread messages for conversationId", {
conversationId,
participantEmail,
- error: error instanceof Error ? error.message : error,
+ error,
errorCode: (error as any)?.code,
errorStatusCode: (error as any)?.statusCode,
});
@@ -1484,7 +1484,7 @@ export class OutlookProvider implements EmailProvider {
} catch (error) {
this.logger.error("Failed to archive message", {
messageId,
- error: error instanceof Error ? error.message : error,
+ error,
});
throw error;
}
diff --git a/apps/web/utils/outlook/batch.ts b/apps/web/utils/outlook/batch.ts
index 6f595799ba..acad6df22a 100644
--- a/apps/web/utils/outlook/batch.ts
+++ b/apps/web/utils/outlook/batch.ts
@@ -92,7 +92,7 @@ async function batch({
logger.error("Graph batch request failed", {
...context,
chunkSize: chunk.length,
- error: error instanceof Error ? error.message : error,
+ error,
});
throw error;
}
@@ -275,7 +275,7 @@ export async function moveMessagesForSenders({
ownerEmail,
destinationId,
messageIds,
- error: error instanceof Error ? error.message : error,
+ error,
});
} finally {
messageIds.forEach((id) => processedMessageIds.add(id));
@@ -291,7 +291,7 @@ export async function moveMessagesForSenders({
logger.error("Failed to fetch messages from sender", {
sender,
action,
- error: error instanceof Error ? error.message : error,
+ error,
});
nextLink = undefined;
}
diff --git a/apps/web/utils/outlook/label.ts b/apps/web/utils/outlook/label.ts
index 85b295e321..f4f28be41f 100644
--- a/apps/web/utils/outlook/label.ts
+++ b/apps/web/utils/outlook/label.ts
@@ -280,7 +280,7 @@ export async function removeThreadLabel({
messageId: message.id,
threadId,
categoryName,
- error: error instanceof Error ? error.message : error,
+ error,
});
}
},
@@ -351,7 +351,7 @@ export async function archiveThread({
folderId,
messageId: message.id,
threadId,
- error: error instanceof Error ? error.message : error,
+ error,
});
return null;
}
diff --git a/apps/web/utils/outlook/spam.ts b/apps/web/utils/outlook/spam.ts
index 3c930eae70..40e3aad361 100644
--- a/apps/web/utils/outlook/spam.ts
+++ b/apps/web/utils/outlook/spam.ts
@@ -29,7 +29,7 @@ export async function markSpam(client: OutlookClient, threadId: string) {
logger.warn("Failed to move message to spam", {
messageId: message.id,
threadId,
- error: error instanceof Error ? error.message : error,
+ error,
});
return null;
}
diff --git a/apps/web/utils/outlook/trash.ts b/apps/web/utils/outlook/trash.ts
index 4265d5b25c..5457c861e7 100644
--- a/apps/web/utils/outlook/trash.ts
+++ b/apps/web/utils/outlook/trash.ts
@@ -37,7 +37,7 @@ export async function trashThread(options: {
logger.warn("Failed to move message to trash", {
messageId: message.id,
threadId,
- error: error instanceof Error ? error.message : error,
+ error,
});
return null;
}
From 946ad43f7dde2131bd05f436b9e76d2f5feadc67 Mon Sep 17 00:00:00 2001
From: Eliezer Steinbock <3090527+elie222@users.noreply.github.com>
Date: Tue, 16 Dec 2025 20:57:02 +0200
Subject: [PATCH 2/3] adjust logging for microsoft
---
apps/web/utils/email/microsoft.ts | 23 ++++++++++++++---------
1 file changed, 14 insertions(+), 9 deletions(-)
diff --git a/apps/web/utils/email/microsoft.ts b/apps/web/utils/email/microsoft.ts
index cc9762002c..ad31a0d911 100644
--- a/apps/web/utils/email/microsoft.ts
+++ b/apps/web/utils/email/microsoft.ts
@@ -420,6 +420,7 @@ export class OutlookProvider implements EmailProvider {
}
if (!category) {
+ this.logger.error("Category not found", { labelId });
throw new Error(
`Category with ID ${labelId}${labelName ? ` or name ${labelName}` : ""} not found`,
);
@@ -442,6 +443,11 @@ export class OutlookProvider implements EmailProvider {
messageId,
categories: updatedCategories,
});
+ this.logger.info("Label applied", { labelId: category.id });
+ } else {
+ this.logger.info("Label already present, skipped", {
+ labelId: category.id,
+ });
}
return {
@@ -474,9 +480,11 @@ export class OutlookProvider implements EmailProvider {
logger: this.logger,
}),
]);
+ this.logger.info("Draft created", { draftId: result.id });
return { draftId: result.id || "" };
} else {
const result = await draftEmail(this.client, email, args, userEmail);
+ this.logger.info("Draft created", { draftId: result.id });
return { draftId: result.id || "" };
}
}
@@ -788,12 +796,14 @@ export class OutlookProvider implements EmailProvider {
nextPageToken?: string;
}> {
this.logger.info("getMessagesWithPagination called", {
- query: options.query,
maxResults: options.maxResults,
pageToken: options.pageToken,
before: options.before?.toISOString(),
after: options.after?.toISOString(),
});
+ this.logger.trace("getMessagesWithPagination query", {
+ query: options.query,
+ });
// For Outlook, separate search queries from date filters
// Microsoft Graph API handles these differently
@@ -808,19 +818,14 @@ export class OutlookProvider implements EmailProvider {
dateFilters.push(`receivedDateTime gt ${options.after.toISOString()}`);
}
- this.logger.info("Query parameters separated", {
- originalQuery,
- dateFilters,
- hasSearchQuery: !!originalQuery.trim(),
- hasDateFilters: dateFilters.length > 0,
- });
-
this.logger.info("Calling queryBatchMessages with separated parameters", {
- searchQuery: originalQuery.trim() || undefined,
dateFilters,
maxResults: options.maxResults || 20,
pageToken: options.pageToken,
});
+ this.logger.trace("Search query", {
+ searchQuery: originalQuery.trim() || undefined,
+ });
// Don't pass folderId - let the API return all folders except Junk/Deleted (auto-excluded)
// Drafts are filtered out in convertMessages
From c629b3174760999dd0569af50746ec3deaccfafa Mon Sep 17 00:00:00 2001
From: Eliezer Steinbock <3090527+elie222@users.noreply.github.com>
Date: Tue, 16 Dec 2025 20:57:42 +0200
Subject: [PATCH 3/3] v2.23.3
---
version.txt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/version.txt b/version.txt
index 1a09cfd62a..ec89d50dfe 100644
--- a/version.txt
+++ b/version.txt
@@ -1 +1 @@
-v2.23.2
+v2.23.3