@@ -2,9 +2,9 @@ import { http, HttpResponse } from 'msw'
22import { setupServer } from 'msw/node'
33
44import {
5+ type FronteggDecodedToken ,
56 FronteggOAuthClient ,
67 type GetFronteggTokenResponse ,
7- type GetFronteggUserDataResponse ,
88} from './frontegg-oauth-client'
99
1010const EmptyResponse = ( code : number ) => new HttpResponse ( null , { status : code } )
@@ -19,27 +19,41 @@ const clientConfig = {
1919
2020const FRONTEGG_RESPONSE = {
2121 token_type : 'Bearer' ,
22- access_token : 'test-access-token' ,
22+ access_token :
23+ 'eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ0ZXN0LXVzZXItaWQiLCJlbWFpbCI6InRlc3RAbG9rYWxpc2UuY29tIiwibmFtZSI6ImR1bW15IHVzZXJuYW1lIiwicHJvZmlsZVBpY3R1cmVVcmwiOiJodHRwczovL3d3dy5ncmF2YXRhci5jb20vYXZhdGFyLzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwidGVuYW50SWQiOiJ0ZXN0LXRlbmFudC1pZCJ9.dxFESK7KleQdEz4hBmd-pKMSKUN0uYJ44ycd-SQeAYBGfJcQQPCsjOWBDSlxGUodLmalhMMVDTvmN4G4La5lfOakas4kJzrfVAXfV_-ZYAiOHZaqS_OTMZaTPAcjWZfnNNEnewuNhZSiuzqEbaIpKOX4tmZOHH1ganJT2Z-gvRiArVC1zEZdZPFt0MVGl9Tt3Kmcgvf3j22j1FWI5AqVsiYFHolISaWveZyIR62qtF3pyGLRW-4qwoujV393Kf52kNWez0P7Ed70-yrVJX_D0buJ1aW-bPXSh1F0ifnGBvYKtoUqSLZ1e0InA3rTccWt5DIyOUULaE0asgJxB61Nqg' ,
2324 id_token : 'test-id-token' ,
2425 refresh_token : 'test-refresh-token' ,
2526 expires_in : 3600 ,
2627} satisfies GetFronteggTokenResponse
2728
29+ const FRONTEGG_IMPERSONATED_RESPONSE = {
30+ ...FRONTEGG_RESPONSE ,
31+ access_token :
32+ 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ0ZXN0LXVzZXItaWQiLCJlbWFpbCI6InRlc3RAbG9rYWxpc2UuY29tIiwibmFtZSI6ImR1bW15IHVzZXJuYW1lIiwicHJvZmlsZVBpY3R1cmVVcmwiOiJodHRwczovL3d3dy5ncmF2YXRhci5jb20vYXZhdGFyLzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwidGVuYW50SWQiOiJ0ZXN0LXRlbmFudC1pZCIsImFjdCI6eyJzdWIiOiJ0ZXN0LWFkbWluLXVzZXIiLCJ0eXBlIjoiaW1wZXJzb25hdGlvbiJ9fQ.lamGCm4sfTCsfyZ11-rnecqqJcAKua2IiCMQxHr5kQw' ,
33+ }
34+
2835const FRONTEGG_USER_DATA = {
29- id : 'test-user-id' ,
36+ sub : 'test-user-id' ,
30373138 name : 'dummy username' ,
3239 profilePictureUrl : 'https://www.gravatar.com/avatar/00000000000000000000000000000000' ,
3340 tenantId : 'test-tenant-id' ,
34- } satisfies GetFronteggUserDataResponse
41+ } satisfies FronteggDecodedToken
3542
3643const USER_DATA = {
37- externalUserId : FRONTEGG_USER_DATA . id ,
44+ externalUserId : FRONTEGG_USER_DATA . sub ,
3845 accessToken : FRONTEGG_RESPONSE . access_token ,
3946 email : FRONTEGG_USER_DATA . email ,
4047 name : FRONTEGG_USER_DATA . name ,
4148 profilePictureUrl : FRONTEGG_USER_DATA . profilePictureUrl ,
4249 externalWorkspaceId : FRONTEGG_USER_DATA . tenantId ,
50+ impersonated : false ,
51+ }
52+
53+ const IMPERSONATED_USER_DATA = {
54+ ...USER_DATA ,
55+ accessToken : FRONTEGG_IMPERSONATED_RESPONSE . access_token ,
56+ impersonated : true ,
4357}
4458
4559const server = setupServer ( )
@@ -65,9 +79,6 @@ describe('frontegg-oauth-client', () => {
6579 http . post ( `${ baseUrl } /frontegg/oauth/authorize/silent` , ( ) =>
6680 HttpResponse . json ( FRONTEGG_RESPONSE ) ,
6781 ) ,
68- http . get ( `${ baseUrl } /frontegg/identity/resources/users/v2/me` , ( ) =>
69- HttpResponse . json ( FRONTEGG_USER_DATA ) ,
70- ) ,
7182 )
7283
7384 const client = new FronteggOAuthClient ( clientConfig )
@@ -76,14 +87,25 @@ describe('frontegg-oauth-client', () => {
7687 expect ( client . userData ) . toEqual ( USER_DATA )
7788 } )
7889
90+ it ( 'returns impersonated user data based on auth token' , async ( ) => {
91+ server . use (
92+ // This is a request that is made to the Frontegg API when the cookie is available
93+ http . post ( `${ baseUrl } /frontegg/oauth/authorize/silent` , ( ) =>
94+ HttpResponse . json ( FRONTEGG_IMPERSONATED_RESPONSE ) ,
95+ ) ,
96+ )
97+
98+ const client = new FronteggOAuthClient ( clientConfig )
99+ const userData = await client . getUserData ( )
100+ expect ( userData ) . toEqual ( IMPERSONATED_USER_DATA )
101+ expect ( client . userData ) . toEqual ( IMPERSONATED_USER_DATA )
102+ } )
103+
79104 it ( 'allows to fetch user data only once at a time' , async ( ) => {
80105 server . use (
81106 http . post ( `${ baseUrl } /frontegg/oauth/authorize/silent` , ( ) =>
82107 HttpResponse . json ( FRONTEGG_RESPONSE ) ,
83108 ) ,
84- http . get ( `${ baseUrl } /frontegg/identity/resources/users/v2/me` , ( ) =>
85- HttpResponse . json ( FRONTEGG_USER_DATA ) ,
86- ) ,
87109 )
88110
89111 const client = new FronteggOAuthClient ( clientConfig )
@@ -102,17 +124,17 @@ describe('frontegg-oauth-client', () => {
102124 } )
103125
104126 it ( 'returns user data based on refresh token' , async ( ) => {
127+ const refreshedAccessToken =
128+ 'eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ0ZXN0LXVzZXItaWQiLCJlbWFpbCI6InRlc3RAbG9rYWxpc2UuY29tIiwibmFtZSI6ImR1bW15IHVzZXJuYW1lIiwicHJvZmlsZVBpY3R1cmVVcmwiOiJodHRwczovL3d3dy5ncmF2YXRhci5jb20vYXZhdGFyLzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwidGVuYW50SWQiOiJ0ZXN0LXRlbmFudC1pZCIsInNpZCI6InJlZnJlc2hlZC1zZXNzaW9uIn0.sSSFmSvkO7Rns6dkZsIqRhXzGfWPYhg2_IfK9sksqCnEpoiiQ5hNRy43hoU_rlGLJDehaMfxv9RYJuNJbU-HKIKrHyfsQWztGLyK11fEuMb1f3U9hd3-8eljIjk_SSrL3OGbvYu612qKkkEdyZkmjnCTxmKRtc3g0BSJI-EIDIXBoBKwRYb7p6TMdD5vba7krMZ-AbVp0eDjiiL6u8XorQa4Y95pkOSytfJl7T8T3-yPMlUAYep6Q4-1Lvg26W43KCTlb5-qsddPrH2T_FNL6LkVXaWxHbLtNRENpCQR6elD5528NgnBEOSphKZeuPUG4WvMsrOX2B0-nxFlzXooqg'
129+
105130 server . use (
106131 http . post ( `${ baseUrl } /frontegg/oauth/authorize/silent` , ( ) =>
107132 HttpResponse . json ( { ...FRONTEGG_RESPONSE , expires_in : 0 } ) ,
108133 ) ,
109- http . get ( `${ baseUrl } /frontegg/identity/resources/users/v2/me` , ( ) =>
110- HttpResponse . json ( FRONTEGG_USER_DATA ) ,
111- ) ,
112134 http . post ( `${ baseUrl } /frontegg/oauth/token` , ( ) =>
113135 HttpResponse . json ( {
114136 ...FRONTEGG_RESPONSE ,
115- access_token : 'test-refreshed-access-token' ,
137+ access_token : refreshedAccessToken ,
116138 } ) ,
117139 ) ,
118140 )
@@ -128,7 +150,7 @@ describe('frontegg-oauth-client', () => {
128150
129151 const expectedUserDataRefreshed = {
130152 ...USER_DATA ,
131- accessToken : 'test-refreshed-access-token' ,
153+ accessToken : refreshedAccessToken ,
132154 }
133155
134156 expect ( userDataRefreshed ) . toEqual ( expectedUserDataRefreshed )
@@ -169,7 +191,7 @@ describe('frontegg-oauth-client', () => {
169191 const client = new FronteggOAuthClient ( clientConfig )
170192 const accessToken = await client . fetchAccessTokenByOAuthCode ( 'test-oauth-code' )
171193
172- expect ( accessToken ) . toBe ( 'test-access-token' )
194+ expect ( accessToken ) . toBe ( FRONTEGG_RESPONSE . access_token )
173195 } )
174196 } )
175197
@@ -206,7 +228,7 @@ describe('frontegg-oauth-client', () => {
206228 const client = new FronteggOAuthClient ( clientConfig )
207229 const accessToken = await client . fetchAccessTokenByOAuthRefreshToken ( 'test-oauth-code' )
208230
209- expect ( accessToken ) . toBe ( 'test-access-token' )
231+ expect ( accessToken ) . toBe ( FRONTEGG_RESPONSE . access_token )
210232 } )
211233 } )
212234
0 commit comments