@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/CHANGELOG.md +149 -0
- package/dist/aws-amplify-auth.js +708 -332
- package/dist/aws-amplify-auth.js.map +1 -1
- package/dist/aws-amplify-auth.min.js +22 -78
- package/dist/aws-amplify-auth.min.js.map +1 -1
- package/lib/Auth.d.ts +14 -0
- package/lib/Auth.js +423 -142
- package/lib/Auth.js.map +1 -1
- package/lib/index.d.ts +2 -2
- package/lib/index.js +1 -0
- package/lib/index.js.map +1 -1
- package/lib/types/Auth.d.ts +7 -0
- package/lib/types/Auth.js +8 -0
- package/lib/types/Auth.js.map +1 -1
- package/lib/urlListener.js +2 -2
- package/lib/urlListener.js.map +1 -1
- package/lib-esm/Auth.d.ts +14 -0
- package/lib-esm/Auth.js +424 -143
- package/lib-esm/Auth.js.map +1 -1
- package/lib-esm/index.d.ts +2 -2
- package/lib-esm/index.js +2 -2
- package/lib-esm/index.js.map +1 -1
- package/lib-esm/types/Auth.d.ts +7 -0
- package/lib-esm/types/Auth.js +8 -0
- package/lib-esm/types/Auth.js.map +1 -1
- package/lib-esm/urlListener.js +3 -3
- package/lib-esm/urlListener.js.map +1 -1
- package/package.json +5 -5
- package/src/Auth.ts +283 -55
- package/src/index.ts +40 -35
- package/src/types/Auth.ts +8 -0
- package/src/urlListener.ts +3 -3
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,
|
|
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
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
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
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
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
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
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
|
-
|
|
1158
|
-
|
|
1159
|
-
|
|
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*/,
|
|
1396
|
+
if (!bypassCache) return [3 /*break*/, 7];
|
|
1163
1397
|
return [4 /*yield*/, this.Credentials.clear()];
|
|
1164
|
-
case
|
|
1398
|
+
case 6:
|
|
1165
1399
|
_b.sent();
|
|
1166
|
-
_b.label =
|
|
1167
|
-
case
|
|
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
|
-
|
|
1173
|
-
|
|
1174
|
-
|
|
1175
|
-
|
|
1176
|
-
|
|
1177
|
-
|
|
1178
|
-
|
|
1179
|
-
|
|
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
|
-
|
|
1182
|
-
|
|
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,
|
|
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
|
-
|
|
1247
|
-
logger.debug('Failed to sync cache info into memory',
|
|
1248
|
-
throw
|
|
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
|
-
|
|
1275
|
-
if (
|
|
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',
|
|
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
|
|
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 (
|
|
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
|
-
|
|
1337
|
-
|
|
1338
|
-
|
|
1339
|
-
|
|
1340
|
-
|
|
1341
|
-
|
|
1342
|
-
|
|
1343
|
-
|
|
1344
|
-
|
|
1345
|
-
|
|
1346
|
-
|
|
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
|
|
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
|
-
|
|
1370
|
-
logger.debug('Failed to sync cache info into memory',
|
|
1371
|
-
throw
|
|
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 (
|
|
1391
|
-
logger.debug('getting
|
|
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
|
|
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
|
-
|
|
1479
|
-
logger.debug('Failed to sync cache info into memory',
|
|
1480
|
-
throw
|
|
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
|
-
|
|
1492
|
-
|
|
1493
|
-
|
|
1494
|
-
|
|
1495
|
-
|
|
1496
|
-
|
|
1497
|
-
|
|
1498
|
-
|
|
1499
|
-
|
|
1500
|
-
|
|
1501
|
-
|
|
1502
|
-
return
|
|
1503
|
-
|
|
1504
|
-
|
|
1505
|
-
|
|
1506
|
-
|
|
1507
|
-
|
|
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 =
|
|
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
|
|
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
|
-
|
|
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
|
|
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,
|
|
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
|
-
|
|
1743
|
-
logger.debug('Failed to retrieve credentials while getting current user info',
|
|
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 || (
|
|
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
|