@cccsaurora/howler-ui 2.14.0-dev.268 → 2.14.0-dev.271

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 (1476) hide show
  1. package/api/action/execute.d.ts +3 -0
  2. package/api/action/execute.js +17 -0
  3. package/api/action/index.d.ts +10 -0
  4. package/api/action/index.js +28 -0
  5. package/api/action/operations.d.ts +3 -0
  6. package/api/action/operations.js +8 -0
  7. package/api/analytic/comments/index.d.ts +13 -0
  8. package/api/analytic/comments/index.js +19 -0
  9. package/api/analytic/comments/react.d.ts +3 -0
  10. package/api/analytic/comments/react.js +11 -0
  11. package/api/analytic/favourite.d.ts +7 -0
  12. package/api/analytic/favourite.js +11 -0
  13. package/api/analytic/index.d.ts +12 -0
  14. package/api/analytic/index.js +19 -0
  15. package/api/analytic/notebooks/index.d.ts +10 -0
  16. package/api/analytic/notebooks/index.js +11 -0
  17. package/api/analytic/owner.d.ts +5 -0
  18. package/api/analytic/owner.js +8 -0
  19. package/api/analytic/rules.d.ts +3 -0
  20. package/api/analytic/rules.js +8 -0
  21. package/api/auth/apikey.d.ts +8 -0
  22. package/api/auth/apikey.js +11 -0
  23. package/api/auth/index.d.ts +4 -0
  24. package/api/auth/index.js +7 -0
  25. package/api/auth/login.d.ts +14 -0
  26. package/api/auth/login.js +17 -0
  27. package/api/configs/index.d.ts +3 -0
  28. package/api/configs/index.js +7 -0
  29. package/api/dossier/hit.d.ts +2 -0
  30. package/api/dossier/hit.js +7 -0
  31. package/api/dossier/index.d.ts +8 -0
  32. package/api/dossier/index.js +19 -0
  33. package/api/help.d.ts +55 -0
  34. package/api/help.js +7 -0
  35. package/api/hit/assign.d.ts +3 -0
  36. package/api/hit/assign.js +8 -0
  37. package/api/hit/comments/index.d.ts +13 -0
  38. package/api/hit/comments/index.js +19 -0
  39. package/api/hit/comments/react.d.ts +3 -0
  40. package/api/hit/comments/react.js +12 -0
  41. package/api/hit/index.d.ts +35 -0
  42. package/api/hit/index.js +23 -0
  43. package/api/hit/labels.d.ts +5 -0
  44. package/api/hit/labels.js +11 -0
  45. package/api/hit/overwrite.d.ts +3 -0
  46. package/api/hit/overwrite.js +8 -0
  47. package/api/hit/transition.d.ts +4 -0
  48. package/api/hit/transition.js +8 -0
  49. package/api/index.d.ts +142 -0
  50. package/api/index.js +240 -0
  51. package/api/notebook/environments.d.ts +10 -0
  52. package/api/notebook/environments.js +8 -0
  53. package/api/notebook/index.d.ts +14 -0
  54. package/api/notebook/index.js +9 -0
  55. package/api/overview/index.d.ts +6 -0
  56. package/api/overview/index.js +16 -0
  57. package/api/search/action.d.ts +4 -0
  58. package/api/search/action.js +8 -0
  59. package/api/search/analytic.d.ts +4 -0
  60. package/api/search/analytic.js +8 -0
  61. package/api/search/count/hit.d.ts +3 -0
  62. package/api/search/count/hit.js +8 -0
  63. package/api/search/count/index.d.ts +10 -0
  64. package/api/search/count/index.js +7 -0
  65. package/api/search/dossier.d.ts +4 -0
  66. package/api/search/dossier.js +8 -0
  67. package/api/search/eql/hit.d.ts +4 -0
  68. package/api/search/eql/hit.js +8 -0
  69. package/api/search/facet/hit.d.ts +5 -0
  70. package/api/search/facet/hit.js +8 -0
  71. package/api/search/facet/index.d.ts +13 -0
  72. package/api/search/facet/index.js +7 -0
  73. package/api/search/fields/hit.d.ts +3 -0
  74. package/api/search/fields/hit.js +9 -0
  75. package/api/search/fields/index.d.ts +19 -0
  76. package/api/search/fields/index.js +15 -0
  77. package/api/search/fields/user.d.ts +3 -0
  78. package/api/search/fields/user.js +11 -0
  79. package/api/search/grouped/hit.d.ts +4 -0
  80. package/api/search/grouped/hit.js +8 -0
  81. package/api/search/grouped/index.d.ts +25 -0
  82. package/api/search/grouped/index.js +8 -0
  83. package/api/search/grouped/user.d.ts +7 -0
  84. package/api/search/grouped/user.js +21 -0
  85. package/api/search/histogram/hit.d.ts +3 -0
  86. package/api/search/histogram/hit.js +8 -0
  87. package/api/search/histogram/index.d.ts +14 -0
  88. package/api/search/histogram/index.js +7 -0
  89. package/api/search/hit.d.ts +7 -0
  90. package/api/search/hit.js +11 -0
  91. package/api/search/index.d.ts +53 -0
  92. package/api/search/index.js +18 -0
  93. package/api/search/overview.d.ts +4 -0
  94. package/api/search/overview.js +8 -0
  95. package/api/search/sigma/hit.d.ts +4 -0
  96. package/api/search/sigma/hit.js +8 -0
  97. package/api/search/template.d.ts +4 -0
  98. package/api/search/template.js +8 -0
  99. package/api/search/user.d.ts +7 -0
  100. package/api/search/user.js +15 -0
  101. package/api/search/view.d.ts +4 -0
  102. package/api/search/view.js +8 -0
  103. package/api/template/index.d.ts +6 -0
  104. package/api/template/index.js +16 -0
  105. package/api/user/avatar/index.d.ts +2 -0
  106. package/api/user/avatar/index.js +8 -0
  107. package/api/user/groups.d.ts +6 -0
  108. package/api/user/groups.js +8 -0
  109. package/api/user/index.d.ts +10 -0
  110. package/api/user/index.js +15 -0
  111. package/api/user/whoami.d.ts +3 -0
  112. package/api/user/whoami.js +8 -0
  113. package/api/view/favourite.d.ts +7 -0
  114. package/api/view/favourite.js +11 -0
  115. package/api/view/index.d.ts +8 -0
  116. package/api/view/index.js +18 -0
  117. package/branding/AppBrand.d.ts +85 -0
  118. package/branding/AppBrand.js +103 -0
  119. package/commons/components/app/AppConfigs.d.ts +137 -0
  120. package/commons/components/app/AppConfigs.js +1 -0
  121. package/commons/components/app/AppConstants.d.ts +10 -0
  122. package/commons/components/app/AppConstants.js +10 -0
  123. package/commons/components/app/AppContexts.d.ts +105 -0
  124. package/commons/components/app/AppContexts.js +21 -0
  125. package/commons/components/app/AppDefaults.d.ts +6 -0
  126. package/commons/components/app/AppDefaults.js +40 -0
  127. package/commons/components/app/AppNotificationService.d.ts +6 -0
  128. package/commons/components/app/AppNotificationService.js +1 -0
  129. package/commons/components/app/AppProvider.d.ts +15 -0
  130. package/commons/components/app/AppProvider.js +41 -0
  131. package/commons/components/app/AppSearchService.d.ts +21 -0
  132. package/commons/components/app/AppSearchService.js +1 -0
  133. package/commons/components/app/AppSkeleton.d.ts +5 -0
  134. package/commons/components/app/AppSkeleton.js +152 -0
  135. package/commons/components/app/AppUserService.d.ts +17 -0
  136. package/commons/components/app/AppUserService.js +1 -0
  137. package/commons/components/app/hooks/index.js +18 -0
  138. package/commons/components/app/hooks/useApp.d.ts +1 -0
  139. package/commons/components/app/hooks/useApp.js +5 -0
  140. package/commons/components/app/hooks/useAppBanner.d.ts +1 -0
  141. package/commons/components/app/hooks/useAppBanner.js +6 -0
  142. package/commons/components/app/hooks/useAppBar.d.ts +1 -0
  143. package/commons/components/app/hooks/useAppBar.js +5 -0
  144. package/commons/components/app/hooks/useAppBarHeight.d.ts +2 -0
  145. package/commons/components/app/hooks/useAppBarHeight.js +22 -0
  146. package/commons/components/app/hooks/useAppBarScrollTrigger.d.ts +1 -0
  147. package/commons/components/app/hooks/useAppBarScrollTrigger.js +7 -0
  148. package/commons/components/app/hooks/useAppBreadcrumbs.d.ts +1 -0
  149. package/commons/components/app/hooks/useAppBreadcrumbs.js +5 -0
  150. package/commons/components/app/hooks/useAppConfigs.d.ts +59 -0
  151. package/commons/components/app/hooks/useAppConfigs.js +44 -0
  152. package/commons/components/app/hooks/useAppLanguage.d.ts +6 -0
  153. package/commons/components/app/hooks/useAppLanguage.js +17 -0
  154. package/commons/components/app/hooks/useAppLayout.d.ts +1 -0
  155. package/commons/components/app/hooks/useAppLayout.js +5 -0
  156. package/commons/components/app/hooks/useAppLeftNav.d.ts +1 -0
  157. package/commons/components/app/hooks/useAppLeftNav.js +5 -0
  158. package/commons/components/app/hooks/useAppLogo.d.ts +1 -0
  159. package/commons/components/app/hooks/useAppLogo.js +8 -0
  160. package/commons/components/app/hooks/useAppNotification.d.ts +1 -0
  161. package/commons/components/app/hooks/useAppNotification.js +5 -0
  162. package/commons/components/app/hooks/useAppQuickSearch.d.ts +1 -0
  163. package/commons/components/app/hooks/useAppQuickSearch.js +5 -0
  164. package/commons/components/app/hooks/useAppSearchService.d.ts +2 -0
  165. package/commons/components/app/hooks/useAppSearchService.js +5 -0
  166. package/commons/components/app/hooks/useAppSitemap.d.ts +13 -0
  167. package/commons/components/app/hooks/useAppSitemap.js +70 -0
  168. package/commons/components/app/hooks/useAppSwitcher.d.ts +1 -0
  169. package/commons/components/app/hooks/useAppSwitcher.js +5 -0
  170. package/commons/components/app/hooks/useAppTheme.d.ts +8 -0
  171. package/commons/components/app/hooks/useAppTheme.js +12 -0
  172. package/commons/components/app/hooks/useAppUser.d.ts +2 -0
  173. package/commons/components/app/hooks/useAppUser.js +5 -0
  174. package/commons/components/app/providers/AppBarProvider.d.ts +10 -0
  175. package/commons/components/app/providers/AppBarProvider.js +24 -0
  176. package/commons/components/app/providers/AppBreadcrumbsProvider.d.ts +6 -0
  177. package/commons/components/app/providers/AppBreadcrumbsProvider.js +43 -0
  178. package/commons/components/app/providers/AppLayoutProvider.d.ts +6 -0
  179. package/commons/components/app/providers/AppLayoutProvider.js +73 -0
  180. package/commons/components/app/providers/AppLeftNavProvider.d.ts +6 -0
  181. package/commons/components/app/providers/AppLeftNavProvider.js +22 -0
  182. package/commons/components/app/providers/AppNotificationProvider.d.ts +6 -0
  183. package/commons/components/app/providers/AppNotificationProvider.js +31 -0
  184. package/commons/components/app/providers/AppQuickSearchProvider.d.ts +8 -0
  185. package/commons/components/app/providers/AppQuickSearchProvider.js +19 -0
  186. package/commons/components/app/providers/AppSearchServiceProvider.d.ts +6 -0
  187. package/commons/components/app/providers/AppSearchServiceProvider.js +46 -0
  188. package/commons/components/app/providers/AppSnackbarProvider.d.ts +3 -0
  189. package/commons/components/app/providers/AppSnackbarProvider.js +15 -0
  190. package/commons/components/app/providers/AppSwitcherProvider.d.ts +6 -0
  191. package/commons/components/app/providers/AppSwitcherProvider.js +10 -0
  192. package/commons/components/app/providers/AppUserProvider.d.ts +8 -0
  193. package/commons/components/app/providers/AppUserProvider.js +12 -0
  194. package/commons/components/breadcrumbs/BreadcrumbIcon.d.ts +6 -0
  195. package/commons/components/breadcrumbs/BreadcrumbIcon.js +9 -0
  196. package/commons/components/breadcrumbs/BreadcrumbLastItem.d.ts +7 -0
  197. package/commons/components/breadcrumbs/BreadcrumbLastItem.js +19 -0
  198. package/commons/components/breadcrumbs/BreadcrumbLinkItem.d.ts +7 -0
  199. package/commons/components/breadcrumbs/BreadcrumbLinkItem.js +20 -0
  200. package/commons/components/breadcrumbs/BreadcrumbList.d.ts +11 -0
  201. package/commons/components/breadcrumbs/BreadcrumbList.js +44 -0
  202. package/commons/components/breadcrumbs/Breadcrumbs.d.ts +4 -0
  203. package/commons/components/breadcrumbs/Breadcrumbs.js +31 -0
  204. package/commons/components/display/AppAvatar.d.ts +8 -0
  205. package/commons/components/display/AppAvatar.js +18 -0
  206. package/commons/components/display/AppInfoPanel.d.ts +5 -0
  207. package/commons/components/display/AppInfoPanel.js +17 -0
  208. package/commons/components/display/AppListEmpty.d.ts +2 -0
  209. package/commons/components/display/AppListEmpty.js +5 -0
  210. package/commons/components/display/AppToc.d.ts +19 -0
  211. package/commons/components/display/AppToc.js +98 -0
  212. package/commons/components/display/hooks/useAppColor.d.ts +5 -0
  213. package/commons/components/display/hooks/useAppColor.js +10 -0
  214. package/commons/components/leftnav/LeftNavDrawer.d.ts +2 -0
  215. package/commons/components/leftnav/LeftNavDrawer.js +99 -0
  216. package/commons/components/leftnav/LeftNavGroup.d.ts +7 -0
  217. package/commons/components/leftnav/LeftNavGroup.js +55 -0
  218. package/commons/components/leftnav/LeftNavItem.d.ts +10 -0
  219. package/commons/components/leftnav/LeftNavItem.js +29 -0
  220. package/commons/components/notification/FeedModels.d.ts +64 -0
  221. package/commons/components/notification/FeedModels.js +94 -0
  222. package/commons/components/notification/Notification.d.ts +10 -0
  223. package/commons/components/notification/Notification.js +95 -0
  224. package/commons/components/notification/elements/NotificationCloseButton.d.ts +3 -0
  225. package/commons/components/notification/elements/NotificationCloseButton.js +6 -0
  226. package/commons/components/notification/elements/NotificationContainer.d.ts +16 -0
  227. package/commons/components/notification/elements/NotificationContainer.js +29 -0
  228. package/commons/components/notification/elements/NotificationEndOfPage.d.ts +5 -0
  229. package/commons/components/notification/elements/NotificationEndOfPage.js +36 -0
  230. package/commons/components/notification/elements/NotificationError.d.ts +2 -0
  231. package/commons/components/notification/elements/NotificationError.js +10 -0
  232. package/commons/components/notification/elements/NotificationHeader.d.ts +8 -0
  233. package/commons/components/notification/elements/NotificationHeader.js +18 -0
  234. package/commons/components/notification/elements/NotificationItems.d.ts +12 -0
  235. package/commons/components/notification/elements/NotificationItems.js +12 -0
  236. package/commons/components/notification/elements/NotificationSkeleton.d.ts +2 -0
  237. package/commons/components/notification/elements/NotificationSkeleton.js +12 -0
  238. package/commons/components/notification/elements/NotificationTopNavButton.d.ts +9 -0
  239. package/commons/components/notification/elements/NotificationTopNavButton.js +9 -0
  240. package/commons/components/notification/elements/item/NotificationItem.d.ts +5 -0
  241. package/commons/components/notification/elements/item/NotificationItem.js +25 -0
  242. package/commons/components/notification/elements/item/NotificationItemAuthor.d.ts +5 -0
  243. package/commons/components/notification/elements/item/NotificationItemAuthor.js +31 -0
  244. package/commons/components/notification/elements/item/NotificationItemContent.d.ts +3 -0
  245. package/commons/components/notification/elements/item/NotificationItemContent.js +9 -0
  246. package/commons/components/notification/elements/item/NotificationItemDate.d.ts +3 -0
  247. package/commons/components/notification/elements/item/NotificationItemDate.js +10 -0
  248. package/commons/components/notification/elements/item/NotificationItemImage.d.ts +4 -0
  249. package/commons/components/notification/elements/item/NotificationItemImage.js +8 -0
  250. package/commons/components/notification/elements/item/NotificationItemTag.d.ts +4 -0
  251. package/commons/components/notification/elements/item/NotificationItemTag.js +12 -0
  252. package/commons/components/notification/elements/item/NotificationItemTitle.d.ts +3 -0
  253. package/commons/components/notification/elements/item/NotificationItemTitle.js +15 -0
  254. package/commons/components/notification/index.js +2 -0
  255. package/commons/components/pages/PageCardCentered.d.ts +5 -0
  256. package/commons/components/pages/PageCardCentered.js +30 -0
  257. package/commons/components/pages/PageCenter.d.ts +8 -0
  258. package/commons/components/pages/PageCenter.js +20 -0
  259. package/commons/components/pages/PageContent.d.ts +7 -0
  260. package/commons/components/pages/PageContent.js +8 -0
  261. package/commons/components/pages/PageFullScreen.d.ts +10 -0
  262. package/commons/components/pages/PageFullScreen.js +40 -0
  263. package/commons/components/pages/PageFullWidth.d.ts +11 -0
  264. package/commons/components/pages/PageFullWidth.js +7 -0
  265. package/commons/components/pages/PageHeader.d.ts +23 -0
  266. package/commons/components/pages/PageHeader.js +27 -0
  267. package/commons/components/pages/hooks/usePageProps.d.ts +24 -0
  268. package/commons/components/pages/hooks/usePageProps.js +19 -0
  269. package/commons/components/search/AppSearch.d.ts +1 -0
  270. package/commons/components/search/AppSearch.js +135 -0
  271. package/commons/components/search/AppSearchInput.d.ts +11 -0
  272. package/commons/components/search/AppSearchInput.js +35 -0
  273. package/commons/components/search/AppSearchResult.d.ts +4 -0
  274. package/commons/components/search/AppSearchResult.js +28 -0
  275. package/commons/components/topnav/AppBar.d.ts +5 -0
  276. package/commons/components/topnav/AppBar.js +80 -0
  277. package/commons/components/topnav/AppName.d.ts +4 -0
  278. package/commons/components/topnav/AppName.js +31 -0
  279. package/commons/components/topnav/AppSwitcher.d.ts +2 -0
  280. package/commons/components/topnav/AppSwitcher.js +44 -0
  281. package/commons/components/topnav/Notifications.d.ts +2 -0
  282. package/commons/components/topnav/Notifications.js +8 -0
  283. package/commons/components/topnav/ThemeSelection.d.ts +2 -0
  284. package/commons/components/topnav/ThemeSelection.js +33 -0
  285. package/commons/components/topnav/ThemeSelectionIcon.d.ts +2 -0
  286. package/commons/components/topnav/ThemeSelectionIcon.js +16 -0
  287. package/commons/components/topnav/UserProfile.d.ts +5 -0
  288. package/commons/components/topnav/UserProfile.js +71 -0
  289. package/commons/components/utils/hooks/useClipboard.d.ts +3 -0
  290. package/commons/components/utils/hooks/useClipboard.js +29 -0
  291. package/commons/components/utils/hooks/useEnv.d.ts +1 -0
  292. package/commons/components/utils/hooks/useEnv.js +11 -0
  293. package/commons/components/utils/hooks/useFullscreenStatus.d.ts +2 -0
  294. package/commons/components/utils/hooks/useFullscreenStatus.js +41 -0
  295. package/commons/components/utils/hooks/useGravatar.d.ts +2 -0
  296. package/commons/components/utils/hooks/useGravatar.js +9 -0
  297. package/commons/components/utils/hooks/useLocalStorage.d.ts +12 -0
  298. package/commons/components/utils/hooks/useLocalStorage.js +52 -0
  299. package/commons/components/utils/hooks/useLocalStorageItem.d.ts +14 -0
  300. package/commons/components/utils/hooks/useLocalStorageItem.js +39 -0
  301. package/commons/components/utils/hooks/useThemeBuilder.d.ts +7 -0
  302. package/commons/components/utils/hooks/useThemeBuilder.js +48 -0
  303. package/commons/components/utils/keyboard.d.ts +30 -0
  304. package/commons/components/utils/keyboard.js +50 -0
  305. package/components/app/App.d.ts +3 -0
  306. package/components/app/App.js +341 -0
  307. package/components/app/AppContainer.d.ts +3 -0
  308. package/components/app/AppContainer.js +10 -0
  309. package/components/app/drawers/ApiKeyDrawer.d.ts +6 -0
  310. package/components/app/drawers/ApiKeyDrawer.js +66 -0
  311. package/components/app/drawers/AppDrawerType.d.ts +6 -0
  312. package/components/app/drawers/AppDrawerType.js +1 -0
  313. package/components/app/drawers/AssignUserDrawer.d.ts +9 -0
  314. package/components/app/drawers/AssignUserDrawer.js +50 -0
  315. package/components/app/drawers/ViewGroupsDrawer.d.ts +7 -0
  316. package/components/app/drawers/ViewGroupsDrawer.js +6 -0
  317. package/components/app/hooks/useMatchers.d.ts +9 -0
  318. package/components/app/hooks/useMatchers.js +82 -0
  319. package/components/app/hooks/useMatchers.test.d.ts +1 -0
  320. package/components/app/hooks/useMatchers.test.js +237 -0
  321. package/components/app/hooks/useTitle.d.ts +2 -0
  322. package/components/app/hooks/useTitle.js +68 -0
  323. package/components/app/providers/AnalyticProvider.d.ts +10 -0
  324. package/components/app/providers/AnalyticProvider.js +61 -0
  325. package/components/app/providers/ApiConfigProvider.d.ts +9 -0
  326. package/components/app/providers/ApiConfigProvider.js +18 -0
  327. package/components/app/providers/AppDrawerProvider.d.ts +10 -0
  328. package/components/app/providers/AppDrawerProvider.js +29 -0
  329. package/components/app/providers/AvatarProvider.d.ts +7 -0
  330. package/components/app/providers/AvatarProvider.js +31 -0
  331. package/components/app/providers/CustomPluginProvider.d.ts +3 -0
  332. package/components/app/providers/CustomPluginProvider.js +14 -0
  333. package/components/app/providers/FavouritesProvider.d.ts +4 -0
  334. package/components/app/providers/FavouritesProvider.js +134 -0
  335. package/components/app/providers/FieldProvider.d.ts +9 -0
  336. package/components/app/providers/FieldProvider.js +19 -0
  337. package/components/app/providers/HitProvider.d.ts +22 -0
  338. package/components/app/providers/HitProvider.js +113 -0
  339. package/components/app/providers/HitSearchProvider.d.ts +27 -0
  340. package/components/app/providers/HitSearchProvider.js +169 -0
  341. package/components/app/providers/LocalStorageProvider.d.ts +13 -0
  342. package/components/app/providers/LocalStorageProvider.js +41 -0
  343. package/components/app/providers/ModalProvider.d.ts +16 -0
  344. package/components/app/providers/ModalProvider.js +28 -0
  345. package/components/app/providers/OverviewProvider.d.ts +13 -0
  346. package/components/app/providers/OverviewProvider.js +59 -0
  347. package/components/app/providers/ParameterProvider.d.ts +26 -0
  348. package/components/app/providers/ParameterProvider.js +183 -0
  349. package/components/app/providers/SocketProvider.d.ts +57 -0
  350. package/components/app/providers/SocketProvider.js +226 -0
  351. package/components/app/providers/UserListProvider.d.ts +12 -0
  352. package/components/app/providers/UserListProvider.js +30 -0
  353. package/components/app/providers/ViewProvider.d.ts +23 -0
  354. package/components/app/providers/ViewProvider.js +127 -0
  355. package/components/app/providers/ViewProvider.test.d.ts +1 -0
  356. package/components/app/providers/ViewProvider.test.js +168 -0
  357. package/components/elements/Comment.d.ts +17 -0
  358. package/components/elements/Comment.js +114 -0
  359. package/components/elements/EditRow.d.ts +14 -0
  360. package/components/elements/EditRow.js +115 -0
  361. package/components/elements/PluginChip.d.ts +9 -0
  362. package/components/elements/PluginChip.js +22 -0
  363. package/components/elements/PluginTypography.d.ts +9 -0
  364. package/components/elements/PluginTypography.js +22 -0
  365. package/components/elements/ThemedEditor.d.ts +3 -0
  366. package/components/elements/ThemedEditor.js +104 -0
  367. package/components/elements/UserList.d.ts +9 -0
  368. package/components/elements/UserList.js +26 -0
  369. package/components/elements/addons/buttons/CustomButton.d.ts +12 -0
  370. package/components/elements/addons/buttons/CustomButton.js +43 -0
  371. package/components/elements/addons/buttons/CustomIconButton.d.ts +15 -0
  372. package/components/elements/addons/buttons/CustomIconButton.js +48 -0
  373. package/components/elements/addons/buttons/index.d.ts +3 -0
  374. package/components/elements/addons/buttons/index.js +4 -0
  375. package/components/elements/addons/layout/FlexOne.d.ts +4 -0
  376. package/components/elements/addons/layout/FlexOne.js +6 -0
  377. package/components/elements/addons/layout/FlexPort.d.ts +12 -0
  378. package/components/elements/addons/layout/FlexPort.js +15 -0
  379. package/components/elements/addons/layout/FlexVertical.d.ts +8 -0
  380. package/components/elements/addons/layout/FlexVertical.js +13 -0
  381. package/components/elements/addons/layout/vsbox/VSBox.d.ts +16 -0
  382. package/components/elements/addons/layout/vsbox/VSBox.js +27 -0
  383. package/components/elements/addons/layout/vsbox/VSBoxContent.d.ts +4 -0
  384. package/components/elements/addons/layout/vsbox/VSBoxContent.js +6 -0
  385. package/components/elements/addons/layout/vsbox/VSBoxElement.d.ts +8 -0
  386. package/components/elements/addons/layout/vsbox/VSBoxElement.js +39 -0
  387. package/components/elements/addons/layout/vsbox/VSBoxHeader.d.ts +5 -0
  388. package/components/elements/addons/layout/vsbox/VSBoxHeader.js +23 -0
  389. package/components/elements/addons/lists/TuiList.d.ts +8 -0
  390. package/components/elements/addons/lists/TuiList.js +9 -0
  391. package/components/elements/addons/lists/TuiListBase.d.ts +10 -0
  392. package/components/elements/addons/lists/TuiListBase.js +61 -0
  393. package/components/elements/addons/lists/TuiListElement.d.ts +9 -0
  394. package/components/elements/addons/lists/TuiListElement.js +24 -0
  395. package/components/elements/addons/lists/TuiListMenu.d.ts +49 -0
  396. package/components/elements/addons/lists/TuiListMenu.js +33 -0
  397. package/components/elements/addons/lists/TuiListProvider.d.ts +22 -0
  398. package/components/elements/addons/lists/TuiListProvider.js +117 -0
  399. package/components/elements/addons/lists/hooks/useTuiListKeyboard.d.ts +5 -0
  400. package/components/elements/addons/lists/hooks/useTuiListKeyboard.js +41 -0
  401. package/components/elements/addons/lists/index.d.ts +19 -0
  402. package/components/elements/addons/lists/index.js +4 -0
  403. package/components/elements/addons/lists/table/TuiTable.d.ts +14 -0
  404. package/components/elements/addons/lists/table/TuiTable.js +81 -0
  405. package/components/elements/addons/lists/table/TuiTableBody.d.ts +14 -0
  406. package/components/elements/addons/lists/table/TuiTableBody.js +19 -0
  407. package/components/elements/addons/lists/table/TuiTableHead.d.ts +8 -0
  408. package/components/elements/addons/lists/table/TuiTableHead.js +9 -0
  409. package/components/elements/addons/lists/table/TuiTableHeader.d.ts +6 -0
  410. package/components/elements/addons/lists/table/TuiTableHeader.js +8 -0
  411. package/components/elements/addons/lists/table/TuiTableLayout.d.ts +12 -0
  412. package/components/elements/addons/lists/table/TuiTableLayout.js +41 -0
  413. package/components/elements/addons/lists/table/index.d.ts +15 -0
  414. package/components/elements/addons/lists/table/index.js +1 -0
  415. package/components/elements/addons/search/SearchPagination.d.ts +9 -0
  416. package/components/elements/addons/search/SearchPagination.js +12 -0
  417. package/components/elements/addons/search/SearchTotal.d.ts +8 -0
  418. package/components/elements/addons/search/SearchTotal.js +13 -0
  419. package/components/elements/addons/search/phrase/Phrase.d.ts +19 -0
  420. package/components/elements/addons/search/phrase/Phrase.js +89 -0
  421. package/components/elements/addons/search/phrase/PhraseConsumer.d.ts +13 -0
  422. package/components/elements/addons/search/phrase/PhraseConsumer.js +22 -0
  423. package/components/elements/addons/search/phrase/PhraseLexer.d.ts +26 -0
  424. package/components/elements/addons/search/phrase/PhraseLexer.js +130 -0
  425. package/components/elements/addons/search/phrase/index.d.ts +40 -0
  426. package/components/elements/addons/search/phrase/index.js +45 -0
  427. package/components/elements/addons/search/phrase/word/WordLexer.d.ts +5 -0
  428. package/components/elements/addons/search/phrase/word/WordLexer.js +8 -0
  429. package/components/elements/addons/search/phrase/word/WordSuggester.d.ts +6 -0
  430. package/components/elements/addons/search/phrase/word/WordSuggester.js +9 -0
  431. package/components/elements/addons/search/phrase/word/consumers/WhitespaceConsumer.d.ts +7 -0
  432. package/components/elements/addons/search/phrase/word/consumers/WhitespaceConsumer.js +17 -0
  433. package/components/elements/addons/search/phrase/word/consumers/WordConsumer.d.ts +7 -0
  434. package/components/elements/addons/search/phrase/word/consumers/WordConsumer.js +17 -0
  435. package/components/elements/display/ActionButton.d.ts +8 -0
  436. package/components/elements/display/ActionButton.js +18 -0
  437. package/components/elements/display/Classification.d.ts +3 -0
  438. package/components/elements/display/Classification.js +22 -0
  439. package/components/elements/display/DocumentationButton.d.ts +3 -0
  440. package/components/elements/display/DocumentationButton.js +34 -0
  441. package/components/elements/display/DynamicTabs.d.ts +8 -0
  442. package/components/elements/display/DynamicTabs.js +21 -0
  443. package/components/elements/display/HandlebarsMarkdown.d.ts +9 -0
  444. package/components/elements/display/HandlebarsMarkdown.js +78 -0
  445. package/components/elements/display/HowlerAvatar.d.ts +6 -0
  446. package/components/elements/display/HowlerAvatar.js +44 -0
  447. package/components/elements/display/HowlerAvatarHeader.d.ts +6 -0
  448. package/components/elements/display/HowlerAvatarHeader.js +19 -0
  449. package/components/elements/display/HowlerCard.d.ts +3 -0
  450. package/components/elements/display/HowlerCard.js +5 -0
  451. package/components/elements/display/Image.d.ts +3 -0
  452. package/components/elements/display/Image.js +23 -0
  453. package/components/elements/display/ItemManager.d.ts +25 -0
  454. package/components/elements/display/ItemManager.js +35 -0
  455. package/components/elements/display/Markdown.d.ts +10 -0
  456. package/components/elements/display/Markdown.js +133 -0
  457. package/components/elements/display/Modal.d.ts +3 -0
  458. package/components/elements/display/Modal.js +30 -0
  459. package/components/elements/display/Notebook.d.ts +5 -0
  460. package/components/elements/display/Notebook.js +6 -0
  461. package/components/elements/display/QueryResultText.d.ts +6 -0
  462. package/components/elements/display/QueryResultText.js +15 -0
  463. package/components/elements/display/TextDivider.d.ts +3 -0
  464. package/components/elements/display/TextDivider.js +40 -0
  465. package/components/elements/display/TypingIndicator.d.ts +2 -0
  466. package/components/elements/display/TypingIndicator.js +29 -0
  467. package/components/elements/display/UserPageWrapper.d.ts +6 -0
  468. package/components/elements/display/UserPageWrapper.js +6 -0
  469. package/components/elements/display/features/DevelopmentBanner.d.ts +3 -0
  470. package/components/elements/display/features/DevelopmentBanner.js +14 -0
  471. package/components/elements/display/features/DevelopmentIcon.d.ts +3 -0
  472. package/components/elements/display/features/DevelopmentIcon.js +15 -0
  473. package/components/elements/display/handlebars/helpers.d.ts +12 -0
  474. package/components/elements/display/handlebars/helpers.js +223 -0
  475. package/components/elements/display/icons/BundleButton.d.ts +6 -0
  476. package/components/elements/display/icons/BundleButton.js +32 -0
  477. package/components/elements/display/icons/Iconified.d.ts +9 -0
  478. package/components/elements/display/icons/Iconified.js +11 -0
  479. package/components/elements/display/icons/SocketBadge.d.ts +5 -0
  480. package/components/elements/display/icons/SocketBadge.js +60 -0
  481. package/components/elements/display/json/JSONViewer.d.ts +8 -0
  482. package/components/elements/display/json/JSONViewer.js +46 -0
  483. package/components/elements/display/markdownPlugins/tabs.d.ts +3 -0
  484. package/components/elements/display/markdownPlugins/tabs.js +70 -0
  485. package/components/elements/display/modals/ConfirmDeleteModal.d.ts +5 -0
  486. package/components/elements/display/modals/ConfirmDeleteModal.js +15 -0
  487. package/components/elements/display/modals/ConfirmNotebookModal.d.ts +5 -0
  488. package/components/elements/display/modals/ConfirmNotebookModal.js +15 -0
  489. package/components/elements/display/modals/CreateActionModal.d.ts +5 -0
  490. package/components/elements/display/modals/CreateActionModal.js +35 -0
  491. package/components/elements/display/modals/LoginErrorModal.d.ts +5 -0
  492. package/components/elements/display/modals/LoginErrorModal.js +9 -0
  493. package/components/elements/display/modals/RationaleModal.d.ts +5 -0
  494. package/components/elements/display/modals/RationaleModal.js +28 -0
  495. package/components/elements/hit/HitActions.d.ts +6 -0
  496. package/components/elements/hit/HitActions.js +158 -0
  497. package/components/elements/hit/HitBanner.d.ts +15 -0
  498. package/components/elements/hit/HitBanner.js +121 -0
  499. package/components/elements/hit/HitBannerTooltip.d.ts +6 -0
  500. package/components/elements/hit/HitBannerTooltip.js +9 -0
  501. package/components/elements/hit/HitCard.d.ts +7 -0
  502. package/components/elements/hit/HitCard.js +25 -0
  503. package/components/elements/hit/HitComments.d.ts +11 -0
  504. package/components/elements/hit/HitComments.js +176 -0
  505. package/components/elements/hit/HitDetails.d.ts +5 -0
  506. package/components/elements/hit/HitDetails.js +125 -0
  507. package/components/elements/hit/HitLabels.d.ts +6 -0
  508. package/components/elements/hit/HitLabels.js +121 -0
  509. package/components/elements/hit/HitLayout.d.ts +5 -0
  510. package/components/elements/hit/HitLayout.js +6 -0
  511. package/components/elements/hit/HitNotebooks.d.ts +8 -0
  512. package/components/elements/hit/HitNotebooks.js +145 -0
  513. package/components/elements/hit/HitOutline.d.ts +9 -0
  514. package/components/elements/hit/HitOutline.js +36 -0
  515. package/components/elements/hit/HitOverview.d.ts +6 -0
  516. package/components/elements/hit/HitOverview.js +22 -0
  517. package/components/elements/hit/HitQuickSearch.d.ts +8 -0
  518. package/components/elements/hit/HitQuickSearch.js +31 -0
  519. package/components/elements/hit/HitRelated.d.ts +6 -0
  520. package/components/elements/hit/HitRelated.js +7 -0
  521. package/components/elements/hit/HitShortcuts.d.ts +5 -0
  522. package/components/elements/hit/HitShortcuts.js +6 -0
  523. package/components/elements/hit/HitSummary.d.ts +11 -0
  524. package/components/elements/hit/HitSummary.js +152 -0
  525. package/components/elements/hit/HitWorklog.d.ts +10 -0
  526. package/components/elements/hit/HitWorklog.js +97 -0
  527. package/components/elements/hit/actions/ButtonActions.d.ts +12 -0
  528. package/components/elements/hit/actions/ButtonActions.js +126 -0
  529. package/components/elements/hit/actions/DropdownActions.d.ts +12 -0
  530. package/components/elements/hit/actions/DropdownActions.js +28 -0
  531. package/components/elements/hit/actions/SharedComponents.d.ts +18 -0
  532. package/components/elements/hit/actions/SharedComponents.js +21 -0
  533. package/components/elements/hit/aggregate/HitGraph.d.ts +6 -0
  534. package/components/elements/hit/aggregate/HitGraph.js +236 -0
  535. package/components/elements/hit/elements/Assigned.d.ts +9 -0
  536. package/components/elements/hit/elements/Assigned.js +31 -0
  537. package/components/elements/hit/elements/EscalationChip.d.ts +9 -0
  538. package/components/elements/hit/elements/EscalationChip.js +10 -0
  539. package/components/elements/hit/elements/HitTimestamp.d.ts +8 -0
  540. package/components/elements/hit/elements/HitTimestamp.js +48 -0
  541. package/components/elements/hit/outlines/DefaultOutline.d.ts +12 -0
  542. package/components/elements/hit/outlines/DefaultOutline.js +47 -0
  543. package/components/elements/hit/outlines/al/AssemblyLineRules.d.ts +5 -0
  544. package/components/elements/hit/outlines/al/AssemblyLineRules.js +46 -0
  545. package/components/elements/hit/related/PivotLink.d.ts +10 -0
  546. package/components/elements/hit/related/PivotLink.js +49 -0
  547. package/components/elements/hit/related/RelatedIcon.d.ts +8 -0
  548. package/components/elements/hit/related/RelatedIcon.js +32 -0
  549. package/components/elements/hit/related/RelatedLink.d.ts +8 -0
  550. package/components/elements/hit/related/RelatedLink.js +22 -0
  551. package/components/elements/view/ViewTitle.d.ts +10 -0
  552. package/components/elements/view/ViewTitle.js +25 -0
  553. package/components/hooks/useHitActions.d.ts +14 -0
  554. package/components/hooks/useHitActions.js +191 -0
  555. package/components/hooks/useHitSelection.d.ts +8 -0
  556. package/components/hooks/useHitSelection.js +78 -0
  557. package/components/hooks/useMyApi.d.ts +10 -0
  558. package/components/hooks/useMyApi.js +43 -0
  559. package/components/hooks/useMyChart.d.ts +276 -0
  560. package/components/hooks/useMyChart.js +115 -0
  561. package/components/hooks/useMyLocalStorage.d.ts +17 -0
  562. package/components/hooks/useMyLocalStorage.js +15 -0
  563. package/components/hooks/useMyPreferences.d.ts +3 -0
  564. package/components/hooks/useMyPreferences.js +272 -0
  565. package/components/hooks/useMySearch.d.ts +4 -0
  566. package/components/hooks/useMySearch.js +47 -0
  567. package/components/hooks/useMySitemap.d.ts +3 -0
  568. package/components/hooks/useMySitemap.js +217 -0
  569. package/components/hooks/useMySnackbar.d.ts +8 -0
  570. package/components/hooks/useMySnackbar.js +47 -0
  571. package/components/hooks/useMyTheme.d.ts +3 -0
  572. package/components/hooks/useMyTheme.js +30 -0
  573. package/components/hooks/useMyUser.d.ts +4 -0
  574. package/components/hooks/useMyUser.js +27 -0
  575. package/components/hooks/useMyUserFunctions.d.ts +118 -0
  576. package/components/hooks/useMyUserFunctions.js +113 -0
  577. package/components/hooks/useMyUserList.d.ts +4 -0
  578. package/components/hooks/useMyUserList.js +11 -0
  579. package/components/hooks/useMyUtils.d.ts +4 -0
  580. package/components/hooks/useMyUtils.js +10 -0
  581. package/components/hooks/useScrollRestoration.d.ts +7 -0
  582. package/components/hooks/useScrollRestoration.js +32 -0
  583. package/components/logins/Login.d.ts +2 -0
  584. package/components/logins/Login.js +32 -0
  585. package/components/logins/auth/OAuthLogin.d.ts +6 -0
  586. package/components/logins/auth/OAuthLogin.js +25 -0
  587. package/components/logins/auth/UserPassLogin.d.ts +2 -0
  588. package/components/logins/auth/UserPassLogin.js +26 -0
  589. package/components/logins/hooks/useLogin.d.ts +7 -0
  590. package/components/logins/hooks/useLogin.js +90 -0
  591. package/components/routes/404.d.ts +3 -0
  592. package/components/routes/404.js +10 -0
  593. package/components/routes/ErrorBoundary.d.ts +14 -0
  594. package/components/routes/ErrorBoundary.js +24 -0
  595. package/components/routes/ErrorOccured.d.ts +3 -0
  596. package/components/routes/ErrorOccured.js +13 -0
  597. package/components/routes/Logout.d.ts +3 -0
  598. package/components/routes/Logout.js +37 -0
  599. package/components/routes/action/edit/ActionEditor.d.ts +14 -0
  600. package/components/routes/action/edit/ActionEditor.js +137 -0
  601. package/components/routes/action/shared/ActionReportDisplay.d.ts +7 -0
  602. package/components/routes/action/shared/ActionReportDisplay.js +21 -0
  603. package/components/routes/action/shared/OperationEntry.d.ts +13 -0
  604. package/components/routes/action/shared/OperationEntry.js +31 -0
  605. package/components/routes/action/shared/OperationStep.d.ts +11 -0
  606. package/components/routes/action/shared/OperationStep.js +102 -0
  607. package/components/routes/action/useMyActionFunctions.d.ts +19 -0
  608. package/components/routes/action/useMyActionFunctions.js +156 -0
  609. package/components/routes/action/view/ActionDetails.d.ts +2 -0
  610. package/components/routes/action/view/ActionDetails.js +80 -0
  611. package/components/routes/action/view/ActionSearch.d.ts +3 -0
  612. package/components/routes/action/view/ActionSearch.js +119 -0
  613. package/components/routes/action/view/Integrations.d.ts +3 -0
  614. package/components/routes/action/view/Integrations.js +25 -0
  615. package/components/routes/admin/users/UserEditor.d.ts +3 -0
  616. package/components/routes/admin/users/UserEditor.js +28 -0
  617. package/components/routes/admin/users/UserSearch.d.ts +3 -0
  618. package/components/routes/admin/users/UserSearch.js +124 -0
  619. package/components/routes/advanced/QueryBuilder.d.ts +3 -0
  620. package/components/routes/advanced/QueryBuilder.js +264 -0
  621. package/components/routes/advanced/QueryEditor.d.ts +14 -0
  622. package/components/routes/advanced/QueryEditor.js +90 -0
  623. package/components/routes/advanced/RuleModal.d.ts +7 -0
  624. package/components/routes/advanced/RuleModal.js +83 -0
  625. package/components/routes/advanced/eqlCompletionProvider.d.ts +3 -0
  626. package/components/routes/advanced/eqlCompletionProvider.js +84 -0
  627. package/components/routes/advanced/eqlTokenProvider.d.ts +8 -0
  628. package/components/routes/advanced/eqlTokenProvider.js +86 -0
  629. package/components/routes/advanced/historyCompletionProvider.d.ts +3 -0
  630. package/components/routes/advanced/historyCompletionProvider.js +48 -0
  631. package/components/routes/advanced/luceneCompletionProvider.d.ts +3 -0
  632. package/components/routes/advanced/luceneCompletionProvider.js +98 -0
  633. package/components/routes/advanced/luceneTokenProvider.d.ts +9 -0
  634. package/components/routes/advanced/luceneTokenProvider.js +104 -0
  635. package/components/routes/advanced/yamlCompletionProvider.d.ts +3 -0
  636. package/components/routes/advanced/yamlCompletionProvider.js +50 -0
  637. package/components/routes/analytics/AnalyticComments.d.ts +7 -0
  638. package/components/routes/analytics/AnalyticComments.js +115 -0
  639. package/components/routes/analytics/AnalyticDetails.d.ts +2 -0
  640. package/components/routes/analytics/AnalyticDetails.js +133 -0
  641. package/components/routes/analytics/AnalyticHitComments.d.ts +6 -0
  642. package/components/routes/analytics/AnalyticHitComments.js +49 -0
  643. package/components/routes/analytics/AnalyticNotebooks.d.ts +7 -0
  644. package/components/routes/analytics/AnalyticNotebooks.js +60 -0
  645. package/components/routes/analytics/AnalyticOverview.d.ts +8 -0
  646. package/components/routes/analytics/AnalyticOverview.js +60 -0
  647. package/components/routes/analytics/AnalyticOverviews.d.ts +7 -0
  648. package/components/routes/analytics/AnalyticOverviews.js +39 -0
  649. package/components/routes/analytics/AnalyticSearch.d.ts +3 -0
  650. package/components/routes/analytics/AnalyticSearch.js +138 -0
  651. package/components/routes/analytics/AnalyticTemplates.d.ts +7 -0
  652. package/components/routes/analytics/AnalyticTemplates.js +43 -0
  653. package/components/routes/analytics/RuleView.d.ts +8 -0
  654. package/components/routes/analytics/RuleView.js +48 -0
  655. package/components/routes/analytics/TriageSettings.d.ts +8 -0
  656. package/components/routes/analytics/TriageSettings.js +49 -0
  657. package/components/routes/analytics/widgets/Assessment.d.ts +6 -0
  658. package/components/routes/analytics/widgets/Assessment.js +45 -0
  659. package/components/routes/analytics/widgets/Created.d.ts +6 -0
  660. package/components/routes/analytics/widgets/Created.js +44 -0
  661. package/components/routes/analytics/widgets/Detection.d.ts +7 -0
  662. package/components/routes/analytics/widgets/Detection.js +9 -0
  663. package/components/routes/analytics/widgets/Escalation.d.ts +7 -0
  664. package/components/routes/analytics/widgets/Escalation.js +40 -0
  665. package/components/routes/analytics/widgets/Stacked.d.ts +8 -0
  666. package/components/routes/analytics/widgets/Stacked.js +77 -0
  667. package/components/routes/analytics/widgets/Status.d.ts +6 -0
  668. package/components/routes/analytics/widgets/Status.js +11 -0
  669. package/components/routes/dossiers/DossierCard.d.ts +8 -0
  670. package/components/routes/dossiers/DossierCard.js +11 -0
  671. package/components/routes/dossiers/DossierEditor.d.ts +2 -0
  672. package/components/routes/dossiers/DossierEditor.js +129 -0
  673. package/components/routes/dossiers/Dossiers.d.ts +2 -0
  674. package/components/routes/dossiers/Dossiers.js +116 -0
  675. package/components/routes/dossiers/LeadEditor.d.ts +13 -0
  676. package/components/routes/dossiers/LeadEditor.js +36 -0
  677. package/components/routes/dossiers/LeadForm.d.ts +8 -0
  678. package/components/routes/dossiers/LeadForm.js +51 -0
  679. package/components/routes/dossiers/PivotForm.d.ts +13 -0
  680. package/components/routes/dossiers/PivotForm.js +82 -0
  681. package/components/routes/help/ActionDocumentation.d.ts +9 -0
  682. package/components/routes/help/ActionDocumentation.js +31 -0
  683. package/components/routes/help/ActionIntroductionDocumentation.d.ts +3 -0
  684. package/components/routes/help/ActionIntroductionDocumentation.js +61 -0
  685. package/components/routes/help/ApiDocumentation.d.ts +3 -0
  686. package/components/routes/help/ApiDocumentation.js +55 -0
  687. package/components/routes/help/AuthDocumentation.d.ts +3 -0
  688. package/components/routes/help/AuthDocumentation.js +15 -0
  689. package/components/routes/help/BundleDocumentation.d.ts +3 -0
  690. package/components/routes/help/BundleDocumentation.js +12 -0
  691. package/components/routes/help/ClientDocumentation.d.ts +3 -0
  692. package/components/routes/help/ClientDocumentation.js +15 -0
  693. package/components/routes/help/Help.d.ts +2 -0
  694. package/components/routes/help/Help.js +24 -0
  695. package/components/routes/help/HitBannerDocumentation.d.ts +3 -0
  696. package/components/routes/help/HitBannerDocumentation.js +49 -0
  697. package/components/routes/help/HitDocumentation.d.ts +3 -0
  698. package/components/routes/help/HitDocumentation.js +34 -0
  699. package/components/routes/help/HitLabelsDocumentation.d.ts +3 -0
  700. package/components/routes/help/HitLabelsDocumentation.js +21 -0
  701. package/components/routes/help/HitLinksDocumentation.d.ts +3 -0
  702. package/components/routes/help/HitLinksDocumentation.js +17 -0
  703. package/components/routes/help/HitSchemaDocumentation.d.ts +3 -0
  704. package/components/routes/help/HitSchemaDocumentation.js +80 -0
  705. package/components/routes/help/NotebookDocumentation.d.ts +3 -0
  706. package/components/routes/help/NotebookDocumentation.js +18 -0
  707. package/components/routes/help/OverviewDocumentation.d.ts +3 -0
  708. package/components/routes/help/OverviewDocumentation.js +13 -0
  709. package/components/routes/help/RetentionDocumentation.d.ts +3 -0
  710. package/components/routes/help/RetentionDocumentation.js +35 -0
  711. package/components/routes/help/SearchDocumentation.d.ts +3 -0
  712. package/components/routes/help/SearchDocumentation.js +114 -0
  713. package/components/routes/help/TemplateDocumentation.d.ts +3 -0
  714. package/components/routes/help/TemplateDocumentation.js +46 -0
  715. package/components/routes/help/ViewDocumentation.d.ts +3 -0
  716. package/components/routes/help/ViewDocumentation.js +18 -0
  717. package/components/routes/help/components/HelpTabs.d.ts +6 -0
  718. package/components/routes/help/components/HelpTabs.js +30 -0
  719. package/components/routes/help/markdown/en/actionIntroduction.md.js +1 -0
  720. package/components/routes/help/markdown/en/authentication.md.js +1 -0
  721. package/components/routes/help/markdown/en/bundles.md.js +1 -0
  722. package/components/routes/help/markdown/en/client.md.js +1 -0
  723. package/components/routes/help/markdown/en/links.md.js +1 -0
  724. package/components/routes/help/markdown/en/notebook.md.js +1 -0
  725. package/components/routes/help/markdown/en/retention.md.js +1 -0
  726. package/components/routes/help/markdown/en/schema.md.js +1 -0
  727. package/components/routes/help/markdown/en/templates.md.js +1 -0
  728. package/components/routes/help/markdown/en/views.md.js +1 -0
  729. package/components/routes/help/markdown/fr/actionIntroduction.md.js +1 -0
  730. package/components/routes/help/markdown/fr/authentication.md.js +1 -0
  731. package/components/routes/help/markdown/fr/bundles.md.js +1 -0
  732. package/components/routes/help/markdown/fr/client.md.js +1 -0
  733. package/components/routes/help/markdown/fr/links.md.js +1 -0
  734. package/components/routes/help/markdown/fr/notebook.md.js +1 -0
  735. package/components/routes/help/markdown/fr/retention.md.js +1 -0
  736. package/components/routes/help/markdown/fr/schema.md.js +1 -0
  737. package/components/routes/help/markdown/fr/templates.md.js +1 -0
  738. package/components/routes/help/markdown/fr/views.md.js +1 -0
  739. package/components/routes/hits/search/BundleParentMenu.d.ts +6 -0
  740. package/components/routes/hits/search/BundleParentMenu.js +32 -0
  741. package/components/routes/hits/search/BundleScroller.d.ts +2 -0
  742. package/components/routes/hits/search/BundleScroller.js +6 -0
  743. package/components/routes/hits/search/CustomSort.d.ts +2 -0
  744. package/components/routes/hits/search/CustomSort.js +37 -0
  745. package/components/routes/hits/search/HitBrowser.d.ts +3 -0
  746. package/components/routes/hits/search/HitBrowser.js +174 -0
  747. package/components/routes/hits/search/HitContextMenu.d.ts +7 -0
  748. package/components/routes/hits/search/HitContextMenu.js +115 -0
  749. package/components/routes/hits/search/HitQuery.d.ts +9 -0
  750. package/components/routes/hits/search/HitQuery.js +150 -0
  751. package/components/routes/hits/search/InformationPane.d.ts +5 -0
  752. package/components/routes/hits/search/InformationPane.js +204 -0
  753. package/components/routes/hits/search/SearchPane.d.ts +3 -0
  754. package/components/routes/hits/search/SearchPane.js +132 -0
  755. package/components/routes/hits/search/ViewLink.d.ts +2 -0
  756. package/components/routes/hits/search/ViewLink.js +42 -0
  757. package/components/routes/hits/search/grid/AddColumnModal.d.ts +8 -0
  758. package/components/routes/hits/search/grid/AddColumnModal.js +31 -0
  759. package/components/routes/hits/search/grid/ColumnHeader.d.ts +8 -0
  760. package/components/routes/hits/search/grid/ColumnHeader.js +30 -0
  761. package/components/routes/hits/search/grid/EnhancedCell.d.ts +8 -0
  762. package/components/routes/hits/search/grid/EnhancedCell.js +18 -0
  763. package/components/routes/hits/search/grid/HitGrid.d.ts +3 -0
  764. package/components/routes/hits/search/grid/HitGrid.js +139 -0
  765. package/components/routes/hits/search/grid/HitRow.d.ts +10 -0
  766. package/components/routes/hits/search/grid/HitRow.js +50 -0
  767. package/components/routes/hits/search/shared/CustomSpan.d.ts +2 -0
  768. package/components/routes/hits/search/shared/CustomSpan.js +24 -0
  769. package/components/routes/hits/search/shared/HitFilter.d.ts +4 -0
  770. package/components/routes/hits/search/shared/HitFilter.js +64 -0
  771. package/components/routes/hits/search/shared/HitSort.d.ts +4 -0
  772. package/components/routes/hits/search/shared/HitSort.js +65 -0
  773. package/components/routes/hits/search/shared/QuerySettings.d.ts +6 -0
  774. package/components/routes/hits/search/shared/QuerySettings.js +22 -0
  775. package/components/routes/hits/search/shared/SearchSpan.d.ts +5 -0
  776. package/components/routes/hits/search/shared/SearchSpan.js +44 -0
  777. package/components/routes/hits/view/HitViewer.d.ts +7 -0
  778. package/components/routes/hits/view/HitViewer.js +162 -0
  779. package/components/routes/hits/view/LeadRenderer.d.ts +7 -0
  780. package/components/routes/hits/view/LeadRenderer.js +21 -0
  781. package/components/routes/home/AddNewCard.d.ts +7 -0
  782. package/components/routes/home/AddNewCard.js +103 -0
  783. package/components/routes/home/AnalyticCard.d.ts +7 -0
  784. package/components/routes/home/AnalyticCard.js +30 -0
  785. package/components/routes/home/EntryWrapper.d.ts +7 -0
  786. package/components/routes/home/EntryWrapper.js +19 -0
  787. package/components/routes/home/ViewCard.d.ts +7 -0
  788. package/components/routes/home/ViewCard.js +43 -0
  789. package/components/routes/home/index.d.ts +3 -0
  790. package/components/routes/home/index.js +122 -0
  791. package/components/routes/overviews/OverviewCard.d.ts +8 -0
  792. package/components/routes/overviews/OverviewCard.js +16 -0
  793. package/components/routes/overviews/OverviewEditor.d.ts +12 -0
  794. package/components/routes/overviews/OverviewEditor.js +56 -0
  795. package/components/routes/overviews/OverviewViewer.d.ts +2 -0
  796. package/components/routes/overviews/OverviewViewer.js +220 -0
  797. package/components/routes/overviews/Overviews.d.ts +2 -0
  798. package/components/routes/overviews/Overviews.js +116 -0
  799. package/components/routes/overviews/markdownExtendedTokenProvider.d.ts +6 -0
  800. package/components/routes/overviews/markdownExtendedTokenProvider.js +254 -0
  801. package/components/routes/overviews/startingTemplate.d.ts +1 -0
  802. package/components/routes/overviews/startingTemplate.js +27 -0
  803. package/components/routes/overviews/template/en.md.js +1 -0
  804. package/components/routes/overviews/template/fr.md.js +1 -0
  805. package/components/routes/settings/AdminSection.d.ts +3 -0
  806. package/components/routes/settings/AdminSection.js +11 -0
  807. package/components/routes/settings/LocalSection.d.ts +3 -0
  808. package/components/routes/settings/LocalSection.js +26 -0
  809. package/components/routes/settings/ProfileSection.d.ts +10 -0
  810. package/components/routes/settings/ProfileSection.js +53 -0
  811. package/components/routes/settings/SecuritySection.d.ts +10 -0
  812. package/components/routes/settings/SecuritySection.js +31 -0
  813. package/components/routes/settings/Settings.d.ts +3 -0
  814. package/components/routes/settings/Settings.js +22 -0
  815. package/components/routes/settings/SettingsSection.d.ts +7 -0
  816. package/components/routes/settings/SettingsSection.js +10 -0
  817. package/components/routes/templates/TemplateCard.d.ts +7 -0
  818. package/components/routes/templates/TemplateCard.js +13 -0
  819. package/components/routes/templates/TemplateDnD.d.ts +8 -0
  820. package/components/routes/templates/TemplateDnD.js +12 -0
  821. package/components/routes/templates/TemplateEditor.d.ts +9 -0
  822. package/components/routes/templates/TemplateEditor.js +54 -0
  823. package/components/routes/templates/TemplateViewer.d.ts +2 -0
  824. package/components/routes/templates/TemplateViewer.js +156 -0
  825. package/components/routes/templates/Templates.d.ts +2 -0
  826. package/components/routes/templates/Templates.js +109 -0
  827. package/components/routes/views/ViewComposer.d.ts +3 -0
  828. package/components/routes/views/ViewComposer.js +175 -0
  829. package/components/routes/views/Views.d.ts +2 -0
  830. package/components/routes/views/Views.js +182 -0
  831. package/i18n.d.ts +3 -0
  832. package/i18n.js +43 -0
  833. package/index.d.ts +3 -0
  834. package/index.js +17 -0
  835. package/locales/en/help/main.json +11 -11
  836. package/locales/en/help/search.json +182 -184
  837. package/locales/en/translation.json +691 -797
  838. package/locales/fr/help/main.json +11 -11
  839. package/locales/fr/help/search.json +182 -184
  840. package/locales/fr/translation.json +690 -795
  841. package/package.json +157 -604
  842. package/plugins/HowlerPlugin.d.ts +115 -0
  843. package/plugins/HowlerPlugin.js +273 -0
  844. package/plugins/store.d.ts +95 -0
  845. package/plugins/store.js +96 -0
  846. package/rest/AxiosClient.d.ts +10 -0
  847. package/rest/AxiosClient.js +60 -0
  848. package/rest/FetchClient.d.ts +7 -0
  849. package/rest/FetchClient.js +16 -0
  850. package/rest/index.d.ts +6 -0
  851. package/rest/index.js +1 -0
  852. package/setupTests.d.ts +1 -0
  853. package/setupTests.js +12 -0
  854. package/tests/MockLocalStorage.d.ts +5 -0
  855. package/tests/MockLocalStorage.js +44 -0
  856. package/tests/server-handlers.d.ts +5 -0
  857. package/tests/server-handlers.js +97 -0
  858. package/tests/server.d.ts +3 -0
  859. package/tests/server.js +5 -0
  860. package/utils/Throttler.d.ts +9 -0
  861. package/utils/Throttler.js +38 -0
  862. package/utils/actionUtils.d.ts +31 -0
  863. package/utils/actionUtils.js +88 -0
  864. package/utils/constants.d.ts +79 -0
  865. package/utils/constants.js +114 -0
  866. package/utils/hit.json +30291 -30291
  867. package/utils/hitFunctions.d.ts +2 -0
  868. package/utils/hitFunctions.js +8 -0
  869. package/utils/localStorage.d.ts +21 -0
  870. package/utils/localStorage.js +48 -0
  871. package/utils/menuUtils.d.ts +89 -0
  872. package/utils/menuUtils.js +243 -0
  873. package/utils/sessionStorage.d.ts +7 -0
  874. package/utils/sessionStorage.js +44 -0
  875. package/utils/socketUtils.d.ts +8 -0
  876. package/utils/socketUtils.js +8 -0
  877. package/utils/stringUtils.d.ts +8 -0
  878. package/utils/stringUtils.js +47 -0
  879. package/utils/utils.d.ts +33 -0
  880. package/utils/utils.js +180 -0
  881. package/utils/xsrf.d.ts +2 -0
  882. package/utils/xsrf.js +16 -0
  883. package/README.fr.md +0 -39
  884. package/README.md +0 -29
  885. package/api/action/execute.ts +0 -19
  886. package/api/action/index.ts +0 -36
  887. package/api/action/operations.ts +0 -11
  888. package/api/analytic/comments/index.ts +0 -27
  889. package/api/analytic/comments/react.ts +0 -14
  890. package/api/analytic/favourite.ts +0 -14
  891. package/api/analytic/index.ts +0 -27
  892. package/api/analytic/notebooks/index.ts +0 -15
  893. package/api/analytic/owner.ts +0 -11
  894. package/api/analytic/rules.ts +0 -13
  895. package/api/auth/apikey.ts +0 -20
  896. package/api/auth/index.ts +0 -9
  897. package/api/auth/login.ts +0 -35
  898. package/api/configs/index.ts +0 -10
  899. package/api/dossier/hit.ts +0 -10
  900. package/api/dossier/index.ts +0 -26
  901. package/api/help.ts +0 -71
  902. package/api/hit/assign.ts +0 -11
  903. package/api/hit/comments/index.ts +0 -27
  904. package/api/hit/comments/react.ts +0 -15
  905. package/api/hit/index.ts +0 -56
  906. package/api/hit/labels.ts +0 -16
  907. package/api/hit/overwrite.ts +0 -11
  908. package/api/hit/transition.ts +0 -12
  909. package/api/index.ts +0 -301
  910. package/api/notebook/environments.ts +0 -14
  911. package/api/notebook/index.ts +0 -20
  912. package/api/overview/index.ts +0 -22
  913. package/api/search/action.ts +0 -12
  914. package/api/search/analytic.ts +0 -12
  915. package/api/search/count/hit.ts +0 -11
  916. package/api/search/count/index.ts +0 -18
  917. package/api/search/dossier.ts +0 -12
  918. package/api/search/eql/hit.ts +0 -12
  919. package/api/search/facet/hit.ts +0 -11
  920. package/api/search/facet/index.ts +0 -19
  921. package/api/search/fields/hit.ts +0 -12
  922. package/api/search/fields/index.ts +0 -29
  923. package/api/search/fields/user.ts +0 -14
  924. package/api/search/grouped/hit.ts +0 -15
  925. package/api/search/grouped/index.ts +0 -34
  926. package/api/search/grouped/user.ts +0 -30
  927. package/api/search/histogram/hit.ts +0 -11
  928. package/api/search/histogram/index.ts +0 -20
  929. package/api/search/hit.ts +0 -17
  930. package/api/search/index.ts +0 -63
  931. package/api/search/overview.ts +0 -12
  932. package/api/search/sigma/hit.ts +0 -12
  933. package/api/search/template.ts +0 -12
  934. package/api/search/user.ts +0 -21
  935. package/api/search/view.ts +0 -12
  936. package/api/template/index.ts +0 -22
  937. package/api/user/avatar/index.ts +0 -10
  938. package/api/user/groups.ts +0 -12
  939. package/api/user/index.ts +0 -20
  940. package/api/user/whoami.ts +0 -11
  941. package/api/view/favourite.ts +0 -14
  942. package/api/view/index.ts +0 -25
  943. package/branding/AppBrand.tsx +0 -161
  944. package/commons/components/app/AppConfigs.ts +0 -179
  945. package/commons/components/app/AppConstants.ts +0 -11
  946. package/commons/components/app/AppContexts.ts +0 -142
  947. package/commons/components/app/AppDefaults.ts +0 -52
  948. package/commons/components/app/AppNotificationService.ts +0 -7
  949. package/commons/components/app/AppProvider.tsx +0 -86
  950. package/commons/components/app/AppSearchService.ts +0 -33
  951. package/commons/components/app/AppSkeleton.tsx +0 -321
  952. package/commons/components/app/AppUserService.ts +0 -21
  953. package/commons/components/app/hooks/useApp.tsx +0 -6
  954. package/commons/components/app/hooks/useAppBanner.tsx +0 -7
  955. package/commons/components/app/hooks/useAppBar.tsx +0 -6
  956. package/commons/components/app/hooks/useAppBarHeight.tsx +0 -27
  957. package/commons/components/app/hooks/useAppBarScrollTrigger.tsx +0 -8
  958. package/commons/components/app/hooks/useAppBreadcrumbs.tsx +0 -6
  959. package/commons/components/app/hooks/useAppConfigs.tsx +0 -54
  960. package/commons/components/app/hooks/useAppLanguage.tsx +0 -29
  961. package/commons/components/app/hooks/useAppLayout.tsx +0 -6
  962. package/commons/components/app/hooks/useAppLeftNav.tsx +0 -6
  963. package/commons/components/app/hooks/useAppLogo.tsx +0 -9
  964. package/commons/components/app/hooks/useAppNotification.tsx +0 -6
  965. package/commons/components/app/hooks/useAppQuickSearch.tsx +0 -6
  966. package/commons/components/app/hooks/useAppSearchService.tsx +0 -7
  967. package/commons/components/app/hooks/useAppSitemap.tsx +0 -84
  968. package/commons/components/app/hooks/useAppSwitcher.tsx +0 -6
  969. package/commons/components/app/hooks/useAppTheme.tsx +0 -23
  970. package/commons/components/app/hooks/useAppUser.tsx +0 -7
  971. package/commons/components/app/providers/AppBarProvider.tsx +0 -48
  972. package/commons/components/app/providers/AppBreadcrumbsProvider.tsx +0 -53
  973. package/commons/components/app/providers/AppLayoutProvider.tsx +0 -114
  974. package/commons/components/app/providers/AppLeftNavProvider.tsx +0 -30
  975. package/commons/components/app/providers/AppNotificationProvider.tsx +0 -49
  976. package/commons/components/app/providers/AppQuickSearchProvider.tsx +0 -32
  977. package/commons/components/app/providers/AppSearchServiceProvider.tsx +0 -65
  978. package/commons/components/app/providers/AppSnackbarProvider.tsx +0 -16
  979. package/commons/components/app/providers/AppSwitcherProvider.tsx +0 -16
  980. package/commons/components/app/providers/AppUserProvider.tsx +0 -22
  981. package/commons/components/breadcrumbs/BreadcrumbIcon.tsx +0 -21
  982. package/commons/components/breadcrumbs/BreadcrumbLastItem.tsx +0 -40
  983. package/commons/components/breadcrumbs/BreadcrumbLinkItem.tsx +0 -43
  984. package/commons/components/breadcrumbs/BreadcrumbList.tsx +0 -87
  985. package/commons/components/breadcrumbs/Breadcrumbs.tsx +0 -40
  986. package/commons/components/display/AppAvatar.tsx +0 -34
  987. package/commons/components/display/AppInfoPanel.tsx +0 -30
  988. package/commons/components/display/AppListEmpty.tsx +0 -5
  989. package/commons/components/display/AppToc.tsx +0 -160
  990. package/commons/components/display/hooks/useAppColor.tsx +0 -21
  991. package/commons/components/leftnav/LeftNavDrawer.tsx +0 -172
  992. package/commons/components/leftnav/LeftNavGroup.tsx +0 -144
  993. package/commons/components/leftnav/LeftNavItem.tsx +0 -73
  994. package/commons/components/notification/FeedModels.ts +0 -163
  995. package/commons/components/notification/Notification.tsx +0 -152
  996. package/commons/components/notification/elements/NotificationCloseButton.tsx +0 -14
  997. package/commons/components/notification/elements/NotificationContainer.tsx +0 -87
  998. package/commons/components/notification/elements/NotificationEndOfPage.tsx +0 -48
  999. package/commons/components/notification/elements/NotificationError.tsx +0 -24
  1000. package/commons/components/notification/elements/NotificationHeader.tsx +0 -41
  1001. package/commons/components/notification/elements/NotificationItems.tsx +0 -47
  1002. package/commons/components/notification/elements/NotificationSkeleton.tsx +0 -59
  1003. package/commons/components/notification/elements/NotificationTopNavButton.tsx +0 -27
  1004. package/commons/components/notification/elements/item/NotificationItem.tsx +0 -44
  1005. package/commons/components/notification/elements/item/NotificationItemAuthor.tsx +0 -72
  1006. package/commons/components/notification/elements/item/NotificationItemContent.tsx +0 -29
  1007. package/commons/components/notification/elements/item/NotificationItemDate.tsx +0 -14
  1008. package/commons/components/notification/elements/item/NotificationItemImage.tsx +0 -19
  1009. package/commons/components/notification/elements/item/NotificationItemTag.tsx +0 -18
  1010. package/commons/components/notification/elements/item/NotificationItemTitle.tsx +0 -38
  1011. package/commons/components/pages/PageCardCentered.tsx +0 -32
  1012. package/commons/components/pages/PageCenter.tsx +0 -46
  1013. package/commons/components/pages/PageContent.tsx +0 -13
  1014. package/commons/components/pages/PageFullScreen.tsx +0 -74
  1015. package/commons/components/pages/PageFullWidth.tsx +0 -30
  1016. package/commons/components/pages/PageHeader.tsx +0 -117
  1017. package/commons/components/pages/hooks/usePageProps.tsx +0 -41
  1018. package/commons/components/search/AppSearch.tsx +0 -256
  1019. package/commons/components/search/AppSearchInput.tsx +0 -104
  1020. package/commons/components/search/AppSearchResult.tsx +0 -66
  1021. package/commons/components/topnav/AppBar.tsx +0 -137
  1022. package/commons/components/topnav/AppName.tsx +0 -53
  1023. package/commons/components/topnav/AppSwitcher.tsx +0 -116
  1024. package/commons/components/topnav/Notifications.tsx +0 -16
  1025. package/commons/components/topnav/ThemeSelection.tsx +0 -143
  1026. package/commons/components/topnav/ThemeSelectionIcon.tsx +0 -39
  1027. package/commons/components/topnav/UserProfile.tsx +0 -196
  1028. package/commons/components/utils/hooks/useClipboard.tsx +0 -31
  1029. package/commons/components/utils/hooks/useEnv.tsx +0 -13
  1030. package/commons/components/utils/hooks/useFullscreenStatus.tsx +0 -47
  1031. package/commons/components/utils/hooks/useGravatar.tsx +0 -13
  1032. package/commons/components/utils/hooks/useLocalStorage.ts +0 -75
  1033. package/commons/components/utils/hooks/useLocalStorageItem.tsx +0 -45
  1034. package/commons/components/utils/hooks/useThemeBuilder.tsx +0 -55
  1035. package/commons/components/utils/keyboard.ts +0 -61
  1036. package/components/app/App.tsx +0 -434
  1037. package/components/app/AppContainer.tsx +0 -19
  1038. package/components/app/drawers/ApiKeyDrawer.tsx +0 -173
  1039. package/components/app/drawers/AppDrawerType.ts +0 -7
  1040. package/components/app/drawers/AssignUserDrawer.tsx +0 -126
  1041. package/components/app/drawers/ViewGroupsDrawer.tsx +0 -24
  1042. package/components/app/hooks/useMatchers.tsx +0 -107
  1043. package/components/app/hooks/useTitle.tsx +0 -77
  1044. package/components/app/providers/AnalyticProvider.tsx +0 -87
  1045. package/components/app/providers/ApiConfigProvider.tsx +0 -31
  1046. package/components/app/providers/AppDrawerProvider.tsx +0 -54
  1047. package/components/app/providers/AvatarProvider.tsx +0 -47
  1048. package/components/app/providers/CustomPluginProvider.tsx +0 -19
  1049. package/components/app/providers/FavouritesProvider.tsx +0 -157
  1050. package/components/app/providers/FieldProvider.tsx +0 -34
  1051. package/components/app/providers/HitProvider.tsx +0 -164
  1052. package/components/app/providers/HitSearchProvider.tsx +0 -248
  1053. package/components/app/providers/LocalStorageProvider.tsx +0 -67
  1054. package/components/app/providers/ModalProvider.tsx +0 -57
  1055. package/components/app/providers/OverviewProvider.tsx +0 -90
  1056. package/components/app/providers/ParameterProvider.tsx +0 -270
  1057. package/components/app/providers/SocketProvider.tsx +0 -329
  1058. package/components/app/providers/UserListProvider.tsx +0 -56
  1059. package/components/app/providers/ViewProvider.tsx +0 -207
  1060. package/components/elements/Comment.tsx +0 -315
  1061. package/components/elements/EditRow.tsx +0 -268
  1062. package/components/elements/PluginChip.tsx +0 -32
  1063. package/components/elements/PluginTypography.tsx +0 -31
  1064. package/components/elements/ThemedEditor.tsx +0 -130
  1065. package/components/elements/UserList.tsx +0 -79
  1066. package/components/elements/addons/buttons/CustomButton.tsx +0 -93
  1067. package/components/elements/addons/buttons/CustomIconButton.tsx +0 -122
  1068. package/components/elements/addons/buttons/index.ts +0 -7
  1069. package/components/elements/addons/layout/FlexOne.tsx +0 -6
  1070. package/components/elements/addons/layout/FlexPort.tsx +0 -39
  1071. package/components/elements/addons/layout/FlexVertical.tsx +0 -28
  1072. package/components/elements/addons/layout/vsbox/VSBox.tsx +0 -52
  1073. package/components/elements/addons/layout/vsbox/VSBoxContent.tsx +0 -13
  1074. package/components/elements/addons/layout/vsbox/VSBoxElement.tsx +0 -60
  1075. package/components/elements/addons/layout/vsbox/VSBoxHeader.tsx +0 -41
  1076. package/components/elements/addons/lists/TuiList.tsx +0 -31
  1077. package/components/elements/addons/lists/TuiListBase.tsx +0 -98
  1078. package/components/elements/addons/lists/TuiListElement.tsx +0 -51
  1079. package/components/elements/addons/lists/TuiListMenu.tsx +0 -61
  1080. package/components/elements/addons/lists/TuiListProvider.tsx +0 -162
  1081. package/components/elements/addons/lists/hooks/useTuiListKeyboard.tsx +0 -60
  1082. package/components/elements/addons/lists/index.tsx +0 -25
  1083. package/components/elements/addons/lists/table/TuiTable.tsx +0 -151
  1084. package/components/elements/addons/lists/table/TuiTableBody.tsx +0 -77
  1085. package/components/elements/addons/lists/table/TuiTableHead.tsx +0 -29
  1086. package/components/elements/addons/lists/table/TuiTableHeader.tsx +0 -15
  1087. package/components/elements/addons/lists/table/TuiTableLayout.ts +0 -53
  1088. package/components/elements/addons/lists/table/index.tsx +0 -24
  1089. package/components/elements/addons/search/SearchPagination.tsx +0 -26
  1090. package/components/elements/addons/search/SearchTotal.tsx +0 -35
  1091. package/components/elements/addons/search/phrase/Phrase.tsx +0 -175
  1092. package/components/elements/addons/search/phrase/PhraseConsumer.ts +0 -35
  1093. package/components/elements/addons/search/phrase/PhraseLexer.ts +0 -167
  1094. package/components/elements/addons/search/phrase/index.ts +0 -86
  1095. package/components/elements/addons/search/phrase/word/WordLexer.ts +0 -10
  1096. package/components/elements/addons/search/phrase/word/WordSuggester.ts +0 -9
  1097. package/components/elements/addons/search/phrase/word/consumers/WhitespaceConsumer.ts +0 -21
  1098. package/components/elements/addons/search/phrase/word/consumers/WordConsumer.ts +0 -21
  1099. package/components/elements/display/ActionButton.tsx +0 -40
  1100. package/components/elements/display/Classification.tsx +0 -29
  1101. package/components/elements/display/DocumentationButton.tsx +0 -46
  1102. package/components/elements/display/DynamicTabs.tsx +0 -52
  1103. package/components/elements/display/HandlebarsMarkdown.tsx +0 -105
  1104. package/components/elements/display/HowlerAvatar.tsx +0 -66
  1105. package/components/elements/display/HowlerAvatarHeader.tsx +0 -37
  1106. package/components/elements/display/HowlerCard.tsx +0 -10
  1107. package/components/elements/display/Image.tsx +0 -43
  1108. package/components/elements/display/ItemManager.tsx +0 -146
  1109. package/components/elements/display/Markdown.tsx +0 -200
  1110. package/components/elements/display/Modal.tsx +0 -44
  1111. package/components/elements/display/Notebook.tsx +0 -7
  1112. package/components/elements/display/QueryResultText.tsx +0 -25
  1113. package/components/elements/display/TextDivider.tsx +0 -48
  1114. package/components/elements/display/TypingIndicator.tsx +0 -41
  1115. package/components/elements/display/UserPageWrapper.tsx +0 -20
  1116. package/components/elements/display/features/DevelopmentBanner.tsx +0 -24
  1117. package/components/elements/display/features/DevelopmentIcon.tsx +0 -24
  1118. package/components/elements/display/handlebars/helpers.tsx +0 -276
  1119. package/components/elements/display/icons/BundleButton.tsx +0 -77
  1120. package/components/elements/display/icons/Iconified.tsx +0 -16
  1121. package/components/elements/display/icons/SocketBadge.tsx +0 -82
  1122. package/components/elements/display/icons/svg/howler-icon-darkmode.svg +0 -1
  1123. package/components/elements/display/icons/svg/howler-icon-lightmode.svg +0 -1
  1124. package/components/elements/display/icons/svg/howler-logo-full.svg +0 -1
  1125. package/components/elements/display/icons/svg/howler-logo.svg +0 -1
  1126. package/components/elements/display/json/JSONViewer.tsx +0 -98
  1127. package/components/elements/display/markdownPlugins/tabs.ts +0 -81
  1128. package/components/elements/display/modals/ConfirmDeleteModal.tsx +0 -32
  1129. package/components/elements/display/modals/ConfirmNotebookModal.tsx +0 -32
  1130. package/components/elements/display/modals/CreateActionModal.tsx +0 -63
  1131. package/components/elements/display/modals/LoginErrorModal.tsx +0 -31
  1132. package/components/elements/display/modals/RationaleModal.tsx +0 -59
  1133. package/components/elements/hit/HitActions.tsx +0 -298
  1134. package/components/elements/hit/HitBanner.tsx +0 -367
  1135. package/components/elements/hit/HitBannerTooltip.tsx +0 -41
  1136. package/components/elements/hit/HitCard.tsx +0 -42
  1137. package/components/elements/hit/HitComments.tsx +0 -372
  1138. package/components/elements/hit/HitDetails.tsx +0 -324
  1139. package/components/elements/hit/HitLabels.tsx +0 -265
  1140. package/components/elements/hit/HitLayout.ts +0 -5
  1141. package/components/elements/hit/HitNotebooks.tsx +0 -264
  1142. package/components/elements/hit/HitOutline.tsx +0 -56
  1143. package/components/elements/hit/HitOverview.tsx +0 -53
  1144. package/components/elements/hit/HitQuickSearch.tsx +0 -111
  1145. package/components/elements/hit/HitRelated.tsx +0 -18
  1146. package/components/elements/hit/HitShortcuts.ts +0 -5
  1147. package/components/elements/hit/HitSummary.tsx +0 -301
  1148. package/components/elements/hit/HitWorklog.tsx +0 -201
  1149. package/components/elements/hit/actions/ButtonActions.tsx +0 -269
  1150. package/components/elements/hit/actions/DropdownActions.tsx +0 -157
  1151. package/components/elements/hit/actions/SharedComponents.tsx +0 -40
  1152. package/components/elements/hit/aggregate/HitGraph.tsx +0 -351
  1153. package/components/elements/hit/elements/Assigned.tsx +0 -71
  1154. package/components/elements/hit/elements/EscalationChip.tsx +0 -26
  1155. package/components/elements/hit/elements/HitTimestamp.tsx +0 -81
  1156. package/components/elements/hit/outlines/DefaultOutline.tsx +0 -107
  1157. package/components/elements/hit/outlines/al/AssemblyLineRules.tsx +0 -130
  1158. package/components/elements/hit/related/PivotLink.tsx +0 -67
  1159. package/components/elements/hit/related/RelatedIcon.tsx +0 -51
  1160. package/components/elements/hit/related/RelatedLink.tsx +0 -43
  1161. package/components/elements/view/ViewTitle.tsx +0 -61
  1162. package/components/hooks/useHitActions.tsx +0 -276
  1163. package/components/hooks/useHitSelection.tsx +0 -102
  1164. package/components/hooks/useMyApi.tsx +0 -64
  1165. package/components/hooks/useMyChart.tsx +0 -164
  1166. package/components/hooks/useMyLocalStorage.ts +0 -20
  1167. package/components/hooks/useMyPreferences.tsx +0 -309
  1168. package/components/hooks/useMySearch.tsx +0 -77
  1169. package/components/hooks/useMySitemap.tsx +0 -248
  1170. package/components/hooks/useMySnackbar.tsx +0 -67
  1171. package/components/hooks/useMyTheme.tsx +0 -34
  1172. package/components/hooks/useMyUser.tsx +0 -39
  1173. package/components/hooks/useMyUserFunctions.tsx +0 -166
  1174. package/components/hooks/useMyUserList.tsx +0 -15
  1175. package/components/hooks/useMyUtils.tsx +0 -16
  1176. package/components/hooks/useScrollRestoration.tsx +0 -37
  1177. package/components/logins/Login.tsx +0 -62
  1178. package/components/logins/auth/OAuthLogin.tsx +0 -49
  1179. package/components/logins/auth/UserPassLogin.tsx +0 -57
  1180. package/components/logins/hooks/useLogin.tsx +0 -101
  1181. package/components/routes/404.tsx +0 -24
  1182. package/components/routes/ErrorBoundary.tsx +0 -44
  1183. package/components/routes/ErrorOccured.tsx +0 -28
  1184. package/components/routes/Logout.tsx +0 -56
  1185. package/components/routes/action/edit/ActionEditor.tsx +0 -358
  1186. package/components/routes/action/shared/ActionReportDisplay.tsx +0 -84
  1187. package/components/routes/action/shared/OperationEntry.tsx +0 -121
  1188. package/components/routes/action/shared/OperationStep.tsx +0 -219
  1189. package/components/routes/action/useMyActionFunctions.tsx +0 -225
  1190. package/components/routes/action/view/ActionDetails.tsx +0 -205
  1191. package/components/routes/action/view/ActionSearch.tsx +0 -249
  1192. package/components/routes/action/view/Integrations.tsx +0 -49
  1193. package/components/routes/admin/users/UserEditor.tsx +0 -55
  1194. package/components/routes/admin/users/UserSearch.tsx +0 -228
  1195. package/components/routes/advanced/QueryBuilder.tsx +0 -584
  1196. package/components/routes/advanced/QueryEditor.tsx +0 -148
  1197. package/components/routes/advanced/RuleModal.tsx +0 -217
  1198. package/components/routes/advanced/eqlCompletionProvider.ts +0 -94
  1199. package/components/routes/advanced/eqlTokenProvider.ts +0 -110
  1200. package/components/routes/advanced/historyCompletionProvider.ts +0 -61
  1201. package/components/routes/advanced/luceneCompletionProvider.ts +0 -111
  1202. package/components/routes/advanced/luceneTokenProvider.ts +0 -131
  1203. package/components/routes/advanced/yamlCompletionProvider.ts +0 -58
  1204. package/components/routes/analytics/AnalyticComments.tsx +0 -218
  1205. package/components/routes/analytics/AnalyticDetails.tsx +0 -343
  1206. package/components/routes/analytics/AnalyticHitComments.tsx +0 -99
  1207. package/components/routes/analytics/AnalyticNotebooks.tsx +0 -185
  1208. package/components/routes/analytics/AnalyticOverview.tsx +0 -165
  1209. package/components/routes/analytics/AnalyticOverviews.tsx +0 -75
  1210. package/components/routes/analytics/AnalyticSearch.tsx +0 -301
  1211. package/components/routes/analytics/AnalyticTemplates.tsx +0 -77
  1212. package/components/routes/analytics/RuleView.tsx +0 -80
  1213. package/components/routes/analytics/TriageSettings.tsx +0 -146
  1214. package/components/routes/analytics/widgets/Assessment.tsx +0 -71
  1215. package/components/routes/analytics/widgets/Created.tsx +0 -61
  1216. package/components/routes/analytics/widgets/Detection.tsx +0 -11
  1217. package/components/routes/analytics/widgets/Escalation.tsx +0 -65
  1218. package/components/routes/analytics/widgets/Stacked.tsx +0 -109
  1219. package/components/routes/analytics/widgets/Status.tsx +0 -21
  1220. package/components/routes/dossiers/DossierCard.tsx +0 -48
  1221. package/components/routes/dossiers/DossierEditor.tsx +0 -247
  1222. package/components/routes/dossiers/Dossiers.tsx +0 -173
  1223. package/components/routes/dossiers/LeadEditor.tsx +0 -122
  1224. package/components/routes/dossiers/LeadForm.tsx +0 -106
  1225. package/components/routes/dossiers/PivotForm.tsx +0 -311
  1226. package/components/routes/help/ActionDocumentation.tsx +0 -77
  1227. package/components/routes/help/ActionIntroductionDocumentation.tsx +0 -128
  1228. package/components/routes/help/ApiDocumentation.tsx +0 -217
  1229. package/components/routes/help/AuthDocumentation.tsx +0 -26
  1230. package/components/routes/help/BundleDocumentation.tsx +0 -17
  1231. package/components/routes/help/ClientDocumentation.tsx +0 -27
  1232. package/components/routes/help/Help.tsx +0 -96
  1233. package/components/routes/help/HitBannerDocumentation.tsx +0 -71
  1234. package/components/routes/help/HitDocumentation.tsx +0 -77
  1235. package/components/routes/help/HitLabelsDocumentation.tsx +0 -57
  1236. package/components/routes/help/HitLinksDocumentation.tsx +0 -23
  1237. package/components/routes/help/HitSchemaDocumentation.tsx +0 -253
  1238. package/components/routes/help/NotebookDocumentation.tsx +0 -28
  1239. package/components/routes/help/OverviewDocumentation.tsx +0 -21
  1240. package/components/routes/help/RetentionDocumentation.tsx +0 -55
  1241. package/components/routes/help/SearchDocumentation.tsx +0 -700
  1242. package/components/routes/help/TemplateDocumentation.tsx +0 -73
  1243. package/components/routes/help/ViewDocumentation.tsx +0 -32
  1244. package/components/routes/help/components/HelpTabs.tsx +0 -47
  1245. package/components/routes/help/markdown/en/actionIntroduction.md +0 -33
  1246. package/components/routes/help/markdown/en/authentication.md +0 -261
  1247. package/components/routes/help/markdown/en/bundles.md +0 -70
  1248. package/components/routes/help/markdown/en/client.md +0 -213
  1249. package/components/routes/help/markdown/en/links.md +0 -37
  1250. package/components/routes/help/markdown/en/notebook.md +0 -157
  1251. package/components/routes/help/markdown/en/retention.md +0 -15
  1252. package/components/routes/help/markdown/en/schema.md +0 -20
  1253. package/components/routes/help/markdown/en/templates.md +0 -23
  1254. package/components/routes/help/markdown/en/views.md +0 -11
  1255. package/components/routes/help/markdown/fr/actionIntroduction.md +0 -33
  1256. package/components/routes/help/markdown/fr/authentication.md +0 -259
  1257. package/components/routes/help/markdown/fr/bundles.md +0 -70
  1258. package/components/routes/help/markdown/fr/client.md +0 -209
  1259. package/components/routes/help/markdown/fr/links.md +0 -37
  1260. package/components/routes/help/markdown/fr/notebook.md +0 -157
  1261. package/components/routes/help/markdown/fr/retention.md +0 -15
  1262. package/components/routes/help/markdown/fr/schema.md +0 -20
  1263. package/components/routes/help/markdown/fr/templates.md +0 -23
  1264. package/components/routes/help/markdown/fr/views.md +0 -11
  1265. package/components/routes/hits/search/BundleParentMenu.tsx +0 -73
  1266. package/components/routes/hits/search/BundleScroller.tsx +0 -8
  1267. package/components/routes/hits/search/CustomSort.tsx +0 -94
  1268. package/components/routes/hits/search/HitBrowser.tsx +0 -318
  1269. package/components/routes/hits/search/HitContextMenu.tsx +0 -260
  1270. package/components/routes/hits/search/HitQuery.tsx +0 -268
  1271. package/components/routes/hits/search/InformationPane.tsx +0 -430
  1272. package/components/routes/hits/search/SearchPane.tsx +0 -291
  1273. package/components/routes/hits/search/ViewLink.tsx +0 -96
  1274. package/components/routes/hits/search/grid/AddColumnModal.tsx +0 -98
  1275. package/components/routes/hits/search/grid/ColumnHeader.tsx +0 -70
  1276. package/components/routes/hits/search/grid/EnhancedCell.tsx +0 -50
  1277. package/components/routes/hits/search/grid/HitGrid.tsx +0 -342
  1278. package/components/routes/hits/search/grid/HitRow.tsx +0 -121
  1279. package/components/routes/hits/search/shared/CustomSpan.tsx +0 -54
  1280. package/components/routes/hits/search/shared/HitFilter.tsx +0 -110
  1281. package/components/routes/hits/search/shared/HitSort.tsx +0 -111
  1282. package/components/routes/hits/search/shared/QuerySettings.tsx +0 -40
  1283. package/components/routes/hits/search/shared/SearchSpan.tsx +0 -68
  1284. package/components/routes/hits/view/HitViewer.tsx +0 -372
  1285. package/components/routes/hits/view/LeadRenderer.tsx +0 -42
  1286. package/components/routes/home/AddNewCard.tsx +0 -295
  1287. package/components/routes/home/AnalyticCard.tsx +0 -68
  1288. package/components/routes/home/EntryWrapper.tsx +0 -54
  1289. package/components/routes/home/ViewCard.tsx +0 -96
  1290. package/components/routes/home/index.tsx +0 -278
  1291. package/components/routes/overviews/OverviewCard.tsx +0 -51
  1292. package/components/routes/overviews/OverviewEditor.tsx +0 -102
  1293. package/components/routes/overviews/OverviewViewer.tsx +0 -387
  1294. package/components/routes/overviews/Overviews.tsx +0 -179
  1295. package/components/routes/overviews/markdownExtendedTokenProvider.ts +0 -296
  1296. package/components/routes/overviews/startingTemplate.ts +0 -40
  1297. package/components/routes/overviews/template/en.md +0 -167
  1298. package/components/routes/overviews/template/fr.md +0 -167
  1299. package/components/routes/settings/AdminSection.tsx +0 -18
  1300. package/components/routes/settings/LocalSection.tsx +0 -168
  1301. package/components/routes/settings/ProfileSection.tsx +0 -138
  1302. package/components/routes/settings/SecuritySection.tsx +0 -95
  1303. package/components/routes/settings/Settings.tsx +0 -51
  1304. package/components/routes/settings/SettingsSection.tsx +0 -28
  1305. package/components/routes/templates/TemplateCard.tsx +0 -38
  1306. package/components/routes/templates/TemplateDnD.tsx +0 -51
  1307. package/components/routes/templates/TemplateEditor.tsx +0 -121
  1308. package/components/routes/templates/TemplateViewer.tsx +0 -285
  1309. package/components/routes/templates/Templates.tsx +0 -187
  1310. package/components/routes/views/ViewComposer.tsx +0 -317
  1311. package/components/routes/views/Views.tsx +0 -379
  1312. package/globals.d.ts +0 -1
  1313. package/i18n.ts +0 -50
  1314. package/index.tsx +0 -19
  1315. package/models/ActionTypes.d.ts +0 -50
  1316. package/models/WithMetadata.d.ts +0 -12
  1317. package/models/entities/HowlerUser.d.ts +0 -18
  1318. package/models/entities/generated/Account.d.ts +0 -7
  1319. package/models/entities/generated/Action.d.ts +0 -13
  1320. package/models/entities/generated/Agent.d.ts +0 -9
  1321. package/models/entities/generated/Analytic.d.ts +0 -21
  1322. package/models/entities/generated/Answer.d.ts +0 -10
  1323. package/models/entities/generated/Antivirus.d.ts +0 -9
  1324. package/models/entities/generated/ApiType.d.ts +0 -238
  1325. package/models/entities/generated/Assemblyline.d.ts +0 -22
  1326. package/models/entities/generated/Attachment.d.ts +0 -8
  1327. package/models/entities/generated/Attribution.d.ts +0 -9
  1328. package/models/entities/generated/AutonomousSystems.d.ts +0 -7
  1329. package/models/entities/generated/Aws.d.ts +0 -10
  1330. package/models/entities/generated/Azure.d.ts +0 -10
  1331. package/models/entities/generated/Bcc.d.ts +0 -6
  1332. package/models/entities/generated/Behaviour.d.ts +0 -9
  1333. package/models/entities/generated/Body.d.ts +0 -7
  1334. package/models/entities/generated/Cbs.d.ts +0 -8
  1335. package/models/entities/generated/Cc.d.ts +0 -6
  1336. package/models/entities/generated/Client.d.ts +0 -7
  1337. package/models/entities/generated/Cloud.d.ts +0 -20
  1338. package/models/entities/generated/CloudAccount.d.ts +0 -7
  1339. package/models/entities/generated/CodeSignature.d.ts +0 -14
  1340. package/models/entities/generated/Comment.d.ts +0 -12
  1341. package/models/entities/generated/Container.d.ts +0 -12
  1342. package/models/entities/generated/Created.d.ts +0 -7
  1343. package/models/entities/generated/Dashboard.d.ts +0 -8
  1344. package/models/entities/generated/Data.d.ts +0 -8
  1345. package/models/entities/generated/Destination.d.ts +0 -23
  1346. package/models/entities/generated/Device.d.ts +0 -6
  1347. package/models/entities/generated/Dns.d.ts +0 -16
  1348. package/models/entities/generated/Domain.d.ts +0 -9
  1349. package/models/entities/generated/Dossier.d.ts +0 -15
  1350. package/models/entities/generated/Ecs.d.ts +0 -6
  1351. package/models/entities/generated/Egress.d.ts +0 -6
  1352. package/models/entities/generated/Elf.d.ts +0 -20
  1353. package/models/entities/generated/Email.d.ts +0 -30
  1354. package/models/entities/generated/Enrichment.d.ts +0 -10
  1355. package/models/entities/generated/EntryMeta.d.ts +0 -6
  1356. package/models/entities/generated/Error.d.ts +0 -7
  1357. package/models/entities/generated/Event.d.ts +0 -31
  1358. package/models/entities/generated/Faas.d.ts +0 -13
  1359. package/models/entities/generated/Feed.d.ts +0 -9
  1360. package/models/entities/generated/File.d.ts +0 -12
  1361. package/models/entities/generated/FileHash.d.ts +0 -12
  1362. package/models/entities/generated/From.d.ts +0 -6
  1363. package/models/entities/generated/Gcp.d.ts +0 -10
  1364. package/models/entities/generated/Geo.d.ts +0 -18
  1365. package/models/entities/generated/Group.d.ts +0 -8
  1366. package/models/entities/generated/Hash.d.ts +0 -6
  1367. package/models/entities/generated/Header.d.ts +0 -13
  1368. package/models/entities/generated/Heuristic.d.ts +0 -9
  1369. package/models/entities/generated/Hit.d.ts +0 -102
  1370. package/models/entities/generated/HitFile.d.ts +0 -36
  1371. package/models/entities/generated/HitOrganization.d.ts +0 -7
  1372. package/models/entities/generated/Host.d.ts +0 -11
  1373. package/models/entities/generated/Howler.d.ts +0 -48
  1374. package/models/entities/generated/HowlerComment.d.ts +0 -11
  1375. package/models/entities/generated/HowlerDossier.d.ts +0 -12
  1376. package/models/entities/generated/Http.d.ts +0 -11
  1377. package/models/entities/generated/Image.d.ts +0 -10
  1378. package/models/entities/generated/Incident.d.ts +0 -8
  1379. package/models/entities/generated/Indicator.d.ts +0 -21
  1380. package/models/entities/generated/IndicatorEmail.d.ts +0 -6
  1381. package/models/entities/generated/IndicatorFile.d.ts +0 -36
  1382. package/models/entities/generated/Ingress.d.ts +0 -9
  1383. package/models/entities/generated/Instance.d.ts +0 -7
  1384. package/models/entities/generated/Interface.d.ts +0 -7
  1385. package/models/entities/generated/Label.d.ts +0 -7
  1386. package/models/entities/generated/Labels.d.ts +0 -13
  1387. package/models/entities/generated/Lead.d.ts +0 -12
  1388. package/models/entities/generated/Link.d.ts +0 -8
  1389. package/models/entities/generated/Location.d.ts +0 -7
  1390. package/models/entities/generated/Log.d.ts +0 -13
  1391. package/models/entities/generated/Machine.d.ts +0 -6
  1392. package/models/entities/generated/Mapping.d.ts +0 -8
  1393. package/models/entities/generated/Matched.d.ts +0 -6
  1394. package/models/entities/generated/Mitre.d.ts +0 -10
  1395. package/models/entities/generated/Modified.d.ts +0 -7
  1396. package/models/entities/generated/Nat.d.ts +0 -7
  1397. package/models/entities/generated/Network.d.ts +0 -8
  1398. package/models/entities/generated/Notebook.d.ts +0 -10
  1399. package/models/entities/generated/Observer.d.ts +0 -21
  1400. package/models/entities/generated/Operation.d.ts +0 -7
  1401. package/models/entities/generated/Organization.d.ts +0 -7
  1402. package/models/entities/generated/Original.d.ts +0 -19
  1403. package/models/entities/generated/Os.d.ts +0 -12
  1404. package/models/entities/generated/Outline.d.ts +0 -9
  1405. package/models/entities/generated/Overview.d.ts +0 -10
  1406. package/models/entities/generated/Parent.d.ts +0 -19
  1407. package/models/entities/generated/ParentHash.d.ts +0 -12
  1408. package/models/entities/generated/ParentParent.d.ts +0 -32
  1409. package/models/entities/generated/ParentUser.d.ts +0 -9
  1410. package/models/entities/generated/Pe.d.ts +0 -13
  1411. package/models/entities/generated/Pivot.d.ts +0 -13
  1412. package/models/entities/generated/Process.d.ts +0 -34
  1413. package/models/entities/generated/ProcessHash.d.ts +0 -12
  1414. package/models/entities/generated/ProcessParent.d.ts +0 -34
  1415. package/models/entities/generated/ProcessUser.d.ts +0 -9
  1416. package/models/entities/generated/Project.d.ts +0 -7
  1417. package/models/entities/generated/Question.d.ts +0 -11
  1418. package/models/entities/generated/Registry.d.ts +0 -12
  1419. package/models/entities/generated/Related.d.ts +0 -13
  1420. package/models/entities/generated/ReplyTo.d.ts +0 -6
  1421. package/models/entities/generated/Request.d.ts +0 -13
  1422. package/models/entities/generated/Response.d.ts +0 -11
  1423. package/models/entities/generated/Rule.d.ts +0 -15
  1424. package/models/entities/generated/Section.d.ts +0 -14
  1425. package/models/entities/generated/Segment.d.ts +0 -14
  1426. package/models/entities/generated/Sender.d.ts +0 -6
  1427. package/models/entities/generated/Server.d.ts +0 -8
  1428. package/models/entities/generated/Service.d.ts +0 -6
  1429. package/models/entities/generated/Settings.d.ts +0 -6
  1430. package/models/entities/generated/Sharepoint.d.ts +0 -10
  1431. package/models/entities/generated/Software.d.ts +0 -11
  1432. package/models/entities/generated/Source.d.ts +0 -23
  1433. package/models/entities/generated/SourceOriginal.d.ts +0 -19
  1434. package/models/entities/generated/Tactic.d.ts +0 -9
  1435. package/models/entities/generated/Technique.d.ts +0 -9
  1436. package/models/entities/generated/Template.d.ts +0 -11
  1437. package/models/entities/generated/Threat.d.ts +0 -21
  1438. package/models/entities/generated/ThreatGroup.d.ts +0 -9
  1439. package/models/entities/generated/ThreatIndicator.d.ts +0 -21
  1440. package/models/entities/generated/ThreatTactic.d.ts +0 -8
  1441. package/models/entities/generated/ThreatTechnique.d.ts +0 -8
  1442. package/models/entities/generated/Tls.d.ts +0 -12
  1443. package/models/entities/generated/TlsServer.d.ts +0 -6
  1444. package/models/entities/generated/To.d.ts +0 -6
  1445. package/models/entities/generated/TriageSettings.d.ts +0 -8
  1446. package/models/entities/generated/Trigger.d.ts +0 -7
  1447. package/models/entities/generated/Uri.d.ts +0 -9
  1448. package/models/entities/generated/Url.d.ts +0 -19
  1449. package/models/entities/generated/User.d.ts +0 -15
  1450. package/models/entities/generated/UserAgent.d.ts +0 -13
  1451. package/models/entities/generated/UserUser.d.ts +0 -19
  1452. package/models/entities/generated/View.d.ts +0 -15
  1453. package/models/entities/generated/Votes.d.ts +0 -8
  1454. package/models/entities/generated/Vulnerability.d.ts +0 -12
  1455. package/models/entities/generated/Yara.d.ts +0 -9
  1456. package/models/socket/HitUpdate.d.ts +0 -14
  1457. package/plugins/HowlerPlugin.ts +0 -375
  1458. package/plugins/store.ts +0 -152
  1459. package/rest/AxiosClient.ts +0 -81
  1460. package/rest/FetchClient.ts +0 -27
  1461. package/rest/index.ts +0 -12
  1462. package/setupTests.ts +0 -17
  1463. package/utils/Throttler.ts +0 -43
  1464. package/utils/actionUtils.ts +0 -112
  1465. package/utils/constants.tsx +0 -131
  1466. package/utils/hitFunctions.ts +0 -10
  1467. package/utils/localStorage.ts +0 -54
  1468. package/utils/menuUtils.ts +0 -274
  1469. package/utils/sessionStorage.ts +0 -59
  1470. package/utils/socketUtils.ts +0 -11
  1471. package/utils/stringUtils.ts +0 -57
  1472. package/utils/utils.ts +0 -222
  1473. package/utils/xsrf.ts +0 -17
  1474. package/vite-env.d.ts +0 -1
  1475. /package/commons/components/app/hooks/{index.ts → index.d.ts} +0 -0
  1476. /package/commons/components/notification/{index.tsx → index.d.ts} +0 -0
