@@ -5,31 +5,32 @@ import { headers as nextHeaders } from "next/headers";
55import { AuthError } from "./errors" ;
66
77const API_PREFIX = normalizePrefix ( process . env . NEXT_PUBLIC_API_BASE ?? "/api" ) ;
8- const SITE_URL = ensureOrigin ( process . env . NEXT_PUBLIC_SITE_URL ) ;
8+ const ENV_SITE_URL = ensureOrigin ( process . env . NEXT_PUBLIC_SITE_URL ) ;
99
1010const devHttpsAgent =
1111 process . env . NODE_ENV !== "production"
1212 ? new https . Agent ( { rejectUnauthorized : false } )
1313 : undefined ;
1414
1515function ensureOrigin ( v ?: string ) {
16- if ( ! v ) {
17- throw new Error (
18- "Missing NEXT_PUBLIC_SITE_URL. Set a valid origin like https://senifit.co.kr" ,
19- ) ;
20- }
16+ if ( ! v ) return undefined ;
2117 // 'localhost:3000' 처럼 스킴이 빠진 값이 와도 보정
2218 const normalized = / ^ h t t p s ? : \/ \/ / i. test ( v ) ? v : `https://${ v } ` ;
2319 try {
2420 const url = new URL ( normalized ) ;
2521 if ( ! url . hostname ) throw new Error ( "Missing hostname" ) ;
2622 return url . origin ;
2723 } catch {
28- throw new Error (
29- `Invalid NEXT_PUBLIC_SITE_URL: "${ v } ". Set a valid origin like https://senifit.co.kr` ,
30- ) ;
24+ return undefined ;
3125 }
3226}
27+
28+ function originFromHeaders ( h : Headers ) {
29+ const proto = h . get ( "x-forwarded-proto" ) || "https" ;
30+ const host = h . get ( "x-forwarded-host" ) || h . get ( "host" ) ;
31+ if ( ! host ) return undefined ;
32+ return `${ proto } ://${ host } ` ;
33+ }
3334function normalizePrefix ( p : string ) {
3435 return p . startsWith ( "/" ) ? p : `/${ p } ` ;
3536}
@@ -38,11 +39,12 @@ export async function createAxiosServer(opts?: {
3839 forwardCookies ?: boolean ; // default: true
3940 extraHeaders ?: Record < string , string | number | boolean | undefined > ;
4041} ) : Promise < AxiosInstance > {
41- // 헤더 의존 대신 env 기반으로 절대 baseURL 생성
42- const baseURL = new URL ( API_PREFIX , SITE_URL ) . toString ( ) ; // e.g. https://localhost:3000/api
43-
4442 // 쿠키 전달 (SSR 세션 유지용)
4543 const h = await nextHeaders ( ) ;
44+ // env 우선, 없으면 요청 헤더 기반 origin 사용
45+ const siteOrigin =
46+ ENV_SITE_URL || originFromHeaders ( h ) || "https://localhost:3000" ;
47+ const baseURL = new URL ( API_PREFIX , siteOrigin ) . toString ( ) ;
4648 const cookie = opts ?. forwardCookies === false ? "" : ( h . get ( "cookie" ) ?? "" ) ;
4749
4850 const instance = axios . create ( {
0 commit comments