From 2952d7bcbe75ef0d7d9e3025e119b3b2f0d29b44 Mon Sep 17 00:00:00 2001 From: bruno bruno Date: Thu, 4 Dec 2025 10:12:58 +1100 Subject: [PATCH 1/6] SPT-266: Make username available in userInfo --- packages/passport/sdk/src/authManager.ts | 7 ++++++- packages/passport/sdk/src/types.ts | 2 ++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/packages/passport/sdk/src/authManager.ts b/packages/passport/sdk/src/authManager.ts index 17696d81ab..fd1a496ea9 100644 --- a/packages/passport/sdk/src/authManager.ts +++ b/packages/passport/sdk/src/authManager.ts @@ -129,8 +129,11 @@ export default class AuthManager { private static mapOidcUserToDomainModel = (oidcUser: OidcUser): User => { let passport: PassportMetadata | undefined; + let username: string | undefined; if (oidcUser.id_token) { - passport = jwt_decode(oidcUser.id_token)?.passport; + const idTokenPayload = jwt_decode(oidcUser.id_token); + passport = idTokenPayload?.passport; + username = idTokenPayload?.username; } const user: User = { @@ -142,6 +145,7 @@ export default class AuthManager { sub: oidcUser.profile.sub, email: oidcUser.profile.email, nickname: oidcUser.profile.nickname, + username, }, }; if (passport?.imx_eth_address) { @@ -176,6 +180,7 @@ export default class AuthManager { iat: idTokenPayload.iat, email: idTokenPayload.email, nickname: idTokenPayload.nickname, + username: idTokenPayload.username, passport: idTokenPayload.passport, }, }); diff --git a/packages/passport/sdk/src/types.ts b/packages/passport/sdk/src/types.ts index 43c929def8..fcadf3a851 100644 --- a/packages/passport/sdk/src/types.ts +++ b/packages/passport/sdk/src/types.ts @@ -34,6 +34,7 @@ export type UserProfile = { email?: string; nickname?: string; sub: string; + username?: string; }; export enum RollupType { @@ -150,6 +151,7 @@ export type IdTokenPayload = { passport?: PassportMetadata; email: string; nickname: string; + username?: string; aud: string; sub: string; exp: number; From 13483b7c3d1ab715baa723f22312fa54b335a1f2 Mon Sep 17 00:00:00 2001 From: bruno bruno Date: Thu, 4 Dec 2025 14:29:35 +1100 Subject: [PATCH 2/6] small improvements --- packages/passport/sdk/src/authManager.test.ts | 23 +++++++++++++++++++ packages/passport/sdk/src/authManager.ts | 16 +++++++++---- packages/passport/sdk/src/test/mocks.ts | 1 + 3 files changed, 36 insertions(+), 4 deletions(-) diff --git a/packages/passport/sdk/src/authManager.test.ts b/packages/passport/sdk/src/authManager.test.ts index 011acdc4dd..1f10c5011b 100644 --- a/packages/passport/sdk/src/authManager.test.ts +++ b/packages/passport/sdk/src/authManager.test.ts @@ -53,6 +53,7 @@ const commonOidcUser: OidcUser = { sub: mockUser.profile.sub, email: mockUser.profile.email, nickname: mockUser.profile.nickname, + username: mockUser.profile.username, }, } as OidcUser; @@ -301,6 +302,28 @@ describe('AuthManager', () => { }); }); + describe('when the token contains a username', () => { + it('should extract username from the top level of the id token', async () => { + mockSigninPopup.mockResolvedValue(mockOidcUser); + (jwt_decode as jest.Mock).mockReturnValue({ + username: 'username123', + email: mockUser.profile.email, + nickname: mockUser.profile.nickname, + sub: mockUser.profile.sub, + }); + + const result = await authManager.login(); + + expect(result).toEqual({ + ...mockUser, + profile: { + ...mockUser.profile, + username: 'username123', + }, + }); + }); + }); + it('should throw the error if user is failed to login', async () => { mockSigninPopup.mockImplementation(() => { throw new Error(mockErrorMsg); diff --git a/packages/passport/sdk/src/authManager.ts b/packages/passport/sdk/src/authManager.ts index fd1a496ea9..4b62a8ccbe 100644 --- a/packages/passport/sdk/src/authManager.ts +++ b/packages/passport/sdk/src/authManager.ts @@ -133,7 +133,9 @@ export default class AuthManager { if (oidcUser.id_token) { const idTokenPayload = jwt_decode(oidcUser.id_token); passport = idTokenPayload?.passport; - username = idTokenPayload?.username; + if (idTokenPayload?.username){ + username = idTokenPayload?.username; + } } const user: User = { @@ -145,7 +147,7 @@ export default class AuthManager { sub: oidcUser.profile.sub, email: oidcUser.profile.email, nickname: oidcUser.profile.nickname, - username, + username: username, }, }; if (passport?.imx_eth_address) { @@ -167,7 +169,7 @@ export default class AuthManager { private static mapDeviceTokenResponseToOidcUser = (tokenResponse: DeviceTokenResponse): OidcUser => { const idTokenPayload: IdTokenPayload = jwt_decode(tokenResponse.id_token); - return new OidcUser({ + const oidcUser = new OidcUser({ id_token: tokenResponse.id_token, access_token: tokenResponse.access_token, refresh_token: tokenResponse.refresh_token, @@ -180,10 +182,16 @@ export default class AuthManager { iat: idTokenPayload.iat, email: idTokenPayload.email, nickname: idTokenPayload.nickname, - username: idTokenPayload.username, + passport: idTokenPayload.passport, }, }); + + const username = idTokenPayload.username; + if (username) { + oidcUser.username = username; + } + return oidcUser }; private buildExtraQueryParams( diff --git a/packages/passport/sdk/src/test/mocks.ts b/packages/passport/sdk/src/test/mocks.ts index e0b2f0d733..0841ab8b5c 100644 --- a/packages/passport/sdk/src/test/mocks.ts +++ b/packages/passport/sdk/src/test/mocks.ts @@ -30,6 +30,7 @@ export const mockUser: User = { sub: 'email|123', email: 'test@immutable.com', nickname: 'test', + username: 'username' }, expired: false, }; From 4f37d3fac6a99139d16b146af208e6b2e7b254c8 Mon Sep 17 00:00:00 2001 From: bruno bruno Date: Thu, 4 Dec 2025 14:36:58 +1100 Subject: [PATCH 3/6] small improvements --- packages/passport/sdk/src/authManager.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/passport/sdk/src/authManager.ts b/packages/passport/sdk/src/authManager.ts index 4b62a8ccbe..b20906b292 100644 --- a/packages/passport/sdk/src/authManager.ts +++ b/packages/passport/sdk/src/authManager.ts @@ -182,14 +182,13 @@ export default class AuthManager { iat: idTokenPayload.iat, email: idTokenPayload.email, nickname: idTokenPayload.nickname, - passport: idTokenPayload.passport, }, }); const username = idTokenPayload.username; if (username) { - oidcUser.username = username; + oidcUser.profile.username = username; } return oidcUser }; From c420d2d5298e8681e8be5919b840ec6090dcfcc5 Mon Sep 17 00:00:00 2001 From: bruno bruno Date: Thu, 4 Dec 2025 14:42:10 +1100 Subject: [PATCH 4/6] small improvements --- packages/passport/sdk/src/authManager.ts | 8 ++++---- packages/passport/sdk/src/test/mocks.ts | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/passport/sdk/src/authManager.ts b/packages/passport/sdk/src/authManager.ts index b20906b292..36128b4314 100644 --- a/packages/passport/sdk/src/authManager.ts +++ b/packages/passport/sdk/src/authManager.ts @@ -133,7 +133,7 @@ export default class AuthManager { if (oidcUser.id_token) { const idTokenPayload = jwt_decode(oidcUser.id_token); passport = idTokenPayload?.passport; - if (idTokenPayload?.username){ + if (idTokenPayload?.username) { username = idTokenPayload?.username; } } @@ -147,7 +147,7 @@ export default class AuthManager { sub: oidcUser.profile.sub, email: oidcUser.profile.email, nickname: oidcUser.profile.nickname, - username: username, + username, }, }; if (passport?.imx_eth_address) { @@ -186,11 +186,11 @@ export default class AuthManager { }, }); - const username = idTokenPayload.username; + const { username } = idTokenPayload; if (username) { oidcUser.profile.username = username; } - return oidcUser + return oidcUser; }; private buildExtraQueryParams( diff --git a/packages/passport/sdk/src/test/mocks.ts b/packages/passport/sdk/src/test/mocks.ts index 0841ab8b5c..37f15f05a2 100644 --- a/packages/passport/sdk/src/test/mocks.ts +++ b/packages/passport/sdk/src/test/mocks.ts @@ -30,7 +30,7 @@ export const mockUser: User = { sub: 'email|123', email: 'test@immutable.com', nickname: 'test', - username: 'username' + username: 'username', }, expired: false, }; From 18b82150cb373e12412d2e6a42bc619268a65ba2 Mon Sep 17 00:00:00 2001 From: bruno bruno Date: Thu, 4 Dec 2025 14:54:20 +1100 Subject: [PATCH 5/6] small improvements --- packages/passport/sdk/src/authManager.test.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/passport/sdk/src/authManager.test.ts b/packages/passport/sdk/src/authManager.test.ts index 1f10c5011b..ec7b4b4c65 100644 --- a/packages/passport/sdk/src/authManager.test.ts +++ b/packages/passport/sdk/src/authManager.test.ts @@ -53,7 +53,6 @@ const commonOidcUser: OidcUser = { sub: mockUser.profile.sub, email: mockUser.profile.email, nickname: mockUser.profile.nickname, - username: mockUser.profile.username, }, } as OidcUser; From d6ba79698401c680a736732576d1141b2095c40e Mon Sep 17 00:00:00 2001 From: bruno bruno Date: Thu, 4 Dec 2025 15:00:14 +1100 Subject: [PATCH 6/6] small improvements --- packages/passport/sdk/src/test/mocks.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/passport/sdk/src/test/mocks.ts b/packages/passport/sdk/src/test/mocks.ts index 37f15f05a2..e0b2f0d733 100644 --- a/packages/passport/sdk/src/test/mocks.ts +++ b/packages/passport/sdk/src/test/mocks.ts @@ -30,7 +30,6 @@ export const mockUser: User = { sub: 'email|123', email: 'test@immutable.com', nickname: 'test', - username: 'username', }, expired: false, };