stablyai/orca · error · JiraSummaryLookupError

auth

auth

Error message

jira_summary_lookup:auth

What it means

Thrown by getIssueSummary at the start when getClients(siteId) itself throws. This wraps the underlying error as a JiraSummaryLookupError with code 'auth', because getClients throws when credentials cannot be loaded or decrypted for the site. The .code property and the 'jira_summary_lookup:auth' message prefix let callers discriminate it from other lookup outcomes.

Source

Thrown at src/main/jira/issues.ts:679

      return mapped
    } catch (error) {
      console.warn('[jira] getIssue media load failed:', error)
      return mapJiraIssue(entry.site, issue)
    }
  }
  return null
}

export async function getIssueSummary(
  key: string,
  siteId: string,
  signal?: AbortSignal
): Promise<JiraIssue | null> {
  let entries: JiraClientForSite[]
  try {
    entries = getClients(siteId)
  } catch (error) {
    throw new JiraSummaryLookupError('auth', error)
  }
  const entry = entries.find((candidate) => candidate.site.id === siteId)
  if (!entry) {
    throw new JiraSummaryLookupError('disconnected')
  }

  return withJiraDeadline(signal, ISSUE_SUMMARY_TIMEOUT_MS, async (requestSignal) => {
    await acquire(requestSignal)
    try {
      const params = new URLSearchParams({ fields: ISSUE_SUMMARY_FIELDS.join(',') })
      const issue = await settleJiraSummaryRead(
        jiraRequest<JiraRecord>(
          entry,
          `${apiBasePath(entry.site)}/issue/${encodeURIComponent(key)}?${params.toString()}`,
          { signal: requestSignal }
        ),
        requestSignal
      )

View on GitHub (pinned to 1136503c6a)

Solutions

  1. Reconnect the Jira site to re-store fresh credentials.
  2. Verify the site entry in the Jira site file is intact and the encryption key is available.
  3. Check getClients' underlying error (passed as cause) for decryption details.
  4. Catch via getJiraSummaryLookupErrorCode(error) === 'auth' and prompt re-login.

Example fix

// before
try { await getIssueSummary(key, siteId) } catch (e) { /* ? */ }
// after
try {
  await getIssueSummary(key, siteId)
} catch (e) {
  if (getJiraSummaryLookupErrorCode(e) === 'auth') await promptJiraReconnect(siteId)
  else throw e
}
Defensive patterns

Strategy: try-catch

Validate before calling

try { getClients(siteId) } catch { await promptJiraReconnect(siteId); return }

Type guard

function isJiraSummaryAuthError(e: unknown): boolean {
  return getJiraSummaryLookupErrorCode(e) === 'auth'
}

Try / catch

try { return await getIssueSummary(key, siteId, signal) }
catch (e) {
  if (getJiraSummaryLookupErrorCode(e) === 'auth') { await reconnectJira(siteId); return getIssueSummary(key, siteId, signal) }
  throw e
}

Prevention

When it happens

Trigger: The stored Jira access token for the site failed to decrypt (key rotation, corrupted site file), or the site configuration is invalid. getClients raises before any HTTP call is made, so this is purely a local credential/config failure.

Common situations: OS keychain/cryptographic key changed across machines or after OS update. Site file manually edited. Token expired and refresh failed during client construction.

Related errors


AI-assisted analysis of stablyai/orca@1136503c6a (2026-08-12). Data as JSON: /api/errors/a568e678daaef364. Report an issue: GitHub.