synapse-react-client 3.1.26 → 3.1.28

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.
Files changed (84) hide show
  1. package/dist/assets/icons/FrontHand.d.ts +3 -0
  2. package/dist/assets/icons/FrontHand.js +14 -0
  3. package/dist/assets/icons/FrontHand.js.map +1 -0
  4. package/dist/assets/icons/twofactor-graphic.svg +77 -0
  5. package/dist/containers/IconSvg.d.ts +2 -2
  6. package/dist/containers/IconSvg.js +2 -0
  7. package/dist/containers/IconSvg.js.map +1 -1
  8. package/dist/containers/TextField.d.ts +3 -1
  9. package/dist/containers/TextField.js +10 -4
  10. package/dist/containers/TextField.js.map +1 -1
  11. package/dist/containers/UserSearchBoxV2.js +1 -1
  12. package/dist/containers/UserSearchBoxV2.js.map +1 -1
  13. package/dist/containers/auth/LoginPage.js +15 -11
  14. package/dist/containers/auth/LoginPage.js.map +1 -1
  15. package/dist/containers/auth/RecoveryCodeGrid.d.ts +7 -0
  16. package/dist/containers/auth/RecoveryCodeGrid.js +32 -0
  17. package/dist/containers/auth/RecoveryCodeGrid.js.map +1 -0
  18. package/dist/containers/auth/RegenerateBackupCodesWarning.d.ts +7 -0
  19. package/dist/containers/auth/RegenerateBackupCodesWarning.js +26 -0
  20. package/dist/containers/auth/RegenerateBackupCodesWarning.js.map +1 -0
  21. package/dist/containers/auth/StandaloneLoginForm.js +1 -0
  22. package/dist/containers/auth/StandaloneLoginForm.js.map +1 -1
  23. package/dist/containers/auth/TwoFactorAuthSettingsPanel.d.ts +6 -0
  24. package/dist/containers/auth/TwoFactorAuthSettingsPanel.js +48 -0
  25. package/dist/containers/auth/TwoFactorAuthSettingsPanel.js.map +1 -0
  26. package/dist/containers/auth/TwoFactorBackupCodes.d.ts +6 -0
  27. package/dist/containers/auth/TwoFactorBackupCodes.js +89 -0
  28. package/dist/containers/auth/TwoFactorBackupCodes.js.map +1 -0
  29. package/dist/containers/auth/TwoFactorEnrollmentForm.d.ts +17 -0
  30. package/dist/containers/auth/TwoFactorEnrollmentForm.js +143 -0
  31. package/dist/containers/auth/TwoFactorEnrollmentForm.js.map +1 -0
  32. package/dist/containers/auth/TwoFactorSecretDialog.d.ts +8 -0
  33. package/dist/containers/auth/TwoFactorSecretDialog.js +34 -0
  34. package/dist/containers/auth/TwoFactorSecretDialog.js.map +1 -0
  35. package/dist/containers/dataaccess/AccessHistoryDashboard.js +7 -3
  36. package/dist/containers/dataaccess/AccessHistoryDashboard.js.map +1 -1
  37. package/dist/containers/dataaccess/ReviewerDashboard.js +1 -1
  38. package/dist/containers/dataaccess/ReviewerDashboard.js.map +1 -1
  39. package/dist/containers/oauth/CreateOAuthClient.js +34 -21
  40. package/dist/containers/oauth/CreateOAuthClient.js.map +1 -1
  41. package/dist/containers/widgets/themes-plot/BarPlot.js +1 -0
  42. package/dist/containers/widgets/themes-plot/BarPlot.js.map +1 -1
  43. package/dist/style/components/_synapse-nav-drawer.scss +2 -1
  44. package/dist/umd/synapse-react-client.development.css +15 -6
  45. package/dist/umd/synapse-react-client.development.css.map +2 -2
  46. package/dist/umd/synapse-react-client.development.js +24702 -14623
  47. package/dist/umd/synapse-react-client.development.js.map +4 -4
  48. package/dist/umd/synapse-react-client.production.min.css +9 -5
  49. package/dist/umd/synapse-react-client.production.min.js +236 -169
  50. package/dist/umd.index.d.ts +6 -0
  51. package/dist/umd.index.js +6 -0
  52. package/dist/umd.index.js.map +1 -1
  53. package/dist/utils/SynapseClient.d.ts +38 -1
  54. package/dist/utils/SynapseClient.js +58 -5
  55. package/dist/utils/SynapseClient.js.map +1 -1
  56. package/dist/utils/hooks/SynapseAPI/KeyFactory.d.ts +1 -0
  57. package/dist/utils/hooks/SynapseAPI/KeyFactory.js +3 -0
  58. package/dist/utils/hooks/SynapseAPI/KeyFactory.js.map +1 -1
  59. package/dist/utils/hooks/SynapseAPI/auth/useTwoFactorEnrollment.d.ts +7 -0
  60. package/dist/utils/hooks/SynapseAPI/auth/useTwoFactorEnrollment.js +74 -0
  61. package/dist/utils/hooks/SynapseAPI/auth/useTwoFactorEnrollment.js.map +1 -0
  62. package/dist/utils/hooks/useLogin.js +4 -0
  63. package/dist/utils/hooks/useLogin.js.map +1 -1
  64. package/dist/utils/hooks/useMediaPrintOnly.d.ts +11 -0
  65. package/dist/utils/hooks/useMediaPrintOnly.js +26 -0
  66. package/dist/utils/hooks/useMediaPrintOnly.js.map +1 -0
  67. package/dist/utils/synapseTypes/OAuthClient.d.ts +7 -0
  68. package/dist/utils/synapseTypes/OAuthClient.js.map +1 -1
  69. package/dist/utils/synapseTypes/TotpSecret.d.ts +20 -0
  70. package/dist/utils/synapseTypes/TotpSecret.js +3 -0
  71. package/dist/utils/synapseTypes/TotpSecret.js.map +1 -0
  72. package/dist/utils/synapseTypes/TwoFactorAuthRecoveryCodes.d.ts +8 -0
  73. package/dist/utils/synapseTypes/TwoFactorAuthRecoveryCodes.js +3 -0
  74. package/dist/utils/synapseTypes/TwoFactorAuthRecoveryCodes.js.map +1 -0
  75. package/dist/utils/theme/DefaultTheme.js +14 -0
  76. package/dist/utils/theme/DefaultTheme.js.map +1 -1
  77. package/dist/utils/theme/ThemeTypes.d.ts +1 -1
  78. package/dist/utils/theme/palette/Palettes.d.ts +3 -1
  79. package/dist/utils/theme/palette/Palettes.js +16 -15
  80. package/dist/utils/theme/palette/Palettes.js.map +1 -1
  81. package/dist/utils/theme/typography/Typography.d.ts +2 -0
  82. package/dist/utils/theme/typography/Typography.js +10 -2
  83. package/dist/utils/theme/typography/Typography.js.map +1 -1
  84. package/package.json +8 -6
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var tslib_1 = require("tslib");
4
+ var material_1 = require("@mui/material");
5
+ var react_1 = tslib_1.__importDefault(require("react"));
6
+ var IconSvg_1 = tslib_1.__importDefault(require("../IconSvg"));
7
+ var TwoFactorEnrollmentForm_1 = require("./TwoFactorEnrollmentForm");
8
+ var useTwoFactorEnrollment_1 = require("../../utils/hooks/SynapseAPI/auth/useTwoFactorEnrollment");
9
+ var ConditionalWrapper_1 = tslib_1.__importDefault(require("../utils/ConditionalWrapper"));
10
+ var ToastMessage_1 = require("../ToastMessage");
11
+ function TwoFactorAuthSettingsPanel(props) {
12
+ var onRegenerateBackupCodes = props.onRegenerateBackupCodes, onBeginTwoFactorEnrollment = props.onBeginTwoFactorEnrollment;
13
+ var _a = (0, useTwoFactorEnrollment_1.useGetTwoFactorEnrollmentStatus)(), status = _a.data, isLoadingStatus = _a.isLoading;
14
+ var isActivated = (status === null || status === void 0 ? void 0 : status.status) === 'ENABLED';
15
+ var _b = (0, useTwoFactorEnrollment_1.useDisableTwoFactorAuth)({
16
+ onSuccess: function () {
17
+ (0, ToastMessage_1.displayToast)('2FA removed from this account', 'info');
18
+ },
19
+ }), disable2FA = _b.mutate, isLoadingMutation = _b.isLoading;
20
+ var isLoading = isLoadingStatus || isLoadingMutation;
21
+ return (react_1.default.createElement(material_1.Box, null,
22
+ react_1.default.createElement(material_1.Typography, { variant: 'headline2' }, "Two-factor Authentication (2FA)"),
23
+ react_1.default.createElement(ConditionalWrapper_1.default, { condition: isLoading, wrapper: material_1.Skeleton },
24
+ react_1.default.createElement(material_1.Typography, { variant: 'body1', color: isActivated ? 'success.main' : 'error.main', sx: { my: 2, display: 'flex', alignItems: 'center' } },
25
+ react_1.default.createElement(IconSvg_1.default, { icon: isActivated ? 'check' : 'cross', sx: { mr: 1, height: '24px' } }),
26
+ isLoading ? 'Loading...' : isActivated ? 'Active' : 'Inactive')),
27
+ react_1.default.createElement(material_1.Typography, { variant: 'body1Italic', sx: { my: 1 } }, "Required to satisfy certain data access requirements, and recommended for overall account security."),
28
+ react_1.default.createElement(material_1.Typography, { variant: 'body1', sx: { my: 2 } }, "Synapse uses a time-based system, which you can set up using an app like Google Authenticator, Duo Mobile, Microsoft Authenticator, or Authy. Certain data may require 2FA to be turned on for your account in order to request access."),
29
+ react_1.default.createElement(material_1.Stack, { direction: 'row', gap: 1 },
30
+ react_1.default.createElement(ConditionalWrapper_1.default, { condition: isLoadingStatus, wrapper: material_1.Skeleton },
31
+ react_1.default.createElement(material_1.Button, { variant: 'outlined', disabled: isLoading, onClick: function () {
32
+ if (!isActivated) {
33
+ onBeginTwoFactorEnrollment();
34
+ }
35
+ else {
36
+ disable2FA();
37
+ }
38
+ } },
39
+ isActivated ? 'Deactivate' : 'Activate',
40
+ " 2FA")),
41
+ (status === null || status === void 0 ? void 0 : status.status) !== 'DISABLED' && (react_1.default.createElement(ConditionalWrapper_1.default, { condition: isLoadingStatus, wrapper: material_1.Skeleton },
42
+ react_1.default.createElement(material_1.Button, { variant: 'text', disabled: isLoading, onClick: function () {
43
+ onRegenerateBackupCodes();
44
+ } }, "Regenerate Backup Codes"))),
45
+ react_1.default.createElement(material_1.Button, { variant: 'text', onClick: function () { return window.open(TwoFactorEnrollmentForm_1.TWO_FACTOR_DOCS_LINK, '_blank'); } }, "More Information"))));
46
+ }
47
+ exports.default = TwoFactorAuthSettingsPanel;
48
+ //# sourceMappingURL=TwoFactorAuthSettingsPanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TwoFactorAuthSettingsPanel.js","sourceRoot":"","sources":["../../../src/lib/containers/auth/TwoFactorAuthSettingsPanel.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /// <reference types="react" />
2
+ export type TwoFactorBackupCodesProps = {
3
+ showReplaceOldCodesWarning?: boolean;
4
+ onClose: () => void;
5
+ };
6
+ export default function TwoFactorBackupCodes(props: TwoFactorBackupCodesProps): JSX.Element;
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var tslib_1 = require("tslib");
4
+ var react_1 = tslib_1.__importStar(require("react"));
5
+ var material_1 = require("@mui/material");
6
+ var LeftRightPanel_1 = require("../../components/styled/LeftRightPanel");
7
+ var IconSvg_1 = tslib_1.__importDefault(require("../IconSvg"));
8
+ var react_query_1 = require("react-query");
9
+ var SynapseClient_1 = require("../../utils/SynapseClient");
10
+ var SynapseContext_1 = require("../../utils/SynapseContext");
11
+ var ToastMessage_1 = require("../ToastMessage");
12
+ var RegenerateBackupCodesWarning_1 = require("./RegenerateBackupCodesWarning");
13
+ var RecoveryCodeGrid_1 = require("./RecoveryCodeGrid");
14
+ var useMediaPrintOnly_1 = require("../../utils/hooks/useMediaPrintOnly");
15
+ function TwoFactorBackupCodes(props) {
16
+ var showReplaceOldCodesWarning = props.showReplaceOldCodesWarning, onClose = props.onClose;
17
+ var theme = (0, material_1.useTheme)();
18
+ var _a = (0, react_1.useState)(!showReplaceOldCodesWarning), hasConfirmedRegeneration = _a[0], setHasConfirmedRegeneration = _a[1];
19
+ var accessToken = (0, SynapseContext_1.useSynapseContext)().accessToken;
20
+ var _b = (0, react_query_1.useMutation)({
21
+ mutationFn: function () { return (0, SynapseClient_1.createRecoveryCodes)(accessToken); },
22
+ onMutate: function () {
23
+ setHasConfirmedRegeneration(true);
24
+ },
25
+ }), generateCodes = _b.mutate, recoveryCodes = _b.data, error = _b.error;
26
+ // Generate codes on mount if no warning is shown
27
+ (0, react_1.useEffect)(function () {
28
+ if (!showReplaceOldCodesWarning) {
29
+ generateCodes();
30
+ }
31
+ // Run on mount only
32
+ // eslint-disable-next-line react-hooks/exhaustive-deps
33
+ }, []);
34
+ var _c = (0, useMediaPrintOnly_1.useMediaPrintOnly)(), visibleOnPrintClassName = _c.visibleOnPrintClassName, hiddenOnPrintClassName = _c.hiddenOnPrintClassName;
35
+ var copyCodesToClipboard = react_1.default.useCallback(function () {
36
+ var codes = ((recoveryCodes === null || recoveryCodes === void 0 ? void 0 : recoveryCodes.codes) || []).join('\n');
37
+ navigator.clipboard.writeText(codes).then(function () {
38
+ (0, ToastMessage_1.displayToast)('Recovery codes copied to clipboard', 'success');
39
+ });
40
+ }, [recoveryCodes]);
41
+ if (showReplaceOldCodesWarning && !hasConfirmedRegeneration) {
42
+ return (react_1.default.createElement(LeftRightPanel_1.StyledOuterContainer, { sx: { display: 'flex', flexDirection: 'column' } },
43
+ react_1.default.createElement(RegenerateBackupCodesWarning_1.RegenerateBackupCodesWarning, { onConfirm: generateCodes, onCancel: onClose })));
44
+ }
45
+ return (react_1.default.createElement(LeftRightPanel_1.LeftRightPanel, { className: visibleOnPrintClassName, leftContent: react_1.default.createElement(material_1.Box, { sx: {
46
+ py: 10,
47
+ px: 8,
48
+ height: '100%',
49
+ position: 'relative',
50
+ } },
51
+ react_1.default.createElement(material_1.IconButton, { type: "button", onClick: onClose, className: hiddenOnPrintClassName, sx: {
52
+ position: 'absolute',
53
+ top: theme.spacing(2),
54
+ left: theme.spacing(2),
55
+ } },
56
+ react_1.default.createElement(IconSvg_1.default, { icon: "arrowBack", wrap: false, sx: { height: '24px', width: '24px' } })),
57
+ react_1.default.createElement(material_1.Typography, { variant: "headline1", sx: { mt: 7 } }, "Backup codes"),
58
+ showReplaceOldCodesWarning && (react_1.default.createElement(material_1.Alert, { severity: "warning", className: hiddenOnPrintClassName, sx: {
59
+ my: 2,
60
+ }, icon: false },
61
+ react_1.default.createElement("strong", null, "These new codes have replaced your old codes."),
62
+ ' ',
63
+ "Please save these codes and use them from now on.")),
64
+ react_1.default.createElement(RecoveryCodeGrid_1.RecoveryCodeGrid, { recoveryCodes: recoveryCodes }),
65
+ error && (react_1.default.createElement(material_1.Alert, { severity: 'error', sx: { my: 2 }, icon: false }, error.message)),
66
+ react_1.default.createElement(material_1.Box, { className: hiddenOnPrintClassName, sx: {
67
+ display: 'grid',
68
+ gridTemplateColumns: '1fr 1fr',
69
+ gap: '10px',
70
+ mb: '10px',
71
+ } },
72
+ react_1.default.createElement(material_1.Button, { variant: 'outlined', onClick: copyCodesToClipboard, disabled: !recoveryCodes }, "Copy to Clipboard"),
73
+ react_1.default.createElement(material_1.Button, { variant: 'outlined', disabled: !recoveryCodes, onClick: window.print }, "Print Codes")),
74
+ react_1.default.createElement(material_1.Button, { variant: 'contained', className: hiddenOnPrintClassName, fullWidth: true, disabled: !recoveryCodes, onClick: onClose }, "Done")), rightContent: react_1.default.createElement(material_1.Box, { sx: {
75
+ py: 10,
76
+ height: '100%',
77
+ background: "url(https://s3.amazonaws.com/static.synapse.org/images/twofactor-graphic.svg) no-repeat right bottom",
78
+ backgroundSize: '100%',
79
+ } },
80
+ react_1.default.createElement(material_1.Box, { sx: {
81
+ mt: 7,
82
+ px: 9,
83
+ } },
84
+ react_1.default.createElement(material_1.Typography, { variant: "headline1", sx: { mb: 2.5 } }, "Save these codes"),
85
+ react_1.default.createElement(material_1.Typography, { variant: "body1", sx: { my: 2 } }, "You can use these 10 backup codes to access your account if you ever lose access to your authentication device."),
86
+ react_1.default.createElement(material_1.Typography, { variant: "body1", sx: { my: 2 } }, "Each code can only be used once."))) }));
87
+ }
88
+ exports.default = TwoFactorBackupCodes;
89
+ //# sourceMappingURL=TwoFactorBackupCodes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TwoFactorBackupCodes.js","sourceRoot":"","sources":["../../../src/lib/containers/auth/TwoFactorBackupCodes.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /// <reference types="react" />
2
+ import { TotpSecret } from '../../utils/synapseTypes/TotpSecret';
3
+ /**
4
+ * Returns a URL that can be used to generate a QR code that 2FA authenticator apps can interpret
5
+ * @param secret
6
+ * @param subject
7
+ */
8
+ declare function toOtpAuthUrl(secret: TotpSecret, subject: string): string;
9
+ export declare const TWO_FACTOR_DOCS_LINK = "";
10
+ export type TwoFactorEnrollmentFormProps = {
11
+ onTwoFactorEnrollmentSuccess: () => void;
12
+ };
13
+ export default function TwoFactorEnrollmentForm(props: TwoFactorEnrollmentFormProps): JSX.Element;
14
+ export declare const EXPORTED_FOR_UNIT_TESTING: {
15
+ toOtpAuthUrl: typeof toOtpAuthUrl;
16
+ };
17
+ export {};
@@ -0,0 +1,143 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EXPORTED_FOR_UNIT_TESTING = exports.TWO_FACTOR_DOCS_LINK = void 0;
4
+ var tslib_1 = require("tslib");
5
+ var react_1 = tslib_1.__importStar(require("react"));
6
+ var material_1 = require("@mui/material");
7
+ var LeftRightPanel_1 = require("../../components/styled/LeftRightPanel");
8
+ var SynapseAPI_1 = require("../../utils/hooks/SynapseAPI");
9
+ var qrcode_1 = require("qrcode");
10
+ var TextField_1 = tslib_1.__importDefault(require("../TextField"));
11
+ var LoadingScreen_1 = require("../LoadingScreen");
12
+ var FullWidthAlert_1 = tslib_1.__importDefault(require("../FullWidthAlert"));
13
+ var useTwoFactorEnrollment_1 = require("../../utils/hooks/SynapseAPI/auth/useTwoFactorEnrollment");
14
+ var TwoFactorSecretDialog_1 = tslib_1.__importDefault(require("./TwoFactorSecretDialog"));
15
+ /**
16
+ * Returns a URL that can be used to generate a QR code that 2FA authenticator apps can interpret
17
+ * @param secret
18
+ * @param subject
19
+ */
20
+ function toOtpAuthUrl(secret, subject) {
21
+ return "otpauth://totp/Synapse:".concat(subject, "?secret=").concat(secret.secret, "&issuer=Sage%20Bionetworks&algorithm=").concat(secret.alg, "&digits=").concat(secret.digits, "&period=").concat(secret.period);
22
+ }
23
+ var Section = (0, material_1.styled)(function (props) { return (react_1.default.createElement(material_1.Box, tslib_1.__assign({ sx: tslib_1.__assign({ my: 3 }, props.sx) }, props))); }, {
24
+ label: 'Section',
25
+ })(function () { return ({}); });
26
+ var SectionInnerGrid = (0, material_1.styled)(function (props) { return react_1.default.createElement(material_1.Box, tslib_1.__assign({}, props)); }, {
27
+ label: 'SectionInnerGrid',
28
+ })(function (_a) {
29
+ var theme = _a.theme;
30
+ return ({
31
+ display: 'grid',
32
+ gridTemplateColumns: 'auto 200px',
33
+ columnGap: theme.spacing(5),
34
+ });
35
+ });
36
+ // TODO https://sagebionetworks.jira.com/browse/DOCS-115
37
+ exports.TWO_FACTOR_DOCS_LINK = '';
38
+ function TwoFactorEnrollmentForm(props) {
39
+ var _a;
40
+ var onTwoFactorEnrollmentSuccess = props.onTwoFactorEnrollmentSuccess;
41
+ var _b = (0, react_1.useState)(''), totp = _b[0], setTotp = _b[1];
42
+ var _c = (0, react_1.useState)(false), hasQrCode = _c[0], setHasQrCode = _c[1];
43
+ var _d = (0, react_1.useState)(false), showSecretInModal = _d[0], setShowSecretInModal = _d[1];
44
+ var currentUserEmail = (0, SynapseAPI_1.useGetNotificationEmail)().data;
45
+ var qrCodeCanvasElement = (0, react_1.useRef)(null);
46
+ var _e = (0, useTwoFactorEnrollment_1.useStartTwoFactorEnrollment)(), start2FAEnrollment = _e.mutate, totpSecret = _e.data;
47
+ var _f = (0, useTwoFactorEnrollment_1.useFinishTwoFactorEnrollment)({
48
+ onSuccess: onTwoFactorEnrollmentSuccess,
49
+ }), finishEnrollment = _f.mutate, isFinishingEnrollment = _f.isLoading, error = _f.error;
50
+ /* When the component mounts, begin enrollment by fetching the data for the QR code. */
51
+ (0, react_1.useEffect)(function () {
52
+ start2FAEnrollment();
53
+ // eslint-disable-next-line react-hooks/exhaustive-deps
54
+ }, []);
55
+ (0, react_1.useEffect)(function () {
56
+ function createQrCode() {
57
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
58
+ return tslib_1.__generator(this, function (_a) {
59
+ switch (_a.label) {
60
+ case 0:
61
+ if (!(totpSecret && currentUserEmail && qrCodeCanvasElement.current)) return [3 /*break*/, 2];
62
+ return [4 /*yield*/, (0, qrcode_1.toCanvas)(qrCodeCanvasElement.current, toOtpAuthUrl(totpSecret, currentUserEmail.email), { version: 10, margin: 0, scale: 3.5 })];
63
+ case 1:
64
+ _a.sent();
65
+ setHasQrCode(true);
66
+ _a.label = 2;
67
+ case 2: return [2 /*return*/];
68
+ }
69
+ });
70
+ });
71
+ }
72
+ createQrCode();
73
+ }, [totpSecret, currentUserEmail]);
74
+ return (react_1.default.createElement(LeftRightPanel_1.StyledOuterContainer, null,
75
+ react_1.default.createElement(material_1.Paper, { sx: {
76
+ width: '800px',
77
+ py: 6.5,
78
+ px: 8,
79
+ mx: 'auto',
80
+ } },
81
+ react_1.default.createElement(Section, null,
82
+ react_1.default.createElement(material_1.Typography, { variant: "headline2", sx: { mb: 3 } }, "Activate Two-factor Authentication"),
83
+ react_1.default.createElement(material_1.Typography, { variant: "body1" },
84
+ "After setting up 2FA, you\u2019ll use an authenticator app as part of your login process, in addition to your existing password. If you log in using your Google",
85
+ ' ',
86
+ false && 'or NIH RAS',
87
+ " account, you may need to use 2FA as part of",
88
+ "that process as well.",
89
+ exports.TWO_FACTOR_DOCS_LINK.length > 0 && (
90
+ // Remove conditionality when docs are ready
91
+ react_1.default.createElement(react_1.default.Fragment, null,
92
+ ' ',
93
+ react_1.default.createElement(material_1.Link, { href: exports.TWO_FACTOR_DOCS_LINK }, "Learn more about 2FA"),
94
+ ".")))),
95
+ react_1.default.createElement(Section, null,
96
+ react_1.default.createElement(SectionInnerGrid, null,
97
+ react_1.default.createElement(material_1.Box, null,
98
+ react_1.default.createElement(material_1.Typography, { variant: "body1", sx: { fontWeight: 700 } }, "Step 1. Get one of these apps"),
99
+ react_1.default.createElement(material_1.Typography, { variant: "body1" }, "Download and install one of these authentication apps to set up 2FA on your mobile device, tablet, or desktop. If you have one of these apps already installed, you can skip this step.")),
100
+ react_1.default.createElement(material_1.Stack, { justifyContent: 'space-between', sx: { flexShrink: 0 } },
101
+ react_1.default.createElement(material_1.Link, { href: 'https://authy.com/download/' }, "Authy"),
102
+ react_1.default.createElement(material_1.Link, { href: 'https://duo.com/product/multi-factor-authentication-mfa/duo-mobile-app' }, "DUO Mobile"),
103
+ react_1.default.createElement(material_1.Link, { href: 'https://googleauthenticator.net/' }, "Google Authenticator"),
104
+ react_1.default.createElement(material_1.Link, { href: 'https://www.microsoft.com/en-us/security/mobile-authenticator-app' }, "Microsoft Authenticator")))),
105
+ react_1.default.createElement(material_1.Divider, null),
106
+ react_1.default.createElement(Section, null,
107
+ react_1.default.createElement(SectionInnerGrid, null,
108
+ react_1.default.createElement(material_1.Box, null,
109
+ react_1.default.createElement(material_1.Typography, { variant: "body1", sx: { fontWeight: 700 } }, "Step 2. Scan the QR Code"),
110
+ react_1.default.createElement(material_1.Typography, { component: "ol", variant: "body1", sx: { pl: 2, my: 1 } },
111
+ react_1.default.createElement("li", null, "Open your authenticator app"),
112
+ react_1.default.createElement("li", null, "Tap the \"+\" button"),
113
+ react_1.default.createElement("li", null, "Use your camera to scan the image to the right")),
114
+ react_1.default.createElement(material_1.Link, { onClick: function () {
115
+ setShowSecretInModal(true);
116
+ } }, "Can't use your camera?"),
117
+ react_1.default.createElement(TwoFactorSecretDialog_1.default, { secret: (_a = totpSecret === null || totpSecret === void 0 ? void 0 : totpSecret.secret) !== null && _a !== void 0 ? _a : '', open: showSecretInModal, onClose: function () { return setShowSecretInModal(false); } })),
118
+ react_1.default.createElement(material_1.Box, { display: 'flex', justifyContent: 'center', alignItems: 'middle', height: 'auto' },
119
+ !hasQrCode && react_1.default.createElement(LoadingScreen_1.SynapseSpinner, { size: 50 }),
120
+ react_1.default.createElement("canvas", { style: { display: hasQrCode ? undefined : 'none' }, ref: qrCodeCanvasElement })))),
121
+ react_1.default.createElement(material_1.Divider, null),
122
+ react_1.default.createElement(Section, null,
123
+ react_1.default.createElement(SectionInnerGrid, null,
124
+ react_1.default.createElement(material_1.Box, null,
125
+ react_1.default.createElement(material_1.Typography, { variant: "body1", sx: { fontWeight: 700 } }, "Step 3. Enter the Verification Code"),
126
+ react_1.default.createElement(material_1.Typography, { variant: "body1" }, "After scanning in the QR code in step 2, your app will provide a 6-digit code. Enter it in in the field to the right.")),
127
+ react_1.default.createElement("form", { onSubmit: function (e) {
128
+ e.preventDefault();
129
+ finishEnrollment({
130
+ secretId: totpSecret.secretId,
131
+ totp: totp,
132
+ });
133
+ } },
134
+ react_1.default.createElement(material_1.Stack, { direction: 'row', gap: 2, height: '48px' },
135
+ react_1.default.createElement(TextField_1.default, { noWrapInFormControl: true, inputProps: { maxLength: totpSecret === null || totpSecret === void 0 ? void 0 : totpSecret.digits }, value: totp, onChange: function (e) {
136
+ setTotp(e.target.value);
137
+ } }),
138
+ react_1.default.createElement(material_1.Button, { type: 'submit', variant: 'contained', sx: { flexShrink: 0 }, disabled: isFinishingEnrollment || totp.length != (totpSecret === null || totpSecret === void 0 ? void 0 : totpSecret.digits) }, "Activate"))))),
139
+ error && (react_1.default.createElement(FullWidthAlert_1.default, { variant: 'danger', isGlobal: false, description: error.reason })))));
140
+ }
141
+ exports.default = TwoFactorEnrollmentForm;
142
+ exports.EXPORTED_FOR_UNIT_TESTING = { toOtpAuthUrl: toOtpAuthUrl };
143
+ //# sourceMappingURL=TwoFactorEnrollmentForm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TwoFactorEnrollmentForm.js","sourceRoot":"","sources":["../../../src/lib/containers/auth/TwoFactorEnrollmentForm.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /// <reference types="react" />
2
+ type TwoFactorSecretDialogProps = {
3
+ secret: string;
4
+ open: boolean;
5
+ onClose: () => void;
6
+ };
7
+ export default function TwoFactorSecretDialog(props: TwoFactorSecretDialogProps): JSX.Element;
8
+ export {};
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var tslib_1 = require("tslib");
4
+ var material_1 = require("@mui/material");
5
+ var IconSvg_1 = tslib_1.__importDefault(require("../IconSvg"));
6
+ var react_1 = tslib_1.__importDefault(require("react"));
7
+ var Typography_1 = require("../../utils/theme/typography/Typography");
8
+ function TwoFactorSecretDialog(props) {
9
+ var secret = props.secret, open = props.open, onClose = props.onClose;
10
+ return (react_1.default.createElement(material_1.Dialog, { open: open, onClose: onClose },
11
+ react_1.default.createElement(material_1.DialogTitle, null,
12
+ react_1.default.createElement(material_1.Stack, { direction: "row", alignItems: 'center', gap: '5px' },
13
+ "Use this code to set up 2FA ",
14
+ react_1.default.createElement(material_1.Box, { sx: { flexGrow: 1 } }),
15
+ react_1.default.createElement(material_1.IconButton, { "aria-label": 'Close', onClick: onClose },
16
+ react_1.default.createElement(IconSvg_1.default, { icon: 'close', wrap: false, sx: { color: 'grey.700' } })))),
17
+ react_1.default.createElement(material_1.DialogContent, null,
18
+ react_1.default.createElement(material_1.Typography, { variant: 'body1' }, "Your authenticator app will ask for a code to activate two-factor authentication. Use the code below:"),
19
+ react_1.default.createElement(material_1.Box, { sx: function (theme) { return ({
20
+ my: 2,
21
+ p: 2,
22
+ width: '100%',
23
+ textAlign: 'center',
24
+ background: theme.palette.grey[200],
25
+ fontFamily: Typography_1.monospaceFontFamily,
26
+ letterSpacing: '2px',
27
+ fontSize: '16px',
28
+ }); } }, secret),
29
+ react_1.default.createElement(material_1.Typography, { variant: 'body1' }, "After setup, you don\u2019t need to save this code.")),
30
+ react_1.default.createElement(material_1.DialogActions, null,
31
+ react_1.default.createElement(material_1.Button, { variant: 'contained', onClick: onClose }, "Done"))));
32
+ }
33
+ exports.default = TwoFactorSecretDialog;
34
+ //# sourceMappingURL=TwoFactorSecretDialog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TwoFactorSecretDialog.js","sourceRoot":"","sources":["../../../src/lib/containers/auth/TwoFactorSecretDialog.tsx"],"names":[],"mappings":";;;AAAA,0CAUsB;AACtB,+DAAgC;AAChC,wDAAyB;AACzB,sEAA6E;AAQ7E,SAAwB,qBAAqB,CAC3C,KAAiC;IAEzB,IAAA,MAAM,GAAoB,KAAK,OAAzB,EAAE,IAAI,GAAc,KAAK,KAAnB,EAAE,OAAO,GAAK,KAAK,QAAV,CAAU;IACvC,OAAO,CACL,8BAAC,iBAAM,IAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO;QAClC,8BAAC,sBAAW;YACV,8BAAC,gBAAK,IAAC,SAAS,EAAC,KAAK,EAAC,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK;;gBACzB,8BAAC,cAAG,IAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAI;gBACxD,8BAAC,qBAAU,kBAAa,OAAO,EAAE,OAAO,EAAE,OAAO;oBAC/C,8BAAC,iBAAO,IAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,GAAI,CACvD,CACP,CACI;QACd,8BAAC,wBAAa;YACZ,8BAAC,qBAAU,IAAC,OAAO,EAAE,OAAO,4GAGf;YACb,8BAAC,cAAG,IACF,EAAE,EAAE,UAAA,KAAK,IAAI,OAAA,CAAC;oBACZ,EAAE,EAAE,CAAC;oBACL,CAAC,EAAE,CAAC;oBACJ,KAAK,EAAE,MAAM;oBACb,SAAS,EAAE,QAAQ;oBACnB,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;oBACnC,UAAU,EAAE,gCAAmB;oBAC/B,aAAa,EAAE,KAAK;oBACpB,QAAQ,EAAE,MAAM;iBACjB,CAAC,EATW,CASX,IAED,MAAM,CACH;YACN,8BAAC,qBAAU,IAAC,OAAO,EAAE,OAAO,0DAEf,CACC;QAChB,8BAAC,wBAAa;YACZ,8BAAC,iBAAM,IAAC,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,WAErC,CACK,CACT,CACV,CAAA;AACH,CAAC;AA5CD,wCA4CC"}
@@ -14,6 +14,7 @@ var AccessRequestSubmissionTable_1 = require("../AccessRequestSubmissionTable");
14
14
  var UserOrTeamBadge_1 = tslib_1.__importDefault(require("../UserOrTeamBadge"));
