Skip to content
Merged
Prev Previous commit
Next Next commit
fix(kb): move resolveAccessToken inside try/catch for circuit-breaker…
… coverage

Token resolution failures (e.g. revoked OAuth tokens) were thrown before
the try/catch block, bypassing consecutiveFailures tracking entirely.
Also removes dead `if (refreshed)` guards at mid-sync refresh sites since
resolveAccessToken now always returns a string or throws.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
  • Loading branch information
waleedlatif1 and claude committed Apr 8, 2026
commit c3ea8e1a382f3f4e32b636155056b0e7c56400d2
10 changes: 4 additions & 6 deletions apps/sim/lib/knowledge/connectors/sync-engine.ts
Original file line number Diff line number Diff line change
Expand Up @@ -317,8 +317,6 @@ export async function executeSync(
const userId = kbRows[0].userId
const sourceConfig = connector.sourceConfig as Record<string, unknown>

let accessToken = await resolveAccessToken(connector, connectorConfig, userId)

const lockResult = await db
.update(knowledgeConnector)
.set({ status: 'syncing', updatedAt: new Date() })
Expand Down Expand Up @@ -349,6 +347,8 @@ export async function executeSync(
let syncExitedCleanly = false

try {
let accessToken = await resolveAccessToken(connector, connectorConfig, userId)

const externalDocs: ExternalDocument[] = []
let cursor: string | undefined
let hasMore = true
Expand All @@ -365,8 +365,7 @@ export async function executeSync(

for (let pageNum = 0; hasMore && pageNum < MAX_PAGES; pageNum++) {
if (pageNum > 0 && connectorConfig.auth.mode === 'oauth') {
const refreshed = await resolveAccessToken(connector, connectorConfig, userId)
if (refreshed) accessToken = refreshed
accessToken = await resolveAccessToken(connector, connectorConfig, userId)
}

const page = await connectorConfig.listDocuments(
Expand Down Expand Up @@ -504,8 +503,7 @@ export async function executeSync(

if (deferredOps.length > 0) {
if (connectorConfig.auth.mode === 'oauth') {
const refreshed = await resolveAccessToken(connector, connectorConfig, userId)
if (refreshed) accessToken = refreshed
accessToken = await resolveAccessToken(connector, connectorConfig, userId)
}

const hydrated = await Promise.allSettled(
Expand Down
Loading