@cccsaurora/howler-ui 2.18.0-dev.682 → 2.18.0-dev.683

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (230) hide show
  1. package/api/index.d.ts +0 -2
  2. package/api/index.js +2 -4
  3. package/api/search/index.d.ts +1 -2
  4. package/api/search/index.js +1 -2
  5. package/commons/components/leftnav/LeftNavDrawer.js +1 -1
  6. package/components/app/App.js +7 -34
  7. package/components/app/hooks/useMatchers.js +2 -2
  8. package/components/app/hooks/useMatchers.test.js +22 -22
  9. package/components/app/hooks/useTitle.js +3 -3
  10. package/components/app/providers/FavouritesProvider.js +2 -2
  11. package/components/app/providers/HitProvider.d.ts +22 -0
  12. package/components/app/providers/{RecordProvider.js → HitProvider.js} +41 -41
  13. package/components/app/providers/{RecordSearchProvider.d.ts → HitSearchProvider.d.ts} +6 -6
  14. package/components/app/providers/{RecordSearchProvider.js → HitSearchProvider.js} +17 -12
  15. package/components/app/providers/{RecordSearchProvider.test.js → HitSearchProvider.test.js} +70 -51
  16. package/components/app/providers/ParameterProvider.d.ts +2 -9
  17. package/components/app/providers/ParameterProvider.js +240 -165
  18. package/components/app/providers/ParameterProvider.test.js +14 -307
  19. package/components/elements/PluginTypography.d.ts +1 -2
  20. package/components/elements/PluginTypography.js +2 -3
  21. package/components/elements/UserList.d.ts +2 -5
  22. package/components/elements/UserList.js +5 -14
  23. package/components/elements/addons/search/phrase/Phrase.js +1 -1
  24. package/components/elements/display/ChipPopper.d.ts +1 -1
  25. package/components/elements/display/HowlerCard.js +1 -1
  26. package/components/elements/display/Modal.js +0 -1
  27. package/components/elements/display/icons/BundleButton.d.ts +6 -0
  28. package/components/elements/display/icons/BundleButton.js +32 -0
  29. package/components/elements/hit/HitActions.js +4 -4
  30. package/components/elements/hit/HitBanner.js +48 -28
  31. package/components/elements/hit/HitCard.js +5 -5
  32. package/components/elements/{record/RecordComments.d.ts → hit/HitComments.d.ts} +4 -5
  33. package/components/elements/{record/RecordComments.js → hit/HitComments.js} +28 -29
  34. package/components/elements/{ObjectDetails.js → hit/HitDetails.js} +17 -17
  35. package/components/elements/hit/HitLabels.js +2 -2
  36. package/components/elements/hit/{HitPreview.d.ts → HitQuickSearch.d.ts} +3 -3
  37. package/components/elements/hit/{HitPreview.js → HitQuickSearch.js} +4 -10
  38. package/components/elements/hit/HitRelated.d.ts +6 -0
  39. package/components/elements/hit/HitRelated.js +7 -0
  40. package/components/elements/hit/HitSummary.d.ts +1 -2
  41. package/components/elements/hit/HitSummary.js +5 -6
  42. package/components/elements/{record/RecordWorklog.d.ts → hit/HitWorklog.d.ts} +3 -4
  43. package/components/elements/{record/RecordWorklog.js → hit/HitWorklog.js} +13 -15
  44. package/components/elements/hit/aggregate/HitGraph.js +8 -8
  45. package/components/elements/hit/outlines/DefaultOutline.js +1 -1
  46. package/components/elements/view/ViewTitle.js +1 -1
  47. package/components/hooks/useHitActions.d.ts +1 -1
  48. package/components/hooks/useHitActions.js +4 -4
  49. package/components/hooks/{useRecordSelection.d.ts → useHitSelection.d.ts} +2 -2
  50. package/components/hooks/{useRecordSelection.js → useHitSelection.js} +33 -12
  51. package/components/hooks/useMyPreferences.js +1 -10
  52. package/components/hooks/useMySearch.js +2 -2
  53. package/components/hooks/useMySitemap.js +1 -4
  54. package/components/hooks/useMyTheme.js +2 -9
  55. package/components/hooks/useParamState.test.js +4 -3
  56. package/components/routes/action/edit/ActionEditor.js +2 -2
  57. package/components/routes/action/view/ActionSearch.js +1 -1
  58. package/components/routes/advanced/QueryBuilder.js +1 -1
  59. package/components/routes/advanced/QueryEditor.js +3 -3
  60. package/components/routes/advanced/historyCompletionProvider.js +3 -3
  61. package/components/routes/analytics/AnalyticDetails.js +2 -2
  62. package/components/routes/analytics/AnalyticSearch.js +1 -1
  63. package/components/routes/dossiers/DossierEditor.js +2 -2
  64. package/components/routes/dossiers/DossierEditor.test.js +1 -1
  65. package/components/routes/help/ApiDocumentation.js +1 -1
  66. package/components/routes/help/BundleDocumentation.d.ts +3 -0
  67. package/components/routes/help/BundleDocumentation.js +12 -0
  68. package/components/routes/help/HitBannerDocumentation.js +0 -1
  69. package/components/routes/help/HitDocumentation.js +3 -1
  70. package/components/routes/help/markdown/en/bundles.md.js +1 -0
  71. package/components/routes/help/markdown/fr/bundles.md.js +1 -0
  72. package/components/routes/hits/search/BundleParentMenu.d.ts +6 -0
  73. package/components/routes/hits/search/BundleParentMenu.js +32 -0
  74. package/components/routes/hits/search/BundleScroller.d.ts +2 -0
  75. package/components/routes/hits/search/BundleScroller.js +6 -0
  76. package/components/routes/hits/search/{RecordBrowser.js → HitBrowser.js} +9 -9
  77. package/components/{elements/record/RecordContextMenu.d.ts → routes/hits/search/HitContextMenu.d.ts} +3 -3
  78. package/components/routes/hits/search/HitContextMenu.js +227 -0
  79. package/components/{elements/record/RecordContextMenu.test.js → routes/hits/search/HitContextMenu.test.js} +39 -39
  80. package/components/routes/hits/search/{RecordQuery.d.ts → HitQuery.d.ts} +2 -2
  81. package/components/routes/hits/search/{RecordQuery.js → HitQuery.js} +6 -6
  82. package/components/routes/hits/search/InformationPane.d.ts +0 -1
  83. package/components/routes/hits/search/InformationPane.js +60 -47
  84. package/components/routes/hits/search/LayoutSettings.js +3 -3
  85. package/components/routes/hits/search/QuerySettings.js +1 -2
  86. package/components/routes/hits/search/QuerySettings.test.js +9 -14
  87. package/components/routes/hits/search/SearchPane.js +49 -26
  88. package/components/routes/hits/search/ViewLink.js +3 -3
  89. package/components/routes/hits/search/ViewLink.test.js +8 -8
  90. package/components/routes/hits/search/grid/AddColumnModal.js +4 -5
  91. package/components/routes/hits/search/grid/EnhancedCell.d.ts +1 -2
  92. package/components/routes/hits/search/grid/EnhancedCell.js +2 -2
  93. package/components/routes/hits/search/grid/HitGrid.js +18 -20
  94. package/components/routes/hits/search/grid/{RecordRow.d.ts → HitRow.d.ts} +2 -3
  95. package/components/routes/hits/search/grid/{RecordRow.js → HitRow.js} +8 -10
  96. package/components/routes/hits/view/HitViewer.js +13 -12
  97. package/components/routes/home/ViewCard.js +4 -4
  98. package/components/{elements/MarkdownEditor.js → routes/overviews/OverviewEditor.js} +3 -3
  99. package/components/routes/overviews/OverviewViewer.js +2 -2
  100. package/components/routes/views/ViewComposer.js +4 -4
  101. package/locales/en/translation.json +3 -65
  102. package/locales/fr/translation.json +3 -63
  103. package/models/WithMetadata.d.ts +1 -2
  104. package/models/entities/generated/{ThreatEnrichment.d.ts → Enrichment.d.ts} +1 -1
  105. package/models/entities/generated/Hit.d.ts +0 -1
  106. package/models/entities/generated/Howler.d.ts +4 -0
  107. package/models/entities/generated/Rule.d.ts +10 -2
  108. package/models/entities/generated/Threat.d.ts +2 -2
  109. package/package.json +2 -19
  110. package/plugins/clue/components/ClueTypography.js +2 -2
  111. package/plugins/clue/utils.d.ts +1 -2
  112. package/tests/utils.d.ts +0 -2
  113. package/tests/utils.js +0 -8
  114. package/utils/constants.d.ts +3 -3
  115. package/utils/hitFunctions.d.ts +1 -2
  116. package/utils/hitFunctions.js +4 -4
  117. package/api/search/case.d.ts +0 -4
  118. package/api/search/case.js +0 -8
  119. package/api/v2/case/index.d.ts +0 -6
  120. package/api/v2/case/index.js +0 -18
  121. package/api/v2/index.d.ts +0 -4
  122. package/api/v2/index.js +0 -6
  123. package/api/v2/search/facet.d.ts +0 -3
  124. package/api/v2/search/facet.js +0 -12
  125. package/api/v2/search/index.d.ts +0 -5
  126. package/api/v2/search/index.js +0 -24
  127. package/components/app/providers/RecordProvider.d.ts +0 -23
  128. package/components/elements/ContextMenu.d.ts +0 -56
  129. package/components/elements/ContextMenu.js +0 -109
  130. package/components/elements/ContextMenu.test.js +0 -215
  131. package/components/elements/ObjectDetails.d.ts +0 -6
  132. package/components/elements/case/CaseCard.d.ts +0 -8
  133. package/components/elements/case/CaseCard.js +0 -39
  134. package/components/elements/case/CasePreview.d.ts +0 -6
  135. package/components/elements/case/CasePreview.js +0 -17
  136. package/components/elements/case/StatusIcon.d.ts +0 -5
  137. package/components/elements/case/StatusIcon.js +0 -13
  138. package/components/elements/hit/elements/AnalyticLink.d.ts +0 -8
  139. package/components/elements/hit/elements/AnalyticLink.js +0 -22
  140. package/components/elements/hit/related/RelatedRecords.js +0 -63
  141. package/components/elements/observable/ObservableCard.d.ts +0 -6
  142. package/components/elements/observable/ObservableCard.js +0 -23
  143. package/components/elements/observable/ObservablePreview.d.ts +0 -6
  144. package/components/elements/observable/ObservablePreview.js +0 -12
  145. package/components/elements/record/RecordContextMenu.js +0 -235
  146. package/components/elements/record/RecordContextMenu.test.d.ts +0 -1
  147. package/components/elements/record/RecordRelated.d.ts +0 -7
  148. package/components/elements/record/RecordRelated.js +0 -34
  149. package/components/hooks/useRelatedRecords.d.ts +0 -13
  150. package/components/hooks/useRelatedRecords.js +0 -32
  151. package/components/routes/cases/CaseViewer.d.ts +0 -2
  152. package/components/routes/cases/CaseViewer.js +0 -22
  153. package/components/routes/cases/Cases.d.ts +0 -2
  154. package/components/routes/cases/Cases.js +0 -101
  155. package/components/routes/cases/constants.d.ts +0 -5
  156. package/components/routes/cases/constants.js +0 -5
  157. package/components/routes/cases/detail/AlertPanel.d.ts +0 -6
  158. package/components/routes/cases/detail/AlertPanel.js +0 -33
  159. package/components/routes/cases/detail/CaseAssets.d.ts +0 -12
  160. package/components/routes/cases/detail/CaseAssets.js +0 -101
  161. package/components/routes/cases/detail/CaseAssets.test.d.ts +0 -1
  162. package/components/routes/cases/detail/CaseAssets.test.js +0 -163
  163. package/components/routes/cases/detail/CaseDashboard.d.ts +0 -7
  164. package/components/routes/cases/detail/CaseDashboard.js +0 -51
  165. package/components/routes/cases/detail/CaseDetails.d.ts +0 -6
  166. package/components/routes/cases/detail/CaseDetails.js +0 -61
  167. package/components/routes/cases/detail/CaseOverview.d.ts +0 -7
  168. package/components/routes/cases/detail/CaseOverview.js +0 -43
  169. package/components/routes/cases/detail/CaseSidebar.d.ts +0 -6
  170. package/components/routes/cases/detail/CaseSidebar.js +0 -61
  171. package/components/routes/cases/detail/CaseTask.d.ts +0 -11
  172. package/components/routes/cases/detail/CaseTask.js +0 -57
  173. package/components/routes/cases/detail/ItemPage.d.ts +0 -6
  174. package/components/routes/cases/detail/ItemPage.js +0 -99
  175. package/components/routes/cases/detail/RelatedCasePanel.d.ts +0 -6
  176. package/components/routes/cases/detail/RelatedCasePanel.js +0 -31
  177. package/components/routes/cases/detail/TaskPanel.d.ts +0 -7
  178. package/components/routes/cases/detail/TaskPanel.js +0 -52
  179. package/components/routes/cases/detail/aggregates/CaseAggregate.d.ts +0 -12
  180. package/components/routes/cases/detail/aggregates/CaseAggregate.js +0 -19
  181. package/components/routes/cases/detail/aggregates/SourceAggregate.d.ts +0 -6
  182. package/components/routes/cases/detail/aggregates/SourceAggregate.js +0 -27
  183. package/components/routes/cases/detail/assets/Asset.d.ts +0 -14
  184. package/components/routes/cases/detail/assets/Asset.js +0 -12
  185. package/components/routes/cases/detail/assets/Asset.test.d.ts +0 -1
  186. package/components/routes/cases/detail/assets/Asset.test.js +0 -72
  187. package/components/routes/cases/detail/sidebar/CaseFolder.d.ts +0 -13
  188. package/components/routes/cases/detail/sidebar/CaseFolder.js +0 -131
  189. package/components/routes/cases/detail/sidebar/types.d.ts +0 -3
  190. package/components/routes/cases/detail/sidebar/utils.d.ts +0 -3
  191. package/components/routes/cases/detail/sidebar/utils.js +0 -25
  192. package/components/routes/cases/hooks/useCase.d.ts +0 -13
  193. package/components/routes/cases/hooks/useCase.js +0 -38
  194. package/components/routes/cases/modals/ResolveModal.d.ts +0 -7
  195. package/components/routes/cases/modals/ResolveModal.js +0 -59
  196. package/components/routes/hits/search/shared/IndexPicker.d.ts +0 -2
  197. package/components/routes/hits/search/shared/IndexPicker.js +0 -20
  198. package/components/routes/observables/ObservableViewer.d.ts +0 -7
  199. package/components/routes/observables/ObservableViewer.js +0 -27
  200. package/models/entities/generated/AttachmentsFile.d.ts +0 -12
  201. package/models/entities/generated/Case.d.ts +0 -28
  202. package/models/entities/generated/DestinationOriginal.d.ts +0 -19
  203. package/models/entities/generated/EmailAttachment.d.ts +0 -8
  204. package/models/entities/generated/EmailParent.d.ts +0 -19
  205. package/models/entities/generated/Enrichments.d.ts +0 -7
  206. package/models/entities/generated/EnrichmentsIndicator.d.ts +0 -21
  207. package/models/entities/generated/HttpResponse.d.ts +0 -11
  208. package/models/entities/generated/Item.d.ts +0 -9
  209. package/models/entities/generated/Observable.d.ts +0 -85
  210. package/models/entities/generated/ObservableCloud.d.ts +0 -20
  211. package/models/entities/generated/ObservableDestination.d.ts +0 -23
  212. package/models/entities/generated/ObservableEmail.d.ts +0 -30
  213. package/models/entities/generated/ObservableFile.d.ts +0 -36
  214. package/models/entities/generated/ObservableHowler.d.ts +0 -43
  215. package/models/entities/generated/ObservableHttp.d.ts +0 -11
  216. package/models/entities/generated/ObservableObserver.d.ts +0 -21
  217. package/models/entities/generated/ObservableOrganization.d.ts +0 -7
  218. package/models/entities/generated/ObservableProcess.d.ts +0 -34
  219. package/models/entities/generated/ObservableSource.d.ts +0 -23
  220. package/models/entities/generated/ObservableThreat.d.ts +0 -21
  221. package/models/entities/generated/ObservableTls.d.ts +0 -12
  222. package/models/entities/generated/ObserverIngress.d.ts +0 -9
  223. package/models/entities/generated/Task.d.ts +0 -10
  224. package/utils/typeUtils.d.ts +0 -7
  225. package/utils/typeUtils.js +0 -27
  226. /package/components/app/providers/{RecordSearchProvider.test.d.ts → HitSearchProvider.test.d.ts} +0 -0
  227. /package/components/elements/hit/{related/RelatedRecords.d.ts → HitDetails.d.ts} +0 -0
  228. /package/components/routes/hits/search/{RecordBrowser.d.ts → HitBrowser.d.ts} +0 -0
  229. /package/components/{elements/ContextMenu.test.d.ts → routes/hits/search/HitContextMenu.test.d.ts} +0 -0
  230. /package/components/{elements/MarkdownEditor.d.ts → routes/overviews/OverviewEditor.d.ts} +0 -0
