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