diff --git a/packages/passport/sdk/src/Passport.ts b/packages/passport/sdk/src/Passport.ts index 0dd34bfa3f..97385925e2 100644 --- a/packages/passport/sdk/src/Passport.ts +++ b/packages/passport/sdk/src/Passport.ts @@ -15,6 +15,7 @@ import MagicAdapter from './magic/magicAdapter'; import { PassportImxProviderFactory } from './starkEx'; import { PassportConfiguration } from './config'; import { + DeviceTokenResponse, DirectLoginMethod, isUserImx, isUserZkEvm, @@ -299,6 +300,14 @@ export class Passport { }, 'loginWithPKCEFlowCallback'); } + public async storeTokens(tokenResponse: DeviceTokenResponse): Promise { + return withMetricsAsync(async () => { + const user = await this.authManager.storeTokens(tokenResponse); + this.passportEventEmitter.emit(PassportEvents.LOGGED_IN, user); + return user.profile; + }, 'storeTokens'); + } + /** * Logs out the current user. * @returns {Promise} A promise that resolves when the logout is complete diff --git a/packages/passport/sdk/src/authManager.ts b/packages/passport/sdk/src/authManager.ts index d527cd2f9d..0bd311a278 100644 --- a/packages/passport/sdk/src/authManager.ts +++ b/packages/passport/sdk/src/authManager.ts @@ -353,6 +353,16 @@ export default class AuthManager { return response.data; } + public async storeTokens(tokenResponse: DeviceTokenResponse): Promise { + return withPassportError(async () => { + const oidcUser = AuthManager.mapDeviceTokenResponseToOidcUser(tokenResponse); + const user = AuthManager.mapOidcUserToDomainModel(oidcUser); + await this.userManager.storeUser(oidcUser); + + return user; + }, PassportErrorType.AUTHENTICATION_ERROR); + } + public async logout(): Promise { return withPassportError(async () => { await this.userManager.revokeTokens(['refresh_token']);