| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 | import { checkTaskStatus as fetchCheckTaskStatus } from '@/service/plugins'import type { PluginStatus } from '../../types'import { TaskStatus } from '../../types'import { sleep } from '@/utils'const INTERVAL = 10 * 1000 // 10 secondstype Params = {  taskId: string  pluginUniqueIdentifier: string}function checkTaskStatus() {  let nextStatus = TaskStatus.running  let isStop = false  const doCheckStatus = async ({    taskId,    pluginUniqueIdentifier,  }: Params) => {    if (isStop) {      return {        status: TaskStatus.success,      }    }    const res = await fetchCheckTaskStatus(taskId)    const { plugins } = res.task    const plugin = plugins.find((p: PluginStatus) => p.plugin_unique_identifier === pluginUniqueIdentifier)    if (!plugin) {      nextStatus = TaskStatus.failed      return {        status: TaskStatus.failed,        error: 'Plugin package not found',      }    }    nextStatus = plugin.status    if (nextStatus === TaskStatus.running) {      await sleep(INTERVAL)      return await doCheckStatus({        taskId,        pluginUniqueIdentifier,      })    }    if (nextStatus === TaskStatus.failed) {      return {        status: TaskStatus.failed,        error: plugin.message,      }    }    return ({      status: TaskStatus.success,    })  }  return {    check: doCheckStatus,    stop: () => {      isStop = true    },  }}export default checkTaskStatus
 |