@@ -4,22 +4,23 @@ import { Code, Comment, DataObject, History, LinkSharp, QueryStats, ViewAgenda }
4
4
  import { Badge, Box, CardContent, Collapse, IconButton, Skeleton, Stack, Tab, Tabs, Tooltip, useMediaQuery, useTheme } from '@mui/material';
5
5
  import PageCenter from '@cccsaurora/howler-ui/commons/components/pages/PageCenter';
6
6
  import useMatchers from '@cccsaurora/howler-ui/components/app/hooks/useMatchers';
7
- import { RecordContext } from '@cccsaurora/howler-ui/components/app/providers/RecordProvider';
7
+ import { HitContext } from '@cccsaurora/howler-ui/components/app/providers/HitProvider';
8
8
  import FlexOne from '@cccsaurora/howler-ui/components/elements/addons/layout/FlexOne';
9
9
  import HowlerCard from '@cccsaurora/howler-ui/components/elements/display/HowlerCard';
10
+ import BundleButton from '@cccsaurora/howler-ui/components/elements/display/icons/BundleButton';
10
11
  import SocketBadge from '@cccsaurora/howler-ui/components/elements/display/icons/SocketBadge';
11
12
  import JSONViewer from '@cccsaurora/howler-ui/components/elements/display/json/JSONViewer';
