@@ -11,26 +11,35 @@ export class OAuthStateStore implements NodeSavedStateStore {
1111 this . serverSession = session
1212 }
1313
14- private createAKey ( did : string , sessionId : string ) {
14+ private createStorageKey ( did : string , sessionId : string ) {
1515 return `state:${ did } :${ sessionId } `
1616 }
1717
18- async get ( ) : Promise < NodeSavedState | undefined > {
18+ async get ( key : string ) : Promise < NodeSavedState | undefined > {
1919 const serverSessionData = this . serverSession . data
2020 if ( ! serverSessionData ) return undefined
21- return serverSessionData . oauthState
21+ if ( ! serverSessionData . oauthStateId ) return undefined
22+ const state = await this . storage . getItem < NodeSavedState > (
23+ this . createStorageKey ( key , serverSessionData . oauthStateId ) ,
24+ )
25+ return state ?? undefined
2226 }
2327
2428 async set ( key : string , val : NodeSavedState ) {
25- // We are ignoring the key since the mapping is already done in the session
29+ let stateId = crypto . randomUUID ( )
2630 await this . serverSession . update ( {
27- oauthState : val ,
31+ oauthStateId : stateId ,
2832 } )
33+ await this . storage . setItem < NodeSavedState > ( this . createStorageKey ( key , stateId ) , val )
2934 }
3035
31- async del ( ) {
36+ async del ( key : string ) {
37+ const serverSessionData = this . serverSession . data
38+ if ( ! serverSessionData ) return undefined
39+ if ( ! serverSessionData . oauthStateId ) return undefined
40+ await this . storage . removeItem ( this . createStorageKey ( key , serverSessionData . oauthStateId ) )
3241 await this . serverSession . update ( {
33- oauthState : undefined ,
42+ oauthStateId : undefined ,
3443 } )
3544 }
3645}
0 commit comments