studiokit-scaffolding-js 7.6.2 → 7.7.0
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/LICENSE +21 -21
- package/README.md +141 -141
- package/lib/components/AccessibilityStatement.js +1 -1
- package/lib/components/AccessibleOverlayTrigger.js +3 -3
- package/lib/components/ActionList.js +1 -1
- package/lib/components/AlertDialog.js +1 -1
- package/lib/components/AlertWithIcon.js +1 -1
- package/lib/components/Buttons/PopoverButton.js +1 -1
- package/lib/components/ConnectedModal.js +3 -3
- package/lib/components/Downtime.js +1 -1
- package/lib/components/Dropdowns/GroupsDropdown.js +1 -1
- package/lib/components/Dropdowns/ManagedNavDropdown.js +4 -4
- package/lib/components/Dropdowns/UserDropdown.js +2 -2
- package/lib/components/Dropdowns/index.js +1 -1
- package/lib/components/EmptyCoursesMessage.js +1 -1
- package/lib/components/EntityOwnerList.js +1 -1
- package/lib/components/Error.js +1 -1
- package/lib/components/ErrorBoundary.js +1 -1
- package/lib/components/ErrorMessage.js +1 -1
- package/lib/components/ExpiringSoonAlert.d.ts +2 -0
- package/lib/components/ExpiringSoonAlert.js +142 -0
- package/lib/components/Footer/index.css +59 -59
- package/lib/components/Footer/index.js +1 -1
- package/lib/components/Forms/DateField.js +1 -1
- package/lib/components/Forms/TimeField.js +1 -1
- package/lib/components/Forms/index.js +1 -1
- package/lib/components/FullscreenHeader.js +1 -1
- package/lib/components/Groups/CreateEditCopySaveButtons.js +1 -1
- package/lib/components/Groups/ExternalGroups/Attach.js +1 -1
- package/lib/components/Groups/ExternalGroups/Table.js +1 -1
- package/lib/components/Groups/GroupCreateOrEditCommonProps.js +1 -1
- package/lib/components/Groups/RosterSyncInfo.js +1 -1
- package/lib/components/HOC/AccessibleAppComponent.js +6 -6
- package/lib/components/HOC/ActivityRequiredComponent.js +50 -50
- package/lib/components/HOC/AsyncComponent.js +1 -1
- package/lib/components/HOC/AuthenticatedComponent.js +1 -1
- package/lib/components/HOC/CollectionComponent.js +11 -11
- package/lib/components/HOC/CollectionFirstItemComponent.js +4 -4
- package/lib/components/HOC/CollectionItemComponent.js +11 -11
- package/lib/components/HOC/ConnectedModalComponent.js +15 -15
- package/lib/components/HOC/DataDependentComponent.js +1 -1
- package/lib/components/HOC/EntityComponent.js +12 -12
- package/lib/components/HOC/FullscreenModalComponent.js +15 -15
- package/lib/components/HOC/GroupActivityRequiredComponent.js +19 -19
- package/lib/components/HOC/GuidComponent.js +5 -5
- package/lib/components/HOC/ModelContextDependencyVerifyComponent.js +7 -7
- package/lib/components/HOC/ModelErrorRedirectComponent.js +12 -12
- package/lib/components/HOC/SearchPersistorComponent.js +43 -43
- package/lib/components/HOC/UnauthenticatedComponent.js +1 -1
- package/lib/components/HOC/UserComponent.js +1 -1
- package/lib/components/Icons/IconAlphaList.js +1 -1
- package/lib/components/Icons/IconExternalUser.js +1 -1
- package/lib/components/Icons/IconImpersonation.js +1 -1
- package/lib/components/Icons/IconSheriff.js +2 -2
- package/lib/components/Icons/IconStopImpersonating.js +1 -1
- package/lib/components/Icons/IconTable.js +1 -1
- package/lib/components/Icons/IconTableDeleteCol.js +1 -1
- package/lib/components/Icons/IconTableDeleteRow.js +1 -1
- package/lib/components/Icons/IconTableInsertCol.js +1 -1
- package/lib/components/Icons/IconTableInsertRow.js +1 -1
- package/lib/components/Impersonation/Button.js +1 -1
- package/lib/components/Impersonation/Link.js +1 -1
- package/lib/components/Impersonation/UserDetail.css +24 -24
- package/lib/components/Impersonation/UserDetail.js +3 -3
- package/lib/components/LoadErrorAlert.js +1 -1
- package/lib/components/Loading.js +1 -1
- package/lib/components/LockDownBrowser/Check.js +1 -1
- package/lib/components/LockDownBrowser/ExitButton.js +1 -1
- package/lib/components/LockDownBrowser/Launch.js +1 -1
- package/lib/components/Lti/Confirm.js +1 -1
- package/lib/components/Lti/CreateNonLtiGroupAlertDialog.js +1 -1
- package/lib/components/Lti/Launch.js +1 -1
- package/lib/components/Lti/LaunchGroup.js +1 -1
- package/lib/components/ManageTable.js +1 -1
- package/lib/components/ManageTableNoDataComponent.js +1 -1
- package/lib/components/NewVersionAlert.js +1 -1
- package/lib/components/NotFound.js +1 -1
- package/lib/components/Notifications.js +1 -1
- package/lib/components/PaginationNextButton.js +1 -1
- package/lib/components/PaginationPreviousButton.js +1 -1
- package/lib/components/Quill/CustomToolbar.js +1 -1
- package/lib/components/Quill/Formats/Image.js +5 -5
- package/lib/components/Quill/Formats/List.js +3 -3
- package/lib/components/Quill/Formats/Video.js +3 -3
- package/lib/components/Quill/ImageDropModule.js +17 -17
- package/lib/components/Quill/ImageWarning.js +1 -1
- package/lib/components/Quill/ImageWithAltTextModal.js +1 -1
- package/lib/components/Quill/Specs/CustomImageSpec.js +7 -7
- package/lib/components/Quill/Specs/CustomVideoSpec.js +9 -9
- package/lib/components/Quill/TableModule/Blots/BaseTableBlot.js +8 -8
- package/lib/components/Quill/TableModule/Blots/TableBlot.js +1 -1
- package/lib/components/Quill/TableModule/Blots/TableBodyBlot.js +1 -1
- package/lib/components/Quill/TableModule/Blots/TableCellBlot.js +1 -1
- package/lib/components/Quill/TableModule/Blots/TableContainer.js +1 -1
- package/lib/components/Quill/TableModule/Blots/TableRowBlot.js +1 -1
- package/lib/components/Quill/TableModule/constants.js +1 -1
- package/lib/components/Quill/TableModule/index.css +171 -171
- package/lib/components/Quill/TableModule/index.js +1 -1
- package/lib/components/Quill/TableModule/utils.js +1 -1
- package/lib/components/Quill/accessibilityFix.js +14 -14
- package/lib/components/Quill/index.js +1 -1
- package/lib/components/RefreshIndicator/Bordered.js +1 -1
- package/lib/components/RefreshIndicator/Inline.js +1 -1
- package/lib/components/RefreshIndicator/index.js +1 -1
- package/lib/components/SearchControls.js +1 -1
- package/lib/components/SentryRoute.js +1 -1
- package/lib/components/Tables/RoleFilter.js +1 -1
- package/lib/components/Tables/TextFilter.js +1 -1
- package/lib/components/TimeZoneInfo.js +1 -1
- package/lib/components/UserRoles/Add.js +1 -1
- package/lib/components/UserRoles/Context.js +4 -4
- package/lib/components/UserRoles/RoleCell.js +1 -1
- package/lib/components/UserRoles/Select.js +1 -1
- package/lib/components/UserRoles/Table.js +1 -1
- package/lib/components/UserRoles/index.js +3 -3
- package/lib/config/eslint/index.js +1 -1
- package/lib/config/eslint/lib/order.js +1 -1
- package/lib/config/eslint/lib/typescript.js +1 -1
- package/lib/config/eslint/react.js +1 -1
- package/lib/config/eslint/rules/accessibleOverlayTrigger.js +1 -1
- package/lib/config/eslint/studiokit.js +1 -1
- package/lib/constants/baseActivity.js +1 -1
- package/lib/constants/baseRole.js +1 -1
- package/lib/constants/configuration.js +1 -1
- package/lib/constants/externalProviderType.js +1 -1
- package/lib/constants/fetchErrorData.js +1 -1
- package/lib/constants/index.js +1 -1
- package/lib/constants/lockDownBrowser.js +1 -1
- package/lib/constants/mockData.d.ts +4 -1
- package/lib/constants/mockData.js +30 -4
- package/lib/constants/modelStatus.js +1 -1
- package/lib/constants/notificationType.js +1 -1
- package/lib/constants/number.d.ts +1 -0
- package/lib/constants/number.js +8 -0
- package/lib/constants/operatingSystem.js +1 -1
- package/lib/constants/shard.js +1 -1
- package/lib/constants/slot.js +1 -1
- package/lib/constants/svgMock.js +1 -1
- package/lib/constants/table.js +1 -1
- package/lib/constants/tier.js +1 -1
- package/lib/constants/userRole.js +1 -1
- package/lib/css/base/_base.css +98 -98
- package/lib/css/base/_print.css +66 -66
- package/lib/css/base/_typography.css +130 -130
- package/lib/css/components/_actionList.css +70 -70
- package/lib/css/components/_alert.css +86 -86
- package/lib/css/components/_bootstrap-grid.css +27 -27
- package/lib/css/components/_buttons.css +435 -435
- package/lib/css/components/_forms.css +157 -157
- package/lib/css/components/_menu.css +55 -55
- package/lib/css/components/_modals.css +132 -132
- package/lib/css/components/_quill.css +329 -329
- package/lib/css/components/_tables.css +506 -506
- package/lib/css/components/_tags.css +12 -12
- package/lib/css/index-with-variables.css +15 -15
- package/lib/css/index.css +14 -14
- package/lib/css/utils/_border.css +463 -463
- package/lib/css/utils/_color.css +317 -317
- package/lib/css/utils/_display.css +307 -307
- package/lib/css/utils/_focus.css +12 -12
- package/lib/css/utils/_general.css +50 -50
- package/lib/css/utils/_icon.css +35 -35
- package/lib/css/utils/_text.css +25 -25
- package/lib/css/utils/_width.css +60 -60
- package/lib/css/variables.css +100 -100
- package/lib/endpointMappings.js +23 -10
- package/lib/hooks/useCollection.js +1 -1
- package/lib/hooks/useCollectionConfiguration.js +7 -7
- package/lib/hooks/useCollectionItem.js +1 -1
- package/lib/hooks/useEventCalback.js +13 -13
- package/lib/hooks/useGuid.js +3 -3
- package/lib/hooks/usePeriodicallyUpdatingState.d.ts +8 -0
- package/lib/hooks/usePeriodicallyUpdatingState.js +59 -0
- package/lib/hooks/usePrevious.js +23 -23
- package/lib/index.js +1 -1
- package/lib/redux/actionCreator.js +1 -1
- package/lib/redux/actions/AuthAction.d.ts +16 -5
- package/lib/redux/actions/AuthAction.js +19 -9
- package/lib/redux/actions/ModalAction.js +1 -1
- package/lib/redux/actions/ModelAction.js +19 -19
- package/lib/redux/actions/NotificationAction.js +1 -1
- package/lib/redux/actions/SearchAction.js +1 -1
- package/lib/redux/actions/index.js +1 -1
- package/lib/redux/configureReducers.js +7 -7
- package/lib/redux/configureStore.js +1 -1
- package/lib/redux/helpers.js +1 -1
- package/lib/redux/reducers/authReducer.d.ts +2 -2
- package/lib/redux/reducers/authReducer.js +30 -15
- package/lib/redux/reducers/index.js +1 -1
- package/lib/redux/reducers/modalsReducer.js +1 -1
- package/lib/redux/reducers/modelsReducer.js +48 -48
- package/lib/redux/reducers/notificationsReducer.js +1 -1
- package/lib/redux/reducers/searchReducer.js +9 -9
- package/lib/redux/sagas/appInsightsSaga.js +2 -2
- package/lib/redux/sagas/authSaga.d.ts +7 -3
- package/lib/redux/sagas/authSaga.js +286 -102
- package/lib/redux/sagas/caliperSaga.js +20 -17
- package/lib/redux/sagas/clockOffsetSaga.js +9 -9
- package/lib/redux/sagas/configurationSaga.js +1 -1
- package/lib/redux/sagas/downtimeApiErrorSaga.js +1 -1
- package/lib/redux/sagas/errorSaga.js +1 -1
- package/lib/redux/sagas/googleAnalyticsSaga.js +2 -2
- package/lib/redux/sagas/identityProviderSaga.js +24 -11
- package/lib/redux/sagas/initialDataLoadSaga.js +1 -1
- package/lib/redux/sagas/lockDownBrowserErrorSaga.js +1 -1
- package/lib/redux/sagas/modelFetchSaga.js +66 -79
- package/lib/redux/sagas/noStoreSaga.js +1 -1
- package/lib/redux/sagas/postLoginDataSaga.js +7 -7
- package/lib/redux/sagas/postLoginRedirectSaga.js +5 -5
- package/lib/redux/sagas/rootSaga.js +8 -8
- package/lib/redux/sagas/sentrySaga.js +2 -2
- package/lib/redux/sagas/userIdSaga.js +2 -2
- package/lib/services/codeProviderService.js +1 -1
- package/lib/services/documentService.js +4 -4
- package/lib/services/fetchService.js +26 -26
- package/lib/services/mockAuthPersistenceService.d.ts +3 -0
- package/lib/services/mockAuthPersistenceService.js +56 -0
- package/lib/services/persistenceService.d.ts +3 -3
- package/lib/services/persistenceService.js +37 -6
- package/lib/services/ticketProviderService.js +1 -1
- package/lib/services/userActivityService.d.ts +5 -0
- package/lib/services/userActivityService.js +21 -0
- package/lib/services/windowService.js +1 -1
- package/lib/startup.js +18 -18
- package/lib/types/AppConfiguration.d.ts +15 -0
- package/lib/types/AppConfiguration.js +1 -1
- package/lib/types/Artifact.js +1 -1
- package/lib/types/BaseReduxState.js +1 -1
- package/lib/types/Client.js +1 -1
- package/lib/types/Collection.js +1 -1
- package/lib/types/Configuration.js +1 -1
- package/lib/types/DeepLinkingResponseRequest.js +1 -1
- package/lib/types/DeletableModel.js +1 -1
- package/lib/types/Event.js +1 -1
- package/lib/types/ExternalGroup.js +1 -1
- package/lib/types/ExternalProvider.js +1 -1
- package/lib/types/ExternalTerm.js +1 -1
- package/lib/types/Group.js +1 -1
- package/lib/types/IdentityProvider.js +1 -1
- package/lib/types/LtiLaunch.js +1 -1
- package/lib/types/NameOnlyEntity.js +1 -1
- package/lib/types/Notification.js +1 -1
- package/lib/types/OptionalRecord.js +1 -1
- package/lib/types/OwnerSchedule.js +1 -1
- package/lib/types/PropertyOfType.js +1 -1
- package/lib/types/Quill.js +1 -1
- package/lib/types/RoleDescription.js +1 -1
- package/lib/types/Search.js +1 -1
- package/lib/types/SimpleLocation.js +1 -1
- package/lib/types/UniTime.js +1 -1
- package/lib/types/User.js +1 -1
- package/lib/types/UserRole.js +1 -1
- package/lib/types/auth/AuthPersistenceService.d.ts +17 -0
- package/lib/types/auth/AuthPersistenceService.js +6 -0
- package/lib/types/auth/AuthState.d.ts +1 -0
- package/lib/types/auth/AuthState.js +1 -1
- package/lib/types/auth/CasV1LoginRequestBody.js +1 -1
- package/lib/types/auth/ClientCredentials.js +1 -1
- package/lib/types/auth/CodeProviderService.js +1 -1
- package/lib/types/auth/LocalLoginRequestBody.js +1 -1
- package/lib/types/auth/TicketProviderService.js +1 -1
- package/lib/types/auth/index.d.ts +1 -1
- package/lib/types/auth/index.js +12 -12
- package/lib/types/externals.d.js +1 -1
- package/lib/types/index.js +1 -1
- package/lib/types/net/EndpointConfig.js +1 -1
- package/lib/types/net/EndpointMapping.js +1 -1
- package/lib/types/net/EndpointMappings.js +1 -1
- package/lib/types/net/ErrorHandler.d.ts +1 -1
- package/lib/types/net/ErrorHandler.js +1 -1
- package/lib/types/net/FetchCancelledData.js +1 -1
- package/lib/types/net/FetchConfig.d.ts +1 -0
- package/lib/types/net/FetchConfig.js +1 -1
- package/lib/types/net/FetchErrorData.js +1 -1
- package/lib/types/net/FetchResult.js +1 -1
- package/lib/types/net/HTTPMethod.js +1 -1
- package/lib/types/net/HTTPStatusCode.js +1 -1
- package/lib/types/net/Metadata.js +1 -1
- package/lib/types/net/Model.js +1 -1
- package/lib/types/net/ModelCollection.js +1 -1
- package/lib/types/net/ModelsState.js +1 -1
- package/lib/types/net/OAuthToken.d.ts +4 -3
- package/lib/types/net/OAuthToken.js +1 -1
- package/lib/types/net/OAuthTokenResponse.d.ts +2 -0
- package/lib/types/net/OAuthTokenResponse.js +6 -0
- package/lib/types/net/TokenAccessFunction.d.ts +2 -2
- package/lib/types/net/TokenAccessFunction.js +1 -1
- package/lib/types/net/index.d.ts +1 -1
- package/lib/types/net/index.js +5 -5
- package/lib/utils/auth.d.ts +10 -0
- package/lib/utils/auth.js +55 -0
- package/lib/utils/baseActivity.js +87 -87
- package/lib/utils/baseRole.js +1 -1
- package/lib/utils/collection.js +20 -20
- package/lib/utils/cookies.js +1 -1
- package/lib/utils/date.js +111 -111
- package/lib/utils/dom.js +42 -42
- package/lib/utils/domainIdentifier.js +1 -1
- package/lib/utils/entityUserRole.js +1 -1
- package/lib/utils/error.js +1 -1
- package/lib/utils/events.js +4 -4
- package/lib/utils/externalGroup.js +1 -1
- package/lib/utils/externalProviders.js +1 -1
- package/lib/utils/externalTerms.js +1 -1
- package/lib/utils/fetch.js +10 -10
- package/lib/utils/group.js +1 -1
- package/lib/utils/groupDates.js +1 -1
- package/lib/utils/groupRoles.js +1 -1
- package/lib/utils/lockDownBrowser.js +1 -1
- package/lib/utils/logger.js +1 -1
- package/lib/utils/lti.js +1 -1
- package/lib/utils/model.js +5 -5
- package/lib/utils/number.js +11 -11
- package/lib/utils/promise.js +1 -1
- package/lib/utils/quill.js +16 -16
- package/lib/utils/route.js +1 -1
- package/lib/utils/search.js +1 -1
- package/lib/utils/serviceWorker.js +1 -1
- package/lib/utils/shard.js +9 -9
- package/lib/utils/sort.js +1 -1
- package/lib/utils/string.js +1 -1
- package/lib/utils/table.js +4 -4
- package/lib/utils/timer.d.ts +37 -0
- package/lib/utils/timer.js +92 -0
- package/lib/utils/timezone.js +1 -1
- package/lib/utils/url.js +26 -26
- package/lib/utils/user.js +1 -1
- package/lib/utils/userActivity.d.ts +7 -0
- package/lib/utils/userActivity.js +31 -0
- package/lib/utils/userAgent.js +1 -1
- package/lib/utils/userRole.js +16 -16
- package/package.json +204 -203
- package/lib/services/dateService.d.ts +0 -4
- package/lib/services/dateService.js +0 -18
- package/lib/services/oauthPersistenceService.d.ts +0 -2
- package/lib/services/oauthPersistenceService.js +0 -30
- package/lib/types/auth/OAuthPersistenceService.d.ts +0 -9
- package/lib/types/auth/OAuthPersistenceService.js +0 -6
- package/lib/types/net/OAuthTokenOrNull.d.ts +0 -2
- package/lib/types/net/OAuthTokenOrNull.js +0 -6
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Calculates the time components (hours, minutes, seconds) from a total number of seconds.
|
|
3
|
+
*
|
|
4
|
+
* @param timerSeconds how many seconds remain on a timer
|
|
5
|
+
* @returns an object with each of those components, by name
|
|
6
|
+
*/
|
|
7
|
+
export declare const calculateTimeLimitTimeComponents: (timerSeconds: number) => {
|
|
8
|
+
hours: number;
|
|
9
|
+
minutes: number;
|
|
10
|
+
seconds: number;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Format and display a timer duration for use with screen readers
|
|
14
|
+
*
|
|
15
|
+
* @param hours timer hours
|
|
16
|
+
* @param minutes timer minutes
|
|
17
|
+
* @param seconds timer seconds, if any
|
|
18
|
+
* @param isDisplayingRemaining whether the timer is displaying remaining minutes. changes to say "remaining" instead of "duration".
|
|
19
|
+
* @param useLiveRegion whether to have the screen reader announce periodic updates
|
|
20
|
+
*
|
|
21
|
+
* @returns string with the specified format
|
|
22
|
+
*/
|
|
23
|
+
export declare const displayScreenReaderTimeLimit: (hours: number, minutes: number, seconds?: number, isDisplayingRemaining?: boolean, useLiveRegion?: boolean) => JSX.Element;
|
|
24
|
+
/**
|
|
25
|
+
* Format and display timer seconds as "hh:mm:ss", with hidden screen reader compatible text.
|
|
26
|
+
*
|
|
27
|
+
* @param timerSeconds number of timer seconds
|
|
28
|
+
* @param isDisplayingRemaining whether the timer is displaying remaining seconds. changes to say "remaining" instead of "duration".
|
|
29
|
+
* @param hideHours whether to hide the hours, and display only "mm:ss". takes no effect if hours is greater than 0.
|
|
30
|
+
*/
|
|
31
|
+
export declare const displayDigitalTimerSeconds: (timerSeconds: number, isDisplayingRemaining?: boolean, hideHours?: boolean) => JSX.Element;
|
|
32
|
+
/**
|
|
33
|
+
* Format and display timer minutes as "X hr, Y min"
|
|
34
|
+
*
|
|
35
|
+
* @param timerMinutes number of timer minutes
|
|
36
|
+
*/
|
|
37
|
+
export declare const displayShortTimerMinutes: (timerMinutes: number) => JSX.Element;
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.displayShortTimerMinutes = exports.displayScreenReaderTimeLimit = exports.displayDigitalTimerSeconds = exports.calculateTimeLimitTimeComponents = void 0;
|
|
7
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
8
|
+
/**
|
|
9
|
+
* Calculates the time components (hours, minutes, seconds) from a total number of seconds.
|
|
10
|
+
*
|
|
11
|
+
* @param timerSeconds how many seconds remain on a timer
|
|
12
|
+
* @returns an object with each of those components, by name
|
|
13
|
+
*/
|
|
14
|
+
const calculateTimeLimitTimeComponents = timerSeconds => {
|
|
15
|
+
const seconds = timerSeconds % 60;
|
|
16
|
+
const minutesAndSeconds = timerSeconds % 3600;
|
|
17
|
+
const minutes = (minutesAndSeconds - seconds) / 60;
|
|
18
|
+
const hours = (timerSeconds - minutesAndSeconds) / 3600;
|
|
19
|
+
return {
|
|
20
|
+
hours,
|
|
21
|
+
minutes,
|
|
22
|
+
seconds
|
|
23
|
+
};
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Format and display a timer duration for use with screen readers
|
|
28
|
+
*
|
|
29
|
+
* @param hours timer hours
|
|
30
|
+
* @param minutes timer minutes
|
|
31
|
+
* @param seconds timer seconds, if any
|
|
32
|
+
* @param isDisplayingRemaining whether the timer is displaying remaining minutes. changes to say "remaining" instead of "duration".
|
|
33
|
+
* @param useLiveRegion whether to have the screen reader announce periodic updates
|
|
34
|
+
*
|
|
35
|
+
* @returns string with the specified format
|
|
36
|
+
*/
|
|
37
|
+
exports.calculateTimeLimitTimeComponents = calculateTimeLimitTimeComponents;
|
|
38
|
+
const displayScreenReaderTimeLimit = function (hours, minutes) {
|
|
39
|
+
let seconds = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
|
|
40
|
+
let isDisplayingRemaining = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
|
|
41
|
+
let useLiveRegion = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
|
|
42
|
+
const hoursSpeech = `${hours} hour${hours !== 1 ? 's' : ''}`;
|
|
43
|
+
const minutesSpeech = `${minutes} minute${minutes !== 1 ? 's' : ''}`;
|
|
44
|
+
const secondsSpeech = `${seconds} second${seconds !== 1 ? 's' : ''}`;
|
|
45
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
|
|
46
|
+
role: useLiveRegion ? 'alert' : '',
|
|
47
|
+
"aria-live": useLiveRegion ? 'polite' : 'off',
|
|
48
|
+
className: "sr-only",
|
|
49
|
+
children: `${hours > 0 ? hoursSpeech : ''}${hours > 0 && minutes > 0 ? ' ' : ''}${minutes > 0 ? minutesSpeech : ''}${(hours > 0 || minutes > 0) && seconds > 0 ? ' ' : ''}${seconds > 0 ? secondsSpeech : ''}${isDisplayingRemaining ? ' remaining' : ' duration'}.`
|
|
50
|
+
});
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Format and display timer seconds as "hh:mm:ss", with hidden screen reader compatible text.
|
|
55
|
+
*
|
|
56
|
+
* @param timerSeconds number of timer seconds
|
|
57
|
+
* @param isDisplayingRemaining whether the timer is displaying remaining seconds. changes to say "remaining" instead of "duration".
|
|
58
|
+
* @param hideHours whether to hide the hours, and display only "mm:ss". takes no effect if hours is greater than 0.
|
|
59
|
+
*/
|
|
60
|
+
exports.displayScreenReaderTimeLimit = displayScreenReaderTimeLimit;
|
|
61
|
+
const displayDigitalTimerSeconds = function (timerSeconds) {
|
|
62
|
+
let isDisplayingRemaining = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
63
|
+
let hideHours = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
|
64
|
+
const {
|
|
65
|
+
hours,
|
|
66
|
+
minutes,
|
|
67
|
+
seconds
|
|
68
|
+
} = calculateTimeLimitTimeComponents(timerSeconds);
|
|
69
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
|
|
70
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)("span", {
|
|
71
|
+
"aria-hidden": true,
|
|
72
|
+
children: [hours > 0 || !hideHours ? hours >= 10 ? `${hours}:` : `0${hours}:` : '', minutes >= 10 ? minutes : `0${minutes}`, ":", seconds >= 10 ? seconds : `0${seconds}`]
|
|
73
|
+
}), displayScreenReaderTimeLimit(hours, minutes, seconds, isDisplayingRemaining)]
|
|
74
|
+
});
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Format and display timer minutes as "X hr, Y min"
|
|
79
|
+
*
|
|
80
|
+
* @param timerMinutes number of timer minutes
|
|
81
|
+
*/
|
|
82
|
+
exports.displayDigitalTimerSeconds = displayDigitalTimerSeconds;
|
|
83
|
+
const displayShortTimerMinutes = timerMinutes => {
|
|
84
|
+
const hours = Math.floor(timerMinutes / 60);
|
|
85
|
+
// if a timer multiplier gives a fraction of a minute we round up
|
|
86
|
+
const minutes = Math.ceil(timerMinutes % 60);
|
|
87
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsxs)("span", {
|
|
88
|
+
children: [hours > 0 ? `${hours} hr` : '', hours > 0 && minutes > 0 ? ', ' : '', minutes > 0 ? `${minutes} min` : '']
|
|
89
|
+
});
|
|
90
|
+
};
|
|
91
|
+
exports.displayShortTimerMinutes = displayShortTimerMinutes;
|
|
92
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjYWxjdWxhdGVUaW1lTGltaXRUaW1lQ29tcG9uZW50cyIsInRpbWVyU2Vjb25kcyIsInNlY29uZHMiLCJtaW51dGVzQW5kU2Vjb25kcyIsIm1pbnV0ZXMiLCJob3VycyIsImV4cG9ydHMiLCJkaXNwbGF5U2NyZWVuUmVhZGVyVGltZUxpbWl0IiwiYXJndW1lbnRzIiwibGVuZ3RoIiwidW5kZWZpbmVkIiwiaXNEaXNwbGF5aW5nUmVtYWluaW5nIiwidXNlTGl2ZVJlZ2lvbiIsImhvdXJzU3BlZWNoIiwibWludXRlc1NwZWVjaCIsInNlY29uZHNTcGVlY2giLCJfanN4UnVudGltZSIsImpzeCIsInJvbGUiLCJjbGFzc05hbWUiLCJjaGlsZHJlbiIsImRpc3BsYXlEaWdpdGFsVGltZXJTZWNvbmRzIiwiaGlkZUhvdXJzIiwianN4cyIsIkZyYWdtZW50IiwiZGlzcGxheVNob3J0VGltZXJNaW51dGVzIiwidGltZXJNaW51dGVzIiwiTWF0aCIsImZsb29yIiwiY2VpbCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy90aW1lci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSB0aW1lIGNvbXBvbmVudHMgKGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzKSBmcm9tIGEgdG90YWwgbnVtYmVyIG9mIHNlY29uZHMuXG4gKlxuICogQHBhcmFtIHRpbWVyU2Vjb25kcyBob3cgbWFueSBzZWNvbmRzIHJlbWFpbiBvbiBhIHRpbWVyXG4gKiBAcmV0dXJucyBhbiBvYmplY3Qgd2l0aCBlYWNoIG9mIHRob3NlIGNvbXBvbmVudHMsIGJ5IG5hbWVcbiAqL1xuZXhwb3J0IGNvbnN0IGNhbGN1bGF0ZVRpbWVMaW1pdFRpbWVDb21wb25lbnRzID0gKHRpbWVyU2Vjb25kczogbnVtYmVyKSA9PiB7XG5cdGNvbnN0IHNlY29uZHMgPSB0aW1lclNlY29uZHMgJSA2MFxuXHRjb25zdCBtaW51dGVzQW5kU2Vjb25kcyA9IHRpbWVyU2Vjb25kcyAlIDM2MDBcblx0Y29uc3QgbWludXRlcyA9IChtaW51dGVzQW5kU2Vjb25kcyAtIHNlY29uZHMpIC8gNjBcblx0Y29uc3QgaG91cnMgPSAodGltZXJTZWNvbmRzIC0gbWludXRlc0FuZFNlY29uZHMpIC8gMzYwMFxuXHRyZXR1cm4geyBob3VycywgbWludXRlcywgc2Vjb25kcyB9XG59XG5cbi8qKlxuICogRm9ybWF0IGFuZCBkaXNwbGF5IGEgdGltZXIgZHVyYXRpb24gZm9yIHVzZSB3aXRoIHNjcmVlbiByZWFkZXJzXG4gKlxuICogQHBhcmFtIGhvdXJzIHRpbWVyIGhvdXJzXG4gKiBAcGFyYW0gbWludXRlcyB0aW1lciBtaW51dGVzXG4gKiBAcGFyYW0gc2Vjb25kcyB0aW1lciBzZWNvbmRzLCBpZiBhbnlcbiAqIEBwYXJhbSBpc0Rpc3BsYXlpbmdSZW1haW5pbmcgd2hldGhlciB0aGUgdGltZXIgaXMgZGlzcGxheWluZyByZW1haW5pbmcgbWludXRlcy4gY2hhbmdlcyB0byBzYXkgXCJyZW1haW5pbmdcIiBpbnN0ZWFkIG9mIFwiZHVyYXRpb25cIi5cbiAqIEBwYXJhbSB1c2VMaXZlUmVnaW9uIHdoZXRoZXIgdG8gaGF2ZSB0aGUgc2NyZWVuIHJlYWRlciBhbm5vdW5jZSBwZXJpb2RpYyB1cGRhdGVzXG4gKlxuICogQHJldHVybnMgc3RyaW5nIHdpdGggdGhlIHNwZWNpZmllZCBmb3JtYXRcbiAqL1xuZXhwb3J0IGNvbnN0IGRpc3BsYXlTY3JlZW5SZWFkZXJUaW1lTGltaXQgPSAoXG5cdGhvdXJzOiBudW1iZXIsXG5cdG1pbnV0ZXM6IG51bWJlcixcblx0c2Vjb25kcyA9IDAsXG5cdGlzRGlzcGxheWluZ1JlbWFpbmluZyA9IGZhbHNlLFxuXHR1c2VMaXZlUmVnaW9uID0gZmFsc2Vcbik6IEpTWC5FbGVtZW50ID0+IHtcblx0Y29uc3QgaG91cnNTcGVlY2ggPSBgJHtob3Vyc30gaG91ciR7aG91cnMgIT09IDEgPyAncycgOiAnJ31gXG5cdGNvbnN0IG1pbnV0ZXNTcGVlY2ggPSBgJHttaW51dGVzfSBtaW51dGUke21pbnV0ZXMgIT09IDEgPyAncycgOiAnJ31gXG5cdGNvbnN0IHNlY29uZHNTcGVlY2ggPSBgJHtzZWNvbmRzfSBzZWNvbmQke3NlY29uZHMgIT09IDEgPyAncycgOiAnJ31gXG5cdHJldHVybiAoXG5cdFx0PHNwYW4gcm9sZT17dXNlTGl2ZVJlZ2lvbiA/ICdhbGVydCcgOiAnJ30gYXJpYS1saXZlPXt1c2VMaXZlUmVnaW9uID8gJ3BvbGl0ZScgOiAnb2ZmJ30gY2xhc3NOYW1lPVwic3Itb25seVwiPntgJHtcblx0XHRcdGhvdXJzID4gMCA/IGhvdXJzU3BlZWNoIDogJydcblx0XHR9JHtob3VycyA+IDAgJiYgbWludXRlcyA+IDAgPyAnICcgOiAnJ30ke21pbnV0ZXMgPiAwID8gbWludXRlc1NwZWVjaCA6ICcnfSR7XG5cdFx0XHQoaG91cnMgPiAwIHx8IG1pbnV0ZXMgPiAwKSAmJiBzZWNvbmRzID4gMCA/ICcgJyA6ICcnXG5cdFx0fSR7c2Vjb25kcyA+IDAgPyBzZWNvbmRzU3BlZWNoIDogJyd9JHtpc0Rpc3BsYXlpbmdSZW1haW5pbmcgPyAnIHJlbWFpbmluZycgOiAnIGR1cmF0aW9uJ30uYH08L3NwYW4+XG5cdClcbn1cblxuLyoqXG4gKiBGb3JtYXQgYW5kIGRpc3BsYXkgdGltZXIgc2Vjb25kcyBhcyBcImhoOm1tOnNzXCIsIHdpdGggaGlkZGVuIHNjcmVlbiByZWFkZXIgY29tcGF0aWJsZSB0ZXh0LlxuICpcbiAqIEBwYXJhbSB0aW1lclNlY29uZHMgbnVtYmVyIG9mIHRpbWVyIHNlY29uZHNcbiAqIEBwYXJhbSBpc0Rpc3BsYXlpbmdSZW1haW5pbmcgd2hldGhlciB0aGUgdGltZXIgaXMgZGlzcGxheWluZyByZW1haW5pbmcgc2Vjb25kcy4gY2hhbmdlcyB0byBzYXkgXCJyZW1haW5pbmdcIiBpbnN0ZWFkIG9mIFwiZHVyYXRpb25cIi5cbiAqIEBwYXJhbSBoaWRlSG91cnMgd2hldGhlciB0byBoaWRlIHRoZSBob3VycywgYW5kIGRpc3BsYXkgb25seSBcIm1tOnNzXCIuIHRha2VzIG5vIGVmZmVjdCBpZiBob3VycyBpcyBncmVhdGVyIHRoYW4gMC5cbiAqL1xuZXhwb3J0IGNvbnN0IGRpc3BsYXlEaWdpdGFsVGltZXJTZWNvbmRzID0gKFxuXHR0aW1lclNlY29uZHM6IG51bWJlcixcblx0aXNEaXNwbGF5aW5nUmVtYWluaW5nID0gZmFsc2UsXG5cdGhpZGVIb3VycyA9IGZhbHNlXG4pOiBKU1guRWxlbWVudCA9PiB7XG5cdGNvbnN0IHsgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMgfSA9IGNhbGN1bGF0ZVRpbWVMaW1pdFRpbWVDb21wb25lbnRzKHRpbWVyU2Vjb25kcylcblx0cmV0dXJuIChcblx0XHQ8PlxuXHRcdFx0PHNwYW4gYXJpYS1oaWRkZW4+XG5cdFx0XHRcdHtob3VycyA+IDAgfHwgIWhpZGVIb3VycyA/IChob3VycyA+PSAxMCA/IGAke2hvdXJzfTpgIDogYDAke2hvdXJzfTpgKSA6ICcnfVxuXHRcdFx0XHR7bWludXRlcyA+PSAxMCA/IG1pbnV0ZXMgOiBgMCR7bWludXRlc31gfTp7c2Vjb25kcyA+PSAxMCA/IHNlY29uZHMgOiBgMCR7c2Vjb25kc31gfVxuXHRcdFx0PC9zcGFuPlxuXHRcdFx0e2Rpc3BsYXlTY3JlZW5SZWFkZXJUaW1lTGltaXQoaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMsIGlzRGlzcGxheWluZ1JlbWFpbmluZyl9XG5cdFx0PC8+XG5cdClcbn1cblxuLyoqXG4gKiBGb3JtYXQgYW5kIGRpc3BsYXkgdGltZXIgbWludXRlcyBhcyBcIlggaHIsIFkgbWluXCJcbiAqXG4gKiBAcGFyYW0gdGltZXJNaW51dGVzIG51bWJlciBvZiB0aW1lciBtaW51dGVzXG4gKi9cbmV4cG9ydCBjb25zdCBkaXNwbGF5U2hvcnRUaW1lck1pbnV0ZXMgPSAodGltZXJNaW51dGVzOiBudW1iZXIpOiBKU1guRWxlbWVudCA9PiB7XG5cdGNvbnN0IGhvdXJzID0gTWF0aC5mbG9vcih0aW1lck1pbnV0ZXMgLyA2MClcblx0Ly8gaWYgYSB0aW1lciBtdWx0aXBsaWVyIGdpdmVzIGEgZnJhY3Rpb24gb2YgYSBtaW51dGUgd2Ugcm91bmQgdXBcblx0Y29uc3QgbWludXRlcyA9IE1hdGguY2VpbCh0aW1lck1pbnV0ZXMgJSA2MClcblx0cmV0dXJuIChcblx0XHQ8c3Bhbj5cblx0XHRcdHtob3VycyA+IDAgPyBgJHtob3Vyc30gaHJgIDogJyd9XG5cdFx0XHR7aG91cnMgPiAwICYmIG1pbnV0ZXMgPiAwID8gJywgJyA6ICcnfVxuXHRcdFx0e21pbnV0ZXMgPiAwID8gYCR7bWludXRlc30gbWluYCA6ICcnfVxuXHRcdDwvc3Bhbj5cblx0KVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sTUFBTUEsZ0NBQWdDLEdBQUlDLFlBQW9CLElBQUs7RUFDekUsTUFBTUMsT0FBTyxHQUFHRCxZQUFZLEdBQUcsRUFBRTtFQUNqQyxNQUFNRSxpQkFBaUIsR0FBR0YsWUFBWSxHQUFHLElBQUk7RUFDN0MsTUFBTUcsT0FBTyxHQUFHLENBQUNELGlCQUFpQixHQUFHRCxPQUFPLElBQUksRUFBRTtFQUNsRCxNQUFNRyxLQUFLLEdBQUcsQ0FBQ0osWUFBWSxHQUFHRSxpQkFBaUIsSUFBSSxJQUFJO0VBQ3ZELE9BQU87SUFBRUUsS0FBSztJQUFFRCxPQUFPO0lBQUVGO0VBQVEsQ0FBQztBQUNuQyxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFWQUksT0FBQSxDQUFBTixnQ0FBQSxHQUFBQSxnQ0FBQTtBQVdPLE1BQU1PLDRCQUE0QixHQUFHLFNBQUFBLENBQzNDRixLQUFhLEVBQ2JELE9BQWUsRUFJRTtFQUFBLElBSGpCRixPQUFPLEdBQUFNLFNBQUEsQ0FBQUMsTUFBQSxRQUFBRCxTQUFBLFFBQUFFLFNBQUEsR0FBQUYsU0FBQSxNQUFHLENBQUM7RUFBQSxJQUNYRyxxQkFBcUIsR0FBQUgsU0FBQSxDQUFBQyxNQUFBLFFBQUFELFNBQUEsUUFBQUUsU0FBQSxHQUFBRixT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
|
package/lib/utils/timezone.js
CHANGED
|
@@ -15,4 +15,4 @@ const getDefaultTimeZoneId = () => {
|
|
|
15
15
|
exports.getDefaultTimeZoneId = getDefaultTimeZoneId;
|
|
16
16
|
const guessTimeZoneId = () => moment.tz.guess();
|
|
17
17
|
exports.guessTimeZoneId = guessTimeZoneId;
|
|
18
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
18
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtb21lbnQiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfY29uZmlndXJhdGlvbiIsImUiLCJ0IiwiV2Vha01hcCIsInIiLCJuIiwiX19lc01vZHVsZSIsIm8iLCJpIiwiZiIsIl9fcHJvdG9fXyIsImRlZmF1bHQiLCJoYXMiLCJnZXQiLCJzZXQiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImRlZmF1bHRUaW1lWm9uZUlkIiwiZ2V0RGVmYXVsdFRpbWVab25lSWQiLCJzaGFyZENvbmZpZyIsImdldFNoYXJkQ29uZmlnIiwiZXhwb3J0cyIsImd1ZXNzVGltZVpvbmVJZCIsInR6IiwiZ3Vlc3MiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvdGltZXpvbmUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgbW9tZW50IGZyb20gJ21vbWVudC10aW1lem9uZSdcbmltcG9ydCB7IGdldFNoYXJkQ29uZmlnIH0gZnJvbSAnLi4vY29uc3RhbnRzL2NvbmZpZ3VyYXRpb24nXG5cbmNvbnN0IGRlZmF1bHRUaW1lWm9uZUlkID0gJ0FtZXJpY2EvSW5kaWFuYXBvbGlzJ1xuXG5leHBvcnQgY29uc3QgZ2V0RGVmYXVsdFRpbWVab25lSWQgPSAoKSA9PiB7XG5cdGNvbnN0IHNoYXJkQ29uZmlnID0gZ2V0U2hhcmRDb25maWcoKVxuXHRyZXR1cm4gc2hhcmRDb25maWcuZGVmYXVsdFRpbWVab25lSWQgPyBzaGFyZENvbmZpZy5kZWZhdWx0VGltZVpvbmVJZCA6IGRlZmF1bHRUaW1lWm9uZUlkXG59XG5cbmV4cG9ydCBjb25zdCBndWVzc1RpbWVab25lSWQgPSAoKSA9PiBtb21lbnQudHouZ3Vlc3MoKVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSxNQUFBLEdBQUFDLHVCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxjQUFBLEdBQUFELE9BQUE7QUFBMkQsU0FBQUQsd0JBQUFHLENBQUEsRUFBQUMsQ0FBQSw2QkFBQUMsT0FBQSxNQUFBQyxDQUFBLE9BQUFELE9BQUEsSUFBQUUsQ0FBQSxPQUFBRixPQUFBLFlBQUFMLHVCQUFBLFlBQUFBLENBQUFHLENBQUEsRUFBQUMsQ0FBQSxTQUFBQSxDQUFBLElBQUFELENBQUEsSUFBQUEsQ0FBQSxDQUFBSyxVQUFBLFNBQUFMLENBQUEsTUFBQU0sQ0FBQSxFQUFBQyxDQUFBLEVBQUFDLENBQUEsS0FBQUMsU0FBQSxRQUFBQyxPQUFBLEVBQUFWLENBQUEsaUJBQUFBLENBQUEsdUJBQUFBLENBQUEseUJBQUFBLENBQUEsU0FBQVEsQ0FBQSxNQUFBRixDQUFBLEdBQUFMLENBQUEsR0FBQUcsQ0FBQSxHQUFBRCxDQUFBLFFBQUFHLENBQUEsQ0FBQUssR0FBQSxDQUFBWCxDQUFBLFVBQUFNLENBQUEsQ0FBQU0sR0FBQSxDQUFBWixDQUFBLEdBQUFNLENBQUEsQ0FBQU8sR0FBQSxDQUFBYixDQUFBLEVBQUFRLENBQUEsZ0JBQUFQLENBQUEsSUFBQUQsQ0FBQSxnQkFBQUMsQ0FBQSxPQUFBYSxjQUFBLENBQUFDLElBQUEsQ0FBQWYsQ0FBQSxFQUFBQyxDQUFBLE9BQUFNLENBQUEsSUFBQUQsQ0FBQSxHQUFBVSxNQUFBLENBQUFDLGNBQUEsS0FBQUQsTUFBQSxDQUFBRSx3QkFBQSxDQUFBbEIsQ0FBQSxFQUFBQyxDQUFBLE9BQUFNLENBQUEsQ0FBQUssR0FBQSxJQUFBTCxDQUFBLENBQUFNLEdBQUEsSUFBQVAsQ0FBQSxDQUFBRSxDQUFBLEVBQUFQLENBQUEsRUFBQU0sQ0FBQSxJQUFBQyxDQUFBLENBQUFQLENBQUEsSUFBQUQsQ0FBQSxDQUFBQyxDQUFBLFdBQUFPLENBQUEsS0FBQVIsQ0FBQSxFQUFBQyxDQUFBO0FBRTNELE1BQU1rQixpQkFBaUIsR0FBRyxzQkFBc0I7QUFFekMsTUFBTUMsb0JBQW9CLEdBQUdBLENBQUEsS0FBTTtFQUN6QyxNQUFNQyxXQUFXLEdBQUcsSUFBQUMsNkJBQWMsRUFBQyxDQUFDO0VBQ3BDLE9BQU9ELFdBQVcsQ0FBQ0YsaUJBQWlCLEdBQUdFLFdBQVcsQ0FBQ0YsaUJBQWlCLEdBQUdBLGlCQUFpQjtBQUN6RixDQUFDO0FBQUFJLE9BQUEsQ0FBQUgsb0JBQUEsR0FBQUEsb0JBQUE7QUFFTSxNQUFNSSxlQUFlLEdBQUdBLENBQUEsS0FBTTVCLE1BQU0sQ0FBQzZCLEVBQUUsQ0FBQ0MsS0FBSyxDQUFDLENBQUM7QUFBQUgsT0FBQSxDQUFBQyxlQUFBLEdBQUFBLGVBQUEiLCJpZ25vcmVMaXN0IjpbXX0=
|
package/lib/utils/url.js
CHANGED
|
@@ -98,10 +98,10 @@ let X_FRAME_OPTIONS = exports.X_FRAME_OPTIONS = /*#__PURE__*/function (X_FRAME_O
|
|
|
98
98
|
X_FRAME_OPTIONS["ALLOW_FROM"] = "ALLOW-FROM";
|
|
99
99
|
return X_FRAME_OPTIONS;
|
|
100
100
|
}({});
|
|
101
|
-
/**
|
|
102
|
-
* Using the given headers, determine if a url is allowed to be displayed in an iFrame.
|
|
103
|
-
* @param headers An array of request headers.
|
|
104
|
-
* @returns The parsed result
|
|
101
|
+
/**
|
|
102
|
+
* Using the given headers, determine if a url is allowed to be displayed in an iFrame.
|
|
103
|
+
* @param headers An array of request headers.
|
|
104
|
+
* @returns The parsed result
|
|
105
105
|
*/
|
|
106
106
|
const parseHeadersResponse = headers => {
|
|
107
107
|
// default result
|
|
@@ -132,15 +132,15 @@ const parseHeadersResponse = headers => {
|
|
|
132
132
|
acceptableSources.push(`${location.protocol}//${tempHost}`);
|
|
133
133
|
}
|
|
134
134
|
result.iFrameAllowed = !xContentSecurityPolicy.some(x => x.indexOf('frame-ancestors ') >= 0) || xContentSecurityPolicy.some(x => {
|
|
135
|
-
/**
|
|
136
|
-
* Matches
|
|
137
|
-
* * the string `frame-ancestors `
|
|
138
|
-
* * one or many of the following, followed by a space, semicolon, or end of string
|
|
139
|
-
* * `http:`
|
|
140
|
-
* * `https:`
|
|
141
|
-
* * `'self'`
|
|
142
|
-
* * `'none'`
|
|
143
|
-
* * url with optional scheme and optional asterisk wildcards
|
|
135
|
+
/**
|
|
136
|
+
* Matches
|
|
137
|
+
* * the string `frame-ancestors `
|
|
138
|
+
* * one or many of the following, followed by a space, semicolon, or end of string
|
|
139
|
+
* * `http:`
|
|
140
|
+
* * `https:`
|
|
141
|
+
* * `'self'`
|
|
142
|
+
* * `'none'`
|
|
143
|
+
* * url with optional scheme and optional asterisk wildcards
|
|
144
144
|
*/
|
|
145
145
|
const frameAncestorsRegex = /frame-ancestors ((?:(?:(?:http:)|(?:https:)|(?:'self')|(?:'none')|(?:(?:https?:\/\/)?[\w*.-]+(?:\.[\w*.-]+)+[\w-._~:/?#[\]@!$&'()*+,=]+))(?:[ ;]|$))+)/g;
|
|
146
146
|
const results = frameAncestorsRegex.exec(x);
|
|
@@ -161,10 +161,10 @@ const parseHeadersResponse = headers => {
|
|
|
161
161
|
return result;
|
|
162
162
|
};
|
|
163
163
|
|
|
164
|
-
/**
|
|
165
|
-
* Parse a path string into a location with separate pathname, search, and hash components.
|
|
166
|
-
* @param path A path string
|
|
167
|
-
* @returns The parsed result
|
|
164
|
+
/**
|
|
165
|
+
* Parse a path string into a location with separate pathname, search, and hash components.
|
|
166
|
+
* @param path A path string
|
|
167
|
+
* @returns The parsed result
|
|
168
168
|
*/
|
|
169
169
|
exports.parseHeadersResponse = parseHeadersResponse;
|
|
170
170
|
const parseLocation = path => {
|
|
@@ -181,9 +181,9 @@ const parseLocation = path => {
|
|
|
181
181
|
};
|
|
182
182
|
};
|
|
183
183
|
|
|
184
|
-
/**
|
|
185
|
-
* Create a SHA-256 digest of a string value.
|
|
186
|
-
* @returns A Promise ArrayBuffer.
|
|
184
|
+
/**
|
|
185
|
+
* Create a SHA-256 digest of a string value.
|
|
186
|
+
* @returns A Promise ArrayBuffer.
|
|
187
187
|
*/
|
|
188
188
|
exports.parseLocation = parseLocation;
|
|
189
189
|
const sha256Async = async plain => {
|
|
@@ -193,15 +193,15 @@ const sha256Async = async plain => {
|
|
|
193
193
|
return await crypto.subtle.digest('SHA-256', data);
|
|
194
194
|
};
|
|
195
195
|
|
|
196
|
-
/**
|
|
197
|
-
* Convert an ArrayBuffer to string using Uint8 array.
|
|
198
|
-
* btoa takes chars from 0-255 and base64 encodes.
|
|
199
|
-
* Then convert the base64 encoded to base64url encoded.
|
|
200
|
-
* (replace + with -, replace / with _, trim trailing =)
|
|
196
|
+
/**
|
|
197
|
+
* Convert an ArrayBuffer to string using Uint8 array.
|
|
198
|
+
* btoa takes chars from 0-255 and base64 encodes.
|
|
199
|
+
* Then convert the base64 encoded to base64url encoded.
|
|
200
|
+
* (replace + with -, replace / with _, trim trailing =)
|
|
201
201
|
*/
|
|
202
202
|
exports.sha256Async = sha256Async;
|
|
203
203
|
const base64UrlEncode = a => {
|
|
204
204
|
return btoa(String.fromCharCode(...new Uint8Array(a))).replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');
|
|
205
205
|
};
|
|
206
206
|
exports.base64UrlEncode = base64UrlEncode;
|
|
207
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoIiwicmVxdWlyZSIsIl9jb25maWd1cmF0aW9uIiwiX3NoYXJkIiwiX3Nsb3QiLCJfdGllciIsIl93aW5kb3dTZXJ2aWNlIiwiX2xvZ2dlciIsIl9zaGFyZDIiLCJnZXRBcGlVcmwiLCJhcHBDb25maWciLCJnZXRBcHBDb25maWciLCJBUElfVVJMIiwic2hhcmRLZXkiLCJJU19TSEFSREVEIiwiZ2V0U2hhcmRLZXkiLCJTSEFSRCIsIlJPT1QiLCJQVVJEVUUiLCJzbG90IiwiU0xPVCIsIlNUQUdJTkciLCJQUk9EVUNUSU9OIiwidGllciIsIlRJRVIiLCJMT0NBTCIsIkRFViIsIlFBIiwiUk9PVF9ET01BSU4iLCJnZXRTdG9yYWdlVXJsIiwiY29uZmlnIiwidXJsIiwiU1RPUkFHRV9VUkwiLCJyZXBsYWNlIiwiaGFzSHR0cFByb3RvY29sIiwidGVzdCIsImlzVXJsVmFsaWQiLCJUUllfTElNSVQiLCJ3YWl0IiwidGltZSIsIlByb21pc2UiLCJyZXNvbHZlIiwic2V0VGltZW91dCIsImZldGNoVGV4dCIsIm9wdGlvbnMiLCJ0cnlDb3VudCIsInJlc3AiLCJmZXRjaCIsInRleHQiLCJlcnJvciIsImdldExvZ2dlciIsIkVycm9yIiwiWF9GUkFNRV9PUFRJT05TIiwiZXhwb3J0cyIsInBhcnNlSGVhZGVyc1Jlc3BvbnNlIiwiaGVhZGVycyIsInJlc3VsdCIsImlzVmFsaWQiLCJpRnJhbWVBbGxvd2VkIiwidW5kZWZpbmVkIiwibG9jYXRpb24iLCJ3aW5kb3dTZXJ2aWNlIiwiZ2V0TG9jYXRpb24iLCJ4Q29udGVudFNlY3VyaXR5UG9saWN5IiwiZmluZCIsInZhbHVlIiwia2V5IiwidG9Mb3dlckNhc2UiLCJpc0FycmF5IiwiYWNjZXB0YWJsZVNvdXJjZXMiLCJwcm90b2NvbCIsImhvc3QiLCJob3N0UGFydHMiLCJzcGxpdCIsImxlbmd0aCIsInNoaWZ0IiwidGVtcEhvc3QiLCJqb2luIiwicHVzaCIsInNvbWUiLCJ4IiwiaW5kZXhPZiIsImZyYW1lQW5jZXN0b3JzUmVnZXgiLCJyZXN1bHRzIiwiZXhlYyIsInNvdXJjZXMiLCJzb3VyY2UiLCJhY2NlcHRhYmxlU291cmNlIiwieEZyYW1lT3B0aW9ucyIsIkRFTlkiLCJTQU1FT1JJR0lOIiwiQUxMT1dfRlJPTSIsInBhcnNlTG9jYXRpb24iLCJwYXRoIiwic2VhcmNoU3RhcnQiLCJoYXNoU3RhcnQiLCJzZWFyY2hFbmQiLCJwYXRobmFtZSIsInN1YnN0cmluZyIsInNlYXJjaCIsImhhc2giLCJzaGEyNTZBc3luYyIsInBsYWluIiwiZW5jb2RlciIsIlRleHRFbmNvZGVyIiwiZGF0YSIsImVuY29kZSIsImNyeXB0byIsInN1YnRsZSIsImRpZ2VzdCIsImJhc2U2NFVybEVuY29kZSIsImEiLCJidG9hIiwiU3RyaW5nIiwiZnJvbUNoYXJDb2RlIiwiVWludDhBcnJheSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy91cmwudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTG9jYXRpb25EZXNjcmlwdG9yIH0gZnJvbSAnaGlzdG9yeSdcclxuaW1wb3J0IHsgRGljdGlvbmFyeSwgZmluZCwgaXNBcnJheSB9IGZyb20gJ2xvZGFzaCdcclxuaW1wb3J0IHsgZ2V0QXBwQ29uZmlnIH0gZnJvbSAnLi4vY29uc3RhbnRzL2NvbmZpZ3VyYXRpb24nXHJcbmltcG9ydCB7IFNIQVJEIH0gZnJvbSAnLi4vY29uc3RhbnRzL3NoYXJkJ1xyXG5pbXBvcnQgeyBTTE9UIH0gZnJvbSAnLi4vY29uc3RhbnRzL3Nsb3QnXHJcbmltcG9ydCB7IFRJRVIgfSBmcm9tICcuLi9jb25zdGFudHMvdGllcidcclxuaW1wb3J0IHsgd2luZG93U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3dpbmRvd1NlcnZpY2UnXHJcbmltcG9ydCB7IEFwcENvbmZpZ3VyYXRpb24gfSBmcm9tICcuLi90eXBlcydcclxuaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSAnLi9sb2dnZXInXHJcbmltcG9ydCB7IGdldFNoYXJkS2V5IH0gZnJvbSAnLi9zaGFyZCdcclxuXHJcbi8qKiBDYWxjdWxhdGUgdGhlIEFQSSBVUkwgZnJvbSB0aGUgYEFwcENvbmZpZ3VyYXRpb25gLCBhbmQgYHdpbmRvdy5sb2NhdGlvbmAgaWYgdXNpbmcgc2hhcmRzLiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZ2V0QXBpVXJsKCkge1xyXG5cdGNvbnN0IGFwcENvbmZpZyA9IGdldEFwcENvbmZpZygpXHJcblxyXG5cdC8vIHNraXAgbG9naWMsIGlmIG5vdCB1c2luZyBhIGN1c3RvbSBkb21haW4gKGUuZy4gbG9jYWwgb3Igc3RhZ2luZylcclxuXHRpZiAoYXBwQ29uZmlnLkFQSV9VUkwpIHtcclxuXHRcdHJldHVybiBhcHBDb25maWcuQVBJX1VSTFxyXG5cdH1cclxuXHJcblx0bGV0IHNoYXJkS2V5ID0gJydcclxuXHRpZiAoYXBwQ29uZmlnLklTX1NIQVJERUQpIHtcclxuXHRcdHNoYXJkS2V5ID0gZ2V0U2hhcmRLZXkoKVxyXG5cdFx0Ly8gZGVmYXVsdCBST09UIHRvIHBvaW50IHRvIFBVUkRVRVxyXG5cdFx0aWYgKHNoYXJkS2V5ID09PSBTSEFSRC5ST09UKSB7XHJcblx0XHRcdHNoYXJkS2V5ID0gU0hBUkQuUFVSRFVFXHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRsZXQgc2xvdCA9ICcnXHJcblx0c3dpdGNoIChhcHBDb25maWcuU0xPVCkge1xyXG5cdFx0Y2FzZSBTTE9ULlNUQUdJTkc6XHJcblx0XHRcdHNsb3QgPSAnc3RhZ2luZydcclxuXHRcdFx0YnJlYWtcclxuXHRcdGNhc2UgU0xPVC5QUk9EVUNUSU9OOlxyXG5cdFx0XHRzbG90ID0gJydcclxuXHRcdFx0YnJlYWtcclxuXHR9XHJcblxyXG5cdGxldCB0aWVyID0gJydcclxuXHRzd2l0Y2ggKGFwcENvbmZpZy5USUVSKSB7XHJcblx0XHRjYXNlIFRJRVIuTE9DQUw6XHJcblx0XHRcdHRpZXIgPSAnbG9jYWwnXHJcblx0XHRcdGJyZWFrXHJcblx0XHRjYXNlIFRJRVIuREVWOlxyXG5cdFx0XHR0aWVyID0gJ2RldidcclxuXHRcdFx0YnJlYWtcclxuXHRcdGNhc2UgVElFUi5RQTpcclxuXHRcdFx0dGllciA9ICdxYSdcclxuXHRcdFx0YnJlYWtcclxuXHR9XHJcblxyXG5cdHJldHVybiBgaHR0cHM6Ly8ke3NoYXJkS2V5ID8gYCR7c2hhcmRLZXl9LmAgOiAnJ30ke3Nsb3QgPyBgJHtzbG90fS5gIDogJyd9JHt0aWVyID8gYCR7dGllcn0uYCA6ICcnfWFwaS4ke2FwcENvbmZpZy5ST09UX0RPTUFJTn1gXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRTdG9yYWdlVXJsKGNvbmZpZzogQXBwQ29uZmlndXJhdGlvbiwgdXJsOiBzdHJpbmcpIHtcclxuXHRyZXR1cm4gY29uZmlnLlRJRVIgPT09IFRJRVIuTE9DQUwgJiYgISFjb25maWcuU1RPUkFHRV9VUkxcclxuXHRcdD8gdXJsLnJlcGxhY2UoJ2h0dHA6Ly8xMjcuMC4wLjE6MTAwMDAnLCBjb25maWcuU1RPUkFHRV9VUkwpXHJcblx0XHQ6IHVybFxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaGFzSHR0cFByb3RvY29sKHVybDogc3RyaW5nKSB7XHJcblx0cmV0dXJuIC9eKGh0dHB8aHR0cHMpOlxcL1xcLy8udGVzdCh1cmwpXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc1VybFZhbGlkKHVybDogc3RyaW5nKSB7XHJcblx0Ly8gbW9kaWZpZWQgZnJvbSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMzgwOTQzNVxyXG5cdHJldHVybiAvXihodHRwcz86XFwvXFwvKT9bLWEtekEtWjAtOUA6JS5fK34jPV17MSwyNTZ9XFwuW2EtekEtWjAtOSgpXXsxLDZ9XFxiKFstYS16QS1aMC05KClAOiVfLn4jPyYvW1xcXSEkJicqKyw7PV0qKSQvLnRlc3QoXHJcblx0XHR1cmxcclxuXHQpXHJcbn1cclxuXHJcbi8qKiBUaGUgdG90YWwgbnVtYmVyIG9mIHRyaWVzIGZvciBgZmV0Y2hUZXh0YCwgaW5jbHVkaW5nIHRoZSBpbml0aWFsIHJlcXVlc3QuICovXHJcbmNvbnN0IFRSWV9MSU1JVCA9IDVcclxuXHJcbmZ1bmN0aW9uIHdhaXQodGltZTogbnVtYmVyKSB7XHJcblx0cmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xyXG5cdFx0c2V0VGltZW91dChyZXNvbHZlLCB0aW1lKVxyXG5cdH0pXHJcbn1cclxuXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmZXRjaFRleHQodXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBSZXF1ZXN0SW5pdCkge1xyXG5cdGxldCB0cnlDb3VudCA9IDBcclxuXHRkbyB7XHJcblx0XHR0cnlDb3VudCsrXHJcblx0XHR0cnkge1xyXG5cdFx0XHRjb25zdCByZXNwID0gYXdhaXQgZmV0Y2godXJsLCBvcHRpb25zKVxyXG5cdFx0XHRjb25zdCB0ZXh0ID0gYXdhaXQgcmVzcC50ZXh0KClcclxuXHRcdFx0cmV0dXJuIHRleHRcclxuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XHJcblx0XHRcdGdldExvZ2dlcigpLmVycm9yKGBGYWlsZWQgdG8gZmV0Y2ggJHt1cmx9LiBhdHRlbXB0OiAke3RyeUNvdW50fSwgZXJyb3I6ICR7ZXJyb3J9YClcclxuXHRcdFx0aWYgKHRyeUNvdW50IDwgVFJZX0xJTUlUKSB7XHJcblx0XHRcdFx0YXdhaXQgd2FpdCgyICoqICh0cnlDb3VudCAtIDEpICogMTAwKSAvLyAxMDAsIDIwMCwgNDAwLCA4MDBcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH0gd2hpbGUgKHRyeUNvdW50IDwgVFJZX0xJTUlUKVxyXG5cclxuXHR0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBmZXRjaCAke3VybH0gYWZ0ZXIgJHtUUllfTElNSVR9IGF0dGVtcHRzLmApXHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIFhfRlJBTUVfT1BUSU9OUyB7XHJcblx0REVOWSA9ICdERU5ZJyxcclxuXHRTQU1FT1JJR0lOID0gJ1NBTUVPUklHSU4nLFxyXG5cdEFMTE9XX0ZST00gPSAnQUxMT1ctRlJPTSdcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBQYXJzZWRIZWFkZXJzUmVzcG9uc2Uge1xyXG5cdGlzVmFsaWQ6IGJvb2xlYW5cclxuXHRpRnJhbWVBbGxvd2VkPzogYm9vbGVhblxyXG59XHJcblxyXG4vKipcclxuICogVXNpbmcgdGhlIGdpdmVuIGhlYWRlcnMsIGRldGVybWluZSBpZiBhIHVybCBpcyBhbGxvd2VkIHRvIGJlIGRpc3BsYXllZCBpbiBhbiBpRnJhbWUuXHJcbiAqIEBwYXJhbSBoZWFkZXJzIEFuIGFycmF5IG9mIHJlcXVlc3QgaGVhZGVycy5cclxuICogQHJldHVybnMgVGhlIHBhcnNlZCByZXN1bHRcclxuICovXHJcbmV4cG9ydCBjb25zdCBwYXJzZUhlYWRlcnNSZXNwb25zZSA9IChoZWFkZXJzPzogRGljdGlvbmFyeTxzdHJpbmcgfCBzdHJpbmdbXSB8IHVuZGVmaW5lZD4pID0+IHtcclxuXHQvLyBkZWZhdWx0IHJlc3VsdFxyXG5cdGNvbnN0IHJlc3VsdDogUGFyc2VkSGVhZGVyc1Jlc3BvbnNlID0ge1xyXG5cdFx0aXNWYWxpZDogZmFsc2UsXHJcblx0XHRpRnJhbWVBbGxvd2VkOiB1bmRlZmluZWRcclxuXHR9XHJcblxyXG5cdGlmICghaGVhZGVycykge1xyXG5cdFx0cmV0dXJuIHJlc3VsdFxyXG5cdH1cclxuXHJcblx0cmVzdWx0LmlzVmFsaWQgPSB0cnVlXHJcblx0cmVzdWx0LmlGcmFtZUFsbG93ZWQgPSB0cnVlXHJcblxyXG5cdGNvbnN0IGxvY2F0aW9uID0gd2luZG93U2VydmljZS5nZXRMb2NhdGlvbigpXHJcblxyXG5cdC8vIGNvbnRlbnQtc2VjdXJpdHktcG9saWN5IC8geC1jb250ZW50LXNlY3VyaXR5LXBvbGljeVxyXG5cdC8vIGNhbiBjb250YWluICdmcmFtZS1hbmNlc3RvcnMgPHNvdXJjZT4gPHNvdXJjZT4nIHdpdGggb25lIG9yIG1hbnkgc291cmNlc1xyXG5cdC8vIGlGcmFtZUFsbG93ZWQgaWYgaXQgZG9lcyBub3QgY29udGFpbiAnZnJhbWUtYW5jZXN0b3JzJyBvciBpZiBpdCBkb2VzIHdpdGggYW4gYWNjZXB0YWJsZSBzb3VyY2VcclxuXHRjb25zdCB4Q29udGVudFNlY3VyaXR5UG9saWN5ID0gZmluZChcclxuXHRcdGhlYWRlcnMsXHJcblx0XHQodmFsdWUsIGtleSkgPT5cclxuXHRcdFx0a2V5LnRvTG93ZXJDYXNlKCkgPT09ICdjb250ZW50LXNlY3VyaXR5LXBvbGljeScgfHwga2V5LnRvTG93ZXJDYXNlKCkgPT09ICd4LWNvbnRlbnQtc2VjdXJpdHktcG9saWN5J1xyXG5cdClcclxuXHRpZiAoeENvbnRlbnRTZWN1cml0eVBvbGljeSAmJiBpc0FycmF5KHhDb250ZW50U2VjdXJpdHlQb2xpY3kpKSB7XHJcblx0XHQvLyBkZWZpbmUgYWxsIGFjY2VwdGFibGUgZnJhbWUtYW5jZXN0b3JzIHNvdXJjZXNcclxuXHRcdC8vIHByb3RvY29sLCBmdWxsIGxvY2F0aW9uIGhvc3QsIGhvc3QsIGFuZCBhbGwgd2lsZGNhcmQgcGVybXV0YXRpb25zXHJcblx0XHRjb25zdCBhY2NlcHRhYmxlU291cmNlcyA9IFtsb2NhdGlvbi5wcm90b2NvbCwgYCR7bG9jYXRpb24ucHJvdG9jb2x9Ly8ke2xvY2F0aW9uLmhvc3R9YCwgbG9jYXRpb24uaG9zdF1cclxuXHRcdGNvbnN0IGhvc3RQYXJ0cyA9IGxvY2F0aW9uLmhvc3Quc3BsaXQoJy4nKVxyXG5cdFx0d2hpbGUgKGhvc3RQYXJ0cy5sZW5ndGggPiAyKSB7XHJcblx0XHRcdGhvc3RQYXJ0cy5zaGlmdCgpXHJcblx0XHRcdGNvbnN0IHRlbXBIb3N0ID0gYCouJHtob3N0UGFydHMuam9pbignLicpfWBcclxuXHRcdFx0YWNjZXB0YWJsZVNvdXJjZXMucHVzaCh0ZW1wSG9zdClcclxuXHRcdFx0YWNjZXB0YWJsZVNvdXJjZXMucHVzaChgJHtsb2NhdGlvbi5wcm90b2NvbH0vLyR7dGVtcEhvc3R9YClcclxuXHRcdH1cclxuXHRcdHJlc3VsdC5pRnJhbWVBbGxvd2VkID1cclxuXHRcdFx0IXhDb250ZW50U2VjdXJpdHlQb2xpY3kuc29tZSh4ID0+IHguaW5kZXhPZignZnJhbWUtYW5jZXN0b3JzICcpID49IDApIHx8XHJcblx0XHRcdHhDb250ZW50U2VjdXJpdHlQb2xpY3kuc29tZSh4ID0+IHtcclxuXHRcdFx0XHQvKipcclxuXHRcdFx0XHQgKiBNYXRjaGVzXHJcblx0XHRcdFx0ICogKiB0aGUgc3RyaW5nIGBmcmFtZS1hbmNlc3RvcnMgYFxyXG5cdFx0XHRcdCAqICogb25lIG9yIG1hbnkgb2YgdGhlIGZvbGxvd2luZywgZm9sbG93ZWQgYnkgYSBzcGFjZSwgc2VtaWNvbG9uLCBvciBlbmQgb2Ygc3RyaW5nXHJcblx0XHRcdFx0ICogICAgICogYGh0dHA6YFxyXG5cdFx0XHRcdCAqICAgICAqIGBodHRwczpgXHJcblx0XHRcdFx0ICogICAgICogYCdzZWxmJ2BcclxuXHRcdFx0XHQgKiAgICAgKiBgJ25vbmUnYFxyXG5cdFx0XHRcdCAqICAgICAqIHVybCB3aXRoIG9wdGlvbmFsIHNjaGVtZSBhbmQgb3B0aW9uYWwgYXN0ZXJpc2sgd2lsZGNhcmRzXHJcblx0XHRcdFx0ICovXHJcblx0XHRcdFx0Y29uc3QgZnJhbWVBbmNlc3RvcnNSZWdleCA9XHJcblx0XHRcdFx0XHQvZnJhbWUtYW5jZXN0b3JzICgoPzooPzooPzpodHRwOil8KD86aHR0cHM6KXwoPzonc2VsZicpfCg/Oidub25lJyl8KD86KD86aHR0cHM/OlxcL1xcLyk/W1xcdyouLV0rKD86XFwuW1xcdyouLV0rKStbXFx3LS5ffjovPyNbXFxdQCEkJicoKSorLD1dKykpKD86WyA7XXwkKSkrKS9nXHJcblx0XHRcdFx0Y29uc3QgcmVzdWx0cyA9IGZyYW1lQW5jZXN0b3JzUmVnZXguZXhlYyh4KVxyXG5cdFx0XHRcdGlmICghcmVzdWx0cykge1xyXG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlXHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGNvbnN0IHNvdXJjZXMgPSByZXN1bHRzWzFdLnNwbGl0KCcgJylcclxuXHRcdFx0XHRyZXR1cm4gc291cmNlcy5zb21lKHNvdXJjZSA9PiBhY2NlcHRhYmxlU291cmNlcy5zb21lKGFjY2VwdGFibGVTb3VyY2UgPT4gYWNjZXB0YWJsZVNvdXJjZSA9PT0gc291cmNlKSlcclxuXHRcdFx0fSlcclxuXHR9XHJcblxyXG5cdC8vIHgtZnJhbWUtb3B0aW9ucyBjYW4gYmUgWydTQU1FT1JJR0lOJywgJ0RFTlknLCAnQUxMT1ctRlJPTS4uLiddXHJcblx0Ly8gaUZyYW1lQWxsb3dlZCBpZiB0aGUgdGhlIHgtZnJhbWUtb3B0aW9ucyBpcyAnQUxMT1ctRlJPTSB7YXBwIHdlYiB1cmx9J1xyXG5cdGNvbnN0IHhGcmFtZU9wdGlvbnMgPSBmaW5kKGhlYWRlcnMsICh2YWx1ZSwga2V5KSA9PiBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ3gtZnJhbWUtb3B0aW9ucycpXHJcblx0aWYgKHhGcmFtZU9wdGlvbnMgJiYgaXNBcnJheSh4RnJhbWVPcHRpb25zKSkge1xyXG5cdFx0cmVzdWx0LmlGcmFtZUFsbG93ZWQgPVxyXG5cdFx0XHQheEZyYW1lT3B0aW9ucy5zb21lKHggPT4geCA9PT0gWF9GUkFNRV9PUFRJT05TLkRFTlkgfHwgeCA9PT0gWF9GUkFNRV9PUFRJT05TLlNBTUVPUklHSU4pICYmXHJcblx0XHRcdHhGcmFtZU9wdGlvbnMuc29tZSh4ID0+IHggPT09IGAke1hfRlJBTUVfT1BUSU9OUy5BTExPV19GUk9NfSAke2xvY2F0aW9uLnByb3RvY29sfS8vJHtsb2NhdGlvbi5ob3N0fWApXHJcblx0fVxyXG5cdHJldHVybiByZXN1bHRcclxufVxyXG5cclxuLyoqXHJcbiAqIFBhcnNlIGEgcGF0aCBzdHJpbmcgaW50byBhIGxvY2F0aW9uIHdpdGggc2VwYXJhdGUgcGF0aG5hbWUsIHNlYXJjaCwgYW5kIGhhc2ggY29tcG9uZW50cy5cclxuICogQHBhcmFtIHBhdGggQSBwYXRoIHN0cmluZ1xyXG4gKiBAcmV0dXJucyBUaGUgcGFyc2VkIHJlc3VsdFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IHBhcnNlTG9jYXRpb24gPSAocGF0aDogc3RyaW5nKTogTG9jYXRpb25EZXNjcmlwdG9yID0+IHtcclxuXHRjb25zdCBzZWFyY2hTdGFydCA9IHBhdGguaW5kZXhPZignPycpXHJcblx0Y29uc3QgaGFzaFN0YXJ0ID0gcGF0aC5pbmRleE9mKCcjJylcclxuXHRjb25zdCBzZWFyY2hFbmQgPSBoYXNoU3RhcnQgPiAtMSA/IGhhc2hTdGFydCA6IHVuZGVmaW5lZFxyXG5cdGNvbnN0IHBhdGhuYW1lID1cclxuXHRcdHNlYXJjaFN0YXJ0ID4gLTEgPyBwYXRoLnN1YnN0cmluZygwLCBzZWFyY2hTdGFydCkgOiBoYXNoU3RhcnQgPiAtMSA/IHBhdGguc3Vic3RyaW5nKDAsIGhhc2hTdGFydCkgOiBwYXRoXHJcblx0Y29uc3Qgc2VhcmNoID0gc2VhcmNoU3RhcnQgPiAtMSA/IHBhdGguc3Vic3RyaW5nKHNlYXJjaFN0YXJ0LCBzZWFyY2hFbmQpIDogdW5kZWZpbmVkXHJcblx0Y29uc3QgaGFzaCA9IGhhc2hTdGFydCA+IC0xID8gcGF0aC5zdWJzdHJpbmcoaGFzaFN0YXJ0KSA6IHVuZGVmaW5lZFxyXG5cdHJldHVybiB7XHJcblx0XHRwYXRobmFtZTogcGF0aG5hbWUgfHwgJy8nLFxyXG5cdFx0c2VhcmNoOiBzZWFyY2gsXHJcblx0XHRoYXNoOiBoYXNoXHJcblx0fVxyXG59XHJcblxyXG4vKipcclxuICogQ3JlYXRlIGEgU0hBLTI1NiBkaWdlc3Qgb2YgYSBzdHJpbmcgdmFsdWUuXHJcbiAqIEByZXR1cm5zIEEgUHJvbWlzZSBBcnJheUJ1ZmZlci5cclxuICovXHJcbmV4cG9ydCBjb25zdCBzaGEyNTZBc3luYyA9IGFzeW5jIChwbGFpbjogc3RyaW5nKSA9PiB7XHJcblx0Ly8gcmV0dXJucyBwcm9taXNlIEFycmF5QnVmZmVyXHJcblx0Y29uc3QgZW5jb2RlciA9IG5ldyBUZXh0RW5jb2RlcigpXHJcblx0Y29uc3QgZGF0YSA9IGVuY29kZXIuZW5jb2RlKHBsYWluKVxyXG5cdHJldHVybiBhd2FpdCBjcnlwdG8uc3VidGxlLmRpZ2VzdCgnU0hBLTI1NicsIGRhdGEpXHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDb252ZXJ0IGFuIEFycmF5QnVmZmVyIHRvIHN0cmluZyB1c2luZyBVaW50OCBhcnJheS5cclxuICogYnRvYSB0YWtlcyBjaGFycyBmcm9tIDAtMjU1IGFuZCBiYXNlNjQgZW5jb2Rlcy5cclxuICogVGhlbiBjb252ZXJ0IHRoZSBiYXNlNjQgZW5jb2RlZCB0byBiYXNlNjR1cmwgZW5jb2RlZC5cclxuICogKHJlcGxhY2UgKyB3aXRoIC0sIHJlcGxhY2UgLyB3aXRoIF8sIHRyaW0gdHJhaWxpbmcgPSlcclxuICovXHJcbmV4cG9ydCBjb25zdCBiYXNlNjRVcmxFbmNvZGUgPSAoYTogQXJyYXlCdWZmZXIpID0+IHtcclxuXHRyZXR1cm4gYnRvYShTdHJpbmcuZnJvbUNoYXJDb2RlKC4uLm5ldyBVaW50OEFycmF5KGEpKSlcclxuXHRcdC5yZXBsYWNlKC9cXCsvZywgJy0nKVxyXG5cdFx0LnJlcGxhY2UoL1xcLy9nLCAnXycpXHJcblx0XHQucmVwbGFjZSgvPSskLywgJycpXHJcbn1cclxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFDQSxJQUFBQSxPQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxjQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxNQUFBLEdBQUFGLE9BQUE7QUFDQSxJQUFBRyxLQUFBLEdBQUFILE9BQUE7QUFDQSxJQUFBSSxLQUFBLEdBQUFKLE9BQUE7QUFDQSxJQUFBSyxjQUFBLEdBQUFMLE9BQUE7QUFFQSxJQUFBTSxPQUFBLEdBQUFOLE9BQUE7QUFDQSxJQUFBTyxPQUFBLEdBQUFQLE9BQUE7QUFFQTtBQUNPLFNBQVNRLFNBQVNBLENBQUEsRUFBRztFQUMzQixNQUFNQyxTQUFTLEdBQUcsSUFBQUMsMkJBQVksRUFBQyxDQUFDOztFQUVoQztFQUNBLElBQUlELFNBQVMsQ0FBQ0UsT0FBTyxFQUFFO0lBQ3RCLE9BQU9GLFNBQVMsQ0FBQ0UsT0FBTztFQUN6QjtFQUVBLElBQUlDLFFBQVEsR0FBRyxFQUFFO0VBQ2pCLElBQUlILFNBQVMsQ0FBQ0ksVUFB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
|
|
207
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoIiwicmVxdWlyZSIsIl9jb25maWd1cmF0aW9uIiwiX3NoYXJkIiwiX3Nsb3QiLCJfdGllciIsIl93aW5kb3dTZXJ2aWNlIiwiX2xvZ2dlciIsIl9zaGFyZDIiLCJnZXRBcGlVcmwiLCJhcHBDb25maWciLCJnZXRBcHBDb25maWciLCJBUElfVVJMIiwic2hhcmRLZXkiLCJJU19TSEFSREVEIiwiZ2V0U2hhcmRLZXkiLCJTSEFSRCIsIlJPT1QiLCJQVVJEVUUiLCJzbG90IiwiU0xPVCIsIlNUQUdJTkciLCJQUk9EVUNUSU9OIiwidGllciIsIlRJRVIiLCJMT0NBTCIsIkRFViIsIlFBIiwiUk9PVF9ET01BSU4iLCJnZXRTdG9yYWdlVXJsIiwiY29uZmlnIiwidXJsIiwiU1RPUkFHRV9VUkwiLCJyZXBsYWNlIiwiaGFzSHR0cFByb3RvY29sIiwidGVzdCIsImlzVXJsVmFsaWQiLCJUUllfTElNSVQiLCJ3YWl0IiwidGltZSIsIlByb21pc2UiLCJyZXNvbHZlIiwic2V0VGltZW91dCIsImZldGNoVGV4dCIsIm9wdGlvbnMiLCJ0cnlDb3VudCIsInJlc3AiLCJmZXRjaCIsInRleHQiLCJlcnJvciIsImdldExvZ2dlciIsIkVycm9yIiwiWF9GUkFNRV9PUFRJT05TIiwiZXhwb3J0cyIsInBhcnNlSGVhZGVyc1Jlc3BvbnNlIiwiaGVhZGVycyIsInJlc3VsdCIsImlzVmFsaWQiLCJpRnJhbWVBbGxvd2VkIiwidW5kZWZpbmVkIiwibG9jYXRpb24iLCJ3aW5kb3dTZXJ2aWNlIiwiZ2V0TG9jYXRpb24iLCJ4Q29udGVudFNlY3VyaXR5UG9saWN5IiwiZmluZCIsInZhbHVlIiwia2V5IiwidG9Mb3dlckNhc2UiLCJpc0FycmF5IiwiYWNjZXB0YWJsZVNvdXJjZXMiLCJwcm90b2NvbCIsImhvc3QiLCJob3N0UGFydHMiLCJzcGxpdCIsImxlbmd0aCIsInNoaWZ0IiwidGVtcEhvc3QiLCJqb2luIiwicHVzaCIsInNvbWUiLCJ4IiwiaW5kZXhPZiIsImZyYW1lQW5jZXN0b3JzUmVnZXgiLCJyZXN1bHRzIiwiZXhlYyIsInNvdXJjZXMiLCJzb3VyY2UiLCJhY2NlcHRhYmxlU291cmNlIiwieEZyYW1lT3B0aW9ucyIsIkRFTlkiLCJTQU1FT1JJR0lOIiwiQUxMT1dfRlJPTSIsInBhcnNlTG9jYXRpb24iLCJwYXRoIiwic2VhcmNoU3RhcnQiLCJoYXNoU3RhcnQiLCJzZWFyY2hFbmQiLCJwYXRobmFtZSIsInN1YnN0cmluZyIsInNlYXJjaCIsImhhc2giLCJzaGEyNTZBc3luYyIsInBsYWluIiwiZW5jb2RlciIsIlRleHRFbmNvZGVyIiwiZGF0YSIsImVuY29kZSIsImNyeXB0byIsInN1YnRsZSIsImRpZ2VzdCIsImJhc2U2NFVybEVuY29kZSIsImEiLCJidG9hIiwiU3RyaW5nIiwiZnJvbUNoYXJDb2RlIiwiVWludDhBcnJheSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy91cmwudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTG9jYXRpb25EZXNjcmlwdG9yIH0gZnJvbSAnaGlzdG9yeSdcbmltcG9ydCB7IERpY3Rpb25hcnksIGZpbmQsIGlzQXJyYXkgfSBmcm9tICdsb2Rhc2gnXG5pbXBvcnQgeyBnZXRBcHBDb25maWcgfSBmcm9tICcuLi9jb25zdGFudHMvY29uZmlndXJhdGlvbidcbmltcG9ydCB7IFNIQVJEIH0gZnJvbSAnLi4vY29uc3RhbnRzL3NoYXJkJ1xuaW1wb3J0IHsgU0xPVCB9IGZyb20gJy4uL2NvbnN0YW50cy9zbG90J1xuaW1wb3J0IHsgVElFUiB9IGZyb20gJy4uL2NvbnN0YW50cy90aWVyJ1xuaW1wb3J0IHsgd2luZG93U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3dpbmRvd1NlcnZpY2UnXG5pbXBvcnQgeyBBcHBDb25maWd1cmF0aW9uIH0gZnJvbSAnLi4vdHlwZXMnXG5pbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tICcuL2xvZ2dlcidcbmltcG9ydCB7IGdldFNoYXJkS2V5IH0gZnJvbSAnLi9zaGFyZCdcblxuLyoqIENhbGN1bGF0ZSB0aGUgQVBJIFVSTCBmcm9tIHRoZSBgQXBwQ29uZmlndXJhdGlvbmAsIGFuZCBgd2luZG93LmxvY2F0aW9uYCBpZiB1c2luZyBzaGFyZHMuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QXBpVXJsKCkge1xuXHRjb25zdCBhcHBDb25maWcgPSBnZXRBcHBDb25maWcoKVxuXG5cdC8vIHNraXAgbG9naWMsIGlmIG5vdCB1c2luZyBhIGN1c3RvbSBkb21haW4gKGUuZy4gbG9jYWwgb3Igc3RhZ2luZylcblx0aWYgKGFwcENvbmZpZy5BUElfVVJMKSB7XG5cdFx0cmV0dXJuIGFwcENvbmZpZy5BUElfVVJMXG5cdH1cblxuXHRsZXQgc2hhcmRLZXkgPSAnJ1xuXHRpZiAoYXBwQ29uZmlnLklTX1NIQVJERUQpIHtcblx0XHRzaGFyZEtleSA9IGdldFNoYXJkS2V5KClcblx0XHQvLyBkZWZhdWx0IFJPT1QgdG8gcG9pbnQgdG8gUFVSRFVFXG5cdFx0aWYgKHNoYXJkS2V5ID09PSBTSEFSRC5ST09UKSB7XG5cdFx0XHRzaGFyZEtleSA9IFNIQVJELlBVUkRVRVxuXHRcdH1cblx0fVxuXG5cdGxldCBzbG90ID0gJydcblx0c3dpdGNoIChhcHBDb25maWcuU0xPVCkge1xuXHRcdGNhc2UgU0xPVC5TVEFHSU5HOlxuXHRcdFx0c2xvdCA9ICdzdGFnaW5nJ1xuXHRcdFx0YnJlYWtcblx0XHRjYXNlIFNMT1QuUFJPRFVDVElPTjpcblx0XHRcdHNsb3QgPSAnJ1xuXHRcdFx0YnJlYWtcblx0fVxuXG5cdGxldCB0aWVyID0gJydcblx0c3dpdGNoIChhcHBDb25maWcuVElFUikge1xuXHRcdGNhc2UgVElFUi5MT0NBTDpcblx0XHRcdHRpZXIgPSAnbG9jYWwnXG5cdFx0XHRicmVha1xuXHRcdGNhc2UgVElFUi5ERVY6XG5cdFx0XHR0aWVyID0gJ2Rldidcblx0XHRcdGJyZWFrXG5cdFx0Y2FzZSBUSUVSLlFBOlxuXHRcdFx0dGllciA9ICdxYSdcblx0XHRcdGJyZWFrXG5cdH1cblxuXHRyZXR1cm4gYGh0dHBzOi8vJHtzaGFyZEtleSA/IGAke3NoYXJkS2V5fS5gIDogJyd9JHtzbG90ID8gYCR7c2xvdH0uYCA6ICcnfSR7dGllciA/IGAke3RpZXJ9LmAgOiAnJ31hcGkuJHthcHBDb25maWcuUk9PVF9ET01BSU59YFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RvcmFnZVVybChjb25maWc6IEFwcENvbmZpZ3VyYXRpb24sIHVybDogc3RyaW5nKSB7XG5cdHJldHVybiBjb25maWcuVElFUiA9PT0gVElFUi5MT0NBTCAmJiAhIWNvbmZpZy5TVE9SQUdFX1VSTFxuXHRcdD8gdXJsLnJlcGxhY2UoJ2h0dHA6Ly8xMjcuMC4wLjE6MTAwMDAnLCBjb25maWcuU1RPUkFHRV9VUkwpXG5cdFx0OiB1cmxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc0h0dHBQcm90b2NvbCh1cmw6IHN0cmluZykge1xuXHRyZXR1cm4gL14oaHR0cHxodHRwcyk6XFwvXFwvLy50ZXN0KHVybClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVXJsVmFsaWQodXJsOiBzdHJpbmcpIHtcblx0Ly8gbW9kaWZpZWQgZnJvbSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMzgwOTQzNVxuXHRyZXR1cm4gL14oaHR0cHM/OlxcL1xcLyk/Wy1hLXpBLVowLTlAOiUuXyt+Iz1dezEsMjU2fVxcLlthLXpBLVowLTkoKV17MSw2fVxcYihbLWEtekEtWjAtOSgpQDolXy5+Iz8mL1tcXF0hJCYnKissOz1dKikkLy50ZXN0KFxuXHRcdHVybFxuXHQpXG59XG5cbi8qKiBUaGUgdG90YWwgbnVtYmVyIG9mIHRyaWVzIGZvciBgZmV0Y2hUZXh0YCwgaW5jbHVkaW5nIHRoZSBpbml0aWFsIHJlcXVlc3QuICovXG5jb25zdCBUUllfTElNSVQgPSA1XG5cbmZ1bmN0aW9uIHdhaXQodGltZTogbnVtYmVyKSB7XG5cdHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcblx0XHRzZXRUaW1lb3V0KHJlc29sdmUsIHRpbWUpXG5cdH0pXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmZXRjaFRleHQodXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBSZXF1ZXN0SW5pdCkge1xuXHRsZXQgdHJ5Q291bnQgPSAwXG5cdGRvIHtcblx0XHR0cnlDb3VudCsrXG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IHJlc3AgPSBhd2FpdCBmZXRjaCh1cmwsIG9wdGlvbnMpXG5cdFx0XHRjb25zdCB0ZXh0ID0gYXdhaXQgcmVzcC50ZXh0KClcblx0XHRcdHJldHVybiB0ZXh0XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdGdldExvZ2dlcigpLmVycm9yKGBGYWlsZWQgdG8gZmV0Y2ggJHt1cmx9LiBhdHRlbXB0OiAke3RyeUNvdW50fSwgZXJyb3I6ICR7ZXJyb3J9YClcblx0XHRcdGlmICh0cnlDb3VudCA8IFRSWV9MSU1JVCkge1xuXHRcdFx0XHRhd2FpdCB3YWl0KDIgKiogKHRyeUNvdW50IC0gMSkgKiAxMDApIC8vIDEwMCwgMjAwLCA0MDAsIDgwMFxuXHRcdFx0fVxuXHRcdH1cblx0fSB3aGlsZSAodHJ5Q291bnQgPCBUUllfTElNSVQpXG5cblx0dGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gZmV0Y2ggJHt1cmx9IGFmdGVyICR7VFJZX0xJTUlUfSBhdHRlbXB0cy5gKVxufVxuXG5leHBvcnQgZW51bSBYX0ZSQU1FX09QVElPTlMge1xuXHRERU5ZID0gJ0RFTlknLFxuXHRTQU1FT1JJR0lOID0gJ1NBTUVPUklHSU4nLFxuXHRBTExPV19GUk9NID0gJ0FMTE9XLUZST00nXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VkSGVhZGVyc1Jlc3BvbnNlIHtcblx0aXNWYWxpZDogYm9vbGVhblxuXHRpRnJhbWVBbGxvd2VkPzogYm9vbGVhblxufVxuXG4vKipcbiAqIFVzaW5nIHRoZSBnaXZlbiBoZWFkZXJzLCBkZXRlcm1pbmUgaWYgYSB1cmwgaXMgYWxsb3dlZCB0byBiZSBkaXNwbGF5ZWQgaW4gYW4gaUZyYW1lLlxuICogQHBhcmFtIGhlYWRlcnMgQW4gYXJyYXkgb2YgcmVxdWVzdCBoZWFkZXJzLlxuICogQHJldHVybnMgVGhlIHBhcnNlZCByZXN1bHRcbiAqL1xuZXhwb3J0IGNvbnN0IHBhcnNlSGVhZGVyc1Jlc3BvbnNlID0gKGhlYWRlcnM/OiBEaWN0aW9uYXJ5PHN0cmluZyB8IHN0cmluZ1tdIHwgdW5kZWZpbmVkPikgPT4ge1xuXHQvLyBkZWZhdWx0IHJlc3VsdFxuXHRjb25zdCByZXN1bHQ6IFBhcnNlZEhlYWRlcnNSZXNwb25zZSA9IHtcblx0XHRpc1ZhbGlkOiBmYWxzZSxcblx0XHRpRnJhbWVBbGxvd2VkOiB1bmRlZmluZWRcblx0fVxuXG5cdGlmICghaGVhZGVycykge1xuXHRcdHJldHVybiByZXN1bHRcblx0fVxuXG5cdHJlc3VsdC5pc1ZhbGlkID0gdHJ1ZVxuXHRyZXN1bHQuaUZyYW1lQWxsb3dlZCA9IHRydWVcblxuXHRjb25zdCBsb2NhdGlvbiA9IHdpbmRvd1NlcnZpY2UuZ2V0TG9jYXRpb24oKVxuXG5cdC8vIGNvbnRlbnQtc2VjdXJpdHktcG9saWN5IC8geC1jb250ZW50LXNlY3VyaXR5LXBvbGljeVxuXHQvLyBjYW4gY29udGFpbiAnZnJhbWUtYW5jZXN0b3JzIDxzb3VyY2U+IDxzb3VyY2U+JyB3aXRoIG9uZSBvciBtYW55IHNvdXJjZXNcblx0Ly8gaUZyYW1lQWxsb3dlZCBpZiBpdCBkb2VzIG5vdCBjb250YWluICdmcmFtZS1hbmNlc3RvcnMnIG9yIGlmIGl0IGRvZXMgd2l0aCBhbiBhY2NlcHRhYmxlIHNvdXJjZVxuXHRjb25zdCB4Q29udGVudFNlY3VyaXR5UG9saWN5ID0gZmluZChcblx0XHRoZWFkZXJzLFxuXHRcdCh2YWx1ZSwga2V5KSA9PlxuXHRcdFx0a2V5LnRvTG93ZXJDYXNlKCkgPT09ICdjb250ZW50LXNlY3VyaXR5LXBvbGljeScgfHwga2V5LnRvTG93ZXJDYXNlKCkgPT09ICd4LWNvbnRlbnQtc2VjdXJpdHktcG9saWN5J1xuXHQpXG5cdGlmICh4Q29udGVudFNlY3VyaXR5UG9saWN5ICYmIGlzQXJyYXkoeENvbnRlbnRTZWN1cml0eVBvbGljeSkpIHtcblx0XHQvLyBkZWZpbmUgYWxsIGFjY2VwdGFibGUgZnJhbWUtYW5jZXN0b3JzIHNvdXJjZXNcblx0XHQvLyBwcm90b2NvbCwgZnVsbCBsb2NhdGlvbiBob3N0LCBob3N0LCBhbmQgYWxsIHdpbGRjYXJkIHBlcm11dGF0aW9uc1xuXHRcdGNvbnN0IGFjY2VwdGFibGVTb3VyY2VzID0gW2xvY2F0aW9uLnByb3RvY29sLCBgJHtsb2NhdGlvbi5wcm90b2NvbH0vLyR7bG9jYXRpb24uaG9zdH1gLCBsb2NhdGlvbi5ob3N0XVxuXHRcdGNvbnN0IGhvc3RQYXJ0cyA9IGxvY2F0aW9uLmhvc3Quc3BsaXQoJy4nKVxuXHRcdHdoaWxlIChob3N0UGFydHMubGVuZ3RoID4gMikge1xuXHRcdFx0aG9zdFBhcnRzLnNoaWZ0KClcblx0XHRcdGNvbnN0IHRlbXBIb3N0ID0gYCouJHtob3N0UGFydHMuam9pbignLicpfWBcblx0XHRcdGFjY2VwdGFibGVTb3VyY2VzLnB1c2godGVtcEhvc3QpXG5cdFx0XHRhY2NlcHRhYmxlU291cmNlcy5wdXNoKGAke2xvY2F0aW9uLnByb3RvY29sfS8vJHt0ZW1wSG9zdH1gKVxuXHRcdH1cblx0XHRyZXN1bHQuaUZyYW1lQWxsb3dlZCA9XG5cdFx0XHQheENvbnRlbnRTZWN1cml0eVBvbGljeS5zb21lKHggPT4geC5pbmRleE9mKCdmcmFtZS1hbmNlc3RvcnMgJykgPj0gMCkgfHxcblx0XHRcdHhDb250ZW50U2VjdXJpdHlQb2xpY3kuc29tZSh4ID0+IHtcblx0XHRcdFx0LyoqXG5cdFx0XHRcdCAqIE1hdGNoZXNcblx0XHRcdFx0ICogKiB0aGUgc3RyaW5nIGBmcmFtZS1hbmNlc3RvcnMgYFxuXHRcdFx0XHQgKiAqIG9uZSBvciBtYW55IG9mIHRoZSBmb2xsb3dpbmcsIGZvbGxvd2VkIGJ5IGEgc3BhY2UsIHNlbWljb2xvbiwgb3IgZW5kIG9mIHN0cmluZ1xuXHRcdFx0XHQgKiAgICAgKiBgaHR0cDpgXG5cdFx0XHRcdCAqICAgICAqIGBodHRwczpgXG5cdFx0XHRcdCAqICAgICAqIGAnc2VsZidgXG5cdFx0XHRcdCAqICAgICAqIGAnbm9uZSdgXG5cdFx0XHRcdCAqICAgICAqIHVybCB3aXRoIG9wdGlvbmFsIHNjaGVtZSBhbmQgb3B0aW9uYWwgYXN0ZXJpc2sgd2lsZGNhcmRzXG5cdFx0XHRcdCAqL1xuXHRcdFx0XHRjb25zdCBmcmFtZUFuY2VzdG9yc1JlZ2V4ID1cblx0XHRcdFx0XHQvZnJhbWUtYW5jZXN0b3JzICgoPzooPzooPzpodHRwOil8KD86aHR0cHM6KXwoPzonc2VsZicpfCg/Oidub25lJyl8KD86KD86aHR0cHM/OlxcL1xcLyk/W1xcdyouLV0rKD86XFwuW1xcdyouLV0rKStbXFx3LS5ffjovPyNbXFxdQCEkJicoKSorLD1dKykpKD86WyA7XXwkKSkrKS9nXG5cdFx0XHRcdGNvbnN0IHJlc3VsdHMgPSBmcmFtZUFuY2VzdG9yc1JlZ2V4LmV4ZWMoeClcblx0XHRcdFx0aWYgKCFyZXN1bHRzKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlXG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3Qgc291cmNlcyA9IHJlc3VsdHNbMV0uc3BsaXQoJyAnKVxuXHRcdFx0XHRyZXR1cm4gc291cmNlcy5zb21lKHNvdXJjZSA9PiBhY2NlcHRhYmxlU291cmNlcy5zb21lKGFjY2VwdGFibGVTb3VyY2UgPT4gYWNjZXB0YWJsZVNvdXJjZSA9PT0gc291cmNlKSlcblx0XHRcdH0pXG5cdH1cblxuXHQvLyB4LWZyYW1lLW9wdGlvbnMgY2FuIGJlIFsnU0FNRU9SSUdJTicsICdERU5ZJywgJ0FMTE9XLUZST00uLi4nXVxuXHQvLyBpRnJhbWVBbGxvd2VkIGlmIHRoZSB0aGUgeC1mcmFtZS1vcHRpb25zIGlzICdBTExPVy1GUk9NIHthcHAgd2ViIHVybH0nXG5cdGNvbnN0IHhGcmFtZU9wdGlvbnMgPSBmaW5kKGhlYWRlcnMsICh2YWx1ZSwga2V5KSA9PiBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ3gtZnJhbWUtb3B0aW9ucycpXG5cdGlmICh4RnJhbWVPcHRpb25zICYmIGlzQXJyYXkoeEZyYW1lT3B0aW9ucykpIHtcblx0XHRyZXN1bHQuaUZyYW1lQWxsb3dlZCA9XG5cdFx0XHQheEZyYW1lT3B0aW9ucy5zb21lKHggPT4geCA9PT0gWF9GUkFNRV9PUFRJT05TLkRFTlkgfHwgeCA9PT0gWF9GUkFNRV9PUFRJT05TLlNBTUVPUklHSU4pICYmXG5cdFx0XHR4RnJhbWVPcHRpb25zLnNvbWUoeCA9PiB4ID09PSBgJHtYX0ZSQU1FX09QVElPTlMuQUxMT1dfRlJPTX0gJHtsb2NhdGlvbi5wcm90b2NvbH0vLyR7bG9jYXRpb24uaG9zdH1gKVxuXHR9XG5cdHJldHVybiByZXN1bHRcbn1cblxuLyoqXG4gKiBQYXJzZSBhIHBhdGggc3RyaW5nIGludG8gYSBsb2NhdGlvbiB3aXRoIHNlcGFyYXRlIHBhdGhuYW1lLCBzZWFyY2gsIGFuZCBoYXNoIGNvbXBvbmVudHMuXG4gKiBAcGFyYW0gcGF0aCBBIHBhdGggc3RyaW5nXG4gKiBAcmV0dXJucyBUaGUgcGFyc2VkIHJlc3VsdFxuICovXG5leHBvcnQgY29uc3QgcGFyc2VMb2NhdGlvbiA9IChwYXRoOiBzdHJpbmcpOiBMb2NhdGlvbkRlc2NyaXB0b3IgPT4ge1xuXHRjb25zdCBzZWFyY2hTdGFydCA9IHBhdGguaW5kZXhPZignPycpXG5cdGNvbnN0IGhhc2hTdGFydCA9IHBhdGguaW5kZXhPZignIycpXG5cdGNvbnN0IHNlYXJjaEVuZCA9IGhhc2hTdGFydCA+IC0xID8gaGFzaFN0YXJ0IDogdW5kZWZpbmVkXG5cdGNvbnN0IHBhdGhuYW1lID1cblx0XHRzZWFyY2hTdGFydCA+IC0xID8gcGF0aC5zdWJzdHJpbmcoMCwgc2VhcmNoU3RhcnQpIDogaGFzaFN0YXJ0ID4gLTEgPyBwYXRoLnN1YnN0cmluZygwLCBoYXNoU3RhcnQpIDogcGF0aFxuXHRjb25zdCBzZWFyY2ggPSBzZWFyY2hTdGFydCA+IC0xID8gcGF0aC5zdWJzdHJpbmcoc2VhcmNoU3RhcnQsIHNlYXJjaEVuZCkgOiB1bmRlZmluZWRcblx0Y29uc3QgaGFzaCA9IGhhc2hTdGFydCA+IC0xID8gcGF0aC5zdWJzdHJpbmcoaGFzaFN0YXJ0KSA6IHVuZGVmaW5lZFxuXHRyZXR1cm4ge1xuXHRcdHBhdGhuYW1lOiBwYXRobmFtZSB8fCAnLycsXG5cdFx0c2VhcmNoOiBzZWFyY2gsXG5cdFx0aGFzaDogaGFzaFxuXHR9XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgU0hBLTI1NiBkaWdlc3Qgb2YgYSBzdHJpbmcgdmFsdWUuXG4gKiBAcmV0dXJucyBBIFByb21pc2UgQXJyYXlCdWZmZXIuXG4gKi9cbmV4cG9ydCBjb25zdCBzaGEyNTZBc3luYyA9IGFzeW5jIChwbGFpbjogc3RyaW5nKSA9PiB7XG5cdC8vIHJldHVybnMgcHJvbWlzZSBBcnJheUJ1ZmZlclxuXHRjb25zdCBlbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKClcblx0Y29uc3QgZGF0YSA9IGVuY29kZXIuZW5jb2RlKHBsYWluKVxuXHRyZXR1cm4gYXdhaXQgY3J5cHRvLnN1YnRsZS5kaWdlc3QoJ1NIQS0yNTYnLCBkYXRhKVxufVxuXG4vKipcbiAqIENvbnZlcnQgYW4gQXJyYXlCdWZmZXIgdG8gc3RyaW5nIHVzaW5nIFVpbnQ4IGFycmF5LlxuICogYnRvYSB0YWtlcyBjaGFycyBmcm9tIDAtMjU1IGFuZCBiYXNlNjQgZW5jb2Rlcy5cbiAqIFRoZW4gY29udmVydCB0aGUgYmFzZTY0IGVuY29kZWQgdG8gYmFzZTY0dXJsIGVuY29kZWQuXG4gKiAocmVwbGFjZSArIHdpdGggLSwgcmVwbGFjZSAvIHdpdGggXywgdHJpbSB0cmFpbGluZyA9KVxuICovXG5leHBvcnQgY29uc3QgYmFzZTY0VXJsRW5jb2RlID0gKGE6IEFycmF5QnVmZmVyKSA9PiB7XG5cdHJldHVybiBidG9hKFN0cmluZy5mcm9tQ2hhckNvZGUoLi4ubmV3IFVpbnQ4QXJyYXkoYSkpKVxuXHRcdC5yZXBsYWNlKC9cXCsvZywgJy0nKVxuXHRcdC5yZXBsYWNlKC9cXC8vZywgJ18nKVxuXHRcdC5yZXBsYWNlKC89KyQvLCAnJylcbn1cbiJd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
|
package/lib/utils/user.js
CHANGED
|
@@ -67,4 +67,4 @@ const stopImpersonation = guid => {
|
|
|
67
67
|
});
|
|
68
68
|
};
|
|
69
69
|
exports.stopImpersonation = stopImpersonation;
|
|
70
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
70
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29uc3RhbnRzIiwicmVxdWlyZSIsIl9hY3Rpb25DcmVhdG9yIiwiX25vU3RvcmVTYWdhIiwiX2ZldGNoIiwibWFrZVBvc3Nlc3NpdmUiLCJ3b3JkIiwiZW5kc1dpdGgiLCJkaXNwbGF5TmFtZSIsInUiLCJzaG91bGRSZXZlcnNlIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwidW5kZWZpbmVkIiwiZmlyc3ROYW1lIiwibGFzdE5hbWUiLCJlbWFpbCIsImV4cG9ydHMiLCJkaXNwbGF5TmFtZVBvc3Nlc3NpdmUiLCJkaXNwbGF5Rmlyc3ROYW1lIiwiZGlzcGxheUZpcnN0TmFtZVBvc3Nlc3NpdmUiLCJmaWx0ZXJVc2Vyc0J5Um9sZSIsInJvbGUiLCJ1c2VyUm9sZXMiLCJmaWx0ZXIiLCJ1c2VyUm9sZSIsInJvbGVzIiwic29tZSIsInIiLCJzdGFydEltcGVyc29uYXRpb24iLCJndWlkIiwidXNlcklkIiwicmVnaXN0ZXJOb1N0b3JlQWN0aW9uSG9vayIsImRhdGEiLCJ1bnJlZ2lzdGVyTm9TdG9yZUFjdGlvbkhvb2siLCJpc0ZldGNoRXJyb3JEYXRhIiwiYWRkTm90aWZpY2F0aW9uIiwidGV4dCIsImRldGFpbCIsInR5cGUiLCJOT1RJRklDQVRJT05fVFlQRSIsIkVSUk9SIiwiaXNGZXRjaENhbmNlbGxlZERhdGEiLCJyZXNwb25zZSIsIndpbmRvdyIsImxvY2F0aW9uIiwiaHJlZiIsImVuY29kZVVSSUNvbXBvbmVudCIsImNvZGUiLCJkaXNwYXRjaE1vZGVsRmV0Y2hSZXF1ZXN0IiwibW9kZWxOYW1lIiwibm9TdG9yZSIsInF1ZXJ5UGFyYW1zIiwic3RvcEltcGVyc29uYXRpb24iXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvdXNlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOT1RJRklDQVRJT05fVFlQRSB9IGZyb20gJy4uL2NvbnN0YW50cydcbmltcG9ydCB7IGFkZE5vdGlmaWNhdGlvbiwgZGlzcGF0Y2hNb2RlbEZldGNoUmVxdWVzdCB9IGZyb20gJy4uL3JlZHV4L2FjdGlvbkNyZWF0b3InXG5pbXBvcnQgeyByZWdpc3Rlck5vU3RvcmVBY3Rpb25Ib29rLCB1bnJlZ2lzdGVyTm9TdG9yZUFjdGlvbkhvb2sgfSBmcm9tICcuLi9yZWR1eC9zYWdhcy9ub1N0b3JlU2FnYSdcbmltcG9ydCB7IEZldGNoRXJyb3JEYXRhLCBVc2VyLCBVc2VyV2l0aFJvbGVzIH0gZnJvbSAnLi4vdHlwZXMnXG5pbXBvcnQgeyBpc0ZldGNoQ2FuY2VsbGVkRGF0YSwgaXNGZXRjaEVycm9yRGF0YSB9IGZyb20gJy4vZmV0Y2gnXG5cbmNvbnN0IG1ha2VQb3NzZXNzaXZlID0gKHdvcmQ6IHN0cmluZykgPT4gKHdvcmQuZW5kc1dpdGgoJ3MnKSA/IGAke3dvcmR94oCZYCA6IGAke3dvcmR94oCZc2ApXG5cbmV4cG9ydCBjb25zdCBkaXNwbGF5TmFtZSA9ICh1OiBVc2VyLCBzaG91bGRSZXZlcnNlID0gZmFsc2UpID0+XG5cdCEhdS5maXJzdE5hbWUgJiYgISF1Lmxhc3ROYW1lXG5cdFx0PyBzaG91bGRSZXZlcnNlXG5cdFx0XHQ/IGAke3UubGFzdE5hbWV9LCAke3UuZmlyc3ROYW1lfWBcblx0XHRcdDogYCR7dS5maXJzdE5hbWV9ICR7dS5sYXN0TmFtZX1gXG5cdFx0OiB1LmVtYWlsXG5cbmV4cG9ydCBjb25zdCBkaXNwbGF5TmFtZVBvc3Nlc3NpdmUgPSAodTogVXNlcikgPT5cblx0ISF1LmZpcnN0TmFtZSAmJiAhIXUubGFzdE5hbWUgPyBgJHt1LmZpcnN0TmFtZX0gJHttYWtlUG9zc2Vzc2l2ZSh1Lmxhc3ROYW1lKX1gIDogYCR7dS5lbWFpbH3igJlzYFxuXG5leHBvcnQgY29uc3QgZGlzcGxheUZpcnN0TmFtZSA9ICh1OiBVc2VyKSA9PiAodS5maXJzdE5hbWUgPyB1LmZpcnN0TmFtZSA6IHUuZW1haWwpXG5cbmV4cG9ydCBjb25zdCBkaXNwbGF5Rmlyc3ROYW1lUG9zc2Vzc2l2ZSA9ICh1OiBVc2VyKSA9PiAodS5maXJzdE5hbWUgPyBtYWtlUG9zc2Vzc2l2ZSh1LmZpcnN0TmFtZSkgOiBgJHt1LmVtYWlsfeKAmXNgKVxuXG5leHBvcnQgY29uc3QgZmlsdGVyVXNlcnNCeVJvbGUgPSAocm9sZTogc3RyaW5nKSA9PiAodXNlclJvbGVzOiBVc2VyV2l0aFJvbGVzW10pID0+IHtcblx0cmV0dXJuIHVzZXJSb2xlcy5maWx0ZXIodXNlclJvbGUgPT4gdXNlclJvbGUucm9sZXMuc29tZShyID0+IHIucm9sZSA9PT0gcm9sZSkpXG59XG5cbmV4cG9ydCBjb25zdCBzdGFydEltcGVyc29uYXRpb24gPSAoZ3VpZDogc3RyaW5nLCB1c2VySWQ6IHN0cmluZykgPT4ge1xuXHRyZWdpc3Rlck5vU3RvcmVBY3Rpb25Ib29rKGd1aWQsIChkYXRhOiB1bmtub3duKSA9PiB7XG5cdFx0dW5yZWdpc3Rlck5vU3RvcmVBY3Rpb25Ib29rKGd1aWQpXG5cdFx0aWYgKCFkYXRhIHx8IGlzRmV0Y2hFcnJvckRhdGEoZGF0YSkpIHtcblx0XHRcdGFkZE5vdGlmaWNhdGlvbih7XG5cdFx0XHRcdHRleHQ6IChkYXRhIGFzIEZldGNoRXJyb3JEYXRhIHwgbnVsbCk/LmRldGFpbCB8fCAnQ291bGQgbm90IHN0YXJ0IGltcGVyc29uYXRpb24nLFxuXHRcdFx0XHR0eXBlOiBOT1RJRklDQVRJT05fVFlQRS5FUlJPUlxuXHRcdFx0fSlcblx0XHR9IGVsc2UgaWYgKCFpc0ZldGNoQ2FuY2VsbGVkRGF0YShkYXRhKSkge1xuXHRcdFx0Y29uc3QgcmVzcG9uc2UgPSBkYXRhIGFzIHsgY29kZTogc3RyaW5nIH1cblx0XHRcdHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gYC8/Y29kZT0ke2VuY29kZVVSSUNvbXBvbmVudChyZXNwb25zZS5jb2RlKX1gXG5cdFx0fVxuXHR9KVxuXG5cdGRpc3BhdGNoTW9kZWxGZXRjaFJlcXVlc3Qoe1xuXHRcdG1vZGVsTmFtZTogJ3N0YXJ0SW1wZXJzb25hdGlvbicsXG5cdFx0bm9TdG9yZTogdHJ1ZSxcblx0XHRndWlkLFxuXHRcdHF1ZXJ5UGFyYW1zOiB7IHVzZXJJZCB9XG5cdH0pXG59XG5cbmV4cG9ydCBjb25zdCBzdG9wSW1wZXJzb25hdGlvbiA9IChndWlkOiBzdHJpbmcpID0+IHtcblx0cmVnaXN0ZXJOb1N0b3JlQWN0aW9uSG9vayhndWlkLCAoZGF0YTogdW5rbm93bikgPT4ge1xuXHRcdHVucmVnaXN0ZXJOb1N0b3JlQWN0aW9uSG9vayhndWlkKVxuXHRcdGlmICghZGF0YSB8fCBpc0ZldGNoRXJyb3JEYXRhKGRhdGEpKSB7XG5cdFx0XHRhZGROb3RpZmljYXRpb24oe1xuXHRcdFx0XHR0ZXh0OiAoZGF0YSBhcyBGZXRjaEVycm9yRGF0YSB8IG51bGwpPy5kZXRhaWwgfHwgJ0NvdWxkIG5vdCBzdG9wIGltcGVyc29uYXRpb24nLFxuXHRcdFx0XHR0eXBlOiBOT1RJRklDQVRJT05fVFlQRS5FUlJPUlxuXHRcdFx0fSlcblx0XHR9IGVsc2UgaWYgKCFpc0ZldGNoQ2FuY2VsbGVkRGF0YShkYXRhKSkge1xuXHRcdFx0Y29uc3QgcmVzcG9uc2UgPSBkYXRhIGFzIHsgY29kZTogc3RyaW5nIH1cblx0XHRcdHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gYC8/Y29kZT0ke2VuY29kZVVSSUNvbXBvbmVudChyZXNwb25zZS5jb2RlKX1gXG5cdFx0fVxuXHR9KVxuXG5cdGRpc3BhdGNoTW9kZWxGZXRjaFJlcXVlc3Qoe1xuXHRcdG1vZGVsTmFtZTogJ3N0b3BJbXBlcnNvbmF0aW9uJyxcblx0XHRub1N0b3JlOiB0cnVlLFxuXHRcdGd1aWRcblx0fSlcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBQUEsVUFBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsY0FBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsWUFBQSxHQUFBRixPQUFBO0FBRUEsSUFBQUcsTUFBQSxHQUFBSCxPQUFBO0FBRUEsTUFBTUksY0FBYyxHQUFJQyxJQUFZLElBQU1BLElBQUksQ0FBQ0MsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUdELElBQUksR0FBRyxHQUFHLEdBQUdBLElBQUksSUFB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
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Using the `lastActivityDate` set in local storage by "studiokit-caliper-js",
|
|
3
|
+
* determine if the user is idle, using `AppConfiguration.SESSION_IDLE_THRESHOLD`
|
|
4
|
+
*
|
|
5
|
+
* NOTE: returns `false` on LOCAL, since caliper is not configured for localhost
|
|
6
|
+
*/
|
|
7
|
+
export declare const isUserIdle: () => boolean;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.isUserIdle = void 0;
|
|
8
|
+
var _momentTimezone = _interopRequireDefault(require("moment-timezone"));
|
|
9
|
+
var _constants = require("../constants");
|
|
10
|
+
var _userActivityService = require("../services/userActivityService");
|
|
11
|
+
/**
|
|
12
|
+
* Using the `lastActivityDate` set in local storage by "studiokit-caliper-js",
|
|
13
|
+
* determine if the user is idle, using `AppConfiguration.SESSION_IDLE_THRESHOLD`
|
|
14
|
+
*
|
|
15
|
+
* NOTE: returns `false` on LOCAL, since caliper is not configured for localhost
|
|
16
|
+
*/
|
|
17
|
+
const isUserIdle = () => {
|
|
18
|
+
const appConfig = (0, _constants.getAppConfig)();
|
|
19
|
+
// if (getAppConfig().TIER === TIER.LOCAL) {
|
|
20
|
+
// return false
|
|
21
|
+
// }
|
|
22
|
+
const lastActivityDateString = _userActivityService.userActivityService.getLastActivityDate();
|
|
23
|
+
if (!lastActivityDateString) {
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
const lastActivityDateUtc = _momentTimezone.default.utc(lastActivityDateString);
|
|
27
|
+
const nowUtc = _momentTimezone.default.utc();
|
|
28
|
+
return nowUtc.diff(lastActivityDateUtc) >= appConfig.SESSION_IDLE_THRESHOLD;
|
|
29
|
+
};
|
|
30
|
+
exports.isUserIdle = isUserIdle;
|
|
31
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbW9tZW50VGltZXpvbmUiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9jb25zdGFudHMiLCJfdXNlckFjdGl2aXR5U2VydmljZSIsImlzVXNlcklkbGUiLCJhcHBDb25maWciLCJnZXRBcHBDb25maWciLCJsYXN0QWN0aXZpdHlEYXRlU3RyaW5nIiwidXNlckFjdGl2aXR5U2VydmljZSIsImdldExhc3RBY3Rpdml0eURhdGUiLCJsYXN0QWN0aXZpdHlEYXRlVXRjIiwibW9tZW50IiwidXRjIiwibm93VXRjIiwiZGlmZiIsIlNFU1NJT05fSURMRV9USFJFU0hPTEQiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL3VzZXJBY3Rpdml0eS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudC10aW1lem9uZSdcbmltcG9ydCB7IGdldEFwcENvbmZpZyB9IGZyb20gJy4uL2NvbnN0YW50cydcbmltcG9ydCB7IHVzZXJBY3Rpdml0eVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy91c2VyQWN0aXZpdHlTZXJ2aWNlJ1xuXG4vKipcbiAqIFVzaW5nIHRoZSBgbGFzdEFjdGl2aXR5RGF0ZWAgc2V0IGluIGxvY2FsIHN0b3JhZ2UgYnkgXCJzdHVkaW9raXQtY2FsaXBlci1qc1wiLFxuICogZGV0ZXJtaW5lIGlmIHRoZSB1c2VyIGlzIGlkbGUsIHVzaW5nIGBBcHBDb25maWd1cmF0aW9uLlNFU1NJT05fSURMRV9USFJFU0hPTERgXG4gKlxuICogTk9URTogcmV0dXJucyBgZmFsc2VgIG9uIExPQ0FMLCBzaW5jZSBjYWxpcGVyIGlzIG5vdCBjb25maWd1cmVkIGZvciBsb2NhbGhvc3RcbiAqL1xuZXhwb3J0IGNvbnN0IGlzVXNlcklkbGUgPSAoKSA9PiB7XG5cdGNvbnN0IGFwcENvbmZpZyA9IGdldEFwcENvbmZpZygpXG5cdC8vIGlmIChnZXRBcHBDb25maWcoKS5USUVSID09PSBUSUVSLkxPQ0FMKSB7XG5cdC8vIFx0cmV0dXJuIGZhbHNlXG5cdC8vIH1cblx0Y29uc3QgbGFzdEFjdGl2aXR5RGF0ZVN0cmluZyA9IHVzZXJBY3Rpdml0eVNlcnZpY2UuZ2V0TGFzdEFjdGl2aXR5RGF0ZSgpXG5cdGlmICghbGFzdEFjdGl2aXR5RGF0ZVN0cmluZykge1xuXHRcdHJldHVybiBmYWxzZVxuXHR9XG5cblx0Y29uc3QgbGFzdEFjdGl2aXR5RGF0ZVV0YyA9IG1vbWVudC51dGMobGFzdEFjdGl2aXR5RGF0ZVN0cmluZylcblx0Y29uc3Qgbm93VXRjID0gbW9tZW50LnV0YygpXG5cdHJldHVybiBub3dVdGMuZGlmZihsYXN0QWN0aXZpdHlEYXRlVXRjKSA+PSBhcHBDb25maWcuU0VTU0lPTl9JRExFX1RIUkVTSE9MRFxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUEsSUFBQUEsZUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsVUFBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsb0JBQUEsR0FBQUYsT0FBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLE1BQU1HLFVBQVUsR0FBR0EsQ0FBQSxLQUFNO0VBQy9CLE1BQU1DLFNBQVMsR0FBRyxJQUFBQyx1QkFBWSxFQUFDLENBQUM7RUFDaEM7RUFDQTtFQUNBO0VBQ0EsTUFBTUMsc0JBQXNCLEdBQUdDLHdDQUFtQixDQUFDQyxtQkFBbUIsQ0FBQyxDQUFDO0VBQ3hFLElBQUksQ0FBQ0Ysc0JBQXNCLEVBQUU7SUFDNUIsT0FBTyxLQUFLO0VBQ2I7RUFFQSxNQUFNRyxtQkFBbUIsR0FBR0MsdUJBQU0sQ0FBQ0MsR0FBRyxDQUFDTCxzQkFBc0IsQ0FBQztFQUM5RCxNQUFNTSxNQUFNLEdBQUdGLHVCQUFNLENBQUNDLEdBQUcsQ0FBQyxDQUFDO0VBQzNCLE9BQU9DLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDSixtQkFBbUIsQ0FBQyxJQUFJTCxTQUFTLENBQUNVLHNCQUFzQjtBQUM1RSxDQUFDO0FBQUFDLE9BQUEsQ0FBQVosVUFBQSxHQUFBQSxVQUFBIiwiaWdub3JlTGlzdCI6W119
|
package/lib/utils/userAgent.js
CHANGED
|
@@ -12,4 +12,4 @@ const getOperatingSystem = () => {
|
|
|
12
12
|
return macOSPlatforms.test(userAgent) ? _operatingSystem.OPERATING_SYSTEM.MAC : windowsPlatforms.test(userAgent) ? _operatingSystem.OPERATING_SYSTEM.WINDOWS : _operatingSystem.OPERATING_SYSTEM.UNKNOWN;
|
|
13
13
|
};
|
|
14
14
|
exports.getOperatingSystem = getOperatingSystem;
|
|
15
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
15
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfb3BlcmF0aW5nU3lzdGVtIiwicmVxdWlyZSIsImdldE9wZXJhdGluZ1N5c3RlbSIsInVzZXJBZ2VudCIsIndpbmRvdyIsIm5hdmlnYXRvciIsInRvTG93ZXJDYXNlIiwibWFjT1NQbGF0Zm9ybXMiLCJ3aW5kb3dzUGxhdGZvcm1zIiwidGVzdCIsIk9QRVJBVElOR19TWVNURU0iLCJNQUMiLCJXSU5ET1dTIiwiVU5LTk9XTiIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvdXNlckFnZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9QRVJBVElOR19TWVNURU0gfSBmcm9tICcuLi9jb25zdGFudHMvb3BlcmF0aW5nU3lzdGVtJ1xuXG5leHBvcnQgY29uc3QgZ2V0T3BlcmF0aW5nU3lzdGVtID0gKCkgPT4ge1xuXHRjb25zdCB1c2VyQWdlbnQgPSB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpXG5cdGNvbnN0IG1hY09TUGxhdGZvcm1zID0gLyhtYWNpbnRvc2h8bWFjaW50ZWx8bWFjcHBjfG1hYzY4a3xtYWNvcykvaVxuXHRjb25zdCB3aW5kb3dzUGxhdGZvcm1zID0gLyh3aW4zMnx3aW42NHx3aW5kb3dzfHdpbmNlKS9pXG5cblx0cmV0dXJuIG1hY09TUGxhdGZvcm1zLnRlc3QodXNlckFnZW50KVxuXHRcdD8gT1BFUkFUSU5HX1NZU1RFTS5NQUNcblx0XHQ6IHdpbmRvd3NQbGF0Zm9ybXMudGVzdCh1c2VyQWdlbnQpXG5cdFx0XHQ/IE9QRVJBVElOR19TWVNURU0uV0lORE9XU1xuXHRcdFx0OiBPUEVSQVRJTkdfU1lTVEVNLlVOS05PV05cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBQUEsZ0JBQUEsR0FBQUMsT0FBQTtBQUVPLE1BQU1DLGtCQUFrQixHQUFHQSxDQUFBLEtBQU07RUFDdkMsTUFBTUMsU0FBUyxHQUFHQyxNQUFNLENBQUNDLFNBQVMsQ0FBQ0YsU0FBUyxDQUFDRyxXQUFXLENBQUMsQ0FBQztFQUMxRCxNQUFNQyxjQUFjLEdBQUcsMkNBQTJDO0VBQ2xFLE1BQU1DLGdCQUFnQixHQUFHLDhCQUE4QjtFQUV2RCxPQUFPRCxjQUFjLENBQUNFLElBQUksQ0FBQ04sU0FBUyxDQUFDLEdBQ2xDTyxpQ0FBZ0IsQ0FBQ0MsR0FBRyxHQUNwQkgsZ0JBQWdCLENBQUNDLElBQUksQ0FBQ04sU0FBUyxDQUFDLEdBQy9CTyxpQ0FBZ0IsQ0FBQ0UsT0FBTyxHQUN4QkYsaUNBQWdCLENBQUNHLE9BQU87QUFDN0IsQ0FBQztBQUFBQyxPQUFBLENBQUFaLGtCQUFBLEdBQUFBLGtCQUFBIiwiaWdub3JlTGlzdCI6W119
|
package/lib/utils/userRole.js
CHANGED
|
@@ -5,29 +5,29 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.sortByRole = exports.sortByHighestAccessRole = exports.isExternal = exports.getUserId = exports.getRoleText = exports.convertToUserWithRoles = void 0;
|
|
7
7
|
var _baseRole = require("./baseRole");
|
|
8
|
-
/**
|
|
9
|
-
* Get the user id for a `userRole`, either a `UserRole` or `EntityUserRole`.
|
|
10
|
-
* @param userRole The user role
|
|
8
|
+
/**
|
|
9
|
+
* Get the user id for a `userRole`, either a `UserRole` or `EntityUserRole`.
|
|
10
|
+
* @param userRole The user role
|
|
11
11
|
*/
|
|
12
12
|
const getUserId = userRole => Object.prototype.hasOwnProperty.call(userRole, 'userId') ? userRole.userId : userRole.id;
|
|
13
13
|
|
|
14
|
-
/**
|
|
15
|
-
* Get whether or not the `userRole` has a prop `isExternal` and it is `true`.
|
|
16
|
-
* @param userRole The user role
|
|
14
|
+
/**
|
|
15
|
+
* Get whether or not the `userRole` has a prop `isExternal` and it is `true`.
|
|
16
|
+
* @param userRole The user role
|
|
17
17
|
*/
|
|
18
18
|
exports.getUserId = getUserId;
|
|
19
19
|
const isExternal = userRole => Object.prototype.hasOwnProperty.call(userRole, 'isExternal') && userRole.isExternal === true;
|
|
20
20
|
|
|
21
|
-
/**
|
|
22
|
-
* Get the text for the given `userRole.role`. Defaults to using `textForBaseRole`.
|
|
23
|
-
* @param textForRole Override method for providing role text
|
|
21
|
+
/**
|
|
22
|
+
* Get the text for the given `userRole.role`. Defaults to using `textForBaseRole`.
|
|
23
|
+
* @param textForRole Override method for providing role text
|
|
24
24
|
*/
|
|
25
25
|
exports.isExternal = isExternal;
|
|
26
26
|
const getRoleText = textForRole => a => textForRole ? textForRole(a.role) : (0, _baseRole.textForBaseRole)(a.role);
|
|
27
27
|
|
|
28
|
-
/**
|
|
29
|
-
* Sort the userRoles by role, using the provided `roles` order
|
|
30
|
-
* @param roles Roles ordered in descing access level
|
|
28
|
+
/**
|
|
29
|
+
* Sort the userRoles by role, using the provided `roles` order
|
|
30
|
+
* @param roles Roles ordered in descing access level
|
|
31
31
|
*/
|
|
32
32
|
exports.getRoleText = getRoleText;
|
|
33
33
|
const sortByRole = roles => (a, b) => {
|
|
@@ -39,9 +39,9 @@ const sortByRole = roles => (a, b) => {
|
|
|
39
39
|
return 0;
|
|
40
40
|
};
|
|
41
41
|
|
|
42
|
-
/**
|
|
43
|
-
* Sort the users by role, using the provided `roles` order
|
|
44
|
-
* @param roles Roles ordered in descing access level
|
|
42
|
+
/**
|
|
43
|
+
* Sort the users by role, using the provided `roles` order
|
|
44
|
+
* @param roles Roles ordered in descing access level
|
|
45
45
|
*/
|
|
46
46
|
exports.sortByRole = sortByRole;
|
|
47
47
|
const sortByHighestAccessRole = roles => (a, b) => {
|
|
@@ -67,4 +67,4 @@ const convertToUserWithRoles = userRole => {
|
|
|
67
67
|
};
|
|
68
68
|
};
|
|
69
69
|
exports.convertToUserWithRoles = convertToUserWithRoles;
|
|
70
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
70
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYmFzZVJvbGUiLCJyZXF1aXJlIiwiZ2V0VXNlcklkIiwidXNlclJvbGUiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJ1c2VySWQiLCJpZCIsImV4cG9ydHMiLCJpc0V4dGVybmFsIiwiZ2V0Um9sZVRleHQiLCJ0ZXh0Rm9yUm9sZSIsImEiLCJyb2xlIiwidGV4dEZvckJhc2VSb2xlIiwic29ydEJ5Um9sZSIsInJvbGVzIiwiYiIsImFJbmRleCIsImluZGV4T2YiLCJiSW5kZXgiLCJzb3J0QnlIaWdoZXN0QWNjZXNzUm9sZSIsImFSb2xlIiwic29ydCIsImJSb2xlIiwiY29udmVydFRvVXNlcldpdGhSb2xlcyIsImZpcnN0TmFtZSIsImxhc3ROYW1lIiwiZW1haWwiLCJ1aWQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvdXNlclJvbGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVXNlclJvbGUsIFVzZXJXaXRoUm9sZXMgfSBmcm9tICcuLi90eXBlcy9Vc2VyUm9sZSdcbmltcG9ydCB7IHRleHRGb3JCYXNlUm9sZSB9IGZyb20gJy4vYmFzZVJvbGUnXG5cbi8qKlxuICogR2V0IHRoZSB1c2VyIGlkIGZvciBhIGB1c2VyUm9sZWAsIGVpdGhlciBhIGBVc2VyUm9sZWAgb3IgYEVudGl0eVVzZXJSb2xlYC5cbiAqIEBwYXJhbSB1c2VyUm9sZSBUaGUgdXNlciByb2xlXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRVc2VySWQgPSAodXNlclJvbGU6IFVzZXJSb2xlKTogc3RyaW5nID0+XG5cdE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh1c2VyUm9sZSwgJ3VzZXJJZCcpID8gKHVzZXJSb2xlIGFzIGFueSkudXNlcklkIDogdXNlclJvbGUuaWRcblxuLyoqXG4gKiBHZXQgd2hldGhlciBvciBub3QgdGhlIGB1c2VyUm9sZWAgaGFzIGEgcHJvcCBgaXNFeHRlcm5hbGAgYW5kIGl0IGlzIGB0cnVlYC5cbiAqIEBwYXJhbSB1c2VyUm9sZSBUaGUgdXNlciByb2xlXG4gKi9cbmV4cG9ydCBjb25zdCBpc0V4dGVybmFsID0gKHVzZXJSb2xlOiBVc2VyUm9sZSk6IGJvb2xlYW4gPT5cblx0T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHVzZXJSb2xlLCAnaXNFeHRlcm5hbCcpICYmICh1c2VyUm9sZSBhcyBhbnkpLmlzRXh0ZXJuYWwgPT09IHRydWVcblxuLyoqXG4gKiBHZXQgdGhlIHRleHQgZm9yIHRoZSBnaXZlbiBgdXNlclJvbGUucm9sZWAuIERlZmF1bHRzIHRvIHVzaW5nIGB0ZXh0Rm9yQmFzZVJvbGVgLlxuICogQHBhcmFtIHRleHRGb3JSb2xlIE92ZXJyaWRlIG1ldGhvZCBmb3IgcHJvdmlkaW5nIHJvbGUgdGV4dFxuICovXG5leHBvcnQgY29uc3QgZ2V0Um9sZVRleHQgPSAodGV4dEZvclJvbGU/OiAocm9sZTogc3RyaW5nKSA9PiBzdHJpbmcpID0+IChhOiBVc2VyUm9sZSkgPT5cblx0dGV4dEZvclJvbGUgPyB0ZXh0Rm9yUm9sZShhLnJvbGUpIDogdGV4dEZvckJhc2VSb2xlKGEucm9sZSlcblxuLyoqXG4gKiBTb3J0IHRoZSB1c2VyUm9sZXMgYnkgcm9sZSwgdXNpbmcgdGhlIHByb3ZpZGVkIGByb2xlc2Agb3JkZXJcbiAqIEBwYXJhbSByb2xlcyBSb2xlcyBvcmRlcmVkIGluIGRlc2NpbmcgYWNjZXNzIGxldmVsXG4gKi9cbmV4cG9ydCBjb25zdCBzb3J0QnlSb2xlID0gKHJvbGVzOiBzdHJpbmdbXSkgPT4gKGE6IFVzZXJSb2xlLCBiOiBVc2VyUm9sZSkgPT4ge1xuXHRjb25zdCBhSW5kZXggPSByb2xlcy5pbmRleE9mKGEucm9sZSlcblx0Y29uc3QgYkluZGV4ID0gcm9sZXMuaW5kZXhPZihiLnJvbGUpXG5cdGlmIChhSW5kZXggIT09IGJJbmRleCkge1xuXHRcdHJldHVybiBhSW5kZXggPiBiSW5kZXggPyAxIDogLTFcblx0fVxuXHRyZXR1cm4gMFxufVxuXG4vKipcbiAqIFNvcnQgdGhlIHVzZXJzIGJ5IHJvbGUsIHVzaW5nIHRoZSBwcm92aWRlZCBgcm9sZXNgIG9yZGVyXG4gKiBAcGFyYW0gcm9sZXMgUm9sZXMgb3JkZXJlZCBpbiBkZXNjaW5nIGFjY2VzcyBsZXZlbFxuICovXG5leHBvcnQgY29uc3Qgc29ydEJ5SGlnaGVzdEFjY2Vzc1JvbGUgPSAocm9sZXM6IHN0cmluZ1tdKSA9PiAoYTogVXNlcldpdGhSb2xlcywgYjogVXNlcldpdGhSb2xlcykgPT4ge1xuXHRjb25zdCBhUm9sZSA9IGEucm9sZXMuc29ydChzb3J0QnlSb2xlKHJvbGVzKSlbMF0ucm9sZVxuXHRjb25zdCBiUm9sZSA9IGIucm9sZXMuc29ydChzb3J0QnlSb2xlKHJvbGVzKSlbMF0ucm9sZVxuXHRjb25zdCBhSW5kZXggPSByb2xlcy5pbmRleE9mKGFSb2xlKVxuXHRjb25zdCBiSW5kZXggPSByb2xlcy5pbmRleE9mKGJSb2xlKVxuXHRpZiAoYUluZGV4ICE9PSBiSW5kZXgpIHtcblx0XHRyZXR1cm4gYUluZGV4ID4gYkluZGV4ID8gMSA6IC0xXG5cdH1cblx0cmV0dXJuIDBcbn1cblxuZXhwb3J0IGNvbnN0IGNvbnZlcnRUb1VzZXJXaXRoUm9sZXMgPSA8VFVzZXJSb2xlIGV4dGVuZHMgVXNlclJvbGUgPSBVc2VyUm9sZT4oXG5cdHVzZXJSb2xlOiBUVXNlclJvbGVcbik6IFVzZXJXaXRoUm9sZXM8VFVzZXJSb2xlPiA9PiB7XG5cdGNvbnN0IHVzZXJJZCA9IGdldFVzZXJJZCh1c2VyUm9sZSlcblx0cmV0dXJuIHtcblx0XHRpZDogdXNlcklkLFxuXHRcdGZpcnN0TmFtZTogdXNlclJvbGUuZmlyc3ROYW1lLFxuXHRcdGxhc3ROYW1lOiB1c2VyUm9sZS5sYXN0TmFtZSxcblx0XHRlbWFpbDogdXNlclJvbGUuZW1haWwsXG5cdFx0dWlkOiB1c2VyUm9sZS51aWQsXG5cdFx0cm9sZXM6IFt1c2VyUm9sZV1cblx0fVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFDQSxJQUFB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
|