@aws-amplify/auth 4.3.19 → 4.3.20-custom-pk.86

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib-esm/Auth.js CHANGED
@@ -74,7 +74,7 @@ var __read = (this && this.__read) || function (o, n) {
74
74
  return ar;
75
75
  };
76
76
  import { isUsernamePasswordOpts, isCognitoHostedOpts, isFederatedSignInOptions, isFederatedSignInOptionsCustom, hasCustomState, } from './types';
77
- import { Amplify, ConsoleLogger as Logger, Credentials, Hub, StorageHelper, Parser, JS, UniversalStorage, urlSafeDecode, } from '@aws-amplify/core';
77
+ import { Amplify, ConsoleLogger as Logger, Credentials, Hub, StorageHelper, Parser, browserOrNode, UniversalStorage, urlSafeDecode, } from '@aws-amplify/core';
78
78
  import { CookieStorage, CognitoUserPool, AuthenticationDetails, CognitoUser, CognitoUserSession, CognitoUserAttribute, CognitoIdToken, CognitoRefreshToken, CognitoAccessToken, } from 'amazon-cognito-identity-js';
79
79
  import { parse } from 'url';
80
80
  import OAuth from './OAuth/OAuth';
@@ -85,8 +85,7 @@ var logger = new Logger('AuthClass');
85
85
  var USER_ADMIN_SCOPE = 'aws.cognito.signin.user.admin';
86
86
  // 10 sec, following this guide https://www.nngroup.com/articles/response-times-3-important-limits/
87
87
  var OAUTH_FLOW_MS_TIMEOUT = 10 * 1000;
