@aws-amplify/auth 4.4.3-cloud-logging.7 → 4.4.3-cloud-logging.8

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/Auth.js CHANGED
@@ -598,22 +598,42 @@ var AuthClass = /** @class */ (function () {
598
598
  return new Promise(function (res, rej) {
599
599
  var clientMetadata = _this._config.clientMetadata; // TODO: verify behavior if this is override during signIn
600
600
  var bypassCache = params ? params.bypassCache : false;
601
- user.getUserData(function (err, data) {
602
- if (err) {
603
- logger.debug('getting preferred mfa failed', err);
604
- rej(err);
605
- return;
606
- }
607
- var mfaType = that._getMfaTypeFromUserData(data);
608
- if (!mfaType) {
609
- rej('invalid MFA Type');
610
- return;
611
- }
612
- else {
613
- res(mfaType);
614
- return;
615
- }
616
- }, { bypassCache: bypassCache, clientMetadata: clientMetadata });
601
+ user.getUserData(function (err, data) { return __awaiter(_this, void 0, void 0, function () {
602
+ var cleanUpError_1, mfaType;
603
+ return __generator(this, function (_a) {
604
+ switch (_a.label) {
605
+ case 0:
606
+ if (!err) return [3 /*break*/, 5];
607
+ logger.debug('getting preferred mfa failed', err);
608
+ if (!this.isSessionInvalid(err)) return [3 /*break*/, 4];
609
+ _a.label = 1;
610
+ case 1:
611
+ _a.trys.push([1, 3, , 4]);
612
+ return [4 /*yield*/, this.cleanUpInvalidSession(user)];
613
+ case 2:
614
+ _a.sent();
615
+ return [3 /*break*/, 4];
616
+ case 3:
617
+ cleanUpError_1 = _a.sent();
618
+ rej(new Error("Session is invalid due to: " + err.message + " and failed to clean up invalid session: " + cleanUpError_1.message));
619
+ return [2 /*return*/];
620
+ case 4:
621
+ rej(err);
622
+ return [2 /*return*/];
623
+ case 5:
624
+ mfaType = that._getMfaTypeFromUserData(data);
625
+ if (!mfaType) {
626
+ rej('invalid MFA Type');
627
+ return [2 /*return*/];
628
+ }
629
+ else {
630
+ res(mfaType);
631
+ return [2 /*return*/];
632
+ }
633
+ return [2 /*return*/];
634
+ }
635
+ });
636
+ }); }, { bypassCache: bypassCache, clientMetadata: clientMetadata });
617
637
  });
618
638
  };
619
639
  AuthClass.prototype._getMfaTypeFromUserData = function (data) {
@@ -650,18 +670,37 @@ var AuthClass = /** @class */ (function () {
650
670
  return ret;
651
671
  };
652
672
  AuthClass.prototype._getUserData = function (user, params) {
673
+ var _this = this;
653
674
  return new Promise(function (res, rej) {
654
- user.getUserData(function (err, data) {
655
- if (err) {
656
- logger.debug('getting user data failed', err);
657
- rej(err);
658
- return;
659
- }
660
- else {
661
- res(data);
662
- return;
663
- }
664
- }, params);
675
+ user.getUserData(function (err, data) { return __awaiter(_this, void 0, void 0, function () {
676
+ var cleanUpError_2;
677
+ return __generator(this, function (_a) {
678
+ switch (_a.label) {
679
+ case 0:
680
+ if (!err) return [3 /*break*/, 5];
681
+ logger.debug('getting user data failed', err);
682
+ if (!this.isSessionInvalid(err)) return [3 /*break*/, 4];
683
+ _a.label = 1;
684
+ case 1:
685
+ _a.trys.push([1, 3, , 4]);
686
+ return [4 /*yield*/, this.cleanUpInvalidSession(user)];
687
+ case 2:
688
+ _a.sent();
689
+ return [3 /*break*/, 4];
690
+ case 3:
691
+ cleanUpError_2 = _a.sent();
692
+ rej(new Error("Session is invalid due to: " + err.message + " and failed to clean up invalid session: " + cleanUpError_2.message));
693
+ return [2 /*return*/];
694
+ case 4:
695
+ rej(err);
696
+ return [2 /*return*/];
697
+ case 5:
698
+ res(data);
699
+ _a.label = 6;
700
+ case 6: return [2 /*return*/];
701
+ }
702
+ });
703
+ }); }, params);
665
704
  });
666
705
  };
667
706
  /**
@@ -673,6 +712,7 @@ var AuthClass = /** @class */ (function () {
673
712
  AuthClass.prototype.setPreferredMFA = function (user, mfaMethod) {
674
713
  return __awaiter(this, void 0, void 0, function () {
675
714
  var clientMetadata, userData, smsMfaSettings, totpMfaSettings, _a, mfaList, currentMFAType, that;
715
+ var _this = this;
676
716
  return __generator(this, function (_b) {
677
717
  switch (_b.label) {
678
718
  case 0:
@@ -763,15 +803,30 @@ var AuthClass = /** @class */ (function () {
763
803
  logger.debug('Set user mfa success', result);
764
804
  logger.debug('Caching the latest user data into local');
765
805
  // cache the latest result into user data
766
- user.getUserData(function (err, data) {
767
- if (err) {
768
- logger.debug('getting user data failed', err);
769
- return rej(err);
770
- }
771
- else {
772
- return res(result);
773
- }
774
- }, {
806
+ user.getUserData(function (err, data) { return __awaiter(_this, void 0, void 0, function () {
807
+ var cleanUpError_3;
808
+ return __generator(this, function (_a) {
809
+ switch (_a.label) {
810
+ case 0:
811
+ if (!err) return [3 /*break*/, 5];
812
+ logger.debug('getting user data failed', err);
813
+ if (!this.isSessionInvalid(err)) return [3 /*break*/, 4];
814
+ _a.label = 1;
815
+ case 1:
816
+ _a.trys.push([1, 3, , 4]);
817
+ return [4 /*yield*/, this.cleanUpInvalidSession(user)];
818
+ case 2:
819
+ _a.sent();
820
+ return [3 /*break*/, 4];
821
+ case 3:
822
+ cleanUpError_3 = _a.sent();
823
+ rej(new Error("Session is invalid due to: " + err.message + " and failed to clean up invalid session: " + cleanUpError_3.message));
824
+ return [2 /*return*/];
825
+ case 4: return [2 /*return*/, rej(err)];
826
+ case 5: return [2 /*return*/, res(result)];
827
+ }
828
+ });
829
+ }); }, {
775
830
  bypassCache: true,
776
831
  clientMetadata: clientMetadata,
777
832
  });
@@ -1058,39 +1113,54 @@ var AuthClass = /** @class */ (function () {
1058
1113
  }
1059
1114
  else {
1060
1115
  user_1.getSession(function (err, session) { return __awaiter(_this, void 0, void 0, function () {
1116
+ var cleanUpError_4;
1061
1117
  var _this = this;
1062
1118
  return __generator(this, function (_a) {
1063
- if (err) {
1064
- logger.debug('Failed to get the user session', err);
1065
- return [2 /*return*/, rej(err)];
1066
- }
1067
- else {
1068
- user_1.deleteUser(function (err, result) {
1069
- if (err) {
1070
- rej(err);
1071
- }
1072
- else {
1073
- dispatchAuthEvent('userDeleted', result, 'The authenticated user has been deleted.');
1074
- user_1.signOut();
1075
- _this.user = null;
1076
- try {
1077
- _this.cleanCachedItems(); // clean aws credentials
1078
- }
1079
- catch (e) {
1080
- // TODO: change to rejects in refactor
1081
- logger.debug('failed to clear cached items');
1082
- }
1083
- if (isSignedInHostedUI) {
1084
- _this.oAuthSignOutRedirect(res, rej);
1119
+ switch (_a.label) {
1120
+ case 0:
1121
+ if (!err) return [3 /*break*/, 5];
1122
+ logger.debug('Failed to get the user session', err);
1123
+ if (!this.isSessionInvalid(err)) return [3 /*break*/, 4];
1124
+ _a.label = 1;
1125
+ case 1:
1126
+ _a.trys.push([1, 3, , 4]);
1127
+ return [4 /*yield*/, this.cleanUpInvalidSession(user_1)];
1128
+ case 2:
1129
+ _a.sent();
1130
+ return [3 /*break*/, 4];
1131
+ case 3:
1132
+ cleanUpError_4 = _a.sent();
1133
+ rej(new Error("Session is invalid due to: " + err.message + " and failed to clean up invalid session: " + cleanUpError_4.message));
1134
+ return [2 /*return*/];
1135
+ case 4: return [2 /*return*/, rej(err)];
1136
+ case 5:
1137
+ user_1.deleteUser(function (err, result) {
1138
+ if (err) {
1139
+ rej(err);
1085
1140
  }
1086
1141
  else {
1087
- dispatchAuthEvent('signOut', _this.user, "A user has been signed out");
1088
- res(result);
1142
+ dispatchAuthEvent('userDeleted', result, 'The authenticated user has been deleted.');
1143
+ user_1.signOut();
1144
+ _this.user = null;
1145
+ try {
1146
+ _this.cleanCachedItems(); // clean aws credentials
1147
+ }
1148
+ catch (e) {
1149
+ // TODO: change to rejects in refactor
1150
+ logger.debug('failed to clear cached items');
1151
+ }
1152
+ if (isSignedInHostedUI) {
1153
+ _this.oAuthSignOutRedirect(res, rej);
1154
+ }
1155
+ else {
1156
+ dispatchAuthEvent('signOut', _this.user, "A user has been signed out");
1157
+ res(result);
1158
+ }
1089
1159
  }
1090
- }
1091
- });
1160
+ });
1161
+ _a.label = 6;
1162
+ case 6: return [2 /*return*/];
1092
1163
  }
1093
- return [2 /*return*/];
1094
1164
  });
1095
1165
  }); });
1096
1166
  }
@@ -1185,6 +1255,74 @@ var AuthClass = /** @class */ (function () {
1185
1255
  };
1186
1256
  });
1187
1257
  };
1258
+ AuthClass.prototype.isErrorWithMessage = function (err) {
1259
+ return (typeof err === 'object' &&
1260
+ Object.prototype.hasOwnProperty.call(err, 'message'));
1261
+ };
1262
+ // Session revoked by another app
1263
+ AuthClass.prototype.isTokenRevokedError = function (err) {
1264
+ return (this.isErrorWithMessage(err) &&
1265
+ err.message === 'Access Token has been revoked');
1266
+ };
1267
+ AuthClass.prototype.isRefreshTokenRevokedError = function (err) {
1268
+ return (this.isErrorWithMessage(err) &&
1269
+ err.message === 'Refresh Token has been revoked');
1270
+ };
1271
+ AuthClass.prototype.isUserDisabledError = function (err) {
1272
+ return this.isErrorWithMessage(err) && err.message === 'User is disabled.';
1273
+ };
1274
+ AuthClass.prototype.isUserDoesNotExistError = function (err) {
1275
+ return (this.isErrorWithMessage(err) && err.message === 'User does not exist.');
1276
+ };
1277
+ AuthClass.prototype.isRefreshTokenExpiredError = function (err) {
1278
+ return (this.isErrorWithMessage(err) &&
1279
+ err.message === 'Refresh Token has expired');
1280
+ };
1281
+ AuthClass.prototype.isSignedInHostedUI = function () {
1282
+ return (this._oAuthHandler &&
1283
+ this._storage.getItem('amplify-signin-with-hostedUI') === 'true');
1284
+ };
1285
+ AuthClass.prototype.isSessionInvalid = function (err) {
1286
+ return (this.isUserDisabledError(err) ||
1287
+ this.isUserDoesNotExistError(err) ||
1288
+ this.isTokenRevokedError(err) ||
1289
+ this.isRefreshTokenRevokedError(err) ||
1290
+ this.isRefreshTokenExpiredError(err));
1291
+ };
1292
+ AuthClass.prototype.cleanUpInvalidSession = function (user) {
1293
+ return __awaiter(this, void 0, void 0, function () {
1294
+ var e_6;
1295
+ var _this = this;
1296
+ return __generator(this, function (_a) {
1297
+ switch (_a.label) {
1298
+ case 0:
1299
+ user.signOut();
1300
+ this.user = null;
1301
+ _a.label = 1;
1302
+ case 1:
1303
+ _a.trys.push([1, 3, , 4]);
1304
+ return [4 /*yield*/, this.cleanCachedItems()];
1305
+ case 2:
1306
+ _a.sent(); // clean aws credentials
1307
+ return [3 /*break*/, 4];
1308
+ case 3:
1309
+ e_6 = _a.sent();
1310
+ logger.debug('failed to clear cached items');
1311
+ return [3 /*break*/, 4];
1312
+ case 4:
1313
+ if (this.isSignedInHostedUI()) {
1314
+ return [2 /*return*/, new Promise(function (res, rej) {
1315
+ _this.oAuthSignOutRedirect(res, rej);
1316
+ })];
1317
+ }
1318
+ else {
1319
+ dispatchAuthEvent('signOut', this.user, "A user has been signed out");
1320
+ }
1321
+ return [2 /*return*/];
1322
+ }
1323
+ });
1324
+ });
1325
+ };
1188
1326
  /**
1189
1327
  * Get current authenticated user
1190
1328
  * @return - A promise resolves to current authenticated CognitoUser if success
@@ -1236,57 +1374,82 @@ var AuthClass = /** @class */ (function () {
1236
1374
  clientMetadata = this._config.clientMetadata;
1237
1375
  // refresh the session if the session expired.
1238
1376
  user.getSession(function (err, session) { return __awaiter(_this, void 0, void 0, function () {
1239
- var bypassCache, clientMetadata, _a, scope;
1377
+ var cleanUpError_5, bypassCache, clientMetadata, _a, scope;
1240
1378
  var _this = this;
1241
1379
  return __generator(this, function (_b) {
1242
1380
  switch (_b.label) {
1243
1381
  case 0:
1244
- if (err) {
1245
- logger.debug('Failed to get the user session', err);
1246
- rej(err);
1247
- return [2 /*return*/];
1248
- }
1382
+ if (!err) return [3 /*break*/, 5];
1383
+ logger.debug('Failed to get the user session', err);
1384
+ if (!this.isSessionInvalid(err)) return [3 /*break*/, 4];
1385
+ _b.label = 1;
1386
+ case 1:
1387
+ _b.trys.push([1, 3, , 4]);
1388
+ return [4 /*yield*/, this.cleanUpInvalidSession(user)];
1389
+ case 2:
1390
+ _b.sent();
1391
+ return [3 /*break*/, 4];
1392
+ case 3:
1393
+ cleanUpError_5 = _b.sent();
1394
+ rej(new Error("Session is invalid due to: " + err.message + " and failed to clean up invalid session: " + cleanUpError_5.message));
1395
+ return [2 /*return*/];
1396
+ case 4:
1397
+ rej(err);
1398
+ return [2 /*return*/];
1399
+ case 5:
1249
1400
  bypassCache = params ? params.bypassCache : false;
1250
- if (!bypassCache) return [3 /*break*/, 2];
1401
+ if (!bypassCache) return [3 /*break*/, 7];
1251
1402
  return [4 /*yield*/, this.Credentials.clear()];
1252
- case 1:
1403
+ case 6:
1253
1404
  _b.sent();
1254
- _b.label = 2;
1255
- case 2:
1405
+ _b.label = 7;
1406
+ case 7:
1256
1407
  clientMetadata = this._config.clientMetadata;
1257
1408
  _a = session.getAccessToken().decodePayload().scope, scope = _a === void 0 ? '' : _a;
1258
1409
  if (scope.split(' ').includes(USER_ADMIN_SCOPE)) {
1259
- user.getUserData(function (err, data) {
1260
- if (err) {
1261
- logger.debug('getting user data failed', err);
1262
- // Make sure the user is still valid
1263
- if (err.message === 'User is disabled.' ||
1264
- err.message === 'User does not exist.' ||
1265
- err.message === 'Access Token has been revoked' // Session revoked by another app
1266
- ) {
1267
- rej(err);
1268
- }
1269
- else {
1270
- // the error may also be thrown when lack of permissions to get user info etc
1271
- // in that case we just bypass the error
1272
- res(user);
1410
+ user.getUserData(function (err, data) { return __awaiter(_this, void 0, void 0, function () {
1411
+ var cleanUpError_6, preferredMFA, attributeList, i, attribute, userAttribute, attributes;
1412
+ return __generator(this, function (_a) {
1413
+ switch (_a.label) {
1414
+ case 0:
1415
+ if (!err) return [3 /*break*/, 7];
1416
+ logger.debug('getting user data failed', err);
1417
+ if (!this.isSessionInvalid(err)) return [3 /*break*/, 5];
1418
+ _a.label = 1;
1419
+ case 1:
1420
+ _a.trys.push([1, 3, , 4]);
1421
+ return [4 /*yield*/, this.cleanUpInvalidSession(user)];
1422
+ case 2:
1423
+ _a.sent();
1424
+ return [3 /*break*/, 4];
1425
+ case 3:
1426
+ cleanUpError_6 = _a.sent();
1427
+ rej(new Error("Session is invalid due to: " + err.message + " and failed to clean up invalid session: " + cleanUpError_6.message));
1428
+ return [2 /*return*/];
1429
+ case 4:
1430
+ rej(err);
1431
+ return [3 /*break*/, 6];
1432
+ case 5:
1433
+ res(user);
1434
+ _a.label = 6;
1435
+ case 6: return [2 /*return*/];
1436
+ case 7:
1437
+ preferredMFA = data.PreferredMfaSetting || 'NOMFA';
1438
+ attributeList = [];
1439
+ for (i = 0; i < data.UserAttributes.length; i++) {
1440
+ attribute = {
1441
+ Name: data.UserAttributes[i].Name,
1442
+ Value: data.UserAttributes[i].Value,
1443
+ };
1444
+ userAttribute = new amazon_cognito_identity_js_1.CognitoUserAttribute(attribute);
1445
+ attributeList.push(userAttribute);
1446
+ }
1447
+ attributes = this.attributesToObject(attributeList);
1448
+ Object.assign(user, { attributes: attributes, preferredMFA: preferredMFA });
1449
+ return [2 /*return*/, res(user)];
1273
1450
  }
1274
- return;
1275
- }
1276
- var preferredMFA = data.PreferredMfaSetting || 'NOMFA';
1277
- var attributeList = [];
1278
- for (var i = 0; i < data.UserAttributes.length; i++) {
1279
- var attribute = {
1280
- Name: data.UserAttributes[i].Name,
1281
- Value: data.UserAttributes[i].Value,
1282
- };
1283
- var userAttribute = new amazon_cognito_identity_js_1.CognitoUserAttribute(attribute);
1284
- attributeList.push(userAttribute);
1285
- }
1286
- var attributes = _this.attributesToObject(attributeList);
1287
- Object.assign(user, { attributes: attributes, preferredMFA: preferredMFA });
1288
- return res(user);
1289
- }, { bypassCache: bypassCache, clientMetadata: clientMetadata });
1451
+ });
1452
+ }); }, { bypassCache: bypassCache, clientMetadata: clientMetadata });
1290
1453
  }
1291
1454
  else {
1292
1455
  logger.debug("Unable to get the user data because the " + USER_ADMIN_SCOPE + " " +
@@ -1317,7 +1480,7 @@ var AuthClass = /** @class */ (function () {
1317
1480
  */
1318
1481
  AuthClass.prototype.currentAuthenticatedUser = function (params) {
1319
1482
  return __awaiter(this, void 0, void 0, function () {
1320
- var federatedUser, e_6, federatedInfo, user, e_7;
1483
+ var federatedUser, e_7, federatedInfo, user, e_8;
1321
1484
  return __generator(this, function (_a) {
1322
1485
  switch (_a.label) {
1323
1486
  case 0:
@@ -1331,9 +1494,9 @@ var AuthClass = /** @class */ (function () {
1331
1494
  _a.sent();
1332
1495
  return [3 /*break*/, 4];
1333
1496
  case 3:
1334
- e_6 = _a.sent();
1335
- logger.debug('Failed to sync cache info into memory', e_6);
1336
- throw e_6;
1497
+ e_7 = _a.sent();
1498
+ logger.debug('Failed to sync cache info into memory', e_7);
1499
+ throw e_7;
1337
1500
  case 4:
1338
1501
  try {
1339
1502
  federatedInfo = JSON.parse(this._storage.getItem('aws-amplify-federatedInfo'));
@@ -1359,12 +1522,12 @@ var AuthClass = /** @class */ (function () {
1359
1522
  user = _a.sent();
1360
1523
  return [3 /*break*/, 9];
1361
1524
  case 8:
1362
- e_7 = _a.sent();
1363
- if (e_7 === 'No userPool') {
1525
+ e_8 = _a.sent();
1526
+ if (e_8 === 'No userPool') {
1364
1527
  logger.error('Cannot get the current user because the user pool is missing. ' +
1365
1528
  'Please make sure the Auth module is configured with a valid Cognito User Pool ID');
1366
1529
  }
1367
- logger.debug('The user is not authenticated by the error', e_7);
1530
+ logger.debug('The user is not authenticated by the error', e_8);
1368
1531
  return [2 /*return*/, Promise.reject('The user is not authenticated')];
1369
1532
  case 9:
1370
1533
  this.user = user;
@@ -1382,7 +1545,7 @@ var AuthClass = /** @class */ (function () {
1382
1545
  logger.debug('Getting current session');
1383
1546
  // Purposely not calling the reject method here because we don't need a console error
1384
1547
  if (!this.userPool) {
1385
- return Promise.reject();
1548
+ return this.rejectNoUserPool();
1386
1549
  }
1387
1550
  return new Promise(function (res, rej) {
1388
1551
  that
@@ -1413,25 +1576,43 @@ var AuthClass = /** @class */ (function () {
1413
1576
  * @return - A promise resolves to the session
1414
1577
  */
1415
1578
  AuthClass.prototype.userSession = function (user) {
1579
+ var _this = this;
1416
1580
  if (!user) {
1417
1581
  logger.debug('the user is null');
1418
1582
  return this.rejectAuthError(Auth_1.AuthErrorTypes.NoUserSession);
1419
1583
  }
1420
1584
  var clientMetadata = this._config.clientMetadata; // TODO: verify behavior if this is override during signIn
1421
- return new Promise(function (resolve, reject) {
1585
+ return new Promise(function (res, rej) {
1422
1586
  logger.debug('Getting the session from this user:', user);
1423
- user.getSession(function (err, session) {
1424
- if (err) {
1425
- logger.debug('Failed to get the session from user', user);
1426
- reject(err);
1427
- return;
1428
- }
1429
- else {
1430
- logger.debug('Succeed to get the user session', session);
1431
- resolve(session);
1432
- return;
1433
- }
1434
- }, { clientMetadata: clientMetadata });
1587
+ user.getSession(function (err, session) { return __awaiter(_this, void 0, void 0, function () {
1588
+ var cleanUpError_7;
1589
+ return __generator(this, function (_a) {
1590
+ switch (_a.label) {
1591
+ case 0:
1592
+ if (!err) return [3 /*break*/, 5];
1593
+ logger.debug('Failed to get the session from user', user);
1594
+ if (!this.isSessionInvalid(err)) return [3 /*break*/, 4];
1595
+ _a.label = 1;
1596
+ case 1:
1597
+ _a.trys.push([1, 3, , 4]);
1598
+ return [4 /*yield*/, this.cleanUpInvalidSession(user)];
1599
+ case 2:
1600
+ _a.sent();
1601
+ return [3 /*break*/, 4];
1602
+ case 3:
1603
+ cleanUpError_7 = _a.sent();
1604
+ rej(new Error("Session is invalid due to: " + err.message + " and failed to clean up invalid session: " + cleanUpError_7.message));
1605
+ return [2 /*return*/];
1606
+ case 4:
1607
+ rej(err);
1608
+ return [2 /*return*/];
1609
+ case 5:
1610
+ logger.debug('Succeed to get the user session', session);
1611
+ res(session);
1612
+ return [2 /*return*/];
1613
+ }
1614
+ });
1615
+ }); }, { clientMetadata: clientMetadata });
1435
1616
  });
1436
1617
  };
1437
1618
  /**
@@ -1440,7 +1621,7 @@ var AuthClass = /** @class */ (function () {
1440
1621
  */
1441
1622
  AuthClass.prototype.currentUserCredentials = function () {
1442
1623
  return __awaiter(this, void 0, void 0, function () {
1443
- var e_8, federatedInfo;
1624
+ var e_9, federatedInfo;
1444
1625
  var _this = this;
1445
1626
  return __generator(this, function (_a) {
1446
1627
  switch (_a.label) {
@@ -1454,9 +1635,9 @@ var AuthClass = /** @class */ (function () {
1454
1635
  _a.sent();
1455
1636
  return [3 /*break*/, 4];
1456
1637
  case 3:
1457
- e_8 = _a.sent();
1458
- logger.debug('Failed to sync cache info into memory', e_8);
1459
- throw e_8;
1638
+ e_9 = _a.sent();
1639
+ logger.debug('Failed to sync cache info into memory', e_9);
1640
+ throw e_9;
1460
1641
  case 4:
1461
1642
  federatedInfo = null;
1462
1643
  try {
@@ -1475,8 +1656,8 @@ var AuthClass = /** @class */ (function () {
1475
1656
  logger.debug('getting session success', session);
1476
1657
  return _this.Credentials.set(session, 'session');
1477
1658
  })
1478
- .catch(function (error) {
1479
- logger.debug('getting session failed', error);
1659
+ .catch(function () {
1660
+ logger.debug('getting guest credentials');
1480
1661
  return _this.Credentials.set(null, 'guest');
1481
1662
  })];
1482
1663
  }
@@ -1552,7 +1733,7 @@ var AuthClass = /** @class */ (function () {
1552
1733
  };
1553
1734
  AuthClass.prototype.cognitoIdentitySignOut = function (opts, user) {
1554
1735
  return __awaiter(this, void 0, void 0, function () {
1555
- var e_9, isSignedInHostedUI;
1736
+ var e_10, isSignedInHostedUI;
1556
1737
  var _this = this;
1557
1738
  return __generator(this, function (_a) {
1558
1739
  switch (_a.label) {
@@ -1563,9 +1744,9 @@ var AuthClass = /** @class */ (function () {
1563
1744
  _a.sent();
1564
1745
  return [3 /*break*/, 3];
1565
1746
  case 2:
1566
- e_9 = _a.sent();
1567
- logger.debug('Failed to sync cache info into memory', e_9);
1568
- throw e_9;
1747
+ e_10 = _a.sent();
1748
+ logger.debug('Failed to sync cache info into memory', e_10);
1749
+ throw e_10;
1569
1750
  case 3:
1570
1751
  isSignedInHostedUI = this._oAuthHandler &&
1571
1752
  this._storage.getItem('amplify-signin-with-hostedUI') === 'true';
@@ -1575,27 +1756,47 @@ var AuthClass = /** @class */ (function () {
1575
1756
  // in order to use global signout
1576
1757
  // we must validate the user as an authenticated user by using getSession
1577
1758
  var clientMetadata = _this._config.clientMetadata; // TODO: verify behavior if this is override during signIn
1578
- user.getSession(function (err, result) {
1579
- if (err) {
1580
- logger.debug('failed to get the user session', err);
1581
- return rej(err);
1582
- }
1583
- user.globalSignOut({
1584
- onSuccess: function (data) {
1585
- logger.debug('global sign out success');
1586
- if (isSignedInHostedUI) {
1587
- _this.oAuthSignOutRedirect(res, rej);
1588
- }
1589
- else {
1590
- return res();
1591
- }
1592
- },
1593
- onFailure: function (err) {
1594
- logger.debug('global sign out failed', err);
1595
- return rej(err);
1596
- },
1759
+ user.getSession(function (err, result) { return __awaiter(_this, void 0, void 0, function () {
1760
+ var cleanUpError_8;
1761
+ var _this = this;
1762
+ return __generator(this, function (_a) {
1763
+ switch (_a.label) {
1764
+ case 0:
1765
+ if (!err) return [3 /*break*/, 5];
1766
+ logger.debug('failed to get the user session', err);
1767
+ if (!this.isSessionInvalid(err)) return [3 /*break*/, 4];
1768
+ _a.label = 1;
1769
+ case 1:
1770
+ _a.trys.push([1, 3, , 4]);
1771
+ return [4 /*yield*/, this.cleanUpInvalidSession(user)];
1772
+ case 2:
1773
+ _a.sent();
1774
+ return [3 /*break*/, 4];
1775
+ case 3:
1776
+ cleanUpError_8 = _a.sent();
1777
+ rej(new Error("Session is invalid due to: " + err.message + " and failed to clean up invalid session: " + cleanUpError_8.message));
1778
+ return [2 /*return*/];
1779
+ case 4: return [2 /*return*/, rej(err)];
1780
+ case 5:
1781
+ user.globalSignOut({
1782
+ onSuccess: function (data) {
1783
+ logger.debug('global sign out success');
1784
+ if (isSignedInHostedUI) {
1785
+ _this.oAuthSignOutRedirect(res, rej);
1786
+ }
1787
+ else {
1788
+ return res();
1789
+ }
1790
+ },
1791
+ onFailure: function (err) {
1792
+ logger.debug('global sign out failed', err);
1793
+ return rej(err);
1794
+ },
1795
+ });
1796
+ return [2 /*return*/];
1797
+ }
1597
1798
  });
1598
- }, { clientMetadata: clientMetadata });
1799
+ }); }, { clientMetadata: clientMetadata });
1599
1800
  }
1600
1801
  else {
1601
1802
  logger.debug('user sign out', user);
@@ -1629,7 +1830,7 @@ var AuthClass = /** @class */ (function () {
1629
1830
  AuthClass.prototype.oAuthSignOutRedirectOrReject = function (reject) {
1630
1831
  this._oAuthHandler.signOut(); // this method redirects url
1631
1832
  // App should be redirected to another url otherwise it will reject
1632
- setTimeout(function () { return reject('Signout timeout fail'); }, 3000);
1833
+ setTimeout(function () { return reject(Error('Signout timeout fail')); }, 3000);
1633
1834
  };
1634
1835
  /**
1635
1836
  * Sign out method
@@ -1638,7 +1839,7 @@ var AuthClass = /** @class */ (function () {
1638
1839
  */
1639
1840
  AuthClass.prototype.signOut = function (opts) {
1640
1841
  return __awaiter(this, void 0, void 0, function () {
1641
- var e_10, user;
1842
+ var e_11, user;
1642
1843
  return __generator(this, function (_a) {
1643
1844
  switch (_a.label) {
1644
1845
  case 0:
@@ -1648,7 +1849,7 @@ var AuthClass = /** @class */ (function () {
1648
1849
  _a.sent();
1649
1850
  return [3 /*break*/, 3];
1650
1851
  case 2:
1651
- e_10 = _a.sent();
1852
+ e_11 = _a.sent();
1652
1853
  logger.debug('failed to clear cached items');
1653
1854
  return [3 /*break*/, 3];
1654
1855
  case 3:
@@ -1664,7 +1865,7 @@ var AuthClass = /** @class */ (function () {
1664
1865
  _a.label = 6;
1665
1866
  case 6: return [3 /*break*/, 8];
1666
1867
  case 7:
1667
- logger.debug('no Congito User pool');
1868
+ logger.debug('no Cognito User pool');
1668
1869
  _a.label = 8;
1669
1870
  case 8:
1670
1871
  /**
@@ -1797,7 +1998,7 @@ var AuthClass = /** @class */ (function () {
1797
1998
  */
1798
1999
  AuthClass.prototype.currentUserInfo = function () {
1799
2000
  return __awaiter(this, void 0, void 0, function () {
1800
- var source, user, attributes, userAttrs, credentials, e_11, info, err_1, user;
2001
+ var source, user, attributes, userAttrs, credentials, e_12, info, err_1, user;
1801
2002
  return __generator(this, function (_a) {
1802
2003
  switch (_a.label) {
1803
2004
  case 0:
@@ -1827,8 +2028,8 @@ var AuthClass = /** @class */ (function () {
1827
2028
  credentials = _a.sent();
1828
2029
  return [3 /*break*/, 7];
1829
2030
  case 6:
1830
- e_11 = _a.sent();
1831
- logger.debug('Failed to retrieve credentials while getting current user info', e_11);
2031
+ e_12 = _a.sent();
2032
+ logger.debug('Failed to retrieve credentials while getting current user info', e_12);
1832
2033
  return [3 /*break*/, 7];
1833
2034
  case 7:
1834
2035
  info = {