1414 */
1515
1616import { execSync } from 'child_process' ;
17+ import { randomBytes } from 'crypto' ;
1718import { existsSync , readFileSync , writeFileSync , mkdirSync } from 'fs' ;
1819import { join , dirname } from 'path' ;
1920import { fileURLToPath } from 'url' ;
@@ -1770,6 +1771,7 @@ class CloudflareDeploymentManager {
17701771 'JWT_SECRET' ,
17711772 'SENTRY_DSN' ,
17721773 'AI_PROXY_JWT_SECRET' ,
1774+ 'ENABLE_ARTIFACTS' ,
17731775 'MAX_SANDBOX_INSTANCES' ,
17741776 'CUSTOM_DOMAIN' ,
17751777 'CUSTOM_PREVIEW_DOMAIN' ,
@@ -1779,6 +1781,11 @@ class CloudflareDeploymentManager {
17791781 'PLATFORM_MODEL_PROVIDERS' ,
17801782 ] ;
17811783
1784+ const generatedJwtSecret = process . env . JWT_SECRET ? undefined : randomBytes ( 64 ) . toString ( 'base64url' ) ;
1785+ if ( generatedJwtSecret ) {
1786+ console . log ( '🔐 Generated JWT_SECRET for this deployment' ) ;
1787+ }
1788+
17821789 const prodVarsContent : string [ ] = [
17831790 '# Production environment variables for Cloudflare Orange Build' ,
17841791 '# Generated automatically during deployment' ,
@@ -1788,7 +1795,7 @@ class CloudflareDeploymentManager {
17881795
17891796 // Add environment variables that are set
17901797 secretVars . forEach ( ( varName ) => {
1791- let value = process . env [ varName ] ;
1798+ let value = varName === 'JWT_SECRET' ? generatedJwtSecret : process . env [ varName ] ;
17921799
17931800 // Apply fallback logic for CLOUDFLARE_AI_GATEWAY_TOKEN
17941801 if ( varName === 'CLOUDFLARE_AI_GATEWAY_TOKEN' && ( ! value || value === '' ) ) {
0 commit comments