|
|
|
@@ -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' }) |