studiokit-scaffolding-js 7.0.12-next.1.3 → 7.0.12-next.2.1
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/components/ActionList.js +164 -37
- package/lib/components/AlertDialog.js +128 -12
- package/lib/components/AlertWithIcon.js +88 -29
- package/lib/components/ConnectedModal.js +35 -12
- package/lib/components/Dropdowns/GroupsDropdown.js +63 -45
- package/lib/components/Dropdowns/ManagedNavDropdown.js +92 -67
- package/lib/components/Dropdowns/UserDropdown.js +105 -24
- package/lib/components/Dropdowns/index.js +4 -10
- package/lib/components/EntityOwnerList.js +47 -21
- package/lib/components/Error.js +101 -12
- package/lib/components/ErrorBoundary.js +127 -38
- package/lib/components/ErrorMessage.js +39 -12
- package/lib/components/Forms/DateField.js +56 -45
- package/lib/components/Forms/TimeField.js +76 -45
- package/lib/components/Forms/index.js +3 -5
- package/lib/components/Groups/CreateEditCopySaveButtons.js +109 -14
- package/lib/components/Groups/ExternalGroups/Attach.js +206 -151
- package/lib/components/Groups/ExternalGroups/Table.js +176 -48
- package/lib/components/Groups/GroupCreateOrEditCommonProps.js +2 -2
- package/lib/components/Groups/RosterSyncInfo.js +142 -23
- package/lib/components/HOC/AccessibleAppComponent.js +88 -72
- package/lib/components/HOC/ActivityRequiredComponent.js +68 -33
- package/lib/components/HOC/AsyncComponent.js +49 -41
- package/lib/components/HOC/AuthenticatedComponent.js +55 -44
- package/lib/components/HOC/CollectionComponent.js +154 -104
- package/lib/components/HOC/CollectionFirstItemComponent.js +45 -40
- package/lib/components/HOC/CollectionItemComponent.js +152 -100
- package/lib/components/HOC/ConnectedModalComponent.js +87 -69
- package/lib/components/HOC/DataDependentComponent.js +26 -27
- package/lib/components/HOC/EntityComponent.js +57 -53
- package/lib/components/HOC/FullscreenModalComponent.js +139 -108
- package/lib/components/HOC/GroupActivityRequiredComponent.js +27 -20
- package/lib/components/HOC/GuidComponent.js +20 -20
- package/lib/components/HOC/ModelContextDependencyVerifyComponent.js +32 -29
- package/lib/components/HOC/ModelErrorRedirectComponent.js +37 -39
- package/lib/components/HOC/SearchPersistorComponent.js +237 -173
- package/lib/components/HOC/UnauthenticatedComponent.js +32 -30
- package/lib/components/HOC/UserComponent.js +6 -8
- package/lib/components/Icons/IconAlphaList.js +28 -8
- package/lib/components/Icons/IconExternalUser.js +28 -8
- package/lib/components/Icons/IconImpersonation.js +28 -8
- package/lib/components/Icons/IconStopImpersonating.js +28 -8
- package/lib/components/Icons/IconTable.js +29 -9
- package/lib/components/Icons/IconTableDeleteCol.js +28 -8
- package/lib/components/Icons/IconTableDeleteRow.js +28 -8
- package/lib/components/Icons/IconTableInsertCol.js +28 -8
- package/lib/components/Icons/IconTableInsertRow.js +28 -8
- package/lib/components/Impersonation/Button.js +71 -16
- package/lib/components/Impersonation/Link.js +72 -16
- package/lib/components/Impersonation/UserDetail.js +60 -11
- package/lib/components/Loading.js +23 -8
- package/lib/components/LockDownBrowser/Check.js +188 -51
- package/lib/components/LockDownBrowser/ExitButton.js +22 -13
- package/lib/components/LockDownBrowser/Launch.js +64 -64
- package/lib/components/Lti/Confirm.js +147 -14
- package/lib/components/Lti/CreateNonLtiGroupAlertDialog.js +165 -36
- package/lib/components/Lti/Launch.js +99 -25
- package/lib/components/Lti/LaunchGroup.js +81 -16
- package/lib/components/ManageTable.js +304 -90
- package/lib/components/ManageTableNoDataComponent.js +38 -7
- package/lib/components/NewVersionAlert.js +76 -49
- package/lib/components/NotFound.js +81 -11
- package/lib/components/Notifications.js +179 -129
- package/lib/components/PaginationNextButton.js +28 -9
- package/lib/components/PaginationPreviousButton.js +28 -9
- package/lib/components/Quill/CustomToolbar.js +427 -222
- package/lib/components/Quill/Formats/Image.js +67 -67
- package/lib/components/Quill/Formats/List.js +38 -47
- package/lib/components/Quill/Formats/Video.js +23 -26
- package/lib/components/Quill/ImageDropModule.js +136 -114
- package/lib/components/Quill/ImageWarning.js +41 -12
- package/lib/components/Quill/ImageWithAltTextModal.js +420 -89
- package/lib/components/Quill/Specs/CustomImageSpec.js +32 -31
- package/lib/components/Quill/Specs/CustomVideoSpec.js +22 -23
- package/lib/components/Quill/TableModule/Blots/BaseTableBlot.js +89 -97
- package/lib/components/Quill/TableModule/Blots/TableBlot.js +47 -50
- package/lib/components/Quill/TableModule/Blots/TableBodyBlot.js +48 -51
- package/lib/components/Quill/TableModule/Blots/TableCellBlot.js +219 -224
- package/lib/components/Quill/TableModule/Blots/TableContainer.js +75 -86
- package/lib/components/Quill/TableModule/Blots/TableRowBlot.js +70 -73
- package/lib/components/Quill/TableModule/constants.js +40 -42
- package/lib/components/Quill/TableModule/index.js +357 -305
- package/lib/components/Quill/TableModule/utils.js +39 -48
- package/lib/components/Quill/accessibilityFix.js +219 -223
- package/lib/components/Quill/index.js +30 -33
- package/lib/components/RefreshIndicator/Bordered.js +44 -10
- package/lib/components/RefreshIndicator/Inline.js +43 -12
- package/lib/components/RefreshIndicator/index.js +257 -62
- package/lib/components/SearchControls.js +211 -14
- package/lib/components/SentryRoute.js +5 -7
- package/lib/components/Tables/RoleFilter.js +66 -38
- package/lib/components/Tables/TextFilter.js +58 -18
- package/lib/components/UserRoles/Add.js +193 -99
- package/lib/components/UserRoles/Context.js +3 -6
- package/lib/components/UserRoles/RoleCell.js +176 -75
- package/lib/components/UserRoles/Select.js +151 -20
- package/lib/components/UserRoles/Table.js +215 -82
- package/lib/components/UserRoles/index.js +526 -386
- package/lib/config/eslint/index.js +26 -29
- package/lib/config/eslint/lib/order.js +21 -28
- package/lib/config/eslint/lib/prettier.js +15 -19
- package/lib/config/eslint/lib/typescript.js +87 -113
- package/lib/config/eslint/react.js +18 -15
- package/lib/constants/baseActivity.js +26 -28
- package/lib/constants/baseRole.js +10 -12
- package/lib/constants/configuration.js +43 -55
- package/lib/constants/externalProviderType.js +6 -8
- package/lib/constants/fetchErrorData.js +10 -12
- package/lib/constants/index.js +13 -15
- package/lib/constants/lockDownBrowser.js +23 -25
- package/lib/constants/mockData.js +370 -300
- package/lib/constants/modelStatus.js +11 -13
- package/lib/constants/notificationType.js +8 -10
- package/lib/constants/operatingSystem.js +8 -10
- package/lib/constants/shard.js +7 -9
- package/lib/constants/table.js +18 -22
- package/lib/constants/tier.js +8 -10
- package/lib/constants/userRole.js +11 -8
- package/lib/endpointMappings.js +191 -182
- package/lib/hooks/useCollection.js +79 -65
- package/lib/hooks/useCollectionConfiguration.js +220 -80
- package/lib/hooks/useCollectionItem.js +151 -57
- package/lib/hooks/useGuid.js +16 -9
- package/lib/hooks/usePrevious.js +14 -13
- package/lib/index.js +11 -26
- package/lib/redux/actionCreator.js +44 -35
- package/lib/redux/actions/AuthAction.js +45 -32
- package/lib/redux/actions/ModalAction.js +6 -8
- package/lib/redux/actions/ModelAction.js +95 -43
- package/lib/redux/actions/NotificationAction.js +6 -8
- package/lib/redux/actions/SearchAction.js +5 -7
- package/lib/redux/actions/index.js +6 -8
- package/lib/redux/configureReducers.js +48 -46
- package/lib/redux/configureStore.js +77 -91
- package/lib/redux/helpers.js +2 -5
- package/lib/redux/reducers/authReducer.js +44 -43
- package/lib/redux/reducers/index.js +7 -14
- package/lib/redux/reducers/modalsReducer.js +43 -31
- package/lib/redux/reducers/modelsReducer.js +131 -137
- package/lib/redux/reducers/notificationsReducer.js +20 -20
- package/lib/redux/reducers/searchReducer.js +13 -13
- package/lib/redux/sagas/appInsightsSaga.js +19 -21
- package/lib/redux/sagas/authSaga.js +248 -234
- package/lib/redux/sagas/caliperSaga.js +142 -131
- package/lib/redux/sagas/clockOffsetSaga.js +29 -32
- package/lib/redux/sagas/configurationSaga.js +8 -10
- package/lib/redux/sagas/downtimeApiErrorSaga.js +16 -19
- package/lib/redux/sagas/errorSaga.js +23 -24
- package/lib/redux/sagas/googleAnalyticsSaga.js +24 -27
- package/lib/redux/sagas/identityProviderSaga.js +19 -21
- package/lib/redux/sagas/initialDataLoadSaga.js +34 -31
- package/lib/redux/sagas/lockDownBrowserErrorSaga.js +25 -22
- package/lib/redux/sagas/modelFetchSaga.js +302 -286
- package/lib/redux/sagas/noStoreSaga.js +60 -61
- package/lib/redux/sagas/postLoginDataSaga.js +37 -32
- package/lib/redux/sagas/postLoginRedirectSaga.js +22 -27
- package/lib/redux/sagas/rootSaga.js +77 -60
- package/lib/redux/sagas/sentrySaga.js +25 -28
- package/lib/redux/sagas/userIdSaga.js +13 -15
- package/lib/services/codeProviderService.js +21 -21
- package/lib/services/dateService.js +6 -8
- package/lib/services/documentService.js +10 -11
- package/lib/services/fetchService.js +103 -95
- package/lib/services/persistenceService.js +27 -30
- package/lib/services/ticketProviderService.js +25 -25
- package/lib/services/tokenPersistenceService.js +8 -10
- package/lib/services/windowService.js +14 -16
- package/lib/startup.js +110 -101
- package/lib/types/AppConfiguration.js +2 -2
- package/lib/types/Artifact.js +7 -9
- package/lib/types/BaseReduxState.js +2 -2
- package/lib/types/Client.js +2 -2
- package/lib/types/Collection.js +2 -2
- package/lib/types/Configuration.js +2 -2
- package/lib/types/DeepLinkingResponseRequest.js +2 -2
- package/lib/types/DeletableModel.js +2 -2
- package/lib/types/Event.js +2 -2
- package/lib/types/ExternalGroup.js +2 -2
- package/lib/types/ExternalProvider.js +2 -2
- package/lib/types/ExternalTerm.js +2 -2
- package/lib/types/Group.js +2 -2
- package/lib/types/IdentityProvider.js +2 -2
- package/lib/types/LtiLaunch.js +2 -2
- package/lib/types/NameOnlyEntity.js +2 -2
- package/lib/types/Notification.js +2 -2
- package/lib/types/OptionalRecord.js +2 -2
- package/lib/types/OwnerSchedule.js +2 -2
- package/lib/types/PropertyOfType.js +2 -2
- package/lib/types/Quill.js +2 -2
- package/lib/types/RoleDescription.js +2 -2
- package/lib/types/Search.js +2 -2
- package/lib/types/SimpleLocation.js +2 -2
- package/lib/types/UniTime.js +2 -2
- package/lib/types/User.js +2 -2
- package/lib/types/UserRole.js +2 -2
- package/lib/types/auth/AuthState.js +2 -2
- package/lib/types/auth/CasV1LoginRequestBody.js +2 -2
- package/lib/types/auth/ClientCredentials.js +2 -2
- package/lib/types/auth/CodeProviderService.js +2 -2
- package/lib/types/auth/LocalLoginRequestBody.js +2 -2
- package/lib/types/auth/TicketProviderService.js +2 -2
- package/lib/types/auth/TokenPersistenceService.js +2 -2
- package/lib/types/auth/index.js +8 -10
- package/lib/types/externals.d.js +2 -0
- package/lib/types/index.js +29 -31
- package/lib/types/net/EndpointConfig.js +2 -2
- package/lib/types/net/EndpointMapping.js +2 -2
- package/lib/types/net/EndpointMappings.js +2 -2
- package/lib/types/net/ErrorHandler.js +2 -2
- package/lib/types/net/FetchConfig.js +2 -2
- package/lib/types/net/FetchErrorData.js +6 -8
- package/lib/types/net/FetchResult.js +2 -2
- package/lib/types/net/HTTPMethod.js +2 -2
- package/lib/types/net/HTTPStatusCode.js +12 -14
- package/lib/types/net/Metadata.js +2 -2
- package/lib/types/net/Model.js +2 -2
- package/lib/types/net/ModelCollection.js +2 -2
- package/lib/types/net/ModelsState.js +2 -2
- package/lib/types/net/OAuthToken.js +2 -2
- package/lib/types/net/OAuthTokenOrNull.js +2 -2
- package/lib/types/net/TokenAccessFunction.js +2 -2
- package/lib/types/net/index.js +17 -19
- package/lib/utils/baseActivity.js +83 -85
- package/lib/utils/baseRole.js +32 -36
- package/lib/utils/collection.js +403 -297
- package/lib/utils/cookies.js +19 -23
- package/lib/utils/date.js +188 -205
- package/lib/utils/dom.js +130 -131
- package/lib/utils/domainIdentifier.js +4 -8
- package/lib/utils/entityUserRole.js +2 -5
- package/lib/utils/error.js +14 -19
- package/lib/utils/events.js +32 -31
- package/lib/utils/externalGroup.js +20 -25
- package/lib/utils/externalProviders.js +4 -7
- package/lib/utils/externalTerms.js +6 -6
- package/lib/utils/fetch.js +168 -176
- package/lib/utils/group.js +14 -11
- package/lib/utils/groupDates.js +38 -46
- package/lib/utils/groupRoles.js +23 -32
- package/lib/utils/lockDownBrowser.js +12 -15
- package/lib/utils/logger.js +23 -28
- package/lib/utils/lti.js +4 -7
- package/lib/utils/model.js +28 -43
- package/lib/utils/number.js +9 -13
- package/lib/utils/promise.js +23 -26
- package/lib/utils/quill.js +55 -60
- package/lib/utils/route.js +52 -60
- package/lib/utils/search.js +72 -87
- package/lib/utils/shard.js +33 -42
- package/lib/utils/sort.js +47 -50
- package/lib/utils/string.js +10 -12
- package/lib/utils/table.js +29 -33
- package/lib/utils/timezone.js +7 -12
- package/lib/utils/url.js +130 -144
- package/lib/utils/user.js +54 -64
- package/lib/utils/userAgent.js +7 -14
- package/lib/utils/userRole.js +36 -39
- package/package.json +17 -3
|
@@ -1,28 +1,25 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
const
|
|
8
|
-
const
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
user_id: null
|
|
25
|
-
});
|
|
26
|
-
yield (0, effects_1.take)(AuthAction_1.AUTH_TOKEN_SUCCESS_ACTION_TYPE.GET_TOKEN_SUCCEEDED);
|
|
27
|
-
}
|
|
1
|
+
import ga from 'react-ga4';
|
|
2
|
+
import { take } from 'redux-saga/effects';
|
|
3
|
+
import { getAppConfig } from '../../constants';
|
|
4
|
+
import { isModelFetchResultAction } from '../actions';
|
|
5
|
+
import { AUTH_ACTION_TYPE, AUTH_TOKEN_SUCCESS_ACTION_TYPE } from '../actions/AuthAction';
|
|
6
|
+
export default function* googleAnalyticsSaga() {
|
|
7
|
+
const appConfig = getAppConfig();
|
|
8
|
+
const gaTrackingId = appConfig.GOOGLE_ANALYTICS_TRACKING_ID;
|
|
9
|
+
if (!gaTrackingId) {
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
while (true) {
|
|
13
|
+
const userInfoResponse = yield take(action => isModelFetchResultAction(action) && action.modelPath === 'user.userInfo');
|
|
14
|
+
const userId = userInfoResponse.data.id;
|
|
15
|
+
ga.gtag('config', gaTrackingId, {
|
|
16
|
+
user_id: userId
|
|
17
|
+
});
|
|
18
|
+
yield take(AUTH_ACTION_TYPE.LOG_OUT_REQUESTED);
|
|
19
|
+
ga.gtag('config', gaTrackingId, {
|
|
20
|
+
user_id: null
|
|
21
|
+
});
|
|
22
|
+
yield take(AUTH_TOKEN_SUCCESS_ACTION_TYPE.GET_TOKEN_SUCCEEDED);
|
|
23
|
+
}
|
|
28
24
|
}
|
|
25
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnYSIsInRha2UiLCJnZXRBcHBDb25maWciLCJpc01vZGVsRmV0Y2hSZXN1bHRBY3Rpb24iLCJBVVRIX0FDVElPTl9UWVBFIiwiQVVUSF9UT0tFTl9TVUNDRVNTX0FDVElPTl9UWVBFIiwiZ29vZ2xlQW5hbHl0aWNzU2FnYSIsImFwcENvbmZpZyIsImdhVHJhY2tpbmdJZCIsIkdPT0dMRV9BTkFMWVRJQ1NfVFJBQ0tJTkdfSUQiLCJ1c2VySW5mb1Jlc3BvbnNlIiwiYWN0aW9uIiwibW9kZWxQYXRoIiwidXNlcklkIiwiZGF0YSIsImlkIiwiZ3RhZyIsInVzZXJfaWQiLCJMT0dfT1VUX1JFUVVFU1RFRCIsIkdFVF9UT0tFTl9TVUNDRUVERUQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcmVkdXgvc2FnYXMvZ29vZ2xlQW5hbHl0aWNzU2FnYS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZ2EgZnJvbSAncmVhY3QtZ2E0J1xuaW1wb3J0IHsgQW55QWN0aW9uIH0gZnJvbSAncmVkdXgnXG5pbXBvcnQgeyBTYWdhSXRlcmF0b3IgfSBmcm9tICdyZWR1eC1zYWdhJ1xuaW1wb3J0IHsgdGFrZSB9IGZyb20gJ3JlZHV4LXNhZ2EvZWZmZWN0cydcbmltcG9ydCB7IGdldEFwcENvbmZpZyB9IGZyb20gJy4uLy4uL2NvbnN0YW50cydcbmltcG9ydCB7IGlzTW9kZWxGZXRjaFJlc3VsdEFjdGlvbiB9IGZyb20gJy4uL2FjdGlvbnMnXG5pbXBvcnQgeyBBVVRIX0FDVElPTl9UWVBFLCBBVVRIX1RPS0VOX1NVQ0NFU1NfQUNUSU9OX1RZUEUgfSBmcm9tICcuLi9hY3Rpb25zL0F1dGhBY3Rpb24nXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKiBnb29nbGVBbmFseXRpY3NTYWdhKCk6IFNhZ2FJdGVyYXRvciB7XG5cdGNvbnN0IGFwcENvbmZpZyA9IGdldEFwcENvbmZpZygpXG5cdGNvbnN0IGdhVHJhY2tpbmdJZCA9IGFwcENvbmZpZy5HT09HTEVfQU5BTFlUSUNTX1RSQUNLSU5HX0lEXG5cdGlmICghZ2FUcmFja2luZ0lkKSB7XG5cdFx0cmV0dXJuXG5cdH1cblx0d2hpbGUgKHRydWUpIHtcblx0XHRjb25zdCB1c2VySW5mb1Jlc3BvbnNlID0geWllbGQgdGFrZShcblx0XHRcdChhY3Rpb246IEFueUFjdGlvbikgPT4gaXNNb2RlbEZldGNoUmVzdWx0QWN0aW9uKGFjdGlvbikgJiYgYWN0aW9uLm1vZGVsUGF0aCA9PT0gJ3VzZXIudXNlckluZm8nXG5cdFx0KVxuXHRcdGNvbnN0IHVzZXJJZCA9IHVzZXJJbmZvUmVzcG9uc2UuZGF0YS5pZFxuXHRcdGdhLmd0YWcoJ2NvbmZpZycsIGdhVHJhY2tpbmdJZCwge1xuXHRcdFx0dXNlcl9pZDogdXNlcklkXG5cdFx0fSlcblx0XHR5aWVsZCB0YWtlKEFVVEhfQUNUSU9OX1RZUEUuTE9HX09VVF9SRVFVRVNURUQpXG5cdFx0Z2EuZ3RhZygnY29uZmlnJywgZ2FUcmFja2luZ0lkLCB7XG5cdFx0XHR1c2VyX2lkOiBudWxsXG5cdFx0fSlcblx0XHR5aWVsZCB0YWtlKEFVVEhfVE9LRU5fU1VDQ0VTU19BQ1RJT05fVFlQRS5HRVRfVE9LRU5fU1VDQ0VFREVEKVxuXHR9XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBLE9BQU9BLEVBQUUsTUFBTSxXQUFXO0FBRzFCLFNBQVNDLElBQUksUUFBUSxvQkFBb0I7QUFDekMsU0FBU0MsWUFBWSxRQUFRLGlCQUFpQjtBQUM5QyxTQUFTQyx3QkFBd0IsUUFBUSxZQUFZO0FBQ3JELFNBQVNDLGdCQUFnQixFQUFFQyw4QkFBOEIsUUFBUSx1QkFBdUI7QUFFeEYsZUFBZSxVQUFVQyxtQkFBbUJBLENBQUEsRUFBaUI7RUFDNUQsTUFBTUMsU0FBUyxHQUFHTCxZQUFZLENBQUMsQ0FBQztFQUNoQyxNQUFNTSxZQUFZLEdBQUdELFNBQVMsQ0FBQ0UsNEJBQTRCO0VBQzNELElBQUksQ0FBQ0QsWUFBWSxFQUFFO0lBQ2xCO0VBQ0Q7RUFDQSxPQUFPLElBQUksRUFBRTtJQUNaLE1BQU1FLGdCQUFnQixHQUFHLE1BQU1ULElBQUksQ0FDakNVLE1BQWlCLElBQUtSLHdCQUF3QixDQUFDUSxNQUFNLENBQUMsSUFBSUEsTUFBTSxDQUFDQyxTQUFTLEtBQUssZUFDakYsQ0FBQztJQUNELE1BQU1DLE1BQU0sR0FBR0gsZ0JBQWdCLENBQUNJLElBQUksQ0FBQ0MsRUFBRTtJQUN2Q2YsRUFBRSxDQUFDZ0IsSUFBSSxDQUFDLFFBQVEsRUFBRVIsWUFBWSxFQUFFO01BQy9CUyxPQUFPLEVBQUVKO0lBQ1YsQ0FBQyxDQUFDO0lBQ0YsTUFBTVosSUFBSSxDQUFDRyxnQkFBZ0IsQ0FBQ2MsaUJBQWlCLENBQUM7SUFDOUNsQixFQUFFLENBQUNnQixJQUFJLENBQUMsUUFBUSxFQUFFUixZQUFZLEVBQUU7TUFDL0JTLE9BQU8sRUFBRTtJQUNWLENBQUMsQ0FBQztJQUNGLE1BQU1oQixJQUFJLENBQUNJLDhCQUE4QixDQUFDYyxtQkFBbUIsQ0FBQztFQUMvRDtBQUNEIiwiaWdub3JlTGlzdCI6W119
|
|
@@ -1,23 +1,21 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
yield (0, effects_1.take)(actions_1.AUTH_ACTION_TYPE.LOG_OUT_REQUESTED);
|
|
14
|
-
yield (0, effects_1.call)(persistenceService_1.persistenceService.removeItem, persistenceService_1.identityProviderKey);
|
|
15
|
-
window.location.href = identityProviderAction.identityProvider.logoutUrl;
|
|
16
|
-
}
|
|
17
|
-
identityProviderAction = yield (0, effects_1.take)(actions_1.AUTH_IDENTITY_PROVIDER_REQUEST_ACTION_TYPE.IDENTITY_PROVIDER_LOGIN_REQUEST);
|
|
18
|
-
if (identityProviderAction) {
|
|
19
|
-
yield (0, effects_1.call)(persistenceService_1.persistenceService.setItem, persistenceService_1.identityProviderKey, identityProviderAction);
|
|
20
|
-
window.location.href = identityProviderAction.identityProvider.loginUrl;
|
|
21
|
-
}
|
|
1
|
+
import { call, take } from 'redux-saga/effects';
|
|
2
|
+
import { identityProviderKey, persistenceService } from '../../services/persistenceService';
|
|
3
|
+
import { AUTH_ACTION_TYPE, AUTH_IDENTITY_PROVIDER_REQUEST_ACTION_TYPE, isModelFetchResultAction } from '../actions';
|
|
4
|
+
export default function* identityProviderSaga() {
|
|
5
|
+
yield take(action => isModelFetchResultAction(action) && action.modelPath === 'identityProviders');
|
|
6
|
+
while (true) {
|
|
7
|
+
const oauthToken = yield call(persistenceService.getPersistedToken);
|
|
8
|
+
let identityProviderAction = yield call(persistenceService.getItem, identityProviderKey);
|
|
9
|
+
if (oauthToken && identityProviderAction) {
|
|
10
|
+
yield take(AUTH_ACTION_TYPE.LOG_OUT_REQUESTED);
|
|
11
|
+
yield call(persistenceService.removeItem, identityProviderKey);
|
|
12
|
+
window.location.href = identityProviderAction.identityProvider.logoutUrl;
|
|
22
13
|
}
|
|
14
|
+
identityProviderAction = yield take(AUTH_IDENTITY_PROVIDER_REQUEST_ACTION_TYPE.IDENTITY_PROVIDER_LOGIN_REQUEST);
|
|
15
|
+
if (identityProviderAction) {
|
|
16
|
+
yield call(persistenceService.setItem, identityProviderKey, identityProviderAction);
|
|
17
|
+
window.location.href = identityProviderAction.identityProvider.loginUrl;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
23
20
|
}
|
|
21
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjYWxsIiwidGFrZSIsImlkZW50aXR5UHJvdmlkZXJLZXkiLCJwZXJzaXN0ZW5jZVNlcnZpY2UiLCJBVVRIX0FDVElPTl9UWVBFIiwiQVVUSF9JREVOVElUWV9QUk9WSURFUl9SRVFVRVNUX0FDVElPTl9UWVBFIiwiaXNNb2RlbEZldGNoUmVzdWx0QWN0aW9uIiwiaWRlbnRpdHlQcm92aWRlclNhZ2EiLCJhY3Rpb24iLCJtb2RlbFBhdGgiLCJvYXV0aFRva2VuIiwiZ2V0UGVyc2lzdGVkVG9rZW4iLCJpZGVudGl0eVByb3ZpZGVyQWN0aW9uIiwiZ2V0SXRlbSIsIkxPR19PVVRfUkVRVUVTVEVEIiwicmVtb3ZlSXRlbSIsIndpbmRvdyIsImxvY2F0aW9uIiwiaHJlZiIsImlkZW50aXR5UHJvdmlkZXIiLCJsb2dvdXRVcmwiLCJJREVOVElUWV9QUk9WSURFUl9MT0dJTl9SRVFVRVNUIiwic2V0SXRlbSIsImxvZ2luVXJsIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3JlZHV4L3NhZ2FzL2lkZW50aXR5UHJvdmlkZXJTYWdhLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFueUFjdGlvbiB9IGZyb20gJ3JlZHV4J1xuaW1wb3J0IHsgU2FnYUl0ZXJhdG9yIH0gZnJvbSAncmVkdXgtc2FnYSdcbmltcG9ydCB7IGNhbGwsIHRha2UgfSBmcm9tICdyZWR1eC1zYWdhL2VmZmVjdHMnXG5pbXBvcnQgeyBpZGVudGl0eVByb3ZpZGVyS2V5LCBwZXJzaXN0ZW5jZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wZXJzaXN0ZW5jZVNlcnZpY2UnXG5pbXBvcnQge1xuXHRBVVRIX0FDVElPTl9UWVBFLFxuXHRBVVRIX0lERU5USVRZX1BST1ZJREVSX1JFUVVFU1RfQUNUSU9OX1RZUEUsXG5cdEF1dGhJZGVudGl0eVByb3ZpZGVyUmVxdWVzdEFjdGlvbixcblx0aXNNb2RlbEZldGNoUmVzdWx0QWN0aW9uXG59IGZyb20gJy4uL2FjdGlvbnMnXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKiBpZGVudGl0eVByb3ZpZGVyU2FnYSgpOiBTYWdhSXRlcmF0b3Ige1xuXHR5aWVsZCB0YWtlKChhY3Rpb246IEFueUFjdGlvbikgPT4gaXNNb2RlbEZldGNoUmVzdWx0QWN0aW9uKGFjdGlvbikgJiYgYWN0aW9uLm1vZGVsUGF0aCA9PT0gJ2lkZW50aXR5UHJvdmlkZXJzJylcblx0d2hpbGUgKHRydWUpIHtcblx0XHRjb25zdCBvYXV0aFRva2VuID0geWllbGQgY2FsbChwZXJzaXN0ZW5jZVNlcnZpY2UuZ2V0UGVyc2lzdGVkVG9rZW4pXG5cdFx0bGV0IGlkZW50aXR5UHJvdmlkZXJBY3Rpb246IEF1dGhJZGVudGl0eVByb3ZpZGVyUmVxdWVzdEFjdGlvbiB8IHVuZGVmaW5lZCA9IHlpZWxkIGNhbGwoXG5cdFx0XHRwZXJzaXN0ZW5jZVNlcnZpY2UuZ2V0SXRlbSxcblx0XHRcdGlkZW50aXR5UHJvdmlkZXJLZXlcblx0XHQpXG5cdFx0aWYgKG9hdXRoVG9rZW4gJiYgaWRlbnRpdHlQcm92aWRlckFjdGlvbikge1xuXHRcdFx0eWllbGQgdGFrZShBVVRIX0FDVElPTl9UWVBFLkxPR19PVVRfUkVRVUVTVEVEKVxuXHRcdFx0eWllbGQgY2FsbChwZXJzaXN0ZW5jZVNlcnZpY2UucmVtb3ZlSXRlbSwgaWRlbnRpdHlQcm92aWRlcktleSlcblx0XHRcdHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gaWRlbnRpdHlQcm92aWRlckFjdGlvbi5pZGVudGl0eVByb3ZpZGVyLmxvZ291dFVybFxuXHRcdH1cblx0XHRpZGVudGl0eVByb3ZpZGVyQWN0aW9uID0geWllbGQgdGFrZShBVVRIX0lERU5USVRZX1BST1ZJREVSX1JFUVVFU1RfQUNUSU9OX1RZUEUuSURFTlRJVFlfUFJPVklERVJfTE9HSU5fUkVRVUVTVClcblx0XHRpZiAoaWRlbnRpdHlQcm92aWRlckFjdGlvbikge1xuXHRcdFx0eWllbGQgY2FsbChwZXJzaXN0ZW5jZVNlcnZpY2Uuc2V0SXRlbSwgaWRlbnRpdHlQcm92aWRlcktleSwgaWRlbnRpdHlQcm92aWRlckFjdGlvbilcblx0XHRcdHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gaWRlbnRpdHlQcm92aWRlckFjdGlvbi5pZGVudGl0eVByb3ZpZGVyLmxvZ2luVXJsXG5cdFx0fVxuXHR9XG59XG4iXSwibWFwcGluZ3MiOiJBQUVBLFNBQVNBLElBQUksRUFBRUMsSUFBSSxRQUFRLG9CQUFvQjtBQUMvQyxTQUFTQyxtQkFBbUIsRUFBRUMsa0JBQWtCLFFBQVEsbUNBQW1DO0FBQzNGLFNBQ0NDLGdCQUFnQixFQUNoQkMsMENBQTBDLEVBRTFDQyx3QkFBd0IsUUFDbEIsWUFBWTtBQUVuQixlQUFlLFVBQVVDLG9CQUFvQkEsQ0FBQSxFQUFpQjtFQUM3RCxNQUFNTixJQUFJLENBQUVPLE1BQWlCLElBQUtGLHdCQUF3QixDQUFDRSxNQUFNLENBQUMsSUFBSUEsTUFBTSxDQUFDQyxTQUFTLEtBQUssbUJBQW1CLENBQUM7RUFDL0csT0FBTyxJQUFJLEVBQUU7SUFDWixNQUFNQyxVQUFVLEdBQUcsTUFBTVYsSUFBSSxDQUFDRyxrQkFBa0IsQ0FBQ1EsaUJBQWlCLENBQUM7SUFDbkUsSUFBSUMsc0JBQXFFLEdBQUcsTUFBTVosSUFBSSxDQUNyRkcsa0JBQWtCLENBQUNVLE9BQU8sRUFDMUJYLG1CQUNELENBQUM7SUFDRCxJQUFJUSxVQUFVLElBQUlFLHNCQUFzQixFQUFFO01BQ3pDLE1BQU1YLElBQUksQ0FBQ0csZ0JBQWdCLENBQUNVLGlCQUFpQixDQUFDO01BQzlDLE1BQU1kLElBQUksQ0FBQ0csa0JBQWtCLENBQUNZLFVBQVUsRUFBRWIsbUJBQW1CLENBQUM7TUFDOURjLE1BQU0sQ0FBQ0MsUUFBUSxDQUFDQyxJQUFJLEdBQUdOLHNCQUFzQixDQUFDTyxnQkFBZ0IsQ0FBQ0MsU0FBUztJQUN6RTtJQUNBUixzQkFBc0IsR0FBRyxNQUFNWCxJQUFJLENBQUNJLDBDQUEwQyxDQUFDZ0IsK0JBQStCLENBQUM7SUFDL0csSUFBSVQsc0JBQXNCLEVBQUU7TUFDM0IsTUFBTVosSUFBSSxDQUFDRyxrQkFBa0IsQ0FBQ21CLE9BQU8sRUFBRXBCLG1CQUFtQixFQUFFVSxzQkFBc0IsQ0FBQztNQUNuRkksTUFBTSxDQUFDQyxRQUFRLENBQUNDLElBQUksR0FBR04sc0JBQXNCLENBQUNPLGdCQUFnQixDQUFDSSxRQUFRO0lBQ3hFO0VBQ0Q7QUFDRCIsImlnbm9yZUxpc3QiOltdfQ==
|
|
@@ -1,32 +1,35 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
(
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
1
|
+
import { dispatchPeriodicModelFetchRequest } from '../actionCreator';
|
|
2
|
+
export default function initialDataLoadSaga() {
|
|
3
|
+
dispatchPeriodicModelFetchRequest({
|
|
4
|
+
modelName: 'configuration',
|
|
5
|
+
period: 1000 * 60 * 60 * 24,
|
|
6
|
+
// grab configs once a day (for those tab-leaver-openers)
|
|
7
|
+
taskId: 'configuration-refresh'
|
|
8
|
+
});
|
|
9
|
+
dispatchPeriodicModelFetchRequest({
|
|
10
|
+
modelName: 'externalTerms',
|
|
11
|
+
period: 1000 * 60 * 60 * 24,
|
|
12
|
+
// grab external terms once a day (for those tab-leaver-openers)
|
|
13
|
+
taskId: 'external-term-refresh'
|
|
14
|
+
});
|
|
15
|
+
dispatchPeriodicModelFetchRequest({
|
|
16
|
+
modelName: 'identityProviders',
|
|
17
|
+
period: 1000 * 60 * 60 * 24,
|
|
18
|
+
// grab identity providers once a day (for those tab-leaver-openers)
|
|
19
|
+
taskId: 'identity-provider-refresh'
|
|
20
|
+
});
|
|
21
|
+
dispatchPeriodicModelFetchRequest({
|
|
22
|
+
modelName: 'client',
|
|
23
|
+
period: 1000 * 60 * 15,
|
|
24
|
+
// grab client every 15 minutes
|
|
25
|
+
taskId: 'client-refresh'
|
|
26
|
+
});
|
|
27
|
+
dispatchPeriodicModelFetchRequest({
|
|
28
|
+
modelName: 'time',
|
|
29
|
+
period: 1000 * 60 * 15,
|
|
30
|
+
// grab accurate server time every 15 minutes
|
|
31
|
+
taskId: 'time-sync',
|
|
32
|
+
noStore: true
|
|
33
|
+
});
|
|
32
34
|
}
|
|
35
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJkaXNwYXRjaFBlcmlvZGljTW9kZWxGZXRjaFJlcXVlc3QiLCJpbml0aWFsRGF0YUxvYWRTYWdhIiwibW9kZWxOYW1lIiwicGVyaW9kIiwidGFza0lkIiwibm9TdG9yZSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9yZWR1eC9zYWdhcy9pbml0aWFsRGF0YUxvYWRTYWdhLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRpc3BhdGNoUGVyaW9kaWNNb2RlbEZldGNoUmVxdWVzdCB9IGZyb20gJy4uL2FjdGlvbkNyZWF0b3InXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGluaXRpYWxEYXRhTG9hZFNhZ2EoKSB7XG5cdGRpc3BhdGNoUGVyaW9kaWNNb2RlbEZldGNoUmVxdWVzdCh7XG5cdFx0bW9kZWxOYW1lOiAnY29uZmlndXJhdGlvbicsXG5cdFx0cGVyaW9kOiAxMDAwICogNjAgKiA2MCAqIDI0LCAvLyBncmFiIGNvbmZpZ3Mgb25jZSBhIGRheSAoZm9yIHRob3NlIHRhYi1sZWF2ZXItb3BlbmVycylcblx0XHR0YXNrSWQ6ICdjb25maWd1cmF0aW9uLXJlZnJlc2gnXG5cdH0pXG5cdGRpc3BhdGNoUGVyaW9kaWNNb2RlbEZldGNoUmVxdWVzdCh7XG5cdFx0bW9kZWxOYW1lOiAnZXh0ZXJuYWxUZXJtcycsXG5cdFx0cGVyaW9kOiAxMDAwICogNjAgKiA2MCAqIDI0LCAvLyBncmFiIGV4dGVybmFsIHRlcm1zIG9uY2UgYSBkYXkgKGZvciB0aG9zZSB0YWItbGVhdmVyLW9wZW5lcnMpXG5cdFx0dGFza0lkOiAnZXh0ZXJuYWwtdGVybS1yZWZyZXNoJ1xuXHR9KVxuXHRkaXNwYXRjaFBlcmlvZGljTW9kZWxGZXRjaFJlcXVlc3Qoe1xuXHRcdG1vZGVsTmFtZTogJ2lkZW50aXR5UHJvdmlkZXJzJyxcblx0XHRwZXJpb2Q6IDEwMDAgKiA2MCAqIDYwICogMjQsIC8vIGdyYWIgaWRlbnRpdHkgcHJvdmlkZXJzIG9uY2UgYSBkYXkgKGZvciB0aG9zZSB0YWItbGVhdmVyLW9wZW5lcnMpXG5cdFx0dGFza0lkOiAnaWRlbnRpdHktcHJvdmlkZXItcmVmcmVzaCdcblx0fSlcblx0ZGlzcGF0Y2hQZXJpb2RpY01vZGVsRmV0Y2hSZXF1ZXN0KHtcblx0XHRtb2RlbE5hbWU6ICdjbGllbnQnLFxuXHRcdHBlcmlvZDogMTAwMCAqIDYwICogMTUsIC8vIGdyYWIgY2xpZW50IGV2ZXJ5IDE1IG1pbnV0ZXNcblx0XHR0YXNrSWQ6ICdjbGllbnQtcmVmcmVzaCdcblx0fSlcblx0ZGlzcGF0Y2hQZXJpb2RpY01vZGVsRmV0Y2hSZXF1ZXN0KHtcblx0XHRtb2RlbE5hbWU6ICd0aW1lJyxcblx0XHRwZXJpb2Q6IDEwMDAgKiA2MCAqIDE1LCAvLyBncmFiIGFjY3VyYXRlIHNlcnZlciB0aW1lIGV2ZXJ5IDE1IG1pbnV0ZXNcblx0XHR0YXNrSWQ6ICd0aW1lLXN5bmMnLFxuXHRcdG5vU3RvcmU6IHRydWVcblx0fSlcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsaUNBQWlDLFFBQVEsa0JBQWtCO0FBRXBFLGVBQWUsU0FBU0MsbUJBQW1CQSxDQUFBLEVBQUc7RUFDN0NELGlDQUFpQyxDQUFDO0lBQ2pDRSxTQUFTLEVBQUUsZUFBZTtJQUMxQkMsTUFBTSxFQUFFLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUU7SUFBRTtJQUM3QkMsTUFBTSxFQUFFO0VBQ1QsQ0FBQyxDQUFDO0VBQ0ZKLGlDQUFpQyxDQUFDO0lBQ2pDRSxTQUFTLEVBQUUsZUFBZTtJQUMxQkMsTUFBTSxFQUFFLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUU7SUFBRTtJQUM3QkMsTUFBTSxFQUFFO0VBQ1QsQ0FBQyxDQUFDO0VBQ0ZKLGlDQUFpQyxDQUFDO0lBQ2pDRSxTQUFTLEVBQUUsbUJBQW1CO0lBQzlCQyxNQUFNLEVBQUUsSUFBSSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRTtJQUFFO0lBQzdCQyxNQUFNLEVBQUU7RUFDVCxDQUFDLENBQUM7RUFDRkosaUNBQWlDLENBQUM7SUFDakNFLFNBQVMsRUFBRSxRQUFRO0lBQ25CQyxNQUFNLEVBQUUsSUFBSSxHQUFHLEVBQUUsR0FBRyxFQUFFO0lBQUU7SUFDeEJDLE1BQU0sRUFBRTtFQUNULENBQUMsQ0FBQztFQUNGSixpQ0FBaUMsQ0FBQztJQUNqQ0UsU0FBUyxFQUFFLE1BQU07SUFDakJDLE1BQU0sRUFBRSxJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUU7SUFBRTtJQUN4QkMsTUFBTSxFQUFFLFdBQVc7SUFDbkJDLE9BQU8sRUFBRTtFQUNWLENBQUMsQ0FBQztBQUNIIiwiaWdub3JlTGlzdCI6W119
|
|
@@ -1,25 +1,28 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
function* lockDownBrowserSaga(runIndefinitely = true) {
|
|
1
|
+
import { push } from 'connected-react-router';
|
|
2
|
+
import { stringify } from 'query-string';
|
|
3
|
+
import { put, take } from 'redux-saga/effects';
|
|
4
|
+
import { isModelTryFetchErrorAction } from '../actions';
|
|
5
|
+
export default function lockDownBrowserSaga() {
|
|
6
|
+
let runIndefinitely = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
|
|
7
|
+
return function* () {
|
|
9
8
|
do {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
9
|
+
let message = '';
|
|
10
|
+
|
|
11
|
+
// wait for any LDB error
|
|
12
|
+
yield take(action => {
|
|
13
|
+
if (!isModelTryFetchErrorAction(action)) return false;
|
|
14
|
+
message = action.errorData?.detail || '';
|
|
15
|
+
return message.includes('LockDown Browser');
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
// redirect to known LDB error route
|
|
19
|
+
yield put(push({
|
|
20
|
+
pathname: '/error',
|
|
21
|
+
search: stringify({
|
|
22
|
+
message
|
|
23
|
+
})
|
|
24
|
+
}));
|
|
24
25
|
} while (runIndefinitely);
|
|
26
|
+
}();
|
|
25
27
|
}
|
|
28
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJwdXNoIiwic3RyaW5naWZ5IiwicHV0IiwidGFrZSIsImlzTW9kZWxUcnlGZXRjaEVycm9yQWN0aW9uIiwibG9ja0Rvd25Ccm93c2VyU2FnYSIsInJ1bkluZGVmaW5pdGVseSIsImFyZ3VtZW50cyIsImxlbmd0aCIsInVuZGVmaW5lZCIsIm1lc3NhZ2UiLCJhY3Rpb24iLCJlcnJvckRhdGEiLCJkZXRhaWwiLCJpbmNsdWRlcyIsInBhdGhuYW1lIiwic2VhcmNoIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3JlZHV4L3NhZ2FzL2xvY2tEb3duQnJvd3NlckVycm9yU2FnYS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBwdXNoIH0gZnJvbSAnY29ubmVjdGVkLXJlYWN0LXJvdXRlcidcbmltcG9ydCB7IHN0cmluZ2lmeSB9IGZyb20gJ3F1ZXJ5LXN0cmluZydcbmltcG9ydCB7IEFueUFjdGlvbiB9IGZyb20gJ3JlZHV4J1xuaW1wb3J0IHsgcHV0LCB0YWtlIH0gZnJvbSAncmVkdXgtc2FnYS9lZmZlY3RzJ1xuaW1wb3J0IHsgaXNNb2RlbFRyeUZldGNoRXJyb3JBY3Rpb24gfSBmcm9tICcuLi9hY3Rpb25zJ1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiogbG9ja0Rvd25Ccm93c2VyU2FnYShydW5JbmRlZmluaXRlbHkgPSB0cnVlKSB7XG5cdGRvIHtcblx0XHRsZXQgbWVzc2FnZSA9ICcnXG5cblx0XHQvLyB3YWl0IGZvciBhbnkgTERCIGVycm9yXG5cdFx0eWllbGQgdGFrZSgoYWN0aW9uOiBBbnlBY3Rpb24pID0+IHtcblx0XHRcdGlmICghaXNNb2RlbFRyeUZldGNoRXJyb3JBY3Rpb24oYWN0aW9uKSkgcmV0dXJuIGZhbHNlXG5cdFx0XHRtZXNzYWdlID0gYWN0aW9uLmVycm9yRGF0YT8uZGV0YWlsIHx8ICcnXG5cdFx0XHRyZXR1cm4gbWVzc2FnZS5pbmNsdWRlcygnTG9ja0Rvd24gQnJvd3NlcicpXG5cdFx0fSlcblxuXHRcdC8vIHJlZGlyZWN0IHRvIGtub3duIExEQiBlcnJvciByb3V0ZVxuXHRcdHlpZWxkIHB1dChcblx0XHRcdHB1c2goe1xuXHRcdFx0XHRwYXRobmFtZTogJy9lcnJvcicsXG5cdFx0XHRcdHNlYXJjaDogc3RyaW5naWZ5KHsgbWVzc2FnZSB9KVxuXHRcdFx0fSlcblx0XHQpXG5cdH0gd2hpbGUgKHJ1bkluZGVmaW5pdGVseSlcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsSUFBSSxRQUFRLHdCQUF3QjtBQUM3QyxTQUFTQyxTQUFTLFFBQVEsY0FBYztBQUV4QyxTQUFTQyxHQUFHLEVBQUVDLElBQUksUUFBUSxvQkFBb0I7QUFDOUMsU0FBU0MsMEJBQTBCLFFBQVEsWUFBWTtBQUV2RCxlQUFlLFNBQVVDLG1CQUFtQkEsQ0FBQTtFQUFBLElBQUNDLGVBQWUsR0FBQUMsU0FBQSxDQUFBQyxNQUFBLFFBQUFELFNBQUEsUUFBQUUsU0FBQSxHQUFBRixTQUFBLE1BQUcsSUFBSTtFQUFBLG9CQUFFO0lBQ3BFLEdBQUc7TUFDRixJQUFJRyxPQUFPLEdBQUcsRUFBRTs7TUFFaEI7TUFDQSxNQUFNUCxJQUFJLENBQUVRLE1BQWlCLElBQUs7UUFDakMsSUFBSSxDQUFDUCwwQkFBMEIsQ0FBQ08sTUFBTSxDQUFDLEVBQUUsT0FBTyxLQUFLO1FBQ3JERCxPQUFPLEdBQUdDLE1BQU0sQ0FBQ0MsU0FBUyxFQUFFQyxNQUFNLElBQUksRUFBRTtRQUN4QyxPQUFPSCxPQUFPLENBQUNJLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQztNQUM1QyxDQUFDLENBQUM7O01BRUY7TUFDQSxNQUFNWixHQUFHLENBQ1JGLElBQUksQ0FBQztRQUNKZSxRQUFRLEVBQUUsUUFBUTtRQUNsQkMsTUFBTSxFQUFFZixTQUFTLENBQUM7VUFBRVM7UUFBUSxDQUFDO01BQzlCLENBQUMsQ0FDRixDQUFDO0lBQ0YsQ0FBQyxRQUFRSixlQUFlO0VBQ3pCLENBQUM7QUFBQSIsImlnbm9yZUxpc3QiOltdfQ==
|