15
15
  var UserSearchBoxV2_1 = tslib_1.__importDefault(require("../UserSearchBoxV2"));
16
16
  var AccessRequirementSearchBox_1 = tslib_1.__importDefault(require("./AccessRequirementSearchBox"));
17
+ var SynapseAPI_1 = require("../../utils/hooks/SynapseAPI");
17
18
  var UserHistoryDashboard = function () {
18
19
  var _a = (0, react_1.useState)(), accessRequirementId = _a[0], setAccessRequirementId = _a[1];
19
20
  var _b = (0, react_1.useState)(''), accessorId = _b[0], setAccessorId = _b[1];
@@ -27,6 +28,8 @@ var UserHistoryDashboard = function () {
27
28
  accessorId: accessorId,
28
29
  accessRequirementId: accessRequirementId,
29
30
  }), submissionTableProps = _d[0], setSubmissionTableProps = _d[1];
31
+ var userBundle = (0, SynapseAPI_1.useGetCurrentUserBundle)().data;
32
+ var hasActPermissions = userBundle === null || userBundle === void 0 ? void 0 : userBundle.isACTMember;
30
33
  var location = (0, react_router_dom_1.useLocation)();
31
34
  var history = (0, react_router_dom_1.useHistory)();
32
35
  var INPUT_CHANGE_DEBOUNCE_DELAY_MS = 500;