@@ -0,0 +1 @@
1
+ export default "<!-- docs/ingestion/authentication.md -->\n\n# Howler Authentication\n\nHowler's API supports a number of authentication approaches when accessing the API. This document will outline the\ndifferent approaches, and explain how to use each of them.\n\n## Types of Authentication\n\nThere are four methods of authentication one can use to connect to the howler API:\n\n1. Username and Password\n2. Username and API Key\n3. Username and app token (after login)\n4. OAuth Access Token\n\nWe will outline the use case for each authentication type next.\n\n### Username/Password Authentication\n\nUsername and password authentication is the simplest and least secure method of authentication. Unlikely to be enabled\nin a production environment, it allows users to easily connect to the Howler API and make changes as the given user,\nwithout having to worry about creating API keys or using an OAuth provider like Keycloak or Azure. Users can connect\nusing username and password authentication in one of two ways:\n\n#### Direct Call to the Requisite Endpoint (Password)\n\nThis is far and away the simplest method. Simply add a basic Authorization header to the HTTP request you want to\nmake, and everything is taken care of:\n\n```bash\necho -n \"user:user\" | base64 -w0\n# -> dXNlcjp1c2Vy\n```\n\n```http\nGET $CURRENT_URL/api/v1/user/whoami\nAuthorization: Basic dXNlcjp1c2Vy\n```\n\n#### Exchanging for an App Token (Password)\n\nThis is a slightly more complex approach, but carries the benefit of not exposing the username and password on every\nrequest. You can leverage the `v1/auth/login` endpoint to exchange your username and password for an app token. The\ntoken works similarly to an OAuth access token - you provide it with each subsequent request, and it authenticates you\nuntil the token expires.\n\n```http\nPOST $CURRENT_URL/api/v1/auth/login/\nContent-Type: application/json\n\n{\n \"user\": \"user\",\n \"password\": \"user\"\n}\n```\n\nWill return something like:\n\n```json\n{\n \"api_error_message\": \"\",\n \"api_response\": {\n \"app_token\": \"user:5791a142067745c3af51d6596da7da8f86357a9fa92ad78d1ce118ea7d89d34e\",\n \"provider\": null,\n \"refresh_token\": null\n },\n \"api_server_version\": \"0.0.0.dev0\",\n \"api_status_code\": 200\n}\n```\n\nUsing this token in another API call:\n\n```http\nGET $CURRENT_URL/api/v1/user/whoami\nAuthorization: Bearer user:5791a142067745c3af51d6596da7da8f86357a9fa92ad78d1ce118ea7d89d34e\n```\n\n### Username/API Key Authentication\n\nThe username and API Key authentication works largely the same as username/password from the perspective of the client.\nOn the server side, however, API keys have several key advantages. Firstly, they can easily be revoked by the user.\nSecondly, their privileges can be limited, allowing only a subset of permissions.\n\nThere are two methods of authentication, mirroring the username and password:\n\n#### Direct Call to the Requisite Endpoint (API Key)\n\nSimply add a basic Authorization header containing the username and API key to the HTTP request you want to make, and\neverything is taken care of:\n\n```bash\n# note the format is <username>:<apikeyname>:<secret>\necho -n \"user:devkey:user\" | base64 -w0\n# -> dXNlcjpkZXZrZXk6dXNlcg==\n```\n\n```http\nGET $CURRENT_URL/api/v1/user/whoami\nAuthorization: Basic dXNlcjpkZXZrZXk6dXNlcg==\n```\n\n#### Exchanging for an App Token (API Key)\n\nYou can also leverage the `v1/auth/login` endpoint to exchange your username and API key for an app token. The\ntoken works similarly to an OAuth access token - you provide it with each subsequent request, and it authenticates you\nuntil the token expires.\n\n```http\nPOST $CURRENT_URL/api/v1/auth/login/\nContent-Type: application/json\n\n{\n \"user\": \"user\",\n \"apikey\": \"devkey:user\"\n}\n```\n\nWill return something like:\n\n```json\n{\n \"api_error_message\": \"\",\n \"api_response\": {\n \"app_token\": \"user:f220eb76ff8404abfece8c0c2f3368c7d89618c776bedcd3a506843dc4a952e4\",\n \"provider\": null,\n \"refresh_token\": null\n },\n \"api_server_version\": \"0.0.0.dev0\",\n \"api_status_code\": 200\n}\n```\n\nUsing this token in another API call:\n\n```http\nGET $CURRENT_URL/api/v1/user/whoami\nAuthorization: Bearer user:f220eb76ff8404abfece8c0c2f3368c7d89618c776bedcd3a506843dc4a952e4\n```\n\nNote that when logging in using an api key, the permissions of the api key continue to apply. So if you try and access\nan endpoint that requires the \"write\" permission with an API key that only has read permission, this will cause a 403\nForbidden error.\n\n### Access Token Authentication\n\nIn addition to the authentication methods provided internally by Howler, you can also authenticate with an external\nOAuth provider like Azure or Keycloak. To do this, you must obtain an access token from one of these providers. In\norder to get an access token, there are generally two flows - On-Behalf-Of, or the user login flow (see [here](https://www.rfc-editor.org/rfc/rfc6749#section-4.1) for a rundown\nof that). In the case of Howler, the `v1/auth/login` endpoint is used for step D & E in the linked user login flow, and\nit returns the following:\n\n```json\n{\n \"api_response\": {\n \"app_token\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c2VyIn0\",\n \"provider\": \"keycloak\",\n \"refresh_token\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJyZWZyZXNoIn0\"\n }\n}\n```\n\nIn this case, the `app_token` is the JSON Web Token the application uses as an access token. Similarly, the\n`refresh_token` is another JWT that is used to refresh the access token if needed. Finally, the `provider` field\noutlines which provider this access token corresponds to.\n\nOnce you have that access token, you can simply pass it along in the Authorization header:\n\n```http\nGET $CURRENT_URL/api/v1/user/whoami\nAuthorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c2VyIn0\n```\n\nHowler will automatically detect this is a JWT, and treat it as such. If the token is valid, the user will be\nauthenticated.\n\nIn order to refresh an expired access token, you can use the following API call:\n\n```http\nPOST $CURRENT_URL/api/v1/auth/login/\nContent-Type: application/json\n\n{\n \"oauth_provider\": \"keycloak\",\n \"refresh_token\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJyZWZyZXNoIn0\"\n}\n```\n\nAnd you'll get something like this back:\n\n```json\n{\n \"api_response\": {\n \"app_token\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c2VyMiJ9\",\n \"provider\": \"keycloak\",\n \"refresh_token\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJyZWZyZXNodG9rZW4yIn0\"\n }\n}\n```\n\n## Impersonation\n\nThe final important bit of the authentication flow is the impersonation functionality. In order for a service account\nor other user to impersonate you (i.e. to create alerts on your behalf), Howler allows users to provide a second API key\nin order to authenticate as another user.\n\nBefore you use another user's API key to authenticate as them, it's important that the API key you're using has been\nmarked as valid for impersonation - check with the user that provided it. If it has, you can use it by, formating your\nrequest as follows:\n\n```bash\n# Your credentials\necho -n \"admin:devkey:admin\" | base64 -w0\n# -> YWRtaW46ZGV2a2V5OmFkbWlu\n\n# Their credentials\necho -n \"user:impersonate_admin:user\" | base64 -w0\n# -> dXNlcjppbXBlcnNvbmF0ZV9hZG1pbjp1c2Vy\n```\n\n```alert\nAny form of authentication can be used by the impersonator, but validated API keys are the only permitted\nauthentication method for the person you're impersonating.\n```\n\n```http\nGET $CURRENT_URL/api/v1/user/whoami\nAuthorization: Basic YWRtaW46ZGV2a2V5OmFkbWlu\nX-Impersonating: Basic dXNlcjppbXBlcnNvbmF0ZV9hZG1pbjp1c2Vy\n```\n\nIf set up correctly, the result will look like:\n\n```json\n{\n \"api_error_message\": \"\",\n \"api_response\": {\n \"avatar\": null,\n \"classification\": \"TLP:W\",\n \"email\": \"user@howler.cyber.gc.ca\",\n \"groups\": [\"USERS\"],\n \"is_active\": true,\n \"is_admin\": false,\n \"name\": \"User\",\n \"roles\": [\"user\"],\n \"username\": \"user\"\n },\n \"api_server_version\": \"0.0.0.dev0\",\n \"api_status_code\": 200\n}\n```\n\nNote that the server returned this as if you were `user`, NOT `admin`. It is clearly marked in the logs, however, that you are making the request:\n\n```log\n22/12/05 14:15:02 INFO howler.api.security | Authenticating user for path /api/v1/user/whoami/\n22/12/05 14:15:03 WARNING howler.api.security | admin is impersonating user\n22/12/05 14:15:03 INFO howler.api.security | Logged in as user from 127.0.0.1\n22/12/05 14:15:03 INFO howler.api | GET /api/v1/user/whoami/ - 200\n```\n"
@@ -0,0 +1 @@
1
+ export default "<!-- docs/ingestion/bundles.md -->\n\n# Howler Hit Bundles\n\nHit bundles can be used to easily package together a large number of similar alerts, allowing analysts to easily triage them as a single incident. For example, consider a single computer that repeatedly makes a network call to `baddomain.ru` - while an alert may be generated for every instance of this computer hitting that domain, it makes sense for analysts to treat all these alerts as a single case.\n\n## Creating bundles through the Howler Client\n\nThere are a couple of ways to create a bundle through the howler client:\n\n```python\nfrom howler_client import get_client\n\nhowler = get_client(\"https://howler.dev.analysis.cyber.gc.ca\")\n\n\"\"\"Creating a howler bundle and the hits at the same time\"\"\"\nhowler.bundle.create(\n # First argument is the bundle hit\n {\n \"howler.analytic\": \"example-test\",\n \"howler.score\": 0\n },\n # Second argument is a hit or list of hits to include in the bundle\n [\n {\n \"howler.analytic\": \"example-test\",\n \"howler.score\": 0\n },\n {\n \"howler.analytic\": \"example-test\",\n \"howler.score\": 0\n }\n ]\n)\n\n\"\"\"Creating a howler bundle from existing hits\"\"\"\nhowler.bundle.create(\n {\n \"howler.analytic\": \"example-test\",\n \"howler.score\": 0,\n \"howler.hits\": [\"YcUsL8QsjmwwIdstieROk\", \"6s7MztwuSvz6tM0PgGJhvz\"]\n },\n # Note: In future releases, you won't need to include this argument\n []\n)\n\n\n\"\"\"Creating from a map\"\"\"\nbundle_hit = {\n \"score\": 0,\n \"bundle\": True\n}\n\nmap = {\n \"score\": [\"howler.score\"],\n \"bundle\": [\"howler.is_bundle\"]\n}\n\nhowler.bundle.create_from_map(\"example-test\", bundle_hit, map, [{\"score\": 0}])\n```\n\n## Viewing bundles on the Howler UI\n\nIn order to view created bundles on the Howler UI, you can use the query `howler.is_bundle:true`. This will provide a list of created bundles you can look through.\n\nClicking on a bundle will open up a slightly different search UI to normal. In this case, we automatically filter the search results to include only hits that are included in the bundle. To make this obvious, the header representing the bundle will appear above the search bar.\n\nYou can continue to filter through hits using the same queries as usual, and view them as usual. When triaging a bundle, assessing it will apply this assessment to all hits in the bundle, **except those that have already been triaged**. That is, if the bundle is open, all open hits will be assessed when you assess it.\n\nBundles also have a **Summary** tab not available for regular hits. This summary tab will aid you in aggregating data about all the hits in the bundle. Simply open the tab and click \"Create Summary\". Note that this may take some time, as a large number of queries are being run to aggregate the data.\n"
@@ -0,0 +1 @@
1
+ export default "# Howler Client Documentation\n\nThis documentation will outline how to interact with the howler API using the howler client in both Java and python development environments. We will outline the basic process of creating a new hit in each environment as well as searching howler for hits matching your query.\n\n## Getting started\n\n### Installation\n\nIn order to use the howler client, you need to list it as a dependency in your project.\n\n#### **Python**\n\nSimply install through pip:\n\n```bash\npip install howler-client\n```\n\nYou can also add it to your requirements.txt, or whatever dependency management system you use.\n\n### Authentication\n\nAs outlined in the [Authentication Documentation](/help/auth), there's a number of ways users can choose to authenticate. In order to interface with the howler client, however, the suggested flow is to use an API key. So before we start, let's generate a key.\n\n1. Open the Howler UI you'd like to interface with.\n2. Log in, then click your profile in the top right.\n3. Under user menu, click Settings.\n4. Under User Security, press the (+) icon on the API Keys row.\n5. Name your key, and give it the requisite permissions.\n6. Press Create, and copy the supplied string somewhere safe. **You will not see this string again.**\n\nThis API Key will be supplied to your code later on.\n\n## Python Client\n\nIn order to connect with howler using the python client, there is a fairly simple process to follow:\n\n```python\nfrom howler_client import get_client\n\nUSERNAME = 'user' # Obtain this from the user settings page of the Howler UI\nAPIKEY = '@cccsaurora/howler-ui/apikey_name:apikey_data'\n\napikey = (USERNAME, APIKEY)\n\nhowler = get_client(\"$CURRENT_URL\", apikey=apikey)\n```\n\n```alert\nYou can skip generating an API Key and providing it if you're executing this code within HOGWARTS (i.e., on jupyterhub or airflow). OBO will handle authentication for you!\n```\n\nThat's it! You can now use the `howler` object to interact with the server. So what does that actually look like?\n\n### Creating hits in Python\n\nFor the python client, you can create hits using either the `howler.hit.create` or `howler.hit.create_from_map` functions.\n\n#### `create`\n\nThis function takes in a single argument - either a single hit, or a list of them, conforming to the [Howler Schema](/help/hit?tab=schema). Here is a simple example:\n\n```python\n# Some bogus data in the Howler Schema format\nexample_hit = {\n \"howler\": {\n \"analytic\": \"example\",\n \"score\": 10.0\n },\n \"event\": {\n \"reason\": \"Example hit\"\n }\n}\n\nhowler.hit.create(example_hit)\n```\n\nYou can also ingest data in a flat format:\n\n```python\nexample_hit = {\n \"howler.analytic\": \"example\",\n \"howler.score\": 10.0,\n \"event.reason\": \"Example hit\"\n}\n\nhowler.hit.create(example_hit)\n```\n\n#### `create_from_map`\n\nThis function takes in three arguments:\n\n- `tool name`: The name of the analytic creating the hit\n- `map`: A mapping between the raw data you have and the howler schema\n - The format is a dictionary where the keys are the flattened path of the raw data, and the values are a list of flattened paths for Howler's fields where the data will be copied into.\n- `documents`: The raw data you want to add to howler\n\nHere is a simple example:\n\n```python\n# The mapping from our data to howler's schema\nhwl_map = {\n \"file.sha256\": [\"file.hash.sha256\", \"howler.hash\"],\n \"file.name\": [\"file.name\"],\n \"src_ip\": [\"source.ip\", \"related.ip\"],\n \"dest_ip\": [\"destination.ip\", \"related.ip\"],\n \"time.created\": [\"event.start\"],\n}\n\n# Some bogus data in a custom format we want to add to howler\nexample_hit = {\n \"src_ip\": \"0.0.0.0\",\n \"dest_ip\": \"8.8.8.8\",\n \"file\": {\n \"name\": \"hello.exe\",\n \"sha256\": sha256(str(\"hello.exe\").encode()).hexdigest()\n },\n \"time\": {\n \"created\": datetime.now().isoformat()\n },\n}\n\n# Note that the third argument is of type list!\nhowler.hit.create_from_map(\"example_ingestor\", hwl_map, [example_hit])\n```\n\n### Querying Hits\n\nQuerying hits using the howler python client is done using the `howler.search.hit` function. It has a number of required and optional arguments:\n\n- Required:\n - `query`: lucene query (string)\n- Optional:\n - `filters`: Additional lucene queries used to filter the data (list of strings)\n - `fl`: List of fields to return (comma separated string of fields)\n - `offset`: Offset at which the query items should start (integer)\n - `rows`: Number of records to return (integer)\n - `sort`: Field used for sorting with direction (string: ex. 'id desc')\n - `timeout`: Max amount of milliseconds the query will run (integer)\n - `use_archive`: Also query the archive\n - `track_total_hits`: Number of hits to track (default: 10k)\n\nHere are some example queries:\n\n```python\n# Search for all hits created by assemblyline, show the first 50, and return only their ids\nhowler.search.hit(\"howler.analytic:assemblyline\", fl=\"howler.id\", rows=50)\n\n# Search for all resolved hits created in the last five days, returning their id and the analytic that created them. Show only ten, offset by 40\nhowler.search.hit(\"howler.status:resolved\", filters=['event.created:[now-5d TO now]'] fl=\"howler.id,howler.analytic\", rows=10, offset=40)\n\n# Search for all hits, timeout if the query takes more than 100ms\nhowler.search.hit(\"howler.id:*\", track_total_hits=100000000, timeout=100, use_archive=True)\n```\n\n### Updating Hits\n\nIn order to update hits, there are a number of supported functions:\n\n- `howler.hit.update(...)`\n- `howler.hit.update_by_query(...)`\n- `howler.hit.overwrite(...)`\n\n#### `update()`\n\nIf you want to update a hit in a transactional way, you can use the following code:\n\n```python\nhit_to_update = client.search.hit(\"howler.id:*\", rows=1, sort=\"event.created desc\")[\"items\"][0]\n\nresult = client.hit.update(hit_to_update[\"howler\"][\"id\"], [(UPDATE_SET, \"howler.score\", hit_to_update[\"howler\"][\"score\"] + 100)])\n```\n\nThe following operations can be run to update a hit.\n\n**List Operations:**\n\n- `UPDATE_APPEND`: Used to append a value to a given list\n- `UPDATE_APPEND_IF_MISSING`: Used to append a value to a given list if the value isn't already in the list\n- `UPDATE_REMOVE`: Will remove a given value from a list\n\n**Numeric Operations:**\n\n- `UPDATE_DEC`: Decrement a numeric value by the specified amount\n- `UPDATE_INC`: Increment a numeric value by the specified amount\n- `UPDATE_MAX`: Will set a numeric value to the maximum of the existing value and the specified value\n- `UPDATE_MIN`: Will set a numeric value to the minimum of the existing value and the specified value\n\n**Multipurpose Operations:**\n\n- `UPDATE_SET`: Set a field's value to the given value\n- `UPDATE_DELETE`: Will delete a given field's value\n\n#### `update_by_query()`\n\nThis function allows you to update a large number of hits by a query:\n\n```python\nclient.hit.update_by_query(f'howler.analytic:\"Example Alert\"', [(UPDATE_INC, \"howler.score\", 100)])\n```\n\nThe same operations as in `update()` can be used.\n\n### `overwrite()`\n\nThis function allows you to directly overwrite a hit with a partial hit object. This is the most easy to use, but loses some of the validation and additional processing of the update functions.\n\n```python\nhit_to_update = client.search.hit(\"howler.id:*\", rows=1, sort=\"event.created desc\")[\"items\"][0]\n\nresult = client.hit.overwrite(hit_to_update[\"howler\"][\"id\"], {\"source.ip\": \"127.0.0.1\", \"destination.ip\": \"8.8.8.8\"})\n```\n"
@@ -0,0 +1 @@
1
+ export default "# Hit Links\n\nIn order to facilitate the addition of additional tools one can use to triage a hit, Howler allows users to specify a set of links, along with a title and icon to show. This documentation will walk you through how to use these links.\n\n## Specification\n\nIn order to add links, you can use the `howler.links` field. This field takes in a list of objects with three keys:\n\n```python\nhit = {\n \"howler.links\": [\n {\n \"title\": \"Link Title with Internal Image\",\n \"href\": \"https://example.com\",\n # Note that this specifies another application, not an image link\n \"icon\": \"superset\",\n },\n {\n \"title\": \"Link Title with External Image\",\n \"href\": \"https://www.britannica.com/animal/goose-bird\",\n # Note that this specifies an image link. We don't provide hosting, so you'll need to host it somewhere else!\n \"icon\": \"https://cdn.britannica.com/76/76076-050-39DDCBA1/goose-Canada-North-America.jpg\",\n },\n ]\n}\n```\n\nNote the icon can either be:\n\n1. A name identifying a linked application (from the app switcher), to use its icon\n2. An external URL\n\nIf you'd like to use a linked app, the following values are currently supported:\n\n$APP_LIST\n\nUsing any of these values will automatically use the corresponding icon. No need to host your own!\n"
@@ -0,0 +1 @@
1
+ export default "# Notebook Integration\n\nHowler provides the option to add notebooks to analytics to aid in triaging hits and alerts. It allows users to quickly spin up a notebook within a jupyter environment with either analytic and/or hit information.\n\nHowler will look for variables to replace within the first code cell of a notebook, giving the flexibility of providing context within the first cells using markdown.\n\nHere an example of how howler will replace the variables within your notebook:\n\n```notebook tab=\"Template\"\n{\n \"cells\": [\n {\n \"cell_type\": \"code\",\n \"id\": \"fe6f810f-2459-4ad7-92ac-1e925ce892d4\",\n \"outputs\": [],\n \"source\": [\n \"howlerHitId = \\\"{{hit.howler.id}}\\\"\\n\",\n \"howlerAnalyticId = \\\"{{analytic.analytic_id}}\\\"\"\n ]\n },\n {\n \"cell_type\": \"code\",\n \"id\": \"586470ef-c8e6-45b1-bd17-17ccd083eef1\",\n \"outputs\": [],\n \"source\": [\n \"from howler_client import get_client\\n\\n\",\n \"howler = get_client(\\\"$CURRENT_URL\\\")\\n\",\n \"hit = howler.hit(howlerHitId)\"\n ]\n }\n ],\n \"nbformat\": 4,\n \"nbformat_minor\": 5\n}\n```\n\n```notebook tab=\"Processed\"\n{\n \"cells\": [\n {\n \"cell_type\": \"code\",\n \"id\": \"fe6f810f-2459-4ad7-92ac-1e925ce892d4\",\n \"outputs\": [],\n \"source\": [\n \"howlerHitId = \\\"7dxHCat0Y2Sj48qyU7ZkVV\\\"\\n\",\n \"howlerAnalyticId = \\\"2SXKl6Cq4rOxWLps2SFHyB\\\"\"\n ]\n },\n {\n \"cell_type\": \"code\",\n \"id\": \"586470ef-c8e6-45b1-bd17-17ccd083eef1\",\n \"outputs\": [],\n \"source\": [\n \"from howler_client import get_client\\n\\n\",\n \"howler = get_client(\\\"$CURRENT_URL\\\")\\n\",\n \"hit = howler.hit(howlerHitId)\"\n ]\n }\n ],\n \"nbformat\": 4,\n \"nbformat_minor\": 5\n}\n```\n\nor with some markdown in the first cell:\n\n```notebook tab=\"Template\"\n{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"id\": \"e17cbaa8-9849-462f-9bd2-bf30943f76b3\",\n \"source\": [\n \"### Example Notebook\"\n ]\n },\n {\n \"cell_type\": \"code\",\n \"id\": \"fe6f810f-2459-4ad7-92ac-1e925ce892d4\",\n \"outputs\": [],\n \"source\": [\n \"howlerHitId = \\\"{{hit.howler.id}}\\\"\\n\",\n \"howlerAnalyticId = \\\"{{analytic.analytic_id}}\\\"\"\n ]\n },\n {\n \"cell_type\": \"code\",\n \"id\": \"586470ef-c8e6-45b1-bd17-17ccd083eef1\",\n \"outputs\": [],\n \"source\": [\n \"from howler_client import get_client\\n\\n\",\n \"howler = get_client(\\\"$CURRENT_URL\\\")\\n\",\n \"hit = howler.hit(howlerHitId)\"\n ]\n }\n ],\n \"nbformat\": 4,\n \"nbformat_minor\": 5\n}\n```\n\n```notebook tab=\"Processed\"\n{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"id\": \"e17cbaa8-9849-462f-9bd2-bf30943f76b3\",\n \"source\": [\n \"### Example Notebook\"\n ]\n },\n {\n \"cell_type\": \"code\",\n \"id\": \"fe6f810f-2459-4ad7-92ac-1e925ce892d4\",\n \"outputs\": [],\n \"source\": [\n \"howlerHitId = \\\"7dxHCat0Y2Sj48qyU7ZkVV\\\"\\n\",\n \"howlerAnalyticId = \\\"2SXKl6Cq4rOxWLps2SFHyB\\\"\"\n ]\n },\n {\n \"cell_type\": \"code\",\n \"id\": \"586470ef-c8e6-45b1-bd17-17ccd083eef1\",\n \"outputs\": [],\n \"source\": [\n \"from howler_client import get_client\\n\\n\",\n \"howler = get_client(\\\"$CURRENT_URL\\\")\\n\",\n \"hit = howler.hit(howlerHitId)\"\n ]\n }\n ],\n \"nbformat\": 4,\n \"nbformat_minor\": 5\n}\n```\n\nCurrently, howler will only try to replace hit and analytic objects.\n\n# Requirements for the notebook integration to work\n\n- A working NBGallery setup is required.\n - If the user can send a notebook from nbgallery to their jupyter environment, it will also work using the open in jupyhub button on Howler.\n- Just like with NBGallery, the user needs to make sure their Jupyter Environment is currently running, otherwise Howler will fail to open the notebook.\n\nHowler will append the id of the Hit/Alert when sending a notebook to Jupyter, making it easy to track for analysis. It is possible to open a notebook from within an analytic page, in this case, no hit id will be appended to the file name of the notebook and Howler won't be able to replace hit informations in the templated notebook since no hit was provided.\n\n# Adding a notebook to an analytic\n\nTo add a notebook to an analytic, it's only necessary to provide the NBGallery link of the notebook. The link shoud look like this. The notebook shouldn't be private, otherwise, only the user that uploaded it will be able to use it on Howler.\n\n```\n$NBGALLERY_URL/notebooks/5-example\n```\n\n```alert\nIt is advised to clear any outputs from a notebook before adding it on NBGallery to avoid leaking sensitive data.\n```\n"
@@ -0,0 +1 @@
1
+ export default "# Retention in Howler\n\nIn order to comply with organizational policies, Howler is configured to purge stale alerts after a specific amount of time. On this instance, that duration is `duration`.\n\nHowler calculates whether it is time for the removal of an alert by the `event.created` date - once this surpasses the confgured deadline, a nightly automated job will remove the alert.\n\nIn order to communicate this to the user, see the example alert below:\n\n`alert`\n\nIn the top right, hovering over the timestamp will outline how long users have before the alert is removed. In order to ensure compliance with policy, ensure that `event.created` matches the date the underlying data was collected, allowing howler to ensure data is purged in time.\n\n```alert\nThis will soon change - there will be a dedicated field to set that will override this approach.\n```\n"
@@ -0,0 +1 @@
1
+ export default "# Hit Schema\n\nA howler hit can contain a large number of unique fields, each with a particular definition, in order to make hits across analytics mutually intelligible. Below is a table containing all the given hit fields, as well as their type and a short description of what they are used for. While the vast majority of the fields are based on the Elastic Common Schema (see [this guide on ECS](https://www.elastic.co/guide/en/ecs/8.5/index.html) for documentation), there are also custom fields depending on the plugins enabled in Howler.\n\n## Howler Fields - Best Practices\n\nIn order to allow for some consistency between various analytics, there are a number of fields with recommended (but not required) styles. These include:\n\n- `howler.analytic`: Denotes the overarching analytic that generated the hit. For example, if the name of your analytic is Bad Guy Finder, you can set this field to Bad Guy Finder. Examples of use:\n - Bad Guy Finder (correct)\n - BadGuyFinder (acceptable, but spaces are preferred)\n - bad.guy.finder (incorrect, don't use periods)\n - bad_guy_finder (incorrect, don't use underscores)\n - in general, you can use [this regex](https://regexr.com/7ikco) to validate your proposed analytic name\n\n- `howler.detection`: Denotes the specific algorithm or portion of the analytic that generated the hit. For example, if your analytic has three ways of detecting hits that should be looked at (Impossible Travel, Incorrect Login Information, XSS Attack Detection), then the manner in which the hit you're creating was detected should be set. Examples of use:\n - Impossible Travel (correct)\n - ImpossibleTravel (acceptable, but spaces are preferred)\n - impossible.travel (incorrect, don't use periods)\n - impossible_travel (incorrect, don't use underscores)\n"
@@ -0,0 +1 @@
1
+ export default "# Howler Templates\n\nHowler is, fundamentally, an application that allows analysts to triage hits and alerts. In order to make sure analysts can do this as efficiently as possible, we want to have the ability to present relevant data for a given alert to analysts in an easy, understandable way.\n\nTo this end, Howler allows analysts and detection engineers to create **templates**, which allow various analytics and their detections to present fields and data relevant to triaging alerts generated by that analytic/detection. For example, let's consider two different alerts, by two different detections:\n\n```json\n$ALERT_1\n```\n\n```json\n$ALERT_2\n```\n\nNote that while both share some similar fields, they also differ. We want each of these alert cards to present different data - for that, we can use templates. This allows us to show both hits in the same list, but with differing fields displayed:\n\n===SPLIT===\n\nAs we can see, by specifying a template for each of the detections, different data will be presented to the analyst. To do so, you can use the template creator [here]($CURRENT_URL/templates/view?type=personal).\n\n```alert\nNote that you must have ingested some hits for the given analytic/detection pair for it to show as an option in the template creation UI!\n```\n"
@@ -0,0 +1 @@
1
+ export default "# Views\n\nViews are a feature in Howler that allows users to create custom, default queries through which they can organize and triage hits. In this document, we will outline how to create and interact with views.\n\n## Using a View\n\nYou can use views by navigating to the view manager under [Manage > Views](/views). Clicking on any view will open it in the search page. Here, you can also use the `search` icon to open the view in the search page. You can also edit views that belong to you, and mark them as favourites. This will show them in the `t(route.views.saved)` dropdown in the sidebar. In the top right, you can also choose your \"`t(route.views.manager.default)`\", that will be selected by default when opening the alerts page.\n\n## Creating Views\n\nIn order to create a view, you can use the create view page, located [here](/views/create). This page allows you to modifer your view, specify a `t(hit.search.sort.fields)` and `t(hit.search.span)`, and save the view with a particular name. You can mark a view as global or personal, depending on who you want to be able to see and use the view.\n"
@@ -0,0 +1 @@
1
+ export default "# Utilisation des actions dans Howler\n\nLes actions sont une fonctionnalit\u00e9 de Howler qui permet aux utilisateurs d'effectuer des t\u00e2ches particuli\u00e8res sur un grand nombre de hits, en automatisant l'ex\u00e9cution d'une t\u00e2che sur chaque hit. Il y a actuellement `action_count` op\u00e9rations support\u00e9es dans Howler :\n\n`action_list`\n\nToutes ces op\u00e9rations peuvent \u00eatre combin\u00e9es ensemble dans des actions uniques - c'est-\u00e0-dire que les op\u00e9rations sont essentiellement les blocs de construction des actions dans Howler. Chaque op\u00e9ration ne peut appara\u00eetre qu'une seule fois par action, et toutes les op\u00e9rations sont configur\u00e9es \u00e0 travers une interface unifi\u00e9e. Dans ce document, nous allons parcourir les \u00e9tapes n\u00e9cessaires \u00e0 l'ex\u00e9cution et \u00e0 la sauvegarde d'une action.\n\n## Configuration d'une action\n\nPour commencer \u00e0 configurer votre action, d\u00e9cidez s'il s'agit d'une action unique ou d'une action sauvegard\u00e9e que vous souhaitez ex\u00e9cuter plusieurs fois. Si vous voulez l'ex\u00e9cuter une fois, utilisez l'entr\u00e9e `t(route.actions.change)` dans la barre lat\u00e9rale, alors qu'une action sauvegard\u00e9e est mieux configur\u00e9e sous `t(route.actions.manager)` en appuyant sur \"`t(route.actions.create)`\".\n\nLa premi\u00e8re \u00e9tape de toute action sera de concevoir une requ\u00eate sur laquelle vous voulez que cette action s'ex\u00e9cute. La bo\u00eete de recherche en haut de l'\u00e9cran accepte n'importe quelle requ\u00eate lucene - le m\u00eame format que pour la recherche d'occurrences.\n\n`tui_phrase`\n\nUne fois que vous \u00eates satisfait des occurrences qui seront incluses dans cette requ\u00eate, vous pouvez commencer \u00e0 ajouter des op\u00e9rations. Vous pouvez le faire en s\u00e9lectionnant l'op\u00e9ration que vous voulez ajouter dans la liste d\u00e9roulante:\n\n`operation_select`\n\nUne fois que vous avez s\u00e9lectionn\u00e9 l'op\u00e9ration que vous souhaitez ajouter, une liste de param\u00e8tres \u00e0 remplir vous est propos\u00e9e. Voici un exemple d'ajout d'une \u00e9tiquette.\n\n`operation_configuration`\n\nUne fois que l'op\u00e9ration est valid\u00e9e avec succ\u00e8s, vous pouvez r\u00e9p\u00e9ter ce processus avec l'op\u00e9ration suivante. Une fois que vous avez ajout\u00e9 toutes les op\u00e9rations qui vous int\u00e9ressent, vous pouvez ex\u00e9cuter ou sauvegarder l'action en utilisant le bouton situ\u00e9 sous la barre de recherche. Vous obtiendrez ainsi un rapport sur les \u00e9tapes franchies.\n\n`report`\n\nIl peut arriver que des actions g\u00e9n\u00e8rent une erreur, soit lors de la validation, soit lors de l'ex\u00e9cution. Dans ce cas, une alerte d'erreur sera affich\u00e9e, vous aidant \u00e0 r\u00e9soudre le probl\u00e8me.\n\n## Automatiser une action\n\nPour automatiser une action, ouvrez une action sauvegard\u00e9e. Les options disponibles pour l'automatisation (`automation_options`) appara\u00eetront sous forme de cases \u00e0 cocher. En cochant la case, vous vous assurez que l'action s'ex\u00e9cutera ensuite - aucune autre op\u00e9ration n'est n\u00e9cessaire.\n"
@@ -0,0 +1 @@
1
+ export default "<!-- docs/ingestion/authentication.fr.md -->\n\n# Authentification de Howler\n\nL'API de Howler prend en charge un certain nombre d'approches d'authentification lors de l'acc\u00e8s \u00e0 l'API. Ce document pr\u00e9sente les\ndiff\u00e9rentes approches et explique comment utiliser chacune d'entre elles.\n\n## Types d'authentification\n\nIl existe quatre m\u00e9thodes d'authentification que l'on peut utiliser pour se connecter \u00e0 l'API howler:\n\n1. Nom d'utilisateur et mot de passe\n2. Nom d'utilisateur et cl\u00e9 API\n3. Nom d'utilisateur et cl\u00e9 d'application (apr\u00e8s connexion)\n4. Jeton d'acc\u00e8s OAuth\n\nNous allons maintenant pr\u00e9senter les cas d'utilisation de chaque type d'authentification.\n\n### Authentification par nom d'utilisateur/mot de passe\n\nL'authentification par nom d'utilisateur et mot de passe est la m\u00e9thode d'authentification la plus simple et la moins s\u00fbre. Il est peu probable qu'elle soit activ\u00e9e\ndans un environnement de production, elle permet aux utilisateurs de se connecter facilement \u00e0 l'API Howler et d'effectuer des modifications en tant qu'utilisateur donn\u00e9,\nsans avoir \u00e0 se soucier de cr\u00e9er des cl\u00e9s API ou d'utiliser un fournisseur OAuth comme Keycloak ou Azure. Les utilisateurs peuvent se connecter\nen utilisant l'authentification par nom d'utilisateur et mot de passe de l'une des deux mani\u00e8res suivantes :\n\n#### Appel direct au point de terminaison requis (mot de passe)\n\nC'est de loin la m\u00e9thode la plus simple. Il suffit d'ajouter un en-t\u00eate d'autorisation de base \u00e0 la requ\u00eate HTTP que vous souhaitez effectuer, et tout est pris en charge.\nque vous voulez faire, et tout est pris en charge:\n\n```bash\necho -n \"user:user\" | base64 -w0\n# -> dXNlcjp1c2Vy\n```\n\n```http\nGET $CURRENT_URL/api/v1/user/whoami\nAuthorization: Basic dXNlcjp1c2Vy\n```\n\n#### \u00c9change contre un jeton d'application (mot de passe)\n\nIl s'agit d'une approche un peu plus complexe, mais qui pr\u00e9sente l'avantage de ne pas exposer le nom d'utilisateur et le mot de passe \u00e0 chaque demande.\n\u00e0 chaque requ\u00eate. Vous pouvez utiliser le point de terminaison `v1/auth/login` pour \u00e9changer votre nom d'utilisateur et votre mot de passe contre un jeton d'application. Le jeton\nfonctionne de la m\u00eame mani\u00e8re qu'un jeton d'acc\u00e8s OAuth - vous le fournissez \u00e0 chaque requ\u00eate ult\u00e9rieure, et il vous authentifie jusqu'\u00e0 ce que le jeton expire.\njusqu'\u00e0 ce que le jeton expire.\n\n```http\nPOST $CURRENT_URL/api/v1/auth/login/\nContent-Type: application/json\n\n{\n \"user\": \"user\",\n \"password\": \"user\"\n}\n```\n\nLe r\u00e9sultat sera quelque chose comme:\n\n```json\n{\n \"api_error_message\": \"\",\n \"api_response\": {\n \"app_token\": \"user:5791a142067745c3af51d6596da7da8f86357a9fa92ad78d1ce118ea7d89d34e\",\n \"provider\": null,\n \"refresh_token\": null\n },\n \"api_server_version\": \"0.0.0.dev0\",\n \"api_status_code\": 200\n}\n```\n\nUtilisation de ce jeton dans un autre appel d'API:\n\n```http\nGET $CURRENT_URL/api/v1/user/whoami\nAuthorization: Bearer user:5791a142067745c3af51d6596da7da8f86357a9fa92ad78d1ce118ea7d89d34e\n```\n\n### Authentification par nom d'utilisateur/cl\u00e9 API\n\nL'authentification par nom d'utilisateur et cl\u00e9 API fonctionne en grande partie de la m\u00eame mani\u00e8re que l'authentification par nom d'utilisateur/mot de passe du point de vue du client.\nDu c\u00f4t\u00e9 du serveur, cependant, les cl\u00e9s API pr\u00e9sentent plusieurs avantages essentiels. Tout d'abord, elles peuvent \u00eatre facilement r\u00e9voqu\u00e9es par l'utilisateur.\nDeuxi\u00e8mement, leurs privil\u00e8ges peuvent \u00eatre limit\u00e9s, n'autorisant qu'un sous-ensemble de permissions.\n\nIl existe deux m\u00e9thodes d'authentification, refl\u00e9tant le nom d'utilisateur et le mot de passe:\n\n#### Appel direct au point de terminaison requis (cl\u00e9 API)\n\nIl suffit d'ajouter un en-t\u00eate d'autorisation de base contenant le nom d'utilisateur et la cl\u00e9 API \u00e0 la requ\u00eate HTTP que vous souhaitez effectuer, et\ntout est pris en charge:\n\n```bash\n# note the format is <username>:<apikeyname>:<secret>\necho -n \"user:devkey:user\" | base64 -w0\n# -> dXNlcjpkZXZrZXk6dXNlcg==\n```\n\n```http\nGET $CURRENT_URL/api/v1/user/whoami\nAuthorization: Basic dXNlcjpkZXZrZXk6dXNlcg==\n```\n\n#### \u00c9change contre un jeton d'application (cl\u00e9 API)\n\nVous pouvez \u00e9galement utiliser le point de terminaison `v1/auth/login` pour \u00e9changer votre nom d'utilisateur et votre cl\u00e9 API contre un jeton d'application. Le jeton\nfonctionne de la m\u00eame mani\u00e8re qu'un jeton d'acc\u00e8s OAuth - vous le fournissez \u00e0 chaque demande ult\u00e9rieure, et il vous authentifie jusqu'\u00e0 ce que le jeton expire.\n\n```http\nPOST $CURRENT_URL/api/v1/auth/login/\nContent-Type: application/json\n\n{\n \"user\": \"user\",\n \"apikey\": \"devkey:user\"\n}\n```\n\nLe r\u00e9sultat sera quelque chose comme:\n\n```json\n{\n \"api_error_message\": \"\",\n \"api_response\": {\n \"app_token\": \"user:f220eb76ff8404abfece8c0c2f3368c7d89618c776bedcd3a506843dc4a952e4\",\n \"provider\": null,\n \"refresh_token\": null\n },\n \"api_server_version\": \"0.0.0.dev0\",\n \"api_status_code\": 200\n}\n```\n\nUtilisation de ce jeton dans un autre appel d'API:\n\n```http\nGET $CURRENT_URL/api/v1/user/whoami\nAuthorization: Bearer user:f220eb76ff8404abfece8c0c2f3368c7d89618c776bedcd3a506843dc4a952e4\n```\n\nNotez que lorsque vous vous connectez \u00e0 l'aide d'une cl\u00e9 d'@cccsaurora/howler-ui/api, les autorisations de la cl\u00e9 d'@cccsaurora/howler-ui/api continuent de s'appliquer. Ainsi, si vous essayez d'acc\u00e9der \u00e0\n\u00e0 un point d'acc\u00e8s qui requiert l'autorisation \"write\" avec une cl\u00e9 API qui n'a que l'autorisation \"read\", cela provoquera une erreur 403\nForbidden (Interdit).\n\n### Authentification par jeton d'acc\u00e8s\n\nEn plus des m\u00e9thodes d'authentification fournies en interne par Howler, vous pouvez \u00e9galement vous authentifier avec un fournisseur OAuth externe comme Azure ou Keycloak.\nPour ce faire, vous devez obtenir un jeton d'acc\u00e8s aupr\u00e8s de l'un de ces fournisseurs.\nPour obtenir un jeton d'acc\u00e8s, il y a g\u00e9n\u00e9ralement deux flux - On-Behalf-Of, ou le flux de connexion de l'utilisateur (voir [ici](https://www.rfc-editor.org/rfc/rfc6749#section-4.1) pour un r\u00e9capitulatif\nde cela). Dans le cas de Howler, le point de terminaison `v1/auth/login` est utilis\u00e9 pour les \u00e9tapes D & E du flux de connexion de l'utilisateur, et\nil renvoie ce qui suit:\n\n```json\n{\n \"api_response\": {\n \"app_token\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c2VyIn0\",\n \"provider\": \"keycloak\",\n \"refresh_token\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJyZWZyZXNoIn0\"\n }\n}\n```\n\nDans ce cas, le `app_token` est le Web Token JSON que l'application utilise comme jeton d'acc\u00e8s. De la m\u00eame mani\u00e8re, le\n`refresh_token` est un autre JWT qui est utilis\u00e9 pour rafra\u00eechir le jeton d'acc\u00e8s si n\u00e9cessaire. Enfin, le champ `provider` (fournisseur)\nindique \u00e0 quel fournisseur correspond ce jeton d'acc\u00e8s.\n\nUne fois que vous avez ce jeton d'acc\u00e8s, vous pouvez simplement le transmettre dans l'en-t\u00eate Authorization :\n\n```http\nGET $CURRENT_URL/api/v1/user/whoami\nAuthorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c2VyIn0\n```\n\nHowler d\u00e9tectera automatiquement qu'il s'agit d'un JWT et le traitera comme tel. Si le jeton est valide, l'utilisateur sera\nauthentifi\u00e9.\n\nAfin de rafra\u00eechir un jeton d'acc\u00e8s expir\u00e9, vous pouvez utiliser l'appel API suivant:\n\n```http\nPOST $CURRENT_URL/api/v1/auth/login/\nContent-Type: application/json\n\n{\n \"oauth_provider\": \"keycloak\",\n \"refresh_token\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJyZWZyZXNoIn0\"\n}\n```\n\nEt vous obtiendrez quelque chose comme ceci en retour:\n\n```json\n{\n \"api_response\": {\n \"app_token\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c2VyMiJ9\",\n \"provider\": \"keycloak\",\n \"refresh_token\": \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJyZWZyZXNodG9rZW4yIn0\"\n }\n}\n```\n\n## Impersonation\n\nLe dernier \u00e9l\u00e9ment important du flux d'authentification est la fonctionnalit\u00e9 d'usurpation d'identit\u00e9. Pour qu'un compte de service\nou un autre utilisateur puisse se faire passer pour vous (c'est-\u00e0-dire cr\u00e9er des alertes en votre nom), Howler permet aux utilisateurs de fournir une deuxi\u00e8me cl\u00e9 API\nafin de s'authentifier en tant qu'autre utilisateur.\n\nAvant d'utiliser la cl\u00e9 API d'un autre utilisateur pour vous authentifier en tant que lui, il est important que la cl\u00e9 API que vous utilisez ait \u00e9t\u00e9\nmarqu\u00e9e comme valide pour l'usurpation d'identit\u00e9 - v\u00e9rifiez aupr\u00e8s de l'utilisateur qui l'a fournie. Si c'est le cas, vous pouvez l'utiliser en formulant votre requ\u00eate\ncomme suit:\n\n```bash\n# Your credentials\necho -n \"admin:devkey:admin\" | base64 -w0\n# -> YWRtaW46ZGV2a2V5OmFkbWlu\n\n# Their credentials\necho -n \"user:impersonate_admin:user\" | base64 -w0\n# -> dXNlcjppbXBlcnNvbmF0ZV9hZG1pbjp1c2Vy\n```\n\n```alert\nToute forme d'authentification peut \u00eatre utilis\u00e9e par l'usurpateur, mais les cl\u00e9s API valid\u00e9es sont la seule m\u00e9thode d'authentification autoris\u00e9e pour la personne dont vous usurpez l'identit\u00e9.\n```\n\n```http\nGET $CURRENT_URL/api/v1/user/whoami\nAuthorization: Basic YWRtaW46ZGV2a2V5OmFkbWlu\nX-Impersonating: Basic dXNlcjppbXBlcnNvbmF0ZV9hZG1pbjp1c2Vy\n```\n\nSi la configuration est correcte, le r\u00e9sultat sera le suivant:\n\n```json\n{\n \"api_error_message\": \"\",\n \"api_response\": {\n \"avatar\": null,\n \"classification\": \"TLP:W\",\n \"email\": \"user@howler.cyber.gc.ca\",\n \"groups\": [\"USERS\"],\n \"is_active\": true,\n \"is_admin\": false,\n \"name\": \"User\",\n \"roles\": [\"user\"],\n \"username\": \"user\"\n },\n \"api_server_version\": \"0.0.0.dev0\",\n \"api_status_code\": 200\n}\n```\n\nNotez que le serveur a renvoy\u00e9 cette requ\u00eate comme si vous \u00e9tiez `user`, PAS `admin`. Il est cependant clairement indiqu\u00e9 dans les logs que c'est vous qui faites la requ\u00eate:\n\n```log\n22/12/05 14:15:02 INFO howler.api.security | Authenticating user for path /api/v1/user/whoami/\n22/12/05 14:15:03 WARNING howler.api.security | admin is impersonating user\n22/12/05 14:15:03 INFO howler.api.security | Logged in as user from 127.0.0.1\n22/12/05 14:15:03 INFO howler.api | GET /api/v1/user/whoami/ - 200\n```\n"
@@ -0,0 +1 @@
1
+ export default "<!-- docs/ingestion/bundles.fr.md -->\n\n# Les groupes des hits Howler\n\nLes groupes des hits peuvent \u00eatre utilis\u00e9s pour regrouper facilement un grand nombre d'alertes similaires, ce qui permet aux analystes de les traiter comme un seul incident. Prenons l'exemple d'un ordinateur qui effectue \u00e0 plusieurs reprises un appel r\u00e9seau vers `baddomain.ru` - bien qu'une alerte puisse \u00eatre g\u00e9n\u00e9r\u00e9e pour chaque cas o\u00f9 cet ordinateur acc\u00e8de \u00e0 ce domaine, il est logique que les analystes traitent toutes ces alertes comme un seul et m\u00eame cas.\n\n## Cr\u00e9ation de groupes via le client Howler\n\nIl y a plusieurs fa\u00e7ons de cr\u00e9er un groupe via le client Howler:\n\n```python\nfrom howler_client import get_client\n\nhowler = get_client(\"https://howler.dev.analysis.cyber.gc.ca\")\n\n\"\"\"Cr\u00e9ation simultan\u00e9e d'un groupe howler et de hits\"\"\"\nhowler.bundle.create(\n # Le premier argument est le hit de l'offre group\u00e9e\n {\n \"howler.analytic\": \"example-test\",\n \"howler.score\": 0\n },\n # Le deuxi\u00e8me argument est un hit ou une liste de hits \u00e0 inclure dans l'offre group\u00e9e.\n [\n {\n \"howler.analytic\": \"example-test\",\n \"howler.score\": 0\n },\n {\n \"howler.analytic\": \"example-test\",\n \"howler.score\": 0\n }\n ]\n)\n\n\"\"\"Cr\u00e9ation d'un groupe howler \u00e0 partir de hits existants\"\"\"\nhowler.bundle.create(\n {\n \"howler.analytic\": \"example-test\",\n \"howler.score\": 0,\n \"howler.hits\": [\"YcUsL8QsjmwwIdstieROk\", \"6s7MztwuSvz6tM0PgGJhvz\"]\n },\n # Noter: Dans les prochaines versions, vous n'aurez plus besoin d'inclure cet argument.\n []\n)\n\n\n\"\"\"Cr\u00e9ation \u00e0 partir d'une carte\"\"\"\nbundle_hit = {\n \"score\": 0,\n \"bundle\": True\n}\n\nmap = {\n \"score\": [\"howler.score\"],\n \"bundle\": [\"howler.is_bundle\"]\n}\n\nhowler.bundle.create_from_map(\"example-test\", bundle_hit, map, [{\"score\": 0}])\n```\n\n## Visualiser les groupes sur l'interface utilisateur de Howler\n\nAfin de visualiser les groupes cr\u00e9\u00e9s sur l'interface utilisateur de Howler, vous pouvez utiliser la requ\u00eate `howler.is_bundle:true`. Cela fournira une liste de groupes cr\u00e9\u00e9s que vous pourrez consulter.\n\nEn cliquant sur un groupe, vous ouvrirez une interface de recherche l\u00e9g\u00e8rement diff\u00e9rente de l'interface normale. Dans ce cas, nous filtrons automatiquement les r\u00e9sultats de la recherche pour n'inclure que les r\u00e9sultats inclus dans le groupe. Pour que cela soit \u00e9vident, l'en-t\u00eate repr\u00e9sentant le groupe appara\u00eet au-dessus de la barre de recherche.\n\nVous pouvez continuer \u00e0 filtrer les r\u00e9sultats en utilisant les m\u00eames requ\u00eates que d'habitude et \u00e0 les visualiser comme d'habitude. Lors du triage d'un groupe, son \u00e9valuation s'appliquera \u00e0 tous les hits du groupe, **sauf ceux qui ont d\u00e9j\u00e0 \u00e9t\u00e9 tri\u00e9s**. En d'autres termes, si le groupe est ouvert, tous les hits ouverts seront \u00e9valu\u00e9s lorsque vous l'\u00e9valuerez.\n\nLes groupes disposent \u00e9galement d'un onglet **R\u00e9sum\u00e9** qui n'est pas disponible pour les hits ordinaires. Cet onglet vous aidera \u00e0 regrouper les donn\u00e9es relatives \u00e0 tous les r\u00e9sultats du groupe. Il suffit d'ouvrir l'onglet et de cliquer sur \"Cr\u00e9er un sommaire\". Notez que cette op\u00e9ration peut prendre un certain temps, car un grand nombre de requ\u00eates sont ex\u00e9cut\u00e9es pour agr\u00e9ger les donn\u00e9es.\n"
@@ -0,0 +1 @@
1
+ export default "# Documentation du client Howler\n\nCette documentation explique comment interagir avec l'API howler en utilisant le client howler dans les environnements de d\u00e9veloppement Java et Python. Nous d\u00e9crirons le processus de base de la cr\u00e9ation d'un nouveau hit dans chaque environnement ainsi que la recherche dans howler des hits correspondant \u00e0 votre requ\u00eate.\n\n## Mise en route\n\n### Installation\n\nAfin d'utiliser le client howler, vous devez le lister comme une d\u00e9pendance dans votre projet.\n\n#### **Python**\n\nIl suffit de l'installer \u00e0 l'aide de pip:\n\n```bash\npip install howler-client\n```\n\nVous pouvez \u00e9galement l'ajouter \u00e0 votre requirements.txt, ou \u00e0 tout autre syst\u00e8me de gestion des d\u00e9pendances que vous utilisez.\n\n### Authentification\n\nComme indiqu\u00e9 dans la [Documentation sur l'authentification](/help/auth), les utilisateurs peuvent s'authentifier de diff\u00e9rentes mani\u00e8res. Pour interfacer avec le client howler, cependant, le flux sugg\u00e9r\u00e9 est d'utiliser une cl\u00e9 API. Avant de commencer, g\u00e9n\u00e9rons une cl\u00e9.\n\n1. Ouvrez l'interface utilisateur Howler avec laquelle vous souhaitez vous interfacer.\n2. Connectez-vous, puis cliquez sur votre profil en haut \u00e0 droite.\n3. Dans le menu utilisateur, cliquez sur Param\u00e8tres.\n4. Sous S\u00e9curit\u00e9 de l'utilisateur, appuyez sur l'ic\u00f4ne (+) sur la ligne Cl\u00e9s API.\n5. Nommez votre cl\u00e9 et donnez-lui les autorisations n\u00e9cessaires.\n6. Appuyez sur Create (Cr\u00e9er) et copiez la cha\u00eene fournie dans un endroit s\u00fbr. \\*\\*Vous ne reverrez plus cette cha\u00eene.\n\nCette cl\u00e9 API sera fournie \u00e0 votre code par la suite.\n\n## Client Python\n\nPour se connecter \u00e0 howler en utilisant le client python, il y a un processus assez simple \u00e0 suivre:\n\n```python\nfrom howler_client import get_client\n\nUSERNAME = 'user' # Obtenez-le \u00e0 partir de la page des param\u00e8tres de l'utilisateur de l'interface utilisateur de Howler.\nAPIKEY = '@cccsaurora/howler-ui/apikey_name:apikey_data'\n\napikey = (USERNAME, APIKEY)\n\nhowler = get_client(\"$CURRENT_URL\", apikey=apikey)\n```\n\nVoil\u00e0, c'est fait ! Vous pouvez maintenant utiliser l'objet `howler` pour interagir avec le serveur. A quoi cela ressemble-t-il en r\u00e9alit\u00e9?\n\n### Cr\u00e9er des hits en Python\n\nPour le client python, vous pouvez cr\u00e9er des hits en utilisant les fonctions `howler.hit.create` ou `howler.hit.create_from_map`.\n\n#### `create`\n\nCette fonction prend un seul argument - soit un hit unique, soit une liste de hits, conforme au [Howler Schema] (/help/hit?tab=schema). Voici un exemple simple :\n\n```python\n# Quelques donn\u00e9es bidons au format Howler Schema\nexemple_hit = {\n \"howler\" : {\n \"analytic\" : \"exemple\",\n \"score\" : 10.0\n },\n \"event\" : {\n \"reason\" : \"Exemple hit\"\n }\n}\n\nhowler.hit.create(example_hit)\n```\n\nVous pouvez \u00e9galement ing\u00e9rer des donn\u00e9es dans un format plat :\n\n```python\nexample_hit = {\n \"howler.analytic\": \"example\",\n \"howler.score\": 10.0,\n \"event.reason\": \"Example hit\"\n}\n\nhowler.hit.create(example_hit)\n```\n\n#### `create_from_map`\n\nThis function takes in three arguments:\n\n- `tool name`: Le nom de l'outil d'analyse qui cr\u00e9e le hit\n- `map`: Une correspondance entre les donn\u00e9es brutes que vous avez et le sch\u00e9ma howler\n - Le format est un dictionnaire o\u00f9 les cl\u00e9s sont le chemin aplati des donn\u00e9es brutes, et les valeurs sont une liste de chemins aplatis pour les champs de Howler dans lesquels les donn\u00e9es seront copi\u00e9es.\n- `documents`: Les donn\u00e9es brutes que vous voulez ajouter \u00e0 Howler.\n\nVoici un exemple simple:\n\n```python\n# La correspondance entre nos donn\u00e9es et le sch\u00e9ma de Howler\nhwl_map = {\n \"file.sha256\": [\"file.hash.sha256\", \"howler.hash\"],\n \"file.name\": [\"file.name\"],\n \"src_ip\": [\"source.ip\", \"related.ip\"],\n \"dest_ip\": [\"destination.ip\", \"related.ip\"],\n \"time.created\": [\"event.start\"],\n}\n\n# Quelques fausses donn\u00e9es dans un format personnalis\u00e9 que nous voulons ajouter \u00e0 howler\nexample_hit = {\n \"src_ip\": \"0.0.0.0\",\n \"dest_ip\": \"8.8.8.8\",\n \"file\": {\n \"name\": \"hello.exe\",\n \"sha256\": sha256(str(\"hello.exe\").encode()).hexdigest()\n },\n \"time\": {\n \"created\": datetime.now().isoformat()\n },\n}\n\n# Notez que le troisi\u00e8me argument est de type liste!\nhowler.hit.create_from_map(\"example_ingestor\", hwl_map, [example_hit])\n```\n\n### Interroger les hits en Python\n\nL'interrogation des hits avec le client python howler se fait en utilisant la fonction `howler.search.hit`. Elle poss\u00e8de un certain nombre d'arguments obligatoires et optionnels:\n\n- Obligatoire:\n - `query`: requ\u00eate lucene (cha\u00eene)\n- Facultatif: `filters`: requ\u00eate lucene (cha\u00eene):\n - `filters`: Requ\u00eates lucene additionnelles utilis\u00e9es pour filtrer les donn\u00e9es (liste de cha\u00eenes)\n - `fl`: Liste des champs \u00e0 retourner (cha\u00eene de champs s\u00e9par\u00e9s par des virgules)\n - `offset`: Offset auquel les \u00e9l\u00e9ments de la requ\u00eate doivent commencer (entier)\n - `rows`: Nombre d'enregistrements \u00e0 retourner (entier)\n - `sort`: Champ utilis\u00e9 pour le tri avec direction (cha\u00eene: ex. 'id desc')\n - `timeout`: Nombre maximum de millisecondes d'ex\u00e9cution de la requ\u00eate (entier)\n - `use_archive`: Interroge \u00e9galement l'archive\n - `track_total_hits`: Nombre de hits \u00e0 suivre (par d\u00e9faut: 10k)\n\nVoici quelques exemples de requ\u00eates:\n\n```python\n# Rechercher tous les hits cr\u00e9\u00e9s par assemblyline, afficher les 50 premiers et ne renvoyer que leurs identifiants.\nhowler.search.hit(\"howler.analytic:assemblyline\", fl=\"howler.id\", rows=50)\n\n# Recherche de toutes les occurrences r\u00e9solues cr\u00e9\u00e9es au cours des cinq derniers jours, avec indication de leur identifiant et de l'analyste qui les a cr\u00e9\u00e9es. N'en afficher que dix, d\u00e9cal\u00e9s de 40\nhowler.search.hit(\"howler.status:resolved\", filters=['event.created:[now-5d TO now]'] fl=\"howler.id,howler.analytic\", rows=10, offset=40)\n\n# Recherche de tous les r\u00e9sultats, d\u00e9lai d'attente si la requ\u00eate prend plus de 100 ms\nhowler.search.hit(\"howler.id:*\", track_total_hits=100000000, timeout=100, use_archive=True)\n```\n\n### Mise \u00e0 jour des r\u00e9sultats\n\nAfin de mettre \u00e0 jour les hits, il existe un certain nombre de fonctions support\u00e9es :\n\n- `howler.hit.update(...)`\n- `howler.hit.update_by_query(...)`\n- `howler.hit.overwrite(...)`\n\n#### `update()`\n\nSi vous souhaitez mettre \u00e0 jour un hit de mani\u00e8re transactionnelle, vous pouvez utiliser le code suivant:\n\n```python\nhit_to_update = client.search.hit(\"howler.id:*\", rows=1, sort=\"event.created desc\")[\"items\"][0]\n\nresult = client.hit.update(hit_to_update[\"howler\"][\"id\"], [(UPDATE_SET, \"howler.score\", hit_to_update[\"howler\"][\"score\"] + 100)])\n```\n\nLes op\u00e9rations suivantes peuvent \u00eatre ex\u00e9cut\u00e9es pour mettre \u00e0 jour un r\u00e9sultat.\n\n**Op\u00e9rations de liste:**\n\n- `UPDATE_APPEND` : Utilis\u00e9 pour ajouter une valeur \u00e0 une liste donn\u00e9e\n- `UPDATE_APPEND_IF_MISSING` : Utilis\u00e9 pour ajouter une valeur \u00e0 une liste donn\u00e9e si la valeur n'est pas d\u00e9j\u00e0 dans la liste.\n- `UPDATE_REMOVE` : Supprime une valeur donn\u00e9e d'une liste\n\n**Op\u00e9rations num\u00e9riques:**\n\n- `UPDATE_DEC` : Diminue une valeur num\u00e9rique de la quantit\u00e9 sp\u00e9cifi\u00e9e.\n- `UPDATE_INC` : Incr\u00e9mente une valeur num\u00e9rique de la quantit\u00e9 sp\u00e9cifi\u00e9e.\n- `UPDATE_MAX` : Fixe une valeur num\u00e9rique au maximum de la valeur existante et de la valeur sp\u00e9cifi\u00e9e.\n- `UPDATE_MIN` : Fixe une valeur num\u00e9rique au minimum de la valeur existante et de la valeur sp\u00e9cifi\u00e9e.\n\n**Op\u00e9rations polyvalentes:**\n\n- `UPDATE_SET` : Fixe la valeur d'un champ \u00e0 la valeur donn\u00e9e.\n- `UPDATE_DELETE` : Supprime la valeur d'un champ donn\u00e9\n\n#### `update_by_query()`\n\nCette fonction vous permet de mettre \u00e0 jour un grand nombre d'occurrences \u00e0 l'aide d'une requ\u00eate :\n\n```python\nclient.hit.update_by_query(f'howler.analytic : \"Exemple d\\'analytic\"', [(UPDATE_INC, \"howler.score\", 100)])\n```\n\nLes m\u00eames op\u00e9rations que dans `update()` peuvent \u00eatre utilis\u00e9es.\n\n### `overwrite()`\n\nCette fonction vous permet d'\u00e9craser directement un hit avec un objet hit partiel. C'est la plus facile \u00e0 utiliser, mais elle perd une partie de la validation et du traitement suppl\u00e9mentaire des fonctions de mise \u00e0 jour.\n\n```python\nhit_to_update = client.search.hit(\"howler.id:*\", rows=1, sort=\"event.created desc\")[\"items\"][0]\n\nresult = client.hit.overwrite(hit_to_update[\"howler\"][\"id\"], {\"source.ip\" : \"127.0.0.1\", \u201cdestination.ip\u201d : \"8.8.8.8\"})\n```\n"
@@ -0,0 +1 @@
1
+ export default "# Liens du hit\n\nAfin de faciliter l'ajout d'outils suppl\u00e9mentaires que l'on peut utiliser pour suivre un hit, Howler permet aux utilisateurs de sp\u00e9cifier un ensemble de liens, ainsi qu'un titre et une ic\u00f4ne \u00e0 afficher. Cette documentation vous expliquera comment utiliser ces liens.\n\n## Specification\n\nAfin d'ajouter des liens, vous pouvez utiliser le champ `howler.links`. Ce champ contient une liste d'objets avec trois cl\u00e9s :\n\n```python\nhit = {\n \"howler.links\": [\n {\n \"title\": \"Titre du lien avec image interne\",\n \"href\": \"https://example.com\",\n # Notez qu'il s'agit d'une autre application, et non d'un lien vers une image.\n \"icon\": \"superset\",\n },\n {\n \"title\": \"Titre du lien avec image externe\",\n \"href\": \"https://www.britannica.com/animal/goose-bird\",\n # Notez qu'il s'agit d'un lien vers une image. Nous ne fournissons pas d'h\u00e9bergement, vous devrez donc l'h\u00e9berger ailleurs !\n \"icon\": \"https://cdn.britannica.com/76/76076-050-39DDCBA1/goose-Canada-North-America.jpg\",\n },\n ]\n}\n```\n\nNotez que l'ic\u00f4ne peut \u00eatre soit :\n\n1. Un nom identifiant une application li\u00e9e (\u00e0 partir du s\u00e9lecteur d'applications), afin d'utiliser son ic\u00f4ne.\n2. Une URL externe\n\nSi vous souhaitez utiliser une application li\u00e9e, les valeurs suivantes sont actuellement prises en charge :\n\n$APP_LIST\n\nL'utilisation de l'une de ces valeurs entra\u00eene automatiquement l'utilisation de l'ic\u00f4ne correspondante. Inutile d'h\u00e9berger la v\u00f4tre !\n"
@@ -0,0 +1 @@
1
+ export default "# Int\u00e9gration de carnets\n\nHowler offre la possibilit\u00e9 d'ajouter des carnets aux analyses afin de faciliter le triage des hits et des alertes. Il permet aux utilisateurs de cr\u00e9er rapidement un carnet dans un environnement Jupyter avec des informations analytiques et/ou des informations sur les hits.\n\nHowler cherchera des variables \u00e0 remplacer dans la premi\u00e8re cellule de code d'un notebook, ce qui permettra de fournir un contexte dans les premi\u00e8res cellules \u00e0 l'aide de markdown.\n\nVoici un exemple de la fa\u00e7on dont Howler remplacera les variables dans votre carnet :\n\n```notebook tab=\"Mod\u00e8le\"\n{\n \"cells\": [\n {\n \"cell_type\": \"code\",\n \"id\": \"fe6f810f-2459-4ad7-92ac-1e925ce892d4\",\n \"outputs\": [],\n \"source\": [\n \"HowlerHitId = \\\"{{hit.howler.id}}\\\"\\n\",\n \"HowlerAnalyticId = \\\"{{analytic.analytic_id}}\\\"\"\n ]\n },\n {\n \"cell_type\": \"code\",\n \"id\": \"586470ef-c8e6-45b1-bd17-17ccd083eef1\",\n \"outputs\": [],\n \"source\": [\n \"from howler_client import get_client\\n\\n\",\n \"howler = get_client(\\\"$CURRENT_URL\\\")\\n\",\n \"hit = howler.hit(howlerHitId)\"\n ]\n }\n ],\n \"nbformat\": 4,\n \"nbformat_minor\": 5\n}\n```\n\n```notebook tab=\"Trait\u00e9\"\n{\n \"cells\": [\n {\n \"cell_type\": \"code\",\n \"id\": \"fe6f810f-2459-4ad7-92ac-1e925ce892d4\",\n \"outputs\": [],\n \"source\": [\n \"HowlerHitId = \\\"7dxHCat0Y2Sj48qyU7ZkVV\\\"\\n\",\n \"HowlerAnalyticId = \\\"2SXKl6Cq4rOxWLps2SFHyB\\\"\"\n ]\n },\n {\n \"cell_type\": \"code\",\n \"id\": \"586470ef-c8e6-45b1-bd17-17ccd083eef1\",\n \"outputs\": [],\n \"source\": [\n \"from howler_client import get_client\\n\\n\",\n \"howler = get_client(\\\"$CURRENT_URL\\\")\\n\",\n \"hit = howler.hit(howlerHitId)\"\n ]\n }\n ],\n \"nbformat\": 4,\n \"nbformat_minor\": 5\n}\n```\n\nou avec du markdown dans la premi\u00e8re cellule :\n\n```notebook tab=\"Mod\u00e8le\"\n{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"id\": \"e17cbaa8-9849-462f-9bd2-bf30943f76b3\",\n \"source\": [\n \"### Exemple de carnet\"\n ]\n },\n {\n \"cell_type\": \"code\",\n \"id\": \"fe6f810f-2459-4ad7-92ac-1e925ce892d4\",\n \"outputs\": [],\n \"source\": [\n \"HowlerHitId = \\\"{{hit.howler.id}}\\\"\\n\",\n \"HowlerAnalyticId = \\\"{{analytic.analytic_id}}\\\"\"\n ]\n },\n {\n \"cell_type\": \"code\",\n \"id\": \"586470ef-c8e6-45b1-bd17-17ccd083eef1\",\n \"outputs\": [],\n \"source\": [\n \"from howler_client import get_client\\n\\n\",\n \"howler = get_client(\\\"$CURRENT_URL\\\")\\n\",\n \"hit = howler.hit(howlerHitId)\"\n ]\n }\n ],\n \"nbformat\": 4,\n \"nbformat_minor\": 5\n}\n```\n\n```notebook tab=\"Trait\u00e9\"\n{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"id\": \"e17cbaa8-9849-462f-9bd2-bf30943f76b3\",\n \"source\": [\n \"### Exemple de carnet\"\n ]\n },\n {\n \"cell_type\": \"code\",\n \"id\": \"fe6f810f-2459-4ad7-92ac-1e925ce892d4\",\n \"outputs\": [],\n \"source\": [\n \"HowlerHitId = \\\"7dxHCat0Y2Sj48qyU7ZkVV\\\"\\n\",\n \"HowlerAnalyticId = \\\"2SXKl6Cq4rOxWLps2SFHyB\\\"\"\n ]\n },\n {\n \"cell_type\": \"code\",\n \"id\": \"586470ef-c8e6-45b1-bd17-17ccd083eef1\",\n \"outputs\": [],\n \"source\": [\n \"from howler_client import get_client\\n\\n\",\n \"howler = get_client(\\\"$CURRENT_URL\\\")\\n\",\n \"hit = howler.hit(howlerHitId)\"\n ]\n }\n ],\n \"nbformat\": 4,\n \"nbformat_minor\": 5\n}\n```\n\nPr\u00e9sentement, Howler n'essaiera de remplacer que les objets de hit et d'analytic.\n\n# Conditions requises pour que l'int\u00e9gration de carnets fonctionne\n\n- Une configuration NBGallery fonctionnelle est n\u00e9cessaire.\n - Si l'utilisateur peut envoyer un carnet depuis NBGallery vers son environnement Jupyter, il fonctionnera aussi en utilisant le bouton open in jupyhub sur Howler.\n- Comme pour NBGallery, l'utilisateur doit s'assurer que son environnement Jupyter est en cours d'ex\u00e9cution, sinon Howler ne parviendra pas \u00e0 envoyer le carnet.\n\nHowler ajoutera l'identifiant du Hit/Alert lorsqu'il enverra un carnet \u00e0 Jupyter, ce qui facilitera son suivi pour l'analyse. Il est possible d'ouvrir un carnet \u00e0 partir d'une page analytique. Dans ce cas, aucun identifiant de r\u00e9sultat ne sera ajout\u00e9 au nom de fichier du carnet et Howler ne sera pas en mesure de remplacer les informations de hit dans le carnet mod\u00e8le puisqu'aucun hit n'a \u00e9t\u00e9 fourni.\n\n# Ajout d'un carnet \u00e0 une analyse\n\nPour ajouter un carnet \u00e0 une analyse, il suffit de fournir le lien NBGallery du carnet. Le lien ressemblera \u00e0 l'exemple ci-dessous. Le carnet ne doit pas \u00eatre priv\u00e9, sinon seul l'utilisateur qui l'a ajout\u00e9 pourra l'utiliser sur Howler.\n\n```\n$NBGALLERY_URL/notebooks/5-example\n```\n\n```alert\nIl est conseill\u00e9 d'effacer toutes les sorties d'un carnet avant de l'ajouter sur NBGallery afin d'\u00e9viter la fuite de donn\u00e9es sensibles.\n```\n"
@@ -0,0 +1 @@
1
+ export default "# R\u00e9tention dans Howler\n\nAfin de se conformer au r\u00e8glement, Howler est configur\u00e9 pour purger les alertes p\u00e9rim\u00e9es apr\u00e8s une p\u00e9riode de temps sp\u00e9cifique. Dans cette instance, cette dur\u00e9e est `duration`.\n\nHowler calcule s'il est temps de supprimer une alerte en fonction de la date `event.created` - une fois que celle-ci d\u00e9passe la date limite configur\u00e9e, un travail automatis\u00e9 nocturne supprimera l'alerte.\n\nAfin de communiquer cela \u00e0 l'utilisateur, voir l'exemple d'alerte ci-dessous :\n\n`alert`\n\nEn haut \u00e0 droite, le survol de l'horodatage indique le temps dont dispose l'utilisateur avant que l'alerte ne soit supprim\u00e9e. Afin de se conformer au r\u00e8glement, assurez-vous que `event.created` correspond \u00e0 la date \u00e0 laquelle les donn\u00e9es sous-jacentes ont \u00e9t\u00e9 collect\u00e9es, ce qui permet \u00e0 howler de s'assurer que les donn\u00e9es sont purg\u00e9es \u00e0 temps.\n\n```alert\nCela va bient\u00f4t changer - il y aura un champ d\u00e9di\u00e9 \u00e0 d\u00e9finir qui remplacera cette approche.\n```\n"
@@ -0,0 +1 @@
1
+ export default "# Sch\u00e9ma du hit\n\nUn hit howler peut contenir un grand nombre de champs uniques, chacun avec une d\u00e9finition particuli\u00e8re, afin de rendre les hits mutuellement intelligibles d'une analyse \u00e0 l'autre. Vous trouverez ci-dessous un tableau contenant tous les champs de r\u00e9sultats donn\u00e9s, ainsi que leur type et une br\u00e8ve description de leur utilisation. Alors que la grande majorit\u00e9 des champs sont bas\u00e9s sur le sch\u00e9ma commun Elastic (voir [ici](https://www.elastic.co/guide/en/ecs/8.5/index.html) pour la documentation), il existe \u00e9galement des champs personnalis\u00e9s pour Howler, et aussi des champs suppl\u00e9mentaires configur\u00e9s par divers plugins Howler.\n\n## Champs Howler - Bonnes pratiques\n\nAfin d'assurer une certaine coh\u00e9rence entre les diff\u00e9rents analytiques, il existe un certain nombre de champs dont le style est recommand\u00e9 (mais pas obligatoire). Il s'agit notamment des champs suivants:\n\n- `howler.analytic` : Indique l'analyse globale qui a g\u00e9n\u00e9r\u00e9 le r\u00e9sultat. Par exemple, si le nom de votre analyse est Bad Guy Finder, vous pouvez d\u00e9finir ce champ \u00e0 Bad Guy Finder. Exemples d'utilisation :\n - Bad Guy Finder (correct)\n - BadGuyFinder (acceptable, mais les espaces sont pr\u00e9f\u00e9rables)\n - bad.guy.finder (incorrect, ne pas utiliser de points)\n - bad_guy_finder (incorrect, n'utilisez pas de caract\u00e8res de soulignement)\n - en g\u00e9n\u00e9ral, vous pouvez utiliser [cette regex](https://regexr.com/7ikco) pour valider le nom analytique que vous proposez\n\n- `howler.detection` : Indique l'algorithme sp\u00e9cifique ou la partie de l'analyse qui a g\u00e9n\u00e9r\u00e9 le hit. Par exemple, si votre analyse a trois fa\u00e7ons de d\u00e9tecter les hits qui devraient \u00eatre examin\u00e9s (Voyage impossible, Informations de connexion incorrectes, D\u00e9tection d'attaque XSS), alors la fa\u00e7on dont le hit que vous cr\u00e9ez a \u00e9t\u00e9 d\u00e9tect\u00e9 devrait \u00eatre d\u00e9finie. Exemples d'utilisation :\n - Impossible Travel (correct)\n - ImpossibleTravel (acceptable, mais les espaces sont pr\u00e9f\u00e9rables)\n - impossible.travel (incorrect, ne pas utiliser de points)\n - impossible_travel (incorrect, ne pas utiliser de caract\u00e8res de soulignement)\n"
@@ -0,0 +1 @@
1
+ export default "# Mod\u00e8les de Howler\n\nHowler est, fondamentalement, une application qui permet aux analystes de trier les hits et les alertes. Afin de s'assurer que les analystes puissent le faire aussi efficacement que possible, nous voulons avoir la possibilit\u00e9 de pr\u00e9senter les donn\u00e9es pertinentes pour une alerte donn\u00e9e aux analystes d'une mani\u00e8re facile et compr\u00e9hensible.\n\n\u00c0 cette fin, Howler permet aux analystes et aux ing\u00e9nieurs de d\u00e9tection de cr\u00e9er des **mod\u00e8les**, qui permettent \u00e0 diverses analyses et \u00e0 leurs d\u00e9tections de pr\u00e9senter des champs et des donn\u00e9es pertinents pour le triage des alertes g\u00e9n\u00e9r\u00e9es par cette analyse/d\u00e9tection. Par exemple, consid\u00e9rons deux alertes diff\u00e9rentes, g\u00e9n\u00e9r\u00e9es par deux d\u00e9tections diff\u00e9rentes :\n\n```json\n$ALERT_1\n```\n\n```json\n$ALERT_2\n```\n\nNotez que si les deux cartes partagent des champs similaires, elles diff\u00e8rent \u00e9galement. Nous voulons que chacune de ces cartes d'alerte pr\u00e9sente des donn\u00e9es diff\u00e9rentes - pour cela, nous pouvons utiliser des mod\u00e8les. Cela nous permet d'afficher les deux occurrences dans la m\u00eame liste, mais avec des champs diff\u00e9rents :\n\n===SPLIT===\n\nComme nous pouvons le voir, en sp\u00e9cifiant un mod\u00e8le pour chacune des d\u00e9tections, des donn\u00e9es diff\u00e9rentes seront pr\u00e9sent\u00e9es \u00e0 l'analyste.Pour ce faire, vous pouvez utiliser le cr\u00e9ateur de mod\u00e8les [ici]($CURRENT_URL/templates/view?type=personal).\n\n```alert\nNotez que vous devez avoir ing\u00e9r\u00e9 des hits pour la paire analyse/d\u00e9tection donn\u00e9e pour qu'elle apparaisse en tant qu'option dans l'interface utilisateur de cr\u00e9ation de mod\u00e8le !\n```\n"
@@ -0,0 +1 @@
1
+ export default "# Vues\n\nLes vues sont une fonctionnalit\u00e9 de Howler qui permet aux utilisateurs de cr\u00e9er des requ\u00eates personnalis\u00e9es par d\u00e9faut \u00e0 travers lesquelles ils peuvent organiser et trier les hits. Dans ce document, nous d\u00e9crirons comment cr\u00e9er et interagir avec des vues.\n\n## Utilisation d'une vue\n\nVous pouvez utiliser les vues en acc\u00e9dant au gestionnaire de vues sous [Manage > Views](/views). En cliquant sur une vue, vous l'ouvrirez dans la page de recherche. Vous pouvez \u00e9galement utiliser l'ic\u00f4ne `recherche` pour ouvrir la vue dans la page de recherche. Vous pouvez \u00e9galement modifier les vues qui vous appartiennent et les marquer comme favorites. Cela les affichera dans le menu d\u00e9roulant `t(route.views.saved)` dans la barre lat\u00e9rale. En haut \u00e0 droite, vous pouvez \u00e9galement choisir votre `t(route.views.manager.default)`, qui sera s\u00e9lectionn\u00e9 par d\u00e9faut lors de l'ouverture de la page d'alertes.\n\n## Cr\u00e9er des vues\n\nPour cr\u00e9er une vue, vous pouvez utiliser la page de cr\u00e9ation de vue, situ\u00e9e [ici](/views/create). Cette page vous permet de modifier votre vue, de sp\u00e9cifier un `t(hit.search.sort.fields)` et un `t(hit.search.span)`, et de sauvegarder la vue avec un nom particulier. Vous pouvez marquer une vue comme globale ou personnelle, en fonction des personnes que vous souhaitez voir et utiliser.\n"
@@ -0,0 +1,6 @@
1
+ import type { Hit } from '@cccsaurora/howler-ui/models/entities/generated/Hit';
2
+ import type { FC } from 'react';
3
+ declare const BundleParentMenu: FC<{
4
+ bundle: Hit;
5
+ }>;
6
+ export default BundleParentMenu;
@@ -0,0 +1,32 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { AccountTree } from '@mui/icons-material';
3
+ import { IconButton, Paper, Popover, Skeleton, Stack, Tooltip } from '@mui/material';
4
+ import api from '@cccsaurora/howler-ui/api';
5
+ import HowlerCard from '@cccsaurora/howler-ui/components/elements/display/HowlerCard';
6
+ import HitBanner from '@cccsaurora/howler-ui/components/elements/hit/HitBanner';
7
+ import { HitLayout } from '@cccsaurora/howler-ui/components/elements/hit/HitLayout';
8
+ import { useCallback, useEffect, useState } from 'react';
9
+ import { useTranslation } from 'react-i18next';
10
+ import { useNavigate } from 'react-router-dom';
11
+ const BundleParentMenu = ({ bundle }) => {
12
+ const { t } = useTranslation();
13
+ const navigate = useNavigate();
14
+ const [parentAnchor, setParentAnchor] = useState(null);
15
+ const [parentHits, setParentHits] = useState([]);
16
+ const onSelect = useCallback((bundleId) => {
17
+ navigate(`/bundles/${bundleId}?span=date.range.all&query=howler.id%3A*`);
18
+ setParentAnchor(null);
19
+ }, [navigate]);
20
+ useEffect(() => {
21
+ if (!parentAnchor) {
22
+ return;
23
+ }
24
+ api.search.hit
25
+ .post({ query: `howler.id:(${bundle.howler.bundles.join(' OR ')})` })
26
+ .then(response => setParentHits(response.items));
27
+ }, [bundle.howler.bundles, parentAnchor]);
28
+ return (_jsxs(_Fragment, { children: [_jsx(Tooltip, { title: t('hit.bundle.parents.show'), children: _jsx(IconButton, { size: "small", onClick: event => setParentAnchor(event.currentTarget), children: _jsx(AccountTree, { fontSize: "small" }) }) }), _jsx(Popover, { open: !!parentAnchor, anchorEl: parentAnchor, anchorOrigin: { vertical: 'top', horizontal: 'left' }, transformOrigin: { horizontal: 'right', vertical: 'top' }, onClose: () => setParentAnchor(null), children: _jsx(Paper, { sx: { p: 1, minWidth: '750px' }, children: _jsx(Stack, { spacing: 1, children: parentHits.length < 1
29
+ ? bundle.howler.bundles.map(id => _jsx(Skeleton, { variant: "rounded", height: "100px" }, id))
30
+ : parentHits.map(parent => (_jsx(HowlerCard, { sx: { p: 1, cursor: 'pointer' }, onClick: () => onSelect(parent.howler.id), children: _jsx(HitBanner, { hit: parent, layout: HitLayout.DENSE }) }, parent.howler.id))) }) }) })] }));
31
+ };
32
+ export default BundleParentMenu;
@@ -0,0 +1,2 @@
1
+ import type { FC, PropsWithChildren } from 'react';
2
+ export declare const BundleScroller: FC<PropsWithChildren>;
@@ -0,0 +1,6 @@
1
+ import { Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime";
2
+ import { useScrollRestoration } from '@cccsaurora/howler-ui/components/hooks/useScrollRestoration';
3
+ export const BundleScroller = ({ children }) => {
4
+ useScrollRestoration('hitscrollbar');
5
+ return _jsx(_Fragment, { children: children });
6
+ };
@@ -0,0 +1,2 @@
1
+ declare const _default: import("react").NamedExoticComponent<{}>;
2
+ export default _default;
@@ -0,0 +1,37 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { ArrowDownward, ArrowUpward, Cancel } from '@mui/icons-material';
3
+ import { Autocomplete, Chip, Grid, MenuItem, Select, Stack, TextField } from '@mui/material';
4
+ import { FieldContext } from '@cccsaurora/howler-ui/components/app/providers/FieldProvider';
5
+ import { ParameterContext } from '@cccsaurora/howler-ui/components/app/providers/ParameterProvider';
6
+ import { uniqBy } from 'lodash-es';
7
+ import { memo, useContext, useEffect, useMemo, useState } from 'react';
8
+ import { useTranslation } from 'react-i18next';
9
+ import { useContextSelector } from 'use-context-selector';
10
+ const CustomSort = () => {
11
+ const { t } = useTranslation();
12
+ const [field, setField] = useState('');
13
+ const [sort, setSort] = useState('');
14
+ const { hitFields, getHitFields } = useContext(FieldContext);
15
+ const sortEntries = useContextSelector(ParameterContext, ctx => ctx.sort?.split(','));
16
+ const setSavedSort = useContextSelector(ParameterContext, ctx => ctx.setSort);
17
+ const sortFields = useMemo(() => sortEntries.map(entry => entry.split(' ').slice(0, 2)), [sortEntries]);
18
+ useEffect(() => {
19
+ getHitFields();
20
+ }, [getHitFields]);
21
+ useEffect(() => {
22
+ if (!sort) {
23
+ setSort('desc');
24
+ }
25
+ }, [sort]);
26
+ useEffect(() => {
27
+ if (!field) {
28
+ return;
29
+ }
30
+ setSavedSort(uniqBy([...sortEntries, `${field} ${sort}`], entry => entry.replace(/ .+/, '')).join(','));
31
+ // eslint-disable-next-line react-hooks/exhaustive-deps
32
+ }, [field]);
33
+ return (_jsxs(Stack, { spacing: 1, maxWidth: "450px", children: [_jsxs(Stack, { direction: "row", spacing: 1, children: [_jsx(Autocomplete, { fullWidth: true, sx: { minWidth: '225px' }, size: "small", value: field, options: hitFields.map(_field => _field.key), getOptionDisabled: option => sortEntries.map(entry => entry.replace(/ .+/, '')).includes(option), renderInput: _params => _jsx(TextField, { ..._params, label: t('hit.search.sort.fields') }), onChange: (_, value) => setField(value), disableClearable: true }), _jsxs(Select, { size: "small", sx: { minWidth: '150px' }, value: sort, onChange: e => setSort(e.target.value), children: [_jsx(MenuItem, { value: "asc", children: t('asc') }), _jsx(MenuItem, { value: "desc", children: t('desc') })] })] }), _jsx(Grid, { container: true, spacing: 1, sx: theme => ({ marginLeft: `${theme.spacing(-1)} !important` }), children: sortFields.map(([key, direction]) => (_jsx(Grid, { item: true, children: _jsx(Chip, { variant: "outlined", label: key, icon: direction === 'asc' ? _jsx(ArrowUpward, {}) : _jsx(ArrowDownward, {}), deleteIcon: _jsx(Cancel, {}), onClick: () => setSavedSort(sortEntries
34
+ .map(entry => entry?.replace(`${key} ${direction}`, `${key} ${direction === 'asc' ? 'desc' : 'asc'}`))
35
+ .join(',')), onDelete: () => setSavedSort(sortEntries.filter(entry => entry && entry.split(' ')[0] != key).join(',')) }) }, key))) })] }));
36
+ };
37
+ export default memo(CustomSort);
@@ -0,0 +1,3 @@
1
+ import type { FC } from 'react';
2
+ declare const HitBrowserProvider: FC;
3
+ export default HitBrowserProvider;
@@ -0,0 +1,174 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { ChevronLeft, Close, ManageSearch } from '@mui/icons-material';
3
+ import { Box, Card, Checkbox, Collapse, Drawer, Fab, IconButton, Stack, Tooltip, Typography, useMediaQuery, useTheme } from '@mui/material';
4
+ import { HitContext } from '@cccsaurora/howler-ui/components/app/providers/HitProvider';
5
+ import HitSearchProvider, { HitSearchContext } from '@cccsaurora/howler-ui/components/app/providers/HitSearchProvider';
6
+ import ParameterProvider, { ParameterContext } from '@cccsaurora/howler-ui/components/app/providers/ParameterProvider';
7
+ import { ViewContext } from '@cccsaurora/howler-ui/components/app/providers/ViewProvider';
8
+ import FlexOne from '@cccsaurora/howler-ui/components/elements/addons/layout/FlexOne';
9
+ import FlexPort from '@cccsaurora/howler-ui/components/elements/addons/layout/FlexPort';
10
+ import HitSummary from '@cccsaurora/howler-ui/components/elements/hit/HitSummary';
11
+ import { useMyLocalStorageItem } from '@cccsaurora/howler-ui/components/hooks/useMyLocalStorage';
12
+ import ErrorBoundary from '@cccsaurora/howler-ui/components/routes/ErrorBoundary';
13
+ import dayjs from 'dayjs';
14
+ import { has, isNull } from 'lodash-es';
15
+ import { memo, useCallback, useEffect, useMemo, useState } from 'react';
16
+ import { Trans, useTranslation } from 'react-i18next';
17
+ import { useLocation, useParams, useSearchParams } from 'react-router-dom';
18
+ import { useContextSelector } from 'use-context-selector';
19
+ import { StorageKey } from '@cccsaurora/howler-ui/utils/constants';
20
+ import InformationPane from './InformationPane';
21
+ import SearchPane from './SearchPane';
22
+ import HitGrid from './grid/HitGrid';
23
+ // https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/display-name.md
24
+ const Wrapper = memo(({ show, showDrawer, children, onClose }) => {
25
+ return (_jsx(ErrorBoundary, { children: showDrawer ? (_jsx(Drawer, { onClose: onClose, open: show, anchor: "right", PaperProps: { sx: { backgroundImage: 'none', overflow: 'hidden', width: '75vw' } }, children: children })) : (_jsx(FlexPort, { disableOverflow: true, children: children })) }));
26
+ });
27
+ const HitBrowser = () => {
28
+ const { t } = useTranslation();
29
+ const theme = useTheme();
30
+ const views = useContextSelector(ViewContext, ctx => ctx.views);
31
+ const fetchViews = useContextSelector(ViewContext, ctx => ctx.fetchViews);
32
+ const selected = useContextSelector(ParameterContext, ctx => ctx.selected);
33
+ const setSelected = useContextSelector(ParameterContext, ctx => ctx.setSelected);
34
+ const query = useContextSelector(ParameterContext, ctx => ctx.query);
35
+ const setQuery = useContextSelector(ParameterContext, ctx => ctx.setQuery);
36
+ const setOffset = useContextSelector(ParameterContext, ctx => ctx.setOffset);
37
+ const selectedHits = useContextSelector(HitContext, ctx => ctx.selectedHits);
38
+ const addHitToSelection = useContextSelector(HitContext, ctx => ctx.addHitToSelection);
39
+ const removeHitFromSelection = useContextSelector(HitContext, ctx => ctx.removeHitFromSelection);
40
+ const clearSelectedHits = useContextSelector(HitContext, ctx => ctx.clearSelectedHits);
41
+ const searchPaneWidth = useMyLocalStorageItem(StorageKey.SEARCH_PANE_WIDTH, null)[0];
42
+ const forceDrawer = useMyLocalStorageItem(StorageKey.FORCE_DRAWER, false)[0];
43
+ const displayType = useContextSelector(HitSearchContext, ctx => ctx.displayType);
44
+ const viewId = useContextSelector(HitSearchContext, ctx => ctx.viewId);
45
+ const response = useContextSelector(HitSearchContext, ctx => ctx.response);
46
+ const queryHistory = useContextSelector(HitSearchContext, ctx => ctx?.queryHistory ?? {});
47
+ const setQueryHistory = useContextSelector(HitSearchContext, ctx => ctx?.setQueryHistory);
48
+ const setQueryList = useMyLocalStorageItem(StorageKey.QUERY_HISTORY, '')[1];
49
+ const location = useLocation();
50
+ const routeParams = useParams();
51
+ const [searchParams] = useSearchParams();
52
+ const [show, setShow] = useState(!!selected);
53
+ useEffect(() => setShow(!!selected), [selected]);
54
+ const showDrawer = useMediaQuery(theme.breakpoints.down(1600)) || forceDrawer || displayType === 'grid';
55
+ // State that makes up the request
56
+ const summaryQuery = useMemo(() => {
57
+ const bundle = location.pathname.startsWith('/bundles') && routeParams.id;
58
+ let _fullQuery = query;
59
+ if (bundle) {
60
+ _fullQuery = `(howler.bundles:${bundle}) AND (${_fullQuery})`;
61
+ }
62
+ else if (viewId) {
63
+ _fullQuery = `(${views[viewId]?.query || 'howler.id:*'}) AND (${_fullQuery})`;
64
+ }
65
+ return _fullQuery;
66
+ }, [location.pathname, query, routeParams.id, views, viewId]);
67
+ const showSelectBar = useMemo(() => {
68
+ if (selectedHits.length > 1) {
69
+ return true;
70
+ }
71
+ if (selectedHits.length === 1 && selected && selectedHits[0]?.howler.id !== selected) {
72
+ return true;
73
+ }
74
+ return false;
75
+ }, [selected, selectedHits]);
76
+ useEffect(() => {
77
+ const newQuery = searchParams.get('query');
78
+ if (newQuery) {
79
+ setQueryHistory(_queryHistory => ({
80
+ ..._queryHistory,
81
+ [newQuery]: new Date().toISOString()
82
+ }));
83
+ }
84
+ }, [searchParams, setQueryHistory]);
85
+ useEffect(() => {
86
+ setQueryList(JSON.stringify(queryHistory));
87
+ }, [queryHistory, setQueryList]);
88
+ useEffect(() => {
89
+ // On load check to filter out any queries older than one month
90
+ setQueryHistory(_queryHistory => {
91
+ const filterQueryTime = dayjs().subtract(1, 'month').toISOString();
92
+ return Object.fromEntries(Object.entries(_queryHistory).filter(([_, value]) => value > filterQueryTime));
93
+ });
94
+ }, [setQueryHistory]);
95
+ useEffect(() => {
96
+ if (!location.pathname.startsWith('/views') || has(views, viewId)) {
97
+ return;
98
+ }
99
+ fetchViews([viewId]);
100
+ // eslint-disable-next-line react-hooks/exhaustive-deps
101
+ }, [location.pathname, viewId]);
102
+ const onClose = useCallback(() => {
103
+ setSelected(null);
104
+ }, [setSelected]);
105
+ useEffect(() => {
106
+ if (selected &&
107
+ response &&
108
+ !response.items.some(_hit => _hit.howler.id === selected) &&
109
+ (!location.pathname.startsWith('/bundles') || routeParams.id !== selected)) {
110
+ setSelected(null);
111
+ if (selectedHits.length < 2) {
112
+ removeHitFromSelection(selected);
113
+ }
114
+ return;
115
+ }
116
+ if (selected && !selectedHits.some(_hit => _hit?.howler.id === selected)) {
117
+ addHitToSelection(selected);
118
+ }
119
+ // eslint-disable-next-line react-hooks/exhaustive-deps
120
+ }, [addHitToSelection, location.pathname, removeHitFromSelection, response, routeParams.id, selected, setSelected]);
121
+ return (_jsxs(Stack, { direction: "row", flex: 1, sx: { overflow: 'hidden' }, children: [_jsxs(Box, { position: "relative", flex: 1.15, height: "100%", display: "flex", sx: [{ overflow: 'auto' }, displayType === 'list' && !isNull(searchPaneWidth) && { maxWidth: searchPaneWidth }], children: [_jsx(ErrorBoundary, { children: displayType === 'list' ? _jsx(SearchPane, {}) : _jsx(HitGrid, {}) }), _jsx(Collapse, { in: showSelectBar, unmountOnExit: true, sx: {
122
+ position: 'absolute',
123
+ bottom: 0,
124
+ left: 0,
125
+ right: 0,
126
+ backgroundColor: theme.palette.background.paper,
127
+ py: 1,
128
+ px: 2
129
+ }, children: _jsxs(Stack, { direction: "row", alignItems: "center", spacing: 1, children: [_jsx(Tooltip, { title: t('hit.search.select.all'), children: _jsx(Checkbox, { size: "small", checked: !!response?.items.every(_hit1 => selectedHits.some(_hit2 => _hit1.howler.id === _hit2.howler.id)), onChange: (__, checked) => checked ? response.items.forEach(_hit => addHitToSelection(_hit.howler.id)) : clearSelectedHits() }) }), _jsx(Typography, { children: _jsx(Trans, { i18nKey: "hit.search.selected", values: { size: selectedHits.length } }) }), _jsx(FlexOne, {}), _jsx(Tooltip, { title: t('hit.search.select.clear'), children: _jsx(IconButton, { size: "small", onClick: () => {
130
+ setSelected(null);
131
+ clearSelectedHits();
132
+ }, children: _jsx(Close, {}) }) }), _jsx(Tooltip, { title: t('hit.search.select.view'), children: _jsx(IconButton, { size: "small", onClick: () => {
133
+ setOffset(0);
134
+ setQuery(`howler.id:(${selectedHits.map(hit => hit.howler.id).join(' OR ')})`);
135
+ }, children: _jsx(ManageSearch, {}) }) })] }) })] }), _jsxs(Wrapper, { show: show, showDrawer: showDrawer, onClose: () => setShow(false), children: [_jsx(HitSummary, { query: summaryQuery, response: response }), _jsxs(Card, { variant: "outlined", sx: [
136
+ {
137
+ zIndex: 100,
138
+ overflow: 'visible',
139
+ position: 'absolute',
140
+ top: 0,
141
+ bottom: 0,
142
+ left: '100%',
143
+ right: 0,
144
+ borderTop: 0,
145
+ borderBottom: 0,
146
+ transition: theme.transitions.create('left')
147
+ },
148
+ selected && {
149
+ left: theme.spacing(5)
150
+ },
151
+ location.pathname.startsWith('/bundles') &&
152
+ routeParams.id && {
153
+ left: 0
154
+ }
155
+ ], children: [_jsx(InformationPane, { onClose: onClose }), selected && !(location.pathname.startsWith('/bundles') && routeParams.id) && (_jsx(Box, { onClick: onClose, sx: {
156
+ cursor: 'pointer',
157
+ position: 'absolute',
158
+ right: '100%',
159
+ width: theme.spacing(5),
160
+ top: 0,
161
+ bottom: 0,
162
+ background: `linear-gradient(to right, transparent, ${theme.palette.background.paper})`
163
+ } }))] })] }), showDrawer && (_jsx(Fab, { onClick: () => setShow(_show => !_show), color: "primary", sx: {
164
+ position: 'fixed',
165
+ right: show ? `calc(100% - ${theme.spacing(8)})` : theme.spacing(2),
166
+ bottom: showSelectBar ? theme.spacing(6) : theme.spacing(1),
167
+ zIndex: 1201,
168
+ transition: theme.transitions.create(['right', 'bottom'])
169
+ }, children: _jsx(ChevronLeft, { sx: { transition: 'rotate 250ms', rotate: show ? '180deg' : '0deg' } }) }))] }));
170
+ };
171
+ const HitBrowserProvider = () => {
172
+ return (_jsx(ParameterProvider, { children: _jsx(HitSearchProvider, { children: _jsx(HitBrowser, {}) }) }));
173
+ };
174
+ export default HitBrowserProvider;
@@ -0,0 +1,7 @@
1
+ import type { FC, PropsWithChildren } from 'react';
2
+ interface HitContextMenuProps {
3
+ getSelectedId: (event: React.MouseEvent<HTMLDivElement, MouseEvent>) => string;
4
+ Component?: React.ElementType;
5
+ }
6
+ declare const HitContextMenu: FC<PropsWithChildren<HitContextMenuProps>>;
7
+ export default HitContextMenu;