From 7a2a721932cc5eef1b1e1b1bd1fea5a0c20ab88a Mon Sep 17 00:00:00 2001 From: Waleed Latif Date: Tue, 25 Mar 2025 16:17:05 -0700 Subject: [PATCH] improvement(tools): fixed some confluence tool issues --- .../api/auth/oauth/confluence/page/route.ts | 89 +++++++++++++++++++ .../api/auth/oauth/confluence/pages/route.ts | 25 +++++- 2 files changed, 111 insertions(+), 3 deletions(-) create mode 100644 sim/app/api/auth/oauth/confluence/page/route.ts diff --git a/sim/app/api/auth/oauth/confluence/page/route.ts b/sim/app/api/auth/oauth/confluence/page/route.ts new file mode 100644 index 0000000000..63227741e8 --- /dev/null +++ b/sim/app/api/auth/oauth/confluence/page/route.ts @@ -0,0 +1,89 @@ +import { NextResponse } from 'next/server' + +export async function POST(request: Request) { + try { + const { domain, accessToken, pageId } = await request.json() + + if (!domain) { + return NextResponse.json({ error: 'Domain is required' }, { status: 400 }) + } + + if (!accessToken) { + return NextResponse.json({ error: 'Access token is required' }, { status: 400 }) + } + + if (!pageId) { + return NextResponse.json({ error: 'Page ID is required' }, { status: 400 }) + } + + // Log request details for debugging + console.log('Request details:', { + domain, + tokenLength: accessToken ? accessToken.length : 0, + pageId, + }) + + // Build the URL - using the same format as retrieve.ts + const url = `https://${domain}/wiki/api/v2/pages/${pageId}?expand=body.view` + + console.log(`Fetching Confluence page from: ${url}`) + + // Make the request to Confluence API + const response = await fetch(url, { + method: 'GET', + headers: { + 'Content-Type': 'application/json', + Accept: 'application/json', + Authorization: `Bearer ${accessToken}`, + }, + }) + + console.log('Response status:', response.status, response.statusText) + + if (!response.ok) { + console.error(`Confluence API error: ${response.status} ${response.statusText}`) + let errorMessage + + try { + const errorData = await response.json() + console.error('Error details:', JSON.stringify(errorData, null, 2)) + errorMessage = errorData.message || `Failed to fetch Confluence page (${response.status})` + } catch (e) { + console.error('Could not parse error response as JSON:', e) + + // Try to get the response text for more context + try { + const text = await response.text() + console.error('Response text:', text) + errorMessage = `Failed to fetch Confluence page: ${response.status} ${response.statusText}` + } catch (textError) { + errorMessage = `Failed to fetch Confluence page: ${response.status} ${response.statusText}` + } + } + + return NextResponse.json({ error: errorMessage }, { status: response.status }) + } + + const data = await response.json() + console.log(`Successfully fetched page: ${data.id} - ${data.title}`) + + return NextResponse.json({ + file: { + id: data.id, + name: data.title, + mimeType: 'confluence/page', + url: data._links?.webui || '', + modifiedTime: data.version?.createdAt || '', + spaceId: data.spaceId, + webViewLink: data._links?.webui || '', + content: data.body?.view?.value || '', + }, + }) + } catch (error) { + console.error('Error fetching Confluence page:', error) + return NextResponse.json( + { error: (error as Error).message || 'Internal server error' }, + { status: 500 } + ) + } +} diff --git a/sim/app/api/auth/oauth/confluence/pages/route.ts b/sim/app/api/auth/oauth/confluence/pages/route.ts index 441af50168..1e67dd0e67 100644 --- a/sim/app/api/auth/oauth/confluence/pages/route.ts +++ b/sim/app/api/auth/oauth/confluence/pages/route.ts @@ -12,6 +12,14 @@ export async function POST(request: Request) { return NextResponse.json({ error: 'Access token is required' }, { status: 400 }) } + // Log request details for debugging + console.log('Request details:', { + domain, + tokenLength: accessToken ? accessToken.length : 0, + hasTitle: !!title, + limit, + }) + // Build the URL with query parameters const baseUrl = `https://${domain}/wiki/api/v2/pages` const queryParams = new URLSearchParams() @@ -29,7 +37,7 @@ export async function POST(request: Request) { console.log(`Fetching Confluence pages from: ${url}`) - // Make the request to Confluence API + // Make the request to Confluence API with OAuth Bearer token const response = await fetch(url, { method: 'GET', headers: { @@ -38,16 +46,27 @@ export async function POST(request: Request) { }, }) + console.log('Response status:', response.status, response.statusText) + if (!response.ok) { console.error(`Confluence API error: ${response.status} ${response.statusText}`) let errorMessage try { const errorData = await response.json() + console.error('Error details:', JSON.stringify(errorData, null, 2)) errorMessage = errorData.message || `Failed to fetch Confluence pages (${response.status})` - console.error('Error details:', errorData) } catch (e) { - errorMessage = `Failed to fetch Confluence pages: ${response.status} ${response.statusText}` + console.error('Could not parse error response as JSON:', e) + + // Try to get the response text for more context + try { + const text = await response.text() + console.error('Response text:', text) + errorMessage = `Failed to fetch Confluence pages: ${response.status} ${response.statusText}` + } catch (textError) { + errorMessage = `Failed to fetch Confluence pages: ${response.status} ${response.statusText}` + } } return NextResponse.json({ error: errorMessage }, { status: response.status })