From 5afeee258fe8b7b80d04a427c0297b2c97793f8f Mon Sep 17 00:00:00 2001 From: bymyself Date: Fri, 15 Aug 2025 12:28:52 -0700 Subject: [PATCH] [feat] Consolidate firebaseAuthStore network calls to use axios client MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Replace all direct fetch() calls with axios client instance - Maintain exact same error handling behavior and logic flow - Use consistent pattern with other services (customerEventsService) - All customer API endpoints now use centralized client - Prepares for header registration system implementation 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- src/stores/firebaseAuthStore.ts | 152 +++++++++++++++++--------------- 1 file changed, 82 insertions(+), 70 deletions(-) diff --git a/src/stores/firebaseAuthStore.ts b/src/stores/firebaseAuthStore.ts index b8befb093..b6859fdb7 100644 --- a/src/stores/firebaseAuthStore.ts +++ b/src/stores/firebaseAuthStore.ts @@ -1,3 +1,4 @@ +import axios from 'axios' import { type Auth, GithubAuthProvider, @@ -44,6 +45,14 @@ export class FirebaseAuthStoreError extends Error { } } +// Customer API client - follows the same pattern as other services +const customerApiClient = axios.create({ + baseURL: COMFY_API_BASE_URL, + headers: { + 'Content-Type': 'application/json' + } +}) + export const useFirebaseAuthStore = defineStore('firebaseAuth', () => { // State const loading = ref(false) @@ -129,27 +138,27 @@ export const useFirebaseAuthStore = defineStore('firebaseAuth', () => { ) } - const response = await fetch(`${COMFY_API_BASE_URL}/customers/balance`, { - headers: { - ...authHeader, - 'Content-Type': 'application/json' + let balanceData + try { + const response = await customerApiClient.get('/customers/balance', { + headers: authHeader + }) + balanceData = response.data + } catch (error) { + if (axios.isAxiosError(error) && error.response) { + if (error.response.status === 404) { + // Customer not found is expected for new users + return null + } + const errorData = error.response.data + throw new FirebaseAuthStoreError( + t('toastMessages.failedToFetchBalance', { + error: errorData.message + }) + ) } - }) - - if (!response.ok) { - if (response.status === 404) { - // Customer not found is expected for new users - return null - } - const errorData = await response.json() - throw new FirebaseAuthStoreError( - t('toastMessages.failedToFetchBalance', { - error: errorData.message - }) - ) + throw error } - - const balanceData = await response.json() // Update the last balance update time lastBalanceUpdateTime.value = new Date() balance.value = balanceData @@ -165,23 +174,26 @@ export const useFirebaseAuthStore = defineStore('firebaseAuth', () => { throw new FirebaseAuthStoreError(t('toastMessages.userNotAuthenticated')) } - const createCustomerRes = await fetch(`${COMFY_API_BASE_URL}/customers`, { - method: 'POST', - headers: { - ...authHeader, - 'Content-Type': 'application/json' - } - }) - if (!createCustomerRes.ok) { - throw new FirebaseAuthStoreError( - t('toastMessages.failedToCreateCustomer', { - error: createCustomerRes.statusText - }) + let createCustomerResJson: CreateCustomerResponse + try { + const createCustomerRes = await customerApiClient.post( + '/customers', + {}, + { + headers: authHeader + } ) + createCustomerResJson = createCustomerRes.data + } catch (error) { + if (axios.isAxiosError(error)) { + throw new FirebaseAuthStoreError( + t('toastMessages.failedToCreateCustomer', { + error: error.response?.statusText || error.message + }) + ) + } + throw error } - - const createCustomerResJson: CreateCustomerResponse = - await createCustomerRes.json() if (!createCustomerResJson?.id) { throw new FirebaseAuthStoreError( t('toastMessages.failedToCreateCustomer', { @@ -282,25 +294,26 @@ export const useFirebaseAuthStore = defineStore('firebaseAuth', () => { customerCreated.value = true } - const response = await fetch(`${COMFY_API_BASE_URL}/customers/credit`, { - method: 'POST', - headers: { - ...authHeader, - 'Content-Type': 'application/json' - }, - body: JSON.stringify(requestBodyContent) - }) - - if (!response.ok) { - const errorData = await response.json() - throw new FirebaseAuthStoreError( - t('toastMessages.failedToInitiateCreditPurchase', { - error: errorData.message - }) + try { + const response = await customerApiClient.post( + '/customers/credit', + requestBodyContent, + { + headers: authHeader + } ) + return response.data + } catch (error) { + if (axios.isAxiosError(error) && error.response) { + const errorData = error.response.data + throw new FirebaseAuthStoreError( + t('toastMessages.failedToInitiateCreditPurchase', { + error: errorData.message + }) + ) + } + throw error } - - return response.json() } const initiateCreditPurchase = async ( @@ -316,27 +329,26 @@ export const useFirebaseAuthStore = defineStore('firebaseAuth', () => { throw new FirebaseAuthStoreError(t('toastMessages.userNotAuthenticated')) } - const response = await fetch(`${COMFY_API_BASE_URL}/customers/billing`, { - method: 'POST', - headers: { - ...authHeader, - 'Content-Type': 'application/json' - }, - ...(requestBody && { - body: JSON.stringify(requestBody) - }) - }) - - if (!response.ok) { - const errorData = await response.json() - throw new FirebaseAuthStoreError( - t('toastMessages.failedToAccessBillingPortal', { - error: errorData.message - }) + try { + const response = await customerApiClient.post( + '/customers/billing', + requestBody, + { + headers: authHeader + } ) + return response.data + } catch (error) { + if (axios.isAxiosError(error) && error.response) { + const errorData = error.response.data + throw new FirebaseAuthStoreError( + t('toastMessages.failedToAccessBillingPortal', { + error: errorData.message + }) + ) + } + throw error } - - return response.json() } return {