···219219 const effectivePerms = intersectPermissions(globalPermissions, endpointPermissions)
220220 const effectiveLimits = intersectLimits(globalLimits, endpointLimits)
221221222222- // Derive env permissions from secrets - only allow env vars that have secrets
222222+ // Merge declared env permissions with secret keys
223223+ // Bundles can declare env vars they need (e.g., JEST_WORKER_ID for satori)
224224+ // and secrets are added on top of that
225225+ const declaredEnv = effectivePerms.env || []
223226 const secretKeys = Object.keys(secrets)
224224- if (secretKeys.length > 0) {
225225- // Replace any declared env permissions with just the secret keys
226226- // This ensures bundles can only access env vars they have secrets for
227227- effectivePerms.env = secretKeys
228228- } else {
229229- // No secrets = no env access (unless explicitly empty which means none)
230230- effectivePerms.env = []
231231- }
227227+ effectivePerms.env = [...new Set([...declaredEnv, ...secretKeys])]
232228233229 // Build Deno permission flags
234230 const permFlags = permissionsToDenoCLI(effectivePerms)
···331327 ...permFlags,
332328 "-",
333329 ]
330330+331331+ console.log(denoArgs)
334332335333 // Pass secrets directly as environment variables
336334 // (env permissions are already derived from secret keys above)