@@ -10,9 +10,13 @@ const configSchema = z.object({
1010 LOG_LEVEL : z . enum ( [ "error" , "warn" , "info" , "debug" ] ) . default ( "info" ) ,
1111
1212 BASE_URL : z . string ( ) . optional ( ) ,
13- AUTH_MODE : z . enum ( [ "none" , "full" , "resource_server" ] ) . default ( "none" ) ,
13+ ENABLE_AUTH : z
14+ . string ( )
15+ . optional ( )
16+ . default ( "false" )
17+ . transform ( ( val ) => val === "true" ) ,
1418
15- // OAuth configuration for external IdP integration
19+ // OAuth configuration - required when ENABLE_AUTH=true
1620 OAUTH_ISSUER : z . string ( ) . optional ( ) ,
1721 OAUTH_CLIENT_ID : z . string ( ) . optional ( ) ,
1822 OAUTH_CLIENT_SECRET : z . string ( ) . optional ( ) ,
@@ -36,55 +40,43 @@ export function getConfig(): Config {
3640 parsed . BASE_URL = `http://localhost:${ parsed . PORT } ` ;
3741 }
3842
39- // Full mode validation - OAuth Authorization Server with external IdP
40- if ( parsed . AUTH_MODE === "full" ) {
43+ // Log authentication status for clarity
44+ console . log ( `🔐 Authentication: ${ parsed . ENABLE_AUTH ? 'ENABLED' : 'DISABLED' } ` ) ;
45+
46+ // OAuth validation when authentication is enabled
47+ if ( parsed . ENABLE_AUTH ) {
4148 const requiredVars = [ ] ;
4249 if ( ! parsed . OAUTH_ISSUER ) requiredVars . push ( "OAUTH_ISSUER" ) ;
4350 if ( ! parsed . OAUTH_CLIENT_ID ) requiredVars . push ( "OAUTH_CLIENT_ID" ) ;
4451 if ( ! parsed . OAUTH_CLIENT_SECRET )
4552 requiredVars . push ( "OAUTH_CLIENT_SECRET" ) ;
4653
47- // Provide default for OAUTH_REDIRECT_URI if not set
48- if ( ! parsed . OAUTH_REDIRECT_URI ) {
49- const callbackUrl = new URL ( "/callback" , parsed . BASE_URL ) ;
50- parsed . OAUTH_REDIRECT_URI = callbackUrl . toString ( ) ;
51- console . log (
52- `⚠️ OAUTH_REDIRECT_URI not set, using default: ${ parsed . OAUTH_REDIRECT_URI } ` ,
53- ) ;
54- }
55-
5654 if ( requiredVars . length > 0 ) {
5755 throw new Error (
58- `AUTH_MODE=full requires OAuth configuration. Missing: ${ requiredVars . join ( ", " ) } \n` +
56+ `ENABLE_AUTH=true requires OAuth configuration. Missing: ${ requiredVars . join ( ", " ) } \n` +
5957 "Example configuration:\n" +
58+ "ENABLE_AUTH=true\n" +
6059 "OAUTH_ISSUER=https://your-domain.auth0.com\n" +
6160 "OAUTH_CLIENT_ID=your-client-id\n" +
6261 "OAUTH_CLIENT_SECRET=your-client-secret\n" +
63- "OAUTH_REDIRECT_URI=http://localhost:3000/callback # Optional, defaults to BASE_URL/callback or http://localhost:PORT/callback\n" +
64- "OAUTH_AUDIENCE=your-api-identifier # Optional but recommended" ,
62+ "OAUTH_AUDIENCE=your-api-identifier # Optional but recommended for production" ,
6563 ) ;
6664 }
6765
68- // OAUTH_AUDIENCE is optional but recommended when a resource server is used
69- if ( ! parsed . OAUTH_AUDIENCE ) {
70- console . warn (
71- "⚠️ OAUTH_AUDIENCE not set for full mode. Token validation will not check audience.\n" +
72- " For production deployments, consider setting OAUTH_AUDIENCE to your API identifier" ,
66+ // Provide default for OAUTH_REDIRECT_URI if not set
67+ if ( ! parsed . OAUTH_REDIRECT_URI ) {
68+ const callbackUrl = new URL ( "/callback" , parsed . BASE_URL ) ;
69+ parsed . OAUTH_REDIRECT_URI = callbackUrl . toString ( ) ;
70+ console . log (
71+ `ℹ️ OAUTH_REDIRECT_URI not set, using default: ${ parsed . OAUTH_REDIRECT_URI } ` ,
7372 ) ;
7473 }
75- }
76-
77- if ( parsed . AUTH_MODE === "resource_server" ) {
78- const requiredVars = [ ] ;
79- if ( ! parsed . OAUTH_ISSUER ) requiredVars . push ( "OAUTH_ISSUER" ) ;
80- if ( ! parsed . OAUTH_AUDIENCE ) requiredVars . push ( "OAUTH_AUDIENCE" ) ;
8174
82- if ( requiredVars . length > 0 ) {
83- throw new Error (
84- `AUTH_MODE=resource_server requires OAuth configuration. Missing: ${ requiredVars . join ( ", " ) } \n` +
85- "Example configuration:\n" +
86- "OAUTH_ISSUER=https://your-domain.auth0.com\n" +
87- "OAUTH_AUDIENCE=your-api-identifier" ,
75+ // OAUTH_AUDIENCE is optional but recommended for production
76+ if ( ! parsed . OAUTH_AUDIENCE ) {
77+ console . warn (
78+ "⚠️ OAUTH_AUDIENCE not set. Token validation will not check audience.\n" +
79+ " For production deployments, consider setting OAUTH_AUDIENCE to your API identifier" ,
8880 ) ;
8981 }
9082 }
0 commit comments