@@ -147,6 +147,55 @@ if (window.MONGOOSE_STUDIO_CONFIG.isLambda) {
147147 updateDocument : function updateDocument ( params ) {
148148 return client . post ( '' , { action : 'Model.updateDocument' , ...params } ) . then ( res => res . data ) ;
149149 } ,
150+ streamChatMessage : async function * streamChatMessage ( params ) {
151+ const accessToken = window . localStorage . getItem ( '_mongooseStudioAccessToken' ) || null ;
152+ const url = window . MONGOOSE_STUDIO_CONFIG . baseURL + '?' + new URLSearchParams ( { action : 'Model.streamChatMessage' , ...params } ) . toString ( ) ;
153+
154+ const response = await fetch ( url , {
155+ method : 'GET' ,
156+ headers : {
157+ Authorization : `${ accessToken } ` ,
158+ Accept : 'text/event-stream'
159+ }
160+ } ) ;
161+
162+ if ( ! response . ok ) {
163+ throw new Error ( `HTTP error! Status: ${ response . status } ` ) ;
164+ }
165+
166+ const reader = response . body . getReader ( ) ;
167+ const decoder = new TextDecoder ( 'utf-8' ) ;
168+ let buffer = '' ;
169+
170+ while ( true ) {
171+ const { done, value } = await reader . read ( ) ;
172+ if ( done ) break ;
173+ buffer += decoder . decode ( value , { stream : true } ) ;
174+
175+ let eventEnd ;
176+ while ( ( eventEnd = buffer . indexOf ( '\n\n' ) ) !== - 1 ) {
177+ const eventStr = buffer . slice ( 0 , eventEnd ) ;
178+ buffer = buffer . slice ( eventEnd + 2 ) ;
179+
180+ // Parse SSE event
181+ const lines = eventStr . split ( '\n' ) ;
182+ let data = '' ;
183+ for ( const line of lines ) {
184+ if ( line . startsWith ( 'data:' ) ) {
185+ data += line . slice ( 5 ) . trim ( ) ;
186+ }
187+ }
188+ if ( data ) {
189+ try {
190+ const res = JSON . parse ( data ) ;
191+ yield res ;
192+ } catch ( err ) {
193+ yield data ;
194+ }
195+ }
196+ }
197+ }
198+ } ,
150199 updateDocuments : function updateDocuments ( params ) {
151200 return client . post ( '' , { action : 'Model.updateDocuments' , ...params } ) . then ( res => res . data ) ;
152201 }
@@ -356,6 +405,55 @@ if (window.MONGOOSE_STUDIO_CONFIG.isLambda) {
356405 updateDocument : function updateDocument ( params ) {
357406 return client . post ( '/Model/updateDocument' , params ) . then ( res => res . data ) ;
358407 } ,
408+ streamChatMessage : async function * streamChatMessage ( params ) {
409+ const accessToken = window . localStorage . getItem ( '_mongooseStudioAccessToken' ) || null ;
410+ const url = window . MONGOOSE_STUDIO_CONFIG . baseURL + '/Model/streamChatMessage?' + new URLSearchParams ( params ) . toString ( ) ;
411+
412+ const response = await fetch ( url , {
413+ method : 'GET' ,
414+ headers : {
415+ Authorization : `${ accessToken } ` ,
416+ Accept : 'text/event-stream'
417+ }
418+ } ) ;
419+
420+ if ( ! response . ok ) {
421+ throw new Error ( `HTTP error! Status: ${ response . status } ` ) ;
422+ }
423+
424+ const reader = response . body . getReader ( ) ;
425+ const decoder = new TextDecoder ( 'utf-8' ) ;
426+ let buffer = '' ;
427+
428+ while ( true ) {
429+ const { done, value } = await reader . read ( ) ;
430+ if ( done ) break ;
431+ buffer += decoder . decode ( value , { stream : true } ) ;
432+
433+ let eventEnd ;
434+ while ( ( eventEnd = buffer . indexOf ( '\n\n' ) ) !== - 1 ) {
435+ const eventStr = buffer . slice ( 0 , eventEnd ) ;
436+ buffer = buffer . slice ( eventEnd + 2 ) ;
437+
438+ // Parse SSE event
439+ const lines = eventStr . split ( '\n' ) ;
440+ let data = '' ;
441+ for ( const line of lines ) {
442+ if ( line . startsWith ( 'data:' ) ) {
443+ data += line . slice ( 5 ) . trim ( ) ;
444+ }
445+ }
446+ if ( data ) {
447+ try {
448+ yield JSON . parse ( data ) ;
449+ } catch ( err ) {
450+ // If not JSON, yield as string
451+ yield data ;
452+ }
453+ }
454+ }
455+ }
456+ } ,
359457 updateDocuments : function updateDocument ( params ) {
360458 return client . post ( '/Model/updateDocuments' , params ) . then ( res => res . data ) ;
361459 }
0 commit comments