Fix double /api/ prefix in API endpoint calls

When VITE_API_URL=/api, axios baseURL is already set to /api. However, all endpoint calls included the /api/ prefix, creating double paths like /api/api/auth/login/.

Removed /api/ prefix from 81 API endpoint calls across 22 files:
- src/api/auth.ts - Fixed login, logout, me, refresh, hijack endpoints
- src/api/client.ts - Fixed token refresh endpoint
- src/api/profile.ts - Fixed all profile, email, password, MFA, sessions endpoints
- src/hooks/*.ts - Fixed all remaining API calls (users, appointments, resources, etc)
- src/pages/*.tsx - Fixed signup and email verification endpoints

This ensures API requests use the correct path: /api/auth/login/ instead of /api/api/auth/login/

🤖 Generated with Claude Code

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
poduck
2025-11-30 15:27:57 -05:00
parent f1d4dac9d2
commit 4cd6610f2a
53 changed files with 476 additions and 687 deletions

View File

@@ -95,7 +95,7 @@ export interface AccountSessionResponse {
* Returns the complete payment setup for the business.
*/
export const getPaymentConfig = () =>
apiClient.get<PaymentConfig>('/api/payments/config/status/');
apiClient.get<PaymentConfig>('/payments/config/status/');
// ============================================================================
// API Keys (Free Tier)
@@ -105,14 +105,14 @@ export const getPaymentConfig = () =>
* Get current API key configuration (masked keys).
*/
export const getApiKeys = () =>
apiClient.get<ApiKeysCurrentResponse>('/api/payments/api-keys/');
apiClient.get<ApiKeysCurrentResponse>('/payments/api-keys/');
/**
* Save API keys.
* Validates and stores the provided Stripe API keys.
*/
export const saveApiKeys = (secretKey: string, publishableKey: string) =>
apiClient.post<ApiKeysInfo>('/api/payments/api-keys/', {
apiClient.post<ApiKeysInfo>('/payments/api-keys/', {
secret_key: secretKey,
publishable_key: publishableKey,
});
@@ -122,7 +122,7 @@ export const saveApiKeys = (secretKey: string, publishableKey: string) =>
* Tests the keys against Stripe API.
*/
export const validateApiKeys = (secretKey: string, publishableKey: string) =>
apiClient.post<ApiKeysValidationResult>('/api/payments/api-keys/validate/', {
apiClient.post<ApiKeysValidationResult>('/payments/api-keys/validate/', {
secret_key: secretKey,
publishable_key: publishableKey,
});
@@ -132,13 +132,13 @@ export const validateApiKeys = (secretKey: string, publishableKey: string) =>
* Tests stored keys and updates their status.
*/
export const revalidateApiKeys = () =>
apiClient.post<ApiKeysValidationResult>('/api/payments/api-keys/revalidate/');
apiClient.post<ApiKeysValidationResult>('/payments/api-keys/revalidate/');
/**
* Delete stored API keys.
*/
export const deleteApiKeys = () =>
apiClient.delete<{ success: boolean; message: string }>('/api/payments/api-keys/delete/');
apiClient.delete<{ success: boolean; message: string }>('/payments/api-keys/delete/');
// ============================================================================
// Stripe Connect (Paid Tiers)
@@ -148,14 +148,14 @@ export const deleteApiKeys = () =>
* Get current Connect account status.
*/
export const getConnectStatus = () =>
apiClient.get<ConnectAccountInfo>('/api/payments/connect/status/');
apiClient.get<ConnectAccountInfo>('/payments/connect/status/');
/**
* Initiate Connect account onboarding.
* Returns a URL to redirect the user for Stripe onboarding.
*/
export const initiateConnectOnboarding = (refreshUrl: string, returnUrl: string) =>
apiClient.post<ConnectOnboardingResponse>('/api/payments/connect/onboard/', {
apiClient.post<ConnectOnboardingResponse>('/payments/connect/onboard/', {
refresh_url: refreshUrl,
return_url: returnUrl,
});
@@ -165,7 +165,7 @@ export const initiateConnectOnboarding = (refreshUrl: string, returnUrl: string)
* For custom Connect accounts that need a new onboarding link.
*/
export const refreshConnectOnboardingLink = (refreshUrl: string, returnUrl: string) =>
apiClient.post<{ url: string }>('/api/payments/connect/refresh-link/', {
apiClient.post<{ url: string }>('/payments/connect/refresh-link/', {
refresh_url: refreshUrl,
return_url: returnUrl,
});
@@ -175,14 +175,14 @@ export const refreshConnectOnboardingLink = (refreshUrl: string, returnUrl: stri
* Returns a client_secret for initializing Stripe's embedded Connect components.
*/
export const createAccountSession = () =>
apiClient.post<AccountSessionResponse>('/api/payments/connect/account-session/');
apiClient.post<AccountSessionResponse>('/payments/connect/account-session/');
/**
* Refresh Connect account status from Stripe.
* Syncs the local account record with the current state in Stripe.
*/
export const refreshConnectStatus = () =>
apiClient.post<ConnectAccountInfo>('/api/payments/connect/refresh-status/');
apiClient.post<ConnectAccountInfo>('/payments/connect/refresh-status/');
// ============================================================================
// Transaction Analytics
@@ -319,7 +319,7 @@ export const getTransactions = (filters?: TransactionFilters) => {
const queryString = params.toString();
return apiClient.get<TransactionListResponse>(
`/api/payments/transactions/${queryString ? `?${queryString}` : ''}`
`/payments/transactions/${queryString ? `?${queryString}` : ''}`
);
};
@@ -327,7 +327,7 @@ export const getTransactions = (filters?: TransactionFilters) => {
* Get a single transaction by ID.
*/
export const getTransaction = (id: number) =>
apiClient.get<Transaction>(`/api/payments/transactions/${id}/`);
apiClient.get<Transaction>(`/payments/transactions/${id}/`);
/**
* Get transaction summary/analytics.
@@ -339,7 +339,7 @@ export const getTransactionSummary = (filters?: Pick<TransactionFilters, 'start_
const queryString = params.toString();
return apiClient.get<TransactionSummary>(
`/api/payments/transactions/summary/${queryString ? `?${queryString}` : ''}`
`/payments/transactions/summary/${queryString ? `?${queryString}` : ''}`
);
};
@@ -347,26 +347,26 @@ export const getTransactionSummary = (filters?: Pick<TransactionFilters, 'start_
* Get charges from Stripe API.
*/
export const getStripeCharges = (limit: number = 20) =>
apiClient.get<ChargesResponse>(`/api/payments/transactions/charges/?limit=${limit}`);
apiClient.get<ChargesResponse>(`/payments/transactions/charges/?limit=${limit}`);
/**
* Get payouts from Stripe API.
*/
export const getStripePayouts = (limit: number = 20) =>
apiClient.get<PayoutsResponse>(`/api/payments/transactions/payouts/?limit=${limit}`);
apiClient.get<PayoutsResponse>(`/payments/transactions/payouts/?limit=${limit}`);
/**
* Get current balance from Stripe API.
*/
export const getStripeBalance = () =>
apiClient.get<BalanceResponse>('/api/payments/transactions/balance/');
apiClient.get<BalanceResponse>('/payments/transactions/balance/');
/**
* Export transaction data.
* Returns the file data directly for download.
*/
export const exportTransactions = (request: ExportRequest) =>
apiClient.post('/api/payments/transactions/export/', request, {
apiClient.post('/payments/transactions/export/', request, {
responseType: 'blob',
});
@@ -422,7 +422,7 @@ export interface RefundResponse {
* Get detailed transaction information including refund data.
*/
export const getTransactionDetail = (id: number) =>
apiClient.get<TransactionDetail>(`/api/payments/transactions/${id}/`);
apiClient.get<TransactionDetail>(`/payments/transactions/${id}/`);
/**
* Issue a refund for a transaction.
@@ -430,4 +430,4 @@ export const getTransactionDetail = (id: number) =>
* @param request - Optional refund request with amount and reason
*/
export const refundTransaction = (transactionId: number, request?: RefundRequest) =>
apiClient.post<RefundResponse>(`/api/payments/transactions/${transactionId}/refund/`, request || {});
apiClient.post<RefundResponse>(`/payments/transactions/${transactionId}/refund/`, request || {});