11import { NextResponse } from "next/server" ;
22import { getEntityResearch , deepResearch , searchEntityLocations , streamEntityResearch } from "@/lib/valyu" ;
3+ import { isSelfHostedMode } from "@/lib/app-mode" ;
34
45export const dynamic = "force-dynamic" ;
56import { geocodeLocationsFromText } from "@/lib/geocoding" ;
@@ -9,6 +10,7 @@ export async function GET(request: Request) {
910 const { searchParams } = new URL ( request . url ) ;
1011 const name = searchParams . get ( "name" ) ;
1112 const stream = searchParams . get ( "stream" ) === "true" ;
13+ const accessToken = searchParams . get ( "accessToken" ) ;
1214
1315 if ( ! name ) {
1416 return NextResponse . json (
@@ -17,14 +19,23 @@ export async function GET(request: Request) {
1719 ) ;
1820 }
1921
22+ // In valyu mode, require authentication
23+ const selfHosted = isSelfHostedMode ( ) ;
24+ if ( ! selfHosted && ! accessToken ) {
25+ return NextResponse . json (
26+ { error : "Authentication required" , requiresReauth : true } ,
27+ { status : 401 }
28+ ) ;
29+ }
30+
2031 // Streaming mode - use Server-Sent Events
2132 if ( stream ) {
2233 const encoder = new TextEncoder ( ) ;
2334
2435 const readable = new ReadableStream ( {
2536 async start ( controller ) {
2637 try {
27- for await ( const chunk of streamEntityResearch ( name ) ) {
38+ for await ( const chunk of streamEntityResearch ( name , { accessToken : accessToken || undefined } ) ) {
2839 const data = `data: ${ JSON . stringify ( chunk ) } \n\n` ;
2940 controller . enqueue ( encoder . encode ( data ) ) ;
3041 }
@@ -53,7 +64,7 @@ export async function GET(request: Request) {
5364 const deep = searchParams . get ( "deep" ) === "true" ;
5465
5566 try {
56- const entityData = await getEntityResearch ( name ) ;
67+ const entityData = await getEntityResearch ( name , { accessToken : accessToken || undefined } ) ;
5768
5869 if ( ! entityData ) {
5970 return NextResponse . json (
@@ -73,7 +84,7 @@ export async function GET(request: Request) {
7384 } ;
7485
7586 if ( deep ) {
76- const research = await deepResearch ( name ) ;
87+ const research = await deepResearch ( name , { accessToken : accessToken || undefined } ) ;
7788 profile . researchSummary = research . summary ;
7889 }
7990
@@ -90,7 +101,7 @@ export async function GET(request: Request) {
90101export async function POST ( request : Request ) {
91102 try {
92103 const body = await request . json ( ) ;
93- const { name, includeDeepResearch } = body ;
104+ const { name, includeDeepResearch, accessToken } = body ;
94105
95106 if ( ! name ) {
96107 return NextResponse . json (
@@ -99,9 +110,18 @@ export async function POST(request: Request) {
99110 ) ;
100111 }
101112
113+ // In valyu mode, require authentication
114+ const selfHosted = isSelfHostedMode ( ) ;
115+ if ( ! selfHosted && ! accessToken ) {
116+ return NextResponse . json (
117+ { error : "Authentication required" , requiresReauth : true } ,
118+ { status : 401 }
119+ ) ;
120+ }
121+
102122 const [ entityData , locationContent ] = await Promise . all ( [
103- getEntityResearch ( name ) ,
104- searchEntityLocations ( name ) ,
123+ getEntityResearch ( name , { accessToken : accessToken || undefined } ) ,
124+ searchEntityLocations ( name , { accessToken : accessToken || undefined } ) ,
105125 ] ) ;
106126
107127 if ( ! entityData ) {
@@ -137,7 +157,7 @@ export async function POST(request: Request) {
137157 let pdfUrl = undefined ;
138158
139159 if ( includeDeepResearch ) {
140- const research = await deepResearch ( name ) ;
160+ const research = await deepResearch ( name , { accessToken : accessToken || undefined } ) ;
141161 profile . researchSummary = research . summary ;
142162 deliverables = research . deliverables ;
143163 pdfUrl = research . pdfUrl ;
0 commit comments