fix: sse配置缺失

This commit is contained in:
bietiaop
2025-01-24 22:36:40 +08:00
parent fe9c565ad4
commit 71a62caf8f
6 changed files with 230 additions and 2 deletions

View File

@@ -0,0 +1,59 @@
import { Chip } from '@heroui/chip'
import NetworkDisplayCard from './common_card'
import type { NetworkDisplayCardFields } from './common_card'
interface HTTPSSEServerDisplayCardProps {
data: OneBotConfig['network']['httpSseServers'][0]
showType?: boolean
onEdit: () => void
onEnable: () => Promise<void>
onDelete: () => Promise<void>
onEnableDebug: () => Promise<void>
}
const HTTPSSEServerDisplayCard: React.FC<HTTPSSEServerDisplayCardProps> = (
props
) => {
const { data, showType, onEdit, onEnable, onDelete, onEnableDebug } = props
const { host, port, enableCors, enableWebsocket, messagePostFormat } = data
const fields: NetworkDisplayCardFields<'httpServers'> = [
{ label: '主机', value: host },
{ label: '端口', value: port },
{ label: '消息格式', value: messagePostFormat },
{
label: 'CORS',
value: enableCors,
render: (value) => (
<Chip color={value ? 'success' : 'default'} size="sm" variant="flat">
{value ? '已启用' : '未启用'}
</Chip>
)
},
{
label: 'WS',
value: enableWebsocket,
render: (value) => (
<Chip color={value ? 'success' : 'default'} size="sm" variant="flat">
{value ? '已启用' : '未启用'}
</Chip>
)
}
]
return (
<NetworkDisplayCard
data={data}
showType={showType}
typeLabel="HTTP服务器"
fields={fields}
onEdit={onEdit}
onEnable={onEnable}
onDelete={onDelete}
onEnableDebug={onEnableDebug}
/>
)
}
export default HTTPSSEServerDisplayCard

View File

@@ -0,0 +1,120 @@
import GenericForm from './generic_form'
import type { Field } from './generic_form'
export interface HTTPServerSSEFormProps {
data?: OneBotConfig['network']['httpSseServers'][0]
onClose: () => void
onSubmit: (
data: OneBotConfig['network']['httpSseServers'][0]
) => Promise<void>
}
type HTTPServerSSEFormType = OneBotConfig['network']['httpSseServers']
const HTTPServerSSEForm: React.FC<HTTPServerSSEFormProps> = ({
data,
onClose,
onSubmit
}) => {
const defaultValues: HTTPServerSSEFormType[0] = {
enable: false,
name: '',
host: '0.0.0.0',
port: 3000,
enableCors: true,
enableWebsocket: true,
messagePostFormat: 'array',
token: '',
debug: false,
reportSelfMessage: false
}
const fields: Field<'httpSseServers'>[] = [
{
name: 'enable',
label: '启用',
type: 'switch',
description: '保存后启用此配置',
colSpan: 1
},
{
name: 'debug',
label: '开启Debug',
type: 'switch',
description: '是否开启调试模式',
colSpan: 1
},
{
name: 'name',
label: '名称',
type: 'input',
placeholder: '请输入名称',
isRequired: true,
isDisabled: !!data
},
{
name: 'host',
label: 'Host',
type: 'input',
placeholder: '请输入主机地址',
isRequired: true
},
{
name: 'port',
label: 'Port',
type: 'input',
placeholder: '请输入端口',
isRequired: true
},
{
name: 'enableCors',
label: '启用CORS',
type: 'switch',
description: '是否启用CORS跨域',
colSpan: 1
},
{
name: 'enableWebsocket',
label: '启用Websocket',
type: 'switch',
description: '是否启用Websocket',
colSpan: 1
},
{
name: 'messagePostFormat',
label: '消息格式',
type: 'select',
placeholder: '请选择消息格式',
isRequired: true,
options: [
{ key: 'array', value: 'Array' },
{ key: 'string', value: 'String' }
]
},
{
name: 'token',
label: 'Token',
type: 'input',
placeholder: '请输入Token'
},
{
name: 'reportSelfMessage',
label: '上报自身消息',
type: 'switch',
description: '是否上报自身消息',
colSpan: 1
}
]
return (
<GenericForm
data={data}
defaultValues={defaultValues}
onClose={onClose}
onSubmit={onSubmit}
fields={fields}
/>
)
}
export default HTTPServerSSEForm

