@@ -200,8 +200,28 @@ export async function createComboServer(options: ComboServerOptions): Promise<De
200200 ALPNProtocols : serverProtocolPreferences
201201 }
202202
203- // Cache secure contexts by domain to avoid expensive re-creation on every connection
204- const secureContextCache = new Map < string , tls . SecureContext > ( ) ;
203+ // Cache secure contexts by domain with expiry tracking, with 1h buffer
204+ const EXPIRY_BUFFER_MS = 60 * 60 * 1000 ;
205+ const secureContextCache = new Map < string , { context : tls . SecureContext , expiresAt : Date } > ( ) ;
206+
207+ const getSecureContext = async ( domain : string ) : Promise < tls . SecureContext > => {
208+ const cached = secureContextCache . get ( domain ) ;
209+ const now = Date . now ( ) ;
210+
211+ if ( cached && cached . expiresAt . getTime ( ) - now > EXPIRY_BUFFER_MS ) {
212+ return cached . context ;
213+ }
214+
215+ // Generate new cert (either not cached or expiring soon)
216+ const generatedCert = await ca . generateCertificate ( domain ) ;
217+ const context = tls . createSecureContext ( {
218+ key : generatedCert . key ,
219+ cert : generatedCert . cert ,
220+ ca : generatedCert . ca
221+ } ) ;
222+ secureContextCache . set ( domain , { context, expiresAt : generatedCert . expiresAt } ) ;
223+ return context ;
224+ } ;
205225
206226 tlsServer = tls . createServer ( {
207227 key : defaultCert . key ,
@@ -213,17 +233,7 @@ export async function createComboServer(options: ComboServerOptions): Promise<De
213233 if ( options . debug ) console . log ( `Generating certificate for ${ domain } ` ) ;
214234
215235 try {
216- let secureContext = secureContextCache . get ( domain ) ;
217- if ( ! secureContext ) {
218- const generatedCert = await ca . generateCertificate ( domain ) ;
219- secureContext = tls . createSecureContext ( {
220- key : generatedCert . key ,
221- cert : generatedCert . cert ,
222- ca : generatedCert . ca
223- } ) ;
224- secureContextCache . set ( domain , secureContext ) ;
225- }
226- cb ( null , secureContext ) ;
236+ cb ( null , await getSecureContext ( domain ) ) ;
227237 } catch ( e ) {
228238 console . error ( 'Cert generation error' , e ) ;
229239 cb ( e ) ;
0 commit comments