@plumile/backoffice-react 0.1.59
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 -0
- package/lib/esm/auth/login/AuthPanel.js +28 -0
- package/lib/esm/auth/login/AuthPanel.js.map +1 -0
- package/lib/esm/auth/login/EmailCapturePanel.js +52 -0
- package/lib/esm/auth/login/EmailCapturePanel.js.map +1 -0
- package/lib/esm/auth/login/LoginFlow.js +130 -0
- package/lib/esm/auth/login/LoginFlow.js.map +1 -0
- package/lib/esm/auth/login/MethodChooser.js +51 -0
- package/lib/esm/auth/login/MethodChooser.js.map +1 -0
- package/lib/esm/auth/login/MfaChallengeForm.js +83 -0
- package/lib/esm/auth/login/MfaChallengeForm.js.map +1 -0
- package/lib/esm/auth/login/OidcButtons.js +29 -0
- package/lib/esm/auth/login/OidcButtons.js.map +1 -0
- package/lib/esm/auth/login/PasskeyLoginForm.js +84 -0
- package/lib/esm/auth/login/PasskeyLoginForm.js.map +1 -0
- package/lib/esm/auth/login/PasswordLoginPanel.js +37 -0
- package/lib/esm/auth/login/PasswordLoginPanel.js.map +1 -0
- package/lib/esm/auth/login/loginPage.css.js +8 -0
- package/lib/esm/auth/login/loginPage.css.js.map +1 -0
- package/lib/esm/auth/login/synchronizeAuthStatusQuery.js +9 -0
- package/lib/esm/auth/login/synchronizeAuthStatusQuery.js.map +1 -0
- package/lib/esm/auth/pages/AcceptInvitationScreen.js +120 -0
- package/lib/esm/auth/pages/AcceptInvitationScreen.js.map +1 -0
- package/lib/esm/auth/pages/PasswordResetCompleteScreen.js +105 -0
- package/lib/esm/auth/pages/PasswordResetCompleteScreen.js.map +1 -0
- package/lib/esm/auth/pages/PasswordResetRequestScreen.js +88 -0
- package/lib/esm/auth/pages/PasswordResetRequestScreen.js.map +1 -0
- package/lib/esm/auth/pages/VerifyEmailScreen.js +65 -0
- package/lib/esm/auth/pages/VerifyEmailScreen.js.map +1 -0
- package/lib/esm/components/backoffice/actions/BackofficeEntityActionFormDialog.js +525 -0
- package/lib/esm/components/backoffice/actions/BackofficeEntityActionFormDialog.js.map +1 -0
- package/lib/esm/components/backoffice/actions/LazyBackofficeEntityActionFormDialog.js +11 -0
- package/lib/esm/components/backoffice/actions/LazyBackofficeEntityActionFormDialog.js.map +1 -0
- package/lib/esm/components/backoffice/actions/backofficeEntityActionFormDialog.css.js +8 -0
- package/lib/esm/components/backoffice/actions/backofficeEntityActionFormDialog.css.js.map +1 -0
- package/lib/esm/components/backoffice/actions/toastViewAction.js +27 -0
- package/lib/esm/components/backoffice/actions/toastViewAction.js.map +1 -0
- package/lib/esm/components/backoffice/columns/buildDataTableColumns.js +60 -0
- package/lib/esm/components/backoffice/columns/buildDataTableColumns.js.map +1 -0
- package/lib/esm/components/backoffice/detail/BackofficeDetailBadgeRow.js +22 -0
- package/lib/esm/components/backoffice/detail/BackofficeDetailBadgeRow.js.map +1 -0
- package/lib/esm/components/backoffice/detail/BackofficeDetailErrorList.js +41 -0
- package/lib/esm/components/backoffice/detail/BackofficeDetailErrorList.js.map +1 -0
- package/lib/esm/components/backoffice/detail/BackofficeDetailField.js +31 -0
- package/lib/esm/components/backoffice/detail/BackofficeDetailField.js.map +1 -0
- package/lib/esm/components/backoffice/detail/BackofficeDetailFlagTag.css.js +8 -0
- package/lib/esm/components/backoffice/detail/BackofficeDetailFlagTag.css.js.map +1 -0
- package/lib/esm/components/backoffice/detail/BackofficeDetailFlagTag.js +24 -0
- package/lib/esm/components/backoffice/detail/BackofficeDetailFlagTag.js.map +1 -0
- package/lib/esm/components/backoffice/detail/BackofficeDetailLayout.js +20 -0
- package/lib/esm/components/backoffice/detail/BackofficeDetailLayout.js.map +1 -0
- package/lib/esm/components/backoffice/detail/BackofficeDetailPayload.js +18 -0
- package/lib/esm/components/backoffice/detail/BackofficeDetailPayload.js.map +1 -0
- package/lib/esm/components/backoffice/detail/BackofficeDetailRelationLink.js +49 -0
- package/lib/esm/components/backoffice/detail/BackofficeDetailRelationLink.js.map +1 -0
- package/lib/esm/components/backoffice/detail/BackofficeDetailRelationList.js +11 -0
- package/lib/esm/components/backoffice/detail/BackofficeDetailRelationList.js.map +1 -0
- package/lib/esm/components/backoffice/detail/BackofficeDetailRelationListBlock.js +115 -0
- package/lib/esm/components/backoffice/detail/BackofficeDetailRelationListBlock.js.map +1 -0
- package/lib/esm/components/backoffice/detail/BackofficeDetailSection.js +33 -0
- package/lib/esm/components/backoffice/detail/BackofficeDetailSection.js.map +1 -0
- package/lib/esm/components/backoffice/detail/BackofficeDetailTaggedValue.js +18 -0
- package/lib/esm/components/backoffice/detail/BackofficeDetailTaggedValue.js.map +1 -0
- package/lib/esm/components/backoffice/detail/backofficeDetailBadgeRow.css.js +8 -0
- package/lib/esm/components/backoffice/detail/backofficeDetailBadgeRow.css.js.map +1 -0
- package/lib/esm/components/backoffice/detail/backofficeDetailErrorList.css.js +8 -0
- package/lib/esm/components/backoffice/detail/backofficeDetailErrorList.css.js.map +1 -0
- package/lib/esm/components/backoffice/detail/backofficeDetailField.css.js +15 -0
- package/lib/esm/components/backoffice/detail/backofficeDetailField.css.js.map +1 -0
- package/lib/esm/components/backoffice/detail/backofficeDetailLayout.css.js +8 -0
- package/lib/esm/components/backoffice/detail/backofficeDetailLayout.css.js.map +1 -0
- package/lib/esm/components/backoffice/detail/backofficeDetailRelationLink.css.js +8 -0
- package/lib/esm/components/backoffice/detail/backofficeDetailRelationLink.css.js.map +1 -0
- package/lib/esm/components/backoffice/detail/backofficeDetailRelationList.css.js +8 -0
- package/lib/esm/components/backoffice/detail/backofficeDetailRelationList.css.js.map +1 -0
- package/lib/esm/components/backoffice/detail/backofficeDetailSection.css.js +8 -0
- package/lib/esm/components/backoffice/detail/backofficeDetailSection.css.js.map +1 -0
- package/lib/esm/components/backoffice/detail/backofficeDetailTaggedValue.css.js +8 -0
- package/lib/esm/components/backoffice/detail/backofficeDetailTaggedValue.css.js.map +1 -0
- package/lib/esm/components/backoffice/detail/detailPayloadUtils.js +17 -0
- package/lib/esm/components/backoffice/detail/detailPayloadUtils.js.map +1 -0
- package/lib/esm/components/backoffice/errors/BackofficeErrorBoundary.js +21 -0
- package/lib/esm/components/backoffice/errors/BackofficeErrorBoundary.js.map +1 -0
- package/lib/esm/components/backoffice/filters/BackofficeFilterAction.js +43 -0
- package/lib/esm/components/backoffice/filters/BackofficeFilterAction.js.map +1 -0
- package/lib/esm/components/backoffice/filters/EntityFilterValue.js +46 -0
- package/lib/esm/components/backoffice/filters/EntityFilterValue.js.map +1 -0
- package/lib/esm/components/backoffice/filters/EntityIdFilterField.js +51 -0
- package/lib/esm/components/backoffice/filters/EntityIdFilterField.js.map +1 -0
- package/lib/esm/components/backoffice/filters/backofficeFilterAction.css.js +8 -0
- package/lib/esm/components/backoffice/filters/backofficeFilterAction.css.js.map +1 -0
- package/lib/esm/components/backoffice/filters/entityIdFilterField.css.js +8 -0
- package/lib/esm/components/backoffice/filters/entityIdFilterField.css.js.map +1 -0
- package/lib/esm/components/backoffice/layout/backofficeSidebarActions.css.js +8 -0
- package/lib/esm/components/backoffice/layout/backofficeSidebarActions.css.js.map +1 -0
- package/lib/esm/components/backoffice/layout/breadcrumb/BackofficeRightPageLayout.js +10 -0
- package/lib/esm/components/backoffice/layout/breadcrumb/BackofficeRightPageLayout.js.map +1 -0
- package/lib/esm/components/backoffice/layout/breadcrumb/BackofficeTopbarBreadcrumb.js +38 -0
- package/lib/esm/components/backoffice/layout/breadcrumb/BackofficeTopbarBreadcrumb.js.map +1 -0
- package/lib/esm/components/backoffice/layout/breadcrumb/BackofficeTopbarPortal.js +12 -0
- package/lib/esm/components/backoffice/layout/breadcrumb/BackofficeTopbarPortal.js.map +1 -0
- package/lib/esm/components/backoffice/layout/breadcrumb/BackofficeTopbarPortalContext.js +11 -0
- package/lib/esm/components/backoffice/layout/breadcrumb/BackofficeTopbarPortalContext.js.map +1 -0
- package/lib/esm/components/backoffice/layout/breadcrumb/assertValidBreadcrumb.js +16 -0
- package/lib/esm/components/backoffice/layout/breadcrumb/assertValidBreadcrumb.js.map +1 -0
- package/lib/esm/components/backoffice/layout/breadcrumb/backofficeTopbarBreadcrumb.css.js +8 -0
- package/lib/esm/components/backoffice/layout/breadcrumb/backofficeTopbarBreadcrumb.css.js.map +1 -0
- package/lib/esm/components/backoffice/layout/breadcrumb/buildBreadcrumbs.js +48 -0
- package/lib/esm/components/backoffice/layout/breadcrumb/buildBreadcrumbs.js.map +1 -0
- package/lib/esm/components/backoffice/layout/breadcrumb/types.js +0 -0
- package/lib/esm/components/backoffice/layout/buildSidebarSections.js +183 -0
- package/lib/esm/components/backoffice/layout/buildSidebarSections.js.map +1 -0
- package/lib/esm/components/backoffice/layout/mapViewerToSidebarProfileView.js +18 -0
- package/lib/esm/components/backoffice/layout/mapViewerToSidebarProfileView.js.map +1 -0
- package/lib/esm/components/backoffice/layout/sidebarUtils.js +44 -0
- package/lib/esm/components/backoffice/layout/sidebarUtils.js.map +1 -0
- package/lib/esm/components/backoffice/list/RowFlagsCell.css.js +7 -0
- package/lib/esm/components/backoffice/list/RowFlagsCell.css.js.map +1 -0
- package/lib/esm/components/backoffice/list/RowFlagsCell.js +37 -0
- package/lib/esm/components/backoffice/list/RowFlagsCell.js.map +1 -0
- package/lib/esm/components/backoffice/overview/BackofficeOverviewLayout.js +31 -0
- package/lib/esm/components/backoffice/overview/BackofficeOverviewLayout.js.map +1 -0
- package/lib/esm/components/backoffice/overview/backofficeOverviewLayout.css.js +8 -0
- package/lib/esm/components/backoffice/overview/backofficeOverviewLayout.css.js.map +1 -0
- package/lib/esm/components/backoffice/pickers/EntityIdPickerDialog.js +107 -0
- package/lib/esm/components/backoffice/pickers/EntityIdPickerDialog.js.map +1 -0
- package/lib/esm/components/backoffice/pickers/entityIdPickerDialog.css.js +8 -0
- package/lib/esm/components/backoffice/pickers/entityIdPickerDialog.css.js.map +1 -0
- package/lib/esm/components/backoffice/pickers/shared/EntityPickerList.js +24 -0
- package/lib/esm/components/backoffice/pickers/shared/EntityPickerList.js.map +1 -0
- package/lib/esm/components/backoffice/pickers/shared/EntityPickerRowBase.js +23 -0
- package/lib/esm/components/backoffice/pickers/shared/EntityPickerRowBase.js.map +1 -0
- package/lib/esm/components/backoffice/pickers/shared/EntityPickerShell.js +24 -0
- package/lib/esm/components/backoffice/pickers/shared/EntityPickerShell.js.map +1 -0
- package/lib/esm/components/backoffice/pickers/types.js +0 -0
- package/lib/esm/components/backoffice/refs/BackofficeEntityIdRef.js +35 -0
- package/lib/esm/components/backoffice/refs/BackofficeEntityIdRef.js.map +1 -0
- package/lib/esm/components/backoffice/refs/BackofficeRelatedCountLink.js +54 -0
- package/lib/esm/components/backoffice/refs/BackofficeRelatedCountLink.js.map +1 -0
- package/lib/esm/components/backoffice/refs/backofficeEntityIdRef.css.js +8 -0
- package/lib/esm/components/backoffice/refs/backofficeEntityIdRef.css.js.map +1 -0
- package/lib/esm/components/backoffice/refs/backofficeRelatedCountLink.css.js +8 -0
- package/lib/esm/components/backoffice/refs/backofficeRelatedCountLink.css.js.map +1 -0
- package/lib/esm/components/backoffice/routing/BackofficeContentBoundary.js +24 -0
- package/lib/esm/components/backoffice/routing/BackofficeContentBoundary.js.map +1 -0
- package/lib/esm/components/backoffice/routing/BackofficeContentError.js +39 -0
- package/lib/esm/components/backoffice/routing/BackofficeContentError.js.map +1 -0
- package/lib/esm/components/backoffice/routing/BackofficeContentFallback.js +47 -0
- package/lib/esm/components/backoffice/routing/BackofficeContentFallback.js.map +1 -0
- package/lib/esm/components/backoffice/routing/BackofficeRouteFallback.js +22 -0
- package/lib/esm/components/backoffice/routing/BackofficeRouteFallback.js.map +1 -0
- package/lib/esm/components/backoffice/routing/BackofficeRoutePendingBar.js +12 -0
- package/lib/esm/components/backoffice/routing/BackofficeRoutePendingBar.js.map +1 -0
- package/lib/esm/components/backoffice/routing/backofficeContentBoundary.css.js +8 -0
- package/lib/esm/components/backoffice/routing/backofficeContentBoundary.css.js.map +1 -0
- package/lib/esm/components/backoffice/routing/backofficeContentError.css.js +8 -0
- package/lib/esm/components/backoffice/routing/backofficeContentError.css.js.map +1 -0
- package/lib/esm/components/backoffice/routing/backofficeContentFallback.css.js +8 -0
- package/lib/esm/components/backoffice/routing/backofficeContentFallback.css.js.map +1 -0
- package/lib/esm/components/backoffice/routing/backofficeRouteFallback.css.js +8 -0
- package/lib/esm/components/backoffice/routing/backofficeRouteFallback.css.js.map +1 -0
- package/lib/esm/components/backoffice/routing/backofficeRoutePendingBar.css.js +8 -0
- package/lib/esm/components/backoffice/routing/backofficeRoutePendingBar.css.js.map +1 -0
- package/lib/esm/components/backoffice/scaffolds/BackofficeEntityDetailScaffold.js +11 -0
- package/lib/esm/components/backoffice/scaffolds/BackofficeEntityDetailScaffold.js.map +1 -0
- package/lib/esm/components/backoffice/scaffolds/BackofficeEntityListScaffold.js +446 -0
- package/lib/esm/components/backoffice/scaffolds/BackofficeEntityListScaffold.js.map +1 -0
- package/lib/esm/components/backoffice/scaffolds/BackofficeListFilterContext.js +40 -0
- package/lib/esm/components/backoffice/scaffolds/BackofficeListFilterContext.js.map +1 -0
- package/lib/esm/components/backoffice/scaffolds/BackofficeTabbedDetailShell.js +25 -0
- package/lib/esm/components/backoffice/scaffolds/BackofficeTabbedDetailShell.js.map +1 -0
- package/lib/esm/components/backoffice/scaffolds/backofficeEntityListScaffold.css.js +8 -0
- package/lib/esm/components/backoffice/scaffolds/backofficeEntityListScaffold.css.js.map +1 -0
- package/lib/esm/components/backoffice/scaffolds/backofficeTabbedDetailShell.css.js +8 -0
- package/lib/esm/components/backoffice/scaffolds/backofficeTabbedDetailShell.css.js.map +1 -0
- package/lib/esm/components/backoffice/shared/BackofficeInlineFilterRow.js +12 -0
- package/lib/esm/components/backoffice/shared/BackofficeInlineFilterRow.js.map +1 -0
- package/lib/esm/components/backoffice/shared/backofficeInlineFilterRow.css.js +8 -0
- package/lib/esm/components/backoffice/shared/backofficeInlineFilterRow.css.js.map +1 -0
- package/lib/esm/components/backoffice/tools/BackofficeToolsDocPanel.js +40 -0
- package/lib/esm/components/backoffice/tools/BackofficeToolsDocPanel.js.map +1 -0
- package/lib/esm/components/backoffice/tools/BackofficeToolsErrorFallback.js +48 -0
- package/lib/esm/components/backoffice/tools/BackofficeToolsErrorFallback.js.map +1 -0
- package/lib/esm/components/backoffice/tools/BackofficeToolsJsonForm.js +58 -0
- package/lib/esm/components/backoffice/tools/BackofficeToolsJsonForm.js.map +1 -0
- package/lib/esm/components/backoffice/tools/BackofficeToolsPageLayout.js +81 -0
- package/lib/esm/components/backoffice/tools/BackofficeToolsPageLayout.js.map +1 -0
- package/lib/esm/components/backoffice/tools/BackofficeToolsParamsContext.js +16 -0
- package/lib/esm/components/backoffice/tools/BackofficeToolsParamsContext.js.map +1 -0
- package/lib/esm/components/backoffice/tools/BackofficeToolsProjectPicker.js +56 -0
- package/lib/esm/components/backoffice/tools/BackofficeToolsProjectPicker.js.map +1 -0
- package/lib/esm/components/backoffice/tools/BackofficeToolsQueryBoundary.js +20 -0
- package/lib/esm/components/backoffice/tools/BackofficeToolsQueryBoundary.js.map +1 -0
- package/lib/esm/components/backoffice/tools/BackofficeToolsScopePicker.js +56 -0
- package/lib/esm/components/backoffice/tools/BackofficeToolsScopePicker.js.map +1 -0
- package/lib/esm/components/backoffice/tools/backofficeToolsDocPanel.css.js +8 -0
- package/lib/esm/components/backoffice/tools/backofficeToolsDocPanel.css.js.map +1 -0
- package/lib/esm/components/backoffice/tools/backofficeToolsForm.css.js +8 -0
- package/lib/esm/components/backoffice/tools/backofficeToolsForm.css.js.map +1 -0
- package/lib/esm/components/backoffice/tools/backofficeToolsJsonForm.css.js +8 -0
- package/lib/esm/components/backoffice/tools/backofficeToolsJsonForm.css.js.map +1 -0
- package/lib/esm/components/backoffice/tools/backofficeToolsPageLayout.css.js +8 -0
- package/lib/esm/components/backoffice/tools/backofficeToolsPageLayout.css.js.map +1 -0
- package/lib/esm/components/backoffice/tools/backofficeToolsProjectPicker.css.js +8 -0
- package/lib/esm/components/backoffice/tools/backofficeToolsProjectPicker.css.js.map +1 -0
- package/lib/esm/components/backoffice/tools/backofficeToolsScopePicker.css.js +8 -0
- package/lib/esm/components/backoffice/tools/backofficeToolsScopePicker.css.js.map +1 -0
- package/lib/esm/filters/filterHelpers.js +36 -0
- package/lib/esm/filters/filterHelpers.js.map +1 -0
- package/lib/esm/hooks/useAuth.js +439 -0
- package/lib/esm/hooks/useAuth.js.map +1 -0
- package/lib/esm/hooks/useBackofficeAuth.js +89 -0
- package/lib/esm/hooks/useBackofficeAuth.js.map +1 -0
- package/lib/esm/hooks/useBackofficeListRefetch.js +40 -0
- package/lib/esm/hooks/useBackofficeListRefetch.js.map +1 -0
- package/lib/esm/hooks/useBackofficeListUrlState.js +37 -0
- package/lib/esm/hooks/useBackofficeListUrlState.js.map +1 -0
- package/lib/esm/hooks/useBackofficeLoadMore.js +18 -0
- package/lib/esm/hooks/useBackofficeLoadMore.js.map +1 -0
- package/lib/esm/hooks/useBackofficeSessionAuth.js +28 -0
- package/lib/esm/hooks/useBackofficeSessionAuth.js.map +1 -0
- package/lib/esm/hooks/useBackofficeSidebarPins.js +70 -0
- package/lib/esm/hooks/useBackofficeSidebarPins.js.map +1 -0
- package/lib/esm/hooks/useBackofficeToolsUrlParams.js +15 -0
- package/lib/esm/hooks/useBackofficeToolsUrlParams.js.map +1 -0
- package/lib/esm/hooks/useSidebarGroupCollapse.js +35 -0
- package/lib/esm/hooks/useSidebarGroupCollapse.js.map +1 -0
- package/lib/esm/i18n/createI18nInstance.js +62 -0
- package/lib/esm/i18n/createI18nInstance.js.map +1 -0
- package/lib/esm/i18n/locales/en/backofficeReact.js +249 -0
- package/lib/esm/i18n/locales/en/backofficeReact.js.map +1 -0
- package/lib/esm/i18n/locales/en/shared.js +207 -0
- package/lib/esm/i18n/locales/en/shared.js.map +1 -0
- package/lib/esm/i18n/locales/fr/backofficeReact.js +251 -0
- package/lib/esm/i18n/locales/fr/backofficeReact.js.map +1 -0
- package/lib/esm/i18n/locales/fr/shared.js +207 -0
- package/lib/esm/i18n/locales/fr/shared.js.map +1 -0
- package/lib/esm/i18n/mergeResourceLanguages.js +19 -0
- package/lib/esm/i18n/mergeResourceLanguages.js.map +1 -0
- package/lib/esm/i18n/resources.js +19 -0
- package/lib/esm/i18n/resources.js.map +1 -0
- package/lib/esm/i18n/useBackofficeFormats.js +23 -0
- package/lib/esm/i18n/useBackofficeFormats.js.map +1 -0
- package/lib/esm/i18n/useBackofficeReactTranslation.js +9 -0
- package/lib/esm/i18n/useBackofficeReactTranslation.js.map +1 -0
- package/lib/esm/i18n/useSharedTranslation.js +9 -0
- package/lib/esm/i18n/useSharedTranslation.js.map +1 -0
- package/lib/esm/index.js +2 -0
- package/lib/esm/modules/sharedSchemaTypes.js +0 -0
- package/lib/esm/modules/webauthn.js +33 -0
- package/lib/esm/modules/webauthn.js.map +1 -0
- package/lib/esm/pages/BackofficeAcceptInvitationPage.js +24 -0
- package/lib/esm/pages/BackofficeAcceptInvitationPage.js.map +1 -0
- package/lib/esm/pages/BackofficeDashboardPage.js +198 -0
- package/lib/esm/pages/BackofficeDashboardPage.js.map +1 -0
- package/lib/esm/pages/BackofficeEntityDetailLayoutPage.js +18 -0
- package/lib/esm/pages/BackofficeEntityDetailLayoutPage.js.map +1 -0
- package/lib/esm/pages/BackofficeEntityDetailPage.js +843 -0
- package/lib/esm/pages/BackofficeEntityDetailPage.js.map +1 -0
- package/lib/esm/pages/BackofficeEntityDetailUnknownPageRedirect.js +17 -0
- package/lib/esm/pages/BackofficeEntityDetailUnknownPageRedirect.js.map +1 -0
- package/lib/esm/pages/BackofficeEntityListPage.js +363 -0
- package/lib/esm/pages/BackofficeEntityListPage.js.map +1 -0
- package/lib/esm/pages/BackofficeLayoutPage.js +141 -0
- package/lib/esm/pages/BackofficeLayoutPage.js.map +1 -0
- package/lib/esm/pages/BackofficeLoginPage.js +46 -0
- package/lib/esm/pages/BackofficeLoginPage.js.map +1 -0
- package/lib/esm/pages/BackofficePasswordResetCompletePage.js +59 -0
- package/lib/esm/pages/BackofficePasswordResetCompletePage.js.map +1 -0
- package/lib/esm/pages/BackofficePasswordResetRequestPage.js +54 -0
- package/lib/esm/pages/BackofficePasswordResetRequestPage.js.map +1 -0
- package/lib/esm/pages/BackofficeToolsOperationPage.js +465 -0
- package/lib/esm/pages/BackofficeToolsOperationPage.js.map +1 -0
- package/lib/esm/pages/BackofficeVerifyEmailPage.js +59 -0
- package/lib/esm/pages/BackofficeVerifyEmailPage.js.map +1 -0
- package/lib/esm/pages/backofficeDashboardPage.css.js +8 -0
- package/lib/esm/pages/backofficeDashboardPage.css.js.map +1 -0
- package/lib/esm/pages/backofficeEntityDetailPage.css.js +8 -0
- package/lib/esm/pages/backofficeEntityDetailPage.css.js.map +1 -0
- package/lib/esm/pages/backofficeEntityListPage.css.js +8 -0
- package/lib/esm/pages/backofficeEntityListPage.css.js.map +1 -0
- package/lib/esm/pages/detail/BackofficeEntityDetailLayoutContext.js +11 -0
- package/lib/esm/pages/detail/BackofficeEntityDetailLayoutContext.js.map +1 -0
- package/lib/esm/pages/detail/buildTabsItems.js +10 -0
- package/lib/esm/pages/detail/buildTabsItems.js.map +1 -0
- package/lib/esm/pages/detail/pageResolution.js +28 -0
- package/lib/esm/pages/detail/pageResolution.js.map +1 -0
- package/lib/esm/provider/BackofficeConfigContext.js +12 -0
- package/lib/esm/provider/BackofficeConfigContext.js.map +1 -0
- package/lib/esm/provider/BackofficeProvider.js +142 -0
- package/lib/esm/provider/BackofficeProvider.js.map +1 -0
- package/lib/esm/provider/entityRegistry.js +91 -0
- package/lib/esm/provider/entityRegistry.js.map +1 -0
- package/lib/esm/provider/lazyValue.js +14 -0
- package/lib/esm/provider/lazyValue.js.map +1 -0
- package/lib/esm/provider/types.js +0 -0
- package/lib/esm/provider/useBackofficeEntityLoader.js +137 -0
- package/lib/esm/provider/useBackofficeEntityLoader.js.map +1 -0
- package/lib/esm/provider/useBackofficeLazyValue.js +39 -0
- package/lib/esm/provider/useBackofficeLazyValue.js.map +1 -0
- package/lib/esm/relay/RelayProvider.js +12 -0
- package/lib/esm/relay/RelayProvider.js.map +1 -0
- package/lib/esm/relay/createInlineDataReader.js +2 -0
- package/lib/esm/relay/createInlineReader.js +7 -0
- package/lib/esm/relay/createInlineReader.js.map +1 -0
- package/lib/esm/relay/envHelpers.js +46 -0
- package/lib/esm/relay/envHelpers.js.map +1 -0
- package/lib/esm/relay/environment.js +221 -0
- package/lib/esm/relay/environment.js.map +1 -0
- package/lib/esm/relay/identityView.js +6 -0
- package/lib/esm/relay/identityView.js.map +1 -0
- package/lib/esm/relay/mutationResult.js +47 -0
- package/lib/esm/relay/mutationResult.js.map +1 -0
- package/lib/esm/relay/useRelayEnvironment.js +2 -0
- package/lib/esm/router/backofficeAuthPaths.js +13 -0
- package/lib/esm/router/backofficeAuthPaths.js.map +1 -0
- package/lib/esm/router/createBackofficeRoutes.js +273 -0
- package/lib/esm/router/createBackofficeRoutes.js.map +1 -0
- package/lib/esm/style.css +2 -0
- package/lib/esm/style.js +1 -0
- package/lib/types/auth/login/AuthPanel.d.ts +10 -0
- package/lib/types/auth/login/AuthPanel.d.ts.map +1 -0
- package/lib/types/auth/login/EmailCapturePanel.d.ts +12 -0
- package/lib/types/auth/login/EmailCapturePanel.d.ts.map +1 -0
- package/lib/types/auth/login/LoginFlow.d.ts +11 -0
- package/lib/types/auth/login/LoginFlow.d.ts.map +1 -0
- package/lib/types/auth/login/MethodChooser.d.ts +12 -0
- package/lib/types/auth/login/MethodChooser.d.ts.map +1 -0
- package/lib/types/auth/login/MfaChallengeForm.d.ts +10 -0
- package/lib/types/auth/login/MfaChallengeForm.d.ts.map +1 -0
- package/lib/types/auth/login/OidcButtons.d.ts +8 -0
- package/lib/types/auth/login/OidcButtons.d.ts.map +1 -0
- package/lib/types/auth/login/PasskeyLoginForm.d.ts +12 -0
- package/lib/types/auth/login/PasskeyLoginForm.d.ts.map +1 -0
- package/lib/types/auth/login/PasswordLoginPanel.d.ts +13 -0
- package/lib/types/auth/login/PasswordLoginPanel.d.ts.map +1 -0
- package/lib/types/auth/login/loginPage.css.d.ts +14 -0
- package/lib/types/auth/login/loginPage.css.d.ts.map +1 -0
- package/lib/types/auth/login/synchronizeAuthStatusQuery.d.ts +3 -0
- package/lib/types/auth/login/synchronizeAuthStatusQuery.d.ts.map +1 -0
- package/lib/types/auth/pages/AcceptInvitationScreen.d.ts +11 -0
- package/lib/types/auth/pages/AcceptInvitationScreen.d.ts.map +1 -0
- package/lib/types/auth/pages/PasswordResetCompleteScreen.d.ts +12 -0
- package/lib/types/auth/pages/PasswordResetCompleteScreen.d.ts.map +1 -0
- package/lib/types/auth/pages/PasswordResetRequestScreen.d.ts +10 -0
- package/lib/types/auth/pages/PasswordResetRequestScreen.d.ts.map +1 -0
- package/lib/types/auth/pages/VerifyEmailScreen.d.ts +11 -0
- package/lib/types/auth/pages/VerifyEmailScreen.d.ts.map +1 -0
- package/lib/types/components/backoffice/actions/BackofficeEntityActionFormDialog.d.ts +12 -0
- package/lib/types/components/backoffice/actions/BackofficeEntityActionFormDialog.d.ts.map +1 -0
- package/lib/types/components/backoffice/actions/LazyBackofficeEntityActionFormDialog.d.ts +5 -0
- package/lib/types/components/backoffice/actions/LazyBackofficeEntityActionFormDialog.d.ts.map +1 -0
- package/lib/types/components/backoffice/actions/backofficeEntityActionFormDialog.css.d.ts +7 -0
- package/lib/types/components/backoffice/actions/backofficeEntityActionFormDialog.css.d.ts.map +1 -0
- package/lib/types/components/backoffice/actions/toastViewAction.d.ts +17 -0
- package/lib/types/components/backoffice/actions/toastViewAction.d.ts.map +1 -0
- package/lib/types/components/backoffice/columns/buildDataTableColumns.d.ts +13 -0
- package/lib/types/components/backoffice/columns/buildDataTableColumns.d.ts.map +1 -0
- package/lib/types/components/backoffice/detail/BackofficeDetailBadgeRow.d.ts +8 -0
- package/lib/types/components/backoffice/detail/BackofficeDetailBadgeRow.d.ts.map +1 -0
- package/lib/types/components/backoffice/detail/BackofficeDetailErrorList.d.ts +14 -0
- package/lib/types/components/backoffice/detail/BackofficeDetailErrorList.d.ts.map +1 -0
- package/lib/types/components/backoffice/detail/BackofficeDetailField.d.ts +13 -0
- package/lib/types/components/backoffice/detail/BackofficeDetailField.d.ts.map +1 -0
- package/lib/types/components/backoffice/detail/BackofficeDetailFlagTag.css.d.ts +4 -0
- package/lib/types/components/backoffice/detail/BackofficeDetailFlagTag.css.d.ts.map +1 -0
- package/lib/types/components/backoffice/detail/BackofficeDetailFlagTag.d.ts +10 -0
- package/lib/types/components/backoffice/detail/BackofficeDetailFlagTag.d.ts.map +1 -0
- package/lib/types/components/backoffice/detail/BackofficeDetailLayout.d.ts +8 -0
- package/lib/types/components/backoffice/detail/BackofficeDetailLayout.d.ts.map +1 -0
- package/lib/types/components/backoffice/detail/BackofficeDetailPayload.d.ts +10 -0
- package/lib/types/components/backoffice/detail/BackofficeDetailPayload.d.ts.map +1 -0
- package/lib/types/components/backoffice/detail/BackofficeDetailRelationLink.d.ts +13 -0
- package/lib/types/components/backoffice/detail/BackofficeDetailRelationLink.d.ts.map +1 -0
- package/lib/types/components/backoffice/detail/BackofficeDetailRelationList.d.ts +7 -0
- package/lib/types/components/backoffice/detail/BackofficeDetailRelationList.d.ts.map +1 -0
- package/lib/types/components/backoffice/detail/BackofficeDetailRelationListBlock.d.ts +11 -0
- package/lib/types/components/backoffice/detail/BackofficeDetailRelationListBlock.d.ts.map +1 -0
- package/lib/types/components/backoffice/detail/BackofficeDetailSection.d.ts +11 -0
- package/lib/types/components/backoffice/detail/BackofficeDetailSection.d.ts.map +1 -0
- package/lib/types/components/backoffice/detail/BackofficeDetailTaggedValue.d.ts +12 -0
- package/lib/types/components/backoffice/detail/BackofficeDetailTaggedValue.d.ts.map +1 -0
- package/lib/types/components/backoffice/detail/backofficeDetailBadgeRow.css.d.ts +2 -0
- package/lib/types/components/backoffice/detail/backofficeDetailBadgeRow.css.d.ts.map +1 -0
- package/lib/types/components/backoffice/detail/backofficeDetailErrorList.css.d.ts +8 -0
- package/lib/types/components/backoffice/detail/backofficeDetailErrorList.css.d.ts.map +1 -0
- package/lib/types/components/backoffice/detail/backofficeDetailField.css.d.ts +13 -0
- package/lib/types/components/backoffice/detail/backofficeDetailField.css.d.ts.map +1 -0
- package/lib/types/components/backoffice/detail/backofficeDetailLayout.css.d.ts +5 -0
- package/lib/types/components/backoffice/detail/backofficeDetailLayout.css.d.ts.map +1 -0
- package/lib/types/components/backoffice/detail/backofficeDetailRelationLink.css.d.ts +4 -0
- package/lib/types/components/backoffice/detail/backofficeDetailRelationLink.css.d.ts.map +1 -0
- package/lib/types/components/backoffice/detail/backofficeDetailRelationList.css.d.ts +2 -0
- package/lib/types/components/backoffice/detail/backofficeDetailRelationList.css.d.ts.map +1 -0
- package/lib/types/components/backoffice/detail/backofficeDetailSection.css.d.ts +6 -0
- package/lib/types/components/backoffice/detail/backofficeDetailSection.css.d.ts.map +1 -0
- package/lib/types/components/backoffice/detail/backofficeDetailTaggedValue.css.d.ts +3 -0
- package/lib/types/components/backoffice/detail/backofficeDetailTaggedValue.css.d.ts.map +1 -0
- package/lib/types/components/backoffice/detail/detailPayloadUtils.d.ts +3 -0
- package/lib/types/components/backoffice/detail/detailPayloadUtils.d.ts.map +1 -0
- package/lib/types/components/backoffice/errors/BackofficeErrorBoundary.d.ts +19 -0
- package/lib/types/components/backoffice/errors/BackofficeErrorBoundary.d.ts.map +1 -0
- package/lib/types/components/backoffice/filters/BackofficeFilterAction.d.ts +12 -0
- package/lib/types/components/backoffice/filters/BackofficeFilterAction.d.ts.map +1 -0
- package/lib/types/components/backoffice/filters/EntityFilterValue.d.ts +14 -0
- package/lib/types/components/backoffice/filters/EntityFilterValue.d.ts.map +1 -0
- package/lib/types/components/backoffice/filters/EntityIdFilterField.d.ts +12 -0
- package/lib/types/components/backoffice/filters/EntityIdFilterField.d.ts.map +1 -0
- package/lib/types/components/backoffice/filters/backofficeFilterAction.css.d.ts +3 -0
- package/lib/types/components/backoffice/filters/backofficeFilterAction.css.d.ts.map +1 -0
- package/lib/types/components/backoffice/filters/entityIdFilterField.css.d.ts +6 -0
- package/lib/types/components/backoffice/filters/entityIdFilterField.css.d.ts.map +1 -0
- package/lib/types/components/backoffice/layout/backofficeSidebarActions.css.d.ts +2 -0
- package/lib/types/components/backoffice/layout/backofficeSidebarActions.css.d.ts.map +1 -0
- package/lib/types/components/backoffice/layout/breadcrumb/BackofficeRightPageLayout.d.ts +9 -0
- package/lib/types/components/backoffice/layout/breadcrumb/BackofficeRightPageLayout.d.ts.map +1 -0
- package/lib/types/components/backoffice/layout/breadcrumb/BackofficeTopbarBreadcrumb.d.ts +8 -0
- package/lib/types/components/backoffice/layout/breadcrumb/BackofficeTopbarBreadcrumb.d.ts.map +1 -0
- package/lib/types/components/backoffice/layout/breadcrumb/BackofficeTopbarPortal.d.ts +7 -0
- package/lib/types/components/backoffice/layout/breadcrumb/BackofficeTopbarPortal.d.ts.map +1 -0
- package/lib/types/components/backoffice/layout/breadcrumb/BackofficeTopbarPortalContext.d.ts +6 -0
- package/lib/types/components/backoffice/layout/breadcrumb/BackofficeTopbarPortalContext.d.ts.map +1 -0
- package/lib/types/components/backoffice/layout/breadcrumb/assertValidBreadcrumb.d.ts +3 -0
- package/lib/types/components/backoffice/layout/breadcrumb/assertValidBreadcrumb.d.ts.map +1 -0
- package/lib/types/components/backoffice/layout/breadcrumb/backofficeTopbarBreadcrumb.css.d.ts +7 -0
- package/lib/types/components/backoffice/layout/breadcrumb/backofficeTopbarBreadcrumb.css.d.ts.map +1 -0
- package/lib/types/components/backoffice/layout/breadcrumb/buildBreadcrumbs.d.ts +21 -0
- package/lib/types/components/backoffice/layout/breadcrumb/buildBreadcrumbs.d.ts.map +1 -0
- package/lib/types/components/backoffice/layout/breadcrumb/types.d.ts +9 -0
- package/lib/types/components/backoffice/layout/breadcrumb/types.d.ts.map +1 -0
- package/lib/types/components/backoffice/layout/buildSidebarSections.d.ts +22 -0
- package/lib/types/components/backoffice/layout/buildSidebarSections.d.ts.map +1 -0
- package/lib/types/components/backoffice/layout/mapViewerToSidebarProfileView.d.ts +15 -0
- package/lib/types/components/backoffice/layout/mapViewerToSidebarProfileView.d.ts.map +1 -0
- package/lib/types/components/backoffice/layout/sidebarUtils.d.ts +16 -0
- package/lib/types/components/backoffice/layout/sidebarUtils.d.ts.map +1 -0
- package/lib/types/components/backoffice/list/RowFlagsCell.css.d.ts +4 -0
- package/lib/types/components/backoffice/list/RowFlagsCell.css.d.ts.map +1 -0
- package/lib/types/components/backoffice/list/RowFlagsCell.d.ts +10 -0
- package/lib/types/components/backoffice/list/RowFlagsCell.d.ts.map +1 -0
- package/lib/types/components/backoffice/overview/BackofficeOverviewLayout.d.ts +10 -0
- package/lib/types/components/backoffice/overview/BackofficeOverviewLayout.d.ts.map +1 -0
- package/lib/types/components/backoffice/overview/backofficeOverviewLayout.css.d.ts +6 -0
- package/lib/types/components/backoffice/overview/backofficeOverviewLayout.css.d.ts.map +1 -0
- package/lib/types/components/backoffice/pickers/EntityIdPickerDialog.d.ts +14 -0
- package/lib/types/components/backoffice/pickers/EntityIdPickerDialog.d.ts.map +1 -0
- package/lib/types/components/backoffice/pickers/entityIdPickerDialog.css.d.ts +8 -0
- package/lib/types/components/backoffice/pickers/entityIdPickerDialog.css.d.ts.map +1 -0
- package/lib/types/components/backoffice/pickers/shared/EntityPickerList.d.ts +10 -0
- package/lib/types/components/backoffice/pickers/shared/EntityPickerList.d.ts.map +1 -0
- package/lib/types/components/backoffice/pickers/shared/EntityPickerRowBase.d.ts +8 -0
- package/lib/types/components/backoffice/pickers/shared/EntityPickerRowBase.d.ts.map +1 -0
- package/lib/types/components/backoffice/pickers/shared/EntityPickerShell.d.ts +11 -0
- package/lib/types/components/backoffice/pickers/shared/EntityPickerShell.d.ts.map +1 -0
- package/lib/types/components/backoffice/pickers/types.d.ts +14 -0
- package/lib/types/components/backoffice/pickers/types.d.ts.map +1 -0
- package/lib/types/components/backoffice/refs/BackofficeEntityIdRef.d.ts +13 -0
- package/lib/types/components/backoffice/refs/BackofficeEntityIdRef.d.ts.map +1 -0
- package/lib/types/components/backoffice/refs/BackofficeRelatedCountLink.d.ts +9 -0
- package/lib/types/components/backoffice/refs/BackofficeRelatedCountLink.d.ts.map +1 -0
- package/lib/types/components/backoffice/refs/backofficeEntityIdRef.css.d.ts +2 -0
- package/lib/types/components/backoffice/refs/backofficeEntityIdRef.css.d.ts.map +1 -0
- package/lib/types/components/backoffice/refs/backofficeRelatedCountLink.css.d.ts +2 -0
- package/lib/types/components/backoffice/refs/backofficeRelatedCountLink.css.d.ts.map +1 -0
- package/lib/types/components/backoffice/routing/BackofficeContentBoundary.d.ts +7 -0
- package/lib/types/components/backoffice/routing/BackofficeContentBoundary.d.ts.map +1 -0
- package/lib/types/components/backoffice/routing/BackofficeContentError.d.ts +8 -0
- package/lib/types/components/backoffice/routing/BackofficeContentError.d.ts.map +1 -0
- package/lib/types/components/backoffice/routing/BackofficeContentFallback.d.ts +4 -0
- package/lib/types/components/backoffice/routing/BackofficeContentFallback.d.ts.map +1 -0
- package/lib/types/components/backoffice/routing/BackofficeRouteFallback.d.ts +4 -0
- package/lib/types/components/backoffice/routing/BackofficeRouteFallback.d.ts.map +1 -0
- package/lib/types/components/backoffice/routing/BackofficeRoutePendingBar.d.ts +4 -0
- package/lib/types/components/backoffice/routing/BackofficeRoutePendingBar.d.ts.map +1 -0
- package/lib/types/components/backoffice/routing/backofficeContentBoundary.css.d.ts +2 -0
- package/lib/types/components/backoffice/routing/backofficeContentBoundary.css.d.ts.map +1 -0
- package/lib/types/components/backoffice/routing/backofficeContentError.css.d.ts +3 -0
- package/lib/types/components/backoffice/routing/backofficeContentError.css.d.ts.map +1 -0
- package/lib/types/components/backoffice/routing/backofficeContentFallback.css.d.ts +5 -0
- package/lib/types/components/backoffice/routing/backofficeContentFallback.css.d.ts.map +1 -0
- package/lib/types/components/backoffice/routing/backofficeRouteFallback.css.d.ts +3 -0
- package/lib/types/components/backoffice/routing/backofficeRouteFallback.css.d.ts.map +1 -0
- package/lib/types/components/backoffice/routing/backofficeRoutePendingBar.css.d.ts +3 -0
- package/lib/types/components/backoffice/routing/backofficeRoutePendingBar.css.d.ts.map +1 -0
- package/lib/types/components/backoffice/scaffolds/BackofficeEntityDetailScaffold.d.ts +13 -0
- package/lib/types/components/backoffice/scaffolds/BackofficeEntityDetailScaffold.d.ts.map +1 -0
- package/lib/types/components/backoffice/scaffolds/BackofficeEntityListScaffold.d.ts +30 -0
- package/lib/types/components/backoffice/scaffolds/BackofficeEntityListScaffold.d.ts.map +1 -0
- package/lib/types/components/backoffice/scaffolds/BackofficeListFilterContext.d.ts +23 -0
- package/lib/types/components/backoffice/scaffolds/BackofficeListFilterContext.d.ts.map +1 -0
- package/lib/types/components/backoffice/scaffolds/BackofficeTabbedDetailShell.d.ts +11 -0
- package/lib/types/components/backoffice/scaffolds/BackofficeTabbedDetailShell.d.ts.map +1 -0
- package/lib/types/components/backoffice/scaffolds/backofficeEntityListScaffold.css.d.ts +5 -0
- package/lib/types/components/backoffice/scaffolds/backofficeEntityListScaffold.css.d.ts.map +1 -0
- package/lib/types/components/backoffice/scaffolds/backofficeTabbedDetailShell.css.d.ts +3 -0
- package/lib/types/components/backoffice/scaffolds/backofficeTabbedDetailShell.css.d.ts.map +1 -0
- package/lib/types/components/backoffice/shared/BackofficeInlineFilterRow.d.ts +8 -0
- package/lib/types/components/backoffice/shared/BackofficeInlineFilterRow.d.ts.map +1 -0
- package/lib/types/components/backoffice/shared/backofficeInlineFilterRow.css.d.ts +2 -0
- package/lib/types/components/backoffice/shared/backofficeInlineFilterRow.css.d.ts.map +1 -0
- package/lib/types/components/backoffice/tools/BackofficeToolsDocPanel.d.ts +11 -0
- package/lib/types/components/backoffice/tools/BackofficeToolsDocPanel.d.ts.map +1 -0
- package/lib/types/components/backoffice/tools/BackofficeToolsErrorFallback.d.ts +8 -0
- package/lib/types/components/backoffice/tools/BackofficeToolsErrorFallback.d.ts.map +1 -0
- package/lib/types/components/backoffice/tools/BackofficeToolsJsonForm.d.ts +15 -0
- package/lib/types/components/backoffice/tools/BackofficeToolsJsonForm.d.ts.map +1 -0
- package/lib/types/components/backoffice/tools/BackofficeToolsPageLayout.d.ts +13 -0
- package/lib/types/components/backoffice/tools/BackofficeToolsPageLayout.d.ts.map +1 -0
- package/lib/types/components/backoffice/tools/BackofficeToolsParamsContext.d.ts +14 -0
- package/lib/types/components/backoffice/tools/BackofficeToolsParamsContext.d.ts.map +1 -0
- package/lib/types/components/backoffice/tools/BackofficeToolsProjectPicker.d.ts +8 -0
- package/lib/types/components/backoffice/tools/BackofficeToolsProjectPicker.d.ts.map +1 -0
- package/lib/types/components/backoffice/tools/BackofficeToolsQueryBoundary.d.ts +7 -0
- package/lib/types/components/backoffice/tools/BackofficeToolsQueryBoundary.d.ts.map +1 -0
- package/lib/types/components/backoffice/tools/BackofficeToolsScopePicker.d.ts +8 -0
- package/lib/types/components/backoffice/tools/BackofficeToolsScopePicker.d.ts.map +1 -0
- package/lib/types/components/backoffice/tools/backofficeToolsDocPanel.css.d.ts +8 -0
- package/lib/types/components/backoffice/tools/backofficeToolsDocPanel.css.d.ts.map +1 -0
- package/lib/types/components/backoffice/tools/backofficeToolsForm.css.d.ts +6 -0
- package/lib/types/components/backoffice/tools/backofficeToolsForm.css.d.ts.map +1 -0
- package/lib/types/components/backoffice/tools/backofficeToolsJsonForm.css.d.ts +4 -0
- package/lib/types/components/backoffice/tools/backofficeToolsJsonForm.css.d.ts.map +1 -0
- package/lib/types/components/backoffice/tools/backofficeToolsPageLayout.css.d.ts +13 -0
- package/lib/types/components/backoffice/tools/backofficeToolsPageLayout.css.d.ts.map +1 -0
- package/lib/types/components/backoffice/tools/backofficeToolsProjectPicker.css.d.ts +4 -0
- package/lib/types/components/backoffice/tools/backofficeToolsProjectPicker.css.d.ts.map +1 -0
- package/lib/types/components/backoffice/tools/backofficeToolsScopePicker.css.d.ts +4 -0
- package/lib/types/components/backoffice/tools/backofficeToolsScopePicker.css.d.ts.map +1 -0
- package/lib/types/filters/filterHelpers.d.ts +5 -0
- package/lib/types/filters/filterHelpers.d.ts.map +1 -0
- package/lib/types/hooks/useAuth.d.ts +170 -0
- package/lib/types/hooks/useAuth.d.ts.map +1 -0
- package/lib/types/hooks/useBackofficeAuth.d.ts +3 -0
- package/lib/types/hooks/useBackofficeAuth.d.ts.map +1 -0
- package/lib/types/hooks/useBackofficeListRefetch.d.ts +17 -0
- package/lib/types/hooks/useBackofficeListRefetch.d.ts.map +1 -0
- package/lib/types/hooks/useBackofficeListUrlState.d.ts +8 -0
- package/lib/types/hooks/useBackofficeListUrlState.d.ts.map +1 -0
- package/lib/types/hooks/useBackofficeLoadMore.d.ts +9 -0
- package/lib/types/hooks/useBackofficeLoadMore.d.ts.map +1 -0
- package/lib/types/hooks/useBackofficeSessionAuth.d.ts +7 -0
- package/lib/types/hooks/useBackofficeSessionAuth.d.ts.map +1 -0
- package/lib/types/hooks/useBackofficeSidebarPins.d.ts +15 -0
- package/lib/types/hooks/useBackofficeSidebarPins.d.ts.map +1 -0
- package/lib/types/hooks/useBackofficeToolsUrlParams.d.ts +8 -0
- package/lib/types/hooks/useBackofficeToolsUrlParams.d.ts.map +1 -0
- package/lib/types/hooks/useSidebarGroupCollapse.d.ts +11 -0
- package/lib/types/hooks/useSidebarGroupCollapse.d.ts.map +1 -0
- package/lib/types/i18n/createI18nInstance.d.ts +17 -0
- package/lib/types/i18n/createI18nInstance.d.ts.map +1 -0
- package/lib/types/i18n/mergeResourceLanguages.d.ts +3 -0
- package/lib/types/i18n/mergeResourceLanguages.d.ts.map +1 -0
- package/lib/types/i18n/resources.d.ts +1010 -0
- package/lib/types/i18n/resources.d.ts.map +1 -0
- package/lib/types/i18n/useBackofficeFormats.d.ts +7 -0
- package/lib/types/i18n/useBackofficeFormats.d.ts.map +1 -0
- package/lib/types/i18n/useBackofficeReactTranslation.d.ts +3 -0
- package/lib/types/i18n/useBackofficeReactTranslation.d.ts.map +1 -0
- package/lib/types/i18n/useSharedTranslation.d.ts +3 -0
- package/lib/types/i18n/useSharedTranslation.d.ts.map +1 -0
- package/lib/types/index.d.ts +3 -0
- package/lib/types/index.d.ts.map +1 -0
- package/lib/types/modules/sharedSchemaTypes.d.ts +7 -0
- package/lib/types/modules/sharedSchemaTypes.d.ts.map +1 -0
- package/lib/types/modules/webauthn.d.ts +6 -0
- package/lib/types/modules/webauthn.d.ts.map +1 -0
- package/lib/types/pages/BackofficeAcceptInvitationPage.d.ts +4 -0
- package/lib/types/pages/BackofficeAcceptInvitationPage.d.ts.map +1 -0
- package/lib/types/pages/BackofficeDashboardPage.d.ts +4 -0
- package/lib/types/pages/BackofficeDashboardPage.d.ts.map +1 -0
- package/lib/types/pages/BackofficeEntityDetailLayoutPage.d.ts +11 -0
- package/lib/types/pages/BackofficeEntityDetailLayoutPage.d.ts.map +1 -0
- package/lib/types/pages/BackofficeEntityDetailPage.d.ts +18 -0
- package/lib/types/pages/BackofficeEntityDetailPage.d.ts.map +1 -0
- package/lib/types/pages/BackofficeEntityDetailUnknownPageRedirect.d.ts +13 -0
- package/lib/types/pages/BackofficeEntityDetailUnknownPageRedirect.d.ts.map +1 -0
- package/lib/types/pages/BackofficeEntityListPage.d.ts +10 -0
- package/lib/types/pages/BackofficeEntityListPage.d.ts.map +1 -0
- package/lib/types/pages/BackofficeLayoutPage.d.ts +17 -0
- package/lib/types/pages/BackofficeLayoutPage.d.ts.map +1 -0
- package/lib/types/pages/BackofficeLoginPage.d.ts +11 -0
- package/lib/types/pages/BackofficeLoginPage.d.ts.map +1 -0
- package/lib/types/pages/BackofficePasswordResetCompletePage.d.ts +4 -0
- package/lib/types/pages/BackofficePasswordResetCompletePage.d.ts.map +1 -0
- package/lib/types/pages/BackofficePasswordResetRequestPage.d.ts +4 -0
- package/lib/types/pages/BackofficePasswordResetRequestPage.d.ts.map +1 -0
- package/lib/types/pages/BackofficeToolsOperationPage.d.ts +9 -0
- package/lib/types/pages/BackofficeToolsOperationPage.d.ts.map +1 -0
- package/lib/types/pages/BackofficeVerifyEmailPage.d.ts +4 -0
- package/lib/types/pages/BackofficeVerifyEmailPage.d.ts.map +1 -0
- package/lib/types/pages/backofficeDashboardPage.css.d.ts +5 -0
- package/lib/types/pages/backofficeDashboardPage.css.d.ts.map +1 -0
- package/lib/types/pages/backofficeEntityDetailPage.css.d.ts +5 -0
- package/lib/types/pages/backofficeEntityDetailPage.css.d.ts.map +1 -0
- package/lib/types/pages/backofficeEntityListPage.css.d.ts +4 -0
- package/lib/types/pages/backofficeEntityListPage.css.d.ts.map +1 -0
- package/lib/types/pages/detail/BackofficeEntityDetailLayoutContext.d.ts +6 -0
- package/lib/types/pages/detail/BackofficeEntityDetailLayoutContext.d.ts.map +1 -0
- package/lib/types/pages/detail/buildTabsItems.d.ts +12 -0
- package/lib/types/pages/detail/buildTabsItems.d.ts.map +1 -0
- package/lib/types/pages/detail/pageResolution.d.ts +20 -0
- package/lib/types/pages/detail/pageResolution.d.ts.map +1 -0
- package/lib/types/provider/BackofficeConfigContext.d.ts +18 -0
- package/lib/types/provider/BackofficeConfigContext.d.ts.map +1 -0
- package/lib/types/provider/BackofficeProvider.d.ts +7 -0
- package/lib/types/provider/BackofficeProvider.d.ts.map +1 -0
- package/lib/types/provider/entityRegistry.d.ts +28 -0
- package/lib/types/provider/entityRegistry.d.ts.map +1 -0
- package/lib/types/provider/lazyValue.d.ts +7 -0
- package/lib/types/provider/lazyValue.d.ts.map +1 -0
- package/lib/types/provider/types.d.ts +101 -0
- package/lib/types/provider/types.d.ts.map +1 -0
- package/lib/types/provider/useBackofficeEntityLoader.d.ts +39 -0
- package/lib/types/provider/useBackofficeEntityLoader.d.ts.map +1 -0
- package/lib/types/provider/useBackofficeLazyValue.d.ts +13 -0
- package/lib/types/provider/useBackofficeLazyValue.d.ts.map +1 -0
- package/lib/types/relay/RelayProvider.d.ts +7 -0
- package/lib/types/relay/RelayProvider.d.ts.map +1 -0
- package/lib/types/relay/createInlineDataReader.d.ts +2 -0
- package/lib/types/relay/createInlineDataReader.d.ts.map +1 -0
- package/lib/types/relay/createInlineReader.d.ts +4 -0
- package/lib/types/relay/createInlineReader.d.ts.map +1 -0
- package/lib/types/relay/envHelpers.d.ts +16 -0
- package/lib/types/relay/envHelpers.d.ts.map +1 -0
- package/lib/types/relay/environment.d.ts +12 -0
- package/lib/types/relay/environment.d.ts.map +1 -0
- package/lib/types/relay/identityView.d.ts +2 -0
- package/lib/types/relay/identityView.d.ts.map +1 -0
- package/lib/types/relay/mutationResult.d.ts +51 -0
- package/lib/types/relay/mutationResult.d.ts.map +1 -0
- package/lib/types/relay/useRelayEnvironment.d.ts +2 -0
- package/lib/types/relay/useRelayEnvironment.d.ts.map +1 -0
- package/lib/types/router/backofficeAuthPaths.d.ts +3 -0
- package/lib/types/router/backofficeAuthPaths.d.ts.map +1 -0
- package/lib/types/router/createBackofficeRoutes.d.ts +32 -0
- package/lib/types/router/createBackofficeRoutes.d.ts.map +1 -0
- package/lib/types/style.d.ts +2 -0
- package/lib/types/style.d.ts.map +1 -0
- package/package.json +138 -0
|
@@ -0,0 +1,439 @@
|
|
|
1
|
+
import { useSharedTranslation as e } from "../i18n/useSharedTranslation.js";
|
|
2
|
+
import { requireField as t, resolveMutationOutcome as n } from "../relay/mutationResult.js";
|
|
3
|
+
import { resetRelayStore as r } from "../relay/environment.js";
|
|
4
|
+
import { base64UrlToBuffer as i, bufferToBase64Url as a, parseSignCount as o } from "../modules/webauthn.js";
|
|
5
|
+
import { useCallback as s, useState as c } from "react";
|
|
6
|
+
//#region src/hooks/useAuth.ts
|
|
7
|
+
var l = {
|
|
8
|
+
authMethod: null,
|
|
9
|
+
challengeToken: null,
|
|
10
|
+
emailHint: null,
|
|
11
|
+
mfaLevel: null,
|
|
12
|
+
nextStep: null
|
|
13
|
+
}, u = (u) => () => {
|
|
14
|
+
let { t: d } = e(), [f, p] = c(!1), [m, h] = c(null), [g, _] = c(null), [v, y] = c(null), [b, x] = c([]), [S, C] = c(l), w = u.login.commit, T = u.logout.commit, E = u.completeMfa.commit, D = u.beginPasskeyLogin.commit, O = u.finishPasskeyLogin.commit, k = u.acceptInvitation?.commit, A = u.beginAuthentication.commit, j = d("auth.loginFlow.errors.tryAgain"), M = d("auth.loginFlow.errors.tryAgain"), N = d("auth.passkey.errors.failed"), P = d("auth.mfa.errors.verificationFailed"), F = d("auth.acceptInvitation.errors.default"), I = d("auth.mfa.errors.invalidChallenge"), L = d("auth.passkey.errors.notAvailable"), R = "Logout failed.", z = s(() => {
|
|
15
|
+
h(null), _(null), y(null), x([]), C(l);
|
|
16
|
+
}, []), B = s(() => {
|
|
17
|
+
h(null);
|
|
18
|
+
}, []), V = s((e) => {
|
|
19
|
+
let t = e.authMethod ?? null, n = e.challengeToken ?? null, r = e.mfaLevel ?? null, i = e.nextStep ?? null;
|
|
20
|
+
return C((e) => ({
|
|
21
|
+
...e,
|
|
22
|
+
authMethod: t,
|
|
23
|
+
challengeToken: n,
|
|
24
|
+
mfaLevel: r,
|
|
25
|
+
nextStep: i
|
|
26
|
+
})), e.loggedInUser != null && i == null ? (_({ id: e.loggedInUser.id }), "success") : i === "TOTP" && n != null ? "mfa-required" : "error";
|
|
27
|
+
}, []), H = s((e) => typeof e == "object" && !!e && ("status" in e || "result" in e), []), U = s((e) => {
|
|
28
|
+
switch (e) {
|
|
29
|
+
case "INVALID_CREDENTIALS": return d("auth.loginFlow.errors.invalidCredentials");
|
|
30
|
+
case "ACCOUNT_LOCKED": return d("auth.loginFlow.errors.accountLocked");
|
|
31
|
+
case "RATE_LIMITED": return d("auth.loginFlow.errors.rateLimited");
|
|
32
|
+
case "INTERNAL_ERROR": return d("auth.loginFlow.errors.tryAgain");
|
|
33
|
+
default: return null;
|
|
34
|
+
}
|
|
35
|
+
}, [d]), W = s((e) => {
|
|
36
|
+
switch (e) {
|
|
37
|
+
case "INVALID_EMAIL": return d("auth.loginFlow.errors.invalidEmail");
|
|
38
|
+
case "INTERNAL_ERROR": return d("auth.loginFlow.errors.tryAgain");
|
|
39
|
+
default: return null;
|
|
40
|
+
}
|
|
41
|
+
}, [d]), G = s((e) => {
|
|
42
|
+
switch (e) {
|
|
43
|
+
case "INVALID_EMAIL": return d("auth.passkey.errors.invalidEmail");
|
|
44
|
+
case "PASSKEY_NOT_FOUND": return d("auth.passkey.errors.notFound");
|
|
45
|
+
case "PASSKEY_NOT_SUPPORTED": return d("auth.passkey.errors.notAvailable");
|
|
46
|
+
case "INTERNAL_ERROR": return d("auth.passkey.errors.failed");
|
|
47
|
+
default: return null;
|
|
48
|
+
}
|
|
49
|
+
}, [d]), K = s((e) => {
|
|
50
|
+
switch (e) {
|
|
51
|
+
case "INVALID_CHALLENGE_TOKEN": return d("auth.passkey.errors.invalidChallenge");
|
|
52
|
+
case "CHALLENGE_EXPIRED": return d("auth.passkey.errors.challengeExpired");
|
|
53
|
+
case "INVALID_ASSERTION": return d("auth.passkey.errors.invalidAssertion");
|
|
54
|
+
case "INTERNAL_ERROR": return d("auth.passkey.errors.failed");
|
|
55
|
+
default: return null;
|
|
56
|
+
}
|
|
57
|
+
}, [d]), q = s((e) => {
|
|
58
|
+
switch (e) {
|
|
59
|
+
case "INVALID_CHALLENGE_TOKEN": return d("auth.mfa.errors.invalidChallenge");
|
|
60
|
+
case "CHALLENGE_EXPIRED": return d("auth.mfa.errors.expired");
|
|
61
|
+
case "INVALID_CODE": return d("auth.mfa.errors.invalidCode");
|
|
62
|
+
case "TOO_MANY_ATTEMPTS": return d("auth.mfa.errors.tooManyAttempts");
|
|
63
|
+
case "INTERNAL_ERROR": return d("auth.mfa.errors.verificationFailed");
|
|
64
|
+
default: return null;
|
|
65
|
+
}
|
|
66
|
+
}, [d]), J = s((e) => {
|
|
67
|
+
switch (e) {
|
|
68
|
+
case "INVALID_TOKEN": return d("auth.acceptInvitation.errors.invalidToken");
|
|
69
|
+
case "TOKEN_EXPIRED": return d("auth.acceptInvitation.errors.expired");
|
|
70
|
+
case "ALREADY_ACCEPTED": return d("auth.acceptInvitation.errors.alreadyAccepted");
|
|
71
|
+
case "PASSWORD_MISMATCH": return d("auth.acceptInvitation.errors.passwordMismatch");
|
|
72
|
+
case "PASSWORD_POLICY_VIOLATION": return d("auth.acceptInvitation.errors.passwordPolicyViolation");
|
|
73
|
+
case "RATE_LIMITED": return d("auth.acceptInvitation.errors.rateLimited");
|
|
74
|
+
case "EMAIL_MISMATCH": return d("auth.acceptInvitation.errors.emailMismatch");
|
|
75
|
+
case "INTERNAL_ERROR": return d("auth.acceptInvitation.errors.default");
|
|
76
|
+
default: return null;
|
|
77
|
+
}
|
|
78
|
+
}, [d]), Y = s(async (e) => new Promise((t, r) => {
|
|
79
|
+
A({
|
|
80
|
+
variables: { email: e },
|
|
81
|
+
onCompleted: (e) => {
|
|
82
|
+
let i = e.beginAuthentication, a = i;
|
|
83
|
+
if (H(i)) {
|
|
84
|
+
let e = n(i, {
|
|
85
|
+
defaultErrorMessage: M,
|
|
86
|
+
mapReason: W
|
|
87
|
+
});
|
|
88
|
+
if (!e.ok) {
|
|
89
|
+
let t = { message: e.message };
|
|
90
|
+
h(t), r(t);
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
a = e.payload;
|
|
94
|
+
}
|
|
95
|
+
let o = a.methods.map((e) => e.method), s = a.lockedUntil ?? null;
|
|
96
|
+
x(o), y(s), t({
|
|
97
|
+
methods: o,
|
|
98
|
+
lockedUntil: s
|
|
99
|
+
});
|
|
100
|
+
},
|
|
101
|
+
onError: () => {
|
|
102
|
+
let e = { message: M };
|
|
103
|
+
h(e), r(e);
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
}), [
|
|
107
|
+
A,
|
|
108
|
+
M,
|
|
109
|
+
H,
|
|
110
|
+
W
|
|
111
|
+
]), X = s(async (e) => (p(!0), h(null), C((t) => ({
|
|
112
|
+
...t,
|
|
113
|
+
emailHint: e.email
|
|
114
|
+
})), new Promise((t, r) => {
|
|
115
|
+
w({
|
|
116
|
+
variables: { input: e },
|
|
117
|
+
onCompleted: (e) => {
|
|
118
|
+
p(!1);
|
|
119
|
+
let i = e.login, a = null;
|
|
120
|
+
if (H(i)) {
|
|
121
|
+
let e = n(i, {
|
|
122
|
+
defaultErrorMessage: j,
|
|
123
|
+
mapReason: U
|
|
124
|
+
});
|
|
125
|
+
if (!e.ok) {
|
|
126
|
+
let t = { message: e.message };
|
|
127
|
+
h(t), r(t);
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
a = i.payload ?? null;
|
|
131
|
+
} else a = i;
|
|
132
|
+
if (a == null) {
|
|
133
|
+
let e = { message: j };
|
|
134
|
+
h(e), r(e);
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
let o = V(a);
|
|
138
|
+
if (o === "success" || o === "mfa-required") {
|
|
139
|
+
t(o);
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
let s = { message: j };
|
|
143
|
+
h(s), r(s);
|
|
144
|
+
},
|
|
145
|
+
onError: () => {
|
|
146
|
+
p(!1);
|
|
147
|
+
let e = { message: j };
|
|
148
|
+
h(e), r(e);
|
|
149
|
+
}
|
|
150
|
+
});
|
|
151
|
+
})), [
|
|
152
|
+
w,
|
|
153
|
+
j,
|
|
154
|
+
H,
|
|
155
|
+
U,
|
|
156
|
+
V
|
|
157
|
+
]), Z = s(async (e) => {
|
|
158
|
+
let { challengeToken: t } = S;
|
|
159
|
+
if (t == null) {
|
|
160
|
+
let e = { message: I };
|
|
161
|
+
return h(e), Promise.reject(e);
|
|
162
|
+
}
|
|
163
|
+
return p(!0), h(null), new Promise((r, i) => {
|
|
164
|
+
E({
|
|
165
|
+
variables: { input: {
|
|
166
|
+
challengeToken: t,
|
|
167
|
+
code: e.code
|
|
168
|
+
} },
|
|
169
|
+
onCompleted: (e) => {
|
|
170
|
+
p(!1);
|
|
171
|
+
let t = e.completeMfa, a = null;
|
|
172
|
+
if (H(t)) {
|
|
173
|
+
let e = n(t, {
|
|
174
|
+
defaultErrorMessage: P,
|
|
175
|
+
mapReason: q
|
|
176
|
+
});
|
|
177
|
+
if (!e.ok) {
|
|
178
|
+
let t = { message: e.message };
|
|
179
|
+
h(t), i(t);
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
182
|
+
a = t.payload ?? null;
|
|
183
|
+
} else a = t;
|
|
184
|
+
if (a == null) {
|
|
185
|
+
let e = { message: P };
|
|
186
|
+
h(e), i(e);
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
if (V(a) === "success") {
|
|
190
|
+
r();
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
let o = { message: P };
|
|
194
|
+
h(o), i(o);
|
|
195
|
+
},
|
|
196
|
+
onError: () => {
|
|
197
|
+
p(!1);
|
|
198
|
+
let e = { message: P };
|
|
199
|
+
h(e), i(e);
|
|
200
|
+
}
|
|
201
|
+
});
|
|
202
|
+
});
|
|
203
|
+
}, [
|
|
204
|
+
S,
|
|
205
|
+
E,
|
|
206
|
+
P,
|
|
207
|
+
H,
|
|
208
|
+
q,
|
|
209
|
+
I,
|
|
210
|
+
V
|
|
211
|
+
]), Q = s(async ({ email: e }) => {
|
|
212
|
+
if (typeof window > "u") {
|
|
213
|
+
let e = { message: L };
|
|
214
|
+
return h(e), Promise.reject(e);
|
|
215
|
+
}
|
|
216
|
+
return p(!0), h(null), C((t) => ({
|
|
217
|
+
...t,
|
|
218
|
+
emailHint: e
|
|
219
|
+
})), new Promise((t, r) => {
|
|
220
|
+
D({
|
|
221
|
+
variables: { email: e },
|
|
222
|
+
onCompleted: (e) => {
|
|
223
|
+
let s = e.beginPasskeyLogin, c = s;
|
|
224
|
+
if (H(s)) {
|
|
225
|
+
let e = n(s, {
|
|
226
|
+
defaultErrorMessage: N,
|
|
227
|
+
mapReason: G
|
|
228
|
+
});
|
|
229
|
+
if (!e.ok) {
|
|
230
|
+
p(!1);
|
|
231
|
+
let t = { message: e.message };
|
|
232
|
+
h(t), r(t);
|
|
233
|
+
return;
|
|
234
|
+
}
|
|
235
|
+
c = e.payload;
|
|
236
|
+
}
|
|
237
|
+
(async () => {
|
|
238
|
+
try {
|
|
239
|
+
let e = await navigator.credentials.get({ publicKey: {
|
|
240
|
+
allowCredentials: c.allowCredentials.map((e) => ({
|
|
241
|
+
id: i(e),
|
|
242
|
+
type: "public-key"
|
|
243
|
+
})),
|
|
244
|
+
challenge: i(c.challenge),
|
|
245
|
+
rpId: c.rpId,
|
|
246
|
+
userVerification: "preferred"
|
|
247
|
+
} });
|
|
248
|
+
if (e == null) throw Error("No credential returned by the authenticator.");
|
|
249
|
+
let s = e.response, l = o(s.authenticatorData);
|
|
250
|
+
O({
|
|
251
|
+
variables: { input: {
|
|
252
|
+
challenge: c.challenge,
|
|
253
|
+
challengeToken: c.challengeToken,
|
|
254
|
+
credentialId: e.id,
|
|
255
|
+
signCount: l,
|
|
256
|
+
userHandle: s.userHandle == null ? null : a(s.userHandle)
|
|
257
|
+
} },
|
|
258
|
+
onCompleted: (e) => {
|
|
259
|
+
p(!1);
|
|
260
|
+
let i = e.finishPasskeyLogin, a = null;
|
|
261
|
+
if (H(i)) {
|
|
262
|
+
let e = n(i, {
|
|
263
|
+
defaultErrorMessage: N,
|
|
264
|
+
mapReason: K
|
|
265
|
+
});
|
|
266
|
+
if (!e.ok) {
|
|
267
|
+
let t = { message: e.message };
|
|
268
|
+
h(t), r(t);
|
|
269
|
+
return;
|
|
270
|
+
}
|
|
271
|
+
a = i.payload ?? null;
|
|
272
|
+
} else a = i;
|
|
273
|
+
if (a == null) {
|
|
274
|
+
let e = { message: N };
|
|
275
|
+
h(e), r(e);
|
|
276
|
+
return;
|
|
277
|
+
}
|
|
278
|
+
let o = V(a);
|
|
279
|
+
if (o === "success") {
|
|
280
|
+
t(o);
|
|
281
|
+
return;
|
|
282
|
+
}
|
|
283
|
+
let s = { message: N };
|
|
284
|
+
h(s), r(s);
|
|
285
|
+
},
|
|
286
|
+
onError: () => {
|
|
287
|
+
p(!1);
|
|
288
|
+
let e = { message: N };
|
|
289
|
+
h(e), r(e);
|
|
290
|
+
}
|
|
291
|
+
});
|
|
292
|
+
} catch (e) {
|
|
293
|
+
p(!1);
|
|
294
|
+
let t = { message: e instanceof Error ? e.message : "Passkey login was cancelled." };
|
|
295
|
+
h(t), r(t);
|
|
296
|
+
}
|
|
297
|
+
})();
|
|
298
|
+
},
|
|
299
|
+
onError: () => {
|
|
300
|
+
p(!1);
|
|
301
|
+
let e = { message: N };
|
|
302
|
+
h(e), r(e);
|
|
303
|
+
}
|
|
304
|
+
});
|
|
305
|
+
});
|
|
306
|
+
}, [
|
|
307
|
+
D,
|
|
308
|
+
O,
|
|
309
|
+
N,
|
|
310
|
+
H,
|
|
311
|
+
G,
|
|
312
|
+
K,
|
|
313
|
+
L,
|
|
314
|
+
V
|
|
315
|
+
]), $ = s(async (e) => {
|
|
316
|
+
if (k == null) {
|
|
317
|
+
let e = { message: "Invitation acceptance is not available." };
|
|
318
|
+
return h(e), Promise.reject(e);
|
|
319
|
+
}
|
|
320
|
+
return p(!0), h(null), new Promise((t, r) => {
|
|
321
|
+
k({
|
|
322
|
+
variables: { input: {
|
|
323
|
+
token: e.token,
|
|
324
|
+
password: e.password,
|
|
325
|
+
passwordConfirmation: e.passwordConfirmation
|
|
326
|
+
} },
|
|
327
|
+
onCompleted: (e) => {
|
|
328
|
+
p(!1);
|
|
329
|
+
let i = e.acceptInvitation, a = null;
|
|
330
|
+
if (H(i)) {
|
|
331
|
+
let e = n(i, {
|
|
332
|
+
defaultErrorMessage: F,
|
|
333
|
+
mapReason: J
|
|
334
|
+
});
|
|
335
|
+
if (!e.ok) {
|
|
336
|
+
let t = { message: e.message };
|
|
337
|
+
h(t), r(t);
|
|
338
|
+
return;
|
|
339
|
+
}
|
|
340
|
+
a = i.payload ?? null;
|
|
341
|
+
} else a = i;
|
|
342
|
+
if (a == null) {
|
|
343
|
+
let e = { message: F };
|
|
344
|
+
h(e), r(e);
|
|
345
|
+
return;
|
|
346
|
+
}
|
|
347
|
+
let o = V(a);
|
|
348
|
+
if (o === "success" || o === "mfa-required") {
|
|
349
|
+
t(o);
|
|
350
|
+
return;
|
|
351
|
+
}
|
|
352
|
+
let s = { message: F };
|
|
353
|
+
h(s), r(s);
|
|
354
|
+
},
|
|
355
|
+
onError: () => {
|
|
356
|
+
p(!1);
|
|
357
|
+
let e = { message: F };
|
|
358
|
+
h(e), r(e);
|
|
359
|
+
}
|
|
360
|
+
});
|
|
361
|
+
});
|
|
362
|
+
}, [
|
|
363
|
+
k,
|
|
364
|
+
F,
|
|
365
|
+
H,
|
|
366
|
+
J,
|
|
367
|
+
V
|
|
368
|
+
]), ee = s(async () => (p(!0), new Promise((e, i) => {
|
|
369
|
+
T({
|
|
370
|
+
variables: {},
|
|
371
|
+
onCompleted: (a) => {
|
|
372
|
+
p(!1);
|
|
373
|
+
let o = a.logout, s = null;
|
|
374
|
+
if (H(o)) {
|
|
375
|
+
let e = n(o, { defaultErrorMessage: R });
|
|
376
|
+
if (!e.ok) {
|
|
377
|
+
let t = { message: e.message };
|
|
378
|
+
h(t), i(t);
|
|
379
|
+
return;
|
|
380
|
+
}
|
|
381
|
+
let r = t(o.payload?.loggedOut ?? null, R);
|
|
382
|
+
if (!r.ok) {
|
|
383
|
+
let e = { message: r.message };
|
|
384
|
+
h(e), i(e);
|
|
385
|
+
return;
|
|
386
|
+
}
|
|
387
|
+
s = r.value;
|
|
388
|
+
} else {
|
|
389
|
+
let e = t(o.loggedOut ?? null, R);
|
|
390
|
+
if (!e.ok) {
|
|
391
|
+
let t = { message: e.message };
|
|
392
|
+
h(t), i(t);
|
|
393
|
+
return;
|
|
394
|
+
}
|
|
395
|
+
s = e.value;
|
|
396
|
+
}
|
|
397
|
+
if (!s) {
|
|
398
|
+
let e = { message: R };
|
|
399
|
+
h(e), i(e);
|
|
400
|
+
return;
|
|
401
|
+
}
|
|
402
|
+
localStorage.removeItem("auth_token"), localStorage.removeItem("remember_me"), _(null), C(l), r(), e();
|
|
403
|
+
},
|
|
404
|
+
onError: () => {
|
|
405
|
+
p(!1);
|
|
406
|
+
let e = { message: R };
|
|
407
|
+
h(e), r(), i(e);
|
|
408
|
+
}
|
|
409
|
+
});
|
|
410
|
+
})), [
|
|
411
|
+
T,
|
|
412
|
+
R,
|
|
413
|
+
H
|
|
414
|
+
]), te = f || u.login.isInFlight || u.logout.isInFlight || u.completeMfa.isInFlight || u.beginPasskeyLogin.isInFlight || u.finishPasskeyLogin.isInFlight || (u.acceptInvitation?.isInFlight ?? !1) || u.beginAuthentication.isInFlight;
|
|
415
|
+
return {
|
|
416
|
+
authMethod: S.authMethod,
|
|
417
|
+
challengeToken: S.challengeToken,
|
|
418
|
+
nextStep: S.nextStep,
|
|
419
|
+
mfaLevel: S.mfaLevel,
|
|
420
|
+
emailHint: S.emailHint,
|
|
421
|
+
login: X,
|
|
422
|
+
loginWithPasskey: Q,
|
|
423
|
+
completeMfa: Z,
|
|
424
|
+
acceptInvitation: $,
|
|
425
|
+
beginAuthentication: Y,
|
|
426
|
+
logout: ee,
|
|
427
|
+
reset: z,
|
|
428
|
+
clearError: B,
|
|
429
|
+
isLoading: te,
|
|
430
|
+
error: m,
|
|
431
|
+
user: g,
|
|
432
|
+
lockedUntil: v,
|
|
433
|
+
availableMethods: b
|
|
434
|
+
};
|
|
435
|
+
};
|
|
436
|
+
//#endregion
|
|
437
|
+
export { u as createUseAuth };
|
|
438
|
+
|
|
439
|
+
//# sourceMappingURL=useAuth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useAuth.js","names":[],"sources":["../../../src/hooks/useAuth.ts"],"sourcesContent":["/* eslint-disable no-ternary */\nimport { useCallback, useState } from 'react';\n\nimport {\n type MutationPayloadBase,\n requireField,\n resolveMutationOutcome,\n} from '../relay/mutationResult.js';\nimport { useSharedTranslation } from '../i18n/useSharedTranslation.js';\n\nimport { resetRelayStore } from '../relay/environment.js';\nimport type { PayloadError } from 'relay-runtime';\n\nimport type {\n AuthMethod,\n LoginNextStep,\n MfaLevel,\n} from '../modules/sharedSchemaTypes.js';\nimport {\n base64UrlToBuffer,\n bufferToBase64Url,\n parseSignCount,\n} from '../modules/webauthn.js';\n\nexport type AuthPayload = {\n authMethod: AuthMethod | null | undefined;\n challengeToken: string | null | undefined;\n loggedInUser: { id: string } | null | undefined;\n mfaLevel: MfaLevel | null | undefined;\n nextStep: LoginNextStep | null | undefined;\n};\n\ntype LoginErrorReason =\n | 'INVALID_CREDENTIALS'\n | 'ACCOUNT_LOCKED'\n | 'RATE_LIMITED'\n | 'INTERNAL_ERROR';\n\ntype LogoutErrorReason =\n | 'UNAUTHENTICATED'\n | 'SESSION_NOT_FOUND'\n | 'INTERNAL_ERROR';\n\ntype BeginAuthenticationErrorReason = 'INVALID_EMAIL' | 'INTERNAL_ERROR';\n\ntype BeginPasskeyLoginErrorReason =\n | 'INVALID_EMAIL'\n | 'PASSKEY_NOT_FOUND'\n | 'PASSKEY_NOT_SUPPORTED'\n | 'INTERNAL_ERROR';\n\ntype FinishPasskeyLoginErrorReason =\n | 'INVALID_CHALLENGE_TOKEN'\n | 'CHALLENGE_EXPIRED'\n | 'INVALID_ASSERTION'\n | 'INTERNAL_ERROR';\n\ntype CompleteMfaErrorReason =\n | 'INVALID_CHALLENGE_TOKEN'\n | 'CHALLENGE_EXPIRED'\n | 'INVALID_CODE'\n | 'TOO_MANY_ATTEMPTS'\n | 'INTERNAL_ERROR';\n\ntype AcceptInvitationErrorReason =\n | 'INVALID_TOKEN'\n | 'TOKEN_EXPIRED'\n | 'ALREADY_ACCEPTED'\n | 'PASSWORD_MISMATCH'\n | 'PASSWORD_POLICY_VIOLATION'\n | 'RATE_LIMITED'\n | 'EMAIL_MISMATCH'\n | 'INTERNAL_ERROR';\n\nexport type BeginAuthenticationPayload =\n MutationPayloadBase<BeginAuthenticationErrorReason> & {\n lockedUntil: string | null | undefined;\n methods: readonly {\n method: AuthMethod;\n mfaEnforced?: boolean | null | undefined;\n }[];\n };\n\nexport type BeginPasskeyLoginPayload =\n MutationPayloadBase<BeginPasskeyLoginErrorReason> & {\n allowCredentials: readonly string[];\n challenge: string;\n challengeToken: string;\n rpId: string;\n };\n\ntype LoginMutationPayload = MutationPayloadBase<LoginErrorReason> & {\n payload?: AuthPayload | null | undefined;\n};\n\ntype LogoutPayload = {\n loggedOut?: boolean | null | undefined;\n};\n\ntype LogoutMutationPayload = MutationPayloadBase<LogoutErrorReason> & {\n payload?: LogoutPayload | null | undefined;\n};\n\ntype CompleteMfaMutationPayload =\n MutationPayloadBase<CompleteMfaErrorReason> & {\n payload?: AuthPayload | null | undefined;\n };\n\ntype FinishPasskeyLoginMutationPayload =\n MutationPayloadBase<FinishPasskeyLoginErrorReason> & {\n payload?: AuthPayload | null | undefined;\n };\n\ntype AcceptInvitationMutationPayload =\n MutationPayloadBase<AcceptInvitationErrorReason> & {\n payload?: AuthPayload | null | undefined;\n };\n\nexport type LoginResponse = { login: AuthPayload | LoginMutationPayload };\nexport type LogoutResponse = { logout: LogoutPayload | LogoutMutationPayload };\nexport type CompleteMfaResponse = {\n completeMfa: AuthPayload | CompleteMfaMutationPayload;\n};\nexport type FinishPasskeyLoginResponse = {\n finishPasskeyLogin: AuthPayload | FinishPasskeyLoginMutationPayload;\n};\nexport type AcceptInvitationResponse = {\n acceptInvitation: AuthPayload | AcceptInvitationMutationPayload;\n};\nexport type BeginAuthenticationResponse = {\n beginAuthentication: BeginAuthenticationPayload;\n};\nexport type BeginPasskeyLoginResponse = {\n beginPasskeyLogin: BeginPasskeyLoginPayload;\n};\n\nexport type LoginVariables = {\n input: LoginCredentials;\n};\n\nexport type LogoutVariables = Record<PropertyKey, never>;\n\nexport type CompleteMfaVariables = {\n input: {\n challengeToken: string;\n code: string;\n };\n};\n\nexport type BeginPasskeyLoginVariables = {\n email: string;\n};\n\nexport type FinishPasskeyLoginVariables = {\n input: {\n challenge: string;\n challengeToken: string;\n credentialId: string;\n signCount: number;\n userHandle?: string | null;\n };\n};\n\nexport type AcceptInvitationVariables = {\n input: {\n token: string;\n password: string;\n passwordConfirmation: string;\n };\n};\n\nexport type BeginAuthenticationVariables = {\n email: string;\n};\n\ntype MutationCommitConfig<TVariables, TResponse> = {\n variables: TVariables;\n onCompleted?: (\n response: TResponse,\n errors: readonly PayloadError[] | null,\n ) => void;\n onError?: (error: Error) => void;\n};\n\ntype MutationCommit<TVariables, TResponse> = (\n config: MutationCommitConfig<TVariables, TResponse>,\n) => void;\n\ntype MutationEntry<TVariables, TResponse> = {\n commit: MutationCommit<TVariables, TResponse>;\n isInFlight: boolean;\n};\n\nexport type AuthMutationHooks = {\n login: MutationEntry<LoginVariables, LoginResponse>;\n logout: MutationEntry<LogoutVariables, LogoutResponse>;\n completeMfa: MutationEntry<CompleteMfaVariables, CompleteMfaResponse>;\n beginPasskeyLogin: MutationEntry<\n BeginPasskeyLoginVariables,\n BeginPasskeyLoginResponse\n >;\n finishPasskeyLogin: MutationEntry<\n FinishPasskeyLoginVariables,\n FinishPasskeyLoginResponse\n >;\n acceptInvitation?: MutationEntry<\n AcceptInvitationVariables,\n AcceptInvitationResponse\n >;\n beginAuthentication: MutationEntry<\n BeginAuthenticationVariables,\n BeginAuthenticationResponse\n >;\n};\n\ninterface User {\n id: string;\n}\n\nexport type LoginStatus = 'success' | 'mfa-required' | 'error';\n\nexport interface LoginCredentials {\n email: string;\n password: string;\n}\n\nexport interface TotpCredentials {\n code: string;\n}\n\nexport interface AcceptInvitationCredentials {\n token: string;\n password: string;\n passwordConfirmation: string;\n}\n\nexport interface AuthError {\n message: string;\n code?: string;\n}\n\nexport interface UseAuthReturn {\n authMethod: AuthMethod | null;\n challengeToken: string | null;\n nextStep: LoginNextStep | null;\n mfaLevel: MfaLevel | null;\n emailHint: string | null;\n lockedUntil: string | null;\n availableMethods: AuthMethod[];\n login: (credentials: LoginCredentials) => Promise<LoginStatus>;\n loginWithPasskey: (params: { email: string }) => Promise<LoginStatus>;\n completeMfa: (credentials: TotpCredentials) => Promise<void>;\n acceptInvitation: (\n credentials: AcceptInvitationCredentials,\n ) => Promise<LoginStatus>;\n beginAuthentication: (\n email: string,\n ) => Promise<{ methods: AuthMethod[]; lockedUntil: string | null }>;\n logout: () => Promise<void>;\n reset: () => void;\n clearError: () => void;\n isLoading: boolean;\n error: AuthError | null;\n user: User | null;\n}\n\nconst initialState = {\n authMethod: null as AuthMethod | null,\n challengeToken: null as string | null,\n emailHint: null as string | null,\n mfaLevel: null as MfaLevel | null,\n nextStep: null as LoginNextStep | null,\n};\n\nexport const createUseAuth = (mutations: AuthMutationHooks) => {\n return (): UseAuthReturn => {\n const { t } = useSharedTranslation();\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [error, setError] = useState<AuthError | null>(null);\n const [user, setUser] = useState<User | null>(null);\n const [lockedUntil, setLockedUntil] = useState<string | null>(null);\n const [availableMethods, setAvailableMethods] = useState<AuthMethod[]>([]);\n const [authState, setAuthState] = useState(initialState);\n\n const commitLoginMutation = mutations.login.commit;\n const commitLogoutMutation = mutations.logout.commit;\n const commitCompleteMfaMutation = mutations.completeMfa.commit;\n const commitBeginPasskeyLoginMutation = mutations.beginPasskeyLogin.commit;\n const commitFinishPasskeyLoginMutation =\n mutations.finishPasskeyLogin.commit;\n const commitAcceptInvitationMutation = mutations.acceptInvitation?.commit;\n const commitBeginAuthenticationMutation =\n mutations.beginAuthentication.commit;\n\n const defaultLoginErrorMessage = t('auth.loginFlow.errors.tryAgain');\n const defaultBeginAuthenticationErrorMessage = t(\n 'auth.loginFlow.errors.tryAgain',\n );\n const defaultPasskeyErrorMessage = t('auth.passkey.errors.failed');\n const defaultMfaErrorMessage = t('auth.mfa.errors.verificationFailed');\n const defaultInvitationErrorMessage = t(\n 'auth.acceptInvitation.errors.default',\n );\n const mfaInvalidChallengeMessage = t('auth.mfa.errors.invalidChallenge');\n const passkeyNotAvailableMessage = t('auth.passkey.errors.notAvailable');\n const defaultLogoutErrorMessage = 'Logout failed.';\n\n const reset = useCallback(() => {\n setError(null);\n setUser(null);\n setLockedUntil(null);\n setAvailableMethods([]);\n setAuthState(initialState);\n }, []);\n\n const clearError = useCallback(() => {\n setError(null);\n }, []);\n\n const updateAuthStateFromPayload = useCallback(\n (payload: AuthPayload): LoginStatus => {\n const authMethod = payload.authMethod ?? null;\n const challengeToken = payload.challengeToken ?? null;\n const mfaLevel = payload.mfaLevel ?? null;\n const nextStep = payload.nextStep ?? null;\n\n setAuthState((prev) => {\n return {\n ...prev,\n authMethod,\n challengeToken,\n mfaLevel,\n nextStep,\n };\n });\n\n if (payload.loggedInUser != null && nextStep == null) {\n setUser({\n id: payload.loggedInUser.id,\n });\n return 'success';\n }\n\n if (nextStep === 'TOTP' && challengeToken != null) {\n return 'mfa-required';\n }\n\n return 'error';\n },\n [],\n );\n\n const isMutationPayload = useCallback(\n (value: unknown): value is MutationPayloadBase => {\n return (\n value != null &&\n typeof value === 'object' &&\n ('status' in value || 'result' in value)\n );\n },\n [],\n );\n\n const mapLoginReason = useCallback(\n (reason: LoginErrorReason): string | null => {\n switch (reason) {\n case 'INVALID_CREDENTIALS':\n return t('auth.loginFlow.errors.invalidCredentials');\n case 'ACCOUNT_LOCKED':\n return t('auth.loginFlow.errors.accountLocked');\n case 'RATE_LIMITED':\n return t('auth.loginFlow.errors.rateLimited');\n case 'INTERNAL_ERROR':\n return t('auth.loginFlow.errors.tryAgain');\n default:\n return null;\n }\n },\n [t],\n );\n\n const mapBeginAuthenticationReason = useCallback(\n (reason: BeginAuthenticationErrorReason): string | null => {\n switch (reason) {\n case 'INVALID_EMAIL':\n return t('auth.loginFlow.errors.invalidEmail');\n case 'INTERNAL_ERROR':\n return t('auth.loginFlow.errors.tryAgain');\n default:\n return null;\n }\n },\n [t],\n );\n\n const mapBeginPasskeyLoginReason = useCallback(\n (reason: BeginPasskeyLoginErrorReason): string | null => {\n switch (reason) {\n case 'INVALID_EMAIL':\n return t('auth.passkey.errors.invalidEmail');\n case 'PASSKEY_NOT_FOUND':\n return t('auth.passkey.errors.notFound');\n case 'PASSKEY_NOT_SUPPORTED':\n return t('auth.passkey.errors.notAvailable');\n case 'INTERNAL_ERROR':\n return t('auth.passkey.errors.failed');\n default:\n return null;\n }\n },\n [t],\n );\n\n const mapFinishPasskeyLoginReason = useCallback(\n (reason: FinishPasskeyLoginErrorReason): string | null => {\n switch (reason) {\n case 'INVALID_CHALLENGE_TOKEN':\n return t('auth.passkey.errors.invalidChallenge');\n case 'CHALLENGE_EXPIRED':\n return t('auth.passkey.errors.challengeExpired');\n case 'INVALID_ASSERTION':\n return t('auth.passkey.errors.invalidAssertion');\n case 'INTERNAL_ERROR':\n return t('auth.passkey.errors.failed');\n default:\n return null;\n }\n },\n [t],\n );\n\n const mapCompleteMfaReason = useCallback(\n (reason: CompleteMfaErrorReason): string | null => {\n switch (reason) {\n case 'INVALID_CHALLENGE_TOKEN':\n return t('auth.mfa.errors.invalidChallenge');\n case 'CHALLENGE_EXPIRED':\n return t('auth.mfa.errors.expired');\n case 'INVALID_CODE':\n return t('auth.mfa.errors.invalidCode');\n case 'TOO_MANY_ATTEMPTS':\n return t('auth.mfa.errors.tooManyAttempts');\n case 'INTERNAL_ERROR':\n return t('auth.mfa.errors.verificationFailed');\n default:\n return null;\n }\n },\n [t],\n );\n\n const mapAcceptInvitationReason = useCallback(\n (reason: AcceptInvitationErrorReason): string | null => {\n switch (reason) {\n case 'INVALID_TOKEN':\n return t('auth.acceptInvitation.errors.invalidToken');\n case 'TOKEN_EXPIRED':\n return t('auth.acceptInvitation.errors.expired');\n case 'ALREADY_ACCEPTED':\n return t('auth.acceptInvitation.errors.alreadyAccepted');\n case 'PASSWORD_MISMATCH':\n return t('auth.acceptInvitation.errors.passwordMismatch');\n case 'PASSWORD_POLICY_VIOLATION':\n return t('auth.acceptInvitation.errors.passwordPolicyViolation');\n case 'RATE_LIMITED':\n return t('auth.acceptInvitation.errors.rateLimited');\n case 'EMAIL_MISMATCH':\n return t('auth.acceptInvitation.errors.emailMismatch');\n case 'INTERNAL_ERROR':\n return t('auth.acceptInvitation.errors.default');\n default:\n return null;\n }\n },\n [t],\n );\n\n const beginAuthentication = useCallback(\n async (\n email: string,\n ): Promise<{ methods: AuthMethod[]; lockedUntil: string | null }> => {\n return new Promise((resolve, reject) => {\n commitBeginAuthenticationMutation({\n variables: { email },\n onCompleted: (response) => {\n const rawPayload = response.beginAuthentication;\n let payload = rawPayload;\n\n if (isMutationPayload(rawPayload)) {\n const outcome = resolveMutationOutcome(rawPayload, {\n defaultErrorMessage: defaultBeginAuthenticationErrorMessage,\n mapReason: mapBeginAuthenticationReason,\n });\n if (!outcome.ok) {\n const authError: AuthError = {\n message: outcome.message,\n };\n setError(authError);\n reject(authError);\n return;\n }\n payload = outcome.payload;\n }\n\n const methods = payload.methods.map((item) => {\n return item.method;\n });\n const locked = payload.lockedUntil ?? null;\n setAvailableMethods(methods);\n setLockedUntil(locked);\n resolve({ methods, lockedUntil: locked });\n },\n onError: () => {\n const authError: AuthError = {\n message: defaultBeginAuthenticationErrorMessage,\n };\n setError(authError);\n reject(authError);\n },\n });\n });\n },\n [\n commitBeginAuthenticationMutation,\n defaultBeginAuthenticationErrorMessage,\n isMutationPayload,\n mapBeginAuthenticationReason,\n ],\n );\n\n const login = useCallback(\n async (credentials: LoginCredentials): Promise<LoginStatus> => {\n setIsLoading(true);\n setError(null);\n setAuthState((prev) => {\n return {\n ...prev,\n emailHint: credentials.email,\n };\n });\n\n return new Promise((resolve, reject) => {\n commitLoginMutation({\n variables: {\n input: credentials,\n },\n onCompleted: (response) => {\n setIsLoading(false);\n const rawPayload = response.login;\n let authPayload: AuthPayload | null = null;\n\n if (isMutationPayload(rawPayload)) {\n const outcome = resolveMutationOutcome(rawPayload, {\n defaultErrorMessage: defaultLoginErrorMessage,\n mapReason: mapLoginReason,\n });\n if (!outcome.ok) {\n const authError: AuthError = {\n message: outcome.message,\n };\n setError(authError);\n reject(authError);\n return;\n }\n authPayload = rawPayload.payload ?? null;\n } else {\n authPayload = rawPayload;\n }\n\n if (authPayload == null) {\n const authError: AuthError = {\n message: defaultLoginErrorMessage,\n };\n setError(authError);\n reject(authError);\n return;\n }\n\n const status = updateAuthStateFromPayload(authPayload);\n if (status === 'success' || status === 'mfa-required') {\n resolve(status);\n return;\n }\n\n const authError: AuthError = {\n message: defaultLoginErrorMessage,\n };\n setError(authError);\n reject(authError);\n },\n onError: () => {\n setIsLoading(false);\n const authError: AuthError = {\n message: defaultLoginErrorMessage,\n };\n setError(authError);\n reject(authError);\n },\n });\n });\n },\n [\n commitLoginMutation,\n defaultLoginErrorMessage,\n isMutationPayload,\n mapLoginReason,\n updateAuthStateFromPayload,\n ],\n );\n\n const completeMfa = useCallback(\n async (credentials: TotpCredentials): Promise<void> => {\n const { challengeToken } = authState;\n if (challengeToken == null) {\n const authError: AuthError = {\n message: mfaInvalidChallengeMessage,\n };\n setError(authError);\n return Promise.reject(authError);\n }\n\n setIsLoading(true);\n setError(null);\n\n return new Promise((resolve, reject) => {\n commitCompleteMfaMutation({\n variables: {\n input: {\n challengeToken,\n code: credentials.code,\n },\n },\n onCompleted: (response) => {\n setIsLoading(false);\n const rawPayload = response.completeMfa;\n let authPayload: AuthPayload | null = null;\n\n if (isMutationPayload(rawPayload)) {\n const outcome = resolveMutationOutcome(rawPayload, {\n defaultErrorMessage: defaultMfaErrorMessage,\n mapReason: mapCompleteMfaReason,\n });\n if (!outcome.ok) {\n const authError: AuthError = {\n message: outcome.message,\n };\n setError(authError);\n reject(authError);\n return;\n }\n authPayload = rawPayload.payload ?? null;\n } else {\n authPayload = rawPayload;\n }\n\n if (authPayload == null) {\n const authError: AuthError = {\n message: defaultMfaErrorMessage,\n };\n setError(authError);\n reject(authError);\n return;\n }\n\n const status = updateAuthStateFromPayload(authPayload);\n if (status === 'success') {\n resolve();\n return;\n }\n\n const authError: AuthError = {\n message: defaultMfaErrorMessage,\n };\n setError(authError);\n reject(authError);\n },\n onError: () => {\n setIsLoading(false);\n const authError: AuthError = {\n message: defaultMfaErrorMessage,\n };\n setError(authError);\n reject(authError);\n },\n });\n });\n },\n [\n authState,\n commitCompleteMfaMutation,\n defaultMfaErrorMessage,\n isMutationPayload,\n mapCompleteMfaReason,\n mfaInvalidChallengeMessage,\n updateAuthStateFromPayload,\n ],\n );\n\n const loginWithPasskey = useCallback(\n async ({ email }: { email: string }): Promise<LoginStatus> => {\n if (typeof window === 'undefined') {\n const authError: AuthError = {\n message: passkeyNotAvailableMessage,\n };\n setError(authError);\n return Promise.reject(authError);\n }\n\n setIsLoading(true);\n setError(null);\n setAuthState((prev) => {\n return {\n ...prev,\n emailHint: email,\n };\n });\n\n return new Promise((resolve, reject) => {\n commitBeginPasskeyLoginMutation({\n variables: {\n email,\n },\n onCompleted: (response) => {\n const rawOptions = response.beginPasskeyLogin;\n let options = rawOptions;\n\n if (isMutationPayload(rawOptions)) {\n const outcome = resolveMutationOutcome(rawOptions, {\n defaultErrorMessage: defaultPasskeyErrorMessage,\n mapReason: mapBeginPasskeyLoginReason,\n });\n if (!outcome.ok) {\n setIsLoading(false);\n const authError: AuthError = {\n message: outcome.message,\n };\n setError(authError);\n reject(authError);\n return;\n }\n options = outcome.payload;\n }\n\n // TODO:! Fix this\n // eslint-disable-next-line no-void\n void (async () => {\n try {\n const assertion = (await navigator.credentials.get({\n publicKey: {\n allowCredentials: options.allowCredentials.map(\n (credentialId) => {\n return {\n id: base64UrlToBuffer(credentialId),\n type: 'public-key' as const,\n };\n },\n ),\n challenge: base64UrlToBuffer(options.challenge),\n rpId: options.rpId,\n userVerification: 'preferred',\n },\n })) as PublicKeyCredential | null;\n\n if (assertion == null) {\n throw new Error(\n 'No credential returned by the authenticator.',\n );\n }\n\n const assertionResponse =\n assertion.response as AuthenticatorAssertionResponse;\n const signCount = parseSignCount(\n assertionResponse.authenticatorData,\n );\n\n commitFinishPasskeyLoginMutation({\n variables: {\n input: {\n challenge: options.challenge,\n challengeToken: options.challengeToken,\n credentialId: assertion.id,\n signCount,\n userHandle:\n assertionResponse.userHandle != null\n ? bufferToBase64Url(assertionResponse.userHandle)\n : null,\n },\n },\n onCompleted: (finishResponse) => {\n setIsLoading(false);\n const rawPayload = finishResponse.finishPasskeyLogin;\n let authPayload: AuthPayload | null = null;\n\n if (isMutationPayload(rawPayload)) {\n const outcome = resolveMutationOutcome(rawPayload, {\n defaultErrorMessage: defaultPasskeyErrorMessage,\n mapReason: mapFinishPasskeyLoginReason,\n });\n if (!outcome.ok) {\n const authError: AuthError = {\n message: outcome.message,\n };\n setError(authError);\n reject(authError);\n return;\n }\n authPayload = rawPayload.payload ?? null;\n } else {\n authPayload = rawPayload;\n }\n\n if (authPayload == null) {\n const authError: AuthError = {\n message: defaultPasskeyErrorMessage,\n };\n setError(authError);\n reject(authError);\n return;\n }\n\n const status = updateAuthStateFromPayload(authPayload);\n if (status === 'success') {\n resolve(status);\n return;\n }\n const authError: AuthError = {\n message: defaultPasskeyErrorMessage,\n };\n setError(authError);\n reject(authError);\n },\n onError: () => {\n setIsLoading(false);\n const authError: AuthError = {\n message: defaultPasskeyErrorMessage,\n };\n setError(authError);\n reject(authError);\n },\n });\n } catch (credentialError) {\n setIsLoading(false);\n const authError: AuthError = {\n message:\n credentialError instanceof Error\n ? credentialError.message\n : 'Passkey login was cancelled.',\n };\n setError(authError);\n reject(authError);\n }\n })();\n },\n onError: () => {\n setIsLoading(false);\n const authError: AuthError = {\n message: defaultPasskeyErrorMessage,\n };\n setError(authError);\n reject(authError);\n },\n });\n });\n },\n [\n commitBeginPasskeyLoginMutation,\n commitFinishPasskeyLoginMutation,\n defaultPasskeyErrorMessage,\n isMutationPayload,\n mapBeginPasskeyLoginReason,\n mapFinishPasskeyLoginReason,\n passkeyNotAvailableMessage,\n updateAuthStateFromPayload,\n ],\n );\n\n const acceptInvitation = useCallback(\n async (\n credentials: AcceptInvitationCredentials,\n ): Promise<LoginStatus> => {\n if (commitAcceptInvitationMutation == null) {\n const authError: AuthError = {\n message: 'Invitation acceptance is not available.',\n };\n setError(authError);\n return Promise.reject(authError);\n }\n\n setIsLoading(true);\n setError(null);\n\n return new Promise((resolve, reject) => {\n commitAcceptInvitationMutation({\n variables: {\n input: {\n token: credentials.token,\n password: credentials.password,\n passwordConfirmation: credentials.passwordConfirmation,\n },\n },\n onCompleted: (response) => {\n setIsLoading(false);\n const rawPayload = response.acceptInvitation;\n let authPayload: AuthPayload | null = null;\n\n if (isMutationPayload(rawPayload)) {\n const outcome = resolveMutationOutcome(rawPayload, {\n defaultErrorMessage: defaultInvitationErrorMessage,\n mapReason: mapAcceptInvitationReason,\n });\n if (!outcome.ok) {\n const authError: AuthError = {\n message: outcome.message,\n };\n setError(authError);\n reject(authError);\n return;\n }\n authPayload = rawPayload.payload ?? null;\n } else {\n authPayload = rawPayload;\n }\n\n if (authPayload == null) {\n const authError: AuthError = {\n message: defaultInvitationErrorMessage,\n };\n setError(authError);\n reject(authError);\n return;\n }\n\n const status = updateAuthStateFromPayload(authPayload);\n if (status === 'success' || status === 'mfa-required') {\n resolve(status);\n return;\n }\n const authError: AuthError = {\n message: defaultInvitationErrorMessage,\n };\n setError(authError);\n reject(authError);\n },\n onError: () => {\n setIsLoading(false);\n const authError: AuthError = {\n message: defaultInvitationErrorMessage,\n };\n setError(authError);\n reject(authError);\n },\n });\n });\n },\n [\n commitAcceptInvitationMutation,\n defaultInvitationErrorMessage,\n isMutationPayload,\n mapAcceptInvitationReason,\n updateAuthStateFromPayload,\n ],\n );\n\n const logout = useCallback(async (): Promise<void> => {\n setIsLoading(true);\n\n return new Promise((resolve, reject) => {\n commitLogoutMutation({\n variables: {},\n onCompleted: (response) => {\n setIsLoading(false);\n const rawPayload = response.logout;\n let loggedOutValue: boolean | null = null;\n\n if (isMutationPayload(rawPayload)) {\n const outcome = resolveMutationOutcome(rawPayload, {\n defaultErrorMessage: defaultLogoutErrorMessage,\n });\n if (!outcome.ok) {\n const authError: AuthError = { message: outcome.message };\n setError(authError);\n reject(authError);\n return;\n }\n\n const loggedOutResult = requireField(\n rawPayload.payload?.loggedOut ?? null,\n defaultLogoutErrorMessage,\n );\n if (!loggedOutResult.ok) {\n const authError: AuthError = {\n message: loggedOutResult.message,\n };\n setError(authError);\n reject(authError);\n return;\n }\n loggedOutValue = loggedOutResult.value;\n } else {\n const loggedOutResult = requireField(\n rawPayload.loggedOut ?? null,\n defaultLogoutErrorMessage,\n );\n if (!loggedOutResult.ok) {\n const authError: AuthError = {\n message: loggedOutResult.message,\n };\n setError(authError);\n reject(authError);\n return;\n }\n loggedOutValue = loggedOutResult.value;\n }\n\n if (!loggedOutValue) {\n const authError: AuthError = {\n message: defaultLogoutErrorMessage,\n };\n setError(authError);\n reject(authError);\n return;\n }\n\n localStorage.removeItem('auth_token');\n localStorage.removeItem('remember_me');\n setUser(null);\n setAuthState(initialState);\n resetRelayStore();\n\n resolve();\n },\n onError: () => {\n setIsLoading(false);\n const authError: AuthError = {\n message: defaultLogoutErrorMessage,\n };\n setError(authError);\n resetRelayStore();\n\n reject(authError);\n },\n });\n });\n }, [commitLogoutMutation, defaultLogoutErrorMessage, isMutationPayload]);\n\n const combinedIsLoading =\n isLoading ||\n mutations.login.isInFlight ||\n mutations.logout.isInFlight ||\n mutations.completeMfa.isInFlight ||\n mutations.beginPasskeyLogin.isInFlight ||\n mutations.finishPasskeyLogin.isInFlight ||\n (mutations.acceptInvitation?.isInFlight ?? false) ||\n mutations.beginAuthentication.isInFlight;\n\n return {\n authMethod: authState.authMethod,\n challengeToken: authState.challengeToken,\n nextStep: authState.nextStep,\n mfaLevel: authState.mfaLevel,\n emailHint: authState.emailHint,\n login,\n loginWithPasskey,\n completeMfa,\n acceptInvitation,\n beginAuthentication,\n logout,\n reset,\n clearError,\n isLoading: combinedIsLoading,\n error,\n user,\n lockedUntil,\n availableMethods,\n };\n };\n};\n"],"mappings":";;;;;;AA0QA,IAAM,IAAe;CACnB,YAAY;CACZ,gBAAgB;CAChB,WAAW;CACX,UAAU;CACV,UAAU;CACX,EAEY,KAAiB,YACA;CAC1B,IAAM,EAAE,SAAM,GAAsB,EAC9B,CAAC,GAAW,KAAgB,EAAkB,GAAM,EACpD,CAAC,GAAO,KAAY,EAA2B,KAAK,EACpD,CAAC,GAAM,KAAW,EAAsB,KAAK,EAC7C,CAAC,GAAa,KAAkB,EAAwB,KAAK,EAC7D,CAAC,GAAkB,KAAuB,EAAuB,EAAE,CAAC,EACpE,CAAC,GAAW,KAAgB,EAAS,EAAa,EAElD,IAAsB,EAAU,MAAM,QACtC,IAAuB,EAAU,OAAO,QACxC,IAA4B,EAAU,YAAY,QAClD,IAAkC,EAAU,kBAAkB,QAC9D,IACJ,EAAU,mBAAmB,QACzB,IAAiC,EAAU,kBAAkB,QAC7D,IACJ,EAAU,oBAAoB,QAE1B,IAA2B,EAAE,iCAAiC,EAC9D,IAAyC,EAC7C,iCACD,EACK,IAA6B,EAAE,6BAA6B,EAC5D,IAAyB,EAAE,qCAAqC,EAChE,IAAgC,EACpC,uCACD,EACK,IAA6B,EAAE,mCAAmC,EAClE,IAA6B,EAAE,mCAAmC,EAClE,IAA4B,kBAE5B,IAAQ,QAAkB;AAK9B,EAJA,EAAS,KAAK,EACd,EAAQ,KAAK,EACb,EAAe,KAAK,EACpB,EAAoB,EAAE,CAAC,EACvB,EAAa,EAAa;IACzB,EAAE,CAAC,EAEA,IAAa,QAAkB;AACnC,IAAS,KAAK;IACb,EAAE,CAAC,EAEA,IAA6B,GAChC,MAAsC;EACrC,IAAM,IAAa,EAAQ,cAAc,MACnC,IAAiB,EAAQ,kBAAkB,MAC3C,IAAW,EAAQ,YAAY,MAC/B,IAAW,EAAQ,YAAY;AAuBrC,SArBA,GAAc,OACL;GACL,GAAG;GACH;GACA;GACA;GACA;GACD,EACD,EAEE,EAAQ,gBAAgB,QAAQ,KAAY,QAC9C,EAAQ,EACN,IAAI,EAAQ,aAAa,IAC1B,CAAC,EACK,aAGL,MAAa,UAAU,KAAkB,OACpC,iBAGF;IAET,EAAE,CACH,EAEK,IAAoB,GACvB,MAGG,OAAO,KAAU,cADjB,MAEC,YAAY,KAAS,YAAY,IAGtC,EAAE,CACH,EAEK,IAAiB,GACpB,MAA4C;AAC3C,UAAQ,GAAR;GACE,KAAK,sBACH,QAAO,EAAE,2CAA2C;GACtD,KAAK,iBACH,QAAO,EAAE,sCAAsC;GACjD,KAAK,eACH,QAAO,EAAE,oCAAoC;GAC/C,KAAK,iBACH,QAAO,EAAE,iCAAiC;GAC5C,QACE,QAAO;;IAGb,CAAC,EAAE,CACJ,EAEK,IAA+B,GAClC,MAA0D;AACzD,UAAQ,GAAR;GACE,KAAK,gBACH,QAAO,EAAE,qCAAqC;GAChD,KAAK,iBACH,QAAO,EAAE,iCAAiC;GAC5C,QACE,QAAO;;IAGb,CAAC,EAAE,CACJ,EAEK,IAA6B,GAChC,MAAwD;AACvD,UAAQ,GAAR;GACE,KAAK,gBACH,QAAO,EAAE,mCAAmC;GAC9C,KAAK,oBACH,QAAO,EAAE,+BAA+B;GAC1C,KAAK,wBACH,QAAO,EAAE,mCAAmC;GAC9C,KAAK,iBACH,QAAO,EAAE,6BAA6B;GACxC,QACE,QAAO;;IAGb,CAAC,EAAE,CACJ,EAEK,IAA8B,GACjC,MAAyD;AACxD,UAAQ,GAAR;GACE,KAAK,0BACH,QAAO,EAAE,uCAAuC;GAClD,KAAK,oBACH,QAAO,EAAE,uCAAuC;GAClD,KAAK,oBACH,QAAO,EAAE,uCAAuC;GAClD,KAAK,iBACH,QAAO,EAAE,6BAA6B;GACxC,QACE,QAAO;;IAGb,CAAC,EAAE,CACJ,EAEK,IAAuB,GAC1B,MAAkD;AACjD,UAAQ,GAAR;GACE,KAAK,0BACH,QAAO,EAAE,mCAAmC;GAC9C,KAAK,oBACH,QAAO,EAAE,0BAA0B;GACrC,KAAK,eACH,QAAO,EAAE,8BAA8B;GACzC,KAAK,oBACH,QAAO,EAAE,kCAAkC;GAC7C,KAAK,iBACH,QAAO,EAAE,qCAAqC;GAChD,QACE,QAAO;;IAGb,CAAC,EAAE,CACJ,EAEK,IAA4B,GAC/B,MAAuD;AACtD,UAAQ,GAAR;GACE,KAAK,gBACH,QAAO,EAAE,4CAA4C;GACvD,KAAK,gBACH,QAAO,EAAE,uCAAuC;GAClD,KAAK,mBACH,QAAO,EAAE,+CAA+C;GAC1D,KAAK,oBACH,QAAO,EAAE,gDAAgD;GAC3D,KAAK,4BACH,QAAO,EAAE,uDAAuD;GAClE,KAAK,eACH,QAAO,EAAE,2CAA2C;GACtD,KAAK,iBACH,QAAO,EAAE,6CAA6C;GACxD,KAAK,iBACH,QAAO,EAAE,uCAAuC;GAClD,QACE,QAAO;;IAGb,CAAC,EAAE,CACJ,EAEK,IAAsB,EAC1B,OACE,MAEO,IAAI,SAAS,GAAS,MAAW;AACtC,IAAkC;GAChC,WAAW,EAAE,UAAO;GACpB,cAAc,MAAa;IACzB,IAAM,IAAa,EAAS,qBACxB,IAAU;AAEd,QAAI,EAAkB,EAAW,EAAE;KACjC,IAAM,IAAU,EAAuB,GAAY;MACjD,qBAAqB;MACrB,WAAW;MACZ,CAAC;AACF,SAAI,CAAC,EAAQ,IAAI;MACf,IAAM,IAAuB,EAC3B,SAAS,EAAQ,SAClB;AAED,MADA,EAAS,EAAU,EACnB,EAAO,EAAU;AACjB;;AAEF,SAAU,EAAQ;;IAGpB,IAAM,IAAU,EAAQ,QAAQ,KAAK,MAC5B,EAAK,OACZ,EACI,IAAS,EAAQ,eAAe;AAGtC,IAFA,EAAoB,EAAQ,EAC5B,EAAe,EAAO,EACtB,EAAQ;KAAE;KAAS,aAAa;KAAQ,CAAC;;GAE3C,eAAe;IACb,IAAM,IAAuB,EAC3B,SAAS,GACV;AAED,IADA,EAAS,EAAU,EACnB,EAAO,EAAU;;GAEpB,CAAC;GACF,EAEJ;EACE;EACA;EACA;EACA;EACD,CACF,EAEK,IAAQ,EACZ,OAAO,OACL,EAAa,GAAK,EAClB,EAAS,KAAK,EACd,GAAc,OACL;EACL,GAAG;EACH,WAAW,EAAY;EACxB,EACD,EAEK,IAAI,SAAS,GAAS,MAAW;AACtC,IAAoB;GAClB,WAAW,EACT,OAAO,GACR;GACD,cAAc,MAAa;AACzB,MAAa,GAAM;IACnB,IAAM,IAAa,EAAS,OACxB,IAAkC;AAEtC,QAAI,EAAkB,EAAW,EAAE;KACjC,IAAM,IAAU,EAAuB,GAAY;MACjD,qBAAqB;MACrB,WAAW;MACZ,CAAC;AACF,SAAI,CAAC,EAAQ,IAAI;MACf,IAAM,IAAuB,EAC3B,SAAS,EAAQ,SAClB;AAED,MADA,EAAS,EAAU,EACnB,EAAO,EAAU;AACjB;;AAEF,SAAc,EAAW,WAAW;UAEpC,KAAc;AAGhB,QAAI,KAAe,MAAM;KACvB,IAAM,IAAuB,EAC3B,SAAS,GACV;AAED,KADA,EAAS,EAAU,EACnB,EAAO,EAAU;AACjB;;IAGF,IAAM,IAAS,EAA2B,EAAY;AACtD,QAAI,MAAW,aAAa,MAAW,gBAAgB;AACrD,OAAQ,EAAO;AACf;;IAGF,IAAM,IAAuB,EAC3B,SAAS,GACV;AAED,IADA,EAAS,EAAU,EACnB,EAAO,EAAU;;GAEnB,eAAe;AACb,MAAa,GAAM;IACnB,IAAM,IAAuB,EAC3B,SAAS,GACV;AAED,IADA,EAAS,EAAU,EACnB,EAAO,EAAU;;GAEpB,CAAC;GACF,GAEJ;EACE;EACA;EACA;EACA;EACA;EACD,CACF,EAEK,IAAc,EAClB,OAAO,MAAgD;EACrD,IAAM,EAAE,sBAAmB;AAC3B,MAAI,KAAkB,MAAM;GAC1B,IAAM,IAAuB,EAC3B,SAAS,GACV;AAED,UADA,EAAS,EAAU,EACZ,QAAQ,OAAO,EAAU;;AAMlC,SAHA,EAAa,GAAK,EAClB,EAAS,KAAK,EAEP,IAAI,SAAS,GAAS,MAAW;AACtC,KAA0B;IACxB,WAAW,EACT,OAAO;KACL;KACA,MAAM,EAAY;KACnB,EACF;IACD,cAAc,MAAa;AACzB,OAAa,GAAM;KACnB,IAAM,IAAa,EAAS,aACxB,IAAkC;AAEtC,SAAI,EAAkB,EAAW,EAAE;MACjC,IAAM,IAAU,EAAuB,GAAY;OACjD,qBAAqB;OACrB,WAAW;OACZ,CAAC;AACF,UAAI,CAAC,EAAQ,IAAI;OACf,IAAM,IAAuB,EAC3B,SAAS,EAAQ,SAClB;AAED,OADA,EAAS,EAAU,EACnB,EAAO,EAAU;AACjB;;AAEF,UAAc,EAAW,WAAW;WAEpC,KAAc;AAGhB,SAAI,KAAe,MAAM;MACvB,IAAM,IAAuB,EAC3B,SAAS,GACV;AAED,MADA,EAAS,EAAU,EACnB,EAAO,EAAU;AACjB;;AAIF,SADe,EAA2B,EAAY,KACvC,WAAW;AACxB,SAAS;AACT;;KAGF,IAAM,IAAuB,EAC3B,SAAS,GACV;AAED,KADA,EAAS,EAAU,EACnB,EAAO,EAAU;;IAEnB,eAAe;AACb,OAAa,GAAM;KACnB,IAAM,IAAuB,EAC3B,SAAS,GACV;AAED,KADA,EAAS,EAAU,EACnB,EAAO,EAAU;;IAEpB,CAAC;IACF;IAEJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CACF,EAEK,IAAmB,EACvB,OAAO,EAAE,eAAqD;AAC5D,MAAI,OAAO,SAAW,KAAa;GACjC,IAAM,IAAuB,EAC3B,SAAS,GACV;AAED,UADA,EAAS,EAAU,EACZ,QAAQ,OAAO,EAAU;;AAYlC,SATA,EAAa,GAAK,EAClB,EAAS,KAAK,EACd,GAAc,OACL;GACL,GAAG;GACH,WAAW;GACZ,EACD,EAEK,IAAI,SAAS,GAAS,MAAW;AACtC,KAAgC;IAC9B,WAAW,EACT,UACD;IACD,cAAc,MAAa;KACzB,IAAM,IAAa,EAAS,mBACxB,IAAU;AAEd,SAAI,EAAkB,EAAW,EAAE;MACjC,IAAM,IAAU,EAAuB,GAAY;OACjD,qBAAqB;OACrB,WAAW;OACZ,CAAC;AACF,UAAI,CAAC,EAAQ,IAAI;AACf,SAAa,GAAM;OACnB,IAAM,IAAuB,EAC3B,SAAS,EAAQ,SAClB;AAED,OADA,EAAS,EAAU,EACnB,EAAO,EAAU;AACjB;;AAEF,UAAU,EAAQ;;AAKpB,MAAM,YAAY;AAChB,UAAI;OACF,IAAM,IAAa,MAAM,UAAU,YAAY,IAAI,EACjD,WAAW;QACT,kBAAkB,EAAQ,iBAAiB,KACxC,OACQ;SACL,IAAI,EAAkB,EAAa;SACnC,MAAM;SACP,EAEJ;QACD,WAAW,EAAkB,EAAQ,UAAU;QAC/C,MAAM,EAAQ;QACd,kBAAkB;QACnB,EACF,CAAC;AAEF,WAAI,KAAa,KACf,OAAU,MACR,+CACD;OAGH,IAAM,IACJ,EAAU,UACN,IAAY,EAChB,EAAkB,kBACnB;AAED,SAAiC;QAC/B,WAAW,EACT,OAAO;SACL,WAAW,EAAQ;SACnB,gBAAgB,EAAQ;SACxB,cAAc,EAAU;SACxB;SACA,YACE,EAAkB,cAAc,OAE5B,OADA,EAAkB,EAAkB,WAAW;SAEtD,EACF;QACD,cAAc,MAAmB;AAC/B,WAAa,GAAM;SACnB,IAAM,IAAa,EAAe,oBAC9B,IAAkC;AAEtC,aAAI,EAAkB,EAAW,EAAE;UACjC,IAAM,IAAU,EAAuB,GAAY;WACjD,qBAAqB;WACrB,WAAW;WACZ,CAAC;AACF,cAAI,CAAC,EAAQ,IAAI;WACf,IAAM,IAAuB,EAC3B,SAAS,EAAQ,SAClB;AAED,WADA,EAAS,EAAU,EACnB,EAAO,EAAU;AACjB;;AAEF,cAAc,EAAW,WAAW;eAEpC,KAAc;AAGhB,aAAI,KAAe,MAAM;UACvB,IAAM,IAAuB,EAC3B,SAAS,GACV;AAED,UADA,EAAS,EAAU,EACnB,EAAO,EAAU;AACjB;;SAGF,IAAM,IAAS,EAA2B,EAAY;AACtD,aAAI,MAAW,WAAW;AACxB,YAAQ,EAAO;AACf;;SAEF,IAAM,IAAuB,EAC3B,SAAS,GACV;AAED,SADA,EAAS,EAAU,EACnB,EAAO,EAAU;;QAEnB,eAAe;AACb,WAAa,GAAM;SACnB,IAAM,IAAuB,EAC3B,SAAS,GACV;AAED,SADA,EAAS,EAAU,EACnB,EAAO,EAAU;;QAEpB,CAAC;eACK,GAAiB;AACxB,SAAa,GAAM;OACnB,IAAM,IAAuB,EAC3B,SACE,aAA2B,QACvB,EAAgB,UAChB,gCACP;AAED,OADA,EAAS,EAAU,EACnB,EAAO,EAAU;;SAEjB;;IAEN,eAAe;AACb,OAAa,GAAM;KACnB,IAAM,IAAuB,EAC3B,SAAS,GACV;AAED,KADA,EAAS,EAAU,EACnB,EAAO,EAAU;;IAEpB,CAAC;IACF;IAEJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CACF,EAEK,IAAmB,EACvB,OACE,MACyB;AACzB,MAAI,KAAkC,MAAM;GAC1C,IAAM,IAAuB,EAC3B,SAAS,2CACV;AAED,UADA,EAAS,EAAU,EACZ,QAAQ,OAAO,EAAU;;AAMlC,SAHA,EAAa,GAAK,EAClB,EAAS,KAAK,EAEP,IAAI,SAAS,GAAS,MAAW;AACtC,KAA+B;IAC7B,WAAW,EACT,OAAO;KACL,OAAO,EAAY;KACnB,UAAU,EAAY;KACtB,sBAAsB,EAAY;KACnC,EACF;IACD,cAAc,MAAa;AACzB,OAAa,GAAM;KACnB,IAAM,IAAa,EAAS,kBACxB,IAAkC;AAEtC,SAAI,EAAkB,EAAW,EAAE;MACjC,IAAM,IAAU,EAAuB,GAAY;OACjD,qBAAqB;OACrB,WAAW;OACZ,CAAC;AACF,UAAI,CAAC,EAAQ,IAAI;OACf,IAAM,IAAuB,EAC3B,SAAS,EAAQ,SAClB;AAED,OADA,EAAS,EAAU,EACnB,EAAO,EAAU;AACjB;;AAEF,UAAc,EAAW,WAAW;WAEpC,KAAc;AAGhB,SAAI,KAAe,MAAM;MACvB,IAAM,IAAuB,EAC3B,SAAS,GACV;AAED,MADA,EAAS,EAAU,EACnB,EAAO,EAAU;AACjB;;KAGF,IAAM,IAAS,EAA2B,EAAY;AACtD,SAAI,MAAW,aAAa,MAAW,gBAAgB;AACrD,QAAQ,EAAO;AACf;;KAEF,IAAM,IAAuB,EAC3B,SAAS,GACV;AAED,KADA,EAAS,EAAU,EACnB,EAAO,EAAU;;IAEnB,eAAe;AACb,OAAa,GAAM;KACnB,IAAM,IAAuB,EAC3B,SAAS,GACV;AAED,KADA,EAAS,EAAU,EACnB,EAAO,EAAU;;IAEpB,CAAC;IACF;IAEJ;EACE;EACA;EACA;EACA;EACA;EACD,CACF,EAEK,KAAS,EAAY,aACzB,EAAa,GAAK,EAEX,IAAI,SAAS,GAAS,MAAW;AACtC,IAAqB;GACnB,WAAW,EAAE;GACb,cAAc,MAAa;AACzB,MAAa,GAAM;IACnB,IAAM,IAAa,EAAS,QACxB,IAAiC;AAErC,QAAI,EAAkB,EAAW,EAAE;KACjC,IAAM,IAAU,EAAuB,GAAY,EACjD,qBAAqB,GACtB,CAAC;AACF,SAAI,CAAC,EAAQ,IAAI;MACf,IAAM,IAAuB,EAAE,SAAS,EAAQ,SAAS;AAEzD,MADA,EAAS,EAAU,EACnB,EAAO,EAAU;AACjB;;KAGF,IAAM,IAAkB,EACtB,EAAW,SAAS,aAAa,MACjC,EACD;AACD,SAAI,CAAC,EAAgB,IAAI;MACvB,IAAM,IAAuB,EAC3B,SAAS,EAAgB,SAC1B;AAED,MADA,EAAS,EAAU,EACnB,EAAO,EAAU;AACjB;;AAEF,SAAiB,EAAgB;WAC5B;KACL,IAAM,IAAkB,EACtB,EAAW,aAAa,MACxB,EACD;AACD,SAAI,CAAC,EAAgB,IAAI;MACvB,IAAM,IAAuB,EAC3B,SAAS,EAAgB,SAC1B;AAED,MADA,EAAS,EAAU,EACnB,EAAO,EAAU;AACjB;;AAEF,SAAiB,EAAgB;;AAGnC,QAAI,CAAC,GAAgB;KACnB,IAAM,IAAuB,EAC3B,SAAS,GACV;AAED,KADA,EAAS,EAAU,EACnB,EAAO,EAAU;AACjB;;AASF,IANA,aAAa,WAAW,aAAa,EACrC,aAAa,WAAW,cAAc,EACtC,EAAQ,KAAK,EACb,EAAa,EAAa,EAC1B,GAAiB,EAEjB,GAAS;;GAEX,eAAe;AACb,MAAa,GAAM;IACnB,IAAM,IAAuB,EAC3B,SAAS,GACV;AAID,IAHA,EAAS,EAAU,EACnB,GAAiB,EAEjB,EAAO,EAAU;;GAEpB,CAAC;GACF,GACD;EAAC;EAAsB;EAA2B;EAAkB,CAAC,EAElE,KACJ,KACA,EAAU,MAAM,cAChB,EAAU,OAAO,cACjB,EAAU,YAAY,cACtB,EAAU,kBAAkB,cAC5B,EAAU,mBAAmB,eAC5B,EAAU,kBAAkB,cAAc,OAC3C,EAAU,oBAAoB;AAEhC,QAAO;EACL,YAAY,EAAU;EACtB,gBAAgB,EAAU;EAC1B,UAAU,EAAU;EACpB,UAAU,EAAU;EACpB,WAAW,EAAU;EACrB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,WAAW;EACX;EACA;EACA;EACA;EACD"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { useBackofficeConfig as e } from "../provider/BackofficeConfigContext.js";
|
|
2
|
+
import { createUseAuth as t } from "./useAuth.js";
|
|
3
|
+
import { useRelayEnvironment as n } from "../relay/useRelayEnvironment.js";
|
|
4
|
+
import { useCallback as r, useMemo as i, useState as a } from "react";
|
|
5
|
+
import { commitMutation as o } from "react-relay";
|
|
6
|
+
//#region src/hooks/useBackofficeAuth.ts
|
|
7
|
+
var s = (e) => e instanceof Error ? e : /* @__PURE__ */ Error("Unable to load auth mutation."), c = (e) => {
|
|
8
|
+
let t = n(), [i, c] = a(0);
|
|
9
|
+
return {
|
|
10
|
+
commit: r((n) => {
|
|
11
|
+
c((e) => e + 1);
|
|
12
|
+
let r = () => {
|
|
13
|
+
c((e) => Math.max(0, e - 1));
|
|
14
|
+
};
|
|
15
|
+
e().then((e) => {
|
|
16
|
+
if (e == null) throw Error("Missing auth mutation config.");
|
|
17
|
+
o(t, {
|
|
18
|
+
mutation: e,
|
|
19
|
+
variables: n.variables,
|
|
20
|
+
onCompleted: (e, t) => {
|
|
21
|
+
r(), n.onCompleted?.(e, t ?? null);
|
|
22
|
+
},
|
|
23
|
+
onError: (e) => {
|
|
24
|
+
r(), n.onError?.(e);
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
}).catch((e) => {
|
|
28
|
+
r(), n.onError?.(s(e));
|
|
29
|
+
});
|
|
30
|
+
}, [e, t]),
|
|
31
|
+
isInFlight: i > 0
|
|
32
|
+
};
|
|
33
|
+
}, l = async (e, t, n) => e ?? (t == null ? null : n(await t.load()));
|
|
34
|
+
function u() {
|
|
35
|
+
let { auth: n } = e(), { commit: a, isInFlight: o } = c(r(async () => l(n.login.get()?.loginMutation, n.login, (e) => e.loginMutation), [n.login])), { commit: s, isInFlight: u } = c(r(async () => (await n.logout.load()).logoutMutation, [n.logout])), { commit: d, isInFlight: f } = c(r(async () => l(n.login.get()?.completeMfaMutation, n.completeMfa, (e) => e.completeMfaMutation), [n.completeMfa, n.login])), { commit: p, isInFlight: m } = c(r(async () => l(n.login.get()?.beginPasskeyLoginMutation, n.passkeyLogin, (e) => e.beginPasskeyLoginMutation), [n.login, n.passkeyLogin])), { commit: h, isInFlight: g } = c(r(async () => l(n.login.get()?.finishPasskeyLoginMutation, n.passkeyLogin, (e) => e.finishPasskeyLoginMutation), [n.login, n.passkeyLogin])), { commit: _, isInFlight: v } = c(r(async () => l(n.login.get()?.beginAuthenticationMutation, n.authentication, (e) => e.beginAuthenticationMutation), [n.authentication, n.login])), { commit: y, isInFlight: b } = c(r(async () => l(n.login.get()?.acceptInvitationMutation, n.acceptInvitation, (e) => e.acceptInvitationMutation), [n.acceptInvitation, n.login])), x = n.login.get()?.acceptInvitationMutation != null || n.acceptInvitation != null;
|
|
36
|
+
return i(() => {
|
|
37
|
+
let e;
|
|
38
|
+
return x && (e = {
|
|
39
|
+
commit: y,
|
|
40
|
+
isInFlight: b
|
|
41
|
+
}), t({
|
|
42
|
+
login: {
|
|
43
|
+
commit: a,
|
|
44
|
+
isInFlight: o
|
|
45
|
+
},
|
|
46
|
+
logout: {
|
|
47
|
+
commit: s,
|
|
48
|
+
isInFlight: u
|
|
49
|
+
},
|
|
50
|
+
completeMfa: {
|
|
51
|
+
commit: d,
|
|
52
|
+
isInFlight: f
|
|
53
|
+
},
|
|
54
|
+
beginPasskeyLogin: {
|
|
55
|
+
commit: p,
|
|
56
|
+
isInFlight: m
|
|
57
|
+
},
|
|
58
|
+
finishPasskeyLogin: {
|
|
59
|
+
commit: h,
|
|
60
|
+
isInFlight: g
|
|
61
|
+
},
|
|
62
|
+
beginAuthentication: {
|
|
63
|
+
commit: _,
|
|
64
|
+
isInFlight: v
|
|
65
|
+
},
|
|
66
|
+
acceptInvitation: e
|
|
67
|
+
});
|
|
68
|
+
}, [
|
|
69
|
+
y,
|
|
70
|
+
_,
|
|
71
|
+
p,
|
|
72
|
+
d,
|
|
73
|
+
h,
|
|
74
|
+
a,
|
|
75
|
+
s,
|
|
76
|
+
x,
|
|
77
|
+
b,
|
|
78
|
+
v,
|
|
79
|
+
m,
|
|
80
|
+
f,
|
|
81
|
+
g,
|
|
82
|
+
o,
|
|
83
|
+
u
|
|
84
|
+
])();
|
|
85
|
+
}
|
|
86
|
+
//#endregion
|
|
87
|
+
export { u as useBackofficeAuth };
|
|
88
|
+
|
|
89
|
+
//# sourceMappingURL=useBackofficeAuth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useBackofficeAuth.js","names":[],"sources":["../../../src/hooks/useBackofficeAuth.ts"],"sourcesContent":["import { useCallback, useMemo, useState } from 'react';\nimport { commitMutation } from 'react-relay';\nimport type { GraphQLTaggedNode, PayloadError } from 'relay-runtime';\n\nimport {\n createUseAuth,\n type UseAuthReturn,\n type AcceptInvitationResponse,\n type AcceptInvitationVariables,\n type BeginAuthenticationResponse,\n type BeginAuthenticationVariables,\n type BeginPasskeyLoginResponse,\n type BeginPasskeyLoginVariables,\n type CompleteMfaResponse,\n type CompleteMfaVariables,\n type FinishPasskeyLoginResponse,\n type FinishPasskeyLoginVariables,\n type LoginResponse,\n type LoginVariables,\n type LogoutResponse,\n type LogoutVariables,\n} from './useAuth.js';\nimport { useBackofficeConfig } from '../provider/BackofficeConfigContext.js';\nimport type { BackofficeLazyValue } from '../provider/lazyValue.js';\nimport { useRelayEnvironment } from '../relay/useRelayEnvironment.js';\n\ntype MutationCommitConfig<TVariables, TResponse> = {\n variables: TVariables;\n onCompleted?: (\n response: TResponse,\n errors: readonly PayloadError[] | null,\n ) => void;\n onError?: (error: Error) => void;\n};\n\nconst toMutationLoadError = (error: unknown): Error => {\n if (error instanceof Error) {\n return error;\n }\n return new Error('Unable to load auth mutation.');\n};\n\nconst useDeferredMutation = <TVariables extends object, TResponse>(\n loadMutation: () => Promise<GraphQLTaggedNode | null>,\n) => {\n const relayEnvironment = useRelayEnvironment();\n const [inFlightCount, setInFlightCount] = useState(0);\n\n const commit = useCallback(\n (config: MutationCommitConfig<TVariables, TResponse>) => {\n setInFlightCount((count) => {\n return count + 1;\n });\n\n const finish = () => {\n setInFlightCount((count) => {\n return Math.max(0, count - 1);\n });\n };\n\n loadMutation()\n .then((mutation) => {\n if (mutation == null) {\n throw new Error('Missing auth mutation config.');\n }\n\n commitMutation(relayEnvironment, {\n mutation,\n variables: config.variables,\n onCompleted: (response, errors) => {\n finish();\n config.onCompleted?.(response as TResponse, errors ?? null);\n },\n onError: (error) => {\n finish();\n config.onError?.(error);\n },\n });\n })\n .catch((error: unknown) => {\n finish();\n config.onError?.(toMutationLoadError(error));\n });\n },\n [loadMutation, relayEnvironment],\n );\n\n return {\n commit,\n isInFlight: inFlightCount > 0,\n };\n};\n\nconst loadOptionalMutation = async <TConfig>(\n eagerMutation: GraphQLTaggedNode | null | undefined,\n lazyConfig: BackofficeLazyValue<TConfig> | null | undefined,\n selectMutation: (config: TConfig) => GraphQLTaggedNode,\n): Promise<GraphQLTaggedNode | null> => {\n if (eagerMutation != null) {\n return eagerMutation;\n }\n if (lazyConfig == null) {\n return null;\n }\n const loadedConfig = await lazyConfig.load();\n return selectMutation(loadedConfig);\n};\n\n/**\n * Provides auth actions/state backed by Relay mutations from BackofficeProvider.\n */\nexport function useBackofficeAuth(): UseAuthReturn {\n const { auth: authConfig } = useBackofficeConfig();\n const { commit: commitLogin, isInFlight: isLoginInFlight } =\n useDeferredMutation<LoginVariables, LoginResponse>(\n useCallback(async () => {\n const loginConfig = authConfig.login.get();\n return loadOptionalMutation(\n loginConfig?.loginMutation,\n authConfig.login,\n (config) => {\n return config.loginMutation;\n },\n );\n }, [authConfig.login]),\n );\n const { commit: commitLogout, isInFlight: isLogoutInFlight } =\n useDeferredMutation<LogoutVariables, LogoutResponse>(\n useCallback(async () => {\n const logoutConfig = await authConfig.logout.load();\n return logoutConfig.logoutMutation;\n }, [authConfig.logout]),\n );\n const { commit: commitCompleteMfa, isInFlight: isCompleteMfaInFlight } =\n useDeferredMutation<CompleteMfaVariables, CompleteMfaResponse>(\n useCallback(async () => {\n return loadOptionalMutation(\n authConfig.login.get()?.completeMfaMutation,\n authConfig.completeMfa,\n (config) => {\n return config.completeMfaMutation;\n },\n );\n }, [authConfig.completeMfa, authConfig.login]),\n );\n const {\n commit: commitBeginPasskeyLogin,\n isInFlight: isBeginPasskeyLoginInFlight,\n } = useDeferredMutation<\n BeginPasskeyLoginVariables,\n BeginPasskeyLoginResponse\n >(\n useCallback(async () => {\n return loadOptionalMutation(\n authConfig.login.get()?.beginPasskeyLoginMutation,\n authConfig.passkeyLogin,\n (config) => {\n return config.beginPasskeyLoginMutation;\n },\n );\n }, [authConfig.login, authConfig.passkeyLogin]),\n );\n const {\n commit: commitFinishPasskeyLogin,\n isInFlight: isFinishPasskeyLoginInFlight,\n } = useDeferredMutation<\n FinishPasskeyLoginVariables,\n FinishPasskeyLoginResponse\n >(\n useCallback(async () => {\n return loadOptionalMutation(\n authConfig.login.get()?.finishPasskeyLoginMutation,\n authConfig.passkeyLogin,\n (config) => {\n return config.finishPasskeyLoginMutation;\n },\n );\n }, [authConfig.login, authConfig.passkeyLogin]),\n );\n const {\n commit: commitBeginAuthentication,\n isInFlight: isBeginAuthenticationInFlight,\n } = useDeferredMutation<\n BeginAuthenticationVariables,\n BeginAuthenticationResponse\n >(\n useCallback(async () => {\n return loadOptionalMutation(\n authConfig.login.get()?.beginAuthenticationMutation,\n authConfig.authentication,\n (config) => {\n return config.beginAuthenticationMutation;\n },\n );\n }, [authConfig.authentication, authConfig.login]),\n );\n const {\n commit: commitAcceptInvitation,\n isInFlight: isAcceptInvitationInFlight,\n } = useDeferredMutation<AcceptInvitationVariables, AcceptInvitationResponse>(\n useCallback(async () => {\n return loadOptionalMutation(\n authConfig.login.get()?.acceptInvitationMutation,\n authConfig.acceptInvitation,\n (config) => {\n return config.acceptInvitationMutation;\n },\n );\n }, [authConfig.acceptInvitation, authConfig.login]),\n );\n const hasAcceptInvitationMutation =\n authConfig.login.get()?.acceptInvitationMutation != null ||\n authConfig.acceptInvitation != null;\n\n const useAuthWithMutations = useMemo(() => {\n let acceptInvitation:\n | {\n commit: typeof commitAcceptInvitation;\n isInFlight: boolean;\n }\n | undefined;\n if (hasAcceptInvitationMutation) {\n acceptInvitation = {\n commit: commitAcceptInvitation,\n isInFlight: isAcceptInvitationInFlight,\n };\n }\n return createUseAuth({\n login: { commit: commitLogin, isInFlight: isLoginInFlight },\n logout: { commit: commitLogout, isInFlight: isLogoutInFlight },\n completeMfa: {\n commit: commitCompleteMfa,\n isInFlight: isCompleteMfaInFlight,\n },\n beginPasskeyLogin: {\n commit: commitBeginPasskeyLogin,\n isInFlight: isBeginPasskeyLoginInFlight,\n },\n finishPasskeyLogin: {\n commit: commitFinishPasskeyLogin,\n isInFlight: isFinishPasskeyLoginInFlight,\n },\n beginAuthentication: {\n commit: commitBeginAuthentication,\n isInFlight: isBeginAuthenticationInFlight,\n },\n acceptInvitation,\n });\n }, [\n commitAcceptInvitation,\n commitBeginAuthentication,\n commitBeginPasskeyLogin,\n commitCompleteMfa,\n commitFinishPasskeyLogin,\n commitLogin,\n commitLogout,\n hasAcceptInvitationMutation,\n isAcceptInvitationInFlight,\n isBeginAuthenticationInFlight,\n isBeginPasskeyLoginInFlight,\n isCompleteMfaInFlight,\n isFinishPasskeyLoginInFlight,\n isLoginInFlight,\n isLogoutInFlight,\n ]);\n\n return useAuthWithMutations();\n}\n"],"mappings":"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"}
|