99 AuthorizationRequestStateStatus ,
1010 AuthorizationResponseState ,
1111 AuthorizationResponseStateStatus ,
12- AuthorizationResponseStateWithVerifiedData
12+ AuthorizationResponseStateWithVerifiedData ,
13+ CallbackOpts
1314} from '../types'
1415import { IRPSessionManager } from './types'
1516
@@ -27,6 +28,8 @@ export class InMemoryRPSessionManager implements IRPSessionManager {
2728 private readonly nonceMapping : Record < number , string > = { }
2829 // stored by hashcode
2930 private readonly stateMapping : Record < number , string > = { }
31+ private readonly callbackMapping : Record < string , CallbackOpts > = { }
32+ private readonly queryIdMapping : Record < string , string > = { }
3033 private readonly maxAgeInSeconds : number
3134
3235 private static getKeysForCorrelationId ( mapping : Record < number , string > , correlationId : string ) : number [ ] {
@@ -193,12 +196,11 @@ export class InMemoryRPSessionManager implements IRPSessionManager {
193196 try {
194197 const eventState = {
195198 correlationId : event . correlationId ,
196- queryId : event . queryId ,
199+ queryId : event . queryId ?? this . queryIdMapping [ event . correlationId ] ,
197200 ...( type === 'request' && { request : event . subject } ) ,
198201 ...( type === 'response' && { response : event . subject } ) ,
199202 ...( event . error && { error : event . error } ) ,
200203 status,
201- callback : event . callback ,
202204 timestamp : event . timestamp ,
203205 lastUpdated : event . timestamp ,
204206 }
@@ -208,13 +210,20 @@ export class InMemoryRPSessionManager implements IRPSessionManager {
208210 this . authorizationRequests [ event . correlationId ] = state
209211 this . updateMapping ( this . nonceMapping , event , 'nonce' , event . correlationId , true )
210212 this . updateMapping ( this . stateMapping , event , 'state' , event . correlationId , true )
213+ if ( event . queryId ) {
214+ this . queryIdMapping [ event . correlationId ] = event . queryId
215+ }
216+ if ( event . callback ) {
217+ this . callbackMapping [ event . correlationId ] = event . callback
218+ }
211219 } else {
212220 state = eventState as AuthorizationResponseState
213221 this . authorizationResponses [ event . correlationId ] = state
214222 }
215223
216- if ( event . callback && ( event . callback . status === undefined || event . callback . status . includes ( status ) ) ) {
217- void this . executeCallback ( event . callback . url , state )
224+ const callback = this . callbackMapping [ event . correlationId ]
225+ if ( callback && ( callback . status === undefined || callback . status . includes ( status ) ) ) {
226+ void this . executeCallback ( callback . url , state )
218227 }
219228 } catch ( error : unknown ) {
220229 console . log ( `Error in update state happened: ${ error } ` )
@@ -265,7 +274,7 @@ export class InMemoryRPSessionManager implements IRPSessionManager {
265274 correlation_id : state . correlationId ,
266275 query_id : state . queryId ,
267276 last_updated : state . lastUpdated ,
268- ...( ( state ?. status === AuthorizationResponseStateStatus . VERIFIED && state . verifiedData !== undefined ) && { verified_data : state . verifiedData } ) ,
277+ ...( ' verifiedData' in state && { verified_data : state . verifiedData } ) ,
269278 ...( state . error && { message : state . error . message } )
270279 }
271280
0 commit comments