@cccsaurora/howler-ui 2.19.0-dev.999 → 2.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/api/action/index.d.ts +5 -4
- package/api/action/index.js +8 -8
- package/api/analytic/index.d.ts +5 -5
- package/api/analytic/index.js +5 -6
- package/api/analytic/owner.d.ts +2 -1
- package/api/analytic/owner.js +2 -2
- package/api/dossier/index.d.ts +4 -3
- package/api/dossier/index.js +6 -6
- package/api/hit/index.d.ts +3 -2
- package/api/hit/index.js +4 -4
- package/api/hit/labels.d.ts +3 -2
- package/api/hit/labels.js +4 -4
- package/api/hit/overwrite.d.ts +2 -1
- package/api/hit/overwrite.js +2 -2
- package/api/hit/transition.d.ts +2 -1
- package/api/hit/transition.js +2 -2
- package/api/index.d.ts +10 -5
- package/api/index.js +18 -10
- package/api/overview/index.d.ts +4 -3
- package/api/overview/index.js +6 -6
- package/api/search/action.js +1 -1
- package/api/search/analytic.js +1 -1
- package/api/search/case.d.ts +4 -0
- package/api/search/case.js +8 -0
- package/api/search/count/hit.js +1 -1
- package/api/search/dossier.js +1 -1
- package/api/search/eql/hit.js +1 -1
- package/api/search/explain/hit.js +1 -1
- package/api/search/facet/hit.d.ts +1 -3
- package/api/search/facet/hit.js +1 -1
- package/api/search/facet/index.d.ts +3 -1
- package/api/search/grouped/hit.js +1 -1
- package/api/search/grouped/user.js +1 -1
- package/api/search/histogram/hit.js +1 -1
- package/api/search/hit.js +1 -1
- package/api/search/index.d.ts +3 -1
- package/api/search/index.js +2 -1
- package/api/search/overview.d.ts +2 -2
- package/api/search/overview.js +1 -1
- package/api/search/sigma/hit.js +1 -1
- package/api/search/template.js +1 -1
- package/api/search/user.js +1 -1
- package/api/search/view.js +1 -1
- package/api/socket/index.d.ts +3 -0
- package/api/socket/index.js +6 -0
- package/api/socket/viewers.d.ts +2 -0
- package/api/socket/viewers.js +8 -0
- package/api/socket/viewers.test.js +44 -0
- package/api/template/index.d.ts +4 -3
- package/api/template/index.js +6 -6
- package/api/user/index.d.ts +2 -1
- package/api/user/index.js +2 -2
- package/api/v2/case/index.d.ts +9 -0
- package/api/v2/case/index.js +21 -0
- package/api/v2/case/items.d.ts +9 -0
- package/api/v2/case/items.js +19 -0
- package/api/v2/case/rules.d.ts +6 -0
- package/api/v2/case/rules.js +18 -0
- package/api/v2/fuzzy.d.ts +17 -0
- package/api/v2/fuzzy.js +11 -0
- package/api/v2/index.d.ts +5 -0
- package/api/v2/index.js +7 -0
- package/api/v2/search/facet.d.ts +3 -0
- package/api/v2/search/facet.js +12 -0
- package/api/v2/search/index.d.ts +6 -0
- package/api/v2/search/index.js +24 -0
- package/api/view/index.d.ts +4 -3
- package/api/view/index.js +6 -6
- package/branding/AppBrand.d.ts +2 -2
- package/commons/components/app/AppSkeleton.js +1 -1
- package/commons/components/app/hooks/useAppConfigs.d.ts +2 -2
- package/commons/components/app/hooks/useAppSitemap.d.ts +5 -2
- package/commons/components/breadcrumbs/BreadcrumbIcon.js +1 -1
- package/commons/components/breadcrumbs/Breadcrumbs.d.ts +3 -2
- package/commons/components/display/AppToc.d.ts +2 -1
- package/commons/components/display/AppToc.js +1 -1
- package/commons/components/display/hooks/useAppColor.d.ts +1 -1
- package/commons/components/leftnav/LeftNavDrawer.d.ts +2 -1
- package/commons/components/leftnav/LeftNavDrawer.js +1 -1
- package/commons/components/leftnav/LeftNavGroup.d.ts +2 -1
- package/commons/components/leftnav/LeftNavItem.d.ts +2 -1
- package/commons/components/leftnav/LeftNavItem.js +1 -1
- package/commons/components/notification/Notification.js +1 -1
- package/commons/components/notification/elements/NotificationHeader.js +1 -1
- package/commons/components/notification/elements/NotificationItems.js +1 -1
- package/commons/components/notification/elements/item/NotificationItemAuthor.js +1 -1
- package/commons/components/pages/PageCenter.d.ts +2 -1
- package/commons/components/pages/PageContent.d.ts +2 -1
- package/commons/components/pages/PageFullScreen.d.ts +2 -1
- package/commons/components/search/AppSearch.js +1 -1
- package/commons/components/search/AppSearchInput.d.ts +2 -1
- package/commons/components/search/AppSearchResult.d.ts +2 -1
- package/commons/components/topnav/AppBar.d.ts +2 -1
- package/commons/components/topnav/AppName.d.ts +3 -2
- package/commons/components/topnav/AppSwitcher.d.ts +2 -1
- package/commons/components/topnav/ThemeSelection.d.ts +2 -1
- package/commons/components/topnav/ThemeSelection.js +1 -1
- package/commons/components/topnav/UserProfile.d.ts +2 -1
- package/commons/components/topnav/UserProfile.js +1 -1
- package/commons/components/utils/hooks/useThemeBuilder.d.ts +1 -1
- package/components/app/App.js +52 -12
- package/components/app/drawers/ApiKeyDrawer.js +1 -1
- package/components/app/hooks/useMatchers.d.ts +1 -1
- package/components/app/hooks/useMatchers.js +27 -15
- package/components/app/hooks/useMatchers.test.js +22 -22
- package/components/app/hooks/useTitle.js +6 -6
- package/components/app/providers/AnalyticProvider.js +1 -1
- package/components/app/providers/AvatarProvider.js +1 -1
- package/components/app/providers/FavouritesProvider.js +3 -3
- package/components/app/providers/GridColumnsProvider.d.ts +52 -0
- package/components/app/providers/GridColumnsProvider.js +177 -0
- package/components/app/providers/GridColumnsProvider.test.js +255 -0
- package/components/app/providers/ModalProvider.d.ts +1 -0
- package/components/app/providers/OverviewProvider.js +1 -1
- package/components/app/providers/ParameterProvider.d.ts +25 -3
- package/components/app/providers/ParameterProvider.js +163 -226
- package/components/app/providers/ParameterProvider.test.js +358 -94
- package/components/app/providers/RecordProvider.d.ts +23 -0
- package/components/app/providers/{HitProvider.js → RecordProvider.js} +47 -43
- package/components/app/providers/{HitSearchProvider.d.ts → RecordSearchProvider.d.ts} +6 -6
- package/components/app/providers/{HitSearchProvider.js → RecordSearchProvider.js} +24 -37
- package/components/app/providers/{HitSearchProvider.test.js → RecordSearchProvider.test.js} +52 -71
- package/components/app/providers/SearchResponseProvider.d.ts +21 -0
- package/components/app/providers/SearchResponseProvider.js +81 -0
- package/components/app/providers/SearchResponseProvider.test.d.ts +1 -0
- package/components/app/providers/SearchResponseProvider.test.js +406 -0
- package/components/app/providers/SocketProvider.d.ts +11 -2
- package/components/app/providers/SocketProvider.js +21 -8
- package/components/app/providers/UserListProvider.js +28 -8
- package/components/app/providers/UserListProvider.test.d.ts +1 -0
- package/components/app/providers/UserListProvider.test.js +150 -0
- package/components/app/providers/ViewProvider.js +3 -3
- package/components/app/providers/ViewProvider.test.js +4 -1
- package/components/elements/Comment.js +2 -2
- package/components/elements/ContextMenu.d.ts +56 -0
- package/components/elements/ContextMenu.js +113 -0
- package/components/elements/ContextMenu.test.d.ts +1 -0
- package/components/elements/ContextMenu.test.js +215 -0
- package/components/elements/EditRow.js +4 -4
- package/components/{routes/overviews/OverviewEditor.js → elements/MarkdownEditor.js} +3 -3
- package/components/elements/ObjectDetails.d.ts +6 -0
- package/components/elements/{hit/HitDetails.js → ObjectDetails.js} +17 -17
- package/components/elements/PluginChip.d.ts +1 -1
- package/components/elements/PluginChip.js +0 -1
- package/components/elements/PluginTypography.d.ts +2 -1
- package/components/elements/PluginTypography.js +3 -2
- package/components/elements/UserList.d.ts +5 -2
- package/components/elements/UserList.js +34 -17
- package/components/elements/UserList.test.d.ts +1 -0
- package/components/elements/UserList.test.js +122 -0
- package/components/elements/addons/buttons/CustomIconButton.test.d.ts +1 -0
- package/components/elements/addons/buttons/CustomIconButton.test.js +81 -0
- package/components/elements/addons/buttons/index.d.ts +1 -1
- package/components/elements/addons/layout/FlexOne.d.ts +3 -2
- package/components/elements/addons/layout/FlexPort.d.ts +2 -1
- package/components/elements/addons/layout/FlexVertical.d.ts +2 -1
- package/components/elements/addons/layout/FlexVertical.test.d.ts +1 -0
- package/components/elements/addons/layout/FlexVertical.test.js +32 -0
- package/components/elements/addons/layout/vsbox/VSBoxContent.test.d.ts +1 -0
- package/components/elements/addons/layout/vsbox/VSBoxContent.test.js +26 -0
- package/components/elements/addons/layout/vsbox/VSBoxElement.d.ts +2 -1
- package/components/elements/addons/lists/TuiList.d.ts +2 -1
- package/components/elements/addons/lists/TuiListBase.d.ts +2 -1
- package/components/elements/addons/lists/TuiListElement.d.ts +3 -2
- package/components/elements/addons/lists/TuiListElement.js +0 -1
- package/components/elements/addons/lists/TuiListMenu.d.ts +2 -1
- package/components/elements/addons/lists/TuiListMenu.js +1 -1
- package/components/elements/addons/lists/table/TuiTableHeader.d.ts +3 -2
- package/components/elements/addons/lists/table/index.d.ts +1 -1
- package/components/elements/addons/search/SearchPagination.d.ts +2 -1
- package/components/elements/addons/search/SearchPagination.js +4 -4
- package/components/elements/addons/search/SearchTotal.js +1 -1
- package/components/elements/addons/search/SearchTotal.test.js +5 -3
- package/components/elements/addons/search/phrase/Phrase.js +1 -1
- package/components/elements/addons/search/phrase/WordLexer.test.d.ts +1 -0
- package/components/elements/addons/search/phrase/WordLexer.test.js +55 -0
- package/components/elements/case/CaseCard.d.ts +12 -0
- package/components/elements/case/CaseCard.js +43 -0
- package/components/elements/case/CasePreview.d.ts +6 -0
- package/components/elements/case/CasePreview.js +17 -0
- package/components/elements/case/StatusIcon.d.ts +5 -0
- package/components/elements/case/StatusIcon.js +13 -0
- package/components/elements/display/ActionButton.js +1 -1
- package/components/elements/display/ChipPopper.d.ts +1 -1
- package/components/elements/display/ChipPopper.js +7 -6
- package/components/elements/display/Classification.js +1 -1
- package/components/elements/display/ClassificationChip.d.ts +14 -0
- package/components/elements/display/ClassificationChip.js +36 -0
- package/components/elements/display/HandlebarsMarkdown.js +38 -3
- package/components/elements/display/HowlerAvatar.js +2 -2
- package/components/elements/display/HowlerCard.js +1 -1
- package/components/elements/display/HowlerCard.test.js +5 -9
- package/components/elements/display/Image.js +3 -3
- package/components/elements/display/ItemManager.d.ts +2 -2
- package/components/elements/display/ItemManager.js +3 -3
- package/components/elements/display/Markdown.js +2 -2
- package/components/elements/display/Modal.js +2 -0
- package/components/elements/display/QueryResultText.d.ts +1 -0
- package/components/elements/display/QueryResultText.js +2 -2
- package/components/elements/display/handlebars/helpers.d.ts +4 -0
- package/components/elements/display/handlebars/helpers.js +134 -35
- package/components/elements/display/json/JSONViewer.js +2 -2
- package/components/elements/display/modals/RationaleModal.js +2 -2
- package/components/elements/display/modals/RationaleModal.test.js +1 -1
- package/components/elements/event/EventCard.d.ts +6 -0
- package/components/elements/event/EventCard.js +22 -0
- package/components/elements/event/EventPreview.d.ts +6 -0
- package/components/elements/event/EventPreview.js +12 -0
- package/components/elements/hit/HitActions.d.ts +1 -1
- package/components/elements/hit/HitActions.js +5 -5
- package/components/elements/hit/HitBanner.d.ts +1 -0
- package/components/elements/hit/HitBanner.js +32 -50
- package/components/elements/hit/HitCard.d.ts +4 -0
- package/components/elements/hit/HitCard.js +7 -7
- package/components/elements/hit/HitLabels.js +3 -3
- package/components/elements/hit/HitLabels.test.d.ts +1 -0
- package/components/elements/hit/HitLabels.test.js +77 -0
- package/components/elements/hit/HitLinks.d.ts +5 -4
- package/components/elements/hit/HitLinks.js +28 -10
- package/components/elements/hit/HitNotebooks.js +32 -31
- package/components/elements/hit/HitOutline.d.ts +1 -0
- package/components/elements/hit/HitOutline.js +4 -4
- package/components/elements/hit/HitOverview.js +2 -2
- package/components/elements/hit/{HitQuickSearch.d.ts → HitPreview.d.ts} +3 -3
- package/components/elements/hit/{HitQuickSearch.js → HitPreview.js} +11 -5
- package/components/elements/hit/HitSummary.d.ts +2 -1
- package/components/elements/hit/HitSummary.js +8 -7
- package/components/elements/hit/NotebookTooltip.d.ts +3 -0
- package/components/elements/hit/NotebookTooltip.js +8 -0
- package/components/elements/hit/PivotTooltip.d.ts +7 -0
- package/components/elements/hit/PivotTooltip.js +9 -0
- package/components/elements/hit/RelatedLinkTooltip.d.ts +6 -0
- package/components/elements/hit/RelatedLinkTooltip.js +8 -0
- package/components/elements/hit/ResolvePivotUrl.d.ts +4 -0
- package/components/elements/hit/ResolvePivotUrl.js +22 -0
- package/components/elements/hit/actions/ButtonActions.js +1 -3
- package/components/elements/hit/aggregate/HitGraph.js +9 -9
- package/components/elements/hit/elements/AnalyticLink.d.ts +9 -0
- package/components/elements/hit/elements/AnalyticLink.js +22 -0
- package/components/elements/hit/elements/{HitUsers.d.ts → Assigned.d.ts} +2 -4
- package/components/elements/hit/elements/Assigned.js +35 -0
- package/components/elements/hit/elements/Assigned.test.d.ts +1 -0
- package/components/elements/hit/elements/Assigned.test.js +65 -0
- package/components/{routes/hits/search → elements/hit}/grid/AddColumnModal.js +6 -5
- package/components/{routes/hits/search → elements/hit}/grid/ColumnHeader.d.ts +2 -1
- package/components/{routes/hits/search → elements/hit}/grid/ColumnHeader.js +3 -3
- package/components/{routes/hits/search → elements/hit}/grid/EnhancedCell.d.ts +2 -1
- package/components/{routes/hits/search → elements/hit}/grid/EnhancedCell.js +2 -2
- package/components/{routes/hits/search/grid/HitRow.d.ts → elements/hit/grid/RecordRow.d.ts} +4 -3
- package/components/{routes/hits/search/grid/HitRow.js → elements/hit/grid/RecordRow.js} +12 -10
- package/components/elements/hit/grid/RecordTable.d.ts +13 -0
- package/components/elements/hit/grid/RecordTable.js +84 -0
- package/components/elements/hit/outlines/DefaultOutline.js +2 -4
- package/components/elements/hit/related/PivotLink.d.ts +3 -0
- package/components/elements/hit/related/PivotLink.js +6 -3
- package/components/elements/hit/related/RelatedLink.d.ts +1 -0
- package/components/elements/hit/related/RelatedLink.js +18 -15
- package/components/elements/hit/related/RelatedRecords.js +63 -0
- package/components/elements/{hit/HitComments.d.ts → record/RecordComments.d.ts} +5 -4
- package/components/elements/{hit/HitComments.js → record/RecordComments.js} +33 -34
- package/components/{routes/hits/search/HitContextMenu.d.ts → elements/record/RecordContextMenu.d.ts} +3 -3
- package/components/elements/record/RecordContextMenu.js +268 -0
- package/components/elements/record/RecordContextMenu.test.d.ts +1 -0
- package/components/{routes/hits/search/HitContextMenu.test.js → elements/record/RecordContextMenu.test.js} +143 -49
- package/components/elements/record/RecordRelated.d.ts +7 -0
- package/components/elements/record/RecordRelated.js +34 -0
- package/components/elements/{hit/HitWorklog.d.ts → record/RecordWorklog.d.ts} +4 -3
- package/components/elements/{hit/HitWorklog.js → record/RecordWorklog.js} +16 -14
- package/components/elements/search/FuzzySearchBar.d.ts +7 -0
- package/components/elements/search/FuzzySearchBar.js +33 -0
- package/components/elements/search/FuzzySearchBar.test.d.ts +1 -0
- package/components/elements/search/FuzzySearchBar.test.js +87 -0
- package/components/elements/view/LayoutToggle.d.ts +8 -0
- package/components/elements/view/LayoutToggle.js +12 -0
- package/components/elements/view/ViewTitle.d.ts +4 -0
- package/components/elements/view/ViewTitle.js +13 -3
- package/components/hooks/useHitActions.d.ts +1 -1
- package/components/hooks/useHitActions.js +5 -5
- package/components/hooks/useLocalStorage.js +1 -1
- package/components/hooks/useLocalStorageItem.test.js +2 -2
- package/components/hooks/useMyApi.d.ts +1 -1
- package/components/hooks/useMyChart.d.ts +23 -23
- package/components/hooks/useMyPreferences.js +10 -1
- package/components/hooks/useMySearch.js +2 -2
- package/components/hooks/useMySitemap.js +3 -1
- package/components/hooks/useMySnackbar.js +1 -1
- package/components/hooks/useMyTheme.js +9 -2
- package/components/hooks/useMyTheme.test.d.ts +1 -0
- package/components/hooks/useMyTheme.test.js +35 -0
- package/components/hooks/useMyUserFunctions.d.ts +21 -21
- package/components/hooks/{useHitSelection.d.ts → useRecordSelection.d.ts} +2 -2
- package/components/hooks/{useHitSelection.js → useRecordSelection.js} +12 -33
- package/components/hooks/useRelatedRecords.d.ts +13 -0
- package/components/hooks/useRelatedRecords.js +32 -0
- package/components/logins/Login.js +1 -1
- package/components/logins/auth/OAuthLogin.js +1 -1
- package/components/logins/hooks/useLogin.js +2 -2
- package/components/routes/ErrorBoundary.d.ts +2 -13
- package/components/routes/ErrorBoundary.js +12 -1
- package/components/routes/ErrorBoundary.test.js +27 -4
- package/components/routes/action/edit/ActionEditor.js +6 -6
- package/components/routes/action/shared/OperationEntry.js +1 -1
- package/components/routes/action/shared/OperationStep.js +1 -1
- package/components/routes/action/useMyActionFunctions.js +6 -3
- package/components/routes/action/view/ActionDetails.js +9 -3
- package/components/routes/action/view/ActionSearch.js +25 -19
- package/components/routes/admin/users/UserEditor.js +1 -1
- package/components/routes/admin/users/UserSearch.js +5 -5
- package/components/routes/advanced/QueryBuilder.js +6 -29
- package/components/routes/advanced/QueryEditor.js +3 -3
- package/components/routes/advanced/eqlTokenProvider.test.d.ts +1 -0
- package/components/routes/advanced/eqlTokenProvider.test.js +34 -0
- package/components/routes/advanced/historyCompletionProvider.js +3 -3
- package/components/routes/advanced/luceneCompletionProvider.js +1 -1
- package/components/routes/advanced/luceneTokenProvider.test.d.ts +1 -0
- package/components/routes/advanced/luceneTokenProvider.test.js +34 -0
- package/components/routes/analytics/AnalyticComments.js +3 -5
- package/components/routes/analytics/AnalyticDetails.js +8 -56
- package/components/routes/analytics/AnalyticHitComments.js +1 -1
- package/components/routes/analytics/AnalyticHitComments.test.js +1 -1
- package/components/routes/analytics/AnalyticOverview.js +2 -2
- package/components/routes/analytics/AnalyticOverviews.js +1 -1
- package/components/routes/analytics/AnalyticSearch.js +16 -25
- package/components/routes/analytics/AnalyticTemplates.js +1 -1
- package/components/routes/analytics/TriageSettings.js +2 -2
- package/components/routes/analytics/widgets/Assessment.js +1 -1
- package/components/routes/analytics/widgets/Created.js +1 -1
- package/components/routes/analytics/widgets/Escalation.js +1 -1
- package/components/routes/analytics/widgets/Stacked.js +1 -1
- package/components/routes/cases/CaseViewer.d.ts +2 -0
- package/components/routes/cases/CaseViewer.js +44 -0
- package/components/routes/cases/CaseViewer.test.d.ts +1 -0
- package/components/routes/cases/CaseViewer.test.js +156 -0
- package/components/routes/cases/Cases.d.ts +2 -0
- package/components/routes/cases/Cases.js +140 -0
- package/components/routes/cases/constants.d.ts +6 -0
- package/components/routes/cases/constants.js +6 -0
- package/components/routes/cases/detail/AlertPanel.d.ts +6 -0
- package/components/routes/cases/detail/AlertPanel.js +34 -0
- package/components/routes/cases/detail/AlertPanel.test.d.ts +1 -0
- package/components/routes/cases/detail/AlertPanel.test.js +107 -0
- package/components/routes/cases/detail/CaseDashboard.d.ts +7 -0
- package/components/routes/cases/detail/CaseDashboard.js +66 -0
- package/components/routes/cases/detail/CaseDashboard.test.d.ts +1 -0
- package/components/routes/cases/detail/CaseDashboard.test.js +218 -0
- package/components/routes/cases/detail/CaseDetails.d.ts +6 -0
- package/components/routes/cases/detail/CaseDetails.js +79 -0
- package/components/routes/cases/detail/CaseDetails.test.d.ts +1 -0
- package/components/routes/cases/detail/CaseDetails.test.js +145 -0
- package/components/routes/cases/detail/CaseObservables.d.ts +6 -0
- package/components/routes/cases/detail/CaseObservables.js +127 -0
- package/components/routes/cases/detail/CaseObservables.test.d.ts +1 -0
- package/components/routes/cases/detail/CaseObservables.test.js +167 -0
- package/components/routes/cases/detail/CaseOverview.d.ts +7 -0
- package/components/routes/cases/detail/CaseOverview.js +40 -0
- package/components/routes/cases/detail/CaseRules.d.ts +7 -0
- package/components/routes/cases/detail/CaseRules.js +55 -0
- package/components/routes/cases/detail/CaseRules.test.d.ts +1 -0
- package/components/routes/cases/detail/CaseRules.test.js +238 -0
- package/components/routes/cases/detail/CaseSearch.d.ts +3 -0
- package/components/routes/cases/detail/CaseSearch.js +78 -0
- package/components/routes/cases/detail/CaseSearch.test.d.ts +1 -0
- package/components/routes/cases/detail/CaseSearch.test.js +154 -0
- package/components/routes/cases/detail/CaseSidebar.d.ts +8 -0
- package/components/routes/cases/detail/CaseSidebar.js +147 -0
- package/components/routes/cases/detail/CaseSidebar.test.d.ts +1 -0
- package/components/routes/cases/detail/CaseSidebar.test.js +155 -0
- package/components/routes/cases/detail/CaseTask.d.ts +14 -0
- package/components/routes/cases/detail/CaseTask.js +71 -0
- package/components/routes/cases/detail/CaseTask.test.d.ts +1 -0
- package/components/routes/cases/detail/CaseTask.test.js +143 -0
- package/components/routes/cases/detail/CaseTimeline.d.ts +12 -0
- package/components/routes/cases/detail/CaseTimeline.js +120 -0
- package/components/routes/cases/detail/CaseTimeline.test.d.ts +1 -0
- package/components/routes/cases/detail/CaseTimeline.test.js +319 -0
- package/components/routes/cases/detail/CreateRuleDialog.d.ts +9 -0
- package/components/routes/cases/detail/CreateRuleDialog.js +145 -0
- package/components/routes/cases/detail/CreateRuleDialog.test.d.ts +1 -0
- package/components/routes/cases/detail/CreateRuleDialog.test.js +218 -0
- package/components/routes/cases/detail/ItemPage.d.ts +6 -0
- package/components/routes/cases/detail/ItemPage.js +100 -0
- package/components/routes/cases/detail/ItemPage.test.d.ts +1 -0
- package/components/routes/cases/detail/ItemPage.test.js +238 -0
- package/components/routes/cases/detail/MarkdownPage.d.ts +8 -0
- package/components/routes/cases/detail/MarkdownPage.js +63 -0
- package/components/routes/cases/detail/MarkdownPage.test.d.ts +1 -0
- package/components/routes/cases/detail/MarkdownPage.test.js +116 -0
- package/components/routes/cases/detail/RelatedCasePanel.d.ts +6 -0
- package/components/routes/cases/detail/RelatedCasePanel.js +34 -0
- package/components/routes/cases/detail/RelatedCasePanel.test.d.ts +1 -0
- package/components/routes/cases/detail/RelatedCasePanel.test.js +115 -0
- package/components/routes/cases/detail/TaskPanel.d.ts +7 -0
- package/components/routes/cases/detail/TaskPanel.js +95 -0
- package/components/routes/cases/detail/TaskPanel.test.d.ts +1 -0
- package/components/routes/cases/detail/TaskPanel.test.js +145 -0
- package/components/routes/cases/detail/aggregates/CaseAggregate.d.ts +11 -0
- package/components/routes/cases/detail/aggregates/CaseAggregate.js +24 -0
- package/components/routes/cases/detail/aggregates/SourceAggregate.d.ts +6 -0
- package/components/routes/cases/detail/aggregates/SourceAggregate.js +26 -0
- package/components/routes/cases/detail/observables/Observable.d.ts +8 -0
- package/components/routes/cases/detail/observables/Observable.js +14 -0
- package/components/routes/cases/detail/observables/Observable.test.d.ts +1 -0
- package/components/routes/cases/detail/observables/Observable.test.js +80 -0
- package/components/routes/cases/detail/observables/ObservableTable.d.ts +7 -0
- package/components/routes/cases/detail/observables/ObservableTable.js +61 -0
- package/components/routes/cases/detail/observables/ObservableTable.test.d.ts +1 -0
- package/components/routes/cases/detail/observables/ObservableTable.test.js +97 -0
- package/components/routes/cases/detail/sidebar/CaseFolder.d.ts +22 -0
- package/components/routes/cases/detail/sidebar/CaseFolder.js +105 -0
- package/components/routes/cases/detail/sidebar/CaseFolder.test.d.ts +1 -0
- package/components/routes/cases/detail/sidebar/CaseFolder.test.js +98 -0
- package/components/routes/cases/detail/sidebar/CaseFolderContextMenu.d.ts +32 -0
- package/components/routes/cases/detail/sidebar/CaseFolderContextMenu.js +99 -0
- package/components/routes/cases/detail/sidebar/CaseFolderContextMenu.test.d.ts +1 -0
- package/components/routes/cases/detail/sidebar/CaseFolderContextMenu.test.js +117 -0
- package/components/routes/cases/detail/sidebar/FolderEntry.d.ts +25 -0
- package/components/routes/cases/detail/sidebar/FolderEntry.js +89 -0
- package/components/routes/cases/detail/sidebar/FolderEntry.test.d.ts +1 -0
- package/components/routes/cases/detail/sidebar/FolderEntry.test.js +81 -0
- package/components/routes/cases/detail/sidebar/RootDropZone.d.ts +5 -0
- package/components/routes/cases/detail/sidebar/RootDropZone.js +33 -0
- package/components/routes/cases/detail/sidebar/types.d.ts +9 -0
- package/components/routes/cases/detail/sidebar/utils.d.ts +10 -0
- package/components/routes/cases/detail/sidebar/utils.js +51 -0
- package/components/routes/cases/detail/sidebar/utils.test.d.ts +1 -0
- package/components/routes/cases/detail/sidebar/utils.test.js +82 -0
- package/components/routes/cases/detail/types.d.ts +22 -0
- package/components/routes/cases/detail/utils.d.ts +28 -0
- package/components/routes/cases/detail/utils.js +117 -0
- package/components/routes/cases/detail/utils.test.d.ts +1 -0
- package/components/routes/cases/detail/utils.test.js +166 -0
- package/components/routes/cases/hooks/useCase.d.ts +13 -0
- package/components/routes/cases/hooks/useCase.js +67 -0
- package/components/routes/cases/hooks/useCase.test.d.ts +1 -0
- package/components/routes/cases/hooks/useCase.test.js +170 -0
- package/components/routes/cases/modals/AddRecordToCaseModal.d.ts +7 -0
- package/components/routes/cases/modals/AddRecordToCaseModal.js +57 -0
- package/components/routes/cases/modals/AddRecordToCaseModal.test.d.ts +1 -0
- package/components/routes/cases/modals/AddRecordToCaseModal.test.js +309 -0
- package/components/routes/cases/modals/AddToCaseModal.d.ts +9 -0
- package/components/routes/cases/modals/AddToCaseModal.js +72 -0
- package/components/routes/cases/modals/CaseRecordRow.d.ts +9 -0
- package/components/routes/cases/modals/CaseRecordRow.js +14 -0
- package/components/routes/cases/modals/CreateCaseModal.d.ts +7 -0
- package/components/routes/cases/modals/CreateCaseModal.js +53 -0
- package/components/routes/cases/modals/CreateCaseModal.test.d.ts +1 -0
- package/components/routes/cases/modals/CreateCaseModal.test.js +319 -0
- package/components/routes/cases/modals/RenameItemModal.d.ts +9 -0
- package/components/routes/cases/modals/RenameItemModal.js +44 -0
- package/components/routes/cases/modals/ResolveModal.d.ts +7 -0
- package/components/routes/cases/modals/ResolveModal.js +120 -0
- package/components/routes/cases/modals/ResolveModal.test.d.ts +1 -0
- package/components/routes/cases/modals/ResolveModal.test.js +520 -0
- package/components/routes/cases/modals/hooks.d.ts +7 -0
- package/components/routes/cases/modals/hooks.js +40 -0
- package/components/routes/cases/modals/types.d.ts +13 -0
- package/components/routes/cases/search/CaseAssigneeFilter.d.ts +6 -0
- package/components/routes/cases/search/CaseAssigneeFilter.js +33 -0
- package/components/routes/cases/search/CaseAssigneeFilter.test.d.ts +1 -0
- package/components/routes/cases/search/CaseAssigneeFilter.test.js +127 -0
- package/components/routes/cases/search/CaseDateFilter.d.ts +13 -0
- package/components/routes/cases/search/CaseDateFilter.js +26 -0
- package/components/routes/cases/search/CaseDateFilter.test.d.ts +1 -0
- package/components/routes/cases/search/CaseDateFilter.test.js +115 -0
- package/components/routes/cases/search/CaseStatusFilter.d.ts +6 -0
- package/components/routes/cases/search/CaseStatusFilter.js +13 -0
- package/components/routes/cases/search/CaseStatusFilter.test.d.ts +1 -0
- package/components/routes/cases/search/CaseStatusFilter.test.js +86 -0
- package/components/routes/cases/utils.d.ts +3 -0
- package/components/routes/cases/utils.js +21 -0
- package/components/routes/dossiers/DossierEditor.js +4 -4
- package/components/routes/dossiers/DossierEditor.test.js +2 -2
- package/components/routes/dossiers/Dossiers.js +16 -14
- package/components/routes/dossiers/PivotForm.js +2 -4
- package/components/routes/events/EventViewer.d.ts +7 -0
- package/components/routes/events/EventViewer.js +24 -0
- package/components/routes/help/ApiDocumentation.js +2 -2
- package/components/routes/help/HitBannerDocumentation.js +2 -1
- package/components/routes/help/HitDocumentation.js +1 -3
- package/components/routes/help/HitSchemaDocumentation.js +1 -1
- package/components/routes/help/OverviewDocumentation.d.ts +1 -1
- package/components/routes/help/OverviewDocumentation.js +0 -1
- package/components/routes/help/RetentionDocumentation.js +2 -2
- package/components/routes/help/SearchDocumentation.js +1 -1
- package/components/routes/help/markdown/en/client.md.js +1 -1
- package/components/routes/help/markdown/fr/client.md.js +1 -1
- package/components/routes/hits/search/InformationPane.d.ts +1 -0
- package/components/routes/hits/search/InformationPane.js +52 -65
- package/components/routes/hits/search/QuerySettings.js +2 -1
- package/components/routes/hits/search/QuerySettings.test.js +19 -17
- package/components/routes/hits/search/{HitBrowser.js → RecordBrowser.js} +13 -12
- package/components/routes/hits/search/{HitQuery.d.ts → RecordQuery.d.ts} +2 -2
- package/components/routes/hits/search/{HitQuery.js → RecordQuery.js} +6 -6
- package/components/routes/hits/search/SearchPane.js +28 -50
- package/components/routes/hits/search/ViewLink.js +7 -6
- package/components/routes/hits/search/ViewLink.test.js +8 -9
- package/components/routes/hits/search/grid/RecordGrid.d.ts +3 -0
- package/components/routes/hits/search/grid/RecordGrid.js +64 -0
- package/components/routes/hits/search/shared/CustomSort.js +1 -1
- package/components/routes/hits/search/shared/CustomSpan.test.js +3 -4
- package/components/routes/hits/search/shared/HitFilter.d.ts +1 -1
- package/components/routes/hits/search/shared/HitSort.d.ts +1 -1
- package/components/routes/hits/search/shared/HitSort.js +2 -1
- package/components/routes/hits/search/shared/IndexPicker.d.ts +8 -0
- package/components/routes/hits/search/shared/IndexPicker.js +21 -0
- package/components/routes/hits/search/shared/LayoutSettings.js +25 -0
- package/components/routes/hits/search/shared/SearchActionMenu.d.ts +4 -0
- package/components/routes/hits/search/shared/SearchActionMenu.js +11 -0
- package/components/routes/hits/search/shared/SearchSpan.d.ts +1 -1
- package/components/routes/hits/search/shared/SearchSpan.js +1 -1
- package/components/routes/hits/view/HitViewer.js +16 -17
- package/components/routes/home/AddNewCard.js +2 -2
- package/components/routes/home/AddNewCard.test.js +20 -2
- package/components/routes/home/AnalyticCard.js +1 -1
- package/components/routes/home/EntryWrapper.js +1 -1
- package/components/routes/home/HomeSettings.js +1 -1
- package/components/routes/home/HomeSettings.test.d.ts +1 -0
- package/components/routes/home/HomeSettings.test.js +44 -0
- package/components/routes/home/ViewCard.js +52 -46
- package/components/routes/home/ViewRefresh.test.js +1 -1
- package/components/routes/home/index.js +2 -2
- package/components/routes/overviews/OverviewCard.js +1 -1
- package/components/routes/overviews/OverviewViewer.js +13 -10
- package/components/routes/overviews/Overviews.js +16 -14
- package/components/routes/overviews/markdownExtendedTokenProvider.js +15 -15
- package/components/routes/overviews/markdownExtendedTokenProvider.test.d.ts +1 -0
- package/components/routes/overviews/markdownExtendedTokenProvider.test.js +50 -0
- package/components/routes/settings/ProfileSection.js +2 -2
- package/components/routes/templates/TemplateEditor.d.ts +3 -2
- package/components/routes/templates/TemplateEditor.js +1 -1
- package/components/routes/templates/TemplateViewer.js +10 -5
- package/components/routes/templates/Templates.js +19 -14
- package/components/routes/views/ViewComposer.js +78 -26
- package/components/routes/views/Views.js +17 -14
- package/i18n.js +1 -1
- package/index.css +4 -0
- package/index.d.ts +1 -1
- package/index.js +1 -1
- package/locales/en/translation.json +188 -34
- package/locales/fr/translation.json +186 -32
- package/models/WithMetadata.d.ts +2 -1
- package/models/entities/generated/Analytic.d.ts +0 -3
- package/models/entities/generated/ApiType.d.ts +3 -1
- package/models/entities/generated/AttachmentsFile.d.ts +12 -0
- package/models/entities/generated/Case.d.ts +29 -0
- package/models/entities/generated/Column.d.ts +7 -0
- package/models/entities/generated/DestinationOriginal.d.ts +19 -0
- package/models/entities/generated/ECSEvent.d.ts +31 -0
- package/models/entities/generated/EmailAttachment.d.ts +8 -0
- package/models/entities/generated/EmailParent.d.ts +19 -0
- package/models/entities/generated/Enrichments.d.ts +7 -0
- package/models/entities/generated/EnrichmentsIndicator.d.ts +21 -0
- package/models/entities/generated/Event.d.ts +80 -26
- package/models/entities/generated/EventCloud.d.ts +20 -0
- package/models/entities/generated/EventDestination.d.ts +23 -0
- package/models/entities/generated/EventEmail.d.ts +30 -0
- package/models/entities/generated/EventFile.d.ts +36 -0
- package/models/entities/generated/EventHowler.d.ts +42 -0
- package/models/entities/generated/EventHttp.d.ts +11 -0
- package/models/entities/generated/EventObserver.d.ts +21 -0
- package/models/entities/generated/EventOrganization.d.ts +7 -0
- package/models/entities/generated/EventProcess.d.ts +34 -0
- package/models/entities/generated/EventSource.d.ts +23 -0
- package/models/entities/generated/EventThreat.d.ts +21 -0
- package/models/entities/generated/EventTls.d.ts +12 -0
- package/models/entities/generated/Hit.d.ts +3 -2
- package/models/entities/generated/Host.d.ts +1 -0
- package/models/entities/generated/Howler.d.ts +1 -6
- package/models/entities/generated/HttpResponse.d.ts +11 -0
- package/models/entities/generated/Item.d.ts +12 -0
- package/models/entities/generated/ObserverIngress.d.ts +9 -0
- package/models/entities/generated/Rule.d.ts +8 -9
- package/models/entities/generated/Settings.d.ts +4 -0
- package/models/entities/generated/Task.d.ts +10 -0
- package/models/entities/generated/Threat.d.ts +2 -2
- package/models/entities/generated/{Enrichment.d.ts → ThreatEnrichment.d.ts} +1 -1
- package/models/entities/generated/View.d.ts +1 -0
- package/models/socket/CaseUpdate.d.ts +5 -0
- package/models/socket/ViewersUpdate.d.ts +4 -0
- package/package.json +156 -137
- package/plugins/clue/components/ClueLeadForm.js +1 -1
- package/plugins/clue/components/CluePivotForm.js +2 -2
- package/plugins/clue/components/ClueTypography.js +2 -2
- package/plugins/clue/helpers.js +4 -4
- package/plugins/clue/index.d.ts +3 -2
- package/plugins/clue/index.js +0 -1
- package/plugins/clue/utils.d.ts +2 -1
- package/rest/AxiosClient.test.d.ts +1 -0
- package/rest/AxiosClient.test.js +185 -0
- package/tests/mocks.d.ts +11 -1
- package/tests/mocks.js +12 -7
- package/tests/server-handlers.js +11 -1
- package/tests/utils.d.ts +4 -0
- package/tests/utils.js +21 -0
- package/utils/Throttler.test.js +2 -2
- package/utils/actionUtils.d.ts +3 -3
- package/utils/classificationParser.d.ts +195 -0
- package/utils/classificationParser.js +680 -0
- package/utils/constants.d.ts +4 -3
- package/utils/constants.js +6 -0
- package/utils/localStorage.js +1 -1
- package/utils/menuUtils.js +0 -4
- package/utils/recordFunctions.d.ts +3 -0
- package/utils/recordFunctions.js +8 -0
- package/utils/recordFunctions.test.d.ts +1 -0
- package/utils/{hitFunctions.test.js → recordFunctions.test.js} +1 -1
- package/utils/socketUtils.d.ts +14 -0
- package/utils/socketUtils.js +17 -1
- package/utils/socketUtils.test.js +49 -16
- package/utils/stringUtils.d.ts +1 -0
- package/utils/stringUtils.js +7 -0
- package/utils/stringUtils.test.js +22 -2
- package/utils/typeUtils.d.ts +7 -0
- package/utils/typeUtils.js +27 -0
- package/utils/utils.d.ts +1 -1
- package/utils/utils.js +2 -2
- package/utils/utils.test.js +119 -2
- package/utils/viewUtils.js +3 -0
- package/utils/xsrf.js +1 -1
- package/api/analytic/rules.d.ts +0 -3
- package/api/analytic/rules.js +0 -8
- package/components/app/providers/HitProvider.d.ts +0 -22
- package/components/elements/display/icons/BundleButton.d.ts +0 -6
- package/components/elements/display/icons/BundleButton.js +0 -32
- package/components/elements/hit/HitRelated.d.ts +0 -6
- package/components/elements/hit/HitRelated.js +0 -7
- package/components/elements/hit/elements/HitUsers.js +0 -33
- package/components/routes/advanced/RuleModal.d.ts +0 -7
- package/components/routes/advanced/RuleModal.js +0 -83
- package/components/routes/analytics/RuleView.d.ts +0 -8
- package/components/routes/analytics/RuleView.js +0 -48
- package/components/routes/help/BundleDocumentation.d.ts +0 -3
- package/components/routes/help/BundleDocumentation.js +0 -12
- package/components/routes/help/markdown/en/bundles.md.js +0 -1
- package/components/routes/help/markdown/fr/bundles.md.js +0 -1
- package/components/routes/hits/search/BundleParentMenu.d.ts +0 -6
- package/components/routes/hits/search/BundleParentMenu.js +0 -32
- package/components/routes/hits/search/BundleScroller.d.ts +0 -2
- package/components/routes/hits/search/BundleScroller.js +0 -6
- package/components/routes/hits/search/HitContextMenu.js +0 -239
- package/components/routes/hits/search/LayoutSettings.js +0 -24
- package/components/routes/hits/search/grid/HitGrid.d.ts +0 -3
- package/components/routes/hits/search/grid/HitGrid.js +0 -132
- package/utils/hitFunctions.d.ts +0 -2
- package/utils/hitFunctions.js +0 -8
- /package/{components/app/providers/HitSearchProvider.test.d.ts → api/socket/viewers.test.d.ts} +0 -0
- /package/components/{routes/hits/search/HitContextMenu.test.d.ts → app/providers/GridColumnsProvider.test.d.ts} +0 -0
- /package/{utils/hitFunctions.test.d.ts → components/app/providers/RecordSearchProvider.test.d.ts} +0 -0
- /package/components/{routes/overviews/OverviewEditor.d.ts → elements/MarkdownEditor.d.ts} +0 -0
- /package/components/{routes/hits/search → elements/hit}/grid/AddColumnModal.d.ts +0 -0
- /package/components/elements/hit/{HitDetails.d.ts → related/RelatedRecords.d.ts} +0 -0
- /package/components/routes/hits/search/{HitBrowser.d.ts → RecordBrowser.d.ts} +0 -0
- /package/components/routes/hits/search/{LayoutSettings.d.ts → shared/LayoutSettings.d.ts} +0 -0
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
/// <reference types="vitest" />
|
|
2
|
+
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
|
|
3
|
+
import AxiosClient from './AxiosClient';
|
|
4
|
+
// ---------------------------------------------------------------------------
|
|
5
|
+
// vi.hoisted() ensures these values are available when the vi.mock factories
|
|
6
|
+
// run (which happens before any module code executes).
|
|
7
|
+
// ---------------------------------------------------------------------------
|
|
8
|
+
const { mockAxiosInstance, mockAxiosError, mockInterceptorResponseUse, interceptorRef } = vi.hoisted(() => {
|
|
9
|
+
// Ref object used to capture the response interceptor across test resets
|
|
10
|
+
const _interceptorRef = { fn: null };
|
|
11
|
+
const _mockInterceptorResponseUse = vi.fn().mockImplementation((onFulfilled) => {
|
|
12
|
+
_interceptorRef.fn = onFulfilled;
|
|
13
|
+
});
|
|
14
|
+
const _mockAxiosInstance = vi.fn();
|
|
15
|
+
_mockAxiosInstance.interceptors = {
|
|
16
|
+
response: { use: _mockInterceptorResponseUse }
|
|
17
|
+
};
|
|
18
|
+
class MockAxiosError extends Error {
|
|
19
|
+
response;
|
|
20
|
+
constructor(message, response) {
|
|
21
|
+
super(message);
|
|
22
|
+
this.name = 'AxiosError';
|
|
23
|
+
this.response = response;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
return {
|
|
27
|
+
mockAxiosInstance: _mockAxiosInstance,
|
|
28
|
+
mockAxiosError: MockAxiosError,
|
|
29
|
+
mockInterceptorResponseUse: _mockInterceptorResponseUse,
|
|
30
|
+
interceptorRef: _interceptorRef
|
|
31
|
+
};
|
|
32
|
+
});
|
|
33
|
+
vi.mock('axios', () => ({
|
|
34
|
+
create: vi.fn(() => mockAxiosInstance),
|
|
35
|
+
default: { create: vi.fn(() => mockAxiosInstance) },
|
|
36
|
+
AxiosError: mockAxiosError
|
|
37
|
+
}));
|
|
38
|
+
vi.mock('axios-retry', () => ({
|
|
39
|
+
default: vi.fn(),
|
|
40
|
+
exponentialDelay: vi.fn(),
|
|
41
|
+
isNetworkError: vi.fn()
|
|
42
|
+
}));
|
|
43
|
+
vi.mock('utils/sessionStorage', () => ({
|
|
44
|
+
getAxiosCache: vi.fn(() => ({})),
|
|
45
|
+
setAxiosCache: vi.fn()
|
|
46
|
+
}));
|
|
47
|
+
// ---------------------------------------------------------------------------
|
|
48
|
+
// Tests
|
|
49
|
+
// ---------------------------------------------------------------------------
|
|
50
|
+
describe('AxiosClient', () => {
|
|
51
|
+
let client;
|
|
52
|
+
beforeEach(() => {
|
|
53
|
+
interceptorRef.fn = null;
|
|
54
|
+
client = new AxiosClient();
|
|
55
|
+
});
|
|
56
|
+
afterEach(() => {
|
|
57
|
+
vi.clearAllMocks();
|
|
58
|
+
});
|
|
59
|
+
// -------------------------------------------------------------------------
|
|
60
|
+
// fetch() – happy paths
|
|
61
|
+
// -------------------------------------------------------------------------
|
|
62
|
+
describe('fetch() – successful responses', () => {
|
|
63
|
+
it('returns [data, status, headers] on a 200 response', async () => {
|
|
64
|
+
const payload = { api_response: { items: [] } };
|
|
65
|
+
mockAxiosInstance.mockResolvedValueOnce({
|
|
66
|
+
data: payload,
|
|
67
|
+
status: 200,
|
|
68
|
+
headers: { 'content-type': 'application/json' }
|
|
69
|
+
});
|
|
70
|
+
const result = await client.fetch('/api/v1/hit');
|
|
71
|
+
expect(result[0]).toEqual(payload);
|
|
72
|
+
expect(result[1]).toBe(200);
|
|
73
|
+
});
|
|
74
|
+
it('uses GET as the default HTTP method', async () => {
|
|
75
|
+
mockAxiosInstance.mockResolvedValueOnce({ data: {}, status: 200, headers: {} });
|
|
76
|
+
await client.fetch('/api/v1/hit');
|
|
77
|
+
const config = mockAxiosInstance.mock.calls[0][0];
|
|
78
|
+
expect(config.method).toBe('get');
|
|
79
|
+
});
|
|
80
|
+
it('passes POST as the HTTP method when specified', async () => {
|
|
81
|
+
mockAxiosInstance.mockResolvedValueOnce({ data: {}, status: 201, headers: {} });
|
|
82
|
+
await client.fetch('/api/v1/hit', 'post', { key: 'val' });
|
|
83
|
+
const config = mockAxiosInstance.mock.calls[0][0];
|
|
84
|
+
expect(config.method).toBe('post');
|
|
85
|
+
});
|
|
86
|
+
it('serialises the body as a JSON string', async () => {
|
|
87
|
+
mockAxiosInstance.mockResolvedValueOnce({ data: {}, status: 200, headers: {} });
|
|
88
|
+
await client.fetch('/api/v1/hit', 'post', { status: 'open' });
|
|
89
|
+
const config = mockAxiosInstance.mock.calls[0][0];
|
|
90
|
+
expect(config.data).toBe(JSON.stringify({ status: 'open' }));
|
|
91
|
+
});
|
|
92
|
+
it('passes URLSearchParams through as params', async () => {
|
|
93
|
+
mockAxiosInstance.mockResolvedValueOnce({ data: {}, status: 200, headers: {} });
|
|
94
|
+
const params = new URLSearchParams({ q: 'test' });
|
|
95
|
+
await client.fetch('/api/v1/hit', 'get', undefined, params);
|
|
96
|
+
const config = mockAxiosInstance.mock.calls[0][0];
|
|
97
|
+
expect(config.params).toBe(params);
|
|
98
|
+
});
|
|
99
|
+
it('forwards custom headers', async () => {
|
|
100
|
+
mockAxiosInstance.mockResolvedValueOnce({ data: {}, status: 200, headers: {} });
|
|
101
|
+
const headers = { Authorization: '******' };
|
|
102
|
+
await client.fetch('/api/v1/hit', 'get', undefined, undefined, headers);
|
|
103
|
+
const config = mockAxiosInstance.mock.calls[0][0];
|
|
104
|
+
expect(config.headers).toEqual(headers);
|
|
105
|
+
});
|
|
106
|
+
it('sets withCredentials to true', async () => {
|
|
107
|
+
mockAxiosInstance.mockResolvedValueOnce({ data: {}, status: 200, headers: {} });
|
|
108
|
+
await client.fetch('/api/v1/hit');
|
|
109
|
+
const config = mockAxiosInstance.mock.calls[0][0];
|
|
110
|
+
expect(config.withCredentials).toBe(true);
|
|
111
|
+
});
|
|
112
|
+
it('passes the URL through to the axios config', async () => {
|
|
113
|
+
mockAxiosInstance.mockResolvedValueOnce({ data: {}, status: 200, headers: {} });
|
|
114
|
+
await client.fetch('/api/v1/test-url');
|
|
115
|
+
const config = mockAxiosInstance.mock.calls[0][0];
|
|
116
|
+
expect(config.url).toBe('/api/v1/test-url');
|
|
117
|
+
});
|
|
118
|
+
});
|
|
119
|
+
// -------------------------------------------------------------------------
|
|
120
|
+
// fetch() – error handling
|
|
121
|
+
// -------------------------------------------------------------------------
|
|
122
|
+
describe('fetch() – error handling', () => {
|
|
123
|
+
it('returns [data, status, headers] when the error is an AxiosError with a response', async () => {
|
|
124
|
+
const errorResponse = { data: { error: 'not found' }, status: 404, headers: {} };
|
|
125
|
+
const axiosErr = new mockAxiosError('Not Found', errorResponse);
|
|
126
|
+
mockAxiosInstance.mockRejectedValueOnce(axiosErr);
|
|
127
|
+
const result = await client.fetch('/api/v1/missing');
|
|
128
|
+
expect(result[0]).toEqual({ error: 'not found' });
|
|
129
|
+
expect(result[1]).toBe(404);
|
|
130
|
+
});
|
|
131
|
+
it('rethrows non-AxiosError exceptions', async () => {
|
|
132
|
+
mockAxiosInstance.mockRejectedValueOnce(new TypeError('network failure'));
|
|
133
|
+
await expect(client.fetch('/api/v1/hit')).rejects.toThrow('network failure');
|
|
134
|
+
});
|
|
135
|
+
it('rethrows AxiosError that has no response body', async () => {
|
|
136
|
+
// AxiosError without a .response property → condition `e.response?.data` is falsy → rethrow
|
|
137
|
+
const axiosErr = new mockAxiosError('timeout');
|
|
138
|
+
mockAxiosInstance.mockRejectedValueOnce(axiosErr);
|
|
139
|
+
await expect(client.fetch('/api/v1/hit')).rejects.toThrow('timeout');
|
|
140
|
+
});
|
|
141
|
+
});
|
|
142
|
+
// -------------------------------------------------------------------------
|
|
143
|
+
// AxiosCache – response interceptor
|
|
144
|
+
// -------------------------------------------------------------------------
|
|
145
|
+
describe('AxiosCache response interceptor', () => {
|
|
146
|
+
it('is registered on the axios instance during construction', () => {
|
|
147
|
+
expect(mockInterceptorResponseUse).toHaveBeenCalled();
|
|
148
|
+
expect(interceptorRef.fn).toBeTypeOf('function');
|
|
149
|
+
});
|
|
150
|
+
it('stores a new etag cache entry on a 2xx response with an etag header', async () => {
|
|
151
|
+
const { setAxiosCache } = await import('utils/sessionStorage');
|
|
152
|
+
const res = {
|
|
153
|
+
status: 200,
|
|
154
|
+
headers: { etag: '"abc123"' },
|
|
155
|
+
data: { value: 1 },
|
|
156
|
+
config: { headers: {} }
|
|
157
|
+
};
|
|
158
|
+
await interceptorRef.fn(res);
|
|
159
|
+
expect(setAxiosCache).toHaveBeenCalledWith('"abc123"', { value: 1 });
|
|
160
|
+
});
|
|
161
|
+
it('replaces data from cache on a 304 response', async () => {
|
|
162
|
+
const { getAxiosCache } = await import('utils/sessionStorage');
|
|
163
|
+
getAxiosCache.mockReturnValueOnce({ '"etag-v1"': { cached: true } });
|
|
164
|
+
const res = {
|
|
165
|
+
status: 304,
|
|
166
|
+
headers: {},
|
|
167
|
+
data: null,
|
|
168
|
+
config: { headers: { 'If-Match': '"etag-v1"' } }
|
|
169
|
+
};
|
|
170
|
+
const result = await interceptorRef.fn(res);
|
|
171
|
+
expect(result.data).toEqual({ cached: true });
|
|
172
|
+
});
|
|
173
|
+
it('passes through a 2xx response without an etag without caching', async () => {
|
|
174
|
+
const { setAxiosCache } = await import('utils/sessionStorage');
|
|
175
|
+
const res = {
|
|
176
|
+
status: 200,
|
|
177
|
+
headers: {},
|
|
178
|
+
data: { ok: true },
|
|
179
|
+
config: { headers: {} }
|
|
180
|
+
};
|
|
181
|
+
await interceptorRef.fn(res);
|
|
182
|
+
expect(setAxiosCache).not.toHaveBeenCalled();
|
|
183
|
+
});
|
|
184
|
+
});
|
|
185
|
+
});
|
package/tests/mocks.d.ts
CHANGED
|
@@ -7,7 +7,17 @@ export declare const setupContextSelectorMock: () => void;
|
|
|
7
7
|
* Sets up a mock for react-router-dom with common defaults
|
|
8
8
|
* @param options - Override specific router behavior
|
|
9
9
|
*/
|
|
10
|
-
export declare const setupReactRouterMock: () =>
|
|
10
|
+
export declare const setupReactRouterMock: () => {
|
|
11
|
+
mockSearchParams: URLSearchParams;
|
|
12
|
+
mockSetParams: import("vitest").Mock<(...args: any[]) => any>;
|
|
13
|
+
mockLocation: {
|
|
14
|
+
pathname: string;
|
|
15
|
+
search: string;
|
|
16
|
+
};
|
|
17
|
+
mockParams: {
|
|
18
|
+
id: any;
|
|
19
|
+
};
|
|
20
|
+
};
|
|
11
21
|
/**
|
|
12
22
|
* Sets up a mock localStorage instance
|
|
13
23
|
*/
|
package/tests/mocks.js
CHANGED
|
@@ -31,15 +31,20 @@ export const setupReactRouterMock = () => {
|
|
|
31
31
|
const mockSearchParams = vi.hoisted(() => new URLSearchParams());
|
|
32
32
|
const mockSetParams = vi.hoisted(() => vi.fn());
|
|
33
33
|
beforeAll(() => {
|
|
34
|
-
vi.mock('react-router-dom', () =>
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
34
|
+
vi.mock('react-router-dom', async () => {
|
|
35
|
+
const actual = await vi.importActual('react-router-dom');
|
|
36
|
+
return {
|
|
37
|
+
...actual,
|
|
38
|
+
Link: forwardRef(({ to, children, ...props }, ref) => (_jsx("a", { ref: ref, href: to, ...props, children: children }))),
|
|
39
|
+
useLocation: vi.fn(() => mockLocation),
|
|
40
|
+
useParams: vi.fn(() => mockParams),
|
|
41
|
+
useSearchParams: vi.fn(() => [mockSearchParams, mockSetParams]),
|
|
42
|
+
useNavigate: () => vi.fn()
|
|
43
|
+
};
|
|
44
|
+
});
|
|
41
45
|
});
|
|
42
46
|
afterAll(() => vi.resetModules());
|
|
47
|
+
return { mockSearchParams, mockSetParams, mockLocation, mockParams };
|
|
43
48
|
};
|
|
44
49
|
/**
|
|
45
50
|
* Sets up a mock localStorage instance
|
package/tests/server-handlers.js
CHANGED
|
@@ -30,7 +30,17 @@ export const MOCK_RESPONSES = {
|
|
|
30
30
|
total: 1,
|
|
31
31
|
rows: 1
|
|
32
32
|
},
|
|
33
|
-
'/api/v1/analytic': [createMockAnalytic()]
|
|
33
|
+
'/api/v1/analytic': [createMockAnalytic()],
|
|
34
|
+
'/api/v2/search/hit,event': {
|
|
35
|
+
items: [],
|
|
36
|
+
total: 0,
|
|
37
|
+
rows: 0
|
|
38
|
+
},
|
|
39
|
+
'/api/v2/search/hit': {
|
|
40
|
+
items: [],
|
|
41
|
+
total: 0,
|
|
42
|
+
rows: 0
|
|
43
|
+
}
|
|
34
44
|
};
|
|
35
45
|
const handlers = [
|
|
36
46
|
...Object.entries(MOCK_RESPONSES).map(([path, data]) => http.all(path, async () => HttpResponse.json({ api_response: data }))),
|
package/tests/utils.d.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import type { Action } from '@cccsaurora/howler-ui/models/entities/generated/Action';
|
|
2
2
|
import type { Analytic } from '@cccsaurora/howler-ui/models/entities/generated/Analytic';
|
|
3
|
+
import type { Case } from '@cccsaurora/howler-ui/models/entities/generated/Case';
|
|
3
4
|
import type { Dossier } from '@cccsaurora/howler-ui/models/entities/generated/Dossier';
|
|
5
|
+
import type { Event } from '@cccsaurora/howler-ui/models/entities/generated/Event';
|
|
4
6
|
import type { Hit } from '@cccsaurora/howler-ui/models/entities/generated/Hit';
|
|
5
7
|
import type { Template } from '@cccsaurora/howler-ui/models/entities/generated/Template';
|
|
6
8
|
import type { View } from '@cccsaurora/howler-ui/models/entities/generated/View';
|
|
@@ -8,9 +10,11 @@ type RecursivePartial<T> = {
|
|
|
8
10
|
[P in keyof T]?: T[P] extends (infer U)[] ? RecursivePartial<U>[] : T[P] extends object | undefined ? RecursivePartial<T[P]> : T[P];
|
|
9
11
|
};
|
|
10
12
|
export declare const createMockHit: (overrides?: RecursivePartial<Hit>) => Hit;
|
|
13
|
+
export declare const createMockEvent: (overrides?: RecursivePartial<Event>) => Event;
|
|
11
14
|
export declare const createMockAnalytic: (overrides?: Partial<Analytic>) => Analytic;
|
|
12
15
|
export declare const createMockTemplate: (overrides?: Partial<Template>) => Template;
|
|
13
16
|
export declare const createMockAction: (overrides?: Partial<Action>) => Action;
|
|
14
17
|
export declare const createMockView: (overrides?: Partial<View>) => View;
|
|
18
|
+
export declare const createMockCase: (overrides?: Partial<Case>) => Case;
|
|
15
19
|
export declare const createMockDossier: (overrides?: Partial<Dossier>) => Dossier;
|
|
16
20
|
export {};
|
package/tests/utils.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
// Mock data factories
|
|
2
2
|
export const createMockHit = (overrides) => ({
|
|
3
|
+
...overrides,
|
|
4
|
+
__index: 'hit',
|
|
3
5
|
howler: {
|
|
4
6
|
id: 'test-hit-1',
|
|
5
7
|
analytic: 'test-analytic',
|
|
@@ -14,6 +16,17 @@ export const createMockHit = (overrides) => ({
|
|
|
14
16
|
...overrides?.event
|
|
15
17
|
}
|
|
16
18
|
});
|
|
19
|
+
export const createMockEvent = (overrides) => ({
|
|
20
|
+
...overrides,
|
|
21
|
+
__index: 'event',
|
|
22
|
+
howler: {
|
|
23
|
+
id: 'test-event-1',
|
|
24
|
+
analytic: 'test-analytic',
|
|
25
|
+
detection: 'Test Detection',
|
|
26
|
+
hash: '',
|
|
27
|
+
...overrides?.howler
|
|
28
|
+
}
|
|
29
|
+
});
|
|
17
30
|
export const createMockAnalytic = (overrides) => ({
|
|
18
31
|
analytic_id: 'test-analytic-id',
|
|
19
32
|
name: 'test-analytic',
|
|
@@ -52,6 +65,14 @@ export const createMockView = (overrides) => ({
|
|
|
52
65
|
},
|
|
53
66
|
...overrides
|
|
54
67
|
});
|
|
68
|
+
export const createMockCase = (overrides) => ({
|
|
69
|
+
__index: 'case',
|
|
70
|
+
case_id: 'test-case-id',
|
|
71
|
+
title: 'Test Case',
|
|
72
|
+
summary: 'Test case summary',
|
|
73
|
+
items: [],
|
|
74
|
+
...overrides
|
|
75
|
+
});
|
|
55
76
|
// Helper function to create mock dossiers
|
|
56
77
|
export const createMockDossier = (overrides) => ({
|
|
57
78
|
dossier_id: 'test-dossier-id',
|
package/utils/Throttler.test.js
CHANGED
|
@@ -97,7 +97,7 @@ describe('Throttler', () => {
|
|
|
97
97
|
it('does not invoke fn before the delay', async () => {
|
|
98
98
|
const fn = vi.fn().mockResolvedValue('x');
|
|
99
99
|
const t = new Throttler(100);
|
|
100
|
-
t.delayAsync(fn);
|
|
100
|
+
void t.delayAsync(fn);
|
|
101
101
|
expect(fn).not.toHaveBeenCalled();
|
|
102
102
|
});
|
|
103
103
|
it('resolves with the return value of fn', async () => {
|
|
@@ -124,7 +124,7 @@ describe('Throttler', () => {
|
|
|
124
124
|
it('cancels the previous pending call when invoked again', async () => {
|
|
125
125
|
const fn = vi.fn().mockResolvedValue(42);
|
|
126
126
|
const t = new Throttler(100);
|
|
127
|
-
t.delayAsync(fn);
|
|
127
|
+
void t.delayAsync(fn);
|
|
128
128
|
vi.advanceTimersByTime(50);
|
|
129
129
|
const second = t.delayAsync(fn);
|
|
130
130
|
vi.advanceTimersByTime(100);
|
package/utils/actionUtils.d.ts
CHANGED
|
@@ -14,18 +14,18 @@ export declare const checkArgsAreFilled: (step: ActionOperationStep, values: str
|
|
|
14
14
|
* @param context The values provided so far by the user
|
|
15
15
|
* @returns a list of options matching the current context
|
|
16
16
|
*/
|
|
17
|
-
export declare const getOptionsByContext: (options: ActionOperationStep[
|
|
17
|
+
export declare const getOptionsByContext: (options: ActionOperationStep['options'], arg: string, context: string) => string[];
|
|
18
18
|
/**
|
|
19
19
|
* Get a list of arguments to display based on the current context, using the current values supplied for the action entry.
|
|
20
20
|
* @param args a complete list of all arguments in the action
|
|
21
21
|
* @param values the current list of values provided by the user
|
|
22
22
|
* @returns A list of arguments to display
|
|
23
23
|
*/
|
|
24
|
-
export declare const getArgsByContext: (args: ActionOperationStep[
|
|
24
|
+
export declare const getArgsByContext: (args: ActionOperationStep['args'], values: string) => string[];
|
|
25
25
|
/**
|
|
26
26
|
* Check to see if a given action has all the data necessary to execute successfully
|
|
27
27
|
* @param data The user-provided data
|
|
28
28
|
* @param action The action to validate
|
|
29
29
|
* @returns whether the action is ready to execute
|
|
30
30
|
*/
|
|
31
|
-
export declare const operationReady: (data: Operation[
|
|
31
|
+
export declare const operationReady: (data: Operation['data_json'], action: ActionOperation) => boolean;
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Classification related utils.
|
|
3
|
+
*
|
|
4
|
+
* WARNING:
|
|
5
|
+
* Actual classification enforcement is handled server side. These utils are convenience functions mostly used for
|
|
6
|
+
* display purposes. They and are not expected to be used for critical access control enforcement. As such, error
|
|
7
|
+
* conditions are not raised and suitable default values are returned.
|
|
8
|
+
*
|
|
9
|
+
*/
|
|
10
|
+
export type FormatProp = 'long' | 'short';
|
|
11
|
+
type LevelStylesheet = {
|
|
12
|
+
banner?: string;
|
|
13
|
+
label?: string;
|
|
14
|
+
text?: string;
|
|
15
|
+
color?: string;
|
|
16
|
+
};
|
|
17
|
+
type ClassificationLevel = {
|
|
18
|
+
aliases: string[];
|
|
19
|
+
css: LevelStylesheet;
|
|
20
|
+
description: string;
|
|
21
|
+
lvl: number;
|
|
22
|
+
name: string;
|
|
23
|
+
short_name: string;
|
|
24
|
+
is_hidden?: boolean;
|
|
25
|
+
};
|
|
26
|
+
type ClassificationRequired = {
|
|
27
|
+
aliases: string[];
|
|
28
|
+
description: string;
|
|
29
|
+
name: string;
|
|
30
|
+
is_required_group?: boolean;
|
|
31
|
+
require_lvl?: number;
|
|
32
|
+
short_name: string;
|
|
33
|
+
is_hidden?: boolean;
|
|
34
|
+
};
|
|
35
|
+
type ClassificationGroup = {
|
|
36
|
+
aliases: string[];
|
|
37
|
+
auto_select?: boolean;
|
|
38
|
+
description: string;
|
|
39
|
+
name: string;
|
|
40
|
+
short_name: string;
|
|
41
|
+
solitary_display_name?: string;
|
|
42
|
+
is_hidden?: boolean;
|
|
43
|
+
};
|
|
44
|
+
type ClassificationSubGroup = {
|
|
45
|
+
aliases: string[];
|
|
46
|
+
auto_select?: boolean;
|
|
47
|
+
description: string;
|
|
48
|
+
limited_to_group?: string;
|
|
49
|
+
name: string;
|
|
50
|
+
require_group?: string;
|
|
51
|
+
short_name: string;
|
|
52
|
+
solitary_display_name?: string;
|
|
53
|
+
is_hidden?: boolean;
|
|
54
|
+
};
|
|
55
|
+
type ClassificationYAMLDefinition = {
|
|
56
|
+
dynamic_groups: boolean;
|
|
57
|
+
dynamic_groups_type: string;
|
|
58
|
+
enforce: boolean;
|
|
59
|
+
groups: ClassificationGroup[];
|
|
60
|
+
levels: ClassificationLevel[];
|
|
61
|
+
required: ClassificationRequired[];
|
|
62
|
+
restricted: string;
|
|
63
|
+
subgroups: ClassificationSubGroup[];
|
|
64
|
+
unrestricted: string;
|
|
65
|
+
};
|
|
66
|
+
type StringMap = {
|
|
67
|
+
[propName: string]: string;
|
|
68
|
+
};
|
|
69
|
+
type StringMapArray = {
|
|
70
|
+
[propName: string]: string[];
|
|
71
|
+
};
|
|
72
|
+
type StylesheetMap = {
|
|
73
|
+
[propName: string]: LevelStylesheet;
|
|
74
|
+
};
|
|
75
|
+
type ParamsMap = {
|
|
76
|
+
[propName: string]: {
|
|
77
|
+
is_required_group?: boolean;
|
|
78
|
+
solitary_display_name?: string;
|
|
79
|
+
require_lvl?: number;
|
|
80
|
+
require_group?: string;
|
|
81
|
+
limited_to_group?: string;
|
|
82
|
+
is_hidden?: boolean;
|
|
83
|
+
};
|
|
84
|
+
};
|
|
85
|
+
export type ClassificationDefinition = {
|
|
86
|
+
RESTRICTED: string;
|
|
87
|
+
UNRESTRICTED: string;
|
|
88
|
+
access_req_aliases: StringMapArray;
|
|
89
|
+
access_req_map_lts: StringMap;
|
|
90
|
+
access_req_map_stl: StringMap;
|
|
91
|
+
description: StringMap;
|
|
92
|
+
dynamic_groups: boolean;
|
|
93
|
+
dynamic_groups_type: 'email' | 'group' | 'all';
|
|
94
|
+
enforce: boolean;
|
|
95
|
+
groups_aliases: StringMapArray;
|
|
96
|
+
groups_auto_select: string[];
|
|
97
|
+
groups_auto_select_short: string[];
|
|
98
|
+
groups_map_lts: StringMap;
|
|
99
|
+
groups_map_stl: StringMap;
|
|
100
|
+
invalid_mode: boolean;
|
|
101
|
+
levels_aliases: StringMap;
|
|
102
|
+
levels_map: StringMap;
|
|
103
|
+
levels_map_lts: StringMap;
|
|
104
|
+
levels_map_stl: StringMap;
|
|
105
|
+
levels_styles_map: StylesheetMap;
|
|
106
|
+
original_definition: ClassificationYAMLDefinition;
|
|
107
|
+
params_map: ParamsMap;
|
|
108
|
+
subgroups_aliases: StringMapArray;
|
|
109
|
+
subgroups_auto_select: string[];
|
|
110
|
+
subgroups_auto_select_short: string[];
|
|
111
|
+
subgroups_map_lts: StringMap;
|
|
112
|
+
subgroups_map_stl: StringMap;
|
|
113
|
+
};
|
|
114
|
+
export type ClassificationParts = {
|
|
115
|
+
lvlIdx: number;
|
|
116
|
+
lvl: string;
|
|
117
|
+
req: string[];
|
|
118
|
+
groups: string[];
|
|
119
|
+
subgroups: string[];
|
|
120
|
+
};
|
|
121
|
+
export declare const defaultParts: ClassificationParts;
|
|
122
|
+
type DisabledControls = {
|
|
123
|
+
levels: string[];
|
|
124
|
+
groups: string[];
|
|
125
|
+
};
|
|
126
|
+
export declare const defaultDisabled: DisabledControls;
|
|
127
|
+
export declare class InvalidClassification extends Error {
|
|
128
|
+
}
|
|
129
|
+
export declare const getLevelText: (lvl: number, c12nDef: ClassificationDefinition, format: FormatProp, isMobile: boolean) => string;
|
|
130
|
+
export declare const getParts: (c12n: string, c12nDef: ClassificationDefinition, format: FormatProp, isMobile: boolean) => ClassificationParts;
|
|
131
|
+
export declare const canSeeRequired: (user_req: string[], req: string[]) => boolean;
|
|
132
|
+
export declare const canSeeGroups: (user_groups: string[], groups: string[]) => boolean;
|
|
133
|
+
/**
|
|
134
|
+
* Normalize a given classification by applying the rules defined in the classification definition.
|
|
135
|
+
* This function will remove any invalid parts and add missing parts to the classification.
|
|
136
|
+
* It will also ensure that the display of the classification is always done the same way
|
|
137
|
+
*
|
|
138
|
+
* Note: This function mutates the passed in `parts` parameter.
|
|
139
|
+
*
|
|
140
|
+
* @param parts - `ClassificationParts` object containing the parsed classification components
|
|
141
|
+
* @param c12nDef - ClassificationDefinition returned by the API server
|
|
142
|
+
* @param format - return results in `long` or `short` format
|
|
143
|
+
* @param isMobile - `true`/`false` if the results should be returned for display on a mobile device
|
|
144
|
+
* @param skipAutoSelect - `true`/`false` skip auto selecting required groups
|
|
145
|
+
*
|
|
146
|
+
* @returns A normalized version of the original classification
|
|
147
|
+
*
|
|
148
|
+
*/
|
|
149
|
+
export declare const normalizedClassification: (parts: ClassificationParts, c12nDef: ClassificationDefinition, format: FormatProp, isMobile: boolean, skipAutoSelect?: boolean) => string;
|
|
150
|
+
type ClassificationValidator = {
|
|
151
|
+
disabled: DisabledControls;
|
|
152
|
+
parts: ClassificationParts;
|
|
153
|
+
};
|
|
154
|
+
export declare const defaultClassificationValidator: ClassificationValidator;
|
|
155
|
+
/**
|
|
156
|
+
* Applies the Level, Require and Group rules and returns valid and invalid options based on the given input
|
|
157
|
+
*
|
|
158
|
+
* @param parts - `ClassificationParts` object containing the parsed classification components
|
|
159
|
+
* @param c12nDef - ClassificationDefinition returned by the API server
|
|
160
|
+
* @param format - return results in `long` or `short` format
|
|
161
|
+
* @param isMobile - `true`/`false` if the results should be returned for display on a mobile device
|
|
162
|
+
* @param userClassification - `true`/`false` if to apply `auto select` based on the user
|
|
163
|
+
*
|
|
164
|
+
* @returns The most restrictive classification that we could create out of the two
|
|
165
|
+
*
|
|
166
|
+
*/
|
|
167
|
+
export declare const applyClassificationRules: (parts: ClassificationParts, c12nDef: ClassificationDefinition, format: FormatProp, isMobile: boolean, userClassification?: boolean) => ClassificationValidator;
|
|
168
|
+
/**
|
|
169
|
+
* Mixes two classifications and returns to most restrictive form for them
|
|
170
|
+
*
|
|
171
|
+
* @param c12n_1 - First classification
|
|
172
|
+
* @param c12n_2 - Second classification
|
|
173
|
+
* @param c12nDef - ClassificationDefinition returned by the API server
|
|
174
|
+
* @param format - return results in `long` or `short` format
|
|
175
|
+
* @param isMobile - `true`/`false` if the results should be returned for display on a mobile device
|
|
176
|
+
*
|
|
177
|
+
* @returns The most restrictive classification that we could create out of the two
|
|
178
|
+
*
|
|
179
|
+
*/
|
|
180
|
+
export declare const getMaxClassification: (c12n_1: string, c12n_2: string, c12nDef: ClassificationDefinition, format: FormatProp, isMobile: boolean) => string;
|
|
181
|
+
/**
|
|
182
|
+
*
|
|
183
|
+
* Given a user classification, check if a user is allow to see a certain classification
|
|
184
|
+
*
|
|
185
|
+
* @param user_c12n - Maximum classification for the user
|
|
186
|
+
* @param c12n - Classification the user wishes to see
|
|
187
|
+
* @param c12nDef - ClassificationDefinition returned by the API server
|
|
188
|
+
* @param enforce - `true`/`false` if access controls are enabled
|
|
189
|
+
* @param ignoreInvalid - `true`/`false` if invalid classifications should raise errors or just deny access
|
|
190
|
+
*
|
|
191
|
+
* @returns True is the user can see the classification
|
|
192
|
+
*
|
|
193
|
+
*/
|
|
194
|
+
export declare const isAccessible: (user_c12n: string, c12n: string, c12nDef: ClassificationDefinition, enforce?: boolean, ignoreInvalid?: boolean) => boolean;
|
|
195
|
+
export {};
|