| 
					
				 | 
			
			
				@@ -1,4 +1,5 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import { API_PREFIX, PUBLIC_API_PREFIX, IS_CE_EDITION } from '@/config' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/* eslint-disable no-new, prefer-promise-reject-errors */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import { API_PREFIX, IS_CE_EDITION, PUBLIC_API_PREFIX } from '@/config' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import Toast from '@/app/components/base/toast' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 const TIME_OUT = 100000 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -46,12 +47,11 @@ function unicodeToChar(text: string) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 export function format(text: string) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   let res = text.trim() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  if (res.startsWith('\n')) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  if (res.startsWith('\n')) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     res = res.replace('\n', '') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   return res.replaceAll('\n', '<br/>').replaceAll('```', '') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -77,12 +77,22 @@ const handleStream = (response: any, onData: IOnData, onCompleted?: IOnCompleted 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         lines.forEach((message) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           if (message.startsWith('data: ')) { // check if it starts with data: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             // console.log(message); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            bufferObj = JSON.parse(message.substring(6)) // remove data: and parse as json 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              bufferObj = JSON.parse(message.substring(6)) // remove data: and parse as json 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            catch (e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              // mute handle message cut off 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              onData('', isFirstMessage, { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                conversationId: bufferObj?.conversation_id, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                messageId: bufferObj?.id, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if (bufferObj.status === 400 || !bufferObj.event) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				               onData('', false, { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 conversationId: undefined, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 messageId: '', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                errorMessage: bufferObj.message 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                errorMessage: bufferObj.message, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				               }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				               hasError = true 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				               onCompleted && onCompleted(true) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -97,19 +107,19 @@ const handleStream = (response: any, onData: IOnData, onCompleted?: IOnCompleted 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         buffer = lines[lines.length - 1] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      } catch (e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      catch (e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         onData('', false, { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           conversationId: undefined, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           messageId: '', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-          errorMessage: e + '' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          errorMessage: `${e}`, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         hasError = true 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         onCompleted && onCompleted(true) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      if (!hasError) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      if (!hasError) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         read() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   read() 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -120,8 +130,8 @@ const baseFetch = ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   fetchOptions: any, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     isPublicAPI = false, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    needAllResponseContent 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  }: IOtherOptions 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    needAllResponseContent, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  }: IOtherOptions, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 ) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   const options = Object.assign({}, baseOptions, fetchOptions) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   if (isPublicAPI) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -129,7 +139,7 @@ const baseFetch = ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     options.headers.set('Authorization', `bearer ${sharedToken}`) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  let urlPrefix = isPublicAPI ? PUBLIC_API_PREFIX : API_PREFIX 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  const urlPrefix = isPublicAPI ? PUBLIC_API_PREFIX : API_PREFIX 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   let urlWithPrefix = `${urlPrefix}${url.startsWith('/') ? url : `/${url}`}` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   const { method, params, body } = options 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -176,12 +186,14 @@ const baseFetch = ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                   bodyJson.then((data: any) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     if (data.code === 'not_setup') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                       globalThis.location.href = `${globalThis.location.origin}/install` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                       if (location.pathname === '/signin') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         bodyJson.then((data: any) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                           Toast.notify({ type: 'error', message: data.message }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                      } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                      else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         globalThis.location.href = loginUrl 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                       } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -195,15 +207,13 @@ const baseFetch = ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 new Promise(() => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                   bodyJson.then((data: any) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     Toast.notify({ type: 'error', message: data.message }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    if (data.code === 'already_setup') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (data.code === 'already_setup') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                       globalThis.location.href = `${globalThis.location.origin}/signin` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                   }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 break 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				               // fall through 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				               default: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                // eslint-disable-next-line no-new 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 new Promise(() => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                   bodyJson.then((data: any) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     Toast.notify({ type: 'error', message: data.message }) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -215,7 +225,7 @@ const baseFetch = ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           // handle delete api. Delete api not return content. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           if (res.status === 204) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            resolve({ result: "success" }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            resolve({ result: 'success' }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -243,22 +253,21 @@ export const upload = (options: any): Promise<any> => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     ...defaultOptions, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     ...options, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     headers: { ...defaultOptions.headers, ...options.headers }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  return new Promise(function (resolve, reject) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  return new Promise((resolve, reject) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     const xhr = options.xhr 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    xhr.open(options.method, options.url); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    for (const key in options.headers) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      xhr.setRequestHeader(key, options.headers[key]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    xhr.open(options.method, options.url) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    for (const key in options.headers) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      xhr.setRequestHeader(key, options.headers[key]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     xhr.withCredentials = true 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     xhr.responseType = 'json' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     xhr.onreadystatechange = function () { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       if (xhr.readyState === 4) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (xhr.status === 201) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (xhr.status === 201) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           resolve(xhr.response) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           reject(xhr) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     xhr.upload.onprogress = options.onprogress 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -287,7 +296,6 @@ export const ssePost = (url: string, fetchOptions: any, { isPublicAPI = false, o 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     .then((res: any) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       // debugger 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       if (!/^(2|3)\d{2}$/.test(res.status)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        // eslint-disable-next-line no-new 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         new Promise(() => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           res.json().then((data: any) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             Toast.notify({ type: 'error', message: data.message || 'Server Error' }) 
			 |