88
- var AMPLIFY_SYMBOL = (typeof Symbol !== 'undefined' &&
89
- typeof Symbol.for === 'function'
88
+ var AMPLIFY_SYMBOL = (typeof Symbol !== 'undefined' && typeof Symbol.for === 'function'
90
89
  ? Symbol.for('amplify_default')
91
90
  : '@@amplify_default');
92
91
  var dispatchAuthEvent = function (event, data, message) {
@@ -594,22 +593,42 @@ var AuthClass = /** @class */ (function () {
594
593
  return new Promise(function (res, rej) {
595
594
  var clientMetadata = _this._config.clientMetadata; // TODO: verify behavior if this is override during signIn
596
595
  var bypassCache = params ? params.bypassCache : false;
597
- user.getUserData(function (err, data) {
598
- if (err) {
599
- logger.debug('getting preferred mfa failed', err);
600
- rej(err);
601
- return;
602
- }
603
- var mfaType = that._getMfaTypeFromUserData(data);
604
- if (!mfaType) {
605
- rej('invalid MFA Type');
606
- return;
607
- }
608
- else {
609
- res(mfaType);
610
- return;
611
- }
612
- }, { bypassCache: bypassCache, clientMetadata: clientMetadata });
596
+ user.getUserData(function (err, data) { return __awaiter(_this, void 0, void 0, function () {
597
+ var cleanUpError_1, mfaType;
598
+ return __generator(this, function (_a) {
599
+ switch (_a.label) {
600
+ case 0:
601
+ if (!err) return [3 /*break*/, 5];
602
+ logger.debug('getting preferred mfa failed', err);
603
+ if (!this.isSessionInvalid(err)) return [3 /*break*/, 4];
604
+ _a.label = 1;
605
+ case 1:
606
+ _a.trys.push([1, 3, , 4]);
607
+ return [4 /*yield*/, this.cleanUpInvalidSession(user)];
608
+ case 2:
609
+ _a.sent();
610
+ return [3 /*break*/, 4];
611
+ case 3:
612
+ cleanUpError_1 = _a.sent();
613
+ rej(new Error("Session is invalid due to: " + err.message + " and failed to clean up invalid session: " + cleanUpError_1.message));
614
+ return [2 /*return*/];
615
+ case 4:
616
+ rej(err);
617
+ return [2 /*return*/];
618
+ case 5:
619
+ mfaType = that._getMfaTypeFromUserData(data);
620
+ if (!mfaType) {
621
+ rej('invalid MFA Type');
622
+ return [2 /*return*/];
623
+ }
624
+ else {
625
+ res(mfaType);
626
+ return [2 /*return*/];
627
+ }
628
+ return [2 /*return*/];
629
+ }
630
+ });
631
+ }); }, { bypassCache: bypassCache, clientMetadata: clientMetadata });
613
632
  });
614
633
  };
615
634
  AuthClass.prototype._getMfaTypeFromUserData = function (data) {
@@ -646,18 +665,37 @@ var AuthClass = /** @class */ (function () {
646
665
  return ret;
647
666
  };
648
667
  AuthClass.prototype._getUserData = function (user, params) {
668
+ var _this = this;
649
669
  return new Promise(function (res, rej) {
650
- user.getUserData(function (err, data) {
651
- if (err) {
652
- logger.debug('getting user data failed', err);
653
- rej(err);
654
- return;
655
- }
656
- else {
657
- res(data);
658
- return;
659
- }
660
- }, params);
670
+ user.getUserData(function (err, data) { return __awaiter(_this, void 0, void 0, function () {
671
+ var cleanUpError_2;
672
+ return __generator(this, function (_a) {
673
+ switch (_a.label) {
674
+ case 0:
675
+ if (!err) return [3 /*break*/, 5];
676
+ logger.debug('getting user data failed', err);
677
+ if (!this.isSessionInvalid(err)) return [3 /*break*/, 4];
678
+ _a.label = 1;
679
+ case 1:
680
+ _a.trys.push([1, 3, , 4]);
681
+ return [4 /*yield*/, this.cleanUpInvalidSession(user)];
682
+ case 2:
683
+ _a.sent();
684
+ return [3 /*break*/, 4];
685
+ case 3:
686
+ cleanUpError_2 = _a.sent();
687
+ rej(new Error("Session is invalid due to: " + err.message + " and failed to clean up invalid session: " + cleanUpError_2.message));
688
+ return [2 /*return*/];
689
+ case 4:
690
+ rej(err);
691
+ return [2 /*return*/];
692
+ case 5:
693
+ res(data);
694
+ _a.label = 6;
695
+ case 6: return [2 /*return*/];
696
+ }
697
+ });
698
+ }); }, params);
661
699
  });
662
700
  };
663
701
  /**
@@ -669,6 +707,7 @@ var AuthClass = /** @class */ (function () {
669
707
  AuthClass.prototype.setPreferredMFA = function (user, mfaMethod) {
670
708
  return __awaiter(this, void 0, void 0, function () {
671
709
  var clientMetadata, userData, smsMfaSettings, totpMfaSettings, _a, mfaList, currentMFAType, that;
710
+ var _this = this;
672
711
  return __generator(this, function (_b) {
673
712
  switch (_b.label) {
674
713
  case 0:
@@ -759,15 +798,30 @@ var AuthClass = /** @class */ (function () {
759
798
  logger.debug('Set user mfa success', result);
760
799
  logger.debug('Caching the latest user data into local');
761
800
  // cache the latest result into user data
762
- user.getUserData(function (err, data) {
763
- if (err) {
764
- logger.debug('getting user data failed', err);
765
- return rej(err);
766
- }
767
- else {
768
- return res(result);
769
- }
770
- }, {
801
+ user.getUserData(function (err, data) { return __awaiter(_this, void 0, void 0, function () {
802
+ var cleanUpError_3;
803
+ return __generator(this, function (_a) {
804
+ switch (_a.label) {
805
+ case 0:
806
+ if (!err) return [3 /*break*/, 5];
807
+ logger.debug('getting user data failed', err);
808
+ if (!this.isSessionInvalid(err)) return [3 /*break*/, 4];
809
+ _a.label = 1;
810
+ case 1:
811
+ _a.trys.push([1, 3, , 4]);
812
+ return [4 /*yield*/, this.cleanUpInvalidSession(user)];
813
+ case 2:
814
+ _a.sent();
815
+ return [3 /*break*/, 4];
816
+ case 3:
817
+ cleanUpError_3 = _a.sent();
818
+ rej(new Error("Session is invalid due to: " + err.message + " and failed to clean up invalid session: " + cleanUpError_3.message));
819
+ return [2 /*return*/];
820
+ case 4: return [2 /*return*/, rej(err)];
821
+ case 5: return [2 /*return*/, res(result)];
822
+ }
823
+ });
824
+ }); }, {
771
825
  bypassCache: true,
772
826
  clientMetadata: clientMetadata,
773
827
  });
@@ -1018,6 +1072,105 @@ var AuthClass = /** @class */ (function () {
1018
1072
  });
1019
1073
  });
1020
1074
  };
1075
+ /**
1076
+ * Delete the current authenticated user
1077
+ * @return {Promise}
1078
+ **/
1079
+ // TODO: Check return type void
1080
+ AuthClass.prototype.deleteUser = function () {
1081
+ return __awaiter(this, void 0, void 0, function () {
1082
+ var e_5, isSignedInHostedUI;
1083
+ var _this = this;
1084
+ return __generator(this, function (_a) {
1085
+ switch (_a.label) {
1086
+ case 0:
1087
+ _a.trys.push([0, 2, , 3]);
1088
+ return [4 /*yield*/, this._storageSync];
1089
+ case 1:
1090
+ _a.sent();
1091
+ return [3 /*break*/, 3];
1092
+ case 2:
1093
+ e_5 = _a.sent();
1094
+ logger.debug('Failed to sync cache info into memory', e_5);
1095
+ throw new Error(e_5);
1096
+ case 3:
1097
+ isSignedInHostedUI = this._oAuthHandler &&
1098
+ this._storage.getItem('amplify-signin-with-hostedUI') === 'true';
1099
+ return [2 /*return*/, new Promise(function (res, rej) { return __awaiter(_this, void 0, void 0, function () {
1100
+ var user_1;
1101
+ var _this = this;
1102
+ return __generator(this, function (_a) {
1103
+ if (this.userPool) {
1104
+ user_1 = this.userPool.getCurrentUser();
1105
+ if (!user_1) {
1106
+ logger.debug('Failed to get user from user pool');
1107
+ return [2 /*return*/, rej(new Error('No current user.'))];
1108
+ }
1109
+ else {
1110
+ user_1.getSession(function (err, session) { return __awaiter(_this, void 0, void 0, function () {
1111
+ var cleanUpError_4;
1112
+ var _this = this;
1113
+ return __generator(this, function (_a) {
1114
+ switch (_a.label) {
1115
+ case 0:
1116
+ if (!err) return [3 /*break*/, 5];
1117
+ logger.debug('Failed to get the user session', err);
1118
+ if (!this.isSessionInvalid(err)) return [3 /*break*/, 4];
1119
+ _a.label = 1;
1120
+ case 1:
1121
+ _a.trys.push([1, 3, , 4]);
1122
+ return [4 /*yield*/, this.cleanUpInvalidSession(user_1)];
1123
+ case 2:
1124
+ _a.sent();
1125
+ return [3 /*break*/, 4];
1126
+ case 3:
1127
+ cleanUpError_4 = _a.sent();
1128
+ rej(new Error("Session is invalid due to: " + err.message + " and failed to clean up invalid session: " + cleanUpError_4.message));
1129
+ return [2 /*return*/];
1130
+ case 4: return [2 /*return*/, rej(err)];
1131
+ case 5:
1132
+ user_1.deleteUser(function (err, result) {
1133
+ if (err) {
1134
+ rej(err);
1135
+ }
1136
+ else {
1137
+ dispatchAuthEvent('userDeleted', result, 'The authenticated user has been deleted.');
1138
+ user_1.signOut();
1139
+ _this.user = null;
1140
+ try {
1141
+ _this.cleanCachedItems(); // clean aws credentials
1142
+ }
1143
+ catch (e) {
1144
+ // TODO: change to rejects in refactor
1145
+ logger.debug('failed to clear cached items');
1146
+ }
1147
+ if (isSignedInHostedUI) {
1148
+ _this.oAuthSignOutRedirect(res, rej);
1149
+ }
1150
+ else {
1151
+ dispatchAuthEvent('signOut', _this.user, "A user has been signed out");
1152
+ res(result);
1153
+ }
1154
+ }
1155
+ });
1156
+ _a.label = 6;
1157
+ case 6: return [2 /*return*/];
1158
+ }
1159
+ });
1160
+ }); });
1161
+ }
1162
+ }
1163
+ else {
1164
+ logger.debug('no Congito User pool');
1165
+ rej(new Error('Cognito User pool does not exist'));
1166
+ }
1167
+ return [2 /*return*/];
1168
+ });
1169
+ }); })];
1170
+ }
1171
+ });
1172
+ });
1173
+ };
1021
1174
  /**
1022
1175
  * Update an authenticated users' attributes
1023
1176
  * @param {CognitoUser} - The currently logged in user object
@@ -1097,6 +1250,74 @@ var AuthClass = /** @class */ (function () {
1097
1250
  };
1098
1251
  });
1099
1252
  };
1253
+ AuthClass.prototype.isErrorWithMessage = function (err) {
1254
+ return (typeof err === 'object' &&
1255
+ Object.prototype.hasOwnProperty.call(err, 'message'));
1256
+ };
1257
+ // Session revoked by another app
1258
+ AuthClass.prototype.isTokenRevokedError = function (err) {
1259
+ return (this.isErrorWithMessage(err) &&
1260
+ err.message === 'Access Token has been revoked');
1261
+ };
1262
+ AuthClass.prototype.isRefreshTokenRevokedError = function (err) {
1263
+ return (this.isErrorWithMessage(err) &&
1264
+ err.message === 'Refresh Token has been revoked');
1265
+ };
1266
+ AuthClass.prototype.isUserDisabledError = function (err) {
1267
+ return this.isErrorWithMessage(err) && err.message === 'User is disabled.';
1268
+ };
1269
+ AuthClass.prototype.isUserDoesNotExistError = function (err) {
1270
+ return (this.isErrorWithMessage(err) && err.message === 'User does not exist.');
1271
+ };
1272
+ AuthClass.prototype.isRefreshTokenExpiredError = function (err) {
1273
+ return (this.isErrorWithMessage(err) &&
1274
+ err.message === 'Refresh Token has expired');
1275
+ };
1276
+ AuthClass.prototype.isSignedInHostedUI = function () {
1277
+ return (this._oAuthHandler &&
1278
+ this._storage.getItem('amplify-signin-with-hostedUI') === 'true');
1279
+ };
1280
+ AuthClass.prototype.isSessionInvalid = function (err) {
1281
+ return (this.isUserDisabledError(err) ||
1282
+ this.isUserDoesNotExistError(err) ||
1283
+ this.isTokenRevokedError(err) ||
1284
+ this.isRefreshTokenRevokedError(err) ||
1285
+ this.isRefreshTokenExpiredError(err));
1286
+ };
1287
+ AuthClass.prototype.cleanUpInvalidSession = function (user) {
1288
+ return __awaiter(this, void 0, void 0, function () {
1289
+ var e_6;
1290
+ var _this = this;
1291
+ return __generator(this, function (_a) {
1292
+ switch (_a.label) {
1293
+ case 0:
1294
+ user.signOut();
1295
+ this.user = null;
1296
+ _a.label = 1;
1297
+ case 1:
1298
+ _a.trys.push([1, 3, , 4]);
1299
+ return [4 /*yield*/, this.cleanCachedItems()];
1300
+ case 2:
1301
+ _a.sent(); // clean aws credentials
1302
+ return [3 /*break*/, 4];
1303
+ case 3:
1304
+ e_6 = _a.sent();
1305
+ logger.debug('failed to clear cached items');
1306
+ return [3 /*break*/, 4];
1307
+ case 4:
1308
+ if (this.isSignedInHostedUI()) {
1309
+ return [2 /*return*/, new Promise(function (res, rej) {
1310
+ _this.oAuthSignOutRedirect(res, rej);
1311
+ })];
1312
+ }
1313
+ else {
1314
+ dispatchAuthEvent('signOut', this.user, "A user has been signed out");
1315
+ }
1316
+ return [2 /*return*/];
1317
+ }
1318
+ });
1319
+ });
1320
+ };
1100
1321
  /**
1101
1322
  * Get current authenticated user
1102
1323
  * @return - A promise resolves to current authenticated CognitoUser if success
@@ -1148,57 +1369,82 @@ var AuthClass = /** @class */ (function () {
1148
1369
  clientMetadata = this._config.clientMetadata;
1149
1370
  // refresh the session if the session expired.
1150
1371
  user.getSession(function (err, session) { return __awaiter(_this, void 0, void 0, function () {
1151
- var bypassCache, clientMetadata, _a, scope;
1372
+ var cleanUpError_5, bypassCache, clientMetadata, _a, scope;
1152
1373
  var _this = this;
1153
1374
  return __generator(this, function (_b) {
1154
1375
  switch (_b.label) {
1155
1376
  case 0:
1156
- if (err) {
1157
- logger.debug('Failed to get the user session', err);
1158
- rej(err);
1159
- return [2 /*return*/];
1160
- }
1377
+ if (!err) return [3 /*break*/, 5];
1378
+ logger.debug('Failed to get the user session', err);
1379
+ if (!this.isSessionInvalid(err)) return [3 /*break*/, 4];
1380
+ _b.label = 1;
1381
+ case 1:
1382
+ _b.trys.push([1, 3, , 4]);
1383
+ return [4 /*yield*/, this.cleanUpInvalidSession(user)];
1384
+ case 2:
1385
+ _b.sent();
1386
+ return [3 /*break*/, 4];
1387
+ case 3:
1388
+ cleanUpError_5 = _b.sent();
1389
+ rej(new Error("Session is invalid due to: " + err.message + " and failed to clean up invalid session: " + cleanUpError_5.message));
1390
+ return [2 /*return*/];
1391
+ case 4:
1392
+ rej(err);
1393
+ return [2 /*return*/];
1394
+ case 5:
1161
1395
  bypassCache = params ? params.bypassCache : false;
1162
- if (!bypassCache) return [3 /*break*/, 2];
1396
+ if (!bypassCache) return [3 /*break*/, 7];
1163
1397
  return [4 /*yield*/, this.Credentials.clear()];
1164
- case 1:
1398
+ case 6:
1165
1399
  _b.sent();
1166
- _b.label = 2;
1167
- case 2:
1400
+ _b.label = 7;
1401
+ case 7:
1168
1402
  clientMetadata = this._config.clientMetadata;
1169
1403
  _a = session.getAccessToken().decodePayload().scope, scope = _a === void 0 ? '' : _a;
1170
1404
  if (scope.split(' ').includes(USER_ADMIN_SCOPE)) {
1171
- user.getUserData(function (err, data) {
1172
- if (err) {
1173
- logger.debug('getting user data failed', err);
1174
- // Make sure the user is still valid
1175
- if (err.message === 'User is disabled.' ||
1176
- err.message === 'User does not exist.' ||
1177
- err.message === 'Access Token has been revoked' // Session revoked by another app
1178
- ) {
1179
- rej(err);
1405
+ user.getUserData(function (err, data) { return __awaiter(_this, void 0, void 0, function () {
1406
+ var cleanUpError_6, preferredMFA, attributeList, i, attribute, userAttribute, attributes;
1407
+ return __generator(this, function (_a) {
1408
+ switch (_a.label) {
1409
+ case 0:
1410
+ if (!err) return [3 /*break*/, 7];
1411
+ logger.debug('getting user data failed', err);
1412
+ if (!this.isSessionInvalid(err)) return [3 /*break*/, 5];
1413
+ _a.label = 1;
1414
+ case 1:
1415
+ _a.trys.push([1, 3, , 4]);
1416
+ return [4 /*yield*/, this.cleanUpInvalidSession(user)];
1417
+ case 2:
1418
+ _a.sent();
1419
+ return [3 /*break*/, 4];
1420
+ case 3:
1421
+ cleanUpError_6 = _a.sent();
1422
+ rej(new Error("Session is invalid due to: " + err.message + " and failed to clean up invalid session: " + cleanUpError_6.message));
1423
+ return [2 /*return*/];
1424
+ case 4:
1425
+ rej(err);
1426
+ return [3 /*break*/, 6];
1427
+ case 5:
1428
+ res(user);
1429
+ _a.label = 6;
1430
+ case 6: return [2 /*return*/];
1431
+ case 7:
1432
+ preferredMFA = data.PreferredMfaSetting || 'NOMFA';
1433
+ attributeList = [];
1434
+ for (i = 0; i < data.UserAttributes.length; i++) {
1435
+ attribute = {
1436
+ Name: data.UserAttributes[i].Name,
1437
+ Value: data.UserAttributes[i].Value,
1438
+ };
1439
+ userAttribute = new CognitoUserAttribute(attribute);
1440
+ attributeList.push(userAttribute);
1441
+ }
1442
+ attributes = this.attributesToObject(attributeList);
1443
+ Object.assign(user, { attributes: attributes, preferredMFA: preferredMFA });
1444
+ return [2 /*return*/, res(user)];
1180
1445
  }
1181
- else {
1182
- // the error may also be thrown when lack of permissions to get user info etc
1183
- // in that case we just bypass the error
1184
- res(user);
1185
- }
1186
- return;
1187
- }
1188
- var preferredMFA = data.PreferredMfaSetting || 'NOMFA';
1189
- var attributeList = [];
1190
- for (var i = 0; i < data.UserAttributes.length; i++) {
1191
- var attribute = {
1192
- Name: data.UserAttributes[i].Name,
1193
- Value: data.UserAttributes[i].Value,
1194
- };
1195
- var userAttribute = new CognitoUserAttribute(attribute);
1196
- attributeList.push(userAttribute);
1197
- }
1198
- var attributes = _this.attributesToObject(attributeList);
1199
- Object.assign(user, { attributes: attributes, preferredMFA: preferredMFA });
1200
- return res(user);
1201
- }, { bypassCache: bypassCache, clientMetadata: clientMetadata });
1446
+ });
1447
+ }); }, { bypassCache: bypassCache, clientMetadata: clientMetadata });
1202
1448
  }
1203
1449
  else {
1204
1450
  logger.debug("Unable to get the user data because the " + USER_ADMIN_SCOPE + " " +
@@ -1229,7 +1475,7 @@ var AuthClass = /** @class */ (function () {
1229
1475
  */
1230
1476
  AuthClass.prototype.currentAuthenticatedUser = function (params) {
1231
1477
  return __awaiter(this, void 0, void 0, function () {
1232
- var federatedUser, e_5, federatedInfo, user, e_6;
1478
+ var federatedUser, e_7, federatedInfo, user, e_8;
1233
1479
  return __generator(this, function (_a) {
1234
1480
  switch (_a.label) {
1235
1481
  case 0:
@@ -1243,9 +1489,9 @@ var AuthClass = /** @class */ (function () {
1243
1489
  _a.sent();
1244
1490
  return [3 /*break*/, 4];
1245
1491
  case 3:
1246
- e_5 = _a.sent();
1247
- logger.debug('Failed to sync cache info into memory', e_5);
1248
- throw e_5;
1492
+ e_7 = _a.sent();
1493
+ logger.debug('Failed to sync cache info into memory', e_7);
1494
+ throw e_7;
1249
1495
  case 4:
1250
1496
  try {
1251
1497
  federatedInfo = JSON.parse(this._storage.getItem('aws-amplify-federatedInfo'));
@@ -1271,12 +1517,12 @@ var AuthClass = /** @class */ (function () {
1271
1517
  user = _a.sent();
1272
1518
  return [3 /*break*/, 9];
1273
1519
  case 8:
1274
- e_6 = _a.sent();
1275
- if (e_6 === 'No userPool') {
1520
+ e_8 = _a.sent();
1521
+ if (e_8 === 'No userPool') {
1276
1522
  logger.error('Cannot get the current user because the user pool is missing. ' +
1277
1523
  'Please make sure the Auth module is configured with a valid Cognito User Pool ID');
1278
1524
  }
1279
- logger.debug('The user is not authenticated by the error', e_6);
1525
+ logger.debug('The user is not authenticated by the error', e_8);
1280
1526
  return [2 /*return*/, Promise.reject('The user is not authenticated')];
1281
1527
  case 9:
1282
1528
  this.user = user;
@@ -1294,7 +1540,7 @@ var AuthClass = /** @class */ (function () {
1294
1540
  logger.debug('Getting current session');
1295
1541
  // Purposely not calling the reject method here because we don't need a console error
1296
1542
  if (!this.userPool) {
1297
- return Promise.reject();
1543
+ return this.rejectNoUserPool();
1298
1544
  }
1299
1545
  return new Promise(function (res, rej) {
1300
1546
  that
@@ -1325,25 +1571,43 @@ var AuthClass = /** @class */ (function () {
1325
1571
  * @return - A promise resolves to the session
1326
1572
  */
1327
1573
  AuthClass.prototype.userSession = function (user) {
1574
+ var _this = this;
1328
1575
  if (!user) {
1329
1576
  logger.debug('the user is null');
1330
1577
  return this.rejectAuthError(AuthErrorTypes.NoUserSession);
1331
1578
  }
1332
1579
  var clientMetadata = this._config.clientMetadata; // TODO: verify behavior if this is override during signIn
1333
- return new Promise(function (resolve, reject) {
1580
+ return new Promise(function (res, rej) {
1334
1581
  logger.debug('Getting the session from this user:', user);
1335
- user.getSession(function (err, session) {
1336
- if (err) {
1337
- logger.debug('Failed to get the session from user', user);
1338
- reject(err);
1339
- return;
1340
- }
1341
- else {
1342
- logger.debug('Succeed to get the user session', session);
1343
- resolve(session);
1344
- return;
1345
- }
1346
- }, { clientMetadata: clientMetadata });
1582
+ user.getSession(function (err, session) { return __awaiter(_this, void 0, void 0, function () {
1583
+ var cleanUpError_7;
1584
+ return __generator(this, function (_a) {
1585
+ switch (_a.label) {
1586
+ case 0:
1587
+ if (!err) return [3 /*break*/, 5];
1588
+ logger.debug('Failed to get the session from user', user);
1589
+ if (!this.isSessionInvalid(err)) return [3 /*break*/, 4];
1590
+ _a.label = 1;
1591
+ case 1:
1592
+ _a.trys.push([1, 3, , 4]);
1593
+ return [4 /*yield*/, this.cleanUpInvalidSession(user)];
1594
+ case 2:
1595
+ _a.sent();
1596
+ return [3 /*break*/, 4];
1597
+ case 3:
1598
+ cleanUpError_7 = _a.sent();
1599
+ rej(new Error("Session is invalid due to: " + err.message + " and failed to clean up invalid session: " + cleanUpError_7.message));
1600
+ return [2 /*return*/];
1601
+ case 4:
1602
+ rej(err);
1603
+ return [2 /*return*/];
1604
+ case 5:
1605
+ logger.debug('Succeed to get the user session', session);
1606
+ res(session);
1607
+ return [2 /*return*/];
1608
+ }
1609
+ });
1610
+ }); }, { clientMetadata: clientMetadata });
1347
1611
  });
1348
1612
  };
1349
1613
  /**
@@ -1352,7 +1616,7 @@ var AuthClass = /** @class */ (function () {
1352
1616
  */
1353
1617
  AuthClass.prototype.currentUserCredentials = function () {
1354
1618
  return __awaiter(this, void 0, void 0, function () {
1355
- var e_7, federatedInfo;
1619
+ var e_9, federatedInfo;
1356
1620
  var _this = this;
1357
1621
  return __generator(this, function (_a) {
1358
1622
  switch (_a.label) {
@@ -1366,9 +1630,9 @@ var AuthClass = /** @class */ (function () {
1366
1630
  _a.sent();
1367
1631
  return [3 /*break*/, 4];
1368
1632
  case 3:
1369
- e_7 = _a.sent();
1370
- logger.debug('Failed to sync cache info into memory', e_7);
1371
- throw e_7;
1633
+ e_9 = _a.sent();
1634
+ logger.debug('Failed to sync cache info into memory', e_9);
1635
+ throw e_9;
1372
1636
  case 4:
1373
1637
  federatedInfo = null;
1374
1638
  try {
@@ -1387,8 +1651,8 @@ var AuthClass = /** @class */ (function () {
1387
1651
  logger.debug('getting session success', session);
1388
1652
  return _this.Credentials.set(session, 'session');
1389
1653
  })
1390
- .catch(function (error) {
1391
- logger.debug('getting session failed', error);
1654
+ .catch(function () {
1655
+ logger.debug('getting guest credentials');
1392
1656
  return _this.Credentials.set(null, 'guest');
1393
1657
  })];
1394
1658
  }
@@ -1464,7 +1728,7 @@ var AuthClass = /** @class */ (function () {
1464
1728
  };
1465
1729
  AuthClass.prototype.cognitoIdentitySignOut = function (opts, user) {
1466
1730
  return __awaiter(this, void 0, void 0, function () {
1467
- var e_8, isSignedInHostedUI;
1731
+ var e_10, isSignedInHostedUI;
1468
1732
  var _this = this;
1469
1733
  return __generator(this, function (_a) {
1470
1734
  switch (_a.label) {
@@ -1475,9 +1739,9 @@ var AuthClass = /** @class */ (function () {
1475
1739
  _a.sent();
1476
1740
  return [3 /*break*/, 3];
1477
1741
  case 2:
1478
- e_8 = _a.sent();
1479
- logger.debug('Failed to sync cache info into memory', e_8);
1480
- throw e_8;
1742
+ e_10 = _a.sent();
1743
+ logger.debug('Failed to sync cache info into memory', e_10);
1744
+ throw e_10;
1481
1745
  case 3:
1482
1746
  isSignedInHostedUI = this._oAuthHandler &&
1483
1747
  this._storage.getItem('amplify-signin-with-hostedUI') === 'true';
@@ -1487,27 +1751,47 @@ var AuthClass = /** @class */ (function () {
1487
1751
  // in order to use global signout
1488
1752
  // we must validate the user as an authenticated user by using getSession
1489
1753
  var clientMetadata = _this._config.clientMetadata; // TODO: verify behavior if this is override during signIn
1490
- user.getSession(function (err, result) {
1491
- if (err) {
1492
- logger.debug('failed to get the user session', err);
1493
- return rej(err);
1494
- }
1495
- user.globalSignOut({
1496
- onSuccess: function (data) {
1497
- logger.debug('global sign out success');
1498
- if (isSignedInHostedUI) {
1499
- _this.oAuthSignOutRedirect(res, rej);
1500
- }
1501
- else {
1502
- return res();
1503
- }
1504
- },
1505
- onFailure: function (err) {
1506
- logger.debug('global sign out failed', err);
1507
- return rej(err);
1508
- },
1754
+ user.getSession(function (err, result) { return __awaiter(_this, void 0, void 0, function () {
1755
+ var cleanUpError_8;
1756
+ var _this = this;
1757
+ return __generator(this, function (_a) {
1758
+ switch (_a.label) {
1759
+ case 0:
1760
+ if (!err) return [3 /*break*/, 5];
1761
+ logger.debug('failed to get the user session', err);
1762
+ if (!this.isSessionInvalid(err)) return [3 /*break*/, 4];
1763
+ _a.label = 1;
1764
+ case 1:
1765
+ _a.trys.push([1, 3, , 4]);
1766
+ return [4 /*yield*/, this.cleanUpInvalidSession(user)];
1767
+ case 2:
1768
+ _a.sent();
1769
+ return [3 /*break*/, 4];
1770
+ case 3:
1771
+ cleanUpError_8 = _a.sent();
1772
+ rej(new Error("Session is invalid due to: " + err.message + " and failed to clean up invalid session: " + cleanUpError_8.message));
1773
+ return [2 /*return*/];
1774
+ case 4: return [2 /*return*/, rej(err)];
1775
+ case 5:
1776
+ user.globalSignOut({
1777
+ onSuccess: function (data) {
1778
+ logger.debug('global sign out success');
1779
+ if (isSignedInHostedUI) {
1780
+ _this.oAuthSignOutRedirect(res, rej);
1781
+ }
1782
+ else {
1783
+ return res();
1784
+ }
1785
+ },
1786
+ onFailure: function (err) {
1787
+ logger.debug('global sign out failed', err);
1788
+ return rej(err);
1789
+ },
1790
+ });
1791
+ return [2 /*return*/];
1792
+ }
1509
1793
  });
1510
- }, { clientMetadata: clientMetadata });
1794
+ }); }, { clientMetadata: clientMetadata });
1511
1795
  }
1512
1796
  else {
1513
1797
  logger.debug('user sign out', user);
@@ -1526,7 +1810,7 @@ var AuthClass = /** @class */ (function () {
1526
1810
  });
1527
1811
  };
1528
1812
  AuthClass.prototype.oAuthSignOutRedirect = function (resolve, reject) {
1529
- var isBrowser = JS.browserOrNode().isBrowser;
1813
+ var isBrowser = browserOrNode().isBrowser;
1530
1814
  if (isBrowser) {
1531
1815
  this.oAuthSignOutRedirectOrReject(reject);
1532
1816
  }
@@ -1541,7 +1825,7 @@ var AuthClass = /** @class */ (function () {
1541
1825
  AuthClass.prototype.oAuthSignOutRedirectOrReject = function (reject) {
1542
1826
  this._oAuthHandler.signOut(); // this method redirects url
1543
1827
  // App should be redirected to another url otherwise it will reject
1544
- setTimeout(function () { return reject('Signout timeout fail'); }, 3000);
1828
+ setTimeout(function () { return reject(Error('Signout timeout fail')); }, 3000);
1545
1829
  };
1546
1830
  /**
1547
1831
  * Sign out method
@@ -1550,7 +1834,7 @@ var AuthClass = /** @class */ (function () {
1550
1834
  */
1551
1835
  AuthClass.prototype.signOut = function (opts) {
1552
1836
  return __awaiter(this, void 0, void 0, function () {
1553
- var e_9, user;
1837
+ var e_11, user;
1554
1838
  return __generator(this, function (_a) {
1555
1839
  switch (_a.label) {
1556
1840
  case 0:
@@ -1560,7 +1844,7 @@ var AuthClass = /** @class */ (function () {
1560
1844
  _a.sent();
1561
1845
  return [3 /*break*/, 3];
1562
1846
  case 2:
1563
- e_9 = _a.sent();
1847
+ e_11 = _a.sent();
1564
1848
  logger.debug('failed to clear cached items');
1565
1849
  return [3 /*break*/, 3];
1566
1850
  case 3:
@@ -1576,7 +1860,7 @@ var AuthClass = /** @class */ (function () {
1576
1860
  _a.label = 6;
1577
1861
  case 6: return [3 /*break*/, 8];
1578
1862
  case 7:
1579
- logger.debug('no Congito User pool');
1863
+ logger.debug('no Cognito User pool');
1580
1864
  _a.label = 8;
1581
1865
  case 8:
1582
1866
  /**
@@ -1709,7 +1993,7 @@ var AuthClass = /** @class */ (function () {
1709
1993
  */
1710
1994
  AuthClass.prototype.currentUserInfo = function () {
1711
1995
  return __awaiter(this, void 0, void 0, function () {
1712
- var source, user, attributes, userAttrs, credentials, e_10, info, err_1, user;
1996
+ var source, user, attributes, userAttrs, credentials, e_12, info, err_1, user;
1713
1997
  return __generator(this, function (_a) {
1714
1998
  switch (_a.label) {
1715
1999
  case 0:
@@ -1739,8 +2023,8 @@ var AuthClass = /** @class */ (function () {
1739
2023
  credentials = _a.sent();
1740
2024
  return [3 /*break*/, 7];
1741
2025
  case 6:
1742
- e_10 = _a.sent();
1743
- logger.debug('Failed to retrieve credentials while getting current user info', e_10);
2026
+ e_12 = _a.sent();
2027
+ logger.debug('Failed to retrieve credentials while getting current user info', e_12);
1744
2028
  return [3 /*break*/, 7];
1745
2029
  case 7:
1746
2030
  info = {
@@ -1848,7 +2132,7 @@ var AuthClass = /** @class */ (function () {
1848
2132
  throw new Error("OAuth responses require a User Pool defined in config");
1849
2133
  }
1850
2134
  dispatchAuthEvent('parsingCallbackUrl', { url: URL }, "The callback url is being parsed");
1851
- currentUrl = URL || (JS.browserOrNode().isBrowser ? window.location.href : '');
2135
+ currentUrl = URL || (browserOrNode().isBrowser ? window.location.href : '');
1852
2136
  hasCodeOrError = !!(parse(currentUrl).query || '')
1853
2137
  .split('&')
1854
2138
  .map(function (entry) { return entry.split('='); })
@@ -1899,10 +2183,7 @@ var AuthClass = /** @class */ (function () {
1899
2183
  dispatchAuthEvent('signIn', currentUser, "A user " + currentUser.getUsername() + " has been signed in");
1900
2184
  dispatchAuthEvent('cognitoHostedUI', currentUser, "A user " + currentUser.getUsername() + " has been signed in via Cognito Hosted UI");
1901
2185
  if (isCustomStateIncluded) {
1902
- customState = state
1903
- .split('-')
1904
- .splice(1)
1905
- .join('-');
2186
+ customState = state.split('-').splice(1).join('-');
1906
2187
  dispatchAuthEvent('customOAuthState', urlSafeDecode(customState), "State for user " + currentUser.getUsername());
1907
2188
  }
1908
2189
  //#endregion