UNPKG

android-credential-manager

Version:

An expo module to access the new Android credential Manager. Supports username/password, Passkeys and Google Sign In. This module is built to use the suggested and latest way to sign in users through Google

101 lines (95 loc) 2.97 kB
import CredentialManagerModule from "./CredentialManagerModule"; import { GoogleLoginResponse, LoginResponse, PassKeyLoginResponse, UsernamePasswordLoginResponse, } from "./LoginResponse.types"; import { LoginProvider, LoginProviderType } from "./loginProviders/types"; import { CreateResponse, UsernamePasswordCreateResponse, } from "./CreateResponse.types"; import { createCredErrorHandler, loginErrorHandler, } from "./errors/ErrorHandler"; import { GoogleButtonProvider, PassKeyCreator, } from "./loginProviders/LoginProviders"; export class CredentialManager { static saveUsernameAndPassword( username: string, password: string, ): UsernamePasswordCreateResponse | null { const result = JSON.parse( CredentialManagerModule.saveUsernameAndPassword(username, password), ) as CreateResponse; if (result.name === "Error") { createCredErrorHandler(result); } else if (result.name === "UsernamePassword") { return result; } else { throw new Error("Invalid response"); } return null; } static createPassKey(request: PassKeyCreator): PassKeyCreator | null { const result = JSON.parse( CredentialManagerModule.createPassKey(request.generateResponse()), ) as CreateResponse; if (result.name === "Error") { createCredErrorHandler(result); } else if (result.name === "PassKey") { return request; } else { throw new Error("Invalid response"); } return null; } static login(loginProviders: LoginProvider[]) { const serializedLoginTypes = loginProviders.map((loginType) => loginType.serialize(), ); const result = JSON.parse( CredentialManagerModule._login(JSON.stringify(serializedLoginTypes)), ) as LoginResponse; switch (result.name) { case "Error": loginErrorHandler(result); break; case LoginProviderType.USERNAME_PASSWORD: return result as UsernamePasswordLoginResponse; case LoginProviderType.GOOGLE: return result as GoogleLoginResponse; case LoginProviderType.PASSKEY: return result as PassKeyLoginResponse; } return null; } static loginWithGoogle( provider: GoogleButtonProvider, ): GoogleLoginResponse | null { const providers = [provider].map((loginType) => loginType.serialize()); const result = JSON.parse( CredentialManagerModule._login(JSON.stringify(providers)), ) as LoginResponse; switch (result.name) { case "Error": loginErrorHandler(result); break; case LoginProviderType.GOOGLE: return result as GoogleLoginResponse; } return null; } static prefetchCredentials(loginProviders: LoginProvider[]): void { const serializedLoginProviders = loginProviders.map((loginProvider) => loginProvider.serialize(), ); CredentialManagerModule.prefetchCredentials( JSON.stringify(serializedLoginProviders), ); } }