diff --git a/src/extensions/core/cloudRemoteConfig.ts b/src/extensions/core/cloudRemoteConfig.ts index 8716269fba..0628800d8a 100644 --- a/src/extensions/core/cloudRemoteConfig.ts +++ b/src/extensions/core/cloudRemoteConfig.ts @@ -1,4 +1,9 @@ +import { watchDebounced } from '@vueuse/core' + +import { useCurrentUser } from '@/composables/auth/useCurrentUser' +import { useSubscription } from '@/platform/cloud/subscription/composables/useSubscription' import { loadRemoteConfig } from '@/platform/remoteConfig/remoteConfig' +import { refreshRemoteConfig } from '@/platform/remoteConfig/refreshRemoteConfig' import { useExtensionService } from '@/services/extensionService' /** @@ -9,6 +14,18 @@ useExtensionService().registerExtension({ name: 'Comfy.Cloud.RemoteConfig', setup: async () => { + const { isLoggedIn } = useCurrentUser() + const { isActiveSubscription } = useSubscription() + + watchDebounced( + [isLoggedIn, isActiveSubscription], + () => { + if (!isLoggedIn.value) return + void refreshRemoteConfig() + }, + { debounce: 256, immediate: true } + ) + // Poll for config updates every 10 minutes setInterval(() => void loadRemoteConfig(), 600_000) } diff --git a/src/platform/remoteConfig/refreshRemoteConfig.ts b/src/platform/remoteConfig/refreshRemoteConfig.ts new file mode 100644 index 0000000000..5000f20142 --- /dev/null +++ b/src/platform/remoteConfig/refreshRemoteConfig.ts @@ -0,0 +1,23 @@ +import { api } from '@/scripts/api' + +import { remoteConfig } from './remoteConfig' + +export async function refreshRemoteConfig(): Promise { + try { + const response = await api.fetchApi('/features', { cache: 'no-store' }) + if (response.ok) { + const config = await response.json() + window.__CONFIG__ = config + remoteConfig.value = config + return + } + + console.warn('Failed to load remote config:', response.statusText) + if (response.status === 401 || response.status === 403) { + window.__CONFIG__ = {} + remoteConfig.value = {} + } + } catch (error) { + console.error('Failed to fetch remote config:', error) + } +}