@aws-amplify/auth
Version:
Auth category of aws-amplify
1 lines • 49.2 kB
Source Map (JSON)
{"version":3,"file":"signInHelpers.mjs","sources":["../../../../../src/providers/cognito/utils/signInHelpers.ts"],"sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport { Amplify } from '@aws-amplify/core';\nimport { AmplifyUrl, AuthAction, assertTokenProviderConfig, } from '@aws-amplify/core/internals/utils';\nimport { AuthError } from '../../../errors/AuthError';\nimport { InitiateAuthException } from '../types/errors';\nimport { AuthErrorCodes } from '../../../common/AuthErrorStrings';\nimport { AuthValidationErrorCode } from '../../../errors/types/validation';\nimport { assertValidationError } from '../../../errors/utils/assertValidationError';\nimport { USER_ALREADY_AUTHENTICATED_EXCEPTION } from '../../../errors/constants';\nimport { getCurrentUser } from '../apis/getCurrentUser';\nimport { getAuthUserAgentValue } from '../../../utils';\nimport { createAssociateSoftwareTokenClient, createInitiateAuthClient, createRespondToAuthChallengeClient, createVerifySoftwareTokenClient, } from '../../../foundation/factories/serviceClients/cognitoIdentityProvider';\nimport { createCognitoUserPoolEndpointResolver } from '../factories';\nimport { getRegionFromUserPoolId } from '../../../foundation/parsers';\nimport { handleWebAuthnSignInResult } from '../../../client/flows/userAuth/handleWebAuthnSignInResult';\nimport { handlePasswordSRP } from '../../../client/flows/shared/handlePasswordSRP';\nimport { initiateSelectedChallenge } from '../../../client/flows/userAuth/handleSelectChallenge';\nimport { handleSelectChallengeWithPassword } from '../../../client/flows/userAuth/handleSelectChallengeWithPassword';\nimport { handleSelectChallengeWithPasswordSRP } from '../../../client/flows/userAuth/handleSelectChallengeWithPasswordSRP';\nimport { signInStore } from '../../../client/utils/store';\nimport { getAuthenticationHelper } from './srp';\nimport { getUserContextData } from './userContextData';\nimport { handlePasswordVerifierChallenge } from './handlePasswordVerifierChallenge';\nimport { handleDeviceSRPAuth } from './handleDeviceSRPAuth';\nimport { retryOnResourceNotFoundException } from './retryOnResourceNotFoundException';\nimport { setActiveSignInUsername } from './setActiveSignInUsername';\nconst USER_ATTRIBUTES = 'userAttributes.';\nfunction isWebAuthnResultAuthSignInOutput(result) {\n return 'isSignedIn' in result && 'nextStep' in result;\n}\nexport async function handleCustomChallenge({ challengeResponse, clientMetadata, session, username, config, tokenOrchestrator, }) {\n const { userPoolId, userPoolClientId, userPoolEndpoint } = config;\n const challengeResponses = {\n USERNAME: username,\n ANSWER: challengeResponse,\n };\n const deviceMetadata = await tokenOrchestrator?.getDeviceMetadata(username);\n if (deviceMetadata && deviceMetadata.deviceKey) {\n challengeResponses.DEVICE_KEY = deviceMetadata.deviceKey;\n }\n const UserContextData = getUserContextData({\n username,\n userPoolId,\n userPoolClientId,\n });\n const jsonReq = {\n ChallengeName: 'CUSTOM_CHALLENGE',\n ChallengeResponses: challengeResponses,\n Session: session,\n ClientMetadata: clientMetadata,\n ClientId: userPoolClientId,\n UserContextData,\n };\n const respondToAuthChallenge = createRespondToAuthChallengeClient({\n endpointResolver: createCognitoUserPoolEndpointResolver({\n endpointOverride: userPoolEndpoint,\n }),\n });\n const response = await respondToAuthChallenge({\n region: getRegionFromUserPoolId(userPoolId),\n userAgentValue: getAuthUserAgentValue(AuthAction.ConfirmSignIn),\n }, jsonReq);\n if (response.ChallengeName === 'DEVICE_SRP_AUTH') {\n return handleDeviceSRPAuth({\n username,\n config,\n clientMetadata,\n session: response.Session,\n tokenOrchestrator,\n });\n }\n return response;\n}\nexport async function handleMFASetupChallenge({ challengeResponse, username, clientMetadata, session, deviceName, config, }) {\n const { userPoolId, userPoolClientId, userPoolEndpoint } = config;\n if (challengeResponse === 'EMAIL') {\n return {\n ChallengeName: 'MFA_SETUP',\n Session: session,\n ChallengeParameters: {\n MFAS_CAN_SETUP: '[\"EMAIL_OTP\"]',\n },\n $metadata: {},\n };\n }\n if (challengeResponse === 'TOTP') {\n return {\n ChallengeName: 'MFA_SETUP',\n Session: session,\n ChallengeParameters: {\n MFAS_CAN_SETUP: '[\"SOFTWARE_TOKEN_MFA\"]',\n },\n $metadata: {},\n };\n }\n const challengeResponses = {\n USERNAME: username,\n };\n const isTOTPCode = /^\\d+$/.test(challengeResponse);\n if (isTOTPCode) {\n const verifySoftwareToken = createVerifySoftwareTokenClient({\n endpointResolver: createCognitoUserPoolEndpointResolver({\n endpointOverride: userPoolEndpoint,\n }),\n });\n const { Session } = await verifySoftwareToken({\n region: getRegionFromUserPoolId(userPoolId),\n userAgentValue: getAuthUserAgentValue(AuthAction.ConfirmSignIn),\n }, {\n UserCode: challengeResponse,\n Session: session,\n FriendlyDeviceName: deviceName,\n });\n signInStore.dispatch({\n type: 'SET_SIGN_IN_SESSION',\n value: Session,\n });\n const jsonReq = {\n ChallengeName: 'MFA_SETUP',\n ChallengeResponses: challengeResponses,\n Session,\n ClientMetadata: clientMetadata,\n ClientId: userPoolClientId,\n };\n const respondToAuthChallenge = createRespondToAuthChallengeClient({\n endpointResolver: createCognitoUserPoolEndpointResolver({\n endpointOverride: userPoolEndpoint,\n }),\n });\n return respondToAuthChallenge({\n region: getRegionFromUserPoolId(userPoolId),\n userAgentValue: getAuthUserAgentValue(AuthAction.ConfirmSignIn),\n }, jsonReq);\n }\n const isEmail = challengeResponse.includes('@');\n if (isEmail) {\n challengeResponses.EMAIL = challengeResponse;\n const jsonReq = {\n ChallengeName: 'MFA_SETUP',\n ChallengeResponses: challengeResponses,\n Session: session,\n ClientMetadata: clientMetadata,\n ClientId: userPoolClientId,\n };\n const respondToAuthChallenge = createRespondToAuthChallengeClient({\n endpointResolver: createCognitoUserPoolEndpointResolver({\n endpointOverride: userPoolEndpoint,\n }),\n });\n return respondToAuthChallenge({\n region: getRegionFromUserPoolId(userPoolId),\n userAgentValue: getAuthUserAgentValue(AuthAction.ConfirmSignIn),\n }, jsonReq);\n }\n throw new AuthError({\n name: AuthErrorCodes.SignInException,\n message: `Cannot proceed with MFA setup using challengeResponse: ${challengeResponse}`,\n recoverySuggestion: 'Try passing \"EMAIL\", \"TOTP\", a valid email, or OTP code as the challengeResponse.',\n });\n}\nexport async function handleSelectMFATypeChallenge({ challengeResponse, username, clientMetadata, session, config, }) {\n const { userPoolId, userPoolClientId, userPoolEndpoint } = config;\n assertValidationError(challengeResponse === 'TOTP' ||\n challengeResponse === 'SMS' ||\n challengeResponse === 'EMAIL', AuthValidationErrorCode.IncorrectMFAMethod);\n const challengeResponses = {\n USERNAME: username,\n ANSWER: mapMfaType(challengeResponse),\n };\n const UserContextData = getUserContextData({\n username,\n userPoolId,\n userPoolClientId,\n });\n const jsonReq = {\n ChallengeName: 'SELECT_MFA_TYPE',\n ChallengeResponses: challengeResponses,\n Session: session,\n ClientMetadata: clientMetadata,\n ClientId: userPoolClientId,\n UserContextData,\n };\n const respondToAuthChallenge = createRespondToAuthChallengeClient({\n endpointResolver: createCognitoUserPoolEndpointResolver({\n endpointOverride: userPoolEndpoint,\n }),\n });\n return respondToAuthChallenge({\n region: getRegionFromUserPoolId(userPoolId),\n userAgentValue: getAuthUserAgentValue(AuthAction.ConfirmSignIn),\n }, jsonReq);\n}\nexport async function handleCompleteNewPasswordChallenge({ challengeResponse, clientMetadata, session, username, requiredAttributes, config, }) {\n const { userPoolId, userPoolClientId, userPoolEndpoint } = config;\n const challengeResponses = {\n ...createAttributes(requiredAttributes),\n NEW_PASSWORD: challengeResponse,\n USERNAME: username,\n };\n const UserContextData = getUserContextData({\n username,\n userPoolId,\n userPoolClientId,\n });\n const jsonReq = {\n ChallengeName: 'NEW_PASSWORD_REQUIRED',\n ChallengeResponses: challengeResponses,\n ClientMetadata: clientMetadata,\n Session: session,\n ClientId: userPoolClientId,\n UserContextData,\n };\n const respondToAuthChallenge = createRespondToAuthChallengeClient({\n endpointResolver: createCognitoUserPoolEndpointResolver({\n endpointOverride: userPoolEndpoint,\n }),\n });\n return respondToAuthChallenge({\n region: getRegionFromUserPoolId(userPoolId),\n userAgentValue: getAuthUserAgentValue(AuthAction.ConfirmSignIn),\n }, jsonReq);\n}\nexport async function handleUserPasswordAuthFlow(username, password, clientMetadata, config, tokenOrchestrator) {\n const { userPoolClientId, userPoolId, userPoolEndpoint } = config;\n const authParameters = {\n USERNAME: username,\n PASSWORD: password,\n };\n const deviceMetadata = await tokenOrchestrator.getDeviceMetadata(username);\n if (deviceMetadata && deviceMetadata.deviceKey) {\n authParameters.DEVICE_KEY = deviceMetadata.deviceKey;\n }\n const UserContextData = getUserContextData({\n username,\n userPoolId,\n userPoolClientId,\n });\n const jsonReq = {\n AuthFlow: 'USER_PASSWORD_AUTH',\n AuthParameters: authParameters,\n ClientMetadata: clientMetadata,\n ClientId: userPoolClientId,\n UserContextData,\n };\n const initiateAuth = createInitiateAuthClient({\n endpointResolver: createCognitoUserPoolEndpointResolver({\n endpointOverride: userPoolEndpoint,\n }),\n });\n const response = await initiateAuth({\n region: getRegionFromUserPoolId(userPoolId),\n userAgentValue: getAuthUserAgentValue(AuthAction.SignIn),\n }, jsonReq);\n const activeUsername = response.ChallengeParameters?.USERNAME ??\n response.ChallengeParameters?.USER_ID_FOR_SRP ??\n username;\n setActiveSignInUsername(activeUsername);\n if (response.ChallengeName === 'DEVICE_SRP_AUTH')\n return handleDeviceSRPAuth({\n username: activeUsername,\n config,\n clientMetadata,\n session: response.Session,\n tokenOrchestrator,\n });\n return response;\n}\nexport async function handleUserSRPAuthFlow(username, password, clientMetadata, config, tokenOrchestrator) {\n return handlePasswordSRP({\n username,\n password,\n clientMetadata,\n config,\n tokenOrchestrator,\n authFlow: 'USER_SRP_AUTH',\n });\n}\nexport async function handleCustomAuthFlowWithoutSRP(username, clientMetadata, config, tokenOrchestrator) {\n const { userPoolClientId, userPoolId, userPoolEndpoint } = config;\n const authParameters = {\n USERNAME: username,\n };\n const deviceMetadata = await tokenOrchestrator.getDeviceMetadata(username);\n if (deviceMetadata && deviceMetadata.deviceKey) {\n authParameters.DEVICE_KEY = deviceMetadata.deviceKey;\n }\n const UserContextData = getUserContextData({\n username,\n userPoolId,\n userPoolClientId,\n });\n const jsonReq = {\n AuthFlow: 'CUSTOM_AUTH',\n AuthParameters: authParameters,\n ClientMetadata: clientMetadata,\n ClientId: userPoolClientId,\n UserContextData,\n };\n const initiateAuth = createInitiateAuthClient({\n endpointResolver: createCognitoUserPoolEndpointResolver({\n endpointOverride: userPoolEndpoint,\n }),\n });\n const response = await initiateAuth({\n region: getRegionFromUserPoolId(userPoolId),\n userAgentValue: getAuthUserAgentValue(AuthAction.SignIn),\n }, jsonReq);\n const activeUsername = response.ChallengeParameters?.USERNAME ?? username;\n setActiveSignInUsername(activeUsername);\n if (response.ChallengeName === 'DEVICE_SRP_AUTH')\n return handleDeviceSRPAuth({\n username: activeUsername,\n config,\n clientMetadata,\n session: response.Session,\n tokenOrchestrator,\n });\n return response;\n}\nexport async function handleCustomSRPAuthFlow(username, password, clientMetadata, config, tokenOrchestrator) {\n assertTokenProviderConfig(config);\n const { userPoolId, userPoolClientId, userPoolEndpoint } = config;\n const userPoolName = userPoolId?.split('_')[1] || '';\n const authenticationHelper = await getAuthenticationHelper(userPoolName);\n const authParameters = {\n USERNAME: username,\n SRP_A: authenticationHelper.A.toString(16),\n CHALLENGE_NAME: 'SRP_A',\n };\n const UserContextData = getUserContextData({\n username,\n userPoolId,\n userPoolClientId,\n });\n const jsonReq = {\n AuthFlow: 'CUSTOM_AUTH',\n AuthParameters: authParameters,\n ClientMetadata: clientMetadata,\n ClientId: userPoolClientId,\n UserContextData,\n };\n const initiateAuth = createInitiateAuthClient({\n endpointResolver: createCognitoUserPoolEndpointResolver({\n endpointOverride: userPoolEndpoint,\n }),\n });\n const { ChallengeParameters: challengeParameters, Session: session } = await initiateAuth({\n region: getRegionFromUserPoolId(userPoolId),\n userAgentValue: getAuthUserAgentValue(AuthAction.SignIn),\n }, jsonReq);\n const activeUsername = challengeParameters?.USERNAME ?? username;\n setActiveSignInUsername(activeUsername);\n return retryOnResourceNotFoundException(handlePasswordVerifierChallenge, [\n password,\n challengeParameters,\n clientMetadata,\n session,\n authenticationHelper,\n config,\n tokenOrchestrator,\n ], activeUsername, tokenOrchestrator);\n}\nexport async function getSignInResult(params) {\n const { challengeName, challengeParameters, availableChallenges } = params;\n const authConfig = Amplify.getConfig().Auth?.Cognito;\n assertTokenProviderConfig(authConfig);\n switch (challengeName) {\n case 'CUSTOM_CHALLENGE':\n return {\n isSignedIn: false,\n nextStep: {\n signInStep: 'CONFIRM_SIGN_IN_WITH_CUSTOM_CHALLENGE',\n additionalInfo: challengeParameters,\n },\n };\n case 'MFA_SETUP': {\n const { signInSession, username } = signInStore.getState();\n const mfaSetupTypes = getMFATypes(parseMFATypes(challengeParameters.MFAS_CAN_SETUP)) || [];\n const allowedMfaSetupTypes = getAllowedMfaSetupTypes(mfaSetupTypes);\n const isTotpMfaSetupAvailable = allowedMfaSetupTypes.includes('TOTP');\n const isEmailMfaSetupAvailable = allowedMfaSetupTypes.includes('EMAIL');\n if (isTotpMfaSetupAvailable && isEmailMfaSetupAvailable) {\n return {\n isSignedIn: false,\n nextStep: {\n signInStep: 'CONTINUE_SIGN_IN_WITH_MFA_SETUP_SELECTION',\n allowedMFATypes: allowedMfaSetupTypes,\n },\n };\n }\n if (isEmailMfaSetupAvailable) {\n return {\n isSignedIn: false,\n nextStep: {\n signInStep: 'CONTINUE_SIGN_IN_WITH_EMAIL_SETUP',\n },\n };\n }\n if (isTotpMfaSetupAvailable) {\n const associateSoftwareToken = createAssociateSoftwareTokenClient({\n endpointResolver: createCognitoUserPoolEndpointResolver({\n endpointOverride: authConfig.userPoolEndpoint,\n }),\n });\n const { Session, SecretCode: secretCode } = await associateSoftwareToken({ region: getRegionFromUserPoolId(authConfig.userPoolId) }, {\n Session: signInSession,\n });\n signInStore.dispatch({\n type: 'SET_SIGN_IN_SESSION',\n value: Session,\n });\n return {\n isSignedIn: false,\n nextStep: {\n signInStep: 'CONTINUE_SIGN_IN_WITH_TOTP_SETUP',\n totpSetupDetails: getTOTPSetupDetails(secretCode, username),\n },\n };\n }\n throw new AuthError({\n name: AuthErrorCodes.SignInException,\n message: `Cannot initiate MFA setup from available types: ${mfaSetupTypes}`,\n });\n }\n case 'NEW_PASSWORD_REQUIRED':\n return {\n isSignedIn: false,\n nextStep: {\n signInStep: 'CONFIRM_SIGN_IN_WITH_NEW_PASSWORD_REQUIRED',\n missingAttributes: parseAttributes(challengeParameters.requiredAttributes),\n },\n };\n case 'SELECT_MFA_TYPE':\n return {\n isSignedIn: false,\n nextStep: {\n signInStep: 'CONTINUE_SIGN_IN_WITH_MFA_SELECTION',\n allowedMFATypes: getMFATypes(parseMFATypes(challengeParameters.MFAS_CAN_CHOOSE)),\n },\n };\n case 'SMS_OTP':\n case 'SMS_MFA':\n return {\n isSignedIn: false,\n nextStep: {\n signInStep: 'CONFIRM_SIGN_IN_WITH_SMS_CODE',\n codeDeliveryDetails: {\n deliveryMedium: challengeParameters.CODE_DELIVERY_DELIVERY_MEDIUM,\n destination: challengeParameters.CODE_DELIVERY_DESTINATION,\n },\n },\n };\n case 'SOFTWARE_TOKEN_MFA':\n return {\n isSignedIn: false,\n nextStep: {\n signInStep: 'CONFIRM_SIGN_IN_WITH_TOTP_CODE',\n },\n };\n case 'EMAIL_OTP':\n return {\n isSignedIn: false,\n nextStep: {\n signInStep: 'CONFIRM_SIGN_IN_WITH_EMAIL_CODE',\n codeDeliveryDetails: {\n deliveryMedium: challengeParameters.CODE_DELIVERY_DELIVERY_MEDIUM,\n destination: challengeParameters.CODE_DELIVERY_DESTINATION,\n },\n },\n };\n case 'WEB_AUTHN': {\n const result = await handleWebAuthnSignInResult(challengeParameters);\n if (isWebAuthnResultAuthSignInOutput(result)) {\n return result;\n }\n return getSignInResult(result);\n }\n case 'PASSWORD':\n case 'PASSWORD_SRP':\n return {\n isSignedIn: false,\n nextStep: {\n signInStep: 'CONFIRM_SIGN_IN_WITH_PASSWORD',\n },\n };\n case 'SELECT_CHALLENGE':\n return {\n isSignedIn: false,\n nextStep: {\n signInStep: 'CONTINUE_SIGN_IN_WITH_FIRST_FACTOR_SELECTION',\n availableChallenges,\n },\n };\n case 'ADMIN_NO_SRP_AUTH':\n break;\n case 'DEVICE_PASSWORD_VERIFIER':\n break;\n case 'DEVICE_SRP_AUTH':\n break;\n case 'PASSWORD_VERIFIER':\n break;\n }\n // TODO: remove this error message for production apps\n throw new AuthError({\n name: AuthErrorCodes.SignInException,\n message: 'An error occurred during the sign in process. ' +\n `${challengeName} challengeName returned by the underlying service was not addressed.`,\n });\n}\nexport function getTOTPSetupDetails(secretCode, username) {\n return {\n sharedSecret: secretCode,\n getSetupUri: (appName, accountName) => {\n const totpUri = `otpauth://totp/${appName}:${accountName ?? username}?secret=${secretCode}&issuer=${appName}`;\n return new AmplifyUrl(totpUri);\n },\n };\n}\nexport function getSignInResultFromError(errorName) {\n if (errorName === InitiateAuthException.PasswordResetRequiredException) {\n return {\n isSignedIn: false,\n nextStep: { signInStep: 'RESET_PASSWORD' },\n };\n }\n else if (errorName === InitiateAuthException.UserNotConfirmedException) {\n return {\n isSignedIn: false,\n nextStep: { signInStep: 'CONFIRM_SIGN_UP' },\n };\n }\n}\nexport function parseAttributes(attributes) {\n if (!attributes)\n return [];\n const parsedAttributes = JSON.parse(attributes).map(att => att.includes(USER_ATTRIBUTES) ? att.replace(USER_ATTRIBUTES, '') : att);\n return parsedAttributes;\n}\nexport function createAttributes(attributes) {\n if (!attributes)\n return {};\n const newAttributes = {};\n Object.entries(attributes).forEach(([key, value]) => {\n if (value)\n newAttributes[`${USER_ATTRIBUTES}${key}`] = value;\n });\n return newAttributes;\n}\nexport async function handleChallengeName(username, challengeName, session, challengeResponse, config, tokenOrchestrator, clientMetadata, options) {\n const userAttributes = options?.userAttributes;\n const deviceName = options?.friendlyDeviceName;\n switch (challengeName) {\n case 'WEB_AUTHN':\n case 'SELECT_CHALLENGE':\n if (challengeResponse === 'PASSWORD_SRP' ||\n challengeResponse === 'PASSWORD') {\n return {\n ChallengeName: challengeResponse,\n Session: session,\n $metadata: {},\n };\n }\n return initiateSelectedChallenge({\n username,\n session,\n selectedChallenge: challengeResponse,\n config,\n clientMetadata,\n });\n case 'SELECT_MFA_TYPE':\n return handleSelectMFATypeChallenge({\n challengeResponse,\n clientMetadata,\n session,\n username,\n config,\n tokenOrchestrator,\n });\n case 'MFA_SETUP':\n return handleMFASetupChallenge({\n challengeResponse,\n clientMetadata,\n session,\n username,\n deviceName,\n config,\n tokenOrchestrator,\n });\n case 'NEW_PASSWORD_REQUIRED':\n return handleCompleteNewPasswordChallenge({\n challengeResponse,\n clientMetadata,\n session,\n username,\n requiredAttributes: userAttributes,\n config,\n tokenOrchestrator,\n });\n case 'CUSTOM_CHALLENGE':\n return retryOnResourceNotFoundException(handleCustomChallenge, [\n {\n challengeResponse,\n clientMetadata,\n session,\n username,\n config,\n tokenOrchestrator,\n },\n ], username, tokenOrchestrator);\n case 'SMS_MFA':\n case 'SOFTWARE_TOKEN_MFA':\n case 'SMS_OTP':\n case 'EMAIL_OTP':\n return handleMFAChallenge({\n challengeName,\n challengeResponse,\n clientMetadata,\n session,\n username,\n config,\n tokenOrchestrator,\n });\n case 'PASSWORD':\n return handleSelectChallengeWithPassword(username, challengeResponse, clientMetadata, config, session);\n case 'PASSWORD_SRP':\n return handleSelectChallengeWithPasswordSRP(username, challengeResponse, // This is the actual password\n clientMetadata, config, session, tokenOrchestrator);\n }\n // TODO: remove this error message for production apps\n throw new AuthError({\n name: AuthErrorCodes.SignInException,\n message: `An error occurred during the sign in process.\n\t\t${challengeName} challengeName returned by the underlying service was not addressed.`,\n });\n}\nexport function mapMfaType(mfa) {\n let mfaType = 'SMS_MFA';\n if (mfa === 'TOTP')\n mfaType = 'SOFTWARE_TOKEN_MFA';\n if (mfa === 'EMAIL')\n mfaType = 'EMAIL_OTP';\n return mfaType;\n}\nexport function getMFAType(type) {\n if (type === 'SMS_MFA')\n return 'SMS';\n if (type === 'SOFTWARE_TOKEN_MFA')\n return 'TOTP';\n if (type === 'EMAIL_OTP')\n return 'EMAIL';\n // TODO: log warning for unknown MFA type\n}\nexport function getMFATypes(types) {\n if (!types)\n return undefined;\n return types.map(getMFAType).filter(Boolean);\n}\nexport function parseMFATypes(mfa) {\n if (!mfa)\n return [];\n return JSON.parse(mfa);\n}\nexport function getAllowedMfaSetupTypes(availableMfaSetupTypes) {\n return availableMfaSetupTypes.filter(authMfaType => authMfaType === 'EMAIL' || authMfaType === 'TOTP');\n}\nexport async function assertUserNotAuthenticated() {\n let authUser;\n try {\n authUser = await getCurrentUser();\n }\n catch (error) { }\n if (authUser && authUser.userId && authUser.username) {\n throw new AuthError({\n name: USER_ALREADY_AUTHENTICATED_EXCEPTION,\n message: 'There is already a signed in user.',\n recoverySuggestion: 'Call signOut before calling signIn again.',\n });\n }\n}\nexport function getActiveSignInUsername(username) {\n const state = signInStore.getState();\n return state.username ?? username;\n}\nexport async function handleMFAChallenge({ challengeName, challengeResponse, clientMetadata, session, username, config, tokenOrchestrator, }) {\n const { userPoolId, userPoolClientId, userPoolEndpoint } = config;\n const challengeResponses = {\n USERNAME: username,\n };\n if (challengeName === 'EMAIL_OTP') {\n challengeResponses.EMAIL_OTP_CODE = challengeResponse;\n }\n if (challengeName === 'SMS_MFA') {\n challengeResponses.SMS_MFA_CODE = challengeResponse;\n }\n if (challengeName === 'SMS_OTP') {\n challengeResponses.SMS_OTP_CODE = challengeResponse;\n }\n if (challengeName === 'SOFTWARE_TOKEN_MFA') {\n challengeResponses.SOFTWARE_TOKEN_MFA_CODE = challengeResponse;\n }\n const deviceMetadata = await tokenOrchestrator?.getDeviceMetadata(username);\n if (deviceMetadata && deviceMetadata.deviceKey) {\n challengeResponses.DEVICE_KEY = deviceMetadata.deviceKey;\n }\n const userContextData = getUserContextData({\n username,\n userPoolId,\n userPoolClientId,\n });\n const jsonReq = {\n ChallengeName: challengeName,\n ChallengeResponses: challengeResponses,\n Session: session,\n ClientMetadata: clientMetadata,\n ClientId: userPoolClientId,\n UserContextData: userContextData,\n };\n const respondToAuthChallenge = createRespondToAuthChallengeClient({\n endpointResolver: createCognitoUserPoolEndpointResolver({\n endpointOverride: userPoolEndpoint,\n }),\n });\n const response = await respondToAuthChallenge({\n region: getRegionFromUserPoolId(userPoolId),\n userAgentValue: getAuthUserAgentValue(AuthAction.ConfirmSignIn),\n }, jsonReq);\n if (response.ChallengeName === 'DEVICE_SRP_AUTH') {\n return handleDeviceSRPAuth({\n username,\n config,\n clientMetadata,\n session: response.Session,\n tokenOrchestrator,\n });\n }\n return response;\n}\n"],"names":[],"mappings":"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"}