Files
ComfyUI_frontend/src/stores/bootstrapStore.ts
Alexander Brown bcb4d6e403 fix: await needsLogin (#8340)
## Summary

Add additional protection for bootstrap order issues.

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-8340-fix-await-needsLogin-2f56d73d365081c9b3c6d5a091c1eb8d)
by [Unito](https://www.unito.io)

---------

Co-authored-by: Amp <amp@ampcode.com>
2026-01-27 14:04:35 -08:00

60 lines
1.6 KiB
TypeScript

import { until, useAsyncState } from '@vueuse/core'
import { defineStore, storeToRefs } from 'pinia'
import { isCloud } from '@/platform/distribution/types'
import { useSettingStore } from '@/platform/settings/settingStore'
import { useWorkflowStore } from '@/platform/workflow/management/stores/workflowStore'
import { api } from '@/scripts/api'
import { useFirebaseAuthStore } from '@/stores/firebaseAuthStore'
import { useUserStore } from '@/stores/userStore'
export const useBootstrapStore = defineStore('bootstrap', () => {
const settingStore = useSettingStore()
const workflowStore = useWorkflowStore()
const {
isReady: isI18nReady,
error: i18nError,
execute: loadI18n
} = useAsyncState(
async () => {
const { mergeCustomNodesI18n } = await import('@/i18n')
const i18nData = await api.getCustomNodesI18n()
mergeCustomNodesI18n(i18nData)
},
undefined,
{ immediate: false }
)
let storesLoaded = false
function loadAuthenticatedStores() {
if (storesLoaded) return
storesLoaded = true
void settingStore.load()
void workflowStore.loadWorkflows()
}
async function startStoreBootstrap() {
const userStore = useUserStore()
await userStore.initialize()
if (isCloud) {
const { isInitialized } = storeToRefs(useFirebaseAuthStore())
await until(isInitialized).toBe(true)
}
const { needsLogin } = storeToRefs(userStore)
await until(needsLogin).toBe(false)
void loadI18n()
loadAuthenticatedStores()
}
return {
isI18nReady,
i18nError,
startStoreBootstrap
}
})