View File

@@ -5,12 +5,14 @@ import useConfig from '@/hooks/use-config'
import HTTPClientForm from './http_client'
import HTTPServerForm from './http_server'
import HTTPServerSSEForm from './http_sse'
import WebsocketClientForm from './ws_client'
import WebsocketServerForm from './ws_server'
const modalTitle = {
httpServers: 'HTTP Server',
httpClients: 'HTTP Client',
httpSseServers: 'HTTP SSE Server',
websocketServers: 'Websocket Server',
websocketClients: 'Websocket Client'
}
@@ -82,6 +84,14 @@ const NetworkFormModal = <T extends keyof OneBotConfig['network']>(
onSubmit={onSubmit}
/>
)
case 'httpSseServers':
return (
<HTTPServerSSEForm
data={data as OneBotConfig['network']['httpSseServers'][0]}
onClose={onClose}
onSubmit={onSubmit}
/>
)
default:
return null
}

View File

@@ -9,6 +9,7 @@ import { IoMdRefresh } from 'react-icons/io'
import AddButton from '@/components/button/add_button'
import HTTPClientDisplayCard from '@/components/display_card/http_client'
import HTTPServerDisplayCard from '@/components/display_card/http_server'
import HTTPSSEServerDisplayCard from '@/components/display_card/http_sse_server'
import WebsocketClientDisplayCard from '@/components/display_card/ws_client'
import WebsocketServerDisplayCard from '@/components/display_card/ws_server'
import NetworkFormModal from '@/components/network_edit/modal'
@@ -59,7 +60,13 @@ export default function NetworkPage() {
useState<keyof OneBotConfig['network']>('httpServers')
const [activeName, setActiveName] = useState<string>('')
const {
network: { httpServers, httpClients, websocketServers, websocketClients }
network: {
httpServers,
httpClients,
httpSseServers,
websocketServers,
websocketClients
}
} = config
const [loading, setLoading] = useState(false)
const { isOpen, onOpen, onOpenChange } = useDisclosure()
@@ -204,6 +211,26 @@ export default function NetworkPage() {
}}
/>
)
case 'httpSseServers':
return (
<HTTPSSEServerDisplayCard
key={item.name}
showType={showType}
data={item as OneBotConfig['network']['httpSseServers'][0]}
onDelete={async () => {
await onDelete('httpSseServers', item.name)
}}
onEdit={() => {
onEdit('httpSseServers', item.name)
}}
onEnable={async () => {
await onEnable('httpSseServers', item.name)
}}
onEnableDebug={async () => {
await onEnableDebug('httpSseServers', item.name)
}}
/>
)
case 'websocketServers':
return (
<WebsocketServerDisplayCard
@@ -255,7 +282,8 @@ export default function NetworkPage() {
...httpServers,
...httpClients,
...websocketServers,
...websocketClients
...websocketClients,
...httpSseServers
]
.sort((a, b) => a.name.localeCompare(b.name))
.map((item) => {
@@ -300,6 +328,11 @@ export default function NetworkPage() {
title: 'HTTP客户端',
items: httpClients.map((item) => renderCard('httpClients', item))
},
{
key: 'httpSseServers',
title: 'HTTP SSE服务器',
items: httpSseServers.map((item) => renderCard('httpSseServers', item))
},
{
key: 'websocketServers',
title: 'Websocket服务器',

View File

@@ -11,6 +11,7 @@ const initialState: ConfigState = {
network: {
httpServers: [],
httpClients: [],
httpSseServers: [],
websocketServers: [],
websocketClients: []
},

View File

@@ -44,9 +44,14 @@ interface WebsocketClientConfig extends AdapterConfig {
heartInterval: number
}
interface HttpSseServerConfig extends HttpServerConfig {
reportSelfMessage: boolean
}
interface NetworkConfig {
httpServers: Array<HttpServerConfig>
httpClients: Array<HttpClientConfig>
httpSseServers: Array<HttpSseServerConfig>
websocketServers: Array<WebsocketServerConfig>
websocketClients: Array<WebsocketClientConfig>
}