Add API prefix settings (#2528)
Co-authored-by: Van Pham <64197333+Van-QA@users.noreply.github.com>
This commit is contained in:
parent
c93283ec5e
commit
089e311bfd
@ -83,6 +83,7 @@ export class App implements Processor {
|
|||||||
isVerboseEnabled: args?.isVerboseEnabled,
|
isVerboseEnabled: args?.isVerboseEnabled,
|
||||||
schemaPath: join(await appResourcePath(), 'docs', 'openapi', 'jan.yaml'),
|
schemaPath: join(await appResourcePath(), 'docs', 'openapi', 'jan.yaml'),
|
||||||
baseDir: join(await appResourcePath(), 'docs', 'openapi'),
|
baseDir: join(await appResourcePath(), 'docs', 'openapi'),
|
||||||
|
prefix: args?.prefix,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -39,6 +39,7 @@ export interface ServerConfig {
|
|||||||
isVerboseEnabled?: boolean
|
isVerboseEnabled?: boolean
|
||||||
schemaPath?: string
|
schemaPath?: string
|
||||||
baseDir?: string
|
baseDir?: string
|
||||||
|
prefix?: string
|
||||||
storageAdataper?: any
|
storageAdataper?: any
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -119,7 +120,7 @@ export const startServer = async (configs?: ServerConfig): Promise<boolean> => {
|
|||||||
server.addHook('preHandler', configs.storageAdataper)
|
server.addHook('preHandler', configs.storageAdataper)
|
||||||
|
|
||||||
// Register API routes
|
// Register API routes
|
||||||
await server.register(v1Router, { prefix: '/v1' })
|
await server.register(v1Router, { prefix: configs?.prefix ?? '/v1' })
|
||||||
// Start listening for requests
|
// Start listening for requests
|
||||||
await server
|
await server
|
||||||
.listen({
|
.listen({
|
||||||
|
|||||||
@ -4,6 +4,7 @@ export const hostOptions = ['127.0.0.1', '0.0.0.0']
|
|||||||
|
|
||||||
export const apiServerPortAtom = atomWithStorage('apiServerPort', '1337')
|
export const apiServerPortAtom = atomWithStorage('apiServerPort', '1337')
|
||||||
export const apiServerHostAtom = atomWithStorage('apiServerHost', '127.0.0.1')
|
export const apiServerHostAtom = atomWithStorage('apiServerHost', '127.0.0.1')
|
||||||
|
export const apiServerPrefix = atomWithStorage('apiServerPrefix', '/v1')
|
||||||
|
|
||||||
export const apiServerCorsEnabledAtom = atomWithStorage(
|
export const apiServerCorsEnabledAtom = atomWithStorage(
|
||||||
'apiServerCorsEnabled',
|
'apiServerCorsEnabled',
|
||||||
|
|||||||
@ -56,6 +56,7 @@ import {
|
|||||||
apiServerCorsEnabledAtom,
|
apiServerCorsEnabledAtom,
|
||||||
apiServerHostAtom,
|
apiServerHostAtom,
|
||||||
apiServerPortAtom,
|
apiServerPortAtom,
|
||||||
|
apiServerPrefix,
|
||||||
apiServerVerboseLogEnabledAtom,
|
apiServerVerboseLogEnabledAtom,
|
||||||
hostOptions,
|
hostOptions,
|
||||||
} from '@/helpers/atoms/ApiServer.atom'
|
} from '@/helpers/atoms/ApiServer.atom'
|
||||||
@ -63,6 +64,7 @@ import { serverEnabledAtom } from '@/helpers/atoms/LocalServer.atom'
|
|||||||
|
|
||||||
const LocalServerScreen = () => {
|
const LocalServerScreen = () => {
|
||||||
const [errorRangePort, setErrorRangePort] = useState(false)
|
const [errorRangePort, setErrorRangePort] = useState(false)
|
||||||
|
const [errorPrefix, setErrorPrefix] = useState(false)
|
||||||
const [serverEnabled, setServerEnabled] = useAtom(serverEnabledAtom)
|
const [serverEnabled, setServerEnabled] = useAtom(serverEnabledAtom)
|
||||||
const showRightSideBar = useAtomValue(showRightSideBarAtom)
|
const showRightSideBar = useAtomValue(showRightSideBarAtom)
|
||||||
const setModalTroubleShooting = useSetAtom(modalTroubleShootingAtom)
|
const setModalTroubleShooting = useSetAtom(modalTroubleShootingAtom)
|
||||||
@ -80,6 +82,7 @@ const LocalServerScreen = () => {
|
|||||||
)
|
)
|
||||||
const [host, setHost] = useAtom(apiServerHostAtom)
|
const [host, setHost] = useAtom(apiServerHostAtom)
|
||||||
const [port, setPort] = useAtom(apiServerPortAtom)
|
const [port, setPort] = useAtom(apiServerPortAtom)
|
||||||
|
const [prefix, setPrefix] = useAtom(apiServerPrefix)
|
||||||
const [loadModelError, setLoadModelError] = useAtom(loadModelErrorAtom)
|
const [loadModelError, setLoadModelError] = useAtom(loadModelErrorAtom)
|
||||||
|
|
||||||
const FIRST_TIME_VISIT_API_SERVER = 'firstTimeVisitAPIServer'
|
const FIRST_TIME_VISIT_API_SERVER = 'firstTimeVisitAPIServer'
|
||||||
@ -95,6 +98,14 @@ const LocalServerScreen = () => {
|
|||||||
[setPort]
|
[setPort]
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const handleChangePrefix = useCallback(
|
||||||
|
(value: string) => {
|
||||||
|
setErrorPrefix(!value.length || !value.startsWith('/'))
|
||||||
|
setPrefix(value)
|
||||||
|
},
|
||||||
|
[setPrefix]
|
||||||
|
)
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (localStorage.getItem(FIRST_TIME_VISIT_API_SERVER) == null) {
|
if (localStorage.getItem(FIRST_TIME_VISIT_API_SERVER) == null) {
|
||||||
setFirstTimeVisitAPIServer(true)
|
setFirstTimeVisitAPIServer(true)
|
||||||
@ -105,12 +116,17 @@ const LocalServerScreen = () => {
|
|||||||
handleChangePort(port)
|
handleChangePort(port)
|
||||||
}, [handleChangePort, port])
|
}, [handleChangePort, port])
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
handleChangePrefix(prefix)
|
||||||
|
}, [handleChangePrefix, prefix])
|
||||||
|
|
||||||
const onStartServerClick = async () => {
|
const onStartServerClick = async () => {
|
||||||
if (selectedModel == null) return
|
if (selectedModel == null) return
|
||||||
try {
|
try {
|
||||||
const isStarted = await window.core?.api?.startServer({
|
const isStarted = await window.core?.api?.startServer({
|
||||||
host,
|
host,
|
||||||
port,
|
port,
|
||||||
|
prefix,
|
||||||
isCorsEnabled,
|
isCorsEnabled,
|
||||||
isVerboseEnabled,
|
isVerboseEnabled,
|
||||||
})
|
})
|
||||||
@ -159,7 +175,12 @@ const LocalServerScreen = () => {
|
|||||||
<Button
|
<Button
|
||||||
block
|
block
|
||||||
themes={serverEnabled ? 'danger' : 'primary'}
|
themes={serverEnabled ? 'danger' : 'primary'}
|
||||||
disabled={stateModel.loading || errorRangePort || !selectedModel}
|
disabled={
|
||||||
|
stateModel.loading ||
|
||||||
|
errorRangePort ||
|
||||||
|
errorPrefix ||
|
||||||
|
!selectedModel
|
||||||
|
}
|
||||||
onClick={onToggleServer}
|
onClick={onToggleServer}
|
||||||
>
|
>
|
||||||
{serverEnabled ? 'Stop' : 'Start'} Server
|
{serverEnabled ? 'Stop' : 'Start'} Server
|
||||||
@ -225,6 +246,31 @@ const LocalServerScreen = () => {
|
|||||||
<p className="mt-2 text-xs text-danger">{`The port range should be from 0 to 65536`}</p>
|
<p className="mt-2 text-xs text-danger">{`The port range should be from 0 to 65536`}</p>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
|
<div>
|
||||||
|
<label
|
||||||
|
id="prefix"
|
||||||
|
className="mb-2 inline-flex items-start gap-x-2 font-bold text-zinc-500 dark:text-gray-300"
|
||||||
|
>
|
||||||
|
API Prefix
|
||||||
|
</label>
|
||||||
|
<div className="flex items-center justify-between">
|
||||||
|
<Input
|
||||||
|
className={twMerge(
|
||||||
|
'w-full flex-shrink-0',
|
||||||
|
errorPrefix && 'border-danger'
|
||||||
|
)}
|
||||||
|
type="text"
|
||||||
|
value={prefix}
|
||||||
|
onChange={(e) => {
|
||||||
|
handleChangePrefix(e.target.value)
|
||||||
|
}}
|
||||||
|
disabled={serverEnabled}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
{errorPrefix && (
|
||||||
|
<p className="mt-2 text-xs text-danger">{`Prefix should start with /`}</p>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<label
|
<label
|
||||||
id="cors"
|
id="cors"
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user