12
13
  import HitActions from '@cccsaurora/howler-ui/components/elements/hit/HitActions';
13
14
  import HitBanner from '@cccsaurora/howler-ui/components/elements/hit/HitBanner';
15
+ import HitComments from '@cccsaurora/howler-ui/components/elements/hit/HitComments';
16
+ import HitDetails from '@cccsaurora/howler-ui/components/elements/hit/HitDetails';
14
17
  import HitLabels from '@cccsaurora/howler-ui/components/elements/hit/HitLabels';
15
18
  import { HitLayout } from '@cccsaurora/howler-ui/components/elements/hit/HitLayout';
16
19
  import HitLinks from '@cccsaurora/howler-ui/components/elements/hit/HitLinks';
17
20
  import HitOutline from '@cccsaurora/howler-ui/components/elements/hit/HitOutline';
18
21
  import HitOverview from '@cccsaurora/howler-ui/components/elements/hit/HitOverview';
19
- import ObjectDetails from '@cccsaurora/howler-ui/components/elements/ObjectDetails';
20
- import RecordComments from '@cccsaurora/howler-ui/components/elements/record/RecordComments';
21
- import RecordRelated from '@cccsaurora/howler-ui/components/elements/record/RecordRelated';
22
- import RecordWorklog from '@cccsaurora/howler-ui/components/elements/record/RecordWorklog';
22
+ import HitRelated from '@cccsaurora/howler-ui/components/elements/hit/HitRelated';
23
+ import HitWorklog from '@cccsaurora/howler-ui/components/elements/hit/HitWorklog';
23
24
  import { useMyLocalStorageItem } from '@cccsaurora/howler-ui/components/hooks/useMyLocalStorage';
24
25
  import useMyUserList from '@cccsaurora/howler-ui/components/hooks/useMyUserList';
25
26
  import { useCallback, useEffect, useMemo, useState } from 'react';
