diff --git a/src/platform/cloud/subscription/composables/useSubscription.ts b/src/platform/cloud/subscription/composables/useSubscription.ts index 061e0bf45..cdffb2c13 100644 --- a/src/platform/cloud/subscription/composables/useSubscription.ts +++ b/src/platform/cloud/subscription/composables/useSubscription.ts @@ -14,11 +14,11 @@ import { useFirebaseAuthStore } from '@/stores/firebaseAuthStore' -interface CloudSubscriptionCheckoutResponse { +type CloudSubscriptionCheckoutResponse = { checkout_url: string } -interface CloudSubscriptionStatusResponse { +type CloudSubscriptionStatusResponse = { is_active: boolean subscription_id: string renewal_date: string | null @@ -27,7 +27,7 @@ interface CloudSubscriptionStatusResponse { const subscriptionStatus = ref(null) -const isActiveSubscription = computed(() => { +const isSubscribedOrIsNotCloud = computed(() => { if (!isCloud || !window.__CONFIG__?.subscription_required) return true return subscriptionStatus.value?.is_active ?? false @@ -36,12 +36,11 @@ const isActiveSubscription = computed(() => { let isWatchSetup = false export function useSubscription() { - const authActions = useFirebaseAuthActions() + const { reportError, accessBillingPortal } = useFirebaseAuthActions() const dialogService = useDialogService() const { getAuthHeader } = useFirebaseAuthStore() const { wrapWithErrorHandlingAsync } = useErrorHandling() - const { reportError } = useFirebaseAuthActions() const { isLoggedIn } = useCurrentUser() @@ -54,7 +53,7 @@ export function useSubscription() { const renewalDate = new Date(subscriptionStatus.value.renewal_date) - return renewalDate.toLocaleDateString('en-US', { + return renewalDate.toLocaleDateString(undefined, { month: 'short', day: 'numeric', year: 'numeric' @@ -66,7 +65,7 @@ export function useSubscription() { const endDate = new Date(subscriptionStatus.value.end_date) - return endDate.toLocaleDateString('en-US', { + return endDate.toLocaleDateString(undefined, { month: 'short', day: 'numeric', year: 'numeric' @@ -77,9 +76,10 @@ export function useSubscription() { () => `$${MONTHLY_SUBSCRIPTION_PRICE.toFixed(0)}` ) - const fetchStatus = wrapWithErrorHandlingAsync(async () => { - return await fetchSubscriptionStatus() - }, reportError) + const fetchStatus = wrapWithErrorHandlingAsync( + fetchSubscriptionStatus, + reportError + ) const subscribe = wrapWithErrorHandlingAsync(async () => { const response = await initiateSubscriptionCheckout() @@ -104,13 +104,13 @@ export function useSubscription() { } const manageSubscription = async () => { - await authActions.accessBillingPortal() + await accessBillingPortal() } const requireActiveSubscription = async (): Promise => { await fetchSubscriptionStatus() - if (!isActiveSubscription.value) { + if (!isSubscribedOrIsNotCloud.value) { showSubscriptionDialog() } } @@ -124,46 +124,43 @@ export function useSubscription() { } const handleInvoiceHistory = async () => { - await authActions.accessBillingPortal() + await accessBillingPortal() } /** * Fetch the current cloud subscription status for the authenticated user * @returns Subscription status or null if no subscription exists */ - const fetchSubscriptionStatus = - async (): Promise => { - const authHeader = await getAuthHeader() - if (!authHeader) { - throw new FirebaseAuthStoreError( - t('toastMessages.userNotAuthenticated') - ) - } - - const response = await fetch( - `${COMFY_API_BASE_URL}/customers/cloud-subscription-status`, - { - headers: { - ...authHeader, - 'Content-Type': 'application/json' - } - } - ) - - if (!response.ok) { - const errorData = await response.json() - throw new FirebaseAuthStoreError( - t('toastMessages.failedToFetchSubscription', { - error: errorData.message - }) - ) - } - - const statusData = await response.json() - subscriptionStatus.value = statusData - return statusData + async function fetchSubscriptionStatus(): Promise { + const authHeader = await getAuthHeader() + if (!authHeader) { + throw new FirebaseAuthStoreError(t('toastMessages.userNotAuthenticated')) } + const response = await fetch( + `${COMFY_API_BASE_URL}/customers/cloud-subscription-status`, + { + headers: { + ...authHeader, + 'Content-Type': 'application/json' + } + } + ) + + if (!response.ok) { + const errorData = await response.json() + throw new FirebaseAuthStoreError( + t('toastMessages.failedToFetchSubscription', { + error: errorData.message + }) + ) + } + + const statusData = await response.json() + subscriptionStatus.value = statusData + return statusData + } + if (!isWatchSetup) { isWatchSetup = true watch( @@ -213,7 +210,7 @@ export function useSubscription() { return { // State - isActiveSubscription, + isActiveSubscription: isSubscribedOrIsNotCloud, isCancelled, formattedRenewalDate, formattedEndDate,