mirror of
https://github.com/Comfy-Org/ComfyUI_frontend.git
synced 2026-02-20 06:44:32 +00:00
## Summary Implements billing infrastructure for team workspaces, separate from legacy personal billing. ## Changes - **Billing abstraction**: New `useBillingContext` composable that switches between legacy (personal) and workspace billing based on context - **Workspace subscription flows**: Pricing tables, plan transitions, cancellation dialogs, and payment preview components for workspace billing - **Top-up credits**: Workspace-specific top-up dialog with polling for payment confirmation - **Workspace API**: Extended with billing endpoints (subscriptions, invoices, payment methods, credits top-up) - **Workspace switcher**: Now displays tier badges for each workspace - **Subscribe polling**: Added polling mechanisms (`useSubscribePolling`, `useTopupPolling`) for async payment flows ## Review Focus - Billing flow correctness for workspace vs legacy contexts - Polling timeout and error handling in payment flows ┆Issue is synchronized with this [Notion page](https://www.notion.so/PR-8508-Feat-workspaces-6-billing-2f96d73d365081f69f65c1ddf369010d) by [Unito](https://www.unito.io) --------- Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
35 lines
1.2 KiB
TypeScript
35 lines
1.2 KiB
TypeScript
import { watchDebounced } from '@vueuse/core'
|
|
|
|
import { useCurrentUser } from '@/composables/auth/useCurrentUser'
|
|
import { useBillingContext } from '@/composables/billing/useBillingContext'
|
|
import { refreshRemoteConfig } from '@/platform/remoteConfig/refreshRemoteConfig'
|
|
import { useExtensionService } from '@/services/extensionService'
|
|
|
|
/**
|
|
* Cloud-only extension that polls for remote config updates
|
|
* Initial config load happens in main.ts before any other imports
|
|
*/
|
|
useExtensionService().registerExtension({
|
|
name: 'Comfy.Cloud.RemoteConfig',
|
|
|
|
setup: async () => {
|
|
const { isLoggedIn } = useCurrentUser()
|
|
const { isActiveSubscription } = useBillingContext()
|
|
|
|
// Refresh config when auth or subscription status changes
|
|
// Primary auth refresh is handled by WorkspaceAuthGate on mount
|
|
// This watcher handles subscription changes and acts as a backup for auth
|
|
watchDebounced(
|
|
[isLoggedIn, isActiveSubscription],
|
|
() => {
|
|
if (!isLoggedIn.value) return
|
|
void refreshRemoteConfig()
|
|
},
|
|
{ debounce: 256, immediate: true }
|
|
)
|
|
|
|
// Poll for config updates every 10 minutes (with auth)
|
|
setInterval(() => void refreshRemoteConfig(), 600_000)
|
|
}
|
|
})
|