@@ -43,8 +44,8 @@ const HitViewer = () => {
43
44
  const isUnderLg = useMediaQuery(theme.breakpoints.down('lg'));
44
45
  const [orientation, setOrientation] = useMyLocalStorageItem(StorageKey.VIEWER_ORIENTATION, Orientation.VERTICAL);
45
46
  const { getMatchingOverview, getMatchingDossiers, getMatchingAnalytic } = useMatchers();
46
- const getHit = useContextSelector(RecordContext, ctx => ctx.getRecord);
47
- const hit = useContextSelector(RecordContext, ctx => ctx.records[params.id]);
47
+ const getHit = useContextSelector(HitContext, ctx => ctx.getHit);
48
+ const hit = useContextSelector(HitContext, ctx => ctx.hits[params.id]);
48
49
  const [userIds, setUserIds] = useState(new Set());
49
50
  const users = useMyUserList(userIds);
50
51
  const [tab, setTab] = useState('details');
@@ -93,12 +94,12 @@ const HitViewer = () => {
93
94
  }
94
95
  return {
95
96
  overview: () => _jsx(HitOverview, { hit: hit }),
96
- details: () => _jsx(ObjectDetails, { obj: hit }),
97
- hit_comments: () => _jsx(RecordComments, { record: hit, users: users }),
97
+ details: () => _jsx(HitDetails, { hit: hit }),
98
+ hit_comments: () => _jsx(HitComments, { hit: hit, users: users }),
98
99
  hit_raw: () => _jsx(JSONViewer, { data: hit }),
99
100
  hit_data: () => _jsx(JSONViewer, { data: hit?.howler?.data?.map(entry => tryParse(entry)), collapse: false }),
100
- hit_worklog: () => _jsx(RecordWorklog, { record: hit, users: users }),
101
- hit_related: () => _jsx(RecordRelated, { record: hit }),
101
+ hit_worklog: () => _jsx(HitWorklog, { hit: hit, users: users }),
102
+ hit_related: () => _jsx(HitRelated, { hit: hit }),
102
103
  ...Object.fromEntries(hit?.howler.dossier?.map((lead, index) => ['lead:' + index, () => _jsx(LeadRenderer, { lead: lead, hit: hit })]) ?? []),
103
104
  ...Object.fromEntries(dossiers.flatMap((_dossier, dossierIndex) => (_dossier.leads ?? []).map((_lead, leadIndex) => [
104
105
  `external-lead:${dossierIndex}:${leadIndex}`,
@@ -131,7 +132,7 @@ const HitViewer = () => {
131
132
  position: 'absolute',
132
133
  top: theme.spacing(2),
133
134
  right: theme.spacing(-6)
134
- }, children: [_jsx(Tooltip, { title: t('hit.panel.view.layout'), children: _jsx(IconButton, { onClick: onOrientationChange, children: _jsx(ViewAgenda, { sx: { transition: 'rotate 250ms', rotate: orientation === 'vertical' ? '90deg' : '0deg' } }) }) }), _jsx(SocketBadge, { size: "medium" }), analytic && (_jsx(Tooltip, { title: t('analytic.open'), children: _jsx(IconButton, { onClick: () => navigate(`/analytics/${analytic.analytic_id}`), children: _jsx(QueryStats, {}) }) }))] }))] }), _jsx(HowlerCard, { sx: [orientation === 'horizontal' && { height: '0px' }], children: _jsx(CardContent, { sx: { padding: 1, position: 'relative' }, children: _jsx(HitActions, { hit: hit, orientation: "vertical" }) }) }), _jsx(Box, { sx: { gridColumn: '1 / span 2', mb: 1 }, children: _jsxs(Tabs, { value: tab === 'overview' && !hasOverview ? 'details' : tab, sx: { display: 'flex', flexDirection: 'row', pr: 2, alignItems: 'center' }, children: [hasOverview && (_jsx(Tab, { label: t('hit.viewer.overview'), value: "overview", onClick: () => setTab('overview') })), _jsx(Tab, { label: t('hit.viewer.details'), value: "details", onClick: () => setTab('details') }), hit?.howler.dossier?.map((lead, index) => (_jsx(Tab
135
+ }, children: [_jsx(Tooltip, { title: t('hit.panel.view.layout'), children: _jsx(IconButton, { onClick: onOrientationChange, children: _jsx(ViewAgenda, { sx: { transition: 'rotate 250ms', rotate: orientation === 'vertical' ? '90deg' : '0deg' } }) }) }), _jsx(SocketBadge, { size: "medium" }), analytic && (_jsx(Tooltip, { title: t('hit.panel.analytic.open'), children: _jsx(IconButton, { onClick: () => navigate(`/analytics/${analytic.analytic_id}`), children: _jsx(QueryStats, {}) }) })), hit?.howler.bundles?.length > 0 && _jsx(BundleButton, { ids: hit.howler.bundles })] }))] }), _jsx(HowlerCard, { sx: [orientation === 'horizontal' && { height: '0px' }], children: _jsx(CardContent, { sx: { padding: 1, position: 'relative' }, children: _jsx(HitActions, { hit: hit, orientation: "vertical" }) }) }), _jsx(Box, { sx: { gridColumn: '1 / span 2', mb: 1 }, children: _jsxs(Tabs, { value: tab === 'overview' && !hasOverview ? 'details' : tab, sx: { display: 'flex', flexDirection: 'row', pr: 2, alignItems: 'center' }, children: [hit?.howler?.is_bundle && (_jsx(Tab, { label: t('hit.viewer.aggregate'), value: "hit_aggregate", onClick: () => setTab('hit_aggregate') })), hasOverview && (_jsx(Tab, { label: t('hit.viewer.overview'), value: "overview", onClick: () => setTab('overview') })), _jsx(Tab, { label: t('hit.viewer.details'), value: "details", onClick: () => setTab('details') }), hit?.howler.dossier?.map((lead, index) => (_jsx(Tab
135
136
  // eslint-disable-next-line react/no-array-index-key
136
137
  , { label: _jsxs(Stack, { direction: "row", spacing: 0.5, children: [lead.icon && _jsx(Icon, { icon: lead.icon }), _jsx("span", { children: i18n.language === 'en' ? lead.label.en : lead.label.fr })] }), value: 'lead:' + index, onClick: () => setTab('lead:' + index) }, 'lead:' + index))), dossiers.flatMap((_dossier, dossierIndex) => (_dossier.leads ?? []).map((_lead, leadIndex) => (_jsx(Tab
137
138
  // eslint-disable-next-line react/no-array-index-key
@@ -3,12 +3,12 @@ import { OpenInNew } from '@mui/icons-material';
3
3
  import { Card, CardContent, IconButton, Skeleton, Stack, Typography } from '@mui/material';
4
4
  import api from '@cccsaurora/howler-ui/api';
5
5
  import AppListEmpty from '@cccsaurora/howler-ui/commons/components/display/AppListEmpty';
6
- import { useHitContextSelector } from '@cccsaurora/howler-ui/components/app/providers/RecordProvider';
6
+ import { useHitContextSelector } from '@cccsaurora/howler-ui/components/app/providers/HitProvider';
7
7
  import { ViewContext } from '@cccsaurora/howler-ui/components/app/providers/ViewProvider';
8
8
  import HitBanner from '@cccsaurora/howler-ui/components/elements/hit/HitBanner';
9
9
  import { HitLayout } from '@cccsaurora/howler-ui/components/elements/hit/HitLayout';
10
- import RecordContextMenu from '@cccsaurora/howler-ui/components/elements/record/RecordContextMenu';
11
10
  import useMyApi from '@cccsaurora/howler-ui/components/hooks/useMyApi';
11
+ import HitContextMenu from '@cccsaurora/howler-ui/components/routes/hits/search/HitContextMenu';
12
12
  import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
13
13
  import { useTranslation } from 'react-i18next';
14
14
  import { Link, useNavigate } from 'react-router-dom';
@@ -65,7 +65,7 @@ const ViewCard = ({ viewId, limit, refreshTick, onRefreshComplete }) => {
65
65
  const lastSignature = useRef('');
66
66
  const view = useContextSelector(ViewContext, ctx => ctx.views[viewId]);
67
67
  const fetchViews = useContextSelector(ViewContext, ctx => ctx.fetchViews);
68
- const loadHits = useHitContextSelector(ctx => ctx.loadRecords);
68
+ const loadHits = useHitContextSelector(ctx => ctx.loadHits);
69
69
  // Subscribe to hits from HitProvider cache based on current hitIds in the view
70
70
  // Uses memoized selector to avoid unnecessary re-renders on unrelated hit updates
71
71
  const hits = useSelectHitsByIds(hitIds);
@@ -151,6 +151,6 @@ const ViewCard = ({ viewId, limit, refreshTick, onRefreshComplete }) => {
151
151
  }
152
152
  return selectedElement.id;
153
153
  }, []);
154
- return (_jsx(Card, { variant: "outlined", sx: { height: '100%' }, children: _jsxs(Stack, { spacing: 1, sx: { p: 1, minHeight: 100 }, children: [_jsxs(Stack, { direction: "row", spacing: 1, alignItems: "center", children: [_jsx(Typography, { variant: "h6", children: t(view?.title) || _jsx(Skeleton, { variant: "text", height: "2em", width: "100px" }) }), _jsx(IconButton, { size: "small", component: Link, disabled: !view, to: view ? buildViewUrl(view) : '', onClick: () => onClick(view.query), children: _jsx(OpenInNew, { fontSize: "small" }) })] }), loading ? (_jsxs(_Fragment, { children: [_jsx(Skeleton, { height: 150, width: "100%", variant: "rounded" }), _jsx(Skeleton, { height: 160, width: "100%", variant: "rounded" }), _jsx(Skeleton, { height: 140, width: "100%", variant: "rounded" })] })) : hits.length > 0 ? (_jsx(RecordContextMenu, { getSelectedId: getSelectedId, children: hits.map(h => (_jsx(Card, { id: h.howler.id, variant: "outlined", sx: { cursor: 'pointer' }, onClick: () => navigate(`/hits/${h.howler.id}`), children: _jsx(CardContent, { children: _jsx(HitBanner, { layout: HitLayout.DENSE, hit: h }) }) }, h.howler.id))) })) : (_jsx(AppListEmpty, {}))] }) }));
154
+ return (_jsx(Card, { variant: "outlined", sx: { height: '100%' }, children: _jsxs(Stack, { spacing: 1, sx: { p: 1, minHeight: 100 }, children: [_jsxs(Stack, { direction: "row", spacing: 1, alignItems: "center", children: [_jsx(Typography, { variant: "h6", children: t(view?.title) || _jsx(Skeleton, { variant: "text", height: "2em", width: "100px" }) }), _jsx(IconButton, { size: "small", component: Link, disabled: !view, to: view ? buildViewUrl(view) : '', onClick: () => onClick(view.query), children: _jsx(OpenInNew, { fontSize: "small" }) })] }), loading ? (_jsxs(_Fragment, { children: [_jsx(Skeleton, { height: 150, width: "100%", variant: "rounded" }), _jsx(Skeleton, { height: 160, width: "100%", variant: "rounded" }), _jsx(Skeleton, { height: 140, width: "100%", variant: "rounded" })] })) : hits.length > 0 ? (_jsx(HitContextMenu, { getSelectedId: getSelectedId, children: hits.map(h => (_jsx(Card, { id: h.howler.id, variant: "outlined", sx: { cursor: 'pointer' }, onClick: () => navigate((h.howler.is_bundle ? '/bundles/' : '/hits/') + h.howler.id), children: _jsx(CardContent, { children: _jsx(HitBanner, { layout: HitLayout.DENSE, hit: h }) }) }, h.howler.id))) })) : (_jsx(AppListEmpty, {}))] }) }));
155
155
  };
156
156
  export default ViewCard;
@@ -4,8 +4,8 @@ import { useTheme } from '@mui/material';
4
4
  import { ApiConfigContext } from '@cccsaurora/howler-ui/components/app/providers/ApiConfigProvider';
5
5
  import ThemedEditor from '@cccsaurora/howler-ui/components/elements/ThemedEditor';
6
6
  import { memo, useCallback, useContext, useEffect, useMemo } from 'react';
7
- import { conf, language } from '../routes/overviews/markdownExtendedTokenProvider';
8
- const MarkdownEditor = ({ content, setContent, onMount, fontSize = 16, height = '100%', width = '100%', editorOptions = {} }) => {
7
+ import { conf, language } from './markdownExtendedTokenProvider';
8
+ const OverviewEditor = ({ content, setContent, onMount, fontSize = 16, height = '100%', width = '100%', editorOptions = {} }) => {
9
9
  const theme = useTheme();
10
10
  const monaco = useMonaco();
11
11
  const { config } = useContext(ApiConfigContext);
@@ -53,4 +53,4 @@ const MarkdownEditor = ({ content, setContent, onMount, fontSize = 16, height =
53
53
  }), [fontSize, editorOptions]);
54
54
  return (_jsx(ThemedEditor, { height: height, width: width, theme: theme.palette.mode === 'light' ? 'howler' : 'howler-dark', value: content, onChange: value => setContent(value), beforeMount: beforeEditorMount, onMount: onMount, options: options }));
55
55
  };
56
- export default memo(MarkdownEditor);
56
+ export default memo(OverviewEditor);
@@ -15,7 +15,7 @@ import useMyTheme from '@cccsaurora/howler-ui/components/hooks/useMyTheme';
15
15
  import { useSearchParams } from 'react-router-dom';
16
16
  import hitsData from '@cccsaurora/howler-ui/utils/hit.json';
17
17
  import { sanitizeLuceneQuery } from '@cccsaurora/howler-ui/utils/stringUtils';
18
- import MarkdownEditor from '../../elements/MarkdownEditor';
18
+ import OverviewEditor from './OverviewEditor';
19
19
  import { useStartingTemplate } from './startingTemplate';
20
20
  const OverviewViewer = () => {
21
21
  const theme = useTheme();
@@ -188,7 +188,7 @@ const OverviewViewer = () => {
188
188
  right: `calc(50% + 7px - ${x}px)`,
189
189
  mr: -2.4,
190
190
  pr: 1.5
191
- }, children: _jsx(MarkdownEditor, { height: "100%", content: content, setContent: setContent }) }) }), _jsx(Box, { sx: {
191
+ }, children: _jsx(OverviewEditor, { height: "100%", content: content, setContent: setContent }) }) }), _jsx(Box, { sx: {
192
192
  position: 'absolute',
193
193
  top: 0,
194
194
  bottom: 0,
@@ -6,8 +6,8 @@ import { Alert, Checkbox, CircularProgress, LinearProgress, Stack, TextField, To
6
6
  import api from '@cccsaurora/howler-ui/api';
7
7
  import AppListEmpty from '@cccsaurora/howler-ui/commons/components/display/AppListEmpty';
8
8
  import PageCenter from '@cccsaurora/howler-ui/commons/components/pages/PageCenter';
9
+ import { HitContext } from '@cccsaurora/howler-ui/components/app/providers/HitProvider';
9
10
  import { ParameterContext } from '@cccsaurora/howler-ui/components/app/providers/ParameterProvider';
10
- import { RecordContext } from '@cccsaurora/howler-ui/components/app/providers/RecordProvider';
11
11
  import { ViewContext } from '@cccsaurora/howler-ui/components/app/providers/ViewProvider';
12
12
  import CustomButton from '@cccsaurora/howler-ui/components/elements/addons/buttons/CustomButton';
13
13
  import FlexPort from '@cccsaurora/howler-ui/components/elements/addons/layout/FlexPort';
@@ -26,7 +26,7 @@ import { DEFAULT_QUERY, StorageKey } from '@cccsaurora/howler-ui/utils/constants
26
26
  import { convertDateToLucene } from '@cccsaurora/howler-ui/utils/utils';
27
27
  import { buildViewUrl } from '@cccsaurora/howler-ui/utils/viewUtils';
28
28
  import ErrorBoundary from '../ErrorBoundary';
29
- import RecordQuery from '../hits/search/RecordQuery';
29
+ import HitQuery from '../hits/search/HitQuery';
30
30
  import HitSort from '../hits/search/shared/HitSort';
31
31
  import SearchSpan from '../hits/search/shared/SearchSpan';
32
32
  const ViewComposer = () => {
@@ -39,7 +39,7 @@ const ViewComposer = () => {
39
39
  const editView = useContextSelector(ViewContext, ctx => ctx.editView);
40
40
  const getCurrentViews = useContextSelector(ViewContext, ctx => ctx.getCurrentViews);
41
41
  const pageCount = useMyLocalStorageItem(StorageKey.PAGE_COUNT, 25)[0];
42
- const loadHits = useContextSelector(RecordContext, ctx => ctx.loadRecords);
42
+ const loadHits = useContextSelector(HitContext, ctx => ctx.loadHits);
43
43
  // view state
44
44
  const [title, setTitle] = useState('');
45
45
  const [type, setType] = useState('global');
@@ -172,6 +172,6 @@ const ViewComposer = () => {
172
172
  fontSize: '0.9em',
173
173
  fontStyle: 'italic',
174
174
  mb: 0.5
175
- }), variant: "body2", children: t('hit.search.prompt') }), _jsx(RecordQuery, { triggerSearch: search, searching: searching, onChange: (_query, isDirty) => setIsSearchDirty(isDirty) }), _jsxs(Stack, { direction: "row", spacing: 1, children: [_jsx(HitSort, {}), _jsx(SearchSpan, { omitCustom: true }), _jsx("div", { style: { flex: 1 } }), _jsxs(Stack, { spacing: 1, direction: "row", alignItems: "center", sx: { flex: '0 !important', minWidth: '300px' }, children: [_jsx(Typography, { component: "span", children: t('view.settings.advance_on_triage') }), _jsx(Tooltip, { title: t('view.settings.advance_on_triage.description'), children: _jsx(HelpOutline, { sx: { fontSize: '16px' } }) }), _jsx(Checkbox, { size: "small", checked: advanceOnTriage, onChange: (_event, checked) => setAdvanceOnTriage(checked) })] })] }), response?.total ? (_jsx(SearchTotal, { total: response.total, pageLength: response.items.length, offset: response.offset, sx: theme => ({ color: theme.palette.text.secondary, fontSize: '0.9em', fontStyle: 'italic' }) })) : null, _jsx(LinearProgress, { sx: [!searching && { opacity: 0 }] })] }) }), _jsx(VSBoxContent, { children: _jsxs(Stack, { spacing: 1, children: [!response?.total && _jsx(AppListEmpty, {}), response?.items.map(hit => (_jsx(HitCard, { id: hit.howler.id, layout: HitLayout.DENSE }, hit.howler.id)))] }) })] }) }) }) }));
175
+ }), variant: "body2", children: t('hit.search.prompt') }), _jsx(HitQuery, { triggerSearch: search, searching: searching, onChange: (_query, isDirty) => setIsSearchDirty(isDirty) }), _jsxs(Stack, { direction: "row", spacing: 1, children: [_jsx(HitSort, {}), _jsx(SearchSpan, { omitCustom: true }), _jsx("div", { style: { flex: 1 } }), _jsxs(Stack, { spacing: 1, direction: "row", alignItems: "center", sx: { flex: '0 !important', minWidth: '300px' }, children: [_jsx(Typography, { component: "span", children: t('view.settings.advance_on_triage') }), _jsx(Tooltip, { title: t('view.settings.advance_on_triage.description'), children: _jsx(HelpOutline, { sx: { fontSize: '16px' } }) }), _jsx(Checkbox, { size: "small", checked: advanceOnTriage, onChange: (_event, checked) => setAdvanceOnTriage(checked) })] })] }), response?.total ? (_jsx(SearchTotal, { total: response.total, pageLength: response.items.length, offset: response.offset, sx: theme => ({ color: theme.palette.text.secondary, fontSize: '0.9em', fontStyle: 'italic' }) })) : null, _jsx(LinearProgress, { sx: [!searching && { opacity: 0 }] })] }) }), _jsx(VSBoxContent, { children: _jsxs(Stack, { spacing: 1, children: [!response?.total && _jsx(AppListEmpty, {}), response?.items.map(hit => (_jsx(HitCard, { id: hit.howler.id, layout: HitLayout.DENSE }, hit.howler.id)))] }) })] }) }) }) }));
176
176
  };
