import "server-only"; /** * Uygulamanın dışarıya görünen kök adresi — iyzico callbackUrl'i ve ödeme * yönlendirmeleri buradan okunur. * * NEXT_PUBLIC_APP_URL BİLİNÇLİ OLARAK KULLANILMAZ: `NEXT_PUBLIC_*` değişkenleri * Next tarafından build sırasında koda sabit string olarak gömülür, runtime'da * okunmaz. Docker imajı build edilirken .env.production build katmanına hiç * geçmediği için (.dockerignore `.env*` dosyalarını dışlıyor) o değişken build * anında `undefined` olur ve fallback ("http://localhost:3000") imaja çakılırdı; * compose `env_file` ile değeri container'a verse bile kod artık onu okumazdı. * Sonuç: iyzico'ya localhost callback'i gidiyor ve initialize reddediliyordu. * * Buradaki değişkenler public önekli olmadığı için runtime'da okunur — env * değişince yeniden build gerekmez. */ export function appUrl(): string { const ham = process.env.APP_URL ?? // Aynı origin'i zaten gösteriyor ve prod .env'inde mevcut; ayrı bir secret // eklemeden doğru değere düşmek için ikinci sırada. process.env.BETTER_AUTH_URL ?? "http://localhost:3000"; // Sondaki "/" ile birleştirmelerde "//paket" üretmemek için kırpılır. return ham.replace(/\/+$/, ""); }