dograh/ui/src/lib/apiClient.ts

46 lines
1.4 KiB
TypeScript
Raw Normal View History

2025-09-09 14:37:32 +05:30
import type { CreateClientConfig } from '@/client/client.gen';
2026-02-18 13:16:49 +05:30
import { client } from '@/client/client.gen';
2025-09-09 14:37:32 +05:30
export const createClientConfig: CreateClientConfig = (config) => {
// Use different URLs for server-side vs client-side
const isServer = typeof window === 'undefined';
let baseUrl: string;
if (isServer) {
// for server-side rendering, still use environment variable as fallback
baseUrl = process.env.BACKEND_URL || 'http://api:8000';
} else {
// for client-side, use the current browser URL's origin
baseUrl = process.env.NEXT_PUBLIC_BACKEND_URL || window.location.origin;
}
2025-09-09 14:37:32 +05:30
return {
...config,
baseUrl,
};
};
2026-02-18 13:16:49 +05:30
let interceptorRegistered = false;
/**
* Register a request interceptor that attaches a fresh access token
* to every outgoing SDK request. Idempotent safe for React strict mode.
*/
export function setupAuthInterceptor(getAccessToken: () => Promise<string>) {
if (interceptorRegistered) return;
interceptorRegistered = true;
client.interceptors.request.use(async (request) => {
if (request.headers.get('Authorization')) {
return request;
}
try {
const token = await getAccessToken();
request.headers.set('Authorization', `Bearer ${token}`);
} catch {
// If token retrieval fails, let the request proceed without auth
}
return request;
});
}