@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/Auth.js CHANGED
@@ -90,8 +90,7 @@ var logger = new core_1.ConsoleLogger('AuthClass');
90
90
  var USER_ADMIN_SCOPE = 'aws.cognito.signin.user.admin';
91
91
  // 10 sec, following this guide https://www.nngroup.com/articles/response-times-3-important-limits/
92
92
  var OAUTH_FLOW_MS_TIMEOUT = 10 * 1000;
93
- var AMPLIFY_SYMBOL = (typeof Symbol !== 'undefined' &&
94
- typeof Symbol.for === 'function'
93
+ var AMPLIFY_SYMBOL = (typeof Symbol !== 'undefined' && typeof Symbol.for === 'function'
95
94
  ? Symbol.for('amplify_default')
96
95
  : '@@amplify_default');
97
96
  var dispatchAuthEvent = function (event, data, message) {
@@ -599,22 +598,42 @@ var AuthClass = /** @class */ (function () {
599
598
  return new Promise(function (res, rej) {
600
599
  var clientMetadata = _this._config.clientMetadata; // TODO: verify behavior if this is override during signIn
601
600
  var bypassCache = params ? params.bypassCache : false;
602
- user.getUserData(function (err, data) {
603
- if (err) {
604
- logger.debug('getting preferred mfa failed', err);
605
- rej(err);
606
- return;
607
- }
608
- var mfaType = that._getMfaTypeFromUserData(data);
609
- if (!mfaType) {
610
- rej('invalid MFA Type');
611
- return;
612
- }
613
- else {
614
- res(mfaType);
615
- return;
616
- }
617
- }, { 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 });
618
637
  });
619
638
  };
620
639
  AuthClass.prototype._getMfaTypeFromUserData = function (data) {
@@ -651,18 +670,37 @@ var AuthClass = /** @class */ (function () {
651
670
  return ret;
652
671
  };
653
672
  AuthClass.prototype._getUserData = function (user, params) {
673
+ var _this = this;
654
674
  return new Promise(function (res, rej) {
655
- user.getUserData(function (err, data) {
656
- if (err) {
657
- logger.debug('getting user data failed', err);
658
- rej(err);
659
- return;
660
- }
661
- else {
662
- res(data);
663
- return;
664
- }
665
- }, 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);
666
704
  });
667
705
  };
668
706
  /**
@@ -674,6 +712,7 @@ var AuthClass = /** @class */ (function () {
674
712
  AuthClass.prototype.setPreferredMFA = function (user, mfaMethod) {
675
713
  return __awaiter(this, void 0, void 0, function () {
676
714
  var clientMetadata, userData, smsMfaSettings, totpMfaSettings, _a, mfaList, currentMFAType, that;
715
+ var _this = this;
677
716
  return __generator(this, function (_b) {
678
717
  switch (_b.label) {
679
718
  case 0:
@@ -764,15 +803,30 @@ var AuthClass = /** @class */ (function () {
764
803
  logger.debug('Set user mfa success', result);
765
804
  logger.debug('Caching the latest user data into local');
766
805
  // cache the latest result into user data
767
- user.getUserData(function (err, data) {
768
- if (err) {
769
- logger.debug('getting user data failed', err);
770
- return rej(err);
771
- }
772
- else {
773
- return res(result);
774
- }
775
- }, {
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
+ }); }, {
776
830
  bypassCache: true,
777
831
  clientMetadata: clientMetadata,
778
832
  });
@@ -1023,6 +1077,105 @@ var AuthClass = /** @class */ (function () {
1023
1077
  });
1024
1078
  });
1025
1079
  };
1080
+ /**
1081
+ * Delete the current authenticated user
1082
+ * @return {Promise}
1083
+ **/
1084
+ // TODO: Check return type void
1085
+ AuthClass.prototype.deleteUser = function () {
1086
+ return __awaiter(this, void 0, void 0, function () {
1087
+ var e_5, isSignedInHostedUI;
1088
+ var _this = this;
1089
+ return __generator(this, function (_a) {
1090
+ switch (_a.label) {
1091
+ case 0:
1092
+ _a.trys.push([0, 2, , 3]);
1093
+ return [4 /*yield*/, this._storageSync];
1094
+ case 1:
1095
+ _a.sent();
1096
+ return [3 /*break*/, 3];
1097
+ case 2:
1098
+ e_5 = _a.sent();
1099
+ logger.debug('Failed to sync cache info into memory', e_5);
1100
+ throw new Error(e_5);
1101
+ case 3:
1102
+ isSignedInHostedUI = this._oAuthHandler &&
1103
+ this._storage.getItem('amplify-signin-with-hostedUI') === 'true';
1104
+ return [2 /*return*/, new Promise(function (res, rej) { return __awaiter(_this, void 0, void 0, function () {
1105
+ var user_1;
1106
+ var _this = this;
1107
+ return __generator(this, function (_a) {
1108
+ if (this.userPool) {
1109
+ user_1 = this.userPool.getCurrentUser();
1110
+ if (!user_1) {
1111
+ logger.debug('Failed to get user from user pool');
1112
+ return [2 /*return*/, rej(new Error('No current user.'))];
1113
+ }
1114
+ else {
1115
+ user_1.getSession(function (err, session) { return __awaiter(_this, void 0, void 0, function () {
1116
+ var cleanUpError_4;
1117
+ var _this = this;
1118
+ return __generator(this, function (_a) {
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);
1140
+ }
1141
+ else {
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
+ }
1159
+ }
1160
+ });
1161
+ _a.label = 6;
1162
+ case 6: return [2 /*return*/];
1163
+ }
1164
+ });
1165
+ }); });
1166
+ }
1167
+ }
1168
+ else {
1169
+ logger.debug('no Congito User pool');
1170
+ rej(new Error('Cognito User pool does not exist'));
1171
+ }
1172
+ return [2 /*return*/];
1173
+ });
1174
+ }); })];
1175
+ }
1176
+ });
1177
+ });
1178
+ };
1026
1179
  /**
1027
1180
  * Update an authenticated users' attributes
1028
1181
  * @param {CognitoUser} - The currently logged in user object
@@ -1102,6 +1255,74 @@ var AuthClass = /** @class */ (function () {
1102
1255
  };
1103
1256
  });
1104
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
+ };
1105
1326
  /**
1106
1327
  * Get current authenticated user
1107
1328
  * @return - A promise resolves to current authenticated CognitoUser if success
@@ -1153,57 +1374,82 @@ var AuthClass = /** @class */ (function () {
1153
1374
  clientMetadata = this._config.clientMetadata;
1154
1375
  // refresh the session if the session expired.
1155
1376
  user.getSession(function (err, session) { return __awaiter(_this, void 0, void 0, function () {
1156
- var bypassCache, clientMetadata, _a, scope;
1377
+ var cleanUpError_5, bypassCache, clientMetadata, _a, scope;
1157
1378
  var _this = this;
1158
1379
  return __generator(this, function (_b) {
1159
1380
  switch (_b.label) {
1160
1381
  case 0:
1161
- if (err) {
1162
- logger.debug('Failed to get the user session', err);
1163
- rej(err);
1164
- return [2 /*return*/];
1165
- }
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:
1166
1400
  bypassCache = params ? params.bypassCache : false;
1167
- if (!bypassCache) return [3 /*break*/, 2];
1401
+ if (!bypassCache) return [3 /*break*/, 7];
1168
1402
  return [4 /*yield*/, this.Credentials.clear()];
1169
- case 1:
1403
+ case 6:
1170
1404
  _b.sent();
1171
- _b.label = 2;
1172
- case 2:
1405
+ _b.label = 7;
1406
+ case 7:
1173
1407
  clientMetadata = this._config.clientMetadata;
1174
1408
  _a = session.getAccessToken().decodePayload().scope, scope = _a === void 0 ? '' : _a;
1175
1409
  if (scope.split(' ').includes(USER_ADMIN_SCOPE)) {
1176
- user.getUserData(function (err, data) {
1177
- if (err) {
1178
- logger.debug('getting user data failed', err);
1179
- // Make sure the user is still valid
1180
- if (err.message === 'User is disabled.' ||
1181
- err.message === 'User does not exist.' ||
1182
- err.message === 'Access Token has been revoked' // Session revoked by another app
1183
- ) {
1184
- rej(err);
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)];
1185
1450
  }
1186
- else {
1187
- // the error may also be thrown when lack of permissions to get user info etc
1188
- // in that case we just bypass the error
1189
- res(user);
1190
- }
1191
- return;
1192
- }
1193
- var preferredMFA = data.PreferredMfaSetting || 'NOMFA';
1194
- var attributeList = [];
1195
- for (var i = 0; i < data.UserAttributes.length; i++) {
1196
- var attribute = {
1197
- Name: data.UserAttributes[i].Name,
1198
- Value: data.UserAttributes[i].Value,
1199
- };
1200
- var userAttribute = new amazon_cognito_identity_js_1.CognitoUserAttribute(attribute);
1201
- attributeList.push(userAttribute);
1202
- }
1203
- var attributes = _this.attributesToObject(attributeList);
1204
- Object.assign(user, { attributes: attributes, preferredMFA: preferredMFA });
1205
- return res(user);
1206
- }, { bypassCache: bypassCache, clientMetadata: clientMetadata });
1451
+ });
1452
+ }); }, { bypassCache: bypassCache, clientMetadata: clientMetadata });
1207
1453
  }
1208
1454
  else {
1209
1455
  logger.debug("Unable to get the user data because the " + USER_ADMIN_SCOPE + " " +
@@ -1234,7 +1480,7 @@ var AuthClass = /** @class */ (function () {
1234
1480
  */
1235
1481
  AuthClass.prototype.currentAuthenticatedUser = function (params) {
1236
1482
  return __awaiter(this, void 0, void 0, function () {
1237
- var federatedUser, e_5, federatedInfo, user, e_6;
1483
+ var federatedUser, e_7, federatedInfo, user, e_8;
1238
1484
  return __generator(this, function (_a) {
1239
1485
  switch (_a.label) {
1240
1486
  case 0:
@@ -1248,9 +1494,9 @@ var AuthClass = /** @class */ (function () {
1248
1494
  _a.sent();
1249
1495
  return [3 /*break*/, 4];
1250
1496
  case 3:
1251
- e_5 = _a.sent();
1252
- logger.debug('Failed to sync cache info into memory', e_5);
1253
- throw e_5;
1497
+ e_7 = _a.sent();
1498
+ logger.debug('Failed to sync cache info into memory', e_7);
1499
+ throw e_7;
1254
1500
  case 4:
1255
1501
  try {
1256
1502
  federatedInfo = JSON.parse(this._storage.getItem('aws-amplify-federatedInfo'));
@@ -1276,12 +1522,12 @@ var AuthClass = /** @class */ (function () {
1276
1522
  user = _a.sent();
1277
1523
  return [3 /*break*/, 9];
1278
1524
  case 8:
1279
- e_6 = _a.sent();
1280
- if (e_6 === 'No userPool') {
1525
+ e_8 = _a.sent();
1526
+ if (e_8 === 'No userPool') {
1281
1527
  logger.error('Cannot get the current user because the user pool is missing. ' +
1282
1528
  'Please make sure the Auth module is configured with a valid Cognito User Pool ID');
1283
1529
  }
1284
- logger.debug('The user is not authenticated by the error', e_6);
1530
+ logger.debug('The user is not authenticated by the error', e_8);
1285
1531
  return [2 /*return*/, Promise.reject('The user is not authenticated')];
1286
1532
  case 9:
1287
1533
  this.user = user;
@@ -1299,7 +1545,7 @@ var AuthClass = /** @class */ (function () {
1299
1545
  logger.debug('Getting current session');
1300
1546
  // Purposely not calling the reject method here because we don't need a console error
1301
1547
  if (!this.userPool) {
1302
- return Promise.reject();
1548
+ return this.rejectNoUserPool();
1303
1549
  }
1304
1550
  return new Promise(function (res, rej) {
1305
1551
  that
@@ -1330,25 +1576,43 @@ var AuthClass = /** @class */ (function () {
1330
1576
  * @return - A promise resolves to the session
1331
1577
  */
1332
1578
  AuthClass.prototype.userSession = function (user) {
1579
+ var _this = this;
1333
1580
  if (!user) {
1334
1581
  logger.debug('the user is null');
1335
1582
  return this.rejectAuthError(Auth_1.AuthErrorTypes.NoUserSession);
1336
1583
  }
1337
1584
  var clientMetadata = this._config.clientMetadata; // TODO: verify behavior if this is override during signIn
1338
- return new Promise(function (resolve, reject) {
1585
+ return new Promise(function (res, rej) {
1339
1586
  logger.debug('Getting the session from this user:', user);
1340
- user.getSession(function (err, session) {
1341
- if (err) {
1342
- logger.debug('Failed to get the session from user', user);
1343
- reject(err);
1344
- return;
1345
- }
1346
- else {
1347
- logger.debug('Succeed to get the user session', session);
1348
- resolve(session);
1349
- return;
1350
- }
1351
- }, { 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 });
1352
1616
  });
1353
1617
  };
1354
1618
  /**
@@ -1357,7 +1621,7 @@ var AuthClass = /** @class */ (function () {
1357
1621
  */
1358
1622
  AuthClass.prototype.currentUserCredentials = function () {
1359
1623
  return __awaiter(this, void 0, void 0, function () {
1360
- var e_7, federatedInfo;
1624
+ var e_9, federatedInfo;
1361
1625
  var _this = this;
1362
1626
  return __generator(this, function (_a) {
1363
1627
  switch (_a.label) {
@@ -1371,9 +1635,9 @@ var AuthClass = /** @class */ (function () {
1371
1635
  _a.sent();
1372
1636
  return [3 /*break*/, 4];
1373
1637
  case 3:
1374
- e_7 = _a.sent();
1375
- logger.debug('Failed to sync cache info into memory', e_7);
1376
- throw e_7;
1638
+ e_9 = _a.sent();
1639
+ logger.debug('Failed to sync cache info into memory', e_9);
1640
+ throw e_9;
1377
1641
  case 4:
1378
1642
  federatedInfo = null;
1379
1643
  try {
@@ -1392,8 +1656,8 @@ var AuthClass = /** @class */ (function () {
1392
1656
  logger.debug('getting session success', session);
1393
1657
  return _this.Credentials.set(session, 'session');
1394
1658
  })
1395
- .catch(function (error) {
1396
- logger.debug('getting session failed', error);
1659
+ .catch(function () {
1660
+ logger.debug('getting guest credentials');
1397
1661
  return _this.Credentials.set(null, 'guest');
1398
1662
  })];
1399
1663
  }
@@ -1469,7 +1733,7 @@ var AuthClass = /** @class */ (function () {
1469
1733
  };
1470
1734
  AuthClass.prototype.cognitoIdentitySignOut = function (opts, user) {
1471
1735
  return __awaiter(this, void 0, void 0, function () {
1472
- var e_8, isSignedInHostedUI;
1736
+ var e_10, isSignedInHostedUI;
1473
1737
  var _this = this;
1474
1738
  return __generator(this, function (_a) {
1475
1739
  switch (_a.label) {
@@ -1480,9 +1744,9 @@ var AuthClass = /** @class */ (function () {
1480
1744
  _a.sent();
1481
1745
  return [3 /*break*/, 3];
1482
1746
  case 2:
1483
- e_8 = _a.sent();
1484
- logger.debug('Failed to sync cache info into memory', e_8);
1485
- throw e_8;
1747
+ e_10 = _a.sent();
1748
+ logger.debug('Failed to sync cache info into memory', e_10);
1749
+ throw e_10;
1486
1750
  case 3:
1487
1751
  isSignedInHostedUI = this._oAuthHandler &&
1488
1752
  this._storage.getItem('amplify-signin-with-hostedUI') === 'true';
@@ -1492,27 +1756,47 @@ var AuthClass = /** @class */ (function () {
1492
1756
  // in order to use global signout
1493
1757
  // we must validate the user as an authenticated user by using getSession
1494
1758
  var clientMetadata = _this._config.clientMetadata; // TODO: verify behavior if this is override during signIn
1495
- user.getSession(function (err, result) {
1496
- if (err) {
1497
- logger.debug('failed to get the user session', err);
1498
- return rej(err);
1499
- }
1500
- user.globalSignOut({
1501
- onSuccess: function (data) {
1502
- logger.debug('global sign out success');
1503
- if (isSignedInHostedUI) {
1504
- _this.oAuthSignOutRedirect(res, rej);
1505
- }
1506
- else {
1507
- return res();
1508
- }
1509
- },
1510
- onFailure: function (err) {
1511
- logger.debug('global sign out failed', err);
1512
- return rej(err);
1513
- },
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
+ }
1514
1798
  });
1515
- }, { clientMetadata: clientMetadata });
1799
+ }); }, { clientMetadata: clientMetadata });
1516
1800
  }
1517
1801
  else {
1518
1802
  logger.debug('user sign out', user);
@@ -1531,7 +1815,7 @@ var AuthClass = /** @class */ (function () {
1531
1815
  });
1532
1816
  };
1533
1817
  AuthClass.prototype.oAuthSignOutRedirect = function (resolve, reject) {
1534
- var isBrowser = core_1.JS.browserOrNode().isBrowser;
1818
+ var isBrowser = core_1.browserOrNode().isBrowser;
1535
1819
  if (isBrowser) {
1536
1820
  this.oAuthSignOutRedirectOrReject(reject);
1537
1821
  }
@@ -1546,7 +1830,7 @@ var AuthClass = /** @class */ (function () {
1546
1830
  AuthClass.prototype.oAuthSignOutRedirectOrReject = function (reject) {
1547
1831
  this._oAuthHandler.signOut(); // this method redirects url
1548
1832
  // App should be redirected to another url otherwise it will reject
1549
- setTimeout(function () { return reject('Signout timeout fail'); }, 3000);
1833
+ setTimeout(function () { return reject(Error('Signout timeout fail')); }, 3000);
1550
1834
  };
1551
1835
  /**
1552
1836
  * Sign out method
@@ -1555,7 +1839,7 @@ var AuthClass = /** @class */ (function () {
1555
1839
  */
1556
1840
  AuthClass.prototype.signOut = function (opts) {
1557
1841
  return __awaiter(this, void 0, void 0, function () {
1558
- var e_9, user;
1842
+ var e_11, user;
1559
1843
  return __generator(this, function (_a) {
1560
1844
  switch (_a.label) {
1561
1845
  case 0:
@@ -1565,7 +1849,7 @@ var AuthClass = /** @class */ (function () {
1565
1849
  _a.sent();
1566
1850
  return [3 /*break*/, 3];
1567
1851
  case 2:
1568
- e_9 = _a.sent();
1852
+ e_11 = _a.sent();
1569
1853
  logger.debug('failed to clear cached items');
1570
1854
  return [3 /*break*/, 3];
1571
1855
  case 3:
@@ -1581,7 +1865,7 @@ var AuthClass = /** @class */ (function () {
1581
1865
  _a.label = 6;
1582
1866
  case 6: return [3 /*break*/, 8];
1583
1867
  case 7:
1584
- logger.debug('no Congito User pool');
1868
+ logger.debug('no Cognito User pool');
1585
1869
  _a.label = 8;
1586
1870
  case 8:
1587
1871
  /**
@@ -1714,7 +1998,7 @@ var AuthClass = /** @class */ (function () {
1714
1998
  */
1715
1999
  AuthClass.prototype.currentUserInfo = function () {
1716
2000
  return __awaiter(this, void 0, void 0, function () {
1717
- var source, user, attributes, userAttrs, credentials, e_10, info, err_1, user;
2001
+ var source, user, attributes, userAttrs, credentials, e_12, info, err_1, user;
1718
2002
  return __generator(this, function (_a) {
1719
2003
  switch (_a.label) {
1720
2004
  case 0:
@@ -1744,8 +2028,8 @@ var AuthClass = /** @class */ (function () {
1744
2028
  credentials = _a.sent();
1745
2029
  return [3 /*break*/, 7];
1746
2030
  case 6:
1747
- e_10 = _a.sent();
1748
- logger.debug('Failed to retrieve credentials while getting current user info', e_10);
2031
+ e_12 = _a.sent();
2032
+ logger.debug('Failed to retrieve credentials while getting current user info', e_12);
1749
2033
  return [3 /*break*/, 7];
1750
2034
  case 7:
1751
2035
  info = {
@@ -1853,7 +2137,7 @@ var AuthClass = /** @class */ (function () {
1853
2137
  throw new Error("OAuth responses require a User Pool defined in config");
1854
2138
  }
1855
2139
  dispatchAuthEvent('parsingCallbackUrl', { url: URL }, "The callback url is being parsed");
1856
- currentUrl = URL || (core_1.JS.browserOrNode().isBrowser ? window.location.href : '');
2140
+ currentUrl = URL || (core_1.browserOrNode().isBrowser ? window.location.href : '');
1857
2141
  hasCodeOrError = !!(url_1.parse(currentUrl).query || '')
1858
2142
  .split('&')
1859
2143
  .map(function (entry) { return entry.split('='); })
@@ -1904,10 +2188,7 @@ var AuthClass = /** @class */ (function () {
1904
2188
  dispatchAuthEvent('signIn', currentUser, "A user " + currentUser.getUsername() + " has been signed in");
1905
2189
  dispatchAuthEvent('cognitoHostedUI', currentUser, "A user " + currentUser.getUsername() + " has been signed in via Cognito Hosted UI");
1906
2190
  if (isCustomStateIncluded) {
1907
- customState = state
1908
- .split('-')
1909
- .splice(1)
1910
- .join('-');
2191
+ customState = state.split('-').splice(1).join('-');
1911
2192
  dispatchAuthEvent('customOAuthState', core_1.urlSafeDecode(customState), "State for user " + currentUser.getUsername());
1912
2193
  }
1913
2194
  //#endregion