diff --git a/.github/codeql/codeql-config.yml b/.github/codeql/codeql-config.yml index b60f84ceeb436..ad9bc5e551b5d 100644 --- a/.github/codeql/codeql-config.yml +++ b/.github/codeql/codeql-config.yml @@ -20,6 +20,7 @@ paths-ignore: - '**/kbn-scout-*' - '**/mocks.*' - '**/mocks/**' + - '**/stub/**' - '**/scripts/**' - '**/storybook/**' - '**/test_helpers/**' diff --git a/api_docs/actions.mdx b/api_docs/actions.mdx index 09513f3f03af5..6ed21b6dafd1b 100644 --- a/api_docs/actions.mdx +++ b/api_docs/actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/actions title: "actions" image: https://source.unsplash.com/400x175/?github description: API docs for the actions plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'actions'] --- import actionsObj from './actions.devdocs.json'; diff --git a/api_docs/advanced_settings.mdx b/api_docs/advanced_settings.mdx index 31c17c73fcf59..5ffaf3af820f0 100644 --- a/api_docs/advanced_settings.mdx +++ b/api_docs/advanced_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/advancedSettings title: "advancedSettings" image: https://source.unsplash.com/400x175/?github description: API docs for the advancedSettings plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'advancedSettings'] --- import advancedSettingsObj from './advanced_settings.devdocs.json'; diff --git a/api_docs/ai_assistant_management_selection.mdx b/api_docs/ai_assistant_management_selection.mdx index a75f4f3ce79b3..0b37c34b26ce6 100644 --- a/api_docs/ai_assistant_management_selection.mdx +++ b/api_docs/ai_assistant_management_selection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/aiAssistantManagementSelection title: "aiAssistantManagementSelection" image: https://source.unsplash.com/400x175/?github description: API docs for the aiAssistantManagementSelection plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'aiAssistantManagementSelection'] --- import aiAssistantManagementSelectionObj from './ai_assistant_management_selection.devdocs.json'; diff --git a/api_docs/aiops.mdx b/api_docs/aiops.mdx index fd2960c448455..e38bb34477daf 100644 --- a/api_docs/aiops.mdx +++ b/api_docs/aiops.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/aiops title: "aiops" image: https://source.unsplash.com/400x175/?github description: API docs for the aiops plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'aiops'] --- import aiopsObj from './aiops.devdocs.json'; diff --git a/api_docs/alerting.mdx b/api_docs/alerting.mdx index f6d3769eaec4f..b9a279437d5da 100644 --- a/api_docs/alerting.mdx +++ b/api_docs/alerting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/alerting title: "alerting" image: https://source.unsplash.com/400x175/?github description: API docs for the alerting plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'alerting'] --- import alertingObj from './alerting.devdocs.json'; diff --git a/api_docs/apm.mdx b/api_docs/apm.mdx index 1f1eecb589597..62ecfbb637c51 100644 --- a/api_docs/apm.mdx +++ b/api_docs/apm.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/apm title: "apm" image: https://source.unsplash.com/400x175/?github description: API docs for the apm plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'apm'] --- import apmObj from './apm.devdocs.json'; diff --git a/api_docs/apm_data_access.mdx b/api_docs/apm_data_access.mdx index f104d50518fee..09685cb5ab538 100644 --- a/api_docs/apm_data_access.mdx +++ b/api_docs/apm_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/apmDataAccess title: "apmDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the apmDataAccess plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'apmDataAccess'] --- import apmDataAccessObj from './apm_data_access.devdocs.json'; diff --git a/api_docs/automatic_import.mdx b/api_docs/automatic_import.mdx index 26bc75606fb4d..d7f44bfa1f2e6 100644 --- a/api_docs/automatic_import.mdx +++ b/api_docs/automatic_import.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/automaticImport title: "automaticImport" image: https://source.unsplash.com/400x175/?github description: API docs for the automaticImport plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'automaticImport'] --- import automaticImportObj from './automatic_import.devdocs.json'; diff --git a/api_docs/banners.mdx b/api_docs/banners.mdx index 98a9e0a5300ab..2cdb3e97eb537 100644 --- a/api_docs/banners.mdx +++ b/api_docs/banners.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/banners title: "banners" image: https://source.unsplash.com/400x175/?github description: API docs for the banners plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'banners'] --- import bannersObj from './banners.devdocs.json'; diff --git a/api_docs/canvas.mdx b/api_docs/canvas.mdx index fbaf24aa2c3f1..3906708d5868e 100644 --- a/api_docs/canvas.mdx +++ b/api_docs/canvas.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/canvas title: "canvas" image: https://source.unsplash.com/400x175/?github description: API docs for the canvas plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'canvas'] --- import canvasObj from './canvas.devdocs.json'; diff --git a/api_docs/cases.mdx b/api_docs/cases.mdx index bc817a09b74b9..2f6d39713691c 100644 --- a/api_docs/cases.mdx +++ b/api_docs/cases.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cases title: "cases" image: https://source.unsplash.com/400x175/?github description: API docs for the cases plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cases'] --- import casesObj from './cases.devdocs.json'; diff --git a/api_docs/charts.mdx b/api_docs/charts.mdx index 69d7fe7c49a98..7dce636cc09d0 100644 --- a/api_docs/charts.mdx +++ b/api_docs/charts.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/charts title: "charts" image: https://source.unsplash.com/400x175/?github description: API docs for the charts plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'charts'] --- import chartsObj from './charts.devdocs.json'; diff --git a/api_docs/cloud.mdx b/api_docs/cloud.mdx index b175d2dbfeade..ef7ddc0001e9e 100644 --- a/api_docs/cloud.mdx +++ b/api_docs/cloud.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloud title: "cloud" image: https://source.unsplash.com/400x175/?github description: API docs for the cloud plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloud'] --- import cloudObj from './cloud.devdocs.json'; diff --git a/api_docs/cloud_data_migration.mdx b/api_docs/cloud_data_migration.mdx index 6a239a46f0bb1..9479801978431 100644 --- a/api_docs/cloud_data_migration.mdx +++ b/api_docs/cloud_data_migration.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudDataMigration title: "cloudDataMigration" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudDataMigration plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudDataMigration'] --- import cloudDataMigrationObj from './cloud_data_migration.devdocs.json'; diff --git a/api_docs/cloud_defend.mdx b/api_docs/cloud_defend.mdx index 9bd2b50968555..d71b44633a457 100644 --- a/api_docs/cloud_defend.mdx +++ b/api_docs/cloud_defend.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudDefend title: "cloudDefend" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudDefend plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudDefend'] --- import cloudDefendObj from './cloud_defend.devdocs.json'; diff --git a/api_docs/cloud_security_posture.mdx b/api_docs/cloud_security_posture.mdx index afc75aa09380f..723ed583bbc2f 100644 --- a/api_docs/cloud_security_posture.mdx +++ b/api_docs/cloud_security_posture.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/cloudSecurityPosture title: "cloudSecurityPosture" image: https://source.unsplash.com/400x175/?github description: API docs for the cloudSecurityPosture plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'cloudSecurityPosture'] --- import cloudSecurityPostureObj from './cloud_security_posture.devdocs.json'; diff --git a/api_docs/console.mdx b/api_docs/console.mdx index e5874a622a4cf..7e18f16638f72 100644 --- a/api_docs/console.mdx +++ b/api_docs/console.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/console title: "console" image: https://source.unsplash.com/400x175/?github description: API docs for the console plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'console'] --- import consoleObj from './console.devdocs.json'; diff --git a/api_docs/content_management.mdx b/api_docs/content_management.mdx index fb815d47a2bec..5539400a5d521 100644 --- a/api_docs/content_management.mdx +++ b/api_docs/content_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/contentManagement title: "contentManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the contentManagement plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'contentManagement'] --- import contentManagementObj from './content_management.devdocs.json'; diff --git a/api_docs/controls.mdx b/api_docs/controls.mdx index c9a35b6ec576d..0320a25ab81fc 100644 --- a/api_docs/controls.mdx +++ b/api_docs/controls.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/controls title: "controls" image: https://source.unsplash.com/400x175/?github description: API docs for the controls plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'controls'] --- import controlsObj from './controls.devdocs.json'; diff --git a/api_docs/custom_integrations.mdx b/api_docs/custom_integrations.mdx index 5ba22cd9ed79a..dcae009ddf26c 100644 --- a/api_docs/custom_integrations.mdx +++ b/api_docs/custom_integrations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/customIntegrations title: "customIntegrations" image: https://source.unsplash.com/400x175/?github description: API docs for the customIntegrations plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'customIntegrations'] --- import customIntegrationsObj from './custom_integrations.devdocs.json'; diff --git a/api_docs/dashboard.mdx b/api_docs/dashboard.mdx index df5c21d634b5f..fd3ba18af8765 100644 --- a/api_docs/dashboard.mdx +++ b/api_docs/dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dashboard title: "dashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the dashboard plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dashboard'] --- import dashboardObj from './dashboard.devdocs.json'; diff --git a/api_docs/dashboard_enhanced.mdx b/api_docs/dashboard_enhanced.mdx index 93d286782c606..b40ad9ad7caff 100644 --- a/api_docs/dashboard_enhanced.mdx +++ b/api_docs/dashboard_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dashboardEnhanced title: "dashboardEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the dashboardEnhanced plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dashboardEnhanced'] --- import dashboardEnhancedObj from './dashboard_enhanced.devdocs.json'; diff --git a/api_docs/data.devdocs.json b/api_docs/data.devdocs.json index a2881ebbd8956..6699c4f604695 100644 --- a/api_docs/data.devdocs.json +++ b/api_docs/data.devdocs.json @@ -13595,6 +13595,40 @@ ], "returnComment": [] }, + { + "parentPluginId": "data", + "id": "def-server.DataViewsService.clearDataViewLazyCache", + "type": "Function", + "tags": [], + "label": "clearDataViewLazyCache", + "description": [ + "\nClear instance in data view lazy cache" + ], + "signature": [ + "(id: string) => void" + ], + "path": "src/platform/plugins/shared/data_views/common/data_views/data_views.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "data", + "id": "def-server.DataViewsService.clearDataViewLazyCache.$1", + "type": "string", + "tags": [], + "label": "id", + "description": [], + "signature": [ + "string" + ], + "path": "src/platform/plugins/shared/data_views/common/data_views/data_views.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, { "parentPluginId": "data", "id": "def-server.DataViewsService.getCache", @@ -20767,6 +20801,40 @@ ], "returnComment": [] }, + { + "parentPluginId": "data", + "id": "def-common.DataViewsService.clearDataViewLazyCache", + "type": "Function", + "tags": [], + "label": "clearDataViewLazyCache", + "description": [ + "\nClear instance in data view lazy cache" + ], + "signature": [ + "(id: string) => void" + ], + "path": "src/platform/plugins/shared/data_views/common/data_views/data_views.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "data", + "id": "def-common.DataViewsService.clearDataViewLazyCache.$1", + "type": "string", + "tags": [], + "label": "id", + "description": [], + "signature": [ + "string" + ], + "path": "src/platform/plugins/shared/data_views/common/data_views/data_views.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, { "parentPluginId": "data", "id": "def-common.DataViewsService.getCache", @@ -24714,7 +24782,7 @@ "section": "def-common.DataViewLazy", "text": "DataViewLazy" }, - "[]>; clearCache: () => void; clearInstanceCache: (id?: string | undefined) => void; getCache: () => Promise<", + "[]>; clearCache: () => void; clearInstanceCache: (id?: string | undefined) => void; clearDataViewLazyCache: (id: string) => void; getCache: () => Promise<", "SavedObject", "<", { diff --git a/api_docs/data.mdx b/api_docs/data.mdx index d425992fe0f9d..d97f6e1e72b10 100644 --- a/api_docs/data.mdx +++ b/api_docs/data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data title: "data" image: https://source.unsplash.com/400x175/?github description: API docs for the data plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data'] --- import dataObj from './data.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/k | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 3215 | 31 | 2600 | 26 | +| 3219 | 31 | 2602 | 26 | ## Client diff --git a/api_docs/data_quality.mdx b/api_docs/data_quality.mdx index b04d20d8f095f..9b688c955fe22 100644 --- a/api_docs/data_quality.mdx +++ b/api_docs/data_quality.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataQuality title: "dataQuality" image: https://source.unsplash.com/400x175/?github description: API docs for the dataQuality plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataQuality'] --- import dataQualityObj from './data_quality.devdocs.json'; diff --git a/api_docs/data_query.mdx b/api_docs/data_query.mdx index d83987a06f338..1536ef3d1c161 100644 --- a/api_docs/data_query.mdx +++ b/api_docs/data_query.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data-query title: "data.query" image: https://source.unsplash.com/400x175/?github description: API docs for the data.query plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data.query'] --- import dataQueryObj from './data_query.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/k | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 3215 | 31 | 2600 | 26 | +| 3219 | 31 | 2602 | 26 | ## Client diff --git a/api_docs/data_search.devdocs.json b/api_docs/data_search.devdocs.json index 435ed88030688..4ff85a985d069 100644 --- a/api_docs/data_search.devdocs.json +++ b/api_docs/data_search.devdocs.json @@ -29184,7 +29184,7 @@ "section": "def-common.DataViewLazy", "text": "DataViewLazy" }, - "[]>; clearCache: () => void; clearInstanceCache: (id?: string | undefined) => void; getCache: () => Promise<", + "[]>; clearCache: () => void; clearInstanceCache: (id?: string | undefined) => void; clearDataViewLazyCache: (id: string) => void; getCache: () => Promise<", "SavedObject", "<", { diff --git a/api_docs/data_search.mdx b/api_docs/data_search.mdx index fd14363546c4a..3567b72c04175 100644 --- a/api_docs/data_search.mdx +++ b/api_docs/data_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/data-search title: "data.search" image: https://source.unsplash.com/400x175/?github description: API docs for the data.search plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'data.search'] --- import dataSearchObj from './data_search.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/k | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 3215 | 31 | 2600 | 26 | +| 3219 | 31 | 2602 | 26 | ## Client diff --git a/api_docs/data_usage.mdx b/api_docs/data_usage.mdx index 9d29f300e638b..a3a5ba7a2a58c 100644 --- a/api_docs/data_usage.mdx +++ b/api_docs/data_usage.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataUsage title: "dataUsage" image: https://source.unsplash.com/400x175/?github description: API docs for the dataUsage plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataUsage'] --- import dataUsageObj from './data_usage.devdocs.json'; diff --git a/api_docs/data_view_editor.mdx b/api_docs/data_view_editor.mdx index 01a9b2d38e849..8d858f548b6f6 100644 --- a/api_docs/data_view_editor.mdx +++ b/api_docs/data_view_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewEditor title: "dataViewEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewEditor plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViewEditor'] --- import dataViewEditorObj from './data_view_editor.devdocs.json'; diff --git a/api_docs/data_view_field_editor.mdx b/api_docs/data_view_field_editor.mdx index 2ca62ab77aa95..3f0a3bb6fed0b 100644 --- a/api_docs/data_view_field_editor.mdx +++ b/api_docs/data_view_field_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewFieldEditor title: "dataViewFieldEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewFieldEditor plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViewFieldEditor'] --- import dataViewFieldEditorObj from './data_view_field_editor.devdocs.json'; diff --git a/api_docs/data_view_management.mdx b/api_docs/data_view_management.mdx index db26d86d44344..dfd7744216539 100644 --- a/api_docs/data_view_management.mdx +++ b/api_docs/data_view_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViewManagement title: "dataViewManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViewManagement plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViewManagement'] --- import dataViewManagementObj from './data_view_management.devdocs.json'; diff --git a/api_docs/data_views.devdocs.json b/api_docs/data_views.devdocs.json index 5bc3e454a783f..2c5fd30d9de5a 100644 --- a/api_docs/data_views.devdocs.json +++ b/api_docs/data_views.devdocs.json @@ -3655,6 +3655,40 @@ ], "returnComment": [] }, + { + "parentPluginId": "dataViews", + "id": "def-public.DataViewsService.clearDataViewLazyCache", + "type": "Function", + "tags": [], + "label": "clearDataViewLazyCache", + "description": [ + "\nClear instance in data view lazy cache" + ], + "signature": [ + "(id: string) => void" + ], + "path": "src/platform/plugins/shared/data_views/common/data_views/data_views.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "dataViews", + "id": "def-public.DataViewsService.clearDataViewLazyCache.$1", + "type": "string", + "tags": [], + "label": "id", + "description": [], + "signature": [ + "string" + ], + "path": "src/platform/plugins/shared/data_views/common/data_views/data_views.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, { "parentPluginId": "dataViews", "id": "def-public.DataViewsService.getCache", @@ -9546,6 +9580,40 @@ ], "returnComment": [] }, + { + "parentPluginId": "dataViews", + "id": "def-server.DataViewsService.clearDataViewLazyCache", + "type": "Function", + "tags": [], + "label": "clearDataViewLazyCache", + "description": [ + "\nClear instance in data view lazy cache" + ], + "signature": [ + "(id: string) => void" + ], + "path": "src/platform/plugins/shared/data_views/common/data_views/data_views.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "dataViews", + "id": "def-server.DataViewsService.clearDataViewLazyCache.$1", + "type": "string", + "tags": [], + "label": "id", + "description": [], + "signature": [ + "string" + ], + "path": "src/platform/plugins/shared/data_views/common/data_views/data_views.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, { "parentPluginId": "dataViews", "id": "def-server.DataViewsService.getCache", @@ -19303,6 +19371,40 @@ ], "returnComment": [] }, + { + "parentPluginId": "dataViews", + "id": "def-common.DataViewsService.clearDataViewLazyCache", + "type": "Function", + "tags": [], + "label": "clearDataViewLazyCache", + "description": [ + "\nClear instance in data view lazy cache" + ], + "signature": [ + "(id: string) => void" + ], + "path": "src/platform/plugins/shared/data_views/common/data_views/data_views.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "dataViews", + "id": "def-common.DataViewsService.clearDataViewLazyCache.$1", + "type": "string", + "tags": [], + "label": "id", + "description": [], + "signature": [ + "string" + ], + "path": "src/platform/plugins/shared/data_views/common/data_views/data_views.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, { "parentPluginId": "dataViews", "id": "def-common.DataViewsService.getCache", @@ -22078,6 +22180,40 @@ ], "returnComment": [] }, + { + "parentPluginId": "dataViews", + "id": "def-common.DataViewsServicePublicMethods.clearDataViewLazyCache", + "type": "Function", + "tags": [], + "label": "clearDataViewLazyCache", + "description": [ + "\nClear the cache of lazy data view instances." + ], + "signature": [ + "(id: string) => void" + ], + "path": "src/platform/plugins/shared/data_views/common/data_views/data_views.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "dataViews", + "id": "def-common.DataViewsServicePublicMethods.clearDataViewLazyCache.$1", + "type": "string", + "tags": [], + "label": "id", + "description": [], + "signature": [ + "string" + ], + "path": "src/platform/plugins/shared/data_views/common/data_views/data_views.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + }, { "parentPluginId": "dataViews", "id": "def-common.DataViewsServicePublicMethods.create", @@ -26270,7 +26406,7 @@ "section": "def-common.DataViewLazy", "text": "DataViewLazy" }, - "[]>; clearCache: () => void; clearInstanceCache: (id?: string | undefined) => void; getCache: () => Promise<", + "[]>; clearCache: () => void; clearInstanceCache: (id?: string | undefined) => void; clearDataViewLazyCache: (id: string) => void; getCache: () => Promise<", "SavedObject", "<", { diff --git a/api_docs/data_views.mdx b/api_docs/data_views.mdx index d7dbd98552dc8..71bbb42909848 100644 --- a/api_docs/data_views.mdx +++ b/api_docs/data_views.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataViews title: "dataViews" image: https://source.unsplash.com/400x175/?github description: API docs for the dataViews plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViews'] --- import dataViewsObj from './data_views.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/k | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 1233 | 0 | 447 | 4 | +| 1241 | 0 | 451 | 4 | ## Client diff --git a/api_docs/data_visualizer.mdx b/api_docs/data_visualizer.mdx index f1ca08cae0b2d..c41b31f118618 100644 --- a/api_docs/data_visualizer.mdx +++ b/api_docs/data_visualizer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/dataVisualizer title: "dataVisualizer" image: https://source.unsplash.com/400x175/?github description: API docs for the dataVisualizer plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataVisualizer'] --- import dataVisualizerObj from './data_visualizer.devdocs.json'; diff --git a/api_docs/dataset_quality.mdx b/api_docs/dataset_quality.mdx index 74e2694cf99a7..70f9b4cb8fc18 100644 --- a/api_docs/dataset_quality.mdx +++ b/api_docs/dataset_quality.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/datasetQuality title: "datasetQuality" image: https://source.unsplash.com/400x175/?github description: API docs for the datasetQuality plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'datasetQuality'] --- import datasetQualityObj from './dataset_quality.devdocs.json'; diff --git a/api_docs/deprecations_by_api.mdx b/api_docs/deprecations_by_api.mdx index 8df37a27ad76e..dbd1da3da27bd 100644 --- a/api_docs/deprecations_by_api.mdx +++ b/api_docs/deprecations_by_api.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsByApi slug: /kibana-dev-docs/api-meta/deprecated-api-list-by-api title: Deprecated API usage by API description: A list of deprecated APIs, which plugins are still referencing them, and when they need to be removed by. -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -158,9 +158,9 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | visTypePie | - | | | visTypePie | - | | | security | - | -| | indexLifecycleManagement, streamsApp | - | | | aiAssistantManagementSelection, observabilityAiAssistantManagement | - | | | @kbn/react-kibana-context-styled, kibanaReact | - | +| | indexLifecycleManagement | - | | | dashboard | - | | | discover, @kbn/reporting-public | - | | | @kbn/management-settings-field-definition, discover | - | diff --git a/api_docs/deprecations_by_plugin.mdx b/api_docs/deprecations_by_plugin.mdx index b076f0749e99a..51598fad9fb99 100644 --- a/api_docs/deprecations_by_plugin.mdx +++ b/api_docs/deprecations_by_plugin.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsByPlugin slug: /kibana-dev-docs/api-meta/deprecated-api-list-by-plugin title: Deprecated API usage by plugin description: A list of deprecated APIs, which plugins are still referencing them, and when they need to be removed by. -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -1287,7 +1287,6 @@ migrates to using the Kibana Privilege model: https://github.com/elastic/kibana/ | ---------------|-----------|-----------| | | [header_menu_portal.tsx](https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/streams_app/public/components/header_menu/header_menu_portal.tsx#:~:text=toMountPoint), [header_menu_portal.tsx](https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/streams_app/public/components/header_menu/header_menu_portal.tsx#:~:text=toMountPoint) | - | | | [to_reference_list.ts](https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/streams_app/public/components/stream_detail_dashboards_view/to_reference_list.ts#:~:text=SavedObjectReference), [to_reference_list.ts](https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/streams_app/public/components/stream_detail_dashboards_view/to_reference_list.ts#:~:text=SavedObjectReference) | - | -| | [modal.tsx](https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/streams_app/public/components/stream_detail_lifecycle/modal.tsx#:~:text=max_size), [modal.tsx](https://github.com/elastic/kibana/tree/main/x-pack/platform/plugins/shared/streams_app/public/components/stream_detail_lifecycle/modal.tsx#:~:text=max_size) | - | diff --git a/api_docs/deprecations_by_team.mdx b/api_docs/deprecations_by_team.mdx index a6877cde620f3..64e890cd93e5f 100644 --- a/api_docs/deprecations_by_team.mdx +++ b/api_docs/deprecations_by_team.mdx @@ -7,7 +7,7 @@ id: kibDevDocsDeprecationsDueByTeam slug: /kibana-dev-docs/api-meta/deprecations-due-by-team title: Deprecated APIs due to be removed, by team description: Lists the teams that are referencing deprecated APIs with a remove by date. -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/dev_tools.mdx b/api_docs/dev_tools.mdx index 10b596c696152..e0151a6ea5dfd 100644 --- a/api_docs/dev_tools.mdx +++ b/api_docs/dev_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/devTools title: "devTools" image: https://source.unsplash.com/400x175/?github description: API docs for the devTools plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'devTools'] --- import devToolsObj from './dev_tools.devdocs.json'; diff --git a/api_docs/discover.mdx b/api_docs/discover.mdx index e055866811a5d..21307c274ffb8 100644 --- a/api_docs/discover.mdx +++ b/api_docs/discover.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discover title: "discover" image: https://source.unsplash.com/400x175/?github description: API docs for the discover plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discover'] --- import discoverObj from './discover.devdocs.json'; diff --git a/api_docs/discover_enhanced.mdx b/api_docs/discover_enhanced.mdx index 570761fb79fd3..cc9df90d72079 100644 --- a/api_docs/discover_enhanced.mdx +++ b/api_docs/discover_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discoverEnhanced title: "discoverEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the discoverEnhanced plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discoverEnhanced'] --- import discoverEnhancedObj from './discover_enhanced.devdocs.json'; diff --git a/api_docs/discover_shared.mdx b/api_docs/discover_shared.mdx index 0615c5480efbe..fbd6f6a43cf21 100644 --- a/api_docs/discover_shared.mdx +++ b/api_docs/discover_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/discoverShared title: "discoverShared" image: https://source.unsplash.com/400x175/?github description: API docs for the discoverShared plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'discoverShared'] --- import discoverSharedObj from './discover_shared.devdocs.json'; diff --git a/api_docs/ecs_data_quality_dashboard.mdx b/api_docs/ecs_data_quality_dashboard.mdx index c882af14047f0..12414925b13c9 100644 --- a/api_docs/ecs_data_quality_dashboard.mdx +++ b/api_docs/ecs_data_quality_dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ecsDataQualityDashboard title: "ecsDataQualityDashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the ecsDataQualityDashboard plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ecsDataQualityDashboard'] --- import ecsDataQualityDashboardObj from './ecs_data_quality_dashboard.devdocs.json'; diff --git a/api_docs/elastic_assistant.devdocs.json b/api_docs/elastic_assistant.devdocs.json index 3542e0aa1ad86..4a9cd82c6404c 100644 --- a/api_docs/elastic_assistant.devdocs.json +++ b/api_docs/elastic_assistant.devdocs.json @@ -135,9 +135,7 @@ "Tool", " | ", "DynamicStructuredTool", - "<", - "ZodObjectAny", - "> | null" + " | null" ], "path": "x-pack/solutions/security/plugins/elastic_assistant/server/types.ts", "deprecated": false, diff --git a/api_docs/elastic_assistant.mdx b/api_docs/elastic_assistant.mdx index 375817d2b6028..1c131644ea469 100644 --- a/api_docs/elastic_assistant.mdx +++ b/api_docs/elastic_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/elasticAssistant title: "elasticAssistant" image: https://source.unsplash.com/400x175/?github description: API docs for the elasticAssistant plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'elasticAssistant'] --- import elasticAssistantObj from './elastic_assistant.devdocs.json'; diff --git a/api_docs/embeddable.mdx b/api_docs/embeddable.mdx index 677f274b9e797..61c0e8cc2087c 100644 --- a/api_docs/embeddable.mdx +++ b/api_docs/embeddable.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/embeddable title: "embeddable" image: https://source.unsplash.com/400x175/?github description: API docs for the embeddable plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'embeddable'] --- import embeddableObj from './embeddable.devdocs.json'; diff --git a/api_docs/embeddable_enhanced.mdx b/api_docs/embeddable_enhanced.mdx index b4e0bdb359592..140a46936ff82 100644 --- a/api_docs/embeddable_enhanced.mdx +++ b/api_docs/embeddable_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/embeddableEnhanced title: "embeddableEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the embeddableEnhanced plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'embeddableEnhanced'] --- import embeddableEnhancedObj from './embeddable_enhanced.devdocs.json'; diff --git a/api_docs/encrypted_saved_objects.mdx b/api_docs/encrypted_saved_objects.mdx index 8a411f44816ef..8cc9c7e51b8b2 100644 --- a/api_docs/encrypted_saved_objects.mdx +++ b/api_docs/encrypted_saved_objects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/encryptedSavedObjects title: "encryptedSavedObjects" image: https://source.unsplash.com/400x175/?github description: API docs for the encryptedSavedObjects plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'encryptedSavedObjects'] --- import encryptedSavedObjectsObj from './encrypted_saved_objects.devdocs.json'; diff --git a/api_docs/enterprise_search.mdx b/api_docs/enterprise_search.mdx index 8c3b7770d7f45..3cdad1aa9b708 100644 --- a/api_docs/enterprise_search.mdx +++ b/api_docs/enterprise_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/enterpriseSearch title: "enterpriseSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the enterpriseSearch plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'enterpriseSearch'] --- import enterpriseSearchObj from './enterprise_search.devdocs.json'; diff --git a/api_docs/entities_data_access.mdx b/api_docs/entities_data_access.mdx index 178fb10b42da2..86046fb93d0f9 100644 --- a/api_docs/entities_data_access.mdx +++ b/api_docs/entities_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/entitiesDataAccess title: "entitiesDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the entitiesDataAccess plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'entitiesDataAccess'] --- import entitiesDataAccessObj from './entities_data_access.devdocs.json'; diff --git a/api_docs/entity_manager.mdx b/api_docs/entity_manager.mdx index 6e8f4ee30a1a3..ed6e34edf32f5 100644 --- a/api_docs/entity_manager.mdx +++ b/api_docs/entity_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/entityManager title: "entityManager" image: https://source.unsplash.com/400x175/?github description: API docs for the entityManager plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'entityManager'] --- import entityManagerObj from './entity_manager.devdocs.json'; diff --git a/api_docs/es_ui_shared.mdx b/api_docs/es_ui_shared.mdx index a2adcf4060ed0..33ded69212144 100644 --- a/api_docs/es_ui_shared.mdx +++ b/api_docs/es_ui_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/esUiShared title: "esUiShared" image: https://source.unsplash.com/400x175/?github description: API docs for the esUiShared plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'esUiShared'] --- import esUiSharedObj from './es_ui_shared.devdocs.json'; diff --git a/api_docs/esql.mdx b/api_docs/esql.mdx index e4c4e6fecf739..5ff5cb84c912c 100644 --- a/api_docs/esql.mdx +++ b/api_docs/esql.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/esql title: "esql" image: https://source.unsplash.com/400x175/?github description: API docs for the esql plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'esql'] --- import esqlObj from './esql.devdocs.json'; diff --git a/api_docs/esql_data_grid.mdx b/api_docs/esql_data_grid.mdx index f64bad5feedf2..c2ed0ceca3750 100644 --- a/api_docs/esql_data_grid.mdx +++ b/api_docs/esql_data_grid.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/esqlDataGrid title: "esqlDataGrid" image: https://source.unsplash.com/400x175/?github description: API docs for the esqlDataGrid plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'esqlDataGrid'] --- import esqlDataGridObj from './esql_data_grid.devdocs.json'; diff --git a/api_docs/event_annotation.mdx b/api_docs/event_annotation.mdx index 0b77128cd3a0d..a5b4991b54727 100644 --- a/api_docs/event_annotation.mdx +++ b/api_docs/event_annotation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventAnnotation title: "eventAnnotation" image: https://source.unsplash.com/400x175/?github description: API docs for the eventAnnotation plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventAnnotation'] --- import eventAnnotationObj from './event_annotation.devdocs.json'; diff --git a/api_docs/event_annotation_listing.mdx b/api_docs/event_annotation_listing.mdx index 6286b9fdcad65..797ad1495bef1 100644 --- a/api_docs/event_annotation_listing.mdx +++ b/api_docs/event_annotation_listing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventAnnotationListing title: "eventAnnotationListing" image: https://source.unsplash.com/400x175/?github description: API docs for the eventAnnotationListing plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventAnnotationListing'] --- import eventAnnotationListingObj from './event_annotation_listing.devdocs.json'; diff --git a/api_docs/event_log.mdx b/api_docs/event_log.mdx index 8c54c4c8b4cf2..4ba705911ea22 100644 --- a/api_docs/event_log.mdx +++ b/api_docs/event_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/eventLog title: "eventLog" image: https://source.unsplash.com/400x175/?github description: API docs for the eventLog plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'eventLog'] --- import eventLogObj from './event_log.devdocs.json'; diff --git a/api_docs/exploratory_view.mdx b/api_docs/exploratory_view.mdx index eaff8d454b5b1..03bc0f02e1a49 100644 --- a/api_docs/exploratory_view.mdx +++ b/api_docs/exploratory_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/exploratoryView title: "exploratoryView" image: https://source.unsplash.com/400x175/?github description: API docs for the exploratoryView plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'exploratoryView'] --- import exploratoryViewObj from './exploratory_view.devdocs.json'; diff --git a/api_docs/expression_error.mdx b/api_docs/expression_error.mdx index 784d2e5f6ec9f..02a9527fb5708 100644 --- a/api_docs/expression_error.mdx +++ b/api_docs/expression_error.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionError title: "expressionError" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionError plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionError'] --- import expressionErrorObj from './expression_error.devdocs.json'; diff --git a/api_docs/expression_gauge.mdx b/api_docs/expression_gauge.mdx index fed2180725a5a..cccf6377feee9 100644 --- a/api_docs/expression_gauge.mdx +++ b/api_docs/expression_gauge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionGauge title: "expressionGauge" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionGauge plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionGauge'] --- import expressionGaugeObj from './expression_gauge.devdocs.json'; diff --git a/api_docs/expression_heatmap.mdx b/api_docs/expression_heatmap.mdx index 78fb0ce347477..1a78058fa3cab 100644 --- a/api_docs/expression_heatmap.mdx +++ b/api_docs/expression_heatmap.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionHeatmap title: "expressionHeatmap" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionHeatmap plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionHeatmap'] --- import expressionHeatmapObj from './expression_heatmap.devdocs.json'; diff --git a/api_docs/expression_image.mdx b/api_docs/expression_image.mdx index a791d431237bf..6a3fc7046dcb5 100644 --- a/api_docs/expression_image.mdx +++ b/api_docs/expression_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionImage title: "expressionImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionImage plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionImage'] --- import expressionImageObj from './expression_image.devdocs.json'; diff --git a/api_docs/expression_legacy_metric_vis.mdx b/api_docs/expression_legacy_metric_vis.mdx index 1673a99956437..f3e1b7062dd48 100644 --- a/api_docs/expression_legacy_metric_vis.mdx +++ b/api_docs/expression_legacy_metric_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionLegacyMetricVis title: "expressionLegacyMetricVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionLegacyMetricVis plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionLegacyMetricVis'] --- import expressionLegacyMetricVisObj from './expression_legacy_metric_vis.devdocs.json'; diff --git a/api_docs/expression_metric.mdx b/api_docs/expression_metric.mdx index 5351f3bbe1bc2..3f79ba0e47e65 100644 --- a/api_docs/expression_metric.mdx +++ b/api_docs/expression_metric.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionMetric title: "expressionMetric" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionMetric plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionMetric'] --- import expressionMetricObj from './expression_metric.devdocs.json'; diff --git a/api_docs/expression_metric_vis.mdx b/api_docs/expression_metric_vis.mdx index 48bd5a1818c0f..eae64787ab561 100644 --- a/api_docs/expression_metric_vis.mdx +++ b/api_docs/expression_metric_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionMetricVis title: "expressionMetricVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionMetricVis plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionMetricVis'] --- import expressionMetricVisObj from './expression_metric_vis.devdocs.json'; diff --git a/api_docs/expression_partition_vis.mdx b/api_docs/expression_partition_vis.mdx index 80a690fd95ffa..aaafa46ca6432 100644 --- a/api_docs/expression_partition_vis.mdx +++ b/api_docs/expression_partition_vis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionPartitionVis title: "expressionPartitionVis" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionPartitionVis plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionPartitionVis'] --- import expressionPartitionVisObj from './expression_partition_vis.devdocs.json'; diff --git a/api_docs/expression_repeat_image.mdx b/api_docs/expression_repeat_image.mdx index 87a8d773e303d..cd85bd72d61b8 100644 --- a/api_docs/expression_repeat_image.mdx +++ b/api_docs/expression_repeat_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionRepeatImage title: "expressionRepeatImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionRepeatImage plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionRepeatImage'] --- import expressionRepeatImageObj from './expression_repeat_image.devdocs.json'; diff --git a/api_docs/expression_reveal_image.mdx b/api_docs/expression_reveal_image.mdx index 0a2ba50cc4440..83ed08ae56eab 100644 --- a/api_docs/expression_reveal_image.mdx +++ b/api_docs/expression_reveal_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionRevealImage title: "expressionRevealImage" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionRevealImage plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionRevealImage'] --- import expressionRevealImageObj from './expression_reveal_image.devdocs.json'; diff --git a/api_docs/expression_shape.mdx b/api_docs/expression_shape.mdx index 346d2695fa0fb..6e08a01b51453 100644 --- a/api_docs/expression_shape.mdx +++ b/api_docs/expression_shape.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionShape title: "expressionShape" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionShape plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionShape'] --- import expressionShapeObj from './expression_shape.devdocs.json'; diff --git a/api_docs/expression_tagcloud.mdx b/api_docs/expression_tagcloud.mdx index aecfad795daf6..231ec0589d9f0 100644 --- a/api_docs/expression_tagcloud.mdx +++ b/api_docs/expression_tagcloud.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionTagcloud title: "expressionTagcloud" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionTagcloud plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionTagcloud'] --- import expressionTagcloudObj from './expression_tagcloud.devdocs.json'; diff --git a/api_docs/expression_x_y.mdx b/api_docs/expression_x_y.mdx index d5d078361e6cf..01f946a0afc64 100644 --- a/api_docs/expression_x_y.mdx +++ b/api_docs/expression_x_y.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressionXY title: "expressionXY" image: https://source.unsplash.com/400x175/?github description: API docs for the expressionXY plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressionXY'] --- import expressionXYObj from './expression_x_y.devdocs.json'; diff --git a/api_docs/expressions.mdx b/api_docs/expressions.mdx index 52aa4b0e8808b..4dded89185fad 100644 --- a/api_docs/expressions.mdx +++ b/api_docs/expressions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/expressions title: "expressions" image: https://source.unsplash.com/400x175/?github description: API docs for the expressions plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'expressions'] --- import expressionsObj from './expressions.devdocs.json'; diff --git a/api_docs/features.mdx b/api_docs/features.mdx index 1282ab5a44f93..c3c2da5c063e8 100644 --- a/api_docs/features.mdx +++ b/api_docs/features.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/features title: "features" image: https://source.unsplash.com/400x175/?github description: API docs for the features plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'features'] --- import featuresObj from './features.devdocs.json'; diff --git a/api_docs/field_formats.mdx b/api_docs/field_formats.mdx index b650264160df7..b914e5de845c4 100644 --- a/api_docs/field_formats.mdx +++ b/api_docs/field_formats.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fieldFormats title: "fieldFormats" image: https://source.unsplash.com/400x175/?github description: API docs for the fieldFormats plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fieldFormats'] --- import fieldFormatsObj from './field_formats.devdocs.json'; diff --git a/api_docs/fields_metadata.mdx b/api_docs/fields_metadata.mdx index 8c331f429b56e..0b0aaab70532d 100644 --- a/api_docs/fields_metadata.mdx +++ b/api_docs/fields_metadata.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fieldsMetadata title: "fieldsMetadata" image: https://source.unsplash.com/400x175/?github description: API docs for the fieldsMetadata plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fieldsMetadata'] --- import fieldsMetadataObj from './fields_metadata.devdocs.json'; diff --git a/api_docs/file_upload.devdocs.json b/api_docs/file_upload.devdocs.json index cc8e8b7879fbe..596546a6dfe15 100644 --- a/api_docs/file_upload.devdocs.json +++ b/api_docs/file_upload.devdocs.json @@ -456,7 +456,7 @@ "IndicesIndexSettings", ", mappings: ", "MappingTypeMapping", - ", pipeline: ", + ", pipeline: (", { "pluginId": "fileUpload", "scope": "common", @@ -464,16 +464,8 @@ "section": "def-common.IngestPipeline", "text": "IngestPipeline" }, - " | undefined, createPipelines?: ", - { - "pluginId": "fileUpload", - "scope": "common", - "docId": "kibFileUploadPluginApi", - "section": "def-common.IngestPipeline", - "text": "IngestPipeline" - }, - "[] | undefined) => Promise<", - "ImportResponse", + " | undefined)[]) => Promise<", + "InitializeImportResponse", ">" ], "path": "x-pack/platform/plugins/private/file_upload/public/importer/types.ts", @@ -528,33 +520,12 @@ { "parentPluginId": "fileUpload", "id": "def-public.IImporter.initializeImport.$4", - "type": "Object", - "tags": [], - "label": "pipeline", - "description": [], - "signature": [ - { - "pluginId": "fileUpload", - "scope": "common", - "docId": "kibFileUploadPluginApi", - "section": "def-common.IngestPipeline", - "text": "IngestPipeline" - }, - " | undefined" - ], - "path": "x-pack/platform/plugins/private/file_upload/public/importer/types.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": false - }, - { - "parentPluginId": "fileUpload", - "id": "def-public.IImporter.initializeImport.$5", "type": "Array", "tags": [], - "label": "createPipelines", + "label": "pipeline", "description": [], "signature": [ + "(", { "pluginId": "fileUpload", "scope": "common", @@ -562,12 +533,12 @@ "section": "def-common.IngestPipeline", "text": "IngestPipeline" }, - "[] | undefined" + " | undefined)[]" ], "path": "x-pack/platform/plugins/private/file_upload/public/importer/types.ts", "deprecated": false, "trackAdoption": false, - "isRequired": false + "isRequired": true } ], "returnComment": [] @@ -582,7 +553,7 @@ "signature": [ "(index: string, mappings: ", "MappingTypeMapping", - ", pipeline: ", + ", pipelines: ", { "pluginId": "fileUpload", "scope": "common", @@ -590,7 +561,7 @@ "section": "def-common.IngestPipeline", "text": "IngestPipeline" }, - " | undefined) => void" + "[]) => void" ], "path": "x-pack/platform/plugins/private/file_upload/public/importer/types.ts", "deprecated": false, @@ -629,9 +600,9 @@ { "parentPluginId": "fileUpload", "id": "def-public.IImporter.initializeWithoutCreate.$3", - "type": "Object", + "type": "Array", "tags": [], - "label": "pipeline", + "label": "pipelines", "description": [], "signature": [ { @@ -641,12 +612,12 @@ "section": "def-common.IngestPipeline", "text": "IngestPipeline" }, - " | undefined" + "[]" ], "path": "x-pack/platform/plugins/private/file_upload/public/importer/types.ts", "deprecated": false, "trackAdoption": false, - "isRequired": false + "isRequired": true } ], "returnComment": [] @@ -659,7 +630,7 @@ "label": "import", "description": [], "signature": [ - "(id: string, index: string, pipelineId: string | undefined, setImportProgress: (progress: number) => void) => Promise<", + "(index: string, ingestPipelineId: string | undefined, setImportProgress: (progress: number) => void) => Promise<", "ImportResults", ">" ], @@ -672,21 +643,6 @@ "id": "def-public.IImporter.import.$1", "type": "string", "tags": [], - "label": "id", - "description": [], - "signature": [ - "string" - ], - "path": "x-pack/platform/plugins/private/file_upload/public/importer/types.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - }, - { - "parentPluginId": "fileUpload", - "id": "def-public.IImporter.import.$2", - "type": "string", - "tags": [], "label": "index", "description": [], "signature": [ @@ -699,10 +655,10 @@ }, { "parentPluginId": "fileUpload", - "id": "def-public.IImporter.import.$3", + "id": "def-public.IImporter.import.$2", "type": "string", "tags": [], - "label": "pipelineId", + "label": "ingestPipelineId", "description": [], "signature": [ "string | undefined" @@ -714,7 +670,7 @@ }, { "parentPluginId": "fileUpload", - "id": "def-public.IImporter.import.$4", + "id": "def-public.IImporter.import.$3", "type": "Function", "tags": [], "label": "setImportProgress", @@ -802,30 +758,14 @@ "label": "deletePipelines", "description": [], "signature": [ - "(pipelineIds: string[]) => Promise<", + "() => Promise<", "AcknowledgedResponseBase", "[]>" ], "path": "x-pack/platform/plugins/private/file_upload/public/importer/types.ts", "deprecated": false, "trackAdoption": false, - "children": [ - { - "parentPluginId": "fileUpload", - "id": "def-public.IImporter.deletePipelines.$1", - "type": "Array", - "tags": [], - "label": "pipelineIds", - "description": [], - "signature": [ - "string[]" - ], - "path": "x-pack/platform/plugins/private/file_upload/public/importer/types.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], + "children": [], "returnComment": [] } ], diff --git a/api_docs/file_upload.mdx b/api_docs/file_upload.mdx index 5ebd13d0d1f2d..139347ffd944f 100644 --- a/api_docs/file_upload.mdx +++ b/api_docs/file_upload.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fileUpload title: "fileUpload" image: https://source.unsplash.com/400x175/?github description: API docs for the fileUpload plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fileUpload'] --- import fileUploadObj from './file_upload.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kib | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 96 | 0 | 96 | 8 | +| 93 | 0 | 93 | 8 | ## Client diff --git a/api_docs/files.mdx b/api_docs/files.mdx index 0962ea8218f6d..295c0a81469ad 100644 --- a/api_docs/files.mdx +++ b/api_docs/files.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/files title: "files" image: https://source.unsplash.com/400x175/?github description: API docs for the files plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'files'] --- import filesObj from './files.devdocs.json'; diff --git a/api_docs/files_management.mdx b/api_docs/files_management.mdx index e4e05a535d19b..d6d359a9d3901 100644 --- a/api_docs/files_management.mdx +++ b/api_docs/files_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/filesManagement title: "filesManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the filesManagement plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'filesManagement'] --- import filesManagementObj from './files_management.devdocs.json'; diff --git a/api_docs/fleet.mdx b/api_docs/fleet.mdx index afc2374b4a4c7..293aaa1bdbd1f 100644 --- a/api_docs/fleet.mdx +++ b/api_docs/fleet.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/fleet title: "fleet" image: https://source.unsplash.com/400x175/?github description: API docs for the fleet plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fleet'] --- import fleetObj from './fleet.devdocs.json'; diff --git a/api_docs/global_search.mdx b/api_docs/global_search.mdx index 78e6f9b1bf543..761e19bbe9b7b 100644 --- a/api_docs/global_search.mdx +++ b/api_docs/global_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/globalSearch title: "globalSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the globalSearch plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'globalSearch'] --- import globalSearchObj from './global_search.devdocs.json'; diff --git a/api_docs/guided_onboarding.mdx b/api_docs/guided_onboarding.mdx index c256a18450aa0..ecf77b1359787 100644 --- a/api_docs/guided_onboarding.mdx +++ b/api_docs/guided_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/guidedOnboarding title: "guidedOnboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the guidedOnboarding plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'guidedOnboarding'] --- import guidedOnboardingObj from './guided_onboarding.devdocs.json'; diff --git a/api_docs/home.mdx b/api_docs/home.mdx index 316c9cd99850a..d959fd5061f2f 100644 --- a/api_docs/home.mdx +++ b/api_docs/home.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/home title: "home" image: https://source.unsplash.com/400x175/?github description: API docs for the home plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'home'] --- import homeObj from './home.devdocs.json'; diff --git a/api_docs/image_embeddable.mdx b/api_docs/image_embeddable.mdx index 978f51ccbb156..1610aa6377b22 100644 --- a/api_docs/image_embeddable.mdx +++ b/api_docs/image_embeddable.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/imageEmbeddable title: "imageEmbeddable" image: https://source.unsplash.com/400x175/?github description: API docs for the imageEmbeddable plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'imageEmbeddable'] --- import imageEmbeddableObj from './image_embeddable.devdocs.json'; diff --git a/api_docs/index_management.mdx b/api_docs/index_management.mdx index 6de6d784e942b..02cf1f5ca352c 100644 --- a/api_docs/index_management.mdx +++ b/api_docs/index_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/indexManagement title: "indexManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the indexManagement plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'indexManagement'] --- import indexManagementObj from './index_management.devdocs.json'; diff --git a/api_docs/inference.mdx b/api_docs/inference.mdx index fc93385d973bd..112d5cb94f05a 100644 --- a/api_docs/inference.mdx +++ b/api_docs/inference.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/inference title: "inference" image: https://source.unsplash.com/400x175/?github description: API docs for the inference plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'inference'] --- import inferenceObj from './inference.devdocs.json'; diff --git a/api_docs/inference_endpoint.mdx b/api_docs/inference_endpoint.mdx index c2537a00bfd30..85e6df4e47ce1 100644 --- a/api_docs/inference_endpoint.mdx +++ b/api_docs/inference_endpoint.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/inferenceEndpoint title: "inferenceEndpoint" image: https://source.unsplash.com/400x175/?github description: API docs for the inferenceEndpoint plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'inferenceEndpoint'] --- import inferenceEndpointObj from './inference_endpoint.devdocs.json'; diff --git a/api_docs/infra.mdx b/api_docs/infra.mdx index abb1cca6ad435..f17a5ec65f669 100644 --- a/api_docs/infra.mdx +++ b/api_docs/infra.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/infra title: "infra" image: https://source.unsplash.com/400x175/?github description: API docs for the infra plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'infra'] --- import infraObj from './infra.devdocs.json'; diff --git a/api_docs/ingest_pipelines.mdx b/api_docs/ingest_pipelines.mdx index 6f622890f0b8f..5971da32e3ed5 100644 --- a/api_docs/ingest_pipelines.mdx +++ b/api_docs/ingest_pipelines.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ingestPipelines title: "ingestPipelines" image: https://source.unsplash.com/400x175/?github description: API docs for the ingestPipelines plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ingestPipelines'] --- import ingestPipelinesObj from './ingest_pipelines.devdocs.json'; diff --git a/api_docs/inspector.mdx b/api_docs/inspector.mdx index 8f745971dcc87..92f780ca2c261 100644 --- a/api_docs/inspector.mdx +++ b/api_docs/inspector.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/inspector title: "inspector" image: https://source.unsplash.com/400x175/?github description: API docs for the inspector plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'inspector'] --- import inspectorObj from './inspector.devdocs.json'; diff --git a/api_docs/interactive_setup.mdx b/api_docs/interactive_setup.mdx index 332d221851184..831e0a7f5cafa 100644 --- a/api_docs/interactive_setup.mdx +++ b/api_docs/interactive_setup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/interactiveSetup title: "interactiveSetup" image: https://source.unsplash.com/400x175/?github description: API docs for the interactiveSetup plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'interactiveSetup'] --- import interactiveSetupObj from './interactive_setup.devdocs.json'; diff --git a/api_docs/inventory.mdx b/api_docs/inventory.mdx index 0dddbcb26372e..6ef4f7ecef12a 100644 --- a/api_docs/inventory.mdx +++ b/api_docs/inventory.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/inventory title: "inventory" image: https://source.unsplash.com/400x175/?github description: API docs for the inventory plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'inventory'] --- import inventoryObj from './inventory.devdocs.json'; diff --git a/api_docs/investigate.mdx b/api_docs/investigate.mdx index 51a036260cb53..9b0edfd66a5e1 100644 --- a/api_docs/investigate.mdx +++ b/api_docs/investigate.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/investigate title: "investigate" image: https://source.unsplash.com/400x175/?github description: API docs for the investigate plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'investigate'] --- import investigateObj from './investigate.devdocs.json'; diff --git a/api_docs/investigate_app.mdx b/api_docs/investigate_app.mdx index a57f853fed6f8..1197019be40d3 100644 --- a/api_docs/investigate_app.mdx +++ b/api_docs/investigate_app.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/investigateApp title: "investigateApp" image: https://source.unsplash.com/400x175/?github description: API docs for the investigateApp plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'investigateApp'] --- import investigateAppObj from './investigate_app.devdocs.json'; diff --git a/api_docs/kbn_actions_types.mdx b/api_docs/kbn_actions_types.mdx index fdced794a5ba9..8a2d7a481bde6 100644 --- a/api_docs/kbn_actions_types.mdx +++ b/api_docs/kbn_actions_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-actions-types title: "@kbn/actions-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/actions-types plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/actions-types'] --- import kbnActionsTypesObj from './kbn_actions_types.devdocs.json'; diff --git a/api_docs/kbn_ai_assistant.mdx b/api_docs/kbn_ai_assistant.mdx index 9797ea659c33c..2e41364c17443 100644 --- a/api_docs/kbn_ai_assistant.mdx +++ b/api_docs/kbn_ai_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ai-assistant title: "@kbn/ai-assistant" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ai-assistant plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ai-assistant'] --- import kbnAiAssistantObj from './kbn_ai_assistant.devdocs.json'; diff --git a/api_docs/kbn_ai_assistant_common.mdx b/api_docs/kbn_ai_assistant_common.mdx index 4a905373682bc..7654263ad862e 100644 --- a/api_docs/kbn_ai_assistant_common.mdx +++ b/api_docs/kbn_ai_assistant_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ai-assistant-common title: "@kbn/ai-assistant-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ai-assistant-common plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ai-assistant-common'] --- import kbnAiAssistantCommonObj from './kbn_ai_assistant_common.devdocs.json'; diff --git a/api_docs/kbn_ai_assistant_icon.mdx b/api_docs/kbn_ai_assistant_icon.mdx index 4d88be4dafe9b..978eefaeae1b7 100644 --- a/api_docs/kbn_ai_assistant_icon.mdx +++ b/api_docs/kbn_ai_assistant_icon.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ai-assistant-icon title: "@kbn/ai-assistant-icon" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ai-assistant-icon plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ai-assistant-icon'] --- import kbnAiAssistantIconObj from './kbn_ai_assistant_icon.devdocs.json'; diff --git a/api_docs/kbn_aiops_components.mdx b/api_docs/kbn_aiops_components.mdx index 1b410c54046ba..f259c9fd4c449 100644 --- a/api_docs/kbn_aiops_components.mdx +++ b/api_docs/kbn_aiops_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-components title: "@kbn/aiops-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-components plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-components'] --- import kbnAiopsComponentsObj from './kbn_aiops_components.devdocs.json'; diff --git a/api_docs/kbn_aiops_log_pattern_analysis.mdx b/api_docs/kbn_aiops_log_pattern_analysis.mdx index 2256419bce71b..eb24c5e92f8ab 100644 --- a/api_docs/kbn_aiops_log_pattern_analysis.mdx +++ b/api_docs/kbn_aiops_log_pattern_analysis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-log-pattern-analysis title: "@kbn/aiops-log-pattern-analysis" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-log-pattern-analysis plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-log-pattern-analysis'] --- import kbnAiopsLogPatternAnalysisObj from './kbn_aiops_log_pattern_analysis.devdocs.json'; diff --git a/api_docs/kbn_aiops_log_rate_analysis.mdx b/api_docs/kbn_aiops_log_rate_analysis.mdx index 956cdce7e7b90..c5985ddbdb27d 100644 --- a/api_docs/kbn_aiops_log_rate_analysis.mdx +++ b/api_docs/kbn_aiops_log_rate_analysis.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-aiops-log-rate-analysis title: "@kbn/aiops-log-rate-analysis" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/aiops-log-rate-analysis plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/aiops-log-rate-analysis'] --- import kbnAiopsLogRateAnalysisObj from './kbn_aiops_log_rate_analysis.devdocs.json'; diff --git a/api_docs/kbn_alerting_api_integration_helpers.mdx b/api_docs/kbn_alerting_api_integration_helpers.mdx index fa2d5401059fb..18d26c969323c 100644 --- a/api_docs/kbn_alerting_api_integration_helpers.mdx +++ b/api_docs/kbn_alerting_api_integration_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-api-integration-helpers title: "@kbn/alerting-api-integration-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-api-integration-helpers plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-api-integration-helpers'] --- import kbnAlertingApiIntegrationHelpersObj from './kbn_alerting_api_integration_helpers.devdocs.json'; diff --git a/api_docs/kbn_alerting_comparators.mdx b/api_docs/kbn_alerting_comparators.mdx index ecf9531a727c9..c827428e8d3c8 100644 --- a/api_docs/kbn_alerting_comparators.mdx +++ b/api_docs/kbn_alerting_comparators.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-comparators title: "@kbn/alerting-comparators" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-comparators plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-comparators'] --- import kbnAlertingComparatorsObj from './kbn_alerting_comparators.devdocs.json'; diff --git a/api_docs/kbn_alerting_rule_utils.mdx b/api_docs/kbn_alerting_rule_utils.mdx index c0630aa062993..f5dcafbd86ab1 100644 --- a/api_docs/kbn_alerting_rule_utils.mdx +++ b/api_docs/kbn_alerting_rule_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-rule-utils title: "@kbn/alerting-rule-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-rule-utils plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-rule-utils'] --- import kbnAlertingRuleUtilsObj from './kbn_alerting_rule_utils.devdocs.json'; diff --git a/api_docs/kbn_alerting_state_types.mdx b/api_docs/kbn_alerting_state_types.mdx index 917dbdd800be5..7439939ab794f 100644 --- a/api_docs/kbn_alerting_state_types.mdx +++ b/api_docs/kbn_alerting_state_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-state-types title: "@kbn/alerting-state-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-state-types plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-state-types'] --- import kbnAlertingStateTypesObj from './kbn_alerting_state_types.devdocs.json'; diff --git a/api_docs/kbn_alerting_types.mdx b/api_docs/kbn_alerting_types.mdx index 775b2481e263f..19e976410622d 100644 --- a/api_docs/kbn_alerting_types.mdx +++ b/api_docs/kbn_alerting_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerting-types title: "@kbn/alerting-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerting-types plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerting-types'] --- import kbnAlertingTypesObj from './kbn_alerting_types.devdocs.json'; diff --git a/api_docs/kbn_alerts_as_data_utils.mdx b/api_docs/kbn_alerts_as_data_utils.mdx index 3c8679d4ce7e1..7d1b780b1b2c4 100644 --- a/api_docs/kbn_alerts_as_data_utils.mdx +++ b/api_docs/kbn_alerts_as_data_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-as-data-utils title: "@kbn/alerts-as-data-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts-as-data-utils plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts-as-data-utils'] --- import kbnAlertsAsDataUtilsObj from './kbn_alerts_as_data_utils.devdocs.json'; diff --git a/api_docs/kbn_alerts_grouping.mdx b/api_docs/kbn_alerts_grouping.mdx index 46bd5ed7d5392..0dcf5b6c7c40e 100644 --- a/api_docs/kbn_alerts_grouping.mdx +++ b/api_docs/kbn_alerts_grouping.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-grouping title: "@kbn/alerts-grouping" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts-grouping plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts-grouping'] --- import kbnAlertsGroupingObj from './kbn_alerts_grouping.devdocs.json'; diff --git a/api_docs/kbn_alerts_ui_shared.devdocs.json b/api_docs/kbn_alerts_ui_shared.devdocs.json index 0deabe5986307..f5c9bd96e757e 100644 --- a/api_docs/kbn_alerts_ui_shared.devdocs.json +++ b/api_docs/kbn_alerts_ui_shared.devdocs.json @@ -4412,7 +4412,7 @@ "section": "def-common.DataViewLazy", "text": "DataViewLazy" }, - "[]>; clearCache: () => void; clearInstanceCache: (id?: string | undefined) => void; getCache: () => Promise<", + "[]>; clearCache: () => void; clearInstanceCache: (id?: string | undefined) => void; clearDataViewLazyCache: (id: string) => void; getCache: () => Promise<", "SavedObject", "<", { diff --git a/api_docs/kbn_alerts_ui_shared.mdx b/api_docs/kbn_alerts_ui_shared.mdx index 95354a3caa85d..2ccbe7a2849ec 100644 --- a/api_docs/kbn_alerts_ui_shared.mdx +++ b/api_docs/kbn_alerts_ui_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-alerts-ui-shared title: "@kbn/alerts-ui-shared" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/alerts-ui-shared plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/alerts-ui-shared'] --- import kbnAlertsUiSharedObj from './kbn_alerts_ui_shared.devdocs.json'; diff --git a/api_docs/kbn_analytics.mdx b/api_docs/kbn_analytics.mdx index 9922ed1b89491..1c85bce04d2dc 100644 --- a/api_docs/kbn_analytics.mdx +++ b/api_docs/kbn_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics title: "@kbn/analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics'] --- import kbnAnalyticsObj from './kbn_analytics.devdocs.json'; diff --git a/api_docs/kbn_analytics_collection_utils.mdx b/api_docs/kbn_analytics_collection_utils.mdx index bcd452baa55a1..d952909bbb82d 100644 --- a/api_docs/kbn_analytics_collection_utils.mdx +++ b/api_docs/kbn_analytics_collection_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-analytics-collection-utils title: "@kbn/analytics-collection-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/analytics-collection-utils plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/analytics-collection-utils'] --- import kbnAnalyticsCollectionUtilsObj from './kbn_analytics_collection_utils.devdocs.json'; diff --git a/api_docs/kbn_apm_config_loader.mdx b/api_docs/kbn_apm_config_loader.mdx index 2632b85e6235c..b42fc3c033688 100644 --- a/api_docs/kbn_apm_config_loader.mdx +++ b/api_docs/kbn_apm_config_loader.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-config-loader title: "@kbn/apm-config-loader" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-config-loader plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-config-loader'] --- import kbnApmConfigLoaderObj from './kbn_apm_config_loader.devdocs.json'; diff --git a/api_docs/kbn_apm_data_view.mdx b/api_docs/kbn_apm_data_view.mdx index 8df731b4121bc..df281bd8f353e 100644 --- a/api_docs/kbn_apm_data_view.mdx +++ b/api_docs/kbn_apm_data_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-data-view title: "@kbn/apm-data-view" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-data-view plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-data-view'] --- import kbnApmDataViewObj from './kbn_apm_data_view.devdocs.json'; diff --git a/api_docs/kbn_apm_synthtrace.mdx b/api_docs/kbn_apm_synthtrace.mdx index f0062a64be9c5..19b8e12b82950 100644 --- a/api_docs/kbn_apm_synthtrace.mdx +++ b/api_docs/kbn_apm_synthtrace.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-synthtrace title: "@kbn/apm-synthtrace" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-synthtrace plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-synthtrace'] --- import kbnApmSynthtraceObj from './kbn_apm_synthtrace.devdocs.json'; diff --git a/api_docs/kbn_apm_synthtrace_client.mdx b/api_docs/kbn_apm_synthtrace_client.mdx index a94856bb6b884..e2719d09b6ebe 100644 --- a/api_docs/kbn_apm_synthtrace_client.mdx +++ b/api_docs/kbn_apm_synthtrace_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-synthtrace-client title: "@kbn/apm-synthtrace-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-synthtrace-client plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-synthtrace-client'] --- import kbnApmSynthtraceClientObj from './kbn_apm_synthtrace_client.devdocs.json'; diff --git a/api_docs/kbn_apm_types.mdx b/api_docs/kbn_apm_types.mdx index ecae747641c54..05d6a153784c1 100644 --- a/api_docs/kbn_apm_types.mdx +++ b/api_docs/kbn_apm_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-types title: "@kbn/apm-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-types plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-types'] --- import kbnApmTypesObj from './kbn_apm_types.devdocs.json'; diff --git a/api_docs/kbn_apm_utils.mdx b/api_docs/kbn_apm_utils.mdx index 303ab237a079a..50e5c5b1a75b4 100644 --- a/api_docs/kbn_apm_utils.mdx +++ b/api_docs/kbn_apm_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-apm-utils title: "@kbn/apm-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/apm-utils plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/apm-utils'] --- import kbnApmUtilsObj from './kbn_apm_utils.devdocs.json'; diff --git a/api_docs/kbn_avc_banner.mdx b/api_docs/kbn_avc_banner.mdx index 5abf3de5c9c87..f0c2339e63b7a 100644 --- a/api_docs/kbn_avc_banner.mdx +++ b/api_docs/kbn_avc_banner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-avc-banner title: "@kbn/avc-banner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/avc-banner plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/avc-banner'] --- import kbnAvcBannerObj from './kbn_avc_banner.devdocs.json'; diff --git a/api_docs/kbn_axe_config.mdx b/api_docs/kbn_axe_config.mdx index 3f14496aa517e..fbc7c9546aaba 100644 --- a/api_docs/kbn_axe_config.mdx +++ b/api_docs/kbn_axe_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-axe-config title: "@kbn/axe-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/axe-config plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/axe-config'] --- import kbnAxeConfigObj from './kbn_axe_config.devdocs.json'; diff --git a/api_docs/kbn_calculate_auto.mdx b/api_docs/kbn_calculate_auto.mdx index 067bb815d0191..b46a88ed8ef43 100644 --- a/api_docs/kbn_calculate_auto.mdx +++ b/api_docs/kbn_calculate_auto.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-calculate-auto title: "@kbn/calculate-auto" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/calculate-auto plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/calculate-auto'] --- import kbnCalculateAutoObj from './kbn_calculate_auto.devdocs.json'; diff --git a/api_docs/kbn_calculate_width_from_char_count.mdx b/api_docs/kbn_calculate_width_from_char_count.mdx index 64241d2686415..986ce9e9e0978 100644 --- a/api_docs/kbn_calculate_width_from_char_count.mdx +++ b/api_docs/kbn_calculate_width_from_char_count.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-calculate-width-from-char-count title: "@kbn/calculate-width-from-char-count" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/calculate-width-from-char-count plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/calculate-width-from-char-count'] --- import kbnCalculateWidthFromCharCountObj from './kbn_calculate_width_from_char_count.devdocs.json'; diff --git a/api_docs/kbn_cases_components.mdx b/api_docs/kbn_cases_components.mdx index 2a55a766e5362..f5a22b4ae7ffd 100644 --- a/api_docs/kbn_cases_components.mdx +++ b/api_docs/kbn_cases_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cases-components title: "@kbn/cases-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cases-components plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cases-components'] --- import kbnCasesComponentsObj from './kbn_cases_components.devdocs.json'; diff --git a/api_docs/kbn_cbor.mdx b/api_docs/kbn_cbor.mdx index e5578e354854d..89f4a85863d2f 100644 --- a/api_docs/kbn_cbor.mdx +++ b/api_docs/kbn_cbor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cbor title: "@kbn/cbor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cbor plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cbor'] --- import kbnCborObj from './kbn_cbor.devdocs.json'; diff --git a/api_docs/kbn_cell_actions.mdx b/api_docs/kbn_cell_actions.mdx index 53bfa0347e983..208ee69ec2d8d 100644 --- a/api_docs/kbn_cell_actions.mdx +++ b/api_docs/kbn_cell_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cell-actions title: "@kbn/cell-actions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cell-actions plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cell-actions'] --- import kbnCellActionsObj from './kbn_cell_actions.devdocs.json'; diff --git a/api_docs/kbn_chart_expressions_common.mdx b/api_docs/kbn_chart_expressions_common.mdx index 889815d27f0a1..821e20d505451 100644 --- a/api_docs/kbn_chart_expressions_common.mdx +++ b/api_docs/kbn_chart_expressions_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-chart-expressions-common title: "@kbn/chart-expressions-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/chart-expressions-common plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/chart-expressions-common'] --- import kbnChartExpressionsCommonObj from './kbn_chart_expressions_common.devdocs.json'; diff --git a/api_docs/kbn_chart_icons.mdx b/api_docs/kbn_chart_icons.mdx index d7d5a9f016e99..5182a65e64939 100644 --- a/api_docs/kbn_chart_icons.mdx +++ b/api_docs/kbn_chart_icons.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-chart-icons title: "@kbn/chart-icons" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/chart-icons plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/chart-icons'] --- import kbnChartIconsObj from './kbn_chart_icons.devdocs.json'; diff --git a/api_docs/kbn_charts_theme.mdx b/api_docs/kbn_charts_theme.mdx index 7c45334bb1f96..402da62fda155 100644 --- a/api_docs/kbn_charts_theme.mdx +++ b/api_docs/kbn_charts_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-charts-theme title: "@kbn/charts-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/charts-theme plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/charts-theme'] --- import kbnChartsThemeObj from './kbn_charts_theme.devdocs.json'; diff --git a/api_docs/kbn_ci_stats_core.mdx b/api_docs/kbn_ci_stats_core.mdx index 5455fa5921b02..7f9991d5e3221 100644 --- a/api_docs/kbn_ci_stats_core.mdx +++ b/api_docs/kbn_ci_stats_core.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-core title: "@kbn/ci-stats-core" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-core plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ci-stats-core'] --- import kbnCiStatsCoreObj from './kbn_ci_stats_core.devdocs.json'; diff --git a/api_docs/kbn_ci_stats_performance_metrics.mdx b/api_docs/kbn_ci_stats_performance_metrics.mdx index 4b2772caa7e4b..20382e6a1a574 100644 --- a/api_docs/kbn_ci_stats_performance_metrics.mdx +++ b/api_docs/kbn_ci_stats_performance_metrics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-performance-metrics title: "@kbn/ci-stats-performance-metrics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-performance-metrics plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ci-stats-performance-metrics'] --- import kbnCiStatsPerformanceMetricsObj from './kbn_ci_stats_performance_metrics.devdocs.json'; diff --git a/api_docs/kbn_ci_stats_reporter.mdx b/api_docs/kbn_ci_stats_reporter.mdx index 069a20614d329..80adf09d05266 100644 --- a/api_docs/kbn_ci_stats_reporter.mdx +++ b/api_docs/kbn_ci_stats_reporter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ci-stats-reporter title: "@kbn/ci-stats-reporter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ci-stats-reporter plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ci-stats-reporter'] --- import kbnCiStatsReporterObj from './kbn_ci_stats_reporter.devdocs.json'; diff --git a/api_docs/kbn_cli_dev_mode.mdx b/api_docs/kbn_cli_dev_mode.mdx index 4ef9ecf48118a..2f808548e24e9 100644 --- a/api_docs/kbn_cli_dev_mode.mdx +++ b/api_docs/kbn_cli_dev_mode.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cli-dev-mode title: "@kbn/cli-dev-mode" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cli-dev-mode plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cli-dev-mode'] --- import kbnCliDevModeObj from './kbn_cli_dev_mode.devdocs.json'; diff --git a/api_docs/kbn_cloud_security_posture.devdocs.json b/api_docs/kbn_cloud_security_posture.devdocs.json index 88817fcc65220..7c69cff53d32f 100644 --- a/api_docs/kbn_cloud_security_posture.devdocs.json +++ b/api_docs/kbn_cloud_security_posture.devdocs.json @@ -558,6 +558,42 @@ } ], "interfaces": [ + { + "parentPluginId": "@kbn/cloud-security-posture", + "id": "def-public.BaseEsQuery", + "type": "Interface", + "tags": [], + "label": "BaseEsQuery", + "description": [], + "path": "x-pack/solutions/security/packages/kbn-cloud-security-posture/public/src/types.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/cloud-security-posture", + "id": "def-public.BaseEsQuery.query", + "type": "Object", + "tags": [], + "label": "query", + "description": [], + "signature": [ + "{ bool: ", + { + "pluginId": "@kbn/es-query", + "scope": "common", + "docId": "kibKbnEsQueryPluginApi", + "section": "def-common.BoolQuery", + "text": "BoolQuery" + }, + "; } | undefined" + ], + "path": "x-pack/solutions/security/packages/kbn-cloud-security-posture/public/src/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, { "parentPluginId": "@kbn/cloud-security-posture", "id": "def-public.CspBaseEsQuery", @@ -1065,42 +1101,6 @@ ], "initialIsOpen": false }, - { - "parentPluginId": "@kbn/cloud-security-posture", - "id": "def-public.FindingsBaseEsQuery", - "type": "Interface", - "tags": [], - "label": "FindingsBaseEsQuery", - "description": [], - "path": "x-pack/solutions/security/packages/kbn-cloud-security-posture/public/src/types.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/cloud-security-posture", - "id": "def-public.FindingsBaseEsQuery.query", - "type": "Object", - "tags": [], - "label": "query", - "description": [], - "signature": [ - "{ bool: ", - { - "pluginId": "@kbn/es-query", - "scope": "common", - "docId": "kibKbnEsQueryPluginApi", - "section": "def-common.BoolQuery", - "text": "BoolQuery" - }, - "; } | undefined" - ], - "path": "x-pack/solutions/security/packages/kbn-cloud-security-posture/public/src/types.ts", - "deprecated": false, - "trackAdoption": false - } - ], - "initialIsOpen": false - }, { "parentPluginId": "@kbn/cloud-security-posture", "id": "def-public.UseCspOptions", @@ -1266,6 +1266,69 @@ } ], "objects": [ + { + "parentPluginId": "@kbn/cloud-security-posture", + "id": "def-public.benchmarksNavigation", + "type": "Object", + "tags": [], + "label": "benchmarksNavigation", + "description": [], + "path": "x-pack/solutions/security/packages/kbn-cloud-security-posture/public/src/constants/navigation.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/cloud-security-posture", + "id": "def-public.benchmarksNavigation.rules", + "type": "Object", + "tags": [], + "label": "rules", + "description": [], + "path": "x-pack/solutions/security/packages/kbn-cloud-security-posture/public/src/constants/navigation.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/cloud-security-posture", + "id": "def-public.benchmarksNavigation.rules.name", + "type": "string", + "tags": [], + "label": "name", + "description": [], + "path": "x-pack/solutions/security/packages/kbn-cloud-security-posture/public/src/constants/navigation.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/cloud-security-posture", + "id": "def-public.benchmarksNavigation.rules.path", + "type": "string", + "tags": [], + "label": "path", + "description": [], + "path": "x-pack/solutions/security/packages/kbn-cloud-security-posture/public/src/constants/navigation.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/cloud-security-posture", + "id": "def-public.benchmarksNavigation.rules.id", + "type": "string", + "tags": [], + "label": "id", + "description": [], + "signature": [ + "\"cloud_security_posture-benchmarks-rules\"" + ], + "path": "x-pack/solutions/security/packages/kbn-cloud-security-posture/public/src/constants/navigation.ts", + "deprecated": false, + "trackAdoption": false + } + ] + } + ], + "initialIsOpen": false + }, { "parentPluginId": "@kbn/cloud-security-posture", "id": "def-public.findingsNavigation", diff --git a/api_docs/kbn_cloud_security_posture.mdx b/api_docs/kbn_cloud_security_posture.mdx index 3a3227bacd8fb..2e64596436cf5 100644 --- a/api_docs/kbn_cloud_security_posture.mdx +++ b/api_docs/kbn_cloud_security_posture.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cloud-security-posture title: "@kbn/cloud-security-posture" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cloud-security-posture plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cloud-security-posture'] --- import kbnCloudSecurityPostureObj from './kbn_cloud_security_posture.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-cloud-security-posture](https://github.com/orgs/elastic | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 92 | 1 | 92 | 0 | +| 97 | 1 | 97 | 0 | ## Client diff --git a/api_docs/kbn_cloud_security_posture_common.devdocs.json b/api_docs/kbn_cloud_security_posture_common.devdocs.json index 65d73399ea9d5..8431b01c05bfd 100644 --- a/api_docs/kbn_cloud_security_posture_common.devdocs.json +++ b/api_docs/kbn_cloud_security_posture_common.devdocs.json @@ -917,6 +917,101 @@ ], "initialIsOpen": false }, + { + "parentPluginId": "@kbn/cloud-security-posture-common", + "id": "def-common.CspNavigationItem", + "type": "Interface", + "tags": [], + "label": "CspNavigationItem", + "description": [], + "path": "x-pack/platform/packages/shared/kbn-cloud-security-posture/common/types/navigation.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/cloud-security-posture-common", + "id": "def-common.CspNavigationItem.name", + "type": "string", + "tags": [], + "label": "name", + "description": [], + "path": "x-pack/platform/packages/shared/kbn-cloud-security-posture/common/types/navigation.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/cloud-security-posture-common", + "id": "def-common.CspNavigationItem.path", + "type": "string", + "tags": [], + "label": "path", + "description": [], + "path": "x-pack/platform/packages/shared/kbn-cloud-security-posture/common/types/navigation.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/cloud-security-posture-common", + "id": "def-common.CspNavigationItem.disabled", + "type": "CompoundType", + "tags": [], + "label": "disabled", + "description": [], + "signature": [ + "boolean | undefined" + ], + "path": "x-pack/platform/packages/shared/kbn-cloud-security-posture/common/types/navigation.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/cloud-security-posture-common", + "id": "def-common.CspPageNavigationItem", + "type": "Interface", + "tags": [], + "label": "CspPageNavigationItem", + "description": [], + "signature": [ + { + "pluginId": "@kbn/cloud-security-posture-common", + "scope": "common", + "docId": "kibKbnCloudSecurityPostureCommonPluginApi", + "section": "def-common.CspPageNavigationItem", + "text": "CspPageNavigationItem" + }, + " extends ", + { + "pluginId": "@kbn/cloud-security-posture-common", + "scope": "common", + "docId": "kibKbnCloudSecurityPostureCommonPluginApi", + "section": "def-common.CspNavigationItem", + "text": "CspNavigationItem" + } + ], + "path": "x-pack/platform/packages/shared/kbn-cloud-security-posture/common/types/navigation.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/cloud-security-posture-common", + "id": "def-common.CspPageNavigationItem.id", + "type": "CompoundType", + "tags": [], + "label": "id", + "description": [], + "signature": [ + "\"cloud_security_posture-dashboard\" | \"cloud_security_posture-cspm-dashboard\" | \"cloud_security_posture-kspm-dashboard\" | \"cloud_security_posture-vulnerability_dashboard\" | \"cloud_security_posture-findings\" | \"cloud_security_posture-benchmarks\" | \"cloud_security_posture-benchmarks-rules\"" + ], + "path": "x-pack/platform/packages/shared/kbn-cloud-security-posture/common/types/navigation.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, { "parentPluginId": "@kbn/cloud-security-posture-common", "id": "def-common.CspVulnerabilityFinding", @@ -1335,6 +1430,36 @@ ], "enums": [], "misc": [ + { + "parentPluginId": "@kbn/cloud-security-posture-common", + "id": "def-common.BenchmarkId", + "type": "Type", + "tags": [], + "label": "BenchmarkId", + "description": [], + "signature": [ + "string" + ], + "path": "x-pack/platform/packages/shared/kbn-cloud-security-posture/common/types/types_old.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/cloud-security-posture-common", + "id": "def-common.BenchmarkName", + "type": "Type", + "tags": [], + "label": "BenchmarkName", + "description": [], + "signature": [ + "string" + ], + "path": "x-pack/platform/packages/shared/kbn-cloud-security-posture/common/types/types_old.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/cloud-security-posture-common", "id": "def-common.BenchmarksCisId", @@ -1496,6 +1621,21 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "@kbn/cloud-security-posture-common", + "id": "def-common.CloudSecurityPosturePageId", + "type": "Type", + "tags": [], + "label": "CloudSecurityPosturePageId", + "description": [], + "signature": [ + "\"cloud_security_posture-dashboard\" | \"cloud_security_posture-cspm-dashboard\" | \"cloud_security_posture-kspm-dashboard\" | \"cloud_security_posture-vulnerability_dashboard\" | \"cloud_security_posture-findings\" | \"cloud_security_posture-benchmarks\" | \"cloud_security_posture-benchmarks-rules\"" + ], + "path": "x-pack/platform/packages/shared/kbn-cloud-security-posture/common/types/navigation.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/cloud-security-posture-common", "id": "def-common.CSP_GET_BENCHMARK_RULES_STATE_API_CURRENT_VERSION", @@ -1526,6 +1666,51 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "@kbn/cloud-security-posture-common", + "id": "def-common.CSP_MISCONFIGURATIONS_DATASET", + "type": "string", + "tags": [], + "label": "CSP_MISCONFIGURATIONS_DATASET", + "description": [], + "signature": [ + "\"cloud_security_posture.findings\"" + ], + "path": "x-pack/platform/packages/shared/kbn-cloud-security-posture/common/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/cloud-security-posture-common", + "id": "def-common.CSP_MOMENT_FORMAT", + "type": "string", + "tags": [], + "label": "CSP_MOMENT_FORMAT", + "description": [], + "signature": [ + "\"MMMM D, YYYY @ HH:mm:ss.SSS\"" + ], + "path": "x-pack/platform/packages/shared/kbn-cloud-security-posture/common/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/cloud-security-posture-common", + "id": "def-common.CspBenchmarksPage", + "type": "Type", + "tags": [], + "label": "CspBenchmarksPage", + "description": [], + "signature": [ + "\"rules\"" + ], + "path": "x-pack/platform/packages/shared/kbn-cloud-security-posture/common/types/navigation.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/cloud-security-posture-common", "id": "def-common.CSPM_POLICY_TEMPLATE", @@ -1729,6 +1914,21 @@ } ], "objects": [ + { + "parentPluginId": "@kbn/cloud-security-posture-common", + "id": "def-common.INTERNAL_FEATURE_FLAGS", + "type": "Object", + "tags": [], + "label": "INTERNAL_FEATURE_FLAGS", + "description": [], + "signature": [ + "{ readonly showManageRulesMock: false; readonly showFindingFlyoutEvidence: true; }" + ], + "path": "x-pack/platform/packages/shared/kbn-cloud-security-posture/common/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/cloud-security-posture-common", "id": "def-common.MISCONFIGURATION_STATUS", diff --git a/api_docs/kbn_cloud_security_posture_common.mdx b/api_docs/kbn_cloud_security_posture_common.mdx index 0bdd4cec0e00a..a8ba4d855dde5 100644 --- a/api_docs/kbn_cloud_security_posture_common.mdx +++ b/api_docs/kbn_cloud_security_posture_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cloud-security-posture-common title: "@kbn/cloud-security-posture-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cloud-security-posture-common plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cloud-security-posture-common'] --- import kbnCloudSecurityPostureCommonObj from './kbn_cloud_security_posture_common.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-cloud-security-posture](https://github.com/orgs/elastic | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 124 | 0 | 122 | 2 | +| 137 | 0 | 135 | 2 | ## Common diff --git a/api_docs/kbn_cloud_security_posture_graph.mdx b/api_docs/kbn_cloud_security_posture_graph.mdx index 3826c43ff61b4..116e5dd253d51 100644 --- a/api_docs/kbn_cloud_security_posture_graph.mdx +++ b/api_docs/kbn_cloud_security_posture_graph.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cloud-security-posture-graph title: "@kbn/cloud-security-posture-graph" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cloud-security-posture-graph plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cloud-security-posture-graph'] --- import kbnCloudSecurityPostureGraphObj from './kbn_cloud_security_posture_graph.devdocs.json'; diff --git a/api_docs/kbn_code_editor.mdx b/api_docs/kbn_code_editor.mdx index b6e3d9db31337..324a2d8ded2bc 100644 --- a/api_docs/kbn_code_editor.mdx +++ b/api_docs/kbn_code_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-editor title: "@kbn/code-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-editor plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-editor'] --- import kbnCodeEditorObj from './kbn_code_editor.devdocs.json'; diff --git a/api_docs/kbn_code_editor_mock.mdx b/api_docs/kbn_code_editor_mock.mdx index b0634f87c97d0..74c6df6be9aca 100644 --- a/api_docs/kbn_code_editor_mock.mdx +++ b/api_docs/kbn_code_editor_mock.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-editor-mock title: "@kbn/code-editor-mock" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-editor-mock plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-editor-mock'] --- import kbnCodeEditorMockObj from './kbn_code_editor_mock.devdocs.json'; diff --git a/api_docs/kbn_code_owners.mdx b/api_docs/kbn_code_owners.mdx index 81faa05959141..ac38fbb48f8e7 100644 --- a/api_docs/kbn_code_owners.mdx +++ b/api_docs/kbn_code_owners.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-code-owners title: "@kbn/code-owners" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/code-owners plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/code-owners'] --- import kbnCodeOwnersObj from './kbn_code_owners.devdocs.json'; diff --git a/api_docs/kbn_coloring.mdx b/api_docs/kbn_coloring.mdx index aaf76e628f5b7..2db36754bc9dd 100644 --- a/api_docs/kbn_coloring.mdx +++ b/api_docs/kbn_coloring.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-coloring title: "@kbn/coloring" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/coloring plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/coloring'] --- import kbnColoringObj from './kbn_coloring.devdocs.json'; diff --git a/api_docs/kbn_config.mdx b/api_docs/kbn_config.mdx index 57a0a7c8d3400..c4672862b7109 100644 --- a/api_docs/kbn_config.mdx +++ b/api_docs/kbn_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config title: "@kbn/config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/config'] --- import kbnConfigObj from './kbn_config.devdocs.json'; diff --git a/api_docs/kbn_config_mocks.mdx b/api_docs/kbn_config_mocks.mdx index 06d0e27e0b746..6fedbf3ace407 100644 --- a/api_docs/kbn_config_mocks.mdx +++ b/api_docs/kbn_config_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config-mocks title: "@kbn/config-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config-mocks plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/config-mocks'] --- import kbnConfigMocksObj from './kbn_config_mocks.devdocs.json'; diff --git a/api_docs/kbn_config_schema.mdx b/api_docs/kbn_config_schema.mdx index b546b5573a335..4f6ab2b75ca88 100644 --- a/api_docs/kbn_config_schema.mdx +++ b/api_docs/kbn_config_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-config-schema title: "@kbn/config-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/config-schema plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/config-schema'] --- import kbnConfigSchemaObj from './kbn_config_schema.devdocs.json'; diff --git a/api_docs/kbn_content_management_content_editor.mdx b/api_docs/kbn_content_management_content_editor.mdx index c371450cdeb63..bf08a892f267d 100644 --- a/api_docs/kbn_content_management_content_editor.mdx +++ b/api_docs/kbn_content_management_content_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-content-editor title: "@kbn/content-management-content-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-content-editor plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-content-editor'] --- import kbnContentManagementContentEditorObj from './kbn_content_management_content_editor.devdocs.json'; diff --git a/api_docs/kbn_content_management_content_insights_public.mdx b/api_docs/kbn_content_management_content_insights_public.mdx index fb085f0d2ad10..0e90b7a5f401b 100644 --- a/api_docs/kbn_content_management_content_insights_public.mdx +++ b/api_docs/kbn_content_management_content_insights_public.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-content-insights-public title: "@kbn/content-management-content-insights-public" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-content-insights-public plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-content-insights-public'] --- import kbnContentManagementContentInsightsPublicObj from './kbn_content_management_content_insights_public.devdocs.json'; diff --git a/api_docs/kbn_content_management_content_insights_server.mdx b/api_docs/kbn_content_management_content_insights_server.mdx index 0f8b3aedc6240..b521c772a1ce8 100644 --- a/api_docs/kbn_content_management_content_insights_server.mdx +++ b/api_docs/kbn_content_management_content_insights_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-content-insights-server title: "@kbn/content-management-content-insights-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-content-insights-server plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-content-insights-server'] --- import kbnContentManagementContentInsightsServerObj from './kbn_content_management_content_insights_server.devdocs.json'; diff --git a/api_docs/kbn_content_management_favorites_common.mdx b/api_docs/kbn_content_management_favorites_common.mdx index 02bcd5313257c..b8146f319f08d 100644 --- a/api_docs/kbn_content_management_favorites_common.mdx +++ b/api_docs/kbn_content_management_favorites_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-favorites-common title: "@kbn/content-management-favorites-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-favorites-common plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-favorites-common'] --- import kbnContentManagementFavoritesCommonObj from './kbn_content_management_favorites_common.devdocs.json'; diff --git a/api_docs/kbn_content_management_favorites_public.mdx b/api_docs/kbn_content_management_favorites_public.mdx index 9208272db63f0..5b8d2bfa7bd54 100644 --- a/api_docs/kbn_content_management_favorites_public.mdx +++ b/api_docs/kbn_content_management_favorites_public.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-favorites-public title: "@kbn/content-management-favorites-public" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-favorites-public plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-favorites-public'] --- import kbnContentManagementFavoritesPublicObj from './kbn_content_management_favorites_public.devdocs.json'; diff --git a/api_docs/kbn_content_management_favorites_server.mdx b/api_docs/kbn_content_management_favorites_server.mdx index e41fc0dd53098..af5e56fae8afc 100644 --- a/api_docs/kbn_content_management_favorites_server.mdx +++ b/api_docs/kbn_content_management_favorites_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-favorites-server title: "@kbn/content-management-favorites-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-favorites-server plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-favorites-server'] --- import kbnContentManagementFavoritesServerObj from './kbn_content_management_favorites_server.devdocs.json'; diff --git a/api_docs/kbn_content_management_tabbed_table_list_view.mdx b/api_docs/kbn_content_management_tabbed_table_list_view.mdx index 1182c5faf87e7..f50392328b3e9 100644 --- a/api_docs/kbn_content_management_tabbed_table_list_view.mdx +++ b/api_docs/kbn_content_management_tabbed_table_list_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-tabbed-table-list-view title: "@kbn/content-management-tabbed-table-list-view" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-tabbed-table-list-view plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-tabbed-table-list-view'] --- import kbnContentManagementTabbedTableListViewObj from './kbn_content_management_tabbed_table_list_view.devdocs.json'; diff --git a/api_docs/kbn_content_management_table_list_view.mdx b/api_docs/kbn_content_management_table_list_view.mdx index d37b8ae4698bb..ad1a4f240859c 100644 --- a/api_docs/kbn_content_management_table_list_view.mdx +++ b/api_docs/kbn_content_management_table_list_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list-view title: "@kbn/content-management-table-list-view" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list-view plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list-view'] --- import kbnContentManagementTableListViewObj from './kbn_content_management_table_list_view.devdocs.json'; diff --git a/api_docs/kbn_content_management_table_list_view_common.mdx b/api_docs/kbn_content_management_table_list_view_common.mdx index 197690cbe3774..c7476febc9f3e 100644 --- a/api_docs/kbn_content_management_table_list_view_common.mdx +++ b/api_docs/kbn_content_management_table_list_view_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list-view-common title: "@kbn/content-management-table-list-view-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list-view-common plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list-view-common'] --- import kbnContentManagementTableListViewCommonObj from './kbn_content_management_table_list_view_common.devdocs.json'; diff --git a/api_docs/kbn_content_management_table_list_view_table.mdx b/api_docs/kbn_content_management_table_list_view_table.mdx index 800929722c6ac..e69e7a74870ee 100644 --- a/api_docs/kbn_content_management_table_list_view_table.mdx +++ b/api_docs/kbn_content_management_table_list_view_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-table-list-view-table title: "@kbn/content-management-table-list-view-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-table-list-view-table plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-table-list-view-table'] --- import kbnContentManagementTableListViewTableObj from './kbn_content_management_table_list_view_table.devdocs.json'; diff --git a/api_docs/kbn_content_management_user_profiles.mdx b/api_docs/kbn_content_management_user_profiles.mdx index 0e8da77e55450..49af1fbf99d22 100644 --- a/api_docs/kbn_content_management_user_profiles.mdx +++ b/api_docs/kbn_content_management_user_profiles.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-user-profiles title: "@kbn/content-management-user-profiles" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-user-profiles plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-user-profiles'] --- import kbnContentManagementUserProfilesObj from './kbn_content_management_user_profiles.devdocs.json'; diff --git a/api_docs/kbn_content_management_utils.mdx b/api_docs/kbn_content_management_utils.mdx index ca3218a9c7a05..ae58f973f2528 100644 --- a/api_docs/kbn_content_management_utils.mdx +++ b/api_docs/kbn_content_management_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-content-management-utils title: "@kbn/content-management-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/content-management-utils plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/content-management-utils'] --- import kbnContentManagementUtilsObj from './kbn_content_management_utils.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_browser.mdx b/api_docs/kbn_core_analytics_browser.mdx index b395f1f793753..3cf7b6471dede 100644 --- a/api_docs/kbn_core_analytics_browser.mdx +++ b/api_docs/kbn_core_analytics_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser title: "@kbn/core-analytics-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-browser'] --- import kbnCoreAnalyticsBrowserObj from './kbn_core_analytics_browser.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_browser_internal.mdx b/api_docs/kbn_core_analytics_browser_internal.mdx index 73eed7e72858d..eacfff8f2478e 100644 --- a/api_docs/kbn_core_analytics_browser_internal.mdx +++ b/api_docs/kbn_core_analytics_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser-internal title: "@kbn/core-analytics-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser-internal plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-browser-internal'] --- import kbnCoreAnalyticsBrowserInternalObj from './kbn_core_analytics_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_browser_mocks.mdx b/api_docs/kbn_core_analytics_browser_mocks.mdx index 0ed04f7a715ad..76e9120e5fd01 100644 --- a/api_docs/kbn_core_analytics_browser_mocks.mdx +++ b/api_docs/kbn_core_analytics_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-browser-mocks title: "@kbn/core-analytics-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-browser-mocks plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-browser-mocks'] --- import kbnCoreAnalyticsBrowserMocksObj from './kbn_core_analytics_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_server.mdx b/api_docs/kbn_core_analytics_server.mdx index c842431853e0d..0180811c79907 100644 --- a/api_docs/kbn_core_analytics_server.mdx +++ b/api_docs/kbn_core_analytics_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server title: "@kbn/core-analytics-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-server'] --- import kbnCoreAnalyticsServerObj from './kbn_core_analytics_server.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_server_internal.mdx b/api_docs/kbn_core_analytics_server_internal.mdx index 5ee4d1067bd19..e8b9e9390655d 100644 --- a/api_docs/kbn_core_analytics_server_internal.mdx +++ b/api_docs/kbn_core_analytics_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server-internal title: "@kbn/core-analytics-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server-internal plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-server-internal'] --- import kbnCoreAnalyticsServerInternalObj from './kbn_core_analytics_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_analytics_server_mocks.mdx b/api_docs/kbn_core_analytics_server_mocks.mdx index 3c6ad716afacf..b24d6082827b8 100644 --- a/api_docs/kbn_core_analytics_server_mocks.mdx +++ b/api_docs/kbn_core_analytics_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-analytics-server-mocks title: "@kbn/core-analytics-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-analytics-server-mocks plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-analytics-server-mocks'] --- import kbnCoreAnalyticsServerMocksObj from './kbn_core_analytics_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_application_browser.mdx b/api_docs/kbn_core_application_browser.mdx index 8f76a268dfdc6..6c9c0294d6266 100644 --- a/api_docs/kbn_core_application_browser.mdx +++ b/api_docs/kbn_core_application_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser title: "@kbn/core-application-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-application-browser'] --- import kbnCoreApplicationBrowserObj from './kbn_core_application_browser.devdocs.json'; diff --git a/api_docs/kbn_core_application_browser_internal.mdx b/api_docs/kbn_core_application_browser_internal.mdx index cbd20e4c2f77a..91269a72f0d58 100644 --- a/api_docs/kbn_core_application_browser_internal.mdx +++ b/api_docs/kbn_core_application_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser-internal title: "@kbn/core-application-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser-internal plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-application-browser-internal'] --- import kbnCoreApplicationBrowserInternalObj from './kbn_core_application_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_application_browser_mocks.mdx b/api_docs/kbn_core_application_browser_mocks.mdx index 2566c31a81034..28ea1ef540095 100644 --- a/api_docs/kbn_core_application_browser_mocks.mdx +++ b/api_docs/kbn_core_application_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-browser-mocks title: "@kbn/core-application-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-browser-mocks plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-application-browser-mocks'] --- import kbnCoreApplicationBrowserMocksObj from './kbn_core_application_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_application_common.mdx b/api_docs/kbn_core_application_common.mdx index a4fb325fd639d..310ebca05c44c 100644 --- a/api_docs/kbn_core_application_common.mdx +++ b/api_docs/kbn_core_application_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-application-common title: "@kbn/core-application-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-application-common plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-application-common'] --- import kbnCoreApplicationCommonObj from './kbn_core_application_common.devdocs.json'; diff --git a/api_docs/kbn_core_apps_browser_internal.mdx b/api_docs/kbn_core_apps_browser_internal.mdx index 871e1a7dddd71..5ba642250cb71 100644 --- a/api_docs/kbn_core_apps_browser_internal.mdx +++ b/api_docs/kbn_core_apps_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-browser-internal title: "@kbn/core-apps-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-browser-internal plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-apps-browser-internal'] --- import kbnCoreAppsBrowserInternalObj from './kbn_core_apps_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_apps_browser_mocks.mdx b/api_docs/kbn_core_apps_browser_mocks.mdx index f839cbaa21521..82d65111ee93d 100644 --- a/api_docs/kbn_core_apps_browser_mocks.mdx +++ b/api_docs/kbn_core_apps_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-browser-mocks title: "@kbn/core-apps-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-browser-mocks plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-apps-browser-mocks'] --- import kbnCoreAppsBrowserMocksObj from './kbn_core_apps_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_apps_server_internal.mdx b/api_docs/kbn_core_apps_server_internal.mdx index f1c54de585ba7..a1ea401f13027 100644 --- a/api_docs/kbn_core_apps_server_internal.mdx +++ b/api_docs/kbn_core_apps_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-apps-server-internal title: "@kbn/core-apps-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-apps-server-internal plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-apps-server-internal'] --- import kbnCoreAppsServerInternalObj from './kbn_core_apps_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_base_browser_mocks.mdx b/api_docs/kbn_core_base_browser_mocks.mdx index b2c9ad1804ed0..6e4cc8aa2c137 100644 --- a/api_docs/kbn_core_base_browser_mocks.mdx +++ b/api_docs/kbn_core_base_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-browser-mocks title: "@kbn/core-base-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-browser-mocks plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-base-browser-mocks'] --- import kbnCoreBaseBrowserMocksObj from './kbn_core_base_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_base_common.mdx b/api_docs/kbn_core_base_common.mdx index 9e9e5fceb9db9..af1118f185b4e 100644 --- a/api_docs/kbn_core_base_common.mdx +++ b/api_docs/kbn_core_base_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-common title: "@kbn/core-base-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-common plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-base-common'] --- import kbnCoreBaseCommonObj from './kbn_core_base_common.devdocs.json'; diff --git a/api_docs/kbn_core_base_server_internal.mdx b/api_docs/kbn_core_base_server_internal.mdx index 1190f28d911cf..a6be6b2dfef26 100644 --- a/api_docs/kbn_core_base_server_internal.mdx +++ b/api_docs/kbn_core_base_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-server-internal title: "@kbn/core-base-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-server-internal plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-base-server-internal'] --- import kbnCoreBaseServerInternalObj from './kbn_core_base_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_base_server_mocks.mdx b/api_docs/kbn_core_base_server_mocks.mdx index 6d348f49d4fe5..87a62caabc732 100644 --- a/api_docs/kbn_core_base_server_mocks.mdx +++ b/api_docs/kbn_core_base_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-base-server-mocks title: "@kbn/core-base-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-base-server-mocks plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-base-server-mocks'] --- import kbnCoreBaseServerMocksObj from './kbn_core_base_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_capabilities_browser_mocks.mdx b/api_docs/kbn_core_capabilities_browser_mocks.mdx index ceef4ac090399..6b571778d257e 100644 --- a/api_docs/kbn_core_capabilities_browser_mocks.mdx +++ b/api_docs/kbn_core_capabilities_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-browser-mocks title: "@kbn/core-capabilities-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-browser-mocks plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-capabilities-browser-mocks'] --- import kbnCoreCapabilitiesBrowserMocksObj from './kbn_core_capabilities_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_capabilities_common.mdx b/api_docs/kbn_core_capabilities_common.mdx index 9d7d15712723c..97dca24f22592 100644 --- a/api_docs/kbn_core_capabilities_common.mdx +++ b/api_docs/kbn_core_capabilities_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-common title: "@kbn/core-capabilities-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-common plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-capabilities-common'] --- import kbnCoreCapabilitiesCommonObj from './kbn_core_capabilities_common.devdocs.json'; diff --git a/api_docs/kbn_core_capabilities_server.mdx b/api_docs/kbn_core_capabilities_server.mdx index 9799b3db3e70b..a73580fd52bfd 100644 --- a/api_docs/kbn_core_capabilities_server.mdx +++ b/api_docs/kbn_core_capabilities_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-server title: "@kbn/core-capabilities-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-server plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-capabilities-server'] --- import kbnCoreCapabilitiesServerObj from './kbn_core_capabilities_server.devdocs.json'; diff --git a/api_docs/kbn_core_capabilities_server_mocks.mdx b/api_docs/kbn_core_capabilities_server_mocks.mdx index 844ea39ab4d98..e17ac05ba9bda 100644 --- a/api_docs/kbn_core_capabilities_server_mocks.mdx +++ b/api_docs/kbn_core_capabilities_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-capabilities-server-mocks title: "@kbn/core-capabilities-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-capabilities-server-mocks plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-capabilities-server-mocks'] --- import kbnCoreCapabilitiesServerMocksObj from './kbn_core_capabilities_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_chrome_browser.mdx b/api_docs/kbn_core_chrome_browser.mdx index 5851eabe2d711..8a82bcb364bb2 100644 --- a/api_docs/kbn_core_chrome_browser.mdx +++ b/api_docs/kbn_core_chrome_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-chrome-browser title: "@kbn/core-chrome-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-chrome-browser plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-chrome-browser'] --- import kbnCoreChromeBrowserObj from './kbn_core_chrome_browser.devdocs.json'; diff --git a/api_docs/kbn_core_chrome_browser_mocks.mdx b/api_docs/kbn_core_chrome_browser_mocks.mdx index acdbd8d313d37..1bf0de04509f8 100644 --- a/api_docs/kbn_core_chrome_browser_mocks.mdx +++ b/api_docs/kbn_core_chrome_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-chrome-browser-mocks title: "@kbn/core-chrome-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-chrome-browser-mocks plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-chrome-browser-mocks'] --- import kbnCoreChromeBrowserMocksObj from './kbn_core_chrome_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_config_server_internal.mdx b/api_docs/kbn_core_config_server_internal.mdx index 782c7f0839b5c..d30371110cc33 100644 --- a/api_docs/kbn_core_config_server_internal.mdx +++ b/api_docs/kbn_core_config_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-config-server-internal title: "@kbn/core-config-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-config-server-internal plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-config-server-internal'] --- import kbnCoreConfigServerInternalObj from './kbn_core_config_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_browser.mdx b/api_docs/kbn_core_custom_branding_browser.mdx index 870096590603a..de48ec6af4abb 100644 --- a/api_docs/kbn_core_custom_branding_browser.mdx +++ b/api_docs/kbn_core_custom_branding_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser title: "@kbn/core-custom-branding-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-browser'] --- import kbnCoreCustomBrandingBrowserObj from './kbn_core_custom_branding_browser.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_browser_internal.mdx b/api_docs/kbn_core_custom_branding_browser_internal.mdx index 7e477f6bf7285..c5143acd31cbf 100644 --- a/api_docs/kbn_core_custom_branding_browser_internal.mdx +++ b/api_docs/kbn_core_custom_branding_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser-internal title: "@kbn/core-custom-branding-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser-internal plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-browser-internal'] --- import kbnCoreCustomBrandingBrowserInternalObj from './kbn_core_custom_branding_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_browser_mocks.mdx b/api_docs/kbn_core_custom_branding_browser_mocks.mdx index 43a897d78d212..6809119dbb45e 100644 --- a/api_docs/kbn_core_custom_branding_browser_mocks.mdx +++ b/api_docs/kbn_core_custom_branding_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-browser-mocks title: "@kbn/core-custom-branding-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-browser-mocks plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-browser-mocks'] --- import kbnCoreCustomBrandingBrowserMocksObj from './kbn_core_custom_branding_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_common.mdx b/api_docs/kbn_core_custom_branding_common.mdx index 4fe4cd037c2b3..37cb995d0c140 100644 --- a/api_docs/kbn_core_custom_branding_common.mdx +++ b/api_docs/kbn_core_custom_branding_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-common title: "@kbn/core-custom-branding-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-common plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-common'] --- import kbnCoreCustomBrandingCommonObj from './kbn_core_custom_branding_common.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_server.mdx b/api_docs/kbn_core_custom_branding_server.mdx index 7406739c20a2f..a541c8af0c389 100644 --- a/api_docs/kbn_core_custom_branding_server.mdx +++ b/api_docs/kbn_core_custom_branding_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server title: "@kbn/core-custom-branding-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-server'] --- import kbnCoreCustomBrandingServerObj from './kbn_core_custom_branding_server.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_server_internal.mdx b/api_docs/kbn_core_custom_branding_server_internal.mdx index 3639df74a52db..009876afc7b26 100644 --- a/api_docs/kbn_core_custom_branding_server_internal.mdx +++ b/api_docs/kbn_core_custom_branding_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server-internal title: "@kbn/core-custom-branding-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server-internal plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-server-internal'] --- import kbnCoreCustomBrandingServerInternalObj from './kbn_core_custom_branding_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_custom_branding_server_mocks.mdx b/api_docs/kbn_core_custom_branding_server_mocks.mdx index ec1964f968281..a6c0693afb8bd 100644 --- a/api_docs/kbn_core_custom_branding_server_mocks.mdx +++ b/api_docs/kbn_core_custom_branding_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-custom-branding-server-mocks title: "@kbn/core-custom-branding-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-custom-branding-server-mocks plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-custom-branding-server-mocks'] --- import kbnCoreCustomBrandingServerMocksObj from './kbn_core_custom_branding_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_browser.mdx b/api_docs/kbn_core_deprecations_browser.mdx index 75963be724f4c..ca0a1f9ad0da2 100644 --- a/api_docs/kbn_core_deprecations_browser.mdx +++ b/api_docs/kbn_core_deprecations_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser title: "@kbn/core-deprecations-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-browser'] --- import kbnCoreDeprecationsBrowserObj from './kbn_core_deprecations_browser.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_browser_internal.mdx b/api_docs/kbn_core_deprecations_browser_internal.mdx index c8c573d43936f..55b7c34722f84 100644 --- a/api_docs/kbn_core_deprecations_browser_internal.mdx +++ b/api_docs/kbn_core_deprecations_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser-internal title: "@kbn/core-deprecations-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser-internal plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-browser-internal'] --- import kbnCoreDeprecationsBrowserInternalObj from './kbn_core_deprecations_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_browser_mocks.mdx b/api_docs/kbn_core_deprecations_browser_mocks.mdx index b078e30f2e159..7d2bda828b3bf 100644 --- a/api_docs/kbn_core_deprecations_browser_mocks.mdx +++ b/api_docs/kbn_core_deprecations_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-browser-mocks title: "@kbn/core-deprecations-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-browser-mocks plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-browser-mocks'] --- import kbnCoreDeprecationsBrowserMocksObj from './kbn_core_deprecations_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_common.mdx b/api_docs/kbn_core_deprecations_common.mdx index 8913931caa196..c36b5674a66c0 100644 --- a/api_docs/kbn_core_deprecations_common.mdx +++ b/api_docs/kbn_core_deprecations_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-common title: "@kbn/core-deprecations-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-common plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-common'] --- import kbnCoreDeprecationsCommonObj from './kbn_core_deprecations_common.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_server.mdx b/api_docs/kbn_core_deprecations_server.mdx index e0bf51fe1ef81..261bd897d4853 100644 --- a/api_docs/kbn_core_deprecations_server.mdx +++ b/api_docs/kbn_core_deprecations_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server title: "@kbn/core-deprecations-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-server'] --- import kbnCoreDeprecationsServerObj from './kbn_core_deprecations_server.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_server_internal.mdx b/api_docs/kbn_core_deprecations_server_internal.mdx index 5749b5280ca40..f9c7bcea8b291 100644 --- a/api_docs/kbn_core_deprecations_server_internal.mdx +++ b/api_docs/kbn_core_deprecations_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server-internal title: "@kbn/core-deprecations-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server-internal plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-server-internal'] --- import kbnCoreDeprecationsServerInternalObj from './kbn_core_deprecations_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_deprecations_server_mocks.mdx b/api_docs/kbn_core_deprecations_server_mocks.mdx index 4823864a28676..bf12653881037 100644 --- a/api_docs/kbn_core_deprecations_server_mocks.mdx +++ b/api_docs/kbn_core_deprecations_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-deprecations-server-mocks title: "@kbn/core-deprecations-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-deprecations-server-mocks plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-deprecations-server-mocks'] --- import kbnCoreDeprecationsServerMocksObj from './kbn_core_deprecations_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_doc_links_browser.mdx b/api_docs/kbn_core_doc_links_browser.mdx index aa5ffb6b99b03..e9d56750e04c5 100644 --- a/api_docs/kbn_core_doc_links_browser.mdx +++ b/api_docs/kbn_core_doc_links_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-browser title: "@kbn/core-doc-links-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-browser plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-doc-links-browser'] --- import kbnCoreDocLinksBrowserObj from './kbn_core_doc_links_browser.devdocs.json'; diff --git a/api_docs/kbn_core_doc_links_browser_mocks.mdx b/api_docs/kbn_core_doc_links_browser_mocks.mdx index d83cfc743332b..8ba4d0c0d0ebf 100644 --- a/api_docs/kbn_core_doc_links_browser_mocks.mdx +++ b/api_docs/kbn_core_doc_links_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-browser-mocks title: "@kbn/core-doc-links-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-browser-mocks plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-doc-links-browser-mocks'] --- import kbnCoreDocLinksBrowserMocksObj from './kbn_core_doc_links_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_doc_links_server.mdx b/api_docs/kbn_core_doc_links_server.mdx index 8d42a0d22fbbd..18096b46dd37d 100644 --- a/api_docs/kbn_core_doc_links_server.mdx +++ b/api_docs/kbn_core_doc_links_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-server title: "@kbn/core-doc-links-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-server plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-doc-links-server'] --- import kbnCoreDocLinksServerObj from './kbn_core_doc_links_server.devdocs.json'; diff --git a/api_docs/kbn_core_doc_links_server_mocks.mdx b/api_docs/kbn_core_doc_links_server_mocks.mdx index f19b9cd0edf8b..bf8a497b034e7 100644 --- a/api_docs/kbn_core_doc_links_server_mocks.mdx +++ b/api_docs/kbn_core_doc_links_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-doc-links-server-mocks title: "@kbn/core-doc-links-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-doc-links-server-mocks plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-doc-links-server-mocks'] --- import kbnCoreDocLinksServerMocksObj from './kbn_core_doc_links_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_elasticsearch_client_server_internal.mdx b/api_docs/kbn_core_elasticsearch_client_server_internal.mdx index ea972b75f0c71..6f7ddbf68d5b1 100644 --- a/api_docs/kbn_core_elasticsearch_client_server_internal.mdx +++ b/api_docs/kbn_core_elasticsearch_client_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-client-server-internal title: "@kbn/core-elasticsearch-client-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-client-server-internal plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-client-server-internal'] --- import kbnCoreElasticsearchClientServerInternalObj from './kbn_core_elasticsearch_client_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx b/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx index a0d17a3feffea..89479536898a7 100644 --- a/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx +++ b/api_docs/kbn_core_elasticsearch_client_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-client-server-mocks title: "@kbn/core-elasticsearch-client-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-client-server-mocks plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-client-server-mocks'] --- import kbnCoreElasticsearchClientServerMocksObj from './kbn_core_elasticsearch_client_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_elasticsearch_server.mdx b/api_docs/kbn_core_elasticsearch_server.mdx index fb9d69e3a54cc..13e1676ba30e2 100644 --- a/api_docs/kbn_core_elasticsearch_server.mdx +++ b/api_docs/kbn_core_elasticsearch_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server title: "@kbn/core-elasticsearch-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-server'] --- import kbnCoreElasticsearchServerObj from './kbn_core_elasticsearch_server.devdocs.json'; diff --git a/api_docs/kbn_core_elasticsearch_server_internal.mdx b/api_docs/kbn_core_elasticsearch_server_internal.mdx index f77f26f9fa283..dc7973cf95239 100644 --- a/api_docs/kbn_core_elasticsearch_server_internal.mdx +++ b/api_docs/kbn_core_elasticsearch_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server-internal title: "@kbn/core-elasticsearch-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server-internal plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-server-internal'] --- import kbnCoreElasticsearchServerInternalObj from './kbn_core_elasticsearch_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_elasticsearch_server_mocks.mdx b/api_docs/kbn_core_elasticsearch_server_mocks.mdx index 4d175bbe96247..dad7bd8ca6827 100644 --- a/api_docs/kbn_core_elasticsearch_server_mocks.mdx +++ b/api_docs/kbn_core_elasticsearch_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-elasticsearch-server-mocks title: "@kbn/core-elasticsearch-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-elasticsearch-server-mocks plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-elasticsearch-server-mocks'] --- import kbnCoreElasticsearchServerMocksObj from './kbn_core_elasticsearch_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_environment_server_internal.mdx b/api_docs/kbn_core_environment_server_internal.mdx index 173ea1e5a6c8b..2d1d887e2d507 100644 --- a/api_docs/kbn_core_environment_server_internal.mdx +++ b/api_docs/kbn_core_environment_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-environment-server-internal title: "@kbn/core-environment-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-environment-server-internal plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-environment-server-internal'] --- import kbnCoreEnvironmentServerInternalObj from './kbn_core_environment_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_environment_server_mocks.mdx b/api_docs/kbn_core_environment_server_mocks.mdx index 61087186bb53c..6e9b9fbc976f1 100644 --- a/api_docs/kbn_core_environment_server_mocks.mdx +++ b/api_docs/kbn_core_environment_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-environment-server-mocks title: "@kbn/core-environment-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-environment-server-mocks plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-environment-server-mocks'] --- import kbnCoreEnvironmentServerMocksObj from './kbn_core_environment_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_browser.mdx b/api_docs/kbn_core_execution_context_browser.mdx index 81ff10f28ce6e..9d0b23003a5a9 100644 --- a/api_docs/kbn_core_execution_context_browser.mdx +++ b/api_docs/kbn_core_execution_context_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser title: "@kbn/core-execution-context-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-browser'] --- import kbnCoreExecutionContextBrowserObj from './kbn_core_execution_context_browser.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_browser_internal.mdx b/api_docs/kbn_core_execution_context_browser_internal.mdx index 0a5330c04077b..31a7ed3a28ab4 100644 --- a/api_docs/kbn_core_execution_context_browser_internal.mdx +++ b/api_docs/kbn_core_execution_context_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser-internal title: "@kbn/core-execution-context-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser-internal plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-browser-internal'] --- import kbnCoreExecutionContextBrowserInternalObj from './kbn_core_execution_context_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_browser_mocks.mdx b/api_docs/kbn_core_execution_context_browser_mocks.mdx index 00521bb652502..1ed2eb7a3efbf 100644 --- a/api_docs/kbn_core_execution_context_browser_mocks.mdx +++ b/api_docs/kbn_core_execution_context_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-browser-mocks title: "@kbn/core-execution-context-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-browser-mocks plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-browser-mocks'] --- import kbnCoreExecutionContextBrowserMocksObj from './kbn_core_execution_context_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_common.mdx b/api_docs/kbn_core_execution_context_common.mdx index 9d96e450dc9a0..1eb78a894a1e5 100644 --- a/api_docs/kbn_core_execution_context_common.mdx +++ b/api_docs/kbn_core_execution_context_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-common title: "@kbn/core-execution-context-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-common plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-common'] --- import kbnCoreExecutionContextCommonObj from './kbn_core_execution_context_common.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_server.mdx b/api_docs/kbn_core_execution_context_server.mdx index 0f683149b6bd8..0c38fb5f9840c 100644 --- a/api_docs/kbn_core_execution_context_server.mdx +++ b/api_docs/kbn_core_execution_context_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server title: "@kbn/core-execution-context-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-server'] --- import kbnCoreExecutionContextServerObj from './kbn_core_execution_context_server.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_server_internal.mdx b/api_docs/kbn_core_execution_context_server_internal.mdx index 9401e859cd88e..c8aca6cd08461 100644 --- a/api_docs/kbn_core_execution_context_server_internal.mdx +++ b/api_docs/kbn_core_execution_context_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server-internal title: "@kbn/core-execution-context-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server-internal plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-server-internal'] --- import kbnCoreExecutionContextServerInternalObj from './kbn_core_execution_context_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_execution_context_server_mocks.mdx b/api_docs/kbn_core_execution_context_server_mocks.mdx index c2b8b6d5cb1ac..8625c6e9009b4 100644 --- a/api_docs/kbn_core_execution_context_server_mocks.mdx +++ b/api_docs/kbn_core_execution_context_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-execution-context-server-mocks title: "@kbn/core-execution-context-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-execution-context-server-mocks plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-execution-context-server-mocks'] --- import kbnCoreExecutionContextServerMocksObj from './kbn_core_execution_context_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_fatal_errors_browser.mdx b/api_docs/kbn_core_fatal_errors_browser.mdx index 41052a55f8535..527360fea15f6 100644 --- a/api_docs/kbn_core_fatal_errors_browser.mdx +++ b/api_docs/kbn_core_fatal_errors_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-fatal-errors-browser title: "@kbn/core-fatal-errors-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-fatal-errors-browser plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-fatal-errors-browser'] --- import kbnCoreFatalErrorsBrowserObj from './kbn_core_fatal_errors_browser.devdocs.json'; diff --git a/api_docs/kbn_core_fatal_errors_browser_mocks.mdx b/api_docs/kbn_core_fatal_errors_browser_mocks.mdx index cddf6f5c8e3c8..5b32845d80801 100644 --- a/api_docs/kbn_core_fatal_errors_browser_mocks.mdx +++ b/api_docs/kbn_core_fatal_errors_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-fatal-errors-browser-mocks title: "@kbn/core-fatal-errors-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-fatal-errors-browser-mocks plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-fatal-errors-browser-mocks'] --- import kbnCoreFatalErrorsBrowserMocksObj from './kbn_core_fatal_errors_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_feature_flags_browser.mdx b/api_docs/kbn_core_feature_flags_browser.mdx index fdbcf44db4900..b3428517eae4b 100644 --- a/api_docs/kbn_core_feature_flags_browser.mdx +++ b/api_docs/kbn_core_feature_flags_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-feature-flags-browser title: "@kbn/core-feature-flags-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-feature-flags-browser plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-feature-flags-browser'] --- import kbnCoreFeatureFlagsBrowserObj from './kbn_core_feature_flags_browser.devdocs.json'; diff --git a/api_docs/kbn_core_feature_flags_browser_internal.mdx b/api_docs/kbn_core_feature_flags_browser_internal.mdx index 7f462e475a6c2..8313e63ef2a72 100644 --- a/api_docs/kbn_core_feature_flags_browser_internal.mdx +++ b/api_docs/kbn_core_feature_flags_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-feature-flags-browser-internal title: "@kbn/core-feature-flags-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-feature-flags-browser-internal plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-feature-flags-browser-internal'] --- import kbnCoreFeatureFlagsBrowserInternalObj from './kbn_core_feature_flags_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_feature_flags_browser_mocks.mdx b/api_docs/kbn_core_feature_flags_browser_mocks.mdx index a13fd98303620..d52c6f3d25eca 100644 --- a/api_docs/kbn_core_feature_flags_browser_mocks.mdx +++ b/api_docs/kbn_core_feature_flags_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-feature-flags-browser-mocks title: "@kbn/core-feature-flags-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-feature-flags-browser-mocks plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-feature-flags-browser-mocks'] --- import kbnCoreFeatureFlagsBrowserMocksObj from './kbn_core_feature_flags_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_feature_flags_server.mdx b/api_docs/kbn_core_feature_flags_server.mdx index bc74a96f9294c..699bb7690ad09 100644 --- a/api_docs/kbn_core_feature_flags_server.mdx +++ b/api_docs/kbn_core_feature_flags_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-feature-flags-server title: "@kbn/core-feature-flags-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-feature-flags-server plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-feature-flags-server'] --- import kbnCoreFeatureFlagsServerObj from './kbn_core_feature_flags_server.devdocs.json'; diff --git a/api_docs/kbn_core_feature_flags_server_internal.mdx b/api_docs/kbn_core_feature_flags_server_internal.mdx index 2c995f5472051..3a9497a9bc81c 100644 --- a/api_docs/kbn_core_feature_flags_server_internal.mdx +++ b/api_docs/kbn_core_feature_flags_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-feature-flags-server-internal title: "@kbn/core-feature-flags-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-feature-flags-server-internal plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-feature-flags-server-internal'] --- import kbnCoreFeatureFlagsServerInternalObj from './kbn_core_feature_flags_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_feature_flags_server_mocks.mdx b/api_docs/kbn_core_feature_flags_server_mocks.mdx index d75e470cb0055..9a32e4989623e 100644 --- a/api_docs/kbn_core_feature_flags_server_mocks.mdx +++ b/api_docs/kbn_core_feature_flags_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-feature-flags-server-mocks title: "@kbn/core-feature-flags-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-feature-flags-server-mocks plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-feature-flags-server-mocks'] --- import kbnCoreFeatureFlagsServerMocksObj from './kbn_core_feature_flags_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_browser.mdx b/api_docs/kbn_core_http_browser.mdx index cfc58c2014381..73ec5c0b9b243 100644 --- a/api_docs/kbn_core_http_browser.mdx +++ b/api_docs/kbn_core_http_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser title: "@kbn/core-http-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-browser'] --- import kbnCoreHttpBrowserObj from './kbn_core_http_browser.devdocs.json'; diff --git a/api_docs/kbn_core_http_browser_internal.mdx b/api_docs/kbn_core_http_browser_internal.mdx index 2237a0d940ed3..2854d554fdea2 100644 --- a/api_docs/kbn_core_http_browser_internal.mdx +++ b/api_docs/kbn_core_http_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser-internal title: "@kbn/core-http-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser-internal plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-browser-internal'] --- import kbnCoreHttpBrowserInternalObj from './kbn_core_http_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_http_browser_mocks.mdx b/api_docs/kbn_core_http_browser_mocks.mdx index 7157b5de8261b..14e7d9798f44e 100644 --- a/api_docs/kbn_core_http_browser_mocks.mdx +++ b/api_docs/kbn_core_http_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-browser-mocks title: "@kbn/core-http-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-browser-mocks plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-browser-mocks'] --- import kbnCoreHttpBrowserMocksObj from './kbn_core_http_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_common.mdx b/api_docs/kbn_core_http_common.mdx index 3501b559c7cae..c33558f74607d 100644 --- a/api_docs/kbn_core_http_common.mdx +++ b/api_docs/kbn_core_http_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-common title: "@kbn/core-http-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-common plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-common'] --- import kbnCoreHttpCommonObj from './kbn_core_http_common.devdocs.json'; diff --git a/api_docs/kbn_core_http_context_server_mocks.mdx b/api_docs/kbn_core_http_context_server_mocks.mdx index 11f45423b155f..1430007065cae 100644 --- a/api_docs/kbn_core_http_context_server_mocks.mdx +++ b/api_docs/kbn_core_http_context_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-context-server-mocks title: "@kbn/core-http-context-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-context-server-mocks plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-context-server-mocks'] --- import kbnCoreHttpContextServerMocksObj from './kbn_core_http_context_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_request_handler_context_server.mdx b/api_docs/kbn_core_http_request_handler_context_server.mdx index 61048e1e8a34e..1a228c23e382a 100644 --- a/api_docs/kbn_core_http_request_handler_context_server.mdx +++ b/api_docs/kbn_core_http_request_handler_context_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-request-handler-context-server title: "@kbn/core-http-request-handler-context-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-request-handler-context-server plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-request-handler-context-server'] --- import kbnCoreHttpRequestHandlerContextServerObj from './kbn_core_http_request_handler_context_server.devdocs.json'; diff --git a/api_docs/kbn_core_http_resources_server.mdx b/api_docs/kbn_core_http_resources_server.mdx index 4ff45c02da6a9..1c7207fa24a1d 100644 --- a/api_docs/kbn_core_http_resources_server.mdx +++ b/api_docs/kbn_core_http_resources_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server title: "@kbn/core-http-resources-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-resources-server'] --- import kbnCoreHttpResourcesServerObj from './kbn_core_http_resources_server.devdocs.json'; diff --git a/api_docs/kbn_core_http_resources_server_internal.mdx b/api_docs/kbn_core_http_resources_server_internal.mdx index 4e6d6e26a33e1..6615b836f728f 100644 --- a/api_docs/kbn_core_http_resources_server_internal.mdx +++ b/api_docs/kbn_core_http_resources_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server-internal title: "@kbn/core-http-resources-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server-internal plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-resources-server-internal'] --- import kbnCoreHttpResourcesServerInternalObj from './kbn_core_http_resources_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_http_resources_server_mocks.mdx b/api_docs/kbn_core_http_resources_server_mocks.mdx index 68f1675d2d0e6..e3d6de00c9eff 100644 --- a/api_docs/kbn_core_http_resources_server_mocks.mdx +++ b/api_docs/kbn_core_http_resources_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-resources-server-mocks title: "@kbn/core-http-resources-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-resources-server-mocks plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-resources-server-mocks'] --- import kbnCoreHttpResourcesServerMocksObj from './kbn_core_http_resources_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_router_server_internal.mdx b/api_docs/kbn_core_http_router_server_internal.mdx index 5a2e88faa550f..db788ddc0626c 100644 --- a/api_docs/kbn_core_http_router_server_internal.mdx +++ b/api_docs/kbn_core_http_router_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-router-server-internal title: "@kbn/core-http-router-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-router-server-internal plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-router-server-internal'] --- import kbnCoreHttpRouterServerInternalObj from './kbn_core_http_router_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_http_router_server_mocks.mdx b/api_docs/kbn_core_http_router_server_mocks.mdx index 0a4b9d4432eac..042647b3df8da 100644 --- a/api_docs/kbn_core_http_router_server_mocks.mdx +++ b/api_docs/kbn_core_http_router_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-router-server-mocks title: "@kbn/core-http-router-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-router-server-mocks plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-router-server-mocks'] --- import kbnCoreHttpRouterServerMocksObj from './kbn_core_http_router_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_server.devdocs.json b/api_docs/kbn_core_http_server.devdocs.json index 414259a1c82c2..45088738219e6 100644 --- a/api_docs/kbn_core_http_server.devdocs.json +++ b/api_docs/kbn_core_http_server.devdocs.json @@ -13985,10 +13985,6 @@ "plugin": "ml", "path": "x-pack/platform/plugins/shared/ml/server/routes/anomaly_detectors.ts" }, - { - "plugin": "ml", - "path": "x-pack/platform/plugins/shared/ml/server/routes/inference_models.ts" - }, { "plugin": "lists", "path": "x-pack/solutions/security/plugins/lists/server/routes/update_endpoint_list_item_route.ts" @@ -14324,6 +14320,10 @@ "plugin": "fileUpload", "path": "x-pack/platform/plugins/private/file_upload/server/routes.ts" }, + { + "plugin": "fileUpload", + "path": "x-pack/platform/plugins/private/file_upload/server/routes.ts" + }, { "plugin": "telemetry", "path": "src/platform/plugins/shared/telemetry/server/routes/telemetry_opt_in_stats.ts" diff --git a/api_docs/kbn_core_http_server.mdx b/api_docs/kbn_core_http_server.mdx index 48e2c367610fb..895e2079dee6e 100644 --- a/api_docs/kbn_core_http_server.mdx +++ b/api_docs/kbn_core_http_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server title: "@kbn/core-http-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-server'] --- import kbnCoreHttpServerObj from './kbn_core_http_server.devdocs.json'; diff --git a/api_docs/kbn_core_http_server_internal.mdx b/api_docs/kbn_core_http_server_internal.mdx index a93434c89ca38..022dac5186e57 100644 --- a/api_docs/kbn_core_http_server_internal.mdx +++ b/api_docs/kbn_core_http_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-internal title: "@kbn/core-http-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server-internal plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-server-internal'] --- import kbnCoreHttpServerInternalObj from './kbn_core_http_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_http_server_mocks.mdx b/api_docs/kbn_core_http_server_mocks.mdx index e77eec3b1e8e6..9c20c42383045 100644 --- a/api_docs/kbn_core_http_server_mocks.mdx +++ b/api_docs/kbn_core_http_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-mocks title: "@kbn/core-http-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server-mocks plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-server-mocks'] --- import kbnCoreHttpServerMocksObj from './kbn_core_http_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_http_server_utils.mdx b/api_docs/kbn_core_http_server_utils.mdx index 752a64682983d..8b2e43f046ea6 100644 --- a/api_docs/kbn_core_http_server_utils.mdx +++ b/api_docs/kbn_core_http_server_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-http-server-utils title: "@kbn/core-http-server-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-http-server-utils plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-http-server-utils'] --- import kbnCoreHttpServerUtilsObj from './kbn_core_http_server_utils.devdocs.json'; diff --git a/api_docs/kbn_core_i18n_browser.mdx b/api_docs/kbn_core_i18n_browser.mdx index 514b021d05c61..2b728d95394a1 100644 --- a/api_docs/kbn_core_i18n_browser.mdx +++ b/api_docs/kbn_core_i18n_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-browser title: "@kbn/core-i18n-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-browser plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-browser'] --- import kbnCoreI18nBrowserObj from './kbn_core_i18n_browser.devdocs.json'; diff --git a/api_docs/kbn_core_i18n_browser_mocks.mdx b/api_docs/kbn_core_i18n_browser_mocks.mdx index d20285668673e..3f97049e03d31 100644 --- a/api_docs/kbn_core_i18n_browser_mocks.mdx +++ b/api_docs/kbn_core_i18n_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-browser-mocks title: "@kbn/core-i18n-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-browser-mocks plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-browser-mocks'] --- import kbnCoreI18nBrowserMocksObj from './kbn_core_i18n_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_i18n_server.mdx b/api_docs/kbn_core_i18n_server.mdx index 018ba13c79953..e2cd84a9995d0 100644 --- a/api_docs/kbn_core_i18n_server.mdx +++ b/api_docs/kbn_core_i18n_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server title: "@kbn/core-i18n-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-server'] --- import kbnCoreI18nServerObj from './kbn_core_i18n_server.devdocs.json'; diff --git a/api_docs/kbn_core_i18n_server_internal.mdx b/api_docs/kbn_core_i18n_server_internal.mdx index 0bcc1d6582488..f0e797969744b 100644 --- a/api_docs/kbn_core_i18n_server_internal.mdx +++ b/api_docs/kbn_core_i18n_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server-internal title: "@kbn/core-i18n-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server-internal plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-server-internal'] --- import kbnCoreI18nServerInternalObj from './kbn_core_i18n_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_i18n_server_mocks.mdx b/api_docs/kbn_core_i18n_server_mocks.mdx index 7e01d046751a0..d4cc0138d8347 100644 --- a/api_docs/kbn_core_i18n_server_mocks.mdx +++ b/api_docs/kbn_core_i18n_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-i18n-server-mocks title: "@kbn/core-i18n-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-i18n-server-mocks plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-i18n-server-mocks'] --- import kbnCoreI18nServerMocksObj from './kbn_core_i18n_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_injected_metadata_browser_mocks.mdx b/api_docs/kbn_core_injected_metadata_browser_mocks.mdx index 4736dfeae6cf9..06a35b5010110 100644 --- a/api_docs/kbn_core_injected_metadata_browser_mocks.mdx +++ b/api_docs/kbn_core_injected_metadata_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-injected-metadata-browser-mocks title: "@kbn/core-injected-metadata-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-injected-metadata-browser-mocks plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-injected-metadata-browser-mocks'] --- import kbnCoreInjectedMetadataBrowserMocksObj from './kbn_core_injected_metadata_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_integrations_browser_internal.mdx b/api_docs/kbn_core_integrations_browser_internal.mdx index 10cd4abe5552c..3baa79b56bf21 100644 --- a/api_docs/kbn_core_integrations_browser_internal.mdx +++ b/api_docs/kbn_core_integrations_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-integrations-browser-internal title: "@kbn/core-integrations-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-integrations-browser-internal plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-integrations-browser-internal'] --- import kbnCoreIntegrationsBrowserInternalObj from './kbn_core_integrations_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_integrations_browser_mocks.mdx b/api_docs/kbn_core_integrations_browser_mocks.mdx index 685a4492254e6..12d4c45a86dd3 100644 --- a/api_docs/kbn_core_integrations_browser_mocks.mdx +++ b/api_docs/kbn_core_integrations_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-integrations-browser-mocks title: "@kbn/core-integrations-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-integrations-browser-mocks plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-integrations-browser-mocks'] --- import kbnCoreIntegrationsBrowserMocksObj from './kbn_core_integrations_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_lifecycle_browser.mdx b/api_docs/kbn_core_lifecycle_browser.mdx index 846de5b834774..1cd0a2cd75dda 100644 --- a/api_docs/kbn_core_lifecycle_browser.mdx +++ b/api_docs/kbn_core_lifecycle_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-browser title: "@kbn/core-lifecycle-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-browser plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-lifecycle-browser'] --- import kbnCoreLifecycleBrowserObj from './kbn_core_lifecycle_browser.devdocs.json'; diff --git a/api_docs/kbn_core_lifecycle_browser_mocks.mdx b/api_docs/kbn_core_lifecycle_browser_mocks.mdx index 759a1113820f8..78deb20c7b24a 100644 --- a/api_docs/kbn_core_lifecycle_browser_mocks.mdx +++ b/api_docs/kbn_core_lifecycle_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-browser-mocks title: "@kbn/core-lifecycle-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-browser-mocks plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-lifecycle-browser-mocks'] --- import kbnCoreLifecycleBrowserMocksObj from './kbn_core_lifecycle_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_lifecycle_server.mdx b/api_docs/kbn_core_lifecycle_server.mdx index 55c7920e31ca8..06cbe1bb6fa85 100644 --- a/api_docs/kbn_core_lifecycle_server.mdx +++ b/api_docs/kbn_core_lifecycle_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-server title: "@kbn/core-lifecycle-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-server plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-lifecycle-server'] --- import kbnCoreLifecycleServerObj from './kbn_core_lifecycle_server.devdocs.json'; diff --git a/api_docs/kbn_core_lifecycle_server_mocks.mdx b/api_docs/kbn_core_lifecycle_server_mocks.mdx index febdff839a212..c00f1a28da9e9 100644 --- a/api_docs/kbn_core_lifecycle_server_mocks.mdx +++ b/api_docs/kbn_core_lifecycle_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-lifecycle-server-mocks title: "@kbn/core-lifecycle-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-lifecycle-server-mocks plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-lifecycle-server-mocks'] --- import kbnCoreLifecycleServerMocksObj from './kbn_core_lifecycle_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_logging_browser_mocks.mdx b/api_docs/kbn_core_logging_browser_mocks.mdx index 573cc5db4ca82..7631096c5c6df 100644 --- a/api_docs/kbn_core_logging_browser_mocks.mdx +++ b/api_docs/kbn_core_logging_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-browser-mocks title: "@kbn/core-logging-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-browser-mocks plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-browser-mocks'] --- import kbnCoreLoggingBrowserMocksObj from './kbn_core_logging_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_logging_common_internal.mdx b/api_docs/kbn_core_logging_common_internal.mdx index 2e463e3c7e50f..36dba297226a2 100644 --- a/api_docs/kbn_core_logging_common_internal.mdx +++ b/api_docs/kbn_core_logging_common_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-common-internal title: "@kbn/core-logging-common-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-common-internal plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-common-internal'] --- import kbnCoreLoggingCommonInternalObj from './kbn_core_logging_common_internal.devdocs.json'; diff --git a/api_docs/kbn_core_logging_server.mdx b/api_docs/kbn_core_logging_server.mdx index 6100040376131..8bf1902ad15f9 100644 --- a/api_docs/kbn_core_logging_server.mdx +++ b/api_docs/kbn_core_logging_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server title: "@kbn/core-logging-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-server'] --- import kbnCoreLoggingServerObj from './kbn_core_logging_server.devdocs.json'; diff --git a/api_docs/kbn_core_logging_server_internal.mdx b/api_docs/kbn_core_logging_server_internal.mdx index 32a172203d55e..f56c67c797e92 100644 --- a/api_docs/kbn_core_logging_server_internal.mdx +++ b/api_docs/kbn_core_logging_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server-internal title: "@kbn/core-logging-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server-internal plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-server-internal'] --- import kbnCoreLoggingServerInternalObj from './kbn_core_logging_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_logging_server_mocks.mdx b/api_docs/kbn_core_logging_server_mocks.mdx index 51c3a7bad699a..254d2e7122376 100644 --- a/api_docs/kbn_core_logging_server_mocks.mdx +++ b/api_docs/kbn_core_logging_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-logging-server-mocks title: "@kbn/core-logging-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-logging-server-mocks plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-logging-server-mocks'] --- import kbnCoreLoggingServerMocksObj from './kbn_core_logging_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_metrics_collectors_server_internal.mdx b/api_docs/kbn_core_metrics_collectors_server_internal.mdx index 28e907021d5ba..81af5ce8db22c 100644 --- a/api_docs/kbn_core_metrics_collectors_server_internal.mdx +++ b/api_docs/kbn_core_metrics_collectors_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-collectors-server-internal title: "@kbn/core-metrics-collectors-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-collectors-server-internal plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-collectors-server-internal'] --- import kbnCoreMetricsCollectorsServerInternalObj from './kbn_core_metrics_collectors_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_metrics_collectors_server_mocks.mdx b/api_docs/kbn_core_metrics_collectors_server_mocks.mdx index c36fe8061c8b3..7f2c79c9fcef0 100644 --- a/api_docs/kbn_core_metrics_collectors_server_mocks.mdx +++ b/api_docs/kbn_core_metrics_collectors_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-collectors-server-mocks title: "@kbn/core-metrics-collectors-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-collectors-server-mocks plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-collectors-server-mocks'] --- import kbnCoreMetricsCollectorsServerMocksObj from './kbn_core_metrics_collectors_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_metrics_server.mdx b/api_docs/kbn_core_metrics_server.mdx index 9a0f561c69319..f2ef81911415b 100644 --- a/api_docs/kbn_core_metrics_server.mdx +++ b/api_docs/kbn_core_metrics_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server title: "@kbn/core-metrics-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-server'] --- import kbnCoreMetricsServerObj from './kbn_core_metrics_server.devdocs.json'; diff --git a/api_docs/kbn_core_metrics_server_internal.mdx b/api_docs/kbn_core_metrics_server_internal.mdx index 102b69aab5fd2..548a88dcaaacb 100644 --- a/api_docs/kbn_core_metrics_server_internal.mdx +++ b/api_docs/kbn_core_metrics_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server-internal title: "@kbn/core-metrics-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server-internal plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-server-internal'] --- import kbnCoreMetricsServerInternalObj from './kbn_core_metrics_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_metrics_server_mocks.mdx b/api_docs/kbn_core_metrics_server_mocks.mdx index e0ff9ed9f339e..f18dbbb812c66 100644 --- a/api_docs/kbn_core_metrics_server_mocks.mdx +++ b/api_docs/kbn_core_metrics_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-metrics-server-mocks title: "@kbn/core-metrics-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-metrics-server-mocks plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-metrics-server-mocks'] --- import kbnCoreMetricsServerMocksObj from './kbn_core_metrics_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_mount_utils_browser.mdx b/api_docs/kbn_core_mount_utils_browser.mdx index 5cffeba628c48..2daa32a6406c5 100644 --- a/api_docs/kbn_core_mount_utils_browser.mdx +++ b/api_docs/kbn_core_mount_utils_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-mount-utils-browser title: "@kbn/core-mount-utils-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-mount-utils-browser plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-mount-utils-browser'] --- import kbnCoreMountUtilsBrowserObj from './kbn_core_mount_utils_browser.devdocs.json'; diff --git a/api_docs/kbn_core_node_server.mdx b/api_docs/kbn_core_node_server.mdx index 35338f99a6594..072ca207dabee 100644 --- a/api_docs/kbn_core_node_server.mdx +++ b/api_docs/kbn_core_node_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server title: "@kbn/core-node-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-node-server'] --- import kbnCoreNodeServerObj from './kbn_core_node_server.devdocs.json'; diff --git a/api_docs/kbn_core_node_server_internal.mdx b/api_docs/kbn_core_node_server_internal.mdx index 4415beb558f15..3267ddf13d128 100644 --- a/api_docs/kbn_core_node_server_internal.mdx +++ b/api_docs/kbn_core_node_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server-internal title: "@kbn/core-node-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server-internal plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-node-server-internal'] --- import kbnCoreNodeServerInternalObj from './kbn_core_node_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_node_server_mocks.mdx b/api_docs/kbn_core_node_server_mocks.mdx index d60d54cd59a94..e398ad24bbb16 100644 --- a/api_docs/kbn_core_node_server_mocks.mdx +++ b/api_docs/kbn_core_node_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-node-server-mocks title: "@kbn/core-node-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-node-server-mocks plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-node-server-mocks'] --- import kbnCoreNodeServerMocksObj from './kbn_core_node_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_notifications_browser.mdx b/api_docs/kbn_core_notifications_browser.mdx index fb065204d3a05..6c2ee9b846b68 100644 --- a/api_docs/kbn_core_notifications_browser.mdx +++ b/api_docs/kbn_core_notifications_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser title: "@kbn/core-notifications-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-notifications-browser'] --- import kbnCoreNotificationsBrowserObj from './kbn_core_notifications_browser.devdocs.json'; diff --git a/api_docs/kbn_core_notifications_browser_internal.mdx b/api_docs/kbn_core_notifications_browser_internal.mdx index ae5693e79f5ca..0db38a649b554 100644 --- a/api_docs/kbn_core_notifications_browser_internal.mdx +++ b/api_docs/kbn_core_notifications_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser-internal title: "@kbn/core-notifications-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser-internal plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-notifications-browser-internal'] --- import kbnCoreNotificationsBrowserInternalObj from './kbn_core_notifications_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_notifications_browser_mocks.mdx b/api_docs/kbn_core_notifications_browser_mocks.mdx index 3d32c15260b72..0bfa1a5c882f5 100644 --- a/api_docs/kbn_core_notifications_browser_mocks.mdx +++ b/api_docs/kbn_core_notifications_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-notifications-browser-mocks title: "@kbn/core-notifications-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-notifications-browser-mocks plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-notifications-browser-mocks'] --- import kbnCoreNotificationsBrowserMocksObj from './kbn_core_notifications_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_overlays_browser.mdx b/api_docs/kbn_core_overlays_browser.mdx index 209503bf476c7..00324afd1ee9a 100644 --- a/api_docs/kbn_core_overlays_browser.mdx +++ b/api_docs/kbn_core_overlays_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser title: "@kbn/core-overlays-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-overlays-browser'] --- import kbnCoreOverlaysBrowserObj from './kbn_core_overlays_browser.devdocs.json'; diff --git a/api_docs/kbn_core_overlays_browser_internal.mdx b/api_docs/kbn_core_overlays_browser_internal.mdx index ac640f1af213c..8dae249987758 100644 --- a/api_docs/kbn_core_overlays_browser_internal.mdx +++ b/api_docs/kbn_core_overlays_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser-internal title: "@kbn/core-overlays-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser-internal plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-overlays-browser-internal'] --- import kbnCoreOverlaysBrowserInternalObj from './kbn_core_overlays_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_overlays_browser_mocks.mdx b/api_docs/kbn_core_overlays_browser_mocks.mdx index 70e546a3da3fc..c1dba5d6efed7 100644 --- a/api_docs/kbn_core_overlays_browser_mocks.mdx +++ b/api_docs/kbn_core_overlays_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-overlays-browser-mocks title: "@kbn/core-overlays-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-overlays-browser-mocks plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-overlays-browser-mocks'] --- import kbnCoreOverlaysBrowserMocksObj from './kbn_core_overlays_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_browser.mdx b/api_docs/kbn_core_plugins_browser.mdx index 9372019193b6a..1831f65b4e9e9 100644 --- a/api_docs/kbn_core_plugins_browser.mdx +++ b/api_docs/kbn_core_plugins_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-browser title: "@kbn/core-plugins-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-browser plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-browser'] --- import kbnCorePluginsBrowserObj from './kbn_core_plugins_browser.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_browser_mocks.mdx b/api_docs/kbn_core_plugins_browser_mocks.mdx index 8688f3c9dc0df..cc3697e45e748 100644 --- a/api_docs/kbn_core_plugins_browser_mocks.mdx +++ b/api_docs/kbn_core_plugins_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-browser-mocks title: "@kbn/core-plugins-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-browser-mocks plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-browser-mocks'] --- import kbnCorePluginsBrowserMocksObj from './kbn_core_plugins_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_contracts_browser.mdx b/api_docs/kbn_core_plugins_contracts_browser.mdx index 176cb701488bc..1c1e4fa380a1b 100644 --- a/api_docs/kbn_core_plugins_contracts_browser.mdx +++ b/api_docs/kbn_core_plugins_contracts_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-contracts-browser title: "@kbn/core-plugins-contracts-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-contracts-browser plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-contracts-browser'] --- import kbnCorePluginsContractsBrowserObj from './kbn_core_plugins_contracts_browser.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_contracts_server.mdx b/api_docs/kbn_core_plugins_contracts_server.mdx index 966de87b12bf6..75ff313c82e2e 100644 --- a/api_docs/kbn_core_plugins_contracts_server.mdx +++ b/api_docs/kbn_core_plugins_contracts_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-contracts-server title: "@kbn/core-plugins-contracts-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-contracts-server plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-contracts-server'] --- import kbnCorePluginsContractsServerObj from './kbn_core_plugins_contracts_server.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_server.mdx b/api_docs/kbn_core_plugins_server.mdx index 9d7f41bc76a2e..7f64ba20ffb22 100644 --- a/api_docs/kbn_core_plugins_server.mdx +++ b/api_docs/kbn_core_plugins_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-server title: "@kbn/core-plugins-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-server plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-server'] --- import kbnCorePluginsServerObj from './kbn_core_plugins_server.devdocs.json'; diff --git a/api_docs/kbn_core_plugins_server_mocks.mdx b/api_docs/kbn_core_plugins_server_mocks.mdx index 6635a6e5c3eb1..653a72c2a2a46 100644 --- a/api_docs/kbn_core_plugins_server_mocks.mdx +++ b/api_docs/kbn_core_plugins_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-plugins-server-mocks title: "@kbn/core-plugins-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-plugins-server-mocks plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-plugins-server-mocks'] --- import kbnCorePluginsServerMocksObj from './kbn_core_plugins_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_preboot_server.mdx b/api_docs/kbn_core_preboot_server.mdx index 2c5ec84f0ab81..f2418458dfa42 100644 --- a/api_docs/kbn_core_preboot_server.mdx +++ b/api_docs/kbn_core_preboot_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-preboot-server title: "@kbn/core-preboot-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-preboot-server plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-preboot-server'] --- import kbnCorePrebootServerObj from './kbn_core_preboot_server.devdocs.json'; diff --git a/api_docs/kbn_core_preboot_server_mocks.mdx b/api_docs/kbn_core_preboot_server_mocks.mdx index 8ae19bb5346a0..5fffc07582ab2 100644 --- a/api_docs/kbn_core_preboot_server_mocks.mdx +++ b/api_docs/kbn_core_preboot_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-preboot-server-mocks title: "@kbn/core-preboot-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-preboot-server-mocks plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-preboot-server-mocks'] --- import kbnCorePrebootServerMocksObj from './kbn_core_preboot_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_rendering_browser.mdx b/api_docs/kbn_core_rendering_browser.mdx index 9fe2dd4c90307..ba1ec7bf70fbd 100644 --- a/api_docs/kbn_core_rendering_browser.mdx +++ b/api_docs/kbn_core_rendering_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-browser title: "@kbn/core-rendering-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-browser plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-rendering-browser'] --- import kbnCoreRenderingBrowserObj from './kbn_core_rendering_browser.devdocs.json'; diff --git a/api_docs/kbn_core_rendering_browser_mocks.mdx b/api_docs/kbn_core_rendering_browser_mocks.mdx index 2b7321330d017..548fc05c679a2 100644 --- a/api_docs/kbn_core_rendering_browser_mocks.mdx +++ b/api_docs/kbn_core_rendering_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-browser-mocks title: "@kbn/core-rendering-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-browser-mocks plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-rendering-browser-mocks'] --- import kbnCoreRenderingBrowserMocksObj from './kbn_core_rendering_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_rendering_server_internal.mdx b/api_docs/kbn_core_rendering_server_internal.mdx index 95d77788fec0a..145130186bfe5 100644 --- a/api_docs/kbn_core_rendering_server_internal.mdx +++ b/api_docs/kbn_core_rendering_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-server-internal title: "@kbn/core-rendering-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-server-internal plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-rendering-server-internal'] --- import kbnCoreRenderingServerInternalObj from './kbn_core_rendering_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_rendering_server_mocks.mdx b/api_docs/kbn_core_rendering_server_mocks.mdx index ba80ec26f96a4..61db1b03f5332 100644 --- a/api_docs/kbn_core_rendering_server_mocks.mdx +++ b/api_docs/kbn_core_rendering_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-rendering-server-mocks title: "@kbn/core-rendering-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-rendering-server-mocks plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-rendering-server-mocks'] --- import kbnCoreRenderingServerMocksObj from './kbn_core_rendering_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_root_server_internal.mdx b/api_docs/kbn_core_root_server_internal.mdx index c779f94f86945..6dce07dacce25 100644 --- a/api_docs/kbn_core_root_server_internal.mdx +++ b/api_docs/kbn_core_root_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-root-server-internal title: "@kbn/core-root-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-root-server-internal plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-root-server-internal'] --- import kbnCoreRootServerInternalObj from './kbn_core_root_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_api_browser.mdx b/api_docs/kbn_core_saved_objects_api_browser.mdx index 32dd6d4dbf815..02c42a23596fb 100644 --- a/api_docs/kbn_core_saved_objects_api_browser.mdx +++ b/api_docs/kbn_core_saved_objects_api_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-browser title: "@kbn/core-saved-objects-api-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-browser plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-api-browser'] --- import kbnCoreSavedObjectsApiBrowserObj from './kbn_core_saved_objects_api_browser.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_api_server.mdx b/api_docs/kbn_core_saved_objects_api_server.mdx index 18187e6e74c37..812c193f7ef97 100644 --- a/api_docs/kbn_core_saved_objects_api_server.mdx +++ b/api_docs/kbn_core_saved_objects_api_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server title: "@kbn/core-saved-objects-api-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-server plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-api-server'] --- import kbnCoreSavedObjectsApiServerObj from './kbn_core_saved_objects_api_server.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_api_server_mocks.mdx b/api_docs/kbn_core_saved_objects_api_server_mocks.mdx index 08cd4a2e9a2cb..2c2ec04aa0c2d 100644 --- a/api_docs/kbn_core_saved_objects_api_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_api_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-api-server-mocks title: "@kbn/core-saved-objects-api-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-api-server-mocks plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-api-server-mocks'] --- import kbnCoreSavedObjectsApiServerMocksObj from './kbn_core_saved_objects_api_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_base_server_internal.mdx b/api_docs/kbn_core_saved_objects_base_server_internal.mdx index cf16a759d03c7..82f438cec2d23 100644 --- a/api_docs/kbn_core_saved_objects_base_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_base_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-base-server-internal title: "@kbn/core-saved-objects-base-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-base-server-internal plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-base-server-internal'] --- import kbnCoreSavedObjectsBaseServerInternalObj from './kbn_core_saved_objects_base_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_base_server_mocks.mdx b/api_docs/kbn_core_saved_objects_base_server_mocks.mdx index a8e2068a0c08b..d60c0a868edad 100644 --- a/api_docs/kbn_core_saved_objects_base_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_base_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-base-server-mocks title: "@kbn/core-saved-objects-base-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-base-server-mocks plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-base-server-mocks'] --- import kbnCoreSavedObjectsBaseServerMocksObj from './kbn_core_saved_objects_base_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_browser.mdx b/api_docs/kbn_core_saved_objects_browser.mdx index 10618e86759de..882ba4fe42785 100644 --- a/api_docs/kbn_core_saved_objects_browser.mdx +++ b/api_docs/kbn_core_saved_objects_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser title: "@kbn/core-saved-objects-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-browser'] --- import kbnCoreSavedObjectsBrowserObj from './kbn_core_saved_objects_browser.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_browser_internal.mdx b/api_docs/kbn_core_saved_objects_browser_internal.mdx index 117672734633f..7a42746de8276 100644 --- a/api_docs/kbn_core_saved_objects_browser_internal.mdx +++ b/api_docs/kbn_core_saved_objects_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser-internal title: "@kbn/core-saved-objects-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser-internal plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-browser-internal'] --- import kbnCoreSavedObjectsBrowserInternalObj from './kbn_core_saved_objects_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_browser_mocks.mdx b/api_docs/kbn_core_saved_objects_browser_mocks.mdx index 84c0806d7d443..a88bceaca7993 100644 --- a/api_docs/kbn_core_saved_objects_browser_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-browser-mocks title: "@kbn/core-saved-objects-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-browser-mocks plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-browser-mocks'] --- import kbnCoreSavedObjectsBrowserMocksObj from './kbn_core_saved_objects_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_common.mdx b/api_docs/kbn_core_saved_objects_common.mdx index cbcfdbbc151b8..4159c84df67ec 100644 --- a/api_docs/kbn_core_saved_objects_common.mdx +++ b/api_docs/kbn_core_saved_objects_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-common title: "@kbn/core-saved-objects-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-common plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-common'] --- import kbnCoreSavedObjectsCommonObj from './kbn_core_saved_objects_common.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx b/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx index 5fa877a1d5474..59aafe64427d0 100644 --- a/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_import_export_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-import-export-server-internal title: "@kbn/core-saved-objects-import-export-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-import-export-server-internal plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-import-export-server-internal'] --- import kbnCoreSavedObjectsImportExportServerInternalObj from './kbn_core_saved_objects_import_export_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx b/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx index 4607e1a7fa13e..753a4fc0a89c5 100644 --- a/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_import_export_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-import-export-server-mocks title: "@kbn/core-saved-objects-import-export-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-import-export-server-mocks plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-import-export-server-mocks'] --- import kbnCoreSavedObjectsImportExportServerMocksObj from './kbn_core_saved_objects_import_export_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_migration_server_internal.mdx b/api_docs/kbn_core_saved_objects_migration_server_internal.mdx index 373305a72bd14..0c019d053e110 100644 --- a/api_docs/kbn_core_saved_objects_migration_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_migration_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-migration-server-internal title: "@kbn/core-saved-objects-migration-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-migration-server-internal plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-migration-server-internal'] --- import kbnCoreSavedObjectsMigrationServerInternalObj from './kbn_core_saved_objects_migration_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx b/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx index a275a467daf9b..f2406248425cc 100644 --- a/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_migration_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-migration-server-mocks title: "@kbn/core-saved-objects-migration-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-migration-server-mocks plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-migration-server-mocks'] --- import kbnCoreSavedObjectsMigrationServerMocksObj from './kbn_core_saved_objects_migration_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_server.mdx b/api_docs/kbn_core_saved_objects_server.mdx index eb61b674e0617..5abfc7749fcb7 100644 --- a/api_docs/kbn_core_saved_objects_server.mdx +++ b/api_docs/kbn_core_saved_objects_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server title: "@kbn/core-saved-objects-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-server'] --- import kbnCoreSavedObjectsServerObj from './kbn_core_saved_objects_server.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_server_internal.mdx b/api_docs/kbn_core_saved_objects_server_internal.mdx index edcb1256e23b5..f99e7e4893b1e 100644 --- a/api_docs/kbn_core_saved_objects_server_internal.mdx +++ b/api_docs/kbn_core_saved_objects_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server-internal title: "@kbn/core-saved-objects-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server-internal plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-server-internal'] --- import kbnCoreSavedObjectsServerInternalObj from './kbn_core_saved_objects_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_server_mocks.mdx b/api_docs/kbn_core_saved_objects_server_mocks.mdx index 75137dc968eac..dbf6dba22db49 100644 --- a/api_docs/kbn_core_saved_objects_server_mocks.mdx +++ b/api_docs/kbn_core_saved_objects_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-server-mocks title: "@kbn/core-saved-objects-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-server-mocks plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-server-mocks'] --- import kbnCoreSavedObjectsServerMocksObj from './kbn_core_saved_objects_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_saved_objects_utils_server.mdx b/api_docs/kbn_core_saved_objects_utils_server.mdx index dc0e06cae85bf..d9b8ee32e2b50 100644 --- a/api_docs/kbn_core_saved_objects_utils_server.mdx +++ b/api_docs/kbn_core_saved_objects_utils_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-saved-objects-utils-server title: "@kbn/core-saved-objects-utils-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-saved-objects-utils-server plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-saved-objects-utils-server'] --- import kbnCoreSavedObjectsUtilsServerObj from './kbn_core_saved_objects_utils_server.devdocs.json'; diff --git a/api_docs/kbn_core_security_browser.mdx b/api_docs/kbn_core_security_browser.mdx index d9f368a313a3e..e4df8d0119d93 100644 --- a/api_docs/kbn_core_security_browser.mdx +++ b/api_docs/kbn_core_security_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-browser title: "@kbn/core-security-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-browser plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-browser'] --- import kbnCoreSecurityBrowserObj from './kbn_core_security_browser.devdocs.json'; diff --git a/api_docs/kbn_core_security_browser_internal.mdx b/api_docs/kbn_core_security_browser_internal.mdx index 5edba90521cdb..bd1f3c7d48213 100644 --- a/api_docs/kbn_core_security_browser_internal.mdx +++ b/api_docs/kbn_core_security_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-browser-internal title: "@kbn/core-security-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-browser-internal plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-browser-internal'] --- import kbnCoreSecurityBrowserInternalObj from './kbn_core_security_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_security_browser_mocks.mdx b/api_docs/kbn_core_security_browser_mocks.mdx index 2340c0a336f7b..07e0f53dc79d3 100644 --- a/api_docs/kbn_core_security_browser_mocks.mdx +++ b/api_docs/kbn_core_security_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-browser-mocks title: "@kbn/core-security-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-browser-mocks plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-browser-mocks'] --- import kbnCoreSecurityBrowserMocksObj from './kbn_core_security_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_security_common.mdx b/api_docs/kbn_core_security_common.mdx index 76856524ee0ce..741694a67c40e 100644 --- a/api_docs/kbn_core_security_common.mdx +++ b/api_docs/kbn_core_security_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-common title: "@kbn/core-security-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-common plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-common'] --- import kbnCoreSecurityCommonObj from './kbn_core_security_common.devdocs.json'; diff --git a/api_docs/kbn_core_security_server.mdx b/api_docs/kbn_core_security_server.mdx index ec15927e54fd0..e28e77b7f89e7 100644 --- a/api_docs/kbn_core_security_server.mdx +++ b/api_docs/kbn_core_security_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-server title: "@kbn/core-security-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-server plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-server'] --- import kbnCoreSecurityServerObj from './kbn_core_security_server.devdocs.json'; diff --git a/api_docs/kbn_core_security_server_internal.mdx b/api_docs/kbn_core_security_server_internal.mdx index 4082f010595c1..17231188dda1b 100644 --- a/api_docs/kbn_core_security_server_internal.mdx +++ b/api_docs/kbn_core_security_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-server-internal title: "@kbn/core-security-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-server-internal plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-server-internal'] --- import kbnCoreSecurityServerInternalObj from './kbn_core_security_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_security_server_mocks.mdx b/api_docs/kbn_core_security_server_mocks.mdx index 84935be5ce8df..f8b80d9affb5d 100644 --- a/api_docs/kbn_core_security_server_mocks.mdx +++ b/api_docs/kbn_core_security_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-security-server-mocks title: "@kbn/core-security-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-security-server-mocks plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-security-server-mocks'] --- import kbnCoreSecurityServerMocksObj from './kbn_core_security_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_status_common.mdx b/api_docs/kbn_core_status_common.mdx index 86bf4f86394f4..e5920eb3f9e6b 100644 --- a/api_docs/kbn_core_status_common.mdx +++ b/api_docs/kbn_core_status_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-common title: "@kbn/core-status-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-common plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-common'] --- import kbnCoreStatusCommonObj from './kbn_core_status_common.devdocs.json'; diff --git a/api_docs/kbn_core_status_server.mdx b/api_docs/kbn_core_status_server.mdx index 02c5c8d327aac..67c3f0fdcbb38 100644 --- a/api_docs/kbn_core_status_server.mdx +++ b/api_docs/kbn_core_status_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server title: "@kbn/core-status-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-server'] --- import kbnCoreStatusServerObj from './kbn_core_status_server.devdocs.json'; diff --git a/api_docs/kbn_core_status_server_internal.mdx b/api_docs/kbn_core_status_server_internal.mdx index 8e8f602d922a2..a8a9311faff1e 100644 --- a/api_docs/kbn_core_status_server_internal.mdx +++ b/api_docs/kbn_core_status_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server-internal title: "@kbn/core-status-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server-internal plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-server-internal'] --- import kbnCoreStatusServerInternalObj from './kbn_core_status_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_status_server_mocks.mdx b/api_docs/kbn_core_status_server_mocks.mdx index f207f3bba8a8a..8a37525436116 100644 --- a/api_docs/kbn_core_status_server_mocks.mdx +++ b/api_docs/kbn_core_status_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-status-server-mocks title: "@kbn/core-status-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-status-server-mocks plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-status-server-mocks'] --- import kbnCoreStatusServerMocksObj from './kbn_core_status_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_deprecations_getters.mdx b/api_docs/kbn_core_test_helpers_deprecations_getters.mdx index 0a4ff6513800c..5c1286a22fd95 100644 --- a/api_docs/kbn_core_test_helpers_deprecations_getters.mdx +++ b/api_docs/kbn_core_test_helpers_deprecations_getters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-deprecations-getters title: "@kbn/core-test-helpers-deprecations-getters" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-deprecations-getters plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-deprecations-getters'] --- import kbnCoreTestHelpersDeprecationsGettersObj from './kbn_core_test_helpers_deprecations_getters.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_http_setup_browser.mdx b/api_docs/kbn_core_test_helpers_http_setup_browser.mdx index e22c61c2a2891..17b4aeec6cb24 100644 --- a/api_docs/kbn_core_test_helpers_http_setup_browser.mdx +++ b/api_docs/kbn_core_test_helpers_http_setup_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-http-setup-browser title: "@kbn/core-test-helpers-http-setup-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-http-setup-browser plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-http-setup-browser'] --- import kbnCoreTestHelpersHttpSetupBrowserObj from './kbn_core_test_helpers_http_setup_browser.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_kbn_server.mdx b/api_docs/kbn_core_test_helpers_kbn_server.mdx index 73a5cdcf47814..789f464904f93 100644 --- a/api_docs/kbn_core_test_helpers_kbn_server.mdx +++ b/api_docs/kbn_core_test_helpers_kbn_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-kbn-server title: "@kbn/core-test-helpers-kbn-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-kbn-server plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-kbn-server'] --- import kbnCoreTestHelpersKbnServerObj from './kbn_core_test_helpers_kbn_server.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_model_versions.mdx b/api_docs/kbn_core_test_helpers_model_versions.mdx index 31e313b3bfbab..eeea4e7df1362 100644 --- a/api_docs/kbn_core_test_helpers_model_versions.mdx +++ b/api_docs/kbn_core_test_helpers_model_versions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-model-versions title: "@kbn/core-test-helpers-model-versions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-model-versions plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-model-versions'] --- import kbnCoreTestHelpersModelVersionsObj from './kbn_core_test_helpers_model_versions.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_so_type_serializer.mdx b/api_docs/kbn_core_test_helpers_so_type_serializer.mdx index e8895e6ada402..01283579c5122 100644 --- a/api_docs/kbn_core_test_helpers_so_type_serializer.mdx +++ b/api_docs/kbn_core_test_helpers_so_type_serializer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-so-type-serializer title: "@kbn/core-test-helpers-so-type-serializer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-so-type-serializer plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-so-type-serializer'] --- import kbnCoreTestHelpersSoTypeSerializerObj from './kbn_core_test_helpers_so_type_serializer.devdocs.json'; diff --git a/api_docs/kbn_core_test_helpers_test_utils.mdx b/api_docs/kbn_core_test_helpers_test_utils.mdx index 147c14eb8ee31..82ebb3223b618 100644 --- a/api_docs/kbn_core_test_helpers_test_utils.mdx +++ b/api_docs/kbn_core_test_helpers_test_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-test-helpers-test-utils title: "@kbn/core-test-helpers-test-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-test-helpers-test-utils plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-test-helpers-test-utils'] --- import kbnCoreTestHelpersTestUtilsObj from './kbn_core_test_helpers_test_utils.devdocs.json'; diff --git a/api_docs/kbn_core_theme_browser.mdx b/api_docs/kbn_core_theme_browser.mdx index ae70a606bc18a..5705ed384db09 100644 --- a/api_docs/kbn_core_theme_browser.mdx +++ b/api_docs/kbn_core_theme_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser title: "@kbn/core-theme-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-theme-browser plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-theme-browser'] --- import kbnCoreThemeBrowserObj from './kbn_core_theme_browser.devdocs.json'; diff --git a/api_docs/kbn_core_theme_browser_internal.mdx b/api_docs/kbn_core_theme_browser_internal.mdx index 67d6cad6a69bc..a99e13df8fc2c 100644 --- a/api_docs/kbn_core_theme_browser_internal.mdx +++ b/api_docs/kbn_core_theme_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser-internal title: "@kbn/core-theme-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-theme-browser-internal plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-theme-browser-internal'] --- import kbnCoreThemeBrowserInternalObj from './kbn_core_theme_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_theme_browser_mocks.mdx b/api_docs/kbn_core_theme_browser_mocks.mdx index 5517de4ffc7fd..7ed49540fcd1c 100644 --- a/api_docs/kbn_core_theme_browser_mocks.mdx +++ b/api_docs/kbn_core_theme_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-theme-browser-mocks title: "@kbn/core-theme-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-theme-browser-mocks plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-theme-browser-mocks'] --- import kbnCoreThemeBrowserMocksObj from './kbn_core_theme_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_browser.mdx b/api_docs/kbn_core_ui_settings_browser.mdx index 9e81435fd2831..ce778ec9c3cea 100644 --- a/api_docs/kbn_core_ui_settings_browser.mdx +++ b/api_docs/kbn_core_ui_settings_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser title: "@kbn/core-ui-settings-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-browser'] --- import kbnCoreUiSettingsBrowserObj from './kbn_core_ui_settings_browser.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_browser_internal.mdx b/api_docs/kbn_core_ui_settings_browser_internal.mdx index 97a33ecf89321..e0127d3e6ac60 100644 --- a/api_docs/kbn_core_ui_settings_browser_internal.mdx +++ b/api_docs/kbn_core_ui_settings_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser-internal title: "@kbn/core-ui-settings-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser-internal plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-browser-internal'] --- import kbnCoreUiSettingsBrowserInternalObj from './kbn_core_ui_settings_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_browser_mocks.mdx b/api_docs/kbn_core_ui_settings_browser_mocks.mdx index 57c2715c87c34..749e0844a31b4 100644 --- a/api_docs/kbn_core_ui_settings_browser_mocks.mdx +++ b/api_docs/kbn_core_ui_settings_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-browser-mocks title: "@kbn/core-ui-settings-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-browser-mocks plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-browser-mocks'] --- import kbnCoreUiSettingsBrowserMocksObj from './kbn_core_ui_settings_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_common.mdx b/api_docs/kbn_core_ui_settings_common.mdx index 36f1f6781bb1b..187a62a167402 100644 --- a/api_docs/kbn_core_ui_settings_common.mdx +++ b/api_docs/kbn_core_ui_settings_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-common title: "@kbn/core-ui-settings-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-common plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-common'] --- import kbnCoreUiSettingsCommonObj from './kbn_core_ui_settings_common.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_server.mdx b/api_docs/kbn_core_ui_settings_server.mdx index 7ecc88daf90fa..7a91f4c2ee74b 100644 --- a/api_docs/kbn_core_ui_settings_server.mdx +++ b/api_docs/kbn_core_ui_settings_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server title: "@kbn/core-ui-settings-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-server'] --- import kbnCoreUiSettingsServerObj from './kbn_core_ui_settings_server.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_server_internal.mdx b/api_docs/kbn_core_ui_settings_server_internal.mdx index c3f4a489b0a11..ec2ff8ef8db09 100644 --- a/api_docs/kbn_core_ui_settings_server_internal.mdx +++ b/api_docs/kbn_core_ui_settings_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server-internal title: "@kbn/core-ui-settings-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server-internal plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-server-internal'] --- import kbnCoreUiSettingsServerInternalObj from './kbn_core_ui_settings_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_ui_settings_server_mocks.mdx b/api_docs/kbn_core_ui_settings_server_mocks.mdx index 9333ebfcf7363..a8c99e89f8287 100644 --- a/api_docs/kbn_core_ui_settings_server_mocks.mdx +++ b/api_docs/kbn_core_ui_settings_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-ui-settings-server-mocks title: "@kbn/core-ui-settings-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-ui-settings-server-mocks plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-ui-settings-server-mocks'] --- import kbnCoreUiSettingsServerMocksObj from './kbn_core_ui_settings_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_usage_data_server.mdx b/api_docs/kbn_core_usage_data_server.mdx index 0850584534830..3b7548d530d9f 100644 --- a/api_docs/kbn_core_usage_data_server.mdx +++ b/api_docs/kbn_core_usage_data_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server title: "@kbn/core-usage-data-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-usage-data-server'] --- import kbnCoreUsageDataServerObj from './kbn_core_usage_data_server.devdocs.json'; diff --git a/api_docs/kbn_core_usage_data_server_internal.mdx b/api_docs/kbn_core_usage_data_server_internal.mdx index 80c4b11c11b78..ac15df093dde4 100644 --- a/api_docs/kbn_core_usage_data_server_internal.mdx +++ b/api_docs/kbn_core_usage_data_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server-internal title: "@kbn/core-usage-data-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server-internal plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-usage-data-server-internal'] --- import kbnCoreUsageDataServerInternalObj from './kbn_core_usage_data_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_usage_data_server_mocks.mdx b/api_docs/kbn_core_usage_data_server_mocks.mdx index 2ef6160f3a7fa..999bcbc4933d3 100644 --- a/api_docs/kbn_core_usage_data_server_mocks.mdx +++ b/api_docs/kbn_core_usage_data_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-usage-data-server-mocks title: "@kbn/core-usage-data-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-usage-data-server-mocks plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-usage-data-server-mocks'] --- import kbnCoreUsageDataServerMocksObj from './kbn_core_usage_data_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_browser.mdx b/api_docs/kbn_core_user_profile_browser.mdx index d68bf1da6f318..c737db3dd25bf 100644 --- a/api_docs/kbn_core_user_profile_browser.mdx +++ b/api_docs/kbn_core_user_profile_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-browser title: "@kbn/core-user-profile-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-browser plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-browser'] --- import kbnCoreUserProfileBrowserObj from './kbn_core_user_profile_browser.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_browser_internal.mdx b/api_docs/kbn_core_user_profile_browser_internal.mdx index 1243beeccc023..c12863eb9c82d 100644 --- a/api_docs/kbn_core_user_profile_browser_internal.mdx +++ b/api_docs/kbn_core_user_profile_browser_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-browser-internal title: "@kbn/core-user-profile-browser-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-browser-internal plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-browser-internal'] --- import kbnCoreUserProfileBrowserInternalObj from './kbn_core_user_profile_browser_internal.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_browser_mocks.mdx b/api_docs/kbn_core_user_profile_browser_mocks.mdx index c7fe50061568c..c6bcfa3b9d486 100644 --- a/api_docs/kbn_core_user_profile_browser_mocks.mdx +++ b/api_docs/kbn_core_user_profile_browser_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-browser-mocks title: "@kbn/core-user-profile-browser-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-browser-mocks plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-browser-mocks'] --- import kbnCoreUserProfileBrowserMocksObj from './kbn_core_user_profile_browser_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_common.mdx b/api_docs/kbn_core_user_profile_common.mdx index ab8a1cdb011e8..9fa835587348d 100644 --- a/api_docs/kbn_core_user_profile_common.mdx +++ b/api_docs/kbn_core_user_profile_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-common title: "@kbn/core-user-profile-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-common plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-common'] --- import kbnCoreUserProfileCommonObj from './kbn_core_user_profile_common.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_server.mdx b/api_docs/kbn_core_user_profile_server.mdx index 4374b66ccc3fb..07bf9e6854d56 100644 --- a/api_docs/kbn_core_user_profile_server.mdx +++ b/api_docs/kbn_core_user_profile_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-server title: "@kbn/core-user-profile-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-server plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-server'] --- import kbnCoreUserProfileServerObj from './kbn_core_user_profile_server.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_server_internal.mdx b/api_docs/kbn_core_user_profile_server_internal.mdx index 83cb3670f207a..a96417754a4e0 100644 --- a/api_docs/kbn_core_user_profile_server_internal.mdx +++ b/api_docs/kbn_core_user_profile_server_internal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-server-internal title: "@kbn/core-user-profile-server-internal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-server-internal plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-server-internal'] --- import kbnCoreUserProfileServerInternalObj from './kbn_core_user_profile_server_internal.devdocs.json'; diff --git a/api_docs/kbn_core_user_profile_server_mocks.mdx b/api_docs/kbn_core_user_profile_server_mocks.mdx index 433e44a0cc6ec..e32b8c62d7c3c 100644 --- a/api_docs/kbn_core_user_profile_server_mocks.mdx +++ b/api_docs/kbn_core_user_profile_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-profile-server-mocks title: "@kbn/core-user-profile-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-profile-server-mocks plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-profile-server-mocks'] --- import kbnCoreUserProfileServerMocksObj from './kbn_core_user_profile_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_core_user_settings_server.mdx b/api_docs/kbn_core_user_settings_server.mdx index c617f33db067e..98991695d9a59 100644 --- a/api_docs/kbn_core_user_settings_server.mdx +++ b/api_docs/kbn_core_user_settings_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-settings-server title: "@kbn/core-user-settings-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-settings-server plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-settings-server'] --- import kbnCoreUserSettingsServerObj from './kbn_core_user_settings_server.devdocs.json'; diff --git a/api_docs/kbn_core_user_settings_server_mocks.mdx b/api_docs/kbn_core_user_settings_server_mocks.mdx index dce91e30a6942..44ef544d8680b 100644 --- a/api_docs/kbn_core_user_settings_server_mocks.mdx +++ b/api_docs/kbn_core_user_settings_server_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-core-user-settings-server-mocks title: "@kbn/core-user-settings-server-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/core-user-settings-server-mocks plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/core-user-settings-server-mocks'] --- import kbnCoreUserSettingsServerMocksObj from './kbn_core_user_settings_server_mocks.devdocs.json'; diff --git a/api_docs/kbn_crypto.mdx b/api_docs/kbn_crypto.mdx index d4d0fe0023676..d3040b024c36d 100644 --- a/api_docs/kbn_crypto.mdx +++ b/api_docs/kbn_crypto.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-crypto title: "@kbn/crypto" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/crypto plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/crypto'] --- import kbnCryptoObj from './kbn_crypto.devdocs.json'; diff --git a/api_docs/kbn_crypto_browser.mdx b/api_docs/kbn_crypto_browser.mdx index 978a822bc93b1..e791cc5f60a99 100644 --- a/api_docs/kbn_crypto_browser.mdx +++ b/api_docs/kbn_crypto_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-crypto-browser title: "@kbn/crypto-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/crypto-browser plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/crypto-browser'] --- import kbnCryptoBrowserObj from './kbn_crypto_browser.devdocs.json'; diff --git a/api_docs/kbn_custom_icons.mdx b/api_docs/kbn_custom_icons.mdx index 1ca437458ea03..b70c36b9eafb0 100644 --- a/api_docs/kbn_custom_icons.mdx +++ b/api_docs/kbn_custom_icons.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-custom-icons title: "@kbn/custom-icons" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/custom-icons plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/custom-icons'] --- import kbnCustomIconsObj from './kbn_custom_icons.devdocs.json'; diff --git a/api_docs/kbn_custom_integrations.mdx b/api_docs/kbn_custom_integrations.mdx index 56d16ea8bdee9..971a71176f693 100644 --- a/api_docs/kbn_custom_integrations.mdx +++ b/api_docs/kbn_custom_integrations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-custom-integrations title: "@kbn/custom-integrations" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/custom-integrations plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/custom-integrations'] --- import kbnCustomIntegrationsObj from './kbn_custom_integrations.devdocs.json'; diff --git a/api_docs/kbn_cypress_config.mdx b/api_docs/kbn_cypress_config.mdx index 808819132ce4d..12733bf59760a 100644 --- a/api_docs/kbn_cypress_config.mdx +++ b/api_docs/kbn_cypress_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-cypress-config title: "@kbn/cypress-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/cypress-config plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cypress-config'] --- import kbnCypressConfigObj from './kbn_cypress_config.devdocs.json'; diff --git a/api_docs/kbn_data_forge.mdx b/api_docs/kbn_data_forge.mdx index 073301ad4807e..dc9911782fa07 100644 --- a/api_docs/kbn_data_forge.mdx +++ b/api_docs/kbn_data_forge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-forge title: "@kbn/data-forge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-forge plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/data-forge'] --- import kbnDataForgeObj from './kbn_data_forge.devdocs.json'; diff --git a/api_docs/kbn_data_grid_in_table_search.mdx b/api_docs/kbn_data_grid_in_table_search.mdx index b2d5cc1185306..c9b3a3ace405f 100644 --- a/api_docs/kbn_data_grid_in_table_search.mdx +++ b/api_docs/kbn_data_grid_in_table_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-grid-in-table-search title: "@kbn/data-grid-in-table-search" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-grid-in-table-search plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/data-grid-in-table-search'] --- import kbnDataGridInTableSearchObj from './kbn_data_grid_in_table_search.devdocs.json'; diff --git a/api_docs/kbn_data_service.mdx b/api_docs/kbn_data_service.mdx index c1934c38eb450..01ca5e93155fc 100644 --- a/api_docs/kbn_data_service.mdx +++ b/api_docs/kbn_data_service.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-service title: "@kbn/data-service" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-service plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/data-service'] --- import kbnDataServiceObj from './kbn_data_service.devdocs.json'; diff --git a/api_docs/kbn_data_stream_adapter.mdx b/api_docs/kbn_data_stream_adapter.mdx index b7a209f36d79a..bb6cf9c8ef951 100644 --- a/api_docs/kbn_data_stream_adapter.mdx +++ b/api_docs/kbn_data_stream_adapter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-stream-adapter title: "@kbn/data-stream-adapter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-stream-adapter plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/data-stream-adapter'] --- import kbnDataStreamAdapterObj from './kbn_data_stream_adapter.devdocs.json'; diff --git a/api_docs/kbn_data_view_utils.mdx b/api_docs/kbn_data_view_utils.mdx index 685f41d9cf5c1..1aaf05323cc11 100644 --- a/api_docs/kbn_data_view_utils.mdx +++ b/api_docs/kbn_data_view_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-data-view-utils title: "@kbn/data-view-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/data-view-utils plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/data-view-utils'] --- import kbnDataViewUtilsObj from './kbn_data_view_utils.devdocs.json'; diff --git a/api_docs/kbn_datemath.mdx b/api_docs/kbn_datemath.mdx index d74e934cd91c7..e00af519089f8 100644 --- a/api_docs/kbn_datemath.mdx +++ b/api_docs/kbn_datemath.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-datemath title: "@kbn/datemath" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/datemath plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/datemath'] --- import kbnDatemathObj from './kbn_datemath.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_analytics.mdx b/api_docs/kbn_deeplinks_analytics.mdx index f87d90ea4498e..63a3d58bf3408 100644 --- a/api_docs/kbn_deeplinks_analytics.mdx +++ b/api_docs/kbn_deeplinks_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-analytics title: "@kbn/deeplinks-analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-analytics plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-analytics'] --- import kbnDeeplinksAnalyticsObj from './kbn_deeplinks_analytics.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_devtools.mdx b/api_docs/kbn_deeplinks_devtools.mdx index 1e335f476587a..d6511673820c0 100644 --- a/api_docs/kbn_deeplinks_devtools.mdx +++ b/api_docs/kbn_deeplinks_devtools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-devtools title: "@kbn/deeplinks-devtools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-devtools plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-devtools'] --- import kbnDeeplinksDevtoolsObj from './kbn_deeplinks_devtools.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_fleet.mdx b/api_docs/kbn_deeplinks_fleet.mdx index abc34e4f7838d..308f1b41fccce 100644 --- a/api_docs/kbn_deeplinks_fleet.mdx +++ b/api_docs/kbn_deeplinks_fleet.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-fleet title: "@kbn/deeplinks-fleet" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-fleet plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-fleet'] --- import kbnDeeplinksFleetObj from './kbn_deeplinks_fleet.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_management.mdx b/api_docs/kbn_deeplinks_management.mdx index 5a41e33b1a081..01c69ee00c7d8 100644 --- a/api_docs/kbn_deeplinks_management.mdx +++ b/api_docs/kbn_deeplinks_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-management title: "@kbn/deeplinks-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-management plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-management'] --- import kbnDeeplinksManagementObj from './kbn_deeplinks_management.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_ml.mdx b/api_docs/kbn_deeplinks_ml.mdx index f851980a80776..1ce37871144a5 100644 --- a/api_docs/kbn_deeplinks_ml.mdx +++ b/api_docs/kbn_deeplinks_ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-ml title: "@kbn/deeplinks-ml" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-ml plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-ml'] --- import kbnDeeplinksMlObj from './kbn_deeplinks_ml.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_observability.mdx b/api_docs/kbn_deeplinks_observability.mdx index f99dadf96fc70..5773f579fba04 100644 --- a/api_docs/kbn_deeplinks_observability.mdx +++ b/api_docs/kbn_deeplinks_observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-observability title: "@kbn/deeplinks-observability" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-observability plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-observability'] --- import kbnDeeplinksObservabilityObj from './kbn_deeplinks_observability.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_search.mdx b/api_docs/kbn_deeplinks_search.mdx index 3f63d9bb75e59..b5c98ba3d1166 100644 --- a/api_docs/kbn_deeplinks_search.mdx +++ b/api_docs/kbn_deeplinks_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-search title: "@kbn/deeplinks-search" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-search plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-search'] --- import kbnDeeplinksSearchObj from './kbn_deeplinks_search.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_security.mdx b/api_docs/kbn_deeplinks_security.mdx index 8af6e705e07a4..273fb252c1604 100644 --- a/api_docs/kbn_deeplinks_security.mdx +++ b/api_docs/kbn_deeplinks_security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-security title: "@kbn/deeplinks-security" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-security plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-security'] --- import kbnDeeplinksSecurityObj from './kbn_deeplinks_security.devdocs.json'; diff --git a/api_docs/kbn_deeplinks_shared.mdx b/api_docs/kbn_deeplinks_shared.mdx index 820ed0e33a547..ea12288c3c9d7 100644 --- a/api_docs/kbn_deeplinks_shared.mdx +++ b/api_docs/kbn_deeplinks_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-deeplinks-shared title: "@kbn/deeplinks-shared" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/deeplinks-shared plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/deeplinks-shared'] --- import kbnDeeplinksSharedObj from './kbn_deeplinks_shared.devdocs.json'; diff --git a/api_docs/kbn_default_nav_analytics.mdx b/api_docs/kbn_default_nav_analytics.mdx index 8b0851b93176f..d310b49b22c7a 100644 --- a/api_docs/kbn_default_nav_analytics.mdx +++ b/api_docs/kbn_default_nav_analytics.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-analytics title: "@kbn/default-nav-analytics" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-analytics plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/default-nav-analytics'] --- import kbnDefaultNavAnalyticsObj from './kbn_default_nav_analytics.devdocs.json'; diff --git a/api_docs/kbn_default_nav_devtools.mdx b/api_docs/kbn_default_nav_devtools.mdx index 7eea342809b66..1af9bdfe7a6bf 100644 --- a/api_docs/kbn_default_nav_devtools.mdx +++ b/api_docs/kbn_default_nav_devtools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-devtools title: "@kbn/default-nav-devtools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-devtools plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/default-nav-devtools'] --- import kbnDefaultNavDevtoolsObj from './kbn_default_nav_devtools.devdocs.json'; diff --git a/api_docs/kbn_default_nav_management.mdx b/api_docs/kbn_default_nav_management.mdx index 7577d76eac138..dcd6de562f5bd 100644 --- a/api_docs/kbn_default_nav_management.mdx +++ b/api_docs/kbn_default_nav_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-management title: "@kbn/default-nav-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-management plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/default-nav-management'] --- import kbnDefaultNavManagementObj from './kbn_default_nav_management.devdocs.json'; diff --git a/api_docs/kbn_default_nav_ml.mdx b/api_docs/kbn_default_nav_ml.mdx index 01c4f52e4938d..825abc68c6294 100644 --- a/api_docs/kbn_default_nav_ml.mdx +++ b/api_docs/kbn_default_nav_ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-default-nav-ml title: "@kbn/default-nav-ml" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/default-nav-ml plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/default-nav-ml'] --- import kbnDefaultNavMlObj from './kbn_default_nav_ml.devdocs.json'; diff --git a/api_docs/kbn_delete_managed_asset_callout.mdx b/api_docs/kbn_delete_managed_asset_callout.mdx index bfdf916d6cc42..bafbd0c8f7940 100644 --- a/api_docs/kbn_delete_managed_asset_callout.mdx +++ b/api_docs/kbn_delete_managed_asset_callout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-delete-managed-asset-callout title: "@kbn/delete-managed-asset-callout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/delete-managed-asset-callout plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/delete-managed-asset-callout'] --- import kbnDeleteManagedAssetCalloutObj from './kbn_delete_managed_asset_callout.devdocs.json'; diff --git a/api_docs/kbn_dev_cli_errors.mdx b/api_docs/kbn_dev_cli_errors.mdx index b6989950f13b2..b30dbc4953006 100644 --- a/api_docs/kbn_dev_cli_errors.mdx +++ b/api_docs/kbn_dev_cli_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-cli-errors title: "@kbn/dev-cli-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-cli-errors plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-cli-errors'] --- import kbnDevCliErrorsObj from './kbn_dev_cli_errors.devdocs.json'; diff --git a/api_docs/kbn_dev_cli_runner.mdx b/api_docs/kbn_dev_cli_runner.mdx index 60dd5e825c054..ef17d4bbeab00 100644 --- a/api_docs/kbn_dev_cli_runner.mdx +++ b/api_docs/kbn_dev_cli_runner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-cli-runner title: "@kbn/dev-cli-runner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-cli-runner plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-cli-runner'] --- import kbnDevCliRunnerObj from './kbn_dev_cli_runner.devdocs.json'; diff --git a/api_docs/kbn_dev_proc_runner.mdx b/api_docs/kbn_dev_proc_runner.mdx index c783b46b2841f..1bf7e5dafd180 100644 --- a/api_docs/kbn_dev_proc_runner.mdx +++ b/api_docs/kbn_dev_proc_runner.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-proc-runner title: "@kbn/dev-proc-runner" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-proc-runner plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-proc-runner'] --- import kbnDevProcRunnerObj from './kbn_dev_proc_runner.devdocs.json'; diff --git a/api_docs/kbn_dev_utils.mdx b/api_docs/kbn_dev_utils.mdx index d75bbd752773e..34690d506b7b8 100644 --- a/api_docs/kbn_dev_utils.mdx +++ b/api_docs/kbn_dev_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dev-utils title: "@kbn/dev-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dev-utils plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dev-utils'] --- import kbnDevUtilsObj from './kbn_dev_utils.devdocs.json'; diff --git a/api_docs/kbn_discover_contextual_components.mdx b/api_docs/kbn_discover_contextual_components.mdx index a894e4334fb01..ae20ce0a05b96 100644 --- a/api_docs/kbn_discover_contextual_components.mdx +++ b/api_docs/kbn_discover_contextual_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-discover-contextual-components title: "@kbn/discover-contextual-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/discover-contextual-components plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/discover-contextual-components'] --- import kbnDiscoverContextualComponentsObj from './kbn_discover_contextual_components.devdocs.json'; diff --git a/api_docs/kbn_discover_utils.mdx b/api_docs/kbn_discover_utils.mdx index e25732ee532ee..d9ef6f6ee6db3 100644 --- a/api_docs/kbn_discover_utils.mdx +++ b/api_docs/kbn_discover_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-discover-utils title: "@kbn/discover-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/discover-utils plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/discover-utils'] --- import kbnDiscoverUtilsObj from './kbn_discover_utils.devdocs.json'; diff --git a/api_docs/kbn_doc_links.mdx b/api_docs/kbn_doc_links.mdx index 821f4099fe9c7..c91d2ca728342 100644 --- a/api_docs/kbn_doc_links.mdx +++ b/api_docs/kbn_doc_links.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-doc-links title: "@kbn/doc-links" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/doc-links plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/doc-links'] --- import kbnDocLinksObj from './kbn_doc_links.devdocs.json'; diff --git a/api_docs/kbn_docs_utils.mdx b/api_docs/kbn_docs_utils.mdx index d45c77a4e9edf..1aeeb32bab214 100644 --- a/api_docs/kbn_docs_utils.mdx +++ b/api_docs/kbn_docs_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-docs-utils title: "@kbn/docs-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/docs-utils plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/docs-utils'] --- import kbnDocsUtilsObj from './kbn_docs_utils.devdocs.json'; diff --git a/api_docs/kbn_dom_drag_drop.mdx b/api_docs/kbn_dom_drag_drop.mdx index 34b98c92c87d3..5bc25eb8b6f86 100644 --- a/api_docs/kbn_dom_drag_drop.mdx +++ b/api_docs/kbn_dom_drag_drop.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-dom-drag-drop title: "@kbn/dom-drag-drop" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/dom-drag-drop plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/dom-drag-drop'] --- import kbnDomDragDropObj from './kbn_dom_drag_drop.devdocs.json'; diff --git a/api_docs/kbn_ebt_tools.mdx b/api_docs/kbn_ebt_tools.mdx index 4129bb6ef85bd..70e26d278cdb2 100644 --- a/api_docs/kbn_ebt_tools.mdx +++ b/api_docs/kbn_ebt_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ebt-tools title: "@kbn/ebt-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ebt-tools plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ebt-tools'] --- import kbnEbtToolsObj from './kbn_ebt_tools.devdocs.json'; diff --git a/api_docs/kbn_ecs_data_quality_dashboard.mdx b/api_docs/kbn_ecs_data_quality_dashboard.mdx index e0ba91b7bda85..597d64dca8bf5 100644 --- a/api_docs/kbn_ecs_data_quality_dashboard.mdx +++ b/api_docs/kbn_ecs_data_quality_dashboard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ecs-data-quality-dashboard title: "@kbn/ecs-data-quality-dashboard" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ecs-data-quality-dashboard plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ecs-data-quality-dashboard'] --- import kbnEcsDataQualityDashboardObj from './kbn_ecs_data_quality_dashboard.devdocs.json'; diff --git a/api_docs/kbn_elastic_agent_utils.mdx b/api_docs/kbn_elastic_agent_utils.mdx index 9ff7f6e0c8819..843cc3497d89a 100644 --- a/api_docs/kbn_elastic_agent_utils.mdx +++ b/api_docs/kbn_elastic_agent_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-elastic-agent-utils title: "@kbn/elastic-agent-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/elastic-agent-utils plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-agent-utils'] --- import kbnElasticAgentUtilsObj from './kbn_elastic_agent_utils.devdocs.json'; diff --git a/api_docs/kbn_elastic_assistant.mdx b/api_docs/kbn_elastic_assistant.mdx index d107e6086d668..2f1d3d2cc667f 100644 --- a/api_docs/kbn_elastic_assistant.mdx +++ b/api_docs/kbn_elastic_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-elastic-assistant title: "@kbn/elastic-assistant" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/elastic-assistant plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-assistant'] --- import kbnElasticAssistantObj from './kbn_elastic_assistant.devdocs.json'; diff --git a/api_docs/kbn_elastic_assistant_common.mdx b/api_docs/kbn_elastic_assistant_common.mdx index 7b96e0deb049e..62fad806e188f 100644 --- a/api_docs/kbn_elastic_assistant_common.mdx +++ b/api_docs/kbn_elastic_assistant_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-elastic-assistant-common title: "@kbn/elastic-assistant-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/elastic-assistant-common plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-assistant-common'] --- import kbnElasticAssistantCommonObj from './kbn_elastic_assistant_common.devdocs.json'; diff --git a/api_docs/kbn_entities_schema.mdx b/api_docs/kbn_entities_schema.mdx index 3c689cd7dd480..52fbec3e5ccc6 100644 --- a/api_docs/kbn_entities_schema.mdx +++ b/api_docs/kbn_entities_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-entities-schema title: "@kbn/entities-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/entities-schema plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/entities-schema'] --- import kbnEntitiesSchemaObj from './kbn_entities_schema.devdocs.json'; diff --git a/api_docs/kbn_es.mdx b/api_docs/kbn_es.mdx index 2db077bbaa594..2495f593490ef 100644 --- a/api_docs/kbn_es.mdx +++ b/api_docs/kbn_es.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es title: "@kbn/es" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es'] --- import kbnEsObj from './kbn_es.devdocs.json'; diff --git a/api_docs/kbn_es_archiver.mdx b/api_docs/kbn_es_archiver.mdx index 2ea1e5b40a77f..ab84816769758 100644 --- a/api_docs/kbn_es_archiver.mdx +++ b/api_docs/kbn_es_archiver.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-archiver title: "@kbn/es-archiver" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-archiver plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-archiver'] --- import kbnEsArchiverObj from './kbn_es_archiver.devdocs.json'; diff --git a/api_docs/kbn_es_errors.mdx b/api_docs/kbn_es_errors.mdx index 912d802dd5913..f335253b78467 100644 --- a/api_docs/kbn_es_errors.mdx +++ b/api_docs/kbn_es_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-errors title: "@kbn/es-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-errors plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-errors'] --- import kbnEsErrorsObj from './kbn_es_errors.devdocs.json'; diff --git a/api_docs/kbn_es_query.mdx b/api_docs/kbn_es_query.mdx index 9327182ed1bb7..6822eda9c35db 100644 --- a/api_docs/kbn_es_query.mdx +++ b/api_docs/kbn_es_query.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-query title: "@kbn/es-query" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-query plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-query'] --- import kbnEsQueryObj from './kbn_es_query.devdocs.json'; diff --git a/api_docs/kbn_es_types.mdx b/api_docs/kbn_es_types.mdx index 462e754e2d9b4..88e629fee124d 100644 --- a/api_docs/kbn_es_types.mdx +++ b/api_docs/kbn_es_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-es-types title: "@kbn/es-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/es-types plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/es-types'] --- import kbnEsTypesObj from './kbn_es_types.devdocs.json'; diff --git a/api_docs/kbn_eslint_plugin_imports.mdx b/api_docs/kbn_eslint_plugin_imports.mdx index 045c96a291ca0..4076a87476d03 100644 --- a/api_docs/kbn_eslint_plugin_imports.mdx +++ b/api_docs/kbn_eslint_plugin_imports.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-eslint-plugin-imports title: "@kbn/eslint-plugin-imports" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/eslint-plugin-imports plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/eslint-plugin-imports'] --- import kbnEslintPluginImportsObj from './kbn_eslint_plugin_imports.devdocs.json'; diff --git a/api_docs/kbn_esql_ast.mdx b/api_docs/kbn_esql_ast.mdx index 5c4090ef91eb4..07f959c187205 100644 --- a/api_docs/kbn_esql_ast.mdx +++ b/api_docs/kbn_esql_ast.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-esql-ast title: "@kbn/esql-ast" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/esql-ast plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-ast'] --- import kbnEsqlAstObj from './kbn_esql_ast.devdocs.json'; diff --git a/api_docs/kbn_esql_editor.mdx b/api_docs/kbn_esql_editor.mdx index 21a98a90e793c..b5b8d6be0c426 100644 --- a/api_docs/kbn_esql_editor.mdx +++ b/api_docs/kbn_esql_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-esql-editor title: "@kbn/esql-editor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/esql-editor plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-editor'] --- import kbnEsqlEditorObj from './kbn_esql_editor.devdocs.json'; diff --git a/api_docs/kbn_esql_utils.mdx b/api_docs/kbn_esql_utils.mdx index 3f29bb80e541e..a72412fd47319 100644 --- a/api_docs/kbn_esql_utils.mdx +++ b/api_docs/kbn_esql_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-esql-utils title: "@kbn/esql-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/esql-utils plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-utils'] --- import kbnEsqlUtilsObj from './kbn_esql_utils.devdocs.json'; diff --git a/api_docs/kbn_esql_validation_autocomplete.mdx b/api_docs/kbn_esql_validation_autocomplete.mdx index 97f464de407f3..cdc6afd13ac77 100644 --- a/api_docs/kbn_esql_validation_autocomplete.mdx +++ b/api_docs/kbn_esql_validation_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-esql-validation-autocomplete title: "@kbn/esql-validation-autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/esql-validation-autocomplete plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-validation-autocomplete'] --- import kbnEsqlValidationAutocompleteObj from './kbn_esql_validation_autocomplete.devdocs.json'; diff --git a/api_docs/kbn_esql_variables_types.mdx b/api_docs/kbn_esql_variables_types.mdx index c61e58668a32a..c17ae875356a6 100644 --- a/api_docs/kbn_esql_variables_types.mdx +++ b/api_docs/kbn_esql_variables_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-esql-variables-types title: "@kbn/esql-variables-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/esql-variables-types plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/esql-variables-types'] --- import kbnEsqlVariablesTypesObj from './kbn_esql_variables_types.devdocs.json'; diff --git a/api_docs/kbn_event_annotation_common.mdx b/api_docs/kbn_event_annotation_common.mdx index fb74f9c07f672..f0285c81abf0f 100644 --- a/api_docs/kbn_event_annotation_common.mdx +++ b/api_docs/kbn_event_annotation_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-event-annotation-common title: "@kbn/event-annotation-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/event-annotation-common plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/event-annotation-common'] --- import kbnEventAnnotationCommonObj from './kbn_event_annotation_common.devdocs.json'; diff --git a/api_docs/kbn_event_annotation_components.mdx b/api_docs/kbn_event_annotation_components.mdx index 7a0a3f33445fc..cc800783ce042 100644 --- a/api_docs/kbn_event_annotation_components.mdx +++ b/api_docs/kbn_event_annotation_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-event-annotation-components title: "@kbn/event-annotation-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/event-annotation-components plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/event-annotation-components'] --- import kbnEventAnnotationComponentsObj from './kbn_event_annotation_components.devdocs.json'; diff --git a/api_docs/kbn_event_stacktrace.mdx b/api_docs/kbn_event_stacktrace.mdx index e220ccb18e5ab..cfbd40d3d841e 100644 --- a/api_docs/kbn_event_stacktrace.mdx +++ b/api_docs/kbn_event_stacktrace.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-event-stacktrace title: "@kbn/event-stacktrace" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/event-stacktrace plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/event-stacktrace'] --- import kbnEventStacktraceObj from './kbn_event_stacktrace.devdocs.json'; diff --git a/api_docs/kbn_expandable_flyout.mdx b/api_docs/kbn_expandable_flyout.mdx index 60cea6c814253..4fc55ca43f8bb 100644 --- a/api_docs/kbn_expandable_flyout.mdx +++ b/api_docs/kbn_expandable_flyout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-expandable-flyout title: "@kbn/expandable-flyout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/expandable-flyout plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/expandable-flyout'] --- import kbnExpandableFlyoutObj from './kbn_expandable_flyout.devdocs.json'; diff --git a/api_docs/kbn_field_types.mdx b/api_docs/kbn_field_types.mdx index 1ee5bed19aca5..89907ae58197f 100644 --- a/api_docs/kbn_field_types.mdx +++ b/api_docs/kbn_field_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-field-types title: "@kbn/field-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/field-types plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/field-types'] --- import kbnFieldTypesObj from './kbn_field_types.devdocs.json'; diff --git a/api_docs/kbn_field_utils.mdx b/api_docs/kbn_field_utils.mdx index 577d35c6bebb5..88c60bc7702cf 100644 --- a/api_docs/kbn_field_utils.mdx +++ b/api_docs/kbn_field_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-field-utils title: "@kbn/field-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/field-utils plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/field-utils'] --- import kbnFieldUtilsObj from './kbn_field_utils.devdocs.json'; diff --git a/api_docs/kbn_file_upload_common.mdx b/api_docs/kbn_file_upload_common.mdx index a9f825d94efc1..bbc500b1fd323 100644 --- a/api_docs/kbn_file_upload_common.mdx +++ b/api_docs/kbn_file_upload_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-file-upload-common title: "@kbn/file-upload-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/file-upload-common plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/file-upload-common'] --- import kbnFileUploadCommonObj from './kbn_file_upload_common.devdocs.json'; diff --git a/api_docs/kbn_find_used_node_modules.mdx b/api_docs/kbn_find_used_node_modules.mdx index 8b876ec682b58..e93287ac01075 100644 --- a/api_docs/kbn_find_used_node_modules.mdx +++ b/api_docs/kbn_find_used_node_modules.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-find-used-node-modules title: "@kbn/find-used-node-modules" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/find-used-node-modules plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/find-used-node-modules'] --- import kbnFindUsedNodeModulesObj from './kbn_find_used_node_modules.devdocs.json'; diff --git a/api_docs/kbn_ftr_common_functional_services.devdocs.json b/api_docs/kbn_ftr_common_functional_services.devdocs.json index 4f24cae8b8b29..01e978ae324de 100644 --- a/api_docs/kbn_ftr_common_functional_services.devdocs.json +++ b/api_docs/kbn_ftr_common_functional_services.devdocs.json @@ -984,6 +984,115 @@ } ], "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/ftr-common-functional-services", + "id": "def-common.SecurityService", + "type": "Class", + "tags": [], + "label": "SecurityService", + "description": [], + "path": "src/platform/packages/shared/kbn-ftr-common-functional-services/services/security/security.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/ftr-common-functional-services", + "id": "def-common.SecurityService.Unnamed", + "type": "Function", + "tags": [], + "label": "Constructor", + "description": [], + "signature": [ + "any" + ], + "path": "src/platform/packages/shared/kbn-ftr-common-functional-services/services/security/security.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/ftr-common-functional-services", + "id": "def-common.SecurityService.Unnamed.$1", + "type": "Object", + "tags": [], + "label": "roleMappings", + "description": [], + "signature": [ + "RoleMappings" + ], + "path": "src/platform/packages/shared/kbn-ftr-common-functional-services/services/security/security.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/ftr-common-functional-services", + "id": "def-common.SecurityService.Unnamed.$2", + "type": "Object", + "tags": [], + "label": "testUser", + "description": [], + "signature": [ + "TestUser" + ], + "path": "src/platform/packages/shared/kbn-ftr-common-functional-services/services/security/security.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/ftr-common-functional-services", + "id": "def-common.SecurityService.Unnamed.$3", + "type": "Object", + "tags": [], + "label": "role", + "description": [], + "signature": [ + "Role" + ], + "path": "src/platform/packages/shared/kbn-ftr-common-functional-services/services/security/security.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/ftr-common-functional-services", + "id": "def-common.SecurityService.Unnamed.$4", + "type": "Object", + "tags": [], + "label": "user", + "description": [], + "signature": [ + "User" + ], + "path": "src/platform/packages/shared/kbn-ftr-common-functional-services/services/security/security.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + }, + { + "parentPluginId": "@kbn/ftr-common-functional-services", + "id": "def-common.SecurityService.Unnamed.$5", + "type": "Object", + "tags": [], + "label": "testUserSupertest", + "description": [], + "signature": [ + "node_modules/@types/supertest/lib/agent", + "<", + "SuperTestStatic", + ".Test>" + ], + "path": "src/platform/packages/shared/kbn-ftr-common-functional-services/services/security/security.ts", + "deprecated": false, + "trackAdoption": false, + "isRequired": true + } + ], + "returnComment": [] + } + ], + "initialIsOpen": false } ], "functions": [ @@ -1768,7 +1877,23 @@ "node_modules/@types/supertest/lib/agent", "<", "SuperTestStatic", - ".Test>; }, {}, ProvidedTypeMap<{ es: ({ getService }: ", + ".Test>; security: (ctx: ", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.FtrProviderContext", + "text": "FtrProviderContext" + }, + ") => Promise<", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.SecurityService", + "text": "SecurityService" + }, + ">; }, {}, ProvidedTypeMap<{ es: ({ getService }: ", { "pluginId": "@kbn/ftr-common-functional-services", "scope": "common", @@ -1980,7 +2105,23 @@ "node_modules/@types/supertest/lib/agent", "<", "SuperTestStatic", - ".Test>; }>, ProvidedTypeMap<{}>>" + ".Test>; security: (ctx: ", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.FtrProviderContext", + "text": "FtrProviderContext" + }, + ") => Promise<", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.SecurityService", + "text": "SecurityService" + }, + ">; }>, ProvidedTypeMap<{}>>" ], "path": "src/platform/packages/shared/kbn-ftr-common-functional-services/services/ftr_provider_context.ts", "deprecated": false, @@ -2386,7 +2527,23 @@ "node_modules/@types/supertest/lib/agent", "<", "SuperTestStatic", - ".Test>; }, {}, ProvidedTypeMap<{ es: ({ getService }: ", + ".Test>; security: (ctx: ", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.FtrProviderContext", + "text": "FtrProviderContext" + }, + ") => Promise<", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.SecurityService", + "text": "SecurityService" + }, + ">; }, {}, ProvidedTypeMap<{ es: ({ getService }: ", { "pluginId": "@kbn/ftr-common-functional-services", "scope": "common", @@ -2598,7 +2755,23 @@ "node_modules/@types/supertest/lib/agent", "<", "SuperTestStatic", - ".Test>; }>, ProvidedTypeMap<{}>>" + ".Test>; security: (ctx: ", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.FtrProviderContext", + "text": "FtrProviderContext" + }, + ") => Promise<", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.SecurityService", + "text": "SecurityService" + }, + ">; }>, ProvidedTypeMap<{}>>" ], "path": "src/platform/packages/shared/kbn-ftr-common-functional-services/services/es.ts", "deprecated": false, @@ -2863,7 +3036,23 @@ "node_modules/@types/supertest/lib/agent", "<", "SuperTestStatic", - ".Test>; }, {}, ProvidedTypeMap<{ es: ({ getService }: ", + ".Test>; security: (ctx: ", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.FtrProviderContext", + "text": "FtrProviderContext" + }, + ") => Promise<", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.SecurityService", + "text": "SecurityService" + }, + ">; }, {}, ProvidedTypeMap<{ es: ({ getService }: ", { "pluginId": "@kbn/ftr-common-functional-services", "scope": "common", @@ -3075,7 +3264,23 @@ "node_modules/@types/supertest/lib/agent", "<", "SuperTestStatic", - ".Test>; }>, ProvidedTypeMap<{}>>" + ".Test>; security: (ctx: ", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.FtrProviderContext", + "text": "FtrProviderContext" + }, + ") => Promise<", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.SecurityService", + "text": "SecurityService" + }, + ">; }>, ProvidedTypeMap<{}>>" ], "path": "src/platform/packages/shared/kbn-ftr-common-functional-services/services/kibana_server/kibana_server.ts", "deprecated": false, @@ -3340,7 +3545,23 @@ "node_modules/@types/supertest/lib/agent", "<", "SuperTestStatic", - ".Test>; }, {}, ProvidedTypeMap<{ es: ({ getService }: ", + ".Test>; security: (ctx: ", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.FtrProviderContext", + "text": "FtrProviderContext" + }, + ") => Promise<", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.SecurityService", + "text": "SecurityService" + }, + ">; }, {}, ProvidedTypeMap<{ es: ({ getService }: ", { "pluginId": "@kbn/ftr-common-functional-services", "scope": "common", @@ -3552,7 +3773,23 @@ "node_modules/@types/supertest/lib/agent", "<", "SuperTestStatic", - ".Test>; }>, ProvidedTypeMap<{}>>" + ".Test>; security: (ctx: ", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.FtrProviderContext", + "text": "FtrProviderContext" + }, + ") => Promise<", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.SecurityService", + "text": "SecurityService" + }, + ">; }>, ProvidedTypeMap<{}>>" ], "path": "src/platform/packages/shared/kbn-ftr-common-functional-services/services/es_archiver.ts", "deprecated": false, @@ -3852,7 +4089,23 @@ "node_modules/@types/supertest/lib/agent", "<", "SuperTestStatic", - ".Test>; }, {}, ProvidedTypeMap<{ es: ({ getService }: ", + ".Test>; security: (ctx: ", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.FtrProviderContext", + "text": "FtrProviderContext" + }, + ") => Promise<", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.SecurityService", + "text": "SecurityService" + }, + ">; }, {}, ProvidedTypeMap<{ es: ({ getService }: ", { "pluginId": "@kbn/ftr-common-functional-services", "scope": "common", @@ -4064,7 +4317,23 @@ "node_modules/@types/supertest/lib/agent", "<", "SuperTestStatic", - ".Test>; }>, ProvidedTypeMap<{}>>" + ".Test>; security: (ctx: ", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.FtrProviderContext", + "text": "FtrProviderContext" + }, + ") => Promise<", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.SecurityService", + "text": "SecurityService" + }, + ">; }>, ProvidedTypeMap<{}>>" ], "path": "src/platform/packages/shared/kbn-ftr-common-functional-services/services/console.ts", "deprecated": false, @@ -4343,7 +4612,23 @@ "node_modules/@types/supertest/lib/agent", "<", "SuperTestStatic", - ".Test>; }, {}, ProvidedTypeMap<{ es: ({ getService }: ", + ".Test>; security: (ctx: ", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.FtrProviderContext", + "text": "FtrProviderContext" + }, + ") => Promise<", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.SecurityService", + "text": "SecurityService" + }, + ">; }, {}, ProvidedTypeMap<{ es: ({ getService }: ", { "pluginId": "@kbn/ftr-common-functional-services", "scope": "common", @@ -4555,7 +4840,23 @@ "node_modules/@types/supertest/lib/agent", "<", "SuperTestStatic", - ".Test>; }>, ProvidedTypeMap<{}>>" + ".Test>; security: (ctx: ", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.FtrProviderContext", + "text": "FtrProviderContext" + }, + ") => Promise<", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.SecurityService", + "text": "SecurityService" + }, + ">; }>, ProvidedTypeMap<{}>>" ], "path": "src/platform/packages/shared/kbn-ftr-common-functional-services/services/es_delete_all_indices.ts", "deprecated": false, @@ -4942,7 +5243,23 @@ "node_modules/@types/supertest/lib/agent", "<", "SuperTestStatic", - ".Test>; }, {}, ProvidedTypeMap<{ es: ({ getService }: ", + ".Test>; security: (ctx: ", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.FtrProviderContext", + "text": "FtrProviderContext" + }, + ") => Promise<", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.SecurityService", + "text": "SecurityService" + }, + ">; }, {}, ProvidedTypeMap<{ es: ({ getService }: ", { "pluginId": "@kbn/ftr-common-functional-services", "scope": "common", @@ -5154,7 +5471,23 @@ "node_modules/@types/supertest/lib/agent", "<", "SuperTestStatic", - ".Test>; }>, ProvidedTypeMap<{}>>" + ".Test>; security: (ctx: ", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.FtrProviderContext", + "text": "FtrProviderContext" + }, + ") => Promise<", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.SecurityService", + "text": "SecurityService" + }, + ">; }>, ProvidedTypeMap<{}>>" ], "path": "src/platform/packages/shared/kbn-ftr-common-functional-services/services/saml_auth/saml_auth_provider.ts", "deprecated": false, @@ -5413,7 +5746,7 @@ "node_modules/@types/supertest/lib/agent", "<", "SuperTestStatic", - ".Test>; }, {}, ProvidedTypeMap<{ es: ({ getService }: ", + ".Test>; security: (ctx: ", { "pluginId": "@kbn/ftr-common-functional-services", "scope": "common", @@ -5421,15 +5754,31 @@ "section": "def-common.FtrProviderContext", "text": "FtrProviderContext" }, - ") => ", - "default", - "; kibanaServer: ({ getService }: ", + ") => Promise<", { "pluginId": "@kbn/ftr-common-functional-services", "scope": "common", "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", - "section": "def-common.FtrProviderContext", - "text": "FtrProviderContext" + "section": "def-common.SecurityService", + "text": "SecurityService" + }, + ">; }, {}, ProvidedTypeMap<{ es: ({ getService }: ", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.FtrProviderContext", + "text": "FtrProviderContext" + }, + ") => ", + "default", + "; kibanaServer: ({ getService }: ", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.FtrProviderContext", + "text": "FtrProviderContext" }, ") => ", { @@ -5625,7 +5974,23 @@ "node_modules/@types/supertest/lib/agent", "<", "SuperTestStatic", - ".Test>; }>, ProvidedTypeMap<{}>>" + ".Test>; security: (ctx: ", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.FtrProviderContext", + "text": "FtrProviderContext" + }, + ") => Promise<", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.SecurityService", + "text": "SecurityService" + }, + ">; }>, ProvidedTypeMap<{}>>" ], "path": "src/platform/packages/shared/kbn-ftr-common-functional-services/services/supertest.ts", "deprecated": false, @@ -5884,7 +6249,23 @@ "node_modules/@types/supertest/lib/agent", "<", "SuperTestStatic", - ".Test>; }, {}, ProvidedTypeMap<{ es: ({ getService }: ", + ".Test>; security: (ctx: ", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.FtrProviderContext", + "text": "FtrProviderContext" + }, + ") => Promise<", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.SecurityService", + "text": "SecurityService" + }, + ">; }, {}, ProvidedTypeMap<{ es: ({ getService }: ", { "pluginId": "@kbn/ftr-common-functional-services", "scope": "common", @@ -6096,7 +6477,23 @@ "node_modules/@types/supertest/lib/agent", "<", "SuperTestStatic", - ".Test>; }>, ProvidedTypeMap<{}>>" + ".Test>; security: (ctx: ", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.FtrProviderContext", + "text": "FtrProviderContext" + }, + ") => Promise<", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.SecurityService", + "text": "SecurityService" + }, + ">; }>, ProvidedTypeMap<{}>>" ], "path": "src/platform/packages/shared/kbn-ftr-common-functional-services/services/supertest.ts", "deprecated": false, @@ -6358,7 +6755,23 @@ "node_modules/@types/supertest/lib/agent", "<", "SuperTestStatic", - ".Test>; }, {}, ProvidedTypeMap<{ es: ({ getService }: ", + ".Test>; security: (ctx: ", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.FtrProviderContext", + "text": "FtrProviderContext" + }, + ") => Promise<", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.SecurityService", + "text": "SecurityService" + }, + ">; }, {}, ProvidedTypeMap<{ es: ({ getService }: ", { "pluginId": "@kbn/ftr-common-functional-services", "scope": "common", @@ -6570,13 +6983,539 @@ "node_modules/@types/supertest/lib/agent", "<", "SuperTestStatic", - ".Test>; }>, ProvidedTypeMap<{}>>" + ".Test>; security: (ctx: ", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.FtrProviderContext", + "text": "FtrProviderContext" + }, + ") => Promise<", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.SecurityService", + "text": "SecurityService" + }, + ">; }>, ProvidedTypeMap<{}>>" ], "path": "src/platform/packages/shared/kbn-ftr-common-functional-services/services/supertest_without_auth.ts", "deprecated": false, "trackAdoption": false } ] + }, + { + "parentPluginId": "@kbn/ftr-common-functional-services", + "id": "def-common.services.security", + "type": "Function", + "tags": [], + "label": "security", + "description": [], + "signature": [ + "(ctx: ", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.FtrProviderContext", + "text": "FtrProviderContext" + }, + ") => Promise<", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.SecurityService", + "text": "SecurityService" + }, + ">" + ], + "path": "src/platform/packages/shared/kbn-ftr-common-functional-services/services/all.ts", + "deprecated": false, + "trackAdoption": false, + "returnComment": [], + "children": [ + { + "parentPluginId": "@kbn/ftr-common-functional-services", + "id": "def-common.services.security.$1", + "type": "Object", + "tags": [], + "label": "ctx", + "description": [], + "signature": [ + { + "pluginId": "@kbn/test", + "scope": "common", + "docId": "kibKbnTestPluginApi", + "section": "def-common.GenericFtrProviderContext", + "text": "GenericFtrProviderContext" + }, + "<{ es: ({ getService }: ", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.FtrProviderContext", + "text": "FtrProviderContext" + }, + ") => ", + "default", + "; kibanaServer: ({ getService }: ", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.FtrProviderContext", + "text": "FtrProviderContext" + }, + ") => ", + { + "pluginId": "@kbn/test", + "scope": "common", + "docId": "kibKbnTestPluginApi", + "section": "def-common.KbnClient", + "text": "KbnClient" + }, + "; esArchiver: ({ getService }: ", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.FtrProviderContext", + "text": "FtrProviderContext" + }, + ") => ", + { + "pluginId": "@kbn/es-archiver", + "scope": "common", + "docId": "kibKbnEsArchiverPluginApi", + "section": "def-common.EsArchiver", + "text": "EsArchiver" + }, + "; retry: typeof ", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.RetryService", + "text": "RetryService" + }, + "; search: typeof ", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.SearchService", + "text": "SearchService" + }, + "; console: ({ getService }: ", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.FtrProviderContext", + "text": "FtrProviderContext" + }, + ") => { createIndex: (indexName: string) => Promise; createAlias: (indexName: string, aliasName: string) => Promise; createLegacyTemplate: (templateName: string) => Promise; createIndexTemplate: (templateName: string, indexPatterns: string[], composedOf: string[]) => Promise; createComponentTemplate: (templateName: string) => Promise; createDataStream: (dataStream: string) => Promise; deleteIndex: (indexName: string) => Promise; deleteAlias: (indexName: string, aliasName: string) => Promise; deleteLegacyTemplate: (templateName: string) => Promise; deleteIndexTemplate: (templateName: string) => Promise; deleteComponentTemplate: (templateName: string) => Promise; deleteDataStream: (dataStream: string) => Promise; }; deployment: typeof ", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.DeploymentService", + "text": "DeploymentService" + }, + "; esDeleteAllIndices: ({ getService }: ", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.FtrProviderContext", + "text": "FtrProviderContext" + }, + ") => (patterns: string | string[], remote?: boolean) => Promise; indexPatterns: typeof ", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.IndexPatternsService", + "text": "IndexPatternsService" + }, + "; savedObjectInfo: typeof ", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.SavedObjectInfoService", + "text": "SavedObjectInfoService" + }, + "; randomness: typeof ", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.RandomnessService", + "text": "RandomnessService" + }, + "; samlAuth: ({ getService }: ", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.FtrProviderContext", + "text": "FtrProviderContext" + }, + ") => { getInteractiveUserSessionCookieWithRoleScope(role: string, options?: ", + { + "pluginId": "@kbn/test", + "scope": "common", + "docId": "kibKbnTestPluginApi", + "section": "def-common.GetCookieOptions", + "text": "GetCookieOptions" + }, + " | undefined): Promise; getM2MApiCookieCredentialsWithRoleScope(role: string, options?: ", + { + "pluginId": "@kbn/test", + "scope": "common", + "docId": "kibKbnTestPluginApi", + "section": "def-common.GetCookieOptions", + "text": "GetCookieOptions" + }, + " | undefined): Promise<", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.CookieCredentials", + "text": "CookieCredentials" + }, + ">; getEmail(role: string): Promise; getUserData(role: string): Promise<", + "UserProfile", + ">; createM2mApiKeyWithDefaultRoleScope(): Promise<", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.RoleCredentials", + "text": "RoleCredentials" + }, + ">; createM2mApiKeyWithRoleScope(role: string): Promise<", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.RoleCredentials", + "text": "RoleCredentials" + }, + ">; invalidateM2mApiKeyWithRoleScope(roleCredentials: ", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.RoleCredentials", + "text": "RoleCredentials" + }, + "): Promise; setCustomRole(descriptors: ", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.KibanaRoleDescriptors", + "text": "KibanaRoleDescriptors" + }, + "): Promise; deleteCustomRole(): Promise; getCommonRequestHeader(): { 'kbn-xsrf': string; }; getInternalRequestHeader(): ", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.InternalRequestHeader", + "text": "InternalRequestHeader" + }, + "; DEFAULT_ROLE: string; CUSTOM_ROLE: string; }; supertest: ({ getService }: ", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.FtrProviderContext", + "text": "FtrProviderContext" + }, + ") => ", + "Agent", + "; esSupertest: ({ getService, }: ", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.FtrProviderContext", + "text": "FtrProviderContext" + }, + ") => ", + "Agent", + "; supertestWithoutAuth: ({ getService }: ", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.FtrProviderContext", + "text": "FtrProviderContext" + }, + ") => ", + "node_modules/@types/supertest/lib/agent", + "<", + "SuperTestStatic", + ".Test>; security: (ctx: ", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.FtrProviderContext", + "text": "FtrProviderContext" + }, + ") => Promise<", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.SecurityService", + "text": "SecurityService" + }, + ">; }, {}, ProvidedTypeMap<{ es: ({ getService }: ", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.FtrProviderContext", + "text": "FtrProviderContext" + }, + ") => ", + "default", + "; kibanaServer: ({ getService }: ", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.FtrProviderContext", + "text": "FtrProviderContext" + }, + ") => ", + { + "pluginId": "@kbn/test", + "scope": "common", + "docId": "kibKbnTestPluginApi", + "section": "def-common.KbnClient", + "text": "KbnClient" + }, + "; esArchiver: ({ getService }: ", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.FtrProviderContext", + "text": "FtrProviderContext" + }, + ") => ", + { + "pluginId": "@kbn/es-archiver", + "scope": "common", + "docId": "kibKbnEsArchiverPluginApi", + "section": "def-common.EsArchiver", + "text": "EsArchiver" + }, + "; retry: typeof ", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.RetryService", + "text": "RetryService" + }, + "; search: typeof ", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.SearchService", + "text": "SearchService" + }, + "; console: ({ getService }: ", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.FtrProviderContext", + "text": "FtrProviderContext" + }, + ") => { createIndex: (indexName: string) => Promise; createAlias: (indexName: string, aliasName: string) => Promise; createLegacyTemplate: (templateName: string) => Promise; createIndexTemplate: (templateName: string, indexPatterns: string[], composedOf: string[]) => Promise; createComponentTemplate: (templateName: string) => Promise; createDataStream: (dataStream: string) => Promise; deleteIndex: (indexName: string) => Promise; deleteAlias: (indexName: string, aliasName: string) => Promise; deleteLegacyTemplate: (templateName: string) => Promise; deleteIndexTemplate: (templateName: string) => Promise; deleteComponentTemplate: (templateName: string) => Promise; deleteDataStream: (dataStream: string) => Promise; }; deployment: typeof ", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.DeploymentService", + "text": "DeploymentService" + }, + "; esDeleteAllIndices: ({ getService }: ", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.FtrProviderContext", + "text": "FtrProviderContext" + }, + ") => (patterns: string | string[], remote?: boolean) => Promise; indexPatterns: typeof ", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.IndexPatternsService", + "text": "IndexPatternsService" + }, + "; savedObjectInfo: typeof ", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.SavedObjectInfoService", + "text": "SavedObjectInfoService" + }, + "; randomness: typeof ", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.RandomnessService", + "text": "RandomnessService" + }, + "; samlAuth: ({ getService }: ", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.FtrProviderContext", + "text": "FtrProviderContext" + }, + ") => { getInteractiveUserSessionCookieWithRoleScope(role: string, options?: ", + { + "pluginId": "@kbn/test", + "scope": "common", + "docId": "kibKbnTestPluginApi", + "section": "def-common.GetCookieOptions", + "text": "GetCookieOptions" + }, + " | undefined): Promise; getM2MApiCookieCredentialsWithRoleScope(role: string, options?: ", + { + "pluginId": "@kbn/test", + "scope": "common", + "docId": "kibKbnTestPluginApi", + "section": "def-common.GetCookieOptions", + "text": "GetCookieOptions" + }, + " | undefined): Promise<", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.CookieCredentials", + "text": "CookieCredentials" + }, + ">; getEmail(role: string): Promise; getUserData(role: string): Promise<", + "UserProfile", + ">; createM2mApiKeyWithDefaultRoleScope(): Promise<", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.RoleCredentials", + "text": "RoleCredentials" + }, + ">; createM2mApiKeyWithRoleScope(role: string): Promise<", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.RoleCredentials", + "text": "RoleCredentials" + }, + ">; invalidateM2mApiKeyWithRoleScope(roleCredentials: ", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.RoleCredentials", + "text": "RoleCredentials" + }, + "): Promise; setCustomRole(descriptors: ", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.KibanaRoleDescriptors", + "text": "KibanaRoleDescriptors" + }, + "): Promise; deleteCustomRole(): Promise; getCommonRequestHeader(): { 'kbn-xsrf': string; }; getInternalRequestHeader(): ", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.InternalRequestHeader", + "text": "InternalRequestHeader" + }, + "; DEFAULT_ROLE: string; CUSTOM_ROLE: string; }; supertest: ({ getService }: ", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.FtrProviderContext", + "text": "FtrProviderContext" + }, + ") => ", + "Agent", + "; esSupertest: ({ getService, }: ", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.FtrProviderContext", + "text": "FtrProviderContext" + }, + ") => ", + "Agent", + "; supertestWithoutAuth: ({ getService }: ", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.FtrProviderContext", + "text": "FtrProviderContext" + }, + ") => ", + "node_modules/@types/supertest/lib/agent", + "<", + "SuperTestStatic", + ".Test>; security: (ctx: ", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.FtrProviderContext", + "text": "FtrProviderContext" + }, + ") => Promise<", + { + "pluginId": "@kbn/ftr-common-functional-services", + "scope": "common", + "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", + "section": "def-common.SecurityService", + "text": "SecurityService" + }, + ">; }>, ProvidedTypeMap<{}>>" + ], + "path": "src/platform/packages/shared/kbn-ftr-common-functional-services/services/security/security.ts", + "deprecated": false, + "trackAdoption": false + } + ] } ], "initialIsOpen": false diff --git a/api_docs/kbn_ftr_common_functional_services.mdx b/api_docs/kbn_ftr_common_functional_services.mdx index bb6714bc70cbd..f398b4e37d66d 100644 --- a/api_docs/kbn_ftr_common_functional_services.mdx +++ b/api_docs/kbn_ftr_common_functional_services.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ftr-common-functional-services title: "@kbn/ftr-common-functional-services" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ftr-common-functional-services plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ftr-common-functional-services'] --- import kbnFtrCommonFunctionalServicesObj from './kbn_ftr_common_functional_services.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kiban | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 114 | 2 | 89 | 1 | +| 123 | 2 | 98 | 5 | ## Common diff --git a/api_docs/kbn_ftr_common_functional_ui_services.devdocs.json b/api_docs/kbn_ftr_common_functional_ui_services.devdocs.json index a29c478b02abe..0a913371a37c9 100644 --- a/api_docs/kbn_ftr_common_functional_ui_services.devdocs.json +++ b/api_docs/kbn_ftr_common_functional_ui_services.devdocs.json @@ -18,115 +18,6 @@ }, "common": { "classes": [ - { - "parentPluginId": "@kbn/ftr-common-functional-ui-services", - "id": "def-common.SecurityService", - "type": "Class", - "tags": [], - "label": "SecurityService", - "description": [], - "path": "src/platform/packages/shared/kbn-ftr-common-functional-ui-services/services/security/security.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/ftr-common-functional-ui-services", - "id": "def-common.SecurityService.Unnamed", - "type": "Function", - "tags": [], - "label": "Constructor", - "description": [], - "signature": [ - "any" - ], - "path": "src/platform/packages/shared/kbn-ftr-common-functional-ui-services/services/security/security.ts", - "deprecated": false, - "trackAdoption": false, - "children": [ - { - "parentPluginId": "@kbn/ftr-common-functional-ui-services", - "id": "def-common.SecurityService.Unnamed.$1", - "type": "Object", - "tags": [], - "label": "roleMappings", - "description": [], - "signature": [ - "RoleMappings" - ], - "path": "src/platform/packages/shared/kbn-ftr-common-functional-ui-services/services/security/security.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - }, - { - "parentPluginId": "@kbn/ftr-common-functional-ui-services", - "id": "def-common.SecurityService.Unnamed.$2", - "type": "Object", - "tags": [], - "label": "testUser", - "description": [], - "signature": [ - "TestUser" - ], - "path": "src/platform/packages/shared/kbn-ftr-common-functional-ui-services/services/security/security.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - }, - { - "parentPluginId": "@kbn/ftr-common-functional-ui-services", - "id": "def-common.SecurityService.Unnamed.$3", - "type": "Object", - "tags": [], - "label": "role", - "description": [], - "signature": [ - "Role" - ], - "path": "src/platform/packages/shared/kbn-ftr-common-functional-ui-services/services/security/security.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - }, - { - "parentPluginId": "@kbn/ftr-common-functional-ui-services", - "id": "def-common.SecurityService.Unnamed.$4", - "type": "Object", - "tags": [], - "label": "user", - "description": [], - "signature": [ - "User" - ], - "path": "src/platform/packages/shared/kbn-ftr-common-functional-ui-services/services/security/security.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - }, - { - "parentPluginId": "@kbn/ftr-common-functional-ui-services", - "id": "def-common.SecurityService.Unnamed.$5", - "type": "Object", - "tags": [], - "label": "testUserSupertest", - "description": [], - "signature": [ - "node_modules/@types/supertest/lib/agent", - "<", - "SuperTestStatic", - ".Test>" - ], - "path": "src/platform/packages/shared/kbn-ftr-common-functional-ui-services/services/security/security.ts", - "deprecated": false, - "trackAdoption": false, - "isRequired": true - } - ], - "returnComment": [] - } - ], - "initialIsOpen": false - }, { "parentPluginId": "@kbn/ftr-common-functional-ui-services", "id": "def-common.TestSubjects", @@ -12206,23 +12097,7 @@ }, ") => Promise; toasts: typeof ", "ToastsService", - "; security: (ctx: ", - { - "pluginId": "@kbn/ftr-common-functional-ui-services", - "scope": "common", - "docId": "kibKbnFtrCommonFunctionalUiServicesPluginApi", - "section": "def-common.FtrProviderContext", - "text": "FtrProviderContext" - }, - ") => Promise<", - { - "pluginId": "@kbn/ftr-common-functional-ui-services", - "scope": "common", - "docId": "kibKbnFtrCommonFunctionalUiServicesPluginApi", - "section": "def-common.SecurityService", - "text": "SecurityService" - }, - ">; }, {}, ProvidedTypeMap<{ retry: typeof ", + "; }, {}, ProvidedTypeMap<{ retry: typeof ", { "pluginId": "@kbn/ftr-common-functional-services", "scope": "common", @@ -12312,23 +12187,7 @@ }, ") => Promise; toasts: typeof ", "ToastsService", - "; security: (ctx: ", - { - "pluginId": "@kbn/ftr-common-functional-ui-services", - "scope": "common", - "docId": "kibKbnFtrCommonFunctionalUiServicesPluginApi", - "section": "def-common.FtrProviderContext", - "text": "FtrProviderContext" - }, - ") => Promise<", - { - "pluginId": "@kbn/ftr-common-functional-ui-services", - "scope": "common", - "docId": "kibKbnFtrCommonFunctionalUiServicesPluginApi", - "section": "def-common.SecurityService", - "text": "SecurityService" - }, - ">; }>, ProvidedTypeMap<{}>>" + "; }>, ProvidedTypeMap<{}>>" ], "path": "src/platform/packages/shared/kbn-ftr-common-functional-ui-services/services/ftr_provider_context.ts", "deprecated": false, @@ -12805,23 +12664,7 @@ }, ") => Promise; toasts: typeof ", "ToastsService", - "; security: (ctx: ", - { - "pluginId": "@kbn/ftr-common-functional-ui-services", - "scope": "common", - "docId": "kibKbnFtrCommonFunctionalUiServicesPluginApi", - "section": "def-common.FtrProviderContext", - "text": "FtrProviderContext" - }, - ") => Promise<", - { - "pluginId": "@kbn/ftr-common-functional-ui-services", - "scope": "common", - "docId": "kibKbnFtrCommonFunctionalUiServicesPluginApi", - "section": "def-common.SecurityService", - "text": "SecurityService" - }, - ">; }, {}, ProvidedTypeMap<{ retry: typeof ", + "; }, {}, ProvidedTypeMap<{ retry: typeof ", { "pluginId": "@kbn/ftr-common-functional-services", "scope": "common", @@ -12911,23 +12754,7 @@ }, ") => Promise; toasts: typeof ", "ToastsService", - "; security: (ctx: ", - { - "pluginId": "@kbn/ftr-common-functional-ui-services", - "scope": "common", - "docId": "kibKbnFtrCommonFunctionalUiServicesPluginApi", - "section": "def-common.FtrProviderContext", - "text": "FtrProviderContext" - }, - ") => Promise<", - { - "pluginId": "@kbn/ftr-common-functional-ui-services", - "scope": "common", - "docId": "kibKbnFtrCommonFunctionalUiServicesPluginApi", - "section": "def-common.SecurityService", - "text": "SecurityService" - }, - ">; }>, ProvidedTypeMap<{}>>" + "; }>, ProvidedTypeMap<{}>>" ], "path": "src/platform/packages/shared/kbn-ftr-common-functional-ui-services/services/retry_on_stale.ts", "deprecated": false, @@ -13075,23 +12902,7 @@ }, ") => Promise; toasts: typeof ", "ToastsService", - "; security: (ctx: ", - { - "pluginId": "@kbn/ftr-common-functional-ui-services", - "scope": "common", - "docId": "kibKbnFtrCommonFunctionalUiServicesPluginApi", - "section": "def-common.FtrProviderContext", - "text": "FtrProviderContext" - }, - ") => Promise<", - { - "pluginId": "@kbn/ftr-common-functional-ui-services", - "scope": "common", - "docId": "kibKbnFtrCommonFunctionalUiServicesPluginApi", - "section": "def-common.SecurityService", - "text": "SecurityService" - }, - ">; }, {}, ProvidedTypeMap<{ retry: typeof ", + "; }, {}, ProvidedTypeMap<{ retry: typeof ", { "pluginId": "@kbn/ftr-common-functional-services", "scope": "common", @@ -13181,23 +12992,7 @@ }, ") => Promise; toasts: typeof ", "ToastsService", - "; security: (ctx: ", - { - "pluginId": "@kbn/ftr-common-functional-ui-services", - "scope": "common", - "docId": "kibKbnFtrCommonFunctionalUiServicesPluginApi", - "section": "def-common.FtrProviderContext", - "text": "FtrProviderContext" - }, - ") => Promise<", - { - "pluginId": "@kbn/ftr-common-functional-ui-services", - "scope": "common", - "docId": "kibKbnFtrCommonFunctionalUiServicesPluginApi", - "section": "def-common.SecurityService", - "text": "SecurityService" - }, - ">; }>, ProvidedTypeMap<{}>>" + "; }>, ProvidedTypeMap<{}>>" ], "path": "src/platform/packages/shared/kbn-ftr-common-functional-ui-services/services/remote/remote.ts", "deprecated": false, @@ -13335,23 +13130,7 @@ }, ") => Promise; toasts: typeof ", "ToastsService", - "; security: (ctx: ", - { - "pluginId": "@kbn/ftr-common-functional-ui-services", - "scope": "common", - "docId": "kibKbnFtrCommonFunctionalUiServicesPluginApi", - "section": "def-common.FtrProviderContext", - "text": "FtrProviderContext" - }, - ") => Promise<", - { - "pluginId": "@kbn/ftr-common-functional-ui-services", - "scope": "common", - "docId": "kibKbnFtrCommonFunctionalUiServicesPluginApi", - "section": "def-common.SecurityService", - "text": "SecurityService" - }, - ">; }, {}, ProvidedTypeMap<{ retry: typeof ", + "; }, {}, ProvidedTypeMap<{ retry: typeof ", { "pluginId": "@kbn/ftr-common-functional-services", "scope": "common", @@ -13441,23 +13220,7 @@ }, ") => Promise; toasts: typeof ", "ToastsService", - "; security: (ctx: ", - { - "pluginId": "@kbn/ftr-common-functional-ui-services", - "scope": "common", - "docId": "kibKbnFtrCommonFunctionalUiServicesPluginApi", - "section": "def-common.FtrProviderContext", - "text": "FtrProviderContext" - }, - ") => Promise<", - { - "pluginId": "@kbn/ftr-common-functional-ui-services", - "scope": "common", - "docId": "kibKbnFtrCommonFunctionalUiServicesPluginApi", - "section": "def-common.SecurityService", - "text": "SecurityService" - }, - ">; }>, ProvidedTypeMap<{}>>" + "; }>, ProvidedTypeMap<{}>>" ], "path": "src/platform/packages/shared/kbn-ftr-common-functional-ui-services/services/find.ts", "deprecated": false, @@ -13614,23 +13377,7 @@ }, ") => Promise; toasts: typeof ", "ToastsService", - "; security: (ctx: ", - { - "pluginId": "@kbn/ftr-common-functional-ui-services", - "scope": "common", - "docId": "kibKbnFtrCommonFunctionalUiServicesPluginApi", - "section": "def-common.FtrProviderContext", - "text": "FtrProviderContext" - }, - ") => Promise<", - { - "pluginId": "@kbn/ftr-common-functional-ui-services", - "scope": "common", - "docId": "kibKbnFtrCommonFunctionalUiServicesPluginApi", - "section": "def-common.SecurityService", - "text": "SecurityService" - }, - ">; }, {}, ProvidedTypeMap<{ retry: typeof ", + "; }, {}, ProvidedTypeMap<{ retry: typeof ", { "pluginId": "@kbn/ftr-common-functional-services", "scope": "common", @@ -13720,23 +13467,7 @@ }, ") => Promise; toasts: typeof ", "ToastsService", - "; security: (ctx: ", - { - "pluginId": "@kbn/ftr-common-functional-ui-services", - "scope": "common", - "docId": "kibKbnFtrCommonFunctionalUiServicesPluginApi", - "section": "def-common.FtrProviderContext", - "text": "FtrProviderContext" - }, - ") => Promise<", - { - "pluginId": "@kbn/ftr-common-functional-ui-services", - "scope": "common", - "docId": "kibKbnFtrCommonFunctionalUiServicesPluginApi", - "section": "def-common.SecurityService", - "text": "SecurityService" - }, - ">; }>, ProvidedTypeMap<{}>>" + "; }>, ProvidedTypeMap<{}>>" ], "path": "src/platform/packages/shared/kbn-ftr-common-functional-ui-services/services/browser.ts", "deprecated": false, @@ -13758,272 +13489,6 @@ "path": "src/platform/packages/shared/kbn-ftr-common-functional-ui-services/services/all.ts", "deprecated": false, "trackAdoption": false - }, - { - "parentPluginId": "@kbn/ftr-common-functional-ui-services", - "id": "def-common.services.security", - "type": "Function", - "tags": [], - "label": "security", - "description": [], - "signature": [ - "(ctx: ", - { - "pluginId": "@kbn/ftr-common-functional-ui-services", - "scope": "common", - "docId": "kibKbnFtrCommonFunctionalUiServicesPluginApi", - "section": "def-common.FtrProviderContext", - "text": "FtrProviderContext" - }, - ") => Promise<", - { - "pluginId": "@kbn/ftr-common-functional-ui-services", - "scope": "common", - "docId": "kibKbnFtrCommonFunctionalUiServicesPluginApi", - "section": "def-common.SecurityService", - "text": "SecurityService" - }, - ">" - ], - "path": "src/platform/packages/shared/kbn-ftr-common-functional-ui-services/services/all.ts", - "deprecated": false, - "trackAdoption": false, - "returnComment": [], - "children": [ - { - "parentPluginId": "@kbn/ftr-common-functional-ui-services", - "id": "def-common.services.security.$1", - "type": "Object", - "tags": [], - "label": "ctx", - "description": [], - "signature": [ - { - "pluginId": "@kbn/test", - "scope": "common", - "docId": "kibKbnTestPluginApi", - "section": "def-common.GenericFtrProviderContext", - "text": "GenericFtrProviderContext" - }, - "<{ retry: typeof ", - { - "pluginId": "@kbn/ftr-common-functional-services", - "scope": "common", - "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", - "section": "def-common.RetryService", - "text": "RetryService" - }, - "; es: ({ getService }: ", - { - "pluginId": "@kbn/ftr-common-functional-services", - "scope": "common", - "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", - "section": "def-common.FtrProviderContext", - "text": "FtrProviderContext" - }, - ") => ", - "default", - "; kibanaServer: ({ getService }: ", - { - "pluginId": "@kbn/ftr-common-functional-services", - "scope": "common", - "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", - "section": "def-common.FtrProviderContext", - "text": "FtrProviderContext" - }, - ") => ", - { - "pluginId": "@kbn/test", - "scope": "common", - "docId": "kibKbnTestPluginApi", - "section": "def-common.KbnClient", - "text": "KbnClient" - }, - "; retryOnStale: ({ getService }: ", - { - "pluginId": "@kbn/ftr-common-functional-ui-services", - "scope": "common", - "docId": "kibKbnFtrCommonFunctionalUiServicesPluginApi", - "section": "def-common.FtrProviderContext", - "text": "FtrProviderContext" - }, - ") => { (fn: () => Promise): Promise; wrap(fn: (...args: Args) => Promise): (...args: Args) => Promise; }; __webdriver__: ({ getService }: ", - { - "pluginId": "@kbn/ftr-common-functional-ui-services", - "scope": "common", - "docId": "kibKbnFtrCommonFunctionalUiServicesPluginApi", - "section": "def-common.FtrProviderContext", - "text": "FtrProviderContext" - }, - ") => Promise<{ driver: ", - "WebDriver", - "; browserType: ", - { - "pluginId": "@kbn/ftr-common-functional-ui-services", - "scope": "common", - "docId": "kibKbnFtrCommonFunctionalUiServicesPluginApi", - "section": "def-common.Browsers", - "text": "Browsers" - }, - "; consoleLog$: ", - "Observable", - "<{ message: string; level: string; }>; }>; find: (ctx: ", - { - "pluginId": "@kbn/ftr-common-functional-ui-services", - "scope": "common", - "docId": "kibKbnFtrCommonFunctionalUiServicesPluginApi", - "section": "def-common.FtrProviderContext", - "text": "FtrProviderContext" - }, - ") => Promise<", - "FindService", - ">; testSubjects: typeof ", - { - "pluginId": "@kbn/ftr-common-functional-ui-services", - "scope": "common", - "docId": "kibKbnFtrCommonFunctionalUiServicesPluginApi", - "section": "def-common.TestSubjects", - "text": "TestSubjects" - }, - "; browser: (ctx: ", - { - "pluginId": "@kbn/ftr-common-functional-ui-services", - "scope": "common", - "docId": "kibKbnFtrCommonFunctionalUiServicesPluginApi", - "section": "def-common.FtrProviderContext", - "text": "FtrProviderContext" - }, - ") => Promise; toasts: typeof ", - "ToastsService", - "; security: (ctx: ", - { - "pluginId": "@kbn/ftr-common-functional-ui-services", - "scope": "common", - "docId": "kibKbnFtrCommonFunctionalUiServicesPluginApi", - "section": "def-common.FtrProviderContext", - "text": "FtrProviderContext" - }, - ") => Promise<", - { - "pluginId": "@kbn/ftr-common-functional-ui-services", - "scope": "common", - "docId": "kibKbnFtrCommonFunctionalUiServicesPluginApi", - "section": "def-common.SecurityService", - "text": "SecurityService" - }, - ">; }, {}, ProvidedTypeMap<{ retry: typeof ", - { - "pluginId": "@kbn/ftr-common-functional-services", - "scope": "common", - "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", - "section": "def-common.RetryService", - "text": "RetryService" - }, - "; es: ({ getService }: ", - { - "pluginId": "@kbn/ftr-common-functional-services", - "scope": "common", - "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", - "section": "def-common.FtrProviderContext", - "text": "FtrProviderContext" - }, - ") => ", - "default", - "; kibanaServer: ({ getService }: ", - { - "pluginId": "@kbn/ftr-common-functional-services", - "scope": "common", - "docId": "kibKbnFtrCommonFunctionalServicesPluginApi", - "section": "def-common.FtrProviderContext", - "text": "FtrProviderContext" - }, - ") => ", - { - "pluginId": "@kbn/test", - "scope": "common", - "docId": "kibKbnTestPluginApi", - "section": "def-common.KbnClient", - "text": "KbnClient" - }, - "; retryOnStale: ({ getService }: ", - { - "pluginId": "@kbn/ftr-common-functional-ui-services", - "scope": "common", - "docId": "kibKbnFtrCommonFunctionalUiServicesPluginApi", - "section": "def-common.FtrProviderContext", - "text": "FtrProviderContext" - }, - ") => { (fn: () => Promise): Promise; wrap(fn: (...args: Args) => Promise): (...args: Args) => Promise; }; __webdriver__: ({ getService }: ", - { - "pluginId": "@kbn/ftr-common-functional-ui-services", - "scope": "common", - "docId": "kibKbnFtrCommonFunctionalUiServicesPluginApi", - "section": "def-common.FtrProviderContext", - "text": "FtrProviderContext" - }, - ") => Promise<{ driver: ", - "WebDriver", - "; browserType: ", - { - "pluginId": "@kbn/ftr-common-functional-ui-services", - "scope": "common", - "docId": "kibKbnFtrCommonFunctionalUiServicesPluginApi", - "section": "def-common.Browsers", - "text": "Browsers" - }, - "; consoleLog$: ", - "Observable", - "<{ message: string; level: string; }>; }>; find: (ctx: ", - { - "pluginId": "@kbn/ftr-common-functional-ui-services", - "scope": "common", - "docId": "kibKbnFtrCommonFunctionalUiServicesPluginApi", - "section": "def-common.FtrProviderContext", - "text": "FtrProviderContext" - }, - ") => Promise<", - "FindService", - ">; testSubjects: typeof ", - { - "pluginId": "@kbn/ftr-common-functional-ui-services", - "scope": "common", - "docId": "kibKbnFtrCommonFunctionalUiServicesPluginApi", - "section": "def-common.TestSubjects", - "text": "TestSubjects" - }, - "; browser: (ctx: ", - { - "pluginId": "@kbn/ftr-common-functional-ui-services", - "scope": "common", - "docId": "kibKbnFtrCommonFunctionalUiServicesPluginApi", - "section": "def-common.FtrProviderContext", - "text": "FtrProviderContext" - }, - ") => Promise; toasts: typeof ", - "ToastsService", - "; security: (ctx: ", - { - "pluginId": "@kbn/ftr-common-functional-ui-services", - "scope": "common", - "docId": "kibKbnFtrCommonFunctionalUiServicesPluginApi", - "section": "def-common.FtrProviderContext", - "text": "FtrProviderContext" - }, - ") => Promise<", - { - "pluginId": "@kbn/ftr-common-functional-ui-services", - "scope": "common", - "docId": "kibKbnFtrCommonFunctionalUiServicesPluginApi", - "section": "def-common.SecurityService", - "text": "SecurityService" - }, - ">; }>, ProvidedTypeMap<{}>>" - ], - "path": "src/platform/packages/shared/kbn-ftr-common-functional-ui-services/services/security/security.ts", - "deprecated": false, - "trackAdoption": false - } - ] } ], "initialIsOpen": false diff --git a/api_docs/kbn_ftr_common_functional_ui_services.mdx b/api_docs/kbn_ftr_common_functional_ui_services.mdx index ad923eebd24bb..b81ec51353e7c 100644 --- a/api_docs/kbn_ftr_common_functional_ui_services.mdx +++ b/api_docs/kbn_ftr_common_functional_ui_services.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ftr-common-functional-ui-services title: "@kbn/ftr-common-functional-ui-services" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ftr-common-functional-ui-services plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ftr-common-functional-ui-services'] --- import kbnFtrCommonFunctionalUiServicesObj from './kbn_ftr_common_functional_ui_services.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/appex-qa](https://github.com/orgs/elastic/teams/appex-qa) for | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 564 | 6 | 524 | 7 | +| 555 | 6 | 515 | 3 | ## Common diff --git a/api_docs/kbn_gen_ai_functional_testing.mdx b/api_docs/kbn_gen_ai_functional_testing.mdx index c1c0bf0c440f6..947b5262b01c1 100644 --- a/api_docs/kbn_gen_ai_functional_testing.mdx +++ b/api_docs/kbn_gen_ai_functional_testing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-gen-ai-functional-testing title: "@kbn/gen-ai-functional-testing" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/gen-ai-functional-testing plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/gen-ai-functional-testing'] --- import kbnGenAiFunctionalTestingObj from './kbn_gen_ai_functional_testing.devdocs.json'; diff --git a/api_docs/kbn_generate.mdx b/api_docs/kbn_generate.mdx index f46337c50499d..3e49085086f70 100644 --- a/api_docs/kbn_generate.mdx +++ b/api_docs/kbn_generate.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate title: "@kbn/generate" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate'] --- import kbnGenerateObj from './kbn_generate.devdocs.json'; diff --git a/api_docs/kbn_generate_console_definitions.mdx b/api_docs/kbn_generate_console_definitions.mdx index d5db13687e48d..d733766717dff 100644 --- a/api_docs/kbn_generate_console_definitions.mdx +++ b/api_docs/kbn_generate_console_definitions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate-console-definitions title: "@kbn/generate-console-definitions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate-console-definitions plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate-console-definitions'] --- import kbnGenerateConsoleDefinitionsObj from './kbn_generate_console_definitions.devdocs.json'; diff --git a/api_docs/kbn_generate_csv.mdx b/api_docs/kbn_generate_csv.mdx index 4f7ce9dcb50c5..779dcdd5eef87 100644 --- a/api_docs/kbn_generate_csv.mdx +++ b/api_docs/kbn_generate_csv.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-generate-csv title: "@kbn/generate-csv" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/generate-csv plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/generate-csv'] --- import kbnGenerateCsvObj from './kbn_generate_csv.devdocs.json'; diff --git a/api_docs/kbn_grid_layout.mdx b/api_docs/kbn_grid_layout.mdx index 1c4fc2d5479c4..300a1a542dd76 100644 --- a/api_docs/kbn_grid_layout.mdx +++ b/api_docs/kbn_grid_layout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-grid-layout title: "@kbn/grid-layout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/grid-layout plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/grid-layout'] --- import kbnGridLayoutObj from './kbn_grid_layout.devdocs.json'; diff --git a/api_docs/kbn_grouping.mdx b/api_docs/kbn_grouping.mdx index 80a8bb3be7e10..4f55343f38a76 100644 --- a/api_docs/kbn_grouping.mdx +++ b/api_docs/kbn_grouping.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-grouping title: "@kbn/grouping" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/grouping plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/grouping'] --- import kbnGroupingObj from './kbn_grouping.devdocs.json'; diff --git a/api_docs/kbn_guided_onboarding.mdx b/api_docs/kbn_guided_onboarding.mdx index 5d7582ba92528..69dbdcbd66d6d 100644 --- a/api_docs/kbn_guided_onboarding.mdx +++ b/api_docs/kbn_guided_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-guided-onboarding title: "@kbn/guided-onboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/guided-onboarding plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/guided-onboarding'] --- import kbnGuidedOnboardingObj from './kbn_guided_onboarding.devdocs.json'; diff --git a/api_docs/kbn_handlebars.mdx b/api_docs/kbn_handlebars.mdx index 9c0c1f8d287ed..86193ea75ffc2 100644 --- a/api_docs/kbn_handlebars.mdx +++ b/api_docs/kbn_handlebars.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-handlebars title: "@kbn/handlebars" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/handlebars plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/handlebars'] --- import kbnHandlebarsObj from './kbn_handlebars.devdocs.json'; diff --git a/api_docs/kbn_hapi_mocks.mdx b/api_docs/kbn_hapi_mocks.mdx index e65cb8a7a879f..e0c6006e21848 100644 --- a/api_docs/kbn_hapi_mocks.mdx +++ b/api_docs/kbn_hapi_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-hapi-mocks title: "@kbn/hapi-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/hapi-mocks plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/hapi-mocks'] --- import kbnHapiMocksObj from './kbn_hapi_mocks.devdocs.json'; diff --git a/api_docs/kbn_health_gateway_server.mdx b/api_docs/kbn_health_gateway_server.mdx index 0f35832cb3271..3ac89a8bba5ff 100644 --- a/api_docs/kbn_health_gateway_server.mdx +++ b/api_docs/kbn_health_gateway_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-health-gateway-server title: "@kbn/health-gateway-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/health-gateway-server plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/health-gateway-server'] --- import kbnHealthGatewayServerObj from './kbn_health_gateway_server.devdocs.json'; diff --git a/api_docs/kbn_home_sample_data_card.mdx b/api_docs/kbn_home_sample_data_card.mdx index 471e98c39af0d..333bf97f0b962 100644 --- a/api_docs/kbn_home_sample_data_card.mdx +++ b/api_docs/kbn_home_sample_data_card.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-home-sample-data-card title: "@kbn/home-sample-data-card" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/home-sample-data-card plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/home-sample-data-card'] --- import kbnHomeSampleDataCardObj from './kbn_home_sample_data_card.devdocs.json'; diff --git a/api_docs/kbn_home_sample_data_tab.mdx b/api_docs/kbn_home_sample_data_tab.mdx index 6d38f897a7788..cb98c03cc4806 100644 --- a/api_docs/kbn_home_sample_data_tab.mdx +++ b/api_docs/kbn_home_sample_data_tab.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-home-sample-data-tab title: "@kbn/home-sample-data-tab" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/home-sample-data-tab plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/home-sample-data-tab'] --- import kbnHomeSampleDataTabObj from './kbn_home_sample_data_tab.devdocs.json'; diff --git a/api_docs/kbn_i18n.mdx b/api_docs/kbn_i18n.mdx index 3a8f5058a92bb..d5683649b6a03 100644 --- a/api_docs/kbn_i18n.mdx +++ b/api_docs/kbn_i18n.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-i18n title: "@kbn/i18n" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/i18n plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/i18n'] --- import kbnI18nObj from './kbn_i18n.devdocs.json'; diff --git a/api_docs/kbn_i18n_react.mdx b/api_docs/kbn_i18n_react.mdx index b41a1eeee755c..9b9ea05391e2f 100644 --- a/api_docs/kbn_i18n_react.mdx +++ b/api_docs/kbn_i18n_react.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-i18n-react title: "@kbn/i18n-react" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/i18n-react plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/i18n-react'] --- import kbnI18nReactObj from './kbn_i18n_react.devdocs.json'; diff --git a/api_docs/kbn_import_resolver.mdx b/api_docs/kbn_import_resolver.mdx index 4190f02a946cb..fe42a1b776561 100644 --- a/api_docs/kbn_import_resolver.mdx +++ b/api_docs/kbn_import_resolver.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-import-resolver title: "@kbn/import-resolver" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/import-resolver plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/import-resolver'] --- import kbnImportResolverObj from './kbn_import_resolver.devdocs.json'; diff --git a/api_docs/kbn_index_adapter.mdx b/api_docs/kbn_index_adapter.mdx index 87800f7865fd6..63db29c0f1fba 100644 --- a/api_docs/kbn_index_adapter.mdx +++ b/api_docs/kbn_index_adapter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-index-adapter title: "@kbn/index-adapter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/index-adapter plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/index-adapter'] --- import kbnIndexAdapterObj from './kbn_index_adapter.devdocs.json'; diff --git a/api_docs/kbn_index_lifecycle_management_common_shared.devdocs.json b/api_docs/kbn_index_lifecycle_management_common_shared.devdocs.json index 49290593f7ac3..3e6ca2a6d74bc 100644 --- a/api_docs/kbn_index_lifecycle_management_common_shared.devdocs.json +++ b/api_docs/kbn_index_lifecycle_management_common_shared.devdocs.json @@ -702,14 +702,6 @@ "plugin": "indexLifecycleManagement", "path": "x-pack/platform/plugins/private/index_lifecycle_management/public/application/sections/policy_list/policy_flyout/components/rollover.tsx" }, - { - "plugin": "streamsApp", - "path": "x-pack/platform/plugins/shared/streams_app/public/components/stream_detail_lifecycle/modal.tsx" - }, - { - "plugin": "streamsApp", - "path": "x-pack/platform/plugins/shared/streams_app/public/components/stream_detail_lifecycle/modal.tsx" - }, { "plugin": "indexLifecycleManagement", "path": "x-pack/platform/plugins/private/index_lifecycle_management/integration_tests/edit_policy/constants.ts" diff --git a/api_docs/kbn_index_lifecycle_management_common_shared.mdx b/api_docs/kbn_index_lifecycle_management_common_shared.mdx index 5612110b32beb..1ff39ab1462bf 100644 --- a/api_docs/kbn_index_lifecycle_management_common_shared.mdx +++ b/api_docs/kbn_index_lifecycle_management_common_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-index-lifecycle-management-common-shared title: "@kbn/index-lifecycle-management-common-shared" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/index-lifecycle-management-common-shared plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/index-lifecycle-management-common-shared'] --- import kbnIndexLifecycleManagementCommonSharedObj from './kbn_index_lifecycle_management_common_shared.devdocs.json'; diff --git a/api_docs/kbn_index_management_shared_types.mdx b/api_docs/kbn_index_management_shared_types.mdx index 6177b9cbaf6f5..668e009e9193a 100644 --- a/api_docs/kbn_index_management_shared_types.mdx +++ b/api_docs/kbn_index_management_shared_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-index-management-shared-types title: "@kbn/index-management-shared-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/index-management-shared-types plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/index-management-shared-types'] --- import kbnIndexManagementSharedTypesObj from './kbn_index_management_shared_types.devdocs.json'; diff --git a/api_docs/kbn_inference_common.mdx b/api_docs/kbn_inference_common.mdx index a9724b2666a70..c5a1f5a12ab93 100644 --- a/api_docs/kbn_inference_common.mdx +++ b/api_docs/kbn_inference_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-inference-common title: "@kbn/inference-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/inference-common plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/inference-common'] --- import kbnInferenceCommonObj from './kbn_inference_common.devdocs.json'; diff --git a/api_docs/kbn_inference_endpoint_ui_common.mdx b/api_docs/kbn_inference_endpoint_ui_common.mdx index 144a80ed08d47..1e756e4c3df5b 100644 --- a/api_docs/kbn_inference_endpoint_ui_common.mdx +++ b/api_docs/kbn_inference_endpoint_ui_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-inference-endpoint-ui-common title: "@kbn/inference-endpoint-ui-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/inference-endpoint-ui-common plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/inference-endpoint-ui-common'] --- import kbnInferenceEndpointUiCommonObj from './kbn_inference_endpoint_ui_common.devdocs.json'; diff --git a/api_docs/kbn_inference_langchain.devdocs.json b/api_docs/kbn_inference_langchain.devdocs.json index 70441280c45b1..9427257622481 100644 --- a/api_docs/kbn_inference_langchain.devdocs.json +++ b/api_docs/kbn_inference_langchain.devdocs.json @@ -938,7 +938,7 @@ "text": "InferenceChatModelParams" }, " extends ", - "BaseLanguageModelParams" + "BaseChatModelParams" ], "path": "x-pack/platform/packages/shared/ai-infra/inference-langchain/src/chat_model/inference_chat_model.ts", "deprecated": false, diff --git a/api_docs/kbn_inference_langchain.mdx b/api_docs/kbn_inference_langchain.mdx index 278d11bca1c8f..85183e249d112 100644 --- a/api_docs/kbn_inference_langchain.mdx +++ b/api_docs/kbn_inference_langchain.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-inference-langchain title: "@kbn/inference-langchain" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/inference-langchain plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/inference-langchain'] --- import kbnInferenceLangchainObj from './kbn_inference_langchain.devdocs.json'; diff --git a/api_docs/kbn_infra_forge.mdx b/api_docs/kbn_infra_forge.mdx index c2d6b0eef91bf..8177ba530844e 100644 --- a/api_docs/kbn_infra_forge.mdx +++ b/api_docs/kbn_infra_forge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-infra-forge title: "@kbn/infra-forge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/infra-forge plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/infra-forge'] --- import kbnInfraForgeObj from './kbn_infra_forge.devdocs.json'; diff --git a/api_docs/kbn_interpreter.mdx b/api_docs/kbn_interpreter.mdx index b22d4c819ebb3..d4a898829abf5 100644 --- a/api_docs/kbn_interpreter.mdx +++ b/api_docs/kbn_interpreter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-interpreter title: "@kbn/interpreter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/interpreter plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/interpreter'] --- import kbnInterpreterObj from './kbn_interpreter.devdocs.json'; diff --git a/api_docs/kbn_investigation_shared.mdx b/api_docs/kbn_investigation_shared.mdx index eae5db4dcb6a8..c2541a9ec883f 100644 --- a/api_docs/kbn_investigation_shared.mdx +++ b/api_docs/kbn_investigation_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-investigation-shared title: "@kbn/investigation-shared" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/investigation-shared plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/investigation-shared'] --- import kbnInvestigationSharedObj from './kbn_investigation_shared.devdocs.json'; diff --git a/api_docs/kbn_io_ts_utils.mdx b/api_docs/kbn_io_ts_utils.mdx index 76eb719406d68..1ccff548c9119 100644 --- a/api_docs/kbn_io_ts_utils.mdx +++ b/api_docs/kbn_io_ts_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-io-ts-utils title: "@kbn/io-ts-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/io-ts-utils plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/io-ts-utils'] --- import kbnIoTsUtilsObj from './kbn_io_ts_utils.devdocs.json'; diff --git a/api_docs/kbn_ipynb.mdx b/api_docs/kbn_ipynb.mdx index 1969161a0583f..d88d7517cd689 100644 --- a/api_docs/kbn_ipynb.mdx +++ b/api_docs/kbn_ipynb.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ipynb title: "@kbn/ipynb" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ipynb plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ipynb'] --- import kbnIpynbObj from './kbn_ipynb.devdocs.json'; diff --git a/api_docs/kbn_item_buffer.mdx b/api_docs/kbn_item_buffer.mdx index dfbe414faf518..f0c45ee97732e 100644 --- a/api_docs/kbn_item_buffer.mdx +++ b/api_docs/kbn_item_buffer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-item-buffer title: "@kbn/item-buffer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/item-buffer plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/item-buffer'] --- import kbnItemBufferObj from './kbn_item_buffer.devdocs.json'; diff --git a/api_docs/kbn_jest_serializers.mdx b/api_docs/kbn_jest_serializers.mdx index 7b45cf762a225..cca3847834dcc 100644 --- a/api_docs/kbn_jest_serializers.mdx +++ b/api_docs/kbn_jest_serializers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-jest-serializers title: "@kbn/jest-serializers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/jest-serializers plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/jest-serializers'] --- import kbnJestSerializersObj from './kbn_jest_serializers.devdocs.json'; diff --git a/api_docs/kbn_journeys.mdx b/api_docs/kbn_journeys.mdx index 33f6afe237efe..3b9e8e7409708 100644 --- a/api_docs/kbn_journeys.mdx +++ b/api_docs/kbn_journeys.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-journeys title: "@kbn/journeys" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/journeys plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/journeys'] --- import kbnJourneysObj from './kbn_journeys.devdocs.json'; diff --git a/api_docs/kbn_json_ast.mdx b/api_docs/kbn_json_ast.mdx index 6775fb4f77821..89c72f2cf4b80 100644 --- a/api_docs/kbn_json_ast.mdx +++ b/api_docs/kbn_json_ast.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-json-ast title: "@kbn/json-ast" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/json-ast plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/json-ast'] --- import kbnJsonAstObj from './kbn_json_ast.devdocs.json'; diff --git a/api_docs/kbn_json_schemas.mdx b/api_docs/kbn_json_schemas.mdx index 42b3818b29523..df470d80dac09 100644 --- a/api_docs/kbn_json_schemas.mdx +++ b/api_docs/kbn_json_schemas.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-json-schemas title: "@kbn/json-schemas" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/json-schemas plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/json-schemas'] --- import kbnJsonSchemasObj from './kbn_json_schemas.devdocs.json'; diff --git a/api_docs/kbn_key_value_metadata_table.mdx b/api_docs/kbn_key_value_metadata_table.mdx index af2c24ee26b1f..528f3aadcf4de 100644 --- a/api_docs/kbn_key_value_metadata_table.mdx +++ b/api_docs/kbn_key_value_metadata_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-key-value-metadata-table title: "@kbn/key-value-metadata-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/key-value-metadata-table plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/key-value-metadata-table'] --- import kbnKeyValueMetadataTableObj from './kbn_key_value_metadata_table.devdocs.json'; diff --git a/api_docs/kbn_kibana_manifest_schema.mdx b/api_docs/kbn_kibana_manifest_schema.mdx index 9c826a810b451..18e2844b0b0d1 100644 --- a/api_docs/kbn_kibana_manifest_schema.mdx +++ b/api_docs/kbn_kibana_manifest_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-kibana-manifest-schema title: "@kbn/kibana-manifest-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/kibana-manifest-schema plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/kibana-manifest-schema'] --- import kbnKibanaManifestSchemaObj from './kbn_kibana_manifest_schema.devdocs.json'; diff --git a/api_docs/kbn_language_documentation.mdx b/api_docs/kbn_language_documentation.mdx index 47ea09c68c2f4..32d856617e679 100644 --- a/api_docs/kbn_language_documentation.mdx +++ b/api_docs/kbn_language_documentation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-language-documentation title: "@kbn/language-documentation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/language-documentation plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/language-documentation'] --- import kbnLanguageDocumentationObj from './kbn_language_documentation.devdocs.json'; diff --git a/api_docs/kbn_lens_embeddable_utils.mdx b/api_docs/kbn_lens_embeddable_utils.mdx index 51af66a5c07de..64fac00b55b25 100644 --- a/api_docs/kbn_lens_embeddable_utils.mdx +++ b/api_docs/kbn_lens_embeddable_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-lens-embeddable-utils title: "@kbn/lens-embeddable-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/lens-embeddable-utils plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/lens-embeddable-utils'] --- import kbnLensEmbeddableUtilsObj from './kbn_lens_embeddable_utils.devdocs.json'; diff --git a/api_docs/kbn_lens_formula_docs.mdx b/api_docs/kbn_lens_formula_docs.mdx index 58b611e22137c..6290ecb41eaf1 100644 --- a/api_docs/kbn_lens_formula_docs.mdx +++ b/api_docs/kbn_lens_formula_docs.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-lens-formula-docs title: "@kbn/lens-formula-docs" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/lens-formula-docs plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/lens-formula-docs'] --- import kbnLensFormulaDocsObj from './kbn_lens_formula_docs.devdocs.json'; diff --git a/api_docs/kbn_logging.mdx b/api_docs/kbn_logging.mdx index ab35ac9f5a82c..87390bdfa49c3 100644 --- a/api_docs/kbn_logging.mdx +++ b/api_docs/kbn_logging.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-logging title: "@kbn/logging" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/logging plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/logging'] --- import kbnLoggingObj from './kbn_logging.devdocs.json'; diff --git a/api_docs/kbn_logging_mocks.mdx b/api_docs/kbn_logging_mocks.mdx index 7caae799e40c6..09482ec64f332 100644 --- a/api_docs/kbn_logging_mocks.mdx +++ b/api_docs/kbn_logging_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-logging-mocks title: "@kbn/logging-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/logging-mocks plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/logging-mocks'] --- import kbnLoggingMocksObj from './kbn_logging_mocks.devdocs.json'; diff --git a/api_docs/kbn_logs_overview.mdx b/api_docs/kbn_logs_overview.mdx index e0959391e1a3c..9c80e02427d66 100644 --- a/api_docs/kbn_logs_overview.mdx +++ b/api_docs/kbn_logs_overview.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-logs-overview title: "@kbn/logs-overview" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/logs-overview plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/logs-overview'] --- import kbnLogsOverviewObj from './kbn_logs_overview.devdocs.json'; diff --git a/api_docs/kbn_managed_content_badge.mdx b/api_docs/kbn_managed_content_badge.mdx index 5c4c6d9a2d255..e329dbd000af3 100644 --- a/api_docs/kbn_managed_content_badge.mdx +++ b/api_docs/kbn_managed_content_badge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-managed-content-badge title: "@kbn/managed-content-badge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/managed-content-badge plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/managed-content-badge'] --- import kbnManagedContentBadgeObj from './kbn_managed_content_badge.devdocs.json'; diff --git a/api_docs/kbn_managed_vscode_config.mdx b/api_docs/kbn_managed_vscode_config.mdx index 6902ba056611e..712e391ce3069 100644 --- a/api_docs/kbn_managed_vscode_config.mdx +++ b/api_docs/kbn_managed_vscode_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-managed-vscode-config title: "@kbn/managed-vscode-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/managed-vscode-config plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/managed-vscode-config'] --- import kbnManagedVscodeConfigObj from './kbn_managed_vscode_config.devdocs.json'; diff --git a/api_docs/kbn_management_cards_navigation.mdx b/api_docs/kbn_management_cards_navigation.mdx index e2764fdc57173..bbae9c022986e 100644 --- a/api_docs/kbn_management_cards_navigation.mdx +++ b/api_docs/kbn_management_cards_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-cards-navigation title: "@kbn/management-cards-navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-cards-navigation plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-cards-navigation'] --- import kbnManagementCardsNavigationObj from './kbn_management_cards_navigation.devdocs.json'; diff --git a/api_docs/kbn_management_settings_application.mdx b/api_docs/kbn_management_settings_application.mdx index 2f01c0581d7df..3d67addd412e5 100644 --- a/api_docs/kbn_management_settings_application.mdx +++ b/api_docs/kbn_management_settings_application.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-application title: "@kbn/management-settings-application" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-application plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-application'] --- import kbnManagementSettingsApplicationObj from './kbn_management_settings_application.devdocs.json'; diff --git a/api_docs/kbn_management_settings_components_field_category.mdx b/api_docs/kbn_management_settings_components_field_category.mdx index edc74b63d5fd5..367c00cacbcba 100644 --- a/api_docs/kbn_management_settings_components_field_category.mdx +++ b/api_docs/kbn_management_settings_components_field_category.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-field-category title: "@kbn/management-settings-components-field-category" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-field-category plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-components-field-category'] --- import kbnManagementSettingsComponentsFieldCategoryObj from './kbn_management_settings_components_field_category.devdocs.json'; diff --git a/api_docs/kbn_management_settings_components_field_input.mdx b/api_docs/kbn_management_settings_components_field_input.mdx index a611186e61c5b..06d34bb72c950 100644 --- a/api_docs/kbn_management_settings_components_field_input.mdx +++ b/api_docs/kbn_management_settings_components_field_input.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-field-input title: "@kbn/management-settings-components-field-input" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-field-input plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-components-field-input'] --- import kbnManagementSettingsComponentsFieldInputObj from './kbn_management_settings_components_field_input.devdocs.json'; diff --git a/api_docs/kbn_management_settings_components_field_row.mdx b/api_docs/kbn_management_settings_components_field_row.mdx index 6e4ce8999b8fc..2c285d28a1894 100644 --- a/api_docs/kbn_management_settings_components_field_row.mdx +++ b/api_docs/kbn_management_settings_components_field_row.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-field-row title: "@kbn/management-settings-components-field-row" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-field-row plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-components-field-row'] --- import kbnManagementSettingsComponentsFieldRowObj from './kbn_management_settings_components_field_row.devdocs.json'; diff --git a/api_docs/kbn_management_settings_components_form.mdx b/api_docs/kbn_management_settings_components_form.mdx index b37ffefd8babb..b74691f81dd2b 100644 --- a/api_docs/kbn_management_settings_components_form.mdx +++ b/api_docs/kbn_management_settings_components_form.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-components-form title: "@kbn/management-settings-components-form" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-components-form plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-components-form'] --- import kbnManagementSettingsComponentsFormObj from './kbn_management_settings_components_form.devdocs.json'; diff --git a/api_docs/kbn_management_settings_field_definition.mdx b/api_docs/kbn_management_settings_field_definition.mdx index c1114c66dc6ce..7b42c524b71ed 100644 --- a/api_docs/kbn_management_settings_field_definition.mdx +++ b/api_docs/kbn_management_settings_field_definition.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-field-definition title: "@kbn/management-settings-field-definition" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-field-definition plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-field-definition'] --- import kbnManagementSettingsFieldDefinitionObj from './kbn_management_settings_field_definition.devdocs.json'; diff --git a/api_docs/kbn_management_settings_ids.mdx b/api_docs/kbn_management_settings_ids.mdx index 25fcf91395d00..3de48e296f4eb 100644 --- a/api_docs/kbn_management_settings_ids.mdx +++ b/api_docs/kbn_management_settings_ids.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-ids title: "@kbn/management-settings-ids" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-ids plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-ids'] --- import kbnManagementSettingsIdsObj from './kbn_management_settings_ids.devdocs.json'; diff --git a/api_docs/kbn_management_settings_section_registry.mdx b/api_docs/kbn_management_settings_section_registry.mdx index d31b073f12b93..5ecfaa1b9474c 100644 --- a/api_docs/kbn_management_settings_section_registry.mdx +++ b/api_docs/kbn_management_settings_section_registry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-section-registry title: "@kbn/management-settings-section-registry" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-section-registry plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-section-registry'] --- import kbnManagementSettingsSectionRegistryObj from './kbn_management_settings_section_registry.devdocs.json'; diff --git a/api_docs/kbn_management_settings_types.mdx b/api_docs/kbn_management_settings_types.mdx index 6d137502b1ec8..1706485a3921c 100644 --- a/api_docs/kbn_management_settings_types.mdx +++ b/api_docs/kbn_management_settings_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-types title: "@kbn/management-settings-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-types plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-types'] --- import kbnManagementSettingsTypesObj from './kbn_management_settings_types.devdocs.json'; diff --git a/api_docs/kbn_management_settings_utilities.mdx b/api_docs/kbn_management_settings_utilities.mdx index 1f0a254e26e04..70bfc7cc6c4d8 100644 --- a/api_docs/kbn_management_settings_utilities.mdx +++ b/api_docs/kbn_management_settings_utilities.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-settings-utilities title: "@kbn/management-settings-utilities" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-settings-utilities plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-utilities'] --- import kbnManagementSettingsUtilitiesObj from './kbn_management_settings_utilities.devdocs.json'; diff --git a/api_docs/kbn_management_storybook_config.mdx b/api_docs/kbn_management_storybook_config.mdx index 7e79e730720b9..f6ce3b15df599 100644 --- a/api_docs/kbn_management_storybook_config.mdx +++ b/api_docs/kbn_management_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-management-storybook-config title: "@kbn/management-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/management-storybook-config plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-storybook-config'] --- import kbnManagementStorybookConfigObj from './kbn_management_storybook_config.devdocs.json'; diff --git a/api_docs/kbn_manifest.mdx b/api_docs/kbn_manifest.mdx index e9d47946bbc35..49da6c49e4da8 100644 --- a/api_docs/kbn_manifest.mdx +++ b/api_docs/kbn_manifest.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-manifest title: "@kbn/manifest" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/manifest plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/manifest'] --- import kbnManifestObj from './kbn_manifest.devdocs.json'; diff --git a/api_docs/kbn_mapbox_gl.mdx b/api_docs/kbn_mapbox_gl.mdx index c72e939682c82..ce676c9854a44 100644 --- a/api_docs/kbn_mapbox_gl.mdx +++ b/api_docs/kbn_mapbox_gl.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-mapbox-gl title: "@kbn/mapbox-gl" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/mapbox-gl plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/mapbox-gl'] --- import kbnMapboxGlObj from './kbn_mapbox_gl.devdocs.json'; diff --git a/api_docs/kbn_maps_vector_tile_utils.mdx b/api_docs/kbn_maps_vector_tile_utils.mdx index e70ef15fbe86a..3115db5ca7fce 100644 --- a/api_docs/kbn_maps_vector_tile_utils.mdx +++ b/api_docs/kbn_maps_vector_tile_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-maps-vector-tile-utils title: "@kbn/maps-vector-tile-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/maps-vector-tile-utils plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/maps-vector-tile-utils'] --- import kbnMapsVectorTileUtilsObj from './kbn_maps_vector_tile_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_agg_utils.mdx b/api_docs/kbn_ml_agg_utils.mdx index 56cb2d6301ca3..77b55598f315d 100644 --- a/api_docs/kbn_ml_agg_utils.mdx +++ b/api_docs/kbn_ml_agg_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-agg-utils title: "@kbn/ml-agg-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-agg-utils plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-agg-utils'] --- import kbnMlAggUtilsObj from './kbn_ml_agg_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_anomaly_utils.mdx b/api_docs/kbn_ml_anomaly_utils.mdx index ce3a12f72f7f1..516ffc29e1ffb 100644 --- a/api_docs/kbn_ml_anomaly_utils.mdx +++ b/api_docs/kbn_ml_anomaly_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-anomaly-utils title: "@kbn/ml-anomaly-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-anomaly-utils plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-anomaly-utils'] --- import kbnMlAnomalyUtilsObj from './kbn_ml_anomaly_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_cancellable_search.mdx b/api_docs/kbn_ml_cancellable_search.mdx index b74670911f9a4..d098dde13aafc 100644 --- a/api_docs/kbn_ml_cancellable_search.mdx +++ b/api_docs/kbn_ml_cancellable_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-cancellable-search title: "@kbn/ml-cancellable-search" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-cancellable-search plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-cancellable-search'] --- import kbnMlCancellableSearchObj from './kbn_ml_cancellable_search.devdocs.json'; diff --git a/api_docs/kbn_ml_category_validator.mdx b/api_docs/kbn_ml_category_validator.mdx index d9fa7148e4c7f..308581fb6c225 100644 --- a/api_docs/kbn_ml_category_validator.mdx +++ b/api_docs/kbn_ml_category_validator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-category-validator title: "@kbn/ml-category-validator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-category-validator plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-category-validator'] --- import kbnMlCategoryValidatorObj from './kbn_ml_category_validator.devdocs.json'; diff --git a/api_docs/kbn_ml_chi2test.mdx b/api_docs/kbn_ml_chi2test.mdx index b92a55c592b7b..dc4e9b4bb7440 100644 --- a/api_docs/kbn_ml_chi2test.mdx +++ b/api_docs/kbn_ml_chi2test.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-chi2test title: "@kbn/ml-chi2test" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-chi2test plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-chi2test'] --- import kbnMlChi2testObj from './kbn_ml_chi2test.devdocs.json'; diff --git a/api_docs/kbn_ml_data_frame_analytics_utils.mdx b/api_docs/kbn_ml_data_frame_analytics_utils.mdx index e835b4af06b78..ecb04e92d1c3d 100644 --- a/api_docs/kbn_ml_data_frame_analytics_utils.mdx +++ b/api_docs/kbn_ml_data_frame_analytics_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-data-frame-analytics-utils title: "@kbn/ml-data-frame-analytics-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-data-frame-analytics-utils plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-data-frame-analytics-utils'] --- import kbnMlDataFrameAnalyticsUtilsObj from './kbn_ml_data_frame_analytics_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_data_grid.mdx b/api_docs/kbn_ml_data_grid.mdx index be95f840c42bd..b09b821ee2d08 100644 --- a/api_docs/kbn_ml_data_grid.mdx +++ b/api_docs/kbn_ml_data_grid.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-data-grid title: "@kbn/ml-data-grid" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-data-grid plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-data-grid'] --- import kbnMlDataGridObj from './kbn_ml_data_grid.devdocs.json'; diff --git a/api_docs/kbn_ml_date_picker.mdx b/api_docs/kbn_ml_date_picker.mdx index 1631fb41fe07b..018c4f5e823e6 100644 --- a/api_docs/kbn_ml_date_picker.mdx +++ b/api_docs/kbn_ml_date_picker.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-date-picker title: "@kbn/ml-date-picker" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-date-picker plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-date-picker'] --- import kbnMlDatePickerObj from './kbn_ml_date_picker.devdocs.json'; diff --git a/api_docs/kbn_ml_date_utils.mdx b/api_docs/kbn_ml_date_utils.mdx index 8731a06901a8b..d70a9e668ab73 100644 --- a/api_docs/kbn_ml_date_utils.mdx +++ b/api_docs/kbn_ml_date_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-date-utils title: "@kbn/ml-date-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-date-utils plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-date-utils'] --- import kbnMlDateUtilsObj from './kbn_ml_date_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_error_utils.mdx b/api_docs/kbn_ml_error_utils.mdx index c63dc150c753b..1f26105880039 100644 --- a/api_docs/kbn_ml_error_utils.mdx +++ b/api_docs/kbn_ml_error_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-error-utils title: "@kbn/ml-error-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-error-utils plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-error-utils'] --- import kbnMlErrorUtilsObj from './kbn_ml_error_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_field_stats_flyout.mdx b/api_docs/kbn_ml_field_stats_flyout.mdx index 3dae5ca766813..27caaeca43f4d 100644 --- a/api_docs/kbn_ml_field_stats_flyout.mdx +++ b/api_docs/kbn_ml_field_stats_flyout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-field-stats-flyout title: "@kbn/ml-field-stats-flyout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-field-stats-flyout plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-field-stats-flyout'] --- import kbnMlFieldStatsFlyoutObj from './kbn_ml_field_stats_flyout.devdocs.json'; diff --git a/api_docs/kbn_ml_in_memory_table.mdx b/api_docs/kbn_ml_in_memory_table.mdx index 4e8a17ae70a75..c11d8e1c927e8 100644 --- a/api_docs/kbn_ml_in_memory_table.mdx +++ b/api_docs/kbn_ml_in_memory_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-in-memory-table title: "@kbn/ml-in-memory-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-in-memory-table plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-in-memory-table'] --- import kbnMlInMemoryTableObj from './kbn_ml_in_memory_table.devdocs.json'; diff --git a/api_docs/kbn_ml_is_defined.mdx b/api_docs/kbn_ml_is_defined.mdx index d1b368d41ae09..25caabccf1ff7 100644 --- a/api_docs/kbn_ml_is_defined.mdx +++ b/api_docs/kbn_ml_is_defined.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-is-defined title: "@kbn/ml-is-defined" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-is-defined plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-is-defined'] --- import kbnMlIsDefinedObj from './kbn_ml_is_defined.devdocs.json'; diff --git a/api_docs/kbn_ml_is_populated_object.mdx b/api_docs/kbn_ml_is_populated_object.mdx index dfd3d553f9c9e..82c7aeca6dc43 100644 --- a/api_docs/kbn_ml_is_populated_object.mdx +++ b/api_docs/kbn_ml_is_populated_object.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-is-populated-object title: "@kbn/ml-is-populated-object" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-is-populated-object plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-is-populated-object'] --- import kbnMlIsPopulatedObjectObj from './kbn_ml_is_populated_object.devdocs.json'; diff --git a/api_docs/kbn_ml_local_storage.mdx b/api_docs/kbn_ml_local_storage.mdx index 37f83204e762f..19cc19b63cb26 100644 --- a/api_docs/kbn_ml_local_storage.mdx +++ b/api_docs/kbn_ml_local_storage.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-local-storage title: "@kbn/ml-local-storage" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-local-storage plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-local-storage'] --- import kbnMlLocalStorageObj from './kbn_ml_local_storage.devdocs.json'; diff --git a/api_docs/kbn_ml_nested_property.mdx b/api_docs/kbn_ml_nested_property.mdx index 1be7a171c491f..f962e4ceb1dd4 100644 --- a/api_docs/kbn_ml_nested_property.mdx +++ b/api_docs/kbn_ml_nested_property.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-nested-property title: "@kbn/ml-nested-property" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-nested-property plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-nested-property'] --- import kbnMlNestedPropertyObj from './kbn_ml_nested_property.devdocs.json'; diff --git a/api_docs/kbn_ml_number_utils.mdx b/api_docs/kbn_ml_number_utils.mdx index b5608a7dad61e..bd65e70740ee8 100644 --- a/api_docs/kbn_ml_number_utils.mdx +++ b/api_docs/kbn_ml_number_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-number-utils title: "@kbn/ml-number-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-number-utils plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-number-utils'] --- import kbnMlNumberUtilsObj from './kbn_ml_number_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_parse_interval.mdx b/api_docs/kbn_ml_parse_interval.mdx index b37c3b6463a8e..e3d7ec24c5073 100644 --- a/api_docs/kbn_ml_parse_interval.mdx +++ b/api_docs/kbn_ml_parse_interval.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-parse-interval title: "@kbn/ml-parse-interval" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-parse-interval plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-parse-interval'] --- import kbnMlParseIntervalObj from './kbn_ml_parse_interval.devdocs.json'; diff --git a/api_docs/kbn_ml_query_utils.mdx b/api_docs/kbn_ml_query_utils.mdx index ce654e0173b0c..f4d8ab255b793 100644 --- a/api_docs/kbn_ml_query_utils.mdx +++ b/api_docs/kbn_ml_query_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-query-utils title: "@kbn/ml-query-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-query-utils plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-query-utils'] --- import kbnMlQueryUtilsObj from './kbn_ml_query_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_random_sampler_utils.mdx b/api_docs/kbn_ml_random_sampler_utils.mdx index 018044c85c609..ae422bc715f8b 100644 --- a/api_docs/kbn_ml_random_sampler_utils.mdx +++ b/api_docs/kbn_ml_random_sampler_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-random-sampler-utils title: "@kbn/ml-random-sampler-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-random-sampler-utils plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-random-sampler-utils'] --- import kbnMlRandomSamplerUtilsObj from './kbn_ml_random_sampler_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_route_utils.mdx b/api_docs/kbn_ml_route_utils.mdx index 67e8d5f1d47b9..492d6d17b4d72 100644 --- a/api_docs/kbn_ml_route_utils.mdx +++ b/api_docs/kbn_ml_route_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-route-utils title: "@kbn/ml-route-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-route-utils plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-route-utils'] --- import kbnMlRouteUtilsObj from './kbn_ml_route_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_runtime_field_utils.mdx b/api_docs/kbn_ml_runtime_field_utils.mdx index baff2df67a0ca..33abcf8a7b7fb 100644 --- a/api_docs/kbn_ml_runtime_field_utils.mdx +++ b/api_docs/kbn_ml_runtime_field_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-runtime-field-utils title: "@kbn/ml-runtime-field-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-runtime-field-utils plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-runtime-field-utils'] --- import kbnMlRuntimeFieldUtilsObj from './kbn_ml_runtime_field_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_string_hash.mdx b/api_docs/kbn_ml_string_hash.mdx index 417d767f24991..ba13909c1e15f 100644 --- a/api_docs/kbn_ml_string_hash.mdx +++ b/api_docs/kbn_ml_string_hash.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-string-hash title: "@kbn/ml-string-hash" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-string-hash plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-string-hash'] --- import kbnMlStringHashObj from './kbn_ml_string_hash.devdocs.json'; diff --git a/api_docs/kbn_ml_time_buckets.mdx b/api_docs/kbn_ml_time_buckets.mdx index 23afe9cfedb7f..e8d5b869b2084 100644 --- a/api_docs/kbn_ml_time_buckets.mdx +++ b/api_docs/kbn_ml_time_buckets.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-time-buckets title: "@kbn/ml-time-buckets" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-time-buckets plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-time-buckets'] --- import kbnMlTimeBucketsObj from './kbn_ml_time_buckets.devdocs.json'; diff --git a/api_docs/kbn_ml_trained_models_utils.devdocs.json b/api_docs/kbn_ml_trained_models_utils.devdocs.json index acceffa09d977..13218ff8d1b0a 100644 --- a/api_docs/kbn_ml_trained_models_utils.devdocs.json +++ b/api_docs/kbn_ml_trained_models_utils.devdocs.json @@ -112,7 +112,7 @@ "\nModel name, e.g. elser" ], "signature": [ - "\"rerank\" | \"elser\" | \"e5\"" + "\"elser\" | \"e5\" | \"rerank\"" ], "path": "x-pack/platform/packages/shared/ml/trained_models_utils/src/constants/trained_models.ts", "deprecated": false, @@ -433,7 +433,7 @@ "label": "ElasticCuratedModelName", "description": [], "signature": [ - "\"rerank\" | \"elser\" | \"e5\"" + "\"elser\" | \"e5\" | \"rerank\"" ], "path": "x-pack/platform/packages/shared/ml/trained_models_utils/src/constants/trained_models.ts", "deprecated": false, diff --git a/api_docs/kbn_ml_trained_models_utils.mdx b/api_docs/kbn_ml_trained_models_utils.mdx index effd0d38e958d..c1551b6dd832f 100644 --- a/api_docs/kbn_ml_trained_models_utils.mdx +++ b/api_docs/kbn_ml_trained_models_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-trained-models-utils title: "@kbn/ml-trained-models-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-trained-models-utils plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-trained-models-utils'] --- import kbnMlTrainedModelsUtilsObj from './kbn_ml_trained_models_utils.devdocs.json'; diff --git a/api_docs/kbn_ml_ui_actions.mdx b/api_docs/kbn_ml_ui_actions.mdx index a36b112cae5ac..52657624ad187 100644 --- a/api_docs/kbn_ml_ui_actions.mdx +++ b/api_docs/kbn_ml_ui_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-ui-actions title: "@kbn/ml-ui-actions" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-ui-actions plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-ui-actions'] --- import kbnMlUiActionsObj from './kbn_ml_ui_actions.devdocs.json'; diff --git a/api_docs/kbn_ml_url_state.mdx b/api_docs/kbn_ml_url_state.mdx index 2c74fc22be41a..1ee7fdffa71d3 100644 --- a/api_docs/kbn_ml_url_state.mdx +++ b/api_docs/kbn_ml_url_state.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-url-state title: "@kbn/ml-url-state" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-url-state plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-url-state'] --- import kbnMlUrlStateObj from './kbn_ml_url_state.devdocs.json'; diff --git a/api_docs/kbn_ml_validators.mdx b/api_docs/kbn_ml_validators.mdx index 794610ce944ee..2aa236d47332a 100644 --- a/api_docs/kbn_ml_validators.mdx +++ b/api_docs/kbn_ml_validators.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ml-validators title: "@kbn/ml-validators" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ml-validators plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ml-validators'] --- import kbnMlValidatorsObj from './kbn_ml_validators.devdocs.json'; diff --git a/api_docs/kbn_mock_idp_utils.mdx b/api_docs/kbn_mock_idp_utils.mdx index 2f25413cb9635..f9e673792c7ef 100644 --- a/api_docs/kbn_mock_idp_utils.mdx +++ b/api_docs/kbn_mock_idp_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-mock-idp-utils title: "@kbn/mock-idp-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/mock-idp-utils plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/mock-idp-utils'] --- import kbnMockIdpUtilsObj from './kbn_mock_idp_utils.devdocs.json'; diff --git a/api_docs/kbn_monaco.mdx b/api_docs/kbn_monaco.mdx index aa6d29b54d5e4..5e23476409673 100644 --- a/api_docs/kbn_monaco.mdx +++ b/api_docs/kbn_monaco.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-monaco title: "@kbn/monaco" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/monaco plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/monaco'] --- import kbnMonacoObj from './kbn_monaco.devdocs.json'; diff --git a/api_docs/kbn_object_utils.mdx b/api_docs/kbn_object_utils.mdx index e4c3763946bb4..b4d8f6253d2d1 100644 --- a/api_docs/kbn_object_utils.mdx +++ b/api_docs/kbn_object_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-object-utils title: "@kbn/object-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/object-utils plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/object-utils'] --- import kbnObjectUtilsObj from './kbn_object_utils.devdocs.json'; diff --git a/api_docs/kbn_object_versioning.mdx b/api_docs/kbn_object_versioning.mdx index 293703078733d..8ab4215b1d8d9 100644 --- a/api_docs/kbn_object_versioning.mdx +++ b/api_docs/kbn_object_versioning.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-object-versioning title: "@kbn/object-versioning" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/object-versioning plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/object-versioning'] --- import kbnObjectVersioningObj from './kbn_object_versioning.devdocs.json'; diff --git a/api_docs/kbn_object_versioning_utils.mdx b/api_docs/kbn_object_versioning_utils.mdx index 1a7e879b7bbff..48f512566f71a 100644 --- a/api_docs/kbn_object_versioning_utils.mdx +++ b/api_docs/kbn_object_versioning_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-object-versioning-utils title: "@kbn/object-versioning-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/object-versioning-utils plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/object-versioning-utils'] --- import kbnObjectVersioningUtilsObj from './kbn_object_versioning_utils.devdocs.json'; diff --git a/api_docs/kbn_observability_alert_details.mdx b/api_docs/kbn_observability_alert_details.mdx index 7156d54810709..c95e3647c9377 100644 --- a/api_docs/kbn_observability_alert_details.mdx +++ b/api_docs/kbn_observability_alert_details.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-alert-details title: "@kbn/observability-alert-details" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-alert-details plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-alert-details'] --- import kbnObservabilityAlertDetailsObj from './kbn_observability_alert_details.devdocs.json'; diff --git a/api_docs/kbn_observability_alerting_test_data.mdx b/api_docs/kbn_observability_alerting_test_data.mdx index 4047720253adc..f3f61a13758fb 100644 --- a/api_docs/kbn_observability_alerting_test_data.mdx +++ b/api_docs/kbn_observability_alerting_test_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-alerting-test-data title: "@kbn/observability-alerting-test-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-alerting-test-data plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-alerting-test-data'] --- import kbnObservabilityAlertingTestDataObj from './kbn_observability_alerting_test_data.devdocs.json'; diff --git a/api_docs/kbn_observability_get_padded_alert_time_range_util.mdx b/api_docs/kbn_observability_get_padded_alert_time_range_util.mdx index 69f53fe261ac6..05271c09cd353 100644 --- a/api_docs/kbn_observability_get_padded_alert_time_range_util.mdx +++ b/api_docs/kbn_observability_get_padded_alert_time_range_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-get-padded-alert-time-range-util title: "@kbn/observability-get-padded-alert-time-range-util" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-get-padded-alert-time-range-util plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-get-padded-alert-time-range-util'] --- import kbnObservabilityGetPaddedAlertTimeRangeUtilObj from './kbn_observability_get_padded_alert_time_range_util.devdocs.json'; diff --git a/api_docs/kbn_observability_synthetics_test_data.mdx b/api_docs/kbn_observability_synthetics_test_data.mdx index 9b48297f013b6..46062e3d7bcf2 100644 --- a/api_docs/kbn_observability_synthetics_test_data.mdx +++ b/api_docs/kbn_observability_synthetics_test_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-observability-synthetics-test-data title: "@kbn/observability-synthetics-test-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/observability-synthetics-test-data plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/observability-synthetics-test-data'] --- import kbnObservabilitySyntheticsTestDataObj from './kbn_observability_synthetics_test_data.devdocs.json'; diff --git a/api_docs/kbn_openapi_bundler.mdx b/api_docs/kbn_openapi_bundler.mdx index 89a851320403d..a2f1e1db4a472 100644 --- a/api_docs/kbn_openapi_bundler.mdx +++ b/api_docs/kbn_openapi_bundler.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-openapi-bundler title: "@kbn/openapi-bundler" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/openapi-bundler plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/openapi-bundler'] --- import kbnOpenapiBundlerObj from './kbn_openapi_bundler.devdocs.json'; diff --git a/api_docs/kbn_openapi_generator.mdx b/api_docs/kbn_openapi_generator.mdx index f4bd2727790c2..93e6d2fa0b964 100644 --- a/api_docs/kbn_openapi_generator.mdx +++ b/api_docs/kbn_openapi_generator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-openapi-generator title: "@kbn/openapi-generator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/openapi-generator plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/openapi-generator'] --- import kbnOpenapiGeneratorObj from './kbn_openapi_generator.devdocs.json'; diff --git a/api_docs/kbn_optimizer.mdx b/api_docs/kbn_optimizer.mdx index 224b3d4216ac5..40993c2bb3c24 100644 --- a/api_docs/kbn_optimizer.mdx +++ b/api_docs/kbn_optimizer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-optimizer title: "@kbn/optimizer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/optimizer plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/optimizer'] --- import kbnOptimizerObj from './kbn_optimizer.devdocs.json'; diff --git a/api_docs/kbn_optimizer_webpack_helpers.mdx b/api_docs/kbn_optimizer_webpack_helpers.mdx index 08a5937f50510..67579a560182b 100644 --- a/api_docs/kbn_optimizer_webpack_helpers.mdx +++ b/api_docs/kbn_optimizer_webpack_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-optimizer-webpack-helpers title: "@kbn/optimizer-webpack-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/optimizer-webpack-helpers plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/optimizer-webpack-helpers'] --- import kbnOptimizerWebpackHelpersObj from './kbn_optimizer_webpack_helpers.devdocs.json'; diff --git a/api_docs/kbn_osquery_io_ts_types.mdx b/api_docs/kbn_osquery_io_ts_types.mdx index 9cc5a6394d599..5faae61f838b9 100644 --- a/api_docs/kbn_osquery_io_ts_types.mdx +++ b/api_docs/kbn_osquery_io_ts_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-osquery-io-ts-types title: "@kbn/osquery-io-ts-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/osquery-io-ts-types plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/osquery-io-ts-types'] --- import kbnOsqueryIoTsTypesObj from './kbn_osquery_io_ts_types.devdocs.json'; diff --git a/api_docs/kbn_palettes.mdx b/api_docs/kbn_palettes.mdx index adb5d76fc2216..e187d98ce7da3 100644 --- a/api_docs/kbn_palettes.mdx +++ b/api_docs/kbn_palettes.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-palettes title: "@kbn/palettes" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/palettes plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/palettes'] --- import kbnPalettesObj from './kbn_palettes.devdocs.json'; diff --git a/api_docs/kbn_panel_loader.mdx b/api_docs/kbn_panel_loader.mdx index 2205698bbd147..ffc7f2a337dd4 100644 --- a/api_docs/kbn_panel_loader.mdx +++ b/api_docs/kbn_panel_loader.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-panel-loader title: "@kbn/panel-loader" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/panel-loader plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/panel-loader'] --- import kbnPanelLoaderObj from './kbn_panel_loader.devdocs.json'; diff --git a/api_docs/kbn_performance_testing_dataset_extractor.mdx b/api_docs/kbn_performance_testing_dataset_extractor.mdx index f2309eab304a0..40a73c69a8310 100644 --- a/api_docs/kbn_performance_testing_dataset_extractor.mdx +++ b/api_docs/kbn_performance_testing_dataset_extractor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-performance-testing-dataset-extractor title: "@kbn/performance-testing-dataset-extractor" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/performance-testing-dataset-extractor plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/performance-testing-dataset-extractor'] --- import kbnPerformanceTestingDatasetExtractorObj from './kbn_performance_testing_dataset_extractor.devdocs.json'; diff --git a/api_docs/kbn_plugin_check.mdx b/api_docs/kbn_plugin_check.mdx index 56fba904fb28c..225a0ea4bdc6a 100644 --- a/api_docs/kbn_plugin_check.mdx +++ b/api_docs/kbn_plugin_check.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-check title: "@kbn/plugin-check" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-check plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/plugin-check'] --- import kbnPluginCheckObj from './kbn_plugin_check.devdocs.json'; diff --git a/api_docs/kbn_plugin_generator.mdx b/api_docs/kbn_plugin_generator.mdx index ac1413d677941..a3b2b98f2b162 100644 --- a/api_docs/kbn_plugin_generator.mdx +++ b/api_docs/kbn_plugin_generator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-generator title: "@kbn/plugin-generator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-generator plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/plugin-generator'] --- import kbnPluginGeneratorObj from './kbn_plugin_generator.devdocs.json'; diff --git a/api_docs/kbn_plugin_helpers.mdx b/api_docs/kbn_plugin_helpers.mdx index 48069e58420df..c5cd46ffab3a3 100644 --- a/api_docs/kbn_plugin_helpers.mdx +++ b/api_docs/kbn_plugin_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-plugin-helpers title: "@kbn/plugin-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/plugin-helpers plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/plugin-helpers'] --- import kbnPluginHelpersObj from './kbn_plugin_helpers.devdocs.json'; diff --git a/api_docs/kbn_presentation_containers.mdx b/api_docs/kbn_presentation_containers.mdx index 803da51262d36..a9c7ae268dcaf 100644 --- a/api_docs/kbn_presentation_containers.mdx +++ b/api_docs/kbn_presentation_containers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-presentation-containers title: "@kbn/presentation-containers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/presentation-containers plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/presentation-containers'] --- import kbnPresentationContainersObj from './kbn_presentation_containers.devdocs.json'; diff --git a/api_docs/kbn_presentation_publishing.mdx b/api_docs/kbn_presentation_publishing.mdx index 5ca4bb0fee8e6..73bc310525bff 100644 --- a/api_docs/kbn_presentation_publishing.mdx +++ b/api_docs/kbn_presentation_publishing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-presentation-publishing title: "@kbn/presentation-publishing" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/presentation-publishing plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/presentation-publishing'] --- import kbnPresentationPublishingObj from './kbn_presentation_publishing.devdocs.json'; diff --git a/api_docs/kbn_product_doc_artifact_builder.mdx b/api_docs/kbn_product_doc_artifact_builder.mdx index 9162425a0ced7..46653ee784357 100644 --- a/api_docs/kbn_product_doc_artifact_builder.mdx +++ b/api_docs/kbn_product_doc_artifact_builder.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-product-doc-artifact-builder title: "@kbn/product-doc-artifact-builder" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/product-doc-artifact-builder plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/product-doc-artifact-builder'] --- import kbnProductDocArtifactBuilderObj from './kbn_product_doc_artifact_builder.devdocs.json'; diff --git a/api_docs/kbn_product_doc_common.mdx b/api_docs/kbn_product_doc_common.mdx index d942f94e4fb0a..9e930ab7dc503 100644 --- a/api_docs/kbn_product_doc_common.mdx +++ b/api_docs/kbn_product_doc_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-product-doc-common title: "@kbn/product-doc-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/product-doc-common plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/product-doc-common'] --- import kbnProductDocCommonObj from './kbn_product_doc_common.devdocs.json'; diff --git a/api_docs/kbn_profiling_utils.mdx b/api_docs/kbn_profiling_utils.mdx index b2dc522c5d921..5aba6165e83bb 100644 --- a/api_docs/kbn_profiling_utils.mdx +++ b/api_docs/kbn_profiling_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-profiling-utils title: "@kbn/profiling-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/profiling-utils plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/profiling-utils'] --- import kbnProfilingUtilsObj from './kbn_profiling_utils.devdocs.json'; diff --git a/api_docs/kbn_random_sampling.mdx b/api_docs/kbn_random_sampling.mdx index 7416fd5b2752f..3bf67ede53ce4 100644 --- a/api_docs/kbn_random_sampling.mdx +++ b/api_docs/kbn_random_sampling.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-random-sampling title: "@kbn/random-sampling" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/random-sampling plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/random-sampling'] --- import kbnRandomSamplingObj from './kbn_random_sampling.devdocs.json'; diff --git a/api_docs/kbn_react_field.mdx b/api_docs/kbn_react_field.mdx index 7ca6e7b8ee59c..583ae5551f8f7 100644 --- a/api_docs/kbn_react_field.mdx +++ b/api_docs/kbn_react_field.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-field title: "@kbn/react-field" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-field plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-field'] --- import kbnReactFieldObj from './kbn_react_field.devdocs.json'; diff --git a/api_docs/kbn_react_hooks.mdx b/api_docs/kbn_react_hooks.mdx index 05998657ded72..fad36daf29eb2 100644 --- a/api_docs/kbn_react_hooks.mdx +++ b/api_docs/kbn_react_hooks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-hooks title: "@kbn/react-hooks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-hooks plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-hooks'] --- import kbnReactHooksObj from './kbn_react_hooks.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_common.mdx b/api_docs/kbn_react_kibana_context_common.mdx index 2020238d7ff78..993b1fbf1dc6f 100644 --- a/api_docs/kbn_react_kibana_context_common.mdx +++ b/api_docs/kbn_react_kibana_context_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-common title: "@kbn/react-kibana-context-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-common plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-common'] --- import kbnReactKibanaContextCommonObj from './kbn_react_kibana_context_common.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_render.mdx b/api_docs/kbn_react_kibana_context_render.mdx index 76073fbf66ade..fbc5885e943d3 100644 --- a/api_docs/kbn_react_kibana_context_render.mdx +++ b/api_docs/kbn_react_kibana_context_render.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-render title: "@kbn/react-kibana-context-render" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-render plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-render'] --- import kbnReactKibanaContextRenderObj from './kbn_react_kibana_context_render.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_root.mdx b/api_docs/kbn_react_kibana_context_root.mdx index cf379c66e4d37..f340b3ba3b122 100644 --- a/api_docs/kbn_react_kibana_context_root.mdx +++ b/api_docs/kbn_react_kibana_context_root.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-root title: "@kbn/react-kibana-context-root" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-root plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-root'] --- import kbnReactKibanaContextRootObj from './kbn_react_kibana_context_root.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_styled.mdx b/api_docs/kbn_react_kibana_context_styled.mdx index 4c2ef42c7b270..c3abda5e258bb 100644 --- a/api_docs/kbn_react_kibana_context_styled.mdx +++ b/api_docs/kbn_react_kibana_context_styled.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-styled title: "@kbn/react-kibana-context-styled" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-styled plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-styled'] --- import kbnReactKibanaContextStyledObj from './kbn_react_kibana_context_styled.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_context_theme.mdx b/api_docs/kbn_react_kibana_context_theme.mdx index 2365e78a36b52..0eb1671f3f295 100644 --- a/api_docs/kbn_react_kibana_context_theme.mdx +++ b/api_docs/kbn_react_kibana_context_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-context-theme title: "@kbn/react-kibana-context-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-context-theme plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-context-theme'] --- import kbnReactKibanaContextThemeObj from './kbn_react_kibana_context_theme.devdocs.json'; diff --git a/api_docs/kbn_react_kibana_mount.mdx b/api_docs/kbn_react_kibana_mount.mdx index bca4f35f71d34..efba9111a6de4 100644 --- a/api_docs/kbn_react_kibana_mount.mdx +++ b/api_docs/kbn_react_kibana_mount.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-kibana-mount title: "@kbn/react-kibana-mount" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-kibana-mount plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-kibana-mount'] --- import kbnReactKibanaMountObj from './kbn_react_kibana_mount.devdocs.json'; diff --git a/api_docs/kbn_react_mute_legacy_root_warning.mdx b/api_docs/kbn_react_mute_legacy_root_warning.mdx index ddc0a1f562e57..7c5c4ef155e47 100644 --- a/api_docs/kbn_react_mute_legacy_root_warning.mdx +++ b/api_docs/kbn_react_mute_legacy_root_warning.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-react-mute-legacy-root-warning title: "@kbn/react-mute-legacy-root-warning" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/react-mute-legacy-root-warning plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/react-mute-legacy-root-warning'] --- import kbnReactMuteLegacyRootWarningObj from './kbn_react_mute_legacy_root_warning.devdocs.json'; diff --git a/api_docs/kbn_recently_accessed.mdx b/api_docs/kbn_recently_accessed.mdx index d99f77e6a0e13..240be5740f36b 100644 --- a/api_docs/kbn_recently_accessed.mdx +++ b/api_docs/kbn_recently_accessed.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-recently-accessed title: "@kbn/recently-accessed" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/recently-accessed plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/recently-accessed'] --- import kbnRecentlyAccessedObj from './kbn_recently_accessed.devdocs.json'; diff --git a/api_docs/kbn_relocate.mdx b/api_docs/kbn_relocate.mdx index 819b80cfe1ff1..7799cb67b61fb 100644 --- a/api_docs/kbn_relocate.mdx +++ b/api_docs/kbn_relocate.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-relocate title: "@kbn/relocate" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/relocate plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/relocate'] --- import kbnRelocateObj from './kbn_relocate.devdocs.json'; diff --git a/api_docs/kbn_repo_file_maps.mdx b/api_docs/kbn_repo_file_maps.mdx index a1684ae4efef9..ca67257fd388b 100644 --- a/api_docs/kbn_repo_file_maps.mdx +++ b/api_docs/kbn_repo_file_maps.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-file-maps title: "@kbn/repo-file-maps" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-file-maps plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/repo-file-maps'] --- import kbnRepoFileMapsObj from './kbn_repo_file_maps.devdocs.json'; diff --git a/api_docs/kbn_repo_linter.mdx b/api_docs/kbn_repo_linter.mdx index 8c68ca86f9b9e..dc4d4d54c21b8 100644 --- a/api_docs/kbn_repo_linter.mdx +++ b/api_docs/kbn_repo_linter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-linter title: "@kbn/repo-linter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-linter plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/repo-linter'] --- import kbnRepoLinterObj from './kbn_repo_linter.devdocs.json'; diff --git a/api_docs/kbn_repo_path.mdx b/api_docs/kbn_repo_path.mdx index 4b7d6bba7dd3e..9b8eb0754c3a2 100644 --- a/api_docs/kbn_repo_path.mdx +++ b/api_docs/kbn_repo_path.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-path title: "@kbn/repo-path" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-path plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/repo-path'] --- import kbnRepoPathObj from './kbn_repo_path.devdocs.json'; diff --git a/api_docs/kbn_repo_source_classifier.mdx b/api_docs/kbn_repo_source_classifier.mdx index 097dfaf788ba0..1628f463426d1 100644 --- a/api_docs/kbn_repo_source_classifier.mdx +++ b/api_docs/kbn_repo_source_classifier.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-repo-source-classifier title: "@kbn/repo-source-classifier" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/repo-source-classifier plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/repo-source-classifier'] --- import kbnRepoSourceClassifierObj from './kbn_repo_source_classifier.devdocs.json'; diff --git a/api_docs/kbn_reporting_common.mdx b/api_docs/kbn_reporting_common.mdx index 95451c50cab71..d2ca5e66a5a60 100644 --- a/api_docs/kbn_reporting_common.mdx +++ b/api_docs/kbn_reporting_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-common title: "@kbn/reporting-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-common plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-common'] --- import kbnReportingCommonObj from './kbn_reporting_common.devdocs.json'; diff --git a/api_docs/kbn_reporting_csv_share_panel.mdx b/api_docs/kbn_reporting_csv_share_panel.mdx index ced004757ccdf..b5465cab9c698 100644 --- a/api_docs/kbn_reporting_csv_share_panel.mdx +++ b/api_docs/kbn_reporting_csv_share_panel.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-csv-share-panel title: "@kbn/reporting-csv-share-panel" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-csv-share-panel plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-csv-share-panel'] --- import kbnReportingCsvSharePanelObj from './kbn_reporting_csv_share_panel.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_csv.mdx b/api_docs/kbn_reporting_export_types_csv.mdx index fbb86e4c2925c..d0db061c8e824 100644 --- a/api_docs/kbn_reporting_export_types_csv.mdx +++ b/api_docs/kbn_reporting_export_types_csv.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-csv title: "@kbn/reporting-export-types-csv" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-csv plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-csv'] --- import kbnReportingExportTypesCsvObj from './kbn_reporting_export_types_csv.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_csv_common.mdx b/api_docs/kbn_reporting_export_types_csv_common.mdx index 74f278641ed2e..a934834c33430 100644 --- a/api_docs/kbn_reporting_export_types_csv_common.mdx +++ b/api_docs/kbn_reporting_export_types_csv_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-csv-common title: "@kbn/reporting-export-types-csv-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-csv-common plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-csv-common'] --- import kbnReportingExportTypesCsvCommonObj from './kbn_reporting_export_types_csv_common.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_pdf.mdx b/api_docs/kbn_reporting_export_types_pdf.mdx index 2a1052e4ed3d1..8293a472626a0 100644 --- a/api_docs/kbn_reporting_export_types_pdf.mdx +++ b/api_docs/kbn_reporting_export_types_pdf.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-pdf title: "@kbn/reporting-export-types-pdf" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-pdf plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-pdf'] --- import kbnReportingExportTypesPdfObj from './kbn_reporting_export_types_pdf.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_pdf_common.mdx b/api_docs/kbn_reporting_export_types_pdf_common.mdx index 8f196a5eb1cd0..58c85080ceb14 100644 --- a/api_docs/kbn_reporting_export_types_pdf_common.mdx +++ b/api_docs/kbn_reporting_export_types_pdf_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-pdf-common title: "@kbn/reporting-export-types-pdf-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-pdf-common plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-pdf-common'] --- import kbnReportingExportTypesPdfCommonObj from './kbn_reporting_export_types_pdf_common.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_png.mdx b/api_docs/kbn_reporting_export_types_png.mdx index a3734a8fbcfba..27817d1e26996 100644 --- a/api_docs/kbn_reporting_export_types_png.mdx +++ b/api_docs/kbn_reporting_export_types_png.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-png title: "@kbn/reporting-export-types-png" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-png plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-png'] --- import kbnReportingExportTypesPngObj from './kbn_reporting_export_types_png.devdocs.json'; diff --git a/api_docs/kbn_reporting_export_types_png_common.mdx b/api_docs/kbn_reporting_export_types_png_common.mdx index 7db12dfb5956c..20bd8edcf038c 100644 --- a/api_docs/kbn_reporting_export_types_png_common.mdx +++ b/api_docs/kbn_reporting_export_types_png_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-export-types-png-common title: "@kbn/reporting-export-types-png-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-export-types-png-common plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-export-types-png-common'] --- import kbnReportingExportTypesPngCommonObj from './kbn_reporting_export_types_png_common.devdocs.json'; diff --git a/api_docs/kbn_reporting_mocks_server.mdx b/api_docs/kbn_reporting_mocks_server.mdx index 577fa457c08c2..dc11c869983dc 100644 --- a/api_docs/kbn_reporting_mocks_server.mdx +++ b/api_docs/kbn_reporting_mocks_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-mocks-server title: "@kbn/reporting-mocks-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-mocks-server plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-mocks-server'] --- import kbnReportingMocksServerObj from './kbn_reporting_mocks_server.devdocs.json'; diff --git a/api_docs/kbn_reporting_public.mdx b/api_docs/kbn_reporting_public.mdx index 2a27b40048a9f..4e307e05b5626 100644 --- a/api_docs/kbn_reporting_public.mdx +++ b/api_docs/kbn_reporting_public.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-public title: "@kbn/reporting-public" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-public plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-public'] --- import kbnReportingPublicObj from './kbn_reporting_public.devdocs.json'; diff --git a/api_docs/kbn_reporting_server.mdx b/api_docs/kbn_reporting_server.mdx index 2b454407954a8..c968136916616 100644 --- a/api_docs/kbn_reporting_server.mdx +++ b/api_docs/kbn_reporting_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-reporting-server title: "@kbn/reporting-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/reporting-server plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/reporting-server'] --- import kbnReportingServerObj from './kbn_reporting_server.devdocs.json'; diff --git a/api_docs/kbn_resizable_layout.mdx b/api_docs/kbn_resizable_layout.mdx index 61351b23d868e..a5219178312b8 100644 --- a/api_docs/kbn_resizable_layout.mdx +++ b/api_docs/kbn_resizable_layout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-resizable-layout title: "@kbn/resizable-layout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/resizable-layout plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/resizable-layout'] --- import kbnResizableLayoutObj from './kbn_resizable_layout.devdocs.json'; diff --git a/api_docs/kbn_response_ops_alerts_fields_browser.mdx b/api_docs/kbn_response_ops_alerts_fields_browser.mdx index 5e76ee165c131..1741ee641c9b8 100644 --- a/api_docs/kbn_response_ops_alerts_fields_browser.mdx +++ b/api_docs/kbn_response_ops_alerts_fields_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-response-ops-alerts-fields-browser title: "@kbn/response-ops-alerts-fields-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/response-ops-alerts-fields-browser plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/response-ops-alerts-fields-browser'] --- import kbnResponseOpsAlertsFieldsBrowserObj from './kbn_response_ops_alerts_fields_browser.devdocs.json'; diff --git a/api_docs/kbn_response_ops_alerts_table.mdx b/api_docs/kbn_response_ops_alerts_table.mdx index 787bb11e762c7..0dd7fcb4336bc 100644 --- a/api_docs/kbn_response_ops_alerts_table.mdx +++ b/api_docs/kbn_response_ops_alerts_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-response-ops-alerts-table title: "@kbn/response-ops-alerts-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/response-ops-alerts-table plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/response-ops-alerts-table'] --- import kbnResponseOpsAlertsTableObj from './kbn_response_ops_alerts_table.devdocs.json'; diff --git a/api_docs/kbn_response_ops_rule_form.mdx b/api_docs/kbn_response_ops_rule_form.mdx index 3cdbd8eda6ca4..86ffe4d6d3d3a 100644 --- a/api_docs/kbn_response_ops_rule_form.mdx +++ b/api_docs/kbn_response_ops_rule_form.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-response-ops-rule-form title: "@kbn/response-ops-rule-form" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/response-ops-rule-form plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/response-ops-rule-form'] --- import kbnResponseOpsRuleFormObj from './kbn_response_ops_rule_form.devdocs.json'; diff --git a/api_docs/kbn_response_ops_rule_params.mdx b/api_docs/kbn_response_ops_rule_params.mdx index cf9f09d0b566b..cc4f1c76e4bbc 100644 --- a/api_docs/kbn_response_ops_rule_params.mdx +++ b/api_docs/kbn_response_ops_rule_params.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-response-ops-rule-params title: "@kbn/response-ops-rule-params" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/response-ops-rule-params plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/response-ops-rule-params'] --- import kbnResponseOpsRuleParamsObj from './kbn_response_ops_rule_params.devdocs.json'; diff --git a/api_docs/kbn_rison.mdx b/api_docs/kbn_rison.mdx index 7a4a93466db96..4e4951add4d5c 100644 --- a/api_docs/kbn_rison.mdx +++ b/api_docs/kbn_rison.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rison title: "@kbn/rison" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rison plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rison'] --- import kbnRisonObj from './kbn_rison.devdocs.json'; diff --git a/api_docs/kbn_rollup.mdx b/api_docs/kbn_rollup.mdx index 240be559b28ce..afa8fa6122a81 100644 --- a/api_docs/kbn_rollup.mdx +++ b/api_docs/kbn_rollup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rollup title: "@kbn/rollup" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rollup plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rollup'] --- import kbnRollupObj from './kbn_rollup.devdocs.json'; diff --git a/api_docs/kbn_router_to_openapispec.mdx b/api_docs/kbn_router_to_openapispec.mdx index a55aa19e2edf1..bdd57f2dae10d 100644 --- a/api_docs/kbn_router_to_openapispec.mdx +++ b/api_docs/kbn_router_to_openapispec.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-router-to-openapispec title: "@kbn/router-to-openapispec" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/router-to-openapispec plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/router-to-openapispec'] --- import kbnRouterToOpenapispecObj from './kbn_router_to_openapispec.devdocs.json'; diff --git a/api_docs/kbn_router_utils.mdx b/api_docs/kbn_router_utils.mdx index af89724d8e29b..edcd9477aa67b 100644 --- a/api_docs/kbn_router_utils.mdx +++ b/api_docs/kbn_router_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-router-utils title: "@kbn/router-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/router-utils plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/router-utils'] --- import kbnRouterUtilsObj from './kbn_router_utils.devdocs.json'; diff --git a/api_docs/kbn_rrule.mdx b/api_docs/kbn_rrule.mdx index 5217336c0a17d..9ff3d3c026dd3 100644 --- a/api_docs/kbn_rrule.mdx +++ b/api_docs/kbn_rrule.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rrule title: "@kbn/rrule" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rrule plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rrule'] --- import kbnRruleObj from './kbn_rrule.devdocs.json'; diff --git a/api_docs/kbn_rule_data_utils.mdx b/api_docs/kbn_rule_data_utils.mdx index 519fe756f6477..d8e15af5c8bc6 100644 --- a/api_docs/kbn_rule_data_utils.mdx +++ b/api_docs/kbn_rule_data_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-rule-data-utils title: "@kbn/rule-data-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/rule-data-utils plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/rule-data-utils'] --- import kbnRuleDataUtilsObj from './kbn_rule_data_utils.devdocs.json'; diff --git a/api_docs/kbn_saved_objects_settings.mdx b/api_docs/kbn_saved_objects_settings.mdx index 1fef31643b646..8541b799bba4f 100644 --- a/api_docs/kbn_saved_objects_settings.mdx +++ b/api_docs/kbn_saved_objects_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-saved-objects-settings title: "@kbn/saved-objects-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/saved-objects-settings plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/saved-objects-settings'] --- import kbnSavedObjectsSettingsObj from './kbn_saved_objects_settings.devdocs.json'; diff --git a/api_docs/kbn_saved_search_component.mdx b/api_docs/kbn_saved_search_component.mdx index 2fe0bb74d2666..02ce614e740f0 100644 --- a/api_docs/kbn_saved_search_component.mdx +++ b/api_docs/kbn_saved_search_component.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-saved-search-component title: "@kbn/saved-search-component" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/saved-search-component plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/saved-search-component'] --- import kbnSavedSearchComponentObj from './kbn_saved_search_component.devdocs.json'; diff --git a/api_docs/kbn_scout.mdx b/api_docs/kbn_scout.mdx index 1ce12ffd1a774..36971ba0b065e 100644 --- a/api_docs/kbn_scout.mdx +++ b/api_docs/kbn_scout.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-scout title: "@kbn/scout" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/scout plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/scout'] --- import kbnScoutObj from './kbn_scout.devdocs.json'; diff --git a/api_docs/kbn_scout_info.mdx b/api_docs/kbn_scout_info.mdx index 5b848bd656f93..5100c8affcf38 100644 --- a/api_docs/kbn_scout_info.mdx +++ b/api_docs/kbn_scout_info.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-scout-info title: "@kbn/scout-info" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/scout-info plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/scout-info'] --- import kbnScoutInfoObj from './kbn_scout_info.devdocs.json'; diff --git a/api_docs/kbn_scout_oblt.mdx b/api_docs/kbn_scout_oblt.mdx index ad91332857c25..24da8acdd25ec 100644 --- a/api_docs/kbn_scout_oblt.mdx +++ b/api_docs/kbn_scout_oblt.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-scout-oblt title: "@kbn/scout-oblt" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/scout-oblt plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/scout-oblt'] --- import kbnScoutObltObj from './kbn_scout_oblt.devdocs.json'; diff --git a/api_docs/kbn_scout_reporting.mdx b/api_docs/kbn_scout_reporting.mdx index 090ce1e2d0806..9632fabc1edd0 100644 --- a/api_docs/kbn_scout_reporting.mdx +++ b/api_docs/kbn_scout_reporting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-scout-reporting title: "@kbn/scout-reporting" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/scout-reporting plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/scout-reporting'] --- import kbnScoutReportingObj from './kbn_scout_reporting.devdocs.json'; diff --git a/api_docs/kbn_screenshotting_server.mdx b/api_docs/kbn_screenshotting_server.mdx index df7529ec4fb5b..339a979777238 100644 --- a/api_docs/kbn_screenshotting_server.mdx +++ b/api_docs/kbn_screenshotting_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-screenshotting-server title: "@kbn/screenshotting-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/screenshotting-server plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/screenshotting-server'] --- import kbnScreenshottingServerObj from './kbn_screenshotting_server.devdocs.json'; diff --git a/api_docs/kbn_search_api_keys_components.mdx b/api_docs/kbn_search_api_keys_components.mdx index c28e5f9c65ce3..b4d3f20fbf590 100644 --- a/api_docs/kbn_search_api_keys_components.mdx +++ b/api_docs/kbn_search_api_keys_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-api-keys-components title: "@kbn/search-api-keys-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-api-keys-components plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-api-keys-components'] --- import kbnSearchApiKeysComponentsObj from './kbn_search_api_keys_components.devdocs.json'; diff --git a/api_docs/kbn_search_api_keys_server.mdx b/api_docs/kbn_search_api_keys_server.mdx index 03c91eb000681..96638e0197b56 100644 --- a/api_docs/kbn_search_api_keys_server.mdx +++ b/api_docs/kbn_search_api_keys_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-api-keys-server title: "@kbn/search-api-keys-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-api-keys-server plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-api-keys-server'] --- import kbnSearchApiKeysServerObj from './kbn_search_api_keys_server.devdocs.json'; diff --git a/api_docs/kbn_search_api_panels.mdx b/api_docs/kbn_search_api_panels.mdx index b5a4d43159b36..501d721889531 100644 --- a/api_docs/kbn_search_api_panels.mdx +++ b/api_docs/kbn_search_api_panels.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-api-panels title: "@kbn/search-api-panels" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-api-panels plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-api-panels'] --- import kbnSearchApiPanelsObj from './kbn_search_api_panels.devdocs.json'; diff --git a/api_docs/kbn_search_connectors.mdx b/api_docs/kbn_search_connectors.mdx index efe58ecebe670..af2e69980d4d6 100644 --- a/api_docs/kbn_search_connectors.mdx +++ b/api_docs/kbn_search_connectors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-connectors title: "@kbn/search-connectors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-connectors plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-connectors'] --- import kbnSearchConnectorsObj from './kbn_search_connectors.devdocs.json'; diff --git a/api_docs/kbn_search_errors.mdx b/api_docs/kbn_search_errors.mdx index 492a10dc1d0d1..c81f66ed1ad1a 100644 --- a/api_docs/kbn_search_errors.mdx +++ b/api_docs/kbn_search_errors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-errors title: "@kbn/search-errors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-errors plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-errors'] --- import kbnSearchErrorsObj from './kbn_search_errors.devdocs.json'; diff --git a/api_docs/kbn_search_index_documents.mdx b/api_docs/kbn_search_index_documents.mdx index 659a69f954b73..a84f4ce7dab9b 100644 --- a/api_docs/kbn_search_index_documents.mdx +++ b/api_docs/kbn_search_index_documents.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-index-documents title: "@kbn/search-index-documents" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-index-documents plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-index-documents'] --- import kbnSearchIndexDocumentsObj from './kbn_search_index_documents.devdocs.json'; diff --git a/api_docs/kbn_search_response_warnings.mdx b/api_docs/kbn_search_response_warnings.mdx index d77cca8d807e2..f370e6ac04437 100644 --- a/api_docs/kbn_search_response_warnings.mdx +++ b/api_docs/kbn_search_response_warnings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-response-warnings title: "@kbn/search-response-warnings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-response-warnings plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-response-warnings'] --- import kbnSearchResponseWarningsObj from './kbn_search_response_warnings.devdocs.json'; diff --git a/api_docs/kbn_search_shared_ui.mdx b/api_docs/kbn_search_shared_ui.mdx index 2bebf7ac87174..ebd36484d6f37 100644 --- a/api_docs/kbn_search_shared_ui.mdx +++ b/api_docs/kbn_search_shared_ui.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-shared-ui title: "@kbn/search-shared-ui" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-shared-ui plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-shared-ui'] --- import kbnSearchSharedUiObj from './kbn_search_shared_ui.devdocs.json'; diff --git a/api_docs/kbn_search_types.mdx b/api_docs/kbn_search_types.mdx index 87a516f21d705..de5476a5e832a 100644 --- a/api_docs/kbn_search_types.mdx +++ b/api_docs/kbn_search_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-search-types title: "@kbn/search-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/search-types plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/search-types'] --- import kbnSearchTypesObj from './kbn_search_types.devdocs.json'; diff --git a/api_docs/kbn_security_ai_prompts.mdx b/api_docs/kbn_security_ai_prompts.mdx index dfd2c81ddeeec..0e555388462e8 100644 --- a/api_docs/kbn_security_ai_prompts.mdx +++ b/api_docs/kbn_security_ai_prompts.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-ai-prompts title: "@kbn/security-ai-prompts" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-ai-prompts plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-ai-prompts'] --- import kbnSecurityAiPromptsObj from './kbn_security_ai_prompts.devdocs.json'; diff --git a/api_docs/kbn_security_api_key_management.mdx b/api_docs/kbn_security_api_key_management.mdx index ae8122f68c305..42492f5c8fae8 100644 --- a/api_docs/kbn_security_api_key_management.mdx +++ b/api_docs/kbn_security_api_key_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-api-key-management title: "@kbn/security-api-key-management" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-api-key-management plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-api-key-management'] --- import kbnSecurityApiKeyManagementObj from './kbn_security_api_key_management.devdocs.json'; diff --git a/api_docs/kbn_security_authorization_core.mdx b/api_docs/kbn_security_authorization_core.mdx index ebd4c8dd915ac..fffcab023a24e 100644 --- a/api_docs/kbn_security_authorization_core.mdx +++ b/api_docs/kbn_security_authorization_core.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-authorization-core title: "@kbn/security-authorization-core" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-authorization-core plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-authorization-core'] --- import kbnSecurityAuthorizationCoreObj from './kbn_security_authorization_core.devdocs.json'; diff --git a/api_docs/kbn_security_authorization_core_common.mdx b/api_docs/kbn_security_authorization_core_common.mdx index fa156b906a953..4500d192fbd8b 100644 --- a/api_docs/kbn_security_authorization_core_common.mdx +++ b/api_docs/kbn_security_authorization_core_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-authorization-core-common title: "@kbn/security-authorization-core-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-authorization-core-common plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-authorization-core-common'] --- import kbnSecurityAuthorizationCoreCommonObj from './kbn_security_authorization_core_common.devdocs.json'; diff --git a/api_docs/kbn_security_form_components.mdx b/api_docs/kbn_security_form_components.mdx index 02de056778d5a..bf02881277e7a 100644 --- a/api_docs/kbn_security_form_components.mdx +++ b/api_docs/kbn_security_form_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-form-components title: "@kbn/security-form-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-form-components plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-form-components'] --- import kbnSecurityFormComponentsObj from './kbn_security_form_components.devdocs.json'; diff --git a/api_docs/kbn_security_hardening.mdx b/api_docs/kbn_security_hardening.mdx index f4c469b6e63da..e7fe88160e861 100644 --- a/api_docs/kbn_security_hardening.mdx +++ b/api_docs/kbn_security_hardening.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-hardening title: "@kbn/security-hardening" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-hardening plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-hardening'] --- import kbnSecurityHardeningObj from './kbn_security_hardening.devdocs.json'; diff --git a/api_docs/kbn_security_plugin_types_common.mdx b/api_docs/kbn_security_plugin_types_common.mdx index d94efa6d6306c..cbfc66aa10814 100644 --- a/api_docs/kbn_security_plugin_types_common.mdx +++ b/api_docs/kbn_security_plugin_types_common.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-plugin-types-common title: "@kbn/security-plugin-types-common" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-plugin-types-common plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-plugin-types-common'] --- import kbnSecurityPluginTypesCommonObj from './kbn_security_plugin_types_common.devdocs.json'; diff --git a/api_docs/kbn_security_plugin_types_public.mdx b/api_docs/kbn_security_plugin_types_public.mdx index d9c3fff81b284..2bcbb6ba7dee5 100644 --- a/api_docs/kbn_security_plugin_types_public.mdx +++ b/api_docs/kbn_security_plugin_types_public.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-plugin-types-public title: "@kbn/security-plugin-types-public" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-plugin-types-public plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-plugin-types-public'] --- import kbnSecurityPluginTypesPublicObj from './kbn_security_plugin_types_public.devdocs.json'; diff --git a/api_docs/kbn_security_plugin_types_server.mdx b/api_docs/kbn_security_plugin_types_server.mdx index d82949e8b0c0c..d07f3aa8879f7 100644 --- a/api_docs/kbn_security_plugin_types_server.mdx +++ b/api_docs/kbn_security_plugin_types_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-plugin-types-server title: "@kbn/security-plugin-types-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-plugin-types-server plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-plugin-types-server'] --- import kbnSecurityPluginTypesServerObj from './kbn_security_plugin_types_server.devdocs.json'; diff --git a/api_docs/kbn_security_role_management_model.mdx b/api_docs/kbn_security_role_management_model.mdx index 5d5c362853952..5e0b70a0ca2d1 100644 --- a/api_docs/kbn_security_role_management_model.mdx +++ b/api_docs/kbn_security_role_management_model.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-role-management-model title: "@kbn/security-role-management-model" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-role-management-model plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-role-management-model'] --- import kbnSecurityRoleManagementModelObj from './kbn_security_role_management_model.devdocs.json'; diff --git a/api_docs/kbn_security_solution_connectors.mdx b/api_docs/kbn_security_solution_connectors.mdx index 15626f152c5b7..f10d6484612a3 100644 --- a/api_docs/kbn_security_solution_connectors.mdx +++ b/api_docs/kbn_security_solution_connectors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-connectors title: "@kbn/security-solution-connectors" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-connectors plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-connectors'] --- import kbnSecuritySolutionConnectorsObj from './kbn_security_solution_connectors.devdocs.json'; diff --git a/api_docs/kbn_security_solution_distribution_bar.mdx b/api_docs/kbn_security_solution_distribution_bar.mdx index 60799067729f3..6018bdf0b3716 100644 --- a/api_docs/kbn_security_solution_distribution_bar.mdx +++ b/api_docs/kbn_security_solution_distribution_bar.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-distribution-bar title: "@kbn/security-solution-distribution-bar" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-distribution-bar plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-distribution-bar'] --- import kbnSecuritySolutionDistributionBarObj from './kbn_security_solution_distribution_bar.devdocs.json'; diff --git a/api_docs/kbn_security_solution_features.mdx b/api_docs/kbn_security_solution_features.mdx index 3f51b47dc34a6..f2734056eb18c 100644 --- a/api_docs/kbn_security_solution_features.mdx +++ b/api_docs/kbn_security_solution_features.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-features title: "@kbn/security-solution-features" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-features plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-features'] --- import kbnSecuritySolutionFeaturesObj from './kbn_security_solution_features.devdocs.json'; diff --git a/api_docs/kbn_security_solution_navigation.mdx b/api_docs/kbn_security_solution_navigation.mdx index 23f0e84ec6dc2..336717fcf1cc3 100644 --- a/api_docs/kbn_security_solution_navigation.mdx +++ b/api_docs/kbn_security_solution_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-navigation title: "@kbn/security-solution-navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-navigation plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-navigation'] --- import kbnSecuritySolutionNavigationObj from './kbn_security_solution_navigation.devdocs.json'; diff --git a/api_docs/kbn_security_solution_side_nav.mdx b/api_docs/kbn_security_solution_side_nav.mdx index 8517e2dee0984..0fcb3d50971bb 100644 --- a/api_docs/kbn_security_solution_side_nav.mdx +++ b/api_docs/kbn_security_solution_side_nav.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-side-nav title: "@kbn/security-solution-side-nav" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-side-nav plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-side-nav'] --- import kbnSecuritySolutionSideNavObj from './kbn_security_solution_side_nav.devdocs.json'; diff --git a/api_docs/kbn_security_solution_storybook_config.mdx b/api_docs/kbn_security_solution_storybook_config.mdx index 72dbedfd6cb72..af7ffe5fa2596 100644 --- a/api_docs/kbn_security_solution_storybook_config.mdx +++ b/api_docs/kbn_security_solution_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-solution-storybook-config title: "@kbn/security-solution-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-solution-storybook-config plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-solution-storybook-config'] --- import kbnSecuritySolutionStorybookConfigObj from './kbn_security_solution_storybook_config.devdocs.json'; diff --git a/api_docs/kbn_security_ui_components.mdx b/api_docs/kbn_security_ui_components.mdx index 1e0da77d2db99..3c4726235380c 100644 --- a/api_docs/kbn_security_ui_components.mdx +++ b/api_docs/kbn_security_ui_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-security-ui-components title: "@kbn/security-ui-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/security-ui-components plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/security-ui-components'] --- import kbnSecurityUiComponentsObj from './kbn_security_ui_components.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_autocomplete.mdx b/api_docs/kbn_securitysolution_autocomplete.mdx index e977d0500c197..64be80c9f25a1 100644 --- a/api_docs/kbn_securitysolution_autocomplete.mdx +++ b/api_docs/kbn_securitysolution_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-autocomplete title: "@kbn/securitysolution-autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-autocomplete plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-autocomplete'] --- import kbnSecuritysolutionAutocompleteObj from './kbn_securitysolution_autocomplete.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_data_table.mdx b/api_docs/kbn_securitysolution_data_table.mdx index 47057855efcf7..6735e2ad481ae 100644 --- a/api_docs/kbn_securitysolution_data_table.mdx +++ b/api_docs/kbn_securitysolution_data_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-data-table title: "@kbn/securitysolution-data-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-data-table plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-data-table'] --- import kbnSecuritysolutionDataTableObj from './kbn_securitysolution_data_table.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_ecs.mdx b/api_docs/kbn_securitysolution_ecs.mdx index 00df26c4f5d71..10162691fcff1 100644 --- a/api_docs/kbn_securitysolution_ecs.mdx +++ b/api_docs/kbn_securitysolution_ecs.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-ecs title: "@kbn/securitysolution-ecs" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-ecs plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-ecs'] --- import kbnSecuritysolutionEcsObj from './kbn_securitysolution_ecs.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_es_utils.mdx b/api_docs/kbn_securitysolution_es_utils.mdx index 28fb006b47d81..7c1e5f3319493 100644 --- a/api_docs/kbn_securitysolution_es_utils.mdx +++ b/api_docs/kbn_securitysolution_es_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-es-utils title: "@kbn/securitysolution-es-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-es-utils plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-es-utils'] --- import kbnSecuritysolutionEsUtilsObj from './kbn_securitysolution_es_utils.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_exception_list_components.mdx b/api_docs/kbn_securitysolution_exception_list_components.mdx index 09df9cfa478f8..957f3dba95da9 100644 --- a/api_docs/kbn_securitysolution_exception_list_components.mdx +++ b/api_docs/kbn_securitysolution_exception_list_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-exception-list-components title: "@kbn/securitysolution-exception-list-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-exception-list-components plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-exception-list-components'] --- import kbnSecuritysolutionExceptionListComponentsObj from './kbn_securitysolution_exception_list_components.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_hook_utils.mdx b/api_docs/kbn_securitysolution_hook_utils.mdx index c14b3f499aafe..7acacac9a8b42 100644 --- a/api_docs/kbn_securitysolution_hook_utils.mdx +++ b/api_docs/kbn_securitysolution_hook_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-hook-utils title: "@kbn/securitysolution-hook-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-hook-utils plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-hook-utils'] --- import kbnSecuritysolutionHookUtilsObj from './kbn_securitysolution_hook_utils.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx b/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx index 757c3a711fbbb..301f945da928f 100644 --- a/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_alerting_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-alerting-types title: "@kbn/securitysolution-io-ts-alerting-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-alerting-types plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-io-ts-alerting-types'] --- import kbnSecuritysolutionIoTsAlertingTypesObj from './kbn_securitysolution_io_ts_alerting_types.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_io_ts_list_types.mdx b/api_docs/kbn_securitysolution_io_ts_list_types.mdx index a4f4b1a54b0d0..8d1338182e518 100644 --- a/api_docs/kbn_securitysolution_io_ts_list_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_list_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-list-types title: "@kbn/securitysolution-io-ts-list-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-list-types plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-io-ts-list-types'] --- import kbnSecuritysolutionIoTsListTypesObj from './kbn_securitysolution_io_ts_list_types.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_io_ts_types.mdx b/api_docs/kbn_securitysolution_io_ts_types.mdx index 5520761ffd261..9bfda3c781d16 100644 --- a/api_docs/kbn_securitysolution_io_ts_types.mdx +++ b/api_docs/kbn_securitysolution_io_ts_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-types title: "@kbn/securitysolution-io-ts-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-types plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-io-ts-types'] --- import kbnSecuritysolutionIoTsTypesObj from './kbn_securitysolution_io_ts_types.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_io_ts_utils.mdx b/api_docs/kbn_securitysolution_io_ts_utils.mdx index fd7a1f2ea1bed..4f1a607cbccae 100644 --- a/api_docs/kbn_securitysolution_io_ts_utils.mdx +++ b/api_docs/kbn_securitysolution_io_ts_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-io-ts-utils title: "@kbn/securitysolution-io-ts-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-io-ts-utils plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-io-ts-utils'] --- import kbnSecuritysolutionIoTsUtilsObj from './kbn_securitysolution_io_ts_utils.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_list_api.mdx b/api_docs/kbn_securitysolution_list_api.mdx index 48dc018f911c2..766628a2c61ad 100644 --- a/api_docs/kbn_securitysolution_list_api.mdx +++ b/api_docs/kbn_securitysolution_list_api.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-api title: "@kbn/securitysolution-list-api" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-api plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-list-api'] --- import kbnSecuritysolutionListApiObj from './kbn_securitysolution_list_api.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_list_constants.mdx b/api_docs/kbn_securitysolution_list_constants.mdx index 4326480f40dc3..d1b768e5aab67 100644 --- a/api_docs/kbn_securitysolution_list_constants.mdx +++ b/api_docs/kbn_securitysolution_list_constants.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-constants title: "@kbn/securitysolution-list-constants" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-constants plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-list-constants'] --- import kbnSecuritysolutionListConstantsObj from './kbn_securitysolution_list_constants.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_list_hooks.mdx b/api_docs/kbn_securitysolution_list_hooks.mdx index d29d9a8c337c4..8a1c6ac00decc 100644 --- a/api_docs/kbn_securitysolution_list_hooks.mdx +++ b/api_docs/kbn_securitysolution_list_hooks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-hooks title: "@kbn/securitysolution-list-hooks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-hooks plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-list-hooks'] --- import kbnSecuritysolutionListHooksObj from './kbn_securitysolution_list_hooks.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_list_utils.mdx b/api_docs/kbn_securitysolution_list_utils.mdx index 6177464763615..eb5475e24f4c2 100644 --- a/api_docs/kbn_securitysolution_list_utils.mdx +++ b/api_docs/kbn_securitysolution_list_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-list-utils title: "@kbn/securitysolution-list-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-list-utils plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-list-utils'] --- import kbnSecuritysolutionListUtilsObj from './kbn_securitysolution_list_utils.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_rules.mdx b/api_docs/kbn_securitysolution_rules.mdx index 475d603083317..8c184cca5ff37 100644 --- a/api_docs/kbn_securitysolution_rules.mdx +++ b/api_docs/kbn_securitysolution_rules.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-rules title: "@kbn/securitysolution-rules" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-rules plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-rules'] --- import kbnSecuritysolutionRulesObj from './kbn_securitysolution_rules.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_t_grid.mdx b/api_docs/kbn_securitysolution_t_grid.mdx index 2fdca3cc44e7d..19ba40e0770cb 100644 --- a/api_docs/kbn_securitysolution_t_grid.mdx +++ b/api_docs/kbn_securitysolution_t_grid.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-t-grid title: "@kbn/securitysolution-t-grid" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-t-grid plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-t-grid'] --- import kbnSecuritysolutionTGridObj from './kbn_securitysolution_t_grid.devdocs.json'; diff --git a/api_docs/kbn_securitysolution_utils.mdx b/api_docs/kbn_securitysolution_utils.mdx index 1e8fe8924b0a2..1e7810989de53 100644 --- a/api_docs/kbn_securitysolution_utils.mdx +++ b/api_docs/kbn_securitysolution_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-securitysolution-utils title: "@kbn/securitysolution-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/securitysolution-utils plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/securitysolution-utils'] --- import kbnSecuritysolutionUtilsObj from './kbn_securitysolution_utils.devdocs.json'; diff --git a/api_docs/kbn_server_http_tools.mdx b/api_docs/kbn_server_http_tools.mdx index 44050544db23f..48e0b91599d04 100644 --- a/api_docs/kbn_server_http_tools.mdx +++ b/api_docs/kbn_server_http_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-http-tools title: "@kbn/server-http-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-http-tools plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-http-tools'] --- import kbnServerHttpToolsObj from './kbn_server_http_tools.devdocs.json'; diff --git a/api_docs/kbn_server_route_repository.mdx b/api_docs/kbn_server_route_repository.mdx index bce4f8faab206..6f7600b327f6b 100644 --- a/api_docs/kbn_server_route_repository.mdx +++ b/api_docs/kbn_server_route_repository.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-route-repository title: "@kbn/server-route-repository" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-route-repository plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository'] --- import kbnServerRouteRepositoryObj from './kbn_server_route_repository.devdocs.json'; diff --git a/api_docs/kbn_server_route_repository_client.mdx b/api_docs/kbn_server_route_repository_client.mdx index 64ecc8f2b3015..53399f0484932 100644 --- a/api_docs/kbn_server_route_repository_client.mdx +++ b/api_docs/kbn_server_route_repository_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-route-repository-client title: "@kbn/server-route-repository-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-route-repository-client plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository-client'] --- import kbnServerRouteRepositoryClientObj from './kbn_server_route_repository_client.devdocs.json'; diff --git a/api_docs/kbn_server_route_repository_utils.mdx b/api_docs/kbn_server_route_repository_utils.mdx index 1eac0abd7b7f9..54f87528375fd 100644 --- a/api_docs/kbn_server_route_repository_utils.mdx +++ b/api_docs/kbn_server_route_repository_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-server-route-repository-utils title: "@kbn/server-route-repository-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/server-route-repository-utils plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/server-route-repository-utils'] --- import kbnServerRouteRepositoryUtilsObj from './kbn_server_route_repository_utils.devdocs.json'; diff --git a/api_docs/kbn_serverless_common_settings.mdx b/api_docs/kbn_serverless_common_settings.mdx index 2d06fd7213194..e6624d805d1bb 100644 --- a/api_docs/kbn_serverless_common_settings.mdx +++ b/api_docs/kbn_serverless_common_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-common-settings title: "@kbn/serverless-common-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-common-settings plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-common-settings'] --- import kbnServerlessCommonSettingsObj from './kbn_serverless_common_settings.devdocs.json'; diff --git a/api_docs/kbn_serverless_observability_settings.mdx b/api_docs/kbn_serverless_observability_settings.mdx index 89184706218c8..9305698bbaa83 100644 --- a/api_docs/kbn_serverless_observability_settings.mdx +++ b/api_docs/kbn_serverless_observability_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-observability-settings title: "@kbn/serverless-observability-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-observability-settings plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-observability-settings'] --- import kbnServerlessObservabilitySettingsObj from './kbn_serverless_observability_settings.devdocs.json'; diff --git a/api_docs/kbn_serverless_search_settings.mdx b/api_docs/kbn_serverless_search_settings.mdx index 45e7d51c67570..17c7a441d3a3f 100644 --- a/api_docs/kbn_serverless_search_settings.mdx +++ b/api_docs/kbn_serverless_search_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-search-settings title: "@kbn/serverless-search-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-search-settings plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-search-settings'] --- import kbnServerlessSearchSettingsObj from './kbn_serverless_search_settings.devdocs.json'; diff --git a/api_docs/kbn_serverless_security_settings.mdx b/api_docs/kbn_serverless_security_settings.mdx index 58ed37c0136fb..92a85eea9a059 100644 --- a/api_docs/kbn_serverless_security_settings.mdx +++ b/api_docs/kbn_serverless_security_settings.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-security-settings title: "@kbn/serverless-security-settings" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-security-settings plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-security-settings'] --- import kbnServerlessSecuritySettingsObj from './kbn_serverless_security_settings.devdocs.json'; diff --git a/api_docs/kbn_serverless_storybook_config.mdx b/api_docs/kbn_serverless_storybook_config.mdx index 6b0661f5901eb..75ccf7b93e7c0 100644 --- a/api_docs/kbn_serverless_storybook_config.mdx +++ b/api_docs/kbn_serverless_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-serverless-storybook-config title: "@kbn/serverless-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/serverless-storybook-config plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/serverless-storybook-config'] --- import kbnServerlessStorybookConfigObj from './kbn_serverless_storybook_config.devdocs.json'; diff --git a/api_docs/kbn_shared_svg.mdx b/api_docs/kbn_shared_svg.mdx index 6cb233502e218..e601d6dded4ee 100644 --- a/api_docs/kbn_shared_svg.mdx +++ b/api_docs/kbn_shared_svg.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-svg title: "@kbn/shared-svg" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-svg plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-svg'] --- import kbnSharedSvgObj from './kbn_shared_svg.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_avatar_solution.mdx b/api_docs/kbn_shared_ux_avatar_solution.mdx index 20ecb41b03fe7..c23aebc15d3b0 100644 --- a/api_docs/kbn_shared_ux_avatar_solution.mdx +++ b/api_docs/kbn_shared_ux_avatar_solution.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-avatar-solution title: "@kbn/shared-ux-avatar-solution" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-avatar-solution plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-avatar-solution'] --- import kbnSharedUxAvatarSolutionObj from './kbn_shared_ux_avatar_solution.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_button_exit_full_screen.mdx b/api_docs/kbn_shared_ux_button_exit_full_screen.mdx index d05c133c151f7..e162380fc6a76 100644 --- a/api_docs/kbn_shared_ux_button_exit_full_screen.mdx +++ b/api_docs/kbn_shared_ux_button_exit_full_screen.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-exit-full-screen title: "@kbn/shared-ux-button-exit-full-screen" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-exit-full-screen plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-button-exit-full-screen'] --- import kbnSharedUxButtonExitFullScreenObj from './kbn_shared_ux_button_exit_full_screen.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_button_toolbar.mdx b/api_docs/kbn_shared_ux_button_toolbar.mdx index 096b56b1c5967..ab7d1154dbe19 100644 --- a/api_docs/kbn_shared_ux_button_toolbar.mdx +++ b/api_docs/kbn_shared_ux_button_toolbar.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-button-toolbar title: "@kbn/shared-ux-button-toolbar" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-button-toolbar plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-button-toolbar'] --- import kbnSharedUxButtonToolbarObj from './kbn_shared_ux_button_toolbar.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_card_no_data.mdx b/api_docs/kbn_shared_ux_card_no_data.mdx index 8ee31e65b1322..51803bcf28910 100644 --- a/api_docs/kbn_shared_ux_card_no_data.mdx +++ b/api_docs/kbn_shared_ux_card_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-card-no-data title: "@kbn/shared-ux-card-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-card-no-data plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-card-no-data'] --- import kbnSharedUxCardNoDataObj from './kbn_shared_ux_card_no_data.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_card_no_data_mocks.mdx b/api_docs/kbn_shared_ux_card_no_data_mocks.mdx index aee4312923a7c..2b0f6312688b4 100644 --- a/api_docs/kbn_shared_ux_card_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_card_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-card-no-data-mocks title: "@kbn/shared-ux-card-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-card-no-data-mocks plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-card-no-data-mocks'] --- import kbnSharedUxCardNoDataMocksObj from './kbn_shared_ux_card_no_data_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_chrome_navigation.mdx b/api_docs/kbn_shared_ux_chrome_navigation.mdx index eda752a1e1863..6315d8aef27c9 100644 --- a/api_docs/kbn_shared_ux_chrome_navigation.mdx +++ b/api_docs/kbn_shared_ux_chrome_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-chrome-navigation title: "@kbn/shared-ux-chrome-navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-chrome-navigation plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-chrome-navigation'] --- import kbnSharedUxChromeNavigationObj from './kbn_shared_ux_chrome_navigation.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_error_boundary.mdx b/api_docs/kbn_shared_ux_error_boundary.mdx index 320327090de76..bf5404a376d41 100644 --- a/api_docs/kbn_shared_ux_error_boundary.mdx +++ b/api_docs/kbn_shared_ux_error_boundary.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-error-boundary title: "@kbn/shared-ux-error-boundary" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-error-boundary plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-error-boundary'] --- import kbnSharedUxErrorBoundaryObj from './kbn_shared_ux_error_boundary.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_context.mdx b/api_docs/kbn_shared_ux_file_context.mdx index 9294141b119b9..fe9e65a8d4206 100644 --- a/api_docs/kbn_shared_ux_file_context.mdx +++ b/api_docs/kbn_shared_ux_file_context.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-context title: "@kbn/shared-ux-file-context" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-context plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-context'] --- import kbnSharedUxFileContextObj from './kbn_shared_ux_file_context.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_image.mdx b/api_docs/kbn_shared_ux_file_image.mdx index f212b887df96d..55d8eef83eff0 100644 --- a/api_docs/kbn_shared_ux_file_image.mdx +++ b/api_docs/kbn_shared_ux_file_image.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-image title: "@kbn/shared-ux-file-image" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-image plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-image'] --- import kbnSharedUxFileImageObj from './kbn_shared_ux_file_image.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_image_mocks.mdx b/api_docs/kbn_shared_ux_file_image_mocks.mdx index 0a49bb6c3c279..ee93022896e12 100644 --- a/api_docs/kbn_shared_ux_file_image_mocks.mdx +++ b/api_docs/kbn_shared_ux_file_image_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-image-mocks title: "@kbn/shared-ux-file-image-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-image-mocks plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-image-mocks'] --- import kbnSharedUxFileImageMocksObj from './kbn_shared_ux_file_image_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_mocks.mdx b/api_docs/kbn_shared_ux_file_mocks.mdx index 68ef14c3864fd..0d334aad62aa3 100644 --- a/api_docs/kbn_shared_ux_file_mocks.mdx +++ b/api_docs/kbn_shared_ux_file_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-mocks title: "@kbn/shared-ux-file-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-mocks plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-mocks'] --- import kbnSharedUxFileMocksObj from './kbn_shared_ux_file_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_picker.mdx b/api_docs/kbn_shared_ux_file_picker.mdx index 67655a82908a7..97a37785d5b4d 100644 --- a/api_docs/kbn_shared_ux_file_picker.mdx +++ b/api_docs/kbn_shared_ux_file_picker.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-picker title: "@kbn/shared-ux-file-picker" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-picker plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-picker'] --- import kbnSharedUxFilePickerObj from './kbn_shared_ux_file_picker.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_types.mdx b/api_docs/kbn_shared_ux_file_types.mdx index 2a4f1e3f52fcd..9b11018627927 100644 --- a/api_docs/kbn_shared_ux_file_types.mdx +++ b/api_docs/kbn_shared_ux_file_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-types title: "@kbn/shared-ux-file-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-types plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-types'] --- import kbnSharedUxFileTypesObj from './kbn_shared_ux_file_types.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_upload.mdx b/api_docs/kbn_shared_ux_file_upload.mdx index 5f009f18ab119..ded5a6fa6e6f3 100644 --- a/api_docs/kbn_shared_ux_file_upload.mdx +++ b/api_docs/kbn_shared_ux_file_upload.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-upload title: "@kbn/shared-ux-file-upload" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-upload plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-upload'] --- import kbnSharedUxFileUploadObj from './kbn_shared_ux_file_upload.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_file_util.mdx b/api_docs/kbn_shared_ux_file_util.mdx index 09d4393f9d053..3b9da1186445e 100644 --- a/api_docs/kbn_shared_ux_file_util.mdx +++ b/api_docs/kbn_shared_ux_file_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-file-util title: "@kbn/shared-ux-file-util" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-file-util plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-file-util'] --- import kbnSharedUxFileUtilObj from './kbn_shared_ux_file_util.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_link_redirect_app.mdx b/api_docs/kbn_shared_ux_link_redirect_app.mdx index bb3545a9124ef..b67c7ba83a5b8 100644 --- a/api_docs/kbn_shared_ux_link_redirect_app.mdx +++ b/api_docs/kbn_shared_ux_link_redirect_app.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-link-redirect-app title: "@kbn/shared-ux-link-redirect-app" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-link-redirect-app plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-link-redirect-app'] --- import kbnSharedUxLinkRedirectAppObj from './kbn_shared_ux_link_redirect_app.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx b/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx index 0070ffe635b09..e703ea6cb8d0a 100644 --- a/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx +++ b/api_docs/kbn_shared_ux_link_redirect_app_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-link-redirect-app-mocks title: "@kbn/shared-ux-link-redirect-app-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-link-redirect-app-mocks plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-link-redirect-app-mocks'] --- import kbnSharedUxLinkRedirectAppMocksObj from './kbn_shared_ux_link_redirect_app_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_markdown.mdx b/api_docs/kbn_shared_ux_markdown.mdx index 7a657777c9fee..95b55a022b74d 100644 --- a/api_docs/kbn_shared_ux_markdown.mdx +++ b/api_docs/kbn_shared_ux_markdown.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-markdown title: "@kbn/shared-ux-markdown" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-markdown plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-markdown'] --- import kbnSharedUxMarkdownObj from './kbn_shared_ux_markdown.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_markdown_mocks.mdx b/api_docs/kbn_shared_ux_markdown_mocks.mdx index 0db36cf14d7ae..faea522826785 100644 --- a/api_docs/kbn_shared_ux_markdown_mocks.mdx +++ b/api_docs/kbn_shared_ux_markdown_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-markdown-mocks title: "@kbn/shared-ux-markdown-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-markdown-mocks plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-markdown-mocks'] --- import kbnSharedUxMarkdownMocksObj from './kbn_shared_ux_markdown_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_analytics_no_data.mdx b/api_docs/kbn_shared_ux_page_analytics_no_data.mdx index d0998c366d440..1b13766ee382f 100644 --- a/api_docs/kbn_shared_ux_page_analytics_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_analytics_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-analytics-no-data title: "@kbn/shared-ux-page-analytics-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-analytics-no-data plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-analytics-no-data'] --- import kbnSharedUxPageAnalyticsNoDataObj from './kbn_shared_ux_page_analytics_no_data.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx b/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx index 33e376a40e196..44b47ff42ac1f 100644 --- a/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_analytics_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-analytics-no-data-mocks title: "@kbn/shared-ux-page-analytics-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-analytics-no-data-mocks plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-analytics-no-data-mocks'] --- import kbnSharedUxPageAnalyticsNoDataMocksObj from './kbn_shared_ux_page_analytics_no_data_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_kibana_no_data.mdx b/api_docs/kbn_shared_ux_page_kibana_no_data.mdx index 169499ba3ccc3..59857e64c93c7 100644 --- a/api_docs/kbn_shared_ux_page_kibana_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-no-data title: "@kbn/shared-ux-page-kibana-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-no-data plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-kibana-no-data'] --- import kbnSharedUxPageKibanaNoDataObj from './kbn_shared_ux_page_kibana_no_data.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx b/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx index b2b47ff7d8212..9bbedfdf8b471 100644 --- a/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-no-data-mocks title: "@kbn/shared-ux-page-kibana-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-no-data-mocks plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-kibana-no-data-mocks'] --- import kbnSharedUxPageKibanaNoDataMocksObj from './kbn_shared_ux_page_kibana_no_data_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_kibana_template.mdx b/api_docs/kbn_shared_ux_page_kibana_template.mdx index bf8cd462d1cda..465bcc8e2e761 100644 --- a/api_docs/kbn_shared_ux_page_kibana_template.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_template.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-template title: "@kbn/shared-ux-page-kibana-template" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-template plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-kibana-template'] --- import kbnSharedUxPageKibanaTemplateObj from './kbn_shared_ux_page_kibana_template.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx b/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx index e96aefa23fe4e..ad552520f1b03 100644 --- a/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_kibana_template_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-kibana-template-mocks title: "@kbn/shared-ux-page-kibana-template-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-kibana-template-mocks plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-kibana-template-mocks'] --- import kbnSharedUxPageKibanaTemplateMocksObj from './kbn_shared_ux_page_kibana_template_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_no_data.mdx b/api_docs/kbn_shared_ux_page_no_data.mdx index e01187db9ad20..07506735576a2 100644 --- a/api_docs/kbn_shared_ux_page_no_data.mdx +++ b/api_docs/kbn_shared_ux_page_no_data.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data title: "@kbn/shared-ux-page-no-data" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-no-data'] --- import kbnSharedUxPageNoDataObj from './kbn_shared_ux_page_no_data.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_no_data_config.mdx b/api_docs/kbn_shared_ux_page_no_data_config.mdx index 329a7ad6ed686..f43b0099c64a2 100644 --- a/api_docs/kbn_shared_ux_page_no_data_config.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-config title: "@kbn/shared-ux-page-no-data-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-config plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-no-data-config'] --- import kbnSharedUxPageNoDataConfigObj from './kbn_shared_ux_page_no_data_config.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx b/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx index b4d621d4d06f9..5c0d63cb79ff3 100644 --- a/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_config_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-config-mocks title: "@kbn/shared-ux-page-no-data-config-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-config-mocks plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-no-data-config-mocks'] --- import kbnSharedUxPageNoDataConfigMocksObj from './kbn_shared_ux_page_no_data_config_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_no_data_mocks.mdx b/api_docs/kbn_shared_ux_page_no_data_mocks.mdx index 44bdc438a765a..d752b956bf3a7 100644 --- a/api_docs/kbn_shared_ux_page_no_data_mocks.mdx +++ b/api_docs/kbn_shared_ux_page_no_data_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-no-data-mocks title: "@kbn/shared-ux-page-no-data-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-no-data-mocks plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-no-data-mocks'] --- import kbnSharedUxPageNoDataMocksObj from './kbn_shared_ux_page_no_data_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_page_solution_nav.mdx b/api_docs/kbn_shared_ux_page_solution_nav.mdx index fbf1ba7005194..0f12ff428d378 100644 --- a/api_docs/kbn_shared_ux_page_solution_nav.mdx +++ b/api_docs/kbn_shared_ux_page_solution_nav.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-page-solution-nav title: "@kbn/shared-ux-page-solution-nav" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-page-solution-nav plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-page-solution-nav'] --- import kbnSharedUxPageSolutionNavObj from './kbn_shared_ux_page_solution_nav.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_prompt_no_data_views.mdx b/api_docs/kbn_shared_ux_prompt_no_data_views.mdx index 0a1702355dce2..68e79791abde8 100644 --- a/api_docs/kbn_shared_ux_prompt_no_data_views.mdx +++ b/api_docs/kbn_shared_ux_prompt_no_data_views.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-no-data-views title: "@kbn/shared-ux-prompt-no-data-views" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-no-data-views plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-prompt-no-data-views'] --- import kbnSharedUxPromptNoDataViewsObj from './kbn_shared_ux_prompt_no_data_views.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx b/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx index 976370da2d268..1bd038cd03ca7 100644 --- a/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx +++ b/api_docs/kbn_shared_ux_prompt_no_data_views_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-no-data-views-mocks title: "@kbn/shared-ux-prompt-no-data-views-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-no-data-views-mocks plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-prompt-no-data-views-mocks'] --- import kbnSharedUxPromptNoDataViewsMocksObj from './kbn_shared_ux_prompt_no_data_views_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_prompt_not_found.mdx b/api_docs/kbn_shared_ux_prompt_not_found.mdx index 0ddf2550ede26..e0e080016ff34 100644 --- a/api_docs/kbn_shared_ux_prompt_not_found.mdx +++ b/api_docs/kbn_shared_ux_prompt_not_found.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-prompt-not-found title: "@kbn/shared-ux-prompt-not-found" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-prompt-not-found plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-prompt-not-found'] --- import kbnSharedUxPromptNotFoundObj from './kbn_shared_ux_prompt_not_found.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_router.mdx b/api_docs/kbn_shared_ux_router.mdx index 25f20619d3115..2b62ae8c2c638 100644 --- a/api_docs/kbn_shared_ux_router.mdx +++ b/api_docs/kbn_shared_ux_router.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-router title: "@kbn/shared-ux-router" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-router plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-router'] --- import kbnSharedUxRouterObj from './kbn_shared_ux_router.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_router_mocks.mdx b/api_docs/kbn_shared_ux_router_mocks.mdx index 358e2238addbf..113d088e377bd 100644 --- a/api_docs/kbn_shared_ux_router_mocks.mdx +++ b/api_docs/kbn_shared_ux_router_mocks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-router-mocks title: "@kbn/shared-ux-router-mocks" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-router-mocks plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-router-mocks'] --- import kbnSharedUxRouterMocksObj from './kbn_shared_ux_router_mocks.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_storybook_config.mdx b/api_docs/kbn_shared_ux_storybook_config.mdx index ce6dbf5323abf..82bf8ce0c51e2 100644 --- a/api_docs/kbn_shared_ux_storybook_config.mdx +++ b/api_docs/kbn_shared_ux_storybook_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-storybook-config title: "@kbn/shared-ux-storybook-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-storybook-config plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-storybook-config'] --- import kbnSharedUxStorybookConfigObj from './kbn_shared_ux_storybook_config.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_storybook_mock.mdx b/api_docs/kbn_shared_ux_storybook_mock.mdx index 54c20c6f6df2b..f2950d67d7c80 100644 --- a/api_docs/kbn_shared_ux_storybook_mock.mdx +++ b/api_docs/kbn_shared_ux_storybook_mock.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-storybook-mock title: "@kbn/shared-ux-storybook-mock" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-storybook-mock plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-storybook-mock'] --- import kbnSharedUxStorybookMockObj from './kbn_shared_ux_storybook_mock.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_tabbed_modal.mdx b/api_docs/kbn_shared_ux_tabbed_modal.mdx index 2155cb0c91ada..acfd9fbaa5ad3 100644 --- a/api_docs/kbn_shared_ux_tabbed_modal.mdx +++ b/api_docs/kbn_shared_ux_tabbed_modal.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-tabbed-modal title: "@kbn/shared-ux-tabbed-modal" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-tabbed-modal plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-tabbed-modal'] --- import kbnSharedUxTabbedModalObj from './kbn_shared_ux_tabbed_modal.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_table_persist.mdx b/api_docs/kbn_shared_ux_table_persist.mdx index e817084c54004..d3b1b2d158e8c 100644 --- a/api_docs/kbn_shared_ux_table_persist.mdx +++ b/api_docs/kbn_shared_ux_table_persist.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-table-persist title: "@kbn/shared-ux-table-persist" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-table-persist plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-table-persist'] --- import kbnSharedUxTablePersistObj from './kbn_shared_ux_table_persist.devdocs.json'; diff --git a/api_docs/kbn_shared_ux_utility.mdx b/api_docs/kbn_shared_ux_utility.mdx index 16cfebcf3b35b..95f452668effb 100644 --- a/api_docs/kbn_shared_ux_utility.mdx +++ b/api_docs/kbn_shared_ux_utility.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-shared-ux-utility title: "@kbn/shared-ux-utility" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/shared-ux-utility plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/shared-ux-utility'] --- import kbnSharedUxUtilityObj from './kbn_shared_ux_utility.devdocs.json'; diff --git a/api_docs/kbn_slo_schema.mdx b/api_docs/kbn_slo_schema.mdx index ed171d3f91003..74516d6636ade 100644 --- a/api_docs/kbn_slo_schema.mdx +++ b/api_docs/kbn_slo_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-slo-schema title: "@kbn/slo-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/slo-schema plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/slo-schema'] --- import kbnSloSchemaObj from './kbn_slo_schema.devdocs.json'; diff --git a/api_docs/kbn_some_dev_log.mdx b/api_docs/kbn_some_dev_log.mdx index 63663dd9a555e..30f0ff0838bb0 100644 --- a/api_docs/kbn_some_dev_log.mdx +++ b/api_docs/kbn_some_dev_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-some-dev-log title: "@kbn/some-dev-log" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/some-dev-log plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/some-dev-log'] --- import kbnSomeDevLogObj from './kbn_some_dev_log.devdocs.json'; diff --git a/api_docs/kbn_sort_predicates.mdx b/api_docs/kbn_sort_predicates.mdx index f7556bd1b2708..bf9ff03796bdb 100644 --- a/api_docs/kbn_sort_predicates.mdx +++ b/api_docs/kbn_sort_predicates.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-sort-predicates title: "@kbn/sort-predicates" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/sort-predicates plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/sort-predicates'] --- import kbnSortPredicatesObj from './kbn_sort_predicates.devdocs.json'; diff --git a/api_docs/kbn_sse_utils.mdx b/api_docs/kbn_sse_utils.mdx index 18f11f218bac4..883345366a417 100644 --- a/api_docs/kbn_sse_utils.mdx +++ b/api_docs/kbn_sse_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-sse-utils title: "@kbn/sse-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/sse-utils plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/sse-utils'] --- import kbnSseUtilsObj from './kbn_sse_utils.devdocs.json'; diff --git a/api_docs/kbn_sse_utils_client.mdx b/api_docs/kbn_sse_utils_client.mdx index 85078a086a9b9..b950a61dd2806 100644 --- a/api_docs/kbn_sse_utils_client.mdx +++ b/api_docs/kbn_sse_utils_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-sse-utils-client title: "@kbn/sse-utils-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/sse-utils-client plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/sse-utils-client'] --- import kbnSseUtilsClientObj from './kbn_sse_utils_client.devdocs.json'; diff --git a/api_docs/kbn_sse_utils_server.mdx b/api_docs/kbn_sse_utils_server.mdx index a3542a8abfd6c..01823388af933 100644 --- a/api_docs/kbn_sse_utils_server.mdx +++ b/api_docs/kbn_sse_utils_server.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-sse-utils-server title: "@kbn/sse-utils-server" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/sse-utils-server plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/sse-utils-server'] --- import kbnSseUtilsServerObj from './kbn_sse_utils_server.devdocs.json'; diff --git a/api_docs/kbn_std.mdx b/api_docs/kbn_std.mdx index b18ee31da292c..f6d4d613fbb46 100644 --- a/api_docs/kbn_std.mdx +++ b/api_docs/kbn_std.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-std title: "@kbn/std" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/std plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/std'] --- import kbnStdObj from './kbn_std.devdocs.json'; diff --git a/api_docs/kbn_stdio_dev_helpers.mdx b/api_docs/kbn_stdio_dev_helpers.mdx index 8f5c8782bac2c..a4e4f5ef9fd35 100644 --- a/api_docs/kbn_stdio_dev_helpers.mdx +++ b/api_docs/kbn_stdio_dev_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-stdio-dev-helpers title: "@kbn/stdio-dev-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/stdio-dev-helpers plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/stdio-dev-helpers'] --- import kbnStdioDevHelpersObj from './kbn_stdio_dev_helpers.devdocs.json'; diff --git a/api_docs/kbn_storage_adapter.mdx b/api_docs/kbn_storage_adapter.mdx index 29eed7ec5aa28..3ebcc5d2a115b 100644 --- a/api_docs/kbn_storage_adapter.mdx +++ b/api_docs/kbn_storage_adapter.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-storage-adapter title: "@kbn/storage-adapter" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/storage-adapter plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/storage-adapter'] --- import kbnStorageAdapterObj from './kbn_storage_adapter.devdocs.json'; diff --git a/api_docs/kbn_storybook.mdx b/api_docs/kbn_storybook.mdx index e668500490396..0dc3bd3b2ddf1 100644 --- a/api_docs/kbn_storybook.mdx +++ b/api_docs/kbn_storybook.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-storybook title: "@kbn/storybook" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/storybook plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/storybook'] --- import kbnStorybookObj from './kbn_storybook.devdocs.json'; diff --git a/api_docs/kbn_streams_schema.devdocs.json b/api_docs/kbn_streams_schema.devdocs.json index b49593ca81d48..0c0356454e6cf 100644 --- a/api_docs/kbn_streams_schema.devdocs.json +++ b/api_docs/kbn_streams_schema.devdocs.json @@ -2895,6 +2895,276 @@ ], "initialIsOpen": false }, + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.IlmPolicyDeletePhase", + "type": "Interface", + "tags": [], + "label": "IlmPolicyDeletePhase", + "description": [], + "path": "x-pack/platform/packages/shared/kbn-streams-schema/src/models/ingest/lifecycle/index.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.IlmPolicyDeletePhase.name", + "type": "string", + "tags": [], + "label": "name", + "description": [], + "signature": [ + "\"delete\"" + ], + "path": "x-pack/platform/packages/shared/kbn-streams-schema/src/models/ingest/lifecycle/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.IlmPolicyDeletePhase.min_age", + "type": "string", + "tags": [], + "label": "min_age", + "description": [], + "path": "x-pack/platform/packages/shared/kbn-streams-schema/src/models/ingest/lifecycle/index.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.IlmPolicyHotPhase", + "type": "Interface", + "tags": [], + "label": "IlmPolicyHotPhase", + "description": [], + "signature": [ + { + "pluginId": "@kbn/streams-schema", + "scope": "common", + "docId": "kibKbnStreamsSchemaPluginApi", + "section": "def-common.IlmPolicyHotPhase", + "text": "IlmPolicyHotPhase" + }, + " extends ", + { + "pluginId": "@kbn/streams-schema", + "scope": "common", + "docId": "kibKbnStreamsSchemaPluginApi", + "section": "def-common.IlmPolicyPhase", + "text": "IlmPolicyPhase" + } + ], + "path": "x-pack/platform/packages/shared/kbn-streams-schema/src/models/ingest/lifecycle/index.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.IlmPolicyHotPhase.name", + "type": "string", + "tags": [], + "label": "name", + "description": [], + "signature": [ + "\"hot\"" + ], + "path": "x-pack/platform/packages/shared/kbn-streams-schema/src/models/ingest/lifecycle/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.IlmPolicyHotPhase.rollover", + "type": "Object", + "tags": [], + "label": "rollover", + "description": [], + "signature": [ + "{ max_size?: string | number | undefined; max_primary_shard_size?: string | number | undefined; max_age?: string | undefined; max_docs?: number | undefined; max_primary_shard_docs?: number | undefined; }" + ], + "path": "x-pack/platform/packages/shared/kbn-streams-schema/src/models/ingest/lifecycle/index.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.IlmPolicyPhase", + "type": "Interface", + "tags": [], + "label": "IlmPolicyPhase", + "description": [], + "path": "x-pack/platform/packages/shared/kbn-streams-schema/src/models/ingest/lifecycle/index.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.IlmPolicyPhase.name", + "type": "CompoundType", + "tags": [], + "label": "name", + "description": [], + "signature": [ + "\"delete\" | \"warm\" | \"hot\" | \"frozen\" | \"cold\"" + ], + "path": "x-pack/platform/packages/shared/kbn-streams-schema/src/models/ingest/lifecycle/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.IlmPolicyPhase.size_in_bytes", + "type": "number", + "tags": [], + "label": "size_in_bytes", + "description": [], + "path": "x-pack/platform/packages/shared/kbn-streams-schema/src/models/ingest/lifecycle/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.IlmPolicyPhase.min_age", + "type": "string", + "tags": [], + "label": "min_age", + "description": [], + "signature": [ + "string | undefined" + ], + "path": "x-pack/platform/packages/shared/kbn-streams-schema/src/models/ingest/lifecycle/index.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.IlmPolicyPhases", + "type": "Interface", + "tags": [], + "label": "IlmPolicyPhases", + "description": [], + "path": "x-pack/platform/packages/shared/kbn-streams-schema/src/models/ingest/lifecycle/index.ts", + "deprecated": false, + "trackAdoption": false, + "children": [ + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.IlmPolicyPhases.hot", + "type": "Object", + "tags": [], + "label": "hot", + "description": [], + "signature": [ + { + "pluginId": "@kbn/streams-schema", + "scope": "common", + "docId": "kibKbnStreamsSchemaPluginApi", + "section": "def-common.IlmPolicyHotPhase", + "text": "IlmPolicyHotPhase" + }, + " | undefined" + ], + "path": "x-pack/platform/packages/shared/kbn-streams-schema/src/models/ingest/lifecycle/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.IlmPolicyPhases.warm", + "type": "Object", + "tags": [], + "label": "warm", + "description": [], + "signature": [ + { + "pluginId": "@kbn/streams-schema", + "scope": "common", + "docId": "kibKbnStreamsSchemaPluginApi", + "section": "def-common.IlmPolicyPhase", + "text": "IlmPolicyPhase" + }, + " | undefined" + ], + "path": "x-pack/platform/packages/shared/kbn-streams-schema/src/models/ingest/lifecycle/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.IlmPolicyPhases.cold", + "type": "Object", + "tags": [], + "label": "cold", + "description": [], + "signature": [ + { + "pluginId": "@kbn/streams-schema", + "scope": "common", + "docId": "kibKbnStreamsSchemaPluginApi", + "section": "def-common.IlmPolicyPhase", + "text": "IlmPolicyPhase" + }, + " | undefined" + ], + "path": "x-pack/platform/packages/shared/kbn-streams-schema/src/models/ingest/lifecycle/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.IlmPolicyPhases.frozen", + "type": "Object", + "tags": [], + "label": "frozen", + "description": [], + "signature": [ + { + "pluginId": "@kbn/streams-schema", + "scope": "common", + "docId": "kibKbnStreamsSchemaPluginApi", + "section": "def-common.IlmPolicyPhase", + "text": "IlmPolicyPhase" + }, + " | undefined" + ], + "path": "x-pack/platform/packages/shared/kbn-streams-schema/src/models/ingest/lifecycle/index.ts", + "deprecated": false, + "trackAdoption": false + }, + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.IlmPolicyPhases.delete", + "type": "Object", + "tags": [], + "label": "delete", + "description": [], + "signature": [ + { + "pluginId": "@kbn/streams-schema", + "scope": "common", + "docId": "kibKbnStreamsSchemaPluginApi", + "section": "def-common.IlmPolicyDeletePhase", + "text": "IlmPolicyDeletePhase" + }, + " | undefined" + ], + "path": "x-pack/platform/packages/shared/kbn-streams-schema/src/models/ingest/lifecycle/index.ts", + "deprecated": false, + "trackAdoption": false + } + ], + "initialIsOpen": false + }, { "parentPluginId": "@kbn/streams-schema", "id": "def-common.IngestStreamLifecycleDisabled", @@ -4386,6 +4656,21 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "@kbn/streams-schema", + "id": "def-common.PhaseName", + "type": "Type", + "tags": [], + "label": "PhaseName", + "description": [], + "signature": [ + "\"delete\" | \"warm\" | \"hot\" | \"frozen\" | \"cold\"" + ], + "path": "x-pack/platform/packages/shared/kbn-streams-schema/src/models/ingest/lifecycle/index.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/streams-schema", "id": "def-common.Primitive", diff --git a/api_docs/kbn_streams_schema.mdx b/api_docs/kbn_streams_schema.mdx index 671025ed5901e..2be7e9ff8ed47 100644 --- a/api_docs/kbn_streams_schema.mdx +++ b/api_docs/kbn_streams_schema.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-streams-schema title: "@kbn/streams-schema" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/streams-schema plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/streams-schema'] --- import kbnStreamsSchemaObj from './kbn_streams_schema.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/streams-program-team](https://github.com/orgs/elastic/teams/st | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 275 | 6 | 271 | 3 | +| 292 | 6 | 288 | 3 | ## Common diff --git a/api_docs/kbn_synthetics_e2e.mdx b/api_docs/kbn_synthetics_e2e.mdx index 1c787960b220f..2ef1e119c2ddb 100644 --- a/api_docs/kbn_synthetics_e2e.mdx +++ b/api_docs/kbn_synthetics_e2e.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-synthetics-e2e title: "@kbn/synthetics-e2e" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/synthetics-e2e plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/synthetics-e2e'] --- import kbnSyntheticsE2eObj from './kbn_synthetics_e2e.devdocs.json'; diff --git a/api_docs/kbn_synthetics_private_location.mdx b/api_docs/kbn_synthetics_private_location.mdx index a9bf78b2106de..0d0f97e4d5793 100644 --- a/api_docs/kbn_synthetics_private_location.mdx +++ b/api_docs/kbn_synthetics_private_location.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-synthetics-private-location title: "@kbn/synthetics-private-location" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/synthetics-private-location plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/synthetics-private-location'] --- import kbnSyntheticsPrivateLocationObj from './kbn_synthetics_private_location.devdocs.json'; diff --git a/api_docs/kbn_telemetry_tools.mdx b/api_docs/kbn_telemetry_tools.mdx index 7be5899187b9f..0b409bdf7b64d 100644 --- a/api_docs/kbn_telemetry_tools.mdx +++ b/api_docs/kbn_telemetry_tools.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-telemetry-tools title: "@kbn/telemetry-tools" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/telemetry-tools plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/telemetry-tools'] --- import kbnTelemetryToolsObj from './kbn_telemetry_tools.devdocs.json'; diff --git a/api_docs/kbn_test.mdx b/api_docs/kbn_test.mdx index 967133597db10..3198c370dc113 100644 --- a/api_docs/kbn_test.mdx +++ b/api_docs/kbn_test.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test title: "@kbn/test" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test'] --- import kbnTestObj from './kbn_test.devdocs.json'; diff --git a/api_docs/kbn_test_eui_helpers.mdx b/api_docs/kbn_test_eui_helpers.mdx index 6994e4452717a..0a06e889ef31c 100644 --- a/api_docs/kbn_test_eui_helpers.mdx +++ b/api_docs/kbn_test_eui_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-eui-helpers title: "@kbn/test-eui-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-eui-helpers plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test-eui-helpers'] --- import kbnTestEuiHelpersObj from './kbn_test_eui_helpers.devdocs.json'; diff --git a/api_docs/kbn_test_jest_helpers.mdx b/api_docs/kbn_test_jest_helpers.mdx index 3314b682107de..fb11c5559e094 100644 --- a/api_docs/kbn_test_jest_helpers.mdx +++ b/api_docs/kbn_test_jest_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-jest-helpers title: "@kbn/test-jest-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-jest-helpers plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test-jest-helpers'] --- import kbnTestJestHelpersObj from './kbn_test_jest_helpers.devdocs.json'; diff --git a/api_docs/kbn_test_subj_selector.mdx b/api_docs/kbn_test_subj_selector.mdx index 8f17bcf84b505..7dd6670c2e5cb 100644 --- a/api_docs/kbn_test_subj_selector.mdx +++ b/api_docs/kbn_test_subj_selector.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-test-subj-selector title: "@kbn/test-subj-selector" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/test-subj-selector plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/test-subj-selector'] --- import kbnTestSubjSelectorObj from './kbn_test_subj_selector.devdocs.json'; diff --git a/api_docs/kbn_timerange.mdx b/api_docs/kbn_timerange.mdx index 87a28cd2258dd..9d6c2fb7bc114 100644 --- a/api_docs/kbn_timerange.mdx +++ b/api_docs/kbn_timerange.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-timerange title: "@kbn/timerange" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/timerange plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/timerange'] --- import kbnTimerangeObj from './kbn_timerange.devdocs.json'; diff --git a/api_docs/kbn_tooling_log.mdx b/api_docs/kbn_tooling_log.mdx index 159ede19b2e40..530cb60ff8637 100644 --- a/api_docs/kbn_tooling_log.mdx +++ b/api_docs/kbn_tooling_log.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-tooling-log title: "@kbn/tooling-log" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/tooling-log plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/tooling-log'] --- import kbnToolingLogObj from './kbn_tooling_log.devdocs.json'; diff --git a/api_docs/kbn_traced_es_client.mdx b/api_docs/kbn_traced_es_client.mdx index 288aeaae67c75..91bad76c7a804 100644 --- a/api_docs/kbn_traced_es_client.mdx +++ b/api_docs/kbn_traced_es_client.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-traced-es-client title: "@kbn/traced-es-client" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/traced-es-client plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/traced-es-client'] --- import kbnTracedEsClientObj from './kbn_traced_es_client.devdocs.json'; diff --git a/api_docs/kbn_transpose_utils.mdx b/api_docs/kbn_transpose_utils.mdx index 6216db7872704..2c13e874ba787 100644 --- a/api_docs/kbn_transpose_utils.mdx +++ b/api_docs/kbn_transpose_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-transpose-utils title: "@kbn/transpose-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/transpose-utils plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/transpose-utils'] --- import kbnTransposeUtilsObj from './kbn_transpose_utils.devdocs.json'; diff --git a/api_docs/kbn_triggers_actions_ui_types.mdx b/api_docs/kbn_triggers_actions_ui_types.mdx index d1504615778cb..4c56de7103e13 100644 --- a/api_docs/kbn_triggers_actions_ui_types.mdx +++ b/api_docs/kbn_triggers_actions_ui_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-triggers-actions-ui-types title: "@kbn/triggers-actions-ui-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/triggers-actions-ui-types plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/triggers-actions-ui-types'] --- import kbnTriggersActionsUiTypesObj from './kbn_triggers_actions_ui_types.devdocs.json'; diff --git a/api_docs/kbn_try_in_console.mdx b/api_docs/kbn_try_in_console.mdx index bab7df35de108..70a381b0cb5ea 100644 --- a/api_docs/kbn_try_in_console.mdx +++ b/api_docs/kbn_try_in_console.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-try-in-console title: "@kbn/try-in-console" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/try-in-console plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/try-in-console'] --- import kbnTryInConsoleObj from './kbn_try_in_console.devdocs.json'; diff --git a/api_docs/kbn_ts_projects.mdx b/api_docs/kbn_ts_projects.mdx index 88ea0859ea0a1..e478f333406f0 100644 --- a/api_docs/kbn_ts_projects.mdx +++ b/api_docs/kbn_ts_projects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ts-projects title: "@kbn/ts-projects" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ts-projects plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ts-projects'] --- import kbnTsProjectsObj from './kbn_ts_projects.devdocs.json'; diff --git a/api_docs/kbn_typed_react_router_config.mdx b/api_docs/kbn_typed_react_router_config.mdx index 2a9f54a14f53c..45eaceac50146 100644 --- a/api_docs/kbn_typed_react_router_config.mdx +++ b/api_docs/kbn_typed_react_router_config.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-typed-react-router-config title: "@kbn/typed-react-router-config" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/typed-react-router-config plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/typed-react-router-config'] --- import kbnTypedReactRouterConfigObj from './kbn_typed_react_router_config.devdocs.json'; diff --git a/api_docs/kbn_ui_actions_browser.mdx b/api_docs/kbn_ui_actions_browser.mdx index 2d547daf98131..ed459377254e3 100644 --- a/api_docs/kbn_ui_actions_browser.mdx +++ b/api_docs/kbn_ui_actions_browser.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-actions-browser title: "@kbn/ui-actions-browser" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-actions-browser plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ui-actions-browser'] --- import kbnUiActionsBrowserObj from './kbn_ui_actions_browser.devdocs.json'; diff --git a/api_docs/kbn_ui_shared_deps_src.mdx b/api_docs/kbn_ui_shared_deps_src.mdx index 2244566ed9b8c..2f672fe911656 100644 --- a/api_docs/kbn_ui_shared_deps_src.mdx +++ b/api_docs/kbn_ui_shared_deps_src.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-shared-deps-src title: "@kbn/ui-shared-deps-src" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-shared-deps-src plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ui-shared-deps-src'] --- import kbnUiSharedDepsSrcObj from './kbn_ui_shared_deps_src.devdocs.json'; diff --git a/api_docs/kbn_ui_theme.mdx b/api_docs/kbn_ui_theme.mdx index 7ab6784f20095..0c01351dffcc8 100644 --- a/api_docs/kbn_ui_theme.mdx +++ b/api_docs/kbn_ui_theme.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-ui-theme title: "@kbn/ui-theme" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/ui-theme plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ui-theme'] --- import kbnUiThemeObj from './kbn_ui_theme.devdocs.json'; diff --git a/api_docs/kbn_unified_data_table.mdx b/api_docs/kbn_unified_data_table.mdx index 8270a09fe320d..687b39d9bbccc 100644 --- a/api_docs/kbn_unified_data_table.mdx +++ b/api_docs/kbn_unified_data_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unified-data-table title: "@kbn/unified-data-table" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unified-data-table plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unified-data-table'] --- import kbnUnifiedDataTableObj from './kbn_unified_data_table.devdocs.json'; diff --git a/api_docs/kbn_unified_doc_viewer.mdx b/api_docs/kbn_unified_doc_viewer.mdx index e9ccecabedb83..9e41836dc164c 100644 --- a/api_docs/kbn_unified_doc_viewer.mdx +++ b/api_docs/kbn_unified_doc_viewer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unified-doc-viewer title: "@kbn/unified-doc-viewer" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unified-doc-viewer plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unified-doc-viewer'] --- import kbnUnifiedDocViewerObj from './kbn_unified_doc_viewer.devdocs.json'; diff --git a/api_docs/kbn_unified_field_list.mdx b/api_docs/kbn_unified_field_list.mdx index 00d599f2f5671..5ba04cb3c837f 100644 --- a/api_docs/kbn_unified_field_list.mdx +++ b/api_docs/kbn_unified_field_list.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unified-field-list title: "@kbn/unified-field-list" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unified-field-list plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unified-field-list'] --- import kbnUnifiedFieldListObj from './kbn_unified_field_list.devdocs.json'; diff --git a/api_docs/kbn_unified_tabs.mdx b/api_docs/kbn_unified_tabs.mdx index 086b5fb512afd..6222039a91183 100644 --- a/api_docs/kbn_unified_tabs.mdx +++ b/api_docs/kbn_unified_tabs.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unified-tabs title: "@kbn/unified-tabs" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unified-tabs plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unified-tabs'] --- import kbnUnifiedTabsObj from './kbn_unified_tabs.devdocs.json'; diff --git a/api_docs/kbn_unsaved_changes_badge.mdx b/api_docs/kbn_unsaved_changes_badge.mdx index c19af547cd648..ce83754c446e4 100644 --- a/api_docs/kbn_unsaved_changes_badge.mdx +++ b/api_docs/kbn_unsaved_changes_badge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unsaved-changes-badge title: "@kbn/unsaved-changes-badge" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unsaved-changes-badge plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unsaved-changes-badge'] --- import kbnUnsavedChangesBadgeObj from './kbn_unsaved_changes_badge.devdocs.json'; diff --git a/api_docs/kbn_unsaved_changes_prompt.mdx b/api_docs/kbn_unsaved_changes_prompt.mdx index f47ee453b3140..b05a017512075 100644 --- a/api_docs/kbn_unsaved_changes_prompt.mdx +++ b/api_docs/kbn_unsaved_changes_prompt.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-unsaved-changes-prompt title: "@kbn/unsaved-changes-prompt" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/unsaved-changes-prompt plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/unsaved-changes-prompt'] --- import kbnUnsavedChangesPromptObj from './kbn_unsaved_changes_prompt.devdocs.json'; diff --git a/api_docs/kbn_use_tracked_promise.mdx b/api_docs/kbn_use_tracked_promise.mdx index 512c82fad6482..094efd6ea8131 100644 --- a/api_docs/kbn_use_tracked_promise.mdx +++ b/api_docs/kbn_use_tracked_promise.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-use-tracked-promise title: "@kbn/use-tracked-promise" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/use-tracked-promise plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/use-tracked-promise'] --- import kbnUseTrackedPromiseObj from './kbn_use_tracked_promise.devdocs.json'; diff --git a/api_docs/kbn_user_profile_components.mdx b/api_docs/kbn_user_profile_components.mdx index 33178c9cb37bd..d913b0aa96ce8 100644 --- a/api_docs/kbn_user_profile_components.mdx +++ b/api_docs/kbn_user_profile_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-user-profile-components title: "@kbn/user-profile-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/user-profile-components plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/user-profile-components'] --- import kbnUserProfileComponentsObj from './kbn_user_profile_components.devdocs.json'; diff --git a/api_docs/kbn_utility_types.mdx b/api_docs/kbn_utility_types.mdx index ac04b00af8ceb..433e3a4ccdeed 100644 --- a/api_docs/kbn_utility_types.mdx +++ b/api_docs/kbn_utility_types.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utility-types title: "@kbn/utility-types" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utility-types plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/utility-types'] --- import kbnUtilityTypesObj from './kbn_utility_types.devdocs.json'; diff --git a/api_docs/kbn_utility_types_jest.mdx b/api_docs/kbn_utility_types_jest.mdx index 8e1e7a6a50ce0..7f63c8a73fc3b 100644 --- a/api_docs/kbn_utility_types_jest.mdx +++ b/api_docs/kbn_utility_types_jest.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utility-types-jest title: "@kbn/utility-types-jest" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utility-types-jest plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/utility-types-jest'] --- import kbnUtilityTypesJestObj from './kbn_utility_types_jest.devdocs.json'; diff --git a/api_docs/kbn_utils.mdx b/api_docs/kbn_utils.mdx index 6d8ce81f445f7..e6776db75aed3 100644 --- a/api_docs/kbn_utils.mdx +++ b/api_docs/kbn_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-utils title: "@kbn/utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/utils plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/utils'] --- import kbnUtilsObj from './kbn_utils.devdocs.json'; diff --git a/api_docs/kbn_visualization_ui_components.mdx b/api_docs/kbn_visualization_ui_components.mdx index 45f0e0b863fc1..ccfed2177d8e0 100644 --- a/api_docs/kbn_visualization_ui_components.mdx +++ b/api_docs/kbn_visualization_ui_components.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-visualization-ui-components title: "@kbn/visualization-ui-components" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/visualization-ui-components plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/visualization-ui-components'] --- import kbnVisualizationUiComponentsObj from './kbn_visualization_ui_components.devdocs.json'; diff --git a/api_docs/kbn_visualization_utils.mdx b/api_docs/kbn_visualization_utils.mdx index 595104267cf52..ad6a948b7cde8 100644 --- a/api_docs/kbn_visualization_utils.mdx +++ b/api_docs/kbn_visualization_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-visualization-utils title: "@kbn/visualization-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/visualization-utils plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/visualization-utils'] --- import kbnVisualizationUtilsObj from './kbn_visualization_utils.devdocs.json'; diff --git a/api_docs/kbn_xstate_utils.mdx b/api_docs/kbn_xstate_utils.mdx index 19be48470c5e1..5f9ca27b56cb2 100644 --- a/api_docs/kbn_xstate_utils.mdx +++ b/api_docs/kbn_xstate_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-xstate-utils title: "@kbn/xstate-utils" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/xstate-utils plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/xstate-utils'] --- import kbnXstateUtilsObj from './kbn_xstate_utils.devdocs.json'; diff --git a/api_docs/kbn_yarn_lock_validator.mdx b/api_docs/kbn_yarn_lock_validator.mdx index 6320a25b3cf99..745ba6c743c2d 100644 --- a/api_docs/kbn_yarn_lock_validator.mdx +++ b/api_docs/kbn_yarn_lock_validator.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-yarn-lock-validator title: "@kbn/yarn-lock-validator" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/yarn-lock-validator plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/yarn-lock-validator'] --- import kbnYarnLockValidatorObj from './kbn_yarn_lock_validator.devdocs.json'; diff --git a/api_docs/kbn_zod.mdx b/api_docs/kbn_zod.mdx index d50870e5bd399..ee6f156173e15 100644 --- a/api_docs/kbn_zod.mdx +++ b/api_docs/kbn_zod.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-zod title: "@kbn/zod" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/zod plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/zod'] --- import kbnZodObj from './kbn_zod.devdocs.json'; diff --git a/api_docs/kbn_zod_helpers.mdx b/api_docs/kbn_zod_helpers.mdx index 987b48cf2354a..719d5786182a6 100644 --- a/api_docs/kbn_zod_helpers.mdx +++ b/api_docs/kbn_zod_helpers.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kbn-zod-helpers title: "@kbn/zod-helpers" image: https://source.unsplash.com/400x175/?github description: API docs for the @kbn/zod-helpers plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/zod-helpers'] --- import kbnZodHelpersObj from './kbn_zod_helpers.devdocs.json'; diff --git a/api_docs/kibana_overview.mdx b/api_docs/kibana_overview.mdx index 516c3dbb4278f..d8156d3369cfd 100644 --- a/api_docs/kibana_overview.mdx +++ b/api_docs/kibana_overview.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaOverview title: "kibanaOverview" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaOverview plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kibanaOverview'] --- import kibanaOverviewObj from './kibana_overview.devdocs.json'; diff --git a/api_docs/kibana_react.mdx b/api_docs/kibana_react.mdx index 9b7e324fc8dcc..da6f11973a13f 100644 --- a/api_docs/kibana_react.mdx +++ b/api_docs/kibana_react.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaReact title: "kibanaReact" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaReact plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kibanaReact'] --- import kibanaReactObj from './kibana_react.devdocs.json'; diff --git a/api_docs/kibana_utils.mdx b/api_docs/kibana_utils.mdx index de70b7bd2cc61..bc0c4eddb992d 100644 --- a/api_docs/kibana_utils.mdx +++ b/api_docs/kibana_utils.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/kibanaUtils title: "kibanaUtils" image: https://source.unsplash.com/400x175/?github description: API docs for the kibanaUtils plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'kibanaUtils'] --- import kibanaUtilsObj from './kibana_utils.devdocs.json'; diff --git a/api_docs/lens.mdx b/api_docs/lens.mdx index d418cad75015b..8f693dbc4457f 100644 --- a/api_docs/lens.mdx +++ b/api_docs/lens.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/lens title: "lens" image: https://source.unsplash.com/400x175/?github description: API docs for the lens plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lens'] --- import lensObj from './lens.devdocs.json'; diff --git a/api_docs/license_api_guard.mdx b/api_docs/license_api_guard.mdx index b73bc26df3e5f..4d71f573a7454 100644 --- a/api_docs/license_api_guard.mdx +++ b/api_docs/license_api_guard.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licenseApiGuard title: "licenseApiGuard" image: https://source.unsplash.com/400x175/?github description: API docs for the licenseApiGuard plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'licenseApiGuard'] --- import licenseApiGuardObj from './license_api_guard.devdocs.json'; diff --git a/api_docs/license_management.mdx b/api_docs/license_management.mdx index a390c4a3caea8..2d6b28058b308 100644 --- a/api_docs/license_management.mdx +++ b/api_docs/license_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licenseManagement title: "licenseManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the licenseManagement plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'licenseManagement'] --- import licenseManagementObj from './license_management.devdocs.json'; diff --git a/api_docs/licensing.mdx b/api_docs/licensing.mdx index a51e2918b7ef7..84c4ae3519608 100644 --- a/api_docs/licensing.mdx +++ b/api_docs/licensing.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/licensing title: "licensing" image: https://source.unsplash.com/400x175/?github description: API docs for the licensing plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'licensing'] --- import licensingObj from './licensing.devdocs.json'; diff --git a/api_docs/links.mdx b/api_docs/links.mdx index 8b439ced6bd03..509fca5efe958 100644 --- a/api_docs/links.mdx +++ b/api_docs/links.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/links title: "links" image: https://source.unsplash.com/400x175/?github description: API docs for the links plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'links'] --- import linksObj from './links.devdocs.json'; diff --git a/api_docs/lists.mdx b/api_docs/lists.mdx index eb95c4d907909..79b95fd72d9e2 100644 --- a/api_docs/lists.mdx +++ b/api_docs/lists.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/lists title: "lists" image: https://source.unsplash.com/400x175/?github description: API docs for the lists plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'lists'] --- import listsObj from './lists.devdocs.json'; diff --git a/api_docs/llm_tasks.mdx b/api_docs/llm_tasks.mdx index 74614bffee2a7..e8efc65722b1e 100644 --- a/api_docs/llm_tasks.mdx +++ b/api_docs/llm_tasks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/llmTasks title: "llmTasks" image: https://source.unsplash.com/400x175/?github description: API docs for the llmTasks plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'llmTasks'] --- import llmTasksObj from './llm_tasks.devdocs.json'; diff --git a/api_docs/logs_data_access.mdx b/api_docs/logs_data_access.mdx index de8133eac4dd7..f435da7a13d42 100644 --- a/api_docs/logs_data_access.mdx +++ b/api_docs/logs_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/logsDataAccess title: "logsDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the logsDataAccess plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'logsDataAccess'] --- import logsDataAccessObj from './logs_data_access.devdocs.json'; diff --git a/api_docs/logs_shared.mdx b/api_docs/logs_shared.mdx index f8f7ce7b33d8d..d90c101436c41 100644 --- a/api_docs/logs_shared.mdx +++ b/api_docs/logs_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/logsShared title: "logsShared" image: https://source.unsplash.com/400x175/?github description: API docs for the logsShared plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'logsShared'] --- import logsSharedObj from './logs_shared.devdocs.json'; diff --git a/api_docs/management.mdx b/api_docs/management.mdx index be529b2fff1a1..5739c31ade119 100644 --- a/api_docs/management.mdx +++ b/api_docs/management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/management title: "management" image: https://source.unsplash.com/400x175/?github description: API docs for the management plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'management'] --- import managementObj from './management.devdocs.json'; diff --git a/api_docs/maps.mdx b/api_docs/maps.mdx index 8256a1d3c4c96..afe9cc23e39c1 100644 --- a/api_docs/maps.mdx +++ b/api_docs/maps.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/maps title: "maps" image: https://source.unsplash.com/400x175/?github description: API docs for the maps plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'maps'] --- import mapsObj from './maps.devdocs.json'; diff --git a/api_docs/maps_ems.mdx b/api_docs/maps_ems.mdx index 67e65daf02ec0..64a5ebd0b48f8 100644 --- a/api_docs/maps_ems.mdx +++ b/api_docs/maps_ems.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/mapsEms title: "mapsEms" image: https://source.unsplash.com/400x175/?github description: API docs for the mapsEms plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'mapsEms'] --- import mapsEmsObj from './maps_ems.devdocs.json'; diff --git a/api_docs/metrics_data_access.mdx b/api_docs/metrics_data_access.mdx index f57b6adae3b64..0bbd99effb793 100644 --- a/api_docs/metrics_data_access.mdx +++ b/api_docs/metrics_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/metricsDataAccess title: "metricsDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the metricsDataAccess plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'metricsDataAccess'] --- import metricsDataAccessObj from './metrics_data_access.devdocs.json'; diff --git a/api_docs/ml.devdocs.json b/api_docs/ml.devdocs.json index ca8c8e2bd0d4c..1d1da4a6a625b 100644 --- a/api_docs/ml.devdocs.json +++ b/api_docs/ml.devdocs.json @@ -1643,7 +1643,9 @@ "IngestPipeline", "): Promise<", "IngestSimulateResponse", - ">; deleteTrainedModel(modelId: string, options?: { with_pipelines?: boolean | undefined; force?: boolean | undefined; }): Promise<{ acknowledge: boolean; }>; getCuratedModelConfig(modelName: string, options?: ", + ">; deleteTrainedModel({ modelId, options, }: ", + "DeleteModelParams", + "): Promise<{ acknowledge: boolean; }>; getCuratedModelConfig(modelName: string, options?: ", { "pluginId": "@kbn/ml-trained-models-utils", "scope": "common", @@ -1697,19 +1699,7 @@ "MlTrainedModelConfig", ">; getModelsDownloadStatus(): Promise>; }; inferenceModels: { createInferenceEndpoint(inferenceId: string, taskType: ", - "InferenceTaskType", - ", modelConfig: ", - { - "pluginId": "@kbn/inference_integration_flyout", - "scope": "common", - "docId": "kibKbnInferenceIntegrationFlyoutPluginApi", - "section": "def-common.ModelConfig", - "text": "ModelConfig" - }, - "): Promise<", - "InferenceInferenceEndpointInfo", - ">; getAllInferenceEndpoints(): Promise<", + ">>; }; inferenceModels: { getAllInferenceEndpoints(): Promise<", "InferenceGetResponse", ">; }; notifications: { findMessages(params: ", "NotificationsQueryParams", diff --git a/api_docs/ml.mdx b/api_docs/ml.mdx index a6643ff36964f..76d4ef8f064bf 100644 --- a/api_docs/ml.mdx +++ b/api_docs/ml.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ml title: "ml" image: https://source.unsplash.com/400x175/?github description: API docs for the ml plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ml'] --- import mlObj from './ml.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) for questi | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 149 | 3 | 64 | 105 | +| 149 | 3 | 64 | 106 | ## Client diff --git a/api_docs/mock_idp_plugin.mdx b/api_docs/mock_idp_plugin.mdx index c30cbec1a44a7..fb2d24c465d23 100644 --- a/api_docs/mock_idp_plugin.mdx +++ b/api_docs/mock_idp_plugin.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/mockIdpPlugin title: "mockIdpPlugin" image: https://source.unsplash.com/400x175/?github description: API docs for the mockIdpPlugin plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'mockIdpPlugin'] --- import mockIdpPluginObj from './mock_idp_plugin.devdocs.json'; diff --git a/api_docs/monitoring.mdx b/api_docs/monitoring.mdx index 019021fe8d76a..ae14946d4182d 100644 --- a/api_docs/monitoring.mdx +++ b/api_docs/monitoring.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/monitoring title: "monitoring" image: https://source.unsplash.com/400x175/?github description: API docs for the monitoring plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'monitoring'] --- import monitoringObj from './monitoring.devdocs.json'; diff --git a/api_docs/monitoring_collection.mdx b/api_docs/monitoring_collection.mdx index f8b45799894cd..8c8837bff6951 100644 --- a/api_docs/monitoring_collection.mdx +++ b/api_docs/monitoring_collection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/monitoringCollection title: "monitoringCollection" image: https://source.unsplash.com/400x175/?github description: API docs for the monitoringCollection plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'monitoringCollection'] --- import monitoringCollectionObj from './monitoring_collection.devdocs.json'; diff --git a/api_docs/navigation.mdx b/api_docs/navigation.mdx index b6d447040c040..0f02176505c44 100644 --- a/api_docs/navigation.mdx +++ b/api_docs/navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/navigation title: "navigation" image: https://source.unsplash.com/400x175/?github description: API docs for the navigation plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'navigation'] --- import navigationObj from './navigation.devdocs.json'; diff --git a/api_docs/newsfeed.mdx b/api_docs/newsfeed.mdx index b3ce3003c449d..f844a1b34ae21 100644 --- a/api_docs/newsfeed.mdx +++ b/api_docs/newsfeed.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/newsfeed title: "newsfeed" image: https://source.unsplash.com/400x175/?github description: API docs for the newsfeed plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'newsfeed'] --- import newsfeedObj from './newsfeed.devdocs.json'; diff --git a/api_docs/no_data_page.mdx b/api_docs/no_data_page.mdx index 8372915097cac..43355b6962928 100644 --- a/api_docs/no_data_page.mdx +++ b/api_docs/no_data_page.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/noDataPage title: "noDataPage" image: https://source.unsplash.com/400x175/?github description: API docs for the noDataPage plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'noDataPage'] --- import noDataPageObj from './no_data_page.devdocs.json'; diff --git a/api_docs/notifications.mdx b/api_docs/notifications.mdx index 0318f5830dd11..88bedfe945607 100644 --- a/api_docs/notifications.mdx +++ b/api_docs/notifications.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/notifications title: "notifications" image: https://source.unsplash.com/400x175/?github description: API docs for the notifications plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'notifications'] --- import notificationsObj from './notifications.devdocs.json'; diff --git a/api_docs/observability.devdocs.json b/api_docs/observability.devdocs.json index b2bbba3e7201e..2ecbebbd3ae4f 100644 --- a/api_docs/observability.devdocs.json +++ b/api_docs/observability.devdocs.json @@ -3465,9 +3465,9 @@ "EuiDataGridInMemory", " | undefined; onColumnResize?: ", "EuiDataGridOnColumnResizeHandler", - " | undefined; minSizeForControls?: number | undefined; virtualizationOptions?: Partial, \"ref\" | \"children\" | \"rowHeight\" | \"width\" | \"height\" | \"rowCount\" | \"columnWidth\" | \"itemData\" | \"columnCount\" | \"innerRef\" | \"outerRef\" | \"innerElementType\" | \"useIsScrolling\">> | undefined; rowHeightsOptions?: ", + ", \"className\" | \"style\" | \"onScroll\" | \"direction\" | \"estimatedRowHeight\" | \"estimatedColumnWidth\" | \"overscanRowCount\" | \"overscanColumnCount\" | \"initialScrollTop\" | \"initialScrollLeft\" | \"onItemsRendered\" | \"itemKey\" | \"outerElementType\"> | undefined; rowHeightsOptions?: ", "EuiDataGridRowHeightsOptions", " | undefined; ref?: React.LegacyRef<", "AlertsTableImperativeApi", @@ -5743,9 +5743,9 @@ "EuiDataGridInMemory", " | undefined; onColumnResize?: ", "EuiDataGridOnColumnResizeHandler", - " | undefined; minSizeForControls?: number | undefined; virtualizationOptions?: Partial, \"ref\" | \"children\" | \"rowHeight\" | \"width\" | \"height\" | \"rowCount\" | \"columnWidth\" | \"itemData\" | \"columnCount\" | \"innerRef\" | \"outerRef\" | \"innerElementType\" | \"useIsScrolling\">> | undefined; rowHeightsOptions?: ", + ", \"className\" | \"style\" | \"onScroll\" | \"direction\" | \"estimatedRowHeight\" | \"estimatedColumnWidth\" | \"overscanRowCount\" | \"overscanColumnCount\" | \"initialScrollTop\" | \"initialScrollLeft\" | \"onItemsRendered\" | \"itemKey\" | \"outerElementType\"> | undefined; rowHeightsOptions?: ", "EuiDataGridRowHeightsOptions", " | undefined; ref?: React.LegacyRef<", "AlertsTableImperativeApi", @@ -11996,9 +11996,9 @@ "EuiDataGridInMemory", " | undefined; onColumnResize?: ", "EuiDataGridOnColumnResizeHandler", - " | undefined; minSizeForControls?: number | undefined; virtualizationOptions?: Partial, \"ref\" | \"children\" | \"rowHeight\" | \"width\" | \"height\" | \"rowCount\" | \"columnWidth\" | \"itemData\" | \"columnCount\" | \"innerRef\" | \"outerRef\" | \"innerElementType\" | \"useIsScrolling\">> | undefined; rowHeightsOptions?: ", + ", \"className\" | \"style\" | \"onScroll\" | \"direction\" | \"estimatedRowHeight\" | \"estimatedColumnWidth\" | \"overscanRowCount\" | \"overscanColumnCount\" | \"initialScrollTop\" | \"initialScrollLeft\" | \"onItemsRendered\" | \"itemKey\" | \"outerElementType\"> | undefined; rowHeightsOptions?: ", "EuiDataGridRowHeightsOptions", " | undefined; ref?: React.LegacyRef<", "AlertsTableImperativeApi", @@ -14260,9 +14260,9 @@ "EuiDataGridInMemory", " | undefined; onColumnResize?: ", "EuiDataGridOnColumnResizeHandler", - " | undefined; minSizeForControls?: number | undefined; virtualizationOptions?: Partial, \"ref\" | \"children\" | \"rowHeight\" | \"width\" | \"height\" | \"rowCount\" | \"columnWidth\" | \"itemData\" | \"columnCount\" | \"innerRef\" | \"outerRef\" | \"innerElementType\" | \"useIsScrolling\">> | undefined; rowHeightsOptions?: ", + ", \"className\" | \"style\" | \"onScroll\" | \"direction\" | \"estimatedRowHeight\" | \"estimatedColumnWidth\" | \"overscanRowCount\" | \"overscanColumnCount\" | \"initialScrollTop\" | \"initialScrollLeft\" | \"onItemsRendered\" | \"itemKey\" | \"outerElementType\"> | undefined; rowHeightsOptions?: ", "EuiDataGridRowHeightsOptions", " | undefined; ref?: React.LegacyRef<", "AlertsTableImperativeApi", @@ -16609,9 +16609,9 @@ "EuiDataGridInMemory", " | undefined; onColumnResize?: ", "EuiDataGridOnColumnResizeHandler", - " | undefined; minSizeForControls?: number | undefined; virtualizationOptions?: Partial, \"ref\" | \"children\" | \"rowHeight\" | \"width\" | \"height\" | \"rowCount\" | \"columnWidth\" | \"itemData\" | \"columnCount\" | \"innerRef\" | \"outerRef\" | \"innerElementType\" | \"useIsScrolling\">> | undefined; rowHeightsOptions?: ", + ", \"className\" | \"style\" | \"onScroll\" | \"direction\" | \"estimatedRowHeight\" | \"estimatedColumnWidth\" | \"overscanRowCount\" | \"overscanColumnCount\" | \"initialScrollTop\" | \"initialScrollLeft\" | \"onItemsRendered\" | \"itemKey\" | \"outerElementType\"> | undefined; rowHeightsOptions?: ", "EuiDataGridRowHeightsOptions", " | undefined; ref?: React.LegacyRef<", "AlertsTableImperativeApi", diff --git a/api_docs/observability.mdx b/api_docs/observability.mdx index f465dd7537cf2..f2b4b39949386 100644 --- a/api_docs/observability.mdx +++ b/api_docs/observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observability title: "observability" image: https://source.unsplash.com/400x175/?github description: API docs for the observability plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observability'] --- import observabilityObj from './observability.devdocs.json'; diff --git a/api_docs/observability_a_i_assistant.mdx b/api_docs/observability_a_i_assistant.mdx index 299217a187392..e7e40d9aab134 100644 --- a/api_docs/observability_a_i_assistant.mdx +++ b/api_docs/observability_a_i_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityAIAssistant title: "observabilityAIAssistant" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityAIAssistant plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityAIAssistant'] --- import observabilityAIAssistantObj from './observability_a_i_assistant.devdocs.json'; diff --git a/api_docs/observability_a_i_assistant_app.mdx b/api_docs/observability_a_i_assistant_app.mdx index 777bd936f9b3a..444fa01e32ca3 100644 --- a/api_docs/observability_a_i_assistant_app.mdx +++ b/api_docs/observability_a_i_assistant_app.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityAIAssistantApp title: "observabilityAIAssistantApp" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityAIAssistantApp plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityAIAssistantApp'] --- import observabilityAIAssistantAppObj from './observability_a_i_assistant_app.devdocs.json'; diff --git a/api_docs/observability_ai_assistant_management.mdx b/api_docs/observability_ai_assistant_management.mdx index f76562520e996..cca8bfd62e4d6 100644 --- a/api_docs/observability_ai_assistant_management.mdx +++ b/api_docs/observability_ai_assistant_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityAiAssistantManagement title: "observabilityAiAssistantManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityAiAssistantManagement plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityAiAssistantManagement'] --- import observabilityAiAssistantManagementObj from './observability_ai_assistant_management.devdocs.json'; diff --git a/api_docs/observability_logs_explorer.mdx b/api_docs/observability_logs_explorer.mdx index 6580625651c7a..bdab6afe2b4b3 100644 --- a/api_docs/observability_logs_explorer.mdx +++ b/api_docs/observability_logs_explorer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityLogsExplorer title: "observabilityLogsExplorer" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityLogsExplorer plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityLogsExplorer'] --- import observabilityLogsExplorerObj from './observability_logs_explorer.devdocs.json'; diff --git a/api_docs/observability_onboarding.mdx b/api_docs/observability_onboarding.mdx index c1dc0684da8d3..5586d2e3ba79a 100644 --- a/api_docs/observability_onboarding.mdx +++ b/api_docs/observability_onboarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityOnboarding title: "observabilityOnboarding" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityOnboarding plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityOnboarding'] --- import observabilityOnboardingObj from './observability_onboarding.devdocs.json'; diff --git a/api_docs/observability_shared.mdx b/api_docs/observability_shared.mdx index 7146e1f2ab437..fc004919220f6 100644 --- a/api_docs/observability_shared.mdx +++ b/api_docs/observability_shared.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/observabilityShared title: "observabilityShared" image: https://source.unsplash.com/400x175/?github description: API docs for the observabilityShared plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'observabilityShared'] --- import observabilitySharedObj from './observability_shared.devdocs.json'; diff --git a/api_docs/osquery.mdx b/api_docs/osquery.mdx index 2ff236bf3e5b6..f8f30fad25e92 100644 --- a/api_docs/osquery.mdx +++ b/api_docs/osquery.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/osquery title: "osquery" image: https://source.unsplash.com/400x175/?github description: API docs for the osquery plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'osquery'] --- import osqueryObj from './osquery.devdocs.json'; diff --git a/api_docs/painless_lab.mdx b/api_docs/painless_lab.mdx index c02ae90cbf7fa..488dfa2cfdef3 100644 --- a/api_docs/painless_lab.mdx +++ b/api_docs/painless_lab.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/painlessLab title: "painlessLab" image: https://source.unsplash.com/400x175/?github description: API docs for the painlessLab plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'painlessLab'] --- import painlessLabObj from './painless_lab.devdocs.json'; diff --git a/api_docs/plugin_directory.mdx b/api_docs/plugin_directory.mdx index d8d706f0dccac..95b87510412fd 100644 --- a/api_docs/plugin_directory.mdx +++ b/api_docs/plugin_directory.mdx @@ -7,7 +7,7 @@ id: kibDevDocsPluginDirectory slug: /kibana-dev-docs/api-meta/plugin-api-directory title: Directory description: Directory of public APIs available through plugins or packages. -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -15,13 +15,13 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | Count | Plugins or Packages with a
public API | Number of teams | |--------------|----------|------------------------| -| 923 | 784 | 42 | +| 922 | 783 | 42 | ### Public API health stats | API Count | Any Count | Missing comments | Missing exports | |--------------|----------|-----------------|--------| -| 56585 | 254 | 42253 | 2748 | +| 56622 | 253 | 42284 | 2748 | ## Plugin Directory @@ -55,13 +55,13 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/fleet](https://github.com/orgs/elastic/teams/fleet) | Add custom data integrations so they can be displayed in the Fleet integrations app | 268 | 0 | 249 | 1 | | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | Adds the Dashboard app to Kibana | 92 | 0 | 89 | 12 | | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | - | 54 | 0 | 51 | 0 | -| | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | Data services are useful for searching and querying data from Elasticsearch. Helpful utilities include: a re-usable react query bar, KQL autocomplete, async search, Data Views (Index Patterns) and field formatters. | 3215 | 31 | 2600 | 26 | +| | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | Data services are useful for searching and querying data from Elasticsearch. Helpful utilities include: a re-usable react query bar, KQL autocomplete, async search, Data Views (Index Patterns) and field formatters. | 3219 | 31 | 2602 | 26 | | | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | - | 6 | 0 | 6 | 0 | | | [@elastic/obs-ai-assistant](https://github.com/orgs/elastic/teams/obs-ai-assistant) | - | 9 | 0 | 9 | 0 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | This plugin provides the ability to create data views via a modal flyout inside Kibana apps | 35 | 0 | 25 | 5 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | Reusable data view field editor across Kibana | 72 | 0 | 33 | 1 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | Data view management app | 2 | 0 | 2 | 0 | -| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | Data services are useful for searching and querying data from Elasticsearch. Helpful utilities include: a re-usable react query bar, KQL autocomplete, async search, Data Views (Index Patterns) and field formatters. | 1233 | 0 | 447 | 4 | +| | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | Data services are useful for searching and querying data from Elasticsearch. Helpful utilities include: a re-usable react query bar, KQL autocomplete, async search, Data Views (Index Patterns) and field formatters. | 1241 | 0 | 451 | 4 | | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | The Data Visualizer tools help you understand your data, by analyzing the metrics and fields in a log file or an existing Elasticsearch index. | 31 | 3 | 25 | 4 | | | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | This plugin introduces the concept of data set quality, where users can easily get an overview on the data sets they have. | 31 | 0 | 31 | 11 | | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 15 | 0 | 9 | 2 | @@ -101,7 +101,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 273 | 0 | 109 | 3 | | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | Index pattern fields and ambiguous values formatters | 293 | 5 | 254 | 3 | | | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | Exposes services for async usage and search of fields metadata. | 45 | 0 | 45 | 9 | -| | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | The file upload plugin contains components and services for uploading a file, analyzing its data, and then importing the data into an Elasticsearch index. Supported file types include CSV, TSV, newline-delimited JSON and GeoJSON. | 96 | 0 | 96 | 8 | +| | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | The file upload plugin contains components and services for uploading a file, analyzing its data, and then importing the data into an Elasticsearch index. Supported file types include CSV, TSV, newline-delimited JSON and GeoJSON. | 93 | 0 | 93 | 8 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | File upload, download, sharing, and serving over HTTP implementation in Kibana. | 240 | 0 | 24 | 9 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Simple UI for managing files in Kibana | 3 | 0 | 3 | 0 | | | [@elastic/fleet](https://github.com/orgs/elastic/teams/fleet) | - | 1458 | 5 | 1331 | 85 | @@ -144,7 +144,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | - | 213 | 0 | 207 | 28 | | | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | - | 62 | 0 | 62 | 0 | | | [@elastic/obs-ux-infra_services-team](https://github.com/orgs/elastic/teams/obs-ux-infra_services-team) | Exposes utilities for accessing metrics data | 135 | 6 | 135 | 5 | -| | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | This plugin provides access to the machine learning features provided by Elastic. | 149 | 3 | 64 | 105 | +| | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | This plugin provides access to the machine learning features provided by Elastic. | 149 | 3 | 64 | 106 | | | [@elastic/kibana-security](https://github.com/orgs/elastic/teams/kibana-security) | - | 2 | 0 | 2 | 0 | | | [@elastic/stack-monitoring](https://github.com/orgs/elastic/teams/stack-monitoring) | - | 15 | 3 | 13 | 1 | | | [@elastic/stack-monitoring](https://github.com/orgs/elastic/teams/stack-monitoring) | - | 9 | 0 | 9 | 0 | @@ -285,8 +285,8 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 3 | 0 | 3 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 62 | 0 | 17 | 1 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 2 | 0 | 2 | 0 | -| | [@elastic/kibana-cloud-security-posture](https://github.com/orgs/elastic/teams/kibana-cloud-security-posture) | - | 92 | 1 | 92 | 0 | -| | [@elastic/kibana-cloud-security-posture](https://github.com/orgs/elastic/teams/kibana-cloud-security-posture) | - | 124 | 0 | 122 | 2 | +| | [@elastic/kibana-cloud-security-posture](https://github.com/orgs/elastic/teams/kibana-cloud-security-posture) | - | 97 | 1 | 97 | 0 | +| | [@elastic/kibana-cloud-security-posture](https://github.com/orgs/elastic/teams/kibana-cloud-security-posture) | - | 137 | 0 | 135 | 2 | | | [@elastic/kibana-cloud-security-posture](https://github.com/orgs/elastic/teams/kibana-cloud-security-posture) | - | 28 | 0 | 18 | 7 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 49 | 0 | 25 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 2 | 0 | 2 | 0 | @@ -546,8 +546,8 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-data-discovery](https://github.com/orgs/elastic/teams/kibana-data-discovery) | - | 51 | 0 | 42 | 2 | | | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | - | 14 | 0 | 14 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 2 | 0 | 0 | 0 | -| | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 114 | 2 | 89 | 1 | -| | [@elastic/appex-qa](https://github.com/orgs/elastic/teams/appex-qa) | - | 564 | 6 | 524 | 7 | +| | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 123 | 2 | 98 | 5 | +| | [@elastic/appex-qa](https://github.com/orgs/elastic/teams/appex-qa) | - | 555 | 6 | 515 | 3 | | | [@elastic/appex-ai-infra](https://github.com/orgs/elastic/teams/appex-ai-infra) | - | 10 | 0 | 8 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 1 | 0 | 0 | 0 | | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 1 | 0 | 1 | 0 | @@ -569,7 +569,6 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/appex-ai-infra](https://github.com/orgs/elastic/teams/appex-ai-infra) | - | 180 | 0 | 62 | 4 | | | [@elastic/response-ops](https://github.com/orgs/elastic/teams/response-ops) | - | 128 | 0 | 128 | 0 | | | [@elastic/appex-ai-infra](https://github.com/orgs/elastic/teams/appex-ai-infra) | - | 50 | 0 | 49 | 0 | -| | [@elastic/ml-ui](https://github.com/orgs/elastic/teams/ml-ui) | - | 7 | 1 | 7 | 1 | | | [@elastic/obs-ux-management-team](https://github.com/orgs/elastic/teams/obs-ux-management-team) | - | 9 | 0 | 9 | 0 | | | [@elastic/kibana-visualizations](https://github.com/orgs/elastic/teams/kibana-visualizations) | - | 52 | 12 | 43 | 0 | | | [@elastic/obs-ux-management-team](https://github.com/orgs/elastic/teams/obs-ux-management-team) | - | 85 | 0 | 85 | 0 | @@ -806,7 +805,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 4 | 0 | 2 | 0 | | | [@elastic/observability-ui](https://github.com/orgs/elastic/teams/observability-ui) | - | 77 | 0 | 76 | 2 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 43 | 2 | 23 | 0 | -| | [@elastic/streams-program-team](https://github.com/orgs/elastic/teams/streams-program-team) | - | 275 | 6 | 271 | 3 | +| | [@elastic/streams-program-team](https://github.com/orgs/elastic/teams/streams-program-team) | - | 292 | 6 | 288 | 3 | | | [@elastic/obs-ux-management-team](https://github.com/orgs/elastic/teams/obs-ux-management-team) | - | 9 | 0 | 9 | 0 | | | [@elastic/obs-ux-management-team](https://github.com/orgs/elastic/teams/obs-ux-management-team) | - | 19 | 0 | 19 | 0 | | | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | - | 7 | 0 | 5 | 1 | diff --git a/api_docs/presentation_panel.mdx b/api_docs/presentation_panel.mdx index 810c0363e1699..3cfb84a7c1b3d 100644 --- a/api_docs/presentation_panel.mdx +++ b/api_docs/presentation_panel.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/presentationPanel title: "presentationPanel" image: https://source.unsplash.com/400x175/?github description: API docs for the presentationPanel plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'presentationPanel'] --- import presentationPanelObj from './presentation_panel.devdocs.json'; diff --git a/api_docs/presentation_util.mdx b/api_docs/presentation_util.mdx index 95235dd82649b..2dfa37e526738 100644 --- a/api_docs/presentation_util.mdx +++ b/api_docs/presentation_util.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/presentationUtil title: "presentationUtil" image: https://source.unsplash.com/400x175/?github description: API docs for the presentationUtil plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'presentationUtil'] --- import presentationUtilObj from './presentation_util.devdocs.json'; diff --git a/api_docs/product_doc_base.mdx b/api_docs/product_doc_base.mdx index 33b7ff009c3b2..c2b537ad366a1 100644 --- a/api_docs/product_doc_base.mdx +++ b/api_docs/product_doc_base.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/productDocBase title: "productDocBase" image: https://source.unsplash.com/400x175/?github description: API docs for the productDocBase plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'productDocBase'] --- import productDocBaseObj from './product_doc_base.devdocs.json'; diff --git a/api_docs/profiling.mdx b/api_docs/profiling.mdx index 82e6a3d4a8827..28ca51e7a4a94 100644 --- a/api_docs/profiling.mdx +++ b/api_docs/profiling.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/profiling title: "profiling" image: https://source.unsplash.com/400x175/?github description: API docs for the profiling plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'profiling'] --- import profilingObj from './profiling.devdocs.json'; diff --git a/api_docs/profiling_data_access.mdx b/api_docs/profiling_data_access.mdx index e9a12ef50a236..bc761a0a699c6 100644 --- a/api_docs/profiling_data_access.mdx +++ b/api_docs/profiling_data_access.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/profilingDataAccess title: "profilingDataAccess" image: https://source.unsplash.com/400x175/?github description: API docs for the profilingDataAccess plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'profilingDataAccess'] --- import profilingDataAccessObj from './profiling_data_access.devdocs.json'; diff --git a/api_docs/remote_clusters.mdx b/api_docs/remote_clusters.mdx index b7f71c96d31f5..b382489c2839d 100644 --- a/api_docs/remote_clusters.mdx +++ b/api_docs/remote_clusters.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/remoteClusters title: "remoteClusters" image: https://source.unsplash.com/400x175/?github description: API docs for the remoteClusters plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'remoteClusters'] --- import remoteClustersObj from './remote_clusters.devdocs.json'; diff --git a/api_docs/reporting.mdx b/api_docs/reporting.mdx index d9f7e81472a91..c8b8c849ef215 100644 --- a/api_docs/reporting.mdx +++ b/api_docs/reporting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/reporting title: "reporting" image: https://source.unsplash.com/400x175/?github description: API docs for the reporting plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'reporting'] --- import reportingObj from './reporting.devdocs.json'; diff --git a/api_docs/rollup.mdx b/api_docs/rollup.mdx index d3245164fb4ef..bbdaa6722488a 100644 --- a/api_docs/rollup.mdx +++ b/api_docs/rollup.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/rollup title: "rollup" image: https://source.unsplash.com/400x175/?github description: API docs for the rollup plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'rollup'] --- import rollupObj from './rollup.devdocs.json'; diff --git a/api_docs/rule_registry.mdx b/api_docs/rule_registry.mdx index 84d2455f0eb65..afa4b3a865744 100644 --- a/api_docs/rule_registry.mdx +++ b/api_docs/rule_registry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ruleRegistry title: "ruleRegistry" image: https://source.unsplash.com/400x175/?github description: API docs for the ruleRegistry plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ruleRegistry'] --- import ruleRegistryObj from './rule_registry.devdocs.json'; diff --git a/api_docs/runtime_fields.mdx b/api_docs/runtime_fields.mdx index 69bd03a5f730f..bf7450d2f3a97 100644 --- a/api_docs/runtime_fields.mdx +++ b/api_docs/runtime_fields.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/runtimeFields title: "runtimeFields" image: https://source.unsplash.com/400x175/?github description: API docs for the runtimeFields plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'runtimeFields'] --- import runtimeFieldsObj from './runtime_fields.devdocs.json'; diff --git a/api_docs/saved_objects.mdx b/api_docs/saved_objects.mdx index bc766dc2021c4..1b1445f47d3e3 100644 --- a/api_docs/saved_objects.mdx +++ b/api_docs/saved_objects.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjects title: "savedObjects" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjects plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjects'] --- import savedObjectsObj from './saved_objects.devdocs.json'; diff --git a/api_docs/saved_objects_finder.mdx b/api_docs/saved_objects_finder.mdx index 14faf63aaad3d..35ec93bf0e1df 100644 --- a/api_docs/saved_objects_finder.mdx +++ b/api_docs/saved_objects_finder.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsFinder title: "savedObjectsFinder" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsFinder plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsFinder'] --- import savedObjectsFinderObj from './saved_objects_finder.devdocs.json'; diff --git a/api_docs/saved_objects_management.devdocs.json b/api_docs/saved_objects_management.devdocs.json index 92d236c37281f..169c7a8084696 100644 --- a/api_docs/saved_objects_management.devdocs.json +++ b/api_docs/saved_objects_management.devdocs.json @@ -328,7 +328,9 @@ }, ") => React.ReactNode) | undefined; height?: string | number | undefined; align?: ", "HorizontalAlignment", - " | undefined; readOnly?: boolean | undefined; colSpan?: number | undefined; rowSpan?: number | undefined; valign?: \"top\" | \"bottom\" | \"middle\" | \"baseline\" | undefined; textOnly?: boolean | undefined; truncateText?: boolean | { lines: number; } | undefined; mobileOptions?: (Omit<", + " | undefined; readOnly?: boolean | undefined; colSpan?: number | undefined; rowSpan?: number | undefined; valign?: \"top\" | \"bottom\" | \"middle\" | \"baseline\" | undefined; nameTooltip?: ", + "EuiTableColumnNameTooltipProps", + " | undefined; textOnly?: boolean | undefined; truncateText?: boolean | { lines: number; } | undefined; mobileOptions?: (Omit<", "EuiTableRowCellMobileOptionsShape", ", \"render\"> & { render?: ((item: ", { diff --git a/api_docs/saved_objects_management.mdx b/api_docs/saved_objects_management.mdx index 330da918a988d..bd8f6388f9f0e 100644 --- a/api_docs/saved_objects_management.mdx +++ b/api_docs/saved_objects_management.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsManagement title: "savedObjectsManagement" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsManagement plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsManagement'] --- import savedObjectsManagementObj from './saved_objects_management.devdocs.json'; diff --git a/api_docs/saved_objects_tagging.mdx b/api_docs/saved_objects_tagging.mdx index fdc3e19a689b0..90921528edcd1 100644 --- a/api_docs/saved_objects_tagging.mdx +++ b/api_docs/saved_objects_tagging.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsTagging title: "savedObjectsTagging" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsTagging plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsTagging'] --- import savedObjectsTaggingObj from './saved_objects_tagging.devdocs.json'; diff --git a/api_docs/saved_objects_tagging_oss.mdx b/api_docs/saved_objects_tagging_oss.mdx index 883b91192f627..175f312097401 100644 --- a/api_docs/saved_objects_tagging_oss.mdx +++ b/api_docs/saved_objects_tagging_oss.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedObjectsTaggingOss title: "savedObjectsTaggingOss" image: https://source.unsplash.com/400x175/?github description: API docs for the savedObjectsTaggingOss plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsTaggingOss'] --- import savedObjectsTaggingOssObj from './saved_objects_tagging_oss.devdocs.json'; diff --git a/api_docs/saved_search.mdx b/api_docs/saved_search.mdx index bd40145db1cf7..434853a9f82ed 100644 --- a/api_docs/saved_search.mdx +++ b/api_docs/saved_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/savedSearch title: "savedSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the savedSearch plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedSearch'] --- import savedSearchObj from './saved_search.devdocs.json'; diff --git a/api_docs/screenshot_mode.mdx b/api_docs/screenshot_mode.mdx index 54ba9a028b72d..99c2c7fdbfc98 100644 --- a/api_docs/screenshot_mode.mdx +++ b/api_docs/screenshot_mode.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/screenshotMode title: "screenshotMode" image: https://source.unsplash.com/400x175/?github description: API docs for the screenshotMode plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'screenshotMode'] --- import screenshotModeObj from './screenshot_mode.devdocs.json'; diff --git a/api_docs/screenshotting.mdx b/api_docs/screenshotting.mdx index faad866582004..5fbe6b5ff8261 100644 --- a/api_docs/screenshotting.mdx +++ b/api_docs/screenshotting.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/screenshotting title: "screenshotting" image: https://source.unsplash.com/400x175/?github description: API docs for the screenshotting plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'screenshotting'] --- import screenshottingObj from './screenshotting.devdocs.json'; diff --git a/api_docs/search_assistant.mdx b/api_docs/search_assistant.mdx index 96575f9054e25..bae29367ed21a 100644 --- a/api_docs/search_assistant.mdx +++ b/api_docs/search_assistant.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchAssistant title: "searchAssistant" image: https://source.unsplash.com/400x175/?github description: API docs for the searchAssistant plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchAssistant'] --- import searchAssistantObj from './search_assistant.devdocs.json'; diff --git a/api_docs/search_connectors.mdx b/api_docs/search_connectors.mdx index 6917518045dca..b6c7c374d55d0 100644 --- a/api_docs/search_connectors.mdx +++ b/api_docs/search_connectors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchConnectors title: "searchConnectors" image: https://source.unsplash.com/400x175/?github description: API docs for the searchConnectors plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchConnectors'] --- import searchConnectorsObj from './search_connectors.devdocs.json'; diff --git a/api_docs/search_homepage.mdx b/api_docs/search_homepage.mdx index e8af5cee25469..634cec1b42659 100644 --- a/api_docs/search_homepage.mdx +++ b/api_docs/search_homepage.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchHomepage title: "searchHomepage" image: https://source.unsplash.com/400x175/?github description: API docs for the searchHomepage plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchHomepage'] --- import searchHomepageObj from './search_homepage.devdocs.json'; diff --git a/api_docs/search_indices.mdx b/api_docs/search_indices.mdx index 807649a7a5974..18d350a5c66f2 100644 --- a/api_docs/search_indices.mdx +++ b/api_docs/search_indices.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchIndices title: "searchIndices" image: https://source.unsplash.com/400x175/?github description: API docs for the searchIndices plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchIndices'] --- import searchIndicesObj from './search_indices.devdocs.json'; diff --git a/api_docs/search_inference_endpoints.mdx b/api_docs/search_inference_endpoints.mdx index f880a981b650f..3ae3f14cf10be 100644 --- a/api_docs/search_inference_endpoints.mdx +++ b/api_docs/search_inference_endpoints.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchInferenceEndpoints title: "searchInferenceEndpoints" image: https://source.unsplash.com/400x175/?github description: API docs for the searchInferenceEndpoints plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchInferenceEndpoints'] --- import searchInferenceEndpointsObj from './search_inference_endpoints.devdocs.json'; diff --git a/api_docs/search_navigation.mdx b/api_docs/search_navigation.mdx index dcc9d98c4d0f4..d2ea2bc22c598 100644 --- a/api_docs/search_navigation.mdx +++ b/api_docs/search_navigation.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchNavigation title: "searchNavigation" image: https://source.unsplash.com/400x175/?github description: API docs for the searchNavigation plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchNavigation'] --- import searchNavigationObj from './search_navigation.devdocs.json'; diff --git a/api_docs/search_notebooks.mdx b/api_docs/search_notebooks.mdx index dfb24985492b5..547689c8cdf66 100644 --- a/api_docs/search_notebooks.mdx +++ b/api_docs/search_notebooks.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchNotebooks title: "searchNotebooks" image: https://source.unsplash.com/400x175/?github description: API docs for the searchNotebooks plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchNotebooks'] --- import searchNotebooksObj from './search_notebooks.devdocs.json'; diff --git a/api_docs/search_playground.mdx b/api_docs/search_playground.mdx index f124babf2b0c4..8c76828fde86c 100644 --- a/api_docs/search_playground.mdx +++ b/api_docs/search_playground.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchPlayground title: "searchPlayground" image: https://source.unsplash.com/400x175/?github description: API docs for the searchPlayground plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchPlayground'] --- import searchPlaygroundObj from './search_playground.devdocs.json'; diff --git a/api_docs/search_synonyms.mdx b/api_docs/search_synonyms.mdx index f81b0b71658f8..86da7385dd9ae 100644 --- a/api_docs/search_synonyms.mdx +++ b/api_docs/search_synonyms.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/searchSynonyms title: "searchSynonyms" image: https://source.unsplash.com/400x175/?github description: API docs for the searchSynonyms plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'searchSynonyms'] --- import searchSynonymsObj from './search_synonyms.devdocs.json'; diff --git a/api_docs/security.mdx b/api_docs/security.mdx index bee0cd53348f2..dc455d572b811 100644 --- a/api_docs/security.mdx +++ b/api_docs/security.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/security title: "security" image: https://source.unsplash.com/400x175/?github description: API docs for the security plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'security'] --- import securityObj from './security.devdocs.json'; diff --git a/api_docs/security_solution.mdx b/api_docs/security_solution.mdx index 0025fa2bca866..9e173b7f8848a 100644 --- a/api_docs/security_solution.mdx +++ b/api_docs/security_solution.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolution title: "securitySolution" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolution plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'securitySolution'] --- import securitySolutionObj from './security_solution.devdocs.json'; diff --git a/api_docs/security_solution_ess.mdx b/api_docs/security_solution_ess.mdx index 605368b66468b..5295b00c31309 100644 --- a/api_docs/security_solution_ess.mdx +++ b/api_docs/security_solution_ess.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolutionEss title: "securitySolutionEss" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolutionEss plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'securitySolutionEss'] --- import securitySolutionEssObj from './security_solution_ess.devdocs.json'; diff --git a/api_docs/security_solution_serverless.mdx b/api_docs/security_solution_serverless.mdx index 5a23fbac6ed08..e54b3eac2646e 100644 --- a/api_docs/security_solution_serverless.mdx +++ b/api_docs/security_solution_serverless.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/securitySolutionServerless title: "securitySolutionServerless" image: https://source.unsplash.com/400x175/?github description: API docs for the securitySolutionServerless plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'securitySolutionServerless'] --- import securitySolutionServerlessObj from './security_solution_serverless.devdocs.json'; diff --git a/api_docs/serverless.mdx b/api_docs/serverless.mdx index 553aa7ecf43b8..f9e169d7eb89b 100644 --- a/api_docs/serverless.mdx +++ b/api_docs/serverless.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverless title: "serverless" image: https://source.unsplash.com/400x175/?github description: API docs for the serverless plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'serverless'] --- import serverlessObj from './serverless.devdocs.json'; diff --git a/api_docs/serverless_observability.mdx b/api_docs/serverless_observability.mdx index 05e2d907adecd..d525ae39b7de1 100644 --- a/api_docs/serverless_observability.mdx +++ b/api_docs/serverless_observability.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverlessObservability title: "serverlessObservability" image: https://source.unsplash.com/400x175/?github description: API docs for the serverlessObservability plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'serverlessObservability'] --- import serverlessObservabilityObj from './serverless_observability.devdocs.json'; diff --git a/api_docs/serverless_search.mdx b/api_docs/serverless_search.mdx index ce8f431113d90..59a15ec8fd897 100644 --- a/api_docs/serverless_search.mdx +++ b/api_docs/serverless_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/serverlessSearch title: "serverlessSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the serverlessSearch plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'serverlessSearch'] --- import serverlessSearchObj from './serverless_search.devdocs.json'; diff --git a/api_docs/session_view.mdx b/api_docs/session_view.mdx index e74d41f125227..4e051d8f762cb 100644 --- a/api_docs/session_view.mdx +++ b/api_docs/session_view.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/sessionView title: "sessionView" image: https://source.unsplash.com/400x175/?github description: API docs for the sessionView plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'sessionView'] --- import sessionViewObj from './session_view.devdocs.json'; diff --git a/api_docs/share.mdx b/api_docs/share.mdx index 5bc98e9632596..657b71c12e123 100644 --- a/api_docs/share.mdx +++ b/api_docs/share.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/share title: "share" image: https://source.unsplash.com/400x175/?github description: API docs for the share plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'share'] --- import shareObj from './share.devdocs.json'; diff --git a/api_docs/slo.mdx b/api_docs/slo.mdx index 7bc9becc6feb7..f305c909c730c 100644 --- a/api_docs/slo.mdx +++ b/api_docs/slo.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/slo title: "slo" image: https://source.unsplash.com/400x175/?github description: API docs for the slo plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'slo'] --- import sloObj from './slo.devdocs.json'; diff --git a/api_docs/snapshot_restore.mdx b/api_docs/snapshot_restore.mdx index 127be3e786d64..ee99c11edc8a3 100644 --- a/api_docs/snapshot_restore.mdx +++ b/api_docs/snapshot_restore.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/snapshotRestore title: "snapshotRestore" image: https://source.unsplash.com/400x175/?github description: API docs for the snapshotRestore plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'snapshotRestore'] --- import snapshotRestoreObj from './snapshot_restore.devdocs.json'; diff --git a/api_docs/spaces.mdx b/api_docs/spaces.mdx index f35fbd555f400..623f982736e68 100644 --- a/api_docs/spaces.mdx +++ b/api_docs/spaces.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/spaces title: "spaces" image: https://source.unsplash.com/400x175/?github description: API docs for the spaces plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'spaces'] --- import spacesObj from './spaces.devdocs.json'; diff --git a/api_docs/stack_alerts.mdx b/api_docs/stack_alerts.mdx index 75d0cba6df38a..44f9ee144b0c6 100644 --- a/api_docs/stack_alerts.mdx +++ b/api_docs/stack_alerts.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/stackAlerts title: "stackAlerts" image: https://source.unsplash.com/400x175/?github description: API docs for the stackAlerts plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'stackAlerts'] --- import stackAlertsObj from './stack_alerts.devdocs.json'; diff --git a/api_docs/stack_connectors.mdx b/api_docs/stack_connectors.mdx index 1444ed8d00c13..9f4dbf8a672fb 100644 --- a/api_docs/stack_connectors.mdx +++ b/api_docs/stack_connectors.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/stackConnectors title: "stackConnectors" image: https://source.unsplash.com/400x175/?github description: API docs for the stackConnectors plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'stackConnectors'] --- import stackConnectorsObj from './stack_connectors.devdocs.json'; diff --git a/api_docs/streams.devdocs.json b/api_docs/streams.devdocs.json index 1d96f890d52b4..c366d5bb8ab1a 100644 --- a/api_docs/streams.devdocs.json +++ b/api_docs/streams.devdocs.json @@ -141,7 +141,37 @@ "section": "def-common.GroupObjectGetResponse", "text": "GroupObjectGetResponse" }, - ", undefined>; \"PUT /api/streams/{name}/_ingest\": ", + ", undefined>; \"GET /api/streams/{name}/lifecycle/_explain\": ", + { + "pluginId": "@kbn/server-route-repository-utils", + "scope": "common", + "docId": "kibKbnServerRouteRepositoryUtilsPluginApi", + "section": "def-common.ServerRoute", + "text": "ServerRoute" + }, + "<\"GET /api/streams/{name}/lifecycle/_explain\", Zod.ZodObject<{ path: Zod.ZodObject<{ name: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { name: string; }, { name: string; }>; }, \"strip\", Zod.ZodTypeAny, { path: { name: string; }; }, { path: { name: string; }; }>, ", + "StreamsRouteHandlerResources", + ", ", + "IlmExplainLifecycleResponse", + ", undefined>; \"GET /api/streams/{name}/lifecycle/_stats\": ", + { + "pluginId": "@kbn/server-route-repository-utils", + "scope": "common", + "docId": "kibKbnServerRouteRepositoryUtilsPluginApi", + "section": "def-common.ServerRoute", + "text": "ServerRoute" + }, + "<\"GET /api/streams/{name}/lifecycle/_stats\", Zod.ZodObject<{ path: Zod.ZodObject<{ name: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { name: string; }, { name: string; }>; }, \"strip\", Zod.ZodTypeAny, { path: { name: string; }; }, { path: { name: string; }; }>, ", + "StreamsRouteHandlerResources", + ", { phases: ", + { + "pluginId": "@kbn/streams-schema", + "scope": "common", + "docId": "kibKbnStreamsSchemaPluginApi", + "section": "def-common.IlmPolicyPhases", + "text": "IlmPolicyPhases" + }, + "; }, undefined>; \"PUT /api/streams/{name}/_ingest\": ", { "pluginId": "@kbn/server-route-repository-utils", "scope": "common", @@ -846,7 +876,37 @@ "section": "def-common.GroupObjectGetResponse", "text": "GroupObjectGetResponse" }, - ", undefined>; \"PUT /api/streams/{name}/_ingest\": ", + ", undefined>; \"GET /api/streams/{name}/lifecycle/_explain\": ", + { + "pluginId": "@kbn/server-route-repository-utils", + "scope": "common", + "docId": "kibKbnServerRouteRepositoryUtilsPluginApi", + "section": "def-common.ServerRoute", + "text": "ServerRoute" + }, + "<\"GET /api/streams/{name}/lifecycle/_explain\", Zod.ZodObject<{ path: Zod.ZodObject<{ name: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { name: string; }, { name: string; }>; }, \"strip\", Zod.ZodTypeAny, { path: { name: string; }; }, { path: { name: string; }; }>, ", + "StreamsRouteHandlerResources", + ", ", + "IlmExplainLifecycleResponse", + ", undefined>; \"GET /api/streams/{name}/lifecycle/_stats\": ", + { + "pluginId": "@kbn/server-route-repository-utils", + "scope": "common", + "docId": "kibKbnServerRouteRepositoryUtilsPluginApi", + "section": "def-common.ServerRoute", + "text": "ServerRoute" + }, + "<\"GET /api/streams/{name}/lifecycle/_stats\", Zod.ZodObject<{ path: Zod.ZodObject<{ name: Zod.ZodString; }, \"strip\", Zod.ZodTypeAny, { name: string; }, { name: string; }>; }, \"strip\", Zod.ZodTypeAny, { path: { name: string; }; }, { path: { name: string; }; }>, ", + "StreamsRouteHandlerResources", + ", { phases: ", + { + "pluginId": "@kbn/streams-schema", + "scope": "common", + "docId": "kibKbnStreamsSchemaPluginApi", + "section": "def-common.IlmPolicyPhases", + "text": "IlmPolicyPhases" + }, + "; }, undefined>; \"PUT /api/streams/{name}/_ingest\": ", { "pluginId": "@kbn/server-route-repository-utils", "scope": "common", diff --git a/api_docs/streams.mdx b/api_docs/streams.mdx index 3b56c42adc653..9869f9e750bb1 100644 --- a/api_docs/streams.mdx +++ b/api_docs/streams.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/streams title: "streams" image: https://source.unsplash.com/400x175/?github description: API docs for the streams plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'streams'] --- import streamsObj from './streams.devdocs.json'; diff --git a/api_docs/streams_app.mdx b/api_docs/streams_app.mdx index 732747311b034..173137ef1c961 100644 --- a/api_docs/streams_app.mdx +++ b/api_docs/streams_app.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/streamsApp title: "streamsApp" image: https://source.unsplash.com/400x175/?github description: API docs for the streamsApp plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'streamsApp'] --- import streamsAppObj from './streams_app.devdocs.json'; diff --git a/api_docs/streams_app_wrapper.mdx b/api_docs/streams_app_wrapper.mdx index f4ccaf8eca9f0..30bc14372f85b 100644 --- a/api_docs/streams_app_wrapper.mdx +++ b/api_docs/streams_app_wrapper.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/streamsAppWrapper title: "streamsAppWrapper" image: https://source.unsplash.com/400x175/?github description: API docs for the streamsAppWrapper plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'streamsAppWrapper'] --- import streamsAppWrapperObj from './streams_app_wrapper.devdocs.json'; diff --git a/api_docs/task_manager.mdx b/api_docs/task_manager.mdx index 910c73b030917..1905f9be66133 100644 --- a/api_docs/task_manager.mdx +++ b/api_docs/task_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/taskManager title: "taskManager" image: https://source.unsplash.com/400x175/?github description: API docs for the taskManager plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'taskManager'] --- import taskManagerObj from './task_manager.devdocs.json'; diff --git a/api_docs/telemetry.mdx b/api_docs/telemetry.mdx index 00221f05fda46..7f528d0c1674a 100644 --- a/api_docs/telemetry.mdx +++ b/api_docs/telemetry.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetry title: "telemetry" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetry plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetry'] --- import telemetryObj from './telemetry.devdocs.json'; diff --git a/api_docs/telemetry_collection_manager.mdx b/api_docs/telemetry_collection_manager.mdx index 6d574642c4cd6..b837d004f2b57 100644 --- a/api_docs/telemetry_collection_manager.mdx +++ b/api_docs/telemetry_collection_manager.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryCollectionManager title: "telemetryCollectionManager" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryCollectionManager plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryCollectionManager'] --- import telemetryCollectionManagerObj from './telemetry_collection_manager.devdocs.json'; diff --git a/api_docs/telemetry_management_section.mdx b/api_docs/telemetry_management_section.mdx index 76448db443c74..bff09fc70755a 100644 --- a/api_docs/telemetry_management_section.mdx +++ b/api_docs/telemetry_management_section.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/telemetryManagementSection title: "telemetryManagementSection" image: https://source.unsplash.com/400x175/?github description: API docs for the telemetryManagementSection plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'telemetryManagementSection'] --- import telemetryManagementSectionObj from './telemetry_management_section.devdocs.json'; diff --git a/api_docs/threat_intelligence.mdx b/api_docs/threat_intelligence.mdx index 652199acdb69d..8c12214f9a8fe 100644 --- a/api_docs/threat_intelligence.mdx +++ b/api_docs/threat_intelligence.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/threatIntelligence title: "threatIntelligence" image: https://source.unsplash.com/400x175/?github description: API docs for the threatIntelligence plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'threatIntelligence'] --- import threatIntelligenceObj from './threat_intelligence.devdocs.json'; diff --git a/api_docs/timelines.mdx b/api_docs/timelines.mdx index a0058c343eac0..2c887a6aaf6fc 100644 --- a/api_docs/timelines.mdx +++ b/api_docs/timelines.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/timelines title: "timelines" image: https://source.unsplash.com/400x175/?github description: API docs for the timelines plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'timelines'] --- import timelinesObj from './timelines.devdocs.json'; diff --git a/api_docs/transform.mdx b/api_docs/transform.mdx index aa0d8456a6105..85a00aff92b1c 100644 --- a/api_docs/transform.mdx +++ b/api_docs/transform.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/transform title: "transform" image: https://source.unsplash.com/400x175/?github description: API docs for the transform plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'transform'] --- import transformObj from './transform.devdocs.json'; diff --git a/api_docs/triggers_actions_ui.mdx b/api_docs/triggers_actions_ui.mdx index 67736f8678e36..b4a62ca6f5dd2 100644 --- a/api_docs/triggers_actions_ui.mdx +++ b/api_docs/triggers_actions_ui.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/triggersActionsUi title: "triggersActionsUi" image: https://source.unsplash.com/400x175/?github description: API docs for the triggersActionsUi plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'triggersActionsUi'] --- import triggersActionsUiObj from './triggers_actions_ui.devdocs.json'; diff --git a/api_docs/ui_actions.mdx b/api_docs/ui_actions.mdx index 28a8f2e3f00dc..14e032b53a9af 100644 --- a/api_docs/ui_actions.mdx +++ b/api_docs/ui_actions.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uiActions title: "uiActions" image: https://source.unsplash.com/400x175/?github description: API docs for the uiActions plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uiActions'] --- import uiActionsObj from './ui_actions.devdocs.json'; diff --git a/api_docs/ui_actions_enhanced.mdx b/api_docs/ui_actions_enhanced.mdx index 61138d33abcc9..f4a462d30c33a 100644 --- a/api_docs/ui_actions_enhanced.mdx +++ b/api_docs/ui_actions_enhanced.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uiActionsEnhanced title: "uiActionsEnhanced" image: https://source.unsplash.com/400x175/?github description: API docs for the uiActionsEnhanced plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uiActionsEnhanced'] --- import uiActionsEnhancedObj from './ui_actions_enhanced.devdocs.json'; diff --git a/api_docs/unified_doc_viewer.mdx b/api_docs/unified_doc_viewer.mdx index df987e5028ad9..bab26f66a61d0 100644 --- a/api_docs/unified_doc_viewer.mdx +++ b/api_docs/unified_doc_viewer.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedDocViewer title: "unifiedDocViewer" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedDocViewer plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedDocViewer'] --- import unifiedDocViewerObj from './unified_doc_viewer.devdocs.json'; diff --git a/api_docs/unified_histogram.mdx b/api_docs/unified_histogram.mdx index 52cbc8e2387ae..8c8ecdf56a179 100644 --- a/api_docs/unified_histogram.mdx +++ b/api_docs/unified_histogram.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedHistogram title: "unifiedHistogram" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedHistogram plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedHistogram'] --- import unifiedHistogramObj from './unified_histogram.devdocs.json'; diff --git a/api_docs/unified_search.mdx b/api_docs/unified_search.mdx index 36f73d4105f54..85579eb73894d 100644 --- a/api_docs/unified_search.mdx +++ b/api_docs/unified_search.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedSearch title: "unifiedSearch" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedSearch plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedSearch'] --- import unifiedSearchObj from './unified_search.devdocs.json'; diff --git a/api_docs/unified_search_autocomplete.mdx b/api_docs/unified_search_autocomplete.mdx index 3feb77e2236f9..04e5d574e1fad 100644 --- a/api_docs/unified_search_autocomplete.mdx +++ b/api_docs/unified_search_autocomplete.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/unifiedSearch-autocomplete title: "unifiedSearch.autocomplete" image: https://source.unsplash.com/400x175/?github description: API docs for the unifiedSearch.autocomplete plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'unifiedSearch.autocomplete'] --- import unifiedSearchAutocompleteObj from './unified_search_autocomplete.devdocs.json'; diff --git a/api_docs/uptime.mdx b/api_docs/uptime.mdx index 84efde862e908..35e5f41e8d0ca 100644 --- a/api_docs/uptime.mdx +++ b/api_docs/uptime.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/uptime title: "uptime" image: https://source.unsplash.com/400x175/?github description: API docs for the uptime plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'uptime'] --- import uptimeObj from './uptime.devdocs.json'; diff --git a/api_docs/url_forwarding.mdx b/api_docs/url_forwarding.mdx index fc857676d2bd6..97c58128c2bf8 100644 --- a/api_docs/url_forwarding.mdx +++ b/api_docs/url_forwarding.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/urlForwarding title: "urlForwarding" image: https://source.unsplash.com/400x175/?github description: API docs for the urlForwarding plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'urlForwarding'] --- import urlForwardingObj from './url_forwarding.devdocs.json'; diff --git a/api_docs/usage_collection.mdx b/api_docs/usage_collection.mdx index 3808b6cc2d581..0a5206cec3989 100644 --- a/api_docs/usage_collection.mdx +++ b/api_docs/usage_collection.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/usageCollection title: "usageCollection" image: https://source.unsplash.com/400x175/?github description: API docs for the usageCollection plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'usageCollection'] --- import usageCollectionObj from './usage_collection.devdocs.json'; diff --git a/api_docs/ux.mdx b/api_docs/ux.mdx index f426ef1289aa3..5776f9db045f2 100644 --- a/api_docs/ux.mdx +++ b/api_docs/ux.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/ux title: "ux" image: https://source.unsplash.com/400x175/?github description: API docs for the ux plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ux'] --- import uxObj from './ux.devdocs.json'; diff --git a/api_docs/vis_default_editor.mdx b/api_docs/vis_default_editor.mdx index 3fc7651f8f855..efc0fc3857ce0 100644 --- a/api_docs/vis_default_editor.mdx +++ b/api_docs/vis_default_editor.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visDefaultEditor title: "visDefaultEditor" image: https://source.unsplash.com/400x175/?github description: API docs for the visDefaultEditor plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visDefaultEditor'] --- import visDefaultEditorObj from './vis_default_editor.devdocs.json'; diff --git a/api_docs/vis_type_gauge.mdx b/api_docs/vis_type_gauge.mdx index 412ac2effcc6e..6d77ebba06c06 100644 --- a/api_docs/vis_type_gauge.mdx +++ b/api_docs/vis_type_gauge.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeGauge title: "visTypeGauge" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeGauge plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeGauge'] --- import visTypeGaugeObj from './vis_type_gauge.devdocs.json'; diff --git a/api_docs/vis_type_heatmap.mdx b/api_docs/vis_type_heatmap.mdx index 4bf1546a657ac..22362b5b42e42 100644 --- a/api_docs/vis_type_heatmap.mdx +++ b/api_docs/vis_type_heatmap.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeHeatmap title: "visTypeHeatmap" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeHeatmap plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeHeatmap'] --- import visTypeHeatmapObj from './vis_type_heatmap.devdocs.json'; diff --git a/api_docs/vis_type_pie.mdx b/api_docs/vis_type_pie.mdx index 62b4f27b5b09d..8e3a2179ad3b2 100644 --- a/api_docs/vis_type_pie.mdx +++ b/api_docs/vis_type_pie.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypePie title: "visTypePie" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypePie plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypePie'] --- import visTypePieObj from './vis_type_pie.devdocs.json'; diff --git a/api_docs/vis_type_table.mdx b/api_docs/vis_type_table.mdx index 59ac5ffcd631e..eb24670bb5318 100644 --- a/api_docs/vis_type_table.mdx +++ b/api_docs/vis_type_table.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTable title: "visTypeTable" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTable plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeTable'] --- import visTypeTableObj from './vis_type_table.devdocs.json'; diff --git a/api_docs/vis_type_timelion.mdx b/api_docs/vis_type_timelion.mdx index 6333e62a84cc5..3e39b903f7b59 100644 --- a/api_docs/vis_type_timelion.mdx +++ b/api_docs/vis_type_timelion.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTimelion title: "visTypeTimelion" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTimelion plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeTimelion'] --- import visTypeTimelionObj from './vis_type_timelion.devdocs.json'; diff --git a/api_docs/vis_type_timeseries.mdx b/api_docs/vis_type_timeseries.mdx index d36554fdbf1c2..1774624e7f4ed 100644 --- a/api_docs/vis_type_timeseries.mdx +++ b/api_docs/vis_type_timeseries.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeTimeseries title: "visTypeTimeseries" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeTimeseries plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeTimeseries'] --- import visTypeTimeseriesObj from './vis_type_timeseries.devdocs.json'; diff --git a/api_docs/vis_type_vega.mdx b/api_docs/vis_type_vega.mdx index 94cd51dc3f037..1457cc4a0036f 100644 --- a/api_docs/vis_type_vega.mdx +++ b/api_docs/vis_type_vega.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeVega title: "visTypeVega" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeVega plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeVega'] --- import visTypeVegaObj from './vis_type_vega.devdocs.json'; diff --git a/api_docs/vis_type_vislib.mdx b/api_docs/vis_type_vislib.mdx index f9afe0d28ebcd..7d061166a1c00 100644 --- a/api_docs/vis_type_vislib.mdx +++ b/api_docs/vis_type_vislib.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeVislib title: "visTypeVislib" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeVislib plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeVislib'] --- import visTypeVislibObj from './vis_type_vislib.devdocs.json'; diff --git a/api_docs/vis_type_xy.mdx b/api_docs/vis_type_xy.mdx index 2c56c570bc109..245dfedd7c9e3 100644 --- a/api_docs/vis_type_xy.mdx +++ b/api_docs/vis_type_xy.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visTypeXy title: "visTypeXy" image: https://source.unsplash.com/400x175/?github description: API docs for the visTypeXy plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeXy'] --- import visTypeXyObj from './vis_type_xy.devdocs.json'; diff --git a/api_docs/visualizations.mdx b/api_docs/visualizations.mdx index 72fd2746faafe..4ac8e797534d1 100644 --- a/api_docs/visualizations.mdx +++ b/api_docs/visualizations.mdx @@ -8,7 +8,7 @@ slug: /kibana-dev-docs/api/visualizations title: "visualizations" image: https://source.unsplash.com/400x175/?github description: API docs for the visualizations plugin -date: 2025-02-26 +date: 2025-02-28 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visualizations'] --- import visualizationsObj from './visualizations.devdocs.json'; diff --git a/config/serverless.yml b/config/serverless.yml index 27b59355c1383..6f1ab17871203 100644 --- a/config/serverless.yml +++ b/config/serverless.yml @@ -270,17 +270,3 @@ discover.enableUiSettingsValidations: true xpack.dataUsage.enabled: true # This feature is disabled in Serverless until fully tested within a Serverless environment xpack.dataUsage.enableExperimental: ['dataUsageDisabled'] -# This feature is disabled in Serverless until Inference Endpoint become enabled within a Serverless environment -xpack.stack_connectors.enableExperimental: ['inferenceConnectorOff'] -# This is the definition introducing pre-configured Kibana Connector for Elastic default LLM -xpack.actions.preconfigured: - Elastic-LLM: - name: Elastic LLM - actionTypeId: .inference - exposeConfig: true - config: - provider: 'elastic' - taskType: 'chat_completion' - inferenceId: '.rainbow-sprinkles-elastic' - providerConfig: - model_id: 'rainbow-sprinkles' diff --git a/oas_docs/output/kibana.serverless.yaml b/oas_docs/output/kibana.serverless.yaml index d8e754e673f36..24af10be0be64 100644 --- a/oas_docs/output/kibana.serverless.yaml +++ b/oas_docs/output/kibana.serverless.yaml @@ -9572,16 +9572,61 @@ paths: operationId: EndpointGetActionsList parameters: - in: query - name: query - required: true + name: page + required: false + schema: + $ref: '#/components/schemas/Security_Endpoint_Management_API_Page' + - in: query + name: pageSize + required: false + schema: + $ref: '#/components/schemas/Security_Endpoint_Management_API_PageSize' + - in: query + name: commands + required: false + schema: + $ref: '#/components/schemas/Security_Endpoint_Management_API_Commands' + - in: query + name: agentIds + required: false + schema: + $ref: '#/components/schemas/Security_Endpoint_Management_API_AgentIds' + - in: query + name: userIds + required: false + schema: + $ref: '#/components/schemas/Security_Endpoint_Management_API_UserIds' + - in: query + name: startDate + required: false + schema: + $ref: '#/components/schemas/Security_Endpoint_Management_API_StartDate' + - in: query + name: endDate + required: false schema: - $ref: '#/components/schemas/Security_Endpoint_Management_API_GetEndpointActionListRouteQuery' + $ref: '#/components/schemas/Security_Endpoint_Management_API_EndDate' + - in: query + name: agentTypes + required: false + schema: + $ref: '#/components/schemas/Security_Endpoint_Management_API_AgentTypes' + - in: query + name: withOutputs + required: false + schema: + $ref: '#/components/schemas/Security_Endpoint_Management_API_WithOutputs' + - in: query + name: types + required: false + schema: + $ref: '#/components/schemas/Security_Endpoint_Management_API_Types' responses: '200': content: application/json: schema: - $ref: '#/components/schemas/Security_Endpoint_Management_API_SuccessResponse' + $ref: '#/components/schemas/Security_Endpoint_Management_API_GetEndpointActionListResponse' description: OK summary: Get response actions tags: @@ -9620,13 +9665,15 @@ paths: name: action_id required: true schema: + description: The ID of the action to retrieve. + example: fr518850-681a-4y60-aa98-e22640cae2b8 type: string responses: '200': content: application/json: schema: - $ref: '#/components/schemas/Security_Endpoint_Management_API_SuccessResponse' + $ref: '#/components/schemas/Security_Endpoint_Management_API_GetEndpointActionResponse' description: OK summary: Get action details tags: @@ -9699,7 +9746,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/Security_Endpoint_Management_API_SuccessResponse' + $ref: '#/components/schemas/Security_Endpoint_Management_API_ExecuteRouteResponse' description: OK summary: Run a command tags: @@ -9720,7 +9767,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/Security_Endpoint_Management_API_SuccessResponse' + $ref: '#/components/schemas/Security_Endpoint_Management_API_GetFileRouteResponse' description: OK summary: Get a file tags: @@ -9733,15 +9780,53 @@ paths: requestBody: content: application/json: + examples: + multiple_endpoints: + summary: Isolates several hosts; includes a comment + value: + comment: Locked down, pending further investigation + endpoint_ids: + - 9972d10e-4b9e-41aa-a534-a85e2a28ea42 + - bc0e4f0c-3bca-4633-9fee-156c0b505d16 + - fa89271b-b9d4-43f2-a684-307cffddeb5a + single_endpoint: + summary: Isolates a single host with an endpoint_id value of ed518850-681a-4d60-bb98-e22640cae2a8 + value: + endpoint_ids: + - ed518850-681a-4d60-bb98-e22640cae2a8 + with_case_id: + summary: Isolates a single host with a case_id value of 1234 + value: + case_ids: + - 4976be38-c134-4554-bd5e-0fd89ce63667 + comment: Isolating as initial response + endpoint_ids: + - 1aa1f8fd-0fb0-4fe4-8c30-92068272d3f0 + - b30a11bf-1395-4707-b508-fbb45ef9793e schema: - $ref: '#/components/schemas/Security_Endpoint_Management_API_IsolateRouteRequestBody' + type: object + properties: + agent_type: + $ref: '#/components/schemas/Security_Endpoint_Management_API_AgentTypes' + alert_ids: + $ref: '#/components/schemas/Security_Endpoint_Management_API_AlertIds' + case_ids: + $ref: '#/components/schemas/Security_Endpoint_Management_API_CaseIds' + comment: + $ref: '#/components/schemas/Security_Endpoint_Management_API_Comment' + endpoint_ids: + $ref: '#/components/schemas/Security_Endpoint_Management_API_EndpointIds' + parameters: + $ref: '#/components/schemas/Security_Endpoint_Management_API_Parameters' + required: + - endpoint_ids required: true responses: '200': content: application/json: schema: - $ref: '#/components/schemas/Security_Endpoint_Management_API_SuccessResponse' + $ref: '#/components/schemas/Security_Endpoint_Management_API_IsolateRouteResponse' description: OK summary: Isolate an endpoint tags: @@ -9762,7 +9847,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/Security_Endpoint_Management_API_SuccessResponse' + $ref: '#/components/schemas/Security_Endpoint_Management_API_KillProcessRouteResponse' description: OK summary: Terminate a process tags: @@ -9783,7 +9868,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/Security_Endpoint_Management_API_SuccessResponse' + $ref: '#/components/schemas/Security_Endpoint_Management_API_GetProcessesRouteResponse' description: OK summary: Get running processes tags: @@ -9825,7 +9910,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/Security_Endpoint_Management_API_SuccessResponse' + $ref: '#/components/schemas/Security_Endpoint_Management_API_ScanRouteResponse' description: OK summary: Scan a file or directory tags: @@ -9861,7 +9946,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/Security_Endpoint_Management_API_SuccessResponse' + $ref: '#/components/schemas/Security_Endpoint_Management_API_SuspendProcessRouteResponse' description: OK summary: Suspend a process tags: @@ -9874,15 +9959,53 @@ paths: requestBody: content: application/json: + examples: + multipleHosts: + summary: 'Releases several hosts; includes a comment:' + value: + comment: Benign process identified, releasing group + endpoint_ids: + - 9972d10e-4b9e-41aa-a534-a85e2a28ea42 + - bc0e4f0c-3bca-4633-9fee-156c0b505d16 + - fa89271b-b9d4-43f2-a684-307cffddeb5a + singleHost: + summary: Releases a single host with an endpoint_id value of ed518850-681a-4d60-bb98-e22640cae2a8 + value: + endpoint_ids: + - ed518850-681a-4d60-bb98-e22640cae2a8 + withCaseId: + summary: Releases hosts with an associated case; includes a comment. + value: + case_ids: + - 4976be38-c134-4554-bd5e-0fd89ce63667 + comment: Remediation complete, restoring network + endpoint_ids: + - 1aa1f8fd-0fb0-4fe4-8c30-92068272d3f0 + - b30a11bf-1395-4707-b508-fbb45ef9793e schema: - $ref: '#/components/schemas/Security_Endpoint_Management_API_UnisolateRouteRequestBody' + type: object + properties: + agent_type: + $ref: '#/components/schemas/Security_Endpoint_Management_API_AgentTypes' + alert_ids: + $ref: '#/components/schemas/Security_Endpoint_Management_API_AlertIds' + case_ids: + $ref: '#/components/schemas/Security_Endpoint_Management_API_CaseIds' + comment: + $ref: '#/components/schemas/Security_Endpoint_Management_API_Comment' + endpoint_ids: + $ref: '#/components/schemas/Security_Endpoint_Management_API_EndpointIds' + parameters: + $ref: '#/components/schemas/Security_Endpoint_Management_API_Parameters' + required: + - endpoint_ids required: true responses: '200': content: application/json: schema: - $ref: '#/components/schemas/Security_Endpoint_Management_API_SuccessResponse' + $ref: '#/components/schemas/Security_Endpoint_Management_API_UnisolateRouteResponse' description: OK summary: Release an isolated endpoint tags: @@ -9894,7 +10017,7 @@ paths: operationId: EndpointUploadAction requestBody: content: - application/json: + multipart/form-data: schema: $ref: '#/components/schemas/Security_Endpoint_Management_API_UploadRouteRequestBody' required: true @@ -9903,7 +10026,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/Security_Endpoint_Management_API_SuccessResponse' + $ref: '#/components/schemas/Security_Endpoint_Management_API_UploadRouteResponse' description: OK summary: Upload a file tags: @@ -37299,16 +37422,36 @@ paths: operationId: OsqueryFindLiveQueries parameters: - in: query - name: query - required: true + name: kuery + required: false + schema: + $ref: '#/components/schemas/Security_Osquery_API_KueryOrUndefined' + - in: query + name: page + required: false + schema: + $ref: '#/components/schemas/Security_Osquery_API_PageOrUndefined' + - in: query + name: pageSize + required: false + schema: + $ref: '#/components/schemas/Security_Osquery_API_PageSizeOrUndefined' + - in: query + name: sort + required: false schema: - $ref: '#/components/schemas/Security_Osquery_API_FindLiveQueryRequestQuery' + $ref: '#/components/schemas/Security_Osquery_API_SortOrUndefined' + - in: query + name: sortOrder + required: false + schema: + $ref: '#/components/schemas/Security_Osquery_API_SortOrderOrUndefined' responses: '200': content: application/json: schema: - $ref: '#/components/schemas/Security_Osquery_API_DefaultSuccessResponse' + $ref: '#/components/schemas/Security_Osquery_API_FindLiveQueryResponse' description: OK summary: Get live queries tags: @@ -37328,7 +37471,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/Security_Osquery_API_DefaultSuccessResponse' + $ref: '#/components/schemas/Security_Osquery_API_CreateLiveQueryResponse' description: OK summary: Create a live query tags: @@ -37343,18 +37486,15 @@ paths: name: id required: true schema: - $ref: '#/components/schemas/Security_Osquery_API_Id' - - in: query - name: query - schema: - additionalProperties: true - type: object + description: The ID of the live query result you want to retrieve. + example: 3c42c847-eb30-4452-80e0-728584042334 + type: string responses: '200': content: application/json: schema: - $ref: '#/components/schemas/Security_Osquery_API_DefaultSuccessResponse' + $ref: '#/components/schemas/Security_Osquery_API_FindLiveQueryDetailsResponse' description: OK summary: Get live query details tags: @@ -37369,23 +37509,47 @@ paths: name: id required: true schema: - $ref: '#/components/schemas/Security_Osquery_API_Id' + description: The ID of the live query result you want to retrieve. + example: 3c42c847-eb30-4452-80e0-728584042334 + type: string - in: path name: actionId required: true schema: - $ref: '#/components/schemas/Security_Osquery_API_Id' + description: The ID of the query action that generated the live query results. + example: 609c4c66-ba3d-43fa-afdd-53e244577aa0 + type: string - in: query - name: query - required: true + name: kuery + required: false + schema: + $ref: '#/components/schemas/Security_Osquery_API_KueryOrUndefined' + - in: query + name: page + required: false schema: - $ref: '#/components/schemas/Security_Osquery_API_GetLiveQueryResultsRequestQuery' + $ref: '#/components/schemas/Security_Osquery_API_PageOrUndefined' + - in: query + name: pageSize + required: false + schema: + $ref: '#/components/schemas/Security_Osquery_API_PageSizeOrUndefined' + - in: query + name: sort + required: false + schema: + $ref: '#/components/schemas/Security_Osquery_API_SortOrUndefined' + - in: query + name: sortOrder + required: false + schema: + $ref: '#/components/schemas/Security_Osquery_API_SortOrderOrUndefined' responses: '200': content: application/json: schema: - $ref: '#/components/schemas/Security_Osquery_API_DefaultSuccessResponse' + $ref: '#/components/schemas/Security_Osquery_API_GetLiveQueryResultsResponse' description: OK summary: Get live query results tags: @@ -37397,16 +37561,31 @@ paths: operationId: OsqueryFindPacks parameters: - in: query - name: query - required: true + name: page + required: false + schema: + $ref: '#/components/schemas/Security_Osquery_API_PageOrUndefined' + - in: query + name: pageSize + required: false + schema: + $ref: '#/components/schemas/Security_Osquery_API_PageSizeOrUndefined' + - in: query + name: sort + required: false + schema: + $ref: '#/components/schemas/Security_Osquery_API_SortOrUndefined' + - in: query + name: sortOrder + required: false schema: - $ref: '#/components/schemas/Security_Osquery_API_FindPacksRequestQuery' + $ref: '#/components/schemas/Security_Osquery_API_SortOrderOrUndefined' responses: '200': content: application/json: schema: - $ref: '#/components/schemas/Security_Osquery_API_DefaultSuccessResponse' + $ref: '#/components/schemas/Security_Osquery_API_FindPacksResponse' description: OK summary: Get packs tags: @@ -37426,7 +37605,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/Security_Osquery_API_DefaultSuccessResponse' + $ref: '#/components/schemas/Security_Osquery_API_CreatePacksResponse' description: OK summary: Create a pack tags: @@ -37447,7 +37626,9 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/Security_Osquery_API_DefaultSuccessResponse' + example: {} + type: object + properties: {} description: OK summary: Delete a pack tags: @@ -37467,7 +37648,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/Security_Osquery_API_DefaultSuccessResponse' + $ref: '#/components/schemas/Security_Osquery_API_FindPackResponse' description: OK summary: Get pack details tags: @@ -37496,7 +37677,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/Security_Osquery_API_DefaultSuccessResponse' + $ref: '#/components/schemas/Security_Osquery_API_UpdatePacksResponse' description: OK summary: Update a pack tags: @@ -37508,16 +37689,31 @@ paths: operationId: OsqueryFindSavedQueries parameters: - in: query - name: query - required: true + name: page + required: false schema: - $ref: '#/components/schemas/Security_Osquery_API_FindSavedQueryRequestQuery' + $ref: '#/components/schemas/Security_Osquery_API_PageOrUndefined' + - in: query + name: pageSize + required: false + schema: + $ref: '#/components/schemas/Security_Osquery_API_PageSizeOrUndefined' + - in: query + name: sort + required: false + schema: + $ref: '#/components/schemas/Security_Osquery_API_SortOrUndefined' + - in: query + name: sortOrder + required: false + schema: + $ref: '#/components/schemas/Security_Osquery_API_SortOrderOrUndefined' responses: '200': content: application/json: schema: - $ref: '#/components/schemas/Security_Osquery_API_DefaultSuccessResponse' + $ref: '#/components/schemas/Security_Osquery_API_FindSavedQueryResponse' description: OK summary: Get saved queries tags: @@ -37537,7 +37733,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/Security_Osquery_API_DefaultSuccessResponse' + $ref: '#/components/schemas/Security_Osquery_API_CreateSavedQueryResponse' description: OK summary: Create a saved query tags: @@ -37578,7 +37774,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/Security_Osquery_API_DefaultSuccessResponse' + $ref: '#/components/schemas/Security_Osquery_API_FindSavedQueryDetailResponse' description: OK summary: Get saved query details tags: @@ -37607,7 +37803,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/Security_Osquery_API_DefaultSuccessResponse' + $ref: '#/components/schemas/Security_Osquery_API_UpdateSavedQueryResponse' description: OK summary: Update a saved query tags: @@ -51674,6 +51870,10 @@ components: description: Agent ID type: string Security_Endpoint_Management_API_AgentIds: + description: A list of agent IDs. Max of 50. + example: + - agent-id-1 + - agent-id-2 minLength: 1 oneOf: - items: @@ -51685,12 +51885,13 @@ components: - minLength: 1 type: string Security_Endpoint_Management_API_AgentTypes: - description: The host agent type (optional). Defaults to endpoint. + description: List of agent types to retrieve. Defaults to `endpoint`. enum: - endpoint - sentinel_one - crowdstrike - microsoft_defender_endpoint + example: endpoint type: string Security_Endpoint_Management_API_AlertIds: description: A list of alerts `id`s. @@ -51702,6 +51903,9 @@ components: type: array Security_Endpoint_Management_API_CaseIds: description: Case IDs to be updated (cannot contain empty strings) + example: + - case-id-1 + - case-id-2 items: minLength: 1 type: string @@ -51739,17 +51943,26 @@ components: minLength: 1 type: string Security_Endpoint_Management_API_Commands: + description: A list of response action command names. + example: + - isolate + - unisolate items: $ref: '#/components/schemas/Security_Endpoint_Management_API_Command' type: array Security_Endpoint_Management_API_Comment: description: Optional comment + example: This is a comment type: string Security_Endpoint_Management_API_EndDate: - description: End date + description: An end date in ISO format or Date Math format. + example: '2023-10-31T23:59:59.999Z' type: string Security_Endpoint_Management_API_EndpointIds: description: List of endpoint IDs (cannot contain empty strings) + example: + - endpoint-id-1 + - endpoint-id-2 items: minLength: 1 type: string @@ -51841,12 +52054,6 @@ components: revision: 2 type: object properties: {} - Security_Endpoint_Management_API_EntityId: - type: object - properties: - entity_id: - minLength: 1 - type: string Security_Endpoint_Management_API_ExecuteRouteRequestBody: allOf: - type: object @@ -51878,33 +52085,128 @@ components: - command required: - parameters - Security_Endpoint_Management_API_GetEndpointActionListRouteQuery: + example: + comment: Get list of all files + endpoint_ids: + - b3d6de74-36b0-4fa8-be46-c375bf1771bf + parameters: + command: ls -al + timeout: 600 + Security_Endpoint_Management_API_ExecuteRouteResponse: + example: + data: + agents: + - ed518850-681a-4d60-bb98-e22640cae2a8 + agentState: + ed518850-681a-4d60-bb98-e22640cae2a8: + isCompleted: false + wasSuccessful: false + agentType: endpoint + command: execute + comment: Get list of all files + createdBy: myuser + hosts: + ed518850-681a-4d60-bb98-e22640cae2a8: + name: gke-endpoint-gke-clu-endpoint-node-po-e1a3ab89-4c4r + id: 9f934028-2300-4927-b531-b26376793dc4 + isCompleted: false + isExpired: false + outputs: {} + parameters: + command: ls -al + timeout: 600 + startedAt: '2023-07-28T18:43:27.362Z' + status: pending + wasSuccessful: false type: object - properties: - agentIds: - $ref: '#/components/schemas/Security_Endpoint_Management_API_AgentIds' - agentTypes: - $ref: '#/components/schemas/Security_Endpoint_Management_API_AgentTypes' - commands: - $ref: '#/components/schemas/Security_Endpoint_Management_API_Commands' - endDate: - $ref: '#/components/schemas/Security_Endpoint_Management_API_EndDate' - page: - $ref: '#/components/schemas/Security_Endpoint_Management_API_Page' - pageSize: - default: 10 - description: Number of items per page - maximum: 10000 - minimum: 1 - type: integer - startDate: - $ref: '#/components/schemas/Security_Endpoint_Management_API_StartDate' - types: - $ref: '#/components/schemas/Security_Endpoint_Management_API_Types' - userIds: - $ref: '#/components/schemas/Security_Endpoint_Management_API_UserIds' - withOutputs: - $ref: '#/components/schemas/Security_Endpoint_Management_API_WithOutputs' + properties: {} + Security_Endpoint_Management_API_GetEndpointActionListResponse: + example: + data: + - agents: + - afdc366c-e2e0-4cdb-ae1d-94575bd2d8e0 + agentType: endpoint + command: running-processes + completedAt: '2022-08-08T09:50:47.672Z' + createdBy: elastic + id: b3d6de74-36b0-4fa8-be46-c375bf1771bf + isCompleted: true + isExpired: false + startedAt: '2022-08-08T15:24:57.402Z' + wasSuccessful: true + - agents: + - afdc366c-e2e0-4cdb-ae1d-94575bd2d8e0 + agentType: endpoint + command: isolate + completedAt: '2022-08-08T10:41:57.352Z' + createdBy: elastic + id: 43b4098b-8752-4fbb-a7a7-6df7c74d0ee3 + isCompleted: true + isExpired: false + startedAt: '2022-08-08T15:23:37.359Z' + wasSuccessful: true + - agents: + - afdc366c-e2e0-4cdb-ae1d-94575bd2d8e0 + agentType: endpoint + command: kill-process + comment: bad process - taking up too much cpu + completedAt: '2022-08-08T09:44:50.952Z' + createdBy: elastic + id: 5bc92c86-b8e6-42dd-837f-12ad29e09caa + isCompleted: true + isExpired: false + startedAt: '2022-08-08T14:38:44.125Z' + wasSuccessful: true + - agents: + - afdc366c-e2e0-4cdb-ae1d-94575bd2d8e0 + agentType: endpoint + command: unisolate + comment: Not a threat to the network + completedAt: '2022-08-08T09:40:47.398Z' + createdBy: elastic + id: 790d54e0-3aa3-4e5b-8255-3ce9d851246a + isCompleted: true + isExpired: false + startedAt: '2022-08-08T14:38:15.391Z' + wasSuccessful: true + elasticAgentIds: + - afdc366c-e2e0-4cdb-ae1d-94575bd2d8e0 + endDate: now + page: 1 + pageSize: 10 + startDate: now-24h/h + total: 4 + type: object + properties: {} + Security_Endpoint_Management_API_GetEndpointActionResponse: + example: + data: + agents: + - afdc366c-e2e0-4cdb-ae1d-94575bd2d8e0 + agentType: endpoint + command: running-processes + completedAt: '2022-08-08T09:50:47.672Z' + createdBy: elastic + id: b3d6de74-36b0-4fa8-be46-c375bf1771bf + isCompleted: true + isExpired: false + outputs: + afdc366c-e2e0-4cdb-ae1d-94575bd2d8e0: + content: + entries: + - command: /opt/cmd1 + entity_id: fk2ym7bl3oiu3okjcik0xosc0i0m75x3eh49nu3uaqt4dqanjt + pid: '822' + user: Dexter + - command: /opt/cmd3/opt/cmd3/opt/cmd3/opt/cmd3 + entity_id: pwvz91m48wpj9j7ov9gtw8fp7u2rat4eu5ipte37hnhdcbi2pt + pid: '984' + user: Jada + type: json + startedAt: '2022-08-08T15:24:57.402Z' + wasSuccessful: true + type: object + properties: {} Security_Endpoint_Management_API_GetFileRouteRequestBody: allOf: - type: object @@ -51934,7 +52236,42 @@ components: - path required: - parameters + example: + comment: Get my file + endpoint_ids: + - ed518850-681a-4d60-bb98-e22640cae2a8 + parameters: + path: /usr/my-file.txt + Security_Endpoint_Management_API_GetFileRouteResponse: + example: + data: + agents: + - ed518850-681a-4d60-bb98-e22640cae2a8 + agentState: + ed518850-681a-4d60-bb98-e22640cae2a8: + isCompleted: false + wasSuccessful: false + agentType: endpoint + command: get-file + createdBy: myuser + hosts: + ed518850-681a-4d60-bb98-e22640cae2a8: + name: gke-endpoint-gke-clu-endpoint-node-po-e1a3ab89-4c4r + id: 27ba1b42-7cc6-4e53-86ce-675c876092b2 + isCompleted: false + isExpired: false + outputs: {} + parameters: + path: /usr/my-file.txt + startedAt: '2023-07-28T19:00:03.911Z' + status: pending + wasSuccessful: false + type: object + properties: {} Security_Endpoint_Management_API_GetProcessesRouteRequestBody: + example: + endpoint_ids: + - ed518850-681a-4d60-bb98-e22640cae2a8 type: object properties: agent_type: @@ -51951,6 +52288,30 @@ components: $ref: '#/components/schemas/Security_Endpoint_Management_API_Parameters' required: - endpoint_ids + Security_Endpoint_Management_API_GetProcessesRouteResponse: + example: + data: + agents: + - ed518850-681a-4d60-bb98-e22640cae2a8 + agentType: endpoint + command: running-processes + comment: '' + completedAt: '2022-07-29T19:09:44.961Z' + createdBy: myuser + errors: [] + id: 233db9ea-6733-4849-9226-5a7039c7161d + isCompleted: true + isExpired: false + outputs: + ed518850-681a-4d60-bb98-e22640cae2a8: + content: + key: value + type: json + parameters: {} + startedAt: '2022-07-29T19:08:49.126Z' + wasSuccessful: true + type: object + properties: {} Security_Endpoint_Management_API_HostPathScriptParameters: type: object properties: @@ -51982,23 +52343,32 @@ components: - unenrolled type: string type: array - Security_Endpoint_Management_API_IsolateRouteRequestBody: + Security_Endpoint_Management_API_IsolateRouteResponse: + example: + action: 233db9ea-6733-4849-9226-5a7039c7161d + data: + agents: + - ed518850-681a-4d60-bb98-e22640cae2a8 + agentType: endpoint + command: suspend-process + comment: suspend the process + completedAt: '2022-07-29T19:09:44.961Z' + createdBy: myuser + errors: [] + id: 233db9ea-6733-4849-9226-5a7039c7161d + isCompleted: true + isExpired: false + outputs: + ed518850-681a-4d60-bb98-e22640cae2a8: + content: + key: value + type: json + parameters: + entity_id: abc123 + startedAt: '2022-07-29T19:08:49.126Z' + wasSuccessful: true type: object - properties: - agent_type: - $ref: '#/components/schemas/Security_Endpoint_Management_API_AgentTypes' - alert_ids: - $ref: '#/components/schemas/Security_Endpoint_Management_API_AlertIds' - case_ids: - $ref: '#/components/schemas/Security_Endpoint_Management_API_CaseIds' - comment: - $ref: '#/components/schemas/Security_Endpoint_Management_API_Comment' - endpoint_ids: - $ref: '#/components/schemas/Security_Endpoint_Management_API_EndpointIds' - parameters: - $ref: '#/components/schemas/Security_Endpoint_Management_API_Parameters' - required: - - endpoint_ids + properties: {} Security_Endpoint_Management_API_KillProcessRouteRequestBody: allOf: - type: object @@ -52021,16 +52391,60 @@ components: properties: parameters: oneOf: - - $ref: '#/components/schemas/Security_Endpoint_Management_API_Pid' - - $ref: '#/components/schemas/Security_Endpoint_Management_API_EntityId' + - type: object + properties: + pid: + description: The process ID (PID) of the process to terminate. + example: 123 + minimum: 1 + type: integer + - type: object + properties: + entity_id: + description: The entity ID of the process to terminate. + example: abc123 + minLength: 1 + type: string - type: object properties: process_name: - description: Valid for SentinelOne agent type only + description: The name of the process to terminate. Valid for SentinelOne agent type only. + example: Elastic minLength: 1 type: string required: - parameters + example: + comment: terminate the process + endpoint_ids: + - ed518850-681a-4d60-bb98-e22640cae2a8 + parameters: + entity_id: abc123 + Security_Endpoint_Management_API_KillProcessRouteResponse: + example: + data: + agents: + - ed518850-681a-4d60-bb98-e22640cae2a8 + agentType: endpoint + command: kill-process + comment: terminate the process + completedAt: '2022-07-29T19:09:44.961Z' + createdBy: myuser + errors: [] + id: 233db9ea-6733-4849-9226-5a7039c7161d + isCompleted: true + isExpired: false + outputs: + ed518850-681a-4d60-bb98-e22640cae2a8: + content: + key: value + type: json + parameters: + entity_id: abc123 + startedAt: '2022-07-29T19:08:49.126Z' + wasSuccessful: true + type: object + properties: {} Security_Endpoint_Management_API_Kuery: description: A KQL string. example: 'united.endpoint.host.os.name : ''Windows''' @@ -52251,12 +52665,6 @@ components: $ref: '#/components/schemas/Security_Endpoint_Management_API_PendingActionDataType' - additionalProperties: true type: object - Security_Endpoint_Management_API_Pid: - type: object - properties: - pid: - minimum: 1 - type: integer Security_Endpoint_Management_API_ProtectionUpdatesNoteResponse: type: object properties: @@ -52314,11 +52722,45 @@ components: type: object properties: path: + description: The folder or file’s full path (including the file name). + example: /usr/my-file.txt type: string required: - path required: - parameters + example: + comment: Scan the file for malware + endpoint_ids: + - ed518850-681a-4d60-bb98-e22640cae2a8 + parameters: + path: /usr/my-file.txt + Security_Endpoint_Management_API_ScanRouteResponse: + example: + data: + agents: + - ed518850-681a-4d60-bb98-e22640cae2a8 + agentState: + ed518850-681a-4d60-bb98-e22640cae2a8: + isCompleted: false + wasSuccessful: false + agentType: endpoint + command: scan + createdBy: myuser + hosts: + ed518850-681a-4d60-bb98-e22640cae2a8: + name: gke-endpoint-gke-clu-endpoint-node-po-e1a3ab89-4c4r + id: 27ba1b42-7cc6-4e53-86ce-675c876092b2 + isCompleted: false + isExpired: false + outputs: {} + parameters: + path: /usr/my-file.txt + startedAt: '2023-07-28T19:00:03.911Z' + status: pending + wasSuccessful: false + type: object + properties: {} Security_Endpoint_Management_API_SortDirection: description: Determines the sort order. enum: @@ -52341,7 +52783,8 @@ components: example: enrolled_at type: string Security_Endpoint_Management_API_StartDate: - description: Start date + description: A start date in ISO 8601 format or Date Math format. + example: '2023-10-31T00:00:00.000Z' type: string Security_Endpoint_Management_API_SuccessResponse: type: object @@ -52368,10 +52811,53 @@ components: properties: parameters: oneOf: - - $ref: '#/components/schemas/Security_Endpoint_Management_API_Pid' - - $ref: '#/components/schemas/Security_Endpoint_Management_API_EntityId' + - type: object + properties: + pid: + description: The process ID (PID) of the process to suspend. + example: 123 + minimum: 1 + type: integer + - type: object + properties: + entity_id: + description: The entity ID of the process to suspend. + example: abc123 + minLength: 1 + type: string required: - parameters + example: + comment: suspend the process + endpoint_ids: + - ed518850-681a-4d60-bb98-e22640cae2a8 + parameters: + entity_id: abc123 + Security_Endpoint_Management_API_SuspendProcessRouteResponse: + example: + data: + agents: + - ed518850-681a-4d60-bb98-e22640cae2a8 + agentType: endpoint + command: suspend-process + comment: suspend the process + completedAt: '2022-07-29T19:09:44.961Z' + createdBy: myuser + errors: [] + id: 233db9ea-6733-4849-9226-5a7039c7161d + isCompleted: true + isExpired: false + outputs: + ed518850-681a-4d60-bb98-e22640cae2a8: + content: + key: value + type: json + parameters: + entity_id: abc123 + startedAt: '2022-07-29T19:08:49.126Z' + wasSuccessful: true + type: object + properties: {} Security_Endpoint_Management_API_Timeout: description: The maximum timeout value in milliseconds (optional) minimum: 1 @@ -52384,28 +52870,40 @@ components: type: string Security_Endpoint_Management_API_Types: description: List of types of response actions + example: + - automated + - manual items: $ref: '#/components/schemas/Security_Endpoint_Management_API_Type' maxLength: 2 minLength: 1 type: array - Security_Endpoint_Management_API_UnisolateRouteRequestBody: + Security_Endpoint_Management_API_UnisolateRouteResponse: + example: + action: 233db9ea-6733-4849-9226-5a7039c7161d + data: + agents: + - ed518850-681a-4d60-bb98-e22640cae2a8 + agentType: endpoint + command: suspend-process + comment: suspend the process + completedAt: '2022-07-29T19:09:44.961Z' + createdBy: myuser + errors: [] + id: 233db9ea-6733-4849-9226-5a7039c7161d + isCompleted: true + isExpired: false + outputs: + ed518850-681a-4d60-bb98-e22640cae2a8: + content: + key: value + type: json + parameters: + entity_id: abc123 + startedAt: '2022-07-29T19:08:49.126Z' + wasSuccessful: true type: object - properties: - agent_type: - $ref: '#/components/schemas/Security_Endpoint_Management_API_AgentTypes' - alert_ids: - $ref: '#/components/schemas/Security_Endpoint_Management_API_AlertIds' - case_ids: - $ref: '#/components/schemas/Security_Endpoint_Management_API_CaseIds' - comment: - $ref: '#/components/schemas/Security_Endpoint_Management_API_Comment' - endpoint_ids: - $ref: '#/components/schemas/Security_Endpoint_Management_API_EndpointIds' - parameters: - $ref: '#/components/schemas/Security_Endpoint_Management_API_Parameters' - required: - - endpoint_ids + properties: {} Security_Endpoint_Management_API_UploadRouteRequestBody: allOf: - type: object @@ -52427,6 +52925,8 @@ components: - type: object properties: file: + description: The binary content of the file. + example: RWxhc3RpYw== format: binary type: string parameters: @@ -52434,12 +52934,51 @@ components: properties: overwrite: default: false + description: Overwrite the file on the host if it already exists. + example: false type: boolean required: - parameters - file + example: + endpoint_ids: + - ed518850-681a-4d60-bb98-e22640cae2a8 + file: RWxhc3RpYw== + parameters: {} + Security_Endpoint_Management_API_UploadRouteResponse: + example: + data: + agents: + - ed518850-681a-4d60-bb98-e22640cae2a8 + agentState: + ed518850-681a-4d60-bb98-e22640cae2a8: + isCompleted: false + wasSuccessful: false + agentType: endpoint + command: upload + createdBy: elastic + hosts: + ed518850-681a-4d60-bb98-e22640cae2a8: + name: Host-5i6cuc8kdv + id: 9ff6aebc-2cb6-481e-8869-9b30036c9731 + isCompleted: false + isExpired: false + outputs: {} + parameters: + file_id: 10e4ce3d-4abb-4f93-a0cd-eaf63a489280 + file_name: fix-malware.sh + file_sha256: a0bed94220193ba4895c0aa5b4e7e293381d15765cb164ddf7be5cdd010ae42a + file_size: 69 + startedAt: '2023-07-03T15:07:22.837Z' + status: pending + wasSuccessful: false + type: object + properties: {} Security_Endpoint_Management_API_UserIds: - description: User IDs + description: A list of user IDs. + example: + - user-id-1 + - user-id-2 oneOf: - items: minLength: 1 @@ -52449,7 +52988,10 @@ components: - minLength: 1 type: string Security_Endpoint_Management_API_WithOutputs: - description: Shows detailed outputs for an action response + description: A list of action IDs that should include the complete output of the action. + example: + - action-id-1 + - action-id-2 oneOf: - items: minLength: 1 @@ -54045,6 +54587,7 @@ components: - status_code - message Security_Osquery_API_ArrayQueries: + description: An array of queries to run. items: $ref: '#/components/schemas/Security_Osquery_API_ArrayQueriesItem' type: array @@ -54054,7 +54597,7 @@ components: ecs_mapping: $ref: '#/components/schemas/Security_Osquery_API_ECSMappingOrUndefined' id: - $ref: '#/components/schemas/Security_Osquery_API_Id' + $ref: '#/components/schemas/Security_Osquery_API_QueryId' platform: $ref: '#/components/schemas/Security_Osquery_API_PlatformOrUndefined' query: @@ -54066,37 +54609,51 @@ components: version: $ref: '#/components/schemas/Security_Osquery_API_VersionOrUndefined' Security_Osquery_API_CreateLiveQueryRequestBody: + example: + agent_all: true + ecs_mapping: + host.uptime: + field: total_seconds + query: select * from uptime; type: object properties: agent_all: + description: When `true`, the query runs on all agents. type: boolean agent_ids: + description: A list of agent IDs to run the query on. items: type: string type: array agent_platforms: + description: A list of agent platforms to run the query on. items: type: string type: array agent_policy_ids: + description: A list of agent policy IDs to run the query on. items: type: string type: array alert_ids: + description: A list of alert IDs associated with the live query. items: type: string type: array case_ids: + description: A list of case IDs associated with the live query. items: type: string type: array ecs_mapping: $ref: '#/components/schemas/Security_Osquery_API_ECSMappingOrUndefined' event_ids: + description: A list of event IDs associated with the live query. items: type: string type: array metadata: + description: Custom metadata object associated with the live query. nullable: true type: object pack_id: @@ -54107,11 +54664,64 @@ components: $ref: '#/components/schemas/Security_Osquery_API_QueryOrUndefined' saved_query_id: $ref: '#/components/schemas/Security_Osquery_API_SavedQueryIdOrUndefined' + Security_Osquery_API_CreateLiveQueryResponse: + example: + data: + '@timestamp': '2022-07-26T09:59:32.220Z' + action_id: 3c42c847-eb30-4452-80e0-728584042334 + agent_all: true + agent_ids: [] + agent_platforms: [] + agent_policy_ids: [] + agents: + - 16d7caf5-efd2-4212-9b62-73dafc91fa13 + expiration: '2022-07-26T10:04:32.220Z' + input_type: osquery + metadata: + execution_context: + name: osquery + url: /app/osquery/live_queries/new + queries: + - action_id: 609c4c66-ba3d-43fa-afdd-53e244577aa0 + agents: + - 16d7caf5-efd2-4212-9b62-73dafc91fa13 + ecs_mapping: + host.uptime: + field: total_seconds + id: 6724a474-cbba-41ef-a1aa-66aebf0879e2 + query: select * from uptime; + timeout: 120 + type: INPUT_ACTION + user_id: elastic + type: object + properties: {} Security_Osquery_API_CreatePacksRequestBody: + example: + description: My pack + enabled: true + name: my_pack + policy_ids: + - my_policy_id + - fleet-server-policy + queries: + my_query: + ecs_mapping: + client.port: + field: port + tags: + value: + - tag1 + - tag2 + interval: 60 + query: SELECT * FROM listening_ports; + timeout: 120 + shards: + fleet-server-policy: 58 + my_policy_id: 35 type: object properties: description: - $ref: '#/components/schemas/Security_Osquery_API_DescriptionOrUndefined' + $ref: '#/components/schemas/Security_Osquery_API_PackDescriptionOrUndefined' enabled: $ref: '#/components/schemas/Security_Osquery_API_EnabledOrUndefined' name: @@ -54122,11 +54732,50 @@ components: $ref: '#/components/schemas/Security_Osquery_API_ObjectQueries' shards: $ref: '#/components/schemas/Security_Osquery_API_Shards' + Security_Osquery_API_CreatePacksResponse: + example: + data: + created_at: '2025-02-26T13:37:30.452Z' + created_by: elastic + description: My pack + enabled: true + name: my_pack + queries: + ports: + ecs_mapping: + client.port: + field: port + interval: 60 + query: SELECT * FROM listening_ports; + removed: false + snapshot: true + timeout: 120 + saved_object_id: 1c266590-381f-428c-878f-c80c1334f856 + shards: + - key: 47638692-7c4c-4053-aa3e-7186f28df349 + value: 35 + - key: 5e267651-fe50-443e-8d3f-3bbc9171b618 + value: 58 + updated_at: '2025-02-26T13:37:30.452Z' + updated_by: elastic + type: object + properties: {} Security_Osquery_API_CreateSavedQueryRequestBody: + example: + description: Saved query description + ecs_mapping: + host.uptime: + field: total_seconds + id: saved_query_id + interval: '60' + platform: linux,darwin + query: select * from uptime; + timeout: 120 + version: 2.8.0 type: object properties: description: - $ref: '#/components/schemas/Security_Osquery_API_DescriptionOrUndefined' + $ref: '#/components/schemas/Security_Osquery_API_SavedQueryDescriptionOrUndefined' ecs_mapping: $ref: '#/components/schemas/Security_Osquery_API_ECSMappingOrUndefined' id: @@ -54134,7 +54783,7 @@ components: interval: $ref: '#/components/schemas/Security_Osquery_API_Interval' platform: - $ref: '#/components/schemas/Security_Osquery_API_DescriptionOrUndefined' + $ref: '#/components/schemas/Security_Osquery_API_PlatformOrUndefined' query: $ref: '#/components/schemas/Security_Osquery_API_QueryOrUndefined' removed: @@ -54143,24 +54792,32 @@ components: $ref: '#/components/schemas/Security_Osquery_API_SnapshotOrUndefined' version: $ref: '#/components/schemas/Security_Osquery_API_VersionOrUndefined' + Security_Osquery_API_CreateSavedQueryResponse: + example: + data: {} + type: object + properties: {} Security_Osquery_API_DefaultSuccessResponse: type: object properties: {} - Security_Osquery_API_Description: - type: string - Security_Osquery_API_DescriptionOrUndefined: - $ref: '#/components/schemas/Security_Osquery_API_Description' - nullable: true Security_Osquery_API_ECSMapping: additionalProperties: $ref: '#/components/schemas/Security_Osquery_API_ECSMappingItem' + description: Map osquery results columns or static values to Elastic Common Schema (ECS) fields + example: + host.uptime: + field: total_seconds type: object Security_Osquery_API_ECSMappingItem: type: object properties: field: + description: The ECS field to map to. + example: host.uptime type: string value: + description: The value to map to the ECS field. + example: total_seconds oneOf: - type: string - items: @@ -54170,71 +54827,197 @@ components: $ref: '#/components/schemas/Security_Osquery_API_ECSMapping' nullable: true Security_Osquery_API_Enabled: + description: Enables the pack. + example: true type: boolean Security_Osquery_API_EnabledOrUndefined: $ref: '#/components/schemas/Security_Osquery_API_Enabled' nullable: true - Security_Osquery_API_FindLiveQueryRequestQuery: + Security_Osquery_API_FindLiveQueryDetailsResponse: + example: + data: + '@timestamp': '2022-07-26T09:59:32.220Z' + action_id: 3c42c847-eb30-4452-80e0-728584042334 + agents: + - 16d7caf5-efd2-4212-9b62-73dafc91fa13 + expiration: '2022-07-26T10:04:32.220Z' + queries: + - action_id: 609c4c66-ba3d-43fa-afdd-53e244577aa0 + agents: + - 16d7caf5-efd2-4212-9b62-73dafc91fa13 + docs: 0 + ecs_mapping: + host.uptime: + field: total_seconds + failed: 1 + id: 6724a474-cbba-41ef-a1aa-66aebf0879e2 + pending: 0 + query: select * from uptime; + responded: 1 + saved_query_id: 42ba9c50-0cc5-11ed-aa1d-2b27890bc90d + status: completed + successful: 0 + status: completed + user_id: elastic type: object - properties: - kuery: - $ref: '#/components/schemas/Security_Osquery_API_KueryOrUndefined' - page: - $ref: '#/components/schemas/Security_Osquery_API_PageOrUndefined' - pageSize: - $ref: '#/components/schemas/Security_Osquery_API_PageSizeOrUndefined' - sort: - $ref: '#/components/schemas/Security_Osquery_API_SortOrUndefined' - sortOrder: - $ref: '#/components/schemas/Security_Osquery_API_SortOrderOrUndefined' - Security_Osquery_API_FindPacksRequestQuery: + properties: {} + Security_Osquery_API_FindLiveQueryResponse: + example: + data: + items: + - fields: + '@timestamp': '2023-10-31T00:00:00Z' + action_id: 3c42c847-eb30-4452-80e0-728584042334 + agents: + - 16d7caf5-efd2-4212-9b62-73dafc91fa13 + expiration: '2023-10-31T00:00:00Z' + queries: + - action_id: 609c4c66-ba3d-43fa-afdd-53e244577aa0 + agents: + - 16d7caf5-efd2-4212-9b62-73dafc91fa13 + ecs_mapping: + host.uptime: + field: total_seconds + id: 6724a474-cbba-41ef-a1aa-66aebf0879e2 + query: select * from uptime; + saved_query_id: 42ba9c50-0cc5-11ed-aa1d-2b27890bc90d + user_id: elastic type: object - properties: - page: - $ref: '#/components/schemas/Security_Osquery_API_PageOrUndefined' - pageSize: - $ref: '#/components/schemas/Security_Osquery_API_PageSizeOrUndefined' - sort: - $ref: '#/components/schemas/Security_Osquery_API_SortOrUndefined' - sortOrder: - $ref: '#/components/schemas/Security_Osquery_API_SortOrderOrUndefined' - Security_Osquery_API_FindSavedQueryRequestQuery: + properties: {} + Security_Osquery_API_FindPackResponse: + example: + data: + created_at: '2022-07-25T19:41:10.263Z' + created_by: elastic + description: '' + enabled: true + id: 3c42c847-eb30-4452-80e0-728584042334 + name: test_pack + namespaces: + - default + policy_ids: [] + queries: + uptime: + ecs_mapping: + message: + field: days + interval: 3600 + query: select * from uptime + read_only: false + type: osquery-pack + updated_at: '2022-07-25T20:12:01.455Z' + updated_by: elastic type: object - properties: - page: - $ref: '#/components/schemas/Security_Osquery_API_PageOrUndefined' - pageSize: - $ref: '#/components/schemas/Security_Osquery_API_PageSizeOrUndefined' - sort: - $ref: '#/components/schemas/Security_Osquery_API_SortOrUndefined' - sortOrder: - $ref: '#/components/schemas/Security_Osquery_API_SortOrderOrUndefined' - Security_Osquery_API_GetLiveQueryResultsRequestQuery: + properties: {} + Security_Osquery_API_FindPacksResponse: + example: + data: + - attributes: + created_at: '2023-10-31T00:00:00Z' + created_by: elastic + description: My pack description + enabled: true + name: My Pack + queries: + - ecs_mapping: + - host.uptime: + field: total_seconds + id: uptime + interval: '3600' + query: select * from uptime; + updated_at: '2023-10-31T00:00:00Z' + updated_by: elastic + id: 42ba9c50-0cc5-11ed-aa1d-2b27890bc90d + namespaces: + - default + type: osquery-pack + page: 1 + pageSize: 10 + policy_ids: [] + total: 1 type: object - properties: - kuery: - $ref: '#/components/schemas/Security_Osquery_API_KueryOrUndefined' - page: - $ref: '#/components/schemas/Security_Osquery_API_PageOrUndefined' - pageSize: - $ref: '#/components/schemas/Security_Osquery_API_PageSizeOrUndefined' - sort: - $ref: '#/components/schemas/Security_Osquery_API_SortOrUndefined' - sortOrder: - $ref: '#/components/schemas/Security_Osquery_API_SortOrderOrUndefined' - Security_Osquery_API_Id: - type: string + properties: {} + Security_Osquery_API_FindSavedQueryDetailResponse: + example: + data: + attributes: + created_at: '2022-07-26T09:28:08.597Z' + created_by: elastic + description: Saved query description + ecs_mapping: + host.uptime: + field: total_seconds + id: saved_query_id + interval: '60' + platform: linux,darwin + prebuilt: false + query: select * from uptime; + updated_at: '2022-07-26T09:28:08.597Z' + updated_by: elastic + version: 2.8.0 + coreMigrationVersion: 8.4.0 + id: 3c42c847-eb30-4452-80e0-728584042334 + namespaces: + - default + references: [] + type: osquery-saved-query + updated_at: '2022-07-26T09:28:08.600Z' + version: WzQzMTcsMV0= + type: object + properties: {} + Security_Osquery_API_FindSavedQueryResponse: + example: + data: + - attributes: + created_at: '2022-07-26T09:28:08.597Z' + created_by: elastic + description: Saved query description + ecs_mapping: + host.uptime: + field: total_seconds + id: saved_query_id + interval: '60' + platform: linux,darwin + prebuilt: false + query: select * from uptime; + updated_at: '2022-07-26T09:28:08.597Z' + updated_by: elastic + version: 2.8.0 + id: 42ba9c50-0cc5-11ed-aa1d-2b27890bc90d + namespaces: + - default + type: osquery-saved-query + page: 1 + per_page: 100 + total: 11 + type: object + properties: {} + Security_Osquery_API_GetLiveQueryResultsResponse: + description: The response for getting live query results. + example: + data: + edges: + - {} + - {} + total: 2 + type: object + properties: {} Security_Osquery_API_Interval: + description: An interval, in seconds, on which to run the query. + example: '60' type: string Security_Osquery_API_IntervalOrUndefined: $ref: '#/components/schemas/Security_Osquery_API_Interval' nullable: true Security_Osquery_API_KueryOrUndefined: + description: The kuery to filter the results by. + example: 'agent.id: 16d7caf5-efd2-4212-9b62-73dafc91fa13' nullable: true type: string Security_Osquery_API_ObjectQueries: additionalProperties: $ref: '#/components/schemas/Security_Osquery_API_ObjectQueriesItem' + description: An object of queries. type: object Security_Osquery_API_ObjectQueriesItem: type: object @@ -54242,7 +55025,7 @@ components: ecs_mapping: $ref: '#/components/schemas/Security_Osquery_API_ECSMappingOrUndefined' id: - $ref: '#/components/schemas/Security_Osquery_API_Id' + $ref: '#/components/schemas/Security_Osquery_API_QueryId' platform: $ref: '#/components/schemas/Security_Osquery_API_PlatformOrUndefined' query: @@ -54255,25 +55038,45 @@ components: $ref: '#/components/schemas/Security_Osquery_API_SnapshotOrUndefined' version: $ref: '#/components/schemas/Security_Osquery_API_VersionOrUndefined' + Security_Osquery_API_PackDescription: + description: The pack description. + example: Pack description + type: string + Security_Osquery_API_PackDescriptionOrUndefined: + $ref: '#/components/schemas/Security_Osquery_API_PackDescription' + nullable: true Security_Osquery_API_PackId: + description: The ID of the pack you want to run, retrieve, update, or delete. + example: 3c42c847-eb30-4452-80e0-728584042334 type: string Security_Osquery_API_PackIdOrUndefined: $ref: '#/components/schemas/Security_Osquery_API_PackId' nullable: true Security_Osquery_API_PackName: + description: The pack name. type: string Security_Osquery_API_PageOrUndefined: + description: The page number to return. The default is 1. + example: 1 nullable: true type: integer Security_Osquery_API_PageSizeOrUndefined: + description: The number of results to return per page. The default is 20. + example: 20 nullable: true type: integer Security_Osquery_API_Platform: + description: Restricts the query to a specified platform. The default is all platforms. To specify multiple platforms, use commas. For example, `linux,darwin`. + example: linux,darwin type: string Security_Osquery_API_PlatformOrUndefined: $ref: '#/components/schemas/Security_Osquery_API_Platform' nullable: true Security_Osquery_API_PolicyIds: + description: A list of agents policy IDs. + example: + - policyId1 + - policyId2 items: type: string type: array @@ -54281,16 +55084,33 @@ components: $ref: '#/components/schemas/Security_Osquery_API_PolicyIds' nullable: true Security_Osquery_API_Query: + description: The SQL query you want to run. + example: select * from uptime; + type: string + Security_Osquery_API_QueryId: + description: The ID of the query. + example: 3c42c847-eb30-4452-80e0-728584042334 type: string Security_Osquery_API_QueryOrUndefined: $ref: '#/components/schemas/Security_Osquery_API_Query' nullable: true Security_Osquery_API_Removed: + description: Indicates whether the query is removed. + example: false type: boolean Security_Osquery_API_RemovedOrUndefined: $ref: '#/components/schemas/Security_Osquery_API_Removed' nullable: true + Security_Osquery_API_SavedQueryDescription: + description: The saved query description. + example: Saved query description + type: string + Security_Osquery_API_SavedQueryDescriptionOrUndefined: + $ref: '#/components/schemas/Security_Osquery_API_SavedQueryDescription' + nullable: true Security_Osquery_API_SavedQueryId: + description: The ID of a saved query. + example: 3c42c847-eb30-4452-80e0-728584042334 type: string Security_Osquery_API_SavedQueryIdOrUndefined: $ref: '#/components/schemas/Security_Osquery_API_SavedQueryId' @@ -54298,42 +55118,82 @@ components: Security_Osquery_API_Shards: additionalProperties: type: number + description: An object with shard configuration for policies included in the pack. For each policy, set the shard configuration to a percentage (1–100) of target hosts. + example: + policy_id: 50 type: object Security_Osquery_API_Snapshot: + description: Indicates whether the query is a snapshot. + example: true type: boolean Security_Osquery_API_SnapshotOrUndefined: $ref: '#/components/schemas/Security_Osquery_API_Snapshot' nullable: true Security_Osquery_API_SortOrderOrUndefined: - oneOf: - - nullable: true - type: string - - enum: - - asc - - desc + description: Specifies the sort order. + enum: + - asc + - desc + example: desc + type: string Security_Osquery_API_SortOrUndefined: + default: createdAt + description: The field that is used to sort the results. + example: createdAt nullable: true type: string Security_Osquery_API_UpdatePacksRequestBody: + example: + name: updated_my_pack_name type: object properties: description: - $ref: '#/components/schemas/Security_Osquery_API_DescriptionOrUndefined' + $ref: '#/components/schemas/Security_Osquery_API_PackDescriptionOrUndefined' enabled: $ref: '#/components/schemas/Security_Osquery_API_EnabledOrUndefined' - id: - $ref: '#/components/schemas/Security_Osquery_API_PackId' + name: + $ref: '#/components/schemas/Security_Osquery_API_PackName' policy_ids: $ref: '#/components/schemas/Security_Osquery_API_PolicyIdsOrUndefined' queries: $ref: '#/components/schemas/Security_Osquery_API_ObjectQueries' shards: $ref: '#/components/schemas/Security_Osquery_API_Shards' + Security_Osquery_API_UpdatePacksResponse: + example: + data: + created_at: '2025-02-26T13:37:30.452Z' + created_by: elastic + description: My pack + enabled: true + name: updated_my_pack_name + queries: + ports: + ecs_mapping: + client.port: + field: port + interval: 60 + query: SELECT * FROM listening_ports; + removed: false + snapshot: true + timeout: 120 + saved_object_id: 1c266590-381f-428c-878f-c80c1334f856 + shards: + - key: 47638692-7c4c-4053-aa3e-7186f28df349 + value: 35 + - key: 5e267651-fe50-443e-8d3f-3bbc9171b618 + value: 58 + updated_at: '2025-02-26T13:40:16.297Z' + updated_by: elastic + type: object + properties: {} Security_Osquery_API_UpdateSavedQueryRequestBody: + example: + id: updated_my_saved_query_name type: object properties: description: - $ref: '#/components/schemas/Security_Osquery_API_DescriptionOrUndefined' + $ref: '#/components/schemas/Security_Osquery_API_SavedQueryDescriptionOrUndefined' ecs_mapping: $ref: '#/components/schemas/Security_Osquery_API_ECSMappingOrUndefined' id: @@ -54341,7 +55201,7 @@ components: interval: $ref: '#/components/schemas/Security_Osquery_API_IntervalOrUndefined' platform: - $ref: '#/components/schemas/Security_Osquery_API_DescriptionOrUndefined' + $ref: '#/components/schemas/Security_Osquery_API_PlatformOrUndefined' query: $ref: '#/components/schemas/Security_Osquery_API_QueryOrUndefined' removed: @@ -54350,7 +55210,14 @@ components: $ref: '#/components/schemas/Security_Osquery_API_SnapshotOrUndefined' version: $ref: '#/components/schemas/Security_Osquery_API_VersionOrUndefined' + Security_Osquery_API_UpdateSavedQueryResponse: + example: + data: {} + type: object + properties: {} Security_Osquery_API_Version: + description: Uses the Osquery versions greater than or equal to the specified version string. + example: 1.0.0 type: string Security_Osquery_API_VersionOrUndefined: $ref: '#/components/schemas/Security_Osquery_API_Version' diff --git a/oas_docs/output/kibana.yaml b/oas_docs/output/kibana.yaml index 49616cb941aec..445efda44d4f9 100644 --- a/oas_docs/output/kibana.yaml +++ b/oas_docs/output/kibana.yaml @@ -11757,16 +11757,61 @@ paths: operationId: EndpointGetActionsList parameters: - in: query - name: query - required: true + name: page + required: false + schema: + $ref: '#/components/schemas/Security_Endpoint_Management_API_Page' + - in: query + name: pageSize + required: false + schema: + $ref: '#/components/schemas/Security_Endpoint_Management_API_PageSize' + - in: query + name: commands + required: false schema: - $ref: '#/components/schemas/Security_Endpoint_Management_API_GetEndpointActionListRouteQuery' + $ref: '#/components/schemas/Security_Endpoint_Management_API_Commands' + - in: query + name: agentIds + required: false + schema: + $ref: '#/components/schemas/Security_Endpoint_Management_API_AgentIds' + - in: query + name: userIds + required: false + schema: + $ref: '#/components/schemas/Security_Endpoint_Management_API_UserIds' + - in: query + name: startDate + required: false + schema: + $ref: '#/components/schemas/Security_Endpoint_Management_API_StartDate' + - in: query + name: endDate + required: false + schema: + $ref: '#/components/schemas/Security_Endpoint_Management_API_EndDate' + - in: query + name: agentTypes + required: false + schema: + $ref: '#/components/schemas/Security_Endpoint_Management_API_AgentTypes' + - in: query + name: withOutputs + required: false + schema: + $ref: '#/components/schemas/Security_Endpoint_Management_API_WithOutputs' + - in: query + name: types + required: false + schema: + $ref: '#/components/schemas/Security_Endpoint_Management_API_Types' responses: '200': content: application/json: schema: - $ref: '#/components/schemas/Security_Endpoint_Management_API_SuccessResponse' + $ref: '#/components/schemas/Security_Endpoint_Management_API_GetEndpointActionListResponse' description: OK summary: Get response actions tags: @@ -11803,13 +11848,15 @@ paths: name: action_id required: true schema: + description: The ID of the action to retrieve. + example: fr518850-681a-4y60-aa98-e22640cae2b8 type: string responses: '200': content: application/json: schema: - $ref: '#/components/schemas/Security_Endpoint_Management_API_SuccessResponse' + $ref: '#/components/schemas/Security_Endpoint_Management_API_GetEndpointActionResponse' description: OK summary: Get action details tags: @@ -11879,7 +11926,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/Security_Endpoint_Management_API_SuccessResponse' + $ref: '#/components/schemas/Security_Endpoint_Management_API_ExecuteRouteResponse' description: OK summary: Run a command tags: @@ -11899,7 +11946,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/Security_Endpoint_Management_API_SuccessResponse' + $ref: '#/components/schemas/Security_Endpoint_Management_API_GetFileRouteResponse' description: OK summary: Get a file tags: @@ -11911,15 +11958,53 @@ paths: requestBody: content: application/json: + examples: + multiple_endpoints: + summary: Isolates several hosts; includes a comment + value: + comment: Locked down, pending further investigation + endpoint_ids: + - 9972d10e-4b9e-41aa-a534-a85e2a28ea42 + - bc0e4f0c-3bca-4633-9fee-156c0b505d16 + - fa89271b-b9d4-43f2-a684-307cffddeb5a + single_endpoint: + summary: Isolates a single host with an endpoint_id value of ed518850-681a-4d60-bb98-e22640cae2a8 + value: + endpoint_ids: + - ed518850-681a-4d60-bb98-e22640cae2a8 + with_case_id: + summary: Isolates a single host with a case_id value of 1234 + value: + case_ids: + - 4976be38-c134-4554-bd5e-0fd89ce63667 + comment: Isolating as initial response + endpoint_ids: + - 1aa1f8fd-0fb0-4fe4-8c30-92068272d3f0 + - b30a11bf-1395-4707-b508-fbb45ef9793e schema: - $ref: '#/components/schemas/Security_Endpoint_Management_API_IsolateRouteRequestBody' + type: object + properties: + agent_type: + $ref: '#/components/schemas/Security_Endpoint_Management_API_AgentTypes' + alert_ids: + $ref: '#/components/schemas/Security_Endpoint_Management_API_AlertIds' + case_ids: + $ref: '#/components/schemas/Security_Endpoint_Management_API_CaseIds' + comment: + $ref: '#/components/schemas/Security_Endpoint_Management_API_Comment' + endpoint_ids: + $ref: '#/components/schemas/Security_Endpoint_Management_API_EndpointIds' + parameters: + $ref: '#/components/schemas/Security_Endpoint_Management_API_Parameters' + required: + - endpoint_ids required: true responses: '200': content: application/json: schema: - $ref: '#/components/schemas/Security_Endpoint_Management_API_SuccessResponse' + $ref: '#/components/schemas/Security_Endpoint_Management_API_IsolateRouteResponse' description: OK summary: Isolate an endpoint tags: @@ -11939,7 +12024,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/Security_Endpoint_Management_API_SuccessResponse' + $ref: '#/components/schemas/Security_Endpoint_Management_API_KillProcessRouteResponse' description: OK summary: Terminate a process tags: @@ -11959,7 +12044,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/Security_Endpoint_Management_API_SuccessResponse' + $ref: '#/components/schemas/Security_Endpoint_Management_API_GetProcessesRouteResponse' description: OK summary: Get running processes tags: @@ -11999,7 +12084,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/Security_Endpoint_Management_API_SuccessResponse' + $ref: '#/components/schemas/Security_Endpoint_Management_API_ScanRouteResponse' description: OK summary: Scan a file or directory tags: @@ -12033,7 +12118,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/Security_Endpoint_Management_API_SuccessResponse' + $ref: '#/components/schemas/Security_Endpoint_Management_API_SuspendProcessRouteResponse' description: OK summary: Suspend a process tags: @@ -12045,15 +12130,53 @@ paths: requestBody: content: application/json: + examples: + multipleHosts: + summary: 'Releases several hosts; includes a comment:' + value: + comment: Benign process identified, releasing group + endpoint_ids: + - 9972d10e-4b9e-41aa-a534-a85e2a28ea42 + - bc0e4f0c-3bca-4633-9fee-156c0b505d16 + - fa89271b-b9d4-43f2-a684-307cffddeb5a + singleHost: + summary: Releases a single host with an endpoint_id value of ed518850-681a-4d60-bb98-e22640cae2a8 + value: + endpoint_ids: + - ed518850-681a-4d60-bb98-e22640cae2a8 + withCaseId: + summary: Releases hosts with an associated case; includes a comment. + value: + case_ids: + - 4976be38-c134-4554-bd5e-0fd89ce63667 + comment: Remediation complete, restoring network + endpoint_ids: + - 1aa1f8fd-0fb0-4fe4-8c30-92068272d3f0 + - b30a11bf-1395-4707-b508-fbb45ef9793e schema: - $ref: '#/components/schemas/Security_Endpoint_Management_API_UnisolateRouteRequestBody' + type: object + properties: + agent_type: + $ref: '#/components/schemas/Security_Endpoint_Management_API_AgentTypes' + alert_ids: + $ref: '#/components/schemas/Security_Endpoint_Management_API_AlertIds' + case_ids: + $ref: '#/components/schemas/Security_Endpoint_Management_API_CaseIds' + comment: + $ref: '#/components/schemas/Security_Endpoint_Management_API_Comment' + endpoint_ids: + $ref: '#/components/schemas/Security_Endpoint_Management_API_EndpointIds' + parameters: + $ref: '#/components/schemas/Security_Endpoint_Management_API_Parameters' + required: + - endpoint_ids required: true responses: '200': content: application/json: schema: - $ref: '#/components/schemas/Security_Endpoint_Management_API_SuccessResponse' + $ref: '#/components/schemas/Security_Endpoint_Management_API_UnisolateRouteResponse' description: OK summary: Release an isolated endpoint tags: @@ -12064,7 +12187,7 @@ paths: operationId: EndpointUploadAction requestBody: content: - application/json: + multipart/form-data: schema: $ref: '#/components/schemas/Security_Endpoint_Management_API_UploadRouteRequestBody' required: true @@ -12073,7 +12196,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/Security_Endpoint_Management_API_SuccessResponse' + $ref: '#/components/schemas/Security_Endpoint_Management_API_UploadRouteResponse' description: OK summary: Upload a file tags: @@ -39314,16 +39437,36 @@ paths: operationId: OsqueryFindLiveQueries parameters: - in: query - name: query - required: true + name: kuery + required: false + schema: + $ref: '#/components/schemas/Security_Osquery_API_KueryOrUndefined' + - in: query + name: page + required: false + schema: + $ref: '#/components/schemas/Security_Osquery_API_PageOrUndefined' + - in: query + name: pageSize + required: false + schema: + $ref: '#/components/schemas/Security_Osquery_API_PageSizeOrUndefined' + - in: query + name: sort + required: false schema: - $ref: '#/components/schemas/Security_Osquery_API_FindLiveQueryRequestQuery' + $ref: '#/components/schemas/Security_Osquery_API_SortOrUndefined' + - in: query + name: sortOrder + required: false + schema: + $ref: '#/components/schemas/Security_Osquery_API_SortOrderOrUndefined' responses: '200': content: application/json: schema: - $ref: '#/components/schemas/Security_Osquery_API_DefaultSuccessResponse' + $ref: '#/components/schemas/Security_Osquery_API_FindLiveQueryResponse' description: OK summary: Get live queries tags: @@ -39342,7 +39485,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/Security_Osquery_API_DefaultSuccessResponse' + $ref: '#/components/schemas/Security_Osquery_API_CreateLiveQueryResponse' description: OK summary: Create a live query tags: @@ -39356,18 +39499,15 @@ paths: name: id required: true schema: - $ref: '#/components/schemas/Security_Osquery_API_Id' - - in: query - name: query - schema: - additionalProperties: true - type: object + description: The ID of the live query result you want to retrieve. + example: 3c42c847-eb30-4452-80e0-728584042334 + type: string responses: '200': content: application/json: schema: - $ref: '#/components/schemas/Security_Osquery_API_DefaultSuccessResponse' + $ref: '#/components/schemas/Security_Osquery_API_FindLiveQueryDetailsResponse' description: OK summary: Get live query details tags: @@ -39381,23 +39521,47 @@ paths: name: id required: true schema: - $ref: '#/components/schemas/Security_Osquery_API_Id' + description: The ID of the live query result you want to retrieve. + example: 3c42c847-eb30-4452-80e0-728584042334 + type: string - in: path name: actionId required: true schema: - $ref: '#/components/schemas/Security_Osquery_API_Id' + description: The ID of the query action that generated the live query results. + example: 609c4c66-ba3d-43fa-afdd-53e244577aa0 + type: string - in: query - name: query - required: true + name: kuery + required: false schema: - $ref: '#/components/schemas/Security_Osquery_API_GetLiveQueryResultsRequestQuery' + $ref: '#/components/schemas/Security_Osquery_API_KueryOrUndefined' + - in: query + name: page + required: false + schema: + $ref: '#/components/schemas/Security_Osquery_API_PageOrUndefined' + - in: query + name: pageSize + required: false + schema: + $ref: '#/components/schemas/Security_Osquery_API_PageSizeOrUndefined' + - in: query + name: sort + required: false + schema: + $ref: '#/components/schemas/Security_Osquery_API_SortOrUndefined' + - in: query + name: sortOrder + required: false + schema: + $ref: '#/components/schemas/Security_Osquery_API_SortOrderOrUndefined' responses: '200': content: application/json: schema: - $ref: '#/components/schemas/Security_Osquery_API_DefaultSuccessResponse' + $ref: '#/components/schemas/Security_Osquery_API_GetLiveQueryResultsResponse' description: OK summary: Get live query results tags: @@ -39408,16 +39572,31 @@ paths: operationId: OsqueryFindPacks parameters: - in: query - name: query - required: true + name: page + required: false + schema: + $ref: '#/components/schemas/Security_Osquery_API_PageOrUndefined' + - in: query + name: pageSize + required: false + schema: + $ref: '#/components/schemas/Security_Osquery_API_PageSizeOrUndefined' + - in: query + name: sort + required: false + schema: + $ref: '#/components/schemas/Security_Osquery_API_SortOrUndefined' + - in: query + name: sortOrder + required: false schema: - $ref: '#/components/schemas/Security_Osquery_API_FindPacksRequestQuery' + $ref: '#/components/schemas/Security_Osquery_API_SortOrderOrUndefined' responses: '200': content: application/json: schema: - $ref: '#/components/schemas/Security_Osquery_API_DefaultSuccessResponse' + $ref: '#/components/schemas/Security_Osquery_API_FindPacksResponse' description: OK summary: Get packs tags: @@ -39436,7 +39615,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/Security_Osquery_API_DefaultSuccessResponse' + $ref: '#/components/schemas/Security_Osquery_API_CreatePacksResponse' description: OK summary: Create a pack tags: @@ -39456,7 +39635,9 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/Security_Osquery_API_DefaultSuccessResponse' + example: {} + type: object + properties: {} description: OK summary: Delete a pack tags: @@ -39475,7 +39656,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/Security_Osquery_API_DefaultSuccessResponse' + $ref: '#/components/schemas/Security_Osquery_API_FindPackResponse' description: OK summary: Get pack details tags: @@ -39503,7 +39684,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/Security_Osquery_API_DefaultSuccessResponse' + $ref: '#/components/schemas/Security_Osquery_API_UpdatePacksResponse' description: OK summary: Update a pack tags: @@ -39514,16 +39695,31 @@ paths: operationId: OsqueryFindSavedQueries parameters: - in: query - name: query - required: true + name: page + required: false schema: - $ref: '#/components/schemas/Security_Osquery_API_FindSavedQueryRequestQuery' + $ref: '#/components/schemas/Security_Osquery_API_PageOrUndefined' + - in: query + name: pageSize + required: false + schema: + $ref: '#/components/schemas/Security_Osquery_API_PageSizeOrUndefined' + - in: query + name: sort + required: false + schema: + $ref: '#/components/schemas/Security_Osquery_API_SortOrUndefined' + - in: query + name: sortOrder + required: false + schema: + $ref: '#/components/schemas/Security_Osquery_API_SortOrderOrUndefined' responses: '200': content: application/json: schema: - $ref: '#/components/schemas/Security_Osquery_API_DefaultSuccessResponse' + $ref: '#/components/schemas/Security_Osquery_API_FindSavedQueryResponse' description: OK summary: Get saved queries tags: @@ -39542,7 +39738,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/Security_Osquery_API_DefaultSuccessResponse' + $ref: '#/components/schemas/Security_Osquery_API_CreateSavedQueryResponse' description: OK summary: Create a saved query tags: @@ -39581,7 +39777,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/Security_Osquery_API_DefaultSuccessResponse' + $ref: '#/components/schemas/Security_Osquery_API_FindSavedQueryDetailResponse' description: OK summary: Get saved query details tags: @@ -39609,7 +39805,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/Security_Osquery_API_DefaultSuccessResponse' + $ref: '#/components/schemas/Security_Osquery_API_UpdateSavedQueryResponse' description: OK summary: Update a saved query tags: @@ -58441,6 +58637,10 @@ components: description: Agent ID type: string Security_Endpoint_Management_API_AgentIds: + description: A list of agent IDs. Max of 50. + example: + - agent-id-1 + - agent-id-2 minLength: 1 oneOf: - items: @@ -58452,12 +58652,13 @@ components: - minLength: 1 type: string Security_Endpoint_Management_API_AgentTypes: - description: The host agent type (optional). Defaults to endpoint. + description: List of agent types to retrieve. Defaults to `endpoint`. enum: - endpoint - sentinel_one - crowdstrike - microsoft_defender_endpoint + example: endpoint type: string Security_Endpoint_Management_API_AlertIds: description: A list of alerts `id`s. @@ -58469,6 +58670,9 @@ components: type: array Security_Endpoint_Management_API_CaseIds: description: Case IDs to be updated (cannot contain empty strings) + example: + - case-id-1 + - case-id-2 items: minLength: 1 type: string @@ -58506,17 +58710,26 @@ components: minLength: 1 type: string Security_Endpoint_Management_API_Commands: + description: A list of response action command names. + example: + - isolate + - unisolate items: $ref: '#/components/schemas/Security_Endpoint_Management_API_Command' type: array Security_Endpoint_Management_API_Comment: description: Optional comment + example: This is a comment type: string Security_Endpoint_Management_API_EndDate: - description: End date + description: An end date in ISO format or Date Math format. + example: '2023-10-31T23:59:59.999Z' type: string Security_Endpoint_Management_API_EndpointIds: description: List of endpoint IDs (cannot contain empty strings) + example: + - endpoint-id-1 + - endpoint-id-2 items: minLength: 1 type: string @@ -58608,12 +58821,6 @@ components: revision: 2 type: object properties: {} - Security_Endpoint_Management_API_EntityId: - type: object - properties: - entity_id: - minLength: 1 - type: string Security_Endpoint_Management_API_ExecuteRouteRequestBody: allOf: - type: object @@ -58645,33 +58852,128 @@ components: - command required: - parameters - Security_Endpoint_Management_API_GetEndpointActionListRouteQuery: + example: + comment: Get list of all files + endpoint_ids: + - b3d6de74-36b0-4fa8-be46-c375bf1771bf + parameters: + command: ls -al + timeout: 600 + Security_Endpoint_Management_API_ExecuteRouteResponse: + example: + data: + agents: + - ed518850-681a-4d60-bb98-e22640cae2a8 + agentState: + ed518850-681a-4d60-bb98-e22640cae2a8: + isCompleted: false + wasSuccessful: false + agentType: endpoint + command: execute + comment: Get list of all files + createdBy: myuser + hosts: + ed518850-681a-4d60-bb98-e22640cae2a8: + name: gke-endpoint-gke-clu-endpoint-node-po-e1a3ab89-4c4r + id: 9f934028-2300-4927-b531-b26376793dc4 + isCompleted: false + isExpired: false + outputs: {} + parameters: + command: ls -al + timeout: 600 + startedAt: '2023-07-28T18:43:27.362Z' + status: pending + wasSuccessful: false type: object - properties: - agentIds: - $ref: '#/components/schemas/Security_Endpoint_Management_API_AgentIds' - agentTypes: - $ref: '#/components/schemas/Security_Endpoint_Management_API_AgentTypes' - commands: - $ref: '#/components/schemas/Security_Endpoint_Management_API_Commands' - endDate: - $ref: '#/components/schemas/Security_Endpoint_Management_API_EndDate' - page: - $ref: '#/components/schemas/Security_Endpoint_Management_API_Page' - pageSize: - default: 10 - description: Number of items per page - maximum: 10000 - minimum: 1 - type: integer - startDate: - $ref: '#/components/schemas/Security_Endpoint_Management_API_StartDate' - types: - $ref: '#/components/schemas/Security_Endpoint_Management_API_Types' - userIds: - $ref: '#/components/schemas/Security_Endpoint_Management_API_UserIds' - withOutputs: - $ref: '#/components/schemas/Security_Endpoint_Management_API_WithOutputs' + properties: {} + Security_Endpoint_Management_API_GetEndpointActionListResponse: + example: + data: + - agents: + - afdc366c-e2e0-4cdb-ae1d-94575bd2d8e0 + agentType: endpoint + command: running-processes + completedAt: '2022-08-08T09:50:47.672Z' + createdBy: elastic + id: b3d6de74-36b0-4fa8-be46-c375bf1771bf + isCompleted: true + isExpired: false + startedAt: '2022-08-08T15:24:57.402Z' + wasSuccessful: true + - agents: + - afdc366c-e2e0-4cdb-ae1d-94575bd2d8e0 + agentType: endpoint + command: isolate + completedAt: '2022-08-08T10:41:57.352Z' + createdBy: elastic + id: 43b4098b-8752-4fbb-a7a7-6df7c74d0ee3 + isCompleted: true + isExpired: false + startedAt: '2022-08-08T15:23:37.359Z' + wasSuccessful: true + - agents: + - afdc366c-e2e0-4cdb-ae1d-94575bd2d8e0 + agentType: endpoint + command: kill-process + comment: bad process - taking up too much cpu + completedAt: '2022-08-08T09:44:50.952Z' + createdBy: elastic + id: 5bc92c86-b8e6-42dd-837f-12ad29e09caa + isCompleted: true + isExpired: false + startedAt: '2022-08-08T14:38:44.125Z' + wasSuccessful: true + - agents: + - afdc366c-e2e0-4cdb-ae1d-94575bd2d8e0 + agentType: endpoint + command: unisolate + comment: Not a threat to the network + completedAt: '2022-08-08T09:40:47.398Z' + createdBy: elastic + id: 790d54e0-3aa3-4e5b-8255-3ce9d851246a + isCompleted: true + isExpired: false + startedAt: '2022-08-08T14:38:15.391Z' + wasSuccessful: true + elasticAgentIds: + - afdc366c-e2e0-4cdb-ae1d-94575bd2d8e0 + endDate: now + page: 1 + pageSize: 10 + startDate: now-24h/h + total: 4 + type: object + properties: {} + Security_Endpoint_Management_API_GetEndpointActionResponse: + example: + data: + agents: + - afdc366c-e2e0-4cdb-ae1d-94575bd2d8e0 + agentType: endpoint + command: running-processes + completedAt: '2022-08-08T09:50:47.672Z' + createdBy: elastic + id: b3d6de74-36b0-4fa8-be46-c375bf1771bf + isCompleted: true + isExpired: false + outputs: + afdc366c-e2e0-4cdb-ae1d-94575bd2d8e0: + content: + entries: + - command: /opt/cmd1 + entity_id: fk2ym7bl3oiu3okjcik0xosc0i0m75x3eh49nu3uaqt4dqanjt + pid: '822' + user: Dexter + - command: /opt/cmd3/opt/cmd3/opt/cmd3/opt/cmd3 + entity_id: pwvz91m48wpj9j7ov9gtw8fp7u2rat4eu5ipte37hnhdcbi2pt + pid: '984' + user: Jada + type: json + startedAt: '2022-08-08T15:24:57.402Z' + wasSuccessful: true + type: object + properties: {} Security_Endpoint_Management_API_GetFileRouteRequestBody: allOf: - type: object @@ -58701,7 +59003,42 @@ components: - path required: - parameters + example: + comment: Get my file + endpoint_ids: + - ed518850-681a-4d60-bb98-e22640cae2a8 + parameters: + path: /usr/my-file.txt + Security_Endpoint_Management_API_GetFileRouteResponse: + example: + data: + agents: + - ed518850-681a-4d60-bb98-e22640cae2a8 + agentState: + ed518850-681a-4d60-bb98-e22640cae2a8: + isCompleted: false + wasSuccessful: false + agentType: endpoint + command: get-file + createdBy: myuser + hosts: + ed518850-681a-4d60-bb98-e22640cae2a8: + name: gke-endpoint-gke-clu-endpoint-node-po-e1a3ab89-4c4r + id: 27ba1b42-7cc6-4e53-86ce-675c876092b2 + isCompleted: false + isExpired: false + outputs: {} + parameters: + path: /usr/my-file.txt + startedAt: '2023-07-28T19:00:03.911Z' + status: pending + wasSuccessful: false + type: object + properties: {} Security_Endpoint_Management_API_GetProcessesRouteRequestBody: + example: + endpoint_ids: + - ed518850-681a-4d60-bb98-e22640cae2a8 type: object properties: agent_type: @@ -58718,6 +59055,30 @@ components: $ref: '#/components/schemas/Security_Endpoint_Management_API_Parameters' required: - endpoint_ids + Security_Endpoint_Management_API_GetProcessesRouteResponse: + example: + data: + agents: + - ed518850-681a-4d60-bb98-e22640cae2a8 + agentType: endpoint + command: running-processes + comment: '' + completedAt: '2022-07-29T19:09:44.961Z' + createdBy: myuser + errors: [] + id: 233db9ea-6733-4849-9226-5a7039c7161d + isCompleted: true + isExpired: false + outputs: + ed518850-681a-4d60-bb98-e22640cae2a8: + content: + key: value + type: json + parameters: {} + startedAt: '2022-07-29T19:08:49.126Z' + wasSuccessful: true + type: object + properties: {} Security_Endpoint_Management_API_HostPathScriptParameters: type: object properties: @@ -58749,23 +59110,32 @@ components: - unenrolled type: string type: array - Security_Endpoint_Management_API_IsolateRouteRequestBody: + Security_Endpoint_Management_API_IsolateRouteResponse: + example: + action: 233db9ea-6733-4849-9226-5a7039c7161d + data: + agents: + - ed518850-681a-4d60-bb98-e22640cae2a8 + agentType: endpoint + command: suspend-process + comment: suspend the process + completedAt: '2022-07-29T19:09:44.961Z' + createdBy: myuser + errors: [] + id: 233db9ea-6733-4849-9226-5a7039c7161d + isCompleted: true + isExpired: false + outputs: + ed518850-681a-4d60-bb98-e22640cae2a8: + content: + key: value + type: json + parameters: + entity_id: abc123 + startedAt: '2022-07-29T19:08:49.126Z' + wasSuccessful: true type: object - properties: - agent_type: - $ref: '#/components/schemas/Security_Endpoint_Management_API_AgentTypes' - alert_ids: - $ref: '#/components/schemas/Security_Endpoint_Management_API_AlertIds' - case_ids: - $ref: '#/components/schemas/Security_Endpoint_Management_API_CaseIds' - comment: - $ref: '#/components/schemas/Security_Endpoint_Management_API_Comment' - endpoint_ids: - $ref: '#/components/schemas/Security_Endpoint_Management_API_EndpointIds' - parameters: - $ref: '#/components/schemas/Security_Endpoint_Management_API_Parameters' - required: - - endpoint_ids + properties: {} Security_Endpoint_Management_API_KillProcessRouteRequestBody: allOf: - type: object @@ -58788,16 +59158,60 @@ components: properties: parameters: oneOf: - - $ref: '#/components/schemas/Security_Endpoint_Management_API_Pid' - - $ref: '#/components/schemas/Security_Endpoint_Management_API_EntityId' + - type: object + properties: + pid: + description: The process ID (PID) of the process to terminate. + example: 123 + minimum: 1 + type: integer + - type: object + properties: + entity_id: + description: The entity ID of the process to terminate. + example: abc123 + minLength: 1 + type: string - type: object properties: process_name: - description: Valid for SentinelOne agent type only + description: The name of the process to terminate. Valid for SentinelOne agent type only. + example: Elastic minLength: 1 type: string required: - parameters + example: + comment: terminate the process + endpoint_ids: + - ed518850-681a-4d60-bb98-e22640cae2a8 + parameters: + entity_id: abc123 + Security_Endpoint_Management_API_KillProcessRouteResponse: + example: + data: + agents: + - ed518850-681a-4d60-bb98-e22640cae2a8 + agentType: endpoint + command: kill-process + comment: terminate the process + completedAt: '2022-07-29T19:09:44.961Z' + createdBy: myuser + errors: [] + id: 233db9ea-6733-4849-9226-5a7039c7161d + isCompleted: true + isExpired: false + outputs: + ed518850-681a-4d60-bb98-e22640cae2a8: + content: + key: value + type: json + parameters: + entity_id: abc123 + startedAt: '2022-07-29T19:08:49.126Z' + wasSuccessful: true + type: object + properties: {} Security_Endpoint_Management_API_Kuery: description: A KQL string. example: 'united.endpoint.host.os.name : ''Windows''' @@ -59018,12 +59432,6 @@ components: $ref: '#/components/schemas/Security_Endpoint_Management_API_PendingActionDataType' - additionalProperties: true type: object - Security_Endpoint_Management_API_Pid: - type: object - properties: - pid: - minimum: 1 - type: integer Security_Endpoint_Management_API_ProtectionUpdatesNoteResponse: type: object properties: @@ -59081,11 +59489,45 @@ components: type: object properties: path: + description: The folder or file’s full path (including the file name). + example: /usr/my-file.txt type: string required: - path required: - parameters + example: + comment: Scan the file for malware + endpoint_ids: + - ed518850-681a-4d60-bb98-e22640cae2a8 + parameters: + path: /usr/my-file.txt + Security_Endpoint_Management_API_ScanRouteResponse: + example: + data: + agents: + - ed518850-681a-4d60-bb98-e22640cae2a8 + agentState: + ed518850-681a-4d60-bb98-e22640cae2a8: + isCompleted: false + wasSuccessful: false + agentType: endpoint + command: scan + createdBy: myuser + hosts: + ed518850-681a-4d60-bb98-e22640cae2a8: + name: gke-endpoint-gke-clu-endpoint-node-po-e1a3ab89-4c4r + id: 27ba1b42-7cc6-4e53-86ce-675c876092b2 + isCompleted: false + isExpired: false + outputs: {} + parameters: + path: /usr/my-file.txt + startedAt: '2023-07-28T19:00:03.911Z' + status: pending + wasSuccessful: false + type: object + properties: {} Security_Endpoint_Management_API_SortDirection: description: Determines the sort order. enum: @@ -59108,7 +59550,8 @@ components: example: enrolled_at type: string Security_Endpoint_Management_API_StartDate: - description: Start date + description: A start date in ISO 8601 format or Date Math format. + example: '2023-10-31T00:00:00.000Z' type: string Security_Endpoint_Management_API_SuccessResponse: type: object @@ -59135,10 +59578,53 @@ components: properties: parameters: oneOf: - - $ref: '#/components/schemas/Security_Endpoint_Management_API_Pid' - - $ref: '#/components/schemas/Security_Endpoint_Management_API_EntityId' + - type: object + properties: + pid: + description: The process ID (PID) of the process to suspend. + example: 123 + minimum: 1 + type: integer + - type: object + properties: + entity_id: + description: The entity ID of the process to suspend. + example: abc123 + minLength: 1 + type: string required: - parameters + example: + comment: suspend the process + endpoint_ids: + - ed518850-681a-4d60-bb98-e22640cae2a8 + parameters: + entity_id: abc123 + Security_Endpoint_Management_API_SuspendProcessRouteResponse: + example: + data: + agents: + - ed518850-681a-4d60-bb98-e22640cae2a8 + agentType: endpoint + command: suspend-process + comment: suspend the process + completedAt: '2022-07-29T19:09:44.961Z' + createdBy: myuser + errors: [] + id: 233db9ea-6733-4849-9226-5a7039c7161d + isCompleted: true + isExpired: false + outputs: + ed518850-681a-4d60-bb98-e22640cae2a8: + content: + key: value + type: json + parameters: + entity_id: abc123 + startedAt: '2022-07-29T19:08:49.126Z' + wasSuccessful: true + type: object + properties: {} Security_Endpoint_Management_API_Timeout: description: The maximum timeout value in milliseconds (optional) minimum: 1 @@ -59151,28 +59637,40 @@ components: type: string Security_Endpoint_Management_API_Types: description: List of types of response actions + example: + - automated + - manual items: $ref: '#/components/schemas/Security_Endpoint_Management_API_Type' maxLength: 2 minLength: 1 type: array - Security_Endpoint_Management_API_UnisolateRouteRequestBody: + Security_Endpoint_Management_API_UnisolateRouteResponse: + example: + action: 233db9ea-6733-4849-9226-5a7039c7161d + data: + agents: + - ed518850-681a-4d60-bb98-e22640cae2a8 + agentType: endpoint + command: suspend-process + comment: suspend the process + completedAt: '2022-07-29T19:09:44.961Z' + createdBy: myuser + errors: [] + id: 233db9ea-6733-4849-9226-5a7039c7161d + isCompleted: true + isExpired: false + outputs: + ed518850-681a-4d60-bb98-e22640cae2a8: + content: + key: value + type: json + parameters: + entity_id: abc123 + startedAt: '2022-07-29T19:08:49.126Z' + wasSuccessful: true type: object - properties: - agent_type: - $ref: '#/components/schemas/Security_Endpoint_Management_API_AgentTypes' - alert_ids: - $ref: '#/components/schemas/Security_Endpoint_Management_API_AlertIds' - case_ids: - $ref: '#/components/schemas/Security_Endpoint_Management_API_CaseIds' - comment: - $ref: '#/components/schemas/Security_Endpoint_Management_API_Comment' - endpoint_ids: - $ref: '#/components/schemas/Security_Endpoint_Management_API_EndpointIds' - parameters: - $ref: '#/components/schemas/Security_Endpoint_Management_API_Parameters' - required: - - endpoint_ids + properties: {} Security_Endpoint_Management_API_UploadRouteRequestBody: allOf: - type: object @@ -59194,6 +59692,8 @@ components: - type: object properties: file: + description: The binary content of the file. + example: RWxhc3RpYw== format: binary type: string parameters: @@ -59201,12 +59701,51 @@ components: properties: overwrite: default: false + description: Overwrite the file on the host if it already exists. + example: false type: boolean required: - parameters - file + example: + endpoint_ids: + - ed518850-681a-4d60-bb98-e22640cae2a8 + file: RWxhc3RpYw== + parameters: {} + Security_Endpoint_Management_API_UploadRouteResponse: + example: + data: + agents: + - ed518850-681a-4d60-bb98-e22640cae2a8 + agentState: + ed518850-681a-4d60-bb98-e22640cae2a8: + isCompleted: false + wasSuccessful: false + agentType: endpoint + command: upload + createdBy: elastic + hosts: + ed518850-681a-4d60-bb98-e22640cae2a8: + name: Host-5i6cuc8kdv + id: 9ff6aebc-2cb6-481e-8869-9b30036c9731 + isCompleted: false + isExpired: false + outputs: {} + parameters: + file_id: 10e4ce3d-4abb-4f93-a0cd-eaf63a489280 + file_name: fix-malware.sh + file_sha256: a0bed94220193ba4895c0aa5b4e7e293381d15765cb164ddf7be5cdd010ae42a + file_size: 69 + startedAt: '2023-07-03T15:07:22.837Z' + status: pending + wasSuccessful: false + type: object + properties: {} Security_Endpoint_Management_API_UserIds: - description: User IDs + description: A list of user IDs. + example: + - user-id-1 + - user-id-2 oneOf: - items: minLength: 1 @@ -59216,7 +59755,10 @@ components: - minLength: 1 type: string Security_Endpoint_Management_API_WithOutputs: - description: Shows detailed outputs for an action response + description: A list of action IDs that should include the complete output of the action. + example: + - action-id-1 + - action-id-2 oneOf: - items: minLength: 1 @@ -60812,6 +61354,7 @@ components: - status_code - message Security_Osquery_API_ArrayQueries: + description: An array of queries to run. items: $ref: '#/components/schemas/Security_Osquery_API_ArrayQueriesItem' type: array @@ -60821,7 +61364,7 @@ components: ecs_mapping: $ref: '#/components/schemas/Security_Osquery_API_ECSMappingOrUndefined' id: - $ref: '#/components/schemas/Security_Osquery_API_Id' + $ref: '#/components/schemas/Security_Osquery_API_QueryId' platform: $ref: '#/components/schemas/Security_Osquery_API_PlatformOrUndefined' query: @@ -60833,37 +61376,51 @@ components: version: $ref: '#/components/schemas/Security_Osquery_API_VersionOrUndefined' Security_Osquery_API_CreateLiveQueryRequestBody: + example: + agent_all: true + ecs_mapping: + host.uptime: + field: total_seconds + query: select * from uptime; type: object properties: agent_all: + description: When `true`, the query runs on all agents. type: boolean agent_ids: + description: A list of agent IDs to run the query on. items: type: string type: array agent_platforms: + description: A list of agent platforms to run the query on. items: type: string type: array agent_policy_ids: + description: A list of agent policy IDs to run the query on. items: type: string type: array alert_ids: + description: A list of alert IDs associated with the live query. items: type: string type: array case_ids: + description: A list of case IDs associated with the live query. items: type: string type: array ecs_mapping: $ref: '#/components/schemas/Security_Osquery_API_ECSMappingOrUndefined' event_ids: + description: A list of event IDs associated with the live query. items: type: string type: array metadata: + description: Custom metadata object associated with the live query. nullable: true type: object pack_id: @@ -60874,11 +61431,64 @@ components: $ref: '#/components/schemas/Security_Osquery_API_QueryOrUndefined' saved_query_id: $ref: '#/components/schemas/Security_Osquery_API_SavedQueryIdOrUndefined' + Security_Osquery_API_CreateLiveQueryResponse: + example: + data: + '@timestamp': '2022-07-26T09:59:32.220Z' + action_id: 3c42c847-eb30-4452-80e0-728584042334 + agent_all: true + agent_ids: [] + agent_platforms: [] + agent_policy_ids: [] + agents: + - 16d7caf5-efd2-4212-9b62-73dafc91fa13 + expiration: '2022-07-26T10:04:32.220Z' + input_type: osquery + metadata: + execution_context: + name: osquery + url: /app/osquery/live_queries/new + queries: + - action_id: 609c4c66-ba3d-43fa-afdd-53e244577aa0 + agents: + - 16d7caf5-efd2-4212-9b62-73dafc91fa13 + ecs_mapping: + host.uptime: + field: total_seconds + id: 6724a474-cbba-41ef-a1aa-66aebf0879e2 + query: select * from uptime; + timeout: 120 + type: INPUT_ACTION + user_id: elastic + type: object + properties: {} Security_Osquery_API_CreatePacksRequestBody: + example: + description: My pack + enabled: true + name: my_pack + policy_ids: + - my_policy_id + - fleet-server-policy + queries: + my_query: + ecs_mapping: + client.port: + field: port + tags: + value: + - tag1 + - tag2 + interval: 60 + query: SELECT * FROM listening_ports; + timeout: 120 + shards: + fleet-server-policy: 58 + my_policy_id: 35 type: object properties: description: - $ref: '#/components/schemas/Security_Osquery_API_DescriptionOrUndefined' + $ref: '#/components/schemas/Security_Osquery_API_PackDescriptionOrUndefined' enabled: $ref: '#/components/schemas/Security_Osquery_API_EnabledOrUndefined' name: @@ -60889,11 +61499,50 @@ components: $ref: '#/components/schemas/Security_Osquery_API_ObjectQueries' shards: $ref: '#/components/schemas/Security_Osquery_API_Shards' + Security_Osquery_API_CreatePacksResponse: + example: + data: + created_at: '2025-02-26T13:37:30.452Z' + created_by: elastic + description: My pack + enabled: true + name: my_pack + queries: + ports: + ecs_mapping: + client.port: + field: port + interval: 60 + query: SELECT * FROM listening_ports; + removed: false + snapshot: true + timeout: 120 + saved_object_id: 1c266590-381f-428c-878f-c80c1334f856 + shards: + - key: 47638692-7c4c-4053-aa3e-7186f28df349 + value: 35 + - key: 5e267651-fe50-443e-8d3f-3bbc9171b618 + value: 58 + updated_at: '2025-02-26T13:37:30.452Z' + updated_by: elastic + type: object + properties: {} Security_Osquery_API_CreateSavedQueryRequestBody: + example: + description: Saved query description + ecs_mapping: + host.uptime: + field: total_seconds + id: saved_query_id + interval: '60' + platform: linux,darwin + query: select * from uptime; + timeout: 120 + version: 2.8.0 type: object properties: description: - $ref: '#/components/schemas/Security_Osquery_API_DescriptionOrUndefined' + $ref: '#/components/schemas/Security_Osquery_API_SavedQueryDescriptionOrUndefined' ecs_mapping: $ref: '#/components/schemas/Security_Osquery_API_ECSMappingOrUndefined' id: @@ -60901,7 +61550,7 @@ components: interval: $ref: '#/components/schemas/Security_Osquery_API_Interval' platform: - $ref: '#/components/schemas/Security_Osquery_API_DescriptionOrUndefined' + $ref: '#/components/schemas/Security_Osquery_API_PlatformOrUndefined' query: $ref: '#/components/schemas/Security_Osquery_API_QueryOrUndefined' removed: @@ -60910,24 +61559,32 @@ components: $ref: '#/components/schemas/Security_Osquery_API_SnapshotOrUndefined' version: $ref: '#/components/schemas/Security_Osquery_API_VersionOrUndefined' + Security_Osquery_API_CreateSavedQueryResponse: + example: + data: {} + type: object + properties: {} Security_Osquery_API_DefaultSuccessResponse: type: object properties: {} - Security_Osquery_API_Description: - type: string - Security_Osquery_API_DescriptionOrUndefined: - $ref: '#/components/schemas/Security_Osquery_API_Description' - nullable: true Security_Osquery_API_ECSMapping: additionalProperties: $ref: '#/components/schemas/Security_Osquery_API_ECSMappingItem' + description: Map osquery results columns or static values to Elastic Common Schema (ECS) fields + example: + host.uptime: + field: total_seconds type: object Security_Osquery_API_ECSMappingItem: type: object properties: field: + description: The ECS field to map to. + example: host.uptime type: string value: + description: The value to map to the ECS field. + example: total_seconds oneOf: - type: string - items: @@ -60937,71 +61594,197 @@ components: $ref: '#/components/schemas/Security_Osquery_API_ECSMapping' nullable: true Security_Osquery_API_Enabled: + description: Enables the pack. + example: true type: boolean Security_Osquery_API_EnabledOrUndefined: $ref: '#/components/schemas/Security_Osquery_API_Enabled' nullable: true - Security_Osquery_API_FindLiveQueryRequestQuery: + Security_Osquery_API_FindLiveQueryDetailsResponse: + example: + data: + '@timestamp': '2022-07-26T09:59:32.220Z' + action_id: 3c42c847-eb30-4452-80e0-728584042334 + agents: + - 16d7caf5-efd2-4212-9b62-73dafc91fa13 + expiration: '2022-07-26T10:04:32.220Z' + queries: + - action_id: 609c4c66-ba3d-43fa-afdd-53e244577aa0 + agents: + - 16d7caf5-efd2-4212-9b62-73dafc91fa13 + docs: 0 + ecs_mapping: + host.uptime: + field: total_seconds + failed: 1 + id: 6724a474-cbba-41ef-a1aa-66aebf0879e2 + pending: 0 + query: select * from uptime; + responded: 1 + saved_query_id: 42ba9c50-0cc5-11ed-aa1d-2b27890bc90d + status: completed + successful: 0 + status: completed + user_id: elastic type: object - properties: - kuery: - $ref: '#/components/schemas/Security_Osquery_API_KueryOrUndefined' - page: - $ref: '#/components/schemas/Security_Osquery_API_PageOrUndefined' - pageSize: - $ref: '#/components/schemas/Security_Osquery_API_PageSizeOrUndefined' - sort: - $ref: '#/components/schemas/Security_Osquery_API_SortOrUndefined' - sortOrder: - $ref: '#/components/schemas/Security_Osquery_API_SortOrderOrUndefined' - Security_Osquery_API_FindPacksRequestQuery: + properties: {} + Security_Osquery_API_FindLiveQueryResponse: + example: + data: + items: + - fields: + '@timestamp': '2023-10-31T00:00:00Z' + action_id: 3c42c847-eb30-4452-80e0-728584042334 + agents: + - 16d7caf5-efd2-4212-9b62-73dafc91fa13 + expiration: '2023-10-31T00:00:00Z' + queries: + - action_id: 609c4c66-ba3d-43fa-afdd-53e244577aa0 + agents: + - 16d7caf5-efd2-4212-9b62-73dafc91fa13 + ecs_mapping: + host.uptime: + field: total_seconds + id: 6724a474-cbba-41ef-a1aa-66aebf0879e2 + query: select * from uptime; + saved_query_id: 42ba9c50-0cc5-11ed-aa1d-2b27890bc90d + user_id: elastic type: object - properties: - page: - $ref: '#/components/schemas/Security_Osquery_API_PageOrUndefined' - pageSize: - $ref: '#/components/schemas/Security_Osquery_API_PageSizeOrUndefined' - sort: - $ref: '#/components/schemas/Security_Osquery_API_SortOrUndefined' - sortOrder: - $ref: '#/components/schemas/Security_Osquery_API_SortOrderOrUndefined' - Security_Osquery_API_FindSavedQueryRequestQuery: + properties: {} + Security_Osquery_API_FindPackResponse: + example: + data: + created_at: '2022-07-25T19:41:10.263Z' + created_by: elastic + description: '' + enabled: true + id: 3c42c847-eb30-4452-80e0-728584042334 + name: test_pack + namespaces: + - default + policy_ids: [] + queries: + uptime: + ecs_mapping: + message: + field: days + interval: 3600 + query: select * from uptime + read_only: false + type: osquery-pack + updated_at: '2022-07-25T20:12:01.455Z' + updated_by: elastic type: object - properties: - page: - $ref: '#/components/schemas/Security_Osquery_API_PageOrUndefined' - pageSize: - $ref: '#/components/schemas/Security_Osquery_API_PageSizeOrUndefined' - sort: - $ref: '#/components/schemas/Security_Osquery_API_SortOrUndefined' - sortOrder: - $ref: '#/components/schemas/Security_Osquery_API_SortOrderOrUndefined' - Security_Osquery_API_GetLiveQueryResultsRequestQuery: + properties: {} + Security_Osquery_API_FindPacksResponse: + example: + data: + - attributes: + created_at: '2023-10-31T00:00:00Z' + created_by: elastic + description: My pack description + enabled: true + name: My Pack + queries: + - ecs_mapping: + - host.uptime: + field: total_seconds + id: uptime + interval: '3600' + query: select * from uptime; + updated_at: '2023-10-31T00:00:00Z' + updated_by: elastic + id: 42ba9c50-0cc5-11ed-aa1d-2b27890bc90d + namespaces: + - default + type: osquery-pack + page: 1 + pageSize: 10 + policy_ids: [] + total: 1 type: object - properties: - kuery: - $ref: '#/components/schemas/Security_Osquery_API_KueryOrUndefined' - page: - $ref: '#/components/schemas/Security_Osquery_API_PageOrUndefined' - pageSize: - $ref: '#/components/schemas/Security_Osquery_API_PageSizeOrUndefined' - sort: - $ref: '#/components/schemas/Security_Osquery_API_SortOrUndefined' - sortOrder: - $ref: '#/components/schemas/Security_Osquery_API_SortOrderOrUndefined' - Security_Osquery_API_Id: - type: string + properties: {} + Security_Osquery_API_FindSavedQueryDetailResponse: + example: + data: + attributes: + created_at: '2022-07-26T09:28:08.597Z' + created_by: elastic + description: Saved query description + ecs_mapping: + host.uptime: + field: total_seconds + id: saved_query_id + interval: '60' + platform: linux,darwin + prebuilt: false + query: select * from uptime; + updated_at: '2022-07-26T09:28:08.597Z' + updated_by: elastic + version: 2.8.0 + coreMigrationVersion: 8.4.0 + id: 3c42c847-eb30-4452-80e0-728584042334 + namespaces: + - default + references: [] + type: osquery-saved-query + updated_at: '2022-07-26T09:28:08.600Z' + version: WzQzMTcsMV0= + type: object + properties: {} + Security_Osquery_API_FindSavedQueryResponse: + example: + data: + - attributes: + created_at: '2022-07-26T09:28:08.597Z' + created_by: elastic + description: Saved query description + ecs_mapping: + host.uptime: + field: total_seconds + id: saved_query_id + interval: '60' + platform: linux,darwin + prebuilt: false + query: select * from uptime; + updated_at: '2022-07-26T09:28:08.597Z' + updated_by: elastic + version: 2.8.0 + id: 42ba9c50-0cc5-11ed-aa1d-2b27890bc90d + namespaces: + - default + type: osquery-saved-query + page: 1 + per_page: 100 + total: 11 + type: object + properties: {} + Security_Osquery_API_GetLiveQueryResultsResponse: + description: The response for getting live query results. + example: + data: + edges: + - {} + - {} + total: 2 + type: object + properties: {} Security_Osquery_API_Interval: + description: An interval, in seconds, on which to run the query. + example: '60' type: string Security_Osquery_API_IntervalOrUndefined: $ref: '#/components/schemas/Security_Osquery_API_Interval' nullable: true Security_Osquery_API_KueryOrUndefined: + description: The kuery to filter the results by. + example: 'agent.id: 16d7caf5-efd2-4212-9b62-73dafc91fa13' nullable: true type: string Security_Osquery_API_ObjectQueries: additionalProperties: $ref: '#/components/schemas/Security_Osquery_API_ObjectQueriesItem' + description: An object of queries. type: object Security_Osquery_API_ObjectQueriesItem: type: object @@ -61009,7 +61792,7 @@ components: ecs_mapping: $ref: '#/components/schemas/Security_Osquery_API_ECSMappingOrUndefined' id: - $ref: '#/components/schemas/Security_Osquery_API_Id' + $ref: '#/components/schemas/Security_Osquery_API_QueryId' platform: $ref: '#/components/schemas/Security_Osquery_API_PlatformOrUndefined' query: @@ -61022,25 +61805,45 @@ components: $ref: '#/components/schemas/Security_Osquery_API_SnapshotOrUndefined' version: $ref: '#/components/schemas/Security_Osquery_API_VersionOrUndefined' + Security_Osquery_API_PackDescription: + description: The pack description. + example: Pack description + type: string + Security_Osquery_API_PackDescriptionOrUndefined: + $ref: '#/components/schemas/Security_Osquery_API_PackDescription' + nullable: true Security_Osquery_API_PackId: + description: The ID of the pack you want to run, retrieve, update, or delete. + example: 3c42c847-eb30-4452-80e0-728584042334 type: string Security_Osquery_API_PackIdOrUndefined: $ref: '#/components/schemas/Security_Osquery_API_PackId' nullable: true Security_Osquery_API_PackName: + description: The pack name. type: string Security_Osquery_API_PageOrUndefined: + description: The page number to return. The default is 1. + example: 1 nullable: true type: integer Security_Osquery_API_PageSizeOrUndefined: + description: The number of results to return per page. The default is 20. + example: 20 nullable: true type: integer Security_Osquery_API_Platform: + description: Restricts the query to a specified platform. The default is all platforms. To specify multiple platforms, use commas. For example, `linux,darwin`. + example: linux,darwin type: string Security_Osquery_API_PlatformOrUndefined: $ref: '#/components/schemas/Security_Osquery_API_Platform' nullable: true Security_Osquery_API_PolicyIds: + description: A list of agents policy IDs. + example: + - policyId1 + - policyId2 items: type: string type: array @@ -61048,16 +61851,33 @@ components: $ref: '#/components/schemas/Security_Osquery_API_PolicyIds' nullable: true Security_Osquery_API_Query: + description: The SQL query you want to run. + example: select * from uptime; + type: string + Security_Osquery_API_QueryId: + description: The ID of the query. + example: 3c42c847-eb30-4452-80e0-728584042334 type: string Security_Osquery_API_QueryOrUndefined: $ref: '#/components/schemas/Security_Osquery_API_Query' nullable: true Security_Osquery_API_Removed: + description: Indicates whether the query is removed. + example: false type: boolean Security_Osquery_API_RemovedOrUndefined: $ref: '#/components/schemas/Security_Osquery_API_Removed' nullable: true + Security_Osquery_API_SavedQueryDescription: + description: The saved query description. + example: Saved query description + type: string + Security_Osquery_API_SavedQueryDescriptionOrUndefined: + $ref: '#/components/schemas/Security_Osquery_API_SavedQueryDescription' + nullable: true Security_Osquery_API_SavedQueryId: + description: The ID of a saved query. + example: 3c42c847-eb30-4452-80e0-728584042334 type: string Security_Osquery_API_SavedQueryIdOrUndefined: $ref: '#/components/schemas/Security_Osquery_API_SavedQueryId' @@ -61065,42 +61885,82 @@ components: Security_Osquery_API_Shards: additionalProperties: type: number + description: An object with shard configuration for policies included in the pack. For each policy, set the shard configuration to a percentage (1–100) of target hosts. + example: + policy_id: 50 type: object Security_Osquery_API_Snapshot: + description: Indicates whether the query is a snapshot. + example: true type: boolean Security_Osquery_API_SnapshotOrUndefined: $ref: '#/components/schemas/Security_Osquery_API_Snapshot' nullable: true Security_Osquery_API_SortOrderOrUndefined: - oneOf: - - nullable: true - type: string - - enum: - - asc - - desc + description: Specifies the sort order. + enum: + - asc + - desc + example: desc + type: string Security_Osquery_API_SortOrUndefined: + default: createdAt + description: The field that is used to sort the results. + example: createdAt nullable: true type: string Security_Osquery_API_UpdatePacksRequestBody: + example: + name: updated_my_pack_name type: object properties: description: - $ref: '#/components/schemas/Security_Osquery_API_DescriptionOrUndefined' + $ref: '#/components/schemas/Security_Osquery_API_PackDescriptionOrUndefined' enabled: $ref: '#/components/schemas/Security_Osquery_API_EnabledOrUndefined' - id: - $ref: '#/components/schemas/Security_Osquery_API_PackId' + name: + $ref: '#/components/schemas/Security_Osquery_API_PackName' policy_ids: $ref: '#/components/schemas/Security_Osquery_API_PolicyIdsOrUndefined' queries: $ref: '#/components/schemas/Security_Osquery_API_ObjectQueries' shards: $ref: '#/components/schemas/Security_Osquery_API_Shards' + Security_Osquery_API_UpdatePacksResponse: + example: + data: + created_at: '2025-02-26T13:37:30.452Z' + created_by: elastic + description: My pack + enabled: true + name: updated_my_pack_name + queries: + ports: + ecs_mapping: + client.port: + field: port + interval: 60 + query: SELECT * FROM listening_ports; + removed: false + snapshot: true + timeout: 120 + saved_object_id: 1c266590-381f-428c-878f-c80c1334f856 + shards: + - key: 47638692-7c4c-4053-aa3e-7186f28df349 + value: 35 + - key: 5e267651-fe50-443e-8d3f-3bbc9171b618 + value: 58 + updated_at: '2025-02-26T13:40:16.297Z' + updated_by: elastic + type: object + properties: {} Security_Osquery_API_UpdateSavedQueryRequestBody: + example: + id: updated_my_saved_query_name type: object properties: description: - $ref: '#/components/schemas/Security_Osquery_API_DescriptionOrUndefined' + $ref: '#/components/schemas/Security_Osquery_API_SavedQueryDescriptionOrUndefined' ecs_mapping: $ref: '#/components/schemas/Security_Osquery_API_ECSMappingOrUndefined' id: @@ -61108,7 +61968,7 @@ components: interval: $ref: '#/components/schemas/Security_Osquery_API_IntervalOrUndefined' platform: - $ref: '#/components/schemas/Security_Osquery_API_DescriptionOrUndefined' + $ref: '#/components/schemas/Security_Osquery_API_PlatformOrUndefined' query: $ref: '#/components/schemas/Security_Osquery_API_QueryOrUndefined' removed: @@ -61117,7 +61977,14 @@ components: $ref: '#/components/schemas/Security_Osquery_API_SnapshotOrUndefined' version: $ref: '#/components/schemas/Security_Osquery_API_VersionOrUndefined' + Security_Osquery_API_UpdateSavedQueryResponse: + example: + data: {} + type: object + properties: {} Security_Osquery_API_Version: + description: Uses the Osquery versions greater than or equal to the specified version string. + example: 1.0.0 type: string Security_Osquery_API_VersionOrUndefined: $ref: '#/components/schemas/Security_Osquery_API_Version' diff --git a/package.json b/package.json index 5df3d78c9f330..793a76488191d 100644 --- a/package.json +++ b/package.json @@ -1539,7 +1539,7 @@ "@kbn/whereis-pkg-cli": "link:packages/kbn-whereis-pkg-cli", "@kbn/yarn-lock-validator": "link:packages/kbn-yarn-lock-validator", "@mapbox/vector-tile": "1.3.1", - "@mswjs/http-middleware": "0.10.1", + "@mswjs/http-middleware": "0.10.3", "@octokit/rest": "^21.1.1", "@parcel/watcher": "^2.1.0", "@playwright/test": "1.49.0", @@ -1808,7 +1808,7 @@ "mochawesome-merge": "^4.3.0", "mock-fs": "^5.1.2", "ms-chromium-edge-driver": "^0.5.1", - "msw": "~2.5.2", + "msw": "~2.7.0", "mutation-observer": "^1.0.3", "native-hdr-histogram": "^1.0.0", "nock": "12.0.3", diff --git a/src/dev/build/tasks/os_packages/docker_generator/run.ts b/src/dev/build/tasks/os_packages/docker_generator/run.ts index 3c35e5d1173e4..295c2da404e96 100644 --- a/src/dev/build/tasks/os_packages/docker_generator/run.ts +++ b/src/dev/build/tasks/os_packages/docker_generator/run.ts @@ -50,7 +50,7 @@ export async function runDockerGenerator( */ if (flags.baseImage === 'wolfi') baseImageName = - 'docker.elastic.co/wolfi/chainguard-base:latest@sha256:c66fdafe581a6ab1668a962015de4ce4666a60ed601d24f019f03bb4aaab8eeb'; + 'docker.elastic.co/wolfi/chainguard-base:latest@sha256:6387bd4c462007eaecaf13a423aea99c8a8452da09244c129703324aa97769c6'; let imageFlavor = ''; if (flags.baseImage === 'wolfi' && !flags.serverless && !flags.cloud) imageFlavor += `-wolfi`; diff --git a/src/platform/packages/shared/kbn-doc-links/src/get_doc_links.ts b/src/platform/packages/shared/kbn-doc-links/src/get_doc_links.ts index 409b4a61dffff..7c06c923af754 100644 --- a/src/platform/packages/shared/kbn-doc-links/src/get_doc_links.ts +++ b/src/platform/packages/shared/kbn-doc-links/src/get_doc_links.ts @@ -171,6 +171,7 @@ export const getDocLinks = ({ kibanaBranch, buildFlavor }: GetDocLinkOptions): D engines: `${ENTERPRISE_SEARCH_DOCS}engines.html`, indexApi: `${ELASTICSEARCH_DOCS}docs-index_.html`, inferenceApiCreate: `${ELASTICSEARCH_DOCS}put-inference-api.html`, + inferenceApisConfigureChunking: `${ELASTICSEARCH_DOCS}inference-apis.html#infer-chunking-config`, ingestionApis: `${ELASTICSEARCH_DOCS}search-with-elasticsearch.html`, ingestPipelines: `${ELASTICSEARCH_DOCS}ingest-pipeline-search.html`, knnSearch: `${ELASTICSEARCH_DOCS}knn-search.html`, diff --git a/src/platform/packages/shared/kbn-doc-links/src/types.ts b/src/platform/packages/shared/kbn-doc-links/src/types.ts index eb13897c5be26..f70a951a3a3a1 100644 --- a/src/platform/packages/shared/kbn-doc-links/src/types.ts +++ b/src/platform/packages/shared/kbn-doc-links/src/types.ts @@ -140,6 +140,7 @@ export interface DocLinks { readonly engines: string; readonly indexApi: string; readonly inferenceApiCreate: string; + readonly inferenceApisConfigureChunking: string; readonly ingestionApis: string; readonly ingestPipelines: string; readonly knnSearch: string; diff --git a/src/platform/packages/shared/kbn-es/src/utils/docker.ts b/src/platform/packages/shared/kbn-es/src/utils/docker.ts index 2c24e4b25c5ae..5a4ec2f0c79c6 100644 --- a/src/platform/packages/shared/kbn-es/src/utils/docker.ts +++ b/src/platform/packages/shared/kbn-es/src/utils/docker.ts @@ -126,14 +126,21 @@ const DOCKER_BASE_CMD = [ ]; const DEFAULT_DOCKER_ESARGS: Array<[string, string]> = [ - ['ES_JAVA_OPTS', '-Xms1536m -Xmx1536m'], - ['ES_LOG_STYLE', 'file'], ['discovery.type', 'single-node'], ['xpack.security.enabled', 'false'], ]; +// Temporary workaround for https://github.com/elastic/elasticsearch/issues/118583 +if (process.arch === 'arm64') { + DEFAULT_DOCKER_ESARGS.push( + ['ES_JAVA_OPTS', '-Xms1536m -Xmx1536m -XX:UseSVE=0'], + ['CLI_JAVA_OPTS', '-XX:UseSVE=0'] + ); +} else { + DEFAULT_DOCKER_ESARGS.push(['ES_JAVA_OPTS', '-Xms1536m -Xmx1536m']); +} export const DOCKER_REPO = `${DOCKER_REGISTRY}/elasticsearch/elasticsearch`; export const DOCKER_TAG = `${pkg.version}-SNAPSHOT`; @@ -173,8 +180,6 @@ const SHARED_SERVERLESS_PARAMS = [ // only allow certain ES args to be overwrote by options const DEFAULT_SERVERLESS_ESARGS: Array<[string, string]> = [ - ['ES_JAVA_OPTS', '-Xms1g -Xmx1g'], - ['ES_LOG_STYLE', 'file'], ['cluster.name', 'stateless'], @@ -212,6 +217,15 @@ const DEFAULT_SERVERLESS_ESARGS: Array<[string, string]> = [ ['xpack.security.transport.ssl.verification_mode', 'certificate'], ]; +// Temporary workaround for https://github.com/elastic/elasticsearch/issues/118583 +if (process.arch === 'arm64') { + DEFAULT_SERVERLESS_ESARGS.push( + ['ES_JAVA_OPTS', '-Xms1g -Xmx1g -XX:UseSVE=0'], + ['CLI_JAVA_OPTS', '-XX:UseSVE=0'] + ); +} else { + DEFAULT_SERVERLESS_ESARGS.push(['ES_JAVA_OPTS', '-Xms1g -Xmx1g']); +} const DEFAULT_SSL_ESARGS: Array<[string, string]> = [ ['xpack.security.http.ssl.enabled', 'true'], diff --git a/src/platform/packages/shared/kbn-ftr-common-functional-services/index.ts b/src/platform/packages/shared/kbn-ftr-common-functional-services/index.ts index 890258ecfeedc..ac57172f85dc5 100644 --- a/src/platform/packages/shared/kbn-ftr-common-functional-services/index.ts +++ b/src/platform/packages/shared/kbn-ftr-common-functional-services/index.ts @@ -46,3 +46,4 @@ export { IndexPatternsService } from './services/index_patterns'; export { RandomnessService } from './services/randomness'; export { KibanaSupertestProvider, ElasticsearchSupertestProvider } from './services/supertest'; export { retryForSuccess } from './services/retry/retry_for_success'; +export { SecurityService } from './services/security'; diff --git a/src/platform/packages/shared/kbn-ftr-common-functional-services/services/all.ts b/src/platform/packages/shared/kbn-ftr-common-functional-services/services/all.ts index dd11b2b914b08..aaba4aa6f8ff5 100644 --- a/src/platform/packages/shared/kbn-ftr-common-functional-services/services/all.ts +++ b/src/platform/packages/shared/kbn-ftr-common-functional-services/services/all.ts @@ -21,6 +21,7 @@ import { RandomnessService } from './randomness'; import { SupertestWithoutAuthProvider } from './supertest_without_auth'; import { SamlAuthProvider } from './saml_auth'; import { KibanaSupertestProvider, ElasticsearchSupertestProvider } from './supertest'; +import { SecurityServiceProvider } from './security'; export const services = { es: EsProvider, @@ -38,4 +39,5 @@ export const services = { supertest: KibanaSupertestProvider, esSupertest: ElasticsearchSupertestProvider, supertestWithoutAuth: SupertestWithoutAuthProvider, + security: SecurityServiceProvider, }; diff --git a/src/platform/packages/shared/kbn-ftr-common-functional-ui-services/services/security/index.ts b/src/platform/packages/shared/kbn-ftr-common-functional-services/services/security/index.ts similarity index 100% rename from src/platform/packages/shared/kbn-ftr-common-functional-ui-services/services/security/index.ts rename to src/platform/packages/shared/kbn-ftr-common-functional-services/services/security/index.ts diff --git a/src/platform/packages/shared/kbn-ftr-common-functional-ui-services/services/security/role.ts b/src/platform/packages/shared/kbn-ftr-common-functional-services/services/security/role.ts similarity index 100% rename from src/platform/packages/shared/kbn-ftr-common-functional-ui-services/services/security/role.ts rename to src/platform/packages/shared/kbn-ftr-common-functional-services/services/security/role.ts diff --git a/src/platform/packages/shared/kbn-ftr-common-functional-ui-services/services/security/role_mappings.ts b/src/platform/packages/shared/kbn-ftr-common-functional-services/services/security/role_mappings.ts similarity index 100% rename from src/platform/packages/shared/kbn-ftr-common-functional-ui-services/services/security/role_mappings.ts rename to src/platform/packages/shared/kbn-ftr-common-functional-services/services/security/role_mappings.ts diff --git a/src/platform/packages/shared/kbn-ftr-common-functional-ui-services/services/security/security.ts b/src/platform/packages/shared/kbn-ftr-common-functional-services/services/security/security.ts similarity index 100% rename from src/platform/packages/shared/kbn-ftr-common-functional-ui-services/services/security/security.ts rename to src/platform/packages/shared/kbn-ftr-common-functional-services/services/security/security.ts diff --git a/src/platform/packages/shared/kbn-ftr-common-functional-ui-services/services/security/system_indices_user.ts b/src/platform/packages/shared/kbn-ftr-common-functional-services/services/security/system_indices_user.ts similarity index 100% rename from src/platform/packages/shared/kbn-ftr-common-functional-ui-services/services/security/system_indices_user.ts rename to src/platform/packages/shared/kbn-ftr-common-functional-services/services/security/system_indices_user.ts diff --git a/src/platform/packages/shared/kbn-ftr-common-functional-ui-services/services/security/test_user.ts b/src/platform/packages/shared/kbn-ftr-common-functional-services/services/security/test_user.ts similarity index 91% rename from src/platform/packages/shared/kbn-ftr-common-functional-ui-services/services/security/test_user.ts rename to src/platform/packages/shared/kbn-ftr-common-functional-services/services/security/test_user.ts index d5b9758cdfe55..469ae5adbb72e 100644 --- a/src/platform/packages/shared/kbn-ftr-common-functional-ui-services/services/security/test_user.ts +++ b/src/platform/packages/shared/kbn-ftr-common-functional-services/services/security/test_user.ts @@ -10,8 +10,6 @@ import { format as formatUrl } from 'url'; import supertest from 'supertest'; -import type { Browser } from '../browser'; -import type { TestSubjects } from '../test_subjects'; import { Role } from './role'; import { User } from './user'; import { FtrService, FtrProviderContext } from '../ftr_provider_context'; @@ -23,15 +21,13 @@ export class TestUser extends FtrService { private readonly config = this.ctx.getService('config'); private readonly log = this.ctx.getService('log'); - private readonly browser: Browser | void = + private readonly browser = // browser service is not normally available in common. - this.ctx.hasService('browser') ? (this.ctx.getService('browser' as any) as Browser) : undefined; + this.ctx.hasService('browser') ? this.ctx.getService('browser' as any) : undefined; - private readonly testSubjects: TestSubjects | undefined = + private readonly testSubjects = // testSubject service is not normally available in common. - this.ctx.hasService('testSubjects') - ? (this.ctx.getService('testSubjects' as any) as TestSubjects) - : undefined; + this.ctx.hasService('testSubjects') ? this.ctx.getService('testSubjects' as any) : undefined; constructor( ctx: FtrProviderContext, @@ -129,7 +125,7 @@ export async function createTestUserService(ctx: FtrProviderContext, role: Role, // delete the test_user if present (will it error if the user doesn't exist?) try { - await user.delete(TEST_USER_NAME); + await user.delete(TEST_USER_NAME, { retries: 1 }); } catch (exception) { log.debug('no test user to delete'); } diff --git a/src/platform/packages/shared/kbn-ftr-common-functional-ui-services/services/security/user.ts b/src/platform/packages/shared/kbn-ftr-common-functional-services/services/security/user.ts similarity index 96% rename from src/platform/packages/shared/kbn-ftr-common-functional-ui-services/services/security/user.ts rename to src/platform/packages/shared/kbn-ftr-common-functional-services/services/security/user.ts index 72c046e1c4df4..38cd4357af493 100644 --- a/src/platform/packages/shared/kbn-ftr-common-functional-ui-services/services/security/user.ts +++ b/src/platform/packages/shared/kbn-ftr-common-functional-services/services/security/user.ts @@ -32,11 +32,12 @@ export class User { this.log.debug(`created user ${username}`); } - public async delete(username: string) { + public async delete(username: string, options?: { retries?: number }) { this.log.debug(`deleting user ${username}`); const { data, status, statusText } = await this.kbnClient.request({ path: `/internal/security/users/${username}`, method: 'DELETE', + retries: options?.retries, }); if (status !== 204) { throw new Error( diff --git a/src/platform/packages/shared/kbn-ftr-common-functional-ui-services/index.ts b/src/platform/packages/shared/kbn-ftr-common-functional-ui-services/index.ts index c316ecf7db60e..d7b23ed67b61c 100644 --- a/src/platform/packages/shared/kbn-ftr-common-functional-ui-services/index.ts +++ b/src/platform/packages/shared/kbn-ftr-common-functional-ui-services/index.ts @@ -23,4 +23,3 @@ export { } from './services/remote/network_profiles'; export type { TimeoutOpt } from './types'; export { TestSubjects } from './services/test_subjects'; -export { SecurityService } from './services/security'; diff --git a/src/platform/packages/shared/kbn-ftr-common-functional-ui-services/services/all.ts b/src/platform/packages/shared/kbn-ftr-common-functional-ui-services/services/all.ts index 1f8efc610f8b7..beabb78b6aba6 100644 --- a/src/platform/packages/shared/kbn-ftr-common-functional-ui-services/services/all.ts +++ b/src/platform/packages/shared/kbn-ftr-common-functional-ui-services/services/all.ts @@ -13,7 +13,6 @@ import { FindProvider } from './find'; import { TestSubjects } from './test_subjects'; import { BrowserProvider } from './browser'; import { ToastsService } from './toasts'; -import { SecurityServiceProvider } from './security'; export const services = { retryOnStale: RetryOnStaleProvider, @@ -22,5 +21,4 @@ export const services = { testSubjects: TestSubjects, browser: BrowserProvider, toasts: ToastsService, - security: SecurityServiceProvider, }; diff --git a/src/platform/packages/shared/kbn-management/settings/setting_ids/index.ts b/src/platform/packages/shared/kbn-management/settings/setting_ids/index.ts index 0879cad21b804..2fc4e7e05b0cf 100644 --- a/src/platform/packages/shared/kbn-management/settings/setting_ids/index.ts +++ b/src/platform/packages/shared/kbn-management/settings/setting_ids/index.ts @@ -178,6 +178,8 @@ export const SECURITY_SOLUTION_ENABLE_VISUALIZATIONS_IN_FLYOUT_SETTING = 'securitySolution:enableVisualizationsInFlyout' as const; export const SECURITY_SOLUTION_ENABLE_GRAPH_VISUALIZATION_SETTING = 'securitySolution:enableGraphVisualization' as const; +export const SECURITY_SOLUTION_ENABLE_ASSET_INVENTORY_SETTING = + 'securitySolution:enableAssetInventory' as const; // Timelion settings export const TIMELION_ES_DEFAULT_INDEX_ID = 'timelion:es.default_index'; diff --git a/src/platform/packages/shared/kbn-unified-data-table/src/utils/popularize_field.test.ts b/src/platform/packages/shared/kbn-unified-data-table/src/utils/popularize_field.test.ts index 1fae23709117c..682eb4485aa57 100644 --- a/src/platform/packages/shared/kbn-unified-data-table/src/utils/popularize_field.test.ts +++ b/src/platform/packages/shared/kbn-unified-data-table/src/utils/popularize_field.test.ts @@ -81,6 +81,31 @@ describe('Popularize field', () => { expect(field.count).toEqual(1); }); + test('should increment', async () => { + const field = { + count: 5, + }; + const dataView = { + id: 'id', + fields: { + getByName: () => field, + }, + setFieldCount: jest.fn().mockImplementation((fieldName, count) => { + field.count = count; + }), + isPersisted: () => true, + } as unknown as DataView; + const fieldName = '@timestamp'; + const updateSavedObjectMock = jest.fn(); + const dataViewsService = { + updateSavedObject: updateSavedObjectMock, + } as unknown as DataViewsContract; + const result = await popularizeField(dataView, fieldName, dataViewsService, capabilities); + expect(result).toBeUndefined(); + expect(updateSavedObjectMock).toHaveBeenCalled(); + expect(field.count).toEqual(6); + }); + test('hides errors', async () => { const field = { count: 0, diff --git a/src/platform/packages/shared/response-ops/rule_form/src/rule_actions/rule_actions_connectors_body.test.tsx b/src/platform/packages/shared/response-ops/rule_form/src/rule_actions/rule_actions_connectors_body.test.tsx index 0ac987016ff0e..298c7d2590fb5 100644 --- a/src/platform/packages/shared/response-ops/rule_form/src/rule_actions/rule_actions_connectors_body.test.tsx +++ b/src/platform/packages/shared/response-ops/rule_form/src/rule_actions/rule_actions_connectors_body.test.tsx @@ -97,4 +97,44 @@ describe('ruleActionsConnectorsBody', () => { }) ); }); + + test('filters out when no connector matched action type id', async () => { + const actionTypeRegistry = new TypeRegistry(); + actionTypeRegistry.register(getActionTypeModel('1', { id: 'actionType-1' })); + + useRuleFormState.mockReturnValue({ + plugins: { + actionTypeRegistry, + }, + formData: { + actions: [], + }, + connectors: [ + ...mockConnectors, + { + id: `connector-foobar-1`, + secrets: { secret: 'secret' }, + actionTypeId: `actionType-foobar`, + name: `connector-foobar`, + config: { config: `config-foobar-1` }, + isPreconfigured: true, + isSystemAction: false, + isDeprecated: false, + }, + ], + connectorTypes: mockActionTypes, + aadTemplateFields: [], + selectedRuleType: { + defaultActionGroupId: 'default', + }, + }); + useRuleFormDispatch.mockReturnValue(mockOnChange); + render(); + + expect(screen.queryByText('connector-foobar')).not.toBeInTheDocument(); + expect(screen.queryByText('connector-2')).not.toBeInTheDocument(); + + expect(await screen.findAllByTestId('ruleActionsConnectorsModalCard')).toHaveLength(1); + expect(await screen.findByText('connector-1')).toBeInTheDocument(); + }); }); diff --git a/src/platform/packages/shared/response-ops/rule_form/src/rule_actions/rule_actions_connectors_body.tsx b/src/platform/packages/shared/response-ops/rule_form/src/rule_actions/rule_actions_connectors_body.tsx index a454856864fec..b5f39b7d179cc 100644 --- a/src/platform/packages/shared/response-ops/rule_form/src/rule_actions/rule_actions_connectors_body.tsx +++ b/src/platform/packages/shared/response-ops/rule_form/src/rule_actions/rule_actions_connectors_body.tsx @@ -126,13 +126,18 @@ export const RuleActionsConnectorsBody = ({ const availableConnectors = useMemo(() => { return connectors.filter(({ actionTypeId }) => { const actionType = connectorTypes.find(({ id }) => id === actionTypeId); + + if (!actionTypeRegistry.has(actionTypeId)) { + return false; + } + const actionTypeModel = actionTypeRegistry.get(actionTypeId); if (!actionType) { return false; } - if (!actionTypeModel.actionParamsFields) { + if (!actionTypeModel?.actionParamsFields) { return false; } diff --git a/src/platform/packages/shared/serverless/settings/security_project/index.ts b/src/platform/packages/shared/serverless/settings/security_project/index.ts index 20157d92fa899..b5ec91446f333 100644 --- a/src/platform/packages/shared/serverless/settings/security_project/index.ts +++ b/src/platform/packages/shared/serverless/settings/security_project/index.ts @@ -25,4 +25,5 @@ export const SECURITY_PROJECT_SETTINGS = [ settings.SECURITY_SOLUTION_DEFAULT_ALERT_TAGS_KEY, settings.SECURITY_SOLUTION_ENABLE_VISUALIZATIONS_IN_FLYOUT_SETTING, settings.SECURITY_SOLUTION_ENABLE_GRAPH_VISUALIZATION_SETTING, + settings.SECURITY_SOLUTION_ENABLE_ASSET_INVENTORY_SETTING, ]; diff --git a/src/platform/plugins/private/kibana_usage_collection/server/collectors/management/schema.ts b/src/platform/plugins/private/kibana_usage_collection/server/collectors/management/schema.ts index 5d988c516136b..628519b780d52 100644 --- a/src/platform/plugins/private/kibana_usage_collection/server/collectors/management/schema.ts +++ b/src/platform/plugins/private/kibana_usage_collection/server/collectors/management/schema.ts @@ -138,6 +138,10 @@ export const stackManagementSchema: MakeSchemaFrom = { type: 'boolean', _meta: { description: 'Non-default value of setting.' }, }, + 'securitySolution:enableAssetInventory': { + type: 'boolean', + _meta: { description: 'Non-default value of setting.' }, + }, 'search:includeFrozen': { type: 'boolean', _meta: { description: 'Non-default value of setting.' }, diff --git a/src/platform/plugins/private/kibana_usage_collection/server/collectors/management/types.ts b/src/platform/plugins/private/kibana_usage_collection/server/collectors/management/types.ts index ef5e5dfebf357..1da2832f22d84 100644 --- a/src/platform/plugins/private/kibana_usage_collection/server/collectors/management/types.ts +++ b/src/platform/plugins/private/kibana_usage_collection/server/collectors/management/types.ts @@ -73,6 +73,7 @@ export interface UsageStats { 'securitySolution:enableCcsWarning': boolean; 'securitySolution:enableVisualizationsInFlyout': boolean; 'securitySolution:enableGraphVisualization': boolean; + 'securitySolution:enableAssetInventory': boolean; 'search:includeFrozen': boolean; 'courier:maxConcurrentShardRequests': number; 'courier:setRequestPreference': string; diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_listing/hooks/use_dashboard_listing_table.tsx b/src/platform/plugins/shared/dashboard/public/dashboard_listing/hooks/use_dashboard_listing_table.tsx index 3422cd23c67c1..57009767b3514 100644 --- a/src/platform/plugins/shared/dashboard/public/dashboard_listing/hooks/use_dashboard_listing_table.tsx +++ b/src/platform/plugins/shared/dashboard/public/dashboard_listing/hooks/use_dashboard_listing_table.tsx @@ -217,6 +217,7 @@ export const useDashboardListingTable = ({ options: { // include only tags references in the response to save bandwidth includeReferences: ['tag'], + fields: ['title', 'description', 'timeRestore'], }, }) .then(({ total, hits }) => { diff --git a/src/platform/plugins/shared/dashboard/server/api/register_routes.ts b/src/platform/plugins/shared/dashboard/server/api/register_routes.ts index 6cdd8704cf46e..3a7eb3fa9c6ff 100644 --- a/src/platform/plugins/shared/dashboard/server/api/register_routes.ts +++ b/src/platform/plugins/shared/dashboard/server/api/register_routes.ts @@ -237,7 +237,15 @@ export function registerAPIRoutes({ let result; try { // TODO add filtering - ({ result } = await client.search({ cursor: page.toString(), limit })); + ({ result } = await client.search( + { + cursor: page.toString(), + limit, + }, + { + fields: ['title', 'description', 'timeRestore'], + } + )); } catch (e) { if (e.isBoom && e.output.statusCode === 403) { return res.forbidden(); diff --git a/src/platform/plugins/shared/dashboard/server/content_management/dashboard_storage.ts b/src/platform/plugins/shared/dashboard/server/content_management/dashboard_storage.ts index d113d509f5e89..53590b412f161 100644 --- a/src/platform/plugins/shared/dashboard/server/content_management/dashboard_storage.ts +++ b/src/platform/plugins/shared/dashboard/server/content_management/dashboard_storage.ts @@ -40,11 +40,12 @@ const searchArgsToSOFindOptions = ( return { type: DASHBOARD_SAVED_OBJECT_TYPE, searchFields: options?.onlyTitle ? ['title'] : ['title^3', 'description'], - fields: options?.fields ?? ['title', 'description', 'timeRestore'], + fields: options?.fields, search: query.text, perPage: query.limit, page: query.cursor ? +query.cursor : undefined, defaultSearchOperator: 'AND', + namespaces: options?.spaces, ...tagsToFindOptions(query.tags), }; }; diff --git a/src/platform/plugins/shared/dashboard/server/content_management/v3/cm_services.ts b/src/platform/plugins/shared/dashboard/server/content_management/v3/cm_services.ts index 78b13b43322e1..b2d0c55e1f9d3 100644 --- a/src/platform/plugins/shared/dashboard/server/content_management/v3/cm_services.ts +++ b/src/platform/plugins/shared/dashboard/server/content_management/v3/cm_services.ts @@ -456,6 +456,14 @@ export const dashboardSearchOptionsSchema = schema.maybe( kuery: schema.maybe(schema.string()), cursor: schema.maybe(schema.number()), limit: schema.maybe(schema.number()), + spaces: schema.maybe( + schema.arrayOf(schema.string(), { + meta: { + description: + 'An array of spaces to search or "*" to search all spaces. Defaults to the current space if not specified.', + }, + }) + ), }, { unknowns: 'forbid' } ) diff --git a/src/platform/plugins/shared/dashboard/server/plugin.ts b/src/platform/plugins/shared/dashboard/server/plugin.ts index a102fb39eaf34..37183897c0a1c 100644 --- a/src/platform/plugins/shared/dashboard/server/plugin.ts +++ b/src/platform/plugins/shared/dashboard/server/plugin.ts @@ -47,6 +47,7 @@ interface StartDeps { export class DashboardPlugin implements Plugin { + private contentClient?: ReturnType['contentClient']; private readonly logger: Logger; constructor(private initializerContext: PluginInitializerContext) { @@ -64,7 +65,7 @@ export class DashboardPlugin }) ); - plugins.contentManagement.register({ + const { contentClient } = plugins.contentManagement.register({ id: CONTENT_ID, storage: new DashboardStorage({ throwOnResultValidationError: this.initializerContext.env.mode.dev, @@ -74,6 +75,7 @@ export class DashboardPlugin latest: LATEST_VERSION, }, }); + this.contentClient = contentClient; plugins.contentManagement.favorites.registerFavoriteType('dashboard'); @@ -136,7 +138,9 @@ export class DashboardPlugin }); } - return {}; + return { + contentClient: this.contentClient, + }; } public stop() {} diff --git a/src/platform/plugins/shared/dashboard/server/types.ts b/src/platform/plugins/shared/dashboard/server/types.ts index 389f5d3c6227c..05358b2bd69b7 100644 --- a/src/platform/plugins/shared/dashboard/server/types.ts +++ b/src/platform/plugins/shared/dashboard/server/types.ts @@ -7,7 +7,46 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ +import { ContentManagementServerSetup } from '@kbn/content-management-plugin/server'; + // eslint-disable-next-line @typescript-eslint/no-empty-interface export interface DashboardPluginSetup {} -// eslint-disable-next-line @typescript-eslint/no-empty-interface -export interface DashboardPluginStart {} +export interface DashboardPluginStart { + /** + * Use contentClient.getForRequest to get a scoped client to perform CRUD and search operations for dashboards using the methods available in the {@link DashboardStorage} class. + * + * @example + * Get a dashboard client for the current request + * ```ts + * // dashboardClient is scoped to the current user + * // specifying the version is recommended to return a consistent result + * const dashboardClient = plugins.dashboard.contentClient.getForRequest({ requestHandlerContext, request, version: 3 }); + * + * const { search, create, update, delete: deleteDashboard } = dashboardClient; + * ``` + * + * @example + * Search using {@link DashboardStorage#search} + * ```ts + * const dashboardList = await search({ text: 'my dashboard' }, { spaces: ['default'] } }); + * ``` + * @example + * Create a new dashboard using {@link DashboardCreateIn} + * ```ts + * const newDashboard = await create({ attributes: { title: 'My Dashboard' } }); + * ``` + * + * @example + * Update an existing dashboard using {@link DashboardUpdateIn} + * ```ts + * const updatedDashboard = await update({ id: 'dashboard-id', attributes: { title: 'My Updated Dashboard' } }); + * ``` + * + * @example + * Delete an existing dashboard using {@link DashboardDeleteIn} + * ```ts + * deleteDashboard({ id: 'dashboard-id' }); + * ``` + */ + contentClient?: ReturnType['contentClient']; +} diff --git a/src/platform/plugins/shared/data/public/query/timefilter/timefilter.ts b/src/platform/plugins/shared/data/public/query/timefilter/timefilter.ts index 5cd4355160d06..915ee19dd8412 100644 --- a/src/platform/plugins/shared/data/public/query/timefilter/timefilter.ts +++ b/src/platform/plugins/shared/data/public/query/timefilter/timefilter.ts @@ -25,6 +25,7 @@ import { } from '../../../common'; import { TimeHistoryContract } from './time_history'; import { createAutoRefreshLoop, AutoRefreshDoneFn } from './lib/auto_refresh_loop'; +import { TimefilterHook, createUseTimefilterHook } from './use_timefilter'; export type { AutoRefreshDoneFn }; @@ -52,6 +53,8 @@ export class Timefilter { private readonly timeDefaults: TimeRange; private readonly refreshIntervalDefaults: RefreshInterval; + public readonly useTimefilter: () => TimefilterHook; + // Used when an auto refresh is triggered private readonly autoRefreshLoop = createAutoRefreshLoop(); @@ -73,6 +76,8 @@ export class Timefilter { this._minRefreshInterval = config.minRefreshIntervalDefault; this._time = config.timeDefaults; this.setRefreshInterval(config.refreshIntervalDefaults); + + this.useTimefilter = createUseTimefilterHook(this); } public isTimeRangeSelectorEnabled() { diff --git a/src/platform/plugins/shared/data/public/query/timefilter/timefilter_service.mock.ts b/src/platform/plugins/shared/data/public/query/timefilter/timefilter_service.mock.ts index 4f8af76f01e3f..c3bc37c9c9e17 100644 --- a/src/platform/plugins/shared/data/public/query/timefilter/timefilter_service.mock.ts +++ b/src/platform/plugins/shared/data/public/query/timefilter/timefilter_service.mock.ts @@ -42,6 +42,7 @@ const createSetupContractMock = () => { getRefreshIntervalDefaults: jest.fn(), getTimeDefaults: jest.fn(), getAbsoluteTime: jest.fn(), + useTimefilter: jest.fn(), }; const historyMock: jest.Mocked = { diff --git a/src/platform/plugins/shared/data/public/query/timefilter/use_timefilter.test.tsx b/src/platform/plugins/shared/data/public/query/timefilter/use_timefilter.test.tsx new file mode 100644 index 0000000000000..88b551b676d65 --- /dev/null +++ b/src/platform/plugins/shared/data/public/query/timefilter/use_timefilter.test.tsx @@ -0,0 +1,113 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import { act, renderHook } from '@testing-library/react'; +import { Subject } from 'rxjs'; +import { createUseTimefilterHook } from './use_timefilter'; +import { TimeRange } from '@kbn/es-query'; + +describe('useTimefilter hook', () => { + const timeUpdateSubject = new Subject(); + + const initialTimeRange: TimeRange = { + from: 'now-1d', + to: 'now', + }; + + const initialAbsoluteTimeRange = { + from: '2020-01-01T00:00:00Z', + to: '2020-01-02T00:00:00Z', + }; + + // Track the current time range in the mock + let currentTimeRange = { ...initialTimeRange }; + + const mockTimefilter = { + getTime: jest.fn().mockImplementation(() => currentTimeRange), + getAbsoluteTime: jest.fn().mockReturnValue(initialAbsoluteTimeRange), + setTime: jest.fn().mockImplementation((timeRange) => { + currentTimeRange = timeRange; + }), + getTimeUpdate$: jest.fn().mockReturnValue(timeUpdateSubject), + }; + + const useTimefilter = createUseTimefilterHook(mockTimefilter as any); + + beforeEach(() => { + jest.clearAllMocks(); + // Reset the current time range for each test + currentTimeRange = { ...initialTimeRange }; + }); + + test('time range and absolute time range should have the right values', () => { + const { result } = renderHook(() => useTimefilter()); + + expect(result.current.timeRange).toEqual(initialTimeRange); + expect(result.current.absoluteTimeRange).toEqual({ + start: new Date(initialAbsoluteTimeRange.from).getTime(), + end: new Date(initialAbsoluteTimeRange.to).getTime(), + }); + }); + + test('hook should rerender when the time update gets updated', () => { + const { result } = renderHook(() => useTimefilter()); + + const updatedTimeRange = { + from: '2021-01-01T00:00:00Z', + to: '2021-01-02T00:00:00Z', + }; + + const updatedAbsoluteTimeRange = { + from: '2021-01-01T00:00:00Z', + to: '2021-01-02T00:00:00Z', + }; + + // Update the current time range for the mock + currentTimeRange = updatedTimeRange; + mockTimefilter.getAbsoluteTime.mockReturnValue(updatedAbsoluteTimeRange); + + act(() => { + timeUpdateSubject.next(); + }); + + expect(result.current.timeRange).toEqual(updatedTimeRange); + expect(result.current.absoluteTimeRange).toEqual({ + start: new Date(updatedAbsoluteTimeRange.from).getTime(), + end: new Date(updatedAbsoluteTimeRange.to).getTime(), + }); + }); + + test('setTimeRange should call through correctly', () => { + const { result } = renderHook(() => useTimefilter()); + + const newTimeRange = { + from: '2022-01-01T00:00:00Z', + to: '2022-01-02T00:00:00Z', + }; + + act(() => { + result.current.setTimeRange(newTimeRange); + }); + + expect(mockTimefilter.setTime).toHaveBeenCalledWith(newTimeRange); + + // Test with callback form + act(() => { + result.current.setTimeRange((prevRange) => ({ + ...prevRange, + from: '2022-02-01T00:00:00Z', + })); + }); + + expect(mockTimefilter.setTime).toHaveBeenCalledWith({ + ...newTimeRange, + from: '2022-02-01T00:00:00Z', + }); + }); +}); diff --git a/src/platform/plugins/shared/data/public/query/timefilter/use_timefilter.ts b/src/platform/plugins/shared/data/public/query/timefilter/use_timefilter.ts new file mode 100644 index 0000000000000..5935648b2934a --- /dev/null +++ b/src/platform/plugins/shared/data/public/query/timefilter/use_timefilter.ts @@ -0,0 +1,67 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the "Elastic License + * 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side + * Public License v 1"; you may not use this file except in compliance with, at + * your election, the "Elastic License 2.0", the "GNU Affero General Public + * License v3.0 only", or the "Server Side Public License, v 1". + */ + +import { TimeRange } from '@kbn/es-query'; +import { useCallback, useEffect, useMemo, useState } from 'react'; +import type { Timefilter } from './timefilter'; + +export interface TimefilterHook { + timeRange: TimeRange; + absoluteTimeRange: { + start: number; + end: number; + }; + setTimeRange: React.Dispatch>; +} + +export function createUseTimefilterHook(timefilter: Timefilter) { + return function useTimefilter(): TimefilterHook { + const [timeRange, setTimeRange] = useState(() => timefilter.getTime()); + + const [absoluteTimeRange, setAbsoluteTimeRange] = useState(() => timefilter.getAbsoluteTime()); + + useEffect(() => { + const timeUpdateSubscription = timefilter.getTimeUpdate$().subscribe({ + next: () => { + setTimeRange(() => timefilter.getTime()); + setAbsoluteTimeRange(() => timefilter.getAbsoluteTime()); + }, + }); + + return () => { + timeUpdateSubscription.unsubscribe(); + }; + }, []); + + const setTimeRangeMemoized: React.Dispatch> = useCallback( + (nextOrCallback) => { + const val = + typeof nextOrCallback === 'function' + ? nextOrCallback(timefilter.getTime()) + : nextOrCallback; + + timefilter.setTime(val); + }, + [] + ); + + const asEpoch = useMemo(() => { + return { + start: new Date(absoluteTimeRange.from).getTime(), + end: new Date(absoluteTimeRange.to).getTime(), + }; + }, [absoluteTimeRange]); + + return { + timeRange, + absoluteTimeRange: asEpoch, + setTimeRange: setTimeRangeMemoized, + }; + }; +} diff --git a/src/platform/plugins/shared/data_view_field_editor/__jest__/client_integration/field_editor_flyout_content.test.ts b/src/platform/plugins/shared/data_view_field_editor/__jest__/client_integration/field_editor_flyout_content.test.ts index 04cfd8d980250..34b0e899e9374 100644 --- a/src/platform/plugins/shared/data_view_field_editor/__jest__/client_integration/field_editor_flyout_content.test.ts +++ b/src/platform/plugins/shared/data_view_field_editor/__jest__/client_integration/field_editor_flyout_content.test.ts @@ -62,6 +62,7 @@ describe('', () => { script: { source: 'emit(true)' }, customLabel: 'cool demo test field', format: { id: 'boolean' }, + popularity: 1, }; const { find } = await setup({ fieldToCreate }); @@ -70,6 +71,7 @@ describe('', () => { expect(find('nameField.input').props().value).toBe(fieldToCreate.name); expect(find('typeField').props().value).toBe(fieldToCreate.type); expect(find('scriptField').props().value).toBe(fieldToCreate.script.source); + expect(find('editorFieldCount').props().value).toBe(fieldToCreate.popularity.toString()); }); test('should accept an "onSave" prop', async () => { @@ -172,6 +174,26 @@ describe('', () => { script: { source: 'echo("hello")' }, format: null, }); + + await toggleFormRow('popularity'); + await fields.updatePopularity('5'); + + await waitForUpdates(); + + await act(async () => { + find('fieldSaveButton').simulate('click'); + jest.advanceTimersByTime(0); // advance timers to allow the form to validate + }); + + fieldReturned = onSave.mock.calls[onSave.mock.calls.length - 1][0]; + + expect(fieldReturned).toEqual({ + name: 'someName', + type: 'date', + script: { source: 'echo("hello")' }, + format: null, + popularity: 5, + }); }); test('should not block validation if no documents could be fetched from server', async () => { diff --git a/src/platform/plugins/shared/data_view_field_editor/__jest__/client_integration/helpers/common_actions.ts b/src/platform/plugins/shared/data_view_field_editor/__jest__/client_integration/helpers/common_actions.ts index ac5d580be8ee2..11e78cc3aa621 100644 --- a/src/platform/plugins/shared/data_view_field_editor/__jest__/client_integration/helpers/common_actions.ts +++ b/src/platform/plugins/shared/data_view_field_editor/__jest__/client_integration/helpers/common_actions.ts @@ -42,7 +42,7 @@ export const waitForUpdates = async (testBed?: TestBed) => { export const getCommonActions = (testBed: TestBed) => { const toggleFormRow = async ( - row: 'customLabel' | 'customDescription' | 'value' | 'format', + row: 'customLabel' | 'customDescription' | 'value' | 'format' | 'popularity', value: 'on' | 'off' = 'on' ) => { const testSubj = `${row}Row.toggle`; @@ -102,6 +102,15 @@ export const getCommonActions = (testBed: TestBed) => { testBed.component.update(); }; + const updatePopularity = async (value: string) => { + await act(async () => { + testBed.form.setInputValue('editorFieldCount', value); + jest.advanceTimersByTime(0); // advance timers to allow the form to validate + }); + + testBed.component.update(); + }; + const getScriptError = () => { const scriptError = testBed.component.find('#runtimeFieldScript-error-0'); @@ -123,6 +132,7 @@ export const getCommonActions = (testBed: TestBed) => { updateType, updateScript, updateFormat, + updatePopularity, getScriptError, }, }; diff --git a/src/platform/plugins/shared/data_view_field_editor/public/components/field_editor/field_editor.tsx b/src/platform/plugins/shared/data_view_field_editor/public/components/field_editor/field_editor.tsx index 2210c66182c75..c3a9058b1b860 100644 --- a/src/platform/plugins/shared/data_view_field_editor/public/components/field_editor/field_editor.tsx +++ b/src/platform/plugins/shared/data_view_field_editor/public/components/field_editor/field_editor.tsx @@ -43,9 +43,11 @@ export interface FieldEditorFormState { submit: FormHook['submit']; } -export interface FieldFormInternal extends Omit { +export interface FieldFormInternal + extends Omit { fields?: Record; type: TypeSelection; + popularity?: string; __meta__: { isCustomLabelVisible: boolean; isCustomDescriptionVisible: boolean; @@ -84,6 +86,7 @@ const formDeserializer = (field: Field): FieldFormInternal => { return { ...field, + popularity: typeof field.popularity === 'number' ? String(field.popularity) : field.popularity, type: fieldType, format, __meta__: { @@ -97,12 +100,15 @@ const formDeserializer = (field: Field): FieldFormInternal => { }; const formSerializer = (field: FieldFormInternal): Field => { - const { __meta__, type, format, ...rest } = field; + const { __meta__, type, format, popularity, ...rest } = field; + return { type: type && type[0].value!, // By passing "null" we are explicitly telling DataView to remove the // format if there is one defined for the field. format: format === undefined ? null : format, + // convert from the input string value into a number + popularity: typeof popularity === 'string' ? Number(popularity) || 0 : popularity, ...rest, }; }; diff --git a/src/platform/plugins/shared/data_view_field_editor/public/open_editor.tsx b/src/platform/plugins/shared/data_view_field_editor/public/open_editor.tsx index 363ebb4c98615..be90ece04b6fc 100644 --- a/src/platform/plugins/shared/data_view_field_editor/public/open_editor.tsx +++ b/src/platform/plugins/shared/data_view_field_editor/public/open_editor.tsx @@ -130,10 +130,17 @@ export const getFieldEditorOpener = }; }; - const dataViewLazy = - dataViewLazyOrNot instanceof DataViewLazy - ? dataViewLazyOrNot - : await dataViews.toDataViewLazy(dataViewLazyOrNot); + let dataViewLazy: DataViewLazy; + + if (dataViewLazyOrNot instanceof DataViewLazy) { + dataViewLazy = dataViewLazyOrNot; + } else { + if (dataViewLazyOrNot.id) { + // force cache reset to have the latest field attributes + dataViews.clearDataViewLazyCache(dataViewLazyOrNot.id); + } + dataViewLazy = await dataViews.toDataViewLazy(dataViewLazyOrNot); + } const dataViewField = fieldNameToEdit ? (await dataViewLazy.getFieldByName(fieldNameToEdit, true)) || diff --git a/src/platform/plugins/shared/data_views/common/data_views/__snapshots__/data_views.test.ts.snap b/src/platform/plugins/shared/data_views/common/data_views/__snapshots__/data_views.test.ts.snap index 1b2939aefb53c..7ea6cafaaacbc 100644 --- a/src/platform/plugins/shared/data_views/common/data_views/__snapshots__/data_views.test.ts.snap +++ b/src/platform/plugins/shared/data_views/common/data_views/__snapshots__/data_views.test.ts.snap @@ -21,6 +21,25 @@ FldList [ "subType": undefined, "type": "string", }, + Object { + "aggregatable": true, + "conflictDescriptions": undefined, + "count": 50, + "customDescription": undefined, + "customLabel": undefined, + "defaultFormatter": undefined, + "esTypes": Array [ + "keyword", + ], + "lang": undefined, + "name": "wrongCountType", + "readFromDocValues": false, + "script": undefined, + "scripted": false, + "searchable": true, + "subType": undefined, + "type": "string", + }, ] `; @@ -39,6 +58,9 @@ Object { "count": 5, "customLabel": "A Runtime Field", }, + "wrongCountType": Object { + "count": 50, + }, }, "fieldFormats": Object { "field": Object {}, @@ -54,6 +76,12 @@ Object { }, "type": "keyword", }, + "wrongCountType": Object { + "script": Object { + "source": "emit('test')", + }, + "type": "keyword", + }, }, "sourceFilters": Array [ Object { diff --git a/src/platform/plugins/shared/data_views/common/data_views/abstract_data_views.ts b/src/platform/plugins/shared/data_views/common/data_views/abstract_data_views.ts index 2ad3f04fffc3e..6da94426c960d 100644 --- a/src/platform/plugins/shared/data_views/common/data_views/abstract_data_views.ts +++ b/src/platform/plugins/shared/data_views/common/data_views/abstract_data_views.ts @@ -365,8 +365,15 @@ export abstract class AbstractDataView { getAsSavedObjectBody(): DataViewAttributes { const stringifyOrUndefined = (obj: any) => (obj ? JSON.stringify(obj) : undefined); + const fieldAttrsWithValues: Record = {}; + this.fieldAttrs.forEach((attrs, fieldName) => { + if (Object.keys(attrs).length) { + fieldAttrsWithValues[fieldName] = attrs; + } + }); + return { - fieldAttrs: stringifyOrUndefined(Object.fromEntries(this.fieldAttrs.entries())), + fieldAttrs: stringifyOrUndefined(fieldAttrsWithValues), title: this.getIndexPattern(), timeFieldName: this.timeFieldName, sourceFilters: stringifyOrUndefined(this.sourceFilters), @@ -382,8 +389,10 @@ export abstract class AbstractDataView { } protected toSpecShared(includeFields = true): DataViewSpec { + // `cloneDeep` is added to make sure that the original fieldAttrs map is not modified with the following `delete` operation. + const fieldAttrs = cloneDeep(Object.fromEntries(this.fieldAttrs.entries())); + // if fields aren't included, don't include count - const fieldAttrs = Object.fromEntries(this.fieldAttrs.entries()); if (!includeFields) { Object.keys(fieldAttrs).forEach((key) => { delete fieldAttrs[key].count; diff --git a/src/platform/plugins/shared/data_views/common/data_views/data_view.test.ts b/src/platform/plugins/shared/data_views/common/data_views/data_view.test.ts index ebb148bdb2740..a3b10132be9cf 100644 --- a/src/platform/plugins/shared/data_views/common/data_views/data_view.test.ts +++ b/src/platform/plugins/shared/data_views/common/data_views/data_view.test.ts @@ -396,6 +396,22 @@ describe('IndexPattern', () => { indexPattern.removeRuntimeField(newField); }); + test('add and remove a popularity score from a runtime field', () => { + const newField = 'new_field_test'; + indexPattern.addRuntimeField(newField, { + ...runtimeWithAttrs, + popularity: 10, + }); + expect(indexPattern.getFieldByName(newField)?.count).toEqual(10); + indexPattern.setFieldCount(newField, 20); + expect(indexPattern.getFieldByName(newField)?.count).toEqual(20); + indexPattern.setFieldCount(newField, null); + expect(indexPattern.getFieldByName(newField)?.count).toEqual(0); + indexPattern.setFieldCount(newField, undefined); + expect(indexPattern.getFieldByName(newField)?.count).toEqual(0); + indexPattern.removeRuntimeField(newField); + }); + test('add and remove composite runtime field as new fields', () => { const fieldCount = indexPattern.fields.length; indexPattern.addRuntimeField('new_field', runtimeCompositeWithAttrs); @@ -505,6 +521,19 @@ describe('IndexPattern', () => { const dataView2 = create('test2', spec); expect(dataView1.sourceFilters).not.toBe(dataView2.sourceFilters); }); + + test('getting spec without fields does not modify fieldAttrs', () => { + const fieldAttrs = { bytes: { count: 5, customLabel: 'test_bytes' }, agent: { count: 1 } }; + const dataView = new DataView({ + fieldFormats: fieldFormatsMock, + spec: { + fieldAttrs, + }, + }); + const spec = dataView.toSpec(false); + expect(spec.fieldAttrs).toEqual({ bytes: { customLabel: fieldAttrs.bytes.customLabel } }); + expect(JSON.parse(dataView.getAsSavedObjectBody().fieldAttrs!)).toEqual(fieldAttrs); + }); }); describe('should initialize from spec with field attributes', () => { diff --git a/src/platform/plugins/shared/data_views/common/data_views/data_view_lazy.test.ts b/src/platform/plugins/shared/data_views/common/data_views/data_view_lazy.test.ts index 213abaad1fd68..598cd62b58fe6 100644 --- a/src/platform/plugins/shared/data_views/common/data_views/data_view_lazy.test.ts +++ b/src/platform/plugins/shared/data_views/common/data_views/data_view_lazy.test.ts @@ -480,6 +480,23 @@ describe('DataViewLazy', () => { dataViewLazy.removeRuntimeField(newField); }); + test('add and remove a popularity score from a runtime field', async () => { + const newField = 'new_field_test'; + fieldCapsResponse = []; + dataViewLazy.addRuntimeField(newField, { + ...runtimeWithAttrs, + popularity: 10, + }); + expect((await dataViewLazy.getFieldByName(newField))?.count).toEqual(10); + dataViewLazy.setFieldCount(newField, 20); + expect((await dataViewLazy.getFieldByName(newField))?.count).toEqual(20); + dataViewLazy.setFieldCount(newField, null); + expect((await dataViewLazy.getFieldByName(newField))?.count).toEqual(0); + dataViewLazy.setFieldCount(newField, undefined); + expect((await dataViewLazy.getFieldByName(newField))?.count).toEqual(0); + dataViewLazy.removeRuntimeField(newField); + }); + test('add and remove composite runtime field as new fields', async () => { const fieldMap = (await dataViewLazy.getFields({ fieldName: ['*'] })).getFieldMap(); const fieldCount = Object.values(fieldMap).length; diff --git a/src/platform/plugins/shared/data_views/common/data_views/data_views.test.ts b/src/platform/plugins/shared/data_views/common/data_views/data_views.test.ts index 94f4c9ccceedc..523f2633f411c 100644 --- a/src/platform/plugins/shared/data_views/common/data_views/data_views.test.ts +++ b/src/platform/plugins/shared/data_views/common/data_views/data_views.test.ts @@ -51,8 +51,9 @@ const savedObject = { typeMeta: '{}', type: '', runtimeFieldMap: - '{"aRuntimeField": { "type": "keyword", "script": {"source": "emit(\'hello\')"}}}', - fieldAttrs: '{"aRuntimeField": { "count": 5, "customLabel": "A Runtime Field"}}', + '{"aRuntimeField": { "type": "keyword", "script": {"source": "emit(\'hello\')"}}, "wrongCountType": { "type": "keyword", "script": {"source": "emit(\'test\')"}}}', + fieldAttrs: + '{"aRuntimeField": { "count": 5, "customLabel": "A Runtime Field" }, "wrongCountType": { "count": "50" }}', }, type: 'index-pattern', references: [], @@ -682,6 +683,23 @@ describe('IndexPatterns', () => { expect(attrs.fieldFormatMap).toMatchInlineSnapshot(`"{}"`); }); + test('gets the correct field attrs', async () => { + const id = 'id'; + setDocsourcePayload(id, savedObject); + const dataView = await indexPatterns.get(id); + expect(dataView.getFieldByName('aRuntimeField')).toEqual( + expect.objectContaining({ + count: 5, + customLabel: 'A Runtime Field', + }) + ); + expect(dataView.getFieldByName('wrongCountType')).toEqual( + expect.objectContaining({ + count: 50, + }) + ); + }); + describe('defaultDataViewExists', () => { beforeEach(() => { indexPatterns.clearCache(); diff --git a/src/platform/plugins/shared/data_views/common/data_views/data_views.ts b/src/platform/plugins/shared/data_views/common/data_views/data_views.ts index 7886012dc01a0..63137e9d5a1b2 100644 --- a/src/platform/plugins/shared/data_views/common/data_views/data_views.ts +++ b/src/platform/plugins/shared/data_views/common/data_views/data_views.ts @@ -147,6 +147,11 @@ export interface DataViewsServicePublicMethods { */ clearInstanceCache: (id?: string) => void; + /** + * Clear the cache of lazy data view instances. + */ + clearDataViewLazyCache: (id: string) => void; + /** * Create data view based on the provided spec. * @param spec - Data view spec. @@ -523,6 +528,13 @@ export class DataViewsService { } }; + /** + * Clear instance in data view lazy cache + */ + clearDataViewLazyCache = (id: string) => { + this.dataViewLazyCache.delete(id); + }; + /** * Get cache, contains data view saved objects. */ @@ -821,6 +833,16 @@ export class DataViewsService { ? JSON.parse(runtimeFieldMap) : {}; + if (parsedFieldAttrs) { + Object.keys(parsedFieldAttrs).forEach((fieldName) => { + const parsedFieldAttr = parsedFieldAttrs?.[fieldName]; + // Because of https://github.com/elastic/kibana/issues/211109 bug, the persisted "count" data can be polluted and have string type. + if (parsedFieldAttr && typeof parsedFieldAttr.count === 'string') { + parsedFieldAttr.count = Number(parsedFieldAttr.count) || 0; + } + }); + } + return { id, version, @@ -893,9 +915,6 @@ export class DataViewsService { refreshFields: boolean = false ): Promise => { const spec = this.savedObjectToSpec(savedObject); - spec.fieldAttrs = savedObject.attributes.fieldAttrs - ? JSON.parse(savedObject.attributes.fieldAttrs) - : {}; let fields: Record = {}; let indices: string[] = []; diff --git a/src/platform/plugins/shared/telemetry/schema/oss_platform.json b/src/platform/plugins/shared/telemetry/schema/oss_platform.json index 487f404ab135f..f47ddf0bff13e 100644 --- a/src/platform/plugins/shared/telemetry/schema/oss_platform.json +++ b/src/platform/plugins/shared/telemetry/schema/oss_platform.json @@ -10505,6 +10505,12 @@ "description": "Non-default value of setting." } }, + "securitySolution:enableAssetInventory": { + "type": "boolean", + "_meta": { + "description": "Non-default value of setting." + } + }, "search:includeFrozen": { "type": "boolean", "_meta": { diff --git a/test/common/services/index.ts b/test/common/services/index.ts index c3fcdda2cf937..89b0e62a07e8a 100644 --- a/test/common/services/index.ts +++ b/test/common/services/index.ts @@ -8,7 +8,6 @@ */ import { commonFunctionalServices } from '@kbn/ftr-common-functional-services'; -import { commonFunctionalUIServices } from '@kbn/ftr-common-functional-ui-services'; // pick only services that work for any FTR config, e.g. 'samlAuth' requires SAML setup in config file const { @@ -26,11 +25,9 @@ const { supertest, esSupertest, supertestWithoutAuth, + security, } = commonFunctionalServices; -// pick what was there previously -const { security } = commonFunctionalUIServices; - export const services = { es, esArchiver, diff --git a/test/functional/apps/discover/group6/_sidebar.ts b/test/functional/apps/discover/group6/_sidebar.ts index 6413859fa27f8..1267a9f49b07f 100644 --- a/test/functional/apps/discover/group6/_sidebar.ts +++ b/test/functional/apps/discover/group6/_sidebar.ts @@ -343,6 +343,32 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { await expectFieldListDescription( '3 selected fields. 3 popular fields. 48 available fields. 5 empty fields. 4 meta fields.' ); + + await unifiedFieldList.clickFieldListItemRemove('@message'); + await discover.waitUntilSearchingHasFinished(); + await unifiedFieldList.clickFieldListItemRemove('extension'); + await discover.waitUntilSearchingHasFinished(); + await discover.addRuntimeField('test', `emit('test')`, undefined, 30); + await discover.waitUntilSearchingHasFinished(); + + expect((await unifiedFieldList.getSidebarSectionFieldNames('popular')).join(', ')).to.be( + 'test, @message, extension, _id' + ); + + await expectFieldListDescription( + '1 selected field. 4 popular fields. 49 available fields. 5 empty fields. 4 meta fields.' + ); + + await unifiedFieldList.clickFieldListItemAdd('bytes'); + await discover.waitUntilSearchingHasFinished(); + + expect((await unifiedFieldList.getSidebarSectionFieldNames('popular')).join(', ')).to.be( + 'test, @message, extension, _id, bytes' + ); + + await expectFieldListDescription( + '2 selected fields. 5 popular fields. 49 available fields. 5 empty fields. 4 meta fields.' + ); }); it('should show selected and available fields in ES|QL mode', async function () { diff --git a/test/functional/apps/management/data_views/_index_pattern_popularity.ts b/test/functional/apps/management/data_views/_index_pattern_popularity.ts index 9077b9ee23938..80b5e2cab5853 100644 --- a/test/functional/apps/management/data_views/_index_pattern_popularity.ts +++ b/test/functional/apps/management/data_views/_index_pattern_popularity.ts @@ -66,5 +66,25 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { log.debug('popularity = ' + popularity); expect(popularity).to.be('1'); }); + + it('changing popularity for one field does not affect the other', async function () { + expect(await PageObjects.settings.getPopularity()).to.be('1'); + await PageObjects.settings.setPopularity(5); + await PageObjects.settings.controlChangeSave(); + + await PageObjects.settings.openControlsByName('bytes'); + expect(await PageObjects.settings.getPopularity()).to.be('0'); + await testSubjects.click('toggleAdvancedSetting'); + await PageObjects.settings.setPopularity(7); + await PageObjects.settings.controlChangeSave(); + + await browser.refresh(); + + await PageObjects.settings.openControlsByName('geo.coordinates'); + expect(await PageObjects.settings.getPopularity()).to.be('5'); + await PageObjects.settings.closeIndexPatternFieldEditor(); + await PageObjects.settings.openControlsByName('bytes'); + expect(await PageObjects.settings.getPopularity()).to.be('7'); + }); }); // end 'change popularity' } diff --git a/test/functional/page_objects/discover_page.ts b/test/functional/page_objects/discover_page.ts index 1f5945ff379f3..f10db871ea6eb 100644 --- a/test/functional/page_objects/discover_page.ts +++ b/test/functional/page_objects/discover_page.ts @@ -690,7 +690,7 @@ export class DiscoverPageObject extends FtrService { } } - public async addRuntimeField(name: string, script: string, type?: string) { + public async addRuntimeField(name: string, script: string, type?: string, popularity?: number) { await this.dataViews.clickAddFieldFromSearchBar(); await this.fieldEditor.setName(name); if (type) { @@ -698,6 +698,9 @@ export class DiscoverPageObject extends FtrService { } await this.fieldEditor.enableValue(); await this.fieldEditor.typeScript(script); + if (popularity) { + await this.fieldEditor.setPopularity(popularity); + } await this.fieldEditor.save(); await this.header.waitUntilLoadingHasFinished(); } diff --git a/test/functional/page_objects/settings_page.ts b/test/functional/page_objects/settings_page.ts index c08eb75bcf1d1..8fa6946b4b47b 100644 --- a/test/functional/page_objects/settings_page.ts +++ b/test/functional/page_objects/settings_page.ts @@ -412,8 +412,14 @@ export class SettingsPageObject extends FtrService { }); } + async setPopularity(value: number) { + await this.testSubjects.setValue('editorFieldCount', String(value), { + clearWithKeyboard: true, + }); + } + async increasePopularity() { - await this.testSubjects.setValue('editorFieldCount', '1', { clearWithKeyboard: true }); + await this.setPopularity(Number(await this.getPopularity()) + 1); } async getPopularity() { diff --git a/test/functional/services/field_editor.ts b/test/functional/services/field_editor.ts index 0739159bcf913..5d8e3793e6f7f 100644 --- a/test/functional/services/field_editor.ts +++ b/test/functional/services/field_editor.ts @@ -34,6 +34,13 @@ export class FieldEditorService extends FtrService { public async setCustomDescription(description: string) { await this.testSubjects.setValue('customDescriptionRow > input', description); } + public async setPopularity(value: number) { + await this.testSubjects.click('toggleAdvancedSetting'); + await this.testSubjects.setEuiSwitch('popularityRow > toggle', 'check'); + await this.testSubjects.setValue('editorFieldCount', String(value), { + clearWithKeyboard: true, + }); + } public async getFormError() { const alert = await this.find.byCssSelector( '[data-test-subj=indexPatternFieldEditorForm] > [role="alert"]' diff --git a/versions.json b/versions.json index f476cd16a8253..6ac4632e52054 100644 --- a/versions.json +++ b/versions.json @@ -34,7 +34,7 @@ "previousMajor": true }, { - "version": "7.17.28", + "version": "7.17.29", "branch": "7.17" } ] diff --git a/x-pack/.i18nrc.json b/x-pack/.i18nrc.json index 283de84693275..03dfa7c160188 100644 --- a/x-pack/.i18nrc.json +++ b/x-pack/.i18nrc.json @@ -151,7 +151,8 @@ "xpack.securitySolutionServerless": "solutions/security/plugins/security_solution_serverless", "xpack.sessionView": "solutions/security/plugins/session_view", "xpack.streams": [ - "solutions/observability/plugins/streams_app" + "solutions/observability/plugins/observability_streams_wrapper", + "platform/plugins/shared/streams_app" ], "xpack.slo": "solutions/observability/plugins/slo", "xpack.snapshotRestore": "platform/plugins/private/snapshot_restore", @@ -186,4 +187,4 @@ "@kbn/translations-plugin/translations/ja-JP.json", "@kbn/translations-plugin/translations/fr-FR.json" ] -} \ No newline at end of file +} diff --git a/x-pack/platform/packages/shared/kbn-ai-assistant/src/chat/conversation_list.tsx b/x-pack/platform/packages/shared/kbn-ai-assistant/src/chat/conversation_list.tsx index 0b634f8ee9f7f..643e4479b4fa3 100644 --- a/x-pack/platform/packages/shared/kbn-ai-assistant/src/chat/conversation_list.tsx +++ b/x-pack/platform/packages/shared/kbn-ai-assistant/src/chat/conversation_list.tsx @@ -73,13 +73,13 @@ export function ConversationList({ const { element: confirmDeleteElement, confirm: confirmDeleteCallback } = useConfirmModal({ title: i18n.translate('xpack.aiAssistant.flyout.confirmDeleteConversationTitle', { - defaultMessage: 'Delete this conversation?', + defaultMessage: 'Delete conversation', }), children: i18n.translate('xpack.aiAssistant.flyout.confirmDeleteConversationContent', { - defaultMessage: 'This action cannot be undone.', + defaultMessage: 'This action is permanent and cannot be undone.', }), confirmButtonText: i18n.translate('xpack.aiAssistant.flyout.confirmDeleteButtonText', { - defaultMessage: 'Delete conversation', + defaultMessage: 'Delete', }), }); @@ -169,7 +169,15 @@ export function ConversationList({ } ), onClick: () => { - confirmDeleteCallback().then((confirmed) => { + confirmDeleteCallback( + i18n.translate( + 'xpack.aiAssistant.flyout.confirmDeleteCheckboxLabel', + { + defaultMessage: 'Delete "{title}"', + values: { title: conversation.label }, + } + ) + ).then((confirmed) => { if (!confirmed) { return; } diff --git a/x-pack/platform/packages/shared/kbn-ai-assistant/src/hooks/use_confirm_modal.tsx b/x-pack/platform/packages/shared/kbn-ai-assistant/src/hooks/use_confirm_modal.tsx index e1cff9175be4c..a62bdbc01dccf 100644 --- a/x-pack/platform/packages/shared/kbn-ai-assistant/src/hooks/use_confirm_modal.tsx +++ b/x-pack/platform/packages/shared/kbn-ai-assistant/src/hooks/use_confirm_modal.tsx @@ -4,9 +4,59 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ + import React from 'react'; -import { EuiConfirmModal } from '@elastic/eui'; +import { EuiCheckbox, EuiConfirmModal, EuiText } from '@elastic/eui'; import { useState } from 'react'; +import { css } from '@emotion/css'; + +const ConfirmModal = ({ + checkboxLabel, + onClose, + title, + children, + confirmButtonText, + setElement, +}: { + checkboxLabel: string; + onClose: (confirmed: boolean) => void; + title: React.ReactNode; + children: React.ReactNode; + confirmButtonText: React.ReactNode; + setElement: (element: React.ReactNode | undefined) => void; +}) => { + const [isChecked, setIsChecked] = useState(false); + + return ( + { + onClose(true); + setElement(undefined); + }} + onCancel={() => { + onClose(false); + setElement(undefined); + }} + confirmButtonText={confirmButtonText} + cancelButtonText="Cancel" + buttonColor="danger" + confirmButtonDisabled={!isChecked} + maxWidth + > + {children} + setIsChecked(e.target.checked)} + className={css` + margin-top: 15px; + `} + /> + + ); +}; export function useConfirmModal({ title, @@ -16,27 +66,26 @@ export function useConfirmModal({ title: React.ReactNode; children: React.ReactNode; confirmButtonText: React.ReactNode; -}) { +}): { + element: React.ReactNode | undefined; + confirm: (checkBoxLabel: string) => Promise; +} { const [element, setElement] = useState(undefined); - const confirm = () => { + const confirm = (checkboxLabel: string) => { return new Promise((resolve) => { - setElement( - { - resolve(true); - setElement(undefined); - }} - onCancel={() => { - resolve(false); - setElement(undefined); - }} - confirmButtonText={confirmButtonText} - > - {children} - - ); + setElement(() => { + return ( + + ); + }); }); }; diff --git a/x-pack/platform/packages/shared/kbn-elastic-assistant-common/impl/schemas/actions_connector/post_actions_connector_execute_route.gen.ts b/x-pack/platform/packages/shared/kbn-elastic-assistant-common/impl/schemas/actions_connector/post_actions_connector_execute_route.gen.ts index 7a184fa28916f..c527e5f990eba 100644 --- a/x-pack/platform/packages/shared/kbn-elastic-assistant-common/impl/schemas/actions_connector/post_actions_connector_execute_route.gen.ts +++ b/x-pack/platform/packages/shared/kbn-elastic-assistant-common/impl/schemas/actions_connector/post_actions_connector_execute_route.gen.ts @@ -16,7 +16,7 @@ import { z } from '@kbn/zod'; -import { NonEmptyString } from '../common_attributes.gen'; +import { NonEmptyString, ScreenContext } from '../common_attributes.gen'; import { Replacements } from '../conversations/common_attributes.gen'; export type ExecuteConnectorRequestParams = z.infer; @@ -42,6 +42,7 @@ export const ExecuteConnectorRequestBody = z.object({ size: z.number().optional(), langSmithProject: z.string().optional(), langSmithApiKey: z.string().optional(), + screenContext: ScreenContext.optional(), }); export type ExecuteConnectorRequestBodyInput = z.input; diff --git a/x-pack/platform/packages/shared/kbn-elastic-assistant-common/impl/schemas/actions_connector/post_actions_connector_execute_route.schema.yaml b/x-pack/platform/packages/shared/kbn-elastic-assistant-common/impl/schemas/actions_connector/post_actions_connector_execute_route.schema.yaml index aa9f2aa8d879d..fc3d45f9f2610 100644 --- a/x-pack/platform/packages/shared/kbn-elastic-assistant-common/impl/schemas/actions_connector/post_actions_connector_execute_route.schema.yaml +++ b/x-pack/platform/packages/shared/kbn-elastic-assistant-common/impl/schemas/actions_connector/post_actions_connector_execute_route.schema.yaml @@ -62,6 +62,8 @@ paths: type: string langSmithApiKey: type: string + screenContext: + $ref: '../common_attributes.schema.yaml#/components/schemas/ScreenContext' responses: '200': description: Successful static response diff --git a/x-pack/platform/packages/shared/kbn-elastic-assistant-common/impl/schemas/common_attributes.gen.ts b/x-pack/platform/packages/shared/kbn-elastic-assistant-common/impl/schemas/common_attributes.gen.ts index a49d6bc6e41b7..9ab5f4c155391 100644 --- a/x-pack/platform/packages/shared/kbn-elastic-assistant-common/impl/schemas/common_attributes.gen.ts +++ b/x-pack/platform/packages/shared/kbn-elastic-assistant-common/impl/schemas/common_attributes.gen.ts @@ -48,3 +48,14 @@ export type SortOrder = z.infer; export const SortOrder = z.enum(['asc', 'desc']); export type SortOrderEnum = typeof SortOrder.enum; export const SortOrderEnum = SortOrder.enum; + +/** + * User screen context + */ +export type ScreenContext = z.infer; +export const ScreenContext = z.object({ + /** + * The local timezone of the user + */ + timeZone: z.string().optional(), +}); diff --git a/x-pack/platform/packages/shared/kbn-elastic-assistant-common/impl/schemas/common_attributes.schema.yaml b/x-pack/platform/packages/shared/kbn-elastic-assistant-common/impl/schemas/common_attributes.schema.yaml index b400548631ed1..37d2c07957ae3 100644 --- a/x-pack/platform/packages/shared/kbn-elastic-assistant-common/impl/schemas/common_attributes.schema.yaml +++ b/x-pack/platform/packages/shared/kbn-elastic-assistant-common/impl/schemas/common_attributes.schema.yaml @@ -33,3 +33,11 @@ components: enum: - 'asc' - 'desc' + + ScreenContext: + description: User screen context + type: object + properties: + timeZone: + description: The local timezone of the user + type: string diff --git a/x-pack/platform/packages/shared/kbn-elastic-assistant-common/impl/schemas/evaluation/post_evaluate_route.gen.ts b/x-pack/platform/packages/shared/kbn-elastic-assistant-common/impl/schemas/evaluation/post_evaluate_route.gen.ts index a0cbc22282c7b..586b5b4a3559c 100644 --- a/x-pack/platform/packages/shared/kbn-elastic-assistant-common/impl/schemas/evaluation/post_evaluate_route.gen.ts +++ b/x-pack/platform/packages/shared/kbn-elastic-assistant-common/impl/schemas/evaluation/post_evaluate_route.gen.ts @@ -17,6 +17,7 @@ import { z } from '@kbn/zod'; import { Replacements } from '../conversations/common_attributes.gen'; +import { ScreenContext } from '../common_attributes.gen'; export type PostEvaluateBody = z.infer; export const PostEvaluateBody = z.object({ @@ -29,6 +30,7 @@ export const PostEvaluateBody = z.object({ langSmithApiKey: z.string().optional(), langSmithProject: z.string().optional(), replacements: Replacements.optional().default({}), + screenContext: ScreenContext.optional(), size: z.number().optional().default(20), }); diff --git a/x-pack/platform/packages/shared/kbn-elastic-assistant-common/impl/schemas/evaluation/post_evaluate_route.schema.yaml b/x-pack/platform/packages/shared/kbn-elastic-assistant-common/impl/schemas/evaluation/post_evaluate_route.schema.yaml index 071d80156890b..ac13d6e6ad902 100644 --- a/x-pack/platform/packages/shared/kbn-elastic-assistant-common/impl/schemas/evaluation/post_evaluate_route.schema.yaml +++ b/x-pack/platform/packages/shared/kbn-elastic-assistant-common/impl/schemas/evaluation/post_evaluate_route.schema.yaml @@ -79,6 +79,8 @@ components: replacements: $ref: "../conversations/common_attributes.schema.yaml#/components/schemas/Replacements" default: {} + screenContext: + $ref: '../common_attributes.schema.yaml#/components/schemas/ScreenContext' size: type: number default: 20 diff --git a/x-pack/platform/packages/shared/kbn-elastic-assistant/impl/assistant/api/index.test.tsx b/x-pack/platform/packages/shared/kbn-elastic-assistant/impl/assistant/api/index.test.tsx index 495eed1d16d60..8c01e30242c78 100644 --- a/x-pack/platform/packages/shared/kbn-elastic-assistant/impl/assistant/api/index.test.tsx +++ b/x-pack/platform/packages/shared/kbn-elastic-assistant/impl/assistant/api/index.test.tsx @@ -42,6 +42,9 @@ const fetchConnectorArgs: FetchConnectorExecuteAction = { message: 'This is a test', conversationId: 'test', replacements: {}, + screenContext: { + timeZone: 'America/New_York', + }, }; const streamingDefaults = { method: 'POST', @@ -73,7 +76,7 @@ describe('API tests', () => { '/internal/elastic_assistant/actions/connector/foo/_execute', { ...staticDefaults, - body: '{"model":"gpt-4","message":"This is a test","subAction":"invokeAI","conversationId":"test","actionTypeId":".gen-ai","replacements":{}}', + body: '{"model":"gpt-4","message":"This is a test","subAction":"invokeAI","conversationId":"test","actionTypeId":".gen-ai","replacements":{},"screenContext":{"timeZone":"America/New_York"}}', } ); }); @@ -85,7 +88,7 @@ describe('API tests', () => { '/internal/elastic_assistant/actions/connector/foo/_execute', { ...streamingDefaults, - body: '{"model":"gpt-4","message":"This is a test","subAction":"invokeStream","conversationId":"test","actionTypeId":".gen-ai","replacements":{}}', + body: '{"model":"gpt-4","message":"This is a test","subAction":"invokeStream","conversationId":"test","actionTypeId":".gen-ai","replacements":{},"screenContext":{"timeZone":"America/New_York"}}', } ); }); @@ -102,7 +105,7 @@ describe('API tests', () => { '/internal/elastic_assistant/actions/connector/foo/_execute', { ...streamingDefaults, - body: '{"message":"This is a test","subAction":"invokeStream","conversationId":"test","actionTypeId":".bedrock","replacements":{}}', + body: '{"message":"This is a test","subAction":"invokeStream","conversationId":"test","actionTypeId":".bedrock","replacements":{},"screenContext":{"timeZone":"America/New_York"}}', } ); }); @@ -119,7 +122,7 @@ describe('API tests', () => { '/internal/elastic_assistant/actions/connector/foo/_execute', { ...streamingDefaults, - body: '{"message":"This is a test","subAction":"invokeStream","conversationId":"test","actionTypeId":".gemini","replacements":{}}', + body: '{"message":"This is a test","subAction":"invokeStream","conversationId":"test","actionTypeId":".gemini","replacements":{},"screenContext":{"timeZone":"America/New_York"}}', } ); }); @@ -136,7 +139,7 @@ describe('API tests', () => { '/internal/elastic_assistant/actions/connector/foo/_execute', { ...streamingDefaults, - body: '{"message":"This is a test","subAction":"invokeStream","conversationId":"test","actionTypeId":".bedrock","replacements":{}}', + body: '{"message":"This is a test","subAction":"invokeStream","conversationId":"test","actionTypeId":".bedrock","replacements":{},"screenContext":{"timeZone":"America/New_York"}}', } ); }); @@ -156,7 +159,7 @@ describe('API tests', () => { '/internal/elastic_assistant/actions/connector/foo/_execute', { ...staticDefaults, - body: '{"model":"gpt-4","message":"This is a test","subAction":"invokeAI","conversationId":"test","actionTypeId":".gen-ai","replacements":{"auuid":"real.hostname"},"alertsIndexPattern":".alerts-security.alerts-default","size":30}', + body: '{"model":"gpt-4","message":"This is a test","subAction":"invokeAI","conversationId":"test","actionTypeId":".gen-ai","replacements":{"auuid":"real.hostname"},"screenContext":{"timeZone":"America/New_York"},"alertsIndexPattern":".alerts-security.alerts-default","size":30}', } ); }); diff --git a/x-pack/platform/packages/shared/kbn-elastic-assistant/impl/assistant/api/index.tsx b/x-pack/platform/packages/shared/kbn-elastic-assistant/impl/assistant/api/index.tsx index 88c5727ee0963..f522c22549cdc 100644 --- a/x-pack/platform/packages/shared/kbn-elastic-assistant/impl/assistant/api/index.tsx +++ b/x-pack/platform/packages/shared/kbn-elastic-assistant/impl/assistant/api/index.tsx @@ -9,8 +9,9 @@ import { HttpSetup } from '@kbn/core/public'; import { API_VERSIONS, ApiConfig, - MessageMetadata, Replacements, + ScreenContext, + MessageMetadata, } from '@kbn/elastic-assistant-common'; import { API_ERROR } from '../translations'; import { getOptionalRequestParams } from '../helpers'; @@ -29,6 +30,7 @@ export interface FetchConnectorExecuteAction { signal?: AbortSignal | undefined; size?: number; traceOptions?: TraceOptions; + screenContext: ScreenContext; } export interface FetchConnectorExecuteResponse { @@ -53,6 +55,7 @@ export const fetchConnectorExecuteAction = async ({ signal, size, traceOptions, + screenContext, }: FetchConnectorExecuteAction): Promise => { // TODO add streaming support for gemini with langchain on const isStream = assistantStreamingEnabled; @@ -73,6 +76,7 @@ export const fetchConnectorExecuteAction = async ({ traceOptions?.langSmithProject === '' ? undefined : traceOptions?.langSmithProject, langSmithApiKey: traceOptions?.langSmithApiKey === '' ? undefined : traceOptions?.langSmithApiKey, + screenContext, ...optionalRequestParams, }; diff --git a/x-pack/platform/packages/shared/kbn-elastic-assistant/impl/assistant/api/knowledge_base/use_knowledge_base_status.tsx b/x-pack/platform/packages/shared/kbn-elastic-assistant/impl/assistant/api/knowledge_base/use_knowledge_base_status.tsx index 3ae89edc2a912..e3d3a2065b98a 100644 --- a/x-pack/platform/packages/shared/kbn-elastic-assistant/impl/assistant/api/knowledge_base/use_knowledge_base_status.tsx +++ b/x-pack/platform/packages/shared/kbn-elastic-assistant/impl/assistant/api/knowledge_base/use_knowledge_base_status.tsx @@ -79,7 +79,7 @@ export const useInvalidateKnowledgeBaseStatus = () => { return useCallback(() => { queryClient.invalidateQueries(KNOWLEDGE_BASE_STATUS_QUERY_KEY, { - refetchType: 'active', + refetchType: 'all', }); }, [queryClient]); }; diff --git a/x-pack/platform/packages/shared/kbn-elastic-assistant/impl/assistant/settings/evaluation_settings/evaluation_settings.tsx b/x-pack/platform/packages/shared/kbn-elastic-assistant/impl/assistant/settings/evaluation_settings/evaluation_settings.tsx index 5e15dfcd4c8c4..b7e22185e46c0 100644 --- a/x-pack/platform/packages/shared/kbn-elastic-assistant/impl/assistant/settings/evaluation_settings/evaluation_settings.tsx +++ b/x-pack/platform/packages/shared/kbn-elastic-assistant/impl/assistant/settings/evaluation_settings/evaluation_settings.tsx @@ -34,6 +34,7 @@ import type { } from '@kbn/elastic-assistant-common'; import { isEmpty } from 'lodash/fp'; +import moment from 'moment'; import * as i18n from './translations'; import { useAssistantContext } from '../../../assistant_context'; import { DEFAULT_ATTACK_DISCOVERY_MAX_ALERTS } from '../../../assistant_context/constants'; @@ -210,6 +211,9 @@ export const EvaluationSettings: React.FC = React.memo(() => { langSmithProject, runName, size: Number(size), + screenContext: { + timeZone: moment.tz.guess(), + }, }; performEvaluation(evalParams); }, [ diff --git a/x-pack/platform/packages/shared/kbn-elastic-assistant/impl/assistant/use_send_message/index.tsx b/x-pack/platform/packages/shared/kbn-elastic-assistant/impl/assistant/use_send_message/index.tsx index 438b2282371d9..0c76048066301 100644 --- a/x-pack/platform/packages/shared/kbn-elastic-assistant/impl/assistant/use_send_message/index.tsx +++ b/x-pack/platform/packages/shared/kbn-elastic-assistant/impl/assistant/use_send_message/index.tsx @@ -8,6 +8,7 @@ import { HttpSetup } from '@kbn/core-http-browser'; import { useCallback, useRef, useState } from 'react'; import { ApiConfig, Replacements } from '@kbn/elastic-assistant-common'; +import moment from 'moment'; import { useAssistantContext } from '../../assistant_context'; import { fetchConnectorExecuteAction, FetchConnectorExecuteResponse } from '../api'; import * as i18n from './translations'; @@ -65,6 +66,9 @@ export const useSendMessage = (): UseSendMessage => { signal: abortController.current.signal, size: knowledgeBase.latestAlerts, traceOptions, + screenContext: { + timeZone: moment.tz.guess(), + }, }); } finally { clearTimeout(timeoutId); diff --git a/x-pack/platform/plugins/private/translations/translations/fr-FR.json b/x-pack/platform/plugins/private/translations/translations/fr-FR.json index f65bb3b21a6af..d1b3412d7f664 100644 --- a/x-pack/platform/plugins/private/translations/translations/fr-FR.json +++ b/x-pack/platform/plugins/private/translations/translations/fr-FR.json @@ -20103,7 +20103,6 @@ "xpack.idxMgmt.indexDetails.mappings.mappingsViewButtonGroupAriaLabel": "Groupe de bouton de l'affichage des mappings", "xpack.idxMgmt.indexDetails.mappings.reloadButtonLabel": "Recharger", "xpack.idxMgmt.indexDetails.mappings.saveMappings": "Enregistrer les mappings", - "xpack.idxMgmt.indexDetails.mappings.semanticTextBanner.description": "{label} Ajoutez un champ à votre mapping et choisissez \"Semantic text\" pour commencer.", "xpack.idxMgmt.indexDetails.mappings.semanticTextBanner.descriptionForPlatinumLicense": "{label} Mettez à niveau votre licence pour ajouter les types de champ semantic_text à vos index.\"", "xpack.idxMgmt.indexDetails.mappings.semanticTextBanner.dismiss": "Rejeter", "xpack.idxMgmt.indexDetails.mappings.semanticTextBanner.semanticTextFieldAvailable": "Le type de champ semantic_text est maintenant disponible !", @@ -28695,7 +28694,6 @@ "xpack.ml.trainedModels.modelsList.expandedRow.processorsTitle": "Définition", "xpack.ml.trainedModels.modelsList.expandedRow.statsTabLabel": "Statistiques", "xpack.ml.trainedModels.modelsList.expandRow": "Développer", - "xpack.ml.trainedModels.modelsList.fetchDeletionErrorMessage": "La suppression {modelsCount, plural, one {du modèle} other {des modèles}} a échoué", "xpack.ml.trainedModels.modelsList.fetchFailedErrorMessage": "Erreur lors du chargement des modèles entraînés", "xpack.ml.trainedModels.modelsList.forceStopDialog.cancelText": "Annuler", "xpack.ml.trainedModels.modelsList.forceStopDialog.confirmText": "Arrêt", diff --git a/x-pack/platform/plugins/private/translations/translations/ja-JP.json b/x-pack/platform/plugins/private/translations/translations/ja-JP.json index 4f9ca77cf7e36..18c6edbdf1789 100644 --- a/x-pack/platform/plugins/private/translations/translations/ja-JP.json +++ b/x-pack/platform/plugins/private/translations/translations/ja-JP.json @@ -19963,7 +19963,6 @@ "xpack.idxMgmt.indexDetails.mappings.mappingsViewButtonGroupAriaLabel": "マッピングビューボタングループ", "xpack.idxMgmt.indexDetails.mappings.reloadButtonLabel": "再読み込み", "xpack.idxMgmt.indexDetails.mappings.saveMappings": "マッピングを保存", - "xpack.idxMgmt.indexDetails.mappings.semanticTextBanner.description": "{label} 開始するには、フィールドをマッピングに追加して、Semantic_textを選択してください。", "xpack.idxMgmt.indexDetails.mappings.semanticTextBanner.descriptionForPlatinumLicense": "{label} semantic_textフィールド型をインデックスに追加するには、ライセンスをアップグレードしてください。'", "xpack.idxMgmt.indexDetails.mappings.semanticTextBanner.dismiss": "閉じる", "xpack.idxMgmt.indexDetails.mappings.semanticTextBanner.semanticTextFieldAvailable": "semantic_textフィールド型が利用できるようになりました。", @@ -28560,7 +28559,6 @@ "xpack.ml.trainedModels.modelsList.expandedRow.processorsTitle": "定義", "xpack.ml.trainedModels.modelsList.expandedRow.statsTabLabel": "統計", "xpack.ml.trainedModels.modelsList.expandRow": "拡張", - "xpack.ml.trainedModels.modelsList.fetchDeletionErrorMessage": "{modelsCount, plural, other {モデル}}を削除できませんでした", "xpack.ml.trainedModels.modelsList.fetchFailedErrorMessage": "学習済みモデルの読み込みエラー", "xpack.ml.trainedModels.modelsList.forceStopDialog.cancelText": "キャンセル", "xpack.ml.trainedModels.modelsList.forceStopDialog.confirmText": "終了", diff --git a/x-pack/platform/plugins/private/translations/translations/zh-CN.json b/x-pack/platform/plugins/private/translations/translations/zh-CN.json index 897decc519897..bc26887d91071 100644 --- a/x-pack/platform/plugins/private/translations/translations/zh-CN.json +++ b/x-pack/platform/plugins/private/translations/translations/zh-CN.json @@ -19636,7 +19636,6 @@ "xpack.idxMgmt.indexDetails.mappings.mappingsViewButtonGroupAriaLabel": "映射视图按钮组", "xpack.idxMgmt.indexDetails.mappings.reloadButtonLabel": "重新加载", "xpack.idxMgmt.indexDetails.mappings.saveMappings": "保存映射", - "xpack.idxMgmt.indexDetails.mappings.semanticTextBanner.description": "{label} 将字段添加到您的映射并选择'语义文本'以开始使用。", "xpack.idxMgmt.indexDetails.mappings.semanticTextBanner.descriptionForPlatinumLicense": "{label} 升级许可证以将 semantic_text 字段类型添加到您的索引。'", "xpack.idxMgmt.indexDetails.mappings.semanticTextBanner.dismiss": "关闭", "xpack.idxMgmt.indexDetails.mappings.semanticTextBanner.semanticTextFieldAvailable": "semantic_text 字段类型现已可用!", @@ -28114,7 +28113,6 @@ "xpack.ml.trainedModels.modelsList.expandedRow.processorsTitle": "定义", "xpack.ml.trainedModels.modelsList.expandedRow.statsTabLabel": "统计信息", "xpack.ml.trainedModels.modelsList.expandRow": "展开", - "xpack.ml.trainedModels.modelsList.fetchDeletionErrorMessage": "{modelsCount, plural, other {# 个模型}}删除失败", "xpack.ml.trainedModels.modelsList.fetchFailedErrorMessage": "加载已训练模型时出错", "xpack.ml.trainedModels.modelsList.forceStopDialog.cancelText": "取消", "xpack.ml.trainedModels.modelsList.forceStopDialog.confirmText": "停止点", diff --git a/x-pack/platform/plugins/shared/automatic_import/public/components/create_integration/create_automatic_import/flyout/cel_configuration/steps/confirm_settings_step/confirm_settings_step.tsx b/x-pack/platform/plugins/shared/automatic_import/public/components/create_integration/create_automatic_import/flyout/cel_configuration/steps/confirm_settings_step/confirm_settings_step.tsx index 6ea8a2e745919..f845cb6fce84e 100644 --- a/x-pack/platform/plugins/shared/automatic_import/public/components/create_integration/create_automatic_import/flyout/cel_configuration/steps/confirm_settings_step/confirm_settings_step.tsx +++ b/x-pack/platform/plugins/shared/automatic_import/public/components/create_integration/create_automatic_import/flyout/cel_configuration/steps/confirm_settings_step/confirm_settings_step.tsx @@ -216,7 +216,12 @@ export const ConfirmSettingsStep = React.memo( const authOptions = endpointOperation?.prepareSecurity(); const endpointAuth = getAuthDetails(auth, authOptions); - const schemas = reduceSpecComponents(oas, path); + let schemas; + try { + schemas = reduceSpecComponents(oas, path); + } catch (parsingError) { + throw new Error('Error parsing OpenAPI spec for required components'); + } const celRequest: CelInputRequestBody = { dataStreamTitle: integrationSettings.dataStreamTitle ?? '', @@ -273,6 +278,8 @@ export const ConfirmSettingsStep = React.memo( }); setError(errorMessage); + onUpdateValidation(!!errorMessage); + onUpdateNeedsGeneration(true); } finally { setIsFlyoutGenerating(false); } @@ -294,6 +301,7 @@ export const ConfirmSettingsStep = React.memo( setIsFlyoutGenerating, reportCelGenerationComplete, onCelInputGenerationComplete, + onUpdateValidation, ]); const onCancel = useCallback(() => { diff --git a/x-pack/platform/plugins/shared/automatic_import/public/components/create_integration/create_automatic_import/flyout/cel_configuration/steps/upload_spec_step/upload_spec_step.tsx b/x-pack/platform/plugins/shared/automatic_import/public/components/create_integration/create_automatic_import/flyout/cel_configuration/steps/upload_spec_step/upload_spec_step.tsx index 7d25438599aa8..81ed05fe85901 100644 --- a/x-pack/platform/plugins/shared/automatic_import/public/components/create_integration/create_automatic_import/flyout/cel_configuration/steps/upload_spec_step/upload_spec_step.tsx +++ b/x-pack/platform/plugins/shared/automatic_import/public/components/create_integration/create_automatic_import/flyout/cel_configuration/steps/upload_spec_step/upload_spec_step.tsx @@ -131,6 +131,8 @@ export const UploadSpecStep = React.memo( e.body ? ` (${e.body.statusCode}): ${e.body.message}` : '' }`; setError(errorMessage); + onUpdateValidation(!!errorMessage); + onUpdateNeedsGeneration(true); } finally { setIsFlyoutGenerating(false); } @@ -150,6 +152,7 @@ export const UploadSpecStep = React.memo( setIsFlyoutGenerating, dataStreamTitle, onAnalyzeApiGenerationComplete, + onUpdateValidation, ]); const onCancel = useCallback(() => { diff --git a/x-pack/platform/plugins/shared/automatic_import/public/util/oas.test.ts b/x-pack/platform/plugins/shared/automatic_import/public/util/oas.test.ts index eeb21fc39a408..f3289a422248d 100644 --- a/x-pack/platform/plugins/shared/automatic_import/public/util/oas.test.ts +++ b/x-pack/platform/plugins/shared/automatic_import/public/util/oas.test.ts @@ -6,1089 +6,1196 @@ */ import Oas from 'oas'; -import { reduceSpecComponents } from './oas'; +import { getAllRefValues, reduceSpecComponents } from './oas'; describe('oas util', () => { - const testSpec: Oas = new Oas({ - openapi: '3.0.1', - info: { - title: 'ESET Connect - Automation', - description: - '

ESET Connect help:

https://help.eset.com/eset_connect/en-US/

Task examples:

https://help.eset.com/eset_connect/en-US/eset-protect-cloud-api.html#s-task-examples', - version: '', - }, - servers: [ - { - url: 'https://eu.automation.eset.systems/', - }, - ], - tags: [ - { - name: 'DeviceTasks', - }, - ], - paths: { - '/v1/device_tasks': { - get: { - tags: ['DeviceTasks'], - summary: 'List all device tasks matching criteria.', - operationId: 'DeviceTasks_ListTasks', - parameters: [ - { - name: 'pageSize', - in: 'query', - description: - 'Limit for pagination purposes.\n\n> **info:**\n>For more information, refer to [Paginating Requests in APIs](https://medium.com/@ignaciochiazzo/paginating-requests-in-apis-d4883d4c1c4c)\n\nor https://cloud.google.com/apis/design/design_patterns#list_pagination', - required: false, - style: 'form', - explode: true, - schema: { - type: 'integer', - format: 'int64', - }, - }, - { - name: 'pageToken', - in: 'query', - description: - 'Page token of current page.\n\n> **info:**\n>For more information, refer to [Paginating Requests in APIs](https://medium.com/@ignaciochiazzo/paginating-requests-in-apis-d4883d4c1c4c)\n\nor https://cloud.google.com/apis/design/design_patterns#list_pagination', - required: false, - style: 'form', - explode: true, - schema: { - type: 'string', + describe('getAllRefValues', () => { + test('should return empty set for empty object', () => { + expect(getAllRefValues({})).toEqual(new Set()); + }); + + test('should return empty set for primitive values', () => { + expect(getAllRefValues(null)).toEqual(new Set()); + expect(getAllRefValues(123)).toEqual(new Set()); + expect(getAllRefValues('string')).toEqual(new Set()); + expect(getAllRefValues(true)).toEqual(new Set()); + }); + + test('should find $ref at root level', () => { + const schema = { $ref: '#/components/schemas/User' }; + const expected = new Set(['#/components/schemas/User']); + expect(getAllRefValues(schema)).toEqual(expected); + }); + + test('should find multiple $refs at different levels', () => { + const schema = { + properties: { + user: { $ref: '#/components/schemas/User' }, + address: { $ref: '#/components/schemas/Address' }, + orders: { + type: 'array', + items: { $ref: '#/components/schemas/Order' }, + }, + }, + }; + + const expected = new Set([ + '#/components/schemas/User', + '#/components/schemas/Address', + '#/components/schemas/Order', + ]); + + expect(getAllRefValues(schema)).toEqual(expected); + }); + + test('should handle deeply nested objects', () => { + const schema = { + level1: { + level2: { + level3: { + level4: { + $ref: '#/deep/nested/ref', }, }, - ], - responses: { - '200': { - description: 'A successful response.', - headers: { - 'request-id': { - description: 'Unique ID of the request.', - style: 'simple', - explode: false, - schema: { - type: 'string', - format: 'uuid', - }, + }, + }, + }; + + const expected = new Set(['#/deep/nested/ref']); + expect(getAllRefValues(schema)).toEqual(expected); + }); + + test('should handle arrays of objects', () => { + const schema = { + items: [ + { $ref: '#/components/schemas/Item1' }, + { $ref: '#/components/schemas/Item2' }, + { + subItem: { $ref: '#/components/schemas/SubItem' }, + }, + ], + }; + + const expected = new Set([ + '#/components/schemas/Item1', + '#/components/schemas/Item2', + '#/components/schemas/SubItem', + ]); + + expect(getAllRefValues(schema)).toEqual(expected); + }); + + test('should deduplicate repeated refs', () => { + const schema = { + prop1: { $ref: '#/components/schemas/Common' }, + prop2: { $ref: '#/components/schemas/Common' }, + prop3: { + subProp: { $ref: '#/components/schemas/Common' }, + }, + }; + + const expected = new Set(['#/components/schemas/Common']); + expect(getAllRefValues(schema)).toEqual(expected); + }); + + test('should handle non-object values correctly', () => { + const schema = { + nullProp: null, + boolProp: true, + numProp: 123, + strProp: 'hello', + objProp: { $ref: '#/components/schemas/Valid' }, + }; + + const expected = new Set(['#/components/schemas/Valid']); + expect(getAllRefValues(schema)).toEqual(expected); + }); + }); + + describe('full test', () => { + const testSpec: Oas = new Oas({ + openapi: '3.0.1', + info: { + title: 'ESET Connect - Automation', + description: + '

ESET Connect help:

https://help.eset.com/eset_connect/en-US/

Task examples:

https://help.eset.com/eset_connect/en-US/eset-protect-cloud-api.html#s-task-examples', + version: '', + }, + servers: [ + { + url: 'https://eu.automation.eset.systems/', + }, + ], + tags: [ + { + name: 'DeviceTasks', + }, + ], + paths: { + '/v1/device_tasks': { + get: { + tags: ['DeviceTasks'], + summary: 'List all device tasks matching criteria.', + operationId: 'DeviceTasks_ListTasks', + parameters: [ + { + name: 'pageSize', + in: 'query', + description: + 'Limit for pagination purposes.\n\n> **info:**\n>For more information, refer to [Paginating Requests in APIs](https://medium.com/@ignaciochiazzo/paginating-requests-in-apis-d4883d4c1c4c)\n\nor https://cloud.google.com/apis/design/design_patterns#list_pagination', + required: false, + style: 'form', + explode: true, + schema: { + type: 'integer', + format: 'int64', }, }, - content: { - 'application/json': { - schema: { - $ref: '#/components/schemas/v1ListTasksResponse', - }, + { + name: 'pageToken', + in: 'query', + description: + 'Page token of current page.\n\n> **info:**\n>For more information, refer to [Paginating Requests in APIs](https://medium.com/@ignaciochiazzo/paginating-requests-in-apis-d4883d4c1c4c)\n\nor https://cloud.google.com/apis/design/design_patterns#list_pagination', + required: false, + style: 'form', + explode: true, + schema: { + type: 'string', }, }, - }, - default: { - description: 'An unexpected error response.', - headers: { - 'request-id': { - description: 'Unique ID of the request.', - style: 'simple', - explode: false, - schema: { - type: 'string', - format: 'uuid', + ], + responses: { + '200': { + description: 'A successful response.', + headers: { + 'request-id': { + description: 'Unique ID of the request.', + style: 'simple', + explode: false, + schema: { + type: 'string', + format: 'uuid', + }, }, }, - }, - content: { - 'application/json': { - schema: { - $ref: '#/components/schemas/rpcStatus', + content: { + 'application/json': { + schema: { + $ref: '#/components/schemas/v1ListTasksResponse', + }, }, }, }, - }, - '202': { - description: 'Response took too long and the request was cached.', - headers: { - 'response-id': { - description: 'Unique ID of a pending request. Used to retrieve cached result.', - style: 'simple', - explode: false, - schema: { - type: 'string', - format: 'uuid', + default: { + description: 'An unexpected error response.', + headers: { + 'request-id': { + description: 'Unique ID of the request.', + style: 'simple', + explode: false, + schema: { + type: 'string', + format: 'uuid', + }, }, }, - 'request-id': { - description: 'Unique ID of the request.', - style: 'simple', - explode: false, - schema: { - type: 'string', - format: 'uuid', + content: { + 'application/json': { + schema: { + $ref: '#/components/schemas/rpcStatus', + }, }, }, }, - content: {}, - }, - }, - security: [ - { - Bearer: [], - }, - ], - }, - post: { - tags: ['DeviceTasks'], - summary: 'Creates [device task].', - description: - 'Created task requires to have at least one trigger set. Otherwise the call fails.\n\n```migration from EP/ESMC/ERA:\n`CreateTask()` uses deduplication algorithm to prevent from creating tasks with the same configuration but different trigger.\n```', - operationId: 'DeviceTasks_CreateTask', - requestBody: { - content: { - 'application/json': { - schema: { - $ref: '#/components/schemas/v1CreateTaskRequest', + '202': { + description: 'Response took too long and the request was cached.', + headers: { + 'response-id': { + description: 'Unique ID of a pending request. Used to retrieve cached result.', + style: 'simple', + explode: false, + schema: { + type: 'string', + format: 'uuid', + }, + }, + 'request-id': { + description: 'Unique ID of the request.', + style: 'simple', + explode: false, + schema: { + type: 'string', + format: 'uuid', + }, + }, }, + content: {}, }, }, - required: true, - }, - responses: { - '200': { - description: 'A successful response.', - headers: { - 'request-id': { - description: 'Unique ID of the request.', - style: 'simple', - explode: false, - schema: { - type: 'string', - format: 'uuid', - }, - }, + security: [ + { + Bearer: [], }, + ], + }, + post: { + tags: ['DeviceTasks'], + summary: 'Creates [device task].', + description: + 'Created task requires to have at least one trigger set. Otherwise the call fails.\n\n```migration from EP/ESMC/ERA:\n`CreateTask()` uses deduplication algorithm to prevent from creating tasks with the same configuration but different trigger.\n```', + operationId: 'DeviceTasks_CreateTask', + requestBody: { content: { 'application/json': { schema: { - $ref: '#/components/schemas/v1CreateTaskResponse', + $ref: '#/components/schemas/v1CreateTaskRequest', }, }, }, + required: true, }, - default: { - description: 'An unexpected error response.', - headers: { - 'request-id': { - description: 'Unique ID of the request.', - style: 'simple', - explode: false, - schema: { - type: 'string', - format: 'uuid', + responses: { + '200': { + description: 'A successful response.', + headers: { + 'request-id': { + description: 'Unique ID of the request.', + style: 'simple', + explode: false, + schema: { + type: 'string', + format: 'uuid', + }, }, }, - }, - content: { - 'application/json': { - schema: { - $ref: '#/components/schemas/rpcStatus', + content: { + 'application/json': { + schema: { + $ref: '#/components/schemas/v1CreateTaskResponse', + }, }, }, }, - }, - '202': { - description: 'Response took too long and the request was cached.', - headers: { - 'response-id': { - description: 'Unique ID of a pending request. Used to retrieve cached result.', - style: 'simple', - explode: false, - schema: { - type: 'string', - format: 'uuid', + default: { + description: 'An unexpected error response.', + headers: { + 'request-id': { + description: 'Unique ID of the request.', + style: 'simple', + explode: false, + schema: { + type: 'string', + format: 'uuid', + }, }, }, - 'request-id': { - description: 'Unique ID of the request.', - style: 'simple', - explode: false, - schema: { - type: 'string', - format: 'uuid', + content: { + 'application/json': { + schema: { + $ref: '#/components/schemas/rpcStatus', + }, }, }, }, - content: {}, + '202': { + description: 'Response took too long and the request was cached.', + headers: { + 'response-id': { + description: 'Unique ID of a pending request. Used to retrieve cached result.', + style: 'simple', + explode: false, + schema: { + type: 'string', + format: 'uuid', + }, + }, + 'request-id': { + description: 'Unique ID of the request.', + style: 'simple', + explode: false, + schema: { + type: 'string', + format: 'uuid', + }, + }, + }, + content: {}, + }, }, + security: [ + { + Bearer: [], + }, + ], }, - security: [ - { - Bearer: [], - }, - ], }, - }, - '/v1/device_tasks/{taskUuid}': { - get: { - tags: ['DeviceTasks'], - summary: 'Get task entity.', - description: - 'For complete history please call `ListTaskRuns()`.\n\n```migration from EP/ESMC/ERA:\nGetTask maps to getting details of trigger.\n```', - operationId: 'DeviceTasks_GetTask', - parameters: [ - { - name: 'taskUuid', - in: 'path', - description: 'Task reference.\n\ntype: DeviceTask', - required: true, - style: 'simple', - explode: false, - schema: { - type: 'string', + '/v1/device_tasks/{taskUuid}': { + get: { + tags: ['DeviceTasks'], + summary: 'Get task entity.', + description: + 'For complete history please call `ListTaskRuns()`.\n\n```migration from EP/ESMC/ERA:\nGetTask maps to getting details of trigger.\n```', + operationId: 'DeviceTasks_GetTask', + parameters: [ + { + name: 'taskUuid', + in: 'path', + description: 'Task reference.\n\ntype: DeviceTask', + required: true, + style: 'simple', + explode: false, + schema: { + type: 'string', + }, }, - }, - ], - responses: { - '200': { - description: 'A successful response.', - headers: { - 'request-id': { - description: 'Unique ID of the request.', - style: 'simple', - explode: false, - schema: { - type: 'string', - format: 'uuid', + ], + responses: { + '200': { + description: 'A successful response.', + headers: { + 'request-id': { + description: 'Unique ID of the request.', + style: 'simple', + explode: false, + schema: { + type: 'string', + format: 'uuid', + }, }, }, - }, - content: { - 'application/json': { - schema: { - $ref: '#/components/schemas/v1GetTaskResponse', + content: { + 'application/json': { + schema: { + $ref: '#/components/schemas/v1GetTaskResponse', + }, }, }, }, - }, - default: { - description: 'An unexpected error response.', - headers: { - 'request-id': { - description: 'Unique ID of the request.', - style: 'simple', - explode: false, - schema: { - type: 'string', - format: 'uuid', + default: { + description: 'An unexpected error response.', + headers: { + 'request-id': { + description: 'Unique ID of the request.', + style: 'simple', + explode: false, + schema: { + type: 'string', + format: 'uuid', + }, }, }, - }, - content: { - 'application/json': { - schema: { - $ref: '#/components/schemas/rpcStatus', + content: { + 'application/json': { + schema: { + $ref: '#/components/schemas/rpcStatus', + }, }, }, }, - }, - '202': { - description: 'Response took too long and the request was cached.', - headers: { - 'response-id': { - description: 'Unique ID of a pending request. Used to retrieve cached result.', - style: 'simple', - explode: false, - schema: { - type: 'string', - format: 'uuid', + '202': { + description: 'Response took too long and the request was cached.', + headers: { + 'response-id': { + description: 'Unique ID of a pending request. Used to retrieve cached result.', + style: 'simple', + explode: false, + schema: { + type: 'string', + format: 'uuid', + }, }, - }, - 'request-id': { - description: 'Unique ID of the request.', - style: 'simple', - explode: false, - schema: { - type: 'string', - format: 'uuid', + 'request-id': { + description: 'Unique ID of the request.', + style: 'simple', + explode: false, + schema: { + type: 'string', + format: 'uuid', + }, }, }, + content: {}, }, - content: {}, }, + security: [ + { + Bearer: [], + }, + ], }, - security: [ - { - Bearer: [], - }, - ], - }, - delete: { - tags: ['DeviceTasks'], - summary: 'Delete specified task.', - description: '```migration from EP/ESMC/ERA:\nMaps to deleting trigger.\n```', - operationId: 'DeviceTasks_DeleteTask', - parameters: [ - { - name: 'taskUuid', - in: 'path', - description: 'Reference to deleted task.\n\ntype: DeviceTask', - required: true, - style: 'simple', - explode: false, - schema: { - type: 'string', + delete: { + tags: ['DeviceTasks'], + summary: 'Delete specified task.', + description: '```migration from EP/ESMC/ERA:\nMaps to deleting trigger.\n```', + operationId: 'DeviceTasks_DeleteTask', + parameters: [ + { + name: 'taskUuid', + in: 'path', + description: 'Reference to deleted task.\n\ntype: DeviceTask', + required: true, + style: 'simple', + explode: false, + schema: { + type: 'string', + }, }, - }, - ], - responses: { - '200': { - description: 'A successful response.', - headers: { - 'request-id': { - description: 'Unique ID of the request.', - style: 'simple', - explode: false, - schema: { - type: 'string', - format: 'uuid', + ], + responses: { + '200': { + description: 'A successful response.', + headers: { + 'request-id': { + description: 'Unique ID of the request.', + style: 'simple', + explode: false, + schema: { + type: 'string', + format: 'uuid', + }, }, }, - }, - content: { - 'application/json': { - schema: { - $ref: '#/components/schemas/v1DeleteTaskResponse', + content: { + 'application/json': { + schema: { + $ref: '#/components/schemas/v1DeleteTaskResponse', + }, }, }, }, - }, - default: { - description: 'An unexpected error response.', - headers: { - 'request-id': { - description: 'Unique ID of the request.', - style: 'simple', - explode: false, - schema: { - type: 'string', - format: 'uuid', + default: { + description: 'An unexpected error response.', + headers: { + 'request-id': { + description: 'Unique ID of the request.', + style: 'simple', + explode: false, + schema: { + type: 'string', + format: 'uuid', + }, }, }, - }, - content: { - 'application/json': { - schema: { - $ref: '#/components/schemas/rpcStatus', + content: { + 'application/json': { + schema: { + $ref: '#/components/schemas/rpcStatus', + }, }, }, }, - }, - '202': { - description: 'Response took too long and the request was cached.', - headers: { - 'response-id': { - description: 'Unique ID of a pending request. Used to retrieve cached result.', - style: 'simple', - explode: false, - schema: { - type: 'string', - format: 'uuid', + '202': { + description: 'Response took too long and the request was cached.', + headers: { + 'response-id': { + description: 'Unique ID of a pending request. Used to retrieve cached result.', + style: 'simple', + explode: false, + schema: { + type: 'string', + format: 'uuid', + }, }, - }, - 'request-id': { - description: 'Unique ID of the request.', - style: 'simple', - explode: false, - schema: { - type: 'string', - format: 'uuid', + 'request-id': { + description: 'Unique ID of the request.', + style: 'simple', + explode: false, + schema: { + type: 'string', + format: 'uuid', + }, }, }, + content: {}, }, - content: {}, }, + security: [ + { + Bearer: [], + }, + ], }, - security: [ - { - Bearer: [], - }, - ], }, - }, - '/v1/device_tasks/{taskUuid}/runs': { - get: { - tags: ['DeviceTasks'], - summary: 'List task history - all the runs of the task.', - description: - 'For sake of forensics, the [task run]s are listed collectively, not as children of their parent task. Information about task runs might easily survive their parent task.\n\n```migration from EP/ESMC/ERA:\nTo list what is called `Executions` set `only_latest` flag to `true`.\n```\n\n> **info:**\n> Modeled based on https://google.aip.dev/152#executions-and-results with ESET specific vocabulary.', - operationId: 'DeviceTasks_ListTaskRuns', - parameters: [ - { - name: 'taskUuid', - in: 'path', - description: 'Include only runs of specific task. Mandatory.\n\ntype: DeviceTask', - required: true, - style: 'simple', - explode: false, - schema: { - type: 'string', + '/v1/device_tasks/{taskUuid}/runs': { + get: { + tags: ['DeviceTasks'], + summary: 'List task history - all the runs of the task.', + description: + 'For sake of forensics, the [task run]s are listed collectively, not as children of their parent task. Information about task runs might easily survive their parent task.\n\n```migration from EP/ESMC/ERA:\nTo list what is called `Executions` set `only_latest` flag to `true`.\n```\n\n> **info:**\n> Modeled based on https://google.aip.dev/152#executions-and-results with ESET specific vocabulary.', + operationId: 'DeviceTasks_ListTaskRuns', + parameters: [ + { + name: 'taskUuid', + in: 'path', + description: 'Include only runs of specific task. Mandatory.\n\ntype: DeviceTask', + required: true, + style: 'simple', + explode: false, + schema: { + type: 'string', + }, }, - }, - { - name: 'deviceUuid', - in: 'query', - description: - 'Only include runs on specific device (if filled).\n\ntype: device_management/v1/Device', - required: false, - style: 'form', - explode: true, - schema: { - type: 'string', + { + name: 'deviceUuid', + in: 'query', + description: + 'Only include runs on specific device (if filled).\n\ntype: device_management/v1/Device', + required: false, + style: 'form', + explode: true, + schema: { + type: 'string', + }, }, - }, - { - name: 'listOnlyLastRuns', - in: 'query', - description: 'If true, the result will only contain the latest runs per device.', - required: false, - style: 'form', - explode: true, - schema: { - type: 'boolean', + { + name: 'listOnlyLastRuns', + in: 'query', + description: 'If true, the result will only contain the latest runs per device.', + required: false, + style: 'form', + explode: true, + schema: { + type: 'boolean', + }, }, - }, - { - name: 'pageSize', - in: 'query', - description: - 'Limit for pagination purposes.\n\n> **info:**\n> For more information, refer to [Paginating Requests in APIs](https://medium.com/@ignaciochiazzo/paginating-requests-in-apis-d4883d4c1c4c) \nor https://cloud.google.com/apis/design/design_patterns#list_pagination', - required: false, - style: 'form', - explode: true, - schema: { - type: 'integer', - format: 'int64', + { + name: 'pageSize', + in: 'query', + description: + 'Limit for pagination purposes.\n\n> **info:**\n> For more information, refer to [Paginating Requests in APIs](https://medium.com/@ignaciochiazzo/paginating-requests-in-apis-d4883d4c1c4c) \nor https://cloud.google.com/apis/design/design_patterns#list_pagination', + required: false, + style: 'form', + explode: true, + schema: { + type: 'integer', + format: 'int64', + }, }, - }, - { - name: 'pageToken', - in: 'query', - description: - 'Page token of current page.\n\n> **info:**\n> For more information, refer to [Paginating Requests in APIs](https://medium.com/@ignaciochiazzo/paginating-requests-in-apis-d4883d4c1c4c)\nor https://cloud.google.com/apis/design/design_patterns#list_pagination', - required: false, - style: 'form', - explode: true, - schema: { - type: 'string', + { + name: 'pageToken', + in: 'query', + description: + 'Page token of current page.\n\n> **info:**\n> For more information, refer to [Paginating Requests in APIs](https://medium.com/@ignaciochiazzo/paginating-requests-in-apis-d4883d4c1c4c)\nor https://cloud.google.com/apis/design/design_patterns#list_pagination', + required: false, + style: 'form', + explode: true, + schema: { + type: 'string', + }, }, - }, - ], - responses: { - '200': { - description: 'A successful response.', - headers: { - 'request-id': { - description: 'Unique ID of the request.', - style: 'simple', - explode: false, - schema: { - type: 'string', - format: 'uuid', + ], + responses: { + '200': { + description: 'A successful response.', + headers: { + 'request-id': { + description: 'Unique ID of the request.', + style: 'simple', + explode: false, + schema: { + type: 'string', + format: 'uuid', + }, }, }, - }, - content: { - 'application/json': { - schema: { - $ref: '#/components/schemas/v1ListTaskRunsResponse', + content: { + 'application/json': { + schema: { + $ref: '#/components/schemas/v1ListTaskRunsResponse', + }, }, }, }, - }, - default: { - description: 'An unexpected error response.', - headers: { - 'request-id': { - description: 'Unique ID of the request.', - style: 'simple', - explode: false, - schema: { - type: 'string', - format: 'uuid', + default: { + description: 'An unexpected error response.', + headers: { + 'request-id': { + description: 'Unique ID of the request.', + style: 'simple', + explode: false, + schema: { + type: 'string', + format: 'uuid', + }, }, }, - }, - content: { - 'application/json': { - schema: { - $ref: '#/components/schemas/rpcStatus', + content: { + 'application/json': { + schema: { + $ref: '#/components/schemas/rpcStatus', + }, }, }, }, - }, - '202': { - description: 'Response took too long and the request was cached.', - headers: { - 'response-id': { - description: 'Unique ID of a pending request. Used to retrieve cached result.', - style: 'simple', - explode: false, - schema: { - type: 'string', - format: 'uuid', + '202': { + description: 'Response took too long and the request was cached.', + headers: { + 'response-id': { + description: 'Unique ID of a pending request. Used to retrieve cached result.', + style: 'simple', + explode: false, + schema: { + type: 'string', + format: 'uuid', + }, }, - }, - 'request-id': { - description: 'Unique ID of the request.', - style: 'simple', - explode: false, - schema: { - type: 'string', - format: 'uuid', + 'request-id': { + description: 'Unique ID of the request.', + style: 'simple', + explode: false, + schema: { + type: 'string', + format: 'uuid', + }, }, }, + content: {}, }, - content: {}, }, + security: [ + { + Bearer: [], + }, + ], }, - security: [ - { - Bearer: [], - }, - ], }, - }, - '/v1/device_tasks/{taskUuid}:updateTaskTargets': { - post: { - tags: ['DeviceTasks'], - summary: 'Update task targets.', - operationId: 'DeviceTasks_UpdateTaskTargets', - parameters: [ - { - name: 'taskUuid', - in: 'path', - description: 'Descriptor of the task to update\n\ntype: DeviceTask', - required: true, - style: 'simple', - explode: false, - schema: { - type: 'string', - }, - }, - ], - requestBody: { - content: { - 'application/json': { + '/v1/device_tasks/{taskUuid}:updateTaskTargets': { + post: { + tags: ['DeviceTasks'], + summary: 'Update task targets.', + operationId: 'DeviceTasks_UpdateTaskTargets', + parameters: [ + { + name: 'taskUuid', + in: 'path', + description: 'Descriptor of the task to update\n\ntype: DeviceTask', + required: true, + style: 'simple', + explode: false, schema: { - $ref: '#/components/schemas/DeviceTasksUpdateTaskTargetsBody', - }, - }, - }, - required: true, - }, - responses: { - '200': { - description: 'A successful response.', - headers: { - 'request-id': { - description: 'Unique ID of the request.', - style: 'simple', - explode: false, - schema: { - type: 'string', - format: 'uuid', - }, + type: 'string', }, }, + ], + requestBody: { content: { 'application/json': { schema: { - $ref: '#/components/schemas/v1UpdateTaskTargetsResponse', + $ref: '#/components/schemas/DeviceTasksUpdateTaskTargetsBody', }, }, }, + required: true, }, - default: { - description: 'An unexpected error response.', - headers: { - 'request-id': { - description: 'Unique ID of the request.', - style: 'simple', - explode: false, - schema: { - type: 'string', - format: 'uuid', + responses: { + '200': { + description: 'A successful response.', + headers: { + 'request-id': { + description: 'Unique ID of the request.', + style: 'simple', + explode: false, + schema: { + type: 'string', + format: 'uuid', + }, }, }, - }, - content: { - 'application/json': { - schema: { - $ref: '#/components/schemas/rpcStatus', + content: { + 'application/json': { + schema: { + $ref: '#/components/schemas/v1UpdateTaskTargetsResponse', + }, }, }, }, - }, - '202': { - description: 'Response took too long and the request was cached.', - headers: { - 'response-id': { - description: 'Unique ID of a pending request. Used to retrieve cached result.', - style: 'simple', - explode: false, - schema: { - type: 'string', - format: 'uuid', + default: { + description: 'An unexpected error response.', + headers: { + 'request-id': { + description: 'Unique ID of the request.', + style: 'simple', + explode: false, + schema: { + type: 'string', + format: 'uuid', + }, }, }, - 'request-id': { - description: 'Unique ID of the request.', - style: 'simple', - explode: false, - schema: { - type: 'string', - format: 'uuid', + content: { + 'application/json': { + schema: { + $ref: '#/components/schemas/rpcStatus', + }, }, }, }, - content: {}, - }, - }, - security: [ - { - Bearer: [], - }, - ], - }, - }, - '/v1/device_tasks/{taskUuid}:updateTaskTriggers': { - post: { - tags: ['DeviceTasks'], - summary: 'Update list of task triggers.', - operationId: 'DeviceTasks_UpdateTaskTriggers', - parameters: [ - { - name: 'taskUuid', - in: 'path', - description: 'Descriptor of the task to update\n\ntype: DeviceTask', - required: true, - style: 'simple', - explode: false, - schema: { - type: 'string', - }, - }, - ], - requestBody: { - content: { - 'application/json': { - schema: { - $ref: '#/components/schemas/DeviceTasksUpdateTaskTriggersBody', + '202': { + description: 'Response took too long and the request was cached.', + headers: { + 'response-id': { + description: 'Unique ID of a pending request. Used to retrieve cached result.', + style: 'simple', + explode: false, + schema: { + type: 'string', + format: 'uuid', + }, + }, + 'request-id': { + description: 'Unique ID of the request.', + style: 'simple', + explode: false, + schema: { + type: 'string', + format: 'uuid', + }, + }, }, + content: {}, }, }, - required: true, + security: [ + { + Bearer: [], + }, + ], }, - responses: { - '200': { - description: 'A successful response.', - headers: { - 'request-id': { - description: 'Unique ID of the request.', - style: 'simple', - explode: false, - schema: { - type: 'string', - format: 'uuid', - }, + }, + '/v1/device_tasks/{taskUuid}:updateTaskTriggers': { + post: { + tags: ['DeviceTasks'], + summary: 'Update list of task triggers.', + operationId: 'DeviceTasks_UpdateTaskTriggers', + parameters: [ + { + name: 'taskUuid', + in: 'path', + description: 'Descriptor of the task to update\n\ntype: DeviceTask', + required: true, + style: 'simple', + explode: false, + schema: { + type: 'string', }, }, + ], + requestBody: { content: { 'application/json': { schema: { - $ref: '#/components/schemas/v1UpdateTaskTriggersResponse', + $ref: '#/components/schemas/DeviceTasksUpdateTaskTriggersBody', }, }, }, + required: true, }, - default: { - description: 'An unexpected error response.', - headers: { - 'request-id': { - description: 'Unique ID of the request.', - style: 'simple', - explode: false, - schema: { - type: 'string', - format: 'uuid', + responses: { + '200': { + description: 'A successful response.', + headers: { + 'request-id': { + description: 'Unique ID of the request.', + style: 'simple', + explode: false, + schema: { + type: 'string', + format: 'uuid', + }, }, }, - }, - content: { - 'application/json': { - schema: { - $ref: '#/components/schemas/rpcStatus', + content: { + 'application/json': { + schema: { + $ref: '#/components/schemas/v1UpdateTaskTriggersResponse', + }, }, }, }, - }, - '202': { - description: 'Response took too long and the request was cached.', - headers: { - 'response-id': { - description: 'Unique ID of a pending request. Used to retrieve cached result.', - style: 'simple', - explode: false, - schema: { - type: 'string', - format: 'uuid', + default: { + description: 'An unexpected error response.', + headers: { + 'request-id': { + description: 'Unique ID of the request.', + style: 'simple', + explode: false, + schema: { + type: 'string', + format: 'uuid', + }, }, }, - 'request-id': { - description: 'Unique ID of the request.', - style: 'simple', - explode: false, - schema: { - type: 'string', - format: 'uuid', + content: { + 'application/json': { + schema: { + $ref: '#/components/schemas/rpcStatus', + }, }, }, }, - content: {}, + '202': { + description: 'Response took too long and the request was cached.', + headers: { + 'response-id': { + description: 'Unique ID of a pending request. Used to retrieve cached result.', + style: 'simple', + explode: false, + schema: { + type: 'string', + format: 'uuid', + }, + }, + 'request-id': { + description: 'Unique ID of the request.', + style: 'simple', + explode: false, + schema: { + type: 'string', + format: 'uuid', + }, + }, + }, + content: {}, + }, }, + security: [ + { + Bearer: [], + }, + ], }, - security: [ - { - Bearer: [], - }, - ], }, }, - }, - components: { - schemas: { - DeviceTasksDuplicateTaskBody: { - type: 'object', - properties: { - manualTriggerExpireTime: { - type: 'string', - description: - 'If `reduce_triggers_to_manual` == `true`, this parameter sets time of manual trigger expiration.\n\nIt is ignored otherwise.\n\nIf left empty, default expiration is used (ca 30 days)', - format: 'date-time', - }, - reduceTargetsToFailed: { - type: 'boolean', - description: - 'If `true`, the task duplicate will only contain targets where original task failed to run.', - }, - reduceTriggersToManual: { - type: 'boolean', - description: - 'If true, all triggers of duplicated task would be reduced to one Manual Trigger with `create_time` == now.', - }, - }, - }, - DeviceTasksUpdateTaskTargetsBody: { - type: 'object', - properties: { - targets: { - $ref: '#/components/schemas/v1DeviceTaskTargets', - }, - }, - }, - DeviceTasksUpdateTaskTriggersBody: { - type: 'object', - properties: { - triggers: { - type: 'array', - description: - 'List of the triggers that replace current triggers.\n\nCannot be empty.', - items: { - $ref: '#/components/schemas/v1Trigger', + components: { + schemas: { + DeviceTasksDuplicateTaskBody: { + type: 'object', + properties: { + manualTriggerExpireTime: { + type: 'string', + description: + 'If `reduce_triggers_to_manual` == `true`, this parameter sets time of manual trigger expiration.\n\nIt is ignored otherwise.\n\nIf left empty, default expiration is used (ca 30 days)', + format: 'date-time', + }, + reduceTargetsToFailed: { + type: 'boolean', + description: + 'If `true`, the task duplicate will only contain targets where original task failed to run.', + }, + reduceTriggersToManual: { + type: 'boolean', + description: + 'If true, all triggers of duplicated task would be reduced to one Manual Trigger with `create_time` == now.', }, }, }, - }, - protobufAny: { - type: 'object', - properties: { - '@type': { - type: 'string', - description: - 'A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none "/" character. The last segment of the URL\'s path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading "." is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com. As of May 2023, there are no widely used type server\nimplementations and no plans to implement one.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics.', + DeviceTasksUpdateTaskTargetsBody: { + type: 'object', + properties: { + targets: { + $ref: '#/components/schemas/v1DeviceTaskTargets', + }, }, }, - additionalProperties: { + DeviceTasksUpdateTaskTriggersBody: { type: 'object', - }, - description: - '`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(&foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n // or ...\n if (any.isSameTypeAs(Foo.getDefaultInstance())) {\n foo = any.unpack(Foo.getDefaultInstance());\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := &pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := &pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n\'type.googleapis.com/full.type.name\' as the type URL and the unpack\nmethods only use the fully qualified type name after the last \'/\'\nin the type URL, for example "foo.bar.com/x/y.z" will yield type\nname "y.z".\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n "@type": "type.googleapis.com/google.profile.Person",\n "firstName": ,\n "lastName": \n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n "@type": "type.googleapis.com/google.protobuf.Duration",\n "value": "1.212s"\n }', - }, - rpcStatus: { - type: 'object', - properties: { - code: { - type: 'integer', - format: 'int32', - }, - message: { - type: 'string', - }, - details: { - type: 'array', - items: { - $ref: '#/components/schemas/protobufAny', + properties: { + triggers: { + type: 'array', + description: + 'List of the triggers that replace current triggers.\n\nCannot be empty.', + items: { + $ref: '#/components/schemas/v1Trigger', + }, }, }, }, - }, - v1Action: { - type: 'object', - properties: { - name: { - type: 'string', - description: - 'Name of the function to execute.\n\nGRPC/ERPC function names in form of package.ServiceName/RpcName\n\nare for example:\n- `eset.dotnod.scan_management.v1.ScanManager/CreateScan`\n- `eset.dotnod.power_management.v1.PowerManager/RegisterAction`\n- `eset.dotnod.network_access_protection.v1.NetworkAccessProtection/StartNetworkIsolation`\n\nActions outside .NOD are available as documented at [ESET PROTECT Cloud help](https://help.eset.com/protect_cloud/en-US/eset_connect.html).\n\n> **info:**\n> For more information about GRPC wire, refer to https://wiki.wireshark.org/gRPC.md', + protobufAny: { + type: 'object', + properties: { + '@type': { + type: 'string', + description: + 'A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none "/" character. The last segment of the URL\'s path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading "." is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n URL, or have them precompiled into a binary to avoid any\n lookup. Therefore, binary compatibility needs to be preserved\n on changes to types. (Use versioned type names to manage\n breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com. As of May 2023, there are no widely used type server\nimplementations and no plans to implement one.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics.', + }, }, - params: { - $ref: '#/components/schemas/protobufAny', + additionalProperties: { + type: 'object', }, + description: + '`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n Foo foo = ...;\n Any any;\n any.PackFrom(foo);\n ...\n if (any.UnpackTo(&foo)) {\n ...\n }\n\nExample 2: Pack and unpack a message in Java.\n\n Foo foo = ...;\n Any any = Any.pack(foo);\n ...\n if (any.is(Foo.class)) {\n foo = any.unpack(Foo.class);\n }\n // or ...\n if (any.isSameTypeAs(Foo.getDefaultInstance())) {\n foo = any.unpack(Foo.getDefaultInstance());\n }\n\n Example 3: Pack and unpack a message in Python.\n\n foo = Foo(...)\n any = Any()\n any.Pack(foo)\n ...\n if any.Is(Foo.DESCRIPTOR):\n any.Unpack(foo)\n ...\n\n Example 4: Pack and unpack a message in Go\n\n foo := &pb.Foo{...}\n any, err := anypb.New(foo)\n if err != nil {\n ...\n }\n ...\n foo := &pb.Foo{}\n if err := any.UnmarshalTo(foo); err != nil {\n ...\n }\n\nThe pack methods provided by protobuf library will by default use\n\'type.googleapis.com/full.type.name\' as the type URL and the unpack\nmethods only use the fully qualified type name after the last \'/\'\nin the type URL, for example "foo.bar.com/x/y.z" will yield type\nname "y.z".\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n package google.profile;\n message Person {\n string first_name = 1;\n string last_name = 2;\n }\n\n {\n "@type": "type.googleapis.com/google.profile.Person",\n "firstName": ,\n "lastName": \n }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n {\n "@type": "type.googleapis.com/google.protobuf.Duration",\n "value": "1.212s"\n }', }, - description: 'Descriptor of the call to make.', - }, - v1CreateTaskRequest: { - type: 'object', - properties: { - task: { - $ref: '#/components/schemas/v1DeviceTask', + rpcStatus: { + type: 'object', + properties: { + code: { + type: 'integer', + format: 'int32', + }, + message: { + type: 'string', + }, + details: { + type: 'array', + items: { + $ref: '#/components/schemas/protobufAny', + }, + }, }, }, - }, - v1CreateTaskResponse: { - type: 'object', - properties: { - task: { - $ref: '#/components/schemas/v1DeviceTask', + v1Action: { + type: 'object', + properties: { + name: { + type: 'string', + description: + 'Name of the function to execute.\n\nGRPC/ERPC function names in form of package.ServiceName/RpcName\n\nare for example:\n- `eset.dotnod.scan_management.v1.ScanManager/CreateScan`\n- `eset.dotnod.power_management.v1.PowerManager/RegisterAction`\n- `eset.dotnod.network_access_protection.v1.NetworkAccessProtection/StartNetworkIsolation`\n\nActions outside .NOD are available as documented at [ESET PROTECT Cloud help](https://help.eset.com/protect_cloud/en-US/eset_connect.html).\n\n> **info:**\n> For more information about GRPC wire, refer to https://wiki.wireshark.org/gRPC.md', + }, + params: { + $ref: '#/components/schemas/protobufAny', + }, }, + description: 'Descriptor of the call to make.', }, - }, - v1DeleteTaskResponse: { - title: 'empty', - type: 'object', - }, - v1DeviceTask: { - type: 'object', - properties: { - action: { - $ref: '#/components/schemas/v1Action', - }, - description: { - type: 'string', - description: "User's description. Free text.", - }, - displayName: { - type: 'string', - description: 'User friendly name of the task.', - }, - targets: { - $ref: '#/components/schemas/v1DeviceTaskTargets', - }, - triggers: { - type: 'array', - description: - 'Specifies *when* to run. What causes task to execute.\n\nCannot be empty.\n\n> **warning:**\n> Migration from EP: ASAP tasks are now `manually triggered tasks`.', - items: { - $ref: '#/components/schemas/v1Trigger', + v1CreateTaskRequest: { + type: 'object', + properties: { + task: { + $ref: '#/components/schemas/v1DeviceTask', }, }, - uuid: { - type: 'string', - description: - 'Universally Unique Identifier\nReferences use this identifier so it must be filled in all the cases except resource creation.\n\nCompliant with [RFC 4122: A Universally Unique IDentifier (UUID) URN Namespace](https://tools.ietf.org/html/rfc4122)\n\nFormatted according to template xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx, as explained on [wikipedia](https://en.wikipedia.org/wiki/Universally_unique_identifier#Format).\n\nFor example: "123e4567-e89b-12d3-a456-426614174000"', - }, - versionId: { - type: 'string', - description: - 'Identifier of entity version.\n\n[Version id] determines whether one version is more recent than another. More recent versions have higher numbers.\n\n> **info:**\n> Similar concepts are \n- change sequence number (CSN)\n- revision\n> Developed from VersionCode in Android application manifests: https://developer.android.com/studio/publish/versioning#appversioning', - format: 'uint64', - }, }, - description: - 'Describes device task - a task to be executed on device where some endpoint protection platform runs. It can also be executed indirectly if the actual device uses some device hub (e.g. IoT scenarios).\n\nDevice tasks are abstract containers for scheduled `actions`. If the scheduling information absents, actions are scheduled for ASAP execution.\n\nEvery execution of [device task] instantiates `DeviceTaskExecution`. Device tasks can be scheduled to execute repeatedly, what create many `DeviceTaskExecution` entities.\n\n```migration from EP/ESMC/ERA:\n`DeviceTask` maps to the concept of `Trigger` with `Targets`\n```', - }, - v1DeviceTaskRun: { - type: 'object', - properties: { - deviceUuid: { - type: 'string', - description: - 'Device where task is executed. For tasks assigned to device group there can be multiple task runs from each member of the group.\n\ntype: device_management.v1.Device', - }, - endTime: { - type: 'string', - description: 'Timestamp of run end.\n\nMeaningful for finished and failed task runs.', - format: 'date-time', - }, - result: { - $ref: '#/components/schemas/protobufAny', - }, - startTime: { - type: 'string', - description: 'Timestamp of run start.', - format: 'date-time', - }, - status: { - $ref: '#/components/schemas/v1TaskRunStatus', - }, - taskUuid: { - title: '[Device task] reference', - type: 'string', - description: 'type: DeviceTask', - }, - uuid: { - type: 'string', - description: - 'Universally Unique Identifier\nReferences use this identifier so it must be filled in all the cases except resource creation.\n\nCompliant with [RFC 4122: A Universally Unique IDentifier (UUID) URN Namespace](https://tools.ietf.org/html/rfc4122)\n\nFormatted according to template xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx, as explained on [wikipedia](https://en.wikipedia.org/wiki/Universally_unique_identifier#Format).\n\nFor example: "123e4567-e89b-12d3-a456-426614174000"', + v1CreateTaskResponse: { + type: 'object', + properties: { + task: { + $ref: '#/components/schemas/v1DeviceTask', + }, }, }, - description: - 'One run (an execution) of the [device task] on some device.\n\n[Task run] inherits all of its properties from the corresponding [device task].\n\nAdditional documentation about task run results can be found at [ESET PROTECT Cloud help](https://help.eset.com/protect_cloud/en-US/eset_connect.html).\n\n```migration from EP/ESMC/ERA:\n`TaskRun` maps to the concept of `Execution`\n```\n\n> **info:**\n> Identity of the [task run] is kept for one task + device combination + start_time combination.', - }, - v1DeviceTaskTargets: { - type: 'object', - properties: { - deviceGroupsUuids: { - type: 'array', - description: - 'Task can be assigned to groups of devices.\n\ntype: device_management.v1.DeviceGroup', - items: { + v1DeleteTaskResponse: { + title: 'empty', + type: 'object', + }, + v1DeviceTask: { + type: 'object', + properties: { + action: { + $ref: '#/components/schemas/v1Action', + }, + description: { type: 'string', + description: "User's description. Free text.", }, - }, - devicesUuids: { - type: 'array', - description: - 'Task can be assigned to individual devices, for example if task run failed on these devices.\n\ntype: device_management.v1.Device', - items: { + displayName: { type: 'string', + description: 'User friendly name of the task.', + }, + targets: { + $ref: '#/components/schemas/v1DeviceTaskTargets', + }, + triggers: { + type: 'array', + description: + 'Specifies *when* to run. What causes task to execute.\n\nCannot be empty.\n\n> **warning:**\n> Migration from EP: ASAP tasks are now `manually triggered tasks`.', + items: { + $ref: '#/components/schemas/v1Trigger', + }, + }, + uuid: { + type: 'string', + description: + 'Universally Unique Identifier\nReferences use this identifier so it must be filled in all the cases except resource creation.\n\nCompliant with [RFC 4122: A Universally Unique IDentifier (UUID) URN Namespace](https://tools.ietf.org/html/rfc4122)\n\nFormatted according to template xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx, as explained on [wikipedia](https://en.wikipedia.org/wiki/Universally_unique_identifier#Format).\n\nFor example: "123e4567-e89b-12d3-a456-426614174000"', + }, + versionId: { + type: 'string', + description: + 'Identifier of entity version.\n\n[Version id] determines whether one version is more recent than another. More recent versions have higher numbers.\n\n> **info:**\n> Similar concepts are \n- change sequence number (CSN)\n- revision\n> Developed from VersionCode in Android application manifests: https://developer.android.com/studio/publish/versioning#appversioning', + format: 'uint64', }, }, + description: + 'Describes device task - a task to be executed on device where some endpoint protection platform runs. It can also be executed indirectly if the actual device uses some device hub (e.g. IoT scenarios).\n\nDevice tasks are abstract containers for scheduled `actions`. If the scheduling information absents, actions are scheduled for ASAP execution.\n\nEvery execution of [device task] instantiates `DeviceTaskExecution`. Device tasks can be scheduled to execute repeatedly, what create many `DeviceTaskExecution` entities.\n\n```migration from EP/ESMC/ERA:\n`DeviceTask` maps to the concept of `Trigger` with `Targets`\n```', }, - description: 'Specifies *where* the task should run.', - }, - v1DuplicateTaskResponse: { - type: 'object', - properties: { - task: { - $ref: '#/components/schemas/v1DeviceTask', + v1DeviceTaskRun: { + type: 'object', + properties: { + deviceUuid: { + type: 'string', + description: + 'Device where task is executed. For tasks assigned to device group there can be multiple task runs from each member of the group.\n\ntype: device_management.v1.Device', + }, + endTime: { + type: 'string', + description: + 'Timestamp of run end.\n\nMeaningful for finished and failed task runs.', + format: 'date-time', + }, + result: { + $ref: '#/components/schemas/protobufAny', + }, + startTime: { + type: 'string', + description: 'Timestamp of run start.', + format: 'date-time', + }, + status: { + $ref: '#/components/schemas/v1TaskRunStatus', + }, + taskUuid: { + title: '[Device task] reference', + type: 'string', + description: 'type: DeviceTask', + }, + uuid: { + type: 'string', + description: + 'Universally Unique Identifier\nReferences use this identifier so it must be filled in all the cases except resource creation.\n\nCompliant with [RFC 4122: A Universally Unique IDentifier (UUID) URN Namespace](https://tools.ietf.org/html/rfc4122)\n\nFormatted according to template xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx, as explained on [wikipedia](https://en.wikipedia.org/wiki/Universally_unique_identifier#Format).\n\nFor example: "123e4567-e89b-12d3-a456-426614174000"', + }, }, + description: + 'One run (an execution) of the [device task] on some device.\n\n[Task run] inherits all of its properties from the corresponding [device task].\n\nAdditional documentation about task run results can be found at [ESET PROTECT Cloud help](https://help.eset.com/protect_cloud/en-US/eset_connect.html).\n\n```migration from EP/ESMC/ERA:\n`TaskRun` maps to the concept of `Execution`\n```\n\n> **info:**\n> Identity of the [task run] is kept for one task + device combination + start_time combination.', }, - }, - v1GetTaskResponse: { - type: 'object', - properties: { - task: { - $ref: '#/components/schemas/v1DeviceTask', + v1DeviceTaskTargets: { + type: 'object', + properties: { + deviceGroupsUuids: { + type: 'array', + description: + 'Task can be assigned to groups of devices.\n\ntype: device_management.v1.DeviceGroup', + items: { + type: 'string', + }, + }, + devicesUuids: { + type: 'array', + description: + 'Task can be assigned to individual devices, for example if task run failed on these devices.\n\ntype: device_management.v1.Device', + items: { + type: 'string', + }, + }, }, + description: 'Specifies *where* the task should run.', }, - }, - v1ListTaskRunsResponse: { - type: 'object', - properties: { - taskRuns: { - type: 'array', - description: 'List of [task run]s matching criteria from the request.', - items: { - $ref: '#/components/schemas/v1DeviceTaskRun', + v1DuplicateTaskResponse: { + type: 'object', + properties: { + task: { + $ref: '#/components/schemas/v1DeviceTask', }, }, - nextPageToken: { - type: 'string', - description: - 'Page token of next page.\n\n> **info:**\n>For more information, refer to [Paginating Requests in APIs](https://medium.com/@ignaciochiazzo/paginating-requests-in-apis-d4883d4c1c4c)\nor https://cloud.google.com/apis/design/design_patterns#list_pagination', - }, }, - }, - v1ListTasksResponse: { - type: 'object', - properties: { - tasks: { - title: 'List of [device task]s', - type: 'array', - items: { + v1GetTaskResponse: { + type: 'object', + properties: { + task: { $ref: '#/components/schemas/v1DeviceTask', }, }, - nextPageToken: { - type: 'string', - description: - 'Page token of next page.\n\n> **info:**\n>For more information, refer to [Paginating Requests in APIs](https://medium.com/@ignaciochiazzo/paginating-requests-in-apis-d4883d4c1c4c)\nor https://cloud.google.com/apis/design/design_patterns#list_pagination', + }, + v1ListTaskRunsResponse: { + type: 'object', + properties: { + taskRuns: { + type: 'array', + description: 'List of [task run]s matching criteria from the request.', + items: { + $ref: '#/components/schemas/v1DeviceTaskRun', + }, + }, + nextPageToken: { + type: 'string', + description: + 'Page token of next page.\n\n> **info:**\n>For more information, refer to [Paginating Requests in APIs](https://medium.com/@ignaciochiazzo/paginating-requests-in-apis-d4883d4c1c4c)\nor https://cloud.google.com/apis/design/design_patterns#list_pagination', + }, }, }, - }, - v1ManualTrigger: { - type: 'object', - properties: { - createTime: { - type: 'string', - description: - 'When the manual trigger has been created. Task can only be triggered after this time.\n\nRead-only.', - format: 'date-time', + v1ListTasksResponse: { + type: 'object', + properties: { + tasks: { + title: 'List of [device task]s', + type: 'array', + items: { + $ref: '#/components/schemas/v1DeviceTask', + }, + }, + nextPageToken: { + type: 'string', + description: + 'Page token of next page.\n\n> **info:**\n>For more information, refer to [Paginating Requests in APIs](https://medium.com/@ignaciochiazzo/paginating-requests-in-apis-d4883d4c1c4c)\nor https://cloud.google.com/apis/design/design_patterns#list_pagination', + }, }, - expireTime: { - type: 'string', - description: - 'Task is not triggered after this time. \n\nThis is useful for task to not be triggered on stale targets (e.g. those turned on after long time of vacation).', - format: 'date-time', + }, + v1ManualTrigger: { + type: 'object', + properties: { + createTime: { + type: 'string', + description: + 'When the manual trigger has been created. Task can only be triggered after this time.\n\nRead-only.', + format: 'date-time', + }, + expireTime: { + type: 'string', + description: + 'Task is not triggered after this time. \n\nThis is useful for task to not be triggered on stale targets (e.g. those turned on after long time of vacation).', + format: 'date-time', + }, }, + description: + 'For manually triggered tasks this trigger causes immediate execution in `as soon as possible` fashion.\n\n> **info:**\n> Examples:\n- https://tray.io/documentation/connectors/triggers/manual-trigger/\n- https://www.coretechnologies.com/blog/windows-services/trigger-start/\n- https://www.nocrm.io/help/manual-trigger-101', }, - description: - 'For manually triggered tasks this trigger causes immediate execution in `as soon as possible` fashion.\n\n> **info:**\n> Examples:\n- https://tray.io/documentation/connectors/triggers/manual-trigger/\n- https://www.coretechnologies.com/blog/windows-services/trigger-start/\n- https://www.nocrm.io/help/manual-trigger-101', - }, - v1TaskRunStatus: { - title: 'Possible TaskRun states', - type: 'string', - description: - '- TASK_RUN_STATUS_UNSPECIFIED: fallback\n - TASK_RUN_STATUS_QUEUED: Task run has been processed but it is not yet running on target.\n\n```migration from EP/ESMC/ERA:\nMaps to `STARTING`.\n```\n - TASK_RUN_STATUS_RUNNING: Task is being executed on the target.\n - TASK_RUN_STATUS_FINISHED: Task execution finished successfully.\n - TASK_RUN_STATUS_FAILED: Task execution failed.', - default: 'TASK_RUN_STATUS_UNSPECIFIED', - enum: [ - 'TASK_RUN_STATUS_UNSPECIFIED', - 'TASK_RUN_STATUS_QUEUED', - 'TASK_RUN_STATUS_RUNNING', - 'TASK_RUN_STATUS_FINISHED', - 'TASK_RUN_STATUS_FAILED', - ], - }, - v1Trigger: { - type: 'object', - properties: { - manual: { - $ref: '#/components/schemas/v1ManualTrigger', + v1TaskRunStatus: { + title: 'Possible TaskRun states', + type: 'string', + description: + '- TASK_RUN_STATUS_UNSPECIFIED: fallback\n - TASK_RUN_STATUS_QUEUED: Task run has been processed but it is not yet running on target.\n\n```migration from EP/ESMC/ERA:\nMaps to `STARTING`.\n```\n - TASK_RUN_STATUS_RUNNING: Task is being executed on the target.\n - TASK_RUN_STATUS_FINISHED: Task execution finished successfully.\n - TASK_RUN_STATUS_FAILED: Task execution failed.', + default: 'TASK_RUN_STATUS_UNSPECIFIED', + enum: [ + 'TASK_RUN_STATUS_UNSPECIFIED', + 'TASK_RUN_STATUS_QUEUED', + 'TASK_RUN_STATUS_RUNNING', + 'TASK_RUN_STATUS_FINISHED', + 'TASK_RUN_STATUS_FAILED', + ], + }, + v1Trigger: { + type: 'object', + properties: { + manual: { + $ref: '#/components/schemas/v1ManualTrigger', + }, }, + description: 'Encodes information about when to run task.', + }, + v1UpdateTaskTargetsResponse: { + title: 'empty', + type: 'object', + }, + v1UpdateTaskTriggersResponse: { + title: 'empty', + type: 'object', }, - description: 'Encodes information about when to run task.', - }, - v1UpdateTaskTargetsResponse: { - title: 'empty', - type: 'object', - }, - v1UpdateTaskTriggersResponse: { - title: 'empty', - type: 'object', }, - }, - securitySchemes: { - Bearer: { - type: 'apiKey', - description: 'Type "Bearer " and then your API Token', - name: 'Authorization', - in: 'header', + securitySchemes: { + Bearer: { + type: 'apiKey', + description: 'Type "Bearer " and then your API Token', + name: 'Authorization', + in: 'header', + }, }, }, - }, - 'x-original-swagger-version': '2.0', - }); + 'x-original-swagger-version': '2.0', + }); - it('reduceSpecComponents', () => { - const reducedSpec = reduceSpecComponents(testSpec, '/v1/device_tasks'); - expect(reducedSpec).toBeDefined(); - expect(Object.keys(Object.keys(reducedSpec?.schemas ?? [])).length).toBe(5); + it('reduceSpecComponents', () => { + const reducedSpec = reduceSpecComponents(testSpec, '/v1/device_tasks'); + expect(reducedSpec).toBeDefined(); + // only will return the top level refs mentioned in the response object + expect(Object.keys(Object.keys(reducedSpec?.schemas ?? [])).length).toBe(2); + }); }); }); diff --git a/x-pack/platform/plugins/shared/automatic_import/public/util/oas.ts b/x-pack/platform/plugins/shared/automatic_import/public/util/oas.ts index 3801733ac81db..8fa2ea910d425 100644 --- a/x-pack/platform/plugins/shared/automatic_import/public/util/oas.ts +++ b/x-pack/platform/plugins/shared/automatic_import/public/util/oas.ts @@ -8,144 +8,60 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ import type Oas from 'oas'; -import type { - ComponentsObject, - KeyedSecuritySchemeObject, - MediaTypeObject, - OASDocument, - SecurityType, -} from 'oas/dist/types.cjs'; +import type { ComponentsObject, KeyedSecuritySchemeObject, SecurityType } from 'oas/dist/types.cjs'; import { CelAuthTypeEnum } from '../../common/api/model/cel_input_attributes.gen'; import type { CelAuthType } from '../../common'; /** - * Returns the inner-most schema object for the specified path array. + * Returns any $ref from the specified schema object. */ -const getSchemaObject = (obj: object, paths: string[]): any => { - const attr = paths[0]; - const innerObj = (obj as any)[attr]; - if (paths.length > 1) { - const newPaths = paths.slice(1); - return getSchemaObject(innerObj, newPaths); - } else { - return innerObj; +export const getAllRefValues = (schemaObj: any): Set => { + let allRefs = new Set(); + + if (schemaObj === null || typeof schemaObj !== 'object') { + return allRefs; } -}; -/** - * Returns any $ref from the specified schema object, or an empty string if there are none. - */ -const getRefValueOrEmpty = (schemaObj: any): string => { - if ('content' in schemaObj) { - const contentObj: MediaTypeObject = schemaObj.content; - for (const obj of Object.values(contentObj)) { - if ('schema' in obj) { - if ('items' in obj.schema) { - return obj.schema.items.$ref; - } else { - return obj.schema.$ref; + if (Array.isArray(schemaObj)) { + for (const elem of schemaObj) { + if (typeof elem === 'object') { + const subRefs = getAllRefValues(elem); + if (subRefs.size > 0) { + allRefs = new Set([...allRefs, ...subRefs]); } - } else if ('$ref' in obj) { - return obj.$ref; } } - } else if ('properties' in schemaObj) { - for (const obj of Object.values(schemaObj.properties)) { - if ('items' in (obj as any)) { - if ('$ref' in (obj as any).items) { - return (obj as any).items.$ref; - } - } else { - if ('$ref' in (obj as any)) { - return (obj as any).$ref; - } - } - } - } else if ('items' in schemaObj) { - if ('$ref' in (schemaObj as any).items) { - return (schemaObj as any).items.$ref; - } - } else if ('$ref' in (schemaObj as any)) { - return (schemaObj as any).$ref; + return allRefs; } - return ''; -}; -/** - * Returns a list of utilized $refs from the specified layer of the schema. - */ -const getRefs = (refs: Set, oas: OASDocument): Set => { - const layerUsed = new Set(); - for (const ref of refs) { - const pathSplits = ref.split('/').filter((split: string) => split !== '#'); - if (oas) { - const schemaObj = getSchemaObject(oas, pathSplits); - const refVal = getRefValueOrEmpty(schemaObj); - if (refVal) { - layerUsed.add(refVal); + for (const [key, value] of Object.entries(schemaObj)) { + if (key === '$ref' && typeof value === 'string') { + allRefs.add(value); + } else if (typeof value === 'object' && value !== null) { + const subRefs = getAllRefValues(value); + if (subRefs.size > 0) { + allRefs = new Set([...allRefs, ...subRefs]); } } } - return layerUsed; -}; -/** - * Returns a list of all utilized $refs from the schema. - */ -const buildRefSet = ( - allRefs: Set, - refsToCheck: Set, - oas: OASDocument -): Set => { - if (refsToCheck.size > 0) { - const addtlRefs = getRefs(refsToCheck, oas); - const updated = new Set([...allRefs, ...addtlRefs]); - return buildRefSet(updated, addtlRefs, oas); - } else { - return allRefs; - } + return allRefs; }; /** * Retrieves the OAS spec components down to only those utilized by the specified path. */ export function reduceSpecComponents(oas: Oas, path: string): ComponentsObject | undefined { - const operation = oas?.operation(path, 'get'); - - const responses = operation?.schema.responses; - const usedSchemas = new Set(); - if (responses) { - for (const responseObj of Object.values(responses)) { - if ('$ref' in responseObj) { - usedSchemas.add(responseObj.$ref); - } - - if ('content' in responseObj) { - const contentObj: MediaTypeObject = responseObj.content; - for (const obj of Object.values(contentObj)) { - if ('schema' in obj) { - if ('items' in obj.schema) { - usedSchemas.add(obj.schema.items.$ref); - } else { - usedSchemas.add(obj.schema.$ref); - } - } else if ('$ref' in obj) { - usedSchemas.add(obj.$ref); - } - } - } - } - } + const responses = oas?.operation(path, 'get')?.schema.responses; + const usedSchemas = getAllRefValues(responses); if (oas?.api) { - const allUsedSchemas = buildRefSet(usedSchemas, usedSchemas, oas?.api); - // iterate the schemas and remove those not used const reduced: ComponentsObject | undefined = JSON.parse(JSON.stringify(oas?.api.components)); if (reduced) { for (const [componentType, items] of Object.entries(reduced)) { for (const component of Object.keys(items)) { - if (!allUsedSchemas.has(`#/components/${componentType}/${component}`)) { + if (!usedSchemas.has(`#/components/${componentType}/${component}`)) { delete reduced[componentType as keyof ComponentsObject]?.[component]; } } diff --git a/x-pack/platform/plugins/shared/automatic_import/server/graphs/csv/columns.ts b/x-pack/platform/plugins/shared/automatic_import/server/graphs/csv/columns.ts index 108c4cec75bf6..3c7c1ed10af42 100644 --- a/x-pack/platform/plugins/shared/automatic_import/server/graphs/csv/columns.ts +++ b/x-pack/platform/plugins/shared/automatic_import/server/graphs/csv/columns.ts @@ -30,22 +30,58 @@ export function toSafeColumnName(columnName: unknown): string | undefined { const safeName = columnName.replace(/[^a-zA-Z0-9_]/g, '_'); return /^[0-9]/.test(safeName) ? `Column${safeName}` : safeName; } -// Returns the column list from a header row. We skip values that are not strings. +/** + * Extracts column names from the provided header doc by truncating unnecessary columns + * and converting each name into a normalized format. + * + * @param tempColumnNames - The list of temporary column names (integer-based). + * @param headerObject - The processed first document (corresponding to the header row). + * @returns A filtered array of valid column names in a safe format or undefined where the value was neither string nor numbers. + */ export function columnsFromHeader( tempColumnNames: string[], headerObject: { [key: string]: unknown } ): Array { + return valuesFromHeader(tempColumnNames, headerObject).map(toSafeColumnName); +} + +/** + * Extracts values from a header object based on column names, converting non-string/numeric values to undefined. + * The function processes the array up to the last non-undefined value in the header object. + * + * @param tempColumnNames - Array of column names to look up in the header object + * @param headerObject - Object containing header values indexed by column names + * @returns Array of string/number values or undefined for non-string/number values, truncated at the last non-undefined entry + * + * @example + * const columns = ['col1', 'col2', 'col3', 'col4']; + * const header = { col1: 'value1', col2: 123, col3: 'value3', 'col4': null }; + * valuesFromHeader(columns, header); // ['value1', 123, 'value3', undefined] + */ +export function valuesFromHeader( + tempColumnNames: string[], + headerObject: { [key: string]: unknown } +): Array { const maxIndex = tempColumnNames.findLastIndex( (columnName) => headerObject[columnName] !== undefined ); return tempColumnNames .slice(0, maxIndex + 1) .map((columnName) => headerObject[columnName]) - .map(toSafeColumnName); + .map((value) => (typeof value === 'string' || typeof value === 'number' ? value : undefined)); } -// Count the number of columns actually present in the rows. +/** + * Calculates the total number of columns in a CSV by going through the processed + * documents to find the last defined value across all rows. + * + * @param tempColumnNames - An array of column names used to reference CSV row properties. + * @param csvRows - An array of row objects representing CSV data, where each key + * corresponds to a column name from `tempColumnNames`. + * @returns The total number of columns, determined by the position of the last + * defined value across all rows. + */ export function totalColumnCount( tempColumnNames: string[], csvRows: Array<{ [key: string]: unknown }> diff --git a/x-pack/platform/plugins/shared/automatic_import/server/graphs/csv/csv.test.ts b/x-pack/platform/plugins/shared/automatic_import/server/graphs/csv/csv.test.ts new file mode 100644 index 0000000000000..cf2b9d16f8e13 --- /dev/null +++ b/x-pack/platform/plugins/shared/automatic_import/server/graphs/csv/csv.test.ts @@ -0,0 +1,155 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { IScopedClusterClient } from '@kbn/core/server'; +import { handleCSV } from './csv'; +import { ESProcessorItem } from '../../../common'; +import { DocTemplate } from '../../util/pipeline'; + +interface SimpleCSVPipelineSimulationParams { + pipeline: { processors: ESProcessorItem[] }; + docs: DocTemplate[]; +} + +/** + * Simulates processing a list of documents with a defined pipeline of processors, + * specifically handling 'csv' and 'drop' processors in the way they are used in our CSV processing. + * + * @param params - An object containing the pipeline of processors and the documents to be transformed. + * @returns An object containing the processed list of documents after all processors in the pipeline have been applied. + */ +export const simpleCSVPipelineSimulation = ( + params: SimpleCSVPipelineSimulationParams +): { docs: Array<{ doc: DocTemplate }> } => { + const { pipeline, docs } = params; + for (const processor of pipeline.processors) { + if ('remove' in processor) { + // do nothing + } else if ('csv' in processor) { + // Not a real CSV parser, of course. It only handles the "json.*" field names. + const fields = processor.csv.target_fields as string[]; + for (const doc of docs) { + const message = doc._source.message; + const values = message.split(','); + const unpacked: Record = {}; + for (let i = 0; i < fields.length; i++) { + const field = fields[i].startsWith('json.') ? fields[i].slice(5) : fields[i]; + // The only error it handles is: CSV value starts with " and does not end with ". + if (values[i].startsWith('"') && !values[i].endsWith('"')) { + throw new Error('Mismatched quote'); + } + unpacked[field] = values[i].startsWith('"') ? values[i].slice(1, -1) : values[i]; + } + // eslint-disable-next-line dot-notation + doc._source['json'] = unpacked; + } + } else if ('drop' in processor) { + docs.shift(); + } else { + throw new Error('Unknown processor'); + } + } + return { docs: docs.map((doc) => ({ doc })) }; +}; + +describe('handleCSV', () => { + const mockClient = { + asCurrentUser: { + ingest: { + simulate: simpleCSVPipelineSimulation, + }, + }, + } as unknown as IScopedClusterClient; + + it('should successfully parse valid CSV logs without header', async () => { + const mockParams = { + state: { + packageName: 'testPackage', + dataStreamName: 'testDataStream', + logSamples: ['123,"string",456', '"123",Some Value,"456"'], + samplesFormat: { + columns: [], + header: false, + }, + additionalProcessors: [], + }, + client: mockClient, + }; + + const result = await handleCSV(mockParams); + expect(result.jsonSamples).toBeDefined(); + expect(result.additionalProcessors).toHaveLength(1); // Must be CSV and drop processor + if (!result.additionalProcessors) { + fail('additionalProcessors is undefined, logic error after expectation'); + } + + const csvProcessor = result.additionalProcessors[0].csv; + expect(csvProcessor).toBeDefined(); + expect(csvProcessor.target_fields).toEqual([ + 'testPackage.testDataStream.column1', + 'testPackage.testDataStream.column2', + 'testPackage.testDataStream.column3', + ]); + expect(result.jsonSamples).toEqual([ + '{"column1":"123","column2":"string","column3":"456"}', + '{"column1":"123","column2":"Some Value","column3":"456"}', + ]); + expect(result.lastExecutedChain).toBe('handleCSV'); + }); + + it('should successfully parse valid CSV logs with header', async () => { + const mockParams = { + state: { + packageName: 'testPackage', + dataStreamName: 'testDataStream', + logSamples: ['header1,header2,header3', 'value1,value2,value3'], + samplesFormat: { + columns: ['first column', 'second column'], + header: true, + }, + additionalProcessors: [], + }, + client: mockClient, + }; + + const result = await handleCSV(mockParams); + expect(result.jsonSamples).toBeDefined(); + expect(result.additionalProcessors).toHaveLength(2); // Must be CSV and drop processor + if (!result.additionalProcessors) { + fail('additionalProcessors is undefined, logic error after expectation'); + } + const csvProcessor = result.additionalProcessors[0].csv; + expect(csvProcessor).toBeDefined(); + expect(csvProcessor.target_fields).toEqual([ + 'testPackage.testDataStream.first_column', + 'testPackage.testDataStream.second_column', + 'testPackage.testDataStream.header3', + ]); + const dropProcessor = result.additionalProcessors[1].drop; + expect(dropProcessor).toBeDefined(); + expect(dropProcessor.if).toContain('header1'); // column value, not column name! + expect(result.lastExecutedChain).toBe('handleCSV'); + }); + + it('should throw UnparseableCSVFormatError when CSV parsing fails', async () => { + const mockParams = { + state: { + packageName: 'testPackage', + dataStreamName: 'testDataStream', + // Intentionally malformed according to our simple CSV parser + logSamples: ['header1,header2', '"values...'], + samplesFormat: { + columns: ['col1', 'col2'], + header: true, + }, + additionalProcessors: [], + }, + client: mockClient, + }; + await expect(handleCSV(mockParams)).rejects.toThrow('unparseable-csv-data'); + }); +}); diff --git a/x-pack/platform/plugins/shared/automatic_import/server/graphs/csv/csv.ts b/x-pack/platform/plugins/shared/automatic_import/server/graphs/csv/csv.ts index d753fd7995688..6481816227016 100644 --- a/x-pack/platform/plugins/shared/automatic_import/server/graphs/csv/csv.ts +++ b/x-pack/platform/plugins/shared/automatic_import/server/graphs/csv/csv.ts @@ -4,15 +4,17 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ +import { IScopedClusterClient } from '@kbn/core/server'; import type { LogFormatDetectionState } from '../../types'; -import type { LogDetectionNodeParams } from '../log_type_detection/types'; import { createJSONInput } from '../../util'; +import type { ESProcessorItem } from '../../../common'; import { createCSVProcessor, createDropProcessor } from '../../util/processors'; import { CSVParseError, UnparseableCSVFormatError } from '../../lib/errors/unparseable_csv_error'; import { generateColumnNames, upperBoundForColumnCount, columnsFromHeader, + valuesFromHeader, toSafeColumnName, totalColumnCount, yieldUniqueColumnNames, @@ -22,11 +24,71 @@ import { // We will only create the processor for the first MAX_CSV_COLUMNS columns. const MAX_CSV_COLUMNS = 100; -// Converts CSV samples into JSON samples. +interface HandleCSVState { + packageName: string; + dataStreamName: string; + logSamples: string[]; + samplesFormat: { + columns?: string[]; + header?: boolean; + }; + additionalProcessors: ESProcessorItem[]; +} + +interface HandleCSVParams { + state: HandleCSVState; + client: IScopedClusterClient; +} + +function createCSVPipeline( + prefix: string[], + columns: string[], + headerValues: Array +): ESProcessorItem[] { + const prefixedColumns = prefixColumns(columns, prefix); + const dropProcessors: ESProcessorItem[] = []; + + if (headerValues.length !== 0) { + const dropValues = columns.reduce((acc, column, index) => { + const headerValue = headerValues[index]; + if (headerValue !== undefined) { + acc[column] = headerValue; + } + return acc; + }, {} as Record); + + const dropProcessor = createDropProcessor( + dropValues, + prefix, + 'remove_csv_header', + 'Remove the CSV header by comparing row values to the header row.' + ); + dropProcessors.push(dropProcessor); + } + + return [createCSVProcessor('message', prefixedColumns), ...dropProcessors]; +} + +/** + * Processes CSV log data by parsing, testing, and converting to JSON format. + * + * The process follows three stages: + * 1. Initial parsing with temporary column names (column1, column2, etc.) + * 2. Testing with actual pipeline using package.dataStream.columnName format + * 3. Converting to JSON format for further processing + * + * Final column names are determined by combining LLM suggestions, header row parsing, + * and temporary columns as fallback. Includes header row handling and CSV-to-JSON conversion. + * + * @param param0 - Object containing state (log samples, format info) and Elasticsearch client + * @returns Promise with JSON samples, processors, and chain label + * @throws UnparseableCSVFormatError if CSV parsing fails + */ export async function handleCSV({ state, client, -}: LogDetectionNodeParams): Promise> { +}: HandleCSVParams): Promise> { + const jsonKey = 'json'; const packageName = state.packageName; const dataStreamName = state.dataStreamName; @@ -34,10 +96,10 @@ export async function handleCSV({ const temporaryColumns = generateColumnNames( Math.min(upperBoundForColumnCount(samples), MAX_CSV_COLUMNS) ); - const temporaryProcessor = createCSVProcessor('message', temporaryColumns); + const temporaryPipeline = createCSVPipeline([jsonKey], temporaryColumns, []); const { pipelineResults: tempResults, errors: tempErrors } = await createJSONInput( - [temporaryProcessor], + temporaryPipeline, samples, client ); @@ -46,51 +108,56 @@ export async function handleCSV({ throw new UnparseableCSVFormatError(tempErrors as CSVParseError[]); } - const headerColumns = state.samplesFormat.header - ? columnsFromHeader(temporaryColumns, tempResults[0]) - : []; + // Some basic information we'll need later + const prefix = [packageName, dataStreamName]; + + // What columns does the LLM suggest? const llmProvidedColumns = (state.samplesFormat.columns || []).map(toSafeColumnName); - const needColumns = totalColumnCount(temporaryColumns, tempResults); + + // What columns do we get by parsing the header row, if any exists? + const headerColumns: Array = []; + const headerValues: Array = []; + const csvRows = tempResults.map((result) => result[jsonKey] as { [key: string]: unknown }); + + if (state.samplesFormat.header) { + const headerRow = csvRows[0]; + headerValues.push(...valuesFromHeader(temporaryColumns, headerRow)); + headerColumns.push(...columnsFromHeader(temporaryColumns, headerRow)); + } + + // Combine all that information into a single list of columns const columns: string[] = Array.from( - yieldUniqueColumnNames(needColumns, [llmProvidedColumns, headerColumns], temporaryColumns) + yieldUniqueColumnNames( + totalColumnCount(temporaryColumns, csvRows), + [llmProvidedColumns, headerColumns], + temporaryColumns + ) ); - const prefix = [packageName, dataStreamName]; - const prefixedColumns = prefixColumns(columns, prefix); - const csvProcessor = createCSVProcessor('message', prefixedColumns); - const csvHandlingProcessors = [csvProcessor]; + // These processors extract CSV fields into a specific key. + const csvHandlingProcessors = createCSVPipeline(prefix, columns, headerValues); - if (headerColumns.length > 0) { - const dropValues = columns.reduce((acc, column, index) => { - if (headerColumns[index] !== undefined) { - acc[column] = String(headerColumns[index]); - } - return acc; - }, {} as Record); - const dropProcessor = createDropProcessor( - dropValues, - prefix, - 'remove_csv_header', - 'Remove the CSV header line by comparing the values' - ); - csvHandlingProcessors.push(dropProcessor); + // Test the processors on the samples provided + const { errors } = await createJSONInput(csvHandlingProcessors, samples, client); + + if (errors.length > 0) { + throw new UnparseableCSVFormatError(errors as CSVParseError[]); } - const { pipelineResults: finalResults, errors: finalErrors } = await createJSONInput( - csvHandlingProcessors, + // These processors extract CSV fields into a specific key. + const csvToJSONProcessors = createCSVPipeline([jsonKey], columns, headerValues); + + const { pipelineResults: jsonResults, errors: jsonErrors } = await createJSONInput( + csvToJSONProcessors, samples, client ); - if (finalErrors.length > 0) { - throw new UnparseableCSVFormatError(finalErrors as CSVParseError[]); + if (jsonErrors.length > 0) { + throw new UnparseableCSVFormatError(jsonErrors as CSVParseError[]); } - // Converts JSON Object into a string and parses it as a array of JSON strings - const jsonSamples = finalResults - .map((log) => log[packageName]) - .map((log) => (log as Record)[dataStreamName]) - .map((log) => JSON.stringify(log)); + const jsonSamples = jsonResults.map((log) => log[jsonKey]).map((log) => JSON.stringify(log)); return { jsonSamples, diff --git a/x-pack/platform/plugins/shared/automatic_import/server/graphs/kv/constants.ts b/x-pack/platform/plugins/shared/automatic_import/server/graphs/kv/constants.ts index 46ed44db01db4..f942b526cf4e7 100644 --- a/x-pack/platform/plugins/shared/automatic_import/server/graphs/kv/constants.ts +++ b/x-pack/platform/plugins/shared/automatic_import/server/graphs/kv/constants.ts @@ -13,6 +13,26 @@ export const KV_EXAMPLE_ANSWER = { ignore_missing: true, }; +export const KV_HEADER_EXAMPLE_LOGS = [ + { + example: + '[18/Feb/2025:22:39:16 +0000] CONNECT conn=20597223 from=10.1.1.1:1234 to=10.2.3.4:4389 protocol=LDAP', + header: '[18/Feb/2025:22:39:16 +0000] CONNECT', + structuredBody: 'conn=20597223 from=10.1.1.1:1234 to=10.2.3.4:4389 protocol=LDAP', + grok_pattern: + '[%{HTTPDATE:`{packageName}.{dataStreamName}.`timestamp}] %{WORD:`{packageName}.{dataStreamName}`action}s%{GREEDYDATA:message}', + }, + { + example: + '2021-10-22 22:12:09,871 DEBUG [org.keycloak.events] (default task-3) operationType=CREATE, realmId=test, clientId=abcdefgh userId=sdfsf-b89c-4fca-9088-sdfsfsf, ipAddress=10.1.1.1, resourceType=USER, resourcePath=users/07972d16-b173-4c99-803d-90f211080f40', + header: '2021-10-22 22:12:09,871 DEBUG [org.keycloak.events] (default task-3)', + structuredBody: + 'operationType=CREATE, realmId=test, clientId=7bcaf1cb-820a-40f1-91dd-75ced03ef03b, userId=ce637d23-b89c-4fca-9088-1aea1d053e19, ipAddress=10.1.1.1, resourceType=USER, resourcePath=users/07972d16-b173-4c99-803d-90f211080f40', + grok_pattern: + '%{TIMESTAMP_ISO8601:`{packageName}.{dataStreamName}.`timestamp} %{LOGLEVEL:`{packageName}.{dataStreamName}`loglevel} [%{DATA:`{packageName}.{dataStreamName}`logsource}] (%{DATA:`{packageName}.{dataStreamName}`task})s%{GREEDYDATA:message}', + }, +]; + export const KV_HEADER_EXAMPLE_ANSWER = { rfc: 'RFC2454', regex: diff --git a/x-pack/platform/plugins/shared/automatic_import/server/graphs/kv/header.ts b/x-pack/platform/plugins/shared/automatic_import/server/graphs/kv/header.ts index 532bcfb9672c3..9f2f9dcf98c58 100644 --- a/x-pack/platform/plugins/shared/automatic_import/server/graphs/kv/header.ts +++ b/x-pack/platform/plugins/shared/automatic_import/server/graphs/kv/header.ts @@ -9,7 +9,7 @@ import { JsonOutputParser } from '@langchain/core/output_parsers'; import type { KVState } from '../../types'; import type { HandleKVNodeParams } from './types'; import { KV_HEADER_PROMPT } from './prompts'; -import { KV_HEADER_EXAMPLE_ANSWER } from './constants'; +import { KV_HEADER_EXAMPLE_ANSWER, KV_HEADER_EXAMPLE_LOGS } from './constants'; export async function handleHeader({ state, @@ -23,6 +23,7 @@ export async function handleHeader({ samples: state.logSamples, packageName: state.packageName, dataStreamName: state.dataStreamName, + example_logs: KV_HEADER_EXAMPLE_LOGS, ex_answer: JSON.stringify(KV_HEADER_EXAMPLE_ANSWER, null, 2), }); diff --git a/x-pack/platform/plugins/shared/automatic_import/server/graphs/kv/kv.test.ts b/x-pack/platform/plugins/shared/automatic_import/server/graphs/kv/kv.test.ts index 1f995940470c2..ee5180fb0517c 100644 --- a/x-pack/platform/plugins/shared/automatic_import/server/graphs/kv/kv.test.ts +++ b/x-pack/platform/plugins/shared/automatic_import/server/graphs/kv/kv.test.ts @@ -56,8 +56,8 @@ describe('Testing kv header', () => { field: 'message', field_split: '', target_field: 'testPackage.testDatastream', - trim_key: '', - trim_value: '', + trim_key: null, + trim_value: null, value_split: '', }, }, diff --git a/x-pack/platform/plugins/shared/automatic_import/server/graphs/kv/prompts.ts b/x-pack/platform/plugins/shared/automatic_import/server/graphs/kv/prompts.ts index 21889be26cfb2..409c4b5fd50a6 100644 --- a/x-pack/platform/plugins/shared/automatic_import/server/graphs/kv/prompts.ts +++ b/x-pack/platform/plugins/shared/automatic_import/server/graphs/kv/prompts.ts @@ -29,8 +29,8 @@ export const KV_MAIN_PROMPT = ChatPromptTemplate.fromMessages([ 4. The \`value_split\` is the delimeter regex pattern to use for splitting the key from the value within a key-value pair (e.g., ':' or '=' ) 5. The \`field_split\` is the regex pattern to use for splitting key-value pairs in the log. Make sure the regex pattern breaks the log into key-value pairs. 6. Ensure that the KV processor can handle different scenarios, such as: Optional or missing fields in the logs , Varying delimiters between keys and values (e.g., = or :), Complex log structures (e.g., nested key-value pairs or key-value pairs within strings, whitespaces , urls, ipv4 , ipv6 address, mac address etc.,). - 7. Use \`trim_key\` for string of characters to trim from extracted keys. - 8. Use \`trim_value\` for string of characters to trim from extracted values. + 7. Use \`trim_key\` for string of characters to trim from extracted keys. Make sure to escape single quotes like \`\\'\`. + 8. Use \`trim_value\` for string of characters to trim from extracted values. Make sure to escape single quotes like \`\\'\`. You ALWAYS follow these guidelines when writing your response: @@ -68,23 +68,34 @@ export const KV_HEADER_PROMPT = ChatPromptTemplate.fromMessages([ ], [ 'human', - `Looking at the multiple syslog samples provided in the context, your task is to separate the "header" and the "message body" from this log. Our goal is to identify which RFC they belong to. Then create a regex pattern that can separate the header and the structured body. -You then have to create a grok pattern using the regex pattern. -You are given a log entry in a structured format. + `Here are a series of syslog samples in a structured log format, and your task is to create a regex and a grok pattern that will correctly parse only the header part of these logs. The pattern should be critical about the following points: -Follow these steps to identify the header pattern: 1. Identify if the log samples fall under RFC5424 or RFC3164. If not, return 'Custom Format'. -2. The log samples contain the header and structured body. The header may contain any or all of priority, timestamp, loglevel, hostname, ipAddress, messageId or any free-form text or non key-value information etc., -3. Make sure the regex and grok pattern matches all the header information. Only the structured message body should be under GREEDYDATA in grok pattern. +2. If the log samples fall under RFC3164 or RFC5424 then parse the header and structured body according to the RFC definition. +3. If the log sampels are in custom format , pay special attention to the special characters like brackets , colons or any punctuation marks in the syslog header, and ensure they are properly escaped. +4. The log samples contain the header and structured body. The header may contain any or all of priority, timestamp, loglevel, hostname, ipAddress, messageId or any free-form text or non key-value information etc., - You ALWAYS follow these guidelines when writing your response: +You ALWAYS follow these guidelines when writing your response: - Do not parse the message part in the regex. Just the header part should be in regex and grok_pattern. + - Timestamp Handling: Pay close attention to the timestamp format, ensuring that it is handled correctly with respect to any variations in date or time formatting. The timestamp should be extracted accurately, and make sure the pattern accounts for any variations in timezone representation, like time zone offsets or 'UTC' markers. +Also look for special characters around the timestamp in Custom Format, Like a timestamp enclosed in [] or <> or (). Match these characters in the grok pattern with appropriate excaping. + - Special Characters: Ensure that all special characters, like brackets, colons, or any punctuation marks in the syslog header, are properly escaped. Be particularly cautious with characters that could interfere with the regex engine, such as periods (.), asterisks (*), or square brackets ([]), and ensure they are treated correctly in the pattern. + - Strict Parsing of the Header: The regex and grok pattern should strictly focus on parsing only the header part of the syslog sample. Do not include any logic for parsing the structured message body. The message body should be captured using the GREEDYDATA field in the grok pattern, and any non-header content should be left out of the main pattern. + - Pattern Efficiency: Ensure that both the regex and the grok pattern are as efficient as possible while still accurately capturing the header components. Avoid overly complex or overly broad patterns that could capture unintended data. - Make sure to map the remaining message body to \'message\' in grok pattern. + - If there are special characters between header and message body like space character, make sure to include that character in the header grok pattern - Make sure to add \`{packageName}.{dataStreamName}\` as a prefix to each field in the pattern. Refer to example response. - Do not respond with anything except the processor as a JSON object enclosed with 3 backticks (\`), see example response above. Use strict JSON response format. + Some of the example samples look like this: + +\`\`\`json + {example_logs} +\`\`\` + + You are required to provide the output in the following example response format: @@ -120,6 +131,7 @@ Follow these steps to fix the errors in the header pattern: 2. The log samples contain the header and structured body. The header may contain any or all of priority, timestamp, loglevel, hostname, ipAddress, messageId or any free-form text or non key-value information etc., 3. The message body may start with a description, followed by structured key-value pairs. 4. Make sure the regex and grok pattern matches all the header information. Only the structured message body should be under GREEDYDATA in grok pattern. + You ALWAYS follow these guidelines when writing your response: - Do not parse the message part in the regex. Just the header part should be in regex and grok_pattern. diff --git a/x-pack/platform/plugins/shared/automatic_import/server/graphs/log_type_detection/graph.ts b/x-pack/platform/plugins/shared/automatic_import/server/graphs/log_type_detection/graph.ts index ae4c607ab3f68..7a56fb57f83f4 100644 --- a/x-pack/platform/plugins/shared/automatic_import/server/graphs/log_type_detection/graph.ts +++ b/x-pack/platform/plugins/shared/automatic_import/server/graphs/log_type_detection/graph.ts @@ -126,7 +126,7 @@ export async function getLogFormatDetectionGraph({ model, client }: LogDetection 'handleUnstructuredGraph', (await getUnstructuredGraph({ model, client })).withConfig({ runName: 'Unstructured' }) ) - .addNode('handleCSV', (state: LogFormatDetectionState) => handleCSV({ state, model, client })) + .addNode('handleCSV', (state: LogFormatDetectionState) => handleCSV({ state, client })) .addEdge(START, 'modelInput') .addEdge('modelInput', 'handleLogFormatDetection') .addEdge('handleKVGraph', 'modelOutput') diff --git a/x-pack/platform/plugins/shared/automatic_import/server/templates/processors/kv.yml.njk b/x-pack/platform/plugins/shared/automatic_import/server/templates/processors/kv.yml.njk index 83091c25802af..6e3a9195873db 100644 --- a/x-pack/platform/plugins/shared/automatic_import/server/templates/processors/kv.yml.njk +++ b/x-pack/platform/plugins/shared/automatic_import/server/templates/processors/kv.yml.njk @@ -2,6 +2,6 @@ field: message field_split: '{{ kvInput.field_split }}' value_split: '{{ kvInput.value_split }}' - trim_key: '{{ kvInput.trim_key }}' - trim_value: '{{ kvInput.trim_value }}' + trim_key: {{ kvInput.trim_key }} + trim_value: {{ kvInput.trim_value }} target_field: '{{ packageName }}.{{ dataStreamName }}' diff --git a/x-pack/platform/plugins/shared/automatic_import/server/util/fields.ts b/x-pack/platform/plugins/shared/automatic_import/server/util/fields.ts index 810754b23e150..f43ca8166e254 100644 --- a/x-pack/platform/plugins/shared/automatic_import/server/util/fields.ts +++ b/x-pack/platform/plugins/shared/automatic_import/server/util/fields.ts @@ -23,3 +23,13 @@ export type FieldPath = string[]; export function fieldPathToProcessorString(fieldPath: FieldPath): string { return fieldPath.join('.'); } + +/** + * Converts a string representing a processor's path into a field path array. + * + * @param processorString - The dotted string to convert + * @returns An array of path segments representing the field path + */ +export function processorStringToFieldPath(processorString: string): FieldPath { + return processorString.split('.'); +} diff --git a/x-pack/platform/plugins/shared/automatic_import/server/util/pipeline.ts b/x-pack/platform/plugins/shared/automatic_import/server/util/pipeline.ts index 6eacb8b19b468..843832046d3e6 100644 --- a/x-pack/platform/plugins/shared/automatic_import/server/util/pipeline.ts +++ b/x-pack/platform/plugins/shared/automatic_import/server/util/pipeline.ts @@ -8,11 +8,12 @@ import type { IScopedClusterClient } from '@kbn/core-elasticsearch-server'; import { ESProcessorItem } from '../../common'; import { createPassthroughFailureProcessor, createRemoveProcessor } from './processors'; -interface DocTemplate { +export interface DocTemplate { _index: string; _id: string; _source: { message: string; + [key: string]: unknown; }; } diff --git a/x-pack/platform/plugins/shared/automatic_import/server/util/processors.ts b/x-pack/platform/plugins/shared/automatic_import/server/util/processors.ts index 10283bdeff9d8..2c84656bb7694 100644 --- a/x-pack/platform/plugins/shared/automatic_import/server/util/processors.ts +++ b/x-pack/platform/plugins/shared/automatic_import/server/util/processors.ts @@ -69,6 +69,13 @@ export function createKVProcessor(kvInput: KVProcessor, state: KVState): ESProce autoescape: false, }); const template = env.getTemplate('kv.yml.njk'); + if (kvInput.trim_key) { + kvInput.trim_key = kvInput.trim_key.replace(/['"]/g, '\\$&'); + } + + if (kvInput.trim_value) { + kvInput.trim_value = kvInput.trim_value.replace(/['"]/g, '\\$&'); + } const renderedTemplate = template.render({ kvInput, packageName: state.packageName, diff --git a/x-pack/platform/plugins/shared/fleet/common/constants/agentless.ts b/x-pack/platform/plugins/shared/fleet/common/constants/agentless.ts index 0c7e09efc352e..71f4a422f1c5c 100644 --- a/x-pack/platform/plugins/shared/fleet/common/constants/agentless.ts +++ b/x-pack/platform/plugins/shared/fleet/common/constants/agentless.ts @@ -15,6 +15,23 @@ export const AGENTLESS_GLOBAL_TAG_NAME_ORGANIZATION = 'organization'; export const AGENTLESS_GLOBAL_TAG_NAME_DIVISION = 'division'; export const AGENTLESS_GLOBAL_TAG_NAME_TEAM = 'team'; +export const MAXIMUM_RETRIES = 3; + +const HTTP_500_INTERNAL_SERVER_ERROR = 500; +const HTTP_502_BAD_GATEWAY = 502; +const HTTP_503_SERVICE_UNAVAILABLE = 503; +const HTTP_504_GATEWAY_TIMEOUT = 504; + +const ECONNREFUSED_CODE = 'ECONNREFUSED'; + +export const RETRYABLE_HTTP_STATUSES = [ + HTTP_500_INTERNAL_SERVER_ERROR, + HTTP_502_BAD_GATEWAY, + HTTP_503_SERVICE_UNAVAILABLE, + HTTP_504_GATEWAY_TIMEOUT, +]; + +export const RETRYABLE_SERVER_CODES = [ECONNREFUSED_CODE]; // Allowed output types for agentless integrations export const AGENTLESS_ALLOWED_OUTPUT_TYPES = [outputType.Elasticsearch]; diff --git a/x-pack/platform/plugins/shared/fleet/common/experimental_features.ts b/x-pack/platform/plugins/shared/fleet/common/experimental_features.ts index ed0fb22b7dd0d..233c32720b20c 100644 --- a/x-pack/platform/plugins/shared/fleet/common/experimental_features.ts +++ b/x-pack/platform/plugins/shared/fleet/common/experimental_features.ts @@ -13,6 +13,7 @@ const _allowedExperimentalValues = { enableAutomaticAgentUpgrades: false, enableSyncIntegrationsOnRemote: false, enableSSLSecrets: false, + enabledUpgradeAgentlessDeploymentsTask: false, }; /** diff --git a/x-pack/platform/plugins/shared/fleet/public/applications/integrations/sections/epm/screens/detail/index.tsx b/x-pack/platform/plugins/shared/fleet/public/applications/integrations/sections/epm/screens/detail/index.tsx index 8f17fbc7497c2..7ab8f667a42f4 100644 --- a/x-pack/platform/plugins/shared/fleet/public/applications/integrations/sections/epm/screens/detail/index.tsx +++ b/x-pack/platform/plugins/shared/fleet/public/applications/integrations/sections/epm/screens/detail/index.tsx @@ -47,6 +47,7 @@ import { useIntegrationsStateContext, useGetSettingsQuery, } from '../../../../hooks'; +import { useAgentless } from '../../../../../fleet/sections/agent_policy/create_package_policy_page/single_page_layout/hooks/setup_technology'; import { INTEGRATIONS_ROUTING_PATHS } from '../../../../constants'; import { useGetPackageInfoByKeyQuery, @@ -135,6 +136,7 @@ export function Detail() { const { getHref, getPath } = useLink(); const history = useHistory(); const { pathname, search, hash } = useLocation(); + const { isAgentlessIntegration } = useAgentless(); const queryParams = useMemo(() => new URLSearchParams(search), [search]); const integration = useMemo(() => queryParams.get('integration'), [queryParams]); const prerelease = useMemo(() => Boolean(queryParams.get('prerelease')), [queryParams]); @@ -412,6 +414,7 @@ export function Detail() { isFirstTimeAgentUser, isGuidedOnboardingActive, pkgkey, + isAgentlessIntegration: isAgentlessIntegration(packageInfo || undefined), }); /** Users from Security Solution onboarding page will have onboardingLink and onboardingAppId in the query params @@ -440,11 +443,13 @@ export function Detail() { hash, history, integration, + isAgentlessIntegration, isCloud, isFirstTimeAgentUser, isGuidedOnboardingActive, onboardingAppId, onboardingLink, + packageInfo, pathname, pkgkey, search, diff --git a/x-pack/platform/plugins/shared/fleet/public/applications/integrations/sections/epm/screens/detail/utils/get_install_route_options.ts b/x-pack/platform/plugins/shared/fleet/public/applications/integrations/sections/epm/screens/detail/utils/get_install_route_options.ts index cf41814a34aed..19e5bfc5fe86c 100644 --- a/x-pack/platform/plugins/shared/fleet/public/applications/integrations/sections/epm/screens/detail/utils/get_install_route_options.ts +++ b/x-pack/platform/plugins/shared/fleet/public/applications/integrations/sections/epm/screens/detail/utils/get_install_route_options.ts @@ -29,6 +29,7 @@ interface GetInstallPkgRouteOptionsParams { isCloud: boolean; isFirstTimeAgentUser: boolean; isGuidedOnboardingActive: boolean; + isAgentlessIntegration?: boolean; } export type InstallPkgRouteOptions = [ @@ -50,6 +51,7 @@ export const getInstallPkgRouteOptions = ({ isFirstTimeAgentUser, isCloud, isGuidedOnboardingActive, + isAgentlessIntegration, }: GetInstallPkgRouteOptionsParams): InstallPkgRouteOptions => { const integrationOpts: { integration?: string } = integration ? { integration } : {}; const packageExemptFromStepsLayout = isPackageExemptFromStepsLayout(pkgkey); @@ -97,7 +99,7 @@ export const getInstallPkgRouteOptions = ({ } const state: CreatePackagePolicyRouteState = { - onSaveNavigateTo: redirectToPath, + onSaveNavigateTo: !isAgentlessIntegration ? redirectToPath : undefined, onSaveQueryParams, onCancelNavigateTo: [ INTEGRATIONS_PLUGIN_ID, diff --git a/x-pack/platform/plugins/shared/fleet/server/errors/index.ts b/x-pack/platform/plugins/shared/fleet/server/errors/index.ts index af0770b61f180..93f33a2f95662 100644 --- a/x-pack/platform/plugins/shared/fleet/server/errors/index.ts +++ b/x-pack/platform/plugins/shared/fleet/server/errors/index.ts @@ -62,6 +62,12 @@ export class AgentlessAgentDeleteError extends FleetError { super(`Error deleting agentless agent in Fleet, ${message}`); } } + +export class AgentlessAgentUpgradeError extends FleetError { + constructor(message: string) { + super(`Error upgrading agentless agent in Fleet, ${message}`); + } +} export class AgentlessAgentConfigError extends FleetError { constructor(message: string) { super(`Error validating Agentless API configuration in Fleet, ${message}`); diff --git a/x-pack/platform/plugins/shared/fleet/server/mocks/index.ts b/x-pack/platform/plugins/shared/fleet/server/mocks/index.ts index 1608bdb904a8e..b72a5e585f3e8 100644 --- a/x-pack/platform/plugins/shared/fleet/server/mocks/index.ts +++ b/x-pack/platform/plugins/shared/fleet/server/mocks/index.ts @@ -140,6 +140,7 @@ export const createAppContextStartContractMock = ( : {}), unenrollInactiveAgentsTask: {} as any, deleteUnenrolledAgentsTask: {} as any, + updateAgentlessDeploymentsTask: {} as any, syncIntegrationsTask: {} as any, automaticAgentUpgradeTask: {} as any, }; diff --git a/x-pack/platform/plugins/shared/fleet/server/plugin.ts b/x-pack/platform/plugins/shared/fleet/server/plugin.ts index e8704d8b3d9a4..19119a2bdaa4a 100644 --- a/x-pack/platform/plugins/shared/fleet/server/plugin.ts +++ b/x-pack/platform/plugins/shared/fleet/server/plugin.ts @@ -147,6 +147,7 @@ import { registerUpgradeManagedPackagePoliciesTask } from './services/setup/mana import { registerDeployAgentPoliciesTask } from './services/agent_policies/deploy_agent_policies_task'; import { DeleteUnenrolledAgentsTask } from './tasks/delete_unenrolled_agents_task'; import { registerBumpAgentPoliciesTask } from './services/agent_policies/bump_agent_policies_task'; +import { UpgradeAgentlessDeploymentsTask } from './tasks/upgrade_agentless_deployment'; import { SyncIntegrationsTask } from './tasks/sync_integrations_task'; import { AutomaticAgentUpgradeTask } from './tasks/automatic_agent_upgrade_task'; @@ -200,6 +201,7 @@ export interface FleetAppContext { uninstallTokenService: UninstallTokenServiceInterface; unenrollInactiveAgentsTask: UnenrollInactiveAgentsTask; deleteUnenrolledAgentsTask: DeleteUnenrolledAgentsTask; + updateAgentlessDeploymentsTask: UpgradeAgentlessDeploymentsTask; automaticAgentUpgradeTask: AutomaticAgentUpgradeTask; taskManagerStart?: TaskManagerStartContract; fetchUsage?: (abortController: AbortController) => Promise; @@ -305,6 +307,7 @@ export class FleetPlugin private fleetMetricsTask?: FleetMetricsTask; private unenrollInactiveAgentsTask?: UnenrollInactiveAgentsTask; private deleteUnenrolledAgentsTask?: DeleteUnenrolledAgentsTask; + private updateAgentlessDeploymentsTask?: UpgradeAgentlessDeploymentsTask; private syncIntegrationsTask?: SyncIntegrationsTask; private automaticAgentUpgradeTask?: AutomaticAgentUpgradeTask; @@ -653,6 +656,11 @@ export class FleetPlugin taskManager: deps.taskManager, logFactory: this.initializerContext.logger, }); + this.updateAgentlessDeploymentsTask = new UpgradeAgentlessDeploymentsTask({ + core, + taskManager: deps.taskManager, + logFactory: this.initializerContext.logger, + }); this.syncIntegrationsTask = new SyncIntegrationsTask({ core, taskManager: deps.taskManager, @@ -710,6 +718,7 @@ export class FleetPlugin uninstallTokenService, unenrollInactiveAgentsTask: this.unenrollInactiveAgentsTask!, deleteUnenrolledAgentsTask: this.deleteUnenrolledAgentsTask!, + updateAgentlessDeploymentsTask: this.updateAgentlessDeploymentsTask!, automaticAgentUpgradeTask: this.automaticAgentUpgradeTask!, taskManagerStart: plugins.taskManager, fetchUsage: this.fetchUsage, @@ -722,7 +731,11 @@ export class FleetPlugin this.checkDeletedFilesTask?.start({ taskManager: plugins.taskManager }).catch(() => {}); this.unenrollInactiveAgentsTask?.start({ taskManager: plugins.taskManager }).catch(() => {}); this.deleteUnenrolledAgentsTask?.start({ taskManager: plugins.taskManager }).catch(() => {}); + this.updateAgentlessDeploymentsTask + ?.start({ taskManager: plugins.taskManager }) + .catch(() => {}); this.automaticAgentUpgradeTask?.start({ taskManager: plugins.taskManager }).catch(() => {}); + startFleetUsageLogger(plugins.taskManager).catch(() => {}); this.fleetMetricsTask ?.start(plugins.taskManager, core.elasticsearch.client.asInternalUser) diff --git a/x-pack/platform/plugins/shared/fleet/server/services/agents/agentless_agent.test.ts b/x-pack/platform/plugins/shared/fleet/server/services/agents/agentless_agent.test.ts index 9cf952c9d94c7..efe2f934541cc 100644 --- a/x-pack/platform/plugins/shared/fleet/server/services/agents/agentless_agent.test.ts +++ b/x-pack/platform/plugins/shared/fleet/server/services/agents/agentless_agent.test.ts @@ -512,6 +512,47 @@ describe('Agentless Agent service', () => { ); }); + it('should upgraded agentless agent for ESS', async () => { + const returnValue = { + id: 'mocked', + regional_id: 'mocked', + }; + (axios as jest.MockedFunction).mockResolvedValueOnce(returnValue); + jest.spyOn(appContextService, 'getConfig').mockReturnValue({ + agentless: { + enabled: true, + api: { + url: 'http://api.agentless.com', + tls: { + certificate: '/path/to/cert', + key: '/path/to/key', + ca: '/path/to/ca', + }, + }, + }, + } as any); + jest.spyOn(appContextService, 'getCloud').mockReturnValue({ isCloudEnabled: true } as any); + + await agentlessAgentService.upgradeAgentlessDeployment( + 'mocked-agentless-agent-policy-id', + '8.17.0' + ); + + expect(axios).toHaveBeenCalledTimes(1); + + expect(axios).toHaveBeenCalledWith( + expect.objectContaining({ + headers: expect.anything(), + httpsAgent: expect.anything(), + method: 'PUT', + data: { + stack_version: '8.17.0', + }, + url: 'http://api.agentless.com/api/v1/ess/deployments/mocked-agentless-agent-policy-id', + }) + ); + }); + it('should delete agentless agent for serverless', async () => { const returnValue = { id: 'mocked', diff --git a/x-pack/platform/plugins/shared/fleet/server/services/agents/agentless_agent.ts b/x-pack/platform/plugins/shared/fleet/server/services/agents/agentless_agent.ts index ab65d497ba525..fe618b3eeb12b 100644 --- a/x-pack/platform/plugins/shared/fleet/server/services/agents/agentless_agent.ts +++ b/x-pack/platform/plugins/shared/fleet/server/services/agents/agentless_agent.ts @@ -23,6 +23,7 @@ import { AgentlessAgentConfigError, AgentlessAgentCreateError, AgentlessAgentDeleteError, + AgentlessAgentUpgradeError, } from '../../errors'; import { AGENTLESS_GLOBAL_TAG_NAME_ORGANIZATION, @@ -36,6 +37,11 @@ import { listEnrollmentApiKeys } from '../api_keys'; import { listFleetServerHosts } from '../fleet_server_host'; import type { AgentlessConfig } from '../utils/agentless'; import { prependAgentlessApiBasePathToEndpoint, isAgentlessEnabled } from '../utils/agentless'; +import { + MAXIMUM_RETRIES, + RETRYABLE_HTTP_STATUSES, + RETRYABLE_SERVER_CODES, +} from '../../../common/constants/agentless'; interface AgentlessAgentErrorHandlingMessages { [key: string]: { @@ -205,6 +211,72 @@ class AgentlessAgentService { return response; } + public async upgradeAgentlessDeployment(policyId: string, version: string) { + const logger = appContextService.getLogger(); + const traceId = apm.currentTransaction?.traceparent; + const agentlessConfig = appContextService.getConfig()?.agentless; + const tlsConfig = this.createTlsConfig(agentlessConfig); + const urlEndpoint = prependAgentlessApiBasePathToEndpoint( + agentlessConfig, + `/deployments/${policyId}` + ).split('/api')[1]; + logger.info( + `[Agentless API] Call Agentless API endpoint ${urlEndpoint} to upgrade agentless deployment` + ); + const requestConfig = { + url: prependAgentlessApiBasePathToEndpoint(agentlessConfig, `/deployments/${policyId}`), + method: 'PUT', + data: { + stack_version: version, + }, + ...this.getHeaders(tlsConfig, traceId), + }; + + const errorMetadata: LogMeta = { + trace: { + id: traceId, + }, + }; + + const requestConfigDebugStatus = this.createRequestConfigDebug(requestConfig); + + logger.info( + `[Agentless API] Start upgrading agentless deployment for agent policy ${requestConfigDebugStatus}` + ); + + if (!isAgentlessEnabled) { + logger.error( + '[Agentless API] Agentless API is not supported. Upgrading agentless agent is not supported in non-cloud' + ); + } + + if (!agentlessConfig) { + logger.error('[Agentless API] kibana.yml is currently missing Agentless API configuration'); + } + + logger.info(`[Agentless API] Upgrading agentless agent with TLS config with certificate`); + + logger.info( + `[Agentless API] Upgrade agentless deployment with request config ${requestConfigDebugStatus}` + ); + + const response = await axios(requestConfig).catch(async (error: AxiosError) => { + await this.handleErrorsWithRetries( + error, + requestConfig, + 'upgrade', + logger, + MAXIMUM_RETRIES, + policyId, + requestConfigDebugStatus, + errorMetadata, + traceId + ); + }); + + return response; + } + private getHeaders(tlsConfig: SslConfig, traceId: string | undefined) { return { headers: { @@ -301,7 +373,7 @@ class AgentlessAgentService { } private catchAgentlessApiError( - action: 'create' | 'delete', + action: 'create' | 'delete' | 'upgrade', error: Error | AxiosError, logger: Logger, agentlessPolicyId: string, @@ -324,12 +396,19 @@ class AgentlessAgentService { `${axiosError.code} ${this.convertCauseErrorsToString(axiosError)}`; if (!axios.isAxiosError(error)) { + let errorLogMessage; + + if (action === 'create') { + errorLogMessage = `[Agentless API] Creating agentless failed with an error that is not an AxiosError for agentless policy`; + } + if (action === 'delete') { + errorLogMessage = `[Agentless API] Deleting agentless deployment failed with an error that is not an Axios error for agentless policy`; + } + if (action === 'upgrade') { + errorLogMessage = `[Agentless API] Upgrading agentless deployment failed with an error that is not an Axios error for agentless policy`; + } logger.error( - `${ - action === 'create' - ? `[Agentless API] Creating agentless failed with an error that is not an AxiosError for agentless policy` - : `[Agentless API] Deleting agentless deployment failed with an error that is not an Axios error for agentless policy` - } ${error} ${requestConfigDebugStatus}`, + `${errorLogMessage} ${error} ${requestConfigDebugStatus}`, errorMetadataWithRequestConfig ); @@ -378,9 +457,9 @@ class AgentlessAgentService { } else { // Something happened in setting up the request that triggered an Error logger.error( - `[Agentless API] ${ - action === 'create' ? 'Creating' : 'Deleting' - } the agentless agent failed ${errorLogCodeCause(error)} ${requestConfigDebugStatus}`, + `[Agentless API] ${action + 'ing'} the agentless agent failed ${errorLogCodeCause( + error + )} ${requestConfigDebugStatus}`, errorMetadataWithRequestConfig ); @@ -393,7 +472,7 @@ class AgentlessAgentService { } private handleResponseError( - action: 'create' | 'delete', + action: 'create' | 'delete' | 'upgrade', response: AxiosResponse, logger: Logger, errorMetadataWithRequestConfig: LogMeta, @@ -429,9 +508,15 @@ class AgentlessAgentService { }; private getAgentlessAgentError(action: string, userMessage: string, traceId: string | undefined) { - return action === 'create' - ? new AgentlessAgentCreateError(this.withRequestIdMessage(userMessage, traceId)) - : new AgentlessAgentDeleteError(this.withRequestIdMessage(userMessage, traceId)); + if (action === 'create') { + return new AgentlessAgentCreateError(this.withRequestIdMessage(userMessage, traceId)); + } + if (action === 'delete') { + return new AgentlessAgentDeleteError(this.withRequestIdMessage(userMessage, traceId)); + } + if (action === 'upgrade') { + return new AgentlessAgentUpgradeError(this.withRequestIdMessage(userMessage, traceId)); + } } private getErrorHandlingMessages(agentlessPolicyId: string): AgentlessAgentErrorHandlingMessages { @@ -439,93 +524,214 @@ class AgentlessAgentService { 400: { create: { log: '[Agentless API] Creating the agentless agent failed with a status 400, bad request for agentless policy.', - message: `the Agentless API could not create the agentless agent. Please delete the agentless policy ${agentlessPolicyId} and try again or contact your administrator.`, + message: `The Agentless API could not create the agentless agent. Please delete the agentless policy ${agentlessPolicyId} and try again or contact your administrator.`, }, delete: { - log: '[Agentless API] Deleting the agentless deployment failed with a status 400, bad request for agentless policy', - message: `the Agentless API could not create the agentless agent. Please delete the agentless policy ${agentlessPolicyId} and try again or contact your administrator.`, + log: '[Agentless API] Deleting the agentless deployment failed with a status 400, bad request for agentless policy.', + message: `The Agentless API could not delete the agentless deployment. Please delete the agentless policy ${agentlessPolicyId} and try again or contact your administrator.`, + }, + upgrade: { + log: '[Agentless API] Upgrading the agentless agent failed with a status 400, bad request for agentless policy.', + message: `The Agentless API could not upgrade the agentless agent. Please delete the agentless policy ${agentlessPolicyId} and try again or contact your administrator.`, }, }, 401: { create: { log: '[Agentless API] Creating the agentless agent failed with a status 401 unauthorized for agentless policy.', - message: `the Agentless API could not create the agentless agent because an unauthorized request was sent. Please delete the agentless policy ${agentlessPolicyId} and try again or contact your administrator.`, + message: `The Agentless API could not create the agentless agent because an unauthorized request was sent. Please delete the agentless policy ${agentlessPolicyId} and try again or contact your administrator.`, }, delete: { - log: '[Agentless API] Deleting the agentless deployment failed with a status 401 unauthorized for agentless policy. Check the Kibana Agentless API tls configuration', - message: `the Agentless API could not delete the agentless deployment because an unauthorized request was sent. Please delete the agentless policy ${agentlessPolicyId} and try again or contact your administrator.`, + log: '[Agentless API] Deleting the agentless deployment failed with a status 401 unauthorized for agentless policy.', + message: `The Agentless API could not delete the agentless deployment because an unauthorized request was sent. Please delete the agentless policy ${agentlessPolicyId} and try again or contact your administrator.`, + }, + upgrade: { + log: '[Agentless API] Upgrading the agentless agent failed with a status 401 unauthorized for agentless policy.', + message: `The Agentless API could not upgrade the agentless agent because an unauthorized request was sent. Please delete the agentless policy ${agentlessPolicyId} and try again or contact your administrator.`, }, }, 403: { create: { - log: '[Agentless API] Creating the agentless agent failed with a status 403 forbidden for agentless policy. Check the Kibana Agentless API configuration and endpoints.', - message: `the Agentless API could not create the agentless agent because a forbidden request was sent. Please delete the agentless policy ${agentlessPolicyId} and try again or contact your administrator.`, + log: '[Agentless API] Creating the agentless agent failed with a status 403 forbidden for agentless policy.', + message: `The Agentless API could not create the agentless agent because a forbidden request was sent. Please delete the agentless policy ${agentlessPolicyId} and try again or contact your administrator.`, }, delete: { - log: '[Agentless API] Deleting the agentless deployment failed with a status 403 forbidden for agentless policy. Check the Kibana Agentless API configuration and endpoints.', - message: `the Agentless API could not delete the agentless deployment because a forbidden request was sent. Please delete the agentless policy ${agentlessPolicyId} and try again or contact your administrator.`, + log: '[Agentless API] Deleting the agentless deployment failed with a status 403 forbidden for agentless policy.', + message: `The Agentless API could not delete the agentless deployment because a forbidden request was sent. Please delete the agentless policy ${agentlessPolicyId} and try again or contact your administrator.`, + }, + upgrade: { + log: '[Agentless API] Upgrading the agentless agent failed with a status 403 forbidden for agentless policy.', + message: `The Agentless API could not upgrade the agentless agent because a forbidden request was sent. Please delete the agentless policy ${agentlessPolicyId} and try again or contact your administrator.`, }, }, 404: { - // this is likely to happen when creating agentless agents, but covering it in case create: { log: '[Agentless API] Creating the agentless agent failed with a status 404 not found.', - message: `the Agentless API could not create the agentless agent because it returned a 404 error not found. Please delete the agentless policy ${agentlessPolicyId} and try again or contact your administrator.`, + message: `The Agentless API could not create the agentless agent because it returned a 404 error. Please delete the agentless policy ${agentlessPolicyId} and try again or contact your administrator.`, }, delete: { - log: '[Agentless API] Deleting the agentless deployment failed with a status 404 not found', - message: `the Agentless API could not delete the agentless deployment ${agentlessPolicyId} because it could not be found.`, + log: '[Agentless API] Deleting the agentless deployment failed with a status 404 not found.', + message: `The Agentless API could not delete the agentless deployment because it could not be found. Please delete the agentless policy ${agentlessPolicyId} and try again or contact your administrator.`, + }, + upgrade: { + log: '[Agentless API] Upgrading the agentless agent failed with a status 404 not found.', + message: `The Agentless API could not upgrade the agentless agent because it returned a 404 error. Please delete the agentless policy ${agentlessPolicyId} and try again or contact your administrator.`, }, }, 408: { create: { - log: '[Agentless API] Creating the agentless agent failed with a status 408, the request timed out', - message: `the Agentless API request timed out waiting for the agentless agent status to respond, please wait a few minutes for the agent to enroll with fleet. If agent fails to enroll with Fleet please delete the agentless policy ${agentlessPolicyId} and try again or contact your administrator.`, + log: '[Agentless API] Creating the agentless agent failed with a status 408, the request timed out.', + message: `The Agentless API request timed out. Please wait a few minutes for the agent to enroll with Fleet. If the agent fails to enroll, delete the agentless policy ${agentlessPolicyId} and try again or contact your administrator.`, }, delete: { - log: '[Agentless API] Deleting the agentless deployment failed with a status 408, the request timed out', - message: `the Agentless API could not delete the agentless deployment because the request timed out, please wait a few minutes for the agentless agent deployment to be removed. If it continues to persist please delete the agentless policy ${agentlessPolicyId} and try again or contact your administrator.`, + log: '[Agentless API] Deleting the agentless deployment failed with a status 408, the request timed out.', + message: `The Agentless API request timed out. Please wait a few minutes for the deployment to be removed. If it persists, delete the agentless policy ${agentlessPolicyId} and try again or contact your administrator.`, + }, + upgrade: { + log: '[Agentless API] Upgrading the agentless agent failed with a status 408, the request timed out.', + message: `The Agentless API request timed out during the upgrade process. Please try again later or contact your administrator.`, }, }, 429: { create: { - log: '[Agentless API] Creating the agentless agent failed with a status 429 for agentless policy, agentless agent limit has been reached for this deployment or project.', + log: '[Agentless API] Creating the agentless agent failed with a status 429, agentless agent limit reached.', + message: + 'You have reached the limit for agentless provisioning. Please remove some or switch to agent-based integration.', + }, + upgrade: { + log: '[Agentless API] Upgrading the agentless agent failed with a status 429, agentless agent limit reached.', message: - 'you have reached the limit for agentless provisioning. Please remove some or switch to agent-based integration.', + 'You have reached the limit for agentless provisioning. Please remove some or switch to agent-based integration.', }, }, 500: { create: { log: '[Agentless API] Creating the agentless agent failed with a status 500 internal service error.', - message: `the Agentless API could not create the agentless agent because it returned a 500 internal error. Please delete the agentless policy ${agentlessPolicyId} and try again or contact your administrator.`, + message: `The Agentless API could not create the agentless agent because it returned a 500 error. Please delete the agentless policy ${agentlessPolicyId} and try again or contact your administrator.`, }, delete: { log: '[Agentless API] Deleting the agentless deployment failed with a status 500 internal service error.', - message: `the Agentless API could not delete the agentless deployment because it returned a 500 internal error. Please delete the agentless policy ${agentlessPolicyId} and try again or contact your administrator.`, + message: `The Agentless API could not delete the agentless deployment because it returned a 500 error. Please delete the agentless policy ${agentlessPolicyId} and try again or contact your administrator.`, + }, + upgrade: { + log: '[Agentless API] Upgrading the agentless agent failed with a status 500 internal service error.', + message: `The Agentless API could not upgrade the agentless agent because it returned a 500 error. Please delete the agentless policy ${agentlessPolicyId} and try again or contact your administrator.`, }, }, unhandled_response: { create: { - log: '[Agentless API] Creating agentless agent failed because the Agentless API responded with an unhandled status code that falls out of the range of 2xx:', - message: `the Agentless API could not create the agentless agent due to an unexpected error. Please delete the agentless policy ${agentlessPolicyId} and try again or contact your administrator.`, + log: '[Agentless API] Creating the agentless agent failed with an unhandled response.', + message: `The Agentless API could not create the agentless agent due to an unexpected error. Please delete the agentless policy ${agentlessPolicyId} and try again or contact your administrator.`, }, delete: { - log: '[Agentless API] Deleting agentless deployment failed because the Agentless API responded with an unhandled status code that falls out of the range of 2xx:', - message: `the Agentless API could not delete the agentless deployment. Please delete the agentless policy ${agentlessPolicyId} and try again or contact your administrator.`, + log: '[Agentless API] Deleting the agentless deployment failed with an unhandled response.', + message: `The Agentless API could not delete the agentless deployment due to an unexpected error. Please delete the agentless policy ${agentlessPolicyId} and try again or contact your administrator.`, + }, + upgrade: { + log: '[Agentless API] Upgrading the agentless agent failed with an unhandled response.', + message: `The Agentless API could not upgrade the agentless agent due to an unexpected error. Please delete the agentless policy ${agentlessPolicyId} and try again or contact your administrator.`, }, }, request_error: { create: { - log: '[Agentless API] Creating agentless agent failed with a request error:', - message: `the Agentless API could not create the agentless agent due to a request error. Please delete the agentless policy ${agentlessPolicyId} and try again or contact your administrator.`, + log: '[Agentless API] Creating the agentless agent failed with a request error.', + message: `The Agentless API could not create the agentless agent due to a request error. Please delete the agentless policy ${agentlessPolicyId} and try again or contact your administrator.`, }, delete: { - log: '[Agentless API] Deleting agentless deployment failed with a request error:', - message: `the Agentless API could not delete the agentless deployment due to a request error. Please delete the agentless policy ${agentlessPolicyId} and try again or contact your administrator.`, + log: '[Agentless API] Deleting the agentless deployment failed with a request error.', + message: `The Agentless API could not delete the agentless deployment due to a request error. Please delete the agentless policy ${agentlessPolicyId} and try again or contact your administrator.`, + }, + upgrade: { + log: '[Agentless API] Upgrading the agentless agent failed with a request error.', + message: `The Agentless API could not upgrade the agentless agent due to a request error. Please delete the agentless policy ${agentlessPolicyId} and try again or contact your administrator.`, }, }, }; } + + private handleErrorsWithRetries = async ( + error: AxiosError, + requestConfig: AxiosRequestConfig, + action: 'create' | 'delete' | 'upgrade', + logger: Logger, + retries: number, + id: string, + requestConfigDebugStatus: string, + errorMetadata: any, + traceId?: string + ) => { + const hasRetryableStatusError = this.hasRetryableStatusError(error, RETRYABLE_HTTP_STATUSES); + const hasRetryableCodeError = this.hasRetryableCodeError(error, RETRYABLE_SERVER_CODES); + + if (hasRetryableStatusError || hasRetryableCodeError) { + await this.retry( + async () => await axios(requestConfig), + action, + requestConfigDebugStatus, + logger, + retries, + () => + this.catchAgentlessApiError( + action, + error, + logger, + id, + requestConfig, + requestConfigDebugStatus, + errorMetadata, + traceId + ) + ); + } else { + this.catchAgentlessApiError( + action, + error, + logger, + id, + requestConfig, + requestConfigDebugStatus, + errorMetadata, + traceId + ); + } + }; + + private retry = async ( + fn: () => Promise, + action: 'create' | 'delete' | 'upgrade', + requestConfigDebugStatus: string, + logger: Logger, + retries = MAXIMUM_RETRIES, + throwAgentlessError: () => void + ) => { + for (let i = 0; i < retries; i++) { + try { + await fn(); + } catch (e) { + logger.info( + `[Agentless API] Attempt ${i + 1} failed to ${action} agentless deployment, retrying...` + ); + if (i === retries - 1) { + logger.error( + `[Agentless API] Reached maximum ${retries} attempts. Failed to ${action} agentless deployment with [REQUEST]: ${requestConfigDebugStatus}` + ); + throwAgentlessError(); + } + } + } + }; + + private hasRetryableStatusError = ( + error: AxiosError, + retryableStatusErrors: number[] + ): boolean => { + const status = error?.response?.status; + return !!status && retryableStatusErrors.some((errorStatus) => errorStatus === status); + }; + + private hasRetryableCodeError = (error: AxiosError, retryableCodeErrors: string[]): boolean => { + const code = error?.code; + return !!code && retryableCodeErrors.includes(code); + }; } export const agentlessAgentService = new AgentlessAgentService(); diff --git a/x-pack/platform/plugins/shared/fleet/server/tasks/upgrade_agentless_deployment.test.ts b/x-pack/platform/plugins/shared/fleet/server/tasks/upgrade_agentless_deployment.test.ts new file mode 100644 index 0000000000000..9ade8f5d19aa5 --- /dev/null +++ b/x-pack/platform/plugins/shared/fleet/server/tasks/upgrade_agentless_deployment.test.ts @@ -0,0 +1,376 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { TaskStatus } from '@kbn/task-manager-plugin/server'; + +import { coreMock, loggingSystemMock } from '@kbn/core/server/mocks'; +import { taskManagerMock } from '@kbn/task-manager-plugin/server/mocks'; + +import { agentPolicyService, appContextService } from '../services'; +import { createAppContextStartContractMock } from '../mocks'; +import { createAgentPolicyMock } from '../../common/mocks'; + +import type { AgentPolicy } from '../types'; + +import { agentlessAgentService } from '../services/agents/agentless_agent'; + +import { getAgentsByKuery, getLatestAvailableAgentVersion } from '../services/agents'; + +import { + UPGRADE_AGENT_DEPLOYMENTS_TASK_VERSION, + UPGRADE_AGENTLESS_DEPLOYMENTS_TASK_TYPE, + UpgradeAgentlessDeploymentsTask, +} from './upgrade_agentless_deployment'; + +const systemMock = { + id: 'c6d16e42-c32d-4dce-8a88-113cfe276ad1', + name: 'system-1', + description: '', + namespace: 'default', + enabled: true, + policy_id: '93c46720-c217-11ea-9906-b5b8a21b268e', + policy_ids: ['93c46720-c217-11ea-9906-b5b8a21b268e'], + revision: 1, + package: { + name: 'system', + title: 'System', + version: '0.9.0', + }, + updated_at: '2020-06-25T16:03:38.159292', + updated_by: 'kibana', + created_at: '2020-06-25T16:03:38.159292', + created_by: 'kibana', + inputs: [ + { + config: {}, + enabled: true, + type: 'system', + streams: [], + }, + ], +}; +const MOCK_TASK_INSTANCE = { + id: `${UPGRADE_AGENTLESS_DEPLOYMENTS_TASK_TYPE}:${UPGRADE_AGENT_DEPLOYMENTS_TASK_VERSION}`, + runAt: new Date(), + attempts: 1, + ownerId: '', + status: TaskStatus.Running, + startedAt: new Date(), + scheduledAt: new Date(), + retryAt: new Date(), + params: {}, + state: {}, + taskType: UPGRADE_AGENTLESS_DEPLOYMENTS_TASK_TYPE, +}; + +const mockAgentPolicy: AgentPolicy = createAgentPolicyMock({ + agents: 1, + id: '93c46720-c217-11ea-9906-b5b8a21b268e', + package_policies: [systemMock], +}); + +jest.mock('../services/agent_policy_update', () => ({ + agentPolicyUpdateEventHandler: jest.fn(), +})); + +jest.mock('../services/agents', () => ({ + getAgentsByKuery: jest.fn(), + getLatestAvailableAgentVersion: jest.fn(), +})); + +describe('Upgrade Agentless Deployments', () => { + const { createSetup: coreSetupMock } = coreMock; + const { createSetup: tmSetupMock, createStart: tmStartMock } = taskManagerMock; + let mockContract: ReturnType; + let mockTask: UpgradeAgentlessDeploymentsTask; + let mockCore: ReturnType; + let mockTaskManagerSetup: ReturnType; + + const getMockAgentPolicyFetchAllAgentPolicies = (items: AgentPolicy[]) => + jest.fn().mockResolvedValue( + jest.fn(async function* () { + yield items; + })() + ); + + beforeEach(() => { + mockContract = createAppContextStartContractMock(); + appContextService.start(mockContract); + mockCore = coreSetupMock(); + mockTaskManagerSetup = tmSetupMock(); + + mockTask = new UpgradeAgentlessDeploymentsTask({ + core: mockCore, + taskManager: mockTaskManagerSetup, + logFactory: loggingSystemMock.create(), + }); + }); + + afterEach(() => { + jest.clearAllMocks(); + }); + + describe('Task lifecycle', () => { + it('Should create task', async () => { + expect(mockTask).toBeInstanceOf(UpgradeAgentlessDeploymentsTask); + }); + + it('Should register task', async () => { + expect(mockTaskManagerSetup.registerTaskDefinitions).toHaveBeenCalled(); + }); + + it('Should schedule task', async () => { + const mockTaskManagerStart = tmStartMock(); + await mockTask.start({ taskManager: mockTaskManagerStart }); + expect(mockTaskManagerStart.ensureScheduled).toHaveBeenCalled(); + }); + }); + + describe('Task Logic', () => { + const runTask = async (taskInstance = MOCK_TASK_INSTANCE) => { + const mockTaskManagerStart = tmStartMock(); + await mockTask.start({ taskManager: mockTaskManagerStart }); + const createTaskRunner = + mockTaskManagerSetup.registerTaskDefinitions.mock.calls[0][0][ + UPGRADE_AGENTLESS_DEPLOYMENTS_TASK_TYPE + ].createTaskRunner; + const taskRunner = createTaskRunner({ taskInstance }); + return taskRunner.run(); + }; + + const mockAgentPolicyService = agentPolicyService as jest.Mocked; + const agents = [ + { + id: 'agent-1', + policy_id: '93c46720-c217-11ea-9906-b5b8a21b268e', + status: 'online', + agent: { + version: '8.16.0', + }, + }, + { + id: 'agent-2', + policy_id: 'agent-policy-2', + status: 'inactive', + agent: { + version: '8.17.0', + }, + }, + { + id: 'agent-3', + policy_id: 'agent-policy-3', + status: 'active', + agent: { + version: '8.17.0', + }, + }, + ]; + const mockedGetAgentsByKuery = getAgentsByKuery as jest.Mock; + const mockedGetLatestAvailableAgentVersion = getLatestAvailableAgentVersion as jest.Mock; + + beforeEach(() => { + mockAgentPolicyService.fetchAllAgentPolicies = getMockAgentPolicyFetchAllAgentPolicies([ + mockAgentPolicy, + ]); + jest + .spyOn(appContextService, 'getExperimentalFeatures') + .mockReturnValue({ enabledUpgradeAgentlessDeploymentsTask: true } as any); + + mockedGetAgentsByKuery.mockResolvedValue({ + agents, + }); + + mockedGetLatestAvailableAgentVersion.mockResolvedValue('8.17.0'); + + jest + .spyOn(agentlessAgentService, 'upgradeAgentlessDeployment') + .mockResolvedValueOnce(undefined); + }); + + afterEach(() => { + jest.clearAllMocks(); + }); + + it('should upgrade agentless deployments', async () => { + await runTask(); + + expect(mockAgentPolicyService.fetchAllAgentPolicies).toHaveBeenCalled(); + expect(agentlessAgentService.upgradeAgentlessDeployment).toHaveBeenCalled(); + }); + + it('should not upgrade agentless deployments when the latest version is up to date', async () => { + mockedGetAgentsByKuery.mockResolvedValue({ + agents: [ + { + id: 'agent-1', + policy_id: '93c46720-c217-11ea-9906-b5b8a21b268e', + status: 'online', + agent: { + version: '8.17.0', + }, + }, + ], + }); + await runTask(); + + expect(mockAgentPolicyService.fetchAllAgentPolicies).toHaveBeenCalled(); + expect(agentlessAgentService.upgradeAgentlessDeployment).not.toHaveBeenCalled(); + }); + + it('should not upgrade agentless deployments when agent status is updating', async () => { + mockedGetLatestAvailableAgentVersion.mockResolvedValue('8.17.1'); + mockedGetAgentsByKuery.mockResolvedValue({ + agents: [ + { + id: 'agent-1', + policy_id: '93c46720-c217-11ea-9906-b5b8a21b268e', + status: 'updating', + agent: { + version: '8.17.0', + }, + }, + ], + }); + await runTask(); + + expect(mockAgentPolicyService.fetchAllAgentPolicies).toHaveBeenCalled(); + expect(agentlessAgentService.upgradeAgentlessDeployment).not.toHaveBeenCalled(); + }); + + it('should not upgrade agentless deployments when agent status is unhealthy', async () => { + mockedGetLatestAvailableAgentVersion.mockResolvedValue('8.17.1'); + mockedGetAgentsByKuery.mockResolvedValue({ + agents: [ + { + id: 'agent-1', + policy_id: '93c46720-c217-11ea-9906-b5b8a21b268e', + status: 'updating', + agent: { + version: '8.17.0', + }, + }, + ], + }); + await runTask(); + + expect(mockAgentPolicyService.fetchAllAgentPolicies).toHaveBeenCalled(); + expect(agentlessAgentService.upgradeAgentlessDeployment).not.toHaveBeenCalled(); + }); + + it('should upgrade agentless deployments when agent status is online', async () => { + mockedGetLatestAvailableAgentVersion.mockResolvedValue('8.17.1'); + mockedGetAgentsByKuery.mockResolvedValue({ + agents: [ + { + id: 'agent-1', + policy_id: '93c46720-c217-11ea-9906-b5b8a21b268e', + status: 'online', + agent: { + version: '8.17.0', + }, + }, + ], + }); + await runTask(); + + expect(mockAgentPolicyService.fetchAllAgentPolicies).toHaveBeenCalled(); + expect(agentlessAgentService.upgradeAgentlessDeployment).toHaveBeenCalled(); + }); + + it('should not upgrade agentless deployments when agent status is unenroll', async () => { + mockedGetLatestAvailableAgentVersion.mockResolvedValue('8.17.1'); + mockedGetAgentsByKuery.mockResolvedValue({ + agents: [ + { + id: 'agent-1', + policy_id: '93c46720-c217-11ea-9906-b5b8a21b268e', + status: 'unenroll', + agent: { + version: '8.17.0', + }, + }, + ], + }); + await runTask(); + + expect(mockAgentPolicyService.fetchAllAgentPolicies).toHaveBeenCalled(); + expect(agentlessAgentService.upgradeAgentlessDeployment).not.toHaveBeenCalled(); + }); + + it('should upgrade agentless deployments when agent for target bg task release', async () => { + mockedGetLatestAvailableAgentVersion.mockResolvedValue('8.18.1'); + mockedGetAgentsByKuery.mockResolvedValue({ + agents: [ + { + id: 'agent-1', + policy_id: '93c46720-c217-11ea-9906-b5b8a21b268e', + status: 'online', + agent: { + version: '8.18.0', + }, + }, + ], + }); + await runTask(); + + expect(mockAgentPolicyService.fetchAllAgentPolicies).toHaveBeenCalled(); + expect(agentlessAgentService.upgradeAgentlessDeployment).toHaveBeenCalled(); + }); + + it('should upgrade agentless deployments when agent version is up to date', async () => { + mockedGetLatestAvailableAgentVersion.mockResolvedValue('8.17.1'); + mockedGetAgentsByKuery.mockResolvedValue({ + agents: [ + { + id: 'agent-1', + policy_id: '93c46720-c217-11ea-9906-b5b8a21b268e', + status: 'online', + agent: { + version: '8.17.0', + }, + }, + ], + }); + await runTask(); + + expect(mockAgentPolicyService.fetchAllAgentPolicies).toHaveBeenCalled(); + expect(agentlessAgentService.upgradeAgentlessDeployment).toHaveBeenCalled(); + }); + + it('should not call upgrade agentless api to upgrade when 0 agents', async () => { + mockedGetAgentsByKuery.mockResolvedValue({ + agents: [], + }); + await runTask(); + + expect(mockAgentPolicyService.fetchAllAgentPolicies).toHaveBeenCalled(); + expect(agentlessAgentService.upgradeAgentlessDeployment).not.toHaveBeenCalled(); + }); + + it('should throw an error if task is aborted', async () => { + mockTask.abortController = new AbortController(); + mockTask.abortController.signal.throwIfAborted = jest.fn(() => { + throw new Error('Task aborted!'); + }); + + mockTask.abortController.abort(); + await runTask(); + + expect(mockTask.abortController.signal.throwIfAborted).toHaveBeenCalled(); + }); + + it('should not called upgrade agentless api to upgrade when agent policy is not found', async () => { + jest + .spyOn(appContextService, 'getExperimentalFeatures') + .mockReturnValue({ enabledUpgradeAgentlessDeploymentsTask: false } as any); + + await runTask(); + + expect(agentlessAgentService.upgradeAgentlessDeployment).not.toHaveBeenCalled(); + }); + }); +}); diff --git a/x-pack/platform/plugins/shared/fleet/server/tasks/upgrade_agentless_deployment.ts b/x-pack/platform/plugins/shared/fleet/server/tasks/upgrade_agentless_deployment.ts new file mode 100644 index 0000000000000..feb8fc66bfcfe --- /dev/null +++ b/x-pack/platform/plugins/shared/fleet/server/tasks/upgrade_agentless_deployment.ts @@ -0,0 +1,294 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { SavedObjectsClient, type CoreSetup, type Logger } from '@kbn/core/server'; +import type { ElasticsearchClient, LoggerFactory } from '@kbn/core/server'; + +import type { TaskManagerStartContract } from '@kbn/task-manager-plugin/server'; +import { + type ConcreteTaskInstance, + type TaskManagerSetupContract, +} from '@kbn/task-manager-plugin/server'; +import { getDeleteTaskRunResult } from '@kbn/task-manager-plugin/server/task'; + +import { isAgentVersionLessThanLatest } from '../../common/services'; + +import { agentPolicyService, appContextService } from '../services'; + +import type { Agent, AgentPolicy } from '../types'; + +import { AGENTS_PREFIX } from '../constants'; +import { getAgentsByKuery, getLatestAvailableAgentVersion } from '../services/agents'; +import { agentlessAgentService } from '../services/agents/agentless_agent'; + +export const UPGRADE_AGENTLESS_DEPLOYMENTS_TASK_TYPE = 'fleet:upgrade-agentless-deployments-task'; +export const UPGRADE_AGENT_DEPLOYMENTS_TASK_VERSION = '1.0.0'; +const TITLE = 'Fleet upgrade agentless deployments Task'; +const TIMEOUT = '2m'; +const INTERVAL = '1d'; +const LOGGER_SUBJECT = '[UpgradeAgentlessDeploymentsTask]'; +const BATCH_SIZE = 10; +const AGENTLESS_DEPLOYMENTS_SIZE = 40; +interface UpgradeAgentlessDeploymentsTaskSetupContract { + core: CoreSetup; + taskManager: TaskManagerSetupContract; + logFactory: LoggerFactory; +} + +interface UpgradeAgentlessDeploymentsTaskStartContract { + taskManager: TaskManagerStartContract; +} + +export class UpgradeAgentlessDeploymentsTask { + private logger: Logger; + private startedTaskRunner: boolean = false; + public abortController = new AbortController(); + + constructor(setupContract: UpgradeAgentlessDeploymentsTaskSetupContract) { + const { core, taskManager, logFactory } = setupContract; + this.logger = logFactory.get(this.taskId); + + taskManager.registerTaskDefinitions({ + [UPGRADE_AGENTLESS_DEPLOYMENTS_TASK_TYPE]: { + title: TITLE, + timeout: TIMEOUT, + createTaskRunner: ({ taskInstance }: { taskInstance: ConcreteTaskInstance }) => { + return { + run: async () => { + return this.runTask(taskInstance, core); + }, + cancel: async () => { + this.abortController.abort(`${TITLE} timed out`); + }, + }; + }, + }, + }); + } + + public start = async ({ taskManager }: UpgradeAgentlessDeploymentsTaskStartContract) => { + if (!taskManager) { + this.logger.error(`${LOGGER_SUBJECT} Missing required service during start`); + } + + this.startedTaskRunner = true; + this.logger.info(`${LOGGER_SUBJECT} Started with interval of [${INTERVAL}]`); + + try { + await taskManager.ensureScheduled({ + id: this.taskId, + taskType: UPGRADE_AGENTLESS_DEPLOYMENTS_TASK_TYPE, + schedule: { + interval: INTERVAL, + }, + state: {}, + params: { version: UPGRADE_AGENT_DEPLOYMENTS_TASK_VERSION }, + }); + } catch (e) { + this.logger.error(`Error scheduling task ${LOGGER_SUBJECT}, error: ${e.message}`, e); + } + }; + + private get taskId(): string { + return `${UPGRADE_AGENTLESS_DEPLOYMENTS_TASK_TYPE}:${UPGRADE_AGENT_DEPLOYMENTS_TASK_VERSION}`; + } + + private endRun(msg: string = '') { + this.logger.info(`${LOGGER_SUBJECT} runTask ended${msg ? ': ' + msg : ''}`); + } + + private processInBatches = async ( + { + agentlessPolicies, + agents, + }: { + agentlessPolicies: AgentPolicy[]; + agents: Agent[]; + }, + batchSize: number, + processFunction: (agentPolicy: AgentPolicy, agentlessAgent: Agent) => void + ) => { + if (!agents.length) { + this.endRun('No agents found'); + return; + } + + for (let i = 0; i < agentlessPolicies.length; i += batchSize) { + const currentAgentPolicyBatch = agentlessPolicies.slice(i, i + batchSize); + + await Promise.allSettled( + await currentAgentPolicyBatch.map(async (agentPolicy) => { + const agentlessAgent = agents.find((agent) => agent.policy_id === agentPolicy.id); + + if (!agentlessAgent) { + this.endRun('No active online agentless agent found'); + return; + } + + this.logger.info( + `${LOGGER_SUBJECT} processing agentless agent ${JSON.stringify(agentlessAgent.agent)}` + ); + + if (this.abortController.signal.aborted) { + this.logger.info(`${LOGGER_SUBJECT} Task runner canceled!`); + this.abortController.signal.throwIfAborted(); + } + return processFunction(agentPolicy, agentlessAgent); + }) + ); + + if (this.abortController.signal.aborted) { + this.logger.info(`${LOGGER_SUBJECT} Task runner canceled!`); + this.abortController.signal.throwIfAborted(); + } + } + }; + + private processUpgradeAgentlessDeployments = async ( + esClient: ElasticsearchClient, + soClient: SavedObjectsClient + ) => { + const SAVED_OBJECT_TYPE = 'fleet-agent-policies'; + + const policiesKuery = `${SAVED_OBJECT_TYPE}.supports_agentless: true`; + + try { + const agentPolicyFetcher = await agentPolicyService.fetchAllAgentPolicies(soClient, { + kuery: policiesKuery, + perPage: BATCH_SIZE, + spaceId: '*', + }); + this.logger.info( + `[${LOGGER_SUBJECT}] running task to upgrade agentless deployments with kuery: ${policiesKuery}` + ); + + for await (const agentlessPolicies of agentPolicyFetcher) { + this.logger.info( + `[${LOGGER_SUBJECT}] Found "${agentlessPolicies.length}" agentless policies` + ); + + if (!agentlessPolicies.length) { + this.endRun('Found no agentless policies to upgrade'); + return; + } + + // Upgrade agentless deployments + try { + const kuery = `(${AGENTS_PREFIX}.policy_id:${agentlessPolicies + .map((policy) => `"${policy.id}"`) + .join(' or ')}) and ${AGENTS_PREFIX}.status:online`; + + const res = await getAgentsByKuery(esClient, soClient, { + kuery, + showInactive: false, + page: 1, + perPage: AGENTLESS_DEPLOYMENTS_SIZE, + }); + this.logger.info(`${LOGGER_SUBJECT} Found "${res.agents.length}" agentless agents`); + await this.processInBatches( + { + agentlessPolicies, + agents: res.agents, + }, + BATCH_SIZE, + this.upgradeAgentlessDeployments + ); + } catch (e) { + this.logger.error(`${LOGGER_SUBJECT} Failed to get agentless agents error: ${e}`); + } + + if (this.abortController.signal.aborted) { + this.logger.info(`${LOGGER_SUBJECT} Task runner canceled!`); + this.abortController.signal.throwIfAborted(); + } + } + } catch (e) { + this.logger.error(`${LOGGER_SUBJECT} Failed to get agentless policies error: ${e}`); + } + this.logger.info(`${LOGGER_SUBJECT} [runTask()] finished`); + }; + + private upgradeAgentlessDeployments = async (agentPolicy: AgentPolicy, agent: Agent) => { + this.logger.info(`${agentPolicy.id} agentless policy id`); + + let latestAgentVersion; + const currentAgentVersion = agent.agent?.version; + // Get latest available agent version + try { + this.logger.info(`${LOGGER_SUBJECT} getting latest available agent version in ess`); + latestAgentVersion = await getLatestAvailableAgentVersion(); + this.logger.info( + `${LOGGER_SUBJECT} latest version ${latestAgentVersion} and current agent version ${currentAgentVersion}` + ); + } catch (e) { + this.logger.error(`${LOGGER_SUBJECT} Failed to get latest version error: ${e}`); + throw e; + } + + // Compare the current agent version with the latest agent version And upgrade if necessary + if ( + agent.status === 'online' && + latestAgentVersion && + currentAgentVersion && + isAgentVersionLessThanLatest(currentAgentVersion, latestAgentVersion) + ) { + this.logger.info( + `${LOGGER_SUBJECT} Upgrade Available to ${latestAgentVersion} for agentless policy ${agentPolicy.id} current version ${currentAgentVersion}` + ); + try { + this.logger.info( + `${LOGGER_SUBJECT} upgrading agentless policy ${agentPolicy.id} current agent version ${currentAgentVersion} to version ${latestAgentVersion}` + ); + await agentlessAgentService.upgradeAgentlessDeployment(agentPolicy.id, latestAgentVersion); + + this.logger.info( + `${LOGGER_SUBJECT} Successfully upgraded agentless deployment to ${latestAgentVersion} for ${agentPolicy.id}` + ); + } catch (e) { + this.logger.error( + `${LOGGER_SUBJECT} Failed to upgrade agentless deployment to ${latestAgentVersion} for ${agentPolicy.id} error: ${e}` + ); + throw e; + } + } else { + this.logger.info( + `${LOGGER_SUBJECT} No upgrade available for agentless policy ${agentPolicy.id} current agent version ${currentAgentVersion} and latest version ${latestAgentVersion}` + ); + } + }; + + public runTask = async (taskInstance: ConcreteTaskInstance, core: CoreSetup) => { + const cloudSetup = appContextService.getCloud(); + if (!this.startedTaskRunner) { + this.logger.info(`${LOGGER_SUBJECT} runTask Aborted. Task not started yet`); + return; + } + + if (taskInstance.id !== this.taskId) { + this.logger.info( + `${LOGGER_SUBJECT} Outdated task version: Received [${taskInstance.id}] from task instance. Current version is [${this.taskId}]` + ); + return getDeleteTaskRunResult(); + } + + if (!appContextService.getExperimentalFeatures().enabledUpgradeAgentlessDeploymentsTask) { + this.endRun('Upgrade Agentless Deployments Task is disabled'); + return; + } + + if (cloudSetup?.isServerlessEnabled) { + this.endRun('Upgrading Agentless deployments is only supported in cloud'); + return; + } + + this.logger.info(`[runTask()] started`); + const [coreStart] = await core.getStartServices(); + const esClient = coreStart.elasticsearch.client.asInternalUser; + const soClient = new SavedObjectsClient(coreStart.savedObjects.createInternalRepository()); + await this.processUpgradeAgentlessDeployments(esClient, soClient); + }; +} diff --git a/x-pack/platform/plugins/shared/index_management/__jest__/client_integration/index_details_page/index_details_page.test.tsx b/x-pack/platform/plugins/shared/index_management/__jest__/client_integration/index_details_page/index_details_page.test.tsx index 1c252fa96fffc..d2c8f7bdad3ff 100644 --- a/x-pack/platform/plugins/shared/index_management/__jest__/client_integration/index_details_page/index_details_page.test.tsx +++ b/x-pack/platform/plugins/shared/index_management/__jest__/client_integration/index_details_page/index_details_page.test.tsx @@ -533,6 +533,67 @@ describe('', () => { }); }); + describe('Semantic Text Banner', () => { + const mockIndexMappingResponseWithoutSemanticText: any = { + ...testIndexMappings.mappings, + properties: { + ...testIndexMappings.mappings.properties, + name: { + type: 'text', + }, + }, + }; + + const mockIndexMappingResponseWithSemanticText: any = { + ...testIndexMappings.mappings, + properties: { + ...testIndexMappings.mappings.properties, + name: { + type: 'text', + }, + sem_text: { + type: 'semantic_text', + inference_id: '.elser-2-elasticsearch', + }, + title: { + type: 'text', + copy_to: ['sem_text'], + }, + }, + }; + + beforeEach(async () => { + await act(async () => { + testBed = await setup({ + httpSetup, + dependencies: { + core: { + application: { capabilities: { ml: { canGetTrainedModels: true } } }, + }, + }, + }); + }); + }); + + it('semantic text banner is visible if there is no semantic_text field in the mapping', async () => { + httpRequestsMockHelpers.setLoadIndexMappingResponse(testIndexName, { + mappings: mockIndexMappingResponseWithoutSemanticText, + }); + testBed.component.update(); + await testBed.actions.clickIndexDetailsTab(IndexDetailsSection.Mappings); + expect(testBed.actions.mappings.isSemanticTextBannerVisible()).toBe(true); + }); + + it('semantic text banner is not visible if there exists a semantic_text field in the mapping', async () => { + httpRequestsMockHelpers.setLoadIndexMappingResponse(testIndexName, { + mappings: mockIndexMappingResponseWithSemanticText, + }); + testBed.component.update(); + await testBed.actions.clickIndexDetailsTab(IndexDetailsSection.Mappings); + expect(testBed.actions.mappings.isSemanticTextBannerVisible()).toBe(false); + }); + }); + describe('Mappings tab', () => { beforeEach(async () => { await testBed.actions.clickIndexDetailsTab(IndexDetailsSection.Mappings); diff --git a/x-pack/platform/plugins/shared/index_management/__jest__/client_integration/index_details_page/semantic_text_bannner.test.tsx b/x-pack/platform/plugins/shared/index_management/__jest__/client_integration/index_details_page/semantic_text_bannner.test.tsx index 6be691a03d8f1..c8f6631277495 100644 --- a/x-pack/platform/plugins/shared/index_management/__jest__/client_integration/index_details_page/semantic_text_bannner.test.tsx +++ b/x-pack/platform/plugins/shared/index_management/__jest__/client_integration/index_details_page/semantic_text_bannner.test.tsx @@ -42,6 +42,10 @@ describe('When semantic_text is enabled', () => { expect(find('indexDetailsMappingsSemanticTextBanner').text()).toContain( 'semantic_text field type now available!' ); + + expect(find('indexDetailsMappingsSemanticTextBanner').text()).toContain( + 'Documents will be automatically chunked to fit model context limits, to avoid truncation.' + ); }); it('should hide the banner if dismiss is clicked', async () => { diff --git a/x-pack/platform/plugins/shared/index_management/public/application/sections/home/index_list/details_page/details_page_mappings_content.tsx b/x-pack/platform/plugins/shared/index_management/public/application/sections/home/index_list/details_page/details_page_mappings_content.tsx index 29da8dd29599f..fe2bbd6bfa6c8 100644 --- a/x-pack/platform/plugins/shared/index_management/public/application/sections/home/index_list/details_page/details_page_mappings_content.tsx +++ b/x-pack/platform/plugins/shared/index_management/public/application/sections/home/index_list/details_page/details_page_mappings_content.tsx @@ -120,6 +120,8 @@ export const DetailsPageMappingsContent: FunctionComponent<{ prefix: 'pendingFieldListId', }); + const hasSemanticText = hasSemanticTextField(state.fields); + const [isAddingFields, setAddingFields] = useState(false); useUnsavedChangesPrompt({ @@ -222,7 +224,6 @@ export const DetailsPageMappingsContent: FunctionComponent<{ const updateMappings = useCallback( async (forceSaveMappings?: boolean) => { - const hasSemanticText = hasSemanticTextField(state.fields); let inferenceToModelIdMap = state.inferenceToModelIdMap; setIsUpdatingMappings(true); try { @@ -555,7 +556,7 @@ export const DetailsPageMappingsContent: FunctionComponent<{ - {hasMLPermissions && ( + {hasMLPermissions && !hasSemanticText && ( ); -const platinumLicenseMessage = ( +const getPlatinumLicenseMessage = () => ( @@ -44,6 +52,14 @@ const platinumLicenseMessage = ( /> ), + learnMore: ( + + + + ), }} /> ); @@ -58,10 +74,10 @@ export function SemanticTextBanner({ return isSemanticTextBannerDisplayable && isSemanticTextEnabled ? ( <> - + - {isPlatinumLicense ? platinumLicenseMessage : defaultLicenseMessage} + {isPlatinumLicense ? getPlatinumLicenseMessage() : defaultLicenseMessage} diff --git a/x-pack/platform/plugins/shared/index_management/public/application/services/documentation.ts b/x-pack/platform/plugins/shared/index_management/public/application/services/documentation.ts index 62b7defd78db1..09f6153a5cc5e 100644 --- a/x-pack/platform/plugins/shared/index_management/public/application/services/documentation.ts +++ b/x-pack/platform/plugins/shared/index_management/public/application/services/documentation.ts @@ -21,6 +21,7 @@ class DocumentationService { private indexSettings: string = ''; private indexTemplates: string = ''; private indexV1: string = ''; + private inferenceApisConfigureChunking: string = ''; private mapping: string = ''; private mappingAnalyzer: string = ''; private mappingCoerce: string = ''; @@ -81,6 +82,7 @@ class DocumentationService { this.indexManagement = links.management.indexManagement; this.indexSettings = links.elasticsearch.indexSettings; this.indexTemplates = links.elasticsearch.indexTemplates; + this.inferenceApisConfigureChunking = links.enterpriseSearch.inferenceApisConfigureChunking; this.indexV1 = links.apis.putIndexTemplateV1; this.mapping = links.elasticsearch.mapping; this.mappingAnalyzer = links.elasticsearch.mappingAnalyzer; @@ -159,6 +161,10 @@ class DocumentationService { return this.indexManagement; } + public getConfigureChunkingDocLink() { + return this.inferenceApisConfigureChunking; + } + public getIndicesComponentTemplate() { return this.indicesComponentTemplate; } diff --git a/x-pack/platform/plugins/shared/ml/common/types/trained_models.ts b/x-pack/platform/plugins/shared/ml/common/types/trained_models.ts index 9cd3e5175c20a..86ce75c6f822e 100644 --- a/x-pack/platform/plugins/shared/ml/common/types/trained_models.ts +++ b/x-pack/platform/plugins/shared/ml/common/types/trained_models.ts @@ -429,6 +429,7 @@ export function isModelDownloadItem(item: TrainedModelUIItem): item is ModelDown export const isBuiltInModel = (item: TrainedModelConfigResponse | TrainedModelUIItem) => item.tags.includes(BUILT_IN_MODEL_TAG); + /** * This type represents a union of different model entities: * - Any existing trained model returned by the API, e.g., lang_ident_model_1, DFA models, etc. diff --git a/x-pack/platform/plugins/shared/ml/public/application/components/delete_space_aware_item_check_modal/delete_space_aware_item_check_modal.tsx b/x-pack/platform/plugins/shared/ml/public/application/components/delete_space_aware_item_check_modal/delete_space_aware_item_check_modal.tsx index 053c6e0ad8039..ebb210be788f0 100644 --- a/x-pack/platform/plugins/shared/ml/public/application/components/delete_space_aware_item_check_modal/delete_space_aware_item_check_modal.tsx +++ b/x-pack/platform/plugins/shared/ml/public/application/components/delete_space_aware_item_check_modal/delete_space_aware_item_check_modal.tsx @@ -229,6 +229,7 @@ interface Props { ids: string[]; setDidUntag?: React.Dispatch>; hasManagedJob?: boolean; + onUntagCallback?: () => void; } export const DeleteSpaceAwareItemCheckModal: FC = ({ @@ -239,6 +240,7 @@ export const DeleteSpaceAwareItemCheckModal: FC = ({ ids, setDidUntag, hasManagedJob, + onUntagCallback, }) => { const [buttonContent, setButtonContent] = useState(); const [modalContent, setModalContent] = useState(); @@ -317,6 +319,9 @@ export const DeleteSpaceAwareItemCheckModal: FC = ({ if (typeof refreshJobsCallback === 'function') { refreshJobsCallback(); } + if (typeof onUntagCallback === 'function') { + onUntagCallback(); + } }; const onClick = async () => { diff --git a/x-pack/platform/plugins/shared/ml/public/application/model_management/delete_models_modal.tsx b/x-pack/platform/plugins/shared/ml/public/application/model_management/delete_models_modal.tsx index 7afad711521dc..b3c0bdf47c4dd 100644 --- a/x-pack/platform/plugins/shared/ml/public/application/model_management/delete_models_modal.tsx +++ b/x-pack/platform/plugins/shared/ml/public/application/model_management/delete_models_modal.tsx @@ -7,7 +7,6 @@ import type { FC } from 'react'; import React, { useCallback, useState } from 'react'; -import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; import { EuiButton, @@ -25,21 +24,25 @@ import { isPopulatedObject } from '@kbn/ml-is-populated-object'; import type { TrainedModelItem, TrainedModelUIItem } from '../../../common/types/trained_models'; import { isExistingModel } from '../../../common/types/trained_models'; import { type WithRequired } from '../../../common/types/common'; -import { useTrainedModelsApiService } from '../services/ml_api_service/trained_models'; -import { useToastNotificationService } from '../services/toast_notification_service'; import { DeleteSpaceAwareItemCheckModal } from '../components/delete_space_aware_item_check_modal'; +import { useMlKibana } from '../contexts/kibana'; interface DeleteModelsModalProps { models: TrainedModelUIItem[]; - onClose: (refreshList?: boolean) => void; + onClose: () => void; + onDelete: (refreshList?: boolean) => void; } -export const DeleteModelsModal: FC = ({ models, onClose }) => { - const trainedModelsApiService = useTrainedModelsApiService(); - const { displayErrorToast } = useToastNotificationService(); +export const DeleteModelsModal: FC = ({ models, onClose, onDelete }) => { + const { + services: { + mlServices: { trainedModelsService }, + }, + } = useMlKibana(); const [canDeleteModel, setCanDeleteModel] = useState(false); const [deletePipelines, setDeletePipelines] = useState(false); + const [isDeleting, setIsDeleting] = useState(false); const modelIds = models.map((m) => m.model_id); @@ -61,33 +64,23 @@ export const DeleteModelsModal: FC = ({ models, onClose }, 0); const deleteModels = useCallback(async () => { + setIsDeleting(true); try { - await Promise.all( - modelIds.map((modelId) => - trainedModelsApiService.deleteTrainedModel(modelId, { - with_pipelines: deletePipelines, - force: pipelinesCount > 0, - }) - ) - ); - } catch (error) { - displayErrorToast( - error, - i18n.translate('xpack.ml.trainedModels.modelsList.fetchDeletionErrorMessage', { - defaultMessage: '{modelsCount, plural, one {Model} other {Models}} deletion failed', - values: { - modelsCount: modelIds.length, - }, - }) - ); + await trainedModelsService.deleteModels(modelIds, { + with_pipelines: deletePipelines, + force: pipelinesCount > 0, + }); + onDelete(); + } catch { + setIsDeleting(false); } - onClose(true); + // eslint-disable-next-line react-hooks/exhaustive-deps - }, [modelIds, trainedModelsApiService, deletePipelines, pipelinesCount]); + }, [modelIds, trainedModelsService, deletePipelines, pipelinesCount]); return canDeleteModel ? ( @@ -190,7 +183,7 @@ export const DeleteModelsModal: FC = ({ models, onClose - + = ({ models, onClose fill color="danger" data-test-subj="mlModelsDeleteModalConfirmButton" + isLoading={isDeleting} > = ({ models, onClose ids={modelIds} mlSavedObjectType="trained-model" canDeleteCallback={setCanDeleteModel.bind(null, true)} - onCloseCallback={onClose.bind(null, true)} + onCloseCallback={onClose.bind(null)} + onUntagCallback={onDelete.bind(null, true)} refreshJobsCallback={() => {}} hasManagedJob={false} /> diff --git a/x-pack/platform/plugins/shared/ml/public/application/model_management/models_list.tsx b/x-pack/platform/plugins/shared/ml/public/application/model_management/models_list.tsx index c8eb7c805f4f1..f9f5d69d2339c 100644 --- a/x-pack/platform/plugins/shared/ml/public/application/model_management/models_list.tsx +++ b/x-pack/platform/plugins/shared/ml/public/application/model_management/models_list.tsx @@ -30,7 +30,7 @@ import { FormattedMessage } from '@kbn/i18n-react'; import { useTimefilter } from '@kbn/ml-date-picker'; import { isPopulatedObject } from '@kbn/ml-is-populated-object'; import { useStorage } from '@kbn/ml-local-storage'; -import { ELSER_ID_V1 } from '@kbn/ml-trained-models-utils'; +import { ELSER_ID_V1, MODEL_STATE } from '@kbn/ml-trained-models-utils'; import type { ListingPageUrlState } from '@kbn/ml-url-state'; import { usePageUrlState } from '@kbn/ml-url-state'; import { dynamic } from '@kbn/shared-ux-utility'; @@ -99,6 +99,9 @@ export const getDefaultModelsListState = (): ListingPageUrlState => ({ showAll: false, }); +const isModelDeployed = (item: TrainedModelUIItem) => + isNLPModelItem(item) && item.state === MODEL_STATE.STARTED; + interface Props { pageState?: ListingPageUrlState; updatePageState?: (update: Partial) => void; @@ -513,13 +516,22 @@ export const ModelsList: FC = ({ defaultMessage: 'Built-in model', }); } + if (isModelDeployed(item)) { + return i18n.translate('xpack.ml.trainedModels.modelsList.deployedModelMessage', { + defaultMessage: 'Model is deployed', + }); + } return ''; }, selectable: (item) => - !isModelDownloadItem(item) && !isPopulatedObject(item.pipelines) && !isBuiltInModel(item), + !isModelDownloadItem(item) && + !isPopulatedObject(item.pipelines) && + !isBuiltInModel(item) && + !isModelDeployed(item), onSelectionChange: (selectedItems) => { setSelectedModels(selectedItems); }, + selected: selectedModels, } : undefined; @@ -676,11 +688,10 @@ export const ModelsList: FC = ({ {modelsToDelete.length > 0 && ( { - modelsToDelete.forEach((model) => { - trainedModelsService.removeScheduledDeployments({ modelId: model.model_id }); - }); - + onClose={() => { + setModelsToDelete([]); + }} + onDelete={(refreshList) => { setItemIdToExpandedRowMap((prev) => { const newMap = { ...prev }; modelsToDelete.forEach((model) => { @@ -690,6 +701,7 @@ export const ModelsList: FC = ({ }); setModelsToDelete([]); + setSelectedModels([]); if (refreshList) { fetchModels(); diff --git a/x-pack/platform/plugins/shared/ml/public/application/model_management/trained_models_service.test.ts b/x-pack/platform/plugins/shared/ml/public/application/model_management/trained_models_service.test.ts index c7235bb4850b2..0df129135e9a1 100644 --- a/x-pack/platform/plugins/shared/ml/public/application/model_management/trained_models_service.test.ts +++ b/x-pack/platform/plugins/shared/ml/public/application/model_management/trained_models_service.test.ts @@ -84,6 +84,7 @@ describe('TrainedModelsService', () => { startModelAllocation: jest.fn(), updateModelDeployment: jest.fn(), getModelsDownloadStatus: jest.fn(), + deleteTrainedModel: jest.fn(), } as unknown as jest.Mocked; mockSavedObjectsApiService = { @@ -398,4 +399,55 @@ describe('TrainedModelsService', () => { }) ); }); + + it('deletes multiple models successfully', async () => { + const modelIds = ['model-1', 'model-2']; + + mockTrainedModelsApiService.deleteTrainedModel.mockResolvedValue({ acknowledge: true }); + + await trainedModelsService.deleteModels(modelIds, { + with_pipelines: false, + force: false, + }); + + expect(mockTrainedModelsApiService.deleteTrainedModel).toHaveBeenCalledTimes(2); + expect(mockTrainedModelsApiService.deleteTrainedModel).toHaveBeenCalledWith({ + modelId: 'model-1', + options: { + with_pipelines: false, + force: false, + }, + }); + expect(mockTrainedModelsApiService.deleteTrainedModel).toHaveBeenCalledWith({ + modelId: 'model-2', + options: { + with_pipelines: false, + force: false, + }, + }); + }); + + it('handles deleteModels error', async () => { + const modelIds = ['model-1', 'model-2']; + const error = new Error('Deletion failed'); + + mockTrainedModelsApiService.deleteTrainedModel.mockRejectedValue(error); + + await trainedModelsService.deleteModels(modelIds, { + with_pipelines: false, + force: false, + }); + + expect(mockDisplayErrorToast).toHaveBeenCalledWith( + error, + i18n.translate('xpack.ml.trainedModels.modelsList.fetchDeletionErrorTitle', { + defaultMessage: '{modelsCount, plural, one {Model} other {Models}} deletion failed', + values: { + modelsCount: modelIds.length, + }, + }), + undefined, + modelIds.join(', ') + ); + }); }); diff --git a/x-pack/platform/plugins/shared/ml/public/application/model_management/trained_models_service.ts b/x-pack/platform/plugins/shared/ml/public/application/model_management/trained_models_service.ts index 5d17019aa7424..f461875caffe1 100644 --- a/x-pack/platform/plugins/shared/ml/public/application/model_management/trained_models_service.ts +++ b/x-pack/platform/plugins/shared/ml/public/application/model_management/trained_models_service.ts @@ -43,6 +43,7 @@ import type { CommonDeploymentParams, AdaptiveAllocationsParams, StartAllocationParams, + DeleteModelParams, } from '../services/ml_api_service/trained_models'; import { type TrainedModelsApiService } from '../services/ml_api_service/trained_models'; import type { SavedObjectsApiService } from '../services/ml_api_service/saved_objects'; @@ -72,7 +73,12 @@ export class TrainedModelsService { private abortedDownloads = new Set(); private downloadStatusFetchInProgress = false; private setScheduledDeployments?: (deployingModels: StartAllocationParams[]) => void; - private displayErrorToast?: (error: ErrorType, title?: string) => void; + private displayErrorToast?: ( + error: ErrorType, + title?: string, + toastLifeTimeMs?: number, + toastMessage?: string + ) => void; private displaySuccessToast?: (toast: { title: string; text: string }) => void; private subscription!: Subscription; private _scheduledDeployments$ = new BehaviorSubject([]); @@ -213,6 +219,45 @@ export class TrainedModelsService { }); } + public async deleteModels(modelIds: string[], options: DeleteModelParams['options']) { + const results = await Promise.allSettled( + modelIds.map((modelId) => + this.trainedModelsApiService + .deleteTrainedModel({ + modelId, + options, + }) + .then(() => this.removeScheduledDeployments({ modelId })) + ) + ); + + // Handle failures + const failures = results + .map((result, index) => ({ + modelId: modelIds[index], + failed: result.status === 'rejected', + error: result.status === 'rejected' ? result.reason : null, + })) + .filter((r) => r.failed); + + if (failures.length > 0) { + const failedModelIds = failures.map((f) => f.modelId).join(', '); + this.displayErrorToast?.( + failures[0].error, + i18n.translate('xpack.ml.trainedModels.modelsList.fetchDeletionErrorTitle', { + defaultMessage: '{modelsCount, plural, one {Model} other {Models}} deletion failed', + values: { + modelsCount: failures.length, + }, + }), + undefined, + failedModelIds + ); + } + + this.fetchModels(); + } + public stopModelDeployment( modelId: string, deploymentIds: string[], diff --git a/x-pack/platform/plugins/shared/ml/public/application/services/ml_api_service/trained_models.ts b/x-pack/platform/plugins/shared/ml/public/application/services/ml_api_service/trained_models.ts index 28439ff7912b6..3904217152878 100644 --- a/x-pack/platform/plugins/shared/ml/public/application/services/ml_api_service/trained_models.ts +++ b/x-pack/platform/plugins/shared/ml/public/application/services/ml_api_service/trained_models.ts @@ -76,6 +76,10 @@ export interface StartAllocationParams { adaptiveAllocationsParams?: AdaptiveAllocationsParams; } +export interface DeleteModelParams { + modelId: string; + options?: { with_pipelines?: boolean; force?: boolean }; +} export interface UpdateAllocationParams extends AdaptiveAllocationsParams { number_of_allocations?: number; } @@ -199,13 +203,13 @@ export function trainedModelsApiProvider(httpService: HttpService) { * Deletes an existing trained inference model. * @param modelId - Model ID */ - deleteTrainedModel( - modelId: string, - options: { with_pipelines?: boolean; force?: boolean } = { + deleteTrainedModel({ + modelId, + options = { with_pipelines: false, force: false, - } - ) { + }, + }: DeleteModelParams) { return httpService.http<{ acknowledge: boolean }>({ path: `${ML_INTERNAL_BASE_PATH}/trained_models/${modelId}`, method: 'DELETE', diff --git a/x-pack/platform/plugins/shared/ml/public/application/services/toast_notification_service/toast_notification_service.ts b/x-pack/platform/plugins/shared/ml/public/application/services/toast_notification_service/toast_notification_service.ts index f209c985e57a9..92d7dbe74b42b 100644 --- a/x-pack/platform/plugins/shared/ml/public/application/services/toast_notification_service/toast_notification_service.ts +++ b/x-pack/platform/plugins/shared/ml/public/application/services/toast_notification_service/toast_notification_service.ts @@ -26,7 +26,12 @@ export function toastNotificationServiceProvider(toastNotifications: ToastsStart toastNotifications.addSuccess(toastOrTitle, options); } - function displayErrorToast(error: ErrorType, title?: string, toastLifeTimeMs?: number) { + function displayErrorToast( + error: ErrorType, + title?: string, + toastLifeTimeMs?: number, + toastMessage?: string + ) { const errorObj = extractErrorProperties(error); toastNotifications.addError(new MLRequestFailure(errorObj, error), { title: @@ -35,6 +40,7 @@ export function toastNotificationServiceProvider(toastNotifications: ToastsStart defaultMessage: 'An error has occurred', }), ...(toastLifeTimeMs ? { toastLifeTimeMs } : {}), + ...(toastMessage ? { toastMessage } : {}), }); } diff --git a/x-pack/platform/plugins/shared/observability_ai_assistant/public/components/message_panel/esql_code_block.tsx b/x-pack/platform/plugins/shared/observability_ai_assistant/public/components/message_panel/esql_code_block.tsx index 24347c3aadb5e..9b1aa0e555bb6 100644 --- a/x-pack/platform/plugins/shared/observability_ai_assistant/public/components/message_panel/esql_code_block.tsx +++ b/x-pack/platform/plugins/shared/observability_ai_assistant/public/components/message_panel/esql_code_block.tsx @@ -61,10 +61,12 @@ export function CodeBlock({ children }: { children: React.ReactNode }) { export function EsqlCodeBlock({ value, + lang, actionsDisabled, onActionClick, }: { value: string; + lang: string; actionsDisabled: boolean; onActionClick: ChatActionClickHandler; }) { @@ -72,7 +74,7 @@ export function EsqlCodeBlock({ - + {value} diff --git a/x-pack/platform/plugins/shared/observability_ai_assistant/public/components/message_panel/message_text.tsx b/x-pack/platform/plugins/shared/observability_ai_assistant/public/components/message_panel/message_text.tsx index a473e34ba2a0c..7565cfee2e1a8 100644 --- a/x-pack/platform/plugins/shared/observability_ai_assistant/public/components/message_panel/message_text.tsx +++ b/x-pack/platform/plugins/shared/observability_ai_assistant/public/components/message_panel/message_text.tsx @@ -147,6 +147,7 @@ export function MessageText({ loading, content, onActionClick }: Props) { <> diff --git a/x-pack/platform/plugins/shared/osquery/common/api/fleet_wrapper/fleet_wrapper.gen.ts b/x-pack/platform/plugins/shared/osquery/common/api/fleet_wrapper/fleet_wrapper.gen.ts index b13a4546f33be..aa8a93f1a8c3c 100644 --- a/x-pack/platform/plugins/shared/osquery/common/api/fleet_wrapper/fleet_wrapper.gen.ts +++ b/x-pack/platform/plugins/shared/osquery/common/api/fleet_wrapper/fleet_wrapper.gen.ts @@ -16,11 +16,9 @@ import { z } from '@kbn/zod'; -import { Id } from '../model/schema/common_attributes.gen'; - export type GetAgentDetailsRequestParams = z.infer; export const GetAgentDetailsRequestParams = z.object({ - id: Id, + id: z.string(), }); export type GetAgentDetailsRequestParamsInput = z.input; @@ -35,7 +33,7 @@ export const GetAgentPoliciesResponse = z.object({}); export type GetAgentPolicyRequestParams = z.infer; export const GetAgentPolicyRequestParams = z.object({ - id: Id, + id: z.string(), }); export type GetAgentPolicyRequestParamsInput = z.input; diff --git a/x-pack/platform/plugins/shared/osquery/common/api/fleet_wrapper/fleet_wrapper.schema.yaml b/x-pack/platform/plugins/shared/osquery/common/api/fleet_wrapper/fleet_wrapper.schema.yaml index fff64cb7009eb..539b863d5263a 100644 --- a/x-pack/platform/plugins/shared/osquery/common/api/fleet_wrapper/fleet_wrapper.schema.yaml +++ b/x-pack/platform/plugins/shared/osquery/common/api/fleet_wrapper/fleet_wrapper.schema.yaml @@ -37,7 +37,7 @@ paths: in: path required: true schema: - $ref: '../model/schema/common_attributes.schema.yaml#/components/schemas/Id' + type: string responses: '200': description: OK @@ -75,7 +75,7 @@ paths: in: path required: true schema: - $ref: '../model/schema/common_attributes.schema.yaml#/components/schemas/Id' + type: string responses: '200': description: OK diff --git a/x-pack/platform/plugins/shared/osquery/common/api/fleet_wrapper/get_agent_status.gen.ts b/x-pack/platform/plugins/shared/osquery/common/api/fleet_wrapper/get_agent_status.gen.ts index 589742a0498ea..1f7469ea0fa28 100644 --- a/x-pack/platform/plugins/shared/osquery/common/api/fleet_wrapper/get_agent_status.gen.ts +++ b/x-pack/platform/plugins/shared/osquery/common/api/fleet_wrapper/get_agent_status.gen.ts @@ -16,7 +16,7 @@ import { z } from '@kbn/zod'; -import { KueryOrUndefined, Id } from '../model/schema/common_attributes.gen'; +import { KueryOrUndefined } from '../model/schema/common_attributes.gen'; export type GetAgentStatusRequestParams = z.infer; export const GetAgentStatusRequestParams = z.object({}); @@ -24,5 +24,5 @@ export const GetAgentStatusRequestParams = z.object({}); export type GetAgentStatusRequestQueryParams = z.infer; export const GetAgentStatusRequestQueryParams = z.object({ kuery: KueryOrUndefined.optional(), - policyId: Id.optional(), + policyId: z.string().optional(), }); diff --git a/x-pack/platform/plugins/shared/osquery/common/api/fleet_wrapper/get_agent_status.schema.yaml b/x-pack/platform/plugins/shared/osquery/common/api/fleet_wrapper/get_agent_status.schema.yaml index af2e9307b4c12..666da0e732620 100644 --- a/x-pack/platform/plugins/shared/osquery/common/api/fleet_wrapper/get_agent_status.schema.yaml +++ b/x-pack/platform/plugins/shared/osquery/common/api/fleet_wrapper/get_agent_status.schema.yaml @@ -13,4 +13,4 @@ components: kuery: $ref: '../model/schema/common_attributes.schema.yaml#/components/schemas/KueryOrUndefined' policyId: - $ref: '../model/schema/common_attributes.schema.yaml#/components/schemas/Id' + type: string diff --git a/x-pack/platform/plugins/shared/osquery/common/api/live_query/create_live_query.gen.ts b/x-pack/platform/plugins/shared/osquery/common/api/live_query/create_live_query.gen.ts index 850c263e6b43a..86338a5e99d64 100644 --- a/x-pack/platform/plugins/shared/osquery/common/api/live_query/create_live_query.gen.ts +++ b/x-pack/platform/plugins/shared/osquery/common/api/live_query/create_live_query.gen.ts @@ -26,17 +26,44 @@ import { export type CreateLiveQueryRequestBody = z.infer; export const CreateLiveQueryRequestBody = z.object({ + /** + * A list of agent IDs to run the query on. + */ agent_ids: z.array(z.string()).optional(), + /** + * When `true`, the query runs on all agents. + */ agent_all: z.boolean().optional(), + /** + * A list of agent platforms to run the query on. + */ agent_platforms: z.array(z.string()).optional(), + /** + * A list of agent policy IDs to run the query on. + */ agent_policy_ids: z.array(z.string()).optional(), query: QueryOrUndefined.optional(), queries: ArrayQueries.optional(), saved_query_id: SavedQueryIdOrUndefined.optional(), ecs_mapping: ECSMappingOrUndefined.optional(), pack_id: PackIdOrUndefined.optional(), + /** + * A list of alert IDs associated with the live query. + */ alert_ids: z.array(z.string()).optional(), + /** + * A list of case IDs associated with the live query. + */ case_ids: z.array(z.string()).optional(), + /** + * A list of event IDs associated with the live query. + */ event_ids: z.array(z.string()).optional(), + /** + * Custom metadata object associated with the live query. + */ metadata: z.object({}).nullable().optional(), }); + +export type CreateLiveQueryResponse = z.infer; +export const CreateLiveQueryResponse = z.object({}); diff --git a/x-pack/platform/plugins/shared/osquery/common/api/live_query/create_live_query.schema.yaml b/x-pack/platform/plugins/shared/osquery/common/api/live_query/create_live_query.schema.yaml index 1e40158c638d7..c8b4b5327eb93 100644 --- a/x-pack/platform/plugins/shared/osquery/common/api/live_query/create_live_query.schema.yaml +++ b/x-pack/platform/plugins/shared/osquery/common/api/live_query/create_live_query.schema.yaml @@ -7,18 +7,28 @@ components: schemas: CreateLiveQueryRequestBody: type: object + example: + query: 'select * from uptime;' + agent_all: true + ecs_mapping: + host.uptime: + field: 'total_seconds' properties: agent_ids: + description: 'A list of agent IDs to run the query on.' type: array items: type: string agent_all: + description: 'When `true`, the query runs on all agents.' type: boolean agent_platforms: + description: 'A list of agent platforms to run the query on.' type: array items: type: string agent_policy_ids: + description: 'A list of agent policy IDs to run the query on.' type: array items: type: string @@ -33,17 +43,54 @@ components: pack_id: $ref: '../model/schema/common_attributes.schema.yaml#/components/schemas/PackIdOrUndefined' alert_ids: + description: 'A list of alert IDs associated with the live query.' type: array items: type: string case_ids: + description: 'A list of case IDs associated with the live query.' type: array items: type: string event_ids: + description: 'A list of event IDs associated with the live query.' type: array items: type: string metadata: + description: 'Custom metadata object associated with the live query.' type: object nullable: true + + CreateLiveQueryResponse: + type: object + properties: { } + example: + data: + action_id: '3c42c847-eb30-4452-80e0-728584042334' + '@timestamp': '2022-07-26T09:59:32.220Z' + expiration: '2022-07-26T10:04:32.220Z' + type: 'INPUT_ACTION' + input_type: 'osquery' + agent_ids: [ ] + agent_all: true + agent_platforms: [ ] + agent_policy_ids: [ ] + agents: + - '16d7caf5-efd2-4212-9b62-73dafc91fa13' + user_id: 'elastic' + metadata: + execution_context: + name: 'osquery' + url: '/app/osquery/live_queries/new' + queries: + - action_id: '609c4c66-ba3d-43fa-afdd-53e244577aa0' + id: '6724a474-cbba-41ef-a1aa-66aebf0879e2' + query: 'select * from uptime;' + timeout: 120 + ecs_mapping: + host.uptime: + field: 'total_seconds' + agents: + - '16d7caf5-efd2-4212-9b62-73dafc91fa13' + diff --git a/x-pack/platform/plugins/shared/osquery/common/api/live_query/find_live_query.gen.ts b/x-pack/platform/plugins/shared/osquery/common/api/live_query/find_live_query.gen.ts index 0042018533b6a..aedad5f3b8877 100644 --- a/x-pack/platform/plugins/shared/osquery/common/api/live_query/find_live_query.gen.ts +++ b/x-pack/platform/plugins/shared/osquery/common/api/live_query/find_live_query.gen.ts @@ -16,19 +16,8 @@ import { z } from '@kbn/zod'; -import { - KueryOrUndefined, - PageOrUndefined, - PageSizeOrUndefined, - SortOrUndefined, - SortOrderOrUndefined, -} from '../model/schema/common_attributes.gen'; +export type FindLiveQueryResponse = z.infer; +export const FindLiveQueryResponse = z.object({}); -export type FindLiveQueryRequestQuery = z.infer; -export const FindLiveQueryRequestQuery = z.object({ - kuery: KueryOrUndefined.optional(), - page: PageOrUndefined.optional(), - pageSize: PageSizeOrUndefined.optional(), - sort: SortOrUndefined.optional(), - sortOrder: SortOrderOrUndefined.optional(), -}); +export type FindLiveQueryDetailsResponse = z.infer; +export const FindLiveQueryDetailsResponse = z.object({}); diff --git a/x-pack/platform/plugins/shared/osquery/common/api/live_query/find_live_query.schema.yaml b/x-pack/platform/plugins/shared/osquery/common/api/live_query/find_live_query.schema.yaml index 50589ecc9fc28..0cbe29aa92fdc 100644 --- a/x-pack/platform/plugins/shared/osquery/common/api/live_query/find_live_query.schema.yaml +++ b/x-pack/platform/plugins/shared/osquery/common/api/live_query/find_live_query.schema.yaml @@ -5,16 +5,51 @@ info: paths: { } components: schemas: - FindLiveQueryRequestQuery: + FindLiveQueryResponse: + example: + data: + items: + - fields: + action_id: '3c42c847-eb30-4452-80e0-728584042334' + expiration: '2023-10-31T00:00:00Z' + "@timestamp": '2023-10-31T00:00:00Z' + agents: [ '16d7caf5-efd2-4212-9b62-73dafc91fa13' ] + user_id: 'elastic' + queries: + - action_id: "609c4c66-ba3d-43fa-afdd-53e244577aa0" + id: "6724a474-cbba-41ef-a1aa-66aebf0879e2" + query: "select * from uptime;" + saved_query_id: "42ba9c50-0cc5-11ed-aa1d-2b27890bc90d" + ecs_mapping: + host.uptime: + field: "total_seconds" + agents: [ "16d7caf5-efd2-4212-9b62-73dafc91fa13" ] type: object - properties: - kuery: - $ref: '../model/schema/common_attributes.schema.yaml#/components/schemas/KueryOrUndefined' - page: - $ref: '../model/schema/common_attributes.schema.yaml#/components/schemas/PageOrUndefined' - pageSize: - $ref: '../model/schema/common_attributes.schema.yaml#/components/schemas/PageSizeOrUndefined' - sort: - $ref: '../model/schema/common_attributes.schema.yaml#/components/schemas/SortOrUndefined' - sortOrder: - $ref: '../model/schema/common_attributes.schema.yaml#/components/schemas/SortOrderOrUndefined' + properties: { } + FindLiveQueryDetailsResponse: + example: + data: + action_id: "3c42c847-eb30-4452-80e0-728584042334" + expiration: "2022-07-26T10:04:32.220Z" + "@timestamp": "2022-07-26T09:59:32.220Z" + agents: [ "16d7caf5-efd2-4212-9b62-73dafc91fa13" ] + user_id: "elastic" + queries: + - action_id: "609c4c66-ba3d-43fa-afdd-53e244577aa0" + id: "6724a474-cbba-41ef-a1aa-66aebf0879e2" + query: "select * from uptime;" + saved_query_id: "42ba9c50-0cc5-11ed-aa1d-2b27890bc90d" + ecs_mapping: + host.uptime: + field: "total_seconds" + agents: + - "16d7caf5-efd2-4212-9b62-73dafc91fa13" + docs: 0 # results count + failed: 1 # failed queries + pending: 0 # pending agents + responded: 1 # total responded agents + successful: 0 # successful agents + status: "completed" # single query status + status: "completed" # global status of the live query (completed, pending) + type: object + properties: { } diff --git a/x-pack/platform/plugins/shared/osquery/common/api/live_query/get_live_query_results.gen.ts b/x-pack/platform/plugins/shared/osquery/common/api/live_query/get_live_query_results.gen.ts index a8e9b174e9e25..52d1d0ec52484 100644 --- a/x-pack/platform/plugins/shared/osquery/common/api/live_query/get_live_query_results.gen.ts +++ b/x-pack/platform/plugins/shared/osquery/common/api/live_query/get_live_query_results.gen.ts @@ -16,19 +16,8 @@ import { z } from '@kbn/zod'; -import { - KueryOrUndefined, - PageOrUndefined, - PageSizeOrUndefined, - SortOrUndefined, - SortOrderOrUndefined, -} from '../model/schema/common_attributes.gen'; - -export type GetLiveQueryResultsRequestQuery = z.infer; -export const GetLiveQueryResultsRequestQuery = z.object({ - kuery: KueryOrUndefined.optional(), - page: PageOrUndefined.optional(), - pageSize: PageSizeOrUndefined.optional(), - sort: SortOrUndefined.optional(), - sortOrder: SortOrderOrUndefined.optional(), -}); +/** + * The response for getting live query results. + */ +export type GetLiveQueryResultsResponse = z.infer; +export const GetLiveQueryResultsResponse = z.object({}); diff --git a/x-pack/platform/plugins/shared/osquery/common/api/live_query/get_live_query_results.schema.yaml b/x-pack/platform/plugins/shared/osquery/common/api/live_query/get_live_query_results.schema.yaml index 2b2bb95daba95..1713d981d8ca8 100644 --- a/x-pack/platform/plugins/shared/osquery/common/api/live_query/get_live_query_results.schema.yaml +++ b/x-pack/platform/plugins/shared/osquery/common/api/live_query/get_live_query_results.schema.yaml @@ -5,16 +5,11 @@ info: paths: {} components: schemas: - GetLiveQueryResultsRequestQuery: + GetLiveQueryResultsResponse: type: object - properties: - kuery: - $ref: '../model/schema/common_attributes.schema.yaml#/components/schemas/KueryOrUndefined' - page: - $ref: '../model/schema/common_attributes.schema.yaml#/components/schemas/PageOrUndefined' - pageSize: - $ref: '../model/schema/common_attributes.schema.yaml#/components/schemas/PageSizeOrUndefined' - sort: - $ref: '../model/schema/common_attributes.schema.yaml#/components/schemas/SortOrUndefined' - sortOrder: - $ref: '../model/schema/common_attributes.schema.yaml#/components/schemas/SortOrderOrUndefined' + description: 'The response for getting live query results.' + properties: { } + example: + data: + total: 2 + edges: [{}, {}] diff --git a/x-pack/platform/plugins/shared/osquery/common/api/live_query/live_queries.gen.ts b/x-pack/platform/plugins/shared/osquery/common/api/live_query/live_queries.gen.ts index db8df75489333..a8d15825aa5da 100644 --- a/x-pack/platform/plugins/shared/osquery/common/api/live_query/live_queries.gen.ts +++ b/x-pack/platform/plugins/shared/osquery/common/api/live_query/live_queries.gen.ts @@ -16,10 +16,16 @@ import { z } from '@kbn/zod'; -import { FindLiveQueryRequestQuery } from './find_live_query.gen'; -import { DefaultSuccessResponse, Id } from '../model/schema/common_attributes.gen'; -import { CreateLiveQueryRequestBody } from './create_live_query.gen'; -import { GetLiveQueryResultsRequestQuery } from './get_live_query_results.gen'; +import { + KueryOrUndefined, + PageOrUndefined, + PageSizeOrUndefined, + SortOrUndefined, + SortOrderOrUndefined, +} from '../model/schema/common_attributes.gen'; +import { FindLiveQueryResponse, FindLiveQueryDetailsResponse } from './find_live_query.gen'; +import { CreateLiveQueryRequestBody, CreateLiveQueryResponse } from './create_live_query.gen'; +import { GetLiveQueryResultsResponse } from './get_live_query_results.gen'; export type OsqueryCreateLiveQueryRequestBody = z.infer; export const OsqueryCreateLiveQueryRequestBody = CreateLiveQueryRequestBody; @@ -28,44 +34,43 @@ export type OsqueryCreateLiveQueryRequestBodyInput = z.input< >; export type OsqueryCreateLiveQueryResponse = z.infer; -export const OsqueryCreateLiveQueryResponse = DefaultSuccessResponse; +export const OsqueryCreateLiveQueryResponse = CreateLiveQueryResponse; export type OsqueryFindLiveQueriesRequestQuery = z.infer; export const OsqueryFindLiveQueriesRequestQuery = z.object({ - query: FindLiveQueryRequestQuery, + kuery: KueryOrUndefined.optional(), + page: PageOrUndefined.optional(), + pageSize: PageSizeOrUndefined.optional(), + sort: SortOrUndefined.optional(), + sortOrder: SortOrderOrUndefined.optional(), }); export type OsqueryFindLiveQueriesRequestQueryInput = z.input< typeof OsqueryFindLiveQueriesRequestQuery >; export type OsqueryFindLiveQueriesResponse = z.infer; -export const OsqueryFindLiveQueriesResponse = DefaultSuccessResponse; -export type OsqueryGetLiveQueryDetailsRequestQuery = z.infer< - typeof OsqueryGetLiveQueryDetailsRequestQuery ->; -export const OsqueryGetLiveQueryDetailsRequestQuery = z.object({ - query: z.object({}), -}); -export type OsqueryGetLiveQueryDetailsRequestQueryInput = z.input< - typeof OsqueryGetLiveQueryDetailsRequestQuery ->; +export const OsqueryFindLiveQueriesResponse = FindLiveQueryResponse; export type OsqueryGetLiveQueryDetailsRequestParams = z.infer< typeof OsqueryGetLiveQueryDetailsRequestParams >; export const OsqueryGetLiveQueryDetailsRequestParams = z.object({ - id: Id, + id: z.string(), }); export type OsqueryGetLiveQueryDetailsRequestParamsInput = z.input< typeof OsqueryGetLiveQueryDetailsRequestParams >; export type OsqueryGetLiveQueryDetailsResponse = z.infer; -export const OsqueryGetLiveQueryDetailsResponse = DefaultSuccessResponse; +export const OsqueryGetLiveQueryDetailsResponse = FindLiveQueryDetailsResponse; export type OsqueryGetLiveQueryResultsRequestQuery = z.infer< typeof OsqueryGetLiveQueryResultsRequestQuery >; export const OsqueryGetLiveQueryResultsRequestQuery = z.object({ - query: GetLiveQueryResultsRequestQuery, + kuery: KueryOrUndefined.optional(), + page: PageOrUndefined.optional(), + pageSize: PageSizeOrUndefined.optional(), + sort: SortOrUndefined.optional(), + sortOrder: SortOrderOrUndefined.optional(), }); export type OsqueryGetLiveQueryResultsRequestQueryInput = z.input< typeof OsqueryGetLiveQueryResultsRequestQuery @@ -75,12 +80,12 @@ export type OsqueryGetLiveQueryResultsRequestParams = z.infer< typeof OsqueryGetLiveQueryResultsRequestParams >; export const OsqueryGetLiveQueryResultsRequestParams = z.object({ - id: Id, - actionId: Id, + id: z.string(), + actionId: z.string(), }); export type OsqueryGetLiveQueryResultsRequestParamsInput = z.input< typeof OsqueryGetLiveQueryResultsRequestParams >; export type OsqueryGetLiveQueryResultsResponse = z.infer; -export const OsqueryGetLiveQueryResultsResponse = DefaultSuccessResponse; +export const OsqueryGetLiveQueryResultsResponse = GetLiveQueryResultsResponse; diff --git a/x-pack/platform/plugins/shared/osquery/common/api/live_query/live_queries.schema.yaml b/x-pack/platform/plugins/shared/osquery/common/api/live_query/live_queries.schema.yaml index fa9fc90742bbb..108974143d3d9 100644 --- a/x-pack/platform/plugins/shared/osquery/common/api/live_query/live_queries.schema.yaml +++ b/x-pack/platform/plugins/shared/osquery/common/api/live_query/live_queries.schema.yaml @@ -11,18 +11,38 @@ paths: x-codegen-enabled: true x-labels: [serverless, ess] parameters: - - name: query + - name: kuery in: query - required: true + required: false + schema: + $ref: '../model/schema/common_attributes.schema.yaml#/components/schemas/KueryOrUndefined' + - name: page + in: query + required: false + schema: + $ref: '../model/schema/common_attributes.schema.yaml#/components/schemas/PageOrUndefined' + - name: pageSize + in: query + required: false schema: - $ref: './find_live_query.schema.yaml#/components/schemas/FindLiveQueryRequestQuery' + $ref: '../model/schema/common_attributes.schema.yaml#/components/schemas/PageSizeOrUndefined' + - name: sort + in: query + required: false + schema: + $ref: '../model/schema/common_attributes.schema.yaml#/components/schemas/SortOrUndefined' + - name: sortOrder + in: query + required: false + schema: + $ref: '../model/schema/common_attributes.schema.yaml#/components/schemas/SortOrderOrUndefined' responses: '200': description: OK content: application/json: schema: - $ref: '../model/schema/common_attributes.schema.yaml#/components/schemas/DefaultSuccessResponse' + $ref: './find_live_query.schema.yaml#/components/schemas/FindLiveQueryResponse' post: summary: Create a live query @@ -42,7 +62,7 @@ paths: content: application/json: schema: - $ref: '../model/schema/common_attributes.schema.yaml#/components/schemas/DefaultSuccessResponse' + $ref: './create_live_query.schema.yaml#/components/schemas/CreateLiveQueryResponse' /api/osquery/live_queries/{id}: get: @@ -56,19 +76,16 @@ paths: in: path required: true schema: - $ref: '../model/schema/common_attributes.schema.yaml#/components/schemas/Id' - - name: query - in: query - schema: - type: object - additionalProperties: true + description: 'The ID of the live query result you want to retrieve.' + type: string + example: '3c42c847-eb30-4452-80e0-728584042334' responses: '200': description: OK content: application/json: schema: - $ref: '../model/schema/common_attributes.schema.yaml#/components/schemas/DefaultSuccessResponse' + $ref: './find_live_query.schema.yaml#/components/schemas/FindLiveQueryDetailsResponse' /api/osquery/live_queries/{id}/results/{actionId}: get: @@ -82,21 +99,45 @@ paths: in: path required: true schema: - $ref: '../model/schema/common_attributes.schema.yaml#/components/schemas/Id' + example: '3c42c847-eb30-4452-80e0-728584042334' + description: 'The ID of the live query result you want to retrieve.' + type: string - name: actionId in: path required: true schema: - $ref: '../model/schema/common_attributes.schema.yaml#/components/schemas/Id' - - name: query + example: '609c4c66-ba3d-43fa-afdd-53e244577aa0' + description: 'The ID of the query action that generated the live query results.' + type: string + - name: kuery in: query - required: true + required: false + schema: + $ref: '../model/schema/common_attributes.schema.yaml#/components/schemas/KueryOrUndefined' + - name: page + in: query + required: false + schema: + $ref: '../model/schema/common_attributes.schema.yaml#/components/schemas/PageOrUndefined' + - name: pageSize + in: query + required: false + schema: + $ref: '../model/schema/common_attributes.schema.yaml#/components/schemas/PageSizeOrUndefined' + - name: sort + in: query + required: false + schema: + $ref: '../model/schema/common_attributes.schema.yaml#/components/schemas/SortOrUndefined' + - name: sortOrder + in: query + required: false schema: - $ref: './get_live_query_results.schema.yaml#/components/schemas/GetLiveQueryResultsRequestQuery' + $ref: '../model/schema/common_attributes.schema.yaml#/components/schemas/SortOrderOrUndefined' responses: '200': description: OK content: application/json: schema: - $ref: '../model/schema/common_attributes.schema.yaml#/components/schemas/DefaultSuccessResponse' + $ref: './get_live_query_results.schema.yaml#/components/schemas/GetLiveQueryResultsResponse' diff --git a/x-pack/platform/plugins/shared/osquery/common/api/model/schema/common_attributes.gen.ts b/x-pack/platform/plugins/shared/osquery/common/api/model/schema/common_attributes.gen.ts index 698319f8d266c..a9ac71e5198b3 100644 --- a/x-pack/platform/plugins/shared/osquery/common/api/model/schema/common_attributes.gen.ts +++ b/x-pack/platform/plugins/shared/osquery/common/api/model/schema/common_attributes.gen.ts @@ -16,119 +16,150 @@ import { z } from '@kbn/zod'; -export type Id = z.infer; -export const Id = z.string(); - -export type IdOrUndefined = z.infer; -export const IdOrUndefined = Id.nullable(); - -export type AgentSelection = z.infer; -export const AgentSelection = z.object({ - agents: z.array(z.string()).optional(), - allAgentsSelected: z.boolean().optional(), - platformsSelected: z.array(z.string()).optional(), - policiesSelected: z.array(z.string()).optional(), -}); - -export type AgentSelectionOrUndefined = z.infer; -export const AgentSelectionOrUndefined = AgentSelection.nullable(); +/** + * The ID of the query. + */ +export type QueryId = z.infer; +export const QueryId = z.string(); -export type Description = z.infer; -export const Description = z.string(); +/** + * The pack description. + */ +export type PackDescription = z.infer; +export const PackDescription = z.string(); -export type DescriptionOrUndefined = z.infer; -export const DescriptionOrUndefined = Description.nullable(); +export type PackDescriptionOrUndefined = z.infer; +export const PackDescriptionOrUndefined = PackDescription.nullable(); +/** + * Restricts the query to a specified platform. The default is all platforms. To specify multiple platforms, use commas. For example, `linux,darwin`. + */ export type Platform = z.infer; export const Platform = z.string(); export type PlatformOrUndefined = z.infer; export const PlatformOrUndefined = Platform.nullable(); +/** + * The SQL query you want to run. + */ export type Query = z.infer; export const Query = z.string(); export type QueryOrUndefined = z.infer; export const QueryOrUndefined = Query.nullable(); +/** + * Uses the Osquery versions greater than or equal to the specified version string. + */ export type Version = z.infer; export const Version = z.string(); export type VersionOrUndefined = z.infer; export const VersionOrUndefined = Version.nullable(); +/** + * An interval, in seconds, on which to run the query. + */ export type Interval = z.infer; export const Interval = z.string(); export type IntervalOrUndefined = z.infer; export const IntervalOrUndefined = Interval.nullable(); +/** + * Indicates whether the query is a snapshot. + */ export type Snapshot = z.infer; export const Snapshot = z.boolean(); export type SnapshotOrUndefined = z.infer; export const SnapshotOrUndefined = Snapshot.nullable(); +/** + * Indicates whether the query is removed. + */ export type Removed = z.infer; export const Removed = z.boolean(); export type RemovedOrUndefined = z.infer; export const RemovedOrUndefined = Removed.nullable(); +/** + * The pack name. + */ export type PackName = z.infer; export const PackName = z.string(); +/** + * The ID of a saved query. + */ export type SavedQueryId = z.infer; export const SavedQueryId = z.string(); export type SavedQueryIdOrUndefined = z.infer; export const SavedQueryIdOrUndefined = SavedQueryId.nullable(); +/** + * The saved query description. + */ +export type SavedQueryDescription = z.infer; +export const SavedQueryDescription = z.string(); + +export type SavedQueryDescriptionOrUndefined = z.infer; +export const SavedQueryDescriptionOrUndefined = SavedQueryDescription.nullable(); + +/** + * The ID of the pack you want to run, retrieve, update, or delete. + */ export type PackId = z.infer; export const PackId = z.string(); export type PackIdOrUndefined = z.infer; export const PackIdOrUndefined = PackId.nullable(); +/** + * Enables the pack. + */ export type Enabled = z.infer; export const Enabled = z.boolean(); export type EnabledOrUndefined = z.infer; export const EnabledOrUndefined = Enabled.nullable(); +/** + * A list of agents policy IDs. + */ export type PolicyIds = z.infer; export const PolicyIds = z.array(z.string()); export type PolicyIdsOrUndefined = z.infer; export const PolicyIdsOrUndefined = PolicyIds.nullable(); -export type ExecutionContext = z.infer; -export const ExecutionContext = z.object({ - name: z.string().nullable().optional(), - url: z.string().nullable().optional(), -}); - -export type ExecutionContextOrUndefined = z.infer; -export const ExecutionContextOrUndefined = ExecutionContext.nullable(); - export type ECSMappingItem = z.infer; export const ECSMappingItem = z.object({ + /** + * The ECS field to map to. + */ field: z.string().optional(), + /** + * The value to map to the ECS field. + */ value: z.union([z.string(), z.array(z.string())]).optional(), }); +/** + * Map osquery results columns or static values to Elastic Common Schema (ECS) fields + */ export type ECSMapping = z.infer; export const ECSMapping = z.object({}).catchall(ECSMappingItem); export type ECSMappingOrUndefined = z.infer; export const ECSMappingOrUndefined = ECSMapping.nullable(); -export type StringArrayOrUndefined = z.infer; -export const StringArrayOrUndefined = z.array(z.string().nullable()); - export type ArrayQueriesItem = z.infer; export const ArrayQueriesItem = z.object({ - id: Id.optional(), + id: QueryId.optional(), query: Query.optional(), ecs_mapping: ECSMappingOrUndefined.optional(), version: VersionOrUndefined.optional(), @@ -137,13 +168,16 @@ export const ArrayQueriesItem = z.object({ snapshot: SnapshotOrUndefined.optional(), }); +/** + * An array of queries to run. + */ export type ArrayQueries = z.infer; export const ArrayQueries = z.array(ArrayQueriesItem); export type ObjectQueriesItem = z.infer; export const ObjectQueriesItem = z.object({ query: Query.optional(), - id: Id.optional(), + id: QueryId.optional(), ecs_mapping: ECSMappingOrUndefined.optional(), version: VersionOrUndefined.optional(), platform: PlatformOrUndefined.optional(), @@ -152,6 +186,9 @@ export const ObjectQueriesItem = z.object({ snapshot: SnapshotOrUndefined.optional(), }); +/** + * An object of queries. + */ export type ObjectQueries = z.infer; export const ObjectQueries = z.object({}).catchall(ObjectQueriesItem); @@ -161,21 +198,41 @@ export const Queries = z.union([ArrayQueries, ObjectQueries]); export type QueriesOrUndefined = z.infer; export const QueriesOrUndefined = Queries.nullable(); +/** + * The kuery to filter the results by. + */ export type KueryOrUndefined = z.infer; export const KueryOrUndefined = z.string().nullable(); +/** + * The page number to return. The default is 1. + */ export type PageOrUndefined = z.infer; export const PageOrUndefined = z.number().int().nullable(); +/** + * The number of results to return per page. The default is 20. + */ export type PageSizeOrUndefined = z.infer; export const PageSizeOrUndefined = z.number().int().nullable(); +/** + * The field that is used to sort the results. + */ export type SortOrUndefined = z.infer; -export const SortOrUndefined = z.string().nullable(); +export const SortOrUndefined = z.string().nullable().default('createdAt'); +/** + * Specifies the sort order. + */ export type SortOrderOrUndefined = z.infer; -export const SortOrderOrUndefined = z.union([z.string().nullable(), z.unknown()]); +export const SortOrderOrUndefined = z.enum(['asc', 'desc']); +export type SortOrderOrUndefinedEnum = typeof SortOrderOrUndefined.enum; +export const SortOrderOrUndefinedEnum = SortOrderOrUndefined.enum; +/** + * An object with shard configuration for policies included in the pack. For each policy, set the shard configuration to a percentage (1–100) of target hosts. + */ export type Shards = z.infer; export const Shards = z.object({}).catchall(z.number()); diff --git a/x-pack/platform/plugins/shared/osquery/common/api/model/schema/common_attributes.schema.yaml b/x-pack/platform/plugins/shared/osquery/common/api/model/schema/common_attributes.schema.yaml index 9f24757ee300c..82a3af3b9d808 100644 --- a/x-pack/platform/plugins/shared/osquery/common/api/model/schema/common_attributes.schema.yaml +++ b/x-pack/platform/plugins/shared/osquery/common/api/model/schema/common_attributes.schema.yaml @@ -5,44 +5,24 @@ info: paths: { } components: schemas: - Id: + QueryId: + description: 'The ID of the query.' + example: '3c42c847-eb30-4452-80e0-728584042334' type: string - IdOrUndefined: - $ref: '#/components/schemas/Id' - nullable: true - AgentSelection: - type: object - properties: - agents: - type: array - items: - type: string - allAgentsSelected: - type: boolean - platformsSelected: - type: array - items: - type: string - policiesSelected: - type: array - items: - type: string - - AgentSelectionOrUndefined: - $ref: '#/components/schemas/AgentSelection' - nullable: true - - - Description: + PackDescription: + description: 'The pack description.' + example: 'Pack description' type: string - DescriptionOrUndefined: - $ref: '#/components/schemas/Description' + PackDescriptionOrUndefined: + $ref: '#/components/schemas/PackDescription' nullable: true Platform: + description: 'Restricts the query to a specified platform. The default is all platforms. To specify multiple platforms, use commas. For example, `linux,darwin`.' + example: 'linux,darwin' type: string PlatformOrUndefined: @@ -51,6 +31,8 @@ components: Query: + description: 'The SQL query you want to run.' + example: 'select * from uptime;' type: string QueryOrUndefined: @@ -58,6 +40,8 @@ components: nullable: true Version: + description: 'Uses the Osquery versions greater than or equal to the specified version string.' + example: '1.0.0' type: string VersionOrUndefined: @@ -65,6 +49,8 @@ components: nullable: true Interval: + description: 'An interval, in seconds, on which to run the query.' + example: '60' type: string IntervalOrUndefined: @@ -72,6 +58,8 @@ components: nullable: true Snapshot: + description: 'Indicates whether the query is a snapshot.' + example: true type: boolean SnapshotOrUndefined: @@ -79,6 +67,8 @@ components: nullable: true Removed: + description: 'Indicates whether the query is removed.' + example: false type: boolean RemovedOrUndefined: @@ -86,17 +76,31 @@ components: nullable: true PackName: + description: 'The pack name.' type: string SavedQueryId: + description: 'The ID of a saved query.' + example: '3c42c847-eb30-4452-80e0-728584042334' type: string SavedQueryIdOrUndefined: $ref: '#/components/schemas/SavedQueryId' nullable: true + SavedQueryDescription: + description: 'The saved query description.' + example: 'Saved query description' + type: string + + SavedQueryDescriptionOrUndefined: + $ref: '#/components/schemas/SavedQueryDescription' + nullable: true + PackId: + description: 'The ID of the pack you want to run, retrieve, update, or delete.' + example: '3c42c847-eb30-4452-80e0-728584042334' type: string PackIdOrUndefined: @@ -104,6 +108,8 @@ components: nullable: true Enabled: + description: 'Enables the pack.' + example: true type: boolean EnabledOrUndefined: @@ -111,6 +117,10 @@ components: nullable: true PolicyIds: + description: 'A list of agents policy IDs.' + example: + - "policyId1" + - "policyId2" type: array items: type: string @@ -119,28 +129,16 @@ components: $ref: '#/components/schemas/PolicyIds' nullable: true - ExecutionContext: - type: object - properties: - name: - type: string - nullable: true - url: - type: string - nullable: true - - - ExecutionContextOrUndefined: - $ref: '#/components/schemas/ExecutionContext' - nullable: true - - ECSMappingItem: type: object properties: field: + description: 'The ECS field to map to.' + example: 'host.uptime' type: string value: + description: 'The value to map to the ECS field.' + example: 'total_seconds' oneOf: - type: string - type: array @@ -148,6 +146,10 @@ components: type: string ECSMapping: + description: 'Map osquery results columns or static values to Elastic Common Schema (ECS) fields' + example: + host.uptime: + field: 'total_seconds' type: object additionalProperties: $ref: '#/components/schemas/ECSMappingItem' @@ -156,19 +158,11 @@ components: $ref: '#/components/schemas/ECSMapping' nullable: true - - StringArrayOrUndefined: - type: array - items: - type: string - nullable: true - - ArrayQueriesItem: type: object properties: id: - $ref: '#/components/schemas/Id' + $ref: '#/components/schemas/QueryId' query: $ref: '#/components/schemas/Query' ecs_mapping: @@ -184,6 +178,7 @@ components: ArrayQueries: type: array + description: 'An array of queries to run.' items: $ref: '#/components/schemas/ArrayQueriesItem' @@ -193,7 +188,7 @@ components: query: $ref: '#/components/schemas/Query' id: - $ref: '#/components/schemas/Id' + $ref: '#/components/schemas/QueryId' ecs_mapping: $ref: '#/components/schemas/ECSMappingOrUndefined' version: @@ -209,6 +204,7 @@ components: ObjectQueries: type: object + description: 'An object of queries.' additionalProperties: $ref: '#/components/schemas/ObjectQueriesItem' @@ -223,29 +219,42 @@ components: nullable: true KueryOrUndefined: + description: 'The kuery to filter the results by.' + example: 'agent.id: 16d7caf5-efd2-4212-9b62-73dafc91fa13' type: string nullable: true PageOrUndefined: + description: 'The page number to return. The default is 1.' + example: 1 type: integer nullable: true PageSizeOrUndefined: + description: 'The number of results to return per page. The default is 20.' + example: 20 type: integer nullable: true SortOrUndefined: + description: 'The field that is used to sort the results.' + example: 'createdAt' + default: createdAt type: string nullable: true SortOrderOrUndefined: - oneOf: - - - type: string - nullable: true - - enum: [ asc, desc ] + description: 'Specifies the sort order.' + example: 'desc' + enum: + - asc + - desc + type: string Shards: + description: 'An object with shard configuration for policies included in the pack. For each policy, set the shard configuration to a percentage (1–100) of target hosts.' + example: + policy_id: 50 type: object additionalProperties: type: number diff --git a/x-pack/platform/plugins/shared/osquery/common/api/packs/create_pack.gen.ts b/x-pack/platform/plugins/shared/osquery/common/api/packs/create_pack.gen.ts index 07dfe17c54801..84ba779ad8ae2 100644 --- a/x-pack/platform/plugins/shared/osquery/common/api/packs/create_pack.gen.ts +++ b/x-pack/platform/plugins/shared/osquery/common/api/packs/create_pack.gen.ts @@ -18,7 +18,7 @@ import { z } from '@kbn/zod'; import { PackName, - DescriptionOrUndefined, + PackDescriptionOrUndefined, EnabledOrUndefined, PolicyIdsOrUndefined, Shards, @@ -28,9 +28,12 @@ import { export type CreatePacksRequestBody = z.infer; export const CreatePacksRequestBody = z.object({ name: PackName.optional(), - description: DescriptionOrUndefined.optional(), + description: PackDescriptionOrUndefined.optional(), enabled: EnabledOrUndefined.optional(), policy_ids: PolicyIdsOrUndefined.optional(), shards: Shards.optional(), queries: ObjectQueries.optional(), }); + +export type CreatePacksResponse = z.infer; +export const CreatePacksResponse = z.object({}); diff --git a/x-pack/platform/plugins/shared/osquery/common/api/packs/create_pack.schema.yaml b/x-pack/platform/plugins/shared/osquery/common/api/packs/create_pack.schema.yaml index cac8b877bac1a..f5a3b7bc3882c 100644 --- a/x-pack/platform/plugins/shared/osquery/common/api/packs/create_pack.schema.yaml +++ b/x-pack/platform/plugins/shared/osquery/common/api/packs/create_pack.schema.yaml @@ -7,11 +7,33 @@ components: schemas: CreatePacksRequestBody: type: object + example: + name: "my_pack" + description: "My pack" + enabled: true + policy_ids: + - "my_policy_id" + - "fleet-server-policy" + shards: + my_policy_id: 35 + fleet-server-policy: 58 + queries: + my_query: + query: "SELECT * FROM listening_ports;" + interval: 60 + timeout: 120 + ecs_mapping: + client.port: + field: "port" + tags: + value: + - "tag1" + - "tag2" properties: name: $ref: '../model/schema/common_attributes.schema.yaml#/components/schemas/PackName' description: - $ref: '../model/schema/common_attributes.schema.yaml#/components/schemas/DescriptionOrUndefined' + $ref: '../model/schema/common_attributes.schema.yaml#/components/schemas/PackDescriptionOrUndefined' enabled: $ref: '../model/schema/common_attributes.schema.yaml#/components/schemas/EnabledOrUndefined' policy_ids: @@ -21,3 +43,31 @@ components: queries: $ref: '../model/schema/common_attributes.schema.yaml#/components/schemas/ObjectQueries' + CreatePacksResponse: + type: object + properties: { } + example: + data: + name: my_pack + description: My pack + queries: + ports: + query: SELECT * FROM listening_ports; + interval: 60 + snapshot: true + removed: false + timeout: 120 + ecs_mapping: + client.port: + field: port + enabled: true + created_at: "2025-02-26T13:37:30.452Z" + created_by: elastic + updated_at: "2025-02-26T13:37:30.452Z" + updated_by: elastic + shards: + - key: 47638692-7c4c-4053-aa3e-7186f28df349 + value: 35 + - key: 5e267651-fe50-443e-8d3f-3bbc9171b618 + value: 58 + saved_object_id: 1c266590-381f-428c-878f-c80c1334f856 diff --git a/x-pack/platform/plugins/shared/osquery/common/api/packs/find_packs.gen.ts b/x-pack/platform/plugins/shared/osquery/common/api/packs/find_packs.gen.ts index 9f085d2739d6b..8cb41f33d3529 100644 --- a/x-pack/platform/plugins/shared/osquery/common/api/packs/find_packs.gen.ts +++ b/x-pack/platform/plugins/shared/osquery/common/api/packs/find_packs.gen.ts @@ -16,17 +16,8 @@ import { z } from '@kbn/zod'; -import { - PageOrUndefined, - PageSizeOrUndefined, - SortOrUndefined, - SortOrderOrUndefined, -} from '../model/schema/common_attributes.gen'; +export type FindPacksResponse = z.infer; +export const FindPacksResponse = z.object({}); -export type FindPacksRequestQuery = z.infer; -export const FindPacksRequestQuery = z.object({ - page: PageOrUndefined.optional(), - pageSize: PageSizeOrUndefined.optional(), - sort: SortOrUndefined.optional(), - sortOrder: SortOrderOrUndefined.optional(), -}); +export type FindPackResponse = z.infer; +export const FindPackResponse = z.object({}); diff --git a/x-pack/platform/plugins/shared/osquery/common/api/packs/find_packs.schema.yaml b/x-pack/platform/plugins/shared/osquery/common/api/packs/find_packs.schema.yaml index c93d9249b7299..14e713fca46a4 100644 --- a/x-pack/platform/plugins/shared/osquery/common/api/packs/find_packs.schema.yaml +++ b/x-pack/platform/plugins/shared/osquery/common/api/packs/find_packs.schema.yaml @@ -5,14 +5,57 @@ info: paths: { } components: schemas: - FindPacksRequestQuery: + FindPacksResponse: type: object - properties: - page: - $ref: '../model/schema/common_attributes.schema.yaml#/components/schemas/PageOrUndefined' - pageSize: - $ref: '../model/schema/common_attributes.schema.yaml#/components/schemas/PageSizeOrUndefined' - sort: - $ref: '../model/schema/common_attributes.schema.yaml#/components/schemas/SortOrUndefined' - sortOrder: - $ref: '../model/schema/common_attributes.schema.yaml#/components/schemas/SortOrderOrUndefined' + properties: { } + example: + page: 1 + pageSize: 10 + total: 1 + data: + - type: 'osquery-pack' + id: '42ba9c50-0cc5-11ed-aa1d-2b27890bc90d' + namespaces: + - 'default' + attributes: + name: 'My Pack' + queries: + - query: 'select * from uptime;' + interval: '3600' + id: 'uptime' + ecs_mapping: + - host.uptime: + field: 'total_seconds' + enabled: true + created_at: '2023-10-31T00:00:00Z' + updated_at: '2023-10-31T00:00:00Z' + created_by: 'elastic' + updated_by: 'elastic' + description: 'My pack description' + policy_ids: [] + FindPackResponse: + type: object + properties: { } + example: + data: + id: "3c42c847-eb30-4452-80e0-728584042334" + type: "osquery-pack" + namespaces: + - "default" + updated_at: "2022-07-25T20:12:01.455Z" + name: "test_pack" + queries: + uptime: + interval: 3600 + query: "select * from uptime" + ecs_mapping: + message: + field: "days" + enabled: true + created_at: "2022-07-25T19:41:10.263Z" + created_by: "elastic" + updated_by: "elastic" + description: "" + policy_ids: [ ] + read_only: false # true for prebuilt packs + diff --git a/x-pack/platform/plugins/shared/osquery/common/api/packs/packs.gen.ts b/x-pack/platform/plugins/shared/osquery/common/api/packs/packs.gen.ts index d27e8c694da77..638834a0a15e1 100644 --- a/x-pack/platform/plugins/shared/osquery/common/api/packs/packs.gen.ts +++ b/x-pack/platform/plugins/shared/osquery/common/api/packs/packs.gen.ts @@ -16,17 +16,23 @@ import { z } from '@kbn/zod'; -import { FindPacksRequestQuery } from './find_packs.gen'; -import { DefaultSuccessResponse, PackId } from '../model/schema/common_attributes.gen'; -import { CreatePacksRequestBody } from './create_pack.gen'; -import { UpdatePacksRequestBody } from './update_packs.gen'; +import { + PageOrUndefined, + PageSizeOrUndefined, + SortOrUndefined, + SortOrderOrUndefined, + PackId, +} from '../model/schema/common_attributes.gen'; +import { FindPacksResponse, FindPackResponse } from './find_packs.gen'; +import { CreatePacksRequestBody, CreatePacksResponse } from './create_pack.gen'; +import { UpdatePacksRequestBody, UpdatePacksResponse } from './update_packs.gen'; export type OsqueryCreatePacksRequestBody = z.infer; export const OsqueryCreatePacksRequestBody = CreatePacksRequestBody; export type OsqueryCreatePacksRequestBodyInput = z.input; export type OsqueryCreatePacksResponse = z.infer; -export const OsqueryCreatePacksResponse = DefaultSuccessResponse; +export const OsqueryCreatePacksResponse = CreatePacksResponse; export type OsqueryDeletePacksRequestParams = z.infer; export const OsqueryDeletePacksRequestParams = z.object({ @@ -35,15 +41,18 @@ export const OsqueryDeletePacksRequestParams = z.object({ export type OsqueryDeletePacksRequestParamsInput = z.input; export type OsqueryDeletePacksResponse = z.infer; -export const OsqueryDeletePacksResponse = DefaultSuccessResponse; +export const OsqueryDeletePacksResponse = z.object({}); export type OsqueryFindPacksRequestQuery = z.infer; export const OsqueryFindPacksRequestQuery = z.object({ - query: FindPacksRequestQuery, + page: PageOrUndefined.optional(), + pageSize: PageSizeOrUndefined.optional(), + sort: SortOrUndefined.optional(), + sortOrder: SortOrderOrUndefined.optional(), }); export type OsqueryFindPacksRequestQueryInput = z.input; export type OsqueryFindPacksResponse = z.infer; -export const OsqueryFindPacksResponse = DefaultSuccessResponse; +export const OsqueryFindPacksResponse = FindPacksResponse; export type OsqueryGetPacksDetailsRequestParams = z.infer< typeof OsqueryGetPacksDetailsRequestParams @@ -56,7 +65,7 @@ export type OsqueryGetPacksDetailsRequestParamsInput = z.input< >; export type OsqueryGetPacksDetailsResponse = z.infer; -export const OsqueryGetPacksDetailsResponse = DefaultSuccessResponse; +export const OsqueryGetPacksDetailsResponse = FindPackResponse; export type OsqueryUpdatePacksRequestParams = z.infer; export const OsqueryUpdatePacksRequestParams = z.object({ @@ -69,4 +78,4 @@ export const OsqueryUpdatePacksRequestBody = UpdatePacksRequestBody; export type OsqueryUpdatePacksRequestBodyInput = z.input; export type OsqueryUpdatePacksResponse = z.infer; -export const OsqueryUpdatePacksResponse = DefaultSuccessResponse; +export const OsqueryUpdatePacksResponse = UpdatePacksResponse; diff --git a/x-pack/platform/plugins/shared/osquery/common/api/packs/packs.schema.yaml b/x-pack/platform/plugins/shared/osquery/common/api/packs/packs.schema.yaml index 7bdb90151b73d..f6930ee88c931 100644 --- a/x-pack/platform/plugins/shared/osquery/common/api/packs/packs.schema.yaml +++ b/x-pack/platform/plugins/shared/osquery/common/api/packs/packs.schema.yaml @@ -11,18 +11,33 @@ paths: x-codegen-enabled: true x-labels: [serverless, ess] parameters: - - name: query + - name: page in: query - required: true + required: false + schema: + $ref: '../model/schema/common_attributes.schema.yaml#/components/schemas/PageOrUndefined' + - name: pageSize + in: query + required: false + schema: + $ref: '../model/schema/common_attributes.schema.yaml#/components/schemas/PageSizeOrUndefined' + - name: sort + in: query + required: false + schema: + $ref: '../model/schema/common_attributes.schema.yaml#/components/schemas/SortOrUndefined' + - name: sortOrder + in: query + required: false schema: - $ref: './find_packs.schema.yaml#/components/schemas/FindPacksRequestQuery' + $ref: '../model/schema/common_attributes.schema.yaml#/components/schemas/SortOrderOrUndefined' responses: '200': description: OK content: application/json: schema: - $ref: '../model/schema/common_attributes.schema.yaml#/components/schemas/DefaultSuccessResponse' + $ref: './find_packs.schema.yaml#/components/schemas/FindPacksResponse' post: summary: Create a pack description: Create a query pack. @@ -41,7 +56,7 @@ paths: content: application/json: schema: - $ref: '../model/schema/common_attributes.schema.yaml#/components/schemas/DefaultSuccessResponse' + $ref: './create_pack.schema.yaml#/components/schemas/CreatePacksResponse' /api/osquery/packs/{id}: get: summary: Get pack details @@ -61,7 +76,7 @@ paths: content: application/json: schema: - $ref: '../model/schema/common_attributes.schema.yaml#/components/schemas/DefaultSuccessResponse' + $ref: './find_packs.schema.yaml#/components/schemas/FindPackResponse' delete: summary: Delete a pack description: Delete a query pack using the pack ID. @@ -80,7 +95,9 @@ paths: content: application/json: schema: - $ref: '../model/schema/common_attributes.schema.yaml#/components/schemas/DefaultSuccessResponse' + type: object + properties: { } + example: { } put: summary: Update a pack description: | @@ -108,4 +125,4 @@ paths: content: application/json: schema: - $ref: '../model/schema/common_attributes.schema.yaml#/components/schemas/DefaultSuccessResponse' + $ref: './update_packs.schema.yaml#/components/schemas/UpdatePacksResponse' diff --git a/x-pack/platform/plugins/shared/osquery/common/api/packs/update_packs.gen.ts b/x-pack/platform/plugins/shared/osquery/common/api/packs/update_packs.gen.ts index c06e7687bbb38..f5a3d531f922f 100644 --- a/x-pack/platform/plugins/shared/osquery/common/api/packs/update_packs.gen.ts +++ b/x-pack/platform/plugins/shared/osquery/common/api/packs/update_packs.gen.ts @@ -17,8 +17,8 @@ import { z } from '@kbn/zod'; import { - PackId, - DescriptionOrUndefined, + PackName, + PackDescriptionOrUndefined, EnabledOrUndefined, PolicyIdsOrUndefined, Shards, @@ -27,10 +27,13 @@ import { export type UpdatePacksRequestBody = z.infer; export const UpdatePacksRequestBody = z.object({ - id: PackId.optional(), - description: DescriptionOrUndefined.optional(), + name: PackName.optional(), + description: PackDescriptionOrUndefined.optional(), enabled: EnabledOrUndefined.optional(), policy_ids: PolicyIdsOrUndefined.optional(), shards: Shards.optional(), queries: ObjectQueries.optional(), }); + +export type UpdatePacksResponse = z.infer; +export const UpdatePacksResponse = z.object({}); diff --git a/x-pack/platform/plugins/shared/osquery/common/api/packs/update_packs.schema.yaml b/x-pack/platform/plugins/shared/osquery/common/api/packs/update_packs.schema.yaml index 11fe7b1ac229a..01224154296da 100644 --- a/x-pack/platform/plugins/shared/osquery/common/api/packs/update_packs.schema.yaml +++ b/x-pack/platform/plugins/shared/osquery/common/api/packs/update_packs.schema.yaml @@ -7,11 +7,13 @@ components: schemas: UpdatePacksRequestBody: type: object + example: + name: 'updated_my_pack_name' properties: - id: - $ref: '../model/schema/common_attributes.schema.yaml#/components/schemas/PackId' + name: + $ref: '../model/schema/common_attributes.schema.yaml#/components/schemas/PackName' description: - $ref: '../model/schema/common_attributes.schema.yaml#/components/schemas/DescriptionOrUndefined' + $ref: '../model/schema/common_attributes.schema.yaml#/components/schemas/PackDescriptionOrUndefined' enabled: $ref: '../model/schema/common_attributes.schema.yaml#/components/schemas/EnabledOrUndefined' policy_ids: @@ -20,3 +22,31 @@ components: $ref: '../model/schema/common_attributes.schema.yaml#/components/schemas/Shards' queries: $ref: '../model/schema/common_attributes.schema.yaml#/components/schemas/ObjectQueries' + UpdatePacksResponse: + type: object + properties: { } + example: + data: + name: updated_my_pack_name + description: My pack + queries: + ports: + interval: 60 + snapshot: true + removed: false + timeout: 120 + query: SELECT * FROM listening_ports; + ecs_mapping: + client.port: + field: port + enabled: true + created_at: "2025-02-26T13:37:30.452Z" + created_by: elastic + updated_at: "2025-02-26T13:40:16.297Z" + updated_by: elastic + shards: + - key: 47638692-7c4c-4053-aa3e-7186f28df349 + value: 35 + - key: 5e267651-fe50-443e-8d3f-3bbc9171b618 + value: 58 + saved_object_id: 1c266590-381f-428c-878f-c80c1334f856 diff --git a/x-pack/platform/plugins/shared/osquery/common/api/saved_query/create_saved_query.gen.ts b/x-pack/platform/plugins/shared/osquery/common/api/saved_query/create_saved_query.gen.ts index f1fa9444639b8..e30095f269f1c 100644 --- a/x-pack/platform/plugins/shared/osquery/common/api/saved_query/create_saved_query.gen.ts +++ b/x-pack/platform/plugins/shared/osquery/common/api/saved_query/create_saved_query.gen.ts @@ -18,10 +18,11 @@ import { z } from '@kbn/zod'; import { SavedQueryId, - DescriptionOrUndefined, + SavedQueryDescriptionOrUndefined, QueryOrUndefined, ECSMappingOrUndefined, VersionOrUndefined, + PlatformOrUndefined, Interval, SnapshotOrUndefined, RemovedOrUndefined, @@ -30,15 +31,15 @@ import { export type CreateSavedQueryRequestBody = z.infer; export const CreateSavedQueryRequestBody = z.object({ id: SavedQueryId.optional(), - description: DescriptionOrUndefined.optional(), + description: SavedQueryDescriptionOrUndefined.optional(), query: QueryOrUndefined.optional(), ecs_mapping: ECSMappingOrUndefined.optional(), version: VersionOrUndefined.optional(), - platform: DescriptionOrUndefined.optional(), + platform: PlatformOrUndefined.optional(), interval: Interval.optional(), snapshot: SnapshotOrUndefined.optional(), removed: RemovedOrUndefined.optional(), }); -export type SuccessResponse = z.infer; -export const SuccessResponse = z.object({}); +export type CreateSavedQueryResponse = z.infer; +export const CreateSavedQueryResponse = z.object({}); diff --git a/x-pack/platform/plugins/shared/osquery/common/api/saved_query/create_saved_query.schema.yaml b/x-pack/platform/plugins/shared/osquery/common/api/saved_query/create_saved_query.schema.yaml index 9735b0139754e..1ebe139ce24b5 100644 --- a/x-pack/platform/plugins/shared/osquery/common/api/saved_query/create_saved_query.schema.yaml +++ b/x-pack/platform/plugins/shared/osquery/common/api/saved_query/create_saved_query.schema.yaml @@ -7,11 +7,22 @@ components: schemas: CreateSavedQueryRequestBody: type: object + example: + id: "saved_query_id" + description: "Saved query description" + query: "select * from uptime;" + interval: "60" + timeout: 120 + version: "2.8.0" + platform: "linux,darwin" + ecs_mapping: + host.uptime: + field: "total_seconds" properties: id: $ref: '../model/schema/common_attributes.schema.yaml#/components/schemas/SavedQueryId' description: - $ref: '../model/schema/common_attributes.schema.yaml#/components/schemas/DescriptionOrUndefined' + $ref: '../model/schema/common_attributes.schema.yaml#/components/schemas/SavedQueryDescriptionOrUndefined' query: $ref: '../model/schema/common_attributes.schema.yaml#/components/schemas/QueryOrUndefined' ecs_mapping: @@ -19,14 +30,15 @@ components: version: $ref: '../model/schema/common_attributes.schema.yaml#/components/schemas/VersionOrUndefined' platform: - $ref: '../model/schema/common_attributes.schema.yaml#/components/schemas/DescriptionOrUndefined' + $ref: '../model/schema/common_attributes.schema.yaml#/components/schemas/PlatformOrUndefined' interval: $ref: '../model/schema/common_attributes.schema.yaml#/components/schemas/Interval' snapshot: $ref: '../model/schema/common_attributes.schema.yaml#/components/schemas/SnapshotOrUndefined' removed: $ref: '../model/schema/common_attributes.schema.yaml#/components/schemas/RemovedOrUndefined' - SuccessResponse: + CreateSavedQueryResponse: type: object - properties: {} - # Define properties for the success response if needed + properties: { } + example: + data: { } diff --git a/x-pack/platform/plugins/shared/osquery/common/api/saved_query/find_saved_query.gen.ts b/x-pack/platform/plugins/shared/osquery/common/api/saved_query/find_saved_query.gen.ts index dd5400f02e01b..9be75c411cb1b 100644 --- a/x-pack/platform/plugins/shared/osquery/common/api/saved_query/find_saved_query.gen.ts +++ b/x-pack/platform/plugins/shared/osquery/common/api/saved_query/find_saved_query.gen.ts @@ -16,17 +16,8 @@ import { z } from '@kbn/zod'; -import { - PageOrUndefined, - PageSizeOrUndefined, - SortOrUndefined, - SortOrderOrUndefined, -} from '../model/schema/common_attributes.gen'; +export type FindSavedQueryResponse = z.infer; +export const FindSavedQueryResponse = z.object({}); -export type FindSavedQueryRequestQuery = z.infer; -export const FindSavedQueryRequestQuery = z.object({ - page: PageOrUndefined.optional(), - pageSize: PageSizeOrUndefined.optional(), - sort: SortOrUndefined.optional(), - sortOrder: SortOrderOrUndefined.optional(), -}); +export type FindSavedQueryDetailResponse = z.infer; +export const FindSavedQueryDetailResponse = z.object({}); diff --git a/x-pack/platform/plugins/shared/osquery/common/api/saved_query/find_saved_query.schema.yaml b/x-pack/platform/plugins/shared/osquery/common/api/saved_query/find_saved_query.schema.yaml index ba11befc7af28..6d2126e8f56ff 100644 --- a/x-pack/platform/plugins/shared/osquery/common/api/saved_query/find_saved_query.schema.yaml +++ b/x-pack/platform/plugins/shared/osquery/common/api/saved_query/find_saved_query.schema.yaml @@ -5,14 +5,59 @@ info: paths: { } components: schemas: - FindSavedQueryRequestQuery: + FindSavedQueryResponse: + type: object + properties: { } + example: + page: 1 + per_page: 100 + total: 11 + data: + - type: "osquery-saved-query" + id: "42ba9c50-0cc5-11ed-aa1d-2b27890bc90d" + namespaces: + - "default" + attributes: + id: "saved_query_id" + description: "Saved query description" + query: "select * from uptime;" + platform: "linux,darwin" + version: "2.8.0" + interval: "60" + ecs_mapping: + host.uptime: + field: "total_seconds" + created_by: "elastic" + created_at: "2022-07-26T09:28:08.597Z" + updated_by: "elastic" + updated_at: "2022-07-26T09:28:08.597Z" + prebuilt: false + + FindSavedQueryDetailResponse: type: object - properties: - page: - $ref: '../model/schema/common_attributes.schema.yaml#/components/schemas/PageOrUndefined' - pageSize: - $ref: '../model/schema/common_attributes.schema.yaml#/components/schemas/PageSizeOrUndefined' - sort: - $ref: '../model/schema/common_attributes.schema.yaml#/components/schemas/SortOrUndefined' - sortOrder: - $ref: '../model/schema/common_attributes.schema.yaml#/components/schemas/SortOrderOrUndefined' + properties: { } + example: + data: + id: "3c42c847-eb30-4452-80e0-728584042334" + type: "osquery-saved-query" + namespaces: + - "default" + updated_at: "2022-07-26T09:28:08.600Z" + version: "WzQzMTcsMV0=" + attributes: + id: "saved_query_id" + description: "Saved query description" + query: "select * from uptime;" + platform: "linux,darwin" + version: "2.8.0" + interval: "60" + ecs_mapping: + host.uptime: + field: "total_seconds" + created_by: "elastic" + created_at: "2022-07-26T09:28:08.597Z" + updated_by: "elastic" + updated_at: "2022-07-26T09:28:08.597Z" + prebuilt: false + references: [ ] + coreMigrationVersion: "8.4.0" diff --git a/x-pack/platform/plugins/shared/osquery/common/api/saved_query/saved_query.gen.ts b/x-pack/platform/plugins/shared/osquery/common/api/saved_query/saved_query.gen.ts index ba31a2911a6a0..7f4933539f835 100644 --- a/x-pack/platform/plugins/shared/osquery/common/api/saved_query/saved_query.gen.ts +++ b/x-pack/platform/plugins/shared/osquery/common/api/saved_query/saved_query.gen.ts @@ -16,10 +16,17 @@ import { z } from '@kbn/zod'; -import { FindSavedQueryRequestQuery } from './find_saved_query.gen'; -import { DefaultSuccessResponse, SavedQueryId } from '../model/schema/common_attributes.gen'; -import { CreateSavedQueryRequestBody } from './create_saved_query.gen'; -import { UpdateSavedQueryRequestBody } from './update_saved_query.gen'; +import { + PageOrUndefined, + PageSizeOrUndefined, + SortOrUndefined, + SortOrderOrUndefined, + SavedQueryId, + DefaultSuccessResponse, +} from '../model/schema/common_attributes.gen'; +import { FindSavedQueryResponse, FindSavedQueryDetailResponse } from './find_saved_query.gen'; +import { CreateSavedQueryRequestBody, CreateSavedQueryResponse } from './create_saved_query.gen'; +import { UpdateSavedQueryRequestBody, UpdateSavedQueryResponse } from './update_saved_query.gen'; export type OsqueryCreateSavedQueryRequestBody = z.infer; export const OsqueryCreateSavedQueryRequestBody = CreateSavedQueryRequestBody; @@ -28,7 +35,7 @@ export type OsqueryCreateSavedQueryRequestBodyInput = z.input< >; export type OsqueryCreateSavedQueryResponse = z.infer; -export const OsqueryCreateSavedQueryResponse = DefaultSuccessResponse; +export const OsqueryCreateSavedQueryResponse = CreateSavedQueryResponse; export type OsqueryDeleteSavedQueryRequestParams = z.infer< typeof OsqueryDeleteSavedQueryRequestParams @@ -46,14 +53,17 @@ export type OsqueryFindSavedQueriesRequestQuery = z.infer< typeof OsqueryFindSavedQueriesRequestQuery >; export const OsqueryFindSavedQueriesRequestQuery = z.object({ - query: FindSavedQueryRequestQuery, + page: PageOrUndefined.optional(), + pageSize: PageSizeOrUndefined.optional(), + sort: SortOrUndefined.optional(), + sortOrder: SortOrderOrUndefined.optional(), }); export type OsqueryFindSavedQueriesRequestQueryInput = z.input< typeof OsqueryFindSavedQueriesRequestQuery >; export type OsqueryFindSavedQueriesResponse = z.infer; -export const OsqueryFindSavedQueriesResponse = DefaultSuccessResponse; +export const OsqueryFindSavedQueriesResponse = FindSavedQueryResponse; export type OsqueryGetSavedQueryDetailsRequestParams = z.infer< typeof OsqueryGetSavedQueryDetailsRequestParams @@ -68,7 +78,7 @@ export type OsqueryGetSavedQueryDetailsRequestParamsInput = z.input< export type OsqueryGetSavedQueryDetailsResponse = z.infer< typeof OsqueryGetSavedQueryDetailsResponse >; -export const OsqueryGetSavedQueryDetailsResponse = DefaultSuccessResponse; +export const OsqueryGetSavedQueryDetailsResponse = FindSavedQueryDetailResponse; export type OsqueryUpdateSavedQueryRequestParams = z.infer< typeof OsqueryUpdateSavedQueryRequestParams @@ -87,4 +97,4 @@ export type OsqueryUpdateSavedQueryRequestBodyInput = z.input< >; export type OsqueryUpdateSavedQueryResponse = z.infer; -export const OsqueryUpdateSavedQueryResponse = DefaultSuccessResponse; +export const OsqueryUpdateSavedQueryResponse = UpdateSavedQueryResponse; diff --git a/x-pack/platform/plugins/shared/osquery/common/api/saved_query/saved_query.schema.yaml b/x-pack/platform/plugins/shared/osquery/common/api/saved_query/saved_query.schema.yaml index 359770016fb82..bb3e407a99461 100644 --- a/x-pack/platform/plugins/shared/osquery/common/api/saved_query/saved_query.schema.yaml +++ b/x-pack/platform/plugins/shared/osquery/common/api/saved_query/saved_query.schema.yaml @@ -11,18 +11,33 @@ paths: x-codegen-enabled: true x-labels: [serverless, ess] parameters: - - name: query + - name: page in: query - required: true + required: false + schema: + $ref: '../model/schema/common_attributes.schema.yaml#/components/schemas/PageOrUndefined' + - name: pageSize + in: query + required: false schema: - $ref: './find_saved_query.schema.yaml#/components/schemas/FindSavedQueryRequestQuery' + $ref: '../model/schema/common_attributes.schema.yaml#/components/schemas/PageSizeOrUndefined' + - name: sort + in: query + required: false + schema: + $ref: '../model/schema/common_attributes.schema.yaml#/components/schemas/SortOrUndefined' + - name: sortOrder + in: query + required: false + schema: + $ref: '../model/schema/common_attributes.schema.yaml#/components/schemas/SortOrderOrUndefined' responses: '200': description: OK content: application/json: schema: - $ref: '../model/schema/common_attributes.schema.yaml#/components/schemas/DefaultSuccessResponse' + $ref: './find_saved_query.schema.yaml#/components/schemas/FindSavedQueryResponse' post: summary: Create a saved query description: Create and run a saved query. @@ -41,7 +56,7 @@ paths: content: application/json: schema: - $ref: '../model/schema/common_attributes.schema.yaml#/components/schemas/DefaultSuccessResponse' + $ref: './create_saved_query.schema.yaml#/components/schemas/CreateSavedQueryResponse' /api/osquery/saved_queries/{id}: get: summary: Get saved query details @@ -61,7 +76,7 @@ paths: content: application/json: schema: - $ref: '../model/schema/common_attributes.schema.yaml#/components/schemas/DefaultSuccessResponse' + $ref: './find_saved_query.schema.yaml#/components/schemas/FindSavedQueryDetailResponse' delete: summary: Delete a saved query description: Delete a saved query using the query ID. @@ -108,4 +123,4 @@ paths: content: application/json: schema: - $ref: '../model/schema/common_attributes.schema.yaml#/components/schemas/DefaultSuccessResponse' + $ref: './update_saved_query.schema.yaml#/components/schemas/UpdateSavedQueryResponse' diff --git a/x-pack/platform/plugins/shared/osquery/common/api/saved_query/update_saved_query.gen.ts b/x-pack/platform/plugins/shared/osquery/common/api/saved_query/update_saved_query.gen.ts index a87dcc8aef1ad..fb23ebecc07ff 100644 --- a/x-pack/platform/plugins/shared/osquery/common/api/saved_query/update_saved_query.gen.ts +++ b/x-pack/platform/plugins/shared/osquery/common/api/saved_query/update_saved_query.gen.ts @@ -18,10 +18,11 @@ import { z } from '@kbn/zod'; import { SavedQueryId, - DescriptionOrUndefined, + SavedQueryDescriptionOrUndefined, QueryOrUndefined, ECSMappingOrUndefined, VersionOrUndefined, + PlatformOrUndefined, IntervalOrUndefined, SnapshotOrUndefined, RemovedOrUndefined, @@ -30,12 +31,15 @@ import { export type UpdateSavedQueryRequestBody = z.infer; export const UpdateSavedQueryRequestBody = z.object({ id: SavedQueryId.optional(), - description: DescriptionOrUndefined.optional(), + description: SavedQueryDescriptionOrUndefined.optional(), query: QueryOrUndefined.optional(), ecs_mapping: ECSMappingOrUndefined.optional(), version: VersionOrUndefined.optional(), - platform: DescriptionOrUndefined.optional(), + platform: PlatformOrUndefined.optional(), interval: IntervalOrUndefined.optional(), snapshot: SnapshotOrUndefined.optional(), removed: RemovedOrUndefined.optional(), }); + +export type UpdateSavedQueryResponse = z.infer; +export const UpdateSavedQueryResponse = z.object({}); diff --git a/x-pack/platform/plugins/shared/osquery/common/api/saved_query/update_saved_query.schema.yaml b/x-pack/platform/plugins/shared/osquery/common/api/saved_query/update_saved_query.schema.yaml index ebc5ad4db23b3..b3436e3435764 100644 --- a/x-pack/platform/plugins/shared/osquery/common/api/saved_query/update_saved_query.schema.yaml +++ b/x-pack/platform/plugins/shared/osquery/common/api/saved_query/update_saved_query.schema.yaml @@ -7,11 +7,13 @@ components: schemas: UpdateSavedQueryRequestBody: type: object + example: + id: 'updated_my_saved_query_name' properties: id: $ref: '../model/schema/common_attributes.schema.yaml#/components/schemas/SavedQueryId' description: - $ref: '../model/schema/common_attributes.schema.yaml#/components/schemas/DescriptionOrUndefined' + $ref: '../model/schema/common_attributes.schema.yaml#/components/schemas/SavedQueryDescriptionOrUndefined' query: $ref: '../model/schema/common_attributes.schema.yaml#/components/schemas/QueryOrUndefined' ecs_mapping: @@ -19,10 +21,15 @@ components: version: $ref: '../model/schema/common_attributes.schema.yaml#/components/schemas/VersionOrUndefined' platform: - $ref: '../model/schema/common_attributes.schema.yaml#/components/schemas/DescriptionOrUndefined' + $ref: '../model/schema/common_attributes.schema.yaml#/components/schemas/PlatformOrUndefined' interval: $ref: '../model/schema/common_attributes.schema.yaml#/components/schemas/IntervalOrUndefined' snapshot: $ref: '../model/schema/common_attributes.schema.yaml#/components/schemas/SnapshotOrUndefined' removed: $ref: '../model/schema/common_attributes.schema.yaml#/components/schemas/RemovedOrUndefined' + UpdateSavedQueryResponse: + type: object + properties: { } + example: + data: { } diff --git a/x-pack/platform/plugins/shared/osquery/docs/openapi/ess/osquery_api_2023_10_31.bundled.schema.yaml b/x-pack/platform/plugins/shared/osquery/docs/openapi/ess/osquery_api_2023_10_31.bundled.schema.yaml index c18b9d891524a..8307483f55b24 100644 --- a/x-pack/platform/plugins/shared/osquery/docs/openapi/ess/osquery_api_2023_10_31.bundled.schema.yaml +++ b/x-pack/platform/plugins/shared/osquery/docs/openapi/ess/osquery_api_2023_10_31.bundled.schema.yaml @@ -17,16 +17,36 @@ paths: operationId: OsqueryFindLiveQueries parameters: - in: query - name: query - required: true + name: kuery + required: false + schema: + $ref: '#/components/schemas/KueryOrUndefined' + - in: query + name: page + required: false + schema: + $ref: '#/components/schemas/PageOrUndefined' + - in: query + name: pageSize + required: false + schema: + $ref: '#/components/schemas/PageSizeOrUndefined' + - in: query + name: sort + required: false + schema: + $ref: '#/components/schemas/SortOrUndefined' + - in: query + name: sortOrder + required: false schema: - $ref: '#/components/schemas/FindLiveQueryRequestQuery' + $ref: '#/components/schemas/SortOrderOrUndefined' responses: '200': content: application/json: schema: - $ref: '#/components/schemas/DefaultSuccessResponse' + $ref: '#/components/schemas/FindLiveQueryResponse' description: OK summary: Get live queries tags: @@ -45,7 +65,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/DefaultSuccessResponse' + $ref: '#/components/schemas/CreateLiveQueryResponse' description: OK summary: Create a live query tags: @@ -59,18 +79,15 @@ paths: name: id required: true schema: - $ref: '#/components/schemas/Id' - - in: query - name: query - schema: - additionalProperties: true - type: object + description: The ID of the live query result you want to retrieve. + example: 3c42c847-eb30-4452-80e0-728584042334 + type: string responses: '200': content: application/json: schema: - $ref: '#/components/schemas/DefaultSuccessResponse' + $ref: '#/components/schemas/FindLiveQueryDetailsResponse' description: OK summary: Get live query details tags: @@ -84,23 +101,47 @@ paths: name: id required: true schema: - $ref: '#/components/schemas/Id' + description: The ID of the live query result you want to retrieve. + example: 3c42c847-eb30-4452-80e0-728584042334 + type: string - in: path name: actionId required: true schema: - $ref: '#/components/schemas/Id' + description: The ID of the query action that generated the live query results. + example: 609c4c66-ba3d-43fa-afdd-53e244577aa0 + type: string - in: query - name: query - required: true + name: kuery + required: false + schema: + $ref: '#/components/schemas/KueryOrUndefined' + - in: query + name: page + required: false + schema: + $ref: '#/components/schemas/PageOrUndefined' + - in: query + name: pageSize + required: false + schema: + $ref: '#/components/schemas/PageSizeOrUndefined' + - in: query + name: sort + required: false schema: - $ref: '#/components/schemas/GetLiveQueryResultsRequestQuery' + $ref: '#/components/schemas/SortOrUndefined' + - in: query + name: sortOrder + required: false + schema: + $ref: '#/components/schemas/SortOrderOrUndefined' responses: '200': content: application/json: schema: - $ref: '#/components/schemas/DefaultSuccessResponse' + $ref: '#/components/schemas/GetLiveQueryResultsResponse' description: OK summary: Get live query results tags: @@ -111,16 +152,31 @@ paths: operationId: OsqueryFindPacks parameters: - in: query - name: query - required: true + name: page + required: false + schema: + $ref: '#/components/schemas/PageOrUndefined' + - in: query + name: pageSize + required: false schema: - $ref: '#/components/schemas/FindPacksRequestQuery' + $ref: '#/components/schemas/PageSizeOrUndefined' + - in: query + name: sort + required: false + schema: + $ref: '#/components/schemas/SortOrUndefined' + - in: query + name: sortOrder + required: false + schema: + $ref: '#/components/schemas/SortOrderOrUndefined' responses: '200': content: application/json: schema: - $ref: '#/components/schemas/DefaultSuccessResponse' + $ref: '#/components/schemas/FindPacksResponse' description: OK summary: Get packs tags: @@ -139,7 +195,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/DefaultSuccessResponse' + $ref: '#/components/schemas/CreatePacksResponse' description: OK summary: Create a pack tags: @@ -159,7 +215,9 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/DefaultSuccessResponse' + example: {} + type: object + properties: {} description: OK summary: Delete a pack tags: @@ -178,7 +236,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/DefaultSuccessResponse' + $ref: '#/components/schemas/FindPackResponse' description: OK summary: Get pack details tags: @@ -206,7 +264,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/DefaultSuccessResponse' + $ref: '#/components/schemas/UpdatePacksResponse' description: OK summary: Update a pack tags: @@ -217,16 +275,31 @@ paths: operationId: OsqueryFindSavedQueries parameters: - in: query - name: query - required: true + name: page + required: false + schema: + $ref: '#/components/schemas/PageOrUndefined' + - in: query + name: pageSize + required: false schema: - $ref: '#/components/schemas/FindSavedQueryRequestQuery' + $ref: '#/components/schemas/PageSizeOrUndefined' + - in: query + name: sort + required: false + schema: + $ref: '#/components/schemas/SortOrUndefined' + - in: query + name: sortOrder + required: false + schema: + $ref: '#/components/schemas/SortOrderOrUndefined' responses: '200': content: application/json: schema: - $ref: '#/components/schemas/DefaultSuccessResponse' + $ref: '#/components/schemas/FindSavedQueryResponse' description: OK summary: Get saved queries tags: @@ -245,7 +318,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/DefaultSuccessResponse' + $ref: '#/components/schemas/CreateSavedQueryResponse' description: OK summary: Create a saved query tags: @@ -284,7 +357,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/DefaultSuccessResponse' + $ref: '#/components/schemas/FindSavedQueryDetailResponse' description: OK summary: Get saved query details tags: @@ -312,7 +385,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/DefaultSuccessResponse' + $ref: '#/components/schemas/UpdateSavedQueryResponse' description: OK summary: Update a saved query tags: @@ -320,6 +393,7 @@ paths: components: schemas: ArrayQueries: + description: An array of queries to run. items: $ref: '#/components/schemas/ArrayQueriesItem' type: array @@ -329,7 +403,7 @@ components: ecs_mapping: $ref: '#/components/schemas/ECSMappingOrUndefined' id: - $ref: '#/components/schemas/Id' + $ref: '#/components/schemas/QueryId' platform: $ref: '#/components/schemas/PlatformOrUndefined' query: @@ -341,37 +415,51 @@ components: version: $ref: '#/components/schemas/VersionOrUndefined' CreateLiveQueryRequestBody: + example: + agent_all: true + ecs_mapping: + host.uptime: + field: total_seconds + query: select * from uptime; type: object properties: agent_all: + description: When `true`, the query runs on all agents. type: boolean agent_ids: + description: A list of agent IDs to run the query on. items: type: string type: array agent_platforms: + description: A list of agent platforms to run the query on. items: type: string type: array agent_policy_ids: + description: A list of agent policy IDs to run the query on. items: type: string type: array alert_ids: + description: A list of alert IDs associated with the live query. items: type: string type: array case_ids: + description: A list of case IDs associated with the live query. items: type: string type: array ecs_mapping: $ref: '#/components/schemas/ECSMappingOrUndefined' event_ids: + description: A list of event IDs associated with the live query. items: type: string type: array metadata: + description: Custom metadata object associated with the live query. nullable: true type: object pack_id: @@ -382,11 +470,64 @@ components: $ref: '#/components/schemas/QueryOrUndefined' saved_query_id: $ref: '#/components/schemas/SavedQueryIdOrUndefined' + CreateLiveQueryResponse: + example: + data: + '@timestamp': '2022-07-26T09:59:32.220Z' + action_id: 3c42c847-eb30-4452-80e0-728584042334 + agent_all: true + agent_ids: [] + agent_platforms: [] + agent_policy_ids: [] + agents: + - 16d7caf5-efd2-4212-9b62-73dafc91fa13 + expiration: '2022-07-26T10:04:32.220Z' + input_type: osquery + metadata: + execution_context: + name: osquery + url: /app/osquery/live_queries/new + queries: + - action_id: 609c4c66-ba3d-43fa-afdd-53e244577aa0 + agents: + - 16d7caf5-efd2-4212-9b62-73dafc91fa13 + ecs_mapping: + host.uptime: + field: total_seconds + id: 6724a474-cbba-41ef-a1aa-66aebf0879e2 + query: select * from uptime; + timeout: 120 + type: INPUT_ACTION + user_id: elastic + type: object + properties: {} CreatePacksRequestBody: + example: + description: My pack + enabled: true + name: my_pack + policy_ids: + - my_policy_id + - fleet-server-policy + queries: + my_query: + ecs_mapping: + client.port: + field: port + tags: + value: + - tag1 + - tag2 + interval: 60 + query: SELECT * FROM listening_ports; + timeout: 120 + shards: + fleet-server-policy: 58 + my_policy_id: 35 type: object properties: description: - $ref: '#/components/schemas/DescriptionOrUndefined' + $ref: '#/components/schemas/PackDescriptionOrUndefined' enabled: $ref: '#/components/schemas/EnabledOrUndefined' name: @@ -397,11 +538,50 @@ components: $ref: '#/components/schemas/ObjectQueries' shards: $ref: '#/components/schemas/Shards' + CreatePacksResponse: + example: + data: + created_at: '2025-02-26T13:37:30.452Z' + created_by: elastic + description: My pack + enabled: true + name: my_pack + queries: + ports: + ecs_mapping: + client.port: + field: port + interval: 60 + query: SELECT * FROM listening_ports; + removed: false + snapshot: true + timeout: 120 + saved_object_id: 1c266590-381f-428c-878f-c80c1334f856 + shards: + - key: 47638692-7c4c-4053-aa3e-7186f28df349 + value: 35 + - key: 5e267651-fe50-443e-8d3f-3bbc9171b618 + value: 58 + updated_at: '2025-02-26T13:37:30.452Z' + updated_by: elastic + type: object + properties: {} CreateSavedQueryRequestBody: + example: + description: Saved query description + ecs_mapping: + host.uptime: + field: total_seconds + id: saved_query_id + interval: '60' + platform: linux,darwin + query: select * from uptime; + timeout: 120 + version: 2.8.0 type: object properties: description: - $ref: '#/components/schemas/DescriptionOrUndefined' + $ref: '#/components/schemas/SavedQueryDescriptionOrUndefined' ecs_mapping: $ref: '#/components/schemas/ECSMappingOrUndefined' id: @@ -409,7 +589,7 @@ components: interval: $ref: '#/components/schemas/Interval' platform: - $ref: '#/components/schemas/DescriptionOrUndefined' + $ref: '#/components/schemas/PlatformOrUndefined' query: $ref: '#/components/schemas/QueryOrUndefined' removed: @@ -418,24 +598,34 @@ components: $ref: '#/components/schemas/SnapshotOrUndefined' version: $ref: '#/components/schemas/VersionOrUndefined' + CreateSavedQueryResponse: + example: + data: {} + type: object + properties: {} DefaultSuccessResponse: type: object properties: {} - Description: - type: string - DescriptionOrUndefined: - $ref: '#/components/schemas/Description' - nullable: true ECSMapping: additionalProperties: $ref: '#/components/schemas/ECSMappingItem' + description: >- + Map osquery results columns or static values to Elastic Common Schema + (ECS) fields + example: + host.uptime: + field: total_seconds type: object ECSMappingItem: type: object properties: field: + description: The ECS field to map to. + example: host.uptime type: string value: + description: The value to map to the ECS field. + example: total_seconds oneOf: - type: string - items: @@ -445,71 +635,197 @@ components: $ref: '#/components/schemas/ECSMapping' nullable: true Enabled: + description: Enables the pack. + example: true type: boolean EnabledOrUndefined: $ref: '#/components/schemas/Enabled' nullable: true - FindLiveQueryRequestQuery: + FindLiveQueryDetailsResponse: + example: + data: + '@timestamp': '2022-07-26T09:59:32.220Z' + action_id: 3c42c847-eb30-4452-80e0-728584042334 + agents: + - 16d7caf5-efd2-4212-9b62-73dafc91fa13 + expiration: '2022-07-26T10:04:32.220Z' + queries: + - action_id: 609c4c66-ba3d-43fa-afdd-53e244577aa0 + agents: + - 16d7caf5-efd2-4212-9b62-73dafc91fa13 + docs: 0 + ecs_mapping: + host.uptime: + field: total_seconds + failed: 1 + id: 6724a474-cbba-41ef-a1aa-66aebf0879e2 + pending: 0 + query: select * from uptime; + responded: 1 + saved_query_id: 42ba9c50-0cc5-11ed-aa1d-2b27890bc90d + status: completed + successful: 0 + status: completed + user_id: elastic type: object - properties: - kuery: - $ref: '#/components/schemas/KueryOrUndefined' - page: - $ref: '#/components/schemas/PageOrUndefined' - pageSize: - $ref: '#/components/schemas/PageSizeOrUndefined' - sort: - $ref: '#/components/schemas/SortOrUndefined' - sortOrder: - $ref: '#/components/schemas/SortOrderOrUndefined' - FindPacksRequestQuery: + properties: {} + FindLiveQueryResponse: + example: + data: + items: + - fields: + '@timestamp': '2023-10-31T00:00:00Z' + action_id: 3c42c847-eb30-4452-80e0-728584042334 + agents: + - 16d7caf5-efd2-4212-9b62-73dafc91fa13 + expiration: '2023-10-31T00:00:00Z' + queries: + - action_id: 609c4c66-ba3d-43fa-afdd-53e244577aa0 + agents: + - 16d7caf5-efd2-4212-9b62-73dafc91fa13 + ecs_mapping: + host.uptime: + field: total_seconds + id: 6724a474-cbba-41ef-a1aa-66aebf0879e2 + query: select * from uptime; + saved_query_id: 42ba9c50-0cc5-11ed-aa1d-2b27890bc90d + user_id: elastic type: object - properties: - page: - $ref: '#/components/schemas/PageOrUndefined' - pageSize: - $ref: '#/components/schemas/PageSizeOrUndefined' - sort: - $ref: '#/components/schemas/SortOrUndefined' - sortOrder: - $ref: '#/components/schemas/SortOrderOrUndefined' - FindSavedQueryRequestQuery: + properties: {} + FindPackResponse: + example: + data: + created_at: '2022-07-25T19:41:10.263Z' + created_by: elastic + description: '' + enabled: true + id: 3c42c847-eb30-4452-80e0-728584042334 + name: test_pack + namespaces: + - default + policy_ids: [] + queries: + uptime: + ecs_mapping: + message: + field: days + interval: 3600 + query: select * from uptime + read_only: false + type: osquery-pack + updated_at: '2022-07-25T20:12:01.455Z' + updated_by: elastic type: object - properties: - page: - $ref: '#/components/schemas/PageOrUndefined' - pageSize: - $ref: '#/components/schemas/PageSizeOrUndefined' - sort: - $ref: '#/components/schemas/SortOrUndefined' - sortOrder: - $ref: '#/components/schemas/SortOrderOrUndefined' - GetLiveQueryResultsRequestQuery: + properties: {} + FindPacksResponse: + example: + data: + - attributes: + created_at: '2023-10-31T00:00:00Z' + created_by: elastic + description: My pack description + enabled: true + name: My Pack + queries: + - ecs_mapping: + - host.uptime: + field: total_seconds + id: uptime + interval: '3600' + query: select * from uptime; + updated_at: '2023-10-31T00:00:00Z' + updated_by: elastic + id: 42ba9c50-0cc5-11ed-aa1d-2b27890bc90d + namespaces: + - default + type: osquery-pack + page: 1 + pageSize: 10 + policy_ids: [] + total: 1 type: object - properties: - kuery: - $ref: '#/components/schemas/KueryOrUndefined' - page: - $ref: '#/components/schemas/PageOrUndefined' - pageSize: - $ref: '#/components/schemas/PageSizeOrUndefined' - sort: - $ref: '#/components/schemas/SortOrUndefined' - sortOrder: - $ref: '#/components/schemas/SortOrderOrUndefined' - Id: - type: string + properties: {} + FindSavedQueryDetailResponse: + example: + data: + attributes: + created_at: '2022-07-26T09:28:08.597Z' + created_by: elastic + description: Saved query description + ecs_mapping: + host.uptime: + field: total_seconds + id: saved_query_id + interval: '60' + platform: linux,darwin + prebuilt: false + query: select * from uptime; + updated_at: '2022-07-26T09:28:08.597Z' + updated_by: elastic + version: 2.8.0 + coreMigrationVersion: 8.4.0 + id: 3c42c847-eb30-4452-80e0-728584042334 + namespaces: + - default + references: [] + type: osquery-saved-query + updated_at: '2022-07-26T09:28:08.600Z' + version: WzQzMTcsMV0= + type: object + properties: {} + FindSavedQueryResponse: + example: + data: + - attributes: + created_at: '2022-07-26T09:28:08.597Z' + created_by: elastic + description: Saved query description + ecs_mapping: + host.uptime: + field: total_seconds + id: saved_query_id + interval: '60' + platform: linux,darwin + prebuilt: false + query: select * from uptime; + updated_at: '2022-07-26T09:28:08.597Z' + updated_by: elastic + version: 2.8.0 + id: 42ba9c50-0cc5-11ed-aa1d-2b27890bc90d + namespaces: + - default + type: osquery-saved-query + page: 1 + per_page: 100 + total: 11 + type: object + properties: {} + GetLiveQueryResultsResponse: + description: The response for getting live query results. + example: + data: + edges: + - {} + - {} + total: 2 + type: object + properties: {} Interval: + description: An interval, in seconds, on which to run the query. + example: '60' type: string IntervalOrUndefined: $ref: '#/components/schemas/Interval' nullable: true KueryOrUndefined: + description: The kuery to filter the results by. + example: 'agent.id: 16d7caf5-efd2-4212-9b62-73dafc91fa13' nullable: true type: string ObjectQueries: additionalProperties: $ref: '#/components/schemas/ObjectQueriesItem' + description: An object of queries. type: object ObjectQueriesItem: type: object @@ -517,7 +833,7 @@ components: ecs_mapping: $ref: '#/components/schemas/ECSMappingOrUndefined' id: - $ref: '#/components/schemas/Id' + $ref: '#/components/schemas/QueryId' platform: $ref: '#/components/schemas/PlatformOrUndefined' query: @@ -530,25 +846,48 @@ components: $ref: '#/components/schemas/SnapshotOrUndefined' version: $ref: '#/components/schemas/VersionOrUndefined' + PackDescription: + description: The pack description. + example: Pack description + type: string + PackDescriptionOrUndefined: + $ref: '#/components/schemas/PackDescription' + nullable: true PackId: + description: The ID of the pack you want to run, retrieve, update, or delete. + example: 3c42c847-eb30-4452-80e0-728584042334 type: string PackIdOrUndefined: $ref: '#/components/schemas/PackId' nullable: true PackName: + description: The pack name. type: string PageOrUndefined: + description: The page number to return. The default is 1. + example: 1 nullable: true type: integer PageSizeOrUndefined: + description: The number of results to return per page. The default is 20. + example: 20 nullable: true type: integer Platform: + description: >- + Restricts the query to a specified platform. The default is all + platforms. To specify multiple platforms, use commas. For example, + `linux,darwin`. + example: linux,darwin type: string PlatformOrUndefined: $ref: '#/components/schemas/Platform' nullable: true PolicyIds: + description: A list of agents policy IDs. + example: + - policyId1 + - policyId2 items: type: string type: array @@ -556,16 +895,33 @@ components: $ref: '#/components/schemas/PolicyIds' nullable: true Query: + description: The SQL query you want to run. + example: select * from uptime; + type: string + QueryId: + description: The ID of the query. + example: 3c42c847-eb30-4452-80e0-728584042334 type: string QueryOrUndefined: $ref: '#/components/schemas/Query' nullable: true Removed: + description: Indicates whether the query is removed. + example: false type: boolean RemovedOrUndefined: $ref: '#/components/schemas/Removed' nullable: true + SavedQueryDescription: + description: The saved query description. + example: Saved query description + type: string + SavedQueryDescriptionOrUndefined: + $ref: '#/components/schemas/SavedQueryDescription' + nullable: true SavedQueryId: + description: The ID of a saved query. + example: 3c42c847-eb30-4452-80e0-728584042334 type: string SavedQueryIdOrUndefined: $ref: '#/components/schemas/SavedQueryId' @@ -573,42 +929,85 @@ components: Shards: additionalProperties: type: number + description: >- + An object with shard configuration for policies included in the pack. + For each policy, set the shard configuration to a percentage (1–100) of + target hosts. + example: + policy_id: 50 type: object Snapshot: + description: Indicates whether the query is a snapshot. + example: true type: boolean SnapshotOrUndefined: $ref: '#/components/schemas/Snapshot' nullable: true SortOrderOrUndefined: - oneOf: - - nullable: true - type: string - - enum: - - asc - - desc + description: Specifies the sort order. + enum: + - asc + - desc + example: desc + type: string SortOrUndefined: + default: createdAt + description: The field that is used to sort the results. + example: createdAt nullable: true type: string UpdatePacksRequestBody: + example: + name: updated_my_pack_name type: object properties: description: - $ref: '#/components/schemas/DescriptionOrUndefined' + $ref: '#/components/schemas/PackDescriptionOrUndefined' enabled: $ref: '#/components/schemas/EnabledOrUndefined' - id: - $ref: '#/components/schemas/PackId' + name: + $ref: '#/components/schemas/PackName' policy_ids: $ref: '#/components/schemas/PolicyIdsOrUndefined' queries: $ref: '#/components/schemas/ObjectQueries' shards: $ref: '#/components/schemas/Shards' + UpdatePacksResponse: + example: + data: + created_at: '2025-02-26T13:37:30.452Z' + created_by: elastic + description: My pack + enabled: true + name: updated_my_pack_name + queries: + ports: + ecs_mapping: + client.port: + field: port + interval: 60 + query: SELECT * FROM listening_ports; + removed: false + snapshot: true + timeout: 120 + saved_object_id: 1c266590-381f-428c-878f-c80c1334f856 + shards: + - key: 47638692-7c4c-4053-aa3e-7186f28df349 + value: 35 + - key: 5e267651-fe50-443e-8d3f-3bbc9171b618 + value: 58 + updated_at: '2025-02-26T13:40:16.297Z' + updated_by: elastic + type: object + properties: {} UpdateSavedQueryRequestBody: + example: + id: updated_my_saved_query_name type: object properties: description: - $ref: '#/components/schemas/DescriptionOrUndefined' + $ref: '#/components/schemas/SavedQueryDescriptionOrUndefined' ecs_mapping: $ref: '#/components/schemas/ECSMappingOrUndefined' id: @@ -616,7 +1015,7 @@ components: interval: $ref: '#/components/schemas/IntervalOrUndefined' platform: - $ref: '#/components/schemas/DescriptionOrUndefined' + $ref: '#/components/schemas/PlatformOrUndefined' query: $ref: '#/components/schemas/QueryOrUndefined' removed: @@ -625,7 +1024,16 @@ components: $ref: '#/components/schemas/SnapshotOrUndefined' version: $ref: '#/components/schemas/VersionOrUndefined' + UpdateSavedQueryResponse: + example: + data: {} + type: object + properties: {} Version: + description: >- + Uses the Osquery versions greater than or equal to the specified version + string. + example: 1.0.0 type: string VersionOrUndefined: $ref: '#/components/schemas/Version' diff --git a/x-pack/platform/plugins/shared/osquery/docs/openapi/serverless/osquery_api_2023_10_31.bundled.schema.yaml b/x-pack/platform/plugins/shared/osquery/docs/openapi/serverless/osquery_api_2023_10_31.bundled.schema.yaml index 3e308d1ebfcc5..30718029551de 100644 --- a/x-pack/platform/plugins/shared/osquery/docs/openapi/serverless/osquery_api_2023_10_31.bundled.schema.yaml +++ b/x-pack/platform/plugins/shared/osquery/docs/openapi/serverless/osquery_api_2023_10_31.bundled.schema.yaml @@ -17,16 +17,36 @@ paths: operationId: OsqueryFindLiveQueries parameters: - in: query - name: query - required: true + name: kuery + required: false + schema: + $ref: '#/components/schemas/KueryOrUndefined' + - in: query + name: page + required: false + schema: + $ref: '#/components/schemas/PageOrUndefined' + - in: query + name: pageSize + required: false + schema: + $ref: '#/components/schemas/PageSizeOrUndefined' + - in: query + name: sort + required: false + schema: + $ref: '#/components/schemas/SortOrUndefined' + - in: query + name: sortOrder + required: false schema: - $ref: '#/components/schemas/FindLiveQueryRequestQuery' + $ref: '#/components/schemas/SortOrderOrUndefined' responses: '200': content: application/json: schema: - $ref: '#/components/schemas/DefaultSuccessResponse' + $ref: '#/components/schemas/FindLiveQueryResponse' description: OK summary: Get live queries tags: @@ -45,7 +65,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/DefaultSuccessResponse' + $ref: '#/components/schemas/CreateLiveQueryResponse' description: OK summary: Create a live query tags: @@ -59,18 +79,15 @@ paths: name: id required: true schema: - $ref: '#/components/schemas/Id' - - in: query - name: query - schema: - additionalProperties: true - type: object + description: The ID of the live query result you want to retrieve. + example: 3c42c847-eb30-4452-80e0-728584042334 + type: string responses: '200': content: application/json: schema: - $ref: '#/components/schemas/DefaultSuccessResponse' + $ref: '#/components/schemas/FindLiveQueryDetailsResponse' description: OK summary: Get live query details tags: @@ -84,23 +101,47 @@ paths: name: id required: true schema: - $ref: '#/components/schemas/Id' + description: The ID of the live query result you want to retrieve. + example: 3c42c847-eb30-4452-80e0-728584042334 + type: string - in: path name: actionId required: true schema: - $ref: '#/components/schemas/Id' + description: The ID of the query action that generated the live query results. + example: 609c4c66-ba3d-43fa-afdd-53e244577aa0 + type: string - in: query - name: query - required: true + name: kuery + required: false + schema: + $ref: '#/components/schemas/KueryOrUndefined' + - in: query + name: page + required: false + schema: + $ref: '#/components/schemas/PageOrUndefined' + - in: query + name: pageSize + required: false + schema: + $ref: '#/components/schemas/PageSizeOrUndefined' + - in: query + name: sort + required: false schema: - $ref: '#/components/schemas/GetLiveQueryResultsRequestQuery' + $ref: '#/components/schemas/SortOrUndefined' + - in: query + name: sortOrder + required: false + schema: + $ref: '#/components/schemas/SortOrderOrUndefined' responses: '200': content: application/json: schema: - $ref: '#/components/schemas/DefaultSuccessResponse' + $ref: '#/components/schemas/GetLiveQueryResultsResponse' description: OK summary: Get live query results tags: @@ -111,16 +152,31 @@ paths: operationId: OsqueryFindPacks parameters: - in: query - name: query - required: true + name: page + required: false + schema: + $ref: '#/components/schemas/PageOrUndefined' + - in: query + name: pageSize + required: false schema: - $ref: '#/components/schemas/FindPacksRequestQuery' + $ref: '#/components/schemas/PageSizeOrUndefined' + - in: query + name: sort + required: false + schema: + $ref: '#/components/schemas/SortOrUndefined' + - in: query + name: sortOrder + required: false + schema: + $ref: '#/components/schemas/SortOrderOrUndefined' responses: '200': content: application/json: schema: - $ref: '#/components/schemas/DefaultSuccessResponse' + $ref: '#/components/schemas/FindPacksResponse' description: OK summary: Get packs tags: @@ -139,7 +195,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/DefaultSuccessResponse' + $ref: '#/components/schemas/CreatePacksResponse' description: OK summary: Create a pack tags: @@ -159,7 +215,9 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/DefaultSuccessResponse' + example: {} + type: object + properties: {} description: OK summary: Delete a pack tags: @@ -178,7 +236,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/DefaultSuccessResponse' + $ref: '#/components/schemas/FindPackResponse' description: OK summary: Get pack details tags: @@ -206,7 +264,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/DefaultSuccessResponse' + $ref: '#/components/schemas/UpdatePacksResponse' description: OK summary: Update a pack tags: @@ -217,16 +275,31 @@ paths: operationId: OsqueryFindSavedQueries parameters: - in: query - name: query - required: true + name: page + required: false + schema: + $ref: '#/components/schemas/PageOrUndefined' + - in: query + name: pageSize + required: false schema: - $ref: '#/components/schemas/FindSavedQueryRequestQuery' + $ref: '#/components/schemas/PageSizeOrUndefined' + - in: query + name: sort + required: false + schema: + $ref: '#/components/schemas/SortOrUndefined' + - in: query + name: sortOrder + required: false + schema: + $ref: '#/components/schemas/SortOrderOrUndefined' responses: '200': content: application/json: schema: - $ref: '#/components/schemas/DefaultSuccessResponse' + $ref: '#/components/schemas/FindSavedQueryResponse' description: OK summary: Get saved queries tags: @@ -245,7 +318,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/DefaultSuccessResponse' + $ref: '#/components/schemas/CreateSavedQueryResponse' description: OK summary: Create a saved query tags: @@ -284,7 +357,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/DefaultSuccessResponse' + $ref: '#/components/schemas/FindSavedQueryDetailResponse' description: OK summary: Get saved query details tags: @@ -312,7 +385,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/DefaultSuccessResponse' + $ref: '#/components/schemas/UpdateSavedQueryResponse' description: OK summary: Update a saved query tags: @@ -320,6 +393,7 @@ paths: components: schemas: ArrayQueries: + description: An array of queries to run. items: $ref: '#/components/schemas/ArrayQueriesItem' type: array @@ -329,7 +403,7 @@ components: ecs_mapping: $ref: '#/components/schemas/ECSMappingOrUndefined' id: - $ref: '#/components/schemas/Id' + $ref: '#/components/schemas/QueryId' platform: $ref: '#/components/schemas/PlatformOrUndefined' query: @@ -341,37 +415,51 @@ components: version: $ref: '#/components/schemas/VersionOrUndefined' CreateLiveQueryRequestBody: + example: + agent_all: true + ecs_mapping: + host.uptime: + field: total_seconds + query: select * from uptime; type: object properties: agent_all: + description: When `true`, the query runs on all agents. type: boolean agent_ids: + description: A list of agent IDs to run the query on. items: type: string type: array agent_platforms: + description: A list of agent platforms to run the query on. items: type: string type: array agent_policy_ids: + description: A list of agent policy IDs to run the query on. items: type: string type: array alert_ids: + description: A list of alert IDs associated with the live query. items: type: string type: array case_ids: + description: A list of case IDs associated with the live query. items: type: string type: array ecs_mapping: $ref: '#/components/schemas/ECSMappingOrUndefined' event_ids: + description: A list of event IDs associated with the live query. items: type: string type: array metadata: + description: Custom metadata object associated with the live query. nullable: true type: object pack_id: @@ -382,11 +470,64 @@ components: $ref: '#/components/schemas/QueryOrUndefined' saved_query_id: $ref: '#/components/schemas/SavedQueryIdOrUndefined' + CreateLiveQueryResponse: + example: + data: + '@timestamp': '2022-07-26T09:59:32.220Z' + action_id: 3c42c847-eb30-4452-80e0-728584042334 + agent_all: true + agent_ids: [] + agent_platforms: [] + agent_policy_ids: [] + agents: + - 16d7caf5-efd2-4212-9b62-73dafc91fa13 + expiration: '2022-07-26T10:04:32.220Z' + input_type: osquery + metadata: + execution_context: + name: osquery + url: /app/osquery/live_queries/new + queries: + - action_id: 609c4c66-ba3d-43fa-afdd-53e244577aa0 + agents: + - 16d7caf5-efd2-4212-9b62-73dafc91fa13 + ecs_mapping: + host.uptime: + field: total_seconds + id: 6724a474-cbba-41ef-a1aa-66aebf0879e2 + query: select * from uptime; + timeout: 120 + type: INPUT_ACTION + user_id: elastic + type: object + properties: {} CreatePacksRequestBody: + example: + description: My pack + enabled: true + name: my_pack + policy_ids: + - my_policy_id + - fleet-server-policy + queries: + my_query: + ecs_mapping: + client.port: + field: port + tags: + value: + - tag1 + - tag2 + interval: 60 + query: SELECT * FROM listening_ports; + timeout: 120 + shards: + fleet-server-policy: 58 + my_policy_id: 35 type: object properties: description: - $ref: '#/components/schemas/DescriptionOrUndefined' + $ref: '#/components/schemas/PackDescriptionOrUndefined' enabled: $ref: '#/components/schemas/EnabledOrUndefined' name: @@ -397,11 +538,50 @@ components: $ref: '#/components/schemas/ObjectQueries' shards: $ref: '#/components/schemas/Shards' + CreatePacksResponse: + example: + data: + created_at: '2025-02-26T13:37:30.452Z' + created_by: elastic + description: My pack + enabled: true + name: my_pack + queries: + ports: + ecs_mapping: + client.port: + field: port + interval: 60 + query: SELECT * FROM listening_ports; + removed: false + snapshot: true + timeout: 120 + saved_object_id: 1c266590-381f-428c-878f-c80c1334f856 + shards: + - key: 47638692-7c4c-4053-aa3e-7186f28df349 + value: 35 + - key: 5e267651-fe50-443e-8d3f-3bbc9171b618 + value: 58 + updated_at: '2025-02-26T13:37:30.452Z' + updated_by: elastic + type: object + properties: {} CreateSavedQueryRequestBody: + example: + description: Saved query description + ecs_mapping: + host.uptime: + field: total_seconds + id: saved_query_id + interval: '60' + platform: linux,darwin + query: select * from uptime; + timeout: 120 + version: 2.8.0 type: object properties: description: - $ref: '#/components/schemas/DescriptionOrUndefined' + $ref: '#/components/schemas/SavedQueryDescriptionOrUndefined' ecs_mapping: $ref: '#/components/schemas/ECSMappingOrUndefined' id: @@ -409,7 +589,7 @@ components: interval: $ref: '#/components/schemas/Interval' platform: - $ref: '#/components/schemas/DescriptionOrUndefined' + $ref: '#/components/schemas/PlatformOrUndefined' query: $ref: '#/components/schemas/QueryOrUndefined' removed: @@ -418,24 +598,34 @@ components: $ref: '#/components/schemas/SnapshotOrUndefined' version: $ref: '#/components/schemas/VersionOrUndefined' + CreateSavedQueryResponse: + example: + data: {} + type: object + properties: {} DefaultSuccessResponse: type: object properties: {} - Description: - type: string - DescriptionOrUndefined: - $ref: '#/components/schemas/Description' - nullable: true ECSMapping: additionalProperties: $ref: '#/components/schemas/ECSMappingItem' + description: >- + Map osquery results columns or static values to Elastic Common Schema + (ECS) fields + example: + host.uptime: + field: total_seconds type: object ECSMappingItem: type: object properties: field: + description: The ECS field to map to. + example: host.uptime type: string value: + description: The value to map to the ECS field. + example: total_seconds oneOf: - type: string - items: @@ -445,71 +635,197 @@ components: $ref: '#/components/schemas/ECSMapping' nullable: true Enabled: + description: Enables the pack. + example: true type: boolean EnabledOrUndefined: $ref: '#/components/schemas/Enabled' nullable: true - FindLiveQueryRequestQuery: + FindLiveQueryDetailsResponse: + example: + data: + '@timestamp': '2022-07-26T09:59:32.220Z' + action_id: 3c42c847-eb30-4452-80e0-728584042334 + agents: + - 16d7caf5-efd2-4212-9b62-73dafc91fa13 + expiration: '2022-07-26T10:04:32.220Z' + queries: + - action_id: 609c4c66-ba3d-43fa-afdd-53e244577aa0 + agents: + - 16d7caf5-efd2-4212-9b62-73dafc91fa13 + docs: 0 + ecs_mapping: + host.uptime: + field: total_seconds + failed: 1 + id: 6724a474-cbba-41ef-a1aa-66aebf0879e2 + pending: 0 + query: select * from uptime; + responded: 1 + saved_query_id: 42ba9c50-0cc5-11ed-aa1d-2b27890bc90d + status: completed + successful: 0 + status: completed + user_id: elastic type: object - properties: - kuery: - $ref: '#/components/schemas/KueryOrUndefined' - page: - $ref: '#/components/schemas/PageOrUndefined' - pageSize: - $ref: '#/components/schemas/PageSizeOrUndefined' - sort: - $ref: '#/components/schemas/SortOrUndefined' - sortOrder: - $ref: '#/components/schemas/SortOrderOrUndefined' - FindPacksRequestQuery: + properties: {} + FindLiveQueryResponse: + example: + data: + items: + - fields: + '@timestamp': '2023-10-31T00:00:00Z' + action_id: 3c42c847-eb30-4452-80e0-728584042334 + agents: + - 16d7caf5-efd2-4212-9b62-73dafc91fa13 + expiration: '2023-10-31T00:00:00Z' + queries: + - action_id: 609c4c66-ba3d-43fa-afdd-53e244577aa0 + agents: + - 16d7caf5-efd2-4212-9b62-73dafc91fa13 + ecs_mapping: + host.uptime: + field: total_seconds + id: 6724a474-cbba-41ef-a1aa-66aebf0879e2 + query: select * from uptime; + saved_query_id: 42ba9c50-0cc5-11ed-aa1d-2b27890bc90d + user_id: elastic type: object - properties: - page: - $ref: '#/components/schemas/PageOrUndefined' - pageSize: - $ref: '#/components/schemas/PageSizeOrUndefined' - sort: - $ref: '#/components/schemas/SortOrUndefined' - sortOrder: - $ref: '#/components/schemas/SortOrderOrUndefined' - FindSavedQueryRequestQuery: + properties: {} + FindPackResponse: + example: + data: + created_at: '2022-07-25T19:41:10.263Z' + created_by: elastic + description: '' + enabled: true + id: 3c42c847-eb30-4452-80e0-728584042334 + name: test_pack + namespaces: + - default + policy_ids: [] + queries: + uptime: + ecs_mapping: + message: + field: days + interval: 3600 + query: select * from uptime + read_only: false + type: osquery-pack + updated_at: '2022-07-25T20:12:01.455Z' + updated_by: elastic type: object - properties: - page: - $ref: '#/components/schemas/PageOrUndefined' - pageSize: - $ref: '#/components/schemas/PageSizeOrUndefined' - sort: - $ref: '#/components/schemas/SortOrUndefined' - sortOrder: - $ref: '#/components/schemas/SortOrderOrUndefined' - GetLiveQueryResultsRequestQuery: + properties: {} + FindPacksResponse: + example: + data: + - attributes: + created_at: '2023-10-31T00:00:00Z' + created_by: elastic + description: My pack description + enabled: true + name: My Pack + queries: + - ecs_mapping: + - host.uptime: + field: total_seconds + id: uptime + interval: '3600' + query: select * from uptime; + updated_at: '2023-10-31T00:00:00Z' + updated_by: elastic + id: 42ba9c50-0cc5-11ed-aa1d-2b27890bc90d + namespaces: + - default + type: osquery-pack + page: 1 + pageSize: 10 + policy_ids: [] + total: 1 type: object - properties: - kuery: - $ref: '#/components/schemas/KueryOrUndefined' - page: - $ref: '#/components/schemas/PageOrUndefined' - pageSize: - $ref: '#/components/schemas/PageSizeOrUndefined' - sort: - $ref: '#/components/schemas/SortOrUndefined' - sortOrder: - $ref: '#/components/schemas/SortOrderOrUndefined' - Id: - type: string + properties: {} + FindSavedQueryDetailResponse: + example: + data: + attributes: + created_at: '2022-07-26T09:28:08.597Z' + created_by: elastic + description: Saved query description + ecs_mapping: + host.uptime: + field: total_seconds + id: saved_query_id + interval: '60' + platform: linux,darwin + prebuilt: false + query: select * from uptime; + updated_at: '2022-07-26T09:28:08.597Z' + updated_by: elastic + version: 2.8.0 + coreMigrationVersion: 8.4.0 + id: 3c42c847-eb30-4452-80e0-728584042334 + namespaces: + - default + references: [] + type: osquery-saved-query + updated_at: '2022-07-26T09:28:08.600Z' + version: WzQzMTcsMV0= + type: object + properties: {} + FindSavedQueryResponse: + example: + data: + - attributes: + created_at: '2022-07-26T09:28:08.597Z' + created_by: elastic + description: Saved query description + ecs_mapping: + host.uptime: + field: total_seconds + id: saved_query_id + interval: '60' + platform: linux,darwin + prebuilt: false + query: select * from uptime; + updated_at: '2022-07-26T09:28:08.597Z' + updated_by: elastic + version: 2.8.0 + id: 42ba9c50-0cc5-11ed-aa1d-2b27890bc90d + namespaces: + - default + type: osquery-saved-query + page: 1 + per_page: 100 + total: 11 + type: object + properties: {} + GetLiveQueryResultsResponse: + description: The response for getting live query results. + example: + data: + edges: + - {} + - {} + total: 2 + type: object + properties: {} Interval: + description: An interval, in seconds, on which to run the query. + example: '60' type: string IntervalOrUndefined: $ref: '#/components/schemas/Interval' nullable: true KueryOrUndefined: + description: The kuery to filter the results by. + example: 'agent.id: 16d7caf5-efd2-4212-9b62-73dafc91fa13' nullable: true type: string ObjectQueries: additionalProperties: $ref: '#/components/schemas/ObjectQueriesItem' + description: An object of queries. type: object ObjectQueriesItem: type: object @@ -517,7 +833,7 @@ components: ecs_mapping: $ref: '#/components/schemas/ECSMappingOrUndefined' id: - $ref: '#/components/schemas/Id' + $ref: '#/components/schemas/QueryId' platform: $ref: '#/components/schemas/PlatformOrUndefined' query: @@ -530,25 +846,48 @@ components: $ref: '#/components/schemas/SnapshotOrUndefined' version: $ref: '#/components/schemas/VersionOrUndefined' + PackDescription: + description: The pack description. + example: Pack description + type: string + PackDescriptionOrUndefined: + $ref: '#/components/schemas/PackDescription' + nullable: true PackId: + description: The ID of the pack you want to run, retrieve, update, or delete. + example: 3c42c847-eb30-4452-80e0-728584042334 type: string PackIdOrUndefined: $ref: '#/components/schemas/PackId' nullable: true PackName: + description: The pack name. type: string PageOrUndefined: + description: The page number to return. The default is 1. + example: 1 nullable: true type: integer PageSizeOrUndefined: + description: The number of results to return per page. The default is 20. + example: 20 nullable: true type: integer Platform: + description: >- + Restricts the query to a specified platform. The default is all + platforms. To specify multiple platforms, use commas. For example, + `linux,darwin`. + example: linux,darwin type: string PlatformOrUndefined: $ref: '#/components/schemas/Platform' nullable: true PolicyIds: + description: A list of agents policy IDs. + example: + - policyId1 + - policyId2 items: type: string type: array @@ -556,16 +895,33 @@ components: $ref: '#/components/schemas/PolicyIds' nullable: true Query: + description: The SQL query you want to run. + example: select * from uptime; + type: string + QueryId: + description: The ID of the query. + example: 3c42c847-eb30-4452-80e0-728584042334 type: string QueryOrUndefined: $ref: '#/components/schemas/Query' nullable: true Removed: + description: Indicates whether the query is removed. + example: false type: boolean RemovedOrUndefined: $ref: '#/components/schemas/Removed' nullable: true + SavedQueryDescription: + description: The saved query description. + example: Saved query description + type: string + SavedQueryDescriptionOrUndefined: + $ref: '#/components/schemas/SavedQueryDescription' + nullable: true SavedQueryId: + description: The ID of a saved query. + example: 3c42c847-eb30-4452-80e0-728584042334 type: string SavedQueryIdOrUndefined: $ref: '#/components/schemas/SavedQueryId' @@ -573,42 +929,85 @@ components: Shards: additionalProperties: type: number + description: >- + An object with shard configuration for policies included in the pack. + For each policy, set the shard configuration to a percentage (1–100) of + target hosts. + example: + policy_id: 50 type: object Snapshot: + description: Indicates whether the query is a snapshot. + example: true type: boolean SnapshotOrUndefined: $ref: '#/components/schemas/Snapshot' nullable: true SortOrderOrUndefined: - oneOf: - - nullable: true - type: string - - enum: - - asc - - desc + description: Specifies the sort order. + enum: + - asc + - desc + example: desc + type: string SortOrUndefined: + default: createdAt + description: The field that is used to sort the results. + example: createdAt nullable: true type: string UpdatePacksRequestBody: + example: + name: updated_my_pack_name type: object properties: description: - $ref: '#/components/schemas/DescriptionOrUndefined' + $ref: '#/components/schemas/PackDescriptionOrUndefined' enabled: $ref: '#/components/schemas/EnabledOrUndefined' - id: - $ref: '#/components/schemas/PackId' + name: + $ref: '#/components/schemas/PackName' policy_ids: $ref: '#/components/schemas/PolicyIdsOrUndefined' queries: $ref: '#/components/schemas/ObjectQueries' shards: $ref: '#/components/schemas/Shards' + UpdatePacksResponse: + example: + data: + created_at: '2025-02-26T13:37:30.452Z' + created_by: elastic + description: My pack + enabled: true + name: updated_my_pack_name + queries: + ports: + ecs_mapping: + client.port: + field: port + interval: 60 + query: SELECT * FROM listening_ports; + removed: false + snapshot: true + timeout: 120 + saved_object_id: 1c266590-381f-428c-878f-c80c1334f856 + shards: + - key: 47638692-7c4c-4053-aa3e-7186f28df349 + value: 35 + - key: 5e267651-fe50-443e-8d3f-3bbc9171b618 + value: 58 + updated_at: '2025-02-26T13:40:16.297Z' + updated_by: elastic + type: object + properties: {} UpdateSavedQueryRequestBody: + example: + id: updated_my_saved_query_name type: object properties: description: - $ref: '#/components/schemas/DescriptionOrUndefined' + $ref: '#/components/schemas/SavedQueryDescriptionOrUndefined' ecs_mapping: $ref: '#/components/schemas/ECSMappingOrUndefined' id: @@ -616,7 +1015,7 @@ components: interval: $ref: '#/components/schemas/IntervalOrUndefined' platform: - $ref: '#/components/schemas/DescriptionOrUndefined' + $ref: '#/components/schemas/PlatformOrUndefined' query: $ref: '#/components/schemas/QueryOrUndefined' removed: @@ -625,7 +1024,16 @@ components: $ref: '#/components/schemas/SnapshotOrUndefined' version: $ref: '#/components/schemas/VersionOrUndefined' + UpdateSavedQueryResponse: + example: + data: {} + type: object + properties: {} Version: + description: >- + Uses the Osquery versions greater than or equal to the specified version + string. + example: 1.0.0 type: string VersionOrUndefined: $ref: '#/components/schemas/Version' diff --git a/x-pack/platform/plugins/shared/streams/server/lib/streams/helpers/condition_to_painless.test.ts b/x-pack/platform/plugins/shared/streams/server/lib/streams/helpers/condition_to_painless.test.ts index 6927b85d5aed8..e82f38e1142f6 100644 --- a/x-pack/platform/plugins/shared/streams/server/lib/streams/helpers/condition_to_painless.test.ts +++ b/x-pack/platform/plugins/shared/streams/server/lib/streams/helpers/condition_to_painless.test.ts @@ -11,55 +11,55 @@ const operatorConditionAndResults = [ { condition: { field: 'log.logger', operator: 'eq' as const, value: 'nginx_proxy' }, result: - '(ctx.log?.logger !== null && ((ctx.log?.logger instanceof Number && ctx.log?.logger.toString() == "nginx_proxy") || ctx.log?.logger == "nginx_proxy"))', + "(relevant_fields['log.logger'] !== null && ((relevant_fields['log.logger'] instanceof Number && relevant_fields['log.logger'].toString() == \"nginx_proxy\") || relevant_fields['log.logger'] == \"nginx_proxy\"))", }, { condition: { field: 'log.logger', operator: 'neq' as const, value: 'nginx_proxy' }, result: - '(ctx.log?.logger !== null && ((ctx.log?.logger instanceof Number && ctx.log?.logger.toString() != "nginx_proxy") || ctx.log?.logger != "nginx_proxy"))', + "(relevant_fields['log.logger'] !== null && ((relevant_fields['log.logger'] instanceof Number && relevant_fields['log.logger'].toString() != \"nginx_proxy\") || relevant_fields['log.logger'] != \"nginx_proxy\"))", }, { condition: { field: 'http.response.status_code', operator: 'lt' as const, value: 500 }, result: - '(ctx.http?.response?.status_code !== null && ((ctx.http?.response?.status_code instanceof String && Float.parseFloat(ctx.http?.response?.status_code) < 500) || ctx.http?.response?.status_code < 500))', + "(relevant_fields['http.response.status_code'] !== null && ((relevant_fields['http.response.status_code'] instanceof String && Float.parseFloat(relevant_fields['http.response.status_code']) < 500) || relevant_fields['http.response.status_code'] < 500))", }, { condition: { field: 'http.response.status_code', operator: 'lte' as const, value: 500 }, result: - '(ctx.http?.response?.status_code !== null && ((ctx.http?.response?.status_code instanceof String && Float.parseFloat(ctx.http?.response?.status_code) <= 500) || ctx.http?.response?.status_code <= 500))', + "(relevant_fields['http.response.status_code'] !== null && ((relevant_fields['http.response.status_code'] instanceof String && Float.parseFloat(relevant_fields['http.response.status_code']) <= 500) || relevant_fields['http.response.status_code'] <= 500))", }, { condition: { field: 'http.response.status_code', operator: 'gt' as const, value: 500 }, result: - '(ctx.http?.response?.status_code !== null && ((ctx.http?.response?.status_code instanceof String && Float.parseFloat(ctx.http?.response?.status_code) > 500) || ctx.http?.response?.status_code > 500))', + "(relevant_fields['http.response.status_code'] !== null && ((relevant_fields['http.response.status_code'] instanceof String && Float.parseFloat(relevant_fields['http.response.status_code']) > 500) || relevant_fields['http.response.status_code'] > 500))", }, { condition: { field: 'http.response.status_code', operator: 'gte' as const, value: 500 }, result: - '(ctx.http?.response?.status_code !== null && ((ctx.http?.response?.status_code instanceof String && Float.parseFloat(ctx.http?.response?.status_code) >= 500) || ctx.http?.response?.status_code >= 500))', + "(relevant_fields['http.response.status_code'] !== null && ((relevant_fields['http.response.status_code'] instanceof String && Float.parseFloat(relevant_fields['http.response.status_code']) >= 500) || relevant_fields['http.response.status_code'] >= 500))", }, { condition: { field: 'log.logger', operator: 'startsWith' as const, value: 'nginx' }, result: - '(ctx.log?.logger !== null && ((ctx.log?.logger instanceof Number && ctx.log?.logger.toString().startsWith("nginx")) || ctx.log?.logger.startsWith("nginx")))', + "(relevant_fields['log.logger'] !== null && ((relevant_fields['log.logger'] instanceof Number && relevant_fields['log.logger'].toString().startsWith(\"nginx\")) || relevant_fields['log.logger'].startsWith(\"nginx\")))", }, { condition: { field: 'log.logger', operator: 'endsWith' as const, value: 'proxy' }, result: - '(ctx.log?.logger !== null && ((ctx.log?.logger instanceof Number && ctx.log?.logger.toString().endsWith("proxy")) || ctx.log?.logger.endsWith("proxy")))', + "(relevant_fields['log.logger'] !== null && ((relevant_fields['log.logger'] instanceof Number && relevant_fields['log.logger'].toString().endsWith(\"proxy\")) || relevant_fields['log.logger'].endsWith(\"proxy\")))", }, { condition: { field: 'log.logger', operator: 'contains' as const, value: 'proxy' }, result: - '(ctx.log?.logger !== null && ((ctx.log?.logger instanceof Number && ctx.log?.logger.toString().contains("proxy")) || ctx.log?.logger.contains("proxy")))', + "(relevant_fields['log.logger'] !== null && ((relevant_fields['log.logger'] instanceof Number && relevant_fields['log.logger'].toString().contains(\"proxy\")) || relevant_fields['log.logger'].contains(\"proxy\")))", }, { condition: { field: 'log.logger', operator: 'exists' as const }, - result: 'ctx.log?.logger !== null', + result: "relevant_fields['log.logger'] !== null", }, { condition: { field: 'log.logger', operator: 'notExists' as const }, - result: 'ctx.log?.logger == null', + result: "relevant_fields['log.logger'] == null", }, ]; @@ -79,7 +79,7 @@ describe('conditionToPainless', () => { value: '500', }; expect(conditionToStatement(condition)).toEqual( - '(ctx.http?.response?.status_code !== null && ((ctx.http?.response?.status_code instanceof String && Float.parseFloat(ctx.http?.response?.status_code) > 500) || ctx.http?.response?.status_code > 500))' + "(relevant_fields['http.response.status_code'] !== null && ((relevant_fields['http.response.status_code'] instanceof String && Float.parseFloat(relevant_fields['http.response.status_code']) > 500) || relevant_fields['http.response.status_code'] > 500))" ); }); test('ensure string comparasion works with number values', () => { @@ -89,7 +89,7 @@ describe('conditionToPainless', () => { value: 500, }; expect(conditionToStatement(condition)).toEqual( - '(ctx.message !== null && ((ctx.message instanceof Number && ctx.message.toString().contains("500")) || ctx.message.contains("500")))' + "(relevant_fields['message'] !== null && ((relevant_fields['message'] instanceof Number && relevant_fields['message'].toString().contains(\"500\")) || relevant_fields['message'].contains(\"500\")))" ); }); }); @@ -104,7 +104,7 @@ describe('conditionToPainless', () => { }; expect( expect(conditionToStatement(condition)).toEqual( - '(ctx.log?.logger !== null && ((ctx.log?.logger instanceof Number && ctx.log?.logger.toString() == "nginx_proxy") || ctx.log?.logger == "nginx_proxy")) && (ctx.log?.level !== null && ((ctx.log?.level instanceof Number && ctx.log?.level.toString() == "error") || ctx.log?.level == "error"))' + "(relevant_fields['log.logger'] !== null && ((relevant_fields['log.logger'] instanceof Number && relevant_fields['log.logger'].toString() == \"nginx_proxy\") || relevant_fields['log.logger'] == \"nginx_proxy\")) && (relevant_fields['log.level'] !== null && ((relevant_fields['log.level'] instanceof Number && relevant_fields['log.level'].toString() == \"error\") || relevant_fields['log.level'] == \"error\"))" ) ); }); @@ -120,7 +120,7 @@ describe('conditionToPainless', () => { }; expect( expect(conditionToStatement(condition)).toEqual( - '(ctx.log?.logger !== null && ((ctx.log?.logger instanceof Number && ctx.log?.logger.toString() == "nginx_proxy") || ctx.log?.logger == "nginx_proxy")) || (ctx.log?.level !== null && ((ctx.log?.level instanceof Number && ctx.log?.level.toString() == "error") || ctx.log?.level == "error"))' + "(relevant_fields['log.logger'] !== null && ((relevant_fields['log.logger'] instanceof Number && relevant_fields['log.logger'].toString() == \"nginx_proxy\") || relevant_fields['log.logger'] == \"nginx_proxy\")) || (relevant_fields['log.level'] !== null && ((relevant_fields['log.level'] instanceof Number && relevant_fields['log.level'].toString() == \"error\") || relevant_fields['log.level'] == \"error\"))" ) ); }); @@ -141,7 +141,7 @@ describe('conditionToPainless', () => { }; expect( expect(conditionToStatement(condition)).toEqual( - '(ctx.log?.logger !== null && ((ctx.log?.logger instanceof Number && ctx.log?.logger.toString() == "nginx_proxy") || ctx.log?.logger == "nginx_proxy")) && ((ctx.log?.level !== null && ((ctx.log?.level instanceof Number && ctx.log?.level.toString() == "error") || ctx.log?.level == "error")) || (ctx.log?.level !== null && ((ctx.log?.level instanceof Number && ctx.log?.level.toString() == "ERROR") || ctx.log?.level == "ERROR")))' + "(relevant_fields['log.logger'] !== null && ((relevant_fields['log.logger'] instanceof Number && relevant_fields['log.logger'].toString() == \"nginx_proxy\") || relevant_fields['log.logger'] == \"nginx_proxy\")) && ((relevant_fields['log.level'] !== null && ((relevant_fields['log.level'] instanceof Number && relevant_fields['log.level'].toString() == \"error\") || relevant_fields['log.level'] == \"error\")) || (relevant_fields['log.level'] !== null && ((relevant_fields['log.level'] instanceof Number && relevant_fields['log.level'].toString() == \"ERROR\") || relevant_fields['log.level'] == \"ERROR\")))" ) ); }); @@ -164,7 +164,7 @@ describe('conditionToPainless', () => { }; expect( expect(conditionToStatement(condition)).toEqual( - '((ctx.log?.logger !== null && ((ctx.log?.logger instanceof Number && ctx.log?.logger.toString() == "nginx_proxy") || ctx.log?.logger == "nginx_proxy")) || (ctx.service?.name !== null && ((ctx.service?.name instanceof Number && ctx.service?.name.toString() == "nginx") || ctx.service?.name == "nginx"))) && ((ctx.log?.level !== null && ((ctx.log?.level instanceof Number && ctx.log?.level.toString() == "error") || ctx.log?.level == "error")) || (ctx.log?.level !== null && ((ctx.log?.level instanceof Number && ctx.log?.level.toString() == "ERROR") || ctx.log?.level == "ERROR")))' + "((relevant_fields['log.logger'] !== null && ((relevant_fields['log.logger'] instanceof Number && relevant_fields['log.logger'].toString() == \"nginx_proxy\") || relevant_fields['log.logger'] == \"nginx_proxy\")) || (relevant_fields['service.name'] !== null && ((relevant_fields['service.name'] instanceof Number && relevant_fields['service.name'].toString() == \"nginx\") || relevant_fields['service.name'] == \"nginx\"))) && ((relevant_fields['log.level'] !== null && ((relevant_fields['log.level'] instanceof Number && relevant_fields['log.level'].toString() == \"error\") || relevant_fields['log.level'] == \"error\")) || (relevant_fields['log.level'] !== null && ((relevant_fields['log.level'] instanceof Number && relevant_fields['log.level'].toString() == \"ERROR\") || relevant_fields['log.level'] == \"ERROR\")))" ) ); }); @@ -173,21 +173,29 @@ describe('conditionToPainless', () => { test('wrapped with type checks for uinary conditions', () => { const condition = { field: 'log', operator: 'exists' as const }; - expect(conditionToPainless(condition)).toEqual(`try { - if (ctx.log !== null) { - return true; - } - return false; -} catch (Exception e) { - return false; -} -`); + expect(conditionToPainless(condition)).toMatchInlineSnapshot(` + " + def relevant_fields = [:]; + + relevant_fields['log'] = ctx['log']; + + + try { + if (relevant_fields['log'] !== null) { + return true; + } + return false; + } catch (Exception e) { + return false; + } + " + `); }); test('wrapped with typechecks and try/catch', () => { const condition = { and: [ - { field: 'log.logger', operator: 'eq' as const, value: 'nginx_proxy' }, + { field: 'log.logger.name', operator: 'eq' as const, value: 'nginx_proxy' }, { or: [ { field: 'log.level', operator: 'eq' as const, value: 'error' }, @@ -196,20 +204,45 @@ describe('conditionToPainless', () => { }, ], }; - expect( - expect(conditionToPainless(condition)) - .toEqual(`if (ctx.log?.logger instanceof Map || ctx.log?.level instanceof Map) { - return false; -} -try { - if ((ctx.log?.logger !== null && ((ctx.log?.logger instanceof Number && ctx.log?.logger.toString() == "nginx_proxy") || ctx.log?.logger == "nginx_proxy")) && ((ctx.log?.level !== null && ((ctx.log?.level instanceof Number && ctx.log?.level.toString() == "error") || ctx.log?.level == "error")) || (ctx.log?.level !== null && ((ctx.log?.level instanceof Number && ctx.log?.level.toString() == "ERROR") || ctx.log?.level == "ERROR")))) { - return true; - } - return false; -} catch (Exception e) { - return false; -} -`) - ); + expect(conditionToPainless(condition)).toMatchInlineSnapshot(` + " + def relevant_fields = [:]; + + relevant_fields['log.logger.name'] = ctx['log']; + if (relevant_fields['log.logger.name'] != null) { + if (relevant_fields['log.logger.name'] instanceof Map) { + relevant_fields['log.logger.name'] = relevant_fields['log.logger.name']['logger']; + } else { + relevant_fields['log.logger.name'] = null; + } + } + if (relevant_fields['log.logger.name'] != null) { + if (relevant_fields['log.logger.name'] instanceof Map) { + relevant_fields['log.logger.name'] = relevant_fields['log.logger.name']['name']; + } else { + relevant_fields['log.logger.name'] = null; + } + } + + relevant_fields['log.level'] = ctx['log']; + if (relevant_fields['log.level'] != null) { + if (relevant_fields['log.level'] instanceof Map) { + relevant_fields['log.level'] = relevant_fields['log.level']['level']; + } else { + relevant_fields['log.level'] = null; + } + } + + + try { + if ((relevant_fields['log.logger.name'] !== null && ((relevant_fields['log.logger.name'] instanceof Number && relevant_fields['log.logger.name'].toString() == \\"nginx_proxy\\") || relevant_fields['log.logger.name'] == \\"nginx_proxy\\")) && ((relevant_fields['log.level'] !== null && ((relevant_fields['log.level'] instanceof Number && relevant_fields['log.level'].toString() == \\"error\\") || relevant_fields['log.level'] == \\"error\\")) || (relevant_fields['log.level'] !== null && ((relevant_fields['log.level'] instanceof Number && relevant_fields['log.level'].toString() == \\"ERROR\\") || relevant_fields['log.level'] == \\"ERROR\\")))) { + return true; + } + return false; + } catch (Exception e) { + return false; + } + " + `); }); }); diff --git a/x-pack/platform/plugins/shared/streams/server/lib/streams/helpers/condition_to_painless.ts b/x-pack/platform/plugins/shared/streams/server/lib/streams/helpers/condition_to_painless.ts index 81fe6d3aa5c02..847e4453e41b8 100644 --- a/x-pack/platform/plugins/shared/streams/server/lib/streams/helpers/condition_to_painless.ts +++ b/x-pack/platform/plugins/shared/streams/server/lib/streams/helpers/condition_to_painless.ts @@ -21,10 +21,10 @@ import { function safePainlessField(conditionOrField: FilterCondition | string) { if (typeof conditionOrField === 'string') { - return `ctx.${conditionOrField.split('.').join('?.')}`; + return `relevant_fields['${conditionOrField}']`; } - return `ctx.${conditionOrField.field.split('.').join('?.')}`; + return `relevant_fields['${conditionOrField.field}']`; } function encodeValue(value: string | number | boolean) { @@ -106,7 +106,7 @@ function unaryToPainless(condition: UnaryFilterCondition) { } function extractAllFields(condition: Condition, fields: string[] = []): string[] { - if (isFilterCondition(condition) && !isUnaryFilterCondition(condition)) { + if (isFilterCondition(condition)) { return uniq([...fields, condition.field]); } else if (isAndCondition(condition)) { return uniq(condition.and.map((cond) => extractAllFields(cond, fields)).flat()); @@ -116,6 +116,28 @@ function extractAllFields(condition: Condition, fields: string[] = []): string[] return uniq(fields); } +function generateFieldDefinition(field: string) { + const parts = field.split('.'); + const firstPart = parts[0]; + let code = `relevant_fields['${field}'] = ctx['${firstPart}'];\n`; + for (let i = 1; i < parts.length; i++) { + code += `if (relevant_fields['${field}'] != null) { + if (relevant_fields['${field}'] instanceof Map) { + relevant_fields['${field}'] = relevant_fields['${field}']['${parts[i]}']; + } else { + relevant_fields['${field}'] = null; + } +}\n`; + } + return code; +} + +function generateFieldDefinitions(fields: string[]) { + return ` +${fields.map(generateFieldDefinition).join('\n')} + `; +} + export function conditionToStatement(condition: Condition, nested = false): string { if (isFilterCondition(condition)) { if (isUnaryFilterCondition(condition)) { @@ -152,16 +174,14 @@ export function conditionToPainless(condition: Condition): string { } const fields = extractAllFields(condition); - let fieldCheck = ''; + let fieldDefinitions = ''; if (fields.length !== 0) { - fieldCheck = `if (${fields - .map((field) => `${safePainlessField(field)} instanceof Map`) - .join(' || ')}) { - return false; -} -`; + fieldDefinitions = generateFieldDefinitions(fields); } - return `${fieldCheck}try { + return ` + def relevant_fields = [:]; + ${fieldDefinitions} + try { if (${conditionToStatement(condition)}) { return true; } diff --git a/x-pack/platform/plugins/shared/streams/server/routes/streams/crud/route.ts b/x-pack/platform/plugins/shared/streams/server/routes/streams/crud/route.ts index 9c9e3324c1947..4ed85f801950b 100644 --- a/x-pack/platform/plugins/shared/streams/server/routes/streams/crud/route.ts +++ b/x-pack/platform/plugins/shared/streams/server/routes/streams/crud/route.ts @@ -13,6 +13,7 @@ import { isWiredStreamDefinition, streamUpsertRequestSchema, isGroupStreamDefinitionBase, + isUnwiredStreamDefinition, } from '@kbn/streams-schema'; import { z } from '@kbn/zod'; import { badData, badRequest } from '@hapi/boom'; @@ -150,22 +151,17 @@ export const editStreamRoute = createServerRoute({ }), handler: async ({ params, request, getScopedClients }): Promise => { const { streamsClient } = await getScopedClients({ request }); + const streamDefinition = { ...params.body.stream, name: params.path.name }; - if (!(await streamsClient.isStreamsEnabled())) { - throw badData('Streams are not enabled'); + if (!isUnwiredStreamDefinition(streamDefinition) && !(await streamsClient.isStreamsEnabled())) { + throw badData('Streams are not enabled for Wired and Group streams.'); } - if ( - isWiredStreamDefinition({ ...params.body.stream, name: params.path.name }) && - !hasSupportedStreamsRoot(params.path.name) - ) { + if (isWiredStreamDefinition(streamDefinition) && !hasSupportedStreamsRoot(params.path.name)) { throw badRequest('Cannot create wired stream due to unsupported root stream'); } - if ( - isGroupStreamDefinition({ ...params.body.stream, name: params.path.name }) && - params.path.name.startsWith('logs.') - ) { + if (isGroupStreamDefinition(streamDefinition) && params.path.name.startsWith('logs.')) { throw badRequest('A group stream name can not start with [logs.]'); } diff --git a/x-pack/platform/plugins/shared/streams/server/routes/streams/group/route.ts b/x-pack/platform/plugins/shared/streams/server/routes/streams/group/route.ts index 10370a0f5c7ec..64d785f9017d8 100644 --- a/x-pack/platform/plugins/shared/streams/server/routes/streams/group/route.ts +++ b/x-pack/platform/plugins/shared/streams/server/routes/streams/group/route.ts @@ -6,7 +6,7 @@ */ import { z } from '@kbn/zod'; -import { badRequest } from '@hapi/boom'; +import { badData, badRequest } from '@hapi/boom'; import { GroupObjectGetResponse, groupObjectUpsertRequestSchema, @@ -70,6 +70,10 @@ const upsertGroupRoute = createServerRoute({ request, }); + if (!(await streamsClient.isStreamsEnabled())) { + throw badData('Streams are not enabled for Group streams.'); + } + const { name } = params.path; if (name.startsWith('logs.')) { diff --git a/x-pack/platform/plugins/shared/streams/server/routes/streams/ingest/route.ts b/x-pack/platform/plugins/shared/streams/server/routes/streams/ingest/route.ts index 911385bf0856d..3bcb826efa7d3 100644 --- a/x-pack/platform/plugins/shared/streams/server/routes/streams/ingest/route.ts +++ b/x-pack/platform/plugins/shared/streams/server/routes/streams/ingest/route.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { badRequest } from '@hapi/boom'; +import { badData, badRequest } from '@hapi/boom'; import { IngestGetResponse, StreamUpsertRequest, @@ -75,6 +75,13 @@ const upsertIngestRoute = createServerRoute({ request, }); + if ( + isWiredStreamDefinition({ name: params.path.name, ...params.body }) && + !(await streamsClient.isStreamsEnabled()) + ) { + throw badData('Streams are not enabled for Wired streams.'); + } + const name = params.path.name; const assets = await assetClient.getAssets({ diff --git a/x-pack/platform/plugins/shared/streams_app/public/components/data_management/stream_detail_enrichment/hooks/use_processing_simulator.ts b/x-pack/platform/plugins/shared/streams_app/public/components/data_management/stream_detail_enrichment/hooks/use_processing_simulator.ts index e7e0c8d66af44..0f219f92e858c 100644 --- a/x-pack/platform/plugins/shared/streams_app/public/components/data_management/stream_detail_enrichment/hooks/use_processing_simulator.ts +++ b/x-pack/platform/plugins/shared/streams_app/public/components/data_management/stream_detail_enrichment/hooks/use_processing_simulator.ts @@ -24,7 +24,6 @@ import { useStreamsAppFetch } from '../../../../hooks/use_streams_app_fetch'; import { useKibana } from '../../../../hooks/use_kibana'; import { DetectedField, ProcessorDefinitionWithUIAttributes } from '../types'; import { processorConverter } from '../utils'; -import { useDateRange } from '../../../../hooks/use_date_range'; export type Simulation = APIReturnType<'POST /api/streams/{name}/processing/_simulate'>; export type ProcessorMetrics = @@ -95,7 +94,7 @@ export const useProcessingSimulator = ({ const { absoluteTimeRange: { start, end }, - } = useDateRange({ data }); + } = data.query.timefilter.timefilter.useTimefilter(); const draftProcessors = useMemo( () => processors.filter((processor) => processor.status === 'draft'), diff --git a/x-pack/platform/plugins/shared/streams_app/public/components/data_management/stream_detail_enrichment/processor_outcome_preview.tsx b/x-pack/platform/plugins/shared/streams_app/public/components/data_management/stream_detail_enrichment/processor_outcome_preview.tsx index 106c5ffa780bb..dab8028f1f999 100644 --- a/x-pack/platform/plugins/shared/streams_app/public/components/data_management/stream_detail_enrichment/processor_outcome_preview.tsx +++ b/x-pack/platform/plugins/shared/streams_app/public/components/data_management/stream_detail_enrichment/processor_outcome_preview.tsx @@ -29,7 +29,6 @@ import { docsFilterOptions, } from './hooks/use_processing_simulator'; import { AssetImage } from '../../asset_image'; -import { useDateRange } from '../../../hooks/use_date_range'; interface ProcessorOutcomePreviewProps { columns: TableColumn[]; @@ -53,7 +52,7 @@ export const ProcessorOutcomePreview = ({ const { dependencies } = useKibana(); const { data } = dependencies.start; - const { timeRange, setTimeRange } = useDateRange({ data }); + const { timeRange, setTimeRange } = data.query.timefilter.timefilter.useTimefilter(); const tableColumns = useMemo(() => { switch (selectedDocsFilter) { diff --git a/x-pack/platform/plugins/shared/streams_app/public/components/data_management/stream_detail_lifecycle/ingestion_rate.tsx b/x-pack/platform/plugins/shared/streams_app/public/components/data_management/stream_detail_lifecycle/ingestion_rate.tsx index 6a6929bf6d32a..7a4fb7a476948 100644 --- a/x-pack/platform/plugins/shared/streams_app/public/components/data_management/stream_detail_lifecycle/ingestion_rate.tsx +++ b/x-pack/platform/plugins/shared/streams_app/public/components/data_management/stream_detail_lifecycle/ingestion_rate.tsx @@ -33,7 +33,6 @@ import { useKibana } from '../../../hooks/use_kibana'; import { DataStreamStats } from './hooks/use_data_stream_stats'; import { formatBytes } from './helpers/format_bytes'; import { StreamsAppSearchBar } from '../../streams_app_search_bar'; -import { useDateRange } from '../../../hooks/use_date_range'; import { useIngestionRate, useIngestionRatePerTier } from './hooks/use_ingestion_rate'; import { useIlmPhasesColorAndDescription } from './hooks/use_ilm_phases_color_and_description'; @@ -53,7 +52,7 @@ export function IngestionRate({ start: { data }, }, } = useKibana(); - const { timeRange, setTimeRange } = useDateRange({ data }); + const { timeRange, setTimeRange } = data.query.timefilter.timefilter.useTimefilter(); return ( <> diff --git a/x-pack/platform/plugins/shared/streams_app/public/components/data_management/stream_detail_lifecycle/metadata.tsx b/x-pack/platform/plugins/shared/streams_app/public/components/data_management/stream_detail_lifecycle/metadata.tsx index 42252858503ee..58d2af5d60129 100644 --- a/x-pack/platform/plugins/shared/streams_app/public/components/data_management/stream_detail_lifecycle/metadata.tsx +++ b/x-pack/platform/plugins/shared/streams_app/public/components/data_management/stream_detail_lifecycle/metadata.tsx @@ -103,7 +103,7 @@ export function RetentionMetadata({ ) : null; const lifecycleOrigin = isInheritLifecycle(definition.stream.ingest.lifecycle) ? ( - + {i18n.translate('xpack.streams.streamDetailLifecycle.inheritedFrom', { defaultMessage: 'Inherited from', })}{' '} @@ -127,9 +127,11 @@ export function RetentionMetadata({ )} ) : ( - i18n.translate('xpack.streams.streamDetailLifecycle.localOverride', { - defaultMessage: 'Local override', - }) + + {i18n.translate('xpack.streams.streamDetailLifecycle.localOverride', { + defaultMessage: 'Local override', + })} + ); return ( diff --git a/x-pack/platform/plugins/shared/streams_app/public/components/data_management/stream_detail_routing/preview_panel.tsx b/x-pack/platform/plugins/shared/streams_app/public/components/data_management/stream_detail_routing/preview_panel.tsx index 417132b4d5623..4db5ddb20d314 100644 --- a/x-pack/platform/plugins/shared/streams_app/public/components/data_management/stream_detail_routing/preview_panel.tsx +++ b/x-pack/platform/plugins/shared/streams_app/public/components/data_management/stream_detail_routing/preview_panel.tsx @@ -24,7 +24,6 @@ import { StreamsAppSearchBar } from '../../streams_app_search_bar'; import { useRoutingState } from './hooks/routing_state'; import { PreviewPanelIllustration } from './preview_panel_illustration'; import { PreviewMatches } from './preview_matches'; -import { useDateRange } from '../../../hooks/use_date_range'; export function PreviewPanel({ definition, @@ -41,9 +40,9 @@ export function PreviewPanel({ const { timeRange, - absoluteTimeRange: { start, end }, setTimeRange, - } = useDateRange({ data }); + absoluteTimeRange: { start, end }, + } = data.query.timefilter.timefilter.useTimefilter(); const { isLoadingDocuments, diff --git a/x-pack/platform/plugins/shared/streams_app/public/components/entity_detail_view/index.tsx b/x-pack/platform/plugins/shared/streams_app/public/components/entity_detail_view/index.tsx index 5b6082d23916d..e2723743bc3a4 100644 --- a/x-pack/platform/plugins/shared/streams_app/public/components/entity_detail_view/index.tsx +++ b/x-pack/platform/plugins/shared/streams_app/public/components/entity_detail_view/index.tsx @@ -4,7 +4,7 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import { EuiFlexGroup, EuiFlexItem, EuiIcon, EuiLink, EuiPanel, EuiBadge } from '@elastic/eui'; +import { EuiFlexGroup, EuiFlexItem, EuiLink, EuiBadge } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import React from 'react'; import { css } from '@emotion/css'; @@ -90,21 +90,8 @@ export function EntityDetailViewWithoutParams({ max-width: 100%; `} > - - - - - - {i18n.translate('xpack.streams.entityDetailView.goBackLinkLabel', { - defaultMessage: 'Back', - })} - - - - ({ const { core: { uiSettings }, } = useKibana(); + const { colorMode } = useEuiTheme(); const allTimeseries = useMemo( () => @@ -147,6 +150,7 @@ export function ControlledEsqlChart({ legendPosition={Position.Bottom} xDomain={xDomain} locale={i18n.getLocale()} + baseTheme={colorMode === 'LIGHT' ? LIGHT_THEME : DARK_THEME} /> (DASHBOARD_APP_LOCATOR); const columns = useMemo((): Array> => { return [ diff --git a/x-pack/platform/plugins/shared/streams_app/public/components/stream_detail_overview/index.tsx b/x-pack/platform/plugins/shared/streams_app/public/components/stream_detail_overview/index.tsx index caa6f5b171b9b..c17af5ac7c3e1 100644 --- a/x-pack/platform/plugins/shared/streams_app/public/components/stream_detail_overview/index.tsx +++ b/x-pack/platform/plugins/shared/streams_app/public/components/stream_detail_overview/index.tsx @@ -37,7 +37,6 @@ import { useDashboardsFetch } from '../../hooks/use_dashboards_fetch'; import { DashboardsTable } from '../stream_detail_dashboards_view/dashboard_table'; import { AssetImage } from '../asset_image'; import { useWiredStreams } from '../../hooks/use_wired_streams'; -import { useDateRange } from '../../hooks/use_date_range'; const formatNumber = (val: number) => { return Number(val).toLocaleString('en', { @@ -59,9 +58,9 @@ export function StreamDetailOverview({ definition }: { definition?: IngestStream const { timeRange, - absoluteTimeRange: { start, end }, setTimeRange, - } = useDateRange({ data }); + absoluteTimeRange: { start, end }, + } = data.query.timefilter.timefilter.useTimefilter(); const indexPatterns = useMemo(() => { return getIndexPatterns(definition?.stream); diff --git a/x-pack/platform/plugins/shared/streams_app/public/components/streams_app_page_header/index.tsx b/x-pack/platform/plugins/shared/streams_app/public/components/streams_app_page_header/index.tsx index 1171772116f2a..4382cf66a3270 100644 --- a/x-pack/platform/plugins/shared/streams_app/public/components/streams_app_page_header/index.tsx +++ b/x-pack/platform/plugins/shared/streams_app/public/components/streams_app_page_header/index.tsx @@ -11,20 +11,17 @@ import React from 'react'; export function StreamsAppPageHeader({ title, children, - verticalPaddingSize = 'l', }: { title: React.ReactNode; children?: React.ReactNode; - verticalPaddingSize?: 'none' | 'l'; }) { const theme = useEuiTheme().euiTheme; return ( - + {title} diff --git a/x-pack/platform/plugins/shared/streams_app/public/hooks/use_date_range.ts b/x-pack/platform/plugins/shared/streams_app/public/hooks/use_date_range.ts deleted file mode 100644 index 941e106247b87..0000000000000 --- a/x-pack/platform/plugins/shared/streams_app/public/hooks/use_date_range.ts +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { TimeRange } from '@kbn/data-plugin/common'; -import { DataPublicPluginStart } from '@kbn/data-plugin/public'; -import { useCallback, useEffect, useMemo, useState } from 'react'; - -export function useDateRange({ data }: { data: DataPublicPluginStart }): { - timeRange: TimeRange; - absoluteTimeRange: { - start: number; - end: number; - }; - setTimeRange: React.Dispatch>; -} { - const timefilter = data.query.timefilter.timefilter; - - const [timeRange, setTimeRange] = useState(() => timefilter.getTime()); - - const [absoluteTimeRange, setAbsoluteTimeRange] = useState(() => timefilter.getAbsoluteTime()); - - useEffect(() => { - const timeUpdateSubscription = timefilter.getTimeUpdate$().subscribe({ - next: () => { - setTimeRange(() => timefilter.getTime()); - setAbsoluteTimeRange(() => timefilter.getAbsoluteTime()); - }, - }); - - return () => { - timeUpdateSubscription.unsubscribe(); - }; - }, [timefilter]); - - const setTimeRangeMemoized: React.Dispatch> = useCallback( - (nextOrCallback) => { - const val = - typeof nextOrCallback === 'function' - ? nextOrCallback(timefilter.getTime()) - : nextOrCallback; - - timefilter.setTime(val); - }, - [timefilter] - ); - - const asEpoch = useMemo(() => { - return { - start: new Date(absoluteTimeRange.from).getTime(), - end: new Date(absoluteTimeRange.to).getTime(), - }; - }, [absoluteTimeRange]); - - return { - timeRange, - absoluteTimeRange: asEpoch, - setTimeRange: setTimeRangeMemoized, - }; -} diff --git a/x-pack/solutions/observability/packages/utils-browser/hooks/use_date_range.ts b/x-pack/solutions/observability/packages/utils-browser/hooks/use_date_range.ts deleted file mode 100644 index 941e106247b87..0000000000000 --- a/x-pack/solutions/observability/packages/utils-browser/hooks/use_date_range.ts +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { TimeRange } from '@kbn/data-plugin/common'; -import { DataPublicPluginStart } from '@kbn/data-plugin/public'; -import { useCallback, useEffect, useMemo, useState } from 'react'; - -export function useDateRange({ data }: { data: DataPublicPluginStart }): { - timeRange: TimeRange; - absoluteTimeRange: { - start: number; - end: number; - }; - setTimeRange: React.Dispatch>; -} { - const timefilter = data.query.timefilter.timefilter; - - const [timeRange, setTimeRange] = useState(() => timefilter.getTime()); - - const [absoluteTimeRange, setAbsoluteTimeRange] = useState(() => timefilter.getAbsoluteTime()); - - useEffect(() => { - const timeUpdateSubscription = timefilter.getTimeUpdate$().subscribe({ - next: () => { - setTimeRange(() => timefilter.getTime()); - setAbsoluteTimeRange(() => timefilter.getAbsoluteTime()); - }, - }); - - return () => { - timeUpdateSubscription.unsubscribe(); - }; - }, [timefilter]); - - const setTimeRangeMemoized: React.Dispatch> = useCallback( - (nextOrCallback) => { - const val = - typeof nextOrCallback === 'function' - ? nextOrCallback(timefilter.getTime()) - : nextOrCallback; - - timefilter.setTime(val); - }, - [timefilter] - ); - - const asEpoch = useMemo(() => { - return { - start: new Date(absoluteTimeRange.from).getTime(), - end: new Date(absoluteTimeRange.to).getTime(), - }; - }, [absoluteTimeRange]); - - return { - timeRange, - absoluteTimeRange: asEpoch, - setTimeRange: setTimeRangeMemoized, - }; -} diff --git a/x-pack/solutions/observability/plugins/apm/public/components/app/metrics/static_dashboard/dashboards/opentelemetry_dotnet.json b/x-pack/solutions/observability/plugins/apm/public/components/app/metrics/static_dashboard/dashboards/opentelemetry_dotnet.json index 2862bf0a586d7..61a1ddeb45262 100644 --- a/x-pack/solutions/observability/plugins/apm/public/components/app/metrics/static_dashboard/dashboards/opentelemetry_dotnet.json +++ b/x-pack/solutions/observability/plugins/apm/public/components/app/metrics/static_dashboard/dashboards/opentelemetry_dotnet.json @@ -1 +1 @@ -{"attributes":{"controlGroupInput":{"chainingSystem":"HIERARCHICAL","controlStyle":"oneLine","ignoreParentSettingsJSON":"{\"ignoreFilters\":false,\"ignoreQuery\":false,\"ignoreTimerange\":false,\"ignoreValidations\":false}","panelsJSON":"{\"2be66584-9de4-4a36-ba54-bfdd1b4ccfb4\":{\"type\":\"optionsListControl\",\"order\":0,\"grow\":true,\"width\":\"medium\",\"explicitInput\":{\"id\":\"2be66584-9de4-4a36-ba54-bfdd1b4ccfb4\",\"fieldName\":\"service.node.name\",\"title\":\"Instance\",\"grow\":true,\"width\":\"medium\",\"searchTechnique\":\"prefix\",\"selectedOptions\":[],\"existsSelected\":true,\"enhancements\":{}}}}"},"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}"},"optionsJSON":"{\"useMargins\":true,\"syncColors\":false,\"syncCursor\":true,\"syncTooltips\":false,\"hidePanelTitles\":false}","panelsJSON":"[{\"type\":\"lens\",\"gridData\":{\"x\":0,\"y\":0,\"w\":48,\"h\":8,\"i\":\"ea9f86f0-ff73-4c92-9b93-41baebdcffab\"},\"panelIndex\":\"ea9f86f0-ff73-4c92-9b93-41baebdcffab\",\"embeddableConfig\":{\"attributes\":{\"title\":\"\",\"visualizationType\":\"lnsDatatable\",\"type\":\"lens\",\"references\":[{\"type\":\"index-pattern\",\"id\":\"APM_STATIC_DATA_VIEW_ID\",\"name\":\"indexpattern-datasource-layer-1ba88117-6e95-46e2-8667-e0bc15145182\"}],\"state\":{\"visualization\":{\"columns\":[{\"columnId\":\"d5553b2b-25e9-4b94-9697-f04885f4a067\",\"isTransposed\":false,\"isMetric\":false,\"alignment\":\"left\",\"summaryRow\":\"none\",\"width\":547.5714285714286},{\"columnId\":\"b3da070f-3463-4990-b257-40ac399bec87\",\"isTransposed\":false,\"isMetric\":true,\"colorMode\":\"none\",\"hidden\":false,\"alignment\":\"left\",\"summaryRow\":\"avg\",\"width\":135.73809523809527},{\"columnId\":\"a7f6a205-1e8f-4b64-b745-efe20c2c6545\",\"isTransposed\":false,\"isMetric\":true,\"alignment\":\"left\",\"summaryRow\":\"sum\",\"width\":143.93809523809523},{\"columnId\":\"2bbcd9e9-15ff-42c1-98a8-65a5b9b4e4c5\",\"isTransposed\":false,\"isMetric\":true,\"alignment\":\"left\",\"summaryRow\":\"sum\",\"width\":142.68809523809523},{\"columnId\":\"9f3d67e3-0513-468e-b9b2-6d8780dac3e0\",\"isTransposed\":false,\"isMetric\":true,\"alignment\":\"left\",\"summaryRow\":\"sum\",\"width\":163.18809523809523},{\"columnId\":\"21bdcb2d-cee4-4dd9-84cb-5031f073bf85\",\"isTransposed\":false,\"isMetric\":true,\"alignment\":\"left\",\"width\":183.68809523809523}],\"layerId\":\"1ba88117-6e95-46e2-8667-e0bc15145182\",\"layerType\":\"data\",\"paging\":{\"size\":10,\"enabled\":true}},\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filters\":[],\"datasourceStates\":{\"formBased\":{\"layers\":{\"1ba88117-6e95-46e2-8667-e0bc15145182\":{\"columns\":{\"d5553b2b-25e9-4b94-9697-f04885f4a067\":{\"label\":\"Host + Service instance\",\"dataType\":\"string\",\"operationType\":\"terms\",\"scale\":\"ordinal\",\"sourceField\":\"host.name\",\"isBucketed\":true,\"params\":{\"size\":25,\"orderBy\":{\"type\":\"alphabetical\",\"fallback\":false},\"orderDirection\":\"asc\",\"otherBucket\":true,\"missingBucket\":false,\"parentFormat\":{\"id\":\"multi_terms\"},\"include\":[],\"exclude\":[],\"includeIsRegex\":false,\"excludeIsRegex\":false,\"secondaryFields\":[\"service.node.name\"]},\"customLabel\":true},\"b3da070f-3463-4990-b257-40ac399bec87\":{\"label\":\"Memory usage\",\"dataType\":\"number\",\"operationType\":\"last_value\",\"isBucketed\":false,\"scale\":\"ratio\",\"sourceField\":\"process.memory.usage\",\"filter\":{\"query\":\"\\\"process.memory.usage\\\": *\",\"language\":\"kuery\"},\"params\":{\"sortField\":\"@timestamp\",\"format\":{\"id\":\"bytes\",\"params\":{\"decimals\":0}}},\"customLabel\":true},\"a7f6a205-1e8f-4b64-b745-efe20c2c6545\":{\"label\":\"Gen 0 collections\",\"dataType\":\"number\",\"operationType\":\"last_value\",\"isBucketed\":false,\"scale\":\"ratio\",\"sourceField\":\"process.runtime.dotnet.gc.collections.count\",\"filter\":{\"query\":\"\\\"process.runtime.dotnet.gc.collections.count\\\": * AND labels.generation : \\\"gen0\\\" \",\"language\":\"kuery\"},\"params\":{\"sortField\":\"@timestamp\"},\"customLabel\":true},\"2bbcd9e9-15ff-42c1-98a8-65a5b9b4e4c5\":{\"label\":\"Gen 1 collections\",\"dataType\":\"number\",\"operationType\":\"last_value\",\"isBucketed\":false,\"scale\":\"ratio\",\"sourceField\":\"process.runtime.dotnet.gc.collections.count\",\"filter\":{\"query\":\"\\\"process.runtime.dotnet.gc.collections.count\\\": * AND labels.generation : \\\"gen1\\\" \",\"language\":\"kuery\"},\"params\":{\"sortField\":\"@timestamp\"},\"customLabel\":true},\"9f3d67e3-0513-468e-b9b2-6d8780dac3e0\":{\"label\":\"Gen 2 collections\",\"dataType\":\"number\",\"operationType\":\"last_value\",\"isBucketed\":false,\"scale\":\"ratio\",\"sourceField\":\"process.runtime.dotnet.gc.collections.count\",\"filter\":{\"query\":\"\\\"process.runtime.dotnet.gc.collections.count\\\": * AND labels.generation : \\\"gen2\\\" \",\"language\":\"kuery\"},\"params\":{\"sortField\":\"@timestamp\"},\"customLabel\":true},\"21bdcb2d-cee4-4dd9-84cb-5031f073bf85\":{\"label\":\"Managed threads\",\"dataType\":\"number\",\"operationType\":\"last_value\",\"isBucketed\":false,\"scale\":\"ratio\",\"sourceField\":\"process.runtime.dotnet.thread_pool.threads.count\",\"filter\":{\"query\":\"\\\"process.runtime.dotnet.thread_pool.threads.count\\\": *\",\"language\":\"kuery\"},\"params\":{\"sortField\":\"@timestamp\"},\"customLabel\":true}},\"columnOrder\":[\"d5553b2b-25e9-4b94-9697-f04885f4a067\",\"21bdcb2d-cee4-4dd9-84cb-5031f073bf85\",\"b3da070f-3463-4990-b257-40ac399bec87\",\"a7f6a205-1e8f-4b64-b745-efe20c2c6545\",\"2bbcd9e9-15ff-42c1-98a8-65a5b9b4e4c5\",\"9f3d67e3-0513-468e-b9b2-6d8780dac3e0\"],\"sampling\":1,\"ignoreGlobalFilters\":false,\"incompleteColumns\":{},\"indexPatternId\":\"apm_static_data_view_id_default\"}},\"currentIndexPatternId\":\"apm_static_data_view_id_default\"},\"indexpattern\":{\"layers\":{}},\"textBased\":{\"layers\":{}}},\"internalReferences\":[],\"adHocDataViews\":{}}},\"hidePanelTitles\":true,\"enhancements\":{}},\"title\":\"\"},{\"type\":\"lens\",\"gridData\":{\"x\":0,\"y\":8,\"w\":25,\"h\":16,\"i\":\"d0991248-2fad-4f28-bedc-b8723bc45a81\"},\"panelIndex\":\"d0991248-2fad-4f28-bedc-b8723bc45a81\",\"embeddableConfig\":{\"attributes\":{\"title\":\"\",\"description\":\"The amount of physical memory allocated for this process.\",\"visualizationType\":\"lnsXY\",\"type\":\"lens\",\"references\":[{\"type\":\"index-pattern\",\"id\":\"APM_STATIC_DATA_VIEW_ID\",\"name\":\"indexpattern-datasource-layer-961b1efd-6f0d-41e4-a72b-5d66237d212b\"}],\"state\":{\"visualization\":{\"legend\":{\"isVisible\":true,\"position\":\"bottom\",\"showSingleSeries\":true},\"valueLabels\":\"hide\",\"fittingFunction\":\"None\",\"yTitle\":\"Allocated physical memory\",\"axisTitlesVisibilitySettings\":{\"x\":false,\"yLeft\":false,\"yRight\":true},\"tickLabelsVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"labelsOrientation\":{\"x\":0,\"yLeft\":0,\"yRight\":0},\"gridlinesVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"preferredSeriesType\":\"bar_stacked\",\"layers\":[{\"layerId\":\"961b1efd-6f0d-41e4-a72b-5d66237d212b\",\"accessors\":[\"81968f1a-1c2f-46cb-8276-3dca900342e9\",\"54c0cda3-76f3-4b75-9fe1-2265fa68993c\"],\"position\":\"top\",\"seriesType\":\"line\",\"showGridlines\":false,\"layerType\":\"data\",\"colorMapping\":{\"assignments\":[],\"specialAssignments\":[{\"rule\":{\"type\":\"other\"},\"color\":{\"type\":\"loop\"},\"touched\":false}],\"paletteId\":\"eui_amsterdam_color_blind\",\"colorMode\":{\"type\":\"categorical\"}},\"xAccessor\":\"2405efa8-e18d-426f-822f-3a4551bf97d2\",\"yConfig\":[]}]},\"query\":{\"query\":\"agent.name: \\\"opentelemetry/dotnet\\\" \",\"language\":\"kuery\"},\"filters\":[],\"datasourceStates\":{\"formBased\":{\"layers\":{\"961b1efd-6f0d-41e4-a72b-5d66237d212b\":{\"columns\":{\"2405efa8-e18d-426f-822f-3a4551bf97d2\":{\"label\":\"@timestamp\",\"dataType\":\"date\",\"operationType\":\"date_histogram\",\"sourceField\":\"@timestamp\",\"isBucketed\":true,\"scale\":\"interval\",\"params\":{\"interval\":\"auto\",\"includeEmptyRows\":true,\"dropPartials\":false}},\"81968f1a-1c2f-46cb-8276-3dca900342e9\":{\"label\":\"Average\",\"dataType\":\"number\",\"operationType\":\"average\",\"sourceField\":\"process.memory.usage\",\"isBucketed\":false,\"scale\":\"ratio\",\"params\":{\"format\":{\"id\":\"bytes\",\"params\":{\"decimals\":0}},\"emptyAsNull\":true},\"customLabel\":true},\"54c0cda3-76f3-4b75-9fe1-2265fa68993c\":{\"label\":\"Max\",\"dataType\":\"number\",\"operationType\":\"max\",\"sourceField\":\"process.memory.usage\",\"isBucketed\":false,\"scale\":\"ratio\",\"params\":{\"emptyAsNull\":true,\"format\":{\"id\":\"bytes\",\"params\":{\"decimals\":0}}},\"customLabel\":true}},\"columnOrder\":[\"2405efa8-e18d-426f-822f-3a4551bf97d2\",\"81968f1a-1c2f-46cb-8276-3dca900342e9\",\"54c0cda3-76f3-4b75-9fe1-2265fa68993c\"],\"incompleteColumns\":{},\"sampling\":1,\"indexPatternId\":\"apm_static_data_view_id_default\"}},\"currentIndexPatternId\":\"apm_static_data_view_id_default\"},\"indexpattern\":{\"layers\":{}},\"textBased\":{\"layers\":{}}},\"internalReferences\":[],\"adHocDataViews\":{}}},\"description\":\"The amount of physical memory allocated to the .NET process.\",\"enhancements\":{}},\"title\":\"Allocated physical memory\"},{\"type\":\"lens\",\"gridData\":{\"x\":25,\"y\":8,\"w\":23,\"h\":16,\"i\":\"0bf63f9e-8797-4249-85f7-9407c165f732\"},\"panelIndex\":\"0bf63f9e-8797-4249-85f7-9407c165f732\",\"embeddableConfig\":{\"attributes\":{\"title\":\"\",\"visualizationType\":\"lnsXY\",\"type\":\"lens\",\"references\":[{\"type\":\"index-pattern\",\"id\":\"APM_STATIC_DATA_VIEW_ID\",\"name\":\"indexpattern-datasource-layer-eb4e02de-8962-40fa-9e75-ff25862ca5f3\"}],\"state\":{\"visualization\":{\"legend\":{\"isVisible\":true,\"position\":\"right\",\"maxLines\":1},\"valueLabels\":\"hide\",\"fittingFunction\":\"None\",\"axisTitlesVisibilitySettings\":{\"x\":false,\"yLeft\":false,\"yRight\":true},\"tickLabelsVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"labelsOrientation\":{\"x\":0,\"yLeft\":0,\"yRight\":0},\"gridlinesVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"preferredSeriesType\":\"line\",\"layers\":[{\"layerId\":\"eb4e02de-8962-40fa-9e75-ff25862ca5f3\",\"accessors\":[\"cced3ff5-cfa3-4804-93be-c8d893114e93\",\"211c2cbb-033a-454b-b379-186b8d7b247e\",\"5ac14ba1-f6d4-4015-96d1-aeaa3ed63aec\",\"938252b1-14ec-4a64-b3e5-108e096f116b\",\"1e106c40-c845-4368-baaa-4057e1d29d92\"],\"position\":\"top\",\"seriesType\":\"line\",\"showGridlines\":false,\"layerType\":\"data\",\"colorMapping\":{\"assignments\":[],\"specialAssignments\":[{\"rule\":{\"type\":\"other\"},\"color\":{\"type\":\"loop\"},\"touched\":false}],\"paletteId\":\"eui_amsterdam_color_blind\",\"colorMode\":{\"type\":\"categorical\"}},\"xAccessor\":\"cb7bae9c-fdc5-44a8-8ee8-c0762595511c\"}]},\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filters\":[],\"datasourceStates\":{\"formBased\":{\"layers\":{\"eb4e02de-8962-40fa-9e75-ff25862ca5f3\":{\"columns\":{\"cb7bae9c-fdc5-44a8-8ee8-c0762595511c\":{\"label\":\"@timestamp\",\"dataType\":\"date\",\"operationType\":\"date_histogram\",\"sourceField\":\"@timestamp\",\"isBucketed\":true,\"scale\":\"interval\",\"params\":{\"interval\":\"auto\",\"includeEmptyRows\":true,\"dropPartials\":false}},\"cced3ff5-cfa3-4804-93be-c8d893114e93\":{\"label\":\"Gen 0\",\"dataType\":\"number\",\"operationType\":\"average\",\"sourceField\":\"process.runtime.dotnet.gc.heap.size\",\"isBucketed\":false,\"scale\":\"ratio\",\"filter\":{\"query\":\"labels.generation : \\\"gen0\\\" \",\"language\":\"kuery\"},\"params\":{\"format\":{\"id\":\"bytes\",\"params\":{\"decimals\":2}},\"emptyAsNull\":true},\"customLabel\":true},\"211c2cbb-033a-454b-b379-186b8d7b247e\":{\"label\":\"Gen 1\",\"dataType\":\"number\",\"operationType\":\"average\",\"sourceField\":\"process.runtime.dotnet.gc.heap.size\",\"isBucketed\":false,\"scale\":\"ratio\",\"filter\":{\"query\":\"labels.generation : \\\"gen1\\\" \",\"language\":\"kuery\"},\"params\":{\"emptyAsNull\":true,\"format\":{\"id\":\"bytes\",\"params\":{\"decimals\":2}}},\"customLabel\":true},\"5ac14ba1-f6d4-4015-96d1-aeaa3ed63aec\":{\"label\":\"Gen 2\",\"dataType\":\"number\",\"operationType\":\"average\",\"sourceField\":\"process.runtime.dotnet.gc.heap.size\",\"isBucketed\":false,\"scale\":\"ratio\",\"filter\":{\"query\":\"labels.generation : \\\"gen2\\\" \",\"language\":\"kuery\"},\"params\":{\"emptyAsNull\":true,\"format\":{\"id\":\"bytes\",\"params\":{\"decimals\":2}}},\"customLabel\":true},\"938252b1-14ec-4a64-b3e5-108e096f116b\":{\"label\":\"LOH\",\"dataType\":\"number\",\"operationType\":\"average\",\"sourceField\":\"process.runtime.dotnet.gc.heap.size\",\"isBucketed\":false,\"scale\":\"ratio\",\"filter\":{\"query\":\"labels.generation:\\\"loh\\\" \",\"language\":\"kuery\"},\"params\":{\"emptyAsNull\":true,\"format\":{\"id\":\"bytes\",\"params\":{\"decimals\":2}}},\"customLabel\":true},\"1e106c40-c845-4368-baaa-4057e1d29d92\":{\"label\":\"POH\",\"dataType\":\"number\",\"operationType\":\"median\",\"sourceField\":\"process.runtime.dotnet.gc.heap.size\",\"isBucketed\":false,\"scale\":\"ratio\",\"filter\":{\"query\":\"labels.generation : \\\"poh\\\" \",\"language\":\"kuery\"},\"params\":{\"emptyAsNull\":true,\"format\":{\"id\":\"bytes\",\"params\":{\"decimals\":2}}},\"customLabel\":true}},\"columnOrder\":[\"cb7bae9c-fdc5-44a8-8ee8-c0762595511c\",\"cced3ff5-cfa3-4804-93be-c8d893114e93\",\"211c2cbb-033a-454b-b379-186b8d7b247e\",\"5ac14ba1-f6d4-4015-96d1-aeaa3ed63aec\",\"938252b1-14ec-4a64-b3e5-108e096f116b\",\"1e106c40-c845-4368-baaa-4057e1d29d92\"],\"incompleteColumns\":{},\"sampling\":1,\"indexPatternId\":\"apm_static_data_view_id_default\"}},\"currentIndexPatternId\":\"apm_static_data_view_id_default\"},\"indexpattern\":{\"layers\":{}},\"textBased\":{\"layers\":{}}},\"internalReferences\":[],\"adHocDataViews\":{}}},\"enhancements\":{}},\"title\":\"Average GC heap size by generation\"}]","timeRestore":false,"title":".NET OpenTelemetry Runtime Metrics","version":1},"coreMigrationVersion":"8.8.0","created_at":"2024-05-17T13:46:01.942Z","id":"c65be603-2c73-4417-972c-033586a56102","managed":false,"references":[{"id":"apm_static_data_view_id_default","name":"ea9f86f0-ff73-4c92-9b93-41baebdcffab:indexpattern-datasource-layer-1ba88117-6e95-46e2-8667-e0bc15145182","type":"index-pattern"},{"id":"APM_STATIC_DATA_VIEW_ID","name":"d0991248-2fad-4f28-bedc-b8723bc45a81:indexpattern-datasource-layer-961b1efd-6f0d-41e4-a72b-5d66237d212b","type":"index-pattern"},{"id":"APM_STATIC_DATA_VIEW_ID","name":"0bf63f9e-8797-4249-85f7-9407c165f732:indexpattern-datasource-layer-eb4e02de-8962-40fa-9e75-ff25862ca5f3","type":"index-pattern"},{"id":"APM_STATIC_DATA_VIEW_ID","name":"controlGroup_2be66584-9de4-4a36-ba54-bfdd1b4ccfb4:optionsListDataView","type":"index-pattern"}],"type":"dashboard","typeMigrationVersion":"8.9.0","updated_at":"2024-05-17T13:46:01.942Z","version":"WzM0NTMsN10="} \ No newline at end of file +{"attributes":{"controlGroupInput":{"chainingSystem":"HIERARCHICAL","controlStyle":"oneLine","ignoreParentSettingsJSON":"{\"ignoreFilters\":false,\"ignoreQuery\":false,\"ignoreTimerange\":false,\"ignoreValidations\":false}","panelsJSON":"{\"2be66584-9de4-4a36-ba54-bfdd1b4ccfb4\":{\"type\":\"optionsListControl\",\"order\":0,\"grow\":true,\"width\":\"medium\",\"explicitInput\":{\"id\":\"2be66584-9de4-4a36-ba54-bfdd1b4ccfb4\",\"fieldName\":\"service.node.name\",\"title\":\"Instance\",\"grow\":true,\"width\":\"medium\",\"searchTechnique\":\"prefix\",\"selectedOptions\":[],\"existsSelected\":true,\"enhancements\":{}}}}"},"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}"},"optionsJSON":"{\"useMargins\":true,\"syncColors\":false,\"syncCursor\":true,\"syncTooltips\":false,\"hidePanelTitles\":false}","panelsJSON":"[{\"type\":\"lens\",\"gridData\":{\"x\":0,\"y\":0,\"w\":48,\"h\":8,\"i\":\"ea9f86f0-ff73-4c92-9b93-41baebdcffab\"},\"panelIndex\":\"ea9f86f0-ff73-4c92-9b93-41baebdcffab\",\"embeddableConfig\":{\"attributes\":{\"title\":\"\",\"visualizationType\":\"lnsDatatable\",\"type\":\"lens\",\"references\":[{\"type\":\"index-pattern\",\"id\":\"APM_STATIC_DATA_VIEW_ID\",\"name\":\"indexpattern-datasource-layer-1ba88117-6e95-46e2-8667-e0bc15145182\"}],\"state\":{\"visualization\":{\"columns\":[{\"columnId\":\"d5553b2b-25e9-4b94-9697-f04885f4a067\",\"isTransposed\":false,\"isMetric\":false,\"alignment\":\"left\",\"summaryRow\":\"none\",\"width\":547.5714285714286},{\"columnId\":\"b3da070f-3463-4990-b257-40ac399bec87\",\"isTransposed\":false,\"isMetric\":true,\"colorMode\":\"none\",\"hidden\":false,\"alignment\":\"left\",\"summaryRow\":\"avg\",\"width\":135.73809523809527},{\"columnId\":\"a7f6a205-1e8f-4b64-b745-efe20c2c6545\",\"isTransposed\":false,\"isMetric\":true,\"alignment\":\"left\",\"summaryRow\":\"sum\",\"width\":143.93809523809523},{\"columnId\":\"2bbcd9e9-15ff-42c1-98a8-65a5b9b4e4c5\",\"isTransposed\":false,\"isMetric\":true,\"alignment\":\"left\",\"summaryRow\":\"sum\",\"width\":142.68809523809523},{\"columnId\":\"9f3d67e3-0513-468e-b9b2-6d8780dac3e0\",\"isTransposed\":false,\"isMetric\":true,\"alignment\":\"left\",\"summaryRow\":\"sum\",\"width\":163.18809523809523},{\"columnId\":\"21bdcb2d-cee4-4dd9-84cb-5031f073bf85\",\"isTransposed\":false,\"isMetric\":true,\"alignment\":\"left\",\"width\":183.68809523809523}],\"layerId\":\"1ba88117-6e95-46e2-8667-e0bc15145182\",\"layerType\":\"data\",\"paging\":{\"size\":10,\"enabled\":true}},\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filters\":[],\"datasourceStates\":{\"formBased\":{\"layers\":{\"1ba88117-6e95-46e2-8667-e0bc15145182\":{\"columns\":{\"d5553b2b-25e9-4b94-9697-f04885f4a067\":{\"label\":\"Host + Service instance\",\"dataType\":\"string\",\"operationType\":\"terms\",\"scale\":\"ordinal\",\"sourceField\":\"host.name\",\"isBucketed\":true,\"params\":{\"size\":25,\"orderBy\":{\"type\":\"alphabetical\",\"fallback\":false},\"orderDirection\":\"asc\",\"otherBucket\":true,\"missingBucket\":false,\"parentFormat\":{\"id\":\"multi_terms\"},\"include\":[],\"exclude\":[],\"includeIsRegex\":false,\"excludeIsRegex\":false,\"secondaryFields\":[\"service.node.name\"]},\"customLabel\":true},\"b3da070f-3463-4990-b257-40ac399bec87\":{\"label\":\"Memory usage\",\"dataType\":\"number\",\"operationType\":\"last_value\",\"isBucketed\":false,\"scale\":\"ratio\",\"sourceField\":\"process.memory.usage\",\"filter\":{\"query\":\"\\\"process.memory.usage\\\": *\",\"language\":\"kuery\"},\"params\":{\"sortField\":\"@timestamp\",\"format\":{\"id\":\"bytes\",\"params\":{\"decimals\":0}}},\"customLabel\":true},\"a7f6a205-1e8f-4b64-b745-efe20c2c6545\":{\"label\":\"Gen 0 collections\",\"dataType\":\"number\",\"operationType\":\"last_value\",\"isBucketed\":false,\"scale\":\"ratio\",\"sourceField\":\"process.runtime.dotnet.gc.collections.count\",\"filter\":{\"query\":\"\\\"process.runtime.dotnet.gc.collections.count\\\": * AND labels.generation : \\\"gen0\\\" \",\"language\":\"kuery\"},\"params\":{\"sortField\":\"@timestamp\"},\"customLabel\":true},\"2bbcd9e9-15ff-42c1-98a8-65a5b9b4e4c5\":{\"label\":\"Gen 1 collections\",\"dataType\":\"number\",\"operationType\":\"last_value\",\"isBucketed\":false,\"scale\":\"ratio\",\"sourceField\":\"process.runtime.dotnet.gc.collections.count\",\"filter\":{\"query\":\"\\\"process.runtime.dotnet.gc.collections.count\\\": * AND labels.generation : \\\"gen1\\\" \",\"language\":\"kuery\"},\"params\":{\"sortField\":\"@timestamp\"},\"customLabel\":true},\"9f3d67e3-0513-468e-b9b2-6d8780dac3e0\":{\"label\":\"Gen 2 collections\",\"dataType\":\"number\",\"operationType\":\"last_value\",\"isBucketed\":false,\"scale\":\"ratio\",\"sourceField\":\"process.runtime.dotnet.gc.collections.count\",\"filter\":{\"query\":\"\\\"process.runtime.dotnet.gc.collections.count\\\": * AND labels.generation : \\\"gen2\\\" \",\"language\":\"kuery\"},\"params\":{\"sortField\":\"@timestamp\"},\"customLabel\":true},\"21bdcb2d-cee4-4dd9-84cb-5031f073bf85\":{\"label\":\"Managed threads\",\"dataType\":\"number\",\"operationType\":\"last_value\",\"isBucketed\":false,\"scale\":\"ratio\",\"sourceField\":\"process.runtime.dotnet.thread_pool.threads.count\",\"filter\":{\"query\":\"\\\"process.runtime.dotnet.thread_pool.threads.count\\\": *\",\"language\":\"kuery\"},\"params\":{\"sortField\":\"@timestamp\"},\"customLabel\":true}},\"columnOrder\":[\"d5553b2b-25e9-4b94-9697-f04885f4a067\",\"21bdcb2d-cee4-4dd9-84cb-5031f073bf85\",\"b3da070f-3463-4990-b257-40ac399bec87\",\"a7f6a205-1e8f-4b64-b745-efe20c2c6545\",\"2bbcd9e9-15ff-42c1-98a8-65a5b9b4e4c5\",\"9f3d67e3-0513-468e-b9b2-6d8780dac3e0\"],\"sampling\":1,\"ignoreGlobalFilters\":false,\"incompleteColumns\":{},\"indexPatternId\":\"apm_static_data_view_id_default\"}},\"currentIndexPatternId\":\"apm_static_data_view_id_default\"},\"indexpattern\":{\"layers\":{}},\"textBased\":{\"layers\":{}}},\"internalReferences\":[],\"adHocDataViews\":{}}},\"hidePanelTitles\":true,\"enhancements\":{}},\"title\":\"\"},{\"type\":\"lens\",\"gridData\":{\"x\":0,\"y\":8,\"w\":25,\"h\":16,\"i\":\"d0991248-2fad-4f28-bedc-b8723bc45a81\"},\"panelIndex\":\"d0991248-2fad-4f28-bedc-b8723bc45a81\",\"embeddableConfig\":{\"attributes\":{\"title\":\"\",\"description\":\"The amount of physical memory allocated for this process.\",\"visualizationType\":\"lnsXY\",\"type\":\"lens\",\"references\":[{\"type\":\"index-pattern\",\"id\":\"APM_STATIC_DATA_VIEW_ID\",\"name\":\"indexpattern-datasource-layer-961b1efd-6f0d-41e4-a72b-5d66237d212b\"}],\"state\":{\"visualization\":{\"legend\":{\"isVisible\":true,\"position\":\"bottom\",\"showSingleSeries\":true},\"valueLabels\":\"hide\",\"fittingFunction\":\"None\",\"yTitle\":\"Allocated physical memory\",\"axisTitlesVisibilitySettings\":{\"x\":false,\"yLeft\":false,\"yRight\":true},\"tickLabelsVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"labelsOrientation\":{\"x\":0,\"yLeft\":0,\"yRight\":0},\"gridlinesVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"preferredSeriesType\":\"bar_stacked\",\"layers\":[{\"layerId\":\"961b1efd-6f0d-41e4-a72b-5d66237d212b\",\"accessors\":[\"81968f1a-1c2f-46cb-8276-3dca900342e9\",\"54c0cda3-76f3-4b75-9fe1-2265fa68993c\"],\"position\":\"top\",\"seriesType\":\"line\",\"showGridlines\":false,\"layerType\":\"data\",\"colorMapping\":{\"assignments\":[],\"specialAssignments\":[{\"rule\":{\"type\":\"other\"},\"color\":{\"type\":\"loop\"},\"touched\":false}],\"paletteId\":\"eui_amsterdam_color_blind\",\"colorMode\":{\"type\":\"categorical\"}},\"xAccessor\":\"2405efa8-e18d-426f-822f-3a4551bf97d2\",\"yConfig\":[]}]},\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filters\":[],\"datasourceStates\":{\"formBased\":{\"layers\":{\"961b1efd-6f0d-41e4-a72b-5d66237d212b\":{\"columns\":{\"2405efa8-e18d-426f-822f-3a4551bf97d2\":{\"label\":\"@timestamp\",\"dataType\":\"date\",\"operationType\":\"date_histogram\",\"sourceField\":\"@timestamp\",\"isBucketed\":true,\"scale\":\"interval\",\"params\":{\"interval\":\"auto\",\"includeEmptyRows\":true,\"dropPartials\":false}},\"81968f1a-1c2f-46cb-8276-3dca900342e9\":{\"label\":\"Average\",\"dataType\":\"number\",\"operationType\":\"average\",\"sourceField\":\"process.memory.usage\",\"isBucketed\":false,\"scale\":\"ratio\",\"params\":{\"format\":{\"id\":\"bytes\",\"params\":{\"decimals\":0}},\"emptyAsNull\":true},\"customLabel\":true},\"54c0cda3-76f3-4b75-9fe1-2265fa68993c\":{\"label\":\"Max\",\"dataType\":\"number\",\"operationType\":\"max\",\"sourceField\":\"process.memory.usage\",\"isBucketed\":false,\"scale\":\"ratio\",\"params\":{\"emptyAsNull\":true,\"format\":{\"id\":\"bytes\",\"params\":{\"decimals\":0}}},\"customLabel\":true}},\"columnOrder\":[\"2405efa8-e18d-426f-822f-3a4551bf97d2\",\"81968f1a-1c2f-46cb-8276-3dca900342e9\",\"54c0cda3-76f3-4b75-9fe1-2265fa68993c\"],\"incompleteColumns\":{},\"sampling\":1,\"indexPatternId\":\"apm_static_data_view_id_default\"}},\"currentIndexPatternId\":\"apm_static_data_view_id_default\"},\"indexpattern\":{\"layers\":{}},\"textBased\":{\"layers\":{}}},\"internalReferences\":[],\"adHocDataViews\":{}}},\"description\":\"The amount of physical memory allocated to the .NET process.\",\"enhancements\":{}},\"title\":\"Allocated physical memory\"},{\"type\":\"lens\",\"gridData\":{\"x\":25,\"y\":8,\"w\":23,\"h\":16,\"i\":\"0bf63f9e-8797-4249-85f7-9407c165f732\"},\"panelIndex\":\"0bf63f9e-8797-4249-85f7-9407c165f732\",\"embeddableConfig\":{\"attributes\":{\"title\":\"\",\"visualizationType\":\"lnsXY\",\"type\":\"lens\",\"references\":[{\"type\":\"index-pattern\",\"id\":\"APM_STATIC_DATA_VIEW_ID\",\"name\":\"indexpattern-datasource-layer-eb4e02de-8962-40fa-9e75-ff25862ca5f3\"}],\"state\":{\"visualization\":{\"legend\":{\"isVisible\":true,\"position\":\"right\",\"maxLines\":1},\"valueLabels\":\"hide\",\"fittingFunction\":\"None\",\"axisTitlesVisibilitySettings\":{\"x\":false,\"yLeft\":false,\"yRight\":true},\"tickLabelsVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"labelsOrientation\":{\"x\":0,\"yLeft\":0,\"yRight\":0},\"gridlinesVisibilitySettings\":{\"x\":true,\"yLeft\":true,\"yRight\":true},\"preferredSeriesType\":\"line\",\"layers\":[{\"layerId\":\"eb4e02de-8962-40fa-9e75-ff25862ca5f3\",\"accessors\":[\"cced3ff5-cfa3-4804-93be-c8d893114e93\",\"211c2cbb-033a-454b-b379-186b8d7b247e\",\"5ac14ba1-f6d4-4015-96d1-aeaa3ed63aec\",\"938252b1-14ec-4a64-b3e5-108e096f116b\",\"1e106c40-c845-4368-baaa-4057e1d29d92\"],\"position\":\"top\",\"seriesType\":\"line\",\"showGridlines\":false,\"layerType\":\"data\",\"colorMapping\":{\"assignments\":[],\"specialAssignments\":[{\"rule\":{\"type\":\"other\"},\"color\":{\"type\":\"loop\"},\"touched\":false}],\"paletteId\":\"eui_amsterdam_color_blind\",\"colorMode\":{\"type\":\"categorical\"}},\"xAccessor\":\"cb7bae9c-fdc5-44a8-8ee8-c0762595511c\"}]},\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filters\":[],\"datasourceStates\":{\"formBased\":{\"layers\":{\"eb4e02de-8962-40fa-9e75-ff25862ca5f3\":{\"columns\":{\"cb7bae9c-fdc5-44a8-8ee8-c0762595511c\":{\"label\":\"@timestamp\",\"dataType\":\"date\",\"operationType\":\"date_histogram\",\"sourceField\":\"@timestamp\",\"isBucketed\":true,\"scale\":\"interval\",\"params\":{\"interval\":\"auto\",\"includeEmptyRows\":true,\"dropPartials\":false}},\"cced3ff5-cfa3-4804-93be-c8d893114e93\":{\"label\":\"Gen 0\",\"dataType\":\"number\",\"operationType\":\"average\",\"sourceField\":\"process.runtime.dotnet.gc.heap.size\",\"isBucketed\":false,\"scale\":\"ratio\",\"filter\":{\"query\":\"labels.generation : \\\"gen0\\\" \",\"language\":\"kuery\"},\"params\":{\"format\":{\"id\":\"bytes\",\"params\":{\"decimals\":2}},\"emptyAsNull\":true},\"customLabel\":true},\"211c2cbb-033a-454b-b379-186b8d7b247e\":{\"label\":\"Gen 1\",\"dataType\":\"number\",\"operationType\":\"average\",\"sourceField\":\"process.runtime.dotnet.gc.heap.size\",\"isBucketed\":false,\"scale\":\"ratio\",\"filter\":{\"query\":\"labels.generation : \\\"gen1\\\" \",\"language\":\"kuery\"},\"params\":{\"emptyAsNull\":true,\"format\":{\"id\":\"bytes\",\"params\":{\"decimals\":2}}},\"customLabel\":true},\"5ac14ba1-f6d4-4015-96d1-aeaa3ed63aec\":{\"label\":\"Gen 2\",\"dataType\":\"number\",\"operationType\":\"average\",\"sourceField\":\"process.runtime.dotnet.gc.heap.size\",\"isBucketed\":false,\"scale\":\"ratio\",\"filter\":{\"query\":\"labels.generation : \\\"gen2\\\" \",\"language\":\"kuery\"},\"params\":{\"emptyAsNull\":true,\"format\":{\"id\":\"bytes\",\"params\":{\"decimals\":2}}},\"customLabel\":true},\"938252b1-14ec-4a64-b3e5-108e096f116b\":{\"label\":\"LOH\",\"dataType\":\"number\",\"operationType\":\"average\",\"sourceField\":\"process.runtime.dotnet.gc.heap.size\",\"isBucketed\":false,\"scale\":\"ratio\",\"filter\":{\"query\":\"labels.generation:\\\"loh\\\" \",\"language\":\"kuery\"},\"params\":{\"emptyAsNull\":true,\"format\":{\"id\":\"bytes\",\"params\":{\"decimals\":2}}},\"customLabel\":true},\"1e106c40-c845-4368-baaa-4057e1d29d92\":{\"label\":\"POH\",\"dataType\":\"number\",\"operationType\":\"median\",\"sourceField\":\"process.runtime.dotnet.gc.heap.size\",\"isBucketed\":false,\"scale\":\"ratio\",\"filter\":{\"query\":\"labels.generation : \\\"poh\\\" \",\"language\":\"kuery\"},\"params\":{\"emptyAsNull\":true,\"format\":{\"id\":\"bytes\",\"params\":{\"decimals\":2}}},\"customLabel\":true}},\"columnOrder\":[\"cb7bae9c-fdc5-44a8-8ee8-c0762595511c\",\"cced3ff5-cfa3-4804-93be-c8d893114e93\",\"211c2cbb-033a-454b-b379-186b8d7b247e\",\"5ac14ba1-f6d4-4015-96d1-aeaa3ed63aec\",\"938252b1-14ec-4a64-b3e5-108e096f116b\",\"1e106c40-c845-4368-baaa-4057e1d29d92\"],\"incompleteColumns\":{},\"sampling\":1,\"indexPatternId\":\"apm_static_data_view_id_default\"}},\"currentIndexPatternId\":\"apm_static_data_view_id_default\"},\"indexpattern\":{\"layers\":{}},\"textBased\":{\"layers\":{}}},\"internalReferences\":[],\"adHocDataViews\":{}}},\"enhancements\":{}},\"title\":\"Average GC heap size by generation\"}]","timeRestore":false,"title":".NET OpenTelemetry Runtime Metrics","version":1},"coreMigrationVersion":"8.8.0","created_at":"2024-05-17T13:46:01.942Z","id":"c65be603-2c73-4417-972c-033586a56102","managed":false,"references":[{"id":"apm_static_data_view_id_default","name":"ea9f86f0-ff73-4c92-9b93-41baebdcffab:indexpattern-datasource-layer-1ba88117-6e95-46e2-8667-e0bc15145182","type":"index-pattern"},{"id":"APM_STATIC_DATA_VIEW_ID","name":"d0991248-2fad-4f28-bedc-b8723bc45a81:indexpattern-datasource-layer-961b1efd-6f0d-41e4-a72b-5d66237d212b","type":"index-pattern"},{"id":"APM_STATIC_DATA_VIEW_ID","name":"0bf63f9e-8797-4249-85f7-9407c165f732:indexpattern-datasource-layer-eb4e02de-8962-40fa-9e75-ff25862ca5f3","type":"index-pattern"},{"id":"APM_STATIC_DATA_VIEW_ID","name":"controlGroup_2be66584-9de4-4a36-ba54-bfdd1b4ccfb4:optionsListDataView","type":"index-pattern"}],"type":"dashboard","typeMigrationVersion":"8.9.0","updated_at":"2024-05-17T13:46:01.942Z","version":"WzM0NTMsN10="} \ No newline at end of file diff --git a/x-pack/solutions/observability/plugins/observability/dev_docs/navigation_test_plan.md b/x-pack/solutions/observability/plugins/observability/dev_docs/navigation_test_plan.md new file mode 100644 index 0000000000000..0abcba2f0157f --- /dev/null +++ b/x-pack/solutions/observability/plugins/observability/dev_docs/navigation_test_plan.md @@ -0,0 +1,66 @@ +# Navigation + +## Testing + +Navigation exists in three states for observability: + +1. Classic - Observability is one of several available solutions +2. Solution View - Observability is the solution of focus +3. Serverless - Observability plays a role, but is not the focus + +### Creating necessary environments + +Adding the following labels to your PR will trigger a deploy job in Buildkite: + +``` +ci:cloud-deploy +ci:cloud-persist-deployment +ci:project-deploy-elasticsearch +``` + +The output of the buildkite jobs will display instructions on how to connect to these environments. + +### Test cases + +#### Core navigations + +Each navigation solution has two core parts: side navigation, and breadcrumbs. +The outcome of testing each part assumes the following: + +Side navigation opens and closes correctly, based on the deployment type (classic or solution view / serverless) and solution view. + +- Expect classic view to have all plugins displayed in a single column for the Kibana home page, with the observability nav bar to appear once the user navigates to the solution. + + - Once the user navigates to the observability solution, the nav bar should appear with the obs plugins as outlined in this [plugin file](https://github.com/elastic/kibana/blob/main/x-pack/solutions/observability/plugins/observability/public/plugin.ts). + +- Expect solution view to have a collapsed view of nav sections with headers, with each view visible in a flyout once the header is clicked on. + + - Side nav for solution view should appear as outlined in this [config](https://github.com/elastic/kibana/blob/main/x-pack/solutions/observability/plugins/observability/public/navigation_tree.ts). + +- In serverless, observability plugins will become available in central navigation + + - Side nav for serverless mode should appear as outlined in this [config](https://github.com/elastic/kibana/blob/main/x-pack/solutions/observability/plugins/serverless_observability/public/navigation_tree.ts). + +- Expect breadcrumbs to logically follow the organization of the navigation bar. There are some exceptions, where the first entry under a subheader may act as a default page or route to an external view. Otherwise, for modules such as SLO, Alerts, and Monitors, you should exect the breadcrumbs to lead to: + +``` +Observability -> Module -> Plugin +``` + +or + +``` +Observability -> Plugin -> CRUD Flow +``` + +- Expect all but the final breadcrumb should be blue and clickable. +- Expect all clickable breadcrumbs to lead to a non-empty page. + +#### Other navigation areas + +"Annotations" and "Add data" should render as separate pages. + +#### Other areas to test + +- Expect the side navigation bar to be collapsible. +- App router responds to browser navigation and adheres to browser history. diff --git a/x-pack/solutions/observability/plugins/observability_ai_assistant_app/public/components/nav_control/index.tsx b/x-pack/solutions/observability/plugins/observability_ai_assistant_app/public/components/nav_control/index.tsx index 1d23eb2b19b6c..727f7b80db6b6 100644 --- a/x-pack/solutions/observability/plugins/observability_ai_assistant_app/public/components/nav_control/index.tsx +++ b/x-pack/solutions/observability/plugins/observability_ai_assistant_app/public/components/nav_control/index.tsx @@ -6,8 +6,14 @@ */ import React, { useEffect, useRef, useState } from 'react'; import { useAbortableAsync } from '@kbn/observability-ai-assistant-plugin/public'; -import { EuiButton, EuiButtonEmpty, EuiLoadingSpinner, EuiToolTip } from '@elastic/eui'; -import { css } from '@emotion/react'; +import { + EuiButton, + EuiButtonEmpty, + EuiFlexGroup, + EuiFlexItem, + EuiLoadingSpinner, + EuiToolTip, +} from '@elastic/eui'; import { v4 } from 'uuid'; import useObservable from 'react-use/lib/useObservable'; import { i18n } from '@kbn/i18n'; @@ -20,7 +26,6 @@ import { } from '@kbn/ai-assistant'; import { AssistantIcon } from '@kbn/ai-assistant-icon'; import { useKibana } from '../../hooks/use_kibana'; -import { useTheme } from '../../hooks/use_theme'; import { useNavControlScreenContext } from '../../hooks/use_nav_control_screen_context'; import { SharedProviders } from '../../utils/shared_providers'; import { ObservabilityAIAssistantAppPluginStartDependencies } from '../../types'; @@ -127,16 +132,6 @@ export function NavControl({ isServerless }: { isServerless?: boolean }) { hideConversationList: false, }; - const theme = useTheme(); - - const buttonCss = css` - padding: 0px 8px; - - svg path { - fill: ${theme.colors.darkestShade}; - } - `; - useEffect(() => { const keyboardListener = (event: KeyboardEvent) => { if (event.ctrlKey && event.code === 'Semicolon') { @@ -153,44 +148,45 @@ export function NavControl({ isServerless }: { isServerless?: boolean }) { }; }, [service.conversations]); + const EuiButtonBasicOrEmpty = isServerless ? EuiButtonEmpty : EuiButton; + + const buttonContent: React.ReactNode = ( + + + + + + {i18n.translate('xpack.observabilityAiAssistant.navControl.assistantNavLink', { + defaultMessage: 'AI Assistant', + })} + + + ); + return ( <> - - {isServerless ? ( - { - service.conversations.openNewConversation({ - messages: [], - }); - }} - color="primary" - size="s" - > - {chatService.loading ? : } - - ) : ( - { - service.conversations.openNewConversation({ - messages: [], - }); - }} - color="primary" - size="s" - fullWidth={false} - minWidth={0} - > - {chatService.loading ? : } - + + { + service.conversations.openNewConversation({ + messages: [], + }); + }} + color="primary" + size="s" + > + {chatService.loading ? : buttonContent} + {chatService.value ? ( @@ -221,8 +217,3 @@ export function NavControl({ isServerless }: { isServerless?: boolean }) { ); } - -const buttonLabel = i18n.translate( - 'xpack.observabilityAiAssistant.navControl.openTheAIAssistantPopoverLabel', - { defaultMessage: 'Open the AI Assistant' } -); diff --git a/x-pack/solutions/observability/plugins/observability_ai_assistant_management/public/routes/components/knowledge_base_tab.test.tsx b/x-pack/solutions/observability/plugins/observability_ai_assistant_management/public/routes/components/knowledge_base_tab.test.tsx index 7bdf2c2eacc0d..5f198d4f4e93f 100644 --- a/x-pack/solutions/observability/plugins/observability_ai_assistant_management/public/routes/components/knowledge_base_tab.test.tsx +++ b/x-pack/solutions/observability/plugins/observability_ai_assistant_management/public/routes/components/knowledge_base_tab.test.tsx @@ -52,6 +52,27 @@ describe('KnowledgeBaseTab', () => { }); }); + describe('when the knowledge base status is being fetched', () => { + beforeEach(() => { + useKnowledgeBaseMock.mockReturnValue({ + status: { + value: { + ready: false, + enabled: true, + }, + loading: true, + }, + isInstalling: false, + install: jest.fn(), + }); + }); + + it('should show a loader', () => { + const { getByTestId } = render(); + expect(getByTestId('knowledgeBaseTabLoader')).toBeInTheDocument(); + }); + }); + describe('when the knowledge base is not installed', () => { beforeEach(() => { useKnowledgeBaseMock.mockReturnValue({ diff --git a/x-pack/solutions/observability/plugins/observability_ai_assistant_management/public/routes/components/knowledge_base_tab.tsx b/x-pack/solutions/observability/plugins/observability_ai_assistant_management/public/routes/components/knowledge_base_tab.tsx index f58cf02947498..89c7d78838d63 100644 --- a/x-pack/solutions/observability/plugins/observability_ai_assistant_management/public/routes/components/knowledge_base_tab.tsx +++ b/x-pack/solutions/observability/plugins/observability_ai_assistant_management/public/routes/components/knowledge_base_tab.tsx @@ -21,6 +21,7 @@ import { EuiFlexGroup, EuiFlexItem, EuiIcon, + EuiLoadingSpinner, EuiPopover, EuiScreenReaderOnly, EuiSpacer, @@ -222,6 +223,16 @@ export function KnowledgeBaseTab() { setQuery(e?.currentTarget.value || ''); }; + if (knowledgeBase.status.loading) { + return ( + + + + + + ); + } + return knowledgeBase.status.value?.ready ? ( <> diff --git a/x-pack/solutions/observability/plugins/observability_onboarding/README.md b/x-pack/solutions/observability/plugins/observability_onboarding/README.md index ad29a8a0c90a6..c49614dc5e812 100644 --- a/x-pack/solutions/observability/plugins/observability_onboarding/README.md +++ b/x-pack/solutions/observability/plugins/observability_onboarding/README.md @@ -9,3 +9,86 @@ To run the stateful onboarding flows start Kibana as usual. ## Serverless onboarding To run the serverless onboarding flows start Kibana using `yarn serverless-oblt`. + +## Development + +### Unit Tests + +Kibana primarily uses Jest for unit testing. Each plugin or package defines a `jest.config.js` that extends a preset provided by the `@kbn/test` package. The following command runs all onboarding unit tests: + +```sh +yarn jest --config x-pack/solutions/observability/plugins/observability_onboarding/jest.config.js +``` + +You can also run a specific test by passing the filepath as an argument, e.g.: + +```sh +yarn jest --config x-pack/solutions/observability/plugins/observability_onboarding/jest.config.js x-pack/solutions/observability/plugins/observability_onboarding/public/application/header/custom_header.test.tsx +``` + +### Deployment-agnostic API tests + +The deployment-agnostic API tests are located in [`x-pack/test/api_integration/deployment_agnostic/apis/observability/onboarding`](/x-pack/test/api_integration/deployment_agnostic/apis/observability/onboarding/). + +#### Start server and run test (stateful) + +```sh +# start server +node scripts/functional_tests_server --config x-pack/test/api_integration/deployment_agnostic/configs/stateful/oblt.stateful.config.ts + +# run tests +node scripts/functional_test_runner --config x-pack/test/api_integration/deployment_agnostic/configs/stateful/oblt.stateful.config.ts --include ./x-pack/test/api_integration/deployment_agnostic/apis/observability/onboarding/index.ts +``` + +#### Start server and run test (serverless) + +```sh +# start server +node scripts/functional_tests_server --config x-pack/test/api_integration/deployment_agnostic/configs/serverless/oblt.serverless.config.ts + +# run tests +node scripts/functional_test_runner --config x-pack/test/api_integration/deployment_agnostic/configs/serverless/oblt.serverless.config.ts --include ./x-pack/test/api_integration/deployment_agnostic/apis/observability/onboarding/index.ts +``` + +### API integration tests + +#### Basic config +```sh +# start server +yarn test:ftr:server --config ./x-pack/test/observability_onboarding_api_integration/basic/config.ts + +# run tests +yarn test:ftr:runner --config ./x-pack/test/observability_onboarding_api_integration/basic/config.ts --include ./x-pack/test/observability_onboarding_api_integration/tests/index.ts +``` + +#### Cloud config +```sh +# start server +yarn test:ftr:server --config ./x-pack/test/observability_onboarding_api_integration/cloud/config.ts + +# run tests +yarn test:ftr:runner --config ./x-pack/test/observability_onboarding_api_integration/cloud/config.ts --include ./x-pack/test/observability_onboarding_api_integration/tests/index.ts +``` + +### Functional Tests + +#### Start server and run test (serverless) +```sh +# start server +yarn test:ftr:server --config ./x-pack/test_serverless/functional/test_suites/observability/config.ts + +# run tests +yarn test:ftr:runner --config ./x-pack/test_serverless/functional/test_suites/observability/config.ts --include ./x-pack/test_serverless/functional/test_suites/observability/onboarding/index.ts +``` + +##### Running Individual Tests +```sh +yarn test:ftr:runner --config ./x-pack/test_serverless/functional/test_suites/observability/config.ts --include ./x-pack/test_serverless/functional/test_suites/observability/onboarding/index.ts/$1 +``` + +### Playwright tests (Scout) +See [./ui_tests/README.md](./ui_tests/README.md) + + +### Playwright tests (Ensemble) +See [./e2e/playwright/README.md](./e2e/playwright/README.md) \ No newline at end of file diff --git a/x-pack/solutions/observability/plugins/observability_onboarding/e2e/playwright/stateful/host_otel.spec.ts b/x-pack/solutions/observability/plugins/observability_onboarding/e2e/playwright/stateful/host_otel.spec.ts index b17fb1047cb20..1e23451242ba3 100644 --- a/x-pack/solutions/observability/plugins/observability_onboarding/e2e/playwright/stateful/host_otel.spec.ts +++ b/x-pack/solutions/observability/plugins/observability_onboarding/e2e/playwright/stateful/host_otel.spec.ts @@ -31,7 +31,7 @@ test('Otel Host', async ({ page, onboardingHomePage, otelHostFlowPage, hostsOver await otelHostFlowPage.copyCollectorStartSnippetToClipboard(); const collectorStartSnippet = (await page.evaluate('navigator.clipboard.readText()')) as string; - const codeSnippet = `${collectorDownloadSnippet}\n${collectorStartSnippet}`; + const codeSnippet = `${collectorDownloadSnippet}\n${collectorStartSnippet} > collector-output.log 2>&1 &`; /** * Ensemble story watches for the code snippet file diff --git a/x-pack/solutions/observability/plugins/observability_streams_wrapper/public/plugin.tsx b/x-pack/solutions/observability/plugins/observability_streams_wrapper/public/plugin.tsx index 8cfed888fc357..77e3fcb799afa 100644 --- a/x-pack/solutions/observability/plugins/observability_streams_wrapper/public/plugin.tsx +++ b/x-pack/solutions/observability/plugins/observability_streams_wrapper/public/plugin.tsx @@ -98,7 +98,7 @@ export class ObservabilityStreamsWrapperPlugin sortKey: 101, entries: [ { - label: i18n.translate('app_not_found_in_i18nrc.streamsAppLinkTitle', { + label: i18n.translate('xpack.streams.streamsAppLinkTitle', { defaultMessage: 'Streams', }), app: STREAMS_APP_ID, @@ -117,7 +117,7 @@ export class ObservabilityStreamsWrapperPlugin coreSetup.application.register({ id: STREAMS_APP_ID, - title: i18n.translate('app_not_found_in_i18nrc.appTitle', { + title: i18n.translate('xpack.streams.appTitle', { defaultMessage: 'Streams', }), euiIconType: 'logoObservability', @@ -141,7 +141,7 @@ export class ObservabilityStreamsWrapperPlugin ? [ { id: 'streams', - title: i18n.translate('app_not_found_in_i18nrc.streamsAppDeepLinkTitle', { + title: i18n.translate('xpack.streams.streamsAppDeepLinkTitle', { defaultMessage: 'Streams', }), path: '/', diff --git a/x-pack/solutions/observability/plugins/profiling/public/views/storage_explorer/host_breakdown/hosts_table.tsx b/x-pack/solutions/observability/plugins/profiling/public/views/storage_explorer/host_breakdown/hosts_table.tsx index 0a5c6e2435c3d..9ace13585b528 100644 --- a/x-pack/solutions/observability/plugins/profiling/public/views/storage_explorer/host_breakdown/hosts_table.tsx +++ b/x-pack/solutions/observability/plugins/profiling/public/views/storage_explorer/host_breakdown/hosts_table.tsx @@ -19,7 +19,6 @@ import { i18n } from '@kbn/i18n'; import { asDynamicBytes, asAbsoluteDateTime } from '@kbn/observability-plugin/common'; import React, { useMemo, useState } from 'react'; import type { StorageExplorerHostDetails } from '../../../../common/storage_explorer'; -import { LabelWithHint } from '../../../components/label_with_hint'; import { useProfilingParams } from '../../../hooks/use_profiling_params'; import { useProfilingRouter } from '../../../hooks/use_profiling_router'; @@ -90,20 +89,15 @@ export function HostsTable({ data = [], hasDistinctProbabilisticValues }: Props) }, { field: 'hostName', - name: ( - - ), - sortable: true, + name: i18n.translate('xpack.profiling.storageExplorer.hostsTable.host', { + defaultMessage: 'Host', + }), + nameTooltip: { + content: i18n.translate('xpack.profiling.storageExplorer.hostsTable.host.hint', { + defaultMessage: 'host.name[host.id]', + }), + }, + sortable: (item) => `${item.hostName} [${item.hostId}]`, render: (_, item) => { return ( - ), + name: i18n.translate('xpack.profiling.storageExplorer.hostsTable.totalData', { + defaultMessage: 'Total data', + }), + nameTooltip: { + content: i18n.translate('xpack.profiling.storageExplorer.hostsTable.totalData.hint', { + defaultMessage: 'The combined value of Universal Profiling metrics and samples.', + }), + }, sortable: true, width: '200', render: (size: StorageExplorerHostDetails['totalSize']) => asDynamicBytes(size), diff --git a/x-pack/solutions/search/plugins/enterprise_search/server/lib/indices/fetch_index.test.ts b/x-pack/solutions/search/plugins/enterprise_search/server/lib/indices/fetch_index.test.ts index ab71d8e8611e8..73180ca093e2a 100644 --- a/x-pack/solutions/search/plugins/enterprise_search/server/lib/indices/fetch_index.test.ts +++ b/x-pack/solutions/search/plugins/enterprise_search/server/lib/indices/fetch_index.test.ts @@ -6,7 +6,7 @@ */ import { ByteSizeValue } from '@kbn/config-schema'; -import { IScopedClusterClient } from '@kbn/core/server'; +import { IScopedClusterClient, Logger } from '@kbn/core/server'; import { fetchConnectorByIndexName } from '@kbn/search-connectors'; @@ -47,6 +47,10 @@ describe('fetchIndex lib function', () => { jest.clearAllMocks(); }); + const logger = { + error: jest.fn(), + } as any as Logger; + const statsResponse = { indices: { index_name: { @@ -101,7 +105,7 @@ describe('fetchIndex lib function', () => { mockClient.asCurrentUser.indices.stats.mockImplementation(() => Promise.resolve(statsResponse)); await expect( - fetchIndex(mockClient as unknown as IScopedClusterClient, 'index_name') + fetchIndex(mockClient as unknown as IScopedClusterClient, 'index_name', logger) ).resolves.toEqual(result); }); @@ -125,7 +129,7 @@ describe('fetchIndex lib function', () => { mockClient.asCurrentUser.indices.stats.mockImplementation(() => Promise.resolve(statsResponse)); await expect( - fetchIndex(mockClient as unknown as IScopedClusterClient, 'index_name') + fetchIndex(mockClient as unknown as IScopedClusterClient, 'index_name', logger) ).resolves.toEqual({ ...result, connector: { doc: 'doc', service_type: 'some-service-type' }, @@ -141,7 +145,7 @@ describe('fetchIndex lib function', () => { mockClient.asCurrentUser.indices.stats.mockImplementation(() => Promise.resolve(statsResponse)); await expect( - fetchIndex(mockClient as unknown as IScopedClusterClient, 'index_name') + fetchIndex(mockClient as unknown as IScopedClusterClient, 'index_name', logger) ).rejects.toEqual(new Error('404')); }); it('should throw a 404 error if the indexStats cannot be fonud', async () => { @@ -158,7 +162,7 @@ describe('fetchIndex lib function', () => { ); await expect( - fetchIndex(mockClient as unknown as IScopedClusterClient, 'index_name') + fetchIndex(mockClient as unknown as IScopedClusterClient, 'index_name', logger) ).rejects.toEqual(new Error('404')); }); it('should throw a 404 error if the index stats indices cannot be fonud', async () => { @@ -173,7 +177,7 @@ describe('fetchIndex lib function', () => { mockClient.asCurrentUser.indices.stats.mockImplementation(() => Promise.resolve({})); await expect( - fetchIndex(mockClient as unknown as IScopedClusterClient, 'index_name') + fetchIndex(mockClient as unknown as IScopedClusterClient, 'index_name', logger) ).rejects.toEqual(new Error('404')); }); }); diff --git a/x-pack/solutions/search/plugins/enterprise_search/server/lib/indices/fetch_index.ts b/x-pack/solutions/search/plugins/enterprise_search/server/lib/indices/fetch_index.ts index c1113807e1fff..5a513bfa378d2 100644 --- a/x-pack/solutions/search/plugins/enterprise_search/server/lib/indices/fetch_index.ts +++ b/x-pack/solutions/search/plugins/enterprise_search/server/lib/indices/fetch_index.ts @@ -5,11 +5,10 @@ * 2.0. */ -import { IScopedClusterClient } from '@kbn/core/server'; - -import {} from '../..'; +import { IScopedClusterClient, Logger } from '@kbn/core/server'; import { + Connector, CONNECTORS_JOBS_INDEX, ConnectorSyncJobDocument, fetchConnectorByIndexName, @@ -60,7 +59,8 @@ const hasInProgressSyncs = async ( export const fetchIndex = async ( client: IScopedClusterClient, - index: string + index: string, + logger: Logger ): Promise => { const indexDataResult = await client.asCurrentUser.indices.get({ index }); const indexData = indexDataResult[index]; @@ -72,8 +72,12 @@ export const fetchIndex = async ( throw new Error('404'); } const indexStats = indices[index]; - - const connector = await fetchConnectorByIndexName(client.asCurrentUser, index); + let connector: Connector | undefined; + try { + connector = await fetchConnectorByIndexName(client.asCurrentUser, index); + } catch (error) { + logger.error(`Error fetching connector for index ${index}: ${error}`); + } const hasInProgressSyncsResult = connector ? await hasInProgressSyncs(client, connector.id) : { inProgress: false, pending: false }; diff --git a/x-pack/solutions/search/plugins/enterprise_search/server/lib/indices/fetch_unattached_indices.ts b/x-pack/solutions/search/plugins/enterprise_search/server/lib/indices/fetch_unattached_indices.ts index 2adbe070d0c80..b3bcb812496c3 100644 --- a/x-pack/solutions/search/plugins/enterprise_search/server/lib/indices/fetch_unattached_indices.ts +++ b/x-pack/solutions/search/plugins/enterprise_search/server/lib/indices/fetch_unattached_indices.ts @@ -6,7 +6,7 @@ */ import { IScopedClusterClient } from '@kbn/core/server'; -import { fetchConnectors } from '@kbn/search-connectors'; +import { Connector, fetchConnectors } from '@kbn/search-connectors'; import { isNotNullish } from '../../../common/utils/is_not_nullish'; @@ -22,7 +22,12 @@ export const fetchUnattachedIndices = async ( totalResults: number; }> => { const { indexNames } = await getUnattachedIndexData(client, searchQuery); - const connectors = await fetchConnectors(client.asCurrentUser, indexNames); + let connectors: Connector[] = []; + try { + connectors = await fetchConnectors(client.asCurrentUser, indexNames); + } catch (error) { + connectors = []; + } const connectedIndexNames = [...connectors.map((con) => con.index_name).filter(isNotNullish)]; diff --git a/x-pack/solutions/search/plugins/enterprise_search/server/lib/pipelines/get_index_pipeline.ts b/x-pack/solutions/search/plugins/enterprise_search/server/lib/pipelines/get_index_pipeline.ts index 54a916898740e..61c3b678690ec 100644 --- a/x-pack/solutions/search/plugins/enterprise_search/server/lib/pipelines/get_index_pipeline.ts +++ b/x-pack/solutions/search/plugins/enterprise_search/server/lib/pipelines/get_index_pipeline.ts @@ -18,7 +18,7 @@ export const getIndexPipelineParameters = async ( // we want to throw the error if getDefaultPipeline() fails so we're not catching it on purpose const [defaultPipeline, connector, customPipelineResp] = await Promise.all([ getDefaultPipeline(client), - fetchConnectorByIndexName(client.asCurrentUser, indexName), + fetchConnectorByIndexName(client.asCurrentUser, indexName).catch(() => null), client.asCurrentUser.ingest .getPipeline({ id: `${indexName}`, diff --git a/x-pack/solutions/search/plugins/enterprise_search/server/routes/enterprise_search/indices.ts b/x-pack/solutions/search/plugins/enterprise_search/server/routes/enterprise_search/indices.ts index b38d0fd0e5218..f2832d8d6e46b 100644 --- a/x-pack/solutions/search/plugins/enterprise_search/server/routes/enterprise_search/indices.ts +++ b/x-pack/solutions/search/plugins/enterprise_search/server/routes/enterprise_search/indices.ts @@ -19,6 +19,7 @@ import { deleteConnectorSecret, deleteConnectorById, updateConnectorIndexName, + Connector, } from '@kbn/search-connectors'; import { fetchConnectorByIndexName, @@ -119,7 +120,13 @@ export function registerIndexRoutes({ router, log, ml }: RouteDependencies) { from, size ); - const connectors = await fetchConnectors(client.asCurrentUser, indexNames); + let connectors: Connector[] = []; + // If the user doesn't have permissions, fetchConnectors will error out. We still want to return indices in that case. + try { + connectors = await fetchConnectors(client.asCurrentUser, indexNames); + } catch { + connectors = []; + } const enrichedIndices = indices.map((index) => ({ ...index, connector: connectors.find((connector) => connector.index_name === index.name), @@ -155,7 +162,7 @@ export function registerIndexRoutes({ router, log, ml }: RouteDependencies) { const { client } = (await context.core).elasticsearch; try { - const index = await fetchIndex(client, indexName); + const index = await fetchIndex(client, indexName, log); return response.ok({ body: index, headers: { 'content-type': 'application/json' }, @@ -189,7 +196,13 @@ export function registerIndexRoutes({ router, log, ml }: RouteDependencies) { const { client } = (await context.core).elasticsearch; try { - const connector = await fetchConnectorByIndexName(client.asCurrentUser, indexName); + let connector: Connector | undefined; + // users without permissions to fetch connectors should still see a result + try { + connector = await fetchConnectorByIndexName(client.asCurrentUser, indexName); + } catch (error) { + log.error(`Error fetching connector for index ${indexName}: ${error}`); + } if (connector) { if (connector.service_type === CRAWLER_SERVICE_TYPE) { @@ -567,11 +580,13 @@ export function registerIndexRoutes({ router, log, ml }: RouteDependencies) { statusCode: 409, }); } - - const connector = await fetchConnectorByIndexName( - client.asCurrentUser, - request.body.index_name - ); + let connector: Connector | undefined; + // users without permissions to fetch connectors should still be able to create an index + try { + connector = await fetchConnectorByIndexName(client.asCurrentUser, indexName); + } catch (error) { + log.error(`Error fetching connector for index ${indexName}: ${error}`); + } if (connector) { return createError({ diff --git a/x-pack/solutions/search/plugins/search_inference_endpoints/common/types.ts b/x-pack/solutions/search/plugins/search_inference_endpoints/common/types.ts index 0c1da5a59b799..49123be6a38ee 100644 --- a/x-pack/solutions/search/plugins/search_inference_endpoints/common/types.ts +++ b/x-pack/solutions/search/plugins/search_inference_endpoints/common/types.ts @@ -5,8 +5,6 @@ * 2.0. */ -import type { Config, Secrets } from '@kbn/inference-endpoint-ui-common'; - export enum APIRoutes { GET_INFERENCE_ENDPOINTS = '/internal/inference_endpoints/endpoints', INFERENCE_ENDPOINT = '/internal/inference_endpoint/endpoints/{type}/{id}', @@ -18,17 +16,3 @@ export interface SearchInferenceEndpointsConfigType { enabled: boolean; }; } - -export enum TaskTypes { - completion = 'completion', - rerank = 'rerank', - sparse_embedding = 'sparse_embedding', - text_embedding = 'text_embedding', -} - -export type { InferenceProvider } from '@kbn/inference-endpoint-ui-common'; - -export interface InferenceEndpoint { - config: Config; - secrets: Secrets; -} diff --git a/x-pack/solutions/search/plugins/search_inference_endpoints/public/components/all_inference_endpoints/constants.ts b/x-pack/solutions/search/plugins/search_inference_endpoints/public/components/all_inference_endpoints/constants.ts index 931994c46afca..2d04fb058849d 100644 --- a/x-pack/solutions/search/plugins/search_inference_endpoints/public/components/all_inference_endpoints/constants.ts +++ b/x-pack/solutions/search/plugins/search_inference_endpoints/public/components/all_inference_endpoints/constants.ts @@ -19,7 +19,7 @@ export const DEFAULT_TABLE_LIMIT = 25; export const DEFAULT_QUERY_PARAMS: QueryParams = { page: DEFAULT_TABLE_ACTIVE_PAGE, perPage: DEFAULT_TABLE_LIMIT, - sortField: SortFieldInferenceEndpoint.endpoint, + sortField: SortFieldInferenceEndpoint.inference_id, sortOrder: SortOrder.asc, }; diff --git a/x-pack/solutions/search/plugins/search_inference_endpoints/public/components/all_inference_endpoints/endpoints_table.tsx b/x-pack/solutions/search/plugins/search_inference_endpoints/public/components/all_inference_endpoints/endpoints_table.tsx index af4755c72fc11..bdb3ed0bf8043 100644 --- a/x-pack/solutions/search/plugins/search_inference_endpoints/public/components/all_inference_endpoints/endpoints_table.tsx +++ b/x-pack/solutions/search/plugins/search_inference_endpoints/public/components/all_inference_endpoints/endpoints_table.tsx @@ -9,15 +9,14 @@ import React from 'react'; import type { EuiBasicTableProps, Pagination } from '@elastic/eui'; import { EuiBasicTable } from '@elastic/eui'; - -import type { InferenceEndpointUI } from './types'; +import { InferenceInferenceEndpointInfo } from '@elastic/elasticsearch/lib/api/types'; interface EndpointsTableProps { - columns: EuiBasicTableProps['columns']; - data: InferenceEndpointUI[]; - onChange: EuiBasicTableProps['onChange']; + columns: EuiBasicTableProps['columns']; + data: InferenceInferenceEndpointInfo[]; + onChange: EuiBasicTableProps['onChange']; pagination: Pagination; - sorting: EuiBasicTableProps['sorting']; + sorting: EuiBasicTableProps['sorting']; } export const EndpointsTable: React.FC = ({ diff --git a/x-pack/solutions/search/plugins/search_inference_endpoints/public/components/all_inference_endpoints/filter/task_type_filter.tsx b/x-pack/solutions/search/plugins/search_inference_endpoints/public/components/all_inference_endpoints/filter/task_type_filter.tsx index 071069a880b3c..ac252f0535f33 100644 --- a/x-pack/solutions/search/plugins/search_inference_endpoints/public/components/all_inference_endpoints/filter/task_type_filter.tsx +++ b/x-pack/solutions/search/plugins/search_inference_endpoints/public/components/all_inference_endpoints/filter/task_type_filter.tsx @@ -6,13 +6,19 @@ */ import React from 'react'; -import { TaskTypes } from '../../../../common/types'; +import { InferenceTaskType } from '@elastic/elasticsearch/lib/api/types'; import { FilterOptions } from '../types'; import { MultiSelectFilter, MultiSelectFilterOption } from './multi_select_filter'; import * as i18n from './translations'; +enum TaskTypes { + completion = 'completion', + rerank = 'rerank', + sparse_embedding = 'sparse_embedding', + text_embedding = 'text_embedding', +} interface Props { - optionKeys: TaskTypes[]; + optionKeys: InferenceTaskType[]; onChange: (newFilterOptions: Partial) => void; } diff --git a/x-pack/solutions/search/plugins/search_inference_endpoints/public/components/all_inference_endpoints/render_table_columns/render_actions/actions/delete/confirm_delete_endpoint/index.test.tsx b/x-pack/solutions/search/plugins/search_inference_endpoints/public/components/all_inference_endpoints/render_table_columns/render_actions/actions/delete/confirm_delete_endpoint/index.test.tsx index 8525fd3f0f901..241e5c1fa8f02 100644 --- a/x-pack/solutions/search/plugins/search_inference_endpoints/public/components/all_inference_endpoints/render_table_columns/render_actions/actions/delete/confirm_delete_endpoint/index.test.tsx +++ b/x-pack/solutions/search/plugins/search_inference_endpoints/public/components/all_inference_endpoints/render_table_columns/render_actions/actions/delete/confirm_delete_endpoint/index.test.tsx @@ -11,6 +11,7 @@ import React from 'react'; import { ConfirmDeleteEndpointModal } from '.'; import * as i18n from './translations'; import { useScanUsage } from '../../../../../../../hooks/use_scan_usage'; +import { InferenceInferenceEndpointInfo } from '@elastic/elasticsearch/lib/api/types'; jest.mock('../../../../../../../hooks/use_scan_usage'); const mockUseScanUsage = useScanUsage as jest.Mock; @@ -19,7 +20,7 @@ describe('ConfirmDeleteEndpointModal', () => { const mockOnCancel = jest.fn(); const mockOnConfirm = jest.fn(); - const mockProvider = { + const mockProvider: InferenceInferenceEndpointInfo = { inference_id: 'my-hugging-face', service: 'hugging_face', service_settings: { @@ -27,12 +28,7 @@ describe('ConfirmDeleteEndpointModal', () => { url: 'https://dummy.huggingface.com', }, task_settings: {}, - } as any; - - const mockItem = { - endpoint: 'my-hugging-face', - provider: mockProvider, - type: 'text_embedding', + task_type: 'text_embedding', }; const Wrapper = () => { @@ -42,7 +38,7 @@ describe('ConfirmDeleteEndpointModal', () => { ); diff --git a/x-pack/solutions/search/plugins/search_inference_endpoints/public/components/all_inference_endpoints/render_table_columns/render_actions/actions/delete/confirm_delete_endpoint/index.tsx b/x-pack/solutions/search/plugins/search_inference_endpoints/public/components/all_inference_endpoints/render_table_columns/render_actions/actions/delete/confirm_delete_endpoint/index.tsx index 345f0f81b0927..8b106201d41fe 100644 --- a/x-pack/solutions/search/plugins/search_inference_endpoints/public/components/all_inference_endpoints/render_table_columns/render_actions/actions/delete/confirm_delete_endpoint/index.tsx +++ b/x-pack/solutions/search/plugins/search_inference_endpoints/public/components/all_inference_endpoints/render_table_columns/render_actions/actions/delete/confirm_delete_endpoint/index.tsx @@ -10,16 +10,17 @@ import { EuiButtonEmpty, EuiConfirmModal, EuiFlexGroup, EuiFlexItem, EuiText } f import { css } from '@emotion/react'; import { euiThemeVars } from '@kbn/ui-theme'; +import { InferenceInferenceEndpointInfo } from '@elastic/elasticsearch/lib/api/types'; import * as i18n from './translations'; import { useScanUsage } from '../../../../../../../hooks/use_scan_usage'; -import { InferenceEndpointUI, InferenceUsageInfo } from '../../../../../types'; +import { InferenceUsageInfo } from '../../../../../types'; import { RenderMessageWithIcon } from '../../component/render_message_with_icon'; import { ScanUsageResults } from '../../component/scan_usage_results'; interface ConfirmDeleteEndpointModalProps { onCancel: () => void; onConfirm: () => void; - inferenceEndpoint: InferenceEndpointUI; + inferenceEndpoint: InferenceInferenceEndpointInfo; } export const ConfirmDeleteEndpointModal: React.FC = ({ @@ -33,8 +34,8 @@ export const ConfirmDeleteEndpointModal: React.FC(false); const { data } = useScanUsage({ - type: inferenceEndpoint.type, - id: inferenceEndpoint.endpoint, + type: inferenceEndpoint.task_type, + id: inferenceEndpoint.inference_id, }); const onIgnoreWarningCheckboxChange = (state: boolean) => { @@ -88,7 +89,7 @@ export const ConfirmDeleteEndpointModal: React.FC - {inferenceEndpoint.endpoint} + {inferenceEndpoint.inference_id} diff --git a/x-pack/solutions/search/plugins/search_inference_endpoints/public/components/all_inference_endpoints/render_table_columns/render_actions/actions/delete/delete_action.test.tsx b/x-pack/solutions/search/plugins/search_inference_endpoints/public/components/all_inference_endpoints/render_table_columns/render_actions/actions/delete/delete_action.test.tsx index 881728ce858ef..4c81490f7a3e4 100644 --- a/x-pack/solutions/search/plugins/search_inference_endpoints/public/components/all_inference_endpoints/render_table_columns/render_actions/actions/delete/delete_action.test.tsx +++ b/x-pack/solutions/search/plugins/search_inference_endpoints/public/components/all_inference_endpoints/render_table_columns/render_actions/actions/delete/delete_action.test.tsx @@ -10,10 +10,10 @@ import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import React from 'react'; import { DeleteAction } from './delete_action'; -import { InferenceEndpointUI } from '../../../../types'; +import { InferenceInferenceEndpointInfo } from '@elastic/elasticsearch/lib/api/types'; describe('Delete Action', () => { - const mockProvider = { + const mockProvider: InferenceInferenceEndpointInfo = { inference_id: 'my-hugging-face', service: 'hugging_face', service_settings: { @@ -21,15 +21,10 @@ describe('Delete Action', () => { url: 'https://dummy.huggingface.com', }, task_settings: {}, - } as any; - - const mockItem: InferenceEndpointUI = { - endpoint: 'my-hugging-face', - provider: mockProvider, - type: 'text_embedding', + task_type: 'text_embedding', }; - const Wrapper = ({ item }: { item: InferenceEndpointUI }) => { + const Wrapper = ({ item }: { item: InferenceInferenceEndpointInfo }) => { const queryClient = new QueryClient(); return ( @@ -39,7 +34,7 @@ describe('Delete Action', () => { }; it('loads confirm delete modal', () => { - render(); + render(); expect(screen.getByTestId('deleteModalForInferenceUI')).toBeInTheDocument(); }); }); diff --git a/x-pack/solutions/search/plugins/search_inference_endpoints/public/components/all_inference_endpoints/render_table_columns/render_actions/actions/delete/delete_action.tsx b/x-pack/solutions/search/plugins/search_inference_endpoints/public/components/all_inference_endpoints/render_table_columns/render_actions/actions/delete/delete_action.tsx index c697796f13a04..5119c2df2ebca 100644 --- a/x-pack/solutions/search/plugins/search_inference_endpoints/public/components/all_inference_endpoints/render_table_columns/render_actions/actions/delete/delete_action.tsx +++ b/x-pack/solutions/search/plugins/search_inference_endpoints/public/components/all_inference_endpoints/render_table_columns/render_actions/actions/delete/delete_action.tsx @@ -6,12 +6,12 @@ */ import React from 'react'; +import { InferenceInferenceEndpointInfo } from '@elastic/elasticsearch/lib/api/types'; import { useDeleteEndpoint } from '../../../../../../hooks/use_delete_endpoint'; -import { InferenceEndpointUI } from '../../../../types'; import { ConfirmDeleteEndpointModal } from './confirm_delete_endpoint'; interface DeleteActionProps { - selectedEndpoint: InferenceEndpointUI; + selectedEndpoint: InferenceInferenceEndpointInfo; onCancel: () => void; displayModal: boolean; } @@ -29,8 +29,8 @@ export const DeleteAction: React.FC = ({ } deleteEndpoint({ - type: selectedEndpoint.type, - id: selectedEndpoint.endpoint, + type: selectedEndpoint.task_type, + id: selectedEndpoint.inference_id, }); }; diff --git a/x-pack/solutions/search/plugins/search_inference_endpoints/public/components/all_inference_endpoints/render_table_columns/render_endpoint/endpoint_info.test.tsx b/x-pack/solutions/search/plugins/search_inference_endpoints/public/components/all_inference_endpoints/render_table_columns/render_endpoint/endpoint_info.test.tsx index 4866c6fef802f..c980d4d954061 100644 --- a/x-pack/solutions/search/plugins/search_inference_endpoints/public/components/all_inference_endpoints/render_table_columns/render_endpoint/endpoint_info.test.tsx +++ b/x-pack/solutions/search/plugins/search_inference_endpoints/public/components/all_inference_endpoints/render_table_columns/render_endpoint/endpoint_info.test.tsx @@ -26,7 +26,7 @@ describe('RenderEndpoint component tests', () => { task_settings: {}, } as any; - render(); + render(); expect(screen.getByText('cohere-2')).toBeInTheDocument(); }); @@ -42,7 +42,7 @@ describe('RenderEndpoint component tests', () => { }, } as any; - render(); + render(); expect(screen.getByText('azure-openai-1')).toBeInTheDocument(); }); @@ -62,7 +62,7 @@ describe('RenderEndpoint component tests', () => { }, } as any; - render(); + render(); expect(screen.getByText('elastic-rerank')).toBeInTheDocument(); expect(screen.getByText('TECH PREVIEW')).toBeInTheDocument(); diff --git a/x-pack/solutions/search/plugins/search_inference_endpoints/public/components/all_inference_endpoints/render_table_columns/render_endpoint/endpoint_info.tsx b/x-pack/solutions/search/plugins/search_inference_endpoints/public/components/all_inference_endpoints/render_table_columns/render_endpoint/endpoint_info.tsx index 60494b4d5f7b9..413814f75c722 100644 --- a/x-pack/solutions/search/plugins/search_inference_endpoints/public/components/all_inference_endpoints/render_table_columns/render_endpoint/endpoint_info.tsx +++ b/x-pack/solutions/search/plugins/search_inference_endpoints/public/components/all_inference_endpoints/render_table_columns/render_endpoint/endpoint_info.tsx @@ -7,17 +7,17 @@ import { EuiBetaBadge, EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; import React from 'react'; -import { InferenceAPIConfigResponse } from '@kbn/ml-trained-models-utils'; +import { InferenceInferenceEndpointInfo } from '@elastic/elasticsearch/lib/api/types'; import { isEndpointPreconfigured } from '../../../../utils/preconfigured_endpoint_helper'; import * as i18n from './translations'; import { isProviderTechPreview } from '../../../../utils/reranker_helper'; export interface EndpointInfoProps { inferenceId: string; - provider: InferenceAPIConfigResponse; + endpointInfo: InferenceInferenceEndpointInfo; } -export const EndpointInfo: React.FC = ({ inferenceId, provider }) => ( +export const EndpointInfo: React.FC = ({ inferenceId, endpointInfo }) => ( @@ -26,7 +26,7 @@ export const EndpointInfo: React.FC = ({ inferenceId, provide {inferenceId} - {isProviderTechPreview(provider) ? ( + {isProviderTechPreview(endpointInfo) ? ( = ({ endpointInfo }) => { + const serviceSettings = endpointInfo.service_settings; + const modelId = + 'model_id' in serviceSettings + ? serviceSettings.model_id + : 'model' in serviceSettings + ? serviceSettings.model + : undefined; + + const isEligibleForMITBadge = modelId && ELASTIC_MODEL_DEFINITIONS[modelId]?.license === 'MIT'; + + return ( + + {modelId && ( + + + + + {modelId} + + + {isEligibleForMITBadge ? ( + + + {i18n.MIT_LICENSE} + + + ) : null}{' '} + + + )} + {endpointModelAtrributes(endpointInfo)} + + ); +}; + +function endpointModelAtrributes(endpoint: InferenceInferenceEndpointInfo) { + switch (endpoint.service) { + case ServiceProviderKeys.hugging_face: + return huggingFaceAttributes(endpoint); + case ServiceProviderKeys.azureaistudio: + return azureOpenAIStudioAttributes(endpoint); + case ServiceProviderKeys.azureopenai: + return azureOpenAIAttributes(endpoint); + default: + return null; + } +} + +function huggingFaceAttributes(endpoint: InferenceInferenceEndpointInfo) { + const serviceSettings = endpoint.service_settings; + const url = 'url' in serviceSettings ? serviceSettings.url : null; + + return url; +} + +function azureOpenAIStudioAttributes(endpoint: InferenceInferenceEndpointInfo) { + const serviceSettings = endpoint.service_settings; + return 'provider' in serviceSettings ? serviceSettings?.provider : undefined; +} + +function azureOpenAIAttributes(endpoint: InferenceInferenceEndpointInfo) { + const serviceSettings = endpoint.service_settings; + + return 'resource_name' in serviceSettings ? serviceSettings.resource_name : undefined; +} diff --git a/x-pack/solutions/search/plugins/search_inference_endpoints/public/components/all_inference_endpoints/render_table_columns/render_service_provider/service_provider.test.tsx b/x-pack/solutions/search/plugins/search_inference_endpoints/public/components/all_inference_endpoints/render_table_columns/render_service_provider/service_provider.test.tsx index 202e914e33a35..2fe0c5e58ef81 100644 --- a/x-pack/solutions/search/plugins/search_inference_endpoints/public/components/all_inference_endpoints/render_table_columns/render_service_provider/service_provider.test.tsx +++ b/x-pack/solutions/search/plugins/search_inference_endpoints/public/components/all_inference_endpoints/render_table_columns/render_service_provider/service_provider.test.tsx @@ -8,6 +8,8 @@ import { render, screen } from '@testing-library/react'; import React from 'react'; import { ServiceProvider } from './service_provider'; +import { InferenceInferenceEndpointInfo } from '@elastic/elasticsearch/lib/api/types'; +import { ServiceProviderKeys } from '@kbn/inference-endpoint-ui-common'; jest.mock('@kbn/ml-trained-models-utils', () => ({ ...jest.requireActual('@kbn/ml-trained-models-utils'), @@ -20,8 +22,14 @@ jest.mock('@kbn/ml-trained-models-utils', () => ({ })); describe('ServiceProvider component', () => { + const renderComponent = ( + service: ServiceProviderKeys, + endpointInfo: InferenceInferenceEndpointInfo + ) => { + render(); + }; describe('with HuggingFace service', () => { - const mockEndpoint = { + const mockEndpoint: InferenceInferenceEndpointInfo = { inference_id: 'my-hugging-face', service: 'hugging_face', service_settings: { @@ -29,9 +37,10 @@ describe('ServiceProvider component', () => { url: 'https://dummy.huggingface.com', }, task_settings: {}, - } as any; + task_type: 'sparse_embedding', + }; it('renders the component with service and model details', () => { - render(); + renderComponent(ServiceProviderKeys.hugging_face, mockEndpoint); expect(screen.getByText('Hugging Face')).toBeInTheDocument(); const icon = screen.getByTestId('table-column-service-provider-hugging_face'); @@ -41,7 +50,7 @@ describe('ServiceProvider component', () => { }); describe('with openai service', () => { - const mockEndpoint = { + const mockEndpoint: InferenceInferenceEndpointInfo = { inference_id: 'my-openai-endpoint', service: 'openai', service_settings: { @@ -49,9 +58,10 @@ describe('ServiceProvider component', () => { model_id: 'text-embedding-3-small', }, task_settings: {}, - } as any; + task_type: 'text_embedding', + }; it('renders the component with service and model details', () => { - render(); + renderComponent(ServiceProviderKeys.openai, mockEndpoint); expect(screen.getByText('OpenAI')).toBeInTheDocument(); const icon = screen.getByTestId('table-column-service-provider-openai'); @@ -61,7 +71,7 @@ describe('ServiceProvider component', () => { }); describe('with cohere service', () => { - const mockEndpoint = { + const mockEndpoint: InferenceInferenceEndpointInfo = { inference_id: 'cohere-2', service: 'cohere', service_settings: { @@ -74,10 +84,11 @@ describe('ServiceProvider component', () => { embedding_type: 'byte', }, task_settings: {}, - } as any; + task_type: 'sparse_embedding', + }; it('renders the component with service and model details', () => { - render(); + renderComponent(ServiceProviderKeys.cohere, mockEndpoint); expect(screen.getByText('Cohere')).toBeInTheDocument(); const icon = screen.getByTestId('table-column-service-provider-cohere'); @@ -90,14 +101,14 @@ describe('ServiceProvider component', () => { ...mockEndpoint, service_settings: { ...mockEndpoint.service_settings, model_id: undefined }, }; - render(); + renderComponent(ServiceProviderKeys.cohere, modifiedEndpoint); expect(screen.queryByText('embed-english-light-v3.0')).not.toBeInTheDocument(); }); }); describe('with azureaistudio service', () => { - const mockEndpoint = { + const mockEndpoint: InferenceInferenceEndpointInfo = { inference_id: 'azure-ai-1', service: 'azureaistudio', service_settings: { @@ -105,10 +116,11 @@ describe('ServiceProvider component', () => { provider: 'microsoft_phi', endpoint_type: 'realtime', }, - } as any; + task_type: 'sparse_embedding', + }; it('renders the component with endpoint details', () => { - render(); + renderComponent(ServiceProviderKeys.azureaistudio, mockEndpoint); expect(screen.getByText('Azure AI Studio')).toBeInTheDocument(); const icon = screen.getByTestId('table-column-service-provider-azureaistudio'); @@ -121,7 +133,7 @@ describe('ServiceProvider component', () => { ...mockEndpoint, service_settings: {}, }; - render(); + renderComponent(ServiceProviderKeys.azureaistudio, modifiedEndpoint); expect(screen.getByText('Azure AI Studio')).toBeInTheDocument(); const icon = screen.getByTestId('table-column-service-provider-azureaistudio'); @@ -131,7 +143,7 @@ describe('ServiceProvider component', () => { }); describe('with azureopenai service', () => { - const mockEndpoint = { + const mockEndpoint: InferenceInferenceEndpointInfo = { inference_id: 'azure-openai-1', service: 'azureopenai', service_settings: { @@ -139,10 +151,11 @@ describe('ServiceProvider component', () => { deployment_id: 'deployment-123', api_version: 'v1', }, - } as any; + task_type: 'sparse_embedding', + }; it('renders the component with all required endpoint details', () => { - render(); + renderComponent(ServiceProviderKeys.azureopenai, mockEndpoint); expect(screen.getByText('Azure OpenAI')).toBeInTheDocument(); const icon = screen.getByTestId('table-column-service-provider-azureopenai'); @@ -152,7 +165,7 @@ describe('ServiceProvider component', () => { }); describe('with mistral service', () => { - const mockEndpoint = { + const mockEndpoint: InferenceInferenceEndpointInfo = { inference_id: 'mistral-ai-1', service: 'mistral', service_settings: { @@ -162,10 +175,11 @@ describe('ServiceProvider component', () => { requests_per_minute: 1000, }, }, - } as any; + task_type: 'sparse_embedding', + }; it('renders the component with endpoint details', () => { - render(); + renderComponent(ServiceProviderKeys.mistral, mockEndpoint); expect(screen.getByText('Mistral')).toBeInTheDocument(); const icon = screen.getByTestId('table-column-service-provider-mistral'); @@ -178,7 +192,7 @@ describe('ServiceProvider component', () => { ...mockEndpoint, service_settings: {}, }; - render(); + renderComponent(ServiceProviderKeys.mistral, modifiedEndpoint); const icon = screen.getByTestId('table-column-service-provider-mistral'); expect(icon).toBeInTheDocument(); @@ -188,7 +202,7 @@ describe('ServiceProvider component', () => { }); describe('with elasticsearch service', () => { - const mockEndpoint = { + const mockEndpoint: InferenceInferenceEndpointInfo = { inference_id: 'model-123', service: 'elasticsearch', service_settings: { @@ -196,10 +210,11 @@ describe('ServiceProvider component', () => { num_threads: 10, model_id: 'settings-model-123', }, - } as any; + task_type: 'sparse_embedding', + }; it('renders the component with endpoint model_id', () => { - render(); + renderComponent(ServiceProviderKeys.elasticsearch, mockEndpoint); expect(screen.getByText('Elasticsearch')).toBeInTheDocument(); const icon = screen.getByTestId('table-column-service-provider-elasticsearch'); @@ -212,7 +227,7 @@ describe('ServiceProvider component', () => { ...mockEndpoint, service_settings: { ...mockEndpoint.service_settings, model_id: 'model-with-mit-license' }, }; - render(); + renderComponent(ServiceProviderKeys.elasticsearch, modifiedEndpoint); const mitBadge = screen.getByTestId('mit-license-badge'); expect(mitBadge).toBeInTheDocument(); @@ -220,14 +235,14 @@ describe('ServiceProvider component', () => { }); it('does not render the MIT license badge if the model is not eligible', () => { - render(); + renderComponent(ServiceProviderKeys.elasticsearch, mockEndpoint); expect(screen.queryByTestId('mit-license-badge')).not.toBeInTheDocument(); }); }); describe('with googleaistudio service', () => { - const mockEndpoint = { + const mockEndpoint: InferenceInferenceEndpointInfo = { inference_id: 'google-ai-1', service: 'googleaistudio', service_settings: { @@ -236,10 +251,11 @@ describe('ServiceProvider component', () => { requests_per_minute: 500, }, }, - } as any; + task_type: 'sparse_embedding', + }; it('renders the component with service and model details', () => { - render(); + renderComponent(ServiceProviderKeys.googleaistudio, mockEndpoint); expect(screen.getByText('Google AI Studio')).toBeInTheDocument(); const icon = screen.getByTestId('table-column-service-provider-googleaistudio'); @@ -249,7 +265,7 @@ describe('ServiceProvider component', () => { }); describe('with amazonbedrock service', () => { - const mockEndpoint = { + const mockEndpoint: InferenceInferenceEndpointInfo = { inference_id: 'amazon-bedrock-1', service: 'amazonbedrock', service_settings: { @@ -257,10 +273,11 @@ describe('ServiceProvider component', () => { provider: 'AMAZONTITAN', model: 'model-bedrock-xyz', }, - } as any; + task_type: 'sparse_embedding', + }; it('renders the component with model and service details', () => { - render(); + renderComponent(ServiceProviderKeys.amazonbedrock, mockEndpoint); expect(screen.getByText('Amazon Bedrock')).toBeInTheDocument(); const icon = screen.getByTestId('table-column-service-provider-amazonbedrock'); @@ -270,7 +287,7 @@ describe('ServiceProvider component', () => { }); describe('with alibabacloud-ai-search service', () => { - const mockEndpoint = { + const mockEndpoint: InferenceInferenceEndpointInfo = { inference_id: 'alibabacloud-ai-search-1', service: 'alibabacloud-ai-search', service_settings: { @@ -278,10 +295,11 @@ describe('ServiceProvider component', () => { host: 'host-123', workspace: 'default-123', }, - } as any; + task_type: 'sparse_embedding', + }; it('renders the component with endpoint details', () => { - render(); + renderComponent(ServiceProviderKeys['alibabacloud-ai-search'], mockEndpoint); expect(screen.getByText('AlibabaCloud AI Search')).toBeInTheDocument(); const icon = screen.getByTestId('table-column-service-provider-alibabacloud-ai-search'); diff --git a/x-pack/solutions/search/plugins/search_inference_endpoints/public/components/all_inference_endpoints/render_table_columns/render_service_provider/service_provider.tsx b/x-pack/solutions/search/plugins/search_inference_endpoints/public/components/all_inference_endpoints/render_table_columns/render_service_provider/service_provider.tsx index bd5f330431a88..0087b85fa33ba 100644 --- a/x-pack/solutions/search/plugins/search_inference_endpoints/public/components/all_inference_endpoints/render_table_columns/render_service_provider/service_provider.tsx +++ b/x-pack/solutions/search/plugins/search_inference_endpoints/public/components/all_inference_endpoints/render_table_columns/render_service_provider/service_provider.tsx @@ -5,21 +5,16 @@ * 2.0. */ -import { EuiBadge, EuiFlexGroup, EuiFlexItem, EuiIcon, EuiText } from '@elastic/eui'; +import { EuiFlexGroup, EuiFlexItem, EuiIcon, EuiText } from '@elastic/eui'; import React from 'react'; -import { - ELASTIC_MODEL_DEFINITIONS, - InferenceAPIConfigResponse, -} from '@kbn/ml-trained-models-utils'; import { SERVICE_PROVIDERS, ServiceProviderKeys } from '@kbn/inference-endpoint-ui-common'; -import * as i18n from './translations'; +import { EndpointModelInfo, EndpointModelInfoProps } from './endpoint_model_info'; -interface ServiceProviderProps { - providerEndpoint: InferenceAPIConfigResponse; +interface ServiceProviderProps extends EndpointModelInfoProps { + service: ServiceProviderKeys; } -export const ServiceProvider: React.FC = ({ providerEndpoint }) => { - const { service } = providerEndpoint; +export const ServiceProvider: React.FC = ({ service, endpointInfo }) => { const provider = SERVICE_PROVIDERS[service]; return provider ? ( @@ -39,7 +34,7 @@ export const ServiceProvider: React.FC = ({ providerEndpoi - + @@ -48,77 +43,3 @@ export const ServiceProvider: React.FC = ({ providerEndpoi {service} ); }; - -const EndpointModelInfo: React.FC = ({ providerEndpoint }) => { - const serviceSettings = providerEndpoint.service_settings; - const modelId = - 'model_id' in serviceSettings - ? serviceSettings.model_id - : 'model' in serviceSettings - ? serviceSettings.model - : undefined; - - const isEligibleForMITBadge = modelId && ELASTIC_MODEL_DEFINITIONS[modelId]?.license === 'MIT'; - - return ( - - - - - {modelId && ( - - {modelId} - - )} - - - {isEligibleForMITBadge ? ( - - {i18n.MIT_LICENSE} - - ) : null}{' '} - - - - {endpointModelAtrributes(providerEndpoint)} - - ); -}; - -function endpointModelAtrributes(endpoint: InferenceAPIConfigResponse) { - switch (endpoint.service) { - case ServiceProviderKeys.hugging_face: - return huggingFaceAttributes(endpoint); - case ServiceProviderKeys.azureaistudio: - return azureOpenAIStudioAttributes(endpoint); - case ServiceProviderKeys.azureopenai: - return azureOpenAIAttributes(endpoint); - default: - return null; - } -} - -function huggingFaceAttributes(endpoint: InferenceAPIConfigResponse) { - const serviceSettings = endpoint.service_settings; - const url = 'url' in serviceSettings ? serviceSettings.url : null; - - return url; -} - -function azureOpenAIStudioAttributes(endpoint: InferenceAPIConfigResponse) { - const serviceSettings = endpoint.service_settings; - return 'provider' in serviceSettings ? serviceSettings?.provider : undefined; -} - -function azureOpenAIAttributes(endpoint: InferenceAPIConfigResponse) { - const serviceSettings = endpoint.service_settings; - - return 'resource_name' in serviceSettings ? serviceSettings.resource_name : undefined; -} diff --git a/x-pack/solutions/search/plugins/search_inference_endpoints/public/components/all_inference_endpoints/render_table_columns/render_task_type/task_type.test.tsx b/x-pack/solutions/search/plugins/search_inference_endpoints/public/components/all_inference_endpoints/render_table_columns/render_task_type/task_type.test.tsx index 5c6ca297d9aa5..9bbe49ec3c074 100644 --- a/x-pack/solutions/search/plugins/search_inference_endpoints/public/components/all_inference_endpoints/render_table_columns/render_task_type/task_type.test.tsx +++ b/x-pack/solutions/search/plugins/search_inference_endpoints/public/components/all_inference_endpoints/render_table_columns/render_task_type/task_type.test.tsx @@ -5,16 +5,16 @@ * 2.0. */ -import { TaskTypes } from '../../../../../common/types'; import { render, screen } from '@testing-library/react'; import React from 'react'; import { TaskType } from './task_type'; +import { InferenceTaskType } from '@elastic/elasticsearch/lib/api/types'; describe('TaskType component', () => { it.each([ - [TaskTypes.completion, 'completion'], - [TaskTypes.sparse_embedding, 'sparse_embedding'], - [TaskTypes.text_embedding, 'text_embedding'], + ['completion' as InferenceTaskType, 'completion'], + ['sparse_embedding' as InferenceTaskType, 'sparse_embedding'], + ['text_embedding' as InferenceTaskType, 'text_embedding'], ])('renders the task type badge for %s', (taskType, expected) => { render(); const badge = screen.getByTestId(`table-column-task-type-${taskType}`); diff --git a/x-pack/solutions/search/plugins/search_inference_endpoints/public/components/all_inference_endpoints/render_table_columns/render_task_type/task_type.tsx b/x-pack/solutions/search/plugins/search_inference_endpoints/public/components/all_inference_endpoints/render_table_columns/render_task_type/task_type.tsx index 14d7dadf822d6..f0ab8f601fc27 100644 --- a/x-pack/solutions/search/plugins/search_inference_endpoints/public/components/all_inference_endpoints/render_table_columns/render_task_type/task_type.tsx +++ b/x-pack/solutions/search/plugins/search_inference_endpoints/public/components/all_inference_endpoints/render_table_columns/render_task_type/task_type.tsx @@ -5,12 +5,12 @@ * 2.0. */ +import { InferenceTaskType } from '@elastic/elasticsearch/lib/api/types'; import { EuiBadge } from '@elastic/eui'; import React from 'react'; -import { TaskTypes } from '../../../../../common/types'; interface TaskTypeProps { - type?: TaskTypes; + type?: InferenceTaskType; } export const TaskType: React.FC = ({ type }) => { diff --git a/x-pack/solutions/search/plugins/search_inference_endpoints/public/components/all_inference_endpoints/tabular_page.tsx b/x-pack/solutions/search/plugins/search_inference_endpoints/public/components/all_inference_endpoints/tabular_page.tsx index bb6ee170be8ba..0a81e108f38ed 100644 --- a/x-pack/solutions/search/plugins/search_inference_endpoints/public/components/all_inference_endpoints/tabular_page.tsx +++ b/x-pack/solutions/search/plugins/search_inference_endpoints/public/components/all_inference_endpoints/tabular_page.tsx @@ -9,11 +9,15 @@ import React, { useCallback, useMemo, useState } from 'react'; import { EuiBasicTable, EuiBasicTableColumn, EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; import { InferenceAPIConfigResponse } from '@kbn/ml-trained-models-utils'; -import { TaskTypes } from '../../../common/types'; +import { + InferenceInferenceEndpointInfo, + InferenceTaskType, +} from '@elastic/elasticsearch/lib/api/types'; +import { ServiceProviderKeys } from '@kbn/inference-endpoint-ui-common'; import * as i18n from '../../../common/translations'; import { useTableData } from '../../hooks/use_table_data'; -import { FilterOptions, InferenceEndpointUI } from './types'; +import { FilterOptions } from './types'; import { useAllInferenceEndpointsState } from '../../hooks/use_all_inference_endpoints_state'; import { ServiceProviderFilter } from './filter/service_provider_filter'; @@ -39,7 +43,7 @@ export const TabularPage: React.FC = ({ inferenceEndpoints }) const [showDeleteAction, setShowDeleteAction] = useState(false); const [showInferenceFlyout, setShowInferenceFlyout] = useState(false); const [selectedInferenceEndpoint, setSelectedInferenceEndpoint] = useState< - InferenceEndpointUI | undefined + InferenceInferenceEndpointInfo | undefined >(undefined); const [searchKey, setSearchKey] = React.useState(''); const { queryParams, setQueryParams, filterOptions, setFilterOptions } = @@ -61,12 +65,15 @@ export const TabularPage: React.FC = ({ inferenceEndpoints }) setShowDeleteAction(false); }, []); - const displayDeleteActionitem = useCallback((selectedEndpoint: InferenceEndpointUI) => { - setSelectedInferenceEndpoint(selectedEndpoint); - setShowDeleteAction(true); - }, []); + const displayDeleteActionitem = useCallback( + (selectedEndpoint: InferenceInferenceEndpointInfo) => { + setSelectedInferenceEndpoint(selectedEndpoint); + setShowDeleteAction(true); + }, + [] + ); - const displayInferenceFlyout = useCallback((selectedEndpoint: InferenceEndpointUI) => { + const displayInferenceFlyout = useCallback((selectedEndpoint: InferenceInferenceEndpointInfo) => { setShowInferenceFlyout(true); setSelectedInferenceEndpoint(selectedEndpoint); }, []); @@ -90,15 +97,19 @@ export const TabularPage: React.FC = ({ inferenceEndpoints }) searchKey ); - const tableColumns = useMemo>>( + const tableColumns = useMemo>>( () => [ { - field: 'endpoint', + field: 'inference_id', name: i18n.ENDPOINT, 'data-test-subj': 'endpointCell', - render: (endpoint: string, additionalInfo: InferenceEndpointUI) => { - if (endpoint) { - return ; + + render: ( + inferenceId: InferenceInferenceEndpointInfo['inference_id'], + endpointInfo: InferenceInferenceEndpointInfo + ) => { + if (inferenceId) { + return ; } return null; @@ -107,12 +118,12 @@ export const TabularPage: React.FC = ({ inferenceEndpoints }) width: '300px', }, { - field: 'provider', + field: 'service', name: i18n.SERVICE_PROVIDER, 'data-test-subj': 'providerCell', - render: (provider: InferenceAPIConfigResponse) => { - if (provider) { - return ; + render: (service: ServiceProviderKeys, endpointInfo: InferenceInferenceEndpointInfo) => { + if (service) { + return ; } return null; @@ -121,12 +132,12 @@ export const TabularPage: React.FC = ({ inferenceEndpoints }) width: '285px', }, { - field: 'type', + field: 'task_type', name: i18n.TASK_TYPE, 'data-test-subj': 'typeCell', - render: (type: TaskTypes) => { - if (type) { - return ; + render: (taskType: InferenceTaskType) => { + if (taskType) { + return ; } return null; @@ -149,7 +160,7 @@ export const TabularPage: React.FC = ({ inferenceEndpoints }) description: i18n.ENDPOINT_COPY_ID_ACTION_LABEL, icon: 'copyClipboard', type: 'icon', - onClick: (item) => copyContent(item.endpoint), + onClick: (item) => copyContent(item.inference_id), 'data-test-subj': 'inference-endpoints-action-copy-id-label', }, { @@ -157,10 +168,10 @@ export const TabularPage: React.FC = ({ inferenceEndpoints }) description: i18n.ENDPOINT_DELETE_ACTION_LABEL, icon: 'trash', type: 'icon', - enabled: (item) => !isEndpointPreconfigured(item.endpoint), + enabled: (item) => !isEndpointPreconfigured(item.inference_id), onClick: (item) => displayDeleteActionitem(item), 'data-test-subj': (item) => - isEndpointPreconfigured(item.endpoint) + isEndpointPreconfigured(item.inference_id) ? 'inferenceUIDeleteAction-preconfigured' : 'inferenceUIDeleteAction-user-defined', }, @@ -230,7 +241,7 @@ export const TabularPage: React.FC = ({ inferenceEndpoints }) {showInferenceFlyout && selectedInferenceEndpoint ? ( ) : null} diff --git a/x-pack/solutions/search/plugins/search_inference_endpoints/public/components/all_inference_endpoints/types.ts b/x-pack/solutions/search/plugins/search_inference_endpoints/public/components/all_inference_endpoints/types.ts index 2d2a8af8da177..20d445c8e98cf 100644 --- a/x-pack/solutions/search/plugins/search_inference_endpoints/public/components/all_inference_endpoints/types.ts +++ b/x-pack/solutions/search/plugins/search_inference_endpoints/public/components/all_inference_endpoints/types.ts @@ -5,13 +5,13 @@ * 2.0. */ -import { InferenceAPIConfigResponse } from '@kbn/ml-trained-models-utils'; import { ServiceProviderKeys } from '@kbn/inference-endpoint-ui-common'; -import { TaskTypes } from '../../types'; +import { InferenceTaskType } from '@elastic/elasticsearch/lib/api/types'; + export const INFERENCE_ENDPOINTS_TABLE_PER_PAGE_VALUES = [25, 50, 100]; export enum SortFieldInferenceEndpoint { - endpoint = 'endpoint', + inference_id = 'inference_id', } export enum SortOrder { asc = 'asc', @@ -30,7 +30,7 @@ export interface QueryParams extends SortingParams { export interface FilterOptions { provider: ServiceProviderKeys[]; - type: TaskTypes[]; + type: InferenceTaskType[]; } export interface AllInferenceEndpointsTableState { @@ -43,12 +43,6 @@ export interface EuiBasicTableSortTypes { field: string; } -export interface InferenceEndpointUI { - endpoint: string; - provider: InferenceAPIConfigResponse; - type: string; -} - export interface InferenceUsageInfo { id: string; type: string; diff --git a/x-pack/solutions/search/plugins/search_inference_endpoints/public/components/edit_inference_endpoints/edit_inference_flyout.test.tsx b/x-pack/solutions/search/plugins/search_inference_endpoints/public/components/edit_inference_endpoints/edit_inference_flyout.test.tsx index afa084dc572c0..e94b2eb89c9f3 100644 --- a/x-pack/solutions/search/plugins/search_inference_endpoints/public/components/edit_inference_endpoints/edit_inference_flyout.test.tsx +++ b/x-pack/solutions/search/plugins/search_inference_endpoints/public/components/edit_inference_endpoints/edit_inference_flyout.test.tsx @@ -12,7 +12,7 @@ import { render, screen } from '@testing-library/react'; import { EditInferenceFlyout } from './edit_inference_flyout'; import { useQueryInferenceEndpoints } from '../../hooks/use_inference_endpoints'; import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; -import { InferenceEndpointUI } from '../all_inference_endpoints/types'; +import { InferenceInferenceEndpointInfo } from '@elastic/elasticsearch/lib/api/types'; jest.mock('../../hooks/use_kibana'); jest.mock('../../hooks/use_inference_endpoints'); @@ -29,19 +29,17 @@ describe('EditInferenceFlyout', () => { const mockToasts = { addSuccess: jest.fn(), addError: jest.fn() }; const mockHttp = jest.fn(); - const mockInferenceEndpointUI = { - endpoint: 'test-endpoint', - type: 'sparse_embedding', - provider: { - service: 'openai', - service_settings: { - api_key: 'valueA', - organization_id: 'valueB', - url: 'https://someurl.com/chat/completions', - model_id: 'third-party', - }, + const mockInferenceEndpoint: InferenceInferenceEndpointInfo = { + inference_id: 'test-endpoint', + task_type: 'sparse_embedding', + service: 'openai', + service_settings: { + api_key: 'valueA', + organization_id: 'valueB', + url: 'https://someurl.com/chat/completions', + model_id: 'third-party', }, - } as InferenceEndpointUI; + }; const queryClient = new QueryClient(); const renderComponent = () => @@ -49,7 +47,7 @@ describe('EditInferenceFlyout', () => { ); @@ -81,9 +79,9 @@ describe('EditInferenceFlyout', () => { onSubmitSuccess: expect.any(Function), inferenceEndpoint: { config: { - inferenceId: mockInferenceEndpointUI.endpoint, - taskType: mockInferenceEndpointUI.type, - provider: mockInferenceEndpointUI.provider.service, + inferenceId: mockInferenceEndpoint.inference_id, + taskType: mockInferenceEndpoint.task_type, + provider: mockInferenceEndpoint.service, providerConfig: { api_key: 'valueA', organization_id: 'valueB', diff --git a/x-pack/solutions/search/plugins/search_inference_endpoints/public/components/edit_inference_endpoints/edit_inference_flyout.tsx b/x-pack/solutions/search/plugins/search_inference_endpoints/public/components/edit_inference_endpoints/edit_inference_flyout.tsx index fc20b10497901..bdf879a7a65c4 100644 --- a/x-pack/solutions/search/plugins/search_inference_endpoints/public/components/edit_inference_endpoints/edit_inference_flyout.tsx +++ b/x-pack/solutions/search/plugins/search_inference_endpoints/public/components/edit_inference_endpoints/edit_inference_flyout.tsx @@ -9,17 +9,17 @@ import { InferenceFlyoutWrapper } from '@kbn/inference-endpoint-ui-common/src/co import React, { useCallback } from 'react'; import { InferenceEndpoint } from '@kbn/inference-endpoint-ui-common'; import { flattenObject } from '@kbn/object-utils'; +import { InferenceInferenceEndpointInfo } from '@elastic/elasticsearch/lib/api/types'; import { useKibana } from '../../hooks/use_kibana'; import { useQueryInferenceEndpoints } from '../../hooks/use_inference_endpoints'; -import { InferenceEndpointUI } from '../all_inference_endpoints/types'; interface EditInterfaceFlyoutProps { onFlyoutClose: () => void; - inferenceEndpointUI: InferenceEndpointUI; + selectedInferenceEndpoint: InferenceInferenceEndpointInfo; } export const EditInferenceFlyout: React.FC = ({ onFlyoutClose, - inferenceEndpointUI, + selectedInferenceEndpoint, }) => { const { services: { @@ -34,10 +34,10 @@ export const EditInferenceFlyout: React.FC = ({ const inferenceEndpoint: InferenceEndpoint = { config: { - inferenceId: inferenceEndpointUI.endpoint, - taskType: inferenceEndpointUI.type, - provider: inferenceEndpointUI.provider.service, - providerConfig: flattenObject(inferenceEndpointUI.provider.service_settings), + inferenceId: selectedInferenceEndpoint.inference_id, + taskType: selectedInferenceEndpoint.task_type, + provider: selectedInferenceEndpoint.service, + providerConfig: flattenObject(selectedInferenceEndpoint.service_settings), }, secrets: { providerSecrets: {}, diff --git a/x-pack/solutions/search/plugins/search_inference_endpoints/public/hooks/use_table_data.test.tsx b/x-pack/solutions/search/plugins/search_inference_endpoints/public/hooks/use_table_data.test.tsx index ce972a7d04ad4..dc9d926a9a14f 100644 --- a/x-pack/solutions/search/plugins/search_inference_endpoints/public/hooks/use_table_data.test.tsx +++ b/x-pack/solutions/search/plugins/search_inference_endpoints/public/hooks/use_table_data.test.tsx @@ -7,14 +7,18 @@ import { InferenceAPIConfigResponse } from '@kbn/ml-trained-models-utils'; import { renderHook } from '@testing-library/react'; -import { QueryParams } from '../components/all_inference_endpoints/types'; +import { + QueryParams, + SortFieldInferenceEndpoint, + SortOrder, +} from '../components/all_inference_endpoints/types'; import { useTableData } from './use_table_data'; import { INFERENCE_ENDPOINTS_TABLE_PER_PAGE_VALUES } from '../components/all_inference_endpoints/types'; import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import React from 'react'; import { TRAINED_MODEL_STATS_QUERY_KEY } from '../../common/constants'; -const inferenceEndpoints = [ +const inferenceEndpoints: InferenceAPIConfigResponse[] = [ { inference_id: 'my-elser-model-04', task_type: 'sparse_embedding', @@ -47,14 +51,14 @@ const inferenceEndpoints = [ }, task_settings: {}, }, -] as InferenceAPIConfigResponse[]; +]; -const queryParams = { +const queryParams: QueryParams = { page: 1, perPage: 10, - sortField: 'endpoint', - sortOrder: 'desc', -} as QueryParams; + sortField: SortFieldInferenceEndpoint.inference_id, + sortOrder: SortOrder.desc, +}; const filterOptions = { provider: ['elasticsearch', 'openai'], @@ -102,7 +106,7 @@ describe('useTableData', () => { expect(result.current.sorting).toEqual({ sort: { direction: 'desc', - field: 'endpoint', + field: 'inference_id', }, }); }); @@ -117,7 +121,7 @@ describe('useTableData', () => { b.inference_id.localeCompare(a.inference_id) ); - const sortedEndpoints = result.current.sortedTableData.map((item) => item.endpoint); + const sortedEndpoints = result.current.sortedTableData.map((item) => item.inference_id); const expectedModelIds = expectedSortedData.map((item) => item.inference_id); expect(sortedEndpoints).toEqual(expectedModelIds); @@ -137,8 +141,8 @@ describe('useTableData', () => { expect( filteredData.every( (endpoint) => - filterOptions.provider.includes(endpoint.provider) && - filterOptions.type.includes(endpoint.type) + filterOptions.provider.includes(endpoint.service) && + filterOptions.type.includes(endpoint.task_type) ) ).toBeTruthy(); }); @@ -150,6 +154,6 @@ describe('useTableData', () => { { wrapper } ); const filteredData = result.current.sortedTableData; - expect(filteredData.every((item) => item.endpoint.includes(searchKey))).toBeTruthy(); + expect(filteredData.every((item) => item.inference_id.includes(searchKey))).toBeTruthy(); }); }); diff --git a/x-pack/solutions/search/plugins/search_inference_endpoints/public/hooks/use_table_data.tsx b/x-pack/solutions/search/plugins/search_inference_endpoints/public/hooks/use_table_data.tsx index c2d54dd738eac..b0a477aee269d 100644 --- a/x-pack/solutions/search/plugins/search_inference_endpoints/public/hooks/use_table_data.tsx +++ b/x-pack/solutions/search/plugins/search_inference_endpoints/public/hooks/use_table_data.tsx @@ -10,22 +10,21 @@ import { Pagination } from '@elastic/eui'; import { InferenceAPIConfigResponse } from '@kbn/ml-trained-models-utils'; import { useMemo } from 'react'; import { ServiceProviderKeys } from '@kbn/inference-endpoint-ui-common'; -import { TaskTypes } from '../../common/types'; +import { InferenceInferenceEndpointInfo } from '@elastic/elasticsearch/lib/api/types'; import { DEFAULT_TABLE_LIMIT } from '../components/all_inference_endpoints/constants'; import { FilterOptions, INFERENCE_ENDPOINTS_TABLE_PER_PAGE_VALUES, - InferenceEndpointUI, QueryParams, SortOrder, } from '../components/all_inference_endpoints/types'; interface UseTableDataReturn { - tableData: InferenceEndpointUI[]; - sortedTableData: InferenceEndpointUI[]; - paginatedSortedTableData: InferenceEndpointUI[]; + tableData: InferenceInferenceEndpointInfo[]; + sortedTableData: InferenceInferenceEndpointInfo[]; + paginatedSortedTableData: InferenceInferenceEndpointInfo[]; pagination: Pagination; - sorting: EuiTableSortingType; + sorting: EuiTableSortingType; } export const useTableData = ( @@ -34,7 +33,7 @@ export const useTableData = ( filterOptions: FilterOptions, searchKey: string ): UseTableDataReturn => { - const tableData: InferenceEndpointUI[] = useMemo(() => { + const tableData: InferenceInferenceEndpointInfo[] = useMemo(() => { let filteredEndpoints = inferenceEndpoints; if (filterOptions.provider.length > 0) { @@ -45,20 +44,14 @@ export const useTableData = ( if (filterOptions.type.length > 0) { filteredEndpoints = filteredEndpoints.filter((endpoint) => - filterOptions.type.includes(TaskTypes[endpoint.task_type]) + filterOptions.type.includes(endpoint.task_type) ); } - return filteredEndpoints - .filter((endpoint) => endpoint.inference_id.includes(searchKey)) - .map((endpoint) => ({ - endpoint: endpoint.inference_id, - provider: endpoint, - type: endpoint.task_type, - })); + return filteredEndpoints.filter((endpoint) => endpoint.inference_id.includes(searchKey)); }, [inferenceEndpoints, searchKey, filterOptions]); - const sortedTableData: InferenceEndpointUI[] = useMemo(() => { + const sortedTableData: InferenceInferenceEndpointInfo[] = useMemo(() => { return [...tableData].sort((a, b) => { const aValue = a[queryParams.sortField]; const bValue = b[queryParams.sortField]; @@ -81,7 +74,7 @@ export const useTableData = ( [inferenceEndpoints, queryParams] ); - const paginatedSortedTableData: InferenceEndpointUI[] = useMemo(() => { + const paginatedSortedTableData: InferenceInferenceEndpointInfo[] = useMemo(() => { const pageSize = pagination.pageSize || DEFAULT_TABLE_LIMIT; const startIndex = pagination.pageIndex * pageSize; const endIndex = startIndex + pageSize; diff --git a/x-pack/solutions/search/plugins/search_inference_endpoints/public/hooks/use_trained_model_stats.ts b/x-pack/solutions/search/plugins/search_inference_endpoints/public/hooks/use_trained_model_stats.ts deleted file mode 100644 index 57b643b78dc3a..0000000000000 --- a/x-pack/solutions/search/plugins/search_inference_endpoints/public/hooks/use_trained_model_stats.ts +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one - * or more contributor license agreements. Licensed under the Elastic License - * 2.0; you may not use this file except in compliance with the Elastic License - * 2.0. - */ - -import { useQuery } from '@tanstack/react-query'; -import { InferenceStatsResponse } from '@kbn/ml-plugin/public/application/services/ml_api_service/trained_models'; -import { useKibana } from './use_kibana'; -import { TRAINED_MODEL_STATS_QUERY_KEY } from '../../common/constants'; - -export const useTrainedModelStats = () => { - const { services } = useKibana(); - - return useQuery({ - queryKey: [TRAINED_MODEL_STATS_QUERY_KEY], - queryFn: async () => { - const response = await services.ml?.mlApi?.trainedModels.getTrainedModelStats(); - - return response || ({ count: 0, trained_model_stats: [] } as InferenceStatsResponse); - }, - }); -}; diff --git a/x-pack/solutions/search/plugins/search_inference_endpoints/public/utils/reranker_helper.ts b/x-pack/solutions/search/plugins/search_inference_endpoints/public/utils/reranker_helper.ts index f0fa6d2368412..d2a7896844c73 100644 --- a/x-pack/solutions/search/plugins/search_inference_endpoints/public/utils/reranker_helper.ts +++ b/x-pack/solutions/search/plugins/search_inference_endpoints/public/utils/reranker_helper.ts @@ -5,8 +5,8 @@ * 2.0. */ -import { InferenceAPIConfigResponse } from '@kbn/ml-trained-models-utils'; -export const isProviderTechPreview = (provider: InferenceAPIConfigResponse) => { +import { InferenceInferenceEndpointInfo } from '@elastic/elasticsearch/lib/api/types'; +export const isProviderTechPreview = (provider: InferenceInferenceEndpointInfo) => { const { service_settings: serviceSettings, task_type: taskType } = provider; const modelId = serviceSettings?.model_id; diff --git a/x-pack/solutions/search/plugins/search_inference_endpoints/public/utils/test_utils/test_utils.ts b/x-pack/solutions/search/plugins/search_inference_endpoints/public/utils/test_utils/test_utils.ts index cbcc65b640d10..ca6aa2b675e90 100644 --- a/x-pack/solutions/search/plugins/search_inference_endpoints/public/utils/test_utils/test_utils.ts +++ b/x-pack/solutions/search/plugins/search_inference_endpoints/public/utils/test_utils/test_utils.ts @@ -5,8 +5,7 @@ * 2.0. */ -import { FieldType } from '@kbn/inference-endpoint-ui-common'; -import { InferenceProvider } from '../../types'; +import { FieldType, InferenceProvider } from '@kbn/inference-endpoint-ui-common'; export const mockProviders: InferenceProvider[] = [ { diff --git a/x-pack/solutions/search/plugins/search_inference_endpoints/server/lib/delete_inference_endpoint.ts b/x-pack/solutions/search/plugins/search_inference_endpoints/server/lib/delete_inference_endpoint.ts index c6ea0946493cf..1c43d233efd03 100644 --- a/x-pack/solutions/search/plugins/search_inference_endpoints/server/lib/delete_inference_endpoint.ts +++ b/x-pack/solutions/search/plugins/search_inference_endpoints/server/lib/delete_inference_endpoint.ts @@ -7,22 +7,15 @@ import { InferenceTaskType } from '@elastic/elasticsearch/lib/api/types'; import { ElasticsearchClient } from '@kbn/core/server'; -import { TaskTypes } from '../../common/types'; - -function isTaskType(type?: string): type is InferenceTaskType { - return type ? Object.values(TaskTypes).includes(type as TaskTypes) : true; -} export const deleteInferenceEndpoint = async ( client: ElasticsearchClient, - type: string, + type: InferenceTaskType, id: string, scanUsage?: boolean ) => { - if (isTaskType(type)) { - if (scanUsage) { - return await client.inference.delete({ inference_id: id, task_type: type, dry_run: true }); - } - return await client.inference.delete({ inference_id: id, task_type: type, force: true }); + if (scanUsage) { + return await client.inference.delete({ inference_id: id, task_type: type, dry_run: true }); } + return await client.inference.delete({ inference_id: id, task_type: type, force: true }); }; diff --git a/x-pack/solutions/search/plugins/search_inference_endpoints/server/routes.ts b/x-pack/solutions/search/plugins/search_inference_endpoints/server/routes.ts index e001beae85ea9..39d7a92361cde 100644 --- a/x-pack/solutions/search/plugins/search_inference_endpoints/server/routes.ts +++ b/x-pack/solutions/search/plugins/search_inference_endpoints/server/routes.ts @@ -8,6 +8,7 @@ import { IRouter } from '@kbn/core/server'; import { schema } from '@kbn/config-schema'; import type { Logger } from '@kbn/logging'; +import { InferenceTaskType } from '@elastic/elasticsearch/lib/api/types'; import { fetchInferenceEndpoints } from './lib/fetch_inference_endpoints'; import { APIRoutes } from './types'; import { errorHandler } from './utils/error_handler'; @@ -55,7 +56,12 @@ export function defineRoutes({ logger, router }: { logger: Logger; router: IRout const { type, id } = request.params; const { scanUsage } = request.query; - const result = await deleteInferenceEndpoint(asCurrentUser, type, id, scanUsage ?? false); + const result = await deleteInferenceEndpoint( + asCurrentUser, + type as InferenceTaskType, + id, + scanUsage ?? false + ); return response.ok({ body: result }); }) diff --git a/x-pack/solutions/security/packages/kbn-cloud-security-posture/public/src/types.ts b/x-pack/solutions/security/packages/kbn-cloud-security-posture/public/src/types.ts index 5c3eec8a1dd33..a500e9ae6dd89 100644 --- a/x-pack/solutions/security/packages/kbn-cloud-security-posture/public/src/types.ts +++ b/x-pack/solutions/security/packages/kbn-cloud-security-posture/public/src/types.ts @@ -27,7 +27,7 @@ import type { estypes } from '@elastic/elasticsearch'; import type { IKibanaSearchResponse, IKibanaSearchRequest } from '@kbn/search-types'; import type { BoolQuery } from '@kbn/es-query'; -export interface FindingsBaseEsQuery { +export interface BaseEsQuery { query?: { bool: BoolQuery; }; diff --git a/x-pack/solutions/security/packages/upselling/sections/siem_migrations_start.test.tsx b/x-pack/solutions/security/packages/upselling/sections/siem_migrations_start.test.tsx new file mode 100644 index 0000000000000..9f73821f37c1c --- /dev/null +++ b/x-pack/solutions/security/packages/upselling/sections/siem_migrations_start.test.tsx @@ -0,0 +1,44 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { render, screen } from '@testing-library/react'; +import { SiemMigrationStartUpsellSection } from './siem_migrations_start'; + +describe('SiemMigrationStartUpsellSection', () => { + it('should render the component with all sections correctly', () => { + render( + + ); + + expect(screen.getByTestId('siemMigrationStartUpsellSection')).toBeVisible(); + + expect(screen.getByTestId('siemMigrationStartUpsellTitle')).toBeVisible(); + expect(screen.getByTestId('siemMigrationStartUpsellTitle')).toHaveTextContent('title'); + + expect(screen.getByTestId('siemMigrationStartUpsellMessage')).toBeVisible(); + expect(screen.getByTestId('siemMigrationStartUpsellMessage')).toHaveTextContent( + 'upgradeMessage' + ); + + expect(screen.getByTestId('siemMigrationStartUpsellHref')).toBeVisible(); + expect(screen.getByTestId('siemMigrationStartUpsellHref')).toHaveAttribute( + 'href', + 'https://upgrade.Href' + ); + }); + + it('should render the component without upgradeHref', () => { + render(); + + expect(screen.queryByTestId('SiemMigrationStartUpsellHref')).not.toBeInTheDocument(); + }); +}); diff --git a/x-pack/solutions/security/packages/upselling/sections/siem_migrations_start.tsx b/x-pack/solutions/security/packages/upselling/sections/siem_migrations_start.tsx new file mode 100644 index 0000000000000..bf61709313ff3 --- /dev/null +++ b/x-pack/solutions/security/packages/upselling/sections/siem_migrations_start.tsx @@ -0,0 +1,52 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { EuiButton, EuiCallOut, EuiFlexGroup, EuiFlexItem, EuiPanel, EuiText } from '@elastic/eui'; +import React from 'react'; + +export const SiemMigrationStartUpsellSection = React.memo(function SiemMigrationStartUpsellSection({ + title, + upgradeMessage, + upgradeHref, +}: { + title: React.ReactNode; + upgradeMessage: React.ReactNode; + upgradeHref?: string; +}) { + return ( + <> + + + + + + {upgradeMessage} + + + {upgradeHref ? ( + + + {'Manage License'} + + + ) : null} + + + + + ); +}); diff --git a/x-pack/solutions/security/packages/upselling/service/types.ts b/x-pack/solutions/security/packages/upselling/service/types.ts index 2b335e2ebf27b..02e7b19af4c03 100644 --- a/x-pack/solutions/security/packages/upselling/service/types.ts +++ b/x-pack/solutions/security/packages/upselling/service/types.ts @@ -20,7 +20,8 @@ export type UpsellingSectionId = | 'endpoint_custom_notification' | 'cloud_security_posture_integration_installation' | 'ruleDetailsEndpointExceptions' - | 'automatic_import'; + | 'automatic_import' + | 'siem_migrations_start'; export type UpsellingMessageId = | 'investigation_guide' diff --git a/x-pack/solutions/security/plugins/cloud_security_posture/jest.config.js b/x-pack/solutions/security/plugins/cloud_security_posture/jest.config.js index 630c9292dd304..58ea68c679bf9 100644 --- a/x-pack/solutions/security/plugins/cloud_security_posture/jest.config.js +++ b/x-pack/solutions/security/plugins/cloud_security_posture/jest.config.js @@ -6,10 +6,15 @@ */ /** @type {import('@jest/types').Config.InitialOptions} */ + module.exports = { preset: '@kbn/test', rootDir: '../../../../..', roots: ['/x-pack/solutions/security/plugins/cloud_security_posture'], + // setupFilesAfterEnv is a list of scripts that are executed after JSDOM is initialized. + setupFilesAfterEnv: [ + '/x-pack/solutions/security/plugins/cloud_security_posture/jest.setup.js', + ], coverageDirectory: '/target/kibana-coverage/jest/x-pack/solutions/security/plugins/cloud_security_posture', coverageReporters: ['text', 'html'], diff --git a/x-pack/solutions/security/plugins/cloud_security_posture/jest.setup.js b/x-pack/solutions/security/plugins/cloud_security_posture/jest.setup.js new file mode 100644 index 0000000000000..e43772b4f736c --- /dev/null +++ b/x-pack/solutions/security/plugins/cloud_security_posture/jest.setup.js @@ -0,0 +1,22 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +// This is a fix for the BroadcastChannel API not being available in JSDOM. +// This is a temporary workaround until JSDOM supports BroadcastChannel. +// https://github.com/mswjs/data/issues/306 +// https://github.com/elastic/kibana/pull/208427 +class BroadcastChannelMock { + constructor() { + this.onmessage = null; + } + postMessage(data) { + if (this.onmessage) { + this.onmessage({ data }); + } + } +} +global.BroadcastChannel = BroadcastChannelMock; diff --git a/x-pack/solutions/security/plugins/cloud_security_posture/public/pages/configurations/latest_findings/use_latest_findings.ts b/x-pack/solutions/security/plugins/cloud_security_posture/public/pages/configurations/latest_findings/use_latest_findings.ts index 9800990a38e4b..e879b07fb2b77 100644 --- a/x-pack/solutions/security/plugins/cloud_security_posture/public/pages/configurations/latest_findings/use_latest_findings.ts +++ b/x-pack/solutions/security/plugins/cloud_security_posture/public/pages/configurations/latest_findings/use_latest_findings.ts @@ -19,14 +19,14 @@ import { } from '@kbn/cloud-security-posture-common'; import type { CspFinding } from '@kbn/cloud-security-posture-common'; import type { CspBenchmarkRulesStates } from '@kbn/cloud-security-posture-common/schema/rules/latest'; -import type { FindingsBaseEsQuery } from '@kbn/cloud-security-posture'; +import type { BaseEsQuery } from '@kbn/cloud-security-posture'; import { useGetCspBenchmarkRulesStatesApi } from '@kbn/cloud-security-posture/src/hooks/use_get_benchmark_rules_state_api'; import type { RuntimePrimitiveTypes } from '@kbn/data-views-plugin/common'; import { CDR_MISCONFIGURATION_DATA_TABLE_RUNTIME_MAPPING_FIELDS } from '../../../common/constants'; import { useKibana } from '../../../common/hooks/use_kibana'; import { getAggregationCount, getFindingsCountAggQuery } from '../utils/utils'; -interface UseFindingsOptions extends FindingsBaseEsQuery { +interface UseFindingsOptions extends BaseEsQuery { sort: string[][]; enabled: boolean; pageSize: number; diff --git a/x-pack/solutions/security/plugins/cloud_security_posture/public/pages/vulnerabilities/hooks/use_latest_vulnerabilities.tsx b/x-pack/solutions/security/plugins/cloud_security_posture/public/pages/vulnerabilities/hooks/use_latest_vulnerabilities.tsx index 6763547730e1a..e53c8cb9c685a 100644 --- a/x-pack/solutions/security/plugins/cloud_security_posture/public/pages/vulnerabilities/hooks/use_latest_vulnerabilities.tsx +++ b/x-pack/solutions/security/plugins/cloud_security_posture/public/pages/vulnerabilities/hooks/use_latest_vulnerabilities.tsx @@ -21,7 +21,7 @@ import { CDR_VULNERABILITIES_INDEX_PATTERN, CDR_3RD_PARTY_RETENTION_POLICY, } from '@kbn/cloud-security-posture-common'; -import { FindingsBaseEsQuery, showErrorToast } from '@kbn/cloud-security-posture'; +import { BaseEsQuery, showErrorToast } from '@kbn/cloud-security-posture'; import type { CspVulnerabilityFinding } from '@kbn/cloud-security-posture-common/schema/vulnerabilities/latest'; import type { RuntimePrimitiveTypes } from '@kbn/data-views-plugin/common'; import { @@ -38,7 +38,7 @@ type LatestFindingsResponse = IKibanaSearchResponse< interface FindingsAggs { count: AggregationsMultiBucketAggregateBase; } -interface VulnerabilitiesQuery extends FindingsBaseEsQuery { +interface VulnerabilitiesQuery extends BaseEsQuery { sort: string[][]; enabled: boolean; pageSize: number; diff --git a/x-pack/solutions/security/plugins/cloud_security_posture/public/test/mock_server/mock_server.ts b/x-pack/solutions/security/plugins/cloud_security_posture/public/test/mock_server/mock_server.ts index 1c5480f339a64..7fa2203bcdac5 100644 --- a/x-pack/solutions/security/plugins/cloud_security_posture/public/test/mock_server/mock_server.ts +++ b/x-pack/solutions/security/plugins/cloud_security_posture/public/test/mock_server/mock_server.ts @@ -17,7 +17,6 @@ import { CspClientPluginStartDeps } from '@kbn/cloud-security-posture'; import { defaultHandlers } from './handlers'; import { getMockDependencies } from '../fixtures/get_mock_dependencies'; import { MOCK_SERVER_LICENSING_INFO_URL } from './handlers/licensing.handlers.mock'; - /** * Mock the lastValueFrom function from rxjs to return the result of the promise instead of the Observable * This is for simplifying the testing by avoiding the need to subscribe to the Observable while producing the same result diff --git a/x-pack/solutions/security/plugins/elastic_assistant/common/constants.ts b/x-pack/solutions/security/plugins/elastic_assistant/common/constants.ts index 3c3b016870d46..86f8acd69ee70 100755 --- a/x-pack/solutions/security/plugins/elastic_assistant/common/constants.ts +++ b/x-pack/solutions/security/plugins/elastic_assistant/common/constants.ts @@ -31,3 +31,5 @@ export const CAPABILITIES = `${BASE_PATH}/capabilities`; Licensing requirements */ export const MINIMUM_AI_ASSISTANT_LICENSE = 'enterprise' as const; + +export const DEFAULT_DATE_FORMAT_TZ = 'dateFormat:tz' as const; diff --git a/x-pack/solutions/security/plugins/elastic_assistant/server/__mocks__/data_clients.mock.ts b/x-pack/solutions/security/plugins/elastic_assistant/server/__mocks__/data_clients.mock.ts index cab4f49b98fd6..6c01951c730e4 100644 --- a/x-pack/solutions/security/plugins/elastic_assistant/server/__mocks__/data_clients.mock.ts +++ b/x-pack/solutions/security/plugins/elastic_assistant/server/__mocks__/data_clients.mock.ts @@ -75,6 +75,7 @@ const createKnowledgeBaseDataClientMock = () => { isSetupAvailable: jest.fn(), isUserDataExists: jest.fn(), setupKnowledgeBase: jest.fn(), + getLoadedSecurityLabsDocsCount: jest.fn(), }; return mocked; }; diff --git a/x-pack/solutions/security/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/field_maps_configuration.ts b/x-pack/solutions/security/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/field_maps_configuration.ts index f8fd88b113bf4..16fe8ac9a22a1 100644 --- a/x-pack/solutions/security/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/field_maps_configuration.ts +++ b/x-pack/solutions/security/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/field_maps_configuration.ts @@ -6,6 +6,7 @@ */ import { FieldMap } from '@kbn/data-stream-adapter'; +export const ELSER_MODEL_2 = ['.elser_model_2', '.elser_model_2_linux-x86_64']; export const ASSISTANT_ELSER_INFERENCE_ID = 'elastic-security-ai-assistant-elser2'; export const ELASTICSEARCH_ELSER_INFERENCE_ID = '.elser-2-elasticsearch'; diff --git a/x-pack/solutions/security/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/index.test.ts b/x-pack/solutions/security/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/index.test.ts index 5fd50ec487e7e..e77bd921e7fe0 100644 --- a/x-pack/solutions/security/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/index.test.ts +++ b/x-pack/solutions/security/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/index.test.ts @@ -4,12 +4,7 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import { - coreMock, - elasticsearchServiceMock, - loggingSystemMock, - savedObjectsRepositoryMock, -} from '@kbn/core/server/mocks'; +import { coreMock, elasticsearchServiceMock, loggingSystemMock } from '@kbn/core/server/mocks'; import { AIAssistantKnowledgeBaseDataClient, KnowledgeBaseDataClientParams } from '.'; import { getCreateKnowledgeBaseEntrySchemaMock, @@ -19,6 +14,7 @@ import { import { authenticatedUser } from '../../__mocks__/user'; import { IndexPatternsFetcher } from '@kbn/data-plugin/server'; import type { MlPluginSetup } from '@kbn/ml-plugin/server'; +import { getMlNodeCount } from '@kbn/ml-plugin/server/lib/node_utils'; import { mlPluginMock } from '@kbn/ml-plugin/public/mocks'; import pRetry from 'p-retry'; @@ -29,6 +25,10 @@ import { import { DynamicStructuredTool } from '@langchain/core/tools'; import { newContentReferencesStoreMock } from '@kbn/elastic-assistant-common/impl/content_references/content_references_store/__mocks__/content_references_store.mock'; import { KnowledgeBaseResource } from '@kbn/elastic-assistant-common'; +import { createTrainedModelsProviderMock } from '@kbn/ml-plugin/server/shared_services/providers/__mocks__/trained_models'; +import { ASSISTANT_ELSER_INFERENCE_ID } from './field_maps_configuration'; + +jest.mock('@kbn/ml-plugin/server/lib/node_utils'); jest.mock('../../lib/langchain/content_loaders/security_labs_loader'); jest.mock('p-retry'); const date = '2023-03-28T22:27:28.159Z'; @@ -44,23 +44,16 @@ const telemetry = coreMock.createSetup().analytics; describe('AIAssistantKnowledgeBaseDataClient', () => { let mockOptions: KnowledgeBaseDataClientParams; let ml: MlPluginSetup; - let savedObjectClient: ReturnType; const getElserId = jest.fn(); - const trainedModelsProvider = jest.fn(); - const installElasticModel = jest.fn(); const mockLoadSecurityLabs = loadSecurityLabs as jest.Mock; const mockGetSecurityLabsDocsCount = getSecurityLabsDocsCount as jest.Mock; const mockGetIsKBSetupInProgress = jest.fn(); + const trainedModelsProviderMock = createTrainedModelsProviderMock()(); beforeEach(() => { jest.clearAllMocks(); logger = loggingSystemMock.createLogger(); - savedObjectClient = savedObjectsRepositoryMock.create(); mockLoadSecurityLabs.mockClear(); ml = mlPluginMock.createSetupContract() as unknown as MlPluginSetup; // Missing SharedServices mock, so manually mocking trainedModelsProvider - ml.trainedModelsProvider = trainedModelsProvider.mockImplementation(() => ({ - getELSER: jest.fn().mockImplementation(() => '.elser_model_2'), - installElasticModel: installElasticModel.mockResolvedValue({}), - })); mockOptions = { logger, elasticsearchClientPromise: Promise.resolve(esClientMock), @@ -75,6 +68,7 @@ describe('AIAssistantKnowledgeBaseDataClient', () => { setIsKBSetupInProgress: jest.fn().mockImplementation(() => {}), manageGlobalKnowledgeBaseAIAssistant: true, assistantDefaultInferenceEndpoint: false, + trainedModelsProvider: trainedModelsProviderMock, }; esClientMock.search.mockReturnValue( // @ts-expect-error not full response interface @@ -130,7 +124,7 @@ describe('AIAssistantKnowledgeBaseDataClient', () => { describe('isModelInstalled', () => { it('should check if ELSER model is installed and return true if fully_defined', async () => { const client = new AIAssistantKnowledgeBaseDataClient(mockOptions); - esClientMock.ml.getTrainedModels.mockResolvedValue({ + trainedModelsProviderMock.getTrainedModels.mockResolvedValue({ count: 1, trained_model_configs: [ { fully_defined: true, model_id: '', tags: [], input: { field_names: ['content'] } }, @@ -138,7 +132,7 @@ describe('AIAssistantKnowledgeBaseDataClient', () => { }); const result = await client.isModelInstalled(); expect(result).toBe(true); - expect(esClientMock.ml.getTrainedModels).toHaveBeenCalledWith({ + expect(trainedModelsProviderMock.getTrainedModels).toHaveBeenCalledWith({ model_id: 'elser-id', include: 'definition_status', }); @@ -146,7 +140,7 @@ describe('AIAssistantKnowledgeBaseDataClient', () => { it('should return false if model is not fully defined', async () => { const client = new AIAssistantKnowledgeBaseDataClient(mockOptions); - esClientMock.ml.getTrainedModels.mockResolvedValue({ + trainedModelsProviderMock.getTrainedModels.mockResolvedValue({ count: 0, trained_model_configs: [ { fully_defined: false, model_id: '', tags: [], input: { field_names: ['content'] } }, @@ -158,7 +152,7 @@ describe('AIAssistantKnowledgeBaseDataClient', () => { it('should return false and log error if getting model details fails', async () => { const client = new AIAssistantKnowledgeBaseDataClient(mockOptions); - esClientMock.ml.getTrainedModels.mockRejectedValue(new Error('error happened')); + trainedModelsProviderMock.getTrainedModels.mockRejectedValue(new Error('error happened')); const result = await client.isModelInstalled(); expect(result).toBe(false); expect(logger.error).toHaveBeenCalled(); @@ -168,12 +162,12 @@ describe('AIAssistantKnowledgeBaseDataClient', () => { describe('isInferenceEndpointExists', () => { it('returns true when the model is fully allocated and started in ESS', async () => { const client = new AIAssistantKnowledgeBaseDataClient(mockOptions); - esClientMock.ml.getTrainedModelsStats.mockResolvedValueOnce({ + trainedModelsProviderMock.getTrainedModelsStats.mockResolvedValueOnce({ trained_model_stats: [ { deployment_stats: { state: 'started', - // @ts-expect-error not full response interface + deployment_id: ASSISTANT_ELSER_INFERENCE_ID, allocation_status: { state: 'fully_allocated' }, }, }, @@ -187,11 +181,11 @@ describe('AIAssistantKnowledgeBaseDataClient', () => { it('returns true when the model is started in serverless', async () => { const client = new AIAssistantKnowledgeBaseDataClient(mockOptions); - esClientMock.ml.getTrainedModelsStats.mockResolvedValueOnce({ + trainedModelsProviderMock.getTrainedModelsStats.mockResolvedValueOnce({ trained_model_stats: [ { deployment_stats: { - // @ts-expect-error not full response interface + deployment_id: ASSISTANT_ELSER_INFERENCE_ID, nodes: [{ routing_state: { routing_state: 'started' } }], }, }, @@ -205,12 +199,12 @@ describe('AIAssistantKnowledgeBaseDataClient', () => { it('returns false when the model is not fully allocated in ESS', async () => { const client = new AIAssistantKnowledgeBaseDataClient(mockOptions); - esClientMock.ml.getTrainedModelsStats.mockResolvedValueOnce({ + trainedModelsProviderMock.getTrainedModelsStats.mockResolvedValueOnce({ trained_model_stats: [ { deployment_stats: { state: 'started', - // @ts-expect-error not full response interface + deployment_id: ASSISTANT_ELSER_INFERENCE_ID, allocation_status: { state: 'partially_allocated' }, }, }, @@ -224,11 +218,11 @@ describe('AIAssistantKnowledgeBaseDataClient', () => { it('returns false when the model is not started in serverless', async () => { const client = new AIAssistantKnowledgeBaseDataClient(mockOptions); - esClientMock.ml.getTrainedModelsStats.mockResolvedValueOnce({ + trainedModelsProviderMock.getTrainedModelsStats.mockResolvedValueOnce({ trained_model_stats: [ { deployment_stats: { - // @ts-expect-error not full response interface + deployment_id: ASSISTANT_ELSER_INFERENCE_ID, nodes: [{ routing_state: { routing_state: 'stopped' } }], }, }, @@ -242,7 +236,9 @@ describe('AIAssistantKnowledgeBaseDataClient', () => { it('returns false when an error occurs during the check', async () => { const client = new AIAssistantKnowledgeBaseDataClient(mockOptions); - esClientMock.ml.getTrainedModelsStats.mockRejectedValueOnce(new Error('Mocked Error')); + trainedModelsProviderMock.getTrainedModelsStats.mockRejectedValueOnce( + new Error('Mocked Error') + ); const result = await client.isInferenceEndpointExists(); @@ -267,33 +263,49 @@ describe('AIAssistantKnowledgeBaseDataClient', () => { describe('setupKnowledgeBase', () => { it('should install, deploy, and load docs if not already done', async () => { + (getMlNodeCount as jest.Mock).mockResolvedValue({ count: 1, lazyNodeCount: 0 }); // @ts-expect-error not full response interface esClientMock.search.mockResolvedValue({}); + trainedModelsProviderMock.startTrainedModelDeployment.mockResolvedValue({}); + trainedModelsProviderMock.stopTrainedModelDeployment.mockResolvedValue({}); + trainedModelsProviderMock.getTrainedModelsStats.mockResolvedValue({ + trained_model_stats: [ + { + deployment_stats: { + state: 'started', + deployment_id: ASSISTANT_ELSER_INFERENCE_ID, + allocation_status: { + state: 'fully_allocated', + }, + }, + }, + ], + }); const client = new AIAssistantKnowledgeBaseDataClient(mockOptions); - await client.setupKnowledgeBase({ soClient: savedObjectClient }); + await client.setupKnowledgeBase({}); // install model - expect(trainedModelsProvider).toHaveBeenCalledWith({}, savedObjectClient); - expect(installElasticModel).toHaveBeenCalledWith('elser-id'); + expect(trainedModelsProviderMock.installElasticModel).toHaveBeenCalledWith('elser-id'); expect(loadSecurityLabs).toHaveBeenCalled(); }); it('should skip installation and deployment if model is already installed and deployed', async () => { + (getMlNodeCount as jest.Mock).mockResolvedValue({ count: 1, lazyNodeCount: 0 }); mockGetSecurityLabsDocsCount.mockResolvedValue(1); - esClientMock.ml.getTrainedModels.mockResolvedValue({ + trainedModelsProviderMock.getTrainedModels.mockResolvedValue({ count: 1, trained_model_configs: [ { fully_defined: true, model_id: '', tags: [], input: { field_names: ['content'] } }, ], }); - esClientMock.ml.getTrainedModelsStats.mockResolvedValue({ + trainedModelsProviderMock.getTrainedModelsStats.mockResolvedValue({ trained_model_stats: [ { deployment_stats: { + deployment_id: ASSISTANT_ELSER_INFERENCE_ID, state: 'started', - // @ts-expect-error not full response interface allocation_status: { state: 'fully_allocated', }, @@ -303,17 +315,17 @@ describe('AIAssistantKnowledgeBaseDataClient', () => { }); const client = new AIAssistantKnowledgeBaseDataClient(mockOptions); - await client.setupKnowledgeBase({ soClient: savedObjectClient }); + await client.setupKnowledgeBase({}); - expect(installElasticModel).not.toHaveBeenCalled(); - expect(esClientMock.ml.startTrainedModelDeployment).not.toHaveBeenCalled(); + expect(trainedModelsProviderMock.installElasticModel).not.toHaveBeenCalled(); + expect(trainedModelsProviderMock.startTrainedModelDeployment).not.toHaveBeenCalled(); expect(loadSecurityLabs).not.toHaveBeenCalled(); }); it('should handle errors during installation and deployment', async () => { // @ts-expect-error not full response interface esClientMock.search.mockResolvedValue({}); - esClientMock.ml.getTrainedModels.mockResolvedValue({ + trainedModelsProviderMock.getTrainedModels.mockResolvedValue({ count: 0, trained_model_configs: [ { fully_defined: false, model_id: '', tags: [], input: { field_names: ['content'] } }, @@ -322,7 +334,7 @@ describe('AIAssistantKnowledgeBaseDataClient', () => { mockLoadSecurityLabs.mockRejectedValue(new Error('Installation error')); const client = new AIAssistantKnowledgeBaseDataClient(mockOptions); - await expect(client.setupKnowledgeBase({ soClient: savedObjectClient })).rejects.toThrow( + await expect(client.setupKnowledgeBase({})).rejects.toThrow( 'Error setting up Knowledge Base: Installation error' ); expect(mockOptions.logger.error).toHaveBeenCalledWith( diff --git a/x-pack/solutions/security/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/index.ts b/x-pack/solutions/security/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/index.ts index a2e20f4db8bc8..16e3026ede510 100644 --- a/x-pack/solutions/security/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/index.ts +++ b/x-pack/solutions/security/plugins/elastic_assistant/server/ai_assistant_data_clients/knowledge_base/index.ts @@ -12,9 +12,7 @@ import { QueryDslQueryContainer, } from '@elastic/elasticsearch/lib/api/types'; import type { MlPluginSetup } from '@kbn/ml-plugin/server'; -import type { KibanaRequest } from '@kbn/core-http-server'; import { Document } from 'langchain/document'; -import type { SavedObjectsClientContract } from '@kbn/core-saved-objects-api-server'; import { DocumentEntryType, DocumentEntry, @@ -27,9 +25,16 @@ import { } from '@kbn/elastic-assistant-common'; import pRetry from 'p-retry'; import { StructuredTool } from '@langchain/core/tools'; -import { AnalyticsServiceSetup, AuditLogger, ElasticsearchClient } from '@kbn/core/server'; +import { + AnalyticsServiceSetup, + AuditLogger, + ElasticsearchClient, + IScopedClusterClient, +} from '@kbn/core/server'; import { IndexPatternsFetcher } from '@kbn/data-views-plugin/server'; import { map } from 'lodash'; +import type { TrainedModelsProvider } from '@kbn/ml-plugin/server/shared_services/providers'; +import { getMlNodeCount } from '@kbn/ml-plugin/server/lib/node_utils'; import { AIAssistantDataClient, AIAssistantDataClientParams } from '..'; import { GetElser } from '../../types'; import { @@ -63,6 +68,7 @@ import { import { ASSISTANT_ELSER_INFERENCE_ID, ELASTICSEARCH_ELSER_INFERENCE_ID, + ELSER_MODEL_2, } from './field_maps_configuration'; import { BulkOperationError } from '../../lib/data_stream/documents_data_writer'; import { AUDIT_OUTCOME, KnowledgeBaseAuditAction, knowledgeBaseAuditEvent } from './audit_events'; @@ -79,11 +85,12 @@ export interface GetAIAssistantKnowledgeBaseDataClientParams { export interface KnowledgeBaseDataClientParams extends AIAssistantDataClientParams { ml: MlPluginSetup; getElserId: GetElser; - getIsKBSetupInProgress: () => boolean; + getIsKBSetupInProgress: (spaceId: string) => boolean; ingestPipelineResourceName: string; - setIsKBSetupInProgress: (isInProgress: boolean) => void; + setIsKBSetupInProgress: (spaceId: string, isInProgress: boolean) => void; manageGlobalKnowledgeBaseAIAssistant: boolean; assistantDefaultInferenceEndpoint: boolean; + trainedModelsProvider: ReturnType; } export class AIAssistantKnowledgeBaseDataClient extends AIAssistantDataClient { constructor(public readonly options: KnowledgeBaseDataClientParams) { @@ -91,7 +98,7 @@ export class AIAssistantKnowledgeBaseDataClient extends AIAssistantDataClient { } public get isSetupInProgress() { - return this.options.getIsKBSetupInProgress(); + return this.options.getIsKBSetupInProgress(this.spaceId); } /** * Returns whether setup of the Knowledge Base can be performed (essentially an ML features check) @@ -112,18 +119,13 @@ export class AIAssistantKnowledgeBaseDataClient extends AIAssistantDataClient { /** * Downloads and installs ELSER model if not already installed - * - * @param soClient SavedObjectsClientContract for installing ELSER so that ML SO's are in sync */ - private installModel = async ({ soClient }: { soClient: SavedObjectsClientContract }) => { + private installModel = async () => { const elserId = await this.options.getElserId(); this.options.logger.debug(`Installing ELSER model '${elserId}'...`); try { - await this.options.ml - // TODO: Potentially plumb soClient through DataClient from pluginStart - .trainedModelsProvider({} as KibanaRequest, soClient) - .installElasticModel(elserId); + await this.options.trainedModelsProvider.installElasticModel(elserId); } catch (error) { this.options.logger.error(`Error installing ELSER model '${elserId}':\n${error}`); } @@ -139,8 +141,7 @@ export class AIAssistantKnowledgeBaseDataClient extends AIAssistantDataClient { this.options.logger.debug(`Checking if ELSER model '${elserId}' is installed...`); try { - const esClient = await this.options.elasticsearchClientPromise; - const getResponse = await esClient.ml.getTrainedModels({ + const getResponse = await this.options.trainedModelsProvider.getTrainedModels({ model_id: elserId, include: 'definition_status', }); @@ -156,7 +157,8 @@ export class AIAssistantKnowledgeBaseDataClient extends AIAssistantDataClient { }; public getInferenceEndpointId = async () => { - if (!this.options.assistantDefaultInferenceEndpoint) { + const elserId = await this.options.getElserId(); + if (!this.options.assistantDefaultInferenceEndpoint || !ELSER_MODEL_2.includes(elserId)) { return ASSISTANT_ELSER_INFERENCE_ID; } const esClient = await this.options.elasticsearchClientPromise; @@ -186,6 +188,7 @@ export class AIAssistantKnowledgeBaseDataClient extends AIAssistantDataClient { * @returns Promise indicating whether the model is deployed */ public isInferenceEndpointExists = async (inferenceEndpointId?: string): Promise => { + const elserId = await this.options.getElserId(); const inferenceId = inferenceEndpointId || (await this.getInferenceEndpointId()); try { @@ -195,13 +198,19 @@ export class AIAssistantKnowledgeBaseDataClient extends AIAssistantDataClient { inference_id: inferenceId, task_type: 'sparse_embedding', })); + if (!inferenceExists) { return false; } - const elserId = await this.options.getElserId(); - const getResponse = await esClient.ml.getTrainedModelsStats({ - model_id: elserId, - }); + + let getResponse; + try { + getResponse = await this.options.trainedModelsProvider.getTrainedModelsStats({ + model_id: elserId, + }); + } catch (e) { + return false; + } // For standardized way of checking deployment status see: https://github.com/elastic/elasticsearch/issues/106986 const isReadyESS = (stats: MlTrainedModelStats) => @@ -213,9 +222,9 @@ export class AIAssistantKnowledgeBaseDataClient extends AIAssistantDataClient { (node) => node.routing_state.routing_state === 'started' ); - return !!getResponse.trained_model_stats?.some( - (stats) => isReadyESS(stats) || isReadyServerless(stats) - ); + return !!getResponse.trained_model_stats + .filter((stats) => stats.deployment_stats?.deployment_id === inferenceId) + ?.some((stats) => isReadyESS(stats) || isReadyServerless(stats)); } catch (error) { this.options.logger.debug( `Error checking if Inference endpoint ${ASSISTANT_ELSER_INFERENCE_ID} exists: ${error}` @@ -224,31 +233,62 @@ export class AIAssistantKnowledgeBaseDataClient extends AIAssistantDataClient { } }; + private dryRunTrainedModelDeployment = async () => { + const elserId = await this.options.getElserId(); + const esClient = await this.options.elasticsearchClientPromise; + + try { + // As there is no better way to check if the model is deployed, we try to start the model + // deployment and throw an error if it fails + const dryRunId = await esClient.ml.startTrainedModelDeployment({ + model_id: elserId, + wait_for: 'fully_allocated', + }); + this.options.logger.debug(`Dry run for ELSER model '${elserId}' successfully deployed!`); + + await this.options.trainedModelsProvider.stopTrainedModelDeployment({ + model_id: elserId, + deployment_id: dryRunId.assignment.task_parameters.deployment_id, + }); + this.options.logger.debug(`Dry run for ELSER model '${elserId}' successfully stopped!`); + } catch (e) { + this.options.logger.error(`Dry run error starting trained model deployment: ${e.message}`); + throw new Error(`${e.message}`); + } + }; + + private deleteInferenceEndpoint = async () => { + const elserId = await this.options.getElserId(); + const esClient = await this.options.elasticsearchClientPromise; + + try { + await esClient.inference.delete({ + inference_id: ASSISTANT_ELSER_INFERENCE_ID, + // it's being used in the mapping so we need to force delete + force: true, + }); + this.options.logger.debug(`Deleted existing inference endpoint for ELSER model '${elserId}'`); + } catch (error) { + this.options.logger.error( + `Error deleting inference endpoint ${ASSISTANT_ELSER_INFERENCE_ID} for ELSER model '${elserId}':\n${error}` + ); + } + }; + public createInferenceEndpoint = async () => { const elserId = await this.options.getElserId(); this.options.logger.debug(`Deploying ELSER model '${elserId}'...`); const esClient = await this.options.elasticsearchClientPromise; const inferenceId = await this.getInferenceEndpointId(); - const inferenceExists = await this.isInferenceEndpointExists(inferenceId); - // Don't try to create the inference endpoint for ELASTICSEARCH_ELSER_INFERENCE_ID if (inferenceId === ASSISTANT_ELSER_INFERENCE_ID) { - if (inferenceExists) { - try { - await esClient.inference.delete({ - inference_id: ASSISTANT_ELSER_INFERENCE_ID, - // it's being used in the mapping so we need to force delete - force: true, - }); - this.options.logger.debug( - `Deleted existing inference endpoint for ELSER model '${elserId}'` - ); - } catch (error) { - this.options.logger.error( - `Error deleting inference endpoint for ELSER model '${elserId}':\n${error}` - ); - } - } + await this.deleteInferenceEndpoint(); + + await pRetry(async () => this.dryRunTrainedModelDeployment(), { + minTimeout: 10000, + maxTimeout: 10000, + retries: 1, + }); try { await esClient.inference.put({ @@ -270,7 +310,14 @@ export class AIAssistantKnowledgeBaseDataClient extends AIAssistantDataClient { }); // await for the model to be deployed - await this.isInferenceEndpointExists(inferenceId); + const inferenceEndpointExists = await this.isInferenceEndpointExists( + ASSISTANT_ELSER_INFERENCE_ID + ); + if (!inferenceEndpointExists) { + throw new Error( + `Inference endpoint for ELSER model '${elserId}' was not deployed successfully` + ); + } } catch (error) { this.options.logger.error( `Error creating inference endpoint for ELSER model '${elserId}':\n${error}` @@ -279,6 +326,8 @@ export class AIAssistantKnowledgeBaseDataClient extends AIAssistantDataClient { `Error creating inference endpoint for ELSER model '${elserId}':\n${error}` ); } + } else { + await this.dryRunTrainedModelDeployment(); } }; @@ -295,24 +344,30 @@ export class AIAssistantKnowledgeBaseDataClient extends AIAssistantDataClient { * @returns Promise */ public setupKnowledgeBase = async ({ - soClient, ignoreSecurityLabs = false, }: { - soClient: SavedObjectsClientContract; ignoreSecurityLabs?: boolean; }): Promise => { - if (this.options.getIsKBSetupInProgress()) { + const esClient = await this.options.elasticsearchClientPromise; + + if (this.options.getIsKBSetupInProgress(this.spaceId)) { this.options.logger.debug('Knowledge Base setup already in progress'); return; } + this.options.logger.debug('Checking if ML nodes are available...'); + const mlNodesCount = await getMlNodeCount({ asInternalUser: esClient } as IScopedClusterClient); + + if (mlNodesCount.count === 0 && mlNodesCount.lazyNodeCount === 0) { + throw new Error('No ML nodes available'); + } + this.options.logger.debug('Starting Knowledge Base setup...'); - this.options.setIsKBSetupInProgress(true); + this.options.setIsKBSetupInProgress(this.spaceId, true); const elserId = await this.options.getElserId(); // Delete legacy ESQL knowledge base docs if they exist, and silence the error if they do not try { - const esClient = await this.options.elasticsearchClientPromise; const legacyESQL = await esClient.deleteByQuery({ index: this.indexTemplateAndPattern.alias, query: { @@ -326,28 +381,21 @@ export class AIAssistantKnowledgeBaseDataClient extends AIAssistantDataClient { `Removed ${legacyESQL?.total} ESQL knowledge base docs from knowledge base data stream: ${this.indexTemplateAndPattern.alias}.` ); } - // Delete any existing Security Labs content - const securityLabsDocs = await esClient.deleteByQuery({ - index: this.indexTemplateAndPattern.alias, - query: { - bool: { - must: [{ terms: { kb_resource: [SECURITY_LABS_RESOURCE] } }], - }, - }, - }); - if (securityLabsDocs?.total) { - this.options.logger.info( - `Removed ${securityLabsDocs?.total} Security Labs knowledge base docs from knowledge base data stream: ${this.indexTemplateAndPattern.alias}.` - ); - } } catch (e) { this.options.logger.info('No legacy ESQL or Security Labs knowledge base docs to delete'); } try { + /* + #1 Check if ELSER model is downloaded + #2 Check if inference endpoint is deployed + #3 Dry run ELSER model deployment if not already deployed + #4 Create inference endpoint if not deployed / delete and create inference endpoint if model was not deployed + #5 Load Security Labs docs + */ const isInstalled = await this.isModelInstalled(); if (!isInstalled) { - await this.installModel({ soClient }); + await this.installModel(); await pRetry( async () => (await this.isModelInstalled()) @@ -373,11 +421,29 @@ export class AIAssistantKnowledgeBaseDataClient extends AIAssistantDataClient { ); } - this.options.logger.debug(`Checking if Knowledge Base docs have been loaded...`); - if (!ignoreSecurityLabs) { + this.options.logger.debug(`Checking if Knowledge Base docs have been loaded...`); + const labsDocsLoaded = await this.isSecurityLabsDocsLoaded(); if (!labsDocsLoaded) { + // Delete any existing Security Labs content + const securityLabsDocs = await ( + await this.options.elasticsearchClientPromise + ).deleteByQuery({ + index: this.indexTemplateAndPattern.alias, + query: { + bool: { + must: [{ terms: { kb_resource: [SECURITY_LABS_RESOURCE] } }], + }, + }, + }); + + if (securityLabsDocs?.total) { + this.options.logger.info( + `Removed ${securityLabsDocs?.total} Security Labs knowledge base docs from knowledge base data stream: ${this.indexTemplateAndPattern.alias}.` + ); + } + this.options.logger.debug(`Loading Security Labs KB docs...`); await loadSecurityLabs(this, this.options.logger); } else { @@ -385,11 +451,11 @@ export class AIAssistantKnowledgeBaseDataClient extends AIAssistantDataClient { } } } catch (e) { - this.options.setIsKBSetupInProgress(false); + this.options.setIsKBSetupInProgress(this.spaceId, false); this.options.logger.error(`Error setting up Knowledge Base: ${e.message}`); throw new Error(`Error setting up Knowledge Base: ${e.message}`); } finally { - this.options.setIsKBSetupInProgress(false); + this.options.setIsKBSetupInProgress(this.spaceId, false); } }; @@ -493,9 +559,9 @@ export class AIAssistantKnowledgeBaseDataClient extends AIAssistantDataClient { }; /** - * Returns if allSecurity Labs KB docs have been loaded + * Returns loaded Security Labs KB docs count */ - public isSecurityLabsDocsLoaded = async (): Promise => { + public getLoadedSecurityLabsDocsCount = async (): Promise => { const user = this.options.currentUser; if (user == null) { throw new Error( @@ -503,8 +569,6 @@ export class AIAssistantKnowledgeBaseDataClient extends AIAssistantDataClient { ); } - const expectedDocsCount = await getSecurityLabsDocsCount({ logger: this.options.logger }); - const esClient = await this.options.elasticsearchClientPromise; try { @@ -521,7 +585,27 @@ export class AIAssistantKnowledgeBaseDataClient extends AIAssistantDataClient { track_total_hits: true, }); - const existingDocs = (result.hits?.total as SearchTotalHits).value; + return (result.hits?.total as SearchTotalHits).value; + } catch (e) { + this.options.logger.info(`Error checking if Security Labs docs are loaded: ${e.message}`); + return 0; + } + }; + + /** + * Returns if allSecurity Labs KB docs have been loaded + */ + public isSecurityLabsDocsLoaded = async (): Promise => { + const user = this.options.currentUser; + if (user == null) { + throw new Error( + 'Authenticated user not found! Ensure kbDataClient was initialized from a request.' + ); + } + + try { + const expectedDocsCount = await getSecurityLabsDocsCount({ logger: this.options.logger }); + const existingDocs = await this.getLoadedSecurityLabsDocsCount(); if (existingDocs !== expectedDocsCount) { this.options.logger.debug( diff --git a/x-pack/solutions/security/plugins/elastic_assistant/server/ai_assistant_service/index.ts b/x-pack/solutions/security/plugins/elastic_assistant/server/ai_assistant_service/index.ts index 68108829908d2..0055bdd3d4902 100644 --- a/x-pack/solutions/security/plugins/elastic_assistant/server/ai_assistant_service/index.ts +++ b/x-pack/solutions/security/plugins/elastic_assistant/server/ai_assistant_service/index.ts @@ -18,6 +18,7 @@ import { IndicesIndexSettings, } from '@elastic/elasticsearch/lib/api/types'; import { omit } from 'lodash'; +import { TrainedModelsProvider } from '@kbn/ml-plugin/server/shared_services/providers'; import { attackDiscoveryFieldMap } from '../lib/attack_discovery/persistence/field_maps_configuration/field_maps_configuration'; import { defendInsightsFieldMap } from '../ai_assistant_data_clients/defend_insights/field_maps_configuration'; import { getDefaultAnonymizationFields } from '../../common/anonymization'; @@ -101,7 +102,7 @@ export class AIAssistantService { private defendInsightsDataStream: DataStreamSpacesAdapter; private resourceInitializationHelper: ResourceInstallationHelper; private initPromise: Promise; - private isKBSetupInProgress: boolean = false; + private isKBSetupInProgress: Map = new Map(); private hasInitializedV2KnowledgeBase: boolean = false; private productDocManager?: ProductDocBaseStartContract['management']; // Temporary 'feature flag' to determine if we should initialize the new knowledge base mappings @@ -161,12 +162,12 @@ export class AIAssistantService { return this.initialized; } - public getIsKBSetupInProgress() { - return this.isKBSetupInProgress; + public getIsKBSetupInProgress(spaceId: string) { + return this.isKBSetupInProgress.get(spaceId) ?? false; } - public setIsKBSetupInProgress(isInProgress: boolean) { - this.isKBSetupInProgress = isInProgress; + public setIsKBSetupInProgress(spaceId: string, isInProgress: boolean) { + this.isKBSetupInProgress.set(spaceId, isInProgress); } private createDataStream: CreateDataStream = ({ @@ -488,7 +489,10 @@ export class AIAssistantService { } public async createAIAssistantKnowledgeBaseDataClient( - opts: CreateAIAssistantClientParams & GetAIAssistantKnowledgeBaseDataClientParams + opts: CreateAIAssistantClientParams & + GetAIAssistantKnowledgeBaseDataClientParams & { + trainedModelsProvider: ReturnType; + } ): Promise { // If modelIdOverride is set, swap getElserId(), and ensure the pipeline is re-created with the correct model if (opts?.modelIdOverride != null) { @@ -525,6 +529,7 @@ export class AIAssistantService { spaceId: opts.spaceId, manageGlobalKnowledgeBaseAIAssistant: opts.manageGlobalKnowledgeBaseAIAssistant ?? false, assistantDefaultInferenceEndpoint: this.assistantDefaultInferenceEndpoint, + trainedModelsProvider: opts.trainedModelsProvider, }); } diff --git a/x-pack/solutions/security/plugins/elastic_assistant/server/lib/langchain/executors/types.ts b/x-pack/solutions/security/plugins/elastic_assistant/server/lib/langchain/executors/types.ts index d81fe718ea3c0..5b11667809f63 100644 --- a/x-pack/solutions/security/plugins/elastic_assistant/server/lib/langchain/executors/types.ts +++ b/x-pack/solutions/security/plugins/elastic_assistant/server/lib/langchain/executors/types.ts @@ -16,6 +16,7 @@ import { ExecuteConnectorRequestBody, Message, Replacements, + ScreenContext, } from '@kbn/elastic-assistant-common'; import { StreamResponseWithHeaders } from '@kbn/ml-response-stream/server'; import { PublicMethodsOf } from '@kbn/utility-types'; @@ -24,6 +25,7 @@ import { AnalyticsServiceSetup } from '@kbn/core-analytics-server'; import { TelemetryParams } from '@kbn/langchain/server/tracers/telemetry/telemetry_tracer'; import type { LlmTasksPluginStart } from '@kbn/llm-tasks-plugin/server'; import { SavedObjectsClientContract } from '@kbn/core-saved-objects-api-server'; +import { CoreRequestHandlerContext } from '@kbn/core/server'; import { ResponseBody } from '../types'; import type { AssistantTool } from '../../../types'; import { AIAssistantKnowledgeBaseDataClient } from '../../../ai_assistant_data_clients/knowledge_base'; @@ -50,6 +52,7 @@ export interface AgentExecutorParams { connectorId: string; conversationId?: string; contentReferencesStore: ContentReferencesStore; + core: CoreRequestHandlerContext; dataClients?: AssistantDataClients; esClient: ElasticsearchClient; langChainMessages: BaseMessage[]; @@ -65,6 +68,7 @@ export interface AgentExecutorParams { request: KibanaRequest; response?: KibanaResponseFactory; savedObjectsClient: SavedObjectsClientContract; + screenContext?: ScreenContext; size?: number; systemPrompt?: string; telemetry: AnalyticsServiceSetup; diff --git a/x-pack/solutions/security/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/graph.ts b/x-pack/solutions/security/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/graph.ts index 375c49f2eae31..8e85b20b06c8a 100644 --- a/x-pack/solutions/security/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/graph.ts +++ b/x-pack/solutions/security/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/graph.ts @@ -42,6 +42,7 @@ export interface GetDefaultAssistantGraphParams { signal?: AbortSignal; tools: StructuredTool[]; replacements: Replacements; + getFormattedTime?: () => string; } export type DefaultAssistantGraph = ReturnType; @@ -57,6 +58,7 @@ export const getDefaultAssistantGraph = ({ signal, tools, replacements, + getFormattedTime, }: GetDefaultAssistantGraphParams) => { try { // Default graph state @@ -125,6 +127,10 @@ export const getDefaultAssistantGraph = ({ reducer: (x: string, y?: string) => y ?? x, default: () => '', }), + formattedTime: Annotation({ + reducer: (x: string, y?: string) => y ?? x, + default: getFormattedTime ?? (() => ''), + }), }); // Default node parameters diff --git a/x-pack/solutions/security/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/index.test.ts b/x-pack/solutions/security/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/index.test.ts index 5bcf61ec07a08..dd76148a9fabc 100644 --- a/x-pack/solutions/security/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/index.test.ts +++ b/x-pack/solutions/security/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/index.test.ts @@ -25,6 +25,7 @@ import { AssistantTool, AssistantToolParams } from '../../../..'; import { promptGroupId as toolsGroupId } from '../../../prompt/tool_prompts'; import { promptDictionary } from '../../../prompt'; import { promptGroupId } from '../../../prompt/local_prompt_object'; + jest.mock('./graph'); jest.mock('./helpers'); jest.mock('langchain/agents'); @@ -85,6 +86,13 @@ describe('callAssistantGraph', () => { traceOptions: {}, responseLanguage: 'English', contentReferencesStore: newContentReferencesStoreMock(), + core: { + uiSettings: { + client: { + get: jest.fn().mockResolvedValue('Browser'), + }, + }, + }, } as unknown as AgentExecutorParams; beforeEach(() => { diff --git a/x-pack/solutions/security/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/index.ts b/x-pack/solutions/security/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/index.ts index 871d96a493518..3bfd41329ebae 100644 --- a/x-pack/solutions/security/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/index.ts +++ b/x-pack/solutions/security/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/index.ts @@ -19,7 +19,7 @@ import { getPrompt, resolveProviderAndModel } from '@kbn/security-ai-prompts'; import { isEmpty } from 'lodash'; import { localToolPrompts, promptGroupId as toolsGroupId } from '../../../prompt/tool_prompts'; import { promptGroupId } from '../../../prompt/local_prompt_object'; -import { getModelOrOss } from '../../../prompt/helpers'; +import { getFormattedTime, getModelOrOss } from '../../../prompt/helpers'; import { getPrompt as localGetPrompt, promptDictionary } from '../../../prompt'; import { getLlmClass } from '../../../../routes/utils'; import { EsAnonymizationFieldsSchema } from '../../../../ai_assistant_data_clients/anonymization_fields/types'; @@ -30,6 +30,7 @@ import { GraphInputs } from './types'; import { getDefaultAssistantGraph } from './graph'; import { invokeGraph, streamGraph } from './helpers'; import { transformESSearchToAnonymizationFields } from '../../../../ai_assistant_data_clients/anonymization_fields/helpers'; +import { DEFAULT_DATE_FORMAT_TZ } from '../../../../../common/constants'; export const callAssistantGraph: AgentExecutor = async ({ abortSignal, @@ -39,6 +40,7 @@ export const callAssistantGraph: AgentExecutor = async ({ connectorId, contentReferencesStore, conversationId, + core, dataClients, esClient, inference, @@ -53,6 +55,7 @@ export const callAssistantGraph: AgentExecutor = async ({ replacements, request, savedObjectsClient, + screenContext, size, systemPrompt, telemetry, @@ -218,6 +221,11 @@ export const callAssistantGraph: AgentExecutor = async ({ actionsClient, }) : { provider: llmType }; + + const uiSettingsDateFormatTimezone = await core.uiSettings.client.get( + DEFAULT_DATE_FORMAT_TZ + ); + const assistantGraph = getDefaultAssistantGraph({ agentRunnable, dataClients, @@ -230,6 +238,11 @@ export const callAssistantGraph: AgentExecutor = async ({ replacements, // some chat models (bedrock) require a signal to be passed on agent invoke rather than the signal passed to the chat model ...(llmType === 'bedrock' ? { signal: abortSignal } : {}), + getFormattedTime: () => + getFormattedTime({ + screenContextTimezone: request.body.screenContext?.timeZone, + uiSettingsDateFormatTimezone, + }), }); const inputs: GraphInputs = { responseLanguage, diff --git a/x-pack/solutions/security/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/nodes/run_agent.test.ts b/x-pack/solutions/security/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/nodes/run_agent.test.ts new file mode 100644 index 0000000000000..33ea2c17f7dd6 --- /dev/null +++ b/x-pack/solutions/security/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/nodes/run_agent.test.ts @@ -0,0 +1,83 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { runAgent, RunAgentParams } from './run_agent'; +import { actionsClientMock } from '@kbn/actions-plugin/server/mocks'; +import { AgentState } from '../types'; +import { loggerMock } from '@kbn/logging-mocks'; +import { savedObjectsClientMock } from '@kbn/core/server/mocks'; +import { AIMessage } from '@langchain/core/messages'; + +jest.mock('../../../../prompt', () => ({ + getPrompt: jest.fn(), + promptDictionary: {}, +})); + +const agentState = { + messages: [new AIMessage({ content: 'This message contains a reference {reference(1234)}' })], + formattedTime: 'mockFormattedTime', +} as unknown as AgentState; + +const invokeMock = jest.fn().mockResolvedValue({}); + +const testParams = { + actionsClient: actionsClientMock.create(), + logger: loggerMock.create(), + savedObjectsClient: savedObjectsClientMock.create(), + state: agentState, + agentRunnable: { + withConfig: jest.fn().mockReturnValue({ + invoke: invokeMock, + }), + }, + config: undefined, + kbDataClient: { + getRequiredKnowledgeBaseDocumentEntries: jest.fn().mockResolvedValue([{ text: 'foobar' }]), + }, +} as unknown as RunAgentParams; + +describe('runAgent', () => { + beforeEach(() => { + jest.clearAllMocks(); + }); + it('invoked with formattedTime placeholder', async () => { + await runAgent(testParams); + expect(invokeMock).toHaveBeenCalledTimes(1); + expect(invokeMock).toHaveBeenCalledWith( + expect.objectContaining({ + formattedTime: 'mockFormattedTime', + }), + undefined + ); + }); + + it('invoked with knowledgeHistory placeholder', async () => { + await runAgent(testParams); + expect(invokeMock).toHaveBeenCalledTimes(1); + expect(invokeMock).toHaveBeenCalledWith( + expect.objectContaining({ + knowledge_history: 'Knowledge History:\n["foobar"]', + }), + undefined + ); + }); + + it('invoked with sanitized chat history', async () => { + await runAgent(testParams); + expect(invokeMock).toHaveBeenCalledTimes(1); + expect(invokeMock).toHaveBeenCalledWith( + expect.objectContaining({ + chat_history: expect.arrayContaining([ + expect.objectContaining({ + content: 'This message contains a reference ', + }), + ]), + }), + undefined + ); + }); +}); diff --git a/x-pack/solutions/security/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/types.ts b/x-pack/solutions/security/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/types.ts index 587989667b144..0ee517e3117fa 100644 --- a/x-pack/solutions/security/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/types.ts +++ b/x-pack/solutions/security/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/types.ts @@ -43,6 +43,7 @@ export interface AgentState extends AgentStateBase { connectorId: string; conversation: ConversationResponse | undefined; conversationId: string; + formattedTime: string; } export interface NodeParamsBase { diff --git a/x-pack/solutions/security/plugins/elastic_assistant/server/lib/prompt/helpers.test.ts b/x-pack/solutions/security/plugins/elastic_assistant/server/lib/prompt/helpers.test.ts new file mode 100644 index 0000000000000..8cab31c96d0fc --- /dev/null +++ b/x-pack/solutions/security/plugins/elastic_assistant/server/lib/prompt/helpers.test.ts @@ -0,0 +1,107 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { getFormattedTime } from './helpers'; + +describe('helper', () => { + describe('getCurrentTimeForPrompt', () => { + beforeEach(() => { + jest.clearAllMocks(); + jest + .useFakeTimers() + .setSystemTime(new Date('Fri Feb 14 2025 07:33:12 UTC+0000 (Greenwich Mean Time)')); + }); + + it.each([ + // kibana settings timezone and no screen context timezone + ['Browser', undefined, 'Current time: Fri, Feb 14, 2025 7:33 AM UTC+00:00'], + [undefined, undefined, 'Current time: Fri, Feb 14, 2025 7:33 AM UTC+00:00'], + [ + 'Europe/Zurich', + undefined, + 'Current time: Fri, Feb 14, 2025 8:33 AM UTC+01:00 (7:33 AM UTC)', + ], + [ + 'Europe/Warsaw', + undefined, + 'Current time: Fri, Feb 14, 2025 8:33 AM UTC+01:00 (7:33 AM UTC)', + ], + [ + 'America/Denver', + undefined, + 'Current time: Fri, Feb 14, 2025 12:33 AM UTC-07:00 (7:33 AM UTC)', + ], + ['MST', undefined, 'Current time: Fri, Feb 14, 2025 12:33 AM UTC-07:00 (7:33 AM UTC)'], + [ + 'America/Los_Angeles', + undefined, + 'Current time: Thu, Feb 13, 2025 11:33 PM UTC-08:00 (7:33 AM UTC)', + ], + + // Custom kibana settings timezone and screen context timezone + [ + 'Europe/Zurich', + 'America/Denver', + 'Current time: Fri, Feb 14, 2025 8:33 AM UTC+01:00 (7:33 AM UTC)', + ], + [ + 'Europe/Warsaw', + 'America/Denver', + 'Current time: Fri, Feb 14, 2025 8:33 AM UTC+01:00 (7:33 AM UTC)', + ], + [ + 'America/Denver', + 'Europe/Warsaw', + 'Current time: Fri, Feb 14, 2025 12:33 AM UTC-07:00 (7:33 AM UTC)', + ], + ['MST', 'Europe/Warsaw', 'Current time: Fri, Feb 14, 2025 12:33 AM UTC-07:00 (7:33 AM UTC)'], + [ + 'America/Los_Angeles', + 'Europe/Warsaw', + 'Current time: Thu, Feb 13, 2025 11:33 PM UTC-08:00 (7:33 AM UTC)', + ], + + // screen context timezone and Browser kibana setting timezone + ['Browser', 'Europe/London', 'Current time: Fri, Feb 14, 2025 7:33 AM UTC+00:00'], + [ + 'Browser', + 'Europe/Zurich', + 'Current time: Fri, Feb 14, 2025 8:33 AM UTC+01:00 (7:33 AM UTC)', + ], + [ + 'Browser', + 'Europe/Warsaw', + 'Current time: Fri, Feb 14, 2025 8:33 AM UTC+01:00 (7:33 AM UTC)', + ], + [ + 'Browser', + 'America/Denver', + 'Current time: Fri, Feb 14, 2025 12:33 AM UTC-07:00 (7:33 AM UTC)', + ], + ['Browser', 'MST', 'Current time: Fri, Feb 14, 2025 12:33 AM UTC-07:00 (7:33 AM UTC)'], + [ + 'Browser', + 'America/Los_Angeles', + 'Current time: Thu, Feb 13, 2025 11:33 PM UTC-08:00 (7:33 AM UTC)', + ], + ])( + 'when timezone from kibana settings is "%s" and screenContext.timezone is "%s", then result is "%s"', + async ( + uiSettingsDateFormatTimezone: string | undefined, + screenContextTimezone: string | undefined, + expectedResult: string + ) => { + const result = getFormattedTime({ + screenContextTimezone, + uiSettingsDateFormatTimezone, + }); + + expect(result).toEqual(expectedResult); + } + ); + }); +}); diff --git a/x-pack/solutions/security/plugins/elastic_assistant/server/lib/prompt/helpers.ts b/x-pack/solutions/security/plugins/elastic_assistant/server/lib/prompt/helpers.ts index 48f3f5f414657..b41048a2db016 100644 --- a/x-pack/solutions/security/plugins/elastic_assistant/server/lib/prompt/helpers.ts +++ b/x-pack/solutions/security/plugins/elastic_assistant/server/lib/prompt/helpers.ts @@ -4,6 +4,8 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ +import { ScreenContext } from '@kbn/elastic-assistant-common'; +import moment from 'moment-timezone'; /** * use oss as model when using openai and oss @@ -18,3 +20,34 @@ export const getModelOrOss = ( isOssModel?: boolean, model?: string ): string | undefined => (llmType === 'openai' && isOssModel ? 'oss' : model); + +const TIME_FORMAT = 'llll [UTC]Z'; +const UTC_CONVERSION_TIME_FORMAT = 'LT [UTC]'; + +export const getFormattedTime = ({ + screenContextTimezone, + uiSettingsDateFormatTimezone, +}: { + screenContextTimezone: ScreenContext['timeZone']; + uiSettingsDateFormatTimezone: string | undefined; // From core.uiSettings.client.get('dateFormat:tz') +}) => { + const currentTimezone: string = + (uiSettingsDateFormatTimezone === 'Browser' + ? screenContextTimezone + : uiSettingsDateFormatTimezone) ?? 'UTC'; + + const now = new Date(); + + const currentFormatter = moment.tz(now, currentTimezone); + const utcFormatter = moment.tz(now, 'UTC'); + + // If the local timezone is different from UTC, we should show the UTC time as well + const utcConversionRequired = currentFormatter.format('[UTC]Z') !== utcFormatter.format('[UTC]Z'); + + const currentTime = currentFormatter.format(TIME_FORMAT); + const utcConversion = utcConversionRequired + ? utcFormatter.format(UTC_CONVERSION_TIME_FORMAT) + : undefined; + + return `Current time: ${currentTime} ${utcConversion ? `(${utcConversion})` : ''}`.trim(); +}; diff --git a/x-pack/solutions/security/plugins/elastic_assistant/server/lib/prompt/prompts.test.ts b/x-pack/solutions/security/plugins/elastic_assistant/server/lib/prompt/prompts.test.ts index 97f3118475aca..5100273545400 100644 --- a/x-pack/solutions/security/plugins/elastic_assistant/server/lib/prompt/prompts.test.ts +++ b/x-pack/solutions/security/plugins/elastic_assistant/server/lib/prompt/prompts.test.ts @@ -14,10 +14,14 @@ import { describe('prompts', () => { it.each([ - [DEFAULT_SYSTEM_PROMPT, 'Annotate your answer with relevant citations', 1], - [GEMINI_SYSTEM_PROMPT, 'Annotate your answer with relevant citations', 1], - [BEDROCK_SYSTEM_PROMPT, 'Annotate your answer with relevant citations', 1], - [STRUCTURED_SYSTEM_PROMPT, 'Annotate your answer with relevant citations', 1], + [DEFAULT_SYSTEM_PROMPT, 'Annotate your answer with the provided citations', 1], + [GEMINI_SYSTEM_PROMPT, 'Annotate your answer with the provided citations', 1], + [BEDROCK_SYSTEM_PROMPT, 'Annotate your answer with the provided citations', 1], + [STRUCTURED_SYSTEM_PROMPT, 'Annotate your answer with the provided citations', 1], + [DEFAULT_SYSTEM_PROMPT, '{formattedTime}', 1], + [GEMINI_SYSTEM_PROMPT, '{formattedTime}', 1], + [BEDROCK_SYSTEM_PROMPT, '{formattedTime}', 1], + [STRUCTURED_SYSTEM_PROMPT, '{formattedTime}', 1], [DEFAULT_SYSTEM_PROMPT, 'You are a security analyst', 1], [GEMINI_SYSTEM_PROMPT, 'You are an assistant', 1], [BEDROCK_SYSTEM_PROMPT, 'You are a security analyst', 1], diff --git a/x-pack/solutions/security/plugins/elastic_assistant/server/lib/prompt/prompts.ts b/x-pack/solutions/security/plugins/elastic_assistant/server/lib/prompt/prompts.ts index 170f3e03d3895..cc2b4e04890be 100644 --- a/x-pack/solutions/security/plugins/elastic_assistant/server/lib/prompt/prompts.ts +++ b/x-pack/solutions/security/plugins/elastic_assistant/server/lib/prompt/prompts.ts @@ -7,14 +7,14 @@ export const KNOWLEDGE_HISTORY = 'If available, use the Knowledge History provided to try and answer the question. If not provided, you can try and query for additional knowledge via the KnowledgeBaseRetrievalTool.'; -export const INCLUDE_CITATIONS = `\n\nAnnotate your answer with relevant citations. Here are some example responses with citations: \n1. "Machine learning is increasingly used in cyber threat detection. {{reference(prSit)}}" \n2. "The alert has a risk score of 72. {{reference(OdRs2)}}"\n\nOnly use the citations returned by tools\n\n`; -export const DEFAULT_SYSTEM_PROMPT = `You are a security analyst and expert in resolving security incidents. Your role is to assist by answering questions about Elastic Security. Do not answer questions unrelated to Elastic Security. ${KNOWLEDGE_HISTORY} ${INCLUDE_CITATIONS}`; +export const INCLUDE_CITATIONS = `\n\nAnnotate your answer with the provided citations. Here are some example responses with citations: \n1. "Machine learning is increasingly used in cyber threat detection. {{reference(prSit)}}" \n2. "The alert has a risk score of 72. {{reference(OdRs2)}}"\n\nOnly use the citations returned by tools\n\n`; +export const DEFAULT_SYSTEM_PROMPT = `You are a security analyst and expert in resolving security incidents. Your role is to assist by answering questions about Elastic Security. Do not answer questions unrelated to Elastic Security. ${KNOWLEDGE_HISTORY} ${INCLUDE_CITATIONS} \n{formattedTime}`; // system prompt from @afirstenberg const BASE_GEMINI_PROMPT = 'You are an assistant that is an expert at using tools and Elastic Security, doing your best to use these tools to answer questions or follow instructions. It is very important to use tools to answer the question or follow the instructions rather than coming up with your own answer. Tool calls are good. Sometimes you may need to make several tool calls to accomplish the task or get an answer to the question that was asked. Use as many tool calls as necessary.'; const KB_CATCH = 'If the knowledge base tool gives empty results, do your best to answer the question from the perspective of an expert security analyst.'; -export const GEMINI_SYSTEM_PROMPT = `${BASE_GEMINI_PROMPT} ${INCLUDE_CITATIONS} ${KB_CATCH}`; +export const GEMINI_SYSTEM_PROMPT = `${BASE_GEMINI_PROMPT} ${INCLUDE_CITATIONS} ${KB_CATCH} \n{formattedTime}`; export const BEDROCK_SYSTEM_PROMPT = `${DEFAULT_SYSTEM_PROMPT} Use tools as often as possible, as they have access to the latest data and syntax. Never return tags in the response, but make sure to include tags content in the response. Do not reflect on the quality of the returned search results in your response. ALWAYS return the exact response from NaturalLanguageESQLTool verbatim in the final response, without adding further description.`; export const GEMINI_USER_PROMPT = `Now, always using the tools at your disposal, step by step, come up with a response to this request:\n\n`; @@ -72,7 +72,7 @@ Action: "action_input": "Final response to human"}} -Begin! Reminder to ALWAYS respond with a valid json blob of a single action with no additional output. When using tools, ALWAYS input the expected JSON schema args. Your answer will be parsed as JSON, so never use double quotes within the output and instead use backticks. Single quotes may be used, such as apostrophes. Response format is Action:\`\`\`$JSON_BLOB\`\`\`then Observation`; +Begin! Reminder to ALWAYS respond with a valid json blob of a single action with no additional output. When using tools, ALWAYS input the expected JSON schema args. Your answer will be parsed as JSON, so never use double quotes within the output and instead use backticks. Single quotes may be used, such as apostrophes. Response format is Action:\`\`\`$JSON_BLOB\`\`\`then Observation. \n{formattedTime}`; export const ATTACK_DISCOVERY_DEFAULT = "You are a cyber security analyst tasked with analyzing security events from Elastic Security to identify and report on potential cyber attacks or progressions. Your report should focus on high-risk incidents that could severely impact the organization, rather than isolated alerts. Present your findings in a way that can be easily understood by anyone, regardless of their technical expertise, as if you were briefing the CISO. Break down your response into sections based on timing, hosts, and users involved. When correlating alerts, use kibana.alert.original_time when it's available, otherwise use @timestamp. Include appropriate context about the affected hosts and users. Describe how the attack progression might have occurred and, if feasible, attribute it to known threat groups. Prioritize high and critical alerts, but include lower-severity alerts if desired. In the description field, provide as much detail as possible, in a bulleted list explaining any attack progressions. Accuracy is of utmost importance. You MUST escape all JSON special characters (i.e. backslashes, double quotes, newlines, tabs, carriage returns, backspaces, and form feeds)."; diff --git a/x-pack/solutions/security/plugins/elastic_assistant/server/routes/evaluate/post_evaluate.ts b/x-pack/solutions/security/plugins/elastic_assistant/server/routes/evaluate/post_evaluate.ts index e6b41d1673124..bb440f034605a 100644 --- a/x-pack/solutions/security/plugins/elastic_assistant/server/routes/evaluate/post_evaluate.ts +++ b/x-pack/solutions/security/plugins/elastic_assistant/server/routes/evaluate/post_evaluate.ts @@ -35,7 +35,7 @@ import { import { omit } from 'lodash/fp'; import { localToolPrompts, promptGroupId as toolsGroupId } from '../../lib/prompt/tool_prompts'; import { promptGroupId } from '../../lib/prompt/local_prompt_object'; -import { getModelOrOss } from '../../lib/prompt/helpers'; +import { getFormattedTime, getModelOrOss } from '../../lib/prompt/helpers'; import { getAttackDiscoveryPrompts } from '../../lib/attack_discovery/graphs/default_attack_discovery_graph/nodes/helpers/prompts'; import { formatPrompt, @@ -56,6 +56,7 @@ import { } from '../../lib/langchain/graphs/default_assistant_graph/graph'; import { getLlmClass, getLlmType, isOpenSourceModel } from '../utils'; import { getGraphsFromNames } from './get_graphs_from_names'; +import { DEFAULT_DATE_FORMAT_TZ } from '../../../common/constants'; const DEFAULT_SIZE = 20; const ROUTE_HANDLER_TIMEOUT = 10 * 60 * 1000; // 10 * 60 seconds = 10 minutes @@ -377,6 +378,10 @@ export const postEvaluateRoute = ( streamRunnable: false, }); + const uiSettingsDateFormatTimezone = await ctx.core.uiSettings.client.get( + DEFAULT_DATE_FORMAT_TZ + ); + return { connectorId: connector.id, name: `${runName} - ${connector.name}`, @@ -391,6 +396,11 @@ export const postEvaluateRoute = ( savedObjectsClient, tools, replacements: {}, + getFormattedTime: () => + getFormattedTime({ + screenContextTimezone: request.body.screenContext?.timeZone, + uiSettingsDateFormatTimezone, + }), }), }; }) diff --git a/x-pack/solutions/security/plugins/elastic_assistant/server/routes/helpers.ts b/x-pack/solutions/security/plugins/elastic_assistant/server/routes/helpers.ts index e8a359e335122..17b7f0729deca 100644 --- a/x-pack/solutions/security/plugins/elastic_assistant/server/routes/helpers.ts +++ b/x-pack/solutions/security/plugins/elastic_assistant/server/routes/helpers.ts @@ -25,6 +25,7 @@ import { ContentReferencesStore, ContentReferences, MessageMetadata, + ScreenContext, } from '@kbn/elastic-assistant-common'; import { ILicense } from '@kbn/licensing-plugin/server'; import { i18n } from '@kbn/i18n'; @@ -252,6 +253,7 @@ export interface LangChainExecuteParams { response: KibanaResponseFactory; responseLanguage?: string; savedObjectsClient: SavedObjectsClientContract; + screenContext?: ScreenContext; systemPrompt?: string; } export const langChainExecute = async ({ @@ -277,6 +279,7 @@ export const langChainExecute = async ({ responseLanguage, isStream = true, savedObjectsClient, + screenContext, systemPrompt, }: LangChainExecuteParams) => { // Fetch any tools registered by the request's originating plugin @@ -318,6 +321,7 @@ export const langChainExecute = async ({ abortSignal, dataClients, alertsIndexPattern: request.body.alertsIndexPattern, + core: context.core, actionsClient, assistantTools, conversationId, @@ -337,6 +341,7 @@ export const langChainExecute = async ({ replacements, responseLanguage, savedObjectsClient, + screenContext, size: request.body.size, systemPrompt, telemetry, diff --git a/x-pack/solutions/security/plugins/elastic_assistant/server/routes/knowledge_base/get_knowledge_base_status.test.ts b/x-pack/solutions/security/plugins/elastic_assistant/server/routes/knowledge_base/get_knowledge_base_status.test.ts index a3de571b5140d..e46207cc83883 100644 --- a/x-pack/solutions/security/plugins/elastic_assistant/server/routes/knowledge_base/get_knowledge_base_status.test.ts +++ b/x-pack/solutions/security/plugins/elastic_assistant/server/routes/knowledge_base/get_knowledge_base_status.test.ts @@ -39,6 +39,7 @@ describe('Get Knowledge Base Status Route', () => { isSetupInProgress: false, isSecurityLabsDocsLoaded: jest.fn().mockResolvedValue(true), isUserDataExists: jest.fn().mockResolvedValue(true), + getLoadedSecurityLabsDocsCount: jest.fn().mockResolvedValue(0), }); getKnowledgeBaseStatusRoute(server.router); diff --git a/x-pack/solutions/security/plugins/elastic_assistant/server/routes/knowledge_base/get_knowledge_base_status.ts b/x-pack/solutions/security/plugins/elastic_assistant/server/routes/knowledge_base/get_knowledge_base_status.ts index 88d2e118f8648..5884b08f864fd 100644 --- a/x-pack/solutions/security/plugins/elastic_assistant/server/routes/knowledge_base/get_knowledge_base_status.ts +++ b/x-pack/solutions/security/plugins/elastic_assistant/server/routes/knowledge_base/get_knowledge_base_status.ts @@ -11,7 +11,6 @@ import { API_VERSIONS, ELASTIC_AI_ASSISTANT_KNOWLEDGE_BASE_URL, ReadKnowledgeBaseRequestParams, - ReadKnowledgeBaseResponse, } from '@kbn/elastic-assistant-common'; import { buildRouteValidationWithZod } from '@kbn/elastic-assistant-common/impl/schemas/common'; import { KibanaRequest } from '@kbn/core/server'; @@ -57,32 +56,24 @@ export const getKnowledgeBaseStatusRoute = (router: ElasticAssistantPluginRouter const indexExists = true; // Installed at startup, always true const pipelineExists = true; // Installed at startup, always true - const modelExists = await kbDataClient.isModelInstalled(); const setupAvailable = await kbDataClient.isSetupAvailable(); const isInferenceEndpointExists = await kbDataClient.isInferenceEndpointExists(); + const securityLabsExists = await kbDataClient.isSecurityLabsDocsLoaded(); + const loadedSecurityLabsDocsCount = await kbDataClient.getLoadedSecurityLabsDocsCount(); + const userDataExists = await kbDataClient.isUserDataExists(); - const body: ReadKnowledgeBaseResponse = { - elser_exists: modelExists, - index_exists: indexExists, - is_setup_in_progress: kbDataClient.isSetupInProgress, - is_setup_available: setupAvailable, - pipeline_exists: pipelineExists, - }; - - if (indexExists && isInferenceEndpointExists) { - const securityLabsExists = await kbDataClient.isSecurityLabsDocsLoaded(); - const userDataExists = await kbDataClient.isUserDataExists(); - - return response.ok({ - body: { - ...body, - security_labs_exists: securityLabsExists, - user_data_exists: userDataExists, - }, - }); - } - - return response.ok({ body }); + return response.ok({ + body: { + elser_exists: isInferenceEndpointExists, + index_exists: indexExists, + is_setup_in_progress: kbDataClient.isSetupInProgress, + is_setup_available: setupAvailable, + security_labs_exists: securityLabsExists, + // If user data exists, we should have at least one document in the Security Labs index + user_data_exists: userDataExists || !!loadedSecurityLabsDocsCount, + pipeline_exists: pipelineExists, + }, + }); } catch (err) { logger.error(err); const error = transformError(err); diff --git a/x-pack/solutions/security/plugins/elastic_assistant/server/routes/knowledge_base/post_knowledge_base.ts b/x-pack/solutions/security/plugins/elastic_assistant/server/routes/knowledge_base/post_knowledge_base.ts index b29d00fae5d2d..e76b85108fd78 100644 --- a/x-pack/solutions/security/plugins/elastic_assistant/server/routes/knowledge_base/post_knowledge_base.ts +++ b/x-pack/solutions/security/plugins/elastic_assistant/server/routes/knowledge_base/post_knowledge_base.ts @@ -55,8 +55,6 @@ export const postKnowledgeBaseRoute = (router: ElasticAssistantPluginRouter) => const resp = buildResponse(response); const ctx = await context.resolve(['core', 'elasticAssistant', 'licensing']); const assistantContext = ctx.elasticAssistant; - const core = ctx.core; - const soClient = core.savedObjects.getClient(); const ignoreSecurityLabs = request.query.ignoreSecurityLabs; try { @@ -69,7 +67,6 @@ export const postKnowledgeBaseRoute = (router: ElasticAssistantPluginRouter) => } await knowledgeBaseDataClient.setupKnowledgeBase({ - soClient, ignoreSecurityLabs, }); diff --git a/x-pack/solutions/security/plugins/elastic_assistant/server/routes/post_actions_connector_execute.ts b/x-pack/solutions/security/plugins/elastic_assistant/server/routes/post_actions_connector_execute.ts index 6bd1884ae893c..619d435d2cc56 100644 --- a/x-pack/solutions/security/plugins/elastic_assistant/server/routes/post_actions_connector_execute.ts +++ b/x-pack/solutions/security/plugins/elastic_assistant/server/routes/post_actions_connector_execute.ts @@ -88,6 +88,7 @@ export const postActionsConnectorExecuteRoute = ( let newMessage: Pick | undefined; const conversationId = request.body.conversationId; const actionTypeId = request.body.actionTypeId; + const screenContext = request.body.screenContext; const connectorId = decodeURIComponent(request.params.connectorId); // if message is undefined, it means the user is regenerating a message from the stored conversation @@ -163,6 +164,7 @@ export const postActionsConnectorExecuteRoute = ( response, telemetry, savedObjectsClient, + screenContext, systemPrompt, ...(productDocsAvailable ? { llmTasks: ctx.elasticAssistant.llmTasks } : {}), }); diff --git a/x-pack/solutions/security/plugins/elastic_assistant/server/routes/request_context_factory.ts b/x-pack/solutions/security/plugins/elastic_assistant/server/routes/request_context_factory.ts index e326e01ba77b3..6c9b373e94ca4 100644 --- a/x-pack/solutions/security/plugins/elastic_assistant/server/routes/request_context_factory.ts +++ b/x-pack/solutions/security/plugins/elastic_assistant/server/routes/request_context_factory.ts @@ -48,7 +48,7 @@ export class RequestContextFactory implements IRequestContextFactory { request: KibanaRequest ): Promise { const { options } = this; - const { core } = options; + const { core, plugins } = options; const [coreStart, startPlugins] = await core.getStartServices(); const coreContext = await context.core; @@ -77,6 +77,8 @@ export class RequestContextFactory implements IRequestContextFactory { return contextUser; }; + const savedObjectsClient = coreStart.savedObjects.getScopedClient(request); + return { core: coreContext, @@ -99,7 +101,7 @@ export class RequestContextFactory implements IRequestContextFactory { }, llmTasks: startPlugins.llmTasks, inference: startPlugins.inference, - savedObjectsClient: coreStart.savedObjects.getScopedClient(request), + savedObjectsClient, telemetry: core.analytics, // Note: modelIdOverride is used here to enable setting up the KB using a different ELSER model, which @@ -121,6 +123,11 @@ export class RequestContextFactory implements IRequestContextFactory { modelIdOverride: params?.modelIdOverride, manageGlobalKnowledgeBaseAIAssistant: securitySolutionAssistant.manageGlobalKnowledgeBaseAIAssistant as boolean, + // uses internal user to interact with ML API + trainedModelsProvider: plugins.ml.trainedModelsProvider( + {} as KibanaRequest, + coreStart.savedObjects.createInternalRepository() + ), }); }), diff --git a/x-pack/solutions/security/plugins/elastic_assistant/tsconfig.json b/x-pack/solutions/security/plugins/elastic_assistant/tsconfig.json index 2010e97747974..9aacbb8acca56 100644 --- a/x-pack/solutions/security/plugins/elastic_assistant/tsconfig.json +++ b/x-pack/solutions/security/plugins/elastic_assistant/tsconfig.json @@ -55,7 +55,7 @@ "@kbn/product-doc-base-plugin", "@kbn/core-saved-objects-api-server-mocks", "@kbn/security-ai-prompts", - "@kbn/datemath" + "@kbn/datemath", ], "exclude": [ "target/**/*", diff --git a/x-pack/solutions/security/plugins/lists/server/mocks.ts b/x-pack/solutions/security/plugins/lists/server/mocks.ts index 642fff817949e..92c7e07652db3 100644 --- a/x-pack/solutions/security/plugins/lists/server/mocks.ts +++ b/x-pack/solutions/security/plugins/lists/server/mocks.ts @@ -5,6 +5,8 @@ * 2.0. */ +import { getExceptionListItemSchemaMock } from '../common/schemas/response/exception_list_item_schema.mock'; + import { ListPluginSetup } from './types'; import { getListClientMock } from './services/lists/list_client.mock'; import { @@ -25,5 +27,6 @@ export const listMock = { createSetup: createSetupMock, getCreateExceptionListItemOptionsMock, getExceptionListClient: getExceptionListClientMock, + getExceptionListItemSchemaMock, getListClient: getListClientMock, }; diff --git a/x-pack/solutions/security/plugins/security_solution/common/api/asset_inventory/constants.ts b/x-pack/solutions/security/plugins/security_solution/common/api/asset_inventory/constants.ts new file mode 100644 index 0000000000000..28fb4606056ee --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/common/api/asset_inventory/constants.ts @@ -0,0 +1,10 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +export const ASSET_INVENTORY_ENABLE_API_PATH = '/api/asset_inventory/enable'; +export const ASSET_INVENTORY_STATUS_API_PATH = '/api/asset_inventory/status'; +export const ASSET_INVENTORY_DELETE_API_PATH = '/api/asset_inventory/delete'; diff --git a/x-pack/solutions/security/plugins/security_solution/common/api/asset_inventory/types.ts b/x-pack/solutions/security/plugins/security_solution/common/api/asset_inventory/types.ts new file mode 100644 index 0000000000000..f6cb5325b33ce --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/common/api/asset_inventory/types.ts @@ -0,0 +1,28 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { ServerApiError } from '../../../public/common/types'; +import type { EntityAnalyticsPrivileges } from '../entity_analytics'; +import type { InitEntityStoreResponse } from '../entity_analytics/entity_store/enable.gen'; + +export type AssetInventoryStatus = + | 'disabled' + | 'initializing' + | 'empty' + | 'permission_denied' + | 'ready'; + +export interface AssetInventoryStatusResponse { + status: AssetInventoryStatus; + privileges?: EntityAnalyticsPrivileges['privileges']; +} + +export type AssetInventoryEnableResponse = InitEntityStoreResponse; + +export interface AssetInventoryServerApiError { + body: ServerApiError; +} diff --git a/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/actions/details/details.gen.ts b/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/actions/details/details.gen.ts index 1fa7d79e97feb..e8e3cdaefa3fb 100644 --- a/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/actions/details/details.gen.ts +++ b/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/actions/details/details.gen.ts @@ -16,7 +16,8 @@ import { z } from '@kbn/zod'; -import { SuccessResponse } from '../../model/schema/common.gen'; +export type GetEndpointActionResponse = z.infer; +export const GetEndpointActionResponse = z.object({}); export type EndpointGetActionsDetailsRequestParams = z.infer< typeof EndpointGetActionsDetailsRequestParams @@ -29,4 +30,4 @@ export type EndpointGetActionsDetailsRequestParamsInput = z.input< >; export type EndpointGetActionsDetailsResponse = z.infer; -export const EndpointGetActionsDetailsResponse = SuccessResponse; +export const EndpointGetActionsDetailsResponse = GetEndpointActionResponse; diff --git a/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/actions/details/details.schema.yaml b/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/actions/details/details.schema.yaml index 7cf2f808e06f8..36228bfe9bc81 100644 --- a/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/actions/details/details.schema.yaml +++ b/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/actions/details/details.schema.yaml @@ -16,12 +16,46 @@ paths: required: true schema: type: string + description: The ID of the action to retrieve. + example: 'fr518850-681a-4y60-aa98-e22640cae2b8' responses: '200': description: OK content: application/json: schema: - $ref: '../../model/schema/common.schema.yaml#/components/schemas/SuccessResponse' + $ref: '#/components/schemas/GetEndpointActionResponse' +components: + schemas: + GetEndpointActionResponse: + type: object + properties: { } + example: + data: + id: "b3d6de74-36b0-4fa8-be46-c375bf1771bf" + agents: + - "afdc366c-e2e0-4cdb-ae1d-94575bd2d8e0" + agentType: "endpoint" + command: "running-processes" + startedAt: "2022-08-08T15:24:57.402Z" + completedAt: "2022-08-08T09:50:47.672Z" + createdBy: "elastic" + isCompleted: true + wasSuccessful: true + isExpired: false + outputs: + afdc366c-e2e0-4cdb-ae1d-94575bd2d8e0: + type: "json" + content: + entries: + - pid: "822" + entity_id: "fk2ym7bl3oiu3okjcik0xosc0i0m75x3eh49nu3uaqt4dqanjt" + user: "Dexter" + command: "/opt/cmd1" + - pid: "984" + entity_id: "pwvz91m48wpj9j7ov9gtw8fp7u2rat4eu5ipte37hnhdcbi2pt" + user: "Jada" + command: "/opt/cmd3/opt/cmd3/opt/cmd3/opt/cmd3" + diff --git a/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/actions/list/list.gen.ts b/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/actions/list/list.gen.ts index 4eec6a2cb6479..8e2ffea437d71 100644 --- a/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/actions/list/list.gen.ts +++ b/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/actions/list/list.gen.ts @@ -17,42 +17,37 @@ import { z } from '@kbn/zod'; import { - SuccessResponse, - AgentIds, - AgentTypes, - Commands, Page, + PageSize, + Commands, + AgentIds, + UserIds, StartDate, EndDate, - UserIds, - Types, + AgentTypes, WithOutputs, + Types, } from '../../model/schema/common.gen'; -export type GetEndpointActionListRouteQuery = z.infer; -export const GetEndpointActionListRouteQuery = z.object({ - agentIds: AgentIds.optional(), - agentTypes: AgentTypes.optional(), - commands: Commands.optional(), +export type GetEndpointActionListResponse = z.infer; +export const GetEndpointActionListResponse = z.object({}); + +export type EndpointGetActionsListRequestQuery = z.infer; +export const EndpointGetActionsListRequestQuery = z.object({ page: Page.optional(), - /** - * Number of items per page - */ - pageSize: z.number().int().min(1).max(10000).optional().default(10), + pageSize: PageSize.optional(), + commands: Commands.optional(), + agentIds: AgentIds.optional(), + userIds: UserIds.optional(), startDate: StartDate.optional(), endDate: EndDate.optional(), - userIds: UserIds.optional(), - types: Types.optional(), + agentTypes: AgentTypes.optional(), withOutputs: WithOutputs.optional(), -}); - -export type EndpointGetActionsListRequestQuery = z.infer; -export const EndpointGetActionsListRequestQuery = z.object({ - query: GetEndpointActionListRouteQuery, + types: Types.optional(), }); export type EndpointGetActionsListRequestQueryInput = z.input< typeof EndpointGetActionsListRequestQuery >; export type EndpointGetActionsListResponse = z.infer; -export const EndpointGetActionsListResponse = SuccessResponse; +export const EndpointGetActionsListResponse = GetEndpointActionListResponse; diff --git a/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/actions/list/list.schema.yaml b/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/actions/list/list.schema.yaml index 8e7dcfd5412f4..ecd0445750a05 100644 --- a/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/actions/list/list.schema.yaml +++ b/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/actions/list/list.schema.yaml @@ -11,44 +11,121 @@ paths: x-codegen-enabled: true x-labels: [ess, serverless] parameters: - - name: query + - name: page in: query - required: true + required: false schema: - $ref: '#/components/schemas/GetEndpointActionListRouteQuery' + $ref: '../../model/schema/common.schema.yaml#/components/schemas/Page' + - name: pageSize + in: query + required: false + schema: + $ref: '../../model/schema/common.schema.yaml#/components/schemas/PageSize' + - name: commands + in: query + required: false + schema: + $ref: '../../model/schema/common.schema.yaml#/components/schemas/Commands' + - name: agentIds + in: query + required: false + schema: + $ref: '../../model/schema/common.schema.yaml#/components/schemas/AgentIds' + - name: userIds + in: query + required: false + schema: + $ref: '../../model/schema/common.schema.yaml#/components/schemas/UserIds' + - name: startDate + in: query + required: false + schema: + $ref: '../../model/schema/common.schema.yaml#/components/schemas/StartDate' + - name: endDate + in: query + required: false + schema: + $ref: '../../model/schema/common.schema.yaml#/components/schemas/EndDate' + - name: agentTypes + in: query + required: false + schema: + $ref: '../../model/schema/common.schema.yaml#/components/schemas/AgentTypes' + - name: withOutputs + in: query + required: false + schema: + $ref: '../../model/schema/common.schema.yaml#/components/schemas/WithOutputs' + - name: types + in: query + required: false + schema: + $ref: '../../model/schema/common.schema.yaml#/components/schemas/Types' responses: '200': description: OK content: application/json: schema: - $ref: '../../model/schema/common.schema.yaml#/components/schemas/SuccessResponse' + $ref: '#/components/schemas/GetEndpointActionListResponse' components: schemas: - GetEndpointActionListRouteQuery: + GetEndpointActionListResponse: type: object - properties: - agentIds: - $ref: '../../model/schema/common.schema.yaml#/components/schemas/AgentIds' - agentTypes: - $ref: '../../model/schema/common.schema.yaml#/components/schemas/AgentTypes' - commands: - $ref: '../../model/schema/common.schema.yaml#/components/schemas/Commands' - page: - $ref: '../../model/schema/common.schema.yaml#/components/schemas/Page' - pageSize: - type: integer - default: 10 - minimum: 1 - maximum: 10000 - description: Number of items per page - startDate: - $ref: '../../model/schema/common.schema.yaml#/components/schemas/StartDate' - endDate: - $ref: '../../model/schema/common.schema.yaml#/components/schemas/EndDate' - userIds: - $ref: '../../model/schema/common.schema.yaml#/components/schemas/UserIds' - types: - $ref: '../../model/schema/common.schema.yaml#/components/schemas/Types' - withOutputs: - $ref: '../../model/schema/common.schema.yaml#/components/schemas/WithOutputs' + properties: { } + example: + page: 1 + pageSize: 10 + total: 4 + startDate: "now-24h/h" + endDate: "now" + elasticAgentIds: + - "afdc366c-e2e0-4cdb-ae1d-94575bd2d8e0" + data: + - id: "b3d6de74-36b0-4fa8-be46-c375bf1771bf" + agents: + - "afdc366c-e2e0-4cdb-ae1d-94575bd2d8e0" + command: "running-processes" + agentType: "endpoint" + startedAt: "2022-08-08T15:24:57.402Z" + isCompleted: true + completedAt: "2022-08-08T09:50:47.672Z" + wasSuccessful: true + isExpired: false + createdBy: "elastic" + - id: "43b4098b-8752-4fbb-a7a7-6df7c74d0ee3" + agents: + - "afdc366c-e2e0-4cdb-ae1d-94575bd2d8e0" + command: "isolate" + agentType: "endpoint" + startedAt: "2022-08-08T15:23:37.359Z" + isCompleted: true + completedAt: "2022-08-08T10:41:57.352Z" + wasSuccessful: true + isExpired: false + createdBy: "elastic" + - id: "5bc92c86-b8e6-42dd-837f-12ad29e09caa" + agents: + - "afdc366c-e2e0-4cdb-ae1d-94575bd2d8e0" + command: "kill-process" + agentType: "endpoint" + startedAt: "2022-08-08T14:38:44.125Z" + isCompleted: true + completedAt: "2022-08-08T09:44:50.952Z" + wasSuccessful: true + isExpired: false + createdBy: "elastic" + comment: "bad process - taking up too much cpu" + - id: "790d54e0-3aa3-4e5b-8255-3ce9d851246a" + agents: + - "afdc366c-e2e0-4cdb-ae1d-94575bd2d8e0" + command: "unisolate" + agentType: "endpoint" + startedAt: "2022-08-08T14:38:15.391Z" + isCompleted: true + completedAt: "2022-08-08T09:40:47.398Z" + wasSuccessful: true + isExpired: false + createdBy: "elastic" + comment: "Not a threat to the network" + diff --git a/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/actions/response_actions/execute/execute.gen.ts b/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/actions/response_actions/execute/execute.gen.ts index 531236ea248bf..b9cf0db2b4ce9 100644 --- a/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/actions/response_actions/execute/execute.gen.ts +++ b/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/actions/response_actions/execute/execute.gen.ts @@ -16,12 +16,7 @@ import { z } from '@kbn/zod'; -import { - SuccessResponse, - BaseActionSchema, - Command, - Timeout, -} from '../../../model/schema/common.gen'; +import { BaseActionSchema, Command, Timeout } from '../../../model/schema/common.gen'; export type ExecuteRouteRequestBody = z.infer; export const ExecuteRouteRequestBody = BaseActionSchema.merge( @@ -33,6 +28,9 @@ export const ExecuteRouteRequestBody = BaseActionSchema.merge( }) ); +export type ExecuteRouteResponse = z.infer; +export const ExecuteRouteResponse = z.object({}); + export type EndpointExecuteActionRequestBody = z.infer; export const EndpointExecuteActionRequestBody = ExecuteRouteRequestBody; export type EndpointExecuteActionRequestBodyInput = z.input< @@ -40,4 +38,4 @@ export type EndpointExecuteActionRequestBodyInput = z.input< >; export type EndpointExecuteActionResponse = z.infer; -export const EndpointExecuteActionResponse = SuccessResponse; +export const EndpointExecuteActionResponse = ExecuteRouteResponse; diff --git a/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/actions/response_actions/execute/execute.schema.yaml b/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/actions/response_actions/execute/execute.schema.yaml index f2496687b8fb0..84e6fa32d1389 100644 --- a/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/actions/response_actions/execute/execute.schema.yaml +++ b/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/actions/response_actions/execute/execute.schema.yaml @@ -22,11 +22,18 @@ paths: content: application/json: schema: - $ref: '../../../model/schema/common.schema.yaml#/components/schemas/SuccessResponse' + $ref: '#/components/schemas/ExecuteRouteResponse' components: schemas: ExecuteRouteRequestBody: + example: + parameters: + command: "ls -al" + timeout: 600 + endpoint_ids: + - "b3d6de74-36b0-4fa8-be46-c375bf1771bf" + comment: "Get list of all files" allOf: - $ref: '../../../model/schema/common.schema.yaml#/components/schemas/BaseActionSchema' - type: object @@ -42,3 +49,31 @@ components: $ref: '../../../model/schema/common.schema.yaml#/components/schemas/Command' timeout: $ref: '../../../model/schema/common.schema.yaml#/components/schemas/Timeout' + ExecuteRouteResponse: + type: object + properties: { } + example: + data: + id: "9f934028-2300-4927-b531-b26376793dc4" + agents: + - "ed518850-681a-4d60-bb98-e22640cae2a8" + hosts: + ed518850-681a-4d60-bb98-e22640cae2a8: + name: "gke-endpoint-gke-clu-endpoint-node-po-e1a3ab89-4c4r" + agentType: "endpoint" + command: "execute" + startedAt: "2023-07-28T18:43:27.362Z" + isCompleted: false + wasSuccessful: false + isExpired: false + status: "pending" + outputs: { } + agentState: + ed518850-681a-4d60-bb98-e22640cae2a8: + isCompleted: false + wasSuccessful: false + createdBy: "myuser" + comment: "Get list of all files" + parameters: + command: "ls -al" + timeout: 600 diff --git a/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/actions/response_actions/get_file/get_file.gen.ts b/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/actions/response_actions/get_file/get_file.gen.ts index e094bde8649d2..920b0a46f5f5f 100644 --- a/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/actions/response_actions/get_file/get_file.gen.ts +++ b/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/actions/response_actions/get_file/get_file.gen.ts @@ -16,7 +16,7 @@ import { z } from '@kbn/zod'; -import { SuccessResponse, BaseActionSchema } from '../../../model/schema/common.gen'; +import { BaseActionSchema } from '../../../model/schema/common.gen'; export type GetFileRouteRequestBody = z.infer; export const GetFileRouteRequestBody = BaseActionSchema.merge( @@ -27,6 +27,9 @@ export const GetFileRouteRequestBody = BaseActionSchema.merge( }) ); +export type GetFileRouteResponse = z.infer; +export const GetFileRouteResponse = z.object({}); + export type EndpointGetFileActionRequestBody = z.infer; export const EndpointGetFileActionRequestBody = GetFileRouteRequestBody; export type EndpointGetFileActionRequestBodyInput = z.input< @@ -34,4 +37,4 @@ export type EndpointGetFileActionRequestBodyInput = z.input< >; export type EndpointGetFileActionResponse = z.infer; -export const EndpointGetFileActionResponse = SuccessResponse; +export const EndpointGetFileActionResponse = GetFileRouteResponse; diff --git a/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/actions/response_actions/get_file/get_file.schema.yaml b/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/actions/response_actions/get_file/get_file.schema.yaml index cc36b843110b8..5ed449e492aac 100644 --- a/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/actions/response_actions/get_file/get_file.schema.yaml +++ b/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/actions/response_actions/get_file/get_file.schema.yaml @@ -23,11 +23,17 @@ paths: content: application/json: schema: - $ref: '../../../model/schema/common.schema.yaml#/components/schemas/SuccessResponse' + $ref: '#/components/schemas/GetFileRouteResponse' components: schemas: GetFileRouteRequestBody: + example: + endpoint_ids: + - "ed518850-681a-4d60-bb98-e22640cae2a8" + parameters: + path: "/usr/my-file.txt" + comment: "Get my file" allOf: - $ref: '../../../model/schema/common.schema.yaml#/components/schemas/BaseActionSchema' - type: object @@ -41,4 +47,31 @@ components: properties: path: type: string + GetFileRouteResponse: + type: object + properties: { } + example: + data: + id: "27ba1b42-7cc6-4e53-86ce-675c876092b2" + agents: + - "ed518850-681a-4d60-bb98-e22640cae2a8" + hosts: + ed518850-681a-4d60-bb98-e22640cae2a8: + name: "gke-endpoint-gke-clu-endpoint-node-po-e1a3ab89-4c4r" + agentType: "endpoint" + command: "get-file" + startedAt: "2023-07-28T19:00:03.911Z" + isCompleted: false + wasSuccessful: false + isExpired: false + status: "pending" + outputs: { } + agentState: + ed518850-681a-4d60-bb98-e22640cae2a8: + isCompleted: false + wasSuccessful: false + createdBy: "myuser" + parameters: + path: "/usr/my-file.txt" + diff --git a/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/actions/response_actions/isolate/isolate.gen.ts b/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/actions/response_actions/isolate/isolate.gen.ts index 030ba1433fb7b..f14b103f84bd7 100644 --- a/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/actions/response_actions/isolate/isolate.gen.ts +++ b/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/actions/response_actions/isolate/isolate.gen.ts @@ -14,18 +14,18 @@ * version: 2023-10-31 */ -import type { z } from '@kbn/zod'; +import { z } from '@kbn/zod'; -import { SuccessResponse, BaseActionSchema } from '../../../model/schema/common.gen'; +import { BaseActionSchema } from '../../../model/schema/common.gen'; -export type IsolateRouteRequestBody = z.infer; -export const IsolateRouteRequestBody = BaseActionSchema; +export type IsolateRouteResponse = z.infer; +export const IsolateRouteResponse = z.object({}); export type EndpointIsolateActionRequestBody = z.infer; -export const EndpointIsolateActionRequestBody = IsolateRouteRequestBody; +export const EndpointIsolateActionRequestBody = BaseActionSchema; export type EndpointIsolateActionRequestBodyInput = z.input< typeof EndpointIsolateActionRequestBody >; export type EndpointIsolateActionResponse = z.infer; -export const EndpointIsolateActionResponse = SuccessResponse; +export const EndpointIsolateActionResponse = IsolateRouteResponse; diff --git a/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/actions/response_actions/isolate/isolate.schema.yaml b/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/actions/response_actions/isolate/isolate.schema.yaml index 396d8e3d54b1e..1dbbea5b5c430 100644 --- a/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/actions/response_actions/isolate/isolate.schema.yaml +++ b/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/actions/response_actions/isolate/isolate.schema.yaml @@ -15,16 +15,62 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/IsolateRouteRequestBody' + $ref: '../../../model/schema/common.schema.yaml#/components/schemas/BaseActionSchema' + examples: + single_endpoint: + summary: "Isolates a single host with an endpoint_id value of ed518850-681a-4d60-bb98-e22640cae2a8" + value: + endpoint_ids: + - "ed518850-681a-4d60-bb98-e22640cae2a8" + multiple_endpoints: + summary: "Isolates several hosts; includes a comment" + value: + endpoint_ids: + - "9972d10e-4b9e-41aa-a534-a85e2a28ea42" + - "bc0e4f0c-3bca-4633-9fee-156c0b505d16" + - "fa89271b-b9d4-43f2-a684-307cffddeb5a" + comment: "Locked down, pending further investigation" + with_case_id: + summary: "Isolates a single host with a case_id value of 1234" + value: + endpoint_ids: + - "1aa1f8fd-0fb0-4fe4-8c30-92068272d3f0" + - "b30a11bf-1395-4707-b508-fbb45ef9793e" + case_ids: + - "4976be38-c134-4554-bd5e-0fd89ce63667" + comment: "Isolating as initial response" responses: '200': description: OK content: application/json: schema: - $ref: '../../../model/schema/common.schema.yaml#/components/schemas/SuccessResponse' - + $ref: '#/components/schemas/IsolateRouteResponse' components: schemas: - IsolateRouteRequestBody: - $ref: '../../../model/schema/common.schema.yaml#/components/schemas/BaseActionSchema' + IsolateRouteResponse: + type: object + properties: { } + example: + action: "233db9ea-6733-4849-9226-5a7039c7161d" + data: + id: "233db9ea-6733-4849-9226-5a7039c7161d" + agents: + - "ed518850-681a-4d60-bb98-e22640cae2a8" + command: "suspend-process" + agentType: "endpoint" + isExpired: false + isCompleted: true + wasSuccessful: true + errors: [ ] + startedAt: "2022-07-29T19:08:49.126Z" + completedAt: "2022-07-29T19:09:44.961Z" + outputs: + ed518850-681a-4d60-bb98-e22640cae2a8: + type: "json" + content: + key: "value" + createdBy: "myuser" + comment: "suspend the process" + parameters: + entity_id: "abc123" diff --git a/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/actions/response_actions/kill_process/kill_process.gen.ts b/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/actions/response_actions/kill_process/kill_process.gen.ts index 0f75653323bd2..cda61249e3f66 100644 --- a/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/actions/response_actions/kill_process/kill_process.gen.ts +++ b/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/actions/response_actions/kill_process/kill_process.gen.ts @@ -16,17 +16,27 @@ import { z } from '@kbn/zod'; -import { SuccessResponse, BaseActionSchema, Pid, EntityId } from '../../../model/schema/common.gen'; +import { BaseActionSchema } from '../../../model/schema/common.gen'; export type KillProcessRouteRequestBody = z.infer; export const KillProcessRouteRequestBody = BaseActionSchema.merge( z.object({ parameters: z.union([ - Pid, - EntityId, z.object({ /** - * Valid for SentinelOne agent type only + * The process ID (PID) of the process to terminate. + */ + pid: z.number().int().min(1).optional(), + }), + z.object({ + /** + * The entity ID of the process to terminate. + */ + entity_id: z.string().min(1).optional(), + }), + z.object({ + /** + * The name of the process to terminate. Valid for SentinelOne agent type only. */ process_name: z.string().min(1).optional(), }), @@ -34,6 +44,9 @@ export const KillProcessRouteRequestBody = BaseActionSchema.merge( }) ); +export type KillProcessRouteResponse = z.infer; +export const KillProcessRouteResponse = z.object({}); + export type EndpointKillProcessActionRequestBody = z.infer< typeof EndpointKillProcessActionRequestBody >; @@ -43,4 +56,4 @@ export type EndpointKillProcessActionRequestBodyInput = z.input< >; export type EndpointKillProcessActionResponse = z.infer; -export const EndpointKillProcessActionResponse = SuccessResponse; +export const EndpointKillProcessActionResponse = KillProcessRouteResponse; diff --git a/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/actions/response_actions/kill_process/kill_process.schema.yaml b/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/actions/response_actions/kill_process/kill_process.schema.yaml index fc0f68ef72bc6..ba314589cc4e7 100644 --- a/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/actions/response_actions/kill_process/kill_process.schema.yaml +++ b/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/actions/response_actions/kill_process/kill_process.schema.yaml @@ -22,11 +22,17 @@ paths: content: application/json: schema: - $ref: '../../../model/schema/common.schema.yaml#/components/schemas/SuccessResponse' + $ref: '#/components/schemas/KillProcessRouteResponse' components: schemas: KillProcessRouteRequestBody: + example: + endpoint_ids: + - "ed518850-681a-4d60-bb98-e22640cae2a8" + parameters: + entity_id: "abc123" + comment: "terminate the process" allOf: - $ref: '../../../model/schema/common.schema.yaml#/components/schemas/BaseActionSchema' - type: object @@ -35,11 +41,49 @@ components: properties: parameters: oneOf: - - $ref: "../../../model/schema/common.schema.yaml#/components/schemas/Pid" - - $ref: "../../../model/schema/common.schema.yaml#/components/schemas/EntityId" + - type: object + properties: + pid: + type: integer + description: "The process ID (PID) of the process to terminate." + example: 123 + minimum: 1 + - type: object + properties: + entity_id: + type: string + description: "The entity ID of the process to terminate." + example: "abc123" + minLength: 1 - type: object properties: process_name: type: string + description: "The name of the process to terminate. Valid for SentinelOne agent type only." + example: "Elastic" minLength: 1 - description: Valid for SentinelOne agent type only + KillProcessRouteResponse: + type: object + properties: { } + example: + data: + id: "233db9ea-6733-4849-9226-5a7039c7161d" + agents: + - "ed518850-681a-4d60-bb98-e22640cae2a8" + command: "kill-process" + agentType: "endpoint" + isExpired: false + isCompleted: true + wasSuccessful: true + errors: [ ] + startedAt: "2022-07-29T19:08:49.126Z" + completedAt: "2022-07-29T19:09:44.961Z" + outputs: + ed518850-681a-4d60-bb98-e22640cae2a8: + type: "json" + content: + key: "value" + createdBy: "myuser" + comment: "terminate the process" + parameters: + entity_id: "abc123" diff --git a/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/actions/response_actions/running_procs/running_procs.gen.ts b/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/actions/response_actions/running_procs/running_procs.gen.ts index 63e31a863e58e..1b590d73f0bec 100644 --- a/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/actions/response_actions/running_procs/running_procs.gen.ts +++ b/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/actions/response_actions/running_procs/running_procs.gen.ts @@ -14,13 +14,16 @@ * version: 2023-10-31 */ -import type { z } from '@kbn/zod'; +import { z } from '@kbn/zod'; -import { SuccessResponse, BaseActionSchema } from '../../../model/schema/common.gen'; +import { BaseActionSchema } from '../../../model/schema/common.gen'; export type GetProcessesRouteRequestBody = z.infer; export const GetProcessesRouteRequestBody = BaseActionSchema; +export type GetProcessesRouteResponse = z.infer; +export const GetProcessesRouteResponse = z.object({}); + export type EndpointGetProcessesActionRequestBody = z.infer< typeof EndpointGetProcessesActionRequestBody >; @@ -30,4 +33,4 @@ export type EndpointGetProcessesActionRequestBodyInput = z.input< >; export type EndpointGetProcessesActionResponse = z.infer; -export const EndpointGetProcessesActionResponse = SuccessResponse; +export const EndpointGetProcessesActionResponse = GetProcessesRouteResponse; diff --git a/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/actions/response_actions/running_procs/running_procs.schema.yaml b/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/actions/response_actions/running_procs/running_procs.schema.yaml index dc2735e04b50f..1eb69fc04018d 100644 --- a/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/actions/response_actions/running_procs/running_procs.schema.yaml +++ b/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/actions/response_actions/running_procs/running_procs.schema.yaml @@ -22,10 +22,37 @@ paths: content: application/json: schema: - $ref: '../../../model/schema/common.schema.yaml#/components/schemas/SuccessResponse' + $ref: '#/components/schemas/GetProcessesRouteResponse' components: schemas: GetProcessesRouteRequestBody: + example: + endpoint_ids: + - "ed518850-681a-4d60-bb98-e22640cae2a8" allOf: - $ref: '../../../model/schema/common.schema.yaml#/components/schemas/BaseActionSchema' + GetProcessesRouteResponse: + type: object + properties: { } + example: + data: + id: "233db9ea-6733-4849-9226-5a7039c7161d" + agents: + - "ed518850-681a-4d60-bb98-e22640cae2a8" + command: "running-processes" + agentType: "endpoint" + isExpired: false + isCompleted: true + wasSuccessful: true + errors: [ ] + startedAt: "2022-07-29T19:08:49.126Z" + completedAt: "2022-07-29T19:09:44.961Z" + outputs: + ed518850-681a-4d60-bb98-e22640cae2a8: + type: "json" + content: + key: "value" + createdBy: "myuser" + comment: "" + parameters: { } diff --git a/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/actions/response_actions/scan/scan.gen.ts b/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/actions/response_actions/scan/scan.gen.ts index 2d6f458e79994..0bb78c35fc1f1 100644 --- a/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/actions/response_actions/scan/scan.gen.ts +++ b/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/actions/response_actions/scan/scan.gen.ts @@ -16,20 +16,26 @@ import { z } from '@kbn/zod'; -import { SuccessResponse, BaseActionSchema } from '../../../model/schema/common.gen'; +import { BaseActionSchema } from '../../../model/schema/common.gen'; export type ScanRouteRequestBody = z.infer; export const ScanRouteRequestBody = BaseActionSchema.merge( z.object({ parameters: z.object({ + /** + * The folder or file’s full path (including the file name). + */ path: z.string(), }), }) ); +export type ScanRouteResponse = z.infer; +export const ScanRouteResponse = z.object({}); + export type EndpointScanActionRequestBody = z.infer; export const EndpointScanActionRequestBody = ScanRouteRequestBody; export type EndpointScanActionRequestBodyInput = z.input; export type EndpointScanActionResponse = z.infer; -export const EndpointScanActionResponse = SuccessResponse; +export const EndpointScanActionResponse = ScanRouteResponse; diff --git a/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/actions/response_actions/scan/scan.schema.yaml b/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/actions/response_actions/scan/scan.schema.yaml index 7ebf23a51ad7a..dc11a463319cd 100644 --- a/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/actions/response_actions/scan/scan.schema.yaml +++ b/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/actions/response_actions/scan/scan.schema.yaml @@ -22,11 +22,16 @@ paths: content: application/json: schema: - $ref: '../../../model/schema/common.schema.yaml#/components/schemas/SuccessResponse' - + $ref: '#/components/schemas/ScanRouteResponse' components: schemas: ScanRouteRequestBody: + example: + endpoint_ids: + - "ed518850-681a-4d60-bb98-e22640cae2a8" + parameters: + path: "/usr/my-file.txt" + comment: "Scan the file for malware" allOf: - $ref: '../../../model/schema/common.schema.yaml#/components/schemas/BaseActionSchema' - type: object @@ -40,4 +45,34 @@ components: properties: path: type: string + description: "The folder or file’s full path (including the file name)." + example: "/usr/my-file.txt" + ScanRouteResponse: + type: object + properties: { } + example: + data: + id: "27ba1b42-7cc6-4e53-86ce-675c876092b2" + agents: + - "ed518850-681a-4d60-bb98-e22640cae2a8" + hosts: + ed518850-681a-4d60-bb98-e22640cae2a8: + name: "gke-endpoint-gke-clu-endpoint-node-po-e1a3ab89-4c4r" + agentType: "endpoint" + command: "scan" + startedAt: "2023-07-28T19:00:03.911Z" + isCompleted: false + wasSuccessful: false + isExpired: false + status: "pending" + outputs: { } + agentState: + ed518850-681a-4d60-bb98-e22640cae2a8: + isCompleted: false + wasSuccessful: false + createdBy: "myuser" + parameters: + path: "/usr/my-file.txt" + + diff --git a/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/actions/response_actions/suspend_process/suspend_process.gen.ts b/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/actions/response_actions/suspend_process/suspend_process.gen.ts index ae737755e9880..12216e46bdf72 100644 --- a/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/actions/response_actions/suspend_process/suspend_process.gen.ts +++ b/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/actions/response_actions/suspend_process/suspend_process.gen.ts @@ -16,15 +16,31 @@ import { z } from '@kbn/zod'; -import { SuccessResponse, BaseActionSchema, Pid, EntityId } from '../../../model/schema/common.gen'; +import { BaseActionSchema } from '../../../model/schema/common.gen'; export type SuspendProcessRouteRequestBody = z.infer; export const SuspendProcessRouteRequestBody = BaseActionSchema.merge( z.object({ - parameters: z.union([Pid, EntityId]), + parameters: z.union([ + z.object({ + /** + * The process ID (PID) of the process to suspend. + */ + pid: z.number().int().min(1).optional(), + }), + z.object({ + /** + * The entity ID of the process to suspend. + */ + entity_id: z.string().min(1).optional(), + }), + ]), }) ); +export type SuspendProcessRouteResponse = z.infer; +export const SuspendProcessRouteResponse = z.object({}); + export type EndpointSuspendProcessActionRequestBody = z.infer< typeof EndpointSuspendProcessActionRequestBody >; @@ -36,4 +52,4 @@ export type EndpointSuspendProcessActionRequestBodyInput = z.input< export type EndpointSuspendProcessActionResponse = z.infer< typeof EndpointSuspendProcessActionResponse >; -export const EndpointSuspendProcessActionResponse = SuccessResponse; +export const EndpointSuspendProcessActionResponse = SuspendProcessRouteResponse; diff --git a/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/actions/response_actions/suspend_process/suspend_process.schema.yaml b/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/actions/response_actions/suspend_process/suspend_process.schema.yaml index bc1a38351df44..505b8424b6c2c 100644 --- a/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/actions/response_actions/suspend_process/suspend_process.schema.yaml +++ b/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/actions/response_actions/suspend_process/suspend_process.schema.yaml @@ -22,11 +22,17 @@ paths: content: application/json: schema: - $ref: '../../../model/schema/common.schema.yaml#/components/schemas/SuccessResponse' + $ref: '#/components/schemas/SuspendProcessRouteResponse' components: schemas: SuspendProcessRouteRequestBody: + example: + endpoint_ids: + - "ed518850-681a-4d60-bb98-e22640cae2a8" + parameters: + entity_id: "abc123" + comment: "suspend the process" allOf: - $ref: '../../../model/schema/common.schema.yaml#/components/schemas/BaseActionSchema' - type: object @@ -35,5 +41,42 @@ components: properties: parameters: oneOf: - - $ref: "../../../model/schema/common.schema.yaml#/components/schemas/Pid" - - $ref: "../../../model/schema/common.schema.yaml#/components/schemas/EntityId" + - type: object + properties: + pid: + type: integer + description: "The process ID (PID) of the process to suspend." + example: 123 + minimum: 1 + - type: object + properties: + entity_id: + type: string + description: "The entity ID of the process to suspend." + example: "abc123" + minLength: 1 + SuspendProcessRouteResponse: + type: object + properties: { } + example: + data: + id: "233db9ea-6733-4849-9226-5a7039c7161d" + agents: + - "ed518850-681a-4d60-bb98-e22640cae2a8" + command: "suspend-process" + agentType: "endpoint" + isExpired: false + isCompleted: true + wasSuccessful: true + errors: [ ] + startedAt: "2022-07-29T19:08:49.126Z" + completedAt: "2022-07-29T19:09:44.961Z" + outputs: + ed518850-681a-4d60-bb98-e22640cae2a8: + type: "json" + content: + key: "value" + createdBy: "myuser" + comment: "suspend the process" + parameters: + entity_id: "abc123" diff --git a/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/actions/response_actions/unisolate/unisolate.gen.ts b/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/actions/response_actions/unisolate/unisolate.gen.ts index 115ff4162e206..be1bc891a6680 100644 --- a/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/actions/response_actions/unisolate/unisolate.gen.ts +++ b/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/actions/response_actions/unisolate/unisolate.gen.ts @@ -14,18 +14,18 @@ * version: 2023-10-31 */ -import type { z } from '@kbn/zod'; +import { z } from '@kbn/zod'; -import { SuccessResponse, BaseActionSchema } from '../../../model/schema/common.gen'; +import { BaseActionSchema } from '../../../model/schema/common.gen'; -export type UnisolateRouteRequestBody = z.infer; -export const UnisolateRouteRequestBody = BaseActionSchema; +export type UnisolateRouteResponse = z.infer; +export const UnisolateRouteResponse = z.object({}); export type EndpointUnisolateActionRequestBody = z.infer; -export const EndpointUnisolateActionRequestBody = UnisolateRouteRequestBody; +export const EndpointUnisolateActionRequestBody = BaseActionSchema; export type EndpointUnisolateActionRequestBodyInput = z.input< typeof EndpointUnisolateActionRequestBody >; export type EndpointUnisolateActionResponse = z.infer; -export const EndpointUnisolateActionResponse = SuccessResponse; +export const EndpointUnisolateActionResponse = UnisolateRouteResponse; diff --git a/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/actions/response_actions/unisolate/unisolate.schema.yaml b/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/actions/response_actions/unisolate/unisolate.schema.yaml index 6f5d2087c556e..11662d00ce331 100644 --- a/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/actions/response_actions/unisolate/unisolate.schema.yaml +++ b/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/actions/response_actions/unisolate/unisolate.schema.yaml @@ -14,17 +14,63 @@ paths: required: true content: application/json: + examples: + singleHost: + summary: "Releases a single host with an endpoint_id value of ed518850-681a-4d60-bb98-e22640cae2a8" + value: + endpoint_ids: + - "ed518850-681a-4d60-bb98-e22640cae2a8" + multipleHosts: + summary: "Releases several hosts; includes a comment:" + value: + endpoint_ids: + - "9972d10e-4b9e-41aa-a534-a85e2a28ea42" + - "bc0e4f0c-3bca-4633-9fee-156c0b505d16" + - "fa89271b-b9d4-43f2-a684-307cffddeb5a" + comment: "Benign process identified, releasing group" + withCaseId: + summary: "Releases hosts with an associated case; includes a comment." + value: + endpoint_ids: + - "1aa1f8fd-0fb0-4fe4-8c30-92068272d3f0" + - "b30a11bf-1395-4707-b508-fbb45ef9793e" + case_ids: + - "4976be38-c134-4554-bd5e-0fd89ce63667" + comment: "Remediation complete, restoring network" schema: - $ref: '#/components/schemas/UnisolateRouteRequestBody' + $ref: '../../../model/schema/common.schema.yaml#/components/schemas/BaseActionSchema' responses: '200': description: OK content: application/json: schema: - $ref: '../../../model/schema/common.schema.yaml#/components/schemas/SuccessResponse' - + $ref: '#/components/schemas/UnisolateRouteResponse' components: schemas: - UnisolateRouteRequestBody: - $ref: '../../../model/schema/common.schema.yaml#/components/schemas/BaseActionSchema' + UnisolateRouteResponse: + type: object + properties: {} + example: + action: "233db9ea-6733-4849-9226-5a7039c7161d" + data: + id: "233db9ea-6733-4849-9226-5a7039c7161d" + agents: + - "ed518850-681a-4d60-bb98-e22640cae2a8" + command: "suspend-process" + agentType: "endpoint" + isExpired: false + isCompleted: true + wasSuccessful: true + errors: [ ] + startedAt: "2022-07-29T19:08:49.126Z" + completedAt: "2022-07-29T19:09:44.961Z" + outputs: + ed518850-681a-4d60-bb98-e22640cae2a8: + type: "json" + content: + key: "value" + createdBy: "myuser" + comment: "suspend the process" + parameters: + entity_id: "abc123" diff --git a/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/actions/response_actions/upload/upload.gen.ts b/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/actions/response_actions/upload/upload.gen.ts index fbce5717a6a22..adadf042652a0 100644 --- a/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/actions/response_actions/upload/upload.gen.ts +++ b/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/actions/response_actions/upload/upload.gen.ts @@ -16,21 +16,26 @@ import { z } from '@kbn/zod'; -import { SuccessResponse, BaseActionSchema } from '../../../model/schema/common.gen'; +import { BaseActionSchema } from '../../../model/schema/common.gen'; export type UploadRouteRequestBody = z.infer; export const UploadRouteRequestBody = BaseActionSchema.merge( z.object({ parameters: z.object({ + /** + * Overwrite the file on the host if it already exists. + */ overwrite: z.boolean().optional().default(false), }), + /** + * The binary content of the file. + */ file: z.string(), }) ); -export type EndpointUploadActionRequestBody = z.infer; -export const EndpointUploadActionRequestBody = UploadRouteRequestBody; -export type EndpointUploadActionRequestBodyInput = z.input; +export type UploadRouteResponse = z.infer; +export const UploadRouteResponse = z.object({}); export type EndpointUploadActionResponse = z.infer; -export const EndpointUploadActionResponse = SuccessResponse; +export const EndpointUploadActionResponse = UploadRouteResponse; diff --git a/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/actions/response_actions/upload/upload.schema.yaml b/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/actions/response_actions/upload/upload.schema.yaml index 512fc6c4d4613..900eeec3fbd4d 100644 --- a/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/actions/response_actions/upload/upload.schema.yaml +++ b/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/actions/response_actions/upload/upload.schema.yaml @@ -13,7 +13,7 @@ paths: requestBody: required: true content: - application/json: + multipart/form-data: schema: $ref: '#/components/schemas/UploadRouteRequestBody' responses: @@ -22,11 +22,16 @@ paths: content: application/json: schema: - $ref: '../../../model/schema/common.schema.yaml#/components/schemas/SuccessResponse' + $ref: '#/components/schemas/UploadRouteResponse' components: schemas: UploadRouteRequestBody: + example: + endpoint_ids: + - "ed518850-681a-4d60-bb98-e22640cae2a8" + file: "RWxhc3RpYw==" + parameters: { } allOf: - $ref: '../../../model/schema/common.schema.yaml#/components/schemas/BaseActionSchema' - type: object @@ -39,8 +44,41 @@ components: properties: overwrite: type: boolean + description: "Overwrite the file on the host if it already exists." + example: false default: false # File extends Blob - any binary data will be base-64 encoded file: type: string + description: "The binary content of the file." + example: "RWxhc3RpYw==" format: binary + UploadRouteResponse: + type: object + properties: { } + example: + data: + id: "9ff6aebc-2cb6-481e-8869-9b30036c9731" + agents: + - "ed518850-681a-4d60-bb98-e22640cae2a8" + hosts: + ed518850-681a-4d60-bb98-e22640cae2a8: + name: "Host-5i6cuc8kdv" + command: "upload" + agentType: "endpoint" + startedAt: "2023-07-03T15:07:22.837Z" + isCompleted: false + wasSuccessful: false + isExpired: false + status: "pending" + outputs: { } + agentState: + ed518850-681a-4d60-bb98-e22640cae2a8: + isCompleted: false + wasSuccessful: false + createdBy: "elastic" + parameters: + file_name: "fix-malware.sh" + file_id: "10e4ce3d-4abb-4f93-a0cd-eaf63a489280" + file_sha256: "a0bed94220193ba4895c0aa5b4e7e293381d15765cb164ddf7be5cdd010ae42a" + file_size: 69 diff --git a/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/model/schema/common.gen.ts b/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/model/schema/common.gen.ts index a30695af76bf4..c8df058537fc2 100644 --- a/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/model/schema/common.gen.ts +++ b/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/model/schema/common.gen.ts @@ -37,13 +37,13 @@ export type PageSize = z.infer; export const PageSize = z.number().int().min(1).max(100).default(10); /** - * Start date + * A start date in ISO 8601 format or Date Math format. */ export type StartDate = z.infer; export const StartDate = z.string(); /** - * End date + * An end date in ISO format or Date Math format. */ export type EndDate = z.infer; export const EndDate = z.string(); @@ -94,6 +94,9 @@ export const SortField = z.enum([ export type SortFieldEnum = typeof SortField.enum; export const SortFieldEnum = SortField.enum; +/** + * A list of agent IDs. Max of 50. + */ export type AgentIds = z.infer; export const AgentIds = z.union([z.array(z.string().min(1)).min(1).max(50), z.string().min(1)]); @@ -115,6 +118,9 @@ export const Command = z.enum([ export type CommandEnum = typeof Command.enum; export const CommandEnum = Command.enum; +/** + * A list of response action command names. + */ export type Commands = z.infer; export const Commands = z.array(Command); @@ -133,13 +139,13 @@ export type Statuses = z.infer; export const Statuses = z.array(Status); /** - * User IDs + * A list of user IDs. */ export type UserIds = z.infer; export const UserIds = z.union([z.array(z.string().min(1)).min(1), z.string().min(1)]); /** - * Shows detailed outputs for an action response + * A list of action IDs that should include the complete output of the action. */ export type WithOutputs = z.infer; export const WithOutputs = z.union([z.array(z.string().min(1)).min(1), z.string().min(1)]); @@ -183,7 +189,7 @@ export type Parameters = z.infer; export const Parameters = z.object({}); /** - * The host agent type (optional). Defaults to endpoint. + * List of agent types to retrieve. Defaults to `endpoint`. */ export type AgentTypes = z.infer; export const AgentTypes = z.enum([ @@ -210,16 +216,6 @@ export const NoParametersRequestSchema = z.object({ body: BaseActionSchema, }); -export type Pid = z.infer; -export const Pid = z.object({ - pid: z.number().int().min(1).optional(), -}); - -export type EntityId = z.infer; -export const EntityId = z.object({ - entity_id: z.string().min(1).optional(), -}); - export type ProtectionUpdatesNoteResponse = z.infer; export const ProtectionUpdatesNoteResponse = z.object({ note: z.string().optional(), diff --git a/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/model/schema/common.schema.yaml b/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/model/schema/common.schema.yaml index 457fa19f26478..324efce4960db 100644 --- a/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/model/schema/common.schema.yaml +++ b/x-pack/solutions/security/plugins/security_solution/common/api/endpoint/model/schema/common.schema.yaml @@ -25,10 +25,12 @@ components: example: 10 StartDate: type: string - description: Start date + description: A start date in ISO 8601 format or Date Math format. + example: "2023-10-31T00:00:00.000Z" EndDate: type: string - description: End date + description: An end date in ISO format or Date Math format. + example: "2023-10-31T23:59:59.999Z" AgentId: type: string description: Agent ID @@ -80,6 +82,8 @@ components: maxItems: 50 - type: string minLength: 1 + description: A list of agent IDs. Max of 50. + example: [ "agent-id-1", "agent-id-2" ] minLength: 1 Command: @@ -99,6 +103,8 @@ components: Commands: type: array + description: A list of response action command names. + example: [ "isolate", "unisolate" ] items: $ref: '#/components/schemas/Command' @@ -130,7 +136,8 @@ components: minItems: 1 - type: string minLength: 1 - description: User IDs + description: A list of user IDs. + example: [ "user-id-1", "user-id-2" ] WithOutputs: oneOf: @@ -141,7 +148,8 @@ components: minItems: 1 - type: string minLength: 1 - description: Shows detailed outputs for an action response + description: A list of action IDs that should include the complete output of the action. + example: [ "action-id-1", "action-id-2" ] Type: type: string @@ -153,6 +161,7 @@ components: Types: type: array description: List of types of response actions + example: [ "automated", "manual" ] items: $ref: '#/components/schemas/Type' minLength: 1 @@ -160,27 +169,35 @@ components: EndpointIds: type: array + description: List of endpoint IDs (cannot contain empty strings) + example: [ "endpoint-id-1", "endpoint-id-2" ] items: type: string minLength: 1 minItems: 1 - description: List of endpoint IDs (cannot contain empty strings) + CaseIds: type: array + description: Case IDs to be updated (cannot contain empty strings) + example: [ "case-id-1", "case-id-2" ] items: type: string minLength: 1 minItems: 1 - description: Case IDs to be updated (cannot contain empty strings) + Comment: type: string description: Optional comment + example: "This is a comment" + Parameters: type: object description: Optional parameters object + AgentTypes: type: string - description: The host agent type (optional). Defaults to endpoint. + description: List of agent types to retrieve. Defaults to `endpoint`. + example: endpoint enum: - endpoint - sentinel_one @@ -214,20 +231,6 @@ components: body: $ref: '#/components/schemas/BaseActionSchema' - Pid: - type: object - properties: - pid: - type: integer - minimum: 1 - - EntityId: - type: object - properties: - entity_id: - type: string - minLength: 1 - ProtectionUpdatesNoteResponse: type: object properties: diff --git a/x-pack/solutions/security/plugins/security_solution/common/api/quickstart_client.gen.ts b/x-pack/solutions/security/plugins/security_solution/common/api/quickstart_client.gen.ts index 67e4ca160e32d..647175f45e5c5 100644 --- a/x-pack/solutions/security/plugins/security_solution/common/api/quickstart_client.gen.ts +++ b/x-pack/solutions/security/plugins/security_solution/common/api/quickstart_client.gen.ts @@ -180,10 +180,7 @@ import type { EndpointUnisolateActionRequestBodyInput, EndpointUnisolateActionResponse, } from './endpoint/actions/response_actions/unisolate/unisolate.gen'; -import type { - EndpointUploadActionRequestBodyInput, - EndpointUploadActionResponse, -} from './endpoint/actions/response_actions/upload/upload.gen'; +import type { EndpointUploadActionResponse } from './endpoint/actions/response_actions/upload/upload.gen'; import type { EndpointGetActionsStateResponse } from './endpoint/actions/state/state.gen'; import type { EndpointGetActionsStatusRequestQueryInput, @@ -1126,7 +1123,7 @@ If a record already exists for the specified entity, that record is overwritten [ELASTIC_HTTP_VERSION_HEADER]: '2023-10-31', }, method: 'POST', - body: props.body, + body: props.attachment, }) .catch(catchAxiosErrorFormatAndThrow); } @@ -2433,7 +2430,7 @@ export interface EndpointUnisolateActionProps { body: EndpointUnisolateActionRequestBodyInput; } export interface EndpointUploadActionProps { - body: EndpointUploadActionRequestBodyInput; + attachment: FormData; } export interface ExportRulesProps { query: ExportRulesRequestQueryInput; diff --git a/x-pack/solutions/security/plugins/security_solution/common/constants.ts b/x-pack/solutions/security/plugins/security_solution/common/constants.ts index 8851ae03283c4..7cf21a50307f2 100644 --- a/x-pack/solutions/security/plugins/security_solution/common/constants.ts +++ b/x-pack/solutions/security/plugins/security_solution/common/constants.ts @@ -217,6 +217,9 @@ export const ENABLE_VISUALIZATIONS_IN_FLYOUT_SETTING = export const ENABLE_GRAPH_VISUALIZATION_SETTING = 'securitySolution:enableGraphVisualization' as const; +/** This Kibana Advanced Setting allows users to enable/disable the Asset Inventory feature */ +export const ENABLE_ASSET_INVENTORY_SETTING = 'securitySolution:enableAssetInventory' as const; + /** * Id for the notifications alerting type * @deprecated Once we are confident all rules relying on side-car actions SO's have been migrated to SO references we should remove this function diff --git a/x-pack/solutions/security/plugins/security_solution/common/experimental_features.ts b/x-pack/solutions/security/plugins/security_solution/common/experimental_features.ts index e75eb7fd21fe8..922292bb2ca9b 100644 --- a/x-pack/solutions/security/plugins/security_solution/common/experimental_features.ts +++ b/x-pack/solutions/security/plugins/security_solution/common/experimental_features.ts @@ -252,11 +252,6 @@ export const allowedExperimentalValues = Object.freeze({ */ crowdstrikeRunScriptEnabled: true, - /** - * Enables the Asset Inventory feature - */ - assetInventoryUXEnabled: false, - /** * Enabled Microsoft Defender for Endpoint actions: Isolate and Release. * Release: 8.18/9.0 diff --git a/x-pack/solutions/security/plugins/security_solution/docs/openapi/ess/security_solution_endpoint_management_api_2023_10_31.bundled.schema.yaml b/x-pack/solutions/security/plugins/security_solution/docs/openapi/ess/security_solution_endpoint_management_api_2023_10_31.bundled.schema.yaml index ddf92f9b0dec3..a69547c512a83 100644 --- a/x-pack/solutions/security/plugins/security_solution/docs/openapi/ess/security_solution_endpoint_management_api_2023_10_31.bundled.schema.yaml +++ b/x-pack/solutions/security/plugins/security_solution/docs/openapi/ess/security_solution_endpoint_management_api_2023_10_31.bundled.schema.yaml @@ -17,16 +17,61 @@ paths: operationId: EndpointGetActionsList parameters: - in: query - name: query - required: true + name: page + required: false + schema: + $ref: '#/components/schemas/Page' + - in: query + name: pageSize + required: false schema: - $ref: '#/components/schemas/GetEndpointActionListRouteQuery' + $ref: '#/components/schemas/PageSize' + - in: query + name: commands + required: false + schema: + $ref: '#/components/schemas/Commands' + - in: query + name: agentIds + required: false + schema: + $ref: '#/components/schemas/AgentIds' + - in: query + name: userIds + required: false + schema: + $ref: '#/components/schemas/UserIds' + - in: query + name: startDate + required: false + schema: + $ref: '#/components/schemas/StartDate' + - in: query + name: endDate + required: false + schema: + $ref: '#/components/schemas/EndDate' + - in: query + name: agentTypes + required: false + schema: + $ref: '#/components/schemas/AgentTypes' + - in: query + name: withOutputs + required: false + schema: + $ref: '#/components/schemas/WithOutputs' + - in: query + name: types + required: false + schema: + $ref: '#/components/schemas/Types' responses: '200': content: application/json: schema: - $ref: '#/components/schemas/SuccessResponse' + $ref: '#/components/schemas/GetEndpointActionListResponse' description: OK summary: Get response actions tags: @@ -63,13 +108,15 @@ paths: name: action_id required: true schema: + description: The ID of the action to retrieve. + example: fr518850-681a-4y60-aa98-e22640cae2b8 type: string responses: '200': content: application/json: schema: - $ref: '#/components/schemas/SuccessResponse' + $ref: '#/components/schemas/GetEndpointActionResponse' description: OK summary: Get action details tags: @@ -139,7 +186,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/SuccessResponse' + $ref: '#/components/schemas/ExecuteRouteResponse' description: OK summary: Run a command tags: @@ -159,7 +206,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/SuccessResponse' + $ref: '#/components/schemas/GetFileRouteResponse' description: OK summary: Get a file tags: @@ -173,15 +220,55 @@ paths: requestBody: content: application/json: + examples: + multiple_endpoints: + summary: Isolates several hosts; includes a comment + value: + comment: Locked down, pending further investigation + endpoint_ids: + - 9972d10e-4b9e-41aa-a534-a85e2a28ea42 + - bc0e4f0c-3bca-4633-9fee-156c0b505d16 + - fa89271b-b9d4-43f2-a684-307cffddeb5a + single_endpoint: + summary: >- + Isolates a single host with an endpoint_id value of + ed518850-681a-4d60-bb98-e22640cae2a8 + value: + endpoint_ids: + - ed518850-681a-4d60-bb98-e22640cae2a8 + with_case_id: + summary: Isolates a single host with a case_id value of 1234 + value: + case_ids: + - 4976be38-c134-4554-bd5e-0fd89ce63667 + comment: Isolating as initial response + endpoint_ids: + - 1aa1f8fd-0fb0-4fe4-8c30-92068272d3f0 + - b30a11bf-1395-4707-b508-fbb45ef9793e schema: - $ref: '#/components/schemas/IsolateRouteRequestBody' + type: object + properties: + agent_type: + $ref: '#/components/schemas/AgentTypes' + alert_ids: + $ref: '#/components/schemas/AlertIds' + case_ids: + $ref: '#/components/schemas/CaseIds' + comment: + $ref: '#/components/schemas/Comment' + endpoint_ids: + $ref: '#/components/schemas/EndpointIds' + parameters: + $ref: '#/components/schemas/Parameters' + required: + - endpoint_ids required: true responses: '200': content: application/json: schema: - $ref: '#/components/schemas/SuccessResponse' + $ref: '#/components/schemas/IsolateRouteResponse' description: OK summary: Isolate an endpoint tags: @@ -201,7 +288,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/SuccessResponse' + $ref: '#/components/schemas/KillProcessRouteResponse' description: OK summary: Terminate a process tags: @@ -221,7 +308,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/SuccessResponse' + $ref: '#/components/schemas/GetProcessesRouteResponse' description: OK summary: Get running processes tags: @@ -261,7 +348,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/SuccessResponse' + $ref: '#/components/schemas/ScanRouteResponse' description: OK summary: Scan a file or directory tags: @@ -297,7 +384,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/SuccessResponse' + $ref: '#/components/schemas/SuspendProcessRouteResponse' description: OK summary: Suspend a process tags: @@ -309,15 +396,55 @@ paths: requestBody: content: application/json: + examples: + multipleHosts: + summary: 'Releases several hosts; includes a comment:' + value: + comment: Benign process identified, releasing group + endpoint_ids: + - 9972d10e-4b9e-41aa-a534-a85e2a28ea42 + - bc0e4f0c-3bca-4633-9fee-156c0b505d16 + - fa89271b-b9d4-43f2-a684-307cffddeb5a + singleHost: + summary: >- + Releases a single host with an endpoint_id value of + ed518850-681a-4d60-bb98-e22640cae2a8 + value: + endpoint_ids: + - ed518850-681a-4d60-bb98-e22640cae2a8 + withCaseId: + summary: Releases hosts with an associated case; includes a comment. + value: + case_ids: + - 4976be38-c134-4554-bd5e-0fd89ce63667 + comment: Remediation complete, restoring network + endpoint_ids: + - 1aa1f8fd-0fb0-4fe4-8c30-92068272d3f0 + - b30a11bf-1395-4707-b508-fbb45ef9793e schema: - $ref: '#/components/schemas/UnisolateRouteRequestBody' + type: object + properties: + agent_type: + $ref: '#/components/schemas/AgentTypes' + alert_ids: + $ref: '#/components/schemas/AlertIds' + case_ids: + $ref: '#/components/schemas/CaseIds' + comment: + $ref: '#/components/schemas/Comment' + endpoint_ids: + $ref: '#/components/schemas/EndpointIds' + parameters: + $ref: '#/components/schemas/Parameters' + required: + - endpoint_ids required: true responses: '200': content: application/json: schema: - $ref: '#/components/schemas/SuccessResponse' + $ref: '#/components/schemas/UnisolateRouteResponse' description: OK summary: Release an isolated endpoint tags: @@ -328,7 +455,7 @@ paths: operationId: EndpointUploadAction requestBody: content: - application/json: + multipart/form-data: schema: $ref: '#/components/schemas/UploadRouteRequestBody' required: true @@ -337,7 +464,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/SuccessResponse' + $ref: '#/components/schemas/UploadRouteResponse' description: OK summary: Upload a file tags: @@ -515,6 +642,10 @@ components: description: Agent ID type: string AgentIds: + description: A list of agent IDs. Max of 50. + example: + - agent-id-1 + - agent-id-2 minLength: 1 oneOf: - items: @@ -526,12 +657,13 @@ components: - minLength: 1 type: string AgentTypes: - description: The host agent type (optional). Defaults to endpoint. + description: List of agent types to retrieve. Defaults to `endpoint`. enum: - endpoint - sentinel_one - crowdstrike - microsoft_defender_endpoint + example: endpoint type: string AlertIds: description: A list of alerts `id`s. @@ -543,6 +675,9 @@ components: type: array CaseIds: description: Case IDs to be updated (cannot contain empty strings) + example: + - case-id-1 + - case-id-2 items: minLength: 1 type: string @@ -580,17 +715,26 @@ components: minLength: 1 type: string Commands: + description: A list of response action command names. + example: + - isolate + - unisolate items: $ref: '#/components/schemas/Command' type: array Comment: description: Optional comment + example: This is a comment type: string EndDate: - description: End date + description: An end date in ISO format or Date Math format. + example: '2023-10-31T23:59:59.999Z' type: string EndpointIds: description: List of endpoint IDs (cannot contain empty strings) + example: + - endpoint-id-1 + - endpoint-id-2 items: minLength: 1 type: string @@ -684,12 +828,6 @@ components: revision: 2 type: object properties: {} - EntityId: - type: object - properties: - entity_id: - minLength: 1 - type: string ExecuteRouteRequestBody: allOf: - type: object @@ -721,33 +859,128 @@ components: - command required: - parameters - GetEndpointActionListRouteQuery: + example: + comment: Get list of all files + endpoint_ids: + - b3d6de74-36b0-4fa8-be46-c375bf1771bf + parameters: + command: ls -al + timeout: 600 + ExecuteRouteResponse: + example: + data: + agents: + - ed518850-681a-4d60-bb98-e22640cae2a8 + agentState: + ed518850-681a-4d60-bb98-e22640cae2a8: + isCompleted: false + wasSuccessful: false + agentType: endpoint + command: execute + comment: Get list of all files + createdBy: myuser + hosts: + ed518850-681a-4d60-bb98-e22640cae2a8: + name: gke-endpoint-gke-clu-endpoint-node-po-e1a3ab89-4c4r + id: 9f934028-2300-4927-b531-b26376793dc4 + isCompleted: false + isExpired: false + outputs: {} + parameters: + command: ls -al + timeout: 600 + startedAt: '2023-07-28T18:43:27.362Z' + status: pending + wasSuccessful: false type: object - properties: - agentIds: - $ref: '#/components/schemas/AgentIds' - agentTypes: - $ref: '#/components/schemas/AgentTypes' - commands: - $ref: '#/components/schemas/Commands' - endDate: - $ref: '#/components/schemas/EndDate' - page: - $ref: '#/components/schemas/Page' - pageSize: - default: 10 - description: Number of items per page - maximum: 10000 - minimum: 1 - type: integer - startDate: - $ref: '#/components/schemas/StartDate' - types: - $ref: '#/components/schemas/Types' - userIds: - $ref: '#/components/schemas/UserIds' - withOutputs: - $ref: '#/components/schemas/WithOutputs' + properties: {} + GetEndpointActionListResponse: + example: + data: + - agents: + - afdc366c-e2e0-4cdb-ae1d-94575bd2d8e0 + agentType: endpoint + command: running-processes + completedAt: '2022-08-08T09:50:47.672Z' + createdBy: elastic + id: b3d6de74-36b0-4fa8-be46-c375bf1771bf + isCompleted: true + isExpired: false + startedAt: '2022-08-08T15:24:57.402Z' + wasSuccessful: true + - agents: + - afdc366c-e2e0-4cdb-ae1d-94575bd2d8e0 + agentType: endpoint + command: isolate + completedAt: '2022-08-08T10:41:57.352Z' + createdBy: elastic + id: 43b4098b-8752-4fbb-a7a7-6df7c74d0ee3 + isCompleted: true + isExpired: false + startedAt: '2022-08-08T15:23:37.359Z' + wasSuccessful: true + - agents: + - afdc366c-e2e0-4cdb-ae1d-94575bd2d8e0 + agentType: endpoint + command: kill-process + comment: bad process - taking up too much cpu + completedAt: '2022-08-08T09:44:50.952Z' + createdBy: elastic + id: 5bc92c86-b8e6-42dd-837f-12ad29e09caa + isCompleted: true + isExpired: false + startedAt: '2022-08-08T14:38:44.125Z' + wasSuccessful: true + - agents: + - afdc366c-e2e0-4cdb-ae1d-94575bd2d8e0 + agentType: endpoint + command: unisolate + comment: Not a threat to the network + completedAt: '2022-08-08T09:40:47.398Z' + createdBy: elastic + id: 790d54e0-3aa3-4e5b-8255-3ce9d851246a + isCompleted: true + isExpired: false + startedAt: '2022-08-08T14:38:15.391Z' + wasSuccessful: true + elasticAgentIds: + - afdc366c-e2e0-4cdb-ae1d-94575bd2d8e0 + endDate: now + page: 1 + pageSize: 10 + startDate: now-24h/h + total: 4 + type: object + properties: {} + GetEndpointActionResponse: + example: + data: + agents: + - afdc366c-e2e0-4cdb-ae1d-94575bd2d8e0 + agentType: endpoint + command: running-processes + completedAt: '2022-08-08T09:50:47.672Z' + createdBy: elastic + id: b3d6de74-36b0-4fa8-be46-c375bf1771bf + isCompleted: true + isExpired: false + outputs: + afdc366c-e2e0-4cdb-ae1d-94575bd2d8e0: + content: + entries: + - command: /opt/cmd1 + entity_id: fk2ym7bl3oiu3okjcik0xosc0i0m75x3eh49nu3uaqt4dqanjt + pid: '822' + user: Dexter + - command: /opt/cmd3/opt/cmd3/opt/cmd3/opt/cmd3 + entity_id: pwvz91m48wpj9j7ov9gtw8fp7u2rat4eu5ipte37hnhdcbi2pt + pid: '984' + user: Jada + type: json + startedAt: '2022-08-08T15:24:57.402Z' + wasSuccessful: true + type: object + properties: {} GetFileRouteRequestBody: allOf: - type: object @@ -777,7 +1010,42 @@ components: - path required: - parameters + example: + comment: Get my file + endpoint_ids: + - ed518850-681a-4d60-bb98-e22640cae2a8 + parameters: + path: /usr/my-file.txt + GetFileRouteResponse: + example: + data: + agents: + - ed518850-681a-4d60-bb98-e22640cae2a8 + agentState: + ed518850-681a-4d60-bb98-e22640cae2a8: + isCompleted: false + wasSuccessful: false + agentType: endpoint + command: get-file + createdBy: myuser + hosts: + ed518850-681a-4d60-bb98-e22640cae2a8: + name: gke-endpoint-gke-clu-endpoint-node-po-e1a3ab89-4c4r + id: 27ba1b42-7cc6-4e53-86ce-675c876092b2 + isCompleted: false + isExpired: false + outputs: {} + parameters: + path: /usr/my-file.txt + startedAt: '2023-07-28T19:00:03.911Z' + status: pending + wasSuccessful: false + type: object + properties: {} GetProcessesRouteRequestBody: + example: + endpoint_ids: + - ed518850-681a-4d60-bb98-e22640cae2a8 type: object properties: agent_type: @@ -794,6 +1062,30 @@ components: $ref: '#/components/schemas/Parameters' required: - endpoint_ids + GetProcessesRouteResponse: + example: + data: + agents: + - ed518850-681a-4d60-bb98-e22640cae2a8 + agentType: endpoint + command: running-processes + comment: '' + completedAt: '2022-07-29T19:09:44.961Z' + createdBy: myuser + errors: [] + id: 233db9ea-6733-4849-9226-5a7039c7161d + isCompleted: true + isExpired: false + outputs: + ed518850-681a-4d60-bb98-e22640cae2a8: + content: + key: value + type: json + parameters: {} + startedAt: '2022-07-29T19:08:49.126Z' + wasSuccessful: true + type: object + properties: {} HostPathScriptParameters: type: object properties: @@ -825,23 +1117,32 @@ components: - unenrolled type: string type: array - IsolateRouteRequestBody: + IsolateRouteResponse: + example: + action: 233db9ea-6733-4849-9226-5a7039c7161d + data: + agents: + - ed518850-681a-4d60-bb98-e22640cae2a8 + agentType: endpoint + command: suspend-process + comment: suspend the process + completedAt: '2022-07-29T19:09:44.961Z' + createdBy: myuser + errors: [] + id: 233db9ea-6733-4849-9226-5a7039c7161d + isCompleted: true + isExpired: false + outputs: + ed518850-681a-4d60-bb98-e22640cae2a8: + content: + key: value + type: json + parameters: + entity_id: abc123 + startedAt: '2022-07-29T19:08:49.126Z' + wasSuccessful: true type: object - properties: - agent_type: - $ref: '#/components/schemas/AgentTypes' - alert_ids: - $ref: '#/components/schemas/AlertIds' - case_ids: - $ref: '#/components/schemas/CaseIds' - comment: - $ref: '#/components/schemas/Comment' - endpoint_ids: - $ref: '#/components/schemas/EndpointIds' - parameters: - $ref: '#/components/schemas/Parameters' - required: - - endpoint_ids + properties: {} KillProcessRouteRequestBody: allOf: - type: object @@ -864,16 +1165,62 @@ components: properties: parameters: oneOf: - - $ref: '#/components/schemas/Pid' - - $ref: '#/components/schemas/EntityId' + - type: object + properties: + pid: + description: The process ID (PID) of the process to terminate. + example: 123 + minimum: 1 + type: integer + - type: object + properties: + entity_id: + description: The entity ID of the process to terminate. + example: abc123 + minLength: 1 + type: string - type: object properties: process_name: - description: Valid for SentinelOne agent type only + description: >- + The name of the process to terminate. Valid for + SentinelOne agent type only. + example: Elastic minLength: 1 type: string required: - parameters + example: + comment: terminate the process + endpoint_ids: + - ed518850-681a-4d60-bb98-e22640cae2a8 + parameters: + entity_id: abc123 + KillProcessRouteResponse: + example: + data: + agents: + - ed518850-681a-4d60-bb98-e22640cae2a8 + agentType: endpoint + command: kill-process + comment: terminate the process + completedAt: '2022-07-29T19:09:44.961Z' + createdBy: myuser + errors: [] + id: 233db9ea-6733-4849-9226-5a7039c7161d + isCompleted: true + isExpired: false + outputs: + ed518850-681a-4d60-bb98-e22640cae2a8: + content: + key: value + type: json + parameters: + entity_id: abc123 + startedAt: '2022-07-29T19:08:49.126Z' + wasSuccessful: true + type: object + properties: {} Kuery: description: A KQL string. example: 'united.endpoint.host.os.name : ''Windows''' @@ -1100,12 +1447,6 @@ components: $ref: '#/components/schemas/PendingActionDataType' - additionalProperties: true type: object - Pid: - type: object - properties: - pid: - minimum: 1 - type: integer ProtectionUpdatesNoteResponse: type: object properties: @@ -1165,11 +1506,45 @@ components: type: object properties: path: + description: The folder or file’s full path (including the file name). + example: /usr/my-file.txt type: string required: - path required: - parameters + example: + comment: Scan the file for malware + endpoint_ids: + - ed518850-681a-4d60-bb98-e22640cae2a8 + parameters: + path: /usr/my-file.txt + ScanRouteResponse: + example: + data: + agents: + - ed518850-681a-4d60-bb98-e22640cae2a8 + agentState: + ed518850-681a-4d60-bb98-e22640cae2a8: + isCompleted: false + wasSuccessful: false + agentType: endpoint + command: scan + createdBy: myuser + hosts: + ed518850-681a-4d60-bb98-e22640cae2a8: + name: gke-endpoint-gke-clu-endpoint-node-po-e1a3ab89-4c4r + id: 27ba1b42-7cc6-4e53-86ce-675c876092b2 + isCompleted: false + isExpired: false + outputs: {} + parameters: + path: /usr/my-file.txt + startedAt: '2023-07-28T19:00:03.911Z' + status: pending + wasSuccessful: false + type: object + properties: {} SortDirection: description: Determines the sort order. enum: @@ -1192,7 +1567,8 @@ components: example: enrolled_at type: string StartDate: - description: Start date + description: A start date in ISO 8601 format or Date Math format. + example: '2023-10-31T00:00:00.000Z' type: string SuccessResponse: type: object @@ -1219,10 +1595,53 @@ components: properties: parameters: oneOf: - - $ref: '#/components/schemas/Pid' - - $ref: '#/components/schemas/EntityId' + - type: object + properties: + pid: + description: The process ID (PID) of the process to suspend. + example: 123 + minimum: 1 + type: integer + - type: object + properties: + entity_id: + description: The entity ID of the process to suspend. + example: abc123 + minLength: 1 + type: string required: - parameters + example: + comment: suspend the process + endpoint_ids: + - ed518850-681a-4d60-bb98-e22640cae2a8 + parameters: + entity_id: abc123 + SuspendProcessRouteResponse: + example: + data: + agents: + - ed518850-681a-4d60-bb98-e22640cae2a8 + agentType: endpoint + command: suspend-process + comment: suspend the process + completedAt: '2022-07-29T19:09:44.961Z' + createdBy: myuser + errors: [] + id: 233db9ea-6733-4849-9226-5a7039c7161d + isCompleted: true + isExpired: false + outputs: + ed518850-681a-4d60-bb98-e22640cae2a8: + content: + key: value + type: json + parameters: + entity_id: abc123 + startedAt: '2022-07-29T19:08:49.126Z' + wasSuccessful: true + type: object + properties: {} Timeout: description: The maximum timeout value in milliseconds (optional) minimum: 1 @@ -1235,28 +1654,40 @@ components: type: string Types: description: List of types of response actions + example: + - automated + - manual items: $ref: '#/components/schemas/Type' maxLength: 2 minLength: 1 type: array - UnisolateRouteRequestBody: + UnisolateRouteResponse: + example: + action: 233db9ea-6733-4849-9226-5a7039c7161d + data: + agents: + - ed518850-681a-4d60-bb98-e22640cae2a8 + agentType: endpoint + command: suspend-process + comment: suspend the process + completedAt: '2022-07-29T19:09:44.961Z' + createdBy: myuser + errors: [] + id: 233db9ea-6733-4849-9226-5a7039c7161d + isCompleted: true + isExpired: false + outputs: + ed518850-681a-4d60-bb98-e22640cae2a8: + content: + key: value + type: json + parameters: + entity_id: abc123 + startedAt: '2022-07-29T19:08:49.126Z' + wasSuccessful: true type: object - properties: - agent_type: - $ref: '#/components/schemas/AgentTypes' - alert_ids: - $ref: '#/components/schemas/AlertIds' - case_ids: - $ref: '#/components/schemas/CaseIds' - comment: - $ref: '#/components/schemas/Comment' - endpoint_ids: - $ref: '#/components/schemas/EndpointIds' - parameters: - $ref: '#/components/schemas/Parameters' - required: - - endpoint_ids + properties: {} UploadRouteRequestBody: allOf: - type: object @@ -1278,6 +1709,8 @@ components: - type: object properties: file: + description: The binary content of the file. + example: RWxhc3RpYw== format: binary type: string parameters: @@ -1285,12 +1718,51 @@ components: properties: overwrite: default: false + description: Overwrite the file on the host if it already exists. + example: false type: boolean required: - parameters - file + example: + endpoint_ids: + - ed518850-681a-4d60-bb98-e22640cae2a8 + file: RWxhc3RpYw== + parameters: {} + UploadRouteResponse: + example: + data: + agents: + - ed518850-681a-4d60-bb98-e22640cae2a8 + agentState: + ed518850-681a-4d60-bb98-e22640cae2a8: + isCompleted: false + wasSuccessful: false + agentType: endpoint + command: upload + createdBy: elastic + hosts: + ed518850-681a-4d60-bb98-e22640cae2a8: + name: Host-5i6cuc8kdv + id: 9ff6aebc-2cb6-481e-8869-9b30036c9731 + isCompleted: false + isExpired: false + outputs: {} + parameters: + file_id: 10e4ce3d-4abb-4f93-a0cd-eaf63a489280 + file_name: fix-malware.sh + file_sha256: a0bed94220193ba4895c0aa5b4e7e293381d15765cb164ddf7be5cdd010ae42a + file_size: 69 + startedAt: '2023-07-03T15:07:22.837Z' + status: pending + wasSuccessful: false + type: object + properties: {} UserIds: - description: User IDs + description: A list of user IDs. + example: + - user-id-1 + - user-id-2 oneOf: - items: minLength: 1 @@ -1300,7 +1772,12 @@ components: - minLength: 1 type: string WithOutputs: - description: Shows detailed outputs for an action response + description: >- + A list of action IDs that should include the complete output of the + action. + example: + - action-id-1 + - action-id-2 oneOf: - items: minLength: 1 diff --git a/x-pack/solutions/security/plugins/security_solution/docs/openapi/serverless/security_solution_endpoint_management_api_2023_10_31.bundled.schema.yaml b/x-pack/solutions/security/plugins/security_solution/docs/openapi/serverless/security_solution_endpoint_management_api_2023_10_31.bundled.schema.yaml index da3bc79dd1ecd..615f61f86970a 100644 --- a/x-pack/solutions/security/plugins/security_solution/docs/openapi/serverless/security_solution_endpoint_management_api_2023_10_31.bundled.schema.yaml +++ b/x-pack/solutions/security/plugins/security_solution/docs/openapi/serverless/security_solution_endpoint_management_api_2023_10_31.bundled.schema.yaml @@ -17,16 +17,61 @@ paths: operationId: EndpointGetActionsList parameters: - in: query - name: query - required: true + name: page + required: false + schema: + $ref: '#/components/schemas/Page' + - in: query + name: pageSize + required: false schema: - $ref: '#/components/schemas/GetEndpointActionListRouteQuery' + $ref: '#/components/schemas/PageSize' + - in: query + name: commands + required: false + schema: + $ref: '#/components/schemas/Commands' + - in: query + name: agentIds + required: false + schema: + $ref: '#/components/schemas/AgentIds' + - in: query + name: userIds + required: false + schema: + $ref: '#/components/schemas/UserIds' + - in: query + name: startDate + required: false + schema: + $ref: '#/components/schemas/StartDate' + - in: query + name: endDate + required: false + schema: + $ref: '#/components/schemas/EndDate' + - in: query + name: agentTypes + required: false + schema: + $ref: '#/components/schemas/AgentTypes' + - in: query + name: withOutputs + required: false + schema: + $ref: '#/components/schemas/WithOutputs' + - in: query + name: types + required: false + schema: + $ref: '#/components/schemas/Types' responses: '200': content: application/json: schema: - $ref: '#/components/schemas/SuccessResponse' + $ref: '#/components/schemas/GetEndpointActionListResponse' description: OK summary: Get response actions tags: @@ -63,13 +108,15 @@ paths: name: action_id required: true schema: + description: The ID of the action to retrieve. + example: fr518850-681a-4y60-aa98-e22640cae2b8 type: string responses: '200': content: application/json: schema: - $ref: '#/components/schemas/SuccessResponse' + $ref: '#/components/schemas/GetEndpointActionResponse' description: OK summary: Get action details tags: @@ -139,7 +186,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/SuccessResponse' + $ref: '#/components/schemas/ExecuteRouteResponse' description: OK summary: Run a command tags: @@ -159,7 +206,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/SuccessResponse' + $ref: '#/components/schemas/GetFileRouteResponse' description: OK summary: Get a file tags: @@ -173,15 +220,55 @@ paths: requestBody: content: application/json: + examples: + multiple_endpoints: + summary: Isolates several hosts; includes a comment + value: + comment: Locked down, pending further investigation + endpoint_ids: + - 9972d10e-4b9e-41aa-a534-a85e2a28ea42 + - bc0e4f0c-3bca-4633-9fee-156c0b505d16 + - fa89271b-b9d4-43f2-a684-307cffddeb5a + single_endpoint: + summary: >- + Isolates a single host with an endpoint_id value of + ed518850-681a-4d60-bb98-e22640cae2a8 + value: + endpoint_ids: + - ed518850-681a-4d60-bb98-e22640cae2a8 + with_case_id: + summary: Isolates a single host with a case_id value of 1234 + value: + case_ids: + - 4976be38-c134-4554-bd5e-0fd89ce63667 + comment: Isolating as initial response + endpoint_ids: + - 1aa1f8fd-0fb0-4fe4-8c30-92068272d3f0 + - b30a11bf-1395-4707-b508-fbb45ef9793e schema: - $ref: '#/components/schemas/IsolateRouteRequestBody' + type: object + properties: + agent_type: + $ref: '#/components/schemas/AgentTypes' + alert_ids: + $ref: '#/components/schemas/AlertIds' + case_ids: + $ref: '#/components/schemas/CaseIds' + comment: + $ref: '#/components/schemas/Comment' + endpoint_ids: + $ref: '#/components/schemas/EndpointIds' + parameters: + $ref: '#/components/schemas/Parameters' + required: + - endpoint_ids required: true responses: '200': content: application/json: schema: - $ref: '#/components/schemas/SuccessResponse' + $ref: '#/components/schemas/IsolateRouteResponse' description: OK summary: Isolate an endpoint tags: @@ -201,7 +288,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/SuccessResponse' + $ref: '#/components/schemas/KillProcessRouteResponse' description: OK summary: Terminate a process tags: @@ -221,7 +308,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/SuccessResponse' + $ref: '#/components/schemas/GetProcessesRouteResponse' description: OK summary: Get running processes tags: @@ -261,7 +348,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/SuccessResponse' + $ref: '#/components/schemas/ScanRouteResponse' description: OK summary: Scan a file or directory tags: @@ -297,7 +384,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/SuccessResponse' + $ref: '#/components/schemas/SuspendProcessRouteResponse' description: OK summary: Suspend a process tags: @@ -309,15 +396,55 @@ paths: requestBody: content: application/json: + examples: + multipleHosts: + summary: 'Releases several hosts; includes a comment:' + value: + comment: Benign process identified, releasing group + endpoint_ids: + - 9972d10e-4b9e-41aa-a534-a85e2a28ea42 + - bc0e4f0c-3bca-4633-9fee-156c0b505d16 + - fa89271b-b9d4-43f2-a684-307cffddeb5a + singleHost: + summary: >- + Releases a single host with an endpoint_id value of + ed518850-681a-4d60-bb98-e22640cae2a8 + value: + endpoint_ids: + - ed518850-681a-4d60-bb98-e22640cae2a8 + withCaseId: + summary: Releases hosts with an associated case; includes a comment. + value: + case_ids: + - 4976be38-c134-4554-bd5e-0fd89ce63667 + comment: Remediation complete, restoring network + endpoint_ids: + - 1aa1f8fd-0fb0-4fe4-8c30-92068272d3f0 + - b30a11bf-1395-4707-b508-fbb45ef9793e schema: - $ref: '#/components/schemas/UnisolateRouteRequestBody' + type: object + properties: + agent_type: + $ref: '#/components/schemas/AgentTypes' + alert_ids: + $ref: '#/components/schemas/AlertIds' + case_ids: + $ref: '#/components/schemas/CaseIds' + comment: + $ref: '#/components/schemas/Comment' + endpoint_ids: + $ref: '#/components/schemas/EndpointIds' + parameters: + $ref: '#/components/schemas/Parameters' + required: + - endpoint_ids required: true responses: '200': content: application/json: schema: - $ref: '#/components/schemas/SuccessResponse' + $ref: '#/components/schemas/UnisolateRouteResponse' description: OK summary: Release an isolated endpoint tags: @@ -328,7 +455,7 @@ paths: operationId: EndpointUploadAction requestBody: content: - application/json: + multipart/form-data: schema: $ref: '#/components/schemas/UploadRouteRequestBody' required: true @@ -337,7 +464,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/SuccessResponse' + $ref: '#/components/schemas/UploadRouteResponse' description: OK summary: Upload a file tags: @@ -515,6 +642,10 @@ components: description: Agent ID type: string AgentIds: + description: A list of agent IDs. Max of 50. + example: + - agent-id-1 + - agent-id-2 minLength: 1 oneOf: - items: @@ -526,12 +657,13 @@ components: - minLength: 1 type: string AgentTypes: - description: The host agent type (optional). Defaults to endpoint. + description: List of agent types to retrieve. Defaults to `endpoint`. enum: - endpoint - sentinel_one - crowdstrike - microsoft_defender_endpoint + example: endpoint type: string AlertIds: description: A list of alerts `id`s. @@ -543,6 +675,9 @@ components: type: array CaseIds: description: Case IDs to be updated (cannot contain empty strings) + example: + - case-id-1 + - case-id-2 items: minLength: 1 type: string @@ -580,17 +715,26 @@ components: minLength: 1 type: string Commands: + description: A list of response action command names. + example: + - isolate + - unisolate items: $ref: '#/components/schemas/Command' type: array Comment: description: Optional comment + example: This is a comment type: string EndDate: - description: End date + description: An end date in ISO format or Date Math format. + example: '2023-10-31T23:59:59.999Z' type: string EndpointIds: description: List of endpoint IDs (cannot contain empty strings) + example: + - endpoint-id-1 + - endpoint-id-2 items: minLength: 1 type: string @@ -684,12 +828,6 @@ components: revision: 2 type: object properties: {} - EntityId: - type: object - properties: - entity_id: - minLength: 1 - type: string ExecuteRouteRequestBody: allOf: - type: object @@ -721,33 +859,128 @@ components: - command required: - parameters - GetEndpointActionListRouteQuery: + example: + comment: Get list of all files + endpoint_ids: + - b3d6de74-36b0-4fa8-be46-c375bf1771bf + parameters: + command: ls -al + timeout: 600 + ExecuteRouteResponse: + example: + data: + agents: + - ed518850-681a-4d60-bb98-e22640cae2a8 + agentState: + ed518850-681a-4d60-bb98-e22640cae2a8: + isCompleted: false + wasSuccessful: false + agentType: endpoint + command: execute + comment: Get list of all files + createdBy: myuser + hosts: + ed518850-681a-4d60-bb98-e22640cae2a8: + name: gke-endpoint-gke-clu-endpoint-node-po-e1a3ab89-4c4r + id: 9f934028-2300-4927-b531-b26376793dc4 + isCompleted: false + isExpired: false + outputs: {} + parameters: + command: ls -al + timeout: 600 + startedAt: '2023-07-28T18:43:27.362Z' + status: pending + wasSuccessful: false type: object - properties: - agentIds: - $ref: '#/components/schemas/AgentIds' - agentTypes: - $ref: '#/components/schemas/AgentTypes' - commands: - $ref: '#/components/schemas/Commands' - endDate: - $ref: '#/components/schemas/EndDate' - page: - $ref: '#/components/schemas/Page' - pageSize: - default: 10 - description: Number of items per page - maximum: 10000 - minimum: 1 - type: integer - startDate: - $ref: '#/components/schemas/StartDate' - types: - $ref: '#/components/schemas/Types' - userIds: - $ref: '#/components/schemas/UserIds' - withOutputs: - $ref: '#/components/schemas/WithOutputs' + properties: {} + GetEndpointActionListResponse: + example: + data: + - agents: + - afdc366c-e2e0-4cdb-ae1d-94575bd2d8e0 + agentType: endpoint + command: running-processes + completedAt: '2022-08-08T09:50:47.672Z' + createdBy: elastic + id: b3d6de74-36b0-4fa8-be46-c375bf1771bf + isCompleted: true + isExpired: false + startedAt: '2022-08-08T15:24:57.402Z' + wasSuccessful: true + - agents: + - afdc366c-e2e0-4cdb-ae1d-94575bd2d8e0 + agentType: endpoint + command: isolate + completedAt: '2022-08-08T10:41:57.352Z' + createdBy: elastic + id: 43b4098b-8752-4fbb-a7a7-6df7c74d0ee3 + isCompleted: true + isExpired: false + startedAt: '2022-08-08T15:23:37.359Z' + wasSuccessful: true + - agents: + - afdc366c-e2e0-4cdb-ae1d-94575bd2d8e0 + agentType: endpoint + command: kill-process + comment: bad process - taking up too much cpu + completedAt: '2022-08-08T09:44:50.952Z' + createdBy: elastic + id: 5bc92c86-b8e6-42dd-837f-12ad29e09caa + isCompleted: true + isExpired: false + startedAt: '2022-08-08T14:38:44.125Z' + wasSuccessful: true + - agents: + - afdc366c-e2e0-4cdb-ae1d-94575bd2d8e0 + agentType: endpoint + command: unisolate + comment: Not a threat to the network + completedAt: '2022-08-08T09:40:47.398Z' + createdBy: elastic + id: 790d54e0-3aa3-4e5b-8255-3ce9d851246a + isCompleted: true + isExpired: false + startedAt: '2022-08-08T14:38:15.391Z' + wasSuccessful: true + elasticAgentIds: + - afdc366c-e2e0-4cdb-ae1d-94575bd2d8e0 + endDate: now + page: 1 + pageSize: 10 + startDate: now-24h/h + total: 4 + type: object + properties: {} + GetEndpointActionResponse: + example: + data: + agents: + - afdc366c-e2e0-4cdb-ae1d-94575bd2d8e0 + agentType: endpoint + command: running-processes + completedAt: '2022-08-08T09:50:47.672Z' + createdBy: elastic + id: b3d6de74-36b0-4fa8-be46-c375bf1771bf + isCompleted: true + isExpired: false + outputs: + afdc366c-e2e0-4cdb-ae1d-94575bd2d8e0: + content: + entries: + - command: /opt/cmd1 + entity_id: fk2ym7bl3oiu3okjcik0xosc0i0m75x3eh49nu3uaqt4dqanjt + pid: '822' + user: Dexter + - command: /opt/cmd3/opt/cmd3/opt/cmd3/opt/cmd3 + entity_id: pwvz91m48wpj9j7ov9gtw8fp7u2rat4eu5ipte37hnhdcbi2pt + pid: '984' + user: Jada + type: json + startedAt: '2022-08-08T15:24:57.402Z' + wasSuccessful: true + type: object + properties: {} GetFileRouteRequestBody: allOf: - type: object @@ -777,7 +1010,42 @@ components: - path required: - parameters + example: + comment: Get my file + endpoint_ids: + - ed518850-681a-4d60-bb98-e22640cae2a8 + parameters: + path: /usr/my-file.txt + GetFileRouteResponse: + example: + data: + agents: + - ed518850-681a-4d60-bb98-e22640cae2a8 + agentState: + ed518850-681a-4d60-bb98-e22640cae2a8: + isCompleted: false + wasSuccessful: false + agentType: endpoint + command: get-file + createdBy: myuser + hosts: + ed518850-681a-4d60-bb98-e22640cae2a8: + name: gke-endpoint-gke-clu-endpoint-node-po-e1a3ab89-4c4r + id: 27ba1b42-7cc6-4e53-86ce-675c876092b2 + isCompleted: false + isExpired: false + outputs: {} + parameters: + path: /usr/my-file.txt + startedAt: '2023-07-28T19:00:03.911Z' + status: pending + wasSuccessful: false + type: object + properties: {} GetProcessesRouteRequestBody: + example: + endpoint_ids: + - ed518850-681a-4d60-bb98-e22640cae2a8 type: object properties: agent_type: @@ -794,6 +1062,30 @@ components: $ref: '#/components/schemas/Parameters' required: - endpoint_ids + GetProcessesRouteResponse: + example: + data: + agents: + - ed518850-681a-4d60-bb98-e22640cae2a8 + agentType: endpoint + command: running-processes + comment: '' + completedAt: '2022-07-29T19:09:44.961Z' + createdBy: myuser + errors: [] + id: 233db9ea-6733-4849-9226-5a7039c7161d + isCompleted: true + isExpired: false + outputs: + ed518850-681a-4d60-bb98-e22640cae2a8: + content: + key: value + type: json + parameters: {} + startedAt: '2022-07-29T19:08:49.126Z' + wasSuccessful: true + type: object + properties: {} HostPathScriptParameters: type: object properties: @@ -825,23 +1117,32 @@ components: - unenrolled type: string type: array - IsolateRouteRequestBody: + IsolateRouteResponse: + example: + action: 233db9ea-6733-4849-9226-5a7039c7161d + data: + agents: + - ed518850-681a-4d60-bb98-e22640cae2a8 + agentType: endpoint + command: suspend-process + comment: suspend the process + completedAt: '2022-07-29T19:09:44.961Z' + createdBy: myuser + errors: [] + id: 233db9ea-6733-4849-9226-5a7039c7161d + isCompleted: true + isExpired: false + outputs: + ed518850-681a-4d60-bb98-e22640cae2a8: + content: + key: value + type: json + parameters: + entity_id: abc123 + startedAt: '2022-07-29T19:08:49.126Z' + wasSuccessful: true type: object - properties: - agent_type: - $ref: '#/components/schemas/AgentTypes' - alert_ids: - $ref: '#/components/schemas/AlertIds' - case_ids: - $ref: '#/components/schemas/CaseIds' - comment: - $ref: '#/components/schemas/Comment' - endpoint_ids: - $ref: '#/components/schemas/EndpointIds' - parameters: - $ref: '#/components/schemas/Parameters' - required: - - endpoint_ids + properties: {} KillProcessRouteRequestBody: allOf: - type: object @@ -864,16 +1165,62 @@ components: properties: parameters: oneOf: - - $ref: '#/components/schemas/Pid' - - $ref: '#/components/schemas/EntityId' + - type: object + properties: + pid: + description: The process ID (PID) of the process to terminate. + example: 123 + minimum: 1 + type: integer + - type: object + properties: + entity_id: + description: The entity ID of the process to terminate. + example: abc123 + minLength: 1 + type: string - type: object properties: process_name: - description: Valid for SentinelOne agent type only + description: >- + The name of the process to terminate. Valid for + SentinelOne agent type only. + example: Elastic minLength: 1 type: string required: - parameters + example: + comment: terminate the process + endpoint_ids: + - ed518850-681a-4d60-bb98-e22640cae2a8 + parameters: + entity_id: abc123 + KillProcessRouteResponse: + example: + data: + agents: + - ed518850-681a-4d60-bb98-e22640cae2a8 + agentType: endpoint + command: kill-process + comment: terminate the process + completedAt: '2022-07-29T19:09:44.961Z' + createdBy: myuser + errors: [] + id: 233db9ea-6733-4849-9226-5a7039c7161d + isCompleted: true + isExpired: false + outputs: + ed518850-681a-4d60-bb98-e22640cae2a8: + content: + key: value + type: json + parameters: + entity_id: abc123 + startedAt: '2022-07-29T19:08:49.126Z' + wasSuccessful: true + type: object + properties: {} Kuery: description: A KQL string. example: 'united.endpoint.host.os.name : ''Windows''' @@ -1100,12 +1447,6 @@ components: $ref: '#/components/schemas/PendingActionDataType' - additionalProperties: true type: object - Pid: - type: object - properties: - pid: - minimum: 1 - type: integer ProtectionUpdatesNoteResponse: type: object properties: @@ -1165,11 +1506,45 @@ components: type: object properties: path: + description: The folder or file’s full path (including the file name). + example: /usr/my-file.txt type: string required: - path required: - parameters + example: + comment: Scan the file for malware + endpoint_ids: + - ed518850-681a-4d60-bb98-e22640cae2a8 + parameters: + path: /usr/my-file.txt + ScanRouteResponse: + example: + data: + agents: + - ed518850-681a-4d60-bb98-e22640cae2a8 + agentState: + ed518850-681a-4d60-bb98-e22640cae2a8: + isCompleted: false + wasSuccessful: false + agentType: endpoint + command: scan + createdBy: myuser + hosts: + ed518850-681a-4d60-bb98-e22640cae2a8: + name: gke-endpoint-gke-clu-endpoint-node-po-e1a3ab89-4c4r + id: 27ba1b42-7cc6-4e53-86ce-675c876092b2 + isCompleted: false + isExpired: false + outputs: {} + parameters: + path: /usr/my-file.txt + startedAt: '2023-07-28T19:00:03.911Z' + status: pending + wasSuccessful: false + type: object + properties: {} SortDirection: description: Determines the sort order. enum: @@ -1192,7 +1567,8 @@ components: example: enrolled_at type: string StartDate: - description: Start date + description: A start date in ISO 8601 format or Date Math format. + example: '2023-10-31T00:00:00.000Z' type: string SuccessResponse: type: object @@ -1219,10 +1595,53 @@ components: properties: parameters: oneOf: - - $ref: '#/components/schemas/Pid' - - $ref: '#/components/schemas/EntityId' + - type: object + properties: + pid: + description: The process ID (PID) of the process to suspend. + example: 123 + minimum: 1 + type: integer + - type: object + properties: + entity_id: + description: The entity ID of the process to suspend. + example: abc123 + minLength: 1 + type: string required: - parameters + example: + comment: suspend the process + endpoint_ids: + - ed518850-681a-4d60-bb98-e22640cae2a8 + parameters: + entity_id: abc123 + SuspendProcessRouteResponse: + example: + data: + agents: + - ed518850-681a-4d60-bb98-e22640cae2a8 + agentType: endpoint + command: suspend-process + comment: suspend the process + completedAt: '2022-07-29T19:09:44.961Z' + createdBy: myuser + errors: [] + id: 233db9ea-6733-4849-9226-5a7039c7161d + isCompleted: true + isExpired: false + outputs: + ed518850-681a-4d60-bb98-e22640cae2a8: + content: + key: value + type: json + parameters: + entity_id: abc123 + startedAt: '2022-07-29T19:08:49.126Z' + wasSuccessful: true + type: object + properties: {} Timeout: description: The maximum timeout value in milliseconds (optional) minimum: 1 @@ -1235,28 +1654,40 @@ components: type: string Types: description: List of types of response actions + example: + - automated + - manual items: $ref: '#/components/schemas/Type' maxLength: 2 minLength: 1 type: array - UnisolateRouteRequestBody: + UnisolateRouteResponse: + example: + action: 233db9ea-6733-4849-9226-5a7039c7161d + data: + agents: + - ed518850-681a-4d60-bb98-e22640cae2a8 + agentType: endpoint + command: suspend-process + comment: suspend the process + completedAt: '2022-07-29T19:09:44.961Z' + createdBy: myuser + errors: [] + id: 233db9ea-6733-4849-9226-5a7039c7161d + isCompleted: true + isExpired: false + outputs: + ed518850-681a-4d60-bb98-e22640cae2a8: + content: + key: value + type: json + parameters: + entity_id: abc123 + startedAt: '2022-07-29T19:08:49.126Z' + wasSuccessful: true type: object - properties: - agent_type: - $ref: '#/components/schemas/AgentTypes' - alert_ids: - $ref: '#/components/schemas/AlertIds' - case_ids: - $ref: '#/components/schemas/CaseIds' - comment: - $ref: '#/components/schemas/Comment' - endpoint_ids: - $ref: '#/components/schemas/EndpointIds' - parameters: - $ref: '#/components/schemas/Parameters' - required: - - endpoint_ids + properties: {} UploadRouteRequestBody: allOf: - type: object @@ -1278,6 +1709,8 @@ components: - type: object properties: file: + description: The binary content of the file. + example: RWxhc3RpYw== format: binary type: string parameters: @@ -1285,12 +1718,51 @@ components: properties: overwrite: default: false + description: Overwrite the file on the host if it already exists. + example: false type: boolean required: - parameters - file + example: + endpoint_ids: + - ed518850-681a-4d60-bb98-e22640cae2a8 + file: RWxhc3RpYw== + parameters: {} + UploadRouteResponse: + example: + data: + agents: + - ed518850-681a-4d60-bb98-e22640cae2a8 + agentState: + ed518850-681a-4d60-bb98-e22640cae2a8: + isCompleted: false + wasSuccessful: false + agentType: endpoint + command: upload + createdBy: elastic + hosts: + ed518850-681a-4d60-bb98-e22640cae2a8: + name: Host-5i6cuc8kdv + id: 9ff6aebc-2cb6-481e-8869-9b30036c9731 + isCompleted: false + isExpired: false + outputs: {} + parameters: + file_id: 10e4ce3d-4abb-4f93-a0cd-eaf63a489280 + file_name: fix-malware.sh + file_sha256: a0bed94220193ba4895c0aa5b4e7e293381d15765cb164ddf7be5cdd010ae42a + file_size: 69 + startedAt: '2023-07-03T15:07:22.837Z' + status: pending + wasSuccessful: false + type: object + properties: {} UserIds: - description: User IDs + description: A list of user IDs. + example: + - user-id-1 + - user-id-2 oneOf: - items: minLength: 1 @@ -1300,7 +1772,12 @@ components: - minLength: 1 type: string WithOutputs: - description: Shows detailed outputs for an action response + description: >- + A list of action IDs that should include the complete output of the + action. + example: + - action-id-1 + - action-id-2 oneOf: - items: minLength: 1 diff --git a/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/README.md b/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/README.md new file mode 100644 index 0000000000000..003f3eccc947a --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/README.md @@ -0,0 +1,19 @@ +# Security Solution - Asset Inventory + +Centralized asset inventory experience within the Elastic Security solution. A central place for users to view and manage all their assets from different environments. + +## Development + +Open the _Advanced Settings_ page via `http://localhost:5601/app/management/kibana/settings`. Then, switch on the **Enable Asset Inventory** toggle. + +Alternatively, You can add the following line to your `kibana.dev.yml`: + +```yml +uiSettings.overrides.securitySolution:enableAssetInventory: true +``` + +See also the [kibana contributing guide](https://github.com/elastic/kibana/blob/main/CONTRIBUTING.md) for instructions setting up your development environment. + +## Testing + +For general guidelines, read [Kibana Testing Guide](https://www.elastic.co/guide/en/kibana/current/development-tests.html) for more details diff --git a/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/components/asset_inventory_loading.tsx b/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/components/asset_inventory_loading.tsx new file mode 100644 index 0000000000000..496780dd70e62 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/components/asset_inventory_loading.tsx @@ -0,0 +1,25 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import React from 'react'; +import { EuiFlexGroup, EuiFlexItem, EuiLoadingLogo, EuiSpacer } from '@elastic/eui'; +import { InventoryTitle } from './inventory_title'; +import { CenteredWrapper } from './onboarding/centered_wrapper'; + +/** + * A loading state for the asset inventory page. + */ +export const AssetInventoryLoading = () => ( + + + + + + + + + +); diff --git a/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/components/empty_state_illustration_container.tsx b/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/components/empty_state_illustration_container.tsx new file mode 100644 index 0000000000000..2e723c792edc4 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/components/empty_state_illustration_container.tsx @@ -0,0 +1,28 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { css } from '@emotion/react'; +import React from 'react'; + +// width of the illustration used in the empty states +const DEFAULT_ILLUSTRATION_WIDTH = 360; + +/** + * A container component that maintains a fixed width for SVG elements, + * this prevents the EmptyState component from flickering while the SVGs are loading. + */ +export const EmptyStateIllustrationContainer: React.FC<{ children: React.ReactNode }> = ({ + children, +}) => ( +
+ {children} +
+); diff --git a/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/components/filters/filters.tsx b/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/components/filters/filters.tsx index e9c93ba31be49..ba91be8881226 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/components/filters/filters.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/components/filters/filters.tsx @@ -50,7 +50,7 @@ export interface FiltersProps { } export const Filters = ({ onFiltersChange }: FiltersProps) => { - const { dataView, dataViewIsLoading, dataViewIsRefetching } = useDataViewContext(); + const { dataView, dataViewIsLoading } = useDataViewContext(); const spaceId = useSpaceId(); const dataViewSpec = useMemo( @@ -72,7 +72,7 @@ export const Filters = ({ onFiltersChange }: FiltersProps) => { return null; } - if (dataViewIsLoading || dataViewIsRefetching) { + if (dataViewIsLoading) { return ( diff --git a/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/components/inventory_title.tsx b/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/components/inventory_title.tsx new file mode 100644 index 0000000000000..c051294abe9d3 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/components/inventory_title.tsx @@ -0,0 +1,22 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import React from 'react'; +import { EuiTitle } from '@elastic/eui'; +import { FormattedMessage } from '@kbn/i18n-react'; + +export const InventoryTitle = () => { + return ( + +

+ +

+
+ ); +}; diff --git a/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/components/onboarding/asset_inventory_onboarding.tsx b/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/components/onboarding/asset_inventory_onboarding.tsx new file mode 100644 index 0000000000000..7b795e61af505 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/components/onboarding/asset_inventory_onboarding.tsx @@ -0,0 +1,47 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import type { FC, PropsWithChildren } from 'react'; +import { GetStarted } from './get_started'; +import { AssetInventoryLoading } from '../asset_inventory_loading'; +import { useAssetInventoryStatus } from '../../hooks/use_asset_inventory_status'; + +/** + * This component serves as a wrapper to render appropriate onboarding screens + * based on the current onboarding status. If no specific onboarding status + * matches, it will render the child components. + */ +export const AssetInventoryOnboarding: FC = ({ children }) => { + const { data, isLoading } = useAssetInventoryStatus(); + + if (isLoading || !data) { + return ; + } + + const { status, privileges } = data; + + // Render different screens based on the onboarding status. + switch (status) { + case 'disabled': // The user has not yet started the onboarding process. + return ; + case 'initializing': // Todo: The onboarding process is currently initializing. + return
{'Initializing...'}
; + case 'empty': // Todo: Onboarding cannot proceed because no relevant data was found. + return
{'No data found.'}
; + case 'permission_denied': // Todo: User lacks the necessary permissions to proceed. + return ( +
+ {'Permission denied.'} +
{JSON.stringify(privileges)}
+
+ ); + default: + // If no onboarding status matches, render the child components. + return children; + } +}; diff --git a/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/components/onboarding/centered_wrapper.tsx b/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/components/onboarding/centered_wrapper.tsx new file mode 100644 index 0000000000000..66940c92efdde --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/components/onboarding/centered_wrapper.tsx @@ -0,0 +1,30 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import { EuiFlexGroup, EuiFlexItem, type CommonProps } from '@elastic/eui'; +import { css } from '@emotion/react'; +import React from 'react'; + +/** + * A wrapper that centers its children both horizontally and vertically. + */ +export const CenteredWrapper = ({ + children, + ...rest +}: { children: React.ReactNode } & CommonProps) => ( + + {children} + +); diff --git a/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/components/onboarding/get_started.test.tsx b/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/components/onboarding/get_started.test.tsx new file mode 100644 index 0000000000000..34acf914c28f1 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/components/onboarding/get_started.test.tsx @@ -0,0 +1,93 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { render, screen, waitFor } from '@testing-library/react'; +import { GetStarted } from './get_started'; +import { useEnableAssetInventory } from './hooks/use_enable_asset_inventory'; +import { TestProvider } from '../../test/test_provider'; +import { userEvent } from '@testing-library/user-event'; + +jest.mock('./hooks/use_enable_asset_inventory', () => ({ + useEnableAssetInventory: jest.fn(), +})); + +const mockGetStarted = { + isEnabling: false, + error: null, + reset: jest.fn(), + enableAssetInventory: jest.fn(), +}; + +const renderWithProvider = (children: React.ReactNode) => { + return render({children}); +}; + +describe('GetStarted Component', () => { + beforeEach(() => { + jest.resetAllMocks(); + (useEnableAssetInventory as jest.Mock).mockReturnValue(mockGetStarted); + }); + + it('renders the component', () => { + renderWithProvider(); + + expect(screen.getByText(/get started with asset inventory/i)).toBeInTheDocument(); + expect(screen.getByRole('button', { name: /enable asset inventory/i })).toBeInTheDocument(); + + expect(screen.getByText(/read documentation/i).closest('a')).toHaveAttribute( + 'href', + 'https://ela.st/asset-inventory' + ); + }); + + it('calls enableAssetInventory when enable asset inventory button is clicked', async () => { + renderWithProvider(); + + await userEvent.click(screen.getByRole('button', { name: /enable asset inventory/i })); + + expect(mockGetStarted.enableAssetInventory).toHaveBeenCalled(); + }); + + it('shows a loading spinner when enabling', () => { + (useEnableAssetInventory as jest.Mock).mockReturnValue({ + ...mockGetStarted, + isEnabling: true, + }); + + renderWithProvider(); + + expect(screen.getByRole('progressbar')).toBeInTheDocument(); + expect(screen.getByRole('button', { name: /enabling asset inventory/i })).toBeInTheDocument(); + }); + + it('displays an error message when there is an error', () => { + const errorMessage = 'Task Manager is not available'; + (useEnableAssetInventory as jest.Mock).mockReturnValue({ + ...mockGetStarted, + error: errorMessage, + }); + + renderWithProvider(); + + expect(screen.getByText(/sorry, there was an error/i)).toBeInTheDocument(); + expect(screen.getByText(errorMessage)).toBeInTheDocument(); + }); + + it('calls reset when error message is dismissed', async () => { + (useEnableAssetInventory as jest.Mock).mockReturnValue({ + ...mockGetStarted, + error: 'Task Manager is not available', + }); + + renderWithProvider(); + + await userEvent.click(screen.getByRole('button', { name: /dismiss/i })); + + await waitFor(() => expect(mockGetStarted.reset).toHaveBeenCalled()); + }); +}); diff --git a/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/components/onboarding/get_started.tsx b/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/components/onboarding/get_started.tsx new file mode 100644 index 0000000000000..c8e1dd1c98b50 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/components/onboarding/get_started.tsx @@ -0,0 +1,193 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { + EuiImage, + EuiEmptyPrompt, + EuiButton, + EuiLink, + EuiTitle, + EuiFlexGroup, + EuiFlexItem, + EuiCallOut, +} from '@elastic/eui'; +import { i18n } from '@kbn/i18n'; +import { FormattedMessage } from '@kbn/i18n-react'; +import illustration from '../../../common/images/information_light.png'; +import { InventoryTitle } from '../inventory_title'; +import { CenteredWrapper } from './centered_wrapper'; +import { HoverForExplanationTooltip } from './hover_for_explanation_tooltip'; +import { EmptyStateIllustrationContainer } from '../empty_state_illustration_container'; +import { useEnableAssetInventory } from './hooks/use_enable_asset_inventory'; + +const ASSET_INVENTORY_DOCS_URL = 'https://ela.st/asset-inventory'; +const TEST_SUBJ = 'assetInventory:onboarding:get-started'; + +export const GetStarted = () => { + const { isEnabling, error, reset, enableAssetInventory } = useEnableAssetInventory(); + + return ( + + + + + + + + } + title={ +

+ +

+ } + layout="horizontal" + color="plain" + body={ + <> +

+ + } + > + + + ), + cloud_services: ( + + } + > + + + ), + mdms: ( + + } + > + <>{'MDMs'} + + ), + databases: ( + + } + > + + + ), + }} + /> +

+ {error && ( + + } + color="danger" + iconType="error" + > +

{error}

+
+ )} + + } + actions={[ + + {isEnabling ? ( + + ) : ( + + )} + , + ]} + footer={ + <> + + + + + {' '} + + + + + } + /> +
+
+
+ ); +}; diff --git a/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/components/onboarding/hooks/use_enable_asset_inventory.test.ts b/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/components/onboarding/hooks/use_enable_asset_inventory.test.ts new file mode 100644 index 0000000000000..37d3d29687565 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/components/onboarding/hooks/use_enable_asset_inventory.test.ts @@ -0,0 +1,103 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { renderHook, waitFor } from '@testing-library/react'; +import { useEnableAssetInventory } from './use_enable_asset_inventory'; +import { createTestProviderWrapper } from '../../../test/test_provider'; + +const mockPostEnableAssetInventory = jest.fn(); +const mockRefetchStatus = jest.fn(); + +jest.mock('../../../hooks/use_asset_inventory_routes', () => ({ + useAssetInventoryRoutes: () => ({ + postEnableAssetInventory: mockPostEnableAssetInventory, + }), +})); + +jest.mock('../../../hooks/use_asset_inventory_status', () => ({ + useAssetInventoryStatus: () => ({ + refetch: mockRefetchStatus, + }), +})); + +const renderHookWithWrapper = () => + renderHook(() => useEnableAssetInventory(), { + wrapper: createTestProviderWrapper(), + }); + +describe('useEnableAssetInventory', () => { + beforeEach(() => { + jest.clearAllMocks(); + }); + + describe('Success', () => { + it('should call postEnableAssetInventory when enabling asset inventory', async () => { + const { result } = renderHookWithWrapper(); + + result.current.enableAssetInventory(); + + await waitFor(() => { + expect(mockPostEnableAssetInventory).toHaveBeenCalled(); + }); + }); + + it('should set isEnabling to true when enabling asset inventory', async () => { + const { result } = renderHookWithWrapper(); + + result.current.enableAssetInventory(); + + await waitFor(() => { + expect(result.current.isEnabling).toBe(true); + }); + }); + + it('should refetch status when asset inventory is enabled', async () => { + mockPostEnableAssetInventory.mockResolvedValue({}); + + const { result } = renderHookWithWrapper(); + + result.current.enableAssetInventory(); + + await waitFor(() => { + expect(mockRefetchStatus).toHaveBeenCalled(); + }); + }); + }); + + describe('Error', () => { + it('should handle error message when enabling asset inventory', async () => { + // suppress expected console error messages + jest.spyOn(console, 'error').mockReturnValue(); + + mockPostEnableAssetInventory.mockRejectedValue({ + body: { + message: 'Unexpected error occurred', + }, + }); + + const { result } = renderHookWithWrapper(); + + result.current.enableAssetInventory(); + + await waitFor(() => { + expect(result.current.error).toBe('Unexpected error occurred'); + }); + }); + + it('should include default error message when enabling asset inventory rejects with unexpected error message', async () => { + mockPostEnableAssetInventory.mockRejectedValue({}); + + const { result } = renderHookWithWrapper(); + + result.current.enableAssetInventory(); + + await waitFor(() => { + expect(result.current.error).toBe('Failed to enable Asset Inventory. Please try again.'); + }); + }); + }); +}); diff --git a/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/components/onboarding/hooks/use_enable_asset_inventory.ts b/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/components/onboarding/hooks/use_enable_asset_inventory.ts new file mode 100644 index 0000000000000..9ed616b4c6d6a --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/components/onboarding/hooks/use_enable_asset_inventory.ts @@ -0,0 +1,49 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { useMutation } from '@tanstack/react-query'; +import { i18n } from '@kbn/i18n'; +import type { + AssetInventoryEnableResponse, + AssetInventoryServerApiError, +} from '../../../../../common/api/asset_inventory/types'; +import { useAssetInventoryRoutes } from '../../../hooks/use_asset_inventory_routes'; +import { useAssetInventoryStatus } from '../../../hooks/use_asset_inventory_status'; + +/** + * Hook with related business logic for enabling Asset Inventory + */ +export const useEnableAssetInventory = () => { + const { postEnableAssetInventory } = useAssetInventoryRoutes(); + const { refetch: refetchStatus } = useAssetInventoryStatus(); + + const mutation = useMutation( + postEnableAssetInventory, + { + onSuccess: () => { + refetchStatus(); + }, + } + ); + + const errorMessage = + mutation.error?.body?.message || + i18n.translate('xpack.securitySolution.assetInventory.onboarding.enableAssetInventory.error', { + defaultMessage: 'Failed to enable Asset Inventory. Please try again.', + }); + + // isEnabling is true when the mutation is loading and after it has succeeded so that the UI + // can show a loading spinner while the status is being re-fetched + const isEnabling = mutation.isLoading || mutation.isSuccess; + + return { + isEnabling, + error: mutation.isError ? errorMessage : null, + reset: mutation.reset, + enableAssetInventory: () => mutation.mutate(), + }; +}; diff --git a/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/components/onboarding/hover_for_explanation_tooltip.tsx b/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/components/onboarding/hover_for_explanation_tooltip.tsx new file mode 100644 index 0000000000000..1144a5b9a0587 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/components/onboarding/hover_for_explanation_tooltip.tsx @@ -0,0 +1,32 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import React from 'react'; +import type { EuiToolTipProps } from '@elastic/eui'; +import { EuiToolTip, useEuiTheme } from '@elastic/eui'; +import { css } from '@emotion/react'; + +/** + * A component that adds a tooltip to its children and adds an underline to indicate that + * the children can be hovered for more information. + */ +export const HoverForExplanationTooltip = ({ children, ...rest }: Partial) => { + const { euiTheme } = useEuiTheme(); + + return ( + + + {children} + + + ); +}; diff --git a/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/components/top_assets_bar_chart.tsx b/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/components/top_assets_bar_chart.tsx new file mode 100644 index 0000000000000..1cad7e117079a --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/components/top_assets_bar_chart.tsx @@ -0,0 +1,85 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ +import React from 'react'; +import { EuiProgress, EuiFlexGroup, EuiLoadingChart } from '@elastic/eui'; +import { Chart, Settings, Axis, BarSeries, Position, ScaleType } from '@elastic/charts'; +import { useElasticChartsTheme } from '@kbn/charts-theme'; +import { i18n } from '@kbn/i18n'; +import type { AggregationResult } from '../hooks/use_fetch_chart_data'; + +const chartTitle = i18n.translate( + 'xpack.securitySolution.assetInventory.topAssetsBarChart.chartTitle', + { + defaultMessage: 'Top 10 Asset Types', + } +); + +const yAxisTitle = i18n.translate( + 'xpack.securitySolution.assetInventory.topAssetsBarChart.yAxisTitle', + { + defaultMessage: 'Count of Assets', + } +); + +const chartStyles = { height: '260px' }; + +export interface TopAssetsBarChartProps { + isLoading: boolean; + isFetching: boolean; + entities: AggregationResult[]; +} + +export const TopAssetsBarChart = ({ isLoading, isFetching, entities }: TopAssetsBarChartProps) => { + const baseTheme = useElasticChartsTheme(); + return ( +
+ + {isLoading ? ( + + + + ) : ( + + + + + + + )} +
+ ); +}; diff --git a/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/hooks/fetch_utils.ts b/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/hooks/fetch_utils.ts new file mode 100644 index 0000000000000..3286362305ee5 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/hooks/fetch_utils.ts @@ -0,0 +1,57 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { RuntimePrimitiveTypes } from '@kbn/data-views-plugin/common'; + +export const getRuntimeMappingsFromSort = (fields: string[], sort: string[][]) => { + return sort + .filter(([field]) => fields.includes(field)) + .reduce((acc, [field]) => { + const type: RuntimePrimitiveTypes = 'keyword'; + + return { + ...acc, + [field]: { + type, + }, + }; + }, {}); +}; + +export const getMultiFieldsSort = (sort: string[][]) => { + return sort.map(([id, direction]) => { + return { + ...getSortField({ field: id, direction }), + }; + }); +}; + +/** + * By default, ES will sort keyword fields in case-sensitive format, the + * following fields are required to have a case-insensitive sorting. + */ +const fieldsRequiredSortingByPainlessScript = ['entity.name']; // TODO TBD + +/** + * Generates Painless sorting if the given field is matched or returns default sorting + * This painless script will sort the field in case-insensitive manner + */ +const getSortField = ({ field, direction }: { field: string; direction: string }) => { + if (fieldsRequiredSortingByPainlessScript.includes(field)) { + return { + _script: { + type: 'string', + order: direction, + script: { + source: `doc["${field}"].value.toLowerCase()`, + lang: 'painless', + }, + }, + }; + } + return { [field]: direction }; +}; diff --git a/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/hooks/use_asset_inventory_routes.test.ts b/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/hooks/use_asset_inventory_routes.test.ts new file mode 100644 index 0000000000000..13e68fffa450f --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/hooks/use_asset_inventory_routes.test.ts @@ -0,0 +1,55 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { renderHook } from '@testing-library/react'; +import { useAssetInventoryRoutes } from './use_asset_inventory_routes'; +import { useKibana } from '../../common/lib/kibana'; +import { API_VERSIONS } from '../../../common/constants'; + +jest.mock('../../common/lib/kibana'); + +describe('useAssetInventoryRoutes', () => { + const mockFetch = jest.fn(); + + beforeEach(() => { + jest.clearAllMocks(); + (useKibana as jest.Mock).mockReturnValue({ + services: { + http: { fetch: mockFetch }, + }, + }); + }); + + it('calls the correct endpoint and options for `postEnableAssetInventory`', async () => { + mockFetch.mockResolvedValue({ success: true }); + + const { result } = renderHook(useAssetInventoryRoutes); + await result.current.postEnableAssetInventory(); + + expect(mockFetch).toHaveBeenCalledTimes(1); + expect(mockFetch).toHaveBeenCalledWith('/api/asset_inventory/enable', { + method: 'POST', + version: API_VERSIONS.public.v1, + body: JSON.stringify({}), + }); + }); + + it('calls the correct endpoint and options for `getAssetInventoryStatus`', async () => { + mockFetch.mockResolvedValue({ status: 'enabled' }); + + const { result } = renderHook(useAssetInventoryRoutes); + const response = await result.current.getAssetInventoryStatus(); + + expect(mockFetch).toHaveBeenCalledTimes(1); + expect(mockFetch).toHaveBeenCalledWith('/api/asset_inventory/status', { + method: 'GET', + version: API_VERSIONS.public.v1, + query: {}, + }); + expect(response).toEqual({ status: 'enabled' }); + }); +}); diff --git a/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/hooks/use_asset_inventory_routes.ts b/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/hooks/use_asset_inventory_routes.ts new file mode 100644 index 0000000000000..d4195d4bf36da --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/hooks/use_asset_inventory_routes.ts @@ -0,0 +1,45 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { useMemo } from 'react'; +import { + ASSET_INVENTORY_ENABLE_API_PATH, + ASSET_INVENTORY_STATUS_API_PATH, +} from '../../../common/api/asset_inventory/constants'; +import type { + AssetInventoryEnableResponse, + AssetInventoryStatusResponse, +} from '../../../common/api/asset_inventory/types'; +import { API_VERSIONS } from '../../../common/constants'; +import { useKibana } from '../../common/lib/kibana'; + +export const useAssetInventoryRoutes = () => { + const http = useKibana().services.http; + + return useMemo(() => { + const postEnableAssetInventory = async () => { + return http.fetch(ASSET_INVENTORY_ENABLE_API_PATH, { + method: 'POST', + version: API_VERSIONS.public.v1, + body: JSON.stringify({}), + }); + }; + + const getAssetInventoryStatus = async () => { + return http.fetch(ASSET_INVENTORY_STATUS_API_PATH, { + method: 'GET', + version: API_VERSIONS.public.v1, + query: {}, + }); + }; + + return { + getAssetInventoryStatus, + postEnableAssetInventory, + }; + }, [http]); +}; diff --git a/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/hooks/use_asset_inventory_status.ts b/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/hooks/use_asset_inventory_status.ts new file mode 100644 index 0000000000000..117f475c520b0 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/hooks/use_asset_inventory_status.ts @@ -0,0 +1,28 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { useQuery } from '@tanstack/react-query'; +import type { AssetInventoryStatusResponse } from '../../../common/api/asset_inventory/types'; +import { useAssetInventoryRoutes } from './use_asset_inventory_routes'; + +const ASSET_INVENTORY_STATUS_KEY = ['GET', 'ASSET_INVENTORY_STATUS']; + +export const useAssetInventoryStatus = () => { + const { getAssetInventoryStatus } = useAssetInventoryRoutes(); + + return useQuery({ + queryKey: ASSET_INVENTORY_STATUS_KEY, + queryFn: () => getAssetInventoryStatus(), + refetchInterval: (data) => { + if (data?.status === 'ready') { + return false; + } + return 3000; + }, + refetchOnMount: true, + }); +}; diff --git a/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/hooks/use_fetch_chart_data.ts b/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/hooks/use_fetch_chart_data.ts new file mode 100644 index 0000000000000..aac245973bb78 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/hooks/use_fetch_chart_data.ts @@ -0,0 +1,184 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { useQuery } from '@tanstack/react-query'; +import { lastValueFrom } from 'rxjs'; +import { i18n } from '@kbn/i18n'; +import type * as estypes from '@elastic/elasticsearch/lib/api/types'; +import { showErrorToast } from '@kbn/cloud-security-posture'; +import type { IKibanaSearchResponse, IKibanaSearchRequest } from '@kbn/search-types'; +import type { BaseEsQuery } from '@kbn/cloud-security-posture'; +import { useKibana } from '../../common/lib/kibana'; +import { ASSET_INVENTORY_INDEX_PATTERN } from '../constants'; +import { getMultiFieldsSort } from './fetch_utils'; + +interface UseTopAssetsOptions extends BaseEsQuery { + sort: string[][]; + enabled: boolean; +} + +const getTopAssetsQuery = ({ query, sort }: UseTopAssetsOptions) => ({ + size: 0, + index: ASSET_INVENTORY_INDEX_PATTERN, + aggs: { + entityCategory: { + terms: { + field: 'entity.category', + order: { + entityId: 'desc', + }, + size: 10, + }, + aggs: { + entityType: { + terms: { + field: 'entity.type', + order: { + entityId: 'desc', + }, + size: 10, + }, + aggs: { + entityId: { + value_count: { + field: 'entity.id', + }, + }, + }, + }, + entityId: { + value_count: { + field: 'entity.id', + }, + }, + }, + }, + }, + query: { + ...query, + bool: { + ...query?.bool, + filter: [...(query?.bool?.filter ?? [])], + should: [...(query?.bool?.should ?? [])], + must: [...(query?.bool?.must ?? [])], + must_not: [...(query?.bool?.must_not ?? [])], + }, + }, + sort: getMultiFieldsSort(sort), + ignore_unavailable: true, +}); + +export interface AggregationResult { + category: string; + source: string; + count: number; +} + +interface TypeBucket { + key: string; + doc_count: number; + entityId: { + value: number; + }; +} + +interface CategoryBucket { + key: string; + doc_count: number; + entityId: { + value: number; + }; + entityType: { + buckets: TypeBucket[]; + doc_count_error_upper_bound: number; + sum_other_doc_count: number; + }; + doc_count_error_upper_bound: number; + sum_other_doc_count: number; +} + +interface AssetAggs { + entityCategory: { + buckets: CategoryBucket[]; + }; +} + +const tooltipOtherLabel = i18n.translate( + 'xpack.securitySolution.assetInventory.chart.tooltip.otherLabel', + { + defaultMessage: 'Other', + } +); + +// Example output: +// +// [ +// { category: 'cloud-compute', source: 'gcp-compute', count: 500, }, +// { category: 'cloud-compute', source: 'aws-security', count: 300, }, +// { category: 'cloud-storage', source: 'gcp-compute', count: 221, }, +// { category: 'cloud-storage', source: 'aws-security', count: 117, }, +// ]; +function transformAggregation(agg: AssetAggs) { + const result: AggregationResult[] = []; + + for (const categoryBucket of agg.entityCategory.buckets) { + const typeBucket = categoryBucket.entityType; + + for (const sourceBucket of typeBucket.buckets) { + result.push({ + category: categoryBucket.key, + source: sourceBucket.key, + count: sourceBucket.doc_count, + }); + } + + if (typeBucket.sum_other_doc_count > 0) { + result.push({ + category: categoryBucket.key, + source: `${categoryBucket.key} - ${tooltipOtherLabel}`, + count: typeBucket.sum_other_doc_count, + }); + } + } + + return result; +} + +type TopAssetsRequest = IKibanaSearchRequest; +type TopAssetsResponse = IKibanaSearchResponse< + estypes.SearchResponse +>; + +export function useFetchChartData(options: UseTopAssetsOptions) { + const { + data, + notifications: { toasts }, + } = useKibana().services; + return useQuery( + ['asset_inventory_top_assets_chart', { params: options }], + async () => { + const { + rawResponse: { aggregations }, + } = await lastValueFrom( + data.search.search({ + params: getTopAssetsQuery(options) as TopAssetsRequest['params'], + }) + ); + + if (!aggregations) { + throw new Error('expected aggregations to be defined'); + } + + return transformAggregation(aggregations); + }, + { + enabled: options.enabled, + keepPreviousData: true, + onError: (err: Error) => showErrorToast(toasts, err), + } + ); +} diff --git a/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/hooks/use_fetch_data.ts b/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/hooks/use_fetch_data.ts index b744b2cf4973e..13f495ebe411d 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/hooks/use_fetch_data.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/hooks/use_fetch_data.ts @@ -11,14 +11,14 @@ import { number } from 'io-ts'; import type * as estypes from '@elastic/elasticsearch/lib/api/types'; import { buildDataTableRecord } from '@kbn/discover-utils'; import type { EsHitRecord } from '@kbn/discover-utils/types'; -import type { RuntimePrimitiveTypes } from '@kbn/data-views-plugin/common'; import { showErrorToast } from '@kbn/cloud-security-posture'; import type { IKibanaSearchResponse, IKibanaSearchRequest } from '@kbn/search-types'; -import type { FindingsBaseEsQuery } from '@kbn/cloud-security-posture'; +import type { BaseEsQuery } from '@kbn/cloud-security-posture'; import { useKibana } from '../../common/lib/kibana'; import { MAX_ASSETS_TO_LOAD, ASSET_INVENTORY_INDEX_PATTERN } from '../constants'; +import { getRuntimeMappingsFromSort, getMultiFieldsSort } from './fetch_utils'; -interface UseAssetsOptions extends FindingsBaseEsQuery { +interface UseAssetsOptions extends BaseEsQuery { sort: string[][]; enabled: boolean; pageSize: number; @@ -26,60 +26,14 @@ interface UseAssetsOptions extends FindingsBaseEsQuery { const ASSET_INVENTORY_TABLE_RUNTIME_MAPPING_FIELDS: string[] = ['entity.id', 'entity.name']; -const getRuntimeMappingsFromSort = (sort: string[][]) => { - return sort - .filter(([field]) => ASSET_INVENTORY_TABLE_RUNTIME_MAPPING_FIELDS.includes(field)) - .reduce((acc, [field]) => { - const type: RuntimePrimitiveTypes = 'keyword'; - - return { - ...acc, - [field]: { - type, - }, - }; - }, {}); -}; - -const getMultiFieldsSort = (sort: string[][]) => { - return sort.map(([id, direction]) => { - return { - ...getSortField({ field: id, direction }), - }; - }); -}; - -/** - * By default, ES will sort keyword fields in case-sensitive format, the - * following fields are required to have a case-insensitive sorting. - */ -const fieldsRequiredSortingByPainlessScript = ['entity.name']; // TODO TBD - -/** - * Generates Painless sorting if the given field is matched or returns default sorting - * This painless script will sort the field in case-insensitive manner - */ -const getSortField = ({ field, direction }: { field: string; direction: string }) => { - if (fieldsRequiredSortingByPainlessScript.includes(field)) { - return { - _script: { - type: 'string', - order: direction, - script: { - source: `doc["${field}"].value.toLowerCase()`, - lang: 'painless', - }, - }, - }; - } - return { [field]: direction }; -}; - const getAssetsQuery = ({ query, sort }: UseAssetsOptions, pageParam: unknown) => { return { index: ASSET_INVENTORY_INDEX_PATTERN, sort: getMultiFieldsSort(sort), - runtime_mappings: getRuntimeMappingsFromSort(sort), + runtime_mappings: getRuntimeMappingsFromSort( + ASSET_INVENTORY_TABLE_RUNTIME_MAPPING_FIELDS, + sort + ), size: MAX_ASSETS_TO_LOAD, ignore_unavailable: true, query: { diff --git a/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/links.ts b/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/links.ts index 46a8a0863fcbc..9e79c8345420c 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/links.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/links.ts @@ -12,6 +12,7 @@ import { ASSET_INVENTORY_PATH, SecurityPageName, SECURITY_FEATURE_ID, + ENABLE_ASSET_INVENTORY_SETTING, } from '../../common/constants'; import type { LinkItem } from '../common/links/types'; @@ -23,7 +24,7 @@ export const links: LinkItem = { defaultMessage: 'Inventory', }), ], - experimentalKey: 'assetInventoryUXEnabled', + uiSettingRequired: ENABLE_ASSET_INVENTORY_SETTING, id: SecurityPageName.assetInventory, path: ASSET_INVENTORY_PATH, title: INVENTORY, diff --git a/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/pages/all_assets.tsx b/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/pages/all_assets.tsx index 7d29e83a2d83f..4aaa213961efe 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/pages/all_assets.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/pages/all_assets.tsx @@ -51,6 +51,7 @@ import { AssetInventorySearchBar } from '../components/search_bar'; import { RiskBadge } from '../components/risk_badge'; import { Filters } from '../components/filters/filters'; import { EmptyState } from '../components/empty_state'; +import { TopAssetsBarChart } from '../components/top_assets_bar_chart'; import { useDataViewContext } from '../hooks/data_view_context'; import { useStyles } from '../hooks/use_styles'; @@ -60,6 +61,7 @@ import { type URLQuery, } from '../hooks/use_asset_inventory_data_table'; import { useFetchData } from '../hooks/use_fetch_data'; +import { useFetchChartData } from '../hooks/use_fetch_chart_data'; import { DEFAULT_VISIBLE_ROWS_PER_PAGE, MAX_ASSETS_TO_LOAD } from '../constants'; const gridStyle: EuiDataGridStyle = { @@ -152,7 +154,7 @@ const getEntity = (row: DataTableRecord): EntityEcs => { const ASSET_INVENTORY_TABLE_ID = 'asset-inventory-table'; -const AllAssets = ({ +export const AllAssets = ({ nonPersistedFilters, height, hasDistributionBar = true, @@ -218,6 +220,17 @@ const AllAssets = ({ pageSize: DEFAULT_VISIBLE_ROWS_PER_PAGE, }); + const { + data: chartData, + // error: fetchChartDataError, + isFetching: isFetchingChartData, + isLoading: isLoadingChartData, + } = useFetchChartData({ + query, + sort, + enabled: !queryError, + }); + const rows = getRowsFromPages(rowsData?.pages); const totalHits = rowsData?.pages[0].total || 0; @@ -253,7 +266,7 @@ const AllAssets = ({ }; }, [persistedSettings]); - const { dataView, dataViewIsLoading, dataViewIsRefetching } = useDataViewContext(); + const { dataView } = useDataViewContext(); const { uiActions, @@ -398,14 +411,7 @@ const AllAssets = ({ }, ]; - const loadingStyle = { - opacity: isLoading ? 1 : 0, - }; - - const loadingState = - isLoading || isFetching || dataViewIsLoading || dataViewIsRefetching || !dataView - ? DataLoadingState.loading - : DataLoadingState.loaded; + const loadingState = isLoading || !dataView ? DataLoadingState.loading : DataLoadingState.loaded; return ( @@ -447,6 +453,13 @@ const AllAssets = ({ setUrlQuery({ filters: newFilters }); }} /> + {dataView ? ( + 0 ? chartData : []} + /> + ) : null}
- + {!dataView ? null : loadingState === DataLoadingState.loaded && totalHits === 0 ? ( ) : ( @@ -501,6 +514,3 @@ const AllAssets = ({ ); }; - -// we need to use default exports to import it via React.lazy -export default AllAssets; // eslint-disable-line import/no-default-export diff --git a/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/pages/index.tsx b/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/pages/index.tsx new file mode 100644 index 0000000000000..14f6af8d224d4 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/pages/index.tsx @@ -0,0 +1,23 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { AssetInventoryOnboarding } from '../components/onboarding/asset_inventory_onboarding'; +import { AllAssets } from './all_assets'; + +const AssetInventoryPage = () => { + return ( + + + + ); +}; + +AssetInventoryPage.displayName = 'AssetInventoryPage'; + +// eslint-disable-next-line import/no-default-export +export default AssetInventoryPage; diff --git a/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/routes.tsx b/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/routes.tsx index dad069d2760c1..015df67b11a2c 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/routes.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/routes.tsx @@ -6,7 +6,6 @@ */ import React, { lazy, Suspense } from 'react'; -import { EuiLoadingSpinner } from '@elastic/eui'; import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import type { SecuritySubPluginRoutes } from '../app/types'; import { SecurityPageName } from '../app/types'; @@ -16,9 +15,10 @@ import { PluginTemplateWrapper } from '../common/components/plugin_template_wrap import { SecurityRoutePageWrapper } from '../common/components/security_route_page_wrapper'; import { DataViewContext } from './hooks/data_view_context'; import { useDataView } from './hooks/use_asset_inventory_data_table/use_data_view'; +import { AssetInventoryLoading } from './components/asset_inventory_loading'; import { ASSET_INVENTORY_INDEX_PATTERN } from './constants'; -const AllAssetsLazy = lazy(() => import('./pages/all_assets')); +const AssetsPageLazy = lazy(() => import('./pages')); // Initializing react-query const queryClient = new QueryClient({ @@ -47,8 +47,8 @@ export const AssetInventoryRoutes = () => { - }> - + }> + diff --git a/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/test/test_provider.tsx b/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/test/test_provider.tsx new file mode 100755 index 0000000000000..178ebdd74e027 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/asset_inventory/test/test_provider.tsx @@ -0,0 +1,32 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { I18nProvider } from '@kbn/i18n-react'; +import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; +interface TestProviderProps { + children: React.ReactNode; +} + +/** + * A provider that wraps the necessary context for testing components. + */ +export const TestProvider: React.FC> = ({ children } = {}) => { + const queryClient = new QueryClient(); + + return ( + + {children} + + ); +}; + +export const createTestProviderWrapper = () => { + return function Wrapper({ children }: { children: React.ReactNode }) { + return {children}; + }; +}; diff --git a/x-pack/solutions/security/plugins/security_solution/public/assistant/get_comments/custom_codeblock/custom_code_block.tsx b/x-pack/solutions/security/plugins/security_solution/public/assistant/get_comments/custom_codeblock/custom_code_block.tsx index 90e406f500ba8..0731d06a5dd26 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/assistant/get_comments/custom_codeblock/custom_code_block.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/assistant/get_comments/custom_codeblock/custom_code_block.tsx @@ -8,7 +8,7 @@ import { EuiCodeBlock, EuiFlexGroup, EuiFlexItem, EuiPanel, useEuiTheme } from ' import { css } from '@emotion/css'; import React from 'react'; -export const CustomCodeBlock = ({ value }: { value: string }) => { +export const CustomCodeBlock = ({ value, lang }: { value: string; lang: string }) => { const theme = useEuiTheme(); return ( @@ -31,7 +31,7 @@ export const CustomCodeBlock = ({ value }: { value: string }) => { > - + {value} diff --git a/x-pack/solutions/security/plugins/security_solution/public/assistant/get_comments/stream/message_text.tsx b/x-pack/solutions/security/plugins/security_solution/public/assistant/get_comments/stream/message_text.tsx index de7697f1bad8a..4095fc462ee01 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/assistant/get_comments/stream/message_text.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/assistant/get_comments/stream/message_text.tsx @@ -132,7 +132,7 @@ const getPluginDependencies = ({ customCodeBlock: (props) => { return ( <> - + ); diff --git a/x-pack/solutions/security/plugins/security_solution/public/assistant/get_comments/stream/stream_observable.ts b/x-pack/solutions/security/plugins/security_solution/public/assistant/get_comments/stream/stream_observable.ts index 4eeaefdc1c7f5..88eed7904a788 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/assistant/get_comments/stream/stream_observable.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/assistant/get_comments/stream/stream_observable.ts @@ -9,7 +9,7 @@ import { concatMap, delay, finalize, Observable, of, scan, timestamp } from 'rxj import type { Dispatch, SetStateAction } from 'react'; import type { PromptObservableState } from './types'; import { API_ERROR } from '../translations'; -const MIN_DELAY = 35; +const MIN_DELAY = 10; interface StreamObservable { isError: boolean; diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/components/centered_loading_spinner/centered_loading_spinner.tsx b/x-pack/solutions/security/plugins/security_solution/public/common/components/centered_loading_spinner/centered_loading_spinner.tsx index 9e12d785bf32a..948a351419e3f 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/common/components/centered_loading_spinner/centered_loading_spinner.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/common/components/centered_loading_spinner/centered_loading_spinner.tsx @@ -24,7 +24,13 @@ export const CenteredLoadingSpinner = React.memo( [topOffset, euiTheme] ); - return ; + return ( + + ); } ); CenteredLoadingSpinner.displayName = 'CenteredLoadingSpinner'; diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/images/information_light.png b/x-pack/solutions/security/plugins/security_solution/public/common/images/information_light.png new file mode 100644 index 0000000000000..435ee1129ab1c Binary files /dev/null and b/x-pack/solutions/security/plugins/security_solution/public/common/images/information_light.png differ diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/lib/kibana/kibana_react.mock.ts b/x-pack/solutions/security/plugins/security_solution/public/common/lib/kibana/kibana_react.mock.ts index 89df2a0510d25..45ff50bf530e3 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/common/lib/kibana/kibana_react.mock.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/common/lib/kibana/kibana_react.mock.ts @@ -58,6 +58,7 @@ import { UpsellingService } from '@kbn/security-solution-upselling/service'; import { calculateBounds } from '@kbn/data-plugin/common'; import { alertingPluginMock } from '@kbn/alerting-plugin/public/mocks'; import { createTelemetryServiceMock } from '../telemetry/telemetry_service.mock'; +import { createSiemMigrationsMock } from '../../mock/mock_siem_migrations_service'; const mockUiSettings: Record = { [DEFAULT_TIME_RANGE]: { from: 'now-15m', to: 'now', mode: 'quick' }, @@ -128,6 +129,7 @@ export const createStartServicesMock = ( const mockSetHeaderActionMenu = jest.fn(); const timelineDataService = dataPluginMock.createStartContract(); const alerting = alertingPluginMock.createStartContract(); + const siemMigrations = createSiemMigrationsMock(); /* * Below mocks are needed by unified field list @@ -258,6 +260,7 @@ export const createStartServicesMock = ( upselling: new UpsellingService(), timelineDataService, alerting, + siemMigrations, } as unknown as StartServices; }; diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/lib/telemetry/events/manual_rule_run/index.ts b/x-pack/solutions/security/plugins/security_solution/public/common/lib/telemetry/events/manual_rule_run/index.ts index 3bc616dca1cf0..92499b45fc986 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/common/lib/telemetry/events/manual_rule_run/index.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/common/lib/telemetry/events/manual_rule_run/index.ts @@ -78,8 +78,64 @@ export const manualRuleRunCancelJobEvent: ManualRuleRunTelemetryEvent = { }, }; +export const fillGapEvent: ManualRuleRunTelemetryEvent = { + eventType: ManualRuleRunEventTypes.FillGap, + schema: { + rangeInMs: { + type: 'integer', + _meta: { + description: 'The time range (expressed in milliseconds) of the gap', + optional: false, + }, + }, + }, +}; + +export const fillRemainingGapEvent: ManualRuleRunTelemetryEvent = { + eventType: ManualRuleRunEventTypes.FillRemainingGap, + schema: { + rangeInMs: { + type: 'integer', + _meta: { + description: 'The time range (expressed in milliseconds) of the gap', + optional: false, + }, + }, + }, +}; + +export const filterGapsEvent: ManualRuleRunTelemetryEvent = { + eventType: ManualRuleRunEventTypes.FilterGaps, + schema: { + status: { + type: 'keyword', + _meta: { + description: 'The statuses of the gaps for filtering, separated by commas', + optional: false, + }, + }, + }, +}; + +export const showOnlyRulesWithGapsEvent: ManualRuleRunTelemetryEvent = { + eventType: ManualRuleRunEventTypes.ShowOnlyRulesWithGaps, + schema: { + dateRange: { + type: 'keyword', + _meta: { + description: 'The date range of the gaps to show all rules with gaps', + optional: false, + }, + }, + }, +}; + export const manualRuleRunTelemetryEvents = [ manualRuleRunCancelJobEvent, manualRuleRunExecuteEvent, manualRuleRunOpenModalEvent, + fillGapEvent, + fillRemainingGapEvent, + filterGapsEvent, + showOnlyRulesWithGapsEvent, ]; diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/lib/telemetry/events/manual_rule_run/types.ts b/x-pack/solutions/security/plugins/security_solution/public/common/lib/telemetry/events/manual_rule_run/types.ts index 231b555408e56..0a4b8e782009a 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/common/lib/telemetry/events/manual_rule_run/types.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/common/lib/telemetry/events/manual_rule_run/types.ts @@ -10,6 +10,10 @@ export enum ManualRuleRunEventTypes { ManualRuleRunOpenModal = 'Manual Rule Run Open Modal', ManualRuleRunExecute = 'Manual Rule Run Execute', ManualRuleRunCancelJob = 'Manual Rule Run Cancel Job', + FillGap = 'Fill Gap', + FillRemainingGap = 'Fill Remaining Gap', + FilterGaps = 'Filter Gaps', + ShowOnlyRulesWithGaps = 'Show Only Rules With Gaps', } interface ReportManualRuleRunOpenModalParams { type: 'single' | 'bulk'; @@ -27,10 +31,30 @@ interface ReportManualRuleRunCancelJobParams { errorTasks: number; } +interface ReportFillGapParams { + rangeInMs: number; +} + +interface ReportFillRemainingGapParams { + rangeInMs: number; +} + +interface ReportFilterGapsParams { + status: string; +} + +interface ReportShowOnlyRulesWithGapsParams { + dateRange: string; +} + export interface ManualRuleRunTelemetryEventsMap { [ManualRuleRunEventTypes.ManualRuleRunOpenModal]: ReportManualRuleRunOpenModalParams; [ManualRuleRunEventTypes.ManualRuleRunExecute]: ReportManualRuleRunExecuteParams; [ManualRuleRunEventTypes.ManualRuleRunCancelJob]: ReportManualRuleRunCancelJobParams; + [ManualRuleRunEventTypes.FillGap]: ReportFillGapParams; + [ManualRuleRunEventTypes.FillRemainingGap]: ReportFillRemainingGapParams; + [ManualRuleRunEventTypes.FilterGaps]: ReportFilterGapsParams; + [ManualRuleRunEventTypes.ShowOnlyRulesWithGaps]: ReportShowOnlyRulesWithGapsParams; } export interface ManualRuleRunTelemetryEvent { diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/mock/index.ts b/x-pack/solutions/security/plugins/security_solution/public/common/mock/index.ts index 3be928b9dcc1f..30b64c532f3a6 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/common/mock/index.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/common/mock/index.ts @@ -20,3 +20,4 @@ export * from './timeline_results'; export * from './utils'; export * from './create_store'; export * from './create_react_query_wrapper'; +export * from './mock_siem_migrations_service'; diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/mock/mock_siem_migrations_service.ts b/x-pack/solutions/security/plugins/security_solution/public/common/mock/mock_siem_migrations_service.ts new file mode 100644 index 0000000000000..7e0e563a44a5a --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/common/mock/mock_siem_migrations_service.ts @@ -0,0 +1,38 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { createTelemetryServiceMock } from '../lib/telemetry/telemetry_service.mock'; + +const createRuleMigrationStorageMock = () => { + return { + get: jest.fn(), + set: jest.fn(), + remove: jest.fn(), + }; +}; + +export const createSiemMigrationsMock = () => { + return { + rules: { + getLatestStats$: jest.fn(), + getMissingCapabilities: jest.fn(), + hasMissingCapabilities: jest.fn(), + isAvailable: jest.fn(), + startPolling: jest.fn(), + createRuleMigration: jest.fn(), + upsertMigrationResources: jest.fn(), + startRuleMigration: jest.fn(), + getRuleMigrationStats: jest.fn(), + getRuleMigrationsStats: jest.fn(), + getMissingResources: jest.fn(), + getIntegrations: jest.fn(), + connectorIdStorage: createRuleMigrationStorageMock(), + traceOptionsStorage: createRuleMigrationStorageMock(), + telemetry: createTelemetryServiceMock(), + }, + }; +}; diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_gaps/components/rule_gaps/fill_gap.tsx b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_gaps/components/rule_gaps/fill_gap.tsx index 23fcab2f20efd..4df50c6d3416b 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_gaps/components/rule_gaps/fill_gap.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_gaps/components/rule_gaps/fill_gap.tsx @@ -11,7 +11,8 @@ import { useAppToasts } from '../../../../common/hooks/use_app_toasts'; import { useFillGapMutation } from '../../api/hooks/use_fill_gap'; import * as i18n from './translations'; import type { Gap } from '../../types'; - +import { ManualRuleRunEventTypes } from '../../../../common/lib/telemetry'; +import { useKibana } from '../../../../common/lib/kibana'; export const FillGap = ({ isRuleEnabled, ruleId, @@ -22,8 +23,21 @@ export const FillGap = ({ gap: Gap; }) => { const { addSuccess, addError } = useAppToasts(); + const { telemetry } = useKibana().services; + const isGapFillAvailable = gap.status !== gapStatus.FILLED && gap.unfilled_intervals.length !== 0; + + const hasRemainingGaps = + isGapFillAvailable && (gap.in_progress_intervals.length > 0 || gap.filled_intervals.length > 0); const fillGapMutation = useFillGapMutation({ onSuccess: () => { + telemetry.reportEvent( + hasRemainingGaps + ? ManualRuleRunEventTypes.FillRemainingGap + : ManualRuleRunEventTypes.FillGap, + { + rangeInMs: gap.total_gap_duration_ms, + } + ); addSuccess(i18n.GAP_FILL_REQUEST_SUCCESS_MESSAGE, { toastMessage: i18n.GAP_FILL_REQUEST_SUCCESS_MESSAGE_TOOLTIP, }); @@ -36,14 +50,13 @@ export const FillGap = ({ }, }); - if (gap.status === gapStatus.FILLED || gap.unfilled_intervals.length === 0) { + if (!isGapFillAvailable) { return null; } - const title = - gap.in_progress_intervals.length > 0 || gap.filled_intervals.length > 0 - ? i18n.GAPS_TABLE_FILL_REMAINING_GAP_BUTTON_LABEL - : i18n.GAPS_TABLE_FILL_GAP_BUTTON_LABEL; + const title = hasRemainingGaps + ? i18n.GAPS_TABLE_FILL_REMAINING_GAP_BUTTON_LABEL + : i18n.GAPS_TABLE_FILL_GAP_BUTTON_LABEL; return ( <> diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_gaps/components/rule_gaps/status_filter.tsx b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_gaps/components/rule_gaps/status_filter.tsx index 439519c0db798..1e928c2e14a7a 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_gaps/components/rule_gaps/status_filter.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_gaps/components/rule_gaps/status_filter.tsx @@ -12,7 +12,8 @@ import { MultiselectFilter } from '../../../../common/components/multiselect_fil import * as i18n from './translations'; import type { GapStatus } from '../../types'; import { getStatusLabel } from './utils'; - +import { ManualRuleRunEventTypes } from '../../../../common/lib/telemetry'; +import { useKibana } from '../../../../common/lib/kibana'; interface GapStatusFilterComponent { selectedItems: GapStatus[]; onChange: (selectedItems: GapStatus[]) => void; @@ -25,11 +26,16 @@ export const GapStatusFilter = ({ selectedItems, onChange }: GapStatusFilterComp return getStatusLabel(status); }, []); + const { telemetry } = useKibana().services; + const handleSelectionChange = useCallback( (statuses: GapStatus[]) => { + telemetry.reportEvent(ManualRuleRunEventTypes.FilterGaps, { + status: statuses?.join(','), + }); onChange(statuses); }, - [onChange] + [onChange, telemetry] ); return ( diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_gaps/components/rules_with_gaps_overview_panel/index.tsx b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_gaps/components/rules_with_gaps_overview_panel/index.tsx index fdeb8a3652592..8f14ec3d71a78 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_gaps/components/rules_with_gaps_overview_panel/index.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_gaps/components/rules_with_gaps_overview_panel/index.tsx @@ -25,6 +25,8 @@ import { useRulesTableContext } from '../../../rule_management_ui/components/rul import * as i18n from './translations'; import { useGetRuleIdsWithGaps } from '../../api/hooks/use_get_rule_ids_with_gaps'; import { defaultRangeValue, GapRangeValue } from '../../constants'; +import { ManualRuleRunEventTypes } from '../../../../common/lib/telemetry/events/manual_rule_run/types'; +import { useKibana } from '../../../../common/lib/kibana'; export const RulesWithGapsOverviewPanel = () => { const { @@ -38,6 +40,7 @@ export const RulesWithGapsOverviewPanel = () => { statuses: [gapStatus.UNFILLED, gapStatus.PARTIALLY_FILLED], }); const [isPopoverOpen, setPopover] = useState(false); + const telemetry = useKibana().services.telemetry; useEffect(() => { return () => { @@ -75,6 +78,11 @@ export const RulesWithGapsOverviewPanel = () => { ); const handleShowRulesWithGapsFilterButtonClick = () => { + if (!showRulesWithGaps) { + telemetry.reportEvent(ManualRuleRunEventTypes.ShowOnlyRulesWithGaps, { + dateRange: gapSearchRange ?? defaultRangeValue, + }); + } setFilterOptions({ showRulesWithGaps: !showRulesWithGaps, }); diff --git a/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts_table/index.tsx b/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts_table/index.tsx index 5b442a59f75c2..7338bcded1a41 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts_table/index.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/detections/components/alerts_table/index.tsx @@ -425,6 +425,25 @@ const DetectionEngineAlertsTableComponent: FC + isEventRenderedView + ? `${DEFAULT_DATA_GRID_HEIGHT}px` + : /* + * We keep fixed height in Event rendered because of the row height issue + * as mentioned here + */ + count > 20 + ? `${DEFAULT_DATA_GRID_HEIGHT}px` + : undefined, + [count, isEventRenderedView] + ); + if (isLoading) { return null; } @@ -451,10 +470,7 @@ const DetectionEngineAlertsTableComponent: FC= 20 ? `${DEFAULT_DATA_GRID_HEIGHT}px` : undefined} + height={alertTableHeight} initialPageSize={50} runtimeMappings={sourcererDataView?.runtimeFieldMap as RunTimeMappings} toolbarVisibility={toolbarVisibility} diff --git a/x-pack/solutions/security/plugins/security_solution/public/notes/links.ts b/x-pack/solutions/security/plugins/security_solution/public/notes/links.ts index 94c1233dae1f1..be76e8e429067 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/notes/links.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/notes/links.ts @@ -27,6 +27,6 @@ export const links: LinkItem = { capabilities: [[`${SECURITY_FEATURE_ID}.show`, `${NOTES_FEATURE_ID}.read`]], landingIcon: 'filebeatApp', skipUrlState: true, - hideTimeline: true, + hideTimeline: false, hideWhenExperimentalKey: 'securitySolutionNotesDisabled', }; diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/siem_migrations/ai_connector/index.ts b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/siem_migrations/ai_connector/index.ts index 9e8426df92ddc..14d50283337b5 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/siem_migrations/ai_connector/index.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/siem_migrations/ai_connector/index.ts @@ -25,5 +25,4 @@ export const aiConnectorCardConfig: OnboardingCardConfig getCardIcon(OnboardingCardId.siemMigrationsStart), - licenseTypeRequired: 'enterprise', Component: React.lazy( () => import( diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/siem_migrations/start_migration/rule_migrations_panels.tsx b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/siem_migrations/start_migration/rule_migrations_panels.tsx index 50d5ff5810e70..4c126f30a464b 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/siem_migrations/start_migration/rule_migrations_panels.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/siem_migrations/start_migration/rule_migrations_panels.tsx @@ -53,7 +53,7 @@ export const RuleMigrationsPanels = React.memo( ); return ( - + {!isConnectorsCardComplete && ( <> diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/siem_migrations/start_migration/start_migration_card.test.tsx b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/siem_migrations/start_migration/start_migration_card.test.tsx new file mode 100644 index 0000000000000..373fa5e3a1ffd --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/siem_migrations/start_migration/start_migration_card.test.tsx @@ -0,0 +1,238 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { ComponentProps } from 'react'; +import React from 'react'; +import { act, render, screen, waitFor } from '@testing-library/react'; +import * as useLatestStatsModule from '../../../../../../siem_migrations/rules/service/hooks/use_latest_stats'; +import StartMigrationCard from './start_migration_card'; +import * as useUpsellingComponentModule from '../../../../../../common/hooks/use_upselling'; +import { TestProviders } from '../../../../../../common/mock'; +import { SiemMigrationTaskStatus } from '../../../../../../../common/siem_migrations/constants'; +import type { RuleMigrationStats } from '../../../../../../siem_migrations/rules/types'; +import { OnboardingCardId } from '../../../../../constants'; +import * as useGetMigrationTranslationStatsModule from '../../../../../../siem_migrations/rules/logic/use_get_migration_translation_stats'; +import * as useGetMissingResourcesModule from '../../../../../../siem_migrations/rules/service/hooks/use_get_missing_resources'; + +const useLatestStatsSpy = jest.spyOn(useLatestStatsModule, 'useLatestStats'); + +const useUpsellingComponentMock = jest.spyOn(useUpsellingComponentModule, 'useUpsellingComponent'); + +const useGetMigrationTranslationStatsSpy = jest.spyOn( + useGetMigrationTranslationStatsModule, + 'useGetMigrationTranslationStats' +); + +const useGetMissingResourcesMock = jest.spyOn( + useGetMissingResourcesModule, + 'useGetMissingResources' +); + +const MockUpsellingComponent = () => { + return
{`Start Migrations Upselling Component`}
; +}; + +const mockedLatestStats = { + data: [], + isLoading: false, + refreshStats: jest.fn(), +}; + +const mockTranslationStats = { + isLoading: false, + data: { + id: '1', + rules: { + total: 1, + failed: 0, + success: { + result: { + full: 1, + partial: 0, + failed: 0, + }, + }, + }, + }, +} as unknown as ReturnType< + typeof useGetMigrationTranslationStatsModule.useGetMigrationTranslationStats +>; + +const mockMissingResources = { + getMissingResources: jest.fn(() => []), + isLoading: false, +} as unknown as ReturnType; + +type TestComponentProps = ComponentProps; + +const defaultProps: TestComponentProps = { + setComplete: jest.fn(), + isCardComplete: jest.fn( + (cardId: OnboardingCardId) => cardId === OnboardingCardId.siemMigrationsAiConnectors + ), + setExpandedCardId: jest.fn(), + checkComplete: jest.fn(), + isCardAvailable: () => true, + checkCompleteMetadata: { + missingCapabilities: [], + }, +}; + +const renderTestComponent = (props: Partial> = {}) => { + const finalProps: TestComponentProps = { + ...defaultProps, + ...props, + }; + + return render( + + + + ); +}; + +describe('StartMigrationsBody', () => { + beforeEach(() => { + useLatestStatsSpy.mockReturnValue(mockedLatestStats); + useUpsellingComponentMock.mockReturnValue(null); + useGetMigrationTranslationStatsSpy.mockReturnValue(mockTranslationStats); + useGetMissingResourcesMock.mockReturnValue(mockMissingResources); + }); + afterEach(() => { + jest.clearAllMocks(); + }); + + it('should render upsell correctly when available', () => { + useUpsellingComponentMock.mockReturnValue(MockUpsellingComponent); + + renderTestComponent(); + + expect(screen.getByTestId('mockUpsellSection')).toBeVisible(); + expect(screen.getByTestId('startMigrationUploadRulesButton')).toBeVisible(); + expect(screen.getByTestId('startMigrationUploadRulesButton')).toBeDisabled(); + }); + + it('should render missing Privileges Callout when there are missing capabilities but NO Upsell', () => { + renderTestComponent({ + checkCompleteMetadata: { + missingCapabilities: ['missingPrivileges'], + }, + }); + + expect(screen.getByTestId('missingPrivilegesGroup')).toBeVisible(); + }); + + it('should render component correctly when no upsell and no missing capabilities', () => { + renderTestComponent(); + + expect(screen.getByTestId('StartMigrationsCardBody')).toBeVisible(); + expect(screen.getByTestId('StartMigrationsCardBody')).not.toBeEmptyDOMElement(); + }); + + it('should mark card as complete when migration is finished', async () => { + useLatestStatsSpy.mockReturnValue({ + ...mockedLatestStats, + data: [ + { + id: '1', + status: SiemMigrationTaskStatus.FINISHED, + } as unknown as RuleMigrationStats, + ], + }); + + await act(async () => { + renderTestComponent(); + }); + + await waitFor(() => { + expect(defaultProps.setComplete).toHaveBeenCalledWith(true); + }); + }); + + it('should render loader when migration handler is loading', async () => { + const latestStatus = { + ...mockedLatestStats, + isLoading: true, + data: [ + { + id: '1', + status: SiemMigrationTaskStatus.RUNNING, + rules: { + total: 1, + pending: 1, + processing: 1, + completed: 0, + failed: 0, + }, + } as unknown as RuleMigrationStats, + ], + }; + + useLatestStatsSpy.mockReturnValue(latestStatus); + + renderTestComponent(); + + expect(screen.getByTestId('centeredLoadingSpinner')).toBeVisible(); + }); + + it('should render progress bar when migration is running', async () => { + const latestStats = { + ...mockedLatestStats, + isLoading: false, + data: [ + { + id: '1', + status: SiemMigrationTaskStatus.RUNNING, + rules: { + total: 1, + pending: 1, + processing: 1, + completed: 0, + failed: 0, + }, + } as unknown as RuleMigrationStats, + ], + }; + useLatestStatsSpy.mockReturnValue(latestStats); + + await act(async () => { + renderTestComponent(); + }); + + await waitFor(() => { + expect(screen.getByTestId('migrationProgressPanel')).toBeVisible(); + }); + }); + + it('should render result panel when migration is finished', async () => { + const latestStats = { + ...mockedLatestStats, + isLoading: false, + data: [ + { + id: '1', + status: SiemMigrationTaskStatus.FINISHED, + rules: { + total: 1, + pending: 0, + processing: 0, + completed: 1, + failed: 0, + }, + } as unknown as RuleMigrationStats, + ], + }; + + useLatestStatsSpy.mockReturnValue(latestStats); + + await act(async () => { + renderTestComponent(); + }); + + expect(screen.getByTestId('ruleMigrationPanelGroup')).toBeVisible(); + }); +}); diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/siem_migrations/start_migration/start_migration_card.tsx b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/siem_migrations/start_migration/start_migration_card.tsx index 34e7a25d9a125..10b91e57ed2c1 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/siem_migrations/start_migration/start_migration_card.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/siem_migrations/start_migration/start_migration_card.tsx @@ -6,7 +6,8 @@ */ import React, { useCallback, useEffect, useMemo } from 'react'; -import { EuiSpacer } from '@elastic/eui'; +import { EuiFlexGroup, EuiFlexItem, EuiSpacer } from '@elastic/eui'; +import { useUpsellingComponent } from '../../../../../../common/hooks/use_upselling'; import { PanelText } from '../../../../../../common/components/panel_text'; import { RuleMigrationDataInputWrapper } from '../../../../../../siem_migrations/rules/components/data_input_flyout/data_input_wrapper'; import { SiemMigrationTaskStatus } from '../../../../../../../common/siem_migrations/constants'; @@ -23,6 +24,7 @@ import { MissingPrivilegesCallOut, MissingPrivilegesDescription, } from '../../common/missing_privileges'; +import { UploadRulesSectionPanel } from './upload_rules_panel'; const StartMigrationsBody: OnboardingCardComponent = React.memo( ({ setComplete, isCardComplete, setExpandedCardId }) => { @@ -49,7 +51,11 @@ const StartMigrationsBody: OnboardingCardComponent = React.memo( return ( - + {isLoading ? ( ) : ( @@ -72,10 +78,26 @@ StartMigrationsBody.displayName = 'StartMigrationsBody'; export const StartMigrationCard: OnboardingCardComponent = React.memo( ({ checkCompleteMetadata, ...props }) => { + const UpsellSectionComp = useUpsellingComponent('siem_migrations_start'); if (!checkCompleteMetadata) { return ; } + if (UpsellSectionComp) { + return ( + + + + + + + + + + + ); + } + const { missingCapabilities } = checkCompleteMetadata; if (missingCapabilities.length > 0) { return ( diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/siem_migrations/start_migration/start_migration_check_complete.test.ts b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/siem_migrations/start_migration/start_migration_check_complete.test.ts new file mode 100644 index 0000000000000..bd30310d054ae --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/siem_migrations/start_migration/start_migration_check_complete.test.ts @@ -0,0 +1,59 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { SiemMigrationTaskStatus } from '../../../../../../../common/siem_migrations/constants'; +import { createStartServicesMock } from '../../../../../../common/lib/kibana/kibana_react.mock'; +import type { SiemMigrationsService } from '../../../../../../siem_migrations/service'; +import { checkStartMigrationCardComplete } from './start_migration_check_complete'; + +describe('startMigrationCheckComplete', () => { + test('should return default values if siem migrations are not available', async () => { + // Arrange + const siemMigrations = { + rules: { + getMissingCapabilities: jest.fn().mockReturnValue([]), + isAvailable: jest.fn().mockReturnValue(false), + }, + } as unknown as SiemMigrationsService; + + const services = { + ...createStartServicesMock(), + siemMigrations, + }; + const result = await checkStartMigrationCardComplete(services); + + expect(result).toEqual({ isComplete: false, metadata: { missingCapabilities: [] } }); + }); + + test('should query Stats if siem migrations are available', async () => { + const siemMigrations = { + rules: { + getMissingCapabilities: jest.fn().mockReturnValue([]), + isAvailable: jest.fn().mockReturnValue(true), + getRuleMigrationsStats: jest.fn().mockReturnValue([ + { + status: SiemMigrationTaskStatus.FINISHED, + }, + ]), + }, + } as unknown as SiemMigrationsService; + + const services = { + ...createStartServicesMock(), + siemMigrations, + }; + + const result = await checkStartMigrationCardComplete(services); + + expect(siemMigrations.rules.getRuleMigrationsStats).toHaveBeenCalled(); + + expect(result).toEqual({ + isComplete: true, + metadata: { missingCapabilities: [] }, + }); + }); +}); diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/siem_migrations/start_migration/start_migration_check_complete.ts b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/siem_migrations/start_migration/start_migration_check_complete.ts index 2e3a8f238ac43..ec5d100ff61fb 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/siem_migrations/start_migration/start_migration_check_complete.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/siem_migrations/start_migration/start_migration_check_complete.ts @@ -19,12 +19,11 @@ export const checkStartMigrationCardComplete: OnboardingCardCheckComplete< let isComplete = false; - if (missingCapabilities.length === 0) { + if (siemMigrations.rules.isAvailable()) { const migrationsStats = await siemMigrations.rules.getRuleMigrationsStats(); isComplete = migrationsStats.some( (migrationStats) => migrationStats.status === SiemMigrationTaskStatus.FINISHED ); } - return { isComplete, metadata: { missingCapabilities } }; }; diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/siem_migrations/start_migration/upload_rules_panel.tsx b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/siem_migrations/start_migration/upload_rules_panel.tsx index ffa425f8e7df6..f2e93c3796944 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/siem_migrations/start_migration/upload_rules_panel.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/onboarding/components/onboarding_body/cards/siem_migrations/start_migration/upload_rules_panel.tsx @@ -27,16 +27,14 @@ export interface UploadRulesPanelProps { isUploadMore?: boolean; isDisabled?: boolean; } -export const UploadRulesPanel = React.memo( - ({ isUploadMore = false, isDisabled = false }) => { - const styles = useStyles(isUploadMore); - const { telemetry } = useKibana().services.siemMigrations.rules; - const { openFlyout } = useRuleMigrationDataInputContext(); - const onOpenFlyout = useCallback(() => { - openFlyout(); - telemetry.reportSetupMigrationOpen({ isFirstMigration: !isUploadMore }); - }, [openFlyout, telemetry, isUploadMore]); +export interface UploadRulesSectionPanelProps extends UploadRulesPanelProps { + onOpenFlyout?: React.MouseEventHandler; +} + +export const UploadRulesSectionPanel = React.memo( + function UploadRulesSectionPanel({ isUploadMore = false, isDisabled = false, onOpenFlyout }) { + const styles = useStyles(isUploadMore); return ( @@ -75,6 +73,7 @@ export const UploadRulesPanel = React.memo( {isUploadMore ? ( ( ) : ( ( ); } ); + +export const UploadRulesPanel = React.memo(function UploadRulesPanel({ + isUploadMore = false, + isDisabled = false, +}: UploadRulesPanelProps) { + const { telemetry } = useKibana().services.siemMigrations.rules; + const { openFlyout } = useRuleMigrationDataInputContext(); + + const onOpenFlyout = useCallback(() => { + openFlyout(); + telemetry.reportSetupMigrationOpen({ isFirstMigration: !isUploadMore }); + }, [openFlyout, telemetry, isUploadMore]); + + return ( + + ); +}); + UploadRulesPanel.displayName = 'UploadRulesPanel'; diff --git a/x-pack/solutions/security/plugins/security_solution/public/onboarding/config.ts b/x-pack/solutions/security/plugins/security_solution/public/onboarding/config.ts index c424f28cef71b..612e7ccba2f93 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/onboarding/config.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/onboarding/config.ts @@ -6,7 +6,6 @@ */ import { i18n } from '@kbn/i18n'; -import { SIEM_MIGRATIONS_FEATURE_ID } from '@kbn/security-solution-features/constants'; import { OnboardingTopicId } from './constants'; import { defaultBodyConfig, @@ -28,8 +27,6 @@ export const onboardingConfig: TopicConfig[] = [ defaultMessage: 'SIEM Rule migration', }), body: siemMigrationsBodyConfig, - licenseTypeRequired: 'enterprise', - capabilitiesRequired: `${SIEM_MIGRATIONS_FEATURE_ID}.all`, disabledExperimentalFlagRequired: 'siemMigrationsDisabled', }, ]; diff --git a/x-pack/solutions/security/plugins/security_solution/public/siem_migrations/rules/components/migration_status_panels/migration_progress_panel.tsx b/x-pack/solutions/security/plugins/security_solution/public/siem_migrations/rules/components/migration_status_panels/migration_progress_panel.tsx index 9fca25e88f916..37b8a0fed66c0 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/siem_migrations/rules/components/migration_status_panels/migration_progress_panel.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/siem_migrations/rules/components/migration_status_panels/migration_progress_panel.tsx @@ -33,7 +33,7 @@ export const MigrationProgressPanel = React.memo( const preparing = migrationStats.rules.pending === migrationStats.rules.total; return ( - + diff --git a/x-pack/solutions/security/plugins/security_solution/public/siem_migrations/rules/service/rule_migrations_service.ts b/x-pack/solutions/security/plugins/security_solution/public/siem_migrations/rules/service/rule_migrations_service.ts index 0c86ca3a8e615..6f80eea2275b9 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/siem_migrations/rules/service/rule_migrations_service.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/siem_migrations/rules/service/rule_migrations_service.ts @@ -96,6 +96,14 @@ export class SiemRulesMigrationsService { return this.getMissingCapabilities(level).length > 0; } + /** + * checks if the service is available based on + * + * - the license + * - capabilities + * - feature flag + * + */ public isAvailable() { return ( !ExperimentalFeaturesService.get().siemMigrationsDisabled && diff --git a/x-pack/solutions/security/plugins/security_solution/public/timelines/components/timeline/body/renderers/formatted_field.test.tsx b/x-pack/solutions/security/plugins/security_solution/public/timelines/components/timeline/body/renderers/formatted_field.test.tsx index 868848acd12be..de15b3990b73e 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/timelines/components/timeline/body/renderers/formatted_field.test.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/timelines/components/timeline/body/renderers/formatted_field.test.tsx @@ -226,7 +226,7 @@ describe('Events', () => { expect(wrapper.find('[data-test-subj="truncatable-message"]').exists()).toEqual(true); }); - test('it does NOT render the truncatable message style when fieldName is NOT message', () => { + test('it does NOT render the truncatable message style when truncate is false', () => { const wrapper = mount( { contextId="test" fieldName="NOT-message" fieldType="text" + truncate={false} value={'a NON-message value'} /> diff --git a/x-pack/solutions/security/plugins/security_solution/public/timelines/components/timeline/body/renderers/formatted_field.tsx b/x-pack/solutions/security/plugins/security_solution/public/timelines/components/timeline/body/renderers/formatted_field.tsx index 95feb9b05f3f1..c9c4353429aa5 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/timelines/components/timeline/body/renderers/formatted_field.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/timelines/components/timeline/body/renderers/formatted_field.tsx @@ -22,7 +22,6 @@ import { } from '../../../../../../common/field_maps/field_names'; import { AgentStatus } from '../../../../../common/components/endpoint/agents/agent_status'; import { INDICATOR_REFERENCE } from '../../../../../../common/cti/constants'; -import { DefaultDraggable } from '../../../../../common/components/draggables'; import { Bytes, BYTES_FORMAT } from './bytes'; import { Duration, EVENT_DURATION_FIELD_NAME } from '../../../duration'; import { getOrEmptyTagFromValue } from '../../../../../common/components/empty_value'; @@ -38,7 +37,6 @@ import { EVENT_URL_FIELD_NAME, GEO_FIELD_TYPE, IP_FIELD_TYPE, - MESSAGE_FIELD_NAME, REFERENCE_URL_FIELD_NAME, RULE_REFERENCE_FIELD_NAME, SIGNAL_RULE_NAME_FIELD_NAME, @@ -51,9 +49,6 @@ import { UserName } from './user_name'; import { AssetCriticalityLevel } from './asset_criticality_level'; import { ServiceName } from './service_name'; -// simple black-list to prevent dragging and dropping fields such as message name -const columnNamesNotDraggable = [MESSAGE_FIELD_NAME]; - // Offset top-aligned tooltips so that cell actions are more visible const dataGridToolTipOffset = css` &[data-position='top'] { @@ -226,7 +221,7 @@ const FormattedFieldValueComponent: React.FC<{ title, value, }); - } else if (isUnifiedDataTable || columnNamesNotDraggable.includes(fieldName)) { + } else { return truncate && !isEmpty(value) ? ( ) : ( - {value} - ); - } else { - // This should not be reached for the unified data table - const contentValue = getOrEmptyTagFromValue(value); - const content = truncate ? {contentValue} : contentValue; - return ( - - {content} - + {getOrEmptyTagFromValue(value)} ); } }; diff --git a/x-pack/solutions/security/plugins/security_solution/server/lib/asset_inventory/asset_inventory_data_client.ts b/x-pack/solutions/security/plugins/security_solution/server/lib/asset_inventory/asset_inventory_data_client.ts index a99f50499cb7e..a325f2151699e 100644 --- a/x-pack/solutions/security/plugins/security_solution/server/lib/asset_inventory/asset_inventory_data_client.ts +++ b/x-pack/solutions/security/plugins/security_solution/server/lib/asset_inventory/asset_inventory_data_client.ts @@ -9,6 +9,7 @@ import type { Logger, IScopedClusterClient } from '@kbn/core/server'; import type { EntityAnalyticsPrivileges } from '../../../common/api/entity_analytics'; import type { GetEntityStoreStatusResponse } from '../../../common/api/entity_analytics/entity_store/status.gen'; +import type { InitEntityStoreRequestBody } from '../../../common/api/entity_analytics/entity_store/enable.gen'; import type { ExperimentalFeatures } from '../../../common'; import type { SecuritySolutionApiRequestHandlerContext } from '../..'; @@ -43,15 +44,26 @@ export class AssetInventoryDataClient { constructor(private readonly options: AssetInventoryClientOpts) {} // Enables the asset inventory by deferring the initialization to avoid blocking the main thread. - public async enable() { - // Utility function to defer execution to the next tick using setTimeout. - const run = (fn: () => Promise) => - new Promise((resolve) => setTimeout(() => fn().then(resolve), 0)); + public async enable( + secSolutionContext: SecuritySolutionApiRequestHandlerContext, + requestBodyOverrides: InitEntityStoreRequestBody + ) { + const { logger } = this.options; + + try { + logger.debug(`Enabling asset inventory`); - // Defer and execute the initialization process. - await run(() => this.init()); + const entityStoreEnableResponse = await secSolutionContext + .getEntityStoreDataClient() + .enable(requestBodyOverrides); - return { succeeded: true }; + logger.debug(`Enabled asset inventory`); + + return entityStoreEnableResponse; + } catch (err) { + logger.error(`Error enabling asset inventory: ${err.message}`); + throw err; + } } // Initializes the asset inventory by validating experimental feature flags and triggering asynchronous setup. diff --git a/x-pack/solutions/security/plugins/security_solution/server/lib/asset_inventory/routes/delete.ts b/x-pack/solutions/security/plugins/security_solution/server/lib/asset_inventory/routes/delete.ts index 048886ccea252..8a6cd782c2c79 100644 --- a/x-pack/solutions/security/plugins/security_solution/server/lib/asset_inventory/routes/delete.ts +++ b/x-pack/solutions/security/plugins/security_solution/server/lib/asset_inventory/routes/delete.ts @@ -8,6 +8,7 @@ import type { Logger } from '@kbn/core/server'; import { buildSiemResponse } from '@kbn/lists-plugin/server/routes/utils'; import { transformError } from '@kbn/securitysolution-es-utils'; +import { ASSET_INVENTORY_DELETE_API_PATH } from '../../../../common/api/asset_inventory/constants'; import { API_VERSIONS } from '../../../../common/constants'; import type { AssetInventoryRoutesDeps } from '../types'; @@ -18,7 +19,7 @@ export const deleteAssetInventoryRoute = ( router.versioned .delete({ access: 'public', - path: '/api/asset_inventory/delete', + path: ASSET_INVENTORY_DELETE_API_PATH, security: { authz: { requiredPrivileges: ['securitySolution'], diff --git a/x-pack/solutions/security/plugins/security_solution/server/lib/asset_inventory/routes/enablement.ts b/x-pack/solutions/security/plugins/security_solution/server/lib/asset_inventory/routes/enablement.ts index d3cc935eb5a16..0df89c957fb93 100644 --- a/x-pack/solutions/security/plugins/security_solution/server/lib/asset_inventory/routes/enablement.ts +++ b/x-pack/solutions/security/plugins/security_solution/server/lib/asset_inventory/routes/enablement.ts @@ -8,19 +8,21 @@ import { buildSiemResponse } from '@kbn/lists-plugin/server/routes/utils'; import { transformError } from '@kbn/securitysolution-es-utils'; import type { Logger } from '@kbn/core/server'; +import { buildRouteValidationWithZod } from '@kbn/zod-helpers'; import { API_VERSIONS } from '../../../../common/constants'; import type { AssetInventoryRoutesDeps } from '../types'; +import { InitEntityStoreRequestBody } from '../../../../common/api/entity_analytics/entity_store/enable.gen'; +import { ASSET_INVENTORY_ENABLE_API_PATH } from '../../../../common/api/asset_inventory/constants'; export const enableAssetInventoryRoute = ( router: AssetInventoryRoutesDeps['router'], - logger: Logger, - config: AssetInventoryRoutesDeps['config'] + logger: Logger ) => { router.versioned .post({ access: 'public', - path: '/api/asset_inventory/enable', + path: ASSET_INVENTORY_ENABLE_API_PATH, security: { authz: { requiredPrivileges: ['securitySolution'], @@ -30,8 +32,11 @@ export const enableAssetInventoryRoute = ( .addVersion( { version: API_VERSIONS.public.v1, - // TODO: create validation - validate: false, + validate: { + request: { + body: buildRouteValidationWithZod(InitEntityStoreRequestBody), + }, + }, }, async (context, request, response) => { @@ -39,7 +44,7 @@ export const enableAssetInventoryRoute = ( const secSol = await context.securitySolution; try { - const body = await secSol.getAssetInventoryClient().enable(); + const body = await secSol.getAssetInventoryClient().enable(secSol, request.body); return response.ok({ body }); } catch (e) { diff --git a/x-pack/solutions/security/plugins/security_solution/server/lib/asset_inventory/routes/register_asset_inventory_routes.ts b/x-pack/solutions/security/plugins/security_solution/server/lib/asset_inventory/routes/register_asset_inventory_routes.ts index b2707c33b3585..526e1ddd51ad8 100644 --- a/x-pack/solutions/security/plugins/security_solution/server/lib/asset_inventory/routes/register_asset_inventory_routes.ts +++ b/x-pack/solutions/security/plugins/security_solution/server/lib/asset_inventory/routes/register_asset_inventory_routes.ts @@ -16,7 +16,7 @@ export const registerAssetInventoryRoutes = ({ config, getStartServices, }: AssetInventoryRoutesDeps) => { - enableAssetInventoryRoute(router, logger, config); + enableAssetInventoryRoute(router, logger); deleteAssetInventoryRoute(router, logger); statusAssetInventoryRoute(router, logger, getStartServices); }; diff --git a/x-pack/solutions/security/plugins/security_solution/server/lib/asset_inventory/routes/status.ts b/x-pack/solutions/security/plugins/security_solution/server/lib/asset_inventory/routes/status.ts index d79d9ce73e1a8..442d7c8e6b144 100644 --- a/x-pack/solutions/security/plugins/security_solution/server/lib/asset_inventory/routes/status.ts +++ b/x-pack/solutions/security/plugins/security_solution/server/lib/asset_inventory/routes/status.ts @@ -8,6 +8,7 @@ import { buildSiemResponse } from '@kbn/lists-plugin/server/routes/utils'; import { transformError } from '@kbn/securitysolution-es-utils'; import type { Logger } from '@kbn/core/server'; +import { ASSET_INVENTORY_STATUS_API_PATH } from '../../../../common/api/asset_inventory/constants'; import { API_VERSIONS } from '../../../../common/constants'; import type { AssetInventoryRoutesDeps } from '../types'; @@ -21,7 +22,7 @@ export const statusAssetInventoryRoute = ( router.versioned .get({ access: 'public', - path: '/api/asset_inventory/status', + path: ASSET_INVENTORY_STATUS_API_PATH, security: { authz: { requiredPrivileges: ['securitySolution'], diff --git a/x-pack/solutions/security/plugins/security_solution/server/lib/siem_migrations/rules/data/__mocks__/rule_migrations_data_prebuilt_rules_client.ts b/x-pack/solutions/security/plugins/security_solution/server/lib/siem_migrations/rules/data/__mocks__/rule_migrations_data_prebuilt_rules_client.ts new file mode 100644 index 0000000000000..1061adc52eced --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/server/lib/siem_migrations/rules/data/__mocks__/rule_migrations_data_prebuilt_rules_client.ts @@ -0,0 +1,9 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { mockRuleMigrationsDataPrebuiltRulesClient } from './mocks'; +export const RuleMigrationsDataPrebuiltRulesClient = mockRuleMigrationsDataPrebuiltRulesClient; diff --git a/x-pack/solutions/security/plugins/security_solution/server/lib/siem_migrations/rules/task/__mocks__/mocks.ts b/x-pack/solutions/security/plugins/security_solution/server/lib/siem_migrations/rules/task/__mocks__/mocks.ts index 91a298d876e1f..b9920e7a7abf2 100644 --- a/x-pack/solutions/security/plugins/security_solution/server/lib/siem_migrations/rules/task/__mocks__/mocks.ts +++ b/x-pack/solutions/security/plugins/security_solution/server/lib/siem_migrations/rules/task/__mocks__/mocks.ts @@ -4,6 +4,40 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ +import type { PublicMethodsOf } from '@kbn/utility-types'; +import { FakeLLM } from '@langchain/core/utils/testing'; +import { AsyncLocalStorageProviderSingleton } from '@langchain/core/singletons'; +import type { SiemMigrationTelemetryClient } from '../rule_migrations_telemetry_client'; +import type { BaseLLMParams } from '@langchain/core/language_models/llms'; + +export const createSiemMigrationTelemetryClientMock = () => { + // Mock for the object returned by startSiemMigrationTask + const mockStartRuleTranslationReturn = { + success: jest.fn(), + failure: jest.fn(), + }; + + // Mock for the function returned by startSiemMigrationTask + const mockStartRuleTranslation = jest.fn().mockReturnValue(mockStartRuleTranslationReturn); + + // Mock for startSiemMigrationTask return value + const mockStartSiemMigrationTaskReturn = { + startRuleTranslation: mockStartRuleTranslation, + success: jest.fn(), + failure: jest.fn(), + }; + + return { + reportIntegrationsMatch: jest.fn(), + reportPrebuiltRulesMatch: jest.fn(), + startSiemMigrationTask: jest.fn().mockReturnValue(mockStartSiemMigrationTaskReturn), + } as jest.Mocked>; +}; + +// Factory function for the mock class +export const MockSiemMigrationTelemetryClient = jest + .fn() + .mockImplementation(() => createSiemMigrationTelemetryClientMock()); export const createRuleMigrationsTaskClientMock = () => ({ start: jest.fn().mockResolvedValue({ started: true }), @@ -33,3 +67,60 @@ export const MockRuleMigrationsTaskService = jest.fn().mockImplementation(() => createClient: mockCreateClient, stopAll: mockStopAll, })); + +export interface NodeResponse { + nodeId: string; + response: string; +} + +interface SiemMigrationFakeLLMParams extends BaseLLMParams { + nodeResponses: NodeResponse[]; +} + +export class SiemMigrationFakeLLM extends FakeLLM { + private nodeResponses: NodeResponse[]; + private defaultResponse: string; + private callCount: Map; + private totalCount: number; + + constructor(fields: SiemMigrationFakeLLMParams) { + super({ + response: 'unexpected node call', + ...fields, + }); + this.nodeResponses = fields.nodeResponses; + this.defaultResponse = 'unexpected node call'; + this.callCount = new Map(); + this.totalCount = 0; + } + + _llmType(): string { + return 'fake'; + } + + async _call(prompt: string, _options: this['ParsedCallOptions']): Promise { + // Get the current runnable config metadata + const item = AsyncLocalStorageProviderSingleton.getRunnableConfig(); + for (const nodeResponse of this.nodeResponses) { + if (item.metadata.langgraph_node === nodeResponse.nodeId) { + const currentCount = this.callCount.get(nodeResponse.nodeId) || 0; + this.callCount.set(nodeResponse.nodeId, currentCount + 1); + this.totalCount += 1; + return nodeResponse.response; + } + } + return this.defaultResponse; + } + + getNodeCallCount(nodeId: string): number { + return this.callCount.get(nodeId) || 0; + } + + getTotalCallCount(): number { + return this.totalCount; + } + + resetCallCounts(): void { + this.callCount.clear(); + } +} diff --git a/x-pack/solutions/security/plugins/security_solution/server/lib/siem_migrations/rules/task/__mocks__/rule_migrations_telemetry_client.ts b/x-pack/solutions/security/plugins/security_solution/server/lib/siem_migrations/rules/task/__mocks__/rule_migrations_telemetry_client.ts new file mode 100644 index 0000000000000..199e630d2f1de --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/server/lib/siem_migrations/rules/task/__mocks__/rule_migrations_telemetry_client.ts @@ -0,0 +1,9 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { MockSiemMigrationTelemetryClient } from './mocks'; +export const SiemMigrationTelemetryClient = MockSiemMigrationTelemetryClient; diff --git a/x-pack/solutions/security/plugins/security_solution/server/lib/siem_migrations/rules/task/agent/graph.test.ts b/x-pack/solutions/security/plugins/security_solution/server/lib/siem_migrations/rules/task/agent/graph.test.ts index edd99497828e0..6147492dd27a7 100644 --- a/x-pack/solutions/security/plugins/security_solution/server/lib/siem_migrations/rules/task/agent/graph.test.ts +++ b/x-pack/solutions/security/plugins/security_solution/server/lib/siem_migrations/rules/task/agent/graph.test.ts @@ -5,38 +5,240 @@ * 2.0. */ -import type { - ActionsClientChatOpenAI, - ActionsClientSimpleChatModel, -} from '@kbn/langchain/server/language_models'; +import type { ActionsClientChatOpenAI } from '@kbn/langchain/server/language_models'; import { loggerMock } from '@kbn/logging-mocks'; -import { FakeLLM } from '@langchain/core/utils/testing'; -import type { RuleMigrationsRetriever } from '../retrievers'; -import type { SiemMigrationTelemetryClient } from '../rule_migrations_telemetry_client'; -import type { EsqlKnowledgeBase } from '../util/esql_knowledge_base'; +import type { NodeResponse } from '../__mocks__/mocks'; +import { SiemMigrationFakeLLM, MockSiemMigrationTelemetryClient } from '../__mocks__/mocks'; +import { MockEsqlKnowledgeBase } from '../util/__mocks__/mocks'; +import { MockRuleMigrationsRetriever } from '../retrievers/__mocks__/mocks'; import { getRuleMigrationAgent } from './graph'; +const mockOriginalRule = { + id: 'b12c89bc-9d06-11eb-a592-acde48001122', + vendor: 'splunk' as const, + query_language: 'spl', + title: 'Office Document Executing Macro Code', + description: + 'The following analytic identifies office documents executing macro code. It leverages Sysmon EventCode 7 to detect when processes like WINWORD.EXE or EXCEL.EXE load specific DLLs associated with macros (e.g., VBE7.DLL). This activity is significant because macros are a common attack vector for delivering malicious payloads, such as malware. If confirmed malicious, this could lead to unauthorized code execution, data exfiltration, or further compromise of the system. Disabling macros by default is recommended to mitigate this risk.', + query: + '`sysmon` EventCode=7 process_name IN ("WINWORD.EXE", "EXCEL.EXE", "POWERPNT.EXE","onenote.exe","onenotem.exe","onenoteviewer.exe","onenoteim.exe","msaccess.exe") loaded_file_path IN ("*\\\\VBE7INTL.DLL","*\\\\VBE7.DLL", "*\\\\VBEUI.DLL") | stats min(_time) as firstTime max(_time) as lastTime values(loaded_file) as loaded_file count by dest EventCode process_name process_guid | `security_content_ctime(firstTime)` | `security_content_ctime(lastTime)` | `office_document_executing_macro_code_filter`', +}; + +const mockIntegrationResult = { + id: 'testintegration', + title: 'testintegration', + description: 'testintegration', + data_streams: [ + { + dataset: 'teststream', + title: 'teststream', + index_pattern: 'logs-testintegration-testdatastream-default', + }, + ], + elser_embedding: 'testintegration - testintegration - teststream', +}; + +const mockPartialNlToEsqlResponse = + '```esql\nFROM logs-*\n| STATS web_event_count = COUNT(*) BY src, http_method\n| LOOKUP JOIN "app:count_by_http_method_by_src_1d" ON src\n```'; + +const mockFullNlToEsqlResponse = + '```esql\nFROM logs-testintegration-*\n| STATS web_event_count = COUNT(*) BY src, http_method\n| LOOKUP JOIN "app:count_by_http_method_by_src_1d" ON src\n```'; + +const mockOriginalInputLookup = { + ...mockOriginalRule, + query: 'inputlookup something test', +}; + +const mockPrebuiltRule = { + rule_id: 'test-rule', + description: 'test-description', + name: 'Suspicious MS Office Child Process', +}; + +const mockIncorrectRuleName = { + ...mockPrebuiltRule, + name: 'wrong-name', +}; + +const mockSemanticQueryResponse = JSON.stringify({ + semantic_query: + 'web http abnormal high volume requests method source ip network traffic analysis datamodel web security', +}); + +const mockPrebuiltRuleMatchResponse = JSON.stringify({ + match: 'Suspicious MS Office Child Process', + summary: + '## Prebuilt Rule Matching Summary\\nThe Splunk rule "Office Document Executing Macro Code" is closely related to the Elastic rule "Suspicious MS Office Child Process". Both rules aim to detect potentially malicious activity originating from Microsoft Office applications. While the Splunk rule specifically looks for the loading of macro-related DLLs, the Elastic rule takes a broader approach by monitoring for suspicious child processes of Office applications, which would include processes initiated by macro execution. The Elastic rule provides a more comprehensive coverage of potential threats, including but not limited to macro-based attacks, making it a suitable match for the given Splunk rule\'s intent.', +}); + +const mockPrebuiltRuleNoMatchResponse = JSON.stringify({ + match: '', + summary: '## Prebuilt Rule Matching Summary\\n No matches found', +}); + +const mockIntegrationNoMatchResponse = JSON.stringify({ + match: '', + summary: '## Integration Matching Summary\\nNo related integration found.', +}); + +const mockIntegrationMatchResponse = JSON.stringify({ + match: 'testintegration', + summary: '## Integration Matching Summary\\nNo Found one testintegration', +}); + +const logger = loggerMock.create(); +let fakeLLM: SiemMigrationFakeLLM; +let mockRetriever = new MockRuleMigrationsRetriever(); +let mockEsqlKnowledgeBase = new MockEsqlKnowledgeBase(); +let mockTelemetryClient = new MockSiemMigrationTelemetryClient(); + +const setupAgent = async (responses: NodeResponse[]) => { + fakeLLM = new SiemMigrationFakeLLM({ nodeResponses: responses }); + const model = fakeLLM as unknown as ActionsClientChatOpenAI; + const graph = getRuleMigrationAgent({ + model, + esqlKnowledgeBase: mockEsqlKnowledgeBase, + ruleMigrationsRetriever: mockRetriever, + logger, + telemetryClient: mockTelemetryClient, + }); + return graph; +}; + describe('getRuleMigrationAgent', () => { - const model = new FakeLLM({ - response: JSON.stringify({}, null, 2), - }) as unknown as ActionsClientChatOpenAI | ActionsClientSimpleChatModel; - const telemetryClient = {} as SiemMigrationTelemetryClient; - const esqlKnowledgeBase = {} as EsqlKnowledgeBase; - - const ruleMigrationsRetriever = {} as RuleMigrationsRetriever; - const logger = loggerMock.create(); - - it('Ensures that the graph compiles', async () => { - try { - await getRuleMigrationAgent({ - model, - esqlKnowledgeBase, - ruleMigrationsRetriever, - logger, - telemetryClient, + beforeEach(() => { + mockRetriever = new MockRuleMigrationsRetriever(); + mockTelemetryClient = new MockSiemMigrationTelemetryClient(); + mockEsqlKnowledgeBase = new MockEsqlKnowledgeBase(); + jest.clearAllMocks(); + }); + describe('graph compilation', () => { + it('ensures that the graph compiles', async () => { + await setupAgent([{ nodeId: '', response: '' }]); + }); + }); + describe('prebuilt rules', () => { + it('successful match', async () => { + mockRetriever.prebuiltRules.search.mockResolvedValue([mockPrebuiltRule]); + const graph = await setupAgent([ + { + nodeId: 'createSemanticQuery', + response: mockSemanticQueryResponse, + }, + { + nodeId: 'matchPrebuiltRule', + response: mockPrebuiltRuleMatchResponse, + }, + ]); + const response = await graph.invoke({ + original_rule: mockOriginalRule, }); - } catch (error) { - throw Error(`getRuleMigrationAgent threw an error: ${error}`); - } + expect(response.elastic_rule?.prebuilt_rule_id).toEqual('test-rule'); + expect(response.translation_result).toEqual('full'); + expect(fakeLLM.getNodeCallCount('matchPrebuiltRule')).toBe(1); + }); + it('llm respond with non existing integration name', async () => { + mockRetriever.prebuiltRules.search.mockResolvedValue([mockIncorrectRuleName]); + const graph = await setupAgent([ + { + nodeId: 'createSemanticQuery', + response: mockSemanticQueryResponse, + }, + { + nodeId: 'matchPrebuiltRule', + response: mockPrebuiltRuleMatchResponse, + }, + ]); + + const response = await graph.invoke({ original_rule: mockOriginalRule }); + expect(response.elastic_rule?.prebuilt_rule_id).toEqual(undefined); + expect(mockRetriever.prebuiltRules.search).toHaveBeenCalledTimes(1); + expect(response.translation_result).toEqual('untranslatable'); + expect(fakeLLM.getNodeCallCount('matchPrebuiltRule')).toBe(1); + }); + it('no prebuilt rule matches', async () => { + mockRetriever.prebuiltRules.search.mockResolvedValue([]); + const graph = await setupAgent([ + { + nodeId: 'createSemanticQuery', + response: mockSemanticQueryResponse, + }, + { + nodeId: 'matchPrebuiltRule', + response: mockPrebuiltRuleNoMatchResponse, + }, + ]); + const response = await graph.invoke({ original_rule: mockOriginalRule }); + expect(mockRetriever.prebuiltRules.search).toHaveBeenCalledTimes(1); + expect(response.translation_result).toEqual('untranslatable'); + }); + }); + describe('custom translation', () => { + it('unsupported query', async () => { + mockRetriever.prebuiltRules.search.mockResolvedValue([mockPrebuiltRule]); + const graph = await setupAgent([ + { + nodeId: 'createSemanticQuery', + response: mockSemanticQueryResponse, + }, + { + nodeId: 'matchPrebuiltRule', + response: mockPrebuiltRuleNoMatchResponse, + }, + ]); + + const response = await graph.invoke({ original_rule: mockOriginalInputLookup }); + expect(mockRetriever.prebuiltRules.search).toHaveBeenCalledTimes(1); + expect(response.translation_result).toEqual('untranslatable'); + // Because of the inputlookup in the query, we expect it to end before calling the LLM + expect(fakeLLM.getNodeCallCount('inlineQuery')).toBe(0); + }); + it('no integrations found in RAG and partial results', async () => { + mockEsqlKnowledgeBase.translate.mockResolvedValue(mockPartialNlToEsqlResponse); + mockRetriever.prebuiltRules.search.mockResolvedValue([mockPrebuiltRule]); + const graph = await setupAgent([ + { + nodeId: 'createSemanticQuery', + response: mockSemanticQueryResponse, + }, + { + nodeId: 'matchPrebuiltRule', + response: mockPrebuiltRuleNoMatchResponse, + }, + { + nodeId: 'retrieveIntegrations', + response: mockIntegrationNoMatchResponse, + }, + ]); + const response = await graph.invoke({ original_rule: mockOriginalRule }); + expect(mockRetriever.prebuiltRules.search).toHaveBeenCalledTimes(1); + expect(mockEsqlKnowledgeBase.translate).toHaveBeenCalledTimes(2); + expect(response.translation_result).toEqual('partial'); + expect(fakeLLM.getNodeCallCount('retrieveIntegrations')).toBe(0); + }); + it('integration found and full translation results', async () => { + mockEsqlKnowledgeBase.translate.mockResolvedValue(mockFullNlToEsqlResponse); + mockRetriever.prebuiltRules.search.mockResolvedValue([mockPrebuiltRule]); + mockRetriever.integrations.getIntegrations.mockResolvedValue([mockIntegrationResult]); + const graph = await setupAgent([ + { + nodeId: 'createSemanticQuery', + response: mockSemanticQueryResponse, + }, + { + nodeId: 'matchPrebuiltRule', + response: mockPrebuiltRuleNoMatchResponse, + }, + { + nodeId: 'retrieveIntegrations', + response: mockIntegrationMatchResponse, + }, + ]); + const response = await graph.invoke({ original_rule: mockOriginalRule }); + expect(mockRetriever.prebuiltRules.search).toHaveBeenCalledTimes(1); + expect(mockEsqlKnowledgeBase.translate).toHaveBeenCalledTimes(2); + expect(fakeLLM.getNodeCallCount('retrieveIntegrations')).toBe(1); + expect(response.translation_result).toEqual('full'); + }); }); }); diff --git a/x-pack/solutions/security/plugins/security_solution/server/lib/siem_migrations/rules/task/agent/sub_graphs/translate_rule/nodes/inline_query/inline_query.ts b/x-pack/solutions/security/plugins/security_solution/server/lib/siem_migrations/rules/task/agent/sub_graphs/translate_rule/nodes/inline_query/inline_query.ts index eac213652973d..8178eae10cbf8 100644 --- a/x-pack/solutions/security/plugins/security_solution/server/lib/siem_migrations/rules/task/agent/sub_graphs/translate_rule/nodes/inline_query/inline_query.ts +++ b/x-pack/solutions/security/plugins/security_solution/server/lib/siem_migrations/rules/task/agent/sub_graphs/translate_rule/nodes/inline_query/inline_query.ts @@ -24,7 +24,6 @@ export const getInlineQueryNode = ({ }: GetInlineQueryNodeParams): GraphNode => { return async (state) => { let query = state.original_rule.query; - // Check before to avoid unnecessary LLM calls let unsupportedComment = getUnsupportedComment(query); if (unsupportedComment) { diff --git a/x-pack/solutions/security/plugins/security_solution/server/lib/siem_migrations/rules/task/agent/sub_graphs/translate_rule/nodes/retrieve_integrations/retrieve_integrations.ts b/x-pack/solutions/security/plugins/security_solution/server/lib/siem_migrations/rules/task/agent/sub_graphs/translate_rule/nodes/retrieve_integrations/retrieve_integrations.ts index a9fe92bde4cb9..f19815761c631 100644 --- a/x-pack/solutions/security/plugins/security_solution/server/lib/siem_migrations/rules/task/agent/sub_graphs/translate_rule/nodes/retrieve_integrations/retrieve_integrations.ts +++ b/x-pack/solutions/security/plugins/security_solution/server/lib/siem_migrations/rules/task/agent/sub_graphs/translate_rule/nodes/retrieve_integrations/retrieve_integrations.ts @@ -31,7 +31,6 @@ export const getRetrieveIntegrationsNode = ({ }: GetRetrieveIntegrationsNodeParams): GraphNode => { return async (state) => { const query = state.semantic_query; - const integrations = await ruleMigrationsRetriever.integrations.getIntegrations(query); if (integrations.length === 0) { telemetryClient.reportIntegrationsMatch({ @@ -66,7 +65,6 @@ export const getRetrieveIntegrationsNode = ({ integrations: integrationsJson, splunk_rule: JSON.stringify(splunkRule, null, 2), })) as GetMatchedIntegrationResponse; - const comments = response.summary ? [generateAssistantComment(cleanMarkdown(response.summary))] : undefined; diff --git a/x-pack/solutions/security/plugins/security_solution/server/lib/siem_migrations/rules/task/agent/sub_graphs/translate_rule/nodes/translate_rule/translate_rule.ts b/x-pack/solutions/security/plugins/security_solution/server/lib/siem_migrations/rules/task/agent/sub_graphs/translate_rule/nodes/translate_rule/translate_rule.ts index 7be5e96d84bb8..99d3560cbf9f0 100644 --- a/x-pack/solutions/security/plugins/security_solution/server/lib/siem_migrations/rules/task/agent/sub_graphs/translate_rule/nodes/translate_rule/translate_rule.ts +++ b/x-pack/solutions/security/plugins/security_solution/server/lib/siem_migrations/rules/task/agent/sub_graphs/translate_rule/nodes/translate_rule/translate_rule.ts @@ -44,7 +44,6 @@ export const getTranslateRuleNode = ({ const esqlQuery = response.match(/```esql\n([\s\S]*?)\n```/)?.[1].trim() ?? ''; const translationSummary = response.match(/## Translation Summary[\s\S]*$/)?.[0] ?? ''; - return { response, comments: [generateAssistantComment(cleanMarkdown(translationSummary))], diff --git a/x-pack/solutions/security/plugins/security_solution/server/lib/siem_migrations/rules/task/retrievers/__mocks__/mocks.ts b/x-pack/solutions/security/plugins/security_solution/server/lib/siem_migrations/rules/task/retrievers/__mocks__/mocks.ts new file mode 100644 index 0000000000000..c894187008afa --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/server/lib/siem_migrations/rules/task/retrievers/__mocks__/mocks.ts @@ -0,0 +1,39 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { PublicMethodsOf } from '@kbn/utility-types'; +import type { RuleMigrationsRetriever } from '..'; + +export const createRuleMigrationsRetrieverMock = () => { + const mockResources = { + initialize: jest.fn().mockResolvedValue(undefined), + getResources: jest.fn().mockResolvedValue({}), + }; + + const mockIntegrations = { + populateIndex: jest.fn().mockResolvedValue(undefined), + getIntegrations: jest.fn().mockResolvedValue([]), + }; + + const mockPrebuiltRules = { + populateIndex: jest.fn().mockResolvedValue(undefined), + search: jest.fn().mockResolvedValue([]), + }; + + const mockRetriever = { + resources: mockResources, + integrations: mockIntegrations, + prebuiltRules: mockPrebuiltRules, + initialize: jest.fn().mockResolvedValue(undefined), + }; + + return mockRetriever as jest.Mocked>; +}; + +export const MockRuleMigrationsRetriever = jest + .fn() + .mockImplementation(() => createRuleMigrationsRetrieverMock()); diff --git a/x-pack/solutions/security/plugins/security_solution/server/lib/siem_migrations/rules/task/retrievers/__mocks__/rule_migrations_retriever.ts b/x-pack/solutions/security/plugins/security_solution/server/lib/siem_migrations/rules/task/retrievers/__mocks__/rule_migrations_retriever.ts new file mode 100644 index 0000000000000..d7977fd3495e6 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/server/lib/siem_migrations/rules/task/retrievers/__mocks__/rule_migrations_retriever.ts @@ -0,0 +1,9 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { MockRuleMigrationsRetriever } from './mocks'; +export const RuleMigrationsRetriever = MockRuleMigrationsRetriever; diff --git a/x-pack/solutions/security/plugins/security_solution/server/lib/siem_migrations/rules/task/util/__mocks__/esql_knowledge_base.ts b/x-pack/solutions/security/plugins/security_solution/server/lib/siem_migrations/rules/task/util/__mocks__/esql_knowledge_base.ts new file mode 100644 index 0000000000000..73f5e8a2930f5 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/server/lib/siem_migrations/rules/task/util/__mocks__/esql_knowledge_base.ts @@ -0,0 +1,9 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { MockEsqlKnowledgeBase } from './mocks'; +export const EsqlKnowledgeBase = MockEsqlKnowledgeBase; diff --git a/x-pack/solutions/security/plugins/security_solution/server/lib/siem_migrations/rules/task/util/__mocks__/mocks.ts b/x-pack/solutions/security/plugins/security_solution/server/lib/siem_migrations/rules/task/util/__mocks__/mocks.ts new file mode 100644 index 0000000000000..978ff356fa29b --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/server/lib/siem_migrations/rules/task/util/__mocks__/mocks.ts @@ -0,0 +1,20 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { EsqlKnowledgeBase } from '../esql_knowledge_base'; +import type { PublicMethodsOf } from '@kbn/utility-types'; + +export const createEsqlKnowledgeBaseMock = () => { + return { + translate: jest.fn().mockResolvedValue(''), + } as jest.Mocked>; +}; + +// Factory function for the mock class +export const MockEsqlKnowledgeBase = jest + .fn() + .mockImplementation(() => createEsqlKnowledgeBaseMock()); diff --git a/x-pack/solutions/security/plugins/security_solution/server/lists_integration/endpoint/handlers/exceptions_pre_delete_item_handler.ts b/x-pack/solutions/security/plugins/security_solution/server/lists_integration/endpoint/handlers/exceptions_pre_delete_item_handler.ts index 719cd7b655b22..ed228b10f8d96 100644 --- a/x-pack/solutions/security/plugins/security_solution/server/lists_integration/endpoint/handlers/exceptions_pre_delete_item_handler.ts +++ b/x-pack/solutions/security/plugins/security_solution/server/lists_integration/endpoint/handlers/exceptions_pre_delete_item_handler.ts @@ -40,7 +40,9 @@ export const getExceptionsPreDeleteItemHandler = ( // Validate Trusted Applications if (TrustedAppValidator.isTrustedApp({ listId })) { - await new TrustedAppValidator(endpointAppContextService, request).validatePreDeleteItem(); + await new TrustedAppValidator(endpointAppContextService, request).validatePreDeleteItem( + exceptionItem + ); return data; } @@ -49,19 +51,23 @@ export const getExceptionsPreDeleteItemHandler = ( await new HostIsolationExceptionsValidator( endpointAppContextService, request - ).validatePreDeleteItem(); + ).validatePreDeleteItem(exceptionItem); return data; } // Event Filter validation if (EventFilterValidator.isEventFilter({ listId })) { - await new EventFilterValidator(endpointAppContextService, request).validatePreDeleteItem(); + await new EventFilterValidator(endpointAppContextService, request).validatePreDeleteItem( + exceptionItem + ); return data; } // Validate Blocklists if (BlocklistValidator.isBlocklist({ listId })) { - await new BlocklistValidator(endpointAppContextService, request).validatePreDeleteItem(); + await new BlocklistValidator(endpointAppContextService, request).validatePreDeleteItem( + exceptionItem + ); return data; } @@ -70,7 +76,7 @@ export const getExceptionsPreDeleteItemHandler = ( await new EndpointExceptionsValidator( endpointAppContextService, request - ).validatePreDeleteItem(); + ).validatePreDeleteItem(exceptionItem); return data; } diff --git a/x-pack/solutions/security/plugins/security_solution/server/lists_integration/endpoint/validators/base_validator.test.ts b/x-pack/solutions/security/plugins/security_solution/server/lists_integration/endpoint/validators/base_validator.test.ts index cee2770d6e8bf..967001ffa4929 100644 --- a/x-pack/solutions/security/plugins/security_solution/server/lists_integration/endpoint/validators/base_validator.test.ts +++ b/x-pack/solutions/security/plugins/security_solution/server/lists_integration/endpoint/validators/base_validator.test.ts @@ -11,7 +11,11 @@ import { createMockEndpointAppContextServiceSetupContract, createMockEndpointAppContextServiceStartContract, } from '../../../endpoint/mocks'; -import { BaseValidatorMock, createExceptionItemLikeOptionsMock } from './mocks'; +import { + BaseValidatorMock, + createExceptionItemLikeOptionsMock, + createExceptionListItemMock, +} from './mocks'; import { EndpointArtifactExceptionValidationError } from './errors'; import { httpServerMock } from '@kbn/core/server/mocks'; import type { PackagePolicy } from '@kbn/fleet-plugin/common'; @@ -23,10 +27,15 @@ import { GLOBAL_ARTIFACT_TAG, } from '../../../../common/endpoint/service/artifacts'; import { securityMock } from '@kbn/security-plugin/server/mocks'; -import { setArtifactOwnerSpaceId } from '../../../../common/endpoint/service/artifacts/utils'; +import { + buildPerPolicyTag, + buildSpaceOwnerIdTag, + setArtifactOwnerSpaceId, +} from '../../../../common/endpoint/service/artifacts/utils'; import { DEFAULT_SPACE_ID } from '@kbn/spaces-plugin/common'; import { getEndpointAuthzInitialStateMock } from '../../../../common/endpoint/service/authz/mocks'; import type { EndpointAuthz } from '../../../../common/endpoint/types/authz'; +import type { ExceptionListItemSchema } from '@kbn/securitysolution-io-ts-list-types'; describe('When using Artifacts Exceptions BaseValidator', () => { let endpointAppContextServices: EndpointAppContextService; @@ -198,16 +207,23 @@ describe('When using Artifacts Exceptions BaseValidator', () => { }); describe('with space awareness', () => { - const noGlobalArtifactManagementAuthzMessage = + const noAuthzToManageOwnerSpaceIdError = 'EndpointArtifactError: Endpoint authorization failure. Management of "ownerSpaceId" tag requires global artifact management privilege'; + const noAuthzToManageGlobalArtifactsError = + 'EndpointArtifactError: Endpoint authorization failure. Management of global artifacts requires additional privilege (global artifact management)'; + const itemCanNotBeManagedInActiveSpaceErrorMessage = + 'EndpointArtifactError: Updates to this shared item can only be done from the following space ID: foo (or by someone having global artifact management privilege)'; + const setSpaceAwarenessFeatureFlag = (value: 'enabled' | 'disabled'): void => { + // @ts-expect-error updating a readonly field + endpointAppContextServices.experimentalFeatures.endpointManagementSpaceAwarenessEnabled = + value === 'enabled'; + }; let authzMock: EndpointAuthz; beforeEach(() => { authzMock = getEndpointAuthzInitialStateMock(); endpointAppContextServices = createMockEndpointAppContextService(); - // @ts-expect-error updating a readonly field - endpointAppContextServices.experimentalFeatures.endpointManagementSpaceAwarenessEnabled = - true; + setSpaceAwarenessFeatureFlag('enabled'); (endpointAppContextServices.getEndpointAuthz as jest.Mock).mockResolvedValue(authzMock); setArtifactOwnerSpaceId(exceptionLikeItem, DEFAULT_SPACE_ID); validator = new BaseValidatorMock(endpointAppContextServices, kibanaRequest); @@ -219,7 +235,7 @@ describe('When using Artifacts Exceptions BaseValidator', () => { authzMock.canManageGlobalArtifacts = false; await expect(validator._validateCreateOwnerSpaceIds(exceptionLikeItem)).rejects.toThrow( - noGlobalArtifactManagementAuthzMessage + noAuthzToManageOwnerSpaceIdError ); }); @@ -240,9 +256,7 @@ describe('When using Artifacts Exceptions BaseValidator', () => { }); it('should not error if feature flag is disabled', async () => { - // @ts-expect-error updating a readonly field - endpointAppContextServices.experimentalFeatures.endpointManagementSpaceAwarenessEnabled = - false; + setSpaceAwarenessFeatureFlag('disabled'); authzMock.canManageGlobalArtifacts = false; setArtifactOwnerSpaceId(exceptionLikeItem, 'foo'); setArtifactOwnerSpaceId(exceptionLikeItem, 'bar'); @@ -267,7 +281,7 @@ describe('When using Artifacts Exceptions BaseValidator', () => { await expect( validator._validateUpdateOwnerSpaceIds(exceptionLikeItem, savedExceptionLikeItem) - ).rejects.toThrow(noGlobalArtifactManagementAuthzMessage); + ).rejects.toThrow(noAuthzToManageOwnerSpaceIdError); }); it('should allow changes to spaceOwnerId tags if user has global artifact management authz', async () => { @@ -279,9 +293,7 @@ describe('When using Artifacts Exceptions BaseValidator', () => { }); it('should not error if feature flag is disabled', async () => { - // @ts-expect-error updating a readonly field - endpointAppContextServices.experimentalFeatures.endpointManagementSpaceAwarenessEnabled = - false; + setSpaceAwarenessFeatureFlag('disabled'); authzMock.canManageGlobalArtifacts = false; setArtifactOwnerSpaceId(exceptionLikeItem, 'foo'); setArtifactOwnerSpaceId(exceptionLikeItem, 'bar'); @@ -291,5 +303,154 @@ describe('When using Artifacts Exceptions BaseValidator', () => { ).resolves.toBeUndefined(); }); }); + + describe('#validateCanCreateGlobalArtifacts()', () => { + beforeEach(() => { + exceptionLikeItem.tags = [GLOBAL_ARTIFACT_TAG]; + }); + + it('should do nothing if feature flag is turned off', async () => { + authzMock.canManageGlobalArtifacts = false; + setSpaceAwarenessFeatureFlag('disabled'); + + await expect( + validator._validateCanCreateGlobalArtifacts(exceptionLikeItem) + ).resolves.toBeUndefined(); + }); + + it('should error is user does not have new global artifact management privilege', async () => { + authzMock.canManageGlobalArtifacts = false; + + await expect( + validator._validateCanCreateGlobalArtifacts(exceptionLikeItem) + ).rejects.toThrow(noAuthzToManageGlobalArtifactsError); + }); + + it('should allow creation of global artifacts when user has privilege', async () => { + await expect( + validator._validateCanCreateGlobalArtifacts(exceptionLikeItem) + ).resolves.toBeUndefined(); + }); + }); + + describe('#validateCanUpdateItemInActiveSpace()', () => { + let savedExceptionItem: ExceptionListItemSchema; + + beforeEach(() => { + savedExceptionItem = createExceptionListItemMock({ + // Saved item is owned by different space id + tags: [buildPerPolicyTag('123'), buildSpaceOwnerIdTag('foo')], + }); + }); + + it('should do nothing if feature flag is turned off', async () => { + setSpaceAwarenessFeatureFlag('disabled'); + authzMock.canManageGlobalArtifacts = false; + + await expect( + validator._validateCanUpdateItemInActiveSpace(exceptionLikeItem, savedExceptionItem) + ).resolves.toBeUndefined(); + }); + + it('should error if updating a global item when user does not have global artifact privilege', async () => { + authzMock.canManageGlobalArtifacts = false; + savedExceptionItem.tags = [GLOBAL_ARTIFACT_TAG, buildSpaceOwnerIdTag('foo')]; + + await expect( + validator._validateCanUpdateItemInActiveSpace(exceptionLikeItem, savedExceptionItem) + ).rejects.toThrow(noAuthzToManageGlobalArtifactsError); + }); + + it('should error if updating an item outside of its owner space id when user does not have global artifact privilege', async () => { + authzMock.canManageGlobalArtifacts = false; + + await expect( + validator._validateCanUpdateItemInActiveSpace(exceptionLikeItem, savedExceptionItem) + ).rejects.toThrow(itemCanNotBeManagedInActiveSpaceErrorMessage); + }); + + it('should allow updates to global items when user has global artifact privilege', async () => { + savedExceptionItem.tags = [GLOBAL_ARTIFACT_TAG, buildSpaceOwnerIdTag('foo')]; + + await expect( + validator._validateCanUpdateItemInActiveSpace(exceptionLikeItem, savedExceptionItem) + ).resolves.toBeUndefined(); + }); + + it('should allow update to item outside of owner space id when user has global artifact privilege', async () => { + await expect( + validator._validateCanUpdateItemInActiveSpace(exceptionLikeItem, savedExceptionItem) + ).resolves.toBeUndefined(); + }); + + it('should allow update to item inside of owner space id when user has no global artifact privilege', async () => { + authzMock.canManageGlobalArtifacts = false; + savedExceptionItem.tags = [buildPerPolicyTag('123'), buildSpaceOwnerIdTag('default')]; + + await expect( + validator._validateCanUpdateItemInActiveSpace(exceptionLikeItem, savedExceptionItem) + ).resolves.toBeUndefined(); + }); + }); + + describe('#validateCanDeleteItemInActiveSpace()', () => { + let savedExceptionItem: ExceptionListItemSchema; + + beforeEach(() => { + savedExceptionItem = createExceptionListItemMock({ + // Saved item is owned by different space id + tags: [buildPerPolicyTag('123'), buildSpaceOwnerIdTag('foo')], + }); + }); + + it('should do nothing if feature flag is turned off', async () => { + authzMock.canManageGlobalArtifacts = false; + setSpaceAwarenessFeatureFlag('disabled'); + + await expect( + validator._validateCanDeleteItemInActiveSpace(savedExceptionItem) + ).resolves.toBeUndefined(); + }); + + it('should error if deleting a global artifact when user does not have global artifact privilege', async () => { + authzMock.canManageGlobalArtifacts = false; + savedExceptionItem.tags = [GLOBAL_ARTIFACT_TAG, buildSpaceOwnerIdTag('foo')]; + + await expect( + validator._validateCanDeleteItemInActiveSpace(savedExceptionItem) + ).rejects.toThrow(noAuthzToManageGlobalArtifactsError); + }); + + it('should error if deleting item outside of its owner space id when user does not have global artifact privilege', async () => { + authzMock.canManageGlobalArtifacts = false; + + await expect( + validator._validateCanDeleteItemInActiveSpace(savedExceptionItem) + ).rejects.toThrow(itemCanNotBeManagedInActiveSpaceErrorMessage); + }); + + it('should allow delete of global item when user has global artifact privilege', async () => { + savedExceptionItem.tags = [GLOBAL_ARTIFACT_TAG, buildSpaceOwnerIdTag('foo')]; + + await expect( + validator._validateCanDeleteItemInActiveSpace(savedExceptionItem) + ).resolves.toBeUndefined(); + }); + + it('should allow deleting item from outside of its owner space id when user has global artifact privilege', async () => { + await expect( + validator._validateCanDeleteItemInActiveSpace(savedExceptionItem) + ).resolves.toBeUndefined(); + }); + + it('should allow deleting of item inside from owner space id when user has no global artifact privilege', async () => { + authzMock.canManageGlobalArtifacts = false; + savedExceptionItem.tags = [buildPerPolicyTag('123'), buildSpaceOwnerIdTag('default')]; + + await expect( + validator._validateCanDeleteItemInActiveSpace(savedExceptionItem) + ).resolves.toBeUndefined(); + }); + }); }); }); diff --git a/x-pack/solutions/security/plugins/security_solution/server/lists_integration/endpoint/validators/base_validator.ts b/x-pack/solutions/security/plugins/security_solution/server/lists_integration/endpoint/validators/base_validator.ts index f01436755a985..53f1f6755a887 100644 --- a/x-pack/solutions/security/plugins/security_solution/server/lists_integration/endpoint/validators/base_validator.ts +++ b/x-pack/solutions/security/plugins/security_solution/server/lists_integration/endpoint/validators/base_validator.ts @@ -5,7 +5,7 @@ * 2.0. */ -import type { KibanaRequest } from '@kbn/core/server'; +import type { KibanaRequest, Logger } from '@kbn/core/server'; import { schema } from '@kbn/config-schema'; import { isEqual } from 'lodash/fp'; import type { ExceptionListItemSchema } from '@kbn/securitysolution-io-ts-list-types'; @@ -29,7 +29,7 @@ import { import { EndpointArtifactExceptionValidationError } from './errors'; import { EndpointExceptionsValidationError } from './endpoint_exception_errors'; -const NO_GLOBAL_ARTIFACT_AUTHZ_MESSAGE = i18n.translate( +const OWNER_SPACE_ID_TAG_MANAGEMENT_NOT_ALLOWED_MESSAGE = i18n.translate( 'xpack.securitySolution.baseValidator.noGlobalArtifactAuthzApiMessage', { defaultMessage: @@ -37,6 +37,23 @@ const NO_GLOBAL_ARTIFACT_AUTHZ_MESSAGE = i18n.translate( } ); +export const GLOBAL_ARTIFACT_MANAGEMENT_NOT_ALLOWED_MESSAGE = i18n.translate( + 'xpack.securitySolution.baseValidator.noGlobalArtifactManagementMessage', + { + defaultMessage: + 'Management of global artifacts requires additional privilege (global artifact management)', + } +); + +const ITEM_CANNOT_BE_MANAGED_IN_CURRENT_SPACE_MESSAGE = (spaceIds: string[]): string => + i18n.translate('xpack.securitySolution.baseValidator.cannotManageItemInCurrentSpace', { + defaultMessage: `Updates to this shared item can only be done from the following space {numberOfSpaces, plural, one {ID} other {IDs} }: {itemOwnerSpaces} (or by someone having global artifact management privilege)`, + values: { + numberOfSpaces: spaceIds.length, + itemOwnerSpaces: spaceIds.join(', '), + }, + }); + export const BasicEndpointExceptionDataSchema = schema.object( { // must have a name @@ -66,6 +83,7 @@ export const BasicEndpointExceptionDataSchema = schema.object( */ export class BaseValidator { private readonly endpointAuthzPromise: ReturnType; + protected readonly logger: Logger; constructor( protected readonly endpointAppContext: EndpointAppContextService, @@ -74,6 +92,8 @@ export class BaseValidator { */ private readonly request?: KibanaRequest ) { + this.logger = endpointAppContext.createLogger(this.constructor.name ?? 'artifactBaseValidator'); + if (this.request) { this.endpointAuthzPromise = this.endpointAppContext.getEndpointAuthz(this.request); } else { @@ -104,8 +124,8 @@ export class BaseValidator { } } - protected isItemByPolicy(item: ExceptionItemLikeOptions): boolean { - return isArtifactByPolicy(item); + protected isItemByPolicy(item: Partial>): boolean { + return isArtifactByPolicy(item as Pick); } protected async isAllowedToCreateArtifactsByPolicy(): Promise { @@ -221,7 +241,7 @@ export class BaseValidator { !(await this.endpointAuthzPromise).canManageGlobalArtifacts ) { throw new EndpointArtifactExceptionValidationError( - `Endpoint authorization failure. ${NO_GLOBAL_ARTIFACT_AUTHZ_MESSAGE}`, + `${ENDPOINT_AUTHZ_ERROR_MESSAGE}. ${OWNER_SPACE_ID_TAG_MANAGEMENT_NOT_ALLOWED_MESSAGE}`, 403 ); } @@ -245,7 +265,7 @@ export class BaseValidator { (ownerSpaceIds.length === 1 && ownerSpaceIds[0] !== activeSpaceId) ) { throw new EndpointArtifactExceptionValidationError( - `Endpoint authorization failure. ${NO_GLOBAL_ARTIFACT_AUTHZ_MESSAGE}`, + `${ENDPOINT_AUTHZ_ERROR_MESSAGE}. ${OWNER_SPACE_ID_TAG_MANAGEMENT_NOT_ALLOWED_MESSAGE}`, 403 ); } @@ -282,4 +302,78 @@ export class BaseValidator { setArtifactOwnerSpaceId(item, await this.getActiveSpaceId()); } } + + protected async validateCanCreateGlobalArtifacts(item: ExceptionItemLikeOptions): Promise { + if (this.endpointAppContext.experimentalFeatures.endpointManagementSpaceAwarenessEnabled) { + if ( + !this.isItemByPolicy(item) && + !(await this.endpointAuthzPromise).canManageGlobalArtifacts + ) { + throw new EndpointArtifactExceptionValidationError( + `${ENDPOINT_AUTHZ_ERROR_MESSAGE}. ${GLOBAL_ARTIFACT_MANAGEMENT_NOT_ALLOWED_MESSAGE}`, + 403 + ); + } + } + } + + protected async validateCanUpdateItemInActiveSpace( + updatedItem: Partial>, + currentSavedItem: ExceptionListItemSchema + ): Promise { + if (this.endpointAppContext.experimentalFeatures.endpointManagementSpaceAwarenessEnabled) { + // Those with global artifact management privilege can do it all + if ((await this.endpointAuthzPromise).canManageGlobalArtifacts) { + return; + } + + // If either the updated item or the saved item is a global artifact, then + // error out - user needs global artifact management privilege + if (!this.isItemByPolicy(updatedItem) || !this.isItemByPolicy(currentSavedItem)) { + throw new EndpointArtifactExceptionValidationError( + `${ENDPOINT_AUTHZ_ERROR_MESSAGE}. ${GLOBAL_ARTIFACT_MANAGEMENT_NOT_ALLOWED_MESSAGE}`, + 403 + ); + } + + const itemOwnerSpaces = getArtifactOwnerSpaceIds(currentSavedItem); + + // Per-space items can only be managed from one of the `ownerSpaceId`'s + if (!itemOwnerSpaces.includes(await this.getActiveSpaceId())) { + throw new EndpointArtifactExceptionValidationError( + ITEM_CANNOT_BE_MANAGED_IN_CURRENT_SPACE_MESSAGE(itemOwnerSpaces), + 403 + ); + } + } + } + + protected async validateCanDeleteItemInActiveSpace( + currentSavedItem: ExceptionListItemSchema + ): Promise { + if (this.endpointAppContext.experimentalFeatures.endpointManagementSpaceAwarenessEnabled) { + // Those with global artifact management privilege can do it all + if ((await this.endpointAuthzPromise).canManageGlobalArtifacts) { + return; + } + + // If item is a global artifact then error - user must have global artifact management privilege + if (!this.isItemByPolicy(currentSavedItem)) { + throw new EndpointArtifactExceptionValidationError( + `${ENDPOINT_AUTHZ_ERROR_MESSAGE}. ${GLOBAL_ARTIFACT_MANAGEMENT_NOT_ALLOWED_MESSAGE}`, + 403 + ); + } + + const itemOwnerSpaces = getArtifactOwnerSpaceIds(currentSavedItem); + + // Per-space items can only be deleted from one of the `ownerSpaceId`'s + if (!itemOwnerSpaces.includes(await this.getActiveSpaceId())) { + throw new EndpointArtifactExceptionValidationError( + ITEM_CANNOT_BE_MANAGED_IN_CURRENT_SPACE_MESSAGE(itemOwnerSpaces), + 403 + ); + } + } + } } diff --git a/x-pack/solutions/security/plugins/security_solution/server/lists_integration/endpoint/validators/blocklist_validator.ts b/x-pack/solutions/security/plugins/security_solution/server/lists_integration/endpoint/validators/blocklist_validator.ts index 107469be36a11..bd8c66fee3637 100644 --- a/x-pack/solutions/security/plugins/security_solution/server/lists_integration/endpoint/validators/blocklist_validator.ts +++ b/x-pack/solutions/security/plugins/security_solution/server/lists_integration/endpoint/validators/blocklist_validator.ts @@ -250,8 +250,9 @@ export class BlocklistValidator extends BaseValidator { return item; } - async validatePreDeleteItem(): Promise { + async validatePreDeleteItem(currentItem: ExceptionListItemSchema): Promise { await this.validateHasWritePrivilege(); + await this.validateCanDeleteItemInActiveSpace(currentItem); } async validatePreGetOneItem(): Promise { @@ -301,6 +302,7 @@ export class BlocklistValidator extends BaseValidator { await this.validateByPolicyItem(updatedItem); await this.validateUpdateOwnerSpaceIds(updatedItem, currentItem); + await this.validateCanUpdateItemInActiveSpace(_updatedItem, currentItem); if (!hasArtifactOwnerSpaceId(_updatedItem)) { await this.setOwnerSpaceId(_updatedItem); diff --git a/x-pack/solutions/security/plugins/security_solution/server/lists_integration/endpoint/validators/blocklists_validator.test.ts b/x-pack/solutions/security/plugins/security_solution/server/lists_integration/endpoint/validators/blocklists_validator.test.ts new file mode 100644 index 0000000000000..fe66987d8aa78 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/server/lists_integration/endpoint/validators/blocklists_validator.test.ts @@ -0,0 +1,29 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { BlocklistValidator } from './blocklist_validator'; +import { httpServerMock } from '@kbn/core-http-server-mocks'; +import { createMockEndpointAppContextService } from '../../../endpoint/mocks'; + +describe('Blocklists API validations', () => { + it('should initialize', () => { + expect( + new BlocklistValidator( + createMockEndpointAppContextService(), + httpServerMock.createKibanaRequest() + ) + ).not.toBeUndefined(); + }); + // ----------------------------------------------------------------------------- + // + // API TESTS FOR THIS ARTIFACT TYPE SHOULD BE COVERED WITH INTEGRATION TESTS. + // ADD THEM HERE: + // + // `x-pack/test/security_solution_api_integration/test_suites/edr_workflows` + // + // ----------------------------------------------------------------------------- +}); diff --git a/x-pack/solutions/security/plugins/security_solution/server/lists_integration/endpoint/validators/endpoint_exceptions_validator.test.ts b/x-pack/solutions/security/plugins/security_solution/server/lists_integration/endpoint/validators/endpoint_exceptions_validator.test.ts new file mode 100644 index 0000000000000..3fa62472acffd --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/server/lists_integration/endpoint/validators/endpoint_exceptions_validator.test.ts @@ -0,0 +1,29 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { httpServerMock } from '@kbn/core-http-server-mocks'; +import { createMockEndpointAppContextService } from '../../../endpoint/mocks'; +import { EndpointExceptionsValidator } from './endpoint_exceptions_validator'; + +describe('Endpoint Exceptions API validations', () => { + it('should initialize', () => { + expect( + new EndpointExceptionsValidator( + createMockEndpointAppContextService(), + httpServerMock.createKibanaRequest() + ) + ).not.toBeUndefined(); + }); + // ----------------------------------------------------------------------------- + // + // API TESTS FOR THIS ARTIFACT TYPE SHOULD BE COVERED WITH INTEGRATION TESTS. + // ADD THEM HERE: + // + // `x-pack/test/security_solution_api_integration/test_suites/edr_workflows` + // + // ----------------------------------------------------------------------------- +}); diff --git a/x-pack/solutions/security/plugins/security_solution/server/lists_integration/endpoint/validators/endpoint_exceptions_validator.ts b/x-pack/solutions/security/plugins/security_solution/server/lists_integration/endpoint/validators/endpoint_exceptions_validator.ts index 5989bc06efb37..8c661b9da6dc7 100644 --- a/x-pack/solutions/security/plugins/security_solution/server/lists_integration/endpoint/validators/endpoint_exceptions_validator.ts +++ b/x-pack/solutions/security/plugins/security_solution/server/lists_integration/endpoint/validators/endpoint_exceptions_validator.ts @@ -11,8 +11,9 @@ import type { } from '@kbn/lists-plugin/server'; import { ENDPOINT_LIST_ID } from '@kbn/securitysolution-list-constants'; import type { ExceptionListItemSchema } from '@kbn/securitysolution-io-ts-list-types'; +import { EndpointExceptionsValidationError } from './endpoint_exception_errors'; import { hasArtifactOwnerSpaceId } from '../../../../common/endpoint/service/artifacts/utils'; -import { BaseValidator } from './base_validator'; +import { BaseValidator, GLOBAL_ARTIFACT_MANAGEMENT_NOT_ALLOWED_MESSAGE } from './base_validator'; export class EndpointExceptionsValidator extends BaseValidator { static isEndpointException(item: { listId: string }): boolean { @@ -24,7 +25,21 @@ export class EndpointExceptionsValidator extends BaseValidator { } protected async validateHasWritePrivilege(): Promise { - return this.validateHasEndpointExceptionsPrivileges('canWriteEndpointExceptions'); + await this.validateHasEndpointExceptionsPrivileges('canWriteEndpointExceptions'); + + if (this.endpointAppContext.experimentalFeatures.endpointManagementSpaceAwarenessEnabled) { + // Endpoint Exceptions are currently ONLY global, so we need to make sure the user + // also has the new Global Artifacts privilege + try { + await this.validateHasPrivilege('canManageGlobalArtifacts'); + } catch (error) { + // We provide a more detailed error here + throw new EndpointExceptionsValidationError( + `${error.message}. ${GLOBAL_ARTIFACT_MANAGEMENT_NOT_ALLOWED_MESSAGE}`, + 403 + ); + } + } } async validatePreCreateItem(item: CreateExceptionListItemOptions) { @@ -50,8 +65,9 @@ export class EndpointExceptionsValidator extends BaseValidator { return item; } - async validatePreDeleteItem(): Promise { + async validatePreDeleteItem(currentItem: ExceptionListItemSchema): Promise { await this.validateHasWritePrivilege(); + await this.validateCanDeleteItemInActiveSpace(currentItem); } async validatePreGetOneItem(): Promise { diff --git a/x-pack/solutions/security/plugins/security_solution/server/lists_integration/endpoint/validators/event_filter_validator.test.ts b/x-pack/solutions/security/plugins/security_solution/server/lists_integration/endpoint/validators/event_filter_validator.test.ts new file mode 100644 index 0000000000000..9b86c85aec60f --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/server/lists_integration/endpoint/validators/event_filter_validator.test.ts @@ -0,0 +1,29 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { httpServerMock } from '@kbn/core-http-server-mocks'; +import { createMockEndpointAppContextService } from '../../../endpoint/mocks'; +import { EventFilterValidator } from './event_filter_validator'; + +describe('Endpoint Exceptions API validations', () => { + it('should initialize', () => { + expect( + new EventFilterValidator( + createMockEndpointAppContextService(), + httpServerMock.createKibanaRequest() + ) + ).not.toBeUndefined(); + }); + // ----------------------------------------------------------------------------- + // + // API TESTS FOR THIS ARTIFACT TYPE SHOULD BE COVERED WITH INTEGRATION TESTS. + // ADD THEM HERE: + // + // `x-pack/test/security_solution_api_integration/test_suites/edr_workflows` + // + // ----------------------------------------------------------------------------- +}); diff --git a/x-pack/solutions/security/plugins/security_solution/server/lists_integration/endpoint/validators/event_filter_validator.ts b/x-pack/solutions/security/plugins/security_solution/server/lists_integration/endpoint/validators/event_filter_validator.ts index 3b1b4a44f74c8..6eb1d43214d4d 100644 --- a/x-pack/solutions/security/plugins/security_solution/server/lists_integration/endpoint/validators/event_filter_validator.ts +++ b/x-pack/solutions/security/plugins/security_solution/server/lists_integration/endpoint/validators/event_filter_validator.ts @@ -89,6 +89,7 @@ export class EventFilterValidator extends BaseValidator { await this.validateByPolicyItem(updatedItem); await this.validateUpdateOwnerSpaceIds(_updatedItem, currentItem); + await this.validateCanUpdateItemInActiveSpace(_updatedItem, currentItem); if (!hasArtifactOwnerSpaceId(_updatedItem)) { await this.setOwnerSpaceId(_updatedItem); @@ -115,8 +116,9 @@ export class EventFilterValidator extends BaseValidator { await this.validateHasReadPrivilege(); } - async validatePreDeleteItem(): Promise { + async validatePreDeleteItem(currentItem: ExceptionListItemSchema): Promise { await this.validateHasWritePrivilege(); + await this.validateCanDeleteItemInActiveSpace(currentItem); } async validatePreExport(): Promise { diff --git a/x-pack/solutions/security/plugins/security_solution/server/lists_integration/endpoint/validators/host_isolation_exceptions_validator.test.ts b/x-pack/solutions/security/plugins/security_solution/server/lists_integration/endpoint/validators/host_isolation_exceptions_validator.test.ts new file mode 100644 index 0000000000000..3447f49e1375a --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/server/lists_integration/endpoint/validators/host_isolation_exceptions_validator.test.ts @@ -0,0 +1,29 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { httpServerMock } from '@kbn/core-http-server-mocks'; +import { createMockEndpointAppContextService } from '../../../endpoint/mocks'; +import { HostIsolationExceptionsValidator } from './host_isolation_exceptions_validator'; + +describe('Endpoint Exceptions API validations', () => { + it('should initialize', () => { + expect( + new HostIsolationExceptionsValidator( + createMockEndpointAppContextService(), + httpServerMock.createKibanaRequest() + ) + ).not.toBeUndefined(); + }); + // ----------------------------------------------------------------------------- + // + // API TESTS FOR THIS ARTIFACT TYPE SHOULD BE COVERED WITH INTEGRATION TESTS. + // ADD THEM HERE: + // + // `x-pack/test/security_solution_api_integration/test_suites/edr_workflows` + // + // ----------------------------------------------------------------------------- +}); diff --git a/x-pack/solutions/security/plugins/security_solution/server/lists_integration/endpoint/validators/host_isolation_exceptions_validator.ts b/x-pack/solutions/security/plugins/security_solution/server/lists_integration/endpoint/validators/host_isolation_exceptions_validator.ts index 353a5eea00402..8cd2e89e4c968 100644 --- a/x-pack/solutions/security/plugins/security_solution/server/lists_integration/endpoint/validators/host_isolation_exceptions_validator.ts +++ b/x-pack/solutions/security/plugins/security_solution/server/lists_integration/endpoint/validators/host_isolation_exceptions_validator.ts @@ -97,6 +97,7 @@ export class HostIsolationExceptionsValidator extends BaseValidator { await this.validateHostIsolationData(updatedItem); await this.validateByPolicyItem(updatedItem); await this.validateUpdateOwnerSpaceIds(_updatedItem, currentItem); + await this.validateCanUpdateItemInActiveSpace(_updatedItem, currentItem); if (!hasArtifactOwnerSpaceId(_updatedItem)) { await this.setOwnerSpaceId(_updatedItem); @@ -113,8 +114,9 @@ export class HostIsolationExceptionsValidator extends BaseValidator { await this.validateHasReadPrivilege(); } - async validatePreDeleteItem(): Promise { + async validatePreDeleteItem(currentItem: ExceptionListItemSchema): Promise { await this.validateHasDeletePrivilege(); + await this.validateCanDeleteItemInActiveSpace(currentItem); } async validatePreExport(): Promise { diff --git a/x-pack/solutions/security/plugins/security_solution/server/lists_integration/endpoint/validators/mocks.ts b/x-pack/solutions/security/plugins/security_solution/server/lists_integration/endpoint/validators/mocks.ts index dd77c78fcb3b8..d31b6d2fccb26 100644 --- a/x-pack/solutions/security/plugins/security_solution/server/lists_integration/endpoint/validators/mocks.ts +++ b/x-pack/solutions/security/plugins/security_solution/server/lists_integration/endpoint/validators/mocks.ts @@ -7,9 +7,14 @@ import type { ExceptionListItemSchema } from '@kbn/securitysolution-io-ts-list-types'; import { listMock } from '@kbn/lists-plugin/server/mocks'; +import { DEFAULT_SPACE_ID } from '@kbn/spaces-plugin/common'; +import { buildSpaceOwnerIdTag } from '../../../../common/endpoint/service/artifacts/utils'; import { BaseValidator } from './base_validator'; import type { ExceptionItemLikeOptions } from '../types'; -import { BY_POLICY_ARTIFACT_TAG_PREFIX } from '../../../../common/endpoint/service/artifacts'; +import { + BY_POLICY_ARTIFACT_TAG_PREFIX, + GLOBAL_ARTIFACT_TAG, +} from '../../../../common/endpoint/service/artifacts'; /** * Exposes all `protected` methods of `BaseValidator` by prefixing them with an underscore. @@ -56,6 +61,21 @@ export class BaseValidatorMock extends BaseValidator { ): Promise { return this.validateUpdateOwnerSpaceIds(updatedItem, currentItem); } + + _validateCanCreateGlobalArtifacts(item: ExceptionItemLikeOptions): Promise { + return this.validateCanCreateGlobalArtifacts(item); + } + + _validateCanUpdateItemInActiveSpace( + updatedItem: Partial>, + currentSavedItem: ExceptionListItemSchema + ): Promise { + return this.validateCanUpdateItemInActiveSpace(updatedItem, currentSavedItem); + } + + _validateCanDeleteItemInActiveSpace(currentSavedItem: ExceptionListItemSchema): Promise { + return this.validateCanDeleteItemInActiveSpace(currentSavedItem); + } } export const createExceptionItemLikeOptionsMock = ( @@ -69,3 +89,14 @@ export const createExceptionItemLikeOptionsMock = ( ...overrides, }; }; + +export const createExceptionListItemMock = ( + overrides: Partial = {} +): ExceptionListItemSchema => { + return listMock.getExceptionListItemSchemaMock({ + namespace_type: 'agnostic', + os_types: ['windows'], + tags: [GLOBAL_ARTIFACT_TAG, buildSpaceOwnerIdTag(DEFAULT_SPACE_ID)], + ...overrides, + }); +}; diff --git a/x-pack/solutions/security/plugins/security_solution/server/lists_integration/endpoint/validators/trusted_app_validator.test.ts b/x-pack/solutions/security/plugins/security_solution/server/lists_integration/endpoint/validators/trusted_app_validator.test.ts new file mode 100644 index 0000000000000..6038d6435fc92 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/server/lists_integration/endpoint/validators/trusted_app_validator.test.ts @@ -0,0 +1,29 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { httpServerMock } from '@kbn/core-http-server-mocks'; +import { createMockEndpointAppContextService } from '../../../endpoint/mocks'; +import { TrustedAppValidator } from './trusted_app_validator'; + +describe('Endpoint Exceptions API validations', () => { + it('should initialize', () => { + expect( + new TrustedAppValidator( + createMockEndpointAppContextService(), + httpServerMock.createKibanaRequest() + ) + ).not.toBeUndefined(); + }); + // ----------------------------------------------------------------------------- + // + // API TESTS FOR THIS ARTIFACT TYPE SHOULD BE COVERED WITH INTEGRATION TESTS. + // ADD THEM HERE: + // + // `x-pack/test/security_solution_api_integration/test_suites/edr_workflows` + // + // ----------------------------------------------------------------------------- +}); diff --git a/x-pack/solutions/security/plugins/security_solution/server/lists_integration/endpoint/validators/trusted_app_validator.ts b/x-pack/solutions/security/plugins/security_solution/server/lists_integration/endpoint/validators/trusted_app_validator.ts index 6492a22980fff..da9a6516547bc 100644 --- a/x-pack/solutions/security/plugins/security_solution/server/lists_integration/endpoint/validators/trusted_app_validator.ts +++ b/x-pack/solutions/security/plugins/security_solution/server/lists_integration/endpoint/validators/trusted_app_validator.ts @@ -208,14 +208,16 @@ export class TrustedAppValidator extends BaseValidator { await this.validateCanCreateByPolicyArtifacts(item); await this.validateByPolicyItem(item); await this.validateCreateOwnerSpaceIds(item); + await this.validateCanCreateGlobalArtifacts(item); await this.setOwnerSpaceId(item); return item; } - async validatePreDeleteItem(): Promise { + async validatePreDeleteItem(currentItem: ExceptionListItemSchema): Promise { await this.validateHasWritePrivilege(); + await this.validateCanDeleteItemInActiveSpace(currentItem); } async validatePreGetOneItem(): Promise { @@ -260,6 +262,7 @@ export class TrustedAppValidator extends BaseValidator { await this.validateByPolicyItem(updatedItem); await this.validateUpdateOwnerSpaceIds(_updatedItem, currentItem); + await this.validateCanUpdateItemInActiveSpace(_updatedItem, currentItem); if (!hasArtifactOwnerSpaceId(_updatedItem)) { await this.setOwnerSpaceId(_updatedItem); diff --git a/x-pack/solutions/security/plugins/security_solution/server/ui_settings.ts b/x-pack/solutions/security/plugins/security_solution/server/ui_settings.ts index 0f18575f59563..02109d4bb5a35 100644 --- a/x-pack/solutions/security/plugins/security_solution/server/ui_settings.ts +++ b/x-pack/solutions/security/plugins/security_solution/server/ui_settings.ts @@ -42,6 +42,7 @@ import { EXCLUDED_DATA_TIERS_FOR_RULE_EXECUTION, ENABLE_VISUALIZATIONS_IN_FLYOUT_SETTING, ENABLE_GRAPH_VISUALIZATION_SETTING, + ENABLE_ASSET_INVENTORY_SETTING, } from '../common/constants'; import type { ExperimentalFeatures } from '../common/experimental_features'; import { LogLevelSetting } from '../common/api/detection_engine/rule_monitoring'; @@ -253,6 +254,23 @@ export const initUiSettings = ( schema: schema.boolean(), solution: 'security', }, + [ENABLE_ASSET_INVENTORY_SETTING]: { + name: i18n.translate('xpack.securitySolution.uiSettings.enableAssetInventoryLabel', { + defaultMessage: 'Enable Security Asset Inventory', + }), + description: i18n.translate( + 'xpack.securitySolution.uiSettings.enableAssetInventoryDescription', + { + defaultMessage: `[technical preview] Enable the Asset Inventory experience within the Security Solution. When enabled, you can access the new Inventory feature through the Security Solution navigation. Note: Disabling this setting will not disable the Entity Store or clear persistent Entity metadata. To manage or disable the Entity Store, please visit the Entity Store Management page.`, + values: { em: (chunks) => `${chunks}` }, + } + ), + type: 'boolean', + value: false, + category: [APP_ID], + requiresPageReload: true, + schema: schema.boolean(), + }, [DEFAULT_RULES_TABLE_REFRESH_SETTING]: { name: i18n.translate('xpack.securitySolution.uiSettings.rulesTableRefresh', { defaultMessage: 'Rules auto refresh', @@ -381,7 +399,7 @@ export const initUiSettings = ( value: DEFAULT_MAX_UNASSOCIATED_NOTES, schema: schema.number({ min: 1, - max: 1000, + max: 10000, defaultValue: DEFAULT_MAX_UNASSOCIATED_NOTES, }), category: [APP_ID], diff --git a/x-pack/solutions/security/plugins/security_solution_ess/public/upselling/lazy_upselling.tsx b/x-pack/solutions/security/plugins/security_solution_ess/public/upselling/lazy_upselling.tsx index 56775b6c4433e..f77c5a32efe6f 100644 --- a/x-pack/solutions/security/plugins/security_solution_ess/public/upselling/lazy_upselling.tsx +++ b/x-pack/solutions/security/plugins/security_solution_ess/public/upselling/lazy_upselling.tsx @@ -19,6 +19,14 @@ export const EntityAnalyticsUpsellingSectionLazy = withSuspenseUpsell( ) ); +export const SiemMigrationsStartUpsellSectionLazy = withSuspenseUpsell( + lazy(() => + import('./sections/siem_migration_start').then(({ SiemMigrationStartUpsellSection }) => ({ + default: SiemMigrationStartUpsellSection, + })) + ) +); + export const EntityAnalyticsUpsellingPageLazy = lazy(() => import('./pages/entity_analytics_upselling').then(({ EntityAnalyticsUpsellingPageESS }) => ({ default: EntityAnalyticsUpsellingPageESS, diff --git a/x-pack/solutions/security/plugins/security_solution_ess/public/upselling/register_upsellings.tsx b/x-pack/solutions/security/plugins/security_solution_ess/public/upselling/register_upsellings.tsx index 36a3fc13e240e..eb7124cb1c942 100644 --- a/x-pack/solutions/security/plugins/security_solution_ess/public/upselling/register_upsellings.tsx +++ b/x-pack/solutions/security/plugins/security_solution_ess/public/upselling/register_upsellings.tsx @@ -31,6 +31,7 @@ import { AttackDiscoveryUpsellingPageLazy, EntityAnalyticsUpsellingPageLazy, EntityAnalyticsUpsellingSectionLazy, + SiemMigrationsStartUpsellSectionLazy, } from './lazy_upselling'; interface UpsellingsConfig { @@ -111,6 +112,11 @@ export const upsellingSections: UpsellingSections = [ minimumLicenseRequired: 'platinum', component: EntityAnalyticsUpsellingSectionLazy, }, + { + id: 'siem_migrations_start', + minimumLicenseRequired: 'enterprise', + component: SiemMigrationsStartUpsellSectionLazy, + }, ]; // Upsellings for sections, linked by arbitrary ids diff --git a/x-pack/solutions/security/plugins/security_solution_ess/public/upselling/sections/siem_migration_start.tsx b/x-pack/solutions/security/plugins/security_solution_ess/public/upselling/sections/siem_migration_start.tsx new file mode 100644 index 0000000000000..3d0a370146ef9 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution_ess/public/upselling/sections/siem_migration_start.tsx @@ -0,0 +1,24 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { SiemMigrationStartUpsellSection as SiemMigrationStartUpsellSectionCommon } from '@kbn/security-solution-upselling/sections/siem_migrations_start'; +import { useKibana } from '../../common/services'; +import * as i18n from '../translations'; + +export const SiemMigrationStartUpsellSection = () => { + const { services } = useKibana(); + return ( + + ); +}; diff --git a/x-pack/solutions/security/plugins/security_solution_ess/public/upselling/translations.ts b/x-pack/solutions/security/plugins/security_solution_ess/public/upselling/translations.ts index 9af27d3ca5242..867755b9ba9d5 100644 --- a/x-pack/solutions/security/plugins/security_solution_ess/public/upselling/translations.ts +++ b/x-pack/solutions/security/plugins/security_solution_ess/public/upselling/translations.ts @@ -14,3 +14,18 @@ export const UPGRADE_LICENSE_MESSAGE = (requiredLicense: string) => requiredLicense, }, }); + +export const SIEM_MIGRATION_UPSELLING_TITLE = (requiredLicense: string) => + i18n.translate('xpack.securitySolutionEss.upselling.siemMigrations.title', { + defaultMessage: '{requiredLicense} license required', + values: { + requiredLicense, + }, + }); + +export const SIEM_MIGRATION_UPGRADE_LICENSE_MESSAGE = i18n.translate( + 'xpack.securitySolutionEss.upselling.siemMigrations.upgradeLicenseMessage', + { + defaultMessage: 'To use this feature, upgrade your Elastic subscription level.', + } +); diff --git a/x-pack/solutions/security/plugins/security_solution_serverless/public/upselling/lazy_upselling.tsx b/x-pack/solutions/security/plugins/security_solution_serverless/public/upselling/lazy_upselling.tsx index 526654a6f4509..014ba27debec4 100644 --- a/x-pack/solutions/security/plugins/security_solution_serverless/public/upselling/lazy_upselling.tsx +++ b/x-pack/solutions/security/plugins/security_solution_serverless/public/upselling/lazy_upselling.tsx @@ -41,6 +41,14 @@ export const EntityAnalyticsUpsellingSectionLazy = withSuspenseUpsell( ) ); +export const SiemMigrationsStartUpsellSectionLazy = withSuspenseUpsell( + lazy(() => + import('./sections/siem_migrations/siem_migrations_start').then( + ({ SiemMigrationStartUpsellSection }) => ({ default: SiemMigrationStartUpsellSection }) + ) + ) +); + export const AttackDiscoveryUpsellingPageLazy = withSuspenseUpsell( lazy(() => import('./pages/attack_discovery').then(({ AttackDiscoveryUpsellingPageServerless }) => ({ diff --git a/x-pack/solutions/security/plugins/security_solution_serverless/public/upselling/sections/siem_migrations/siem_migrations_start.tsx b/x-pack/solutions/security/plugins/security_solution_serverless/public/upselling/sections/siem_migrations/siem_migrations_start.tsx new file mode 100644 index 0000000000000..11d1df1d11510 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution_serverless/public/upselling/sections/siem_migrations/siem_migrations_start.tsx @@ -0,0 +1,19 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import React from 'react'; +import { SiemMigrationStartUpsellSection as SiemMigrationStartUpsellSectionCommon } from '@kbn/security-solution-upselling/sections/siem_migrations_start'; +import * as i18n from '../../translations'; + +export const SiemMigrationStartUpsellSection = () => { + return ( + + ); +}; diff --git a/x-pack/solutions/security/plugins/security_solution_serverless/public/upselling/translations.ts b/x-pack/solutions/security/plugins/security_solution_serverless/public/upselling/translations.ts index f70a36f90348f..39db5f3198b3e 100644 --- a/x-pack/solutions/security/plugins/security_solution_serverless/public/upselling/translations.ts +++ b/x-pack/solutions/security/plugins/security_solution_serverless/public/upselling/translations.ts @@ -26,3 +26,19 @@ export const ADDITIONAL_CHARGES_MESSAGE = i18n.translate( 'Please be aware that activating these features may incur additional charges depending on your subscription plan. Review your plan details carefully to avoid unexpected costs before proceeding.', } ); + +export const SIEM_MIGRATION_UPSELLING_TITLE = (requiredTier: string) => + i18n.translate('xpack.securitySolutionServerless.upselling.siemMigrations.title', { + defaultMessage: 'Security {requiredTier} tier required', + values: { + requiredTier, + }, + }); + +export const SIEM_MIGRATION_UPGRADE_MESSAGE = i18n.translate( + 'xpack.securitySolutionServerless.upselling.siemMigrations.upgradeTierMessage', + { + defaultMessage: + 'To use this feature, you need to upgrade your Elastic Cloud Serverless feature tier. Update your subscription or contact your administrator for assistance.', + } +); diff --git a/x-pack/solutions/security/plugins/security_solution_serverless/public/upselling/upsellings.tsx b/x-pack/solutions/security/plugins/security_solution_serverless/public/upselling/upsellings.tsx index 6079a13ff6d2c..e726917d356b7 100644 --- a/x-pack/solutions/security/plugins/security_solution_serverless/public/upselling/upsellings.tsx +++ b/x-pack/solutions/security/plugins/security_solution_serverless/public/upselling/upsellings.tsx @@ -33,6 +33,7 @@ import { EntityAnalyticsUpsellingPageLazy, EntityAnalyticsUpsellingSectionLazy, OsqueryResponseActionsUpsellingSectionLazy, + SiemMigrationsStartUpsellSectionLazy, ThreatIntelligencePaywallLazy, } from './lazy_upselling'; import * as i18n from './translations'; @@ -141,6 +142,11 @@ export const upsellingSections: UpsellingSections = [ /> ), }, + { + id: 'siem_migrations_start', + pli: ProductFeatureKey.siemMigrations, + component: SiemMigrationsStartUpsellSectionLazy, + }, { id: 'automatic_import', pli: ProductFeatureKey.automaticImport, diff --git a/x-pack/test/api_integration/apis/cloud_security_posture/helper.ts b/x-pack/test/api_integration/apis/cloud_security_posture/helper.ts index 4d244391cf3d3..e828818cf3caf 100644 --- a/x-pack/test/api_integration/apis/cloud_security_posture/helper.ts +++ b/x-pack/test/api_integration/apis/cloud_security_posture/helper.ts @@ -9,8 +9,7 @@ import type { Agent as SuperTestAgent } from 'supertest'; import { ELASTIC_HTTP_VERSION_HEADER } from '@kbn/core-http-common'; import { CLOUD_SECURITY_PLUGIN_VERSION } from '@kbn/cloud-security-posture-plugin/common/constants'; -import { SecurityService } from '@kbn/ftr-common-functional-ui-services'; -import { RoleCredentials } from '@kbn/ftr-common-functional-services'; +import { RoleCredentials, SecurityService } from '@kbn/ftr-common-functional-services'; export async function createPackagePolicy( supertest: SuperTestAgent, diff --git a/x-pack/test/api_integration/apis/telemetry/telemetry.ts b/x-pack/test/api_integration/apis/telemetry/telemetry.ts index f97848e93c3d3..af8d30069d140 100644 --- a/x-pack/test/api_integration/apis/telemetry/telemetry.ts +++ b/x-pack/test/api_integration/apis/telemetry/telemetry.ts @@ -32,7 +32,7 @@ import { ELASTIC_HTTP_VERSION_HEADER, X_ELASTIC_INTERNAL_ORIGIN_REQUEST, } from '@kbn/core-http-common'; -import type { SecurityService } from '@kbn/ftr-common-functional-ui-services'; +import type { SecurityService } from '@kbn/ftr-common-functional-services'; import basicClusterFixture from './fixtures/basiccluster.json'; import multiClusterFixture from './fixtures/multicluster.json'; import type { FtrProviderContext } from '../../ftr_provider_context'; diff --git a/x-pack/test/api_integration/deployment_agnostic/apis/observability/streams/classic.ts b/x-pack/test/api_integration/deployment_agnostic/apis/observability/streams/classic.ts index 4b4b14aeb368d..2a7733da077b4 100644 --- a/x-pack/test/api_integration/deployment_agnostic/apis/observability/streams/classic.ts +++ b/x-pack/test/api_integration/deployment_agnostic/apis/observability/streams/classic.ts @@ -12,7 +12,7 @@ import { StreamsSupertestRepositoryClient, createStreamsRepositoryAdminClient, } from './helpers/repository_client'; -import { disableStreams, enableStreams, fetchDocument, indexDocument } from './helpers/requests'; +import { fetchDocument, indexDocument } from './helpers/requests'; export default function ({ getService }: DeploymentAgnosticFtrProviderContext) { const roleScopedSupertest = getService('roleScopedSupertest'); @@ -27,11 +27,6 @@ export default function ({ getService }: DeploymentAgnosticFtrProviderContext) { describe('Classic streams', () => { before(async () => { apiClient = await createStreamsRepositoryAdminClient(roleScopedSupertest); - await enableStreams(apiClient); - }); - - after(async () => { - await disableStreams(apiClient); }); it('non-wired data streams', async () => { diff --git a/x-pack/test/api_integration/deployment_agnostic/apis/observability/streams/full_flow.ts b/x-pack/test/api_integration/deployment_agnostic/apis/observability/streams/full_flow.ts index 27a5543d3f36b..b1b547f67e365 100644 --- a/x-pack/test/api_integration/deployment_agnostic/apis/observability/streams/full_flow.ts +++ b/x-pack/test/api_integration/deployment_agnostic/apis/observability/streams/full_flow.ts @@ -340,6 +340,47 @@ export default function ({ getService }: DeploymentAgnosticFtrProviderContext) { const response2 = await indexDocument(esClient, 'logs', doc2); expect(response2.result).to.eql('created'); }); + + it('Fork logs to logs.weird-characters', async () => { + const body = { + stream: { + name: 'logs.weird-characters', + }, + if: { + or: [ + { field: '@abc.weird fieldname', operator: 'contains' as const, value: 'route_it' }, + ], + }, + }; + const response = await forkStream(apiClient, 'logs', body); + expect(response).to.have.property('acknowledged', true); + }); + + it('Index documents with weird characters in their field names correctly', async () => { + const doc1 = { + '@timestamp': '2024-01-01T00:00:20.000Z', + '@abc': { + 'weird fieldname': 'Please route_it', + }, + }; + const doc2 = { + '@timestamp': '2024-01-01T00:00:20.000Z', + '@abc': { + 'weird fieldname': 'Keep where it is', + }, + }; + const response1 = await indexDocument(esClient, 'logs', doc1); + expect(response1.result).to.eql('created'); + + const result1 = await fetchDocument(esClient, 'logs.weird-characters', response1._id); + expect(result1._index).to.match(/^\.ds\-logs.weird-characters-.*/); + + const response2 = await indexDocument(esClient, 'logs', doc2); + expect(response2.result).to.eql('created'); + + const result2 = await fetchDocument(esClient, 'logs', response2._id); + expect(result2._index).to.match(/^\.ds\-logs-.*/); + }); }); }); } diff --git a/x-pack/test/api_integration/services/security_solution_api.gen.ts b/x-pack/test/api_integration/services/security_solution_api.gen.ts index 6cdf64afab48f..5cf1dd8c5bc93 100644 --- a/x-pack/test/api_integration/services/security_solution_api.gen.ts +++ b/x-pack/test/api_integration/services/security_solution_api.gen.ts @@ -64,7 +64,6 @@ import { EndpointKillProcessActionRequestBodyInput } from '@kbn/security-solutio import { EndpointScanActionRequestBodyInput } from '@kbn/security-solution-plugin/common/api/endpoint/actions/response_actions/scan/scan.gen'; import { EndpointSuspendProcessActionRequestBodyInput } from '@kbn/security-solution-plugin/common/api/endpoint/actions/response_actions/suspend_process/suspend_process.gen'; import { EndpointUnisolateActionRequestBodyInput } from '@kbn/security-solution-plugin/common/api/endpoint/actions/response_actions/unisolate/unisolate.gen'; -import { EndpointUploadActionRequestBodyInput } from '@kbn/security-solution-plugin/common/api/endpoint/actions/response_actions/upload/upload.gen'; import { ExportRulesRequestQueryInput, ExportRulesRequestBodyInput, @@ -716,13 +715,12 @@ If a record already exists for the specified entity, that record is overwritten /** * Upload a file to an endpoint. */ - endpointUploadAction(props: EndpointUploadActionProps, kibanaSpace: string = 'default') { + endpointUploadAction(kibanaSpace: string = 'default') { return supertest .post(routeWithNamespace('/api/endpoint/action/upload', kibanaSpace)) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') - .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') - .send(props.body as object); + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana'); }, entityStoreGetPrivileges(kibanaSpace: string = 'default') { return supertest @@ -1751,9 +1749,6 @@ export interface EndpointSuspendProcessActionProps { export interface EndpointUnisolateActionProps { body: EndpointUnisolateActionRequestBodyInput; } -export interface EndpointUploadActionProps { - body: EndpointUploadActionRequestBodyInput; -} export interface ExportRulesProps { query: ExportRulesRequestQueryInput; body: ExportRulesRequestBodyInput; diff --git a/x-pack/test/api_integration/services/security_solution_osquery_api.gen.ts b/x-pack/test/api_integration/services/security_solution_osquery_api.gen.ts index 7f553041d53d1..384500062155e 100644 --- a/x-pack/test/api_integration/services/security_solution_osquery_api.gen.ts +++ b/x-pack/test/api_integration/services/security_solution_osquery_api.gen.ts @@ -31,10 +31,7 @@ import { OsqueryDeleteSavedQueryRequestParamsInput } from '@kbn/osquery-plugin/c import { OsqueryFindLiveQueriesRequestQueryInput } from '@kbn/osquery-plugin/common/api/live_query/live_queries.gen'; import { OsqueryFindPacksRequestQueryInput } from '@kbn/osquery-plugin/common/api/packs/packs.gen'; import { OsqueryFindSavedQueriesRequestQueryInput } from '@kbn/osquery-plugin/common/api/saved_query/saved_query.gen'; -import { - OsqueryGetLiveQueryDetailsRequestQueryInput, - OsqueryGetLiveQueryDetailsRequestParamsInput, -} from '@kbn/osquery-plugin/common/api/live_query/live_queries.gen'; +import { OsqueryGetLiveQueryDetailsRequestParamsInput } from '@kbn/osquery-plugin/common/api/live_query/live_queries.gen'; import { OsqueryGetLiveQueryResultsRequestQueryInput, OsqueryGetLiveQueryResultsRequestParamsInput, @@ -213,8 +210,7 @@ export function SecuritySolutionApiProvider({ getService }: FtrProviderContext) ) .set('kbn-xsrf', 'true') .set(ELASTIC_HTTP_VERSION_HEADER, '2023-10-31') - .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana') - .query(props.query); + .set(X_ELASTIC_INTERNAL_ORIGIN_REQUEST, 'kibana'); }, /** * Get the results of a live query using the query action ID. @@ -367,7 +363,6 @@ export interface OsqueryFindSavedQueriesProps { query: OsqueryFindSavedQueriesRequestQueryInput; } export interface OsqueryGetLiveQueryDetailsProps { - query: OsqueryGetLiveQueryDetailsRequestQueryInput; params: OsqueryGetLiveQueryDetailsRequestParamsInput; } export interface OsqueryGetLiveQueryResultsProps { diff --git a/x-pack/test/common/services/index.ts b/x-pack/test/common/services/index.ts index 6c19691f768b7..26600a046e361 100644 --- a/x-pack/test/common/services/index.ts +++ b/x-pack/test/common/services/index.ts @@ -7,7 +7,6 @@ import { services as kibanaApiIntegrationServices } from '@kbn/test-suites-src/api_integration/services'; import { commonFunctionalServices } from '@kbn/ftr-common-functional-services'; -import { commonFunctionalUIServices } from '@kbn/ftr-common-functional-ui-services'; import { InfraLogViewsServiceProvider } from './infra_log_views'; import { SpacesServiceProvider } from './spaces'; import { SearchSecureService } from './search_secure'; @@ -16,7 +15,6 @@ import { InfraSynthtraceKibanaClientProvider } from './infra_synthtrace_kibana_c export const services = { ...commonFunctionalServices, - ...commonFunctionalUIServices, infraLogViews: InfraLogViewsServiceProvider, supertest: kibanaApiIntegrationServices.supertest, spaces: SpacesServiceProvider, diff --git a/x-pack/test/fleet_api_integration/apis/data_streams/list.ts b/x-pack/test/fleet_api_integration/apis/data_streams/list.ts index 60da59f8f9d6e..aed9a37fb02d2 100644 --- a/x-pack/test/fleet_api_integration/apis/data_streams/list.ts +++ b/x-pack/test/fleet_api_integration/apis/data_streams/list.ts @@ -106,7 +106,8 @@ export default function (providerContext: FtrProviderContext) { }; // Failing ES Promotion: https://github.com/elastic/kibana/issues/151756 - describe('data_streams_list', () => { + // Failing: See https://github.com/elastic/kibana/issues/211515 + describe.skip('data_streams_list', () => { skipIfNoDockerRegistry(providerContext); beforeEach(async () => { diff --git a/x-pack/test/fleet_api_integration/apis/test_users.ts b/x-pack/test/fleet_api_integration/apis/test_users.ts index dbab463508fa2..ac944f0a1e669 100644 --- a/x-pack/test/fleet_api_integration/apis/test_users.ts +++ b/x-pack/test/fleet_api_integration/apis/test_users.ts @@ -5,7 +5,7 @@ * 2.0. */ -import type { SecurityService } from '@kbn/ftr-common-functional-ui-services'; +import type { SecurityService } from '@kbn/ftr-common-functional-services'; export const testUsers: { [rollName: string]: { username: string; password: string; permissions?: any }; diff --git a/x-pack/test/functional/services/observability/alerts/rules_page.ts b/x-pack/test/functional/services/observability/alerts/rules_page.ts index f5b16dc3914ab..588e64fca0bfb 100644 --- a/x-pack/test/functional/services/observability/alerts/rules_page.ts +++ b/x-pack/test/functional/services/observability/alerts/rules_page.ts @@ -12,6 +12,7 @@ const CUSTOM_THRESHOLD_RULE_TYPE_SELECTOR = 'observability.rules.custom_threshol export function ObservabilityAlertsRulesProvider({ getService }: FtrProviderContext) { const testSubjects = getService('testSubjects'); const find = getService('find'); + const log = getService('log'); const getManageRulesPageHref = async () => { const manageRulesPageButton = await testSubjects.find('manageRulesPageButton'); @@ -21,6 +22,7 @@ export function ObservabilityAlertsRulesProvider({ getService }: FtrProviderCont const clickCreateRuleButton = async () => { await testSubjects.existOrFail('createRuleButton'); const createRuleButton = await testSubjects.find('createRuleButton'); + log.debug(`clicking on ${await createRuleButton.getAttribute('innerText')}`); return await createRuleButton.click(); }; diff --git a/x-pack/test/observability_functional/apps/observability/pages/alerts/custom_threshold.ts b/x-pack/test/observability_functional/apps/observability/pages/alerts/custom_threshold.ts index 1f69ef8a6003f..eb8303f29cc2b 100644 --- a/x-pack/test/observability_functional/apps/observability/pages/alerts/custom_threshold.ts +++ b/x-pack/test/observability_functional/apps/observability/pages/alerts/custom_threshold.ts @@ -18,7 +18,7 @@ export default ({ getService, getPageObjects }: FtrProviderContext) => { const logger = getService('log'); const retry = getService('retry'); const toasts = getService('toasts'); - const PageObjects = getPageObjects(['header']); + const pageObjects = getPageObjects(['header']); describe('Custom threshold rule', function () { this.tags('includeFirefox'); @@ -49,6 +49,7 @@ export default ({ getService, getPageObjects }: FtrProviderContext) => { logger, }); await observability.alerts.common.navigateToRulesPage(); + await pageObjects.header.waitUntilLoadingHasFinished(); }); after(async () => { @@ -59,7 +60,7 @@ export default ({ getService, getPageObjects }: FtrProviderContext) => { it('shows the custom threshold rule in the observability section', async () => { await observability.alerts.rulesPage.clickCreateRuleButton(); - await PageObjects.header.waitUntilLoadingHasFinished(); + await pageObjects.header.waitUntilLoadingHasFinished(); await observability.alerts.rulesPage.clickOnObservabilityCategory(); await observability.alerts.rulesPage.clickOnCustomThresholdRule(); }); diff --git a/x-pack/test/observability_functional/apps/observability/pages/alerts/custom_threshold_preview_chart.ts b/x-pack/test/observability_functional/apps/observability/pages/alerts/custom_threshold_preview_chart.ts index 188e37d237d90..637506c91fb90 100644 --- a/x-pack/test/observability_functional/apps/observability/pages/alerts/custom_threshold_preview_chart.ts +++ b/x-pack/test/observability_functional/apps/observability/pages/alerts/custom_threshold_preview_chart.ts @@ -8,8 +8,7 @@ import expect from 'expect'; import { FtrProviderContext } from '../../../../ftr_provider_context'; -export default ({ getService, getPageObject }: FtrProviderContext) => { - const common = getPageObject('common'); +export default ({ getService, getPageObjects }: FtrProviderContext) => { const esArchiver = getService('esArchiver'); const testSubjects = getService('testSubjects'); const kibanaServer = getService('kibanaServer'); @@ -17,6 +16,7 @@ export default ({ getService, getPageObject }: FtrProviderContext) => { const find = getService('find'); const logger = getService('log'); const retry = getService('retry'); + const pageObjects = getPageObjects(['common', 'header']); describe('Custom threshold preview chart', () => { const observability = getService('observability'); @@ -34,6 +34,7 @@ export default ({ getService, getPageObject }: FtrProviderContext) => { logger, }); await observability.alerts.common.navigateToRulesPage(); + await pageObjects.header.waitUntilLoadingHasFinished(); }); after(async () => { @@ -46,7 +47,7 @@ export default ({ getService, getPageObject }: FtrProviderContext) => { await observability.alerts.rulesPage.clickCreateRuleButton(); await observability.alerts.rulesPage.clickOnObservabilityCategory(); await observability.alerts.rulesPage.clickOnCustomThresholdRule(); - await common.sleep(1000); + await pageObjects.common.sleep(1000); expect(await find.existsByCssSelector('[data-rendering-count="2"]')).toBe(true); }); diff --git a/x-pack/test/plugin_api_integration/test_suites/task_manager/check_registered_task_types.ts b/x-pack/test/plugin_api_integration/test_suites/task_manager/check_registered_task_types.ts index a02aca28db358..c947b1d0b9b8e 100644 --- a/x-pack/test/plugin_api_integration/test_suites/task_manager/check_registered_task_types.ts +++ b/x-pack/test/plugin_api_integration/test_suites/task_manager/check_registered_task_types.ts @@ -156,6 +156,7 @@ export default function ({ getService }: FtrProviderContext) { 'fleet:unenroll-inactive-agents-task', 'fleet:unenroll_action:retry', 'fleet:update_agent_tags:retry', + 'fleet:upgrade-agentless-deployments-task', 'fleet:upgrade_action:retry', 'logs-data-telemetry', 'obs-ai-assistant:knowledge-base-migration', diff --git a/x-pack/test/profiling_api_integration/common/create_profiling_users/helpers/create_or_update_user.ts b/x-pack/test/profiling_api_integration/common/create_profiling_users/helpers/create_or_update_user.ts index 2f467d4507e7f..3d7d650487d49 100644 --- a/x-pack/test/profiling_api_integration/common/create_profiling_users/helpers/create_or_update_user.ts +++ b/x-pack/test/profiling_api_integration/common/create_profiling_users/helpers/create_or_update_user.ts @@ -8,7 +8,7 @@ /* eslint-disable no-console */ import { difference, union } from 'lodash'; -import type { SecurityService } from '@kbn/ftr-common-functional-ui-services'; +import type { SecurityService } from '@kbn/ftr-common-functional-services'; import { Elasticsearch, Kibana } from '..'; import { callKibana, isAxiosError } from './call_kibana'; diff --git a/x-pack/test/profiling_api_integration/common/create_profiling_users/index.ts b/x-pack/test/profiling_api_integration/common/create_profiling_users/index.ts index 18a056b001c56..118644ea50e55 100644 --- a/x-pack/test/profiling_api_integration/common/create_profiling_users/index.ts +++ b/x-pack/test/profiling_api_integration/common/create_profiling_users/index.ts @@ -5,7 +5,7 @@ * 2.0. */ import { asyncForEach } from '@kbn/std'; -import type { SecurityService } from '@kbn/ftr-common-functional-ui-services'; +import type { SecurityService } from '@kbn/ftr-common-functional-services'; import { ProfilingUsername, profilingUsers } from './authentication'; import { AbortError, callKibana } from './helpers/call_kibana'; import { createOrUpdateUser } from './helpers/create_or_update_user'; diff --git a/x-pack/test/security_solution_api_integration/test_suites/edr_workflows/spaces/trial_license_complete_tier/artifacts.ts b/x-pack/test/security_solution_api_integration/test_suites/edr_workflows/spaces/trial_license_complete_tier/artifacts.ts index 3856075caa3d6..c576315909210 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/edr_workflows/spaces/trial_license_complete_tier/artifacts.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/edr_workflows/spaces/trial_license_complete_tier/artifacts.ts @@ -212,8 +212,7 @@ export default function ({ getService }: FtrProviderContext) { .expect(403); }); - // TODO:PT Un-skip in next PR. I got a little ahead of myself and added a test for the change that wil come with the next PR. - it.skip('should error if attempting to update a global artifact', async () => { + it('should error if attempting to update a global artifact', async () => { await supertestArtifactManager .put(addSpaceIdToPath('/', spaceOneId, EXCEPTION_LIST_ITEM_URL)) .set('elastic-api-version', '2023-10-31') @@ -229,8 +228,7 @@ export default function ({ getService }: FtrProviderContext) { .expect(403); }); - // TODO:PT Un-skip in next PR. I got a little ahead of myself and added a test for the change that wil come with the next PR. - it.skip('should error when attempting to change a global artifact to per-policy', async () => { + it('should error when attempting to change a global artifact to per-policy', async () => { await supertestArtifactManager .put(addSpaceIdToPath('/', spaceOneId, EXCEPTION_LIST_ITEM_URL)) .set('elastic-api-version', '2023-10-31') @@ -247,6 +245,45 @@ export default function ({ getService }: FtrProviderContext) { ) .expect(403); }); + + it('should error when attempting to update item outside of its owner space id', async () => { + const { body } = await supertestArtifactManager + .put(addSpaceIdToPath('/', spaceTwoId, EXCEPTION_LIST_ITEM_URL)) + .set('elastic-api-version', '2023-10-31') + .set('x-elastic-internal-origin', 'kibana') + .set('kbn-xsrf', 'true') + .on('error', createSupertestErrorLogger(log).ignoreCodes([403])) + .send( + exceptionItemToCreateExceptionItem({ + ...spaceOnePerPolicyArtifact.artifact, + description: 'updating item', + }) + ) + .expect(403); + + expect(body.message).to.eql( + `EndpointArtifactError: Updates to this shared item can only be done from the following space ID: ${spaceOneId} (or by someone having global artifact management privilege)` + ); + }); + + it('should error when attempting to delete item outside of its owner space id', async () => { + const { body } = await supertestArtifactManager + .delete(addSpaceIdToPath('/', spaceTwoId, EXCEPTION_LIST_ITEM_URL)) + .set('elastic-api-version', '2023-10-31') + .set('x-elastic-internal-origin', 'kibana') + .set('kbn-xsrf', 'true') + .on('error', createSupertestErrorLogger(log).ignoreCodes([403])) + .query({ + item_id: spaceOnePerPolicyArtifact.artifact.item_id, + namespace_type: spaceOnePerPolicyArtifact.artifact.namespace_type, + }) + .send() + .expect(403); + + expect(body.message).to.eql( + `EndpointArtifactError: Updates to this shared item can only be done from the following space ID: ${spaceOneId} (or by someone having global artifact management privilege)` + ); + }); }); describe('and user has privilege to manage global artifacts', () => { @@ -332,6 +369,40 @@ export default function ({ getService }: FtrProviderContext) { ) .expect(200); }); + + it('should allow updating items outside of their owner space ids', async () => { + await supertestGlobalArtifactManager + .put(addSpaceIdToPath('/', spaceTwoId, EXCEPTION_LIST_ITEM_URL)) + .set('elastic-api-version', '2023-10-31') + .set('x-elastic-internal-origin', 'kibana') + .set('kbn-xsrf', 'true') + .on('error', createSupertestErrorLogger(log)) + .send( + exceptionItemToCreateExceptionItem({ + ...spaceOneGlobalArtifact.artifact, + description: 'updated from outside of its own space id', + }) + ) + .expect(200); + }); + + it('should allow deleting items outside of their owner space ids', async () => { + await supertestGlobalArtifactManager + .delete(addSpaceIdToPath('/', spaceTwoId, EXCEPTION_LIST_ITEM_URL)) + .set('elastic-api-version', '2023-10-31') + .set('x-elastic-internal-origin', 'kibana') + .set('kbn-xsrf', 'true') + .on('error', createSupertestErrorLogger(log).ignoreCodes([403])) + .query({ + item_id: spaceOnePerPolicyArtifact.artifact.item_id, + namespace_type: spaceOnePerPolicyArtifact.artifact.namespace_type, + }) + .send() + .expect(200); + + // @ts-expect-error + spaceOnePerPolicyArtifact = undefined; + }); }); }); } diff --git a/x-pack/test/security_solution_api_integration/test_suites/entity_analytics/utils/users_and_roles.ts b/x-pack/test/security_solution_api_integration/test_suites/entity_analytics/utils/users_and_roles.ts index a9663cd943a78..1214931632c34 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/entity_analytics/utils/users_and_roles.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/entity_analytics/utils/users_and_roles.ts @@ -5,7 +5,7 @@ * 2.0. */ -import type { SecurityService } from '@kbn/ftr-common-functional-ui-services'; +import type { SecurityService } from '@kbn/ftr-common-functional-services'; export const usersAndRolesFactory = (security: SecurityService) => ({ createRole: async ({ name, privileges }: { name: string; privileges: any }) => { diff --git a/x-pack/test/security_solution_api_integration/test_suites/genai/knowledge_base/entries/trial_license_complete_tier/entries.ts b/x-pack/test/security_solution_api_integration/test_suites/genai/knowledge_base/entries/trial_license_complete_tier/entries.ts index 9ef35c1167138..702161f44aed9 100644 --- a/x-pack/test/security_solution_api_integration/test_suites/genai/knowledge_base/entries/trial_license_complete_tier/entries.ts +++ b/x-pack/test/security_solution_api_integration/test_suites/genai/knowledge_base/entries/trial_license_complete_tier/entries.ts @@ -54,12 +54,10 @@ export default ({ getService }: FtrProviderContext) => { it('should create a new document entry for the current user', async () => { const entry = await createEntry({ supertest, log, entry: documentEntry }); - const expectedDocumentEntry = { + expect(removeServerGeneratedProperties(entry)).toMatchObject({ ...documentEntry, users: [{ name: 'elastic' }], - }; - - expect(removeServerGeneratedProperties(entry)).toEqual(expectedDocumentEntry); + }); }); it('should create a new index entry for the current user', async () => { diff --git a/x-pack/test/security_solution_api_integration/tsconfig.json b/x-pack/test/security_solution_api_integration/tsconfig.json index 4d122d4adc29c..f395da2b562ba 100644 --- a/x-pack/test/security_solution_api_integration/tsconfig.json +++ b/x-pack/test/security_solution_api_integration/tsconfig.json @@ -49,7 +49,6 @@ "@kbn/elastic-assistant-common", "@kbn/search-types", "@kbn/security-plugin", - "@kbn/ftr-common-functional-ui-services", "@kbn/spaces-plugin", "@kbn/elastic-assistant-plugin", "@kbn/test-suites-src", diff --git a/x-pack/test/security_solution_cypress/config.ts b/x-pack/test/security_solution_cypress/config.ts index 59219a368a30d..6b10122213ca7 100644 --- a/x-pack/test/security_solution_cypress/config.ts +++ b/x-pack/test/security_solution_cypress/config.ts @@ -46,7 +46,6 @@ export default async function ({ readConfigFile }: FtrConfigProviderContext) { '--xpack.ruleRegistry.unsafe.legacyMultiTenancy.enabled=true', `--xpack.securitySolution.enableExperimental=${JSON.stringify([ 'alertSuppressionForSequenceEqlRuleEnabled', - 'assetInventoryUXEnabled', ])}`, // mock cloud to enable the guided onboarding tour in e2e tests '--xpack.cloud.id=test', diff --git a/x-pack/test/security_solution_cypress/cypress/e2e/asset_inventory/asset_inventory_page.cy.ts b/x-pack/test/security_solution_cypress/cypress/e2e/asset_inventory/asset_inventory_page.cy.ts index e85da8db0a3bf..4ac47753e2d35 100644 --- a/x-pack/test/security_solution_cypress/cypress/e2e/asset_inventory/asset_inventory_page.cy.ts +++ b/x-pack/test/security_solution_cypress/cypress/e2e/asset_inventory/asset_inventory_page.cy.ts @@ -5,35 +5,46 @@ * 2.0. */ +import { SECURITY_SOLUTION_ENABLE_ASSET_INVENTORY_SETTING } from '@kbn/management-settings-ids'; import { getDataTestSubjectSelector } from '../../helpers/common'; import { login } from '../../tasks/login'; import { visit } from '../../tasks/navigation'; +import { setKibanaSetting } from '../../tasks/api_calls/kibana_advanced_settings'; import { ASSET_INVENTORY_URL } from '../../urls/navigation'; +const NO_PRIVILEGES_BOX = getDataTestSubjectSelector('noPrivilegesPage'); const ALL_ASSETS_TITLE = getDataTestSubjectSelector('all-assets-title'); -describe( - 'Asset Inventory page', - { - env: { - ftrConfig: { - kbnServerArgs: [ - `--xpack.securitySolution.enableExperimental=${JSON.stringify([ - 'assetInventoryUXEnabled', - ])}`, - ], - }, - }, - tags: ['@ess'], - }, - () => { - beforeEach(() => { - login(); - visit(ASSET_INVENTORY_URL); - }); - - it('should display All assets title', () => { - cy.get(ALL_ASSETS_TITLE).should('be.visible'); - }); - } -); +const disableAssetInventory = () => { + setKibanaSetting(SECURITY_SOLUTION_ENABLE_ASSET_INVENTORY_SETTING, false); +}; + +const enableAssetInventory = () => { + setKibanaSetting(SECURITY_SOLUTION_ENABLE_ASSET_INVENTORY_SETTING, true); +}; + +describe('Asset Inventory page - uiSetting disabled', { tags: ['@ess', '@serverless'] }, () => { + beforeEach(() => { + login(); + disableAssetInventory(); + visit(ASSET_INVENTORY_URL); + }); + + it('should display Privileges Required box', () => { + cy.get(NO_PRIVILEGES_BOX).should('be.visible'); + cy.get(ALL_ASSETS_TITLE).should('not.exist'); + }); +}); + +describe('Asset Inventory page - uiSetting enabled', { tags: ['@ess', '@serverless'] }, () => { + beforeEach(() => { + login(); + enableAssetInventory(); + visit(ASSET_INVENTORY_URL); + }); + + it('should display All assets title', () => { + cy.get(NO_PRIVILEGES_BOX).should('not.exist'); + cy.get(ALL_ASSETS_TITLE).should('be.visible'); + }); +}); diff --git a/x-pack/test/security_solution_cypress/cypress/screens/alerts.ts b/x-pack/test/security_solution_cypress/cypress/screens/alerts.ts index 54856d703e03c..f344670620c97 100644 --- a/x-pack/test/security_solution_cypress/cypress/screens/alerts.ts +++ b/x-pack/test/security_solution_cypress/cypress/screens/alerts.ts @@ -27,9 +27,9 @@ export const ALERT_GRID_CELL = '[data-test-subj="dataGridRowCell"]'; export const ALERT_RULE_NAME = '[data-test-subj="formatted-field-kibana.alert.rule.name"]'; -export const ALERT_RISK_SCORE = '[data-test-subj="render-content-kibana.alert.risk_score"]'; +export const ALERT_RISK_SCORE = '[data-test-subj="formatted-field-kibana.alert.risk_score"]'; -export const ALERT_SEVERITY = '[data-test-subj="render-content-kibana.alert.severity"]'; +export const ALERT_SEVERITY = '[data-test-subj="formatted-field-kibana.alert.severity"]'; export const ALERT_DATA_GRID = '[data-test-subj="euiDataGridBody"]'; diff --git a/x-pack/test/security_solution_cypress/cypress/screens/timeline.ts b/x-pack/test/security_solution_cypress/cypress/screens/timeline.ts index 9300280872332..c25bd1b9b115f 100644 --- a/x-pack/test/security_solution_cypress/cypress/screens/timeline.ts +++ b/x-pack/test/security_solution_cypress/cypress/screens/timeline.ts @@ -268,7 +268,7 @@ export const TIMESTAMP_HOVER_ACTION_OVERFLOW_BTN = export const TIMELINE_STATUS = '[data-test-subj="timeline-save-status"]'; export const ALERT_TABLE_SEVERITY_VALUES = - '[data-test-subj="render-content-kibana.alert.severity"]'; + '[data-test-subj="formatted-field-kibana.alert.severity"]'; export const ALERT_TABLE_FILE_NAME_HEADER = '[data-gridcell-column-id="file.name"]'; diff --git a/yarn.lock b/yarn.lock index 52d689574db0a..61ac573bf1e21 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1962,7 +1962,7 @@ resolved "https://registry.yarnpkg.com/@bufbuild/protobuf/-/protobuf-1.2.1.tgz#f8b1fbbe79726a4eafa9772ddde147b57f85d177" integrity sha512-cwwGvLGqvoaOZmoP5+i4v/rbW+rHkguvTehuZyM2p/xpmaNSdT2h3B7kHw33aiffv35t1XrYHIkdJSEkSEMJuA== -"@bundled-es-modules/cookie@^2.0.0": +"@bundled-es-modules/cookie@^2.0.1": version "2.0.1" resolved "https://registry.yarnpkg.com/@bundled-es-modules/cookie/-/cookie-2.0.1.tgz#b41376af6a06b3e32a15241d927b840a9b4de507" integrity sha512-8o+5fRPLNbjbdGRRmJj3h6Hh1AQJf2dk3qQ/5ZFb+PXkRNiSoMGGUKlsgLfrxneb72axVJyIYji64E2+nNfYyw== @@ -8582,18 +8582,18 @@ resolved "https://registry.yarnpkg.com/@msgpackr-extract/msgpackr-extract-win32-x64/-/msgpackr-extract-win32-x64-3.0.2.tgz#0f164b726869f71da3c594171df5ebc1c4b0a407" integrity sha512-O+6Gs8UeDbyFpbSh2CPEz/UOrrdWPTBYNblZK5CxxLisYt4kGX3Sc+czffFonyjiGSq3jWLwJS/CCJc7tBr4sQ== -"@mswjs/http-middleware@0.10.1": - version "0.10.1" - resolved "https://registry.yarnpkg.com/@mswjs/http-middleware/-/http-middleware-0.10.1.tgz#7ff38c5398ba01efe98e16a0da24d612ffd69ccc" - integrity sha512-I58RDHXzwKjMjaSO7aV7X0zUzbAvUEEDYsL9+I6Ro0zF5LgjnNdpZoMufG/WoYEenhDCgv7K+HMpLxGuhlfjKA== +"@mswjs/http-middleware@0.10.3": + version "0.10.3" + resolved "https://registry.yarnpkg.com/@mswjs/http-middleware/-/http-middleware-0.10.3.tgz#0c667558788489bdc787fc6695abe96a9476281c" + integrity sha512-6CoX9IivDF7hggORdA4vX6uz+pkY1urGQMhmviHmYya/0b4EXwmhaXlGLQG3G29heqb3qdjp61V0+E2xRtyR5A== dependencies: express "^4.18.2" strict-event-emitter "^0.5.1" -"@mswjs/interceptors@^0.36.5": - version "0.36.5" - resolved "https://registry.yarnpkg.com/@mswjs/interceptors/-/interceptors-0.36.5.tgz#c0fc6970a7a9f8c7b9f4c122dbab3827e4cc19a5" - integrity sha512-aQ8WF5zQwOdcxLsxSEk9Jd01GgGb80xxqCaiDDlewhtwqpSm8MOvUHslwPydVirasdW09++NxDNNftm1vLY8yA== +"@mswjs/interceptors@^0.37.0": + version "0.37.6" + resolved "https://registry.yarnpkg.com/@mswjs/interceptors/-/interceptors-0.37.6.tgz#2635319b7a81934e1ef1b5593ef7910347e2b761" + integrity sha512-wK+5pLK5XFmgtH3aQ2YVvA3HohS3xqV/OxuVOdNx9Wpnz7VE/fnC+e1A7ln6LFYeck7gOJ/dsZV6OLplOtAJ2w== dependencies: "@open-draft/deferred-promise" "^2.2.0" "@open-draft/logger" "^0.3.0" @@ -25248,25 +25248,26 @@ msgpackr@^1.9.9: optionalDependencies: msgpackr-extract "^3.0.2" -msw@~2.5.2: - version "2.5.2" - resolved "https://registry.yarnpkg.com/msw/-/msw-2.5.2.tgz#dfce10b68dbabc2d5dafeb6d7fb82c3c7073a4d1" - integrity sha512-eBsFgU30NYtrfC62XzS1rdAzFK+Br0zKU4ORqD9Qliq86362DWZyPiD6FLfMgy0Ktik83DPTXmqPMz2bqwmJdA== +msw@~2.7.0: + version "2.7.3" + resolved "https://registry.yarnpkg.com/msw/-/msw-2.7.3.tgz#5ad569fae7c7cdb8be2eeba3d041c185600b25a0" + integrity sha512-+mycXv8l2fEAjFZ5sjrtjJDmm2ceKGjrNbBr1durRg6VkU9fNUE/gsmQ51hWbHqs+l35W1iM+ZsmOD9Fd6lspw== dependencies: - "@bundled-es-modules/cookie" "^2.0.0" + "@bundled-es-modules/cookie" "^2.0.1" "@bundled-es-modules/statuses" "^1.0.1" "@bundled-es-modules/tough-cookie" "^0.1.6" "@inquirer/confirm" "^5.0.0" - "@mswjs/interceptors" "^0.36.5" + "@mswjs/interceptors" "^0.37.0" + "@open-draft/deferred-promise" "^2.2.0" "@open-draft/until" "^2.1.0" "@types/cookie" "^0.6.0" "@types/statuses" "^2.0.4" - chalk "^4.1.2" graphql "^16.8.1" headers-polyfill "^4.0.2" is-node-process "^1.2.0" outvariant "^1.4.3" path-to-regexp "^6.3.0" + picocolors "^1.1.1" strict-event-emitter "^0.5.1" type-fest "^4.26.1" yargs "^17.7.2"