@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-esm/Auth.js CHANGED
@@ -593,22 +593,42 @@ var AuthClass = /** @class */ (function () {
593
593
  return new Promise(function (res, rej) {
594
594
  var clientMetadata = _this._config.clientMetadata; // TODO: verify behavior if this is override during signIn
595
595
  var bypassCache = params ? params.bypassCache : false;
596
- user.getUserData(function (err, data) {
597
- if (err) {
598
- logger.debug('getting preferred mfa failed', err);
599
- rej(err);
600
- return;
601
- }
602
- var mfaType = that._getMfaTypeFromUserData(data);
603
- if (!mfaType) {
604
- rej('invalid MFA Type');
605
- return;
606
- }
607
- else {
608
- res(mfaType);
609
- return;
610
- }
611
- }, { 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 });
612
632
  });
613
633
  };
614
634
  AuthClass.prototype._getMfaTypeFromUserData = function (data) {
@@ -645,18 +665,37 @@ var AuthClass = /** @class */ (function () {
645
665
  return ret;
646
666
  };
647
667
  AuthClass.prototype._getUserData = function (user, params) {
668
+ var _this = this;
648
669
  return new Promise(function (res, rej) {
649
- user.getUserData(function (err, data) {
650
- if (err) {
651
- logger.debug('getting user data failed', err);
652
- rej(err);
653
- return;
654
- }
655
- else {
656
- res(data);
657
- return;
658
- }
659
- }, 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);
660
699
  });
661
700
  };
662
701
  /**
@@ -668,6 +707,7 @@ var AuthClass = /** @class */ (function () {
668
707
  AuthClass.prototype.setPreferredMFA = function (user, mfaMethod) {
669
708
  return __awaiter(this, void 0, void 0, function () {
670
709
  var clientMetadata, userData, smsMfaSettings, totpMfaSettings, _a, mfaList, currentMFAType, that;
710
+ var _this = this;
671
711
  return __generator(this, function (_b) {
672
712
  switch (_b.label) {
673
713
  case 0:
@@ -758,15 +798,30 @@ var AuthClass = /** @class */ (function () {
758
798
  logger.debug('Set user mfa success', result);
759
799
  logger.debug('Caching the latest user data into local');
760
800
  // cache the latest result into user data
761
- user.getUserData(function (err, data) {
762
- if (err) {
763
- logger.debug('getting user data failed', err);
764
- return rej(err);
765
- }
766
- else {
767
- return res(result);
768
- }
769
- }, {
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
+ }); }, {
770
825
  bypassCache: true,
771
826
  clientMetadata: clientMetadata,
772
827
  });
@@ -1053,39 +1108,54 @@ var AuthClass = /** @class */ (function () {
1053
1108
  }
1054
1109
  else {
1055
1110
  user_1.getSession(function (err, session) { return __awaiter(_this, void 0, void 0, function () {
1111
+ var cleanUpError_4;
1056
1112
  var _this = this;
1057
1113
  return __generator(this, function (_a) {
1058
- if (err) {
1059
- logger.debug('Failed to get the user session', err);
1060
- return [2 /*return*/, rej(err)];
1061
- }
1062
- else {
1063
- user_1.deleteUser(function (err, result) {
1064
- if (err) {
1065
- rej(err);
1066
- }
1067
- else {
1068
- dispatchAuthEvent('userDeleted', result, 'The authenticated user has been deleted.');
1069
- user_1.signOut();
1070
- _this.user = null;
1071
- try {
1072
- _this.cleanCachedItems(); // clean aws credentials
1073
- }
1074
- catch (e) {
1075
- // TODO: change to rejects in refactor
1076
- logger.debug('failed to clear cached items');
1077
- }
1078
- if (isSignedInHostedUI) {
1079
- _this.oAuthSignOutRedirect(res, rej);
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);
1080
1135
  }
1081
1136
  else {
1082
- dispatchAuthEvent('signOut', _this.user, "A user has been signed out");
1083
- res(result);
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
+ }
1084
1154
  }
1085
- }
1086
- });
1155
+ });
1156
+ _a.label = 6;
1157
+ case 6: return [2 /*return*/];
1087
1158
  }
1088
- return [2 /*return*/];
1089
1159
  });
1090
1160
  }); });
1091
1161
  }
@@ -1180,6 +1250,74 @@ var AuthClass = /** @class */ (function () {
1180
1250
  };
1181
1251
  });
1182
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
+ };
1183
1321
  /**
1184
1322
  * Get current authenticated user
1185
1323
  * @return - A promise resolves to current authenticated CognitoUser if success
@@ -1231,57 +1369,82 @@ var AuthClass = /** @class */ (function () {
1231
1369
  clientMetadata = this._config.clientMetadata;
1232
1370
  // refresh the session if the session expired.
1233
1371
  user.getSession(function (err, session) { return __awaiter(_this, void 0, void 0, function () {
1234
- var bypassCache, clientMetadata, _a, scope;
1372
+ var cleanUpError_5, bypassCache, clientMetadata, _a, scope;
1235
1373
  var _this = this;
1236
1374
  return __generator(this, function (_b) {
1237
1375
  switch (_b.label) {
1238
1376
  case 0:
1239
- if (err) {
1240
- logger.debug('Failed to get the user session', err);
1241
- rej(err);
1242
- return [2 /*return*/];
1243
- }
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:
1244
1395
  bypassCache = params ? params.bypassCache : false;
1245
- if (!bypassCache) return [3 /*break*/, 2];
1396
+ if (!bypassCache) return [3 /*break*/, 7];
1246
1397
  return [4 /*yield*/, this.Credentials.clear()];
1247
- case 1:
1398
+ case 6:
1248
1399
  _b.sent();
1249
- _b.label = 2;
1250
- case 2:
1400
+ _b.label = 7;
1401
+ case 7:
1251
1402
  clientMetadata = this._config.clientMetadata;
1252
1403
  _a = session.getAccessToken().decodePayload().scope, scope = _a === void 0 ? '' : _a;
1253
1404
  if (scope.split(' ').includes(USER_ADMIN_SCOPE)) {
1254
- user.getUserData(function (err, data) {
1255
- if (err) {
1256
- logger.debug('getting user data failed', err);
1257
- // Make sure the user is still valid
1258
- if (err.message === 'User is disabled.' ||
1259
- err.message === 'User does not exist.' ||
1260
- err.message === 'Access Token has been revoked' // Session revoked by another app
1261
- ) {
1262
- rej(err);
1263
- }
1264
- else {
1265
- // the error may also be thrown when lack of permissions to get user info etc
1266
- // in that case we just bypass the error
1267
- res(user);
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)];
1268
1445
  }
1269
- return;
1270
- }
1271
- var preferredMFA = data.PreferredMfaSetting || 'NOMFA';
1272
- var attributeList = [];
1273
- for (var i = 0; i < data.UserAttributes.length; i++) {
1274
- var attribute = {
1275
- Name: data.UserAttributes[i].Name,
1276
- Value: data.UserAttributes[i].Value,
1277
- };
1278
- var userAttribute = new CognitoUserAttribute(attribute);
1279
- attributeList.push(userAttribute);
1280
- }
1281
- var attributes = _this.attributesToObject(attributeList);
1282
- Object.assign(user, { attributes: attributes, preferredMFA: preferredMFA });
1283
- return res(user);
1284
- }, { bypassCache: bypassCache, clientMetadata: clientMetadata });
1446
+ });
1447
+ }); }, { bypassCache: bypassCache, clientMetadata: clientMetadata });
1285
1448
  }
1286
1449
  else {
1287
1450
  logger.debug("Unable to get the user data because the " + USER_ADMIN_SCOPE + " " +
@@ -1312,7 +1475,7 @@ var AuthClass = /** @class */ (function () {
1312
1475
  */
1313
1476
  AuthClass.prototype.currentAuthenticatedUser = function (params) {
1314
1477
  return __awaiter(this, void 0, void 0, function () {
1315
- var federatedUser, e_6, federatedInfo, user, e_7;
1478
+ var federatedUser, e_7, federatedInfo, user, e_8;
1316
1479
  return __generator(this, function (_a) {
1317
1480
  switch (_a.label) {
1318
1481
  case 0:
@@ -1326,9 +1489,9 @@ var AuthClass = /** @class */ (function () {
1326
1489
  _a.sent();
1327
1490
  return [3 /*break*/, 4];
1328
1491
  case 3:
1329
- e_6 = _a.sent();
1330
- logger.debug('Failed to sync cache info into memory', e_6);
1331
- throw e_6;
1492
+ e_7 = _a.sent();
1493
+ logger.debug('Failed to sync cache info into memory', e_7);
1494
+ throw e_7;
1332
1495
  case 4:
1333
1496
  try {
1334
1497
  federatedInfo = JSON.parse(this._storage.getItem('aws-amplify-federatedInfo'));
@@ -1354,12 +1517,12 @@ var AuthClass = /** @class */ (function () {
1354
1517
  user = _a.sent();
1355
1518
  return [3 /*break*/, 9];
1356
1519
  case 8:
1357
- e_7 = _a.sent();
1358
- if (e_7 === 'No userPool') {
1520
+ e_8 = _a.sent();
1521
+ if (e_8 === 'No userPool') {
1359
1522
  logger.error('Cannot get the current user because the user pool is missing. ' +
1360
1523
  'Please make sure the Auth module is configured with a valid Cognito User Pool ID');
1361
1524
  }
1362
- logger.debug('The user is not authenticated by the error', e_7);
1525
+ logger.debug('The user is not authenticated by the error', e_8);
1363
1526
  return [2 /*return*/, Promise.reject('The user is not authenticated')];
1364
1527
  case 9:
1365
1528
  this.user = user;
@@ -1377,7 +1540,7 @@ var AuthClass = /** @class */ (function () {
1377
1540
  logger.debug('Getting current session');
1378
1541
  // Purposely not calling the reject method here because we don't need a console error
1379
1542
  if (!this.userPool) {
1380
- return Promise.reject();
1543
+ return this.rejectNoUserPool();
1381
1544
  }
1382
1545
  return new Promise(function (res, rej) {
1383
1546
  that
@@ -1408,25 +1571,43 @@ var AuthClass = /** @class */ (function () {
1408
1571
  * @return - A promise resolves to the session
1409
1572
  */
1410
1573
  AuthClass.prototype.userSession = function (user) {
1574
+ var _this = this;
1411
1575
  if (!user) {
1412
1576
  logger.debug('the user is null');
1413
1577
  return this.rejectAuthError(AuthErrorTypes.NoUserSession);
1414
1578
  }
1415
1579
  var clientMetadata = this._config.clientMetadata; // TODO: verify behavior if this is override during signIn
1416
- return new Promise(function (resolve, reject) {
1580
+ return new Promise(function (res, rej) {
1417
1581
  logger.debug('Getting the session from this user:', user);
1418
- user.getSession(function (err, session) {
1419
- if (err) {
1420
- logger.debug('Failed to get the session from user', user);
1421
- reject(err);
1422
- return;
1423
- }
1424
- else {
1425
- logger.debug('Succeed to get the user session', session);
1426
- resolve(session);
1427
- return;
1428
- }
1429
- }, { 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 });
1430
1611
  });
1431
1612
  };
1432
1613
  /**
@@ -1435,7 +1616,7 @@ var AuthClass = /** @class */ (function () {
1435
1616
  */
1436
1617
  AuthClass.prototype.currentUserCredentials = function () {
1437
1618
  return __awaiter(this, void 0, void 0, function () {
1438
- var e_8, federatedInfo;
1619
+ var e_9, federatedInfo;
1439
1620
  var _this = this;
1440
1621
  return __generator(this, function (_a) {
1441
1622
  switch (_a.label) {
@@ -1449,9 +1630,9 @@ var AuthClass = /** @class */ (function () {
1449
1630
  _a.sent();
1450
1631
  return [3 /*break*/, 4];
1451
1632
  case 3:
1452
- e_8 = _a.sent();
1453
- logger.debug('Failed to sync cache info into memory', e_8);
1454
- throw e_8;
1633
+ e_9 = _a.sent();
1634
+ logger.debug('Failed to sync cache info into memory', e_9);
1635
+ throw e_9;
1455
1636
  case 4:
1456
1637
  federatedInfo = null;
1457
1638
  try {
@@ -1470,8 +1651,8 @@ var AuthClass = /** @class */ (function () {
1470
1651
  logger.debug('getting session success', session);
1471
1652
  return _this.Credentials.set(session, 'session');
1472
1653
  })
1473
- .catch(function (error) {
1474
- logger.debug('getting session failed', error);
1654
+ .catch(function () {
1655
+ logger.debug('getting guest credentials');
1475
1656
  return _this.Credentials.set(null, 'guest');
1476
1657
  })];
1477
1658
  }
@@ -1547,7 +1728,7 @@ var AuthClass = /** @class */ (function () {
1547
1728
  };
1548
1729
  AuthClass.prototype.cognitoIdentitySignOut = function (opts, user) {
1549
1730
  return __awaiter(this, void 0, void 0, function () {
1550
- var e_9, isSignedInHostedUI;
1731
+ var e_10, isSignedInHostedUI;
1551
1732
  var _this = this;
1552
1733
  return __generator(this, function (_a) {
1553
1734
  switch (_a.label) {
@@ -1558,9 +1739,9 @@ var AuthClass = /** @class */ (function () {
1558
1739
  _a.sent();
1559
1740
  return [3 /*break*/, 3];
1560
1741
  case 2:
1561
- e_9 = _a.sent();
1562
- logger.debug('Failed to sync cache info into memory', e_9);
1563
- throw e_9;
1742
+ e_10 = _a.sent();
1743
+ logger.debug('Failed to sync cache info into memory', e_10);
1744
+ throw e_10;
1564
1745
  case 3:
1565
1746
  isSignedInHostedUI = this._oAuthHandler &&
1566
1747
  this._storage.getItem('amplify-signin-with-hostedUI') === 'true';
@@ -1570,27 +1751,47 @@ var AuthClass = /** @class */ (function () {
1570
1751
  // in order to use global signout
1571
1752
  // we must validate the user as an authenticated user by using getSession
1572
1753
  var clientMetadata = _this._config.clientMetadata; // TODO: verify behavior if this is override during signIn
1573
- user.getSession(function (err, result) {
1574
- if (err) {
1575
- logger.debug('failed to get the user session', err);
1576
- return rej(err);
1577
- }
1578
- user.globalSignOut({
1579
- onSuccess: function (data) {
1580
- logger.debug('global sign out success');
1581
- if (isSignedInHostedUI) {
1582
- _this.oAuthSignOutRedirect(res, rej);
1583
- }
1584
- else {
1585
- return res();
1586
- }
1587
- },
1588
- onFailure: function (err) {
1589
- logger.debug('global sign out failed', err);
1590
- return rej(err);
1591
- },
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
+ }
1592
1793
  });
1593
- }, { clientMetadata: clientMetadata });
1794
+ }); }, { clientMetadata: clientMetadata });
1594
1795
  }
1595
1796
  else {
1596
1797
  logger.debug('user sign out', user);
@@ -1624,7 +1825,7 @@ var AuthClass = /** @class */ (function () {
1624
1825
  AuthClass.prototype.oAuthSignOutRedirectOrReject = function (reject) {
1625
1826
  this._oAuthHandler.signOut(); // this method redirects url
1626
1827
  // App should be redirected to another url otherwise it will reject
1627
- setTimeout(function () { return reject('Signout timeout fail'); }, 3000);
1828
+ setTimeout(function () { return reject(Error('Signout timeout fail')); }, 3000);
1628
1829
  };
1629
1830
  /**
1630
1831
  * Sign out method
@@ -1633,7 +1834,7 @@ var AuthClass = /** @class */ (function () {
1633
1834
  */
1634
1835
  AuthClass.prototype.signOut = function (opts) {
1635
1836
  return __awaiter(this, void 0, void 0, function () {
1636
- var e_10, user;
1837
+ var e_11, user;
1637
1838
  return __generator(this, function (_a) {
1638
1839
  switch (_a.label) {
1639
1840
  case 0:
@@ -1643,7 +1844,7 @@ var AuthClass = /** @class */ (function () {
1643
1844
  _a.sent();
1644
1845
  return [3 /*break*/, 3];
1645
1846
  case 2:
1646
- e_10 = _a.sent();
1847
+ e_11 = _a.sent();
1647
1848
  logger.debug('failed to clear cached items');
1648
1849
  return [3 /*break*/, 3];
1649
1850
  case 3:
@@ -1659,7 +1860,7 @@ var AuthClass = /** @class */ (function () {
1659
1860
  _a.label = 6;
1660
1861
  case 6: return [3 /*break*/, 8];
1661
1862
  case 7:
1662
- logger.debug('no Congito User pool');
1863
+ logger.debug('no Cognito User pool');
1663
1864
  _a.label = 8;
1664
1865
  case 8:
1665
1866
  /**
@@ -1792,7 +1993,7 @@ var AuthClass = /** @class */ (function () {
1792
1993
  */
1793
1994
  AuthClass.prototype.currentUserInfo = function () {
1794
1995
  return __awaiter(this, void 0, void 0, function () {
1795
- var source, user, attributes, userAttrs, credentials, e_11, info, err_1, user;
1996
+ var source, user, attributes, userAttrs, credentials, e_12, info, err_1, user;
1796
1997
  return __generator(this, function (_a) {
1797
1998
  switch (_a.label) {
1798
1999
  case 0:
@@ -1822,8 +2023,8 @@ var AuthClass = /** @class */ (function () {
1822
2023
  credentials = _a.sent();
1823
2024
  return [3 /*break*/, 7];
1824
2025
  case 6:
1825
- e_11 = _a.sent();
1826
- logger.debug('Failed to retrieve credentials while getting current user info', e_11);
2026
+ e_12 = _a.sent();
2027
+ logger.debug('Failed to retrieve credentials while getting current user info', e_12);
1827
2028
  return [3 /*break*/, 7];
1828
2029
  case 7:
1829
2030
  info = {