177
177
  export default ViewComposer;
@@ -1,7 +1,5 @@
1
1
  {
2
2
  "*": "All values",
3
- "Protected B": "Protected B",
4
- "Unclassified//Official Use Only": "Unclassified//Official Use Only",
5
3
  "actions.running": "Action \"{{action}}\" is executing.",
6
4
  "actions.succeeded": "Action \"{{action}}\" completed successfully.",
7
5
  "add": "Add",
@@ -13,7 +11,6 @@
13
11
  "analytic.notebook.error.minFields": "Name and link are required.",
14
12
  "analytic.notebook.link": "Link",
15
13
  "analytic.notebook.name": "Name",
16
- "analytic.open": "Open Analytic",
17
14
  "any": "Any",
18
15
  "api.user.apikey.removed": "API key removed successfully.",
19
16
  "api.user.apikey.updated": "New API key added successfully.",
@@ -82,8 +79,6 @@
82
79
  "comments.edit.stop": "Stop Editing",
83
80
  "comments.edited": "Edited",
84
81
  "comments.quote": "Quote Reply",
85
- "complete": "Complete",
86
- "crisis": "Crisis",
87
82
  "custom": "Custom",
88
83
  "date.range.1.day": "The last day",
89
84
  "date.range.1.month": "The last month",
@@ -109,11 +104,8 @@
109
104
  "drawer.expand": "Expand Menu",
110
105
  "duplicates.omitted": "Some duplicate entries have been omitted.",
111
106
  "edit": "Edit",
112
- "event.module": "Event Module",
113
- "event.type": "Event Type",
114
107
  "features.warning.description": "This feature is undergoing active development, and is not yet in a finished state. You may encounter bugs or instability.",
115
108
  "features.warning.title": "Feature In Active Development",
116
- "focus": "Main focus",
117
109
  "global": "Global",
118
110
  "help.actions.introduction": "Introduction to Actions",
119
111
  "help.hit.banner.description": "See the below hit banner example for the hit keys necessary to properly populate it. If you have any additional questions, ask in the HOWLER support channel.",
@@ -170,20 +162,16 @@
170
162
  "hit.header.assignment": "Assignment: {{user}}",
171
163
  "hit.header.assignment.add": "Assign to a user",
172
164
  "hit.header.assignment.change": "Change assignment",
165
+ "hit.header.bundlesize": "{{hits}} hits",
173
166
  "hit.header.escalation": "Escalation Level: ",
174
167
  "hit.header.indicators": "Indicators",
175
168
  "hit.header.rationale": "Rationale",
176
- "hit.header.related": "{{count}} related records",
177
169
  "hit.header.scrutiny": "Scrutiny: ",
178
170
  "hit.header.status": "Status: ",
179
171
  "hit.header.summary": "Summary",
180
172
  "hit.header.target": "Target",
181
173
  "hit.header.threat": "Threat",
182
- "hit.header.view.case": "View case {{id}}",
183
- "hit.header.view.hit": "View hit {{id}}",
184
- "hit.header.view.observable": "View observable {{id}}",
185
174
  "hit.header.votes": "Votes: ",
186
- "hit.howler.related": "{{count}} related records",
187
175
  "hit.label": "Labels",
188
176
  "hit.label.category.assignments": "Category: Assignments - Specifies what analyst or team of analysts is assigned to triaging this hit.",
189
177
  "hit.label.category.campaign": "Catergory: Campaign - Identifies ongoing campaigns from specific malware families or phishing initiatives. They should only be considered correct attributions if the hit is promoted to evidence.",
@@ -199,16 +187,15 @@
199
187
  "hit.label.edit.add.error.duplicate": "Duplicated label not allowed",
200
188
  "hit.label.edit.add.error.empty": "Can't add an empty label",
201
189
  "hit.label.edit.add.label": "New label value",
202
- "hit.label.edit.desc": "Add or remove labels",
203
190
  "hit.notebook.confirm.dialog": "A notebook with that name already exists in your environment, do you wish to overwrite it?",
204
191
  "hit.notebook.confirm.title": "Overwrite existing notebook?",
205
192
  "hit.notebook.error.failToPost": "Failed to send notebook to Jupyterhub, make sure your user environment is running.",
206
193
  "hit.notebook.goTo": "Go to Jupyterhub",
207
194
  "hit.notebook.select": "Please Select a notebook",
208
195
  "hit.notebook.tooltip": "Open in Jupyterhub",
209
- "hit.open": "Open Hit",
210
196
  "hit.overview.missing": "No overview has been created for this hit. In order to create an overview, press the add button to the right.",
211
197
  "hit.panel.aggregation.run": "Create Summary",
198
+ "hit.panel.analytic.open": "Open Analytic",
212
199
  "hit.panel.bundles.open": "Parent Bundles",
213
200
  "hit.panel.bundles.open.prompt": "Open Parent Bundle",
214
201
  "hit.panel.close": "Close",
@@ -221,12 +208,9 @@
221
208
  "hit.panel.exclude": "Exclude By",
222
209
  "hit.panel.hit.noselection": "No hit has been selected",
223
210
  "hit.panel.include": "Include By",
211
+ "hit.panel.open": "Open Hit Viewer",
224
212
  "hit.panel.view.layout": "Change View Panel",
225
213
  "hit.quicksearch": "Search by assignment, analytic, detection or status",
226
- "hit.related.tab.case": "Cases",
227
- "hit.related.tab.hit": "Hits",
228
- "hit.related.tab.links": "Links",
229
- "hit.related.tab.observable": "Observables",
230
214
  "hit.search.aggregate.button": "Create Summary",
231
215
  "hit.search.button": "Perform search",
232
216
  "hit.search.custom": "Custom Sort",
@@ -235,8 +219,6 @@
235
219
  "hit.search.filter.fields": "Fields",
236
220
  "hit.search.filter.label": "Lookup Filters",
237
221
  "hit.search.filter.values": "Values",
238
- "hit.search.index.hit": "Hits",
239
- "hit.search.index.observable": "Observables",
240
222
  "hit.search.invalid": "Invalid Query",
241
223
  "hit.search.keyboard": "Keyboard shortcuts",
242
224
  "hit.search.keyboard.no_shortcuts": "No shortcuts",
@@ -274,7 +256,6 @@
274
256
  "hit.summary.subtitle": "Limited to a maximum of 10 000 hits.",
275
257
  "hit.summary.title": "Summary of Hits Over Time",
276
258
  "hit.summary.zoom.reset": "Reset Zoom",
277
- "hit.view.overview": "Overview",
278
259
  "hit.viewer.aggregate": "Summary",
279
260
  "hit.viewer.comments": "Comments",
280
261
  "hit.viewer.data": "Raw Data",
@@ -310,8 +291,6 @@
310
291
  "modal.action.empty": "Action Name cannot be empty.",
311
292
  "modal.action.label": "Action Name",
312
293
  "modal.action.title": "Save Action",
313
- "modal.cases.resolve": "Resolve Case",
314
- "modal.cases.resolve.description": "When resolving a case, you must either assess all open alerts, or add an assessment to the alerts.",
315
294
  "modal.confirm.delete.description": "Are you sure you want to delete this item?",
316
295
  "modal.confirm.delete.title": "Confirm Deletion",
317
296
  "modal.rationale.description": "Provide a rationale that succinctly explains to other analysts why you are confident in this assessment.",
@@ -333,8 +312,6 @@
333
312
  "modal.rule.title": "Create a New Rule",
334
313
  "no.data": "No Data",
335
314
  "none": "None",
336
- "normal": "Normal Priority",
337
- "observable.open": "Open Observable",
338
315
  "on": "on",
339
316
  "open": "Open",
340
317
  "operations.add_label": "Add Label",
@@ -354,33 +331,6 @@
354
331
  "owner": "Owner",
355
332
  "page.404.description": "The page you are looking for cannot be found...",
356
333
  "page.404.title": "404: Not found",
357
- "page.cases.assets": "Assets",
358
- "page.cases.assets.empty": "No assets found.",
359
- "page.cases.assets.filter_by_type": "Filter by type:",
360
- "page.cases.assets.seen_in": "Seen in",
361
- "page.cases.assets.type.hash": "Hash",
362
- "page.cases.assets.type.hosts": "Host",
363
- "page.cases.assets.type.id": "ID",
364
- "page.cases.assets.type.ids": "ID",
365
- "page.cases.assets.type.ip": "IP",
366
- "page.cases.assets.type.signature": "Signature",
367
- "page.cases.assets.type.uri": "URI",
368
- "page.cases.assets.type.user": "User",
369
- "page.cases.created": "Created",
370
- "page.cases.dashboard": "Dashboard",
371
- "page.cases.dashboard.alerts": "Alerts",
372
- "page.cases.dashboard.cases": "Related Cases",
373
- "page.cases.dashboard.duration": "Duration",
374
- "page.cases.dashboard.indicators": "Indicators",
375
- "page.cases.dashboard.target": "Targets",
376
- "page.cases.dashboard.tasks": "Tasks",
377
- "page.cases.dashboard.threat": "Threats",
378
- "page.cases.detail.participants": "Participants",
379
- "page.cases.detail.properties": "Properties",
380
- "page.cases.detail.status": "Status",
381
- "page.cases.escalation": "Escalation",
382
- "page.cases.sources": "Sources",
383
- "page.cases.updated": "Updated",
384
334
  "page.dashboard.settings.edit": "Edit Dashboard",
385
335
  "page.dashboard.settings.refreshRate": "Refresh Rate",
386
336
  "page.dashboard.title": "Dashboard",
@@ -405,7 +355,6 @@
405
355
  "page.help": "Help",
406
356
  "page.help.title": "Help Dashboard",
407
357
  "page.login.button": "Sign in",
408
- "page.login.error": "Just type anything in the username and password fields...",
409
358
  "page.login.password": "Password",
410
359
  "page.login.username": "Username",
411
360
  "page.logout": "Logging out current user ... ",
@@ -452,8 +401,6 @@
452
401
  "page.user.search.column.groups": "Groups",
453
402
  "page.user.search.column.username": "Username",
454
403
  "page.user.search.prompt": "Search by username, fullname, email or group",
455
- "pages.cases.detail.participants": "Participants",
456
- "pages.cases.detail.status": "Status",
457
404
  "password": "New Password",
458
405
  "password.confirm": "Confirm Password",
459
406
  "password.match": "Password and Confirm Password must match",
@@ -467,7 +414,6 @@
467
414
  "personalization.showbreadcrumbs": "Show Breadcrumbs",
468
415
  "personalization.sticky": "Sticky Topbar",
469
416
  "query": "Query",
470
- "query.invalid": "Invalid query",
471
417
  "quicksearch.aria": "search",
472
418
  "quicksearch.placeholder": "Search ...",
473
419
  "rationale.default": "Hit assessed as {{assessment}}",
@@ -583,11 +529,6 @@
583
529
  "route.analytics.triage.title": "Triage Settings",
584
530
  "route.analytics.updated": "Analytic Updated!",
585
531
  "route.analytics.view": "View Analytic",
586
- "route.cases": "Cases",
587
- "route.cases.create": "Create Case",
588
- "route.cases.manager.search": "Search Cases",
589
- "route.cases.search.prompt": "Search Cases via title, summary or indicators",
590
- "route.cases.view": "View Case",
591
532
  "route.clear": "Clear query",
592
533
  "route.dossiers": "Dossiers",
593
534
  "route.dossiers.create": "New Dossier",
@@ -650,10 +591,8 @@
650
591
  "route.help.actions": "Action Documentation",
651
592
  "route.help.api": "API Documentation",
652
593
  "route.help.auth": "Authentication",
653
- "route.help.bundles": "Hit Bundles",
654
594
  "route.help.client": "Howler Client",
655
595
  "route.help.hit": "Hit Documentation",
656
- "route.help.hit.banner": "Hit Banner Documentation",
657
596
  "route.help.main": "Dashboard",
658
597
  "route.help.notebook": "Notebook Documentation",
659
598
  "route.help.overviews": "Overviews",
@@ -766,7 +705,6 @@
766
705
  "search.result.showing": "Showing {{offset}} to {{length}} of {{total}} results",
767
706
  "search.result.showing.single": "No results",
768
707
  "search.total": "There are a total of {{count}} hits matching this query.",
769
- "started": "Started",
770
708
  "templates.edit.analytic": "Edit analytic template",
771
709
  "templates.edit.detection": "Edit detection template",
772
710
  "to": "to",
@@ -13,7 +13,6 @@
13
13
  "analytic.notebook.error.minFields": "Nom et lien requis.",
14
14
  "analytic.notebook.link": "Lien",
15
15
  "analytic.notebook.name": "Nom",
16
- "analytic.open": "Ouvrir l'analyse",
17
16
  "any": "Tous",
18
17
  "api.user.apikey.removed": "Clé API supprimée avec succès",
19
18
  "api.user.apikey.updated": "Nouvelle clé API ajoutée avec succès.",
@@ -82,8 +81,6 @@
82
81
  "comments.edit.stop": "Arrêter Modification",
83
82
  "comments.edited": "Modifié",
84
83
  "comments.quote": "Citation Réponse",
85
- "complete": "Terminé",
86
- "crisis": "Crise",
87
84
  "custom": "Personnalisé",
88
85
  "date.range.1.day": "Dernier jour",
89
86
  "date.range.1.month": "Le dernier mois",
@@ -109,11 +106,8 @@
109
106
  "drawer.expand": "Ouvrir le Menu",
110
107
  "duplicates.omitted": "Certains doublons ont été omis.",
111
108
  "edit": "Modifier",
112
- "event.module": "Module d'événement",
113
- "event.type": "Type d'événement",
114
109
  "features.warning.description": "Cette fonctionnalité fait l'objet d'un développement actif et n'est pas encore achevée. Il est possible que vous rencontriez des problèmes ou de l'instabilité.",
115
110
  "features.warning.title": "Fonctionnalité en développement actif",
116
- "focus": "Focus principal",
117
111
  "global": "Global",
118
112
  "help.actions.introduction": "Introduction aux actions",
119
113
  "help.hit.banner.description": "Voir l'exemple d'en-tête de résultat ci-dessous pour connaître les clés de résultat nécessaires pour le remplir correctement. Si vous avez d'autres questions, posez-les dans le réseau d'assistance HOWLER.",
@@ -170,20 +164,16 @@
170
164
  "hit.header.assignment": "Affectation: {{user}}",
171
165
  "hit.header.assignment.add": "Attribuer à un utilisateur",
172
166
  "hit.header.assignment.change": "Changer l'affectation",
167
+ "hit.header.bundlesize": "{{hits}} hits",
173
168
  "hit.header.escalation": "Niveau d'escalade: ",
174
169
  "hit.header.indicators": "Indicateurs",
175
170
  "hit.header.rationale": "Justification",
176
- "hit.header.related": "{{count}} documrents associés",
177
171
  "hit.header.scrutiny": "Examen minutieux: ",
178
172
  "hit.header.status": "Statut: ",
179
173
  "hit.header.summary": "Résumé",
180
174
  "hit.header.target": "Cible",
181
175
  "hit.header.threat": "Menace",
182
- "hit.header.view.case": "Voir le cas {{id}}",
183
- "hit.header.view.hit": "Voir l'alerte {{id}}",
184
- "hit.header.view.observable": "Voir l'observable {{id}}",
185
176
  "hit.header.votes": "Votes: ",
186
- "hit.howler.related": "{{count}} enregistrements associés",
187
177
  "hit.label": "Étiquettes",
188
178
  "hit.label.category.assignments": "Catégorie : Affectation - Indique quel analyste ou quelle équipe d'analystes est chargé(e) de trier cette réponse positive.",
189
179
  "hit.label.category.campaign": "Catégorie : Campagne - Identifie les campagnes en cours menées par des familles de logiciels malveillants ou des initiatives d'hameçonnage spécifiques. Elles ne doivent être considérées comme des attributions correctes que si le résultat positif est promu au rang de preuve.",
@@ -206,9 +196,9 @@
206
196
  "hit.notebook.goTo": "Aller a Jupyterhub",
207
197
  "hit.notebook.select": "Veuillez sélectionner un notebook",
208
198
  "hit.notebook.tooltip": "Ouvrir dans Jupyterhub",
209
- "hit.open": "Ouvrir hit",
210
199
  "hit.overview.missing": "Aucune vue d'ensemble n'a été créée pour ce hit. Pour créer une vue d'ensemble, cliquez sur le bouton pour ajouter à droite.",
211
200
  "hit.panel.aggregation.run": "Créer un sommaire",
201
+ "hit.panel.analytic.open": "Ouvrir l'analyse",
212
202
  "hit.panel.bundles.open": "Groupes parentaux",
213
203
  "hit.panel.bundles.open.prompt": "Ouvrir le groupe parent",
214
204
  "hit.panel.close": "Fermer",
@@ -221,12 +211,9 @@
221
211
  "hit.panel.exclude": "Exclure par",
222
212
  "hit.panel.hit.noselection": "Aucun résultat n'a été sélectionné",
223
213
  "hit.panel.include": "Inclure par",
214
+ "hit.panel.open": "Ouvrir hit",
224
215
  "hit.panel.view.layout": "Modifier le panneau d'affichage",
225
216
  "hit.quicksearch": "Recherche par affectation, analytique, détection ou état",
226
- "hit.related.tab.case": "Cas",
227
- "hit.related.tab.hit": "Alertes",
228
- "hit.related.tab.links": "Liens",
229
- "hit.related.tab.observable": "Observables",
230
217
  "hit.search.aggregate.button": "Créer un sommaire",
231
218
  "hit.search.button": "Effectuer une recherche",
232
219
  "hit.search.custom": "Triage personnalisé",
@@ -235,8 +222,6 @@
235
222
  "hit.search.filter.fields": "Paramètres",
236
223
  "hit.search.filter.label": "Filtres de recherche",
237
224
  "hit.search.filter.values": "Valeurs",
238
- "hit.search.index.hit": "Hits",
239
- "hit.search.index.observable": "Observables",
240
225
  "hit.search.invalid": "Requête invalide",
241
226
  "hit.search.keyboard": "Raccourcis clavier",
242
227
  "hit.search.keyboard.no_shortcuts": "Pas de raccourcis",
@@ -310,8 +295,6 @@
310
295
  "modal.action.empty": "Le nom de l'action ne peut pas être vide.",
311
296
  "modal.action.label": "Nom de l'action",
312
297
  "modal.action.title": "Enregistrer l'action",
313
- "modal.cases.resolve": "Résoudre le cas",
314
- "modal.cases.resolve.description": "Lors de la résolution d'un cas, vous devez soit évaluer toutes les alertes ouvertes, soit ajouter une évaluation aux alertes.",
315
298
  "modal.confirm.delete.description": "Êtes-vous sûr de vouloir supprimer cet élément ?",
316
299
  "modal.confirm.delete.title": "Confirmer la suppression",
317
300
  "modal.rationale.description": "Fournissez une justification qui explique succinctement aux autres analystes les raisons pour lesquelles vous êtes confiant dans cette évaluation.",
@@ -333,8 +316,6 @@
333
316
  "modal.rule.title": "Créer une nouvelle règle",
334
317
  "no.data": "Aucune donnée",
335
318
  "none": "Rien",
336
- "normal": "Priorité normale",
337
- "observable.open": "Ouvrir observable",
338
319
  "on": "sur",
339
320
  "open": "Ouvert",
340
321
  "operations.add_label": "Ajouter un label",
@@ -354,33 +335,6 @@
354
335
  "owner": "Propriétaire",
355
336
  "page.404.description": "La page que vous recherchez est introuvable ...",
356
337
  "page.404.title": "404: Introuvable",
357
- "page.cases.assets": "Actifs",
358
- "page.cases.assets.empty": "Aucun actif trouvé.",
359
- "page.cases.assets.filter_by_type": "Filtrer par type :",
360
- "page.cases.assets.seen_in": "Vu dans",
361
- "page.cases.assets.type.hash": "Hachage",
362
- "page.cases.assets.type.hosts": "Hôte",
363
- "page.cases.assets.type.id": "Identifiant",
364
- "page.cases.assets.type.ids": "Identifiant",
365
- "page.cases.assets.type.ip": "IP",
366
- "page.cases.assets.type.signature": "Signature",
367
- "page.cases.assets.type.uri": "URI",
368
- "page.cases.assets.type.user": "Utilisateur",
369
- "page.cases.created": "Créé",
370
- "page.cases.dashboard": "Tableau de bord",
371
- "page.cases.dashboard.alerts": "Alertes",
372
- "page.cases.dashboard.cases": "Cas connexes",
373
- "page.cases.dashboard.duration": "Durée",
374
- "page.cases.dashboard.indicators": "Indicateurs",
375
- "page.cases.dashboard.target": "Cibles",
376
- "page.cases.dashboard.tasks": "Tâches",
377
- "page.cases.dashboard.threat": "Menaces",
378
- "page.cases.detail.participants": "Participants",
379
- "page.cases.detail.properties": "Propriétés",
380
- "page.cases.detail.status": "Statut",
381
- "page.cases.escalation": "Escalade",
382
- "page.cases.sources": "Sources",
383
- "page.cases.updated": "Mis à jour",
384
338
  "page.dashboard.settings.edit": "Modifier le tableau de bord",
385
339
  "page.dashboard.settings.refreshRate": "Fréquence de rafraîchissement",
386
340
  "page.dashboard.title": "Tableau de bord",
@@ -452,8 +406,6 @@
452
406
  "page.user.search.column.groups": "Groupes",
453
407
  "page.user.search.column.username": "Nom d'utilisateur",
454
408
  "page.user.search.prompt": "Rechercher par nom d'utilisateur, nom complet, e-mail ou groupe",
455
- "pages.cases.detail.participants": "Participants",
456
- "pages.cases.detail.status": "Statut",
457
409
  "password": "Nouveau mot de passe",
458
410
  "password.confirm": "Confirmer le mot de passe",
459
411
  "password.match": "Le mot de passe et le mot de passe de confirmation doivent correspondre",
@@ -486,7 +438,6 @@
486
438
  "route.actions.create": "Nouveau action",
487
439
  "route.actions.edit": "Modifier",
488
440
  "route.actions.execute": "Exécuter",
489
- "route.actions.manager": "Gestionnaire d'actions",
490
441
  "route.actions.name": "Nom de l'action",
491
442
  "route.actions.open": "Ouvrir la requête",
492
443
  "route.actions.operation.add": "Ajouter une nouvelle opération",
@@ -583,11 +534,6 @@
583
534
  "route.analytics.triage.title": "Paramètres de triage",
584
535
  "route.analytics.updated": "Analytic mis a jour!",
585
536
  "route.analytics.view": "Voir l'analyse",
586
- "route.cases": "Cas",
587
- "route.cases.create": "Créer un cas",
588
- "route.cases.manager.search": "Rechercher des cas",
589
- "route.cases.search.prompt": "Rechercher des cas par titre, résumé ou indicateurs",
590
- "route.cases.view": "Voir le cas",
591
537
  "route.clear": "Effacer la requête",
592
538
  "route.dossiers": "Dossiers",
593
539
  "route.dossiers.create": "Nouveau dossier",
@@ -647,7 +593,6 @@
647
593
  "route.dossiers.search.prompt": "Recherche par titre, requête ou propriétaire.",
648
594
  "route.dossiers.view": "Voir le dossier",
649
595
  "route.help": "Aide",
650
- "route.help.actions": "Documentation sur les actions",
651
596
  "route.help.api": "Documentation de l'API",
652
597
  "route.help.auth": "Authentification",
653
598
  "route.help.bundles": "Groupes des hits",
@@ -711,7 +656,6 @@
711
656
  "route.overviews.theme.dark": "Prévoyez en mode sombre",
712
657
  "route.overviews.theme.light": "Prévoyez en mode clair",
713
658
  "route.overviews.view": "Voir la vue d'ensemble",
714
- "route.search": "Rechercher",
715
659
  "route.templates": "Modèles",
716
660
  "route.templates.analytic": "Choisir une analyse",
717
661
  "route.templates.builtin": "Intégré",
@@ -722,7 +666,6 @@
722
666
  "route.templates.detection": "Choisir une détection",
723
667
  "route.templates.global": "Général",
724
668
  "route.templates.manager.global": "Global",
725
- "route.templates.manager.open": "Ouvrir la vue",
726
669
  "route.templates.manager.personal": "Personnel",
727
670
  "route.templates.manager.readonly": "Intégré",
728
671
  "route.templates.manager.search": "Rechercher les modèles",
@@ -746,10 +689,8 @@
746
689
  "route.views.manager.personal": "Personnel",
747
690
  "route.views.manager.readonly": "Intégré",
748
691
  "route.views.manager.search": "Rechercher les vues",
749
- "route.views.name": "Nom de la vue",
750
692
  "route.views.save": "Enregistrer cette requête comme vue",
751
693
  "route.views.saved": "Vues épinglées",
752
- "route.views.search.prompt": "Rechercher par nom, requête ou propriétaire.",
753
694
  "route.views.show": "Voir les vues",
754
695
  "route.views.update.success": "Vue actualisée.",
755
696
  "rule.interval": "Intervalle d'exécution de la règle",
@@ -766,7 +707,6 @@
766
707
  "search.result.showing": "Affichage de {{offset}} à {{length}} sur {{total}} articles",
767
708
  "search.result.showing.single": "Aucun articles",
768
709
  "search.total": "Il y a un total de {{count}} résultats correspondant à cette requête.",
769
- "started": "Démarré",
770
710
  "templates.edit.analytic": "Modifier modèle pour cette analyse",
771
711
  "templates.edit.detection": "Modifier modèle pour cette détection",
772
712
  "to": "à",
@@ -4,10 +4,9 @@ import type { Overview } from './entities/generated/Overview';
4
4
  import type { Template } from './entities/generated/Template';
5
5
 
6
6
  export type WithMetadata<T> = T & {
7
- __index?: string;
8
-
9
7
  __analytic?: Analytic;
10
8
  __overview?: Overview;
11
9
  __template?: Template;
10
+
12
11
  __dossiers?: Dossier[];
13
12
  };
@@ -4,7 +4,7 @@ import type { Matched } from './Matched';
4
4
  /**
5
5
  * NOTE: This is an auto-generated file. Don't edit this manually.
6
6
  */
7
- export interface ThreatEnrichment {
7
+ export interface Enrichment {
8
8
  indicator?: Indicator;
9
9
  matched?: Matched;
10
10
  }