11import express from 'express' ;
22import { createProxyHandler , createStreamingProxyHandler } from './proxy.js' ;
33import { parseAliasPath , resolveAliasConfig } from './aliases.js' ;
4- import { shouldIgnoreRoute } from './config.js' ;
4+ import { loadConfig , shouldIgnoreRoute } from './config.js' ;
55import { createViewerRouter } from './routes/viewer.js' ;
66
77export function createServer ( config , { onListen } = { } ) {
@@ -28,14 +28,9 @@ export function createServer(config, { onListen } = {}) {
2828 return ;
2929 }
3030
31- // If no target configured and not an alias request, return 404
32- if ( ! config . targetUrl && ! aliasInfo ) {
33- res . status ( 404 ) . json ( {
34- error : 'No target configured' ,
35- message : 'Use /__proxy__/<alias> or configure --target' ,
36- } ) ;
37- return ;
38- }
31+ const runtimeConfig = loadConfig ( ) ;
32+ const runtimeAliases = runtimeConfig . aliases || { } ;
33+ const runtimeDefaultAlias = runtimeConfig . default_alias ;
3934
4035 let proxyPathname = proxyUrl . pathname ;
4136 let targetBaseUrl = config . targetUrl ;
@@ -44,7 +39,7 @@ export function createServer(config, { onListen } = {}) {
4439 let providerLabel = config . provider ;
4540
4641 if ( aliasInfo ) {
47- const aliasConfig = resolveAliasConfig ( config . aliases , aliasInfo . alias ) ;
42+ const aliasConfig = resolveAliasConfig ( runtimeAliases , aliasInfo . alias ) ;
4843 if ( ! aliasConfig ) {
4944 res . status ( 404 ) . json ( { error : 'Unknown alias' } ) ;
5045 return ;
@@ -54,6 +49,18 @@ export function createServer(config, { onListen } = {}) {
5449 targetPath = `${ aliasInfo . path } ${ proxyUrl . search } ${ proxyUrl . hash } ` ;
5550 proxyHeaders = aliasConfig . headers ;
5651 providerLabel = aliasInfo . alias ;
52+ } else {
53+ const resolved = resolveRootTarget ( config , runtimeAliases , runtimeDefaultAlias ) ;
54+ targetBaseUrl = resolved . targetBaseUrl ;
55+ providerLabel = resolved . providerLabel ;
56+ proxyHeaders = resolved . proxyHeaders ;
57+ if ( ! targetBaseUrl ) {
58+ res . status ( 404 ) . json ( {
59+ error : 'No target configured' ,
60+ message : 'Use /__proxy__/<alias> or configure --target' ,
61+ } ) ;
62+ return ;
63+ }
5764 }
5865
5966 if ( shouldIgnoreRoute ( proxyPathname ) ) {
@@ -94,6 +101,41 @@ export function createServer(config, { onListen } = {}) {
94101 return server ;
95102}
96103
104+ function resolveRootTarget ( config , aliases , defaultAlias ) {
105+ if ( config . targetAlias ) {
106+ const aliasConfig = resolveAliasConfig ( aliases , config . targetAlias ) ;
107+ if ( ! aliasConfig ) {
108+ return { targetBaseUrl : null , providerLabel : 'aliases-only' , proxyHeaders : null } ;
109+ }
110+ return {
111+ targetBaseUrl : aliasConfig . url ,
112+ providerLabel : config . targetAlias ,
113+ proxyHeaders : aliasConfig . headers ,
114+ } ;
115+ }
116+
117+ if ( ! config . hasExplicitTarget ) {
118+ if ( ! defaultAlias ) {
119+ return { targetBaseUrl : null , providerLabel : 'aliases-only' , proxyHeaders : null } ;
120+ }
121+ const aliasConfig = resolveAliasConfig ( aliases , defaultAlias ) ;
122+ if ( ! aliasConfig ) {
123+ return { targetBaseUrl : null , providerLabel : 'aliases-only' , proxyHeaders : null } ;
124+ }
125+ return {
126+ targetBaseUrl : aliasConfig . url ,
127+ providerLabel : defaultAlias ,
128+ proxyHeaders : aliasConfig . headers ,
129+ } ;
130+ }
131+
132+ return {
133+ targetBaseUrl : config . targetUrl ,
134+ providerLabel : config . provider ,
135+ proxyHeaders : config . proxyHeaders || null ,
136+ } ;
137+ }
138+
97139function isStreamingRequest ( req ) {
98140 if ( ! req . body || req . body . length === 0 ) return false ;
99141
0 commit comments