@cccsaurora/howler-ui 2.18.0-dev.674 → 2.18.0-dev.676

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 +106 -123
  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
@@ -1,59 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { OpenInNew } from '@mui/icons-material';
3
- import { Autocomplete, Box, Button, Card, Chip, Divider, IconButton, LinearProgress, Skeleton, Stack, TextField, Typography } from '@mui/material';
4
- import api from '@cccsaurora/howler-ui/api';
5
- import { ApiConfigContext } from '@cccsaurora/howler-ui/components/app/providers/ApiConfigProvider';
6
- import { ModalContext } from '@cccsaurora/howler-ui/components/app/providers/ModalProvider';
7
- import AnalyticLink from '@cccsaurora/howler-ui/components/elements/hit/elements/AnalyticLink';
8
- import EscalationChip from '@cccsaurora/howler-ui/components/elements/hit/elements/EscalationChip';
9
- import { HitLayout } from '@cccsaurora/howler-ui/components/elements/hit/HitLayout';
10
- import useHitActions from '@cccsaurora/howler-ui/components/hooks/useHitActions';
11
- import useMyApi from '@cccsaurora/howler-ui/components/hooks/useMyApi';
12
- import { uniq } from 'lodash-es';
13
- import { useContext, useEffect, useMemo, useState } from 'react';
14
- import { useTranslation } from 'react-i18next';
15
- import { Link } from 'react-router-dom';
16
- import useCase from '../hooks/useCase';
17
- const ResolveModal = ({ case: _case, onConfirm }) => {
18
- const { t } = useTranslation();
19
- const { dispatchApi } = useMyApi();
20
- const { close } = useContext(ModalContext);
21
- const { config } = useContext(ApiConfigContext);
22
- const { updateCase } = useCase({ case: _case });
23
- const [loading, setLoading] = useState(true);
24
- const [rationale, setRationale] = useState('');
25
- const [assessment, setAssessment] = useState(null);
26
- const [hits, setHits] = useState([]);
27
- const hitIds = useMemo(() => uniq((_case?.items ?? []).filter(item => item.type === 'hit').map(item => item.id)), [_case?.items]);
28
- const { assess } = useHitActions(hits);
29
- useEffect(() => {
30
- (async () => {
31
- try {
32
- const result = await dispatchApi(api.search.hit.post({
33
- query: `howler.id:(${hitIds.join(' OR ')}) AND -howler.status:resolved`,
34
- metadata: ['analytic']
35
- }));
36
- setHits(result.items);
37
- }
38
- finally {
39
- setLoading(false);
40
- }
41
- })();
42
- }, [dispatchApi, hitIds]);
43
- const handleConfirm = async () => {
44
- setLoading(true);
45
- try {
46
- await assess(assessment, true, rationale);
47
- await updateCase({ status: 'resolved' });
48
- onConfirm();
49
- close();
50
- }
51
- finally {
52
- setLoading(false);
53
- }
54
- };
55
- return (_jsxs(Stack, { spacing: 2, p: 2, alignItems: "start", sx: { minWidth: 'min(1000px, 60vw)', maxHeight: '100%', height: '100%' }, children: [_jsx(Typography, { variant: "h4", children: t('modal.cases.resolve') }), _jsx(Typography, { children: t('modal.cases.resolve.description') }), _jsxs(Stack, { spacing: 1, overflow: "auto", width: "100%", flex: 1, children: [_jsxs(Stack, { direction: "row", spacing: 1, children: [_jsx(Box, { flex: 1, children: _jsx(TextField, { size: "small", fullWidth: true, placeholder: t('modal.rationale.label'), value: rationale, onChange: ev => setRationale(ev.target.value) }) }), _jsx(Box, { flex: 1, children: _jsx(Autocomplete, { size: "small", value: assessment, onChange: (_ev, _assessment) => setAssessment(_assessment), options: config.lookups['howler.assessment'], disablePortal: true, renderInput: params => (_jsx(TextField, { ...params, placeholder: t('hit.details.actions.assessment'), fullWidth: true })) }) })] }), _jsxs(Stack, { position: "relative", children: [_jsx(Divider, {}), _jsx(LinearProgress, { sx: { opacity: +loading } })] }), loading
56
- ? hitIds.map(id => _jsx(Skeleton, { variant: "rounded", height: "40px", width: "100%" }, id))
57
- : hits.map(hit => (_jsx(Card, { sx: { p: 1, flexShrink: 0 }, children: _jsxs(Stack, { direction: "row", alignItems: "center", spacing: 1, width: "100%", children: [_jsx(AnalyticLink, { hit: hit, compressed: true, alignSelf: "center" }), _jsx(EscalationChip, { hit: hit, layout: HitLayout.DENSE }), _jsx(Chip, { sx: { width: 'fit-content', display: 'inline-flex' }, label: hit.howler.status, size: "small", color: "primary" }), _jsx("div", { style: { flex: 1 } }), _jsx(IconButton, { size: "small", component: Link, to: `/hits/${hit.howler.id}`, children: _jsx(OpenInNew, { fontSize: "small" }) })] }) }, hit.howler.id)))] }), _jsxs(Stack, { direction: "row", spacing: 1, alignSelf: "end", children: [_jsx(Button, { variant: "outlined", color: "error", onClick: close, children: t('cancel') }), _jsx(Button, { variant: "outlined", color: "success", disabled: loading || !assessment || !rationale, onClick: handleConfirm, children: t('confirm') })] })] }));
58
- };
59
- export default ResolveModal;
@@ -1,2 +0,0 @@
1
- declare const _default: import("react").NamedExoticComponent<{}>;
2
- export default _default;
@@ -1,20 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import { FilterList } from '@mui/icons-material';
3
- import { Autocomplete, TextField } from '@mui/material';
4
- import { ParameterContext } from '@cccsaurora/howler-ui/components/app/providers/ParameterProvider';
5
- import ChipPopper from '@cccsaurora/howler-ui/components/elements/display/ChipPopper';
6
- import { memo } from 'react';
7
- import { useTranslation } from 'react-i18next';
8
- import { useContextSelector } from 'use-context-selector';
9
- const FILTER_OPTIONS = [
10
- { label: 'hit.search.index.hit', value: 'hit' },
11
- { label: 'hit.search.index.observable', value: 'observable' }
12
- ];
13
- const IndexPicker = () => {
14
- const { t } = useTranslation();
15
- const indexes = useContextSelector(ParameterContext, ctx => ctx.indexes);
16
- const setIndexes = useContextSelector(ParameterContext, ctx => ctx.setIndexes);
17
- const selectedOptions = FILTER_OPTIONS.filter(opt => indexes.includes(opt.value));
18
- return (_jsx(ChipPopper, { icon: _jsx(FilterList, { fontSize: "small" }), label: selectedOptions.map(opt => t(opt.label)).join(', '), minWidth: "225px", slotProps: { chip: { size: 'small' } }, children: _jsx(Autocomplete, { size: "small", multiple: true, options: FILTER_OPTIONS, value: selectedOptions, onChange: (_ev, values) => values.length > 0 && setIndexes(values.map(val => val.value)), isOptionEqualToValue: (opt, val) => opt.value === val.value, getOptionLabel: opt => t(opt.label), renderInput: params => _jsx(TextField, { ...params }) }) }));
19
- };
20
- export default memo(IndexPicker);
@@ -1,7 +0,0 @@
1
- import type { Observable } from '@cccsaurora/howler-ui/models/entities/generated/Observable';
2
- import { type FC } from 'react';
3
- declare const ObservableViewer: FC<{
4
- observable?: Observable;
5
- observableId?: string;
6
- }>;
7
- export default ObservableViewer;
@@ -1,27 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import { Box, Skeleton } from '@mui/material';
3
- import api from '@cccsaurora/howler-ui/api';
4
- import ObjectDetails from '@cccsaurora/howler-ui/components/elements/ObjectDetails';
5
- import useMyApi from '@cccsaurora/howler-ui/components/hooks/useMyApi';
6
- import { useEffect, useState } from 'react';
7
- const ObservableViewer = ({ observable: provided, observableId }) => {
8
- const { dispatchApi } = useMyApi();
9
- const [observable, setObservable] = useState(null);
10
- useEffect(() => {
11
- if (provided) {
12
- setObservable(provided);
13
- }
14
- }, [provided]);
15
- useEffect(() => {
16
- if (observableId) {
17
- dispatchApi(api.v2.search.post('observable', { query: `howler.id:${observableId}`, rows: 1 }), {
18
- throwError: false
19
- }).then(res => setObservable(res.items[0]));
20
- }
21
- }, [dispatchApi, observableId]);
22
- if (!observable) {
23
- return;
24
- }
25
- return _jsx(Box, { p: 1, children: observable ? _jsx(ObjectDetails, { obj: observable }) : _jsx(Skeleton, { height: 120 }) });
26
- };
27
- export default ObservableViewer;
@@ -1,12 +0,0 @@
1
- import type { FileHash } from './FileHash';
2
-
3
- /**
4
- * NOTE: This is an auto-generated file. Don't edit this manually.
5
- */
6
- export interface AttachmentsFile {
7
- extension?: string;
8
- hash?: FileHash;
9
- mime_type?: string;
10
- name?: string;
11
- size?: number;
12
- }
@@ -1,28 +0,0 @@
1
- import type { Enrichments } from './Enrichments';
2
- import type { Item } from './Item';
3
- import type { Rule } from './Rule';
4
- import type { Task } from './Task';
5
-
6
- /**
7
- * NOTE: This is an auto-generated file. Don't edit this manually.
8
- */
9
- export interface Case {
10
- case_id?: string;
11
- created?: string;
12
- end?: string;
13
- enrichments?: Enrichments;
14
- escalation?: string;
15
- indicators?: string[];
16
- items?: Item[];
17
- overview?: string;
18
- participants?: string[];
19
- rules?: Rule[];
20
- status?: string;
21
- start?: string;
22
- summary?: string;
23
- targets?: string[];
24
- tasks?: Task[];
25
- threats?: string[];
26
- title?: string;
27
- updated?: string;
28
- }
@@ -1,19 +0,0 @@
1
- import type { AutonomousSystems } from './AutonomousSystems';
2
- import type { Geo } from './Geo';
3
- import type { Nat } from './Nat';
4
-
5
- /**
6
- * NOTE: This is an auto-generated file. Don't edit this manually.
7
- */
8
- export interface DestinationOriginal {
9
- address?: string;
10
- autonomous_systems?: AutonomousSystems;
11
- bytes?: number;
12
- domain?: string;
13
- geo?: Geo;
14
- ip?: string;
15
- mac?: string;
16
- nat?: Nat;
17
- packets?: number;
18
- port?: number;
19
- }
@@ -1,8 +0,0 @@
1
- import type { AttachmentsFile } from './AttachmentsFile';
2
-
3
- /**
4
- * NOTE: This is an auto-generated file. Don't edit this manually.
5
- */
6
- export interface EmailAttachment {
7
- file?: AttachmentsFile;
8
- }
@@ -1,19 +0,0 @@
1
- import type { Bcc } from './Bcc';
2
- import type { Cc } from './Cc';
3
- import type { From } from './From';
4
- import type { To } from './To';
5
-
6
- /**
7
- * NOTE: This is an auto-generated file. Don't edit this manually.
8
- */
9
- export interface EmailParent {
10
- bcc?: Bcc;
11
- cc?: Cc;
12
- destination?: string;
13
- from?: From;
14
- message_id?: string;
15
- origination_timestamp?: string;
16
- source?: string;
17
- subject?: string;
18
- to?: To;
19
- }
@@ -1,7 +0,0 @@
1
- /**
2
- * NOTE: This is an auto-generated file. Don't edit this manually.
3
- */
4
- export interface Enrichments {
5
- annotations?: string;
6
- path?: string;
7
- }
@@ -1,21 +0,0 @@
1
- import type { IndicatorEmail } from './IndicatorEmail';
2
- import type { IndicatorFile } from './IndicatorFile';
3
-
4
- /**
5
- * NOTE: This is an auto-generated file. Don't edit this manually.
6
- */
7
- export interface EnrichmentsIndicator {
8
- confidence?: string;
9
- description?: string;
10
- email?: IndicatorEmail;
11
- file?: IndicatorFile;
12
- first_seen?: string;
13
- ip?: string;
14
- last_seen?: string;
15
- port?: number;
16
- provider?: string;
17
- reference?: string;
18
- scanner_stats?: number;
19
- sightings?: number;
20
- type?: string;
21
- }
@@ -1,11 +0,0 @@
1
- import type { Body } from './Body';
2
-
3
- /**
4
- * NOTE: This is an auto-generated file. Don't edit this manually.
5
- */
6
- export interface HttpResponse {
7
- body?: Body;
8
- bytes?: number;
9
- mime_type?: string;
10
- status_code?: number;
11
- }
@@ -1,9 +0,0 @@
1
- /**
2
- * NOTE: This is an auto-generated file. Don't edit this manually.
3
- */
4
- export interface Item {
5
- id?: string;
6
- path?: string;
7
- type?: string;
8
- value?: string;
9
- }
@@ -1,85 +0,0 @@
1
- import type { Agent } from './Agent';
2
- import type { Assemblyline } from './Assemblyline';
3
- import type { Aws } from './Aws';
4
- import type { Azure } from './Azure';
5
- import type { Cbs } from './Cbs';
6
- import type { Clue } from './Clue';
7
- import type { Container } from './Container';
8
- import type { Dns } from './Dns';
9
- import type { Ecs } from './Ecs';
10
- import type { Error } from './Error';
11
- import type { Event } from './Event';
12
- import type { Faas } from './Faas';
13
- import type { Gcp } from './Gcp';
14
- import type { Group } from './Group';
15
- import type { Host } from './Host';
16
- import type { Interface } from './Interface';
17
- import type { Network } from './Network';
18
- import type { ObservableCloud } from './ObservableCloud';
19
- import type { ObservableDestination } from './ObservableDestination';
20
- import type { ObservableEmail } from './ObservableEmail';
21
- import type { ObservableFile } from './ObservableFile';
22
- import type { ObservableHowler } from './ObservableHowler';
23
- import type { ObservableHttp } from './ObservableHttp';
24
- import type { ObservableObserver } from './ObservableObserver';
25
- import type { ObservableOrganization } from './ObservableOrganization';
26
- import type { ObservableProcess } from './ObservableProcess';
27
- import type { ObservableSource } from './ObservableSource';
28
- import type { ObservableThreat } from './ObservableThreat';
29
- import type { ObservableTls } from './ObservableTls';
30
- import type { Registry } from './Registry';
31
- import type { Related } from './Related';
32
- import type { Rule } from './Rule';
33
- import type { Server } from './Server';
34
- import type { Url } from './Url';
35
- import type { User } from './User';
36
- import type { UserAgent } from './UserAgent';
37
- import type { Vulnerability } from './Vulnerability';
38
-
39
- /**
40
- * NOTE: This is an auto-generated file. Don't edit this manually.
41
- */
42
- export interface Observable {
43
- __index: 'observable';
44
- agent?: Agent;
45
- assemblyline?: Assemblyline;
46
- aws?: Aws;
47
- azure?: Azure;
48
- cbs?: Cbs;
49
- cloud?: ObservableCloud;
50
- clue?: Clue;
51
- container?: Container;
52
- destination?: ObservableDestination;
53
- dns?: Dns;
54
- ecs?: Ecs;
55
- email?: ObservableEmail;
56
- error?: Error;
57
- event?: Event;
58
- faas?: Faas;
59
- file?: ObservableFile;
60
- gcp?: Gcp;
61
- group?: Group;
62
- host?: Host;
63
- howler: ObservableHowler;
64
- http?: ObservableHttp;
65
- interface?: Interface;
66
- labels?: { [index: string]: string };
67
- message?: string;
68
- network?: Network;
69
- observer?: ObservableObserver;
70
- organization?: ObservableOrganization;
71
- process?: ObservableProcess;
72
- registry?: Registry;
73
- related?: Related;
74
- rule?: Rule;
75
- server?: Server;
76
- source?: ObservableSource;
77
- tags?: string[];
78
- threat?: ObservableThreat;
79
- timestamp: string;
80
- tls?: ObservableTls;
81
- url?: Url;
82
- user?: User;
83
- user_agent?: UserAgent;
84
- vulnerability?: Vulnerability;
85
- }
@@ -1,20 +0,0 @@
1
- import type { CloudAccount } from './CloudAccount';
2
- import type { Instance } from './Instance';
3
- import type { Machine } from './Machine';
4
- import type { Project } from './Project';
5
- import type { Service } from './Service';
6
-
7
- /**
8
- * NOTE: This is an auto-generated file. Don't edit this manually.
9
- */
10
- export interface ObservableCloud {
11
- account?: CloudAccount;
12
- availability_zone?: string;
13
- instance?: Instance;
14
- machine?: Machine;
15
- project?: Project;
16
- provider?: string;
17
- region?: string;
18
- service?: Service;
19
- tenant_id?: string;
20
- }
@@ -1,23 +0,0 @@
1
- import type { AutonomousSystems } from './AutonomousSystems';
2
- import type { DestinationOriginal } from './DestinationOriginal';
3
- import type { Geo } from './Geo';
4
- import type { Nat } from './Nat';
5
- import type { User } from './User';
6
-
7
- /**
8
- * NOTE: This is an auto-generated file. Don't edit this manually.
9
- */
10
- export interface ObservableDestination {
11
- address?: string;
12
- autonomous_systems?: AutonomousSystems;
13
- bytes?: number;
14
- domain?: string;
15
- geo?: Geo;
16
- ip?: string;
17
- mac?: string;
18
- nat?: Nat;
19
- original?: DestinationOriginal;
20
- packets?: number;
21
- port?: number;
22
- user?: User;
23
- }
@@ -1,30 +0,0 @@
1
- import type { Bcc } from './Bcc';
2
- import type { Cc } from './Cc';
3
- import type { EmailAttachment } from './EmailAttachment';
4
- import type { EmailParent } from './EmailParent';
5
- import type { From } from './From';
6
- import type { ReplyTo } from './ReplyTo';
7
- import type { Sender } from './Sender';
8
- import type { To } from './To';
9
-
10
- /**
11
- * NOTE: This is an auto-generated file. Don't edit this manually.
12
- */
13
- export interface ObservableEmail {
14
- attachments?: EmailAttachment[];
15
- bcc?: Bcc;
16
- cc?: Cc;
17
- content_type?: string;
18
- delivery_timestamp?: string;
19
- direction?: string;
20
- from?: From;
21
- local_id?: string;
22
- message_id?: string;
23
- origination_timestamp?: string;
24
- parent?: EmailParent;
25
- reply_to?: ReplyTo;
26
- sender?: Sender;
27
- subject?: string;
28
- to?: To;
29
- x_mailer?: string;
30
- }
@@ -1,36 +0,0 @@
1
- import type { CodeSignature } from './CodeSignature';
2
- import type { Elf } from './Elf';
3
- import type { FileHash } from './FileHash';
4
- import type { Pe } from './Pe';
5
-
6
- /**
7
- * NOTE: This is an auto-generated file. Don't edit this manually.
8
- */
9
- export interface ObservableFile {
10
- accessed?: string;
11
- attributes?: string[];
12
- code_signature?: CodeSignature;
13
- created?: string;
14
- ctime?: string;
15
- device?: string;
16
- directory?: string;
17
- drive_letter?: string;
18
- elf?: Elf;
19
- extension?: string;
20
- fork_name?: string;
21
- gid?: string;
22
- group?: string;
23
- hash?: FileHash;
24
- inode?: string;
25
- mime_type?: string;
26
- mode?: string;
27
- mtime?: string;
28
- name?: string;
29
- owner?: string;
30
- path?: string;
31
- pe?: Pe;
32
- size?: number;
33
- target_path?: string;
34
- type?: string;
35
- uid?: string;
36
- }
@@ -1,43 +0,0 @@
1
- import type { HowlerComment } from './HowlerComment';
2
- import type { HowlerDossier } from './HowlerDossier';
3
- import type { Incident } from './Incident';
4
- import type { Labels } from './Labels';
5
- import type { Link } from './Link';
6
- import type { Log } from './Log';
7
- import type { Outline } from './Outline';
8
- import type { Votes } from './Votes';
9
-
10
- /**
11
- * NOTE: This is an auto-generated file. Don't edit this manually.
12
- */
13
- export interface ObservableHowler {
14
- analytic: string;
15
- assessment?: string;
16
- comment?: HowlerComment[];
17
- confidence?: number;
18
- data?: string[];
19
- detection?: string;
20
- dossier?: HowlerDossier[];
21
- escalation?: string;
22
- expiry?: string;
23
- hash: string;
24
- id: string;
25
- incidents?: Incident[];
26
- labels?: Labels;
27
- links?: Link[];
28
- log?: Log[];
29
- mitigated?: string;
30
- monitored?: string;
31
- outline?: Outline;
32
- rationale?: string;
33
- related?: string[];
34
- reliability?: number;
35
- reported?: string;
36
- score?: number;
37
- scrutiny?: string;
38
- severity?: number;
39
- status?: string;
40
- viewers?: string[];
41
- volume?: number;
42
- votes?: Votes;
43
- }
@@ -1,11 +0,0 @@
1
- import type { HttpResponse } from './HttpResponse';
2
- import type { Request } from './Request';
3
-
4
- /**
5
- * NOTE: This is an auto-generated file. Don't edit this manually.
6
- */
7
- export interface ObservableHttp {
8
- request?: Request;
9
- response?: HttpResponse;
10
- version?: string;
11
- }
@@ -1,21 +0,0 @@
1
- import type { Egress } from './Egress';
2
- import type { Interface } from './Interface';
3
- import type { ObserverIngress } from './ObserverIngress';
4
-
5
- /**
6
- * NOTE: This is an auto-generated file. Don't edit this manually.
7
- */
8
- export interface ObservableObserver {
9
- egress?: Egress;
10
- hostname?: string;
11
- ingress?: ObserverIngress;
12
- interface?: Interface;
13
- ip?: string[];
14
- mac?: string[];
15
- name?: string;
16
- product?: string;
17
- serial_number?: string;
18
- type?: string;
19
- vendor?: string;
20
- version?: string;
21
- }
@@ -1,7 +0,0 @@
1
- /**
2
- * NOTE: This is an auto-generated file. Don't edit this manually.
3
- */
4
- export interface ObservableOrganization {
5
- id?: string;
6
- name?: string;
7
- }
@@ -1,34 +0,0 @@
1
- import type { CodeSignature } from './CodeSignature';
2
- import type { EntryMeta } from './EntryMeta';
3
- import type { Pe } from './Pe';
4
- import type { ProcessHash } from './ProcessHash';
5
- import type { ProcessParent } from './ProcessParent';
6
- import type { ProcessUser } from './ProcessUser';
7
-
8
- /**
9
- * NOTE: This is an auto-generated file. Don't edit this manually.
10
- */
11
- export interface ObservableProcess {
12
- args?: string[];
13
- args_count?: number;
14
- code_signature?: CodeSignature;
15
- command_line?: string;
16
- end?: string;
17
- entity_id?: string;
18
- entry_meta?: EntryMeta;
19
- env_vars?: { [index: string]: string };
20
- executable?: string;
21
- exit_code?: number;
22
- hash?: ProcessHash;
23
- interactive?: boolean;
24
- name?: string;
25
- parent?: ProcessParent;
26
- pe?: Pe;
27
- pid?: number;
28
- same_as_process?: boolean;
29
- start?: string;
30
- title?: string;
31
- uptime?: number;
32
- user?: ProcessUser;
33
- working_directory?: string;
34
- }
@@ -1,23 +0,0 @@
1
- import type { AutonomousSystems } from './AutonomousSystems';
2
- import type { Geo } from './Geo';
3
- import type { Nat } from './Nat';
4
- import type { SourceOriginal } from './SourceOriginal';
5
- import type { User } from './User';
6
-
7
- /**
8
- * NOTE: This is an auto-generated file. Don't edit this manually.
9
- */
10
- export interface ObservableSource {
11
- address?: string;
12
- autonomous_systems?: AutonomousSystems;
13
- bytes?: number;
14
- domain?: string;
15
- geo?: Geo;
16
- ip?: string;
17
- mac?: string;
18
- nat?: Nat;
19
- original?: SourceOriginal;
20
- packets?: number;
21
- port?: number;
22
- user?: User;
23
- }
@@ -1,21 +0,0 @@
1
- import type { Feed } from './Feed';
2
- import type { Software } from './Software';
3
- import type { ThreatEnrichment } from './ThreatEnrichment';
4
- import type { ThreatGroup } from './ThreatGroup';
5
- import type { ThreatIndicator } from './ThreatIndicator';
6
- import type { ThreatTactic } from './ThreatTactic';
7
- import type { ThreatTechnique } from './ThreatTechnique';
8
-
9
- /**
10
- * NOTE: This is an auto-generated file. Don't edit this manually.
11
- */
12
- export interface ObservableThreat {
13
- enrichments?: ThreatEnrichment[];
14
- feed?: Feed;
15
- framework?: string;
16
- group?: ThreatGroup;
17
- indicator?: ThreatIndicator;
18
- software?: Software;
19
- tactic?: ThreatTactic;
20
- technique?: ThreatTechnique;
21
- }
@@ -1,12 +0,0 @@
1
- import type { Client } from './Client';
2
- import type { TlsServer } from './TlsServer';
3
-
4
- /**
5
- * NOTE: This is an auto-generated file. Don't edit this manually.
6
- */
7
- export interface ObservableTls {
8
- client?: Client;
9
- server?: TlsServer;
10
- version?: string;
11
- version_protocol?: string;
12
- }
@@ -1,9 +0,0 @@
1
- import type { Interface } from './Interface';
2
-
3
- /**
4
- * NOTE: This is an auto-generated file. Don't edit this manually.
5
- */
6
- export interface ObserverIngress {
7
- interface?: Interface;
8
- zone?: string;
9
- }