|
1 | 1 | import { createLogger } from '@sim/logger' |
| 2 | +import { getErrorMessage } from '@sim/utils/errors' |
2 | 3 | import { type NextRequest, NextResponse } from 'next/server' |
3 | 4 | import { slackUsersListOrDetailContract } from '@/lib/api/contracts/selectors/slack' |
4 | 5 | import { parseRequest } from '@/lib/api/server' |
@@ -29,6 +30,9 @@ interface SlackUsersResult { |
29 | 30 | } |
30 | 31 |
|
31 | 32 | export const POST = withRouteHandler(async (request: NextRequest) => { |
| 33 | + let providerRequestStarted = false |
| 34 | + let reauthorizationAvailable = false |
| 35 | + |
32 | 36 | try { |
33 | 37 | const requestId = generateRequestId() |
34 | 38 | const authentication = await authenticateSelectorRequest(request) |
@@ -64,7 +68,9 @@ export const POST = withRouteHandler(async (request: NextRequest) => { |
64 | 68 | { status: resolvedCredential.status } |
65 | 69 | ) |
66 | 70 | } |
67 | | - const { accessToken, isBotToken } = resolvedCredential |
| 71 | + const { accessToken, isBotToken, credentialAccess } = resolvedCredential |
| 72 | + reauthorizationAvailable = credentialAccess !== undefined |
| 73 | + providerRequestStarted = true |
68 | 74 |
|
69 | 75 | if (userId) { |
70 | 76 | const userData = await fetchSlackUser(accessToken, userId) |
@@ -95,7 +101,17 @@ export const POST = withRouteHandler(async (request: NextRequest) => { |
95 | 101 | tokenType: isBotToken ? 'bot_token' : 'oauth', |
96 | 102 | }) |
97 | 103 | return NextResponse.json({ users }) |
98 | | - } catch { |
| 104 | + } catch (error) { |
| 105 | + if (providerRequestStarted && getErrorMessage(error) === 'invalid_auth') { |
| 106 | + logger.warn('Slack rejected selector authentication') |
| 107 | + return NextResponse.json( |
| 108 | + { |
| 109 | + error: 'Slack authentication failed', |
| 110 | + ...(reauthorizationAvailable ? { authRequired: true } : {}), |
| 111 | + }, |
| 112 | + { status: 401 } |
| 113 | + ) |
| 114 | + } |
99 | 115 | logger.error('Error processing Slack users request') |
100 | 116 | return NextResponse.json({ error: 'Failed to retrieve Slack users' }, { status: 500 }) |
101 | 117 | } |
|
0 commit comments