@@ -130,13 +130,20 @@ function registryAllowsPrivateNetwork(name: string): boolean {
130130 return getProviderRegistryEntry ( name ) ?. allowPrivateNetworkByDefault === true ;
131131}
132132
133+ /** True when the provider config or registry default admits private/loopback destinations. */
134+ export function providerAllowsPrivateNetwork (
135+ name : string ,
136+ provider : Pick < OcxProviderConfig , "allowPrivateNetwork" > ,
137+ ) : boolean {
138+ return provider . allowPrivateNetwork === true || registryAllowsPrivateNetwork ( name ) ;
139+ }
140+
133141export function providerDestinationConfigError ( name : string , provider : Pick < OcxProviderConfig , "baseUrl" | "allowPrivateNetwork" > ) : string | null {
134142 const assessment = assessDestination ( provider . baseUrl ) ;
135143 if ( ! assessment ) return null ;
136144 if ( assessment . kind === "public" || assessment . kind === "hostname" ) return null ;
137145 if ( assessment . kind === "metadata" ) return "baseUrl targets a blocked metadata endpoint" ;
138- if ( registryAllowsPrivateNetwork ( name ) ) return null ;
139- if ( provider . allowPrivateNetwork === true ) return null ;
146+ if ( providerAllowsPrivateNetwork ( name , provider ) ) return null ;
140147 return `baseUrl points to a ${ assessment . detail } ; set allowPrivateNetwork:true only for intentionally local/self-hosted providers` ;
141148}
142149
@@ -174,7 +181,7 @@ export async function providerDestinationResolvedError(
174181 if ( ! hostname || isIP ( hostname ) !== 0 || hostname === "localhost" || hostname . endsWith ( ".localhost" ) ) {
175182 return null ; // literals and localhost are fully handled by the sync path
176183 }
177- if ( registryAllowsPrivateNetwork ( name ) || provider . allowPrivateNetwork === true ) return null ;
184+ if ( providerAllowsPrivateNetwork ( name , provider ) ) return null ;
178185 let addresses : { address : string } [ ] ;
179186 try {
180187 addresses = await lookup ( hostname , { all : true , verbatim : true } ) ;
0 commit comments