@aws-amplify/auth
Version:
Auth category of aws-amplify
104 lines (102 loc) • 5.01 kB
JavaScript
'use strict';
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0
Object.defineProperty(exports, "__esModule", { value: true });
exports.signInWithUserAuth = signInWithUserAuth;
const core_1 = require("@aws-amplify/core");
const utils_1 = require("@aws-amplify/core/internals/utils");
const validation_1 = require("../../../errors/types/validation");
const assertValidationError_1 = require("../../../errors/utils/assertValidationError");
const assertServiceError_1 = require("../../../errors/utils/assertServiceError");
const signInHelpers_1 = require("../utils/signInHelpers");
const store_1 = require("../../../client/utils/store");
const signInStore_1 = require("../../../client/utils/store/signInStore");
const cacheTokens_1 = require("../tokenProvider/cacheTokens");
const dispatchSignedInHubEvent_1 = require("../utils/dispatchSignedInHubEvent");
const tokenProvider_1 = require("../tokenProvider");
const handleUserAuthFlow_1 = require("../../../client/flows/userAuth/handleUserAuthFlow");
const getNewDeviceMetadata_1 = require("../utils/getNewDeviceMetadata");
const autoSignIn_1 = require("./autoSignIn");
/**
* Signs a user in through a registered email or phone number without a password by by receiving and entering an OTP.
*
* @param input - The SignInWithUserAuthInput object
* @returns SignInWithUserAuthOutput
* @throws service: {@link InitiateAuthException }, {@link RespondToAuthChallengeException } - Cognito service errors
* thrown during the sign-in process.
* @throws validation: {@link AuthValidationErrorCode } - Validation errors thrown when either username or password -- needs to change
* are not defined.
* @throws AuthTokenConfigException - Thrown when the token provider config is invalid.
*/
async function signInWithUserAuth(input) {
const { username, password, options } = input;
const authConfig = core_1.Amplify.getConfig().Auth?.Cognito;
const signInDetails = {
loginId: username,
authFlowType: 'USER_AUTH',
};
(0, utils_1.assertTokenProviderConfig)(authConfig);
const clientMetaData = options?.clientMetadata;
const preferredChallenge = options?.preferredChallenge ?? authConfig?.passwordless?.preferredChallenge;
(0, assertValidationError_1.assertValidationError)(!!username, validation_1.AuthValidationErrorCode.EmptySignInUsername);
try {
const handleUserAuthFlowInput = {
username,
config: authConfig,
tokenOrchestrator: tokenProvider_1.tokenOrchestrator,
clientMetadata: clientMetaData,
preferredChallenge,
password,
};
const autoSignInStoreState = store_1.autoSignInStore.getState();
if (autoSignInStoreState.active &&
autoSignInStoreState.username === username) {
handleUserAuthFlowInput.session = autoSignInStoreState.session;
}
const response = await (0, handleUserAuthFlow_1.handleUserAuthFlow)(handleUserAuthFlowInput);
const activeUsername = (0, signInHelpers_1.getActiveSignInUsername)(username);
(0, signInStore_1.setActiveSignInState)({
signInSession: response.Session,
username: activeUsername,
challengeName: response.ChallengeName,
signInDetails,
});
if (response.AuthenticationResult) {
await (0, cacheTokens_1.cacheCognitoTokens)({
username: activeUsername,
...response.AuthenticationResult,
NewDeviceMetadata: await (0, getNewDeviceMetadata_1.getNewDeviceMetadata)({
userPoolId: authConfig.userPoolId,
userPoolEndpoint: authConfig.userPoolEndpoint,
newDeviceMetadata: response.AuthenticationResult.NewDeviceMetadata,
accessToken: response.AuthenticationResult.AccessToken,
}),
signInDetails,
});
(0, signInStore_1.resetActiveSignInState)();
await (0, dispatchSignedInHubEvent_1.dispatchSignedInHubEvent)();
(0, autoSignIn_1.resetAutoSignIn)();
return {
isSignedIn: true,
nextStep: { signInStep: 'DONE' },
};
}
return (0, signInHelpers_1.getSignInResult)({
challengeName: response.ChallengeName,
challengeParameters: response.ChallengeParameters,
availableChallenges: 'AvailableChallenges' in response
? response.AvailableChallenges
: undefined,
});
}
catch (error) {
(0, signInStore_1.resetActiveSignInState)();
(0, autoSignIn_1.resetAutoSignIn)();
(0, assertServiceError_1.assertServiceError)(error);
const result = (0, signInHelpers_1.getSignInResultFromError)(error.name);
if (result)
return result;
throw error;
}
}
//# sourceMappingURL=signInWithUserAuth.js.map