@@ -73,7 +76,7 @@ var UserHistoryDashboard = function () {
73
76
  var NoSearchResultComponent = function () {
74
77
  return (react_1.default.createElement("div", { className: "text-center" },
75
78
  react_1.default.createElement("img", { className: "SearchPlaceholderImage", alt: "Begin searching", src: "https://s3.amazonaws.com/static.synapse.org/images/search-happy.svg" }),
76
- react_1.default.createElement(material_1.Typography, { variant: "body1Italic" }, "Enter a user or team name in the search field above to view their data access history")));
79
+ react_1.default.createElement(material_1.Typography, { variant: "body1Italic" }, "Select a user using the search field above to view their data access history")));
77
80
  };
78
81
  return (react_1.default.createElement("div", { className: "UserHistoryDashboard bootstrap-4-backport" },
79
82
  react_1.default.createElement("div", { className: "InputPanel" },
@@ -88,8 +91,9 @@ var UserHistoryDashboard = function () {
88
91
  "Submissions including ",
89
92
  react_1.default.createElement(UserOrTeamBadge_1.default, { principalId: accessorId })),
90
93
  react_1.default.createElement(AccessRequestSubmissionTable_1.AccessRequestSubmissionTable, tslib_1.__assign({}, submissionTableProps)),
91
- react_1.default.createElement(material_1.Typography, { variant: "headline3" }, "Status in Access Requirements"),
92
- react_1.default.createElement(AccessApprovalsTable_1.AccessApprovalsTable, tslib_1.__assign({}, approvalTableProps)))) : (react_1.default.createElement(NoSearchResultComponent, null))));
94
+ hasActPermissions && (react_1.default.createElement(react_1.default.Fragment, null,
95
+ react_1.default.createElement(material_1.Typography, { variant: "headline3" }, "Status in Access Requirements"),
96
+ react_1.default.createElement(AccessApprovalsTable_1.AccessApprovalsTable, tslib_1.__assign({}, approvalTableProps)))))) : (react_1.default.createElement(NoSearchResultComponent, null))));
93
97
  };
