From 7bde1bae1f1b6fb3e842ecc52eb0453d5a499b6d Mon Sep 17 00:00:00 2001 From: bosiraphael Date: Tue, 21 Apr 2026 15:09:46 +0200 Subject: [PATCH] add error logs --- .../modules/resend/shared/utils/for-each-page.ts | 14 ++++++++++++-- .../modules/resend/sync/utils/sync-broadcasts.ts | 2 +- .../src/modules/resend/sync/utils/sync-contacts.ts | 2 +- .../src/modules/resend/sync/utils/sync-emails.ts | 1 + .../src/modules/resend/sync/utils/sync-segments.ts | 2 +- .../modules/resend/sync/utils/sync-templates.ts | 2 +- .../src/modules/resend/sync/utils/sync-topics.ts | 7 ++++++- 7 files changed, 23 insertions(+), 7 deletions(-) diff --git a/packages/twenty-apps/internal/twenty-for-twenty/src/modules/resend/shared/utils/for-each-page.ts b/packages/twenty-apps/internal/twenty-for-twenty/src/modules/resend/shared/utils/for-each-page.ts index bbf12544f0b..f9b214da81d 100644 --- a/packages/twenty-apps/internal/twenty-for-twenty/src/modules/resend/shared/utils/for-each-page.ts +++ b/packages/twenty-apps/internal/twenty-for-twenty/src/modules/resend/shared/utils/for-each-page.ts @@ -16,7 +16,11 @@ export type ForEachPageOptions = { onCursorAdvance?: (cursor: string) => Promise; }; -export type OnPageResult = { ok: boolean; stop?: boolean }; +export type OnPageResult = { + ok: boolean; + stop?: boolean; + errors?: ReadonlyArray; +}; export type OnPageHandler = ( items: T[], @@ -64,8 +68,14 @@ export const forEachPage = async ( const shouldStop = handlerResult?.stop === true; if (!pageOk) { + const perItemErrors = handlerResult?.errors ?? []; + const detail = + perItemErrors.length > 0 + ? ` failures: ${perItemErrors.join(' | ')}` + : ''; + throw new Error( - `Resend ${label} page ${pageNumber} reported per-item failures; aborting at cursor=${cursor ?? 'start'}`, + `Resend ${label} page ${pageNumber} reported per-item failures; aborting at cursor=${cursor ?? 'start'}.${detail}`, ); } diff --git a/packages/twenty-apps/internal/twenty-for-twenty/src/modules/resend/sync/utils/sync-broadcasts.ts b/packages/twenty-apps/internal/twenty-for-twenty/src/modules/resend/sync/utils/sync-broadcasts.ts index 387b2f48fc3..47988270926 100644 --- a/packages/twenty-apps/internal/twenty-for-twenty/src/modules/resend/sync/utils/sync-broadcasts.ts +++ b/packages/twenty-apps/internal/twenty-for-twenty/src/modules/resend/sync/utils/sync-broadcasts.ts @@ -179,7 +179,7 @@ export const syncBroadcasts = async ( aggregate.updated += pageOutcome.result.updated; aggregate.errors.push(...pageOutcome.result.errors); - return { ok: pageOutcome.ok }; + return { ok: pageOutcome.ok, errors: pageOutcome.result.errors }; }, 'broadcasts', { startCursor: resumeCursor, onCursorAdvance }, diff --git a/packages/twenty-apps/internal/twenty-for-twenty/src/modules/resend/sync/utils/sync-contacts.ts b/packages/twenty-apps/internal/twenty-for-twenty/src/modules/resend/sync/utils/sync-contacts.ts index ce6d1a8ab42..8d6044a0ff9 100644 --- a/packages/twenty-apps/internal/twenty-for-twenty/src/modules/resend/sync/utils/sync-contacts.ts +++ b/packages/twenty-apps/internal/twenty-for-twenty/src/modules/resend/sync/utils/sync-contacts.ts @@ -78,7 +78,7 @@ export const syncContacts = async ( aggregate.updated += pageOutcome.result.updated; aggregate.errors.push(...pageOutcome.result.errors); - return { ok: pageOutcome.ok }; + return { ok: pageOutcome.ok, errors: pageOutcome.result.errors }; }, 'contacts', { startCursor: resumeCursor, onCursorAdvance }, diff --git a/packages/twenty-apps/internal/twenty-for-twenty/src/modules/resend/sync/utils/sync-emails.ts b/packages/twenty-apps/internal/twenty-for-twenty/src/modules/resend/sync/utils/sync-emails.ts index 8a91c285d81..0ec19ce3111 100644 --- a/packages/twenty-apps/internal/twenty-for-twenty/src/modules/resend/sync/utils/sync-emails.ts +++ b/packages/twenty-apps/internal/twenty-for-twenty/src/modules/resend/sync/utils/sync-emails.ts @@ -133,6 +133,7 @@ export const syncEmails = async ( return { ok: pageOutcome.ok, stop: reachedCutoff, + errors: pageOutcome.result.errors, }; }, 'emails', diff --git a/packages/twenty-apps/internal/twenty-for-twenty/src/modules/resend/sync/utils/sync-segments.ts b/packages/twenty-apps/internal/twenty-for-twenty/src/modules/resend/sync/utils/sync-segments.ts index 2d8ba6501de..c4907453547 100644 --- a/packages/twenty-apps/internal/twenty-for-twenty/src/modules/resend/sync/utils/sync-segments.ts +++ b/packages/twenty-apps/internal/twenty-for-twenty/src/modules/resend/sync/utils/sync-segments.ts @@ -60,7 +60,7 @@ export const syncSegments = async ( segmentIdMap.set(resendId, twentyId); } - return { ok: pageOutcome.ok }; + return { ok: pageOutcome.ok, errors: pageOutcome.result.errors }; }, 'segments', { startCursor: resumeCursor, onCursorAdvance }, diff --git a/packages/twenty-apps/internal/twenty-for-twenty/src/modules/resend/sync/utils/sync-templates.ts b/packages/twenty-apps/internal/twenty-for-twenty/src/modules/resend/sync/utils/sync-templates.ts index a59a0170130..a065d77cb06 100644 --- a/packages/twenty-apps/internal/twenty-for-twenty/src/modules/resend/sync/utils/sync-templates.ts +++ b/packages/twenty-apps/internal/twenty-for-twenty/src/modules/resend/sync/utils/sync-templates.ts @@ -126,7 +126,7 @@ export const syncTemplates = async ( aggregate.updated += pageOutcome.result.updated; aggregate.errors.push(...pageOutcome.result.errors); - return { ok: pageOutcome.ok }; + return { ok: pageOutcome.ok, errors: pageOutcome.result.errors }; }, 'templates', { startCursor: resumeCursor, onCursorAdvance }, diff --git a/packages/twenty-apps/internal/twenty-for-twenty/src/modules/resend/sync/utils/sync-topics.ts b/packages/twenty-apps/internal/twenty-for-twenty/src/modules/resend/sync/utils/sync-topics.ts index 07166adca6e..6a06a3e76b7 100644 --- a/packages/twenty-apps/internal/twenty-for-twenty/src/modules/resend/sync/utils/sync-topics.ts +++ b/packages/twenty-apps/internal/twenty-for-twenty/src/modules/resend/sync/utils/sync-topics.ts @@ -81,8 +81,13 @@ export const syncTopics = async ( } if (!pageOutcome.ok) { + const detail = + pageOutcome.result.errors.length > 0 + ? ` failures: ${pageOutcome.result.errors.join(' | ')}` + : ''; + throw new Error( - 'Resend topics page reported per-item failures; aborting', + `Resend topics page reported per-item failures; aborting.${detail}`, ); } });