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>
46 lines
1.4 KiB
TypeScript
46 lines
1.4 KiB
TypeScript
/**
|
|
* Cookie utilities for cross-subdomain token storage
|
|
*/
|
|
|
|
import { getCookieDomain } from './domain';
|
|
|
|
/**
|
|
* Set a cookie with domain attribute for cross-subdomain access
|
|
* Dynamically determines the correct domain based on current environment
|
|
*/
|
|
export const setCookie = (name: string, value: string, days: number = 7) => {
|
|
const expires = new Date();
|
|
expires.setTime(expires.getTime() + days * 24 * 60 * 60 * 1000);
|
|
|
|
// Get cookie domain dynamically (.lvh.me in dev, .smoothschedule.com in prod, localhost for localhost)
|
|
const cookieDomain = getCookieDomain();
|
|
const domainAttr = cookieDomain === 'localhost' ? '' : `;domain=${cookieDomain}`;
|
|
|
|
document.cookie = `${name}=${value};expires=${expires.toUTCString()}${domainAttr};path=/;SameSite=Lax`;
|
|
};
|
|
|
|
/**
|
|
* Get a cookie value by name
|
|
*/
|
|
export const getCookie = (name: string): string | null => {
|
|
const nameEQ = name + '=';
|
|
const ca = document.cookie.split(';');
|
|
|
|
for (let i = 0; i < ca.length; i++) {
|
|
let c = ca[i];
|
|
while (c.charAt(0) === ' ') c = c.substring(1, c.length);
|
|
if (c.indexOf(nameEQ) === 0) return c.substring(nameEQ.length, c.length);
|
|
}
|
|
|
|
return null;
|
|
};
|
|
|
|
/**
|
|
* Delete a cookie
|
|
*/
|
|
export const deleteCookie = (name: string) => {
|
|
const cookieDomain = getCookieDomain();
|
|
const domainAttr = cookieDomain === 'localhost' ? '' : `;domain=${cookieDomain}`;
|
|
document.cookie = `${name}=;expires=Thu, 01 Jan 1970 00:00:00 UTC${domainAttr};path=/;`;
|
|
};
|