@@ -1125,3 +1125,60 @@ describe("base path", () => {
11251125 expect ( text ) . toBe ( "hello world" ) ;
11261126 } ) ;
11271127} ) ;
1128+
1129+ /**
1130+ * @see https://github.com/better-auth/better-call/issues/12
1131+ */
1132+ describe ( "streaming response" , ( ) => {
1133+ it ( "returns a Response with a ReadableStream body unchanged from the handler" , async ( ) => {
1134+ const encoder = new TextEncoder ( ) ;
1135+ const messages = [ "Message 0\n" , "Message 1\n" , "Message 2\n" ] ;
1136+ const endpoint = createEndpoint (
1137+ "/ai/realtime" ,
1138+ { method : "POST" } ,
1139+ async ( ) => {
1140+ const queue = [ ...messages ] ;
1141+ const stream = new ReadableStream ( {
1142+ pull ( controller ) {
1143+ const next = queue . shift ( ) ;
1144+ if ( next === undefined ) {
1145+ controller . close ( ) ;
1146+ return ;
1147+ }
1148+ controller . enqueue ( encoder . encode ( next ) ) ;
1149+ } ,
1150+ } ) ;
1151+ return new Response ( stream , {
1152+ status : 200 ,
1153+ headers : {
1154+ "Content-Type" : "application/x-ndjson" ,
1155+ "Cache-Control" : "no-cache" ,
1156+ } ,
1157+ } ) ;
1158+ } ,
1159+ ) ;
1160+ const router = createRouter ( { endpoint } ) ;
1161+
1162+ const res = await router . handler (
1163+ new Request ( "http://localhost/ai/realtime" , { method : "POST" } ) ,
1164+ ) ;
1165+
1166+ expect ( res . status ) . toBe ( 200 ) ;
1167+ expect ( res . headers . get ( "Content-Type" ) ) . toBe ( "application/x-ndjson" ) ;
1168+ expect ( res . headers . get ( "Cache-Control" ) ) . toBe ( "no-cache" ) ;
1169+
1170+ if ( ! res . body ) {
1171+ throw new Error ( "Body is null" ) ;
1172+ }
1173+ const reader = res . body . getReader ( ) ;
1174+ const decoder = new TextDecoder ( ) ;
1175+ let combined = "" ;
1176+ while ( true ) {
1177+ const { done, value } = await reader . read ( ) ;
1178+ if ( done ) break ;
1179+ combined += decoder . decode ( value , { stream : true } ) ;
1180+ }
1181+ combined += decoder . decode ( ) ;
1182+ expect ( combined ) . toBe ( messages . join ( "" ) ) ;
1183+ } ) ;
1184+ } ) ;
0 commit comments