94
98
  exports.UserHistoryDashboard = UserHistoryDashboard;
95
99
  //# sourceMappingURL=AccessHistoryDashboard.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AccessHistoryDashboard.js","sourceRoot":"","sources":["../../../src/lib/containers/dataaccess/AccessHistoryDashboard.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AccessHistoryDashboard.js","sourceRoot":"","sources":["../../../src/lib/containers/dataaccess/AccessHistoryDashboard.tsx"],"names":[],"mappings":"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"}
@@ -42,7 +42,7 @@ function ReviewerDashboard(props) {
42
42
  react_1.default.createElement("div", { className: "Tabs", role: "tablist" },
43
43
  hasActPermissions && (react_1.default.createElement(LinkTab, { href: "/AccessRequirements", icon: "accessClosed" }, "Access Requirements")),
44
44
  hasReviewerPermissions && (react_1.default.createElement(LinkTab, { href: "/Submissions", icon: "discussion" }, "Submissions")),
45
- hasActPermissions && (react_1.default.createElement(LinkTab, { href: "/UserAccessHistory", icon: "history" }, "User Access History"))),
45
+ hasReviewerPermissions && (react_1.default.createElement(LinkTab, { href: "/UserAccessHistory", icon: "history" }, "User Access History"))),
46
46
  react_1.default.createElement("div", { className: "TabContentContainer" },
47
47
  react_1.default.createElement(ErrorBanner_1.SynapseErrorBoundary, null,
48
48
  react_1.default.createElement(react_router_dom_1.Switch, null,
@@ -1 +1 @@
1
- {"version":3,"file":"ReviewerDashboard.js","sourceRoot":"","sources":["../../../src/lib/containers/dataaccess/ReviewerDashboard.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ReviewerDashboard.js","sourceRoot":"","sources":["../../../src/lib/containers/dataaccess/ReviewerDashboard.tsx"],"names":[],"mappings":";;;;AAAA,qDAA0C;AAC1C,qDASyB;AACzB,iFAAyF;AACzF,0CAA0C;AAC1C,oDAA2D;AAC3D,+DAA0C;AAC1C,kDAAiD;AACjD,mEAA+D;AAC/D,2EAAyE;AACzE,yEAA2E;AAC3E,4EAA6C;AAE7C,SAAS,OAAO,CAAC,KAIhB;IACS,IAAA,IAAI,GAAqB,KAAK,KAA1B,EAAE,QAAQ,GAAW,KAAK,SAAhB,EAAE,IAAI,GAAK,KAAK,KAAV,CAAU;IACtC,OAAO,CACL,8BAAC,0BAAO,IAAC,SAAS,EAAC,KAAK,EAAC,IAAI,EAAC,KAAK,EAAC,EAAE,EAAE,IAAI;QAC1C,8BAAC,iBAAO,IACN,IAAI,EAAE,IAAI,EACV,EAAE,EAAE;gBACF,YAAY,EAAE,QAAQ;aACvB,GACD;QACF,8BAAC,qBAAU,IAAC,OAAO,EAAC,YAAY,IAAE,QAAQ,CAAc,CAChD,CACX,CAAA;AACH,CAAC;AASD,SAAgB,iBAAiB,CAAC,KAA6B;IAE3D,IAAA,KAEE,KAAK,eAF0C,EAAjD,cAAc,mBAAG,gCAAgC,KAAA,EACjD,KACE,KAAK,gBADgB,EAAvB,eAAe,mBAAG,KAAK,KAAA,CAChB;IAEH,IAAA,KAAkC,IAAA,uCAAuB,GAAE,EAAnD,UAAU,UAAA,EAAE,SAAS,eAA8B,CAAA;IAEjE,IAAM,iBAAiB,GAAG,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,WAAW,CAAA;IACjD,IAAM,sBAAsB,GAC1B,CAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,WAAW,MAAI,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,YAAY,CAAA,CAAA;IAErD,IAAM,MAAM,GAAG,IAAA,mBAAW,EACxB,UAAC,KAA6C;QAC5C,IAAI,eAAe,EAAE;YACnB,OAAO,8BAAC,+BAAY,uBAAK,KAAK,EAAI,CAAA;SACnC;aAAM;YACL,OAAO,8BAAC,gCAAa,uBAAK,KAAK,EAAI,CAAA;SACpC;IACH,CAAC,EACD,CAAC,eAAe,CAAC,CAClB,CAAA;IAED,IAAI,SAAS,EAAE;QACb,OAAO,8BAAC,8BAAc,IAAC,IAAI,EAAE,EAAE,GAAI,CAAA;KACpC;IAED,OAAO,CACL,8BAAC,MAAM,IAAC,QAAQ,EAAE,cAAc;QAC9B,uCAAK,SAAS,EAAC,mBAAmB;YAChC,uCAAK,SAAS,EAAC,MAAM,EAAC,IAAI,EAAC,SAAS;gBACjC,iBAAiB,IAAI,CACpB,8BAAC,OAAO,IAAC,IAAI,EAAC,qBAAqB,EAAC,IAAI,EAAC,cAAc,0BAE7C,CACX;gBACA,sBAAsB,IAAI,CACzB,8BAAC,OAAO,IAAC,IAAI,EAAC,cAAc,EAAC,IAAI,EAAC,YAAY,kBAEpC,CACX;gBACA,sBAAsB,IAAI,CACzB,8BAAC,OAAO,IAAC,IAAI,EAAC,oBAAoB,EAAC,IAAI,EAAC,SAAS,0BAEvC,CACX,CACG;YACN,uCAAK,SAAS,EAAC,qBAAqB;gBAClC,8BAAC,kCAAoB;oBACnB,8BAAC,yBAAM;wBACJ,iBAAiB,IAAI,CACpB,8BAAC,wBAAK,IAAC,IAAI,EAAC,qBAAqB;4BAC/B,8BAAC,uDAA0B,OAAG,CACxB,CACT;wBACA,sBAAsB,IAAI;4BACzB,8BAAC,wBAAK,IAAC,KAAK,QAAC,IAAI,EAAC,cAAc,EAAC,GAAG,EAAC,cAAc;gCACjD,8BAAC,yDAA6B,OAAG,CAC3B;4BAER,8BAAC,wBAAK,IAAC,IAAI,EAAC,kBAAkB,EAAC,GAAG,EAAC,kBAAkB;gCACnD,8BAAC,2BAA2B,OAAG,CACzB;yBACT;wBAEC,8BAAC,wBAAK,IAAC,KAAK,QAAC,IAAI,EAAC,oBAAoB;4BACpC,8BAAC,6CAAoB,OAAG,CAClB,CAEH,CACY,CACnB,CACF,CACC,CACV,CAAA;AACH,CAAC;AA3ED,8CA2EC;AAED,SAAS,2BAA2B;IAC1B,IAAA,EAAE,GAAK,IAAA,4BAAS,GAAkB,GAAhC,CAAgC;IAC1C,OAAO,8BAAC,wBAAc,IAAC,YAAY,EAAE,EAAE,GAAI,CAAA;AAC7C,CAAC;AAED,kBAAe,iBAAiB,CAAA"}
@@ -13,6 +13,9 @@ var WarningModal_1 = require("../synapse_form_wrapper/WarningModal");
13
13
  var icons_material_1 = require("@mui/icons-material");
14
14
  var material_2 = require("@mui/material");
15
15
  var LoadingScreen_1 = require("../LoadingScreen");
16
+ var utils_1 = require("../../utils");
17
+ var hooks_1 = require("../../utils/hooks");
18
+ var INPUT_CHANGE_DEBOUNCE_DELAY_MS = 500;
16
19
  var CreateOAuthModal = function (_a) {
17
20
  var _b = _a.isShowingModal, isShowingModal = _b === void 0 ? false : _b, isEdit = _a.isEdit, onClose = _a.onClose, client = _a.client, setIsShowingConfirmModal = _a.setIsShowingConfirmModal, isShowingConfirmModal = _a.isShowingConfirmModal, setIsShowingModal = _a.setIsShowingModal;
18
21
  var accessToken = (0, SynapseContext_1.useSynapseContext)().accessToken;
@@ -29,6 +32,29 @@ var CreateOAuthModal = function (_a) {
29
32
  var warningHeader = 'Are you absolutely sure?';
30
33
  var warningBody = 'Editing this detail will render your client invalid and will require you to resubmit verification. This action cannot be undone.';
31
34
  var uriHelpMessage = 'Click Add URI to add more Redirect URIs';
35
+ // Return the OAuth Client definition based on the current client-side UI state
36
+ var oAuthClient = (0, react_1.useMemo)(function () {
37
+ var _a;
38
+ return {
39
+ client_id: client === null || client === void 0 ? void 0 : client.client_id,
40
+ client_name: clientName,
41
+ redirect_uris: (_a = redirectUris === null || redirectUris === void 0 ? void 0 : redirectUris.map(function (str) { return str.uri; })) !== null && _a !== void 0 ? _a : [''],
42
+ policy_uri: policyUri,
43
+ client_uri: clientUri,
44
+ sector_identifier_uri: sectorUri !== null && sectorUri !== void 0 ? sectorUri : '',
45
+ tos_uri: tosUri,
46
+ etag: client === null || client === void 0 ? void 0 : client.etag,
47
+ };
48
+ }, [
49
+ client === null || client === void 0 ? void 0 : client.client_id,
50
+ client === null || client === void 0 ? void 0 : client.etag,
51
+ clientName,
52
+ clientUri,
53
+ policyUri,
54
+ redirectUris,
55
+ sectorUri,
56
+ tosUri,
57
+ ]);
32
58
  (0, react_1.useEffect)(function () {
33
59
  var _a, _b, _c, _d, _e, _f;
34
60
  setClientName((_a = client === null || client === void 0 ? void 0 : client.client_name) !== null && _a !== void 0 ? _a : '');
@@ -38,16 +64,14 @@ var CreateOAuthModal = function (_a) {
38
64
  setSectorUri((_e = client === null || client === void 0 ? void 0 : client.sector_identifier_uri) !== null && _e !== void 0 ? _e : undefined);
39
65
  setTosUri((_f = client === null || client === void 0 ? void 0 : client.tos_uri) !== null && _f !== void 0 ? _f : '');
40
66
  }, [isShowingModal, client]);
41
- (0, react_1.useEffect)(function () {
42
- var stateArr = redirectUris === null || redirectUris === void 0 ? void 0 : redirectUris.map(function (str) { return str.uri; });
43
- var propArr = client === null || client === void 0 ? void 0 : client.redirect_uris;
44
- client &&
45
- ((stateArr === null || stateArr === void 0 ? void 0 : stateArr.length) !== (propArr === null || propArr === void 0 ? void 0 : propArr.length) ||
46
- !(stateArr === null || stateArr === void 0 ? void 0 : stateArr.every(function (el) { return propArr === null || propArr === void 0 ? void 0 : propArr.includes(el); })) ||
47
- sectorUri != (client === null || client === void 0 ? void 0 : client.sector_identifier_uri))
48
- ? setWarnTrigger(true)
49
- : setWarnTrigger(false);
50
- }, [redirectUris, sectorUri, client]);
67
+ (0, hooks_1.useDebouncedEffect)(function () {
68
+ if (accessToken) {
69
+ // SWC-6365: use the pre-check service to determine if we need to show a warning on edit
70
+ utils_1.SynapseClient.isOAuthClientReverificationRequired(oAuthClient, accessToken).then(function (precheckResult) {
71
+ setWarnTrigger(precheckResult.reverificationRequired);
72
+ });
73
+ }
74
+ }, [accessToken, oAuthClient], INPUT_CHANGE_DEBOUNCE_DELAY_MS);
51
75
  var hide = function () {
52
76
  setClientName('');
53
77
  setRedirectUris([{ uri: '' }]);
@@ -92,19 +116,8 @@ var CreateOAuthModal = function (_a) {
92
116
  },
93
117
  }).mutate;
94
118
  var onCreateClient = function () {
95
- var _a;
96
119
  try {
97
120
  if (accessToken) {
98
- var oAuthClient = {
99
- client_id: client === null || client === void 0 ? void 0 : client.client_id,
100
- client_name: clientName,
101
- redirect_uris: (_a = redirectUris === null || redirectUris === void 0 ? void 0 : redirectUris.map(function (str) { return str.uri; })) !== null && _a !== void 0 ? _a : [''],
102
- policy_uri: policyUri,
103
- client_uri: clientUri,
104
- sector_identifier_uri: sectorUri !== null && sectorUri !== void 0 ? sectorUri : '',
105
- tos_uri: tosUri,
106
- etag: client === null || client === void 0 ? void 0 : client.etag,
107
- };
108
121
  setUpdatedClient(oAuthClient);
109
122
  if (warnTrigger === true) {
110
123
  setIsShowingConfirmModal(true);