@@ -2236,10 +2236,10 @@ export const makeOAuthService = (deps: OAuthServiceDeps): OAuthService => {
22362236 }
22372237 }
22382238
2239- const usePkce = shouldUsePkce ( client . authorizationUrl , client . clientSecret ) ;
2239+ const requiresPkce = shouldUsePkce ( client . authorizationUrl , client . clientSecret ) ;
22402240 // Every authorization-code flow except LinkedIn's confidential web flow
22412241 // requires the verifier minted by `start`. Missing one is a corrupt row.
2242- if ( usePkce && session . pkceVerifier == null ) {
2242+ if ( requiresPkce && session . pkceVerifier == null ) {
22432243 return yield * new OAuthCompleteError ( {
22442244 message : `OAuth session ${ input . state } is missing its PKCE code verifier; restart the flow.` ,
22452245 restartRequired : true ,
@@ -2261,7 +2261,9 @@ export const makeOAuthService = (deps: OAuthServiceDeps): OAuthService => {
22612261 clientId : client . clientId ,
22622262 clientSecret : client . clientSecret ,
22632263 redirectUrl : session . redirectUrl ,
2264- codeVerifier : usePkce ? ( session . pkceVerifier ?? undefined ) : undefined ,
2264+ // The persisted verifier records the request that actually started.
2265+ // Keep using it if client settings change while that request is open.
2266+ codeVerifier : session . pkceVerifier ?? undefined ,
22652267 code : input . code ,
22662268 clientAuth : client . tokenEndpointAuthMethod ,
22672269 requestFormat : client . tokenRequestFormat ,
0 commit comments