astrbbbb / dashboard /src /utils /restartAstrBot.ts
qa1145's picture
Upload 1245 files
8ede856 verified
import axios from 'axios'
import { getDesktopRuntimeInfo } from '@/utils/desktopRuntime'
type WaitingForRestartRef = {
check: (initialStartTime?: number | null) => void | Promise<void>
stop?: () => void
}
async function triggerWaiting(
waitingRef?: WaitingForRestartRef | null,
initialStartTime?: number | null
) {
if (!waitingRef) return
await waitingRef.check(initialStartTime)
}
async function fetchCurrentStartTime(): Promise<number | null> {
try {
const response = await axios.get('/api/stat/start-time', { timeout: 1500 })
const rawStartTime = response?.data?.data?.start_time
const numericStartTime = Number(rawStartTime)
return Number.isFinite(numericStartTime) ? numericStartTime : null
} catch (_error) {
return null
}
}
export async function restartAstrBot(
waitingRef?: WaitingForRestartRef | null
): Promise<void> {
const { bridge: desktopBridge, hasDesktopRestartCapability, isDesktopRuntime } =
await getDesktopRuntimeInfo()
if (desktopBridge && hasDesktopRestartCapability && isDesktopRuntime) {
const authToken = localStorage.getItem('token')
const initialStartTime = await fetchCurrentStartTime()
try {
const restartPromise = desktopBridge.restartBackend(authToken)
await triggerWaiting(waitingRef, initialStartTime)
const result = await restartPromise
if (!result.ok) {
waitingRef?.stop?.()
throw new Error(result.reason || 'Failed to restart backend.')
}
} catch (error) {
waitingRef?.stop?.()
throw error
}
return
}
await axios.post('/api/stat/restart-core')
await triggerWaiting(waitingRef)
}