@@ -6,7 +6,10 @@ import { createLocalJWKSet, decodeProtectedHeader, jwtVerify } from 'jose'
66import { afterEach , beforeEach , describe , expect , it , vi } from 'vitest'
77import { env } from '@/lib/core/config/env'
88
9- const mutableEnv = env as Record < string , string | undefined >
9+ /** The shared env mock is mutable at runtime; its declared type is the real readonly env. */
10+ function setEnv ( key : string , value : string | undefined ) {
11+ Reflect . set ( env , key , value )
12+ }
1013
1114function rsaPem ( ) {
1215 return generateKeyPairSync ( 'rsa' , { modulusLength : 2048 } ) . privateKey . export ( {
@@ -22,13 +25,13 @@ async function loadIssuer() {
2225
2326describe ( 'workload identity issuer' , ( ) => {
2427 beforeEach ( ( ) => {
25- mutableEnv . WORKLOAD_IDENTITY_SIGNING_KEY = rsaPem ( )
28+ setEnv ( ' WORKLOAD_IDENTITY_SIGNING_KEY' , rsaPem ( ) )
2629 } )
2730
2831 afterEach ( ( ) => {
29- mutableEnv . WORKLOAD_IDENTITY_SIGNING_KEY = undefined
30- mutableEnv . WORKLOAD_IDENTITY_PREVIOUS_KEY = undefined
31- mutableEnv . WORKLOAD_IDENTITY_ISSUER = undefined
32+ setEnv ( ' WORKLOAD_IDENTITY_SIGNING_KEY' , undefined )
33+ setEnv ( ' WORKLOAD_IDENTITY_PREVIOUS_KEY' , undefined )
34+ setEnv ( ' WORKLOAD_IDENTITY_ISSUER' , undefined )
3235 } )
3336
3437 it ( 'mints a token a relying party verifies with the published JWKS and discovery document' , async ( ) => {
@@ -67,16 +70,16 @@ describe('workload identity issuer', () => {
6770
6871 it ( 'keeps verifying tokens signed by the previous key during rotation' , async ( ) => {
6972 const previousKey = rsaPem ( )
70- mutableEnv . WORKLOAD_IDENTITY_SIGNING_KEY = previousKey
73+ setEnv ( ' WORKLOAD_IDENTITY_SIGNING_KEY' , previousKey )
7174 const before = await loadIssuer ( )
7275 const oldToken = await before . mintWorkloadIdentityToken ( {
7376 subject : 'sim:workspace:ws-1:credential:abc123def456' ,
7477 audience : 'sts.amazonaws.com' ,
7578 owner : { workspaceId : 'ws-1' } ,
7679 } )
7780
78- mutableEnv . WORKLOAD_IDENTITY_SIGNING_KEY = rsaPem ( )
79- mutableEnv . WORKLOAD_IDENTITY_PREVIOUS_KEY = previousKey
81+ setEnv ( ' WORKLOAD_IDENTITY_SIGNING_KEY' , rsaPem ( ) )
82+ setEnv ( ' WORKLOAD_IDENTITY_PREVIOUS_KEY' , previousKey )
8083 const after = await loadIssuer ( )
8184 const jwks = await after . getWorkloadIdentityJwks ( )
8285
@@ -87,7 +90,7 @@ describe('workload identity issuer', () => {
8790 } )
8891
8992 it ( 'publishes nothing and refuses to sign when no signing key is configured' , async ( ) => {
90- mutableEnv . WORKLOAD_IDENTITY_SIGNING_KEY = undefined
93+ setEnv ( ' WORKLOAD_IDENTITY_SIGNING_KEY' , undefined )
9194 const issuer = await loadIssuer ( )
9295 const { workloadIdentityDiscoveryResponse, workloadIdentityJwksResponse } = await import (
9396 '@/lib/credentials/workload-identity/responses'
@@ -106,7 +109,7 @@ describe('workload identity issuer', () => {
106109 } )
107110
108111 it ( 'uses the pinned issuer URL when one is configured' , async ( ) => {
109- mutableEnv . WORKLOAD_IDENTITY_ISSUER = 'https://oidc.example.com/workload/'
112+ setEnv ( ' WORKLOAD_IDENTITY_ISSUER' , 'https://oidc.example.com/workload/' )
110113 const issuer = await loadIssuer ( )
111114
112115 expect ( issuer . getWorkloadIdentityIssuer ( ) ) . toBe ( 'https://oidc.example.com/workload' )
0 commit comments