diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index b2c26aae1602c..20485606602dd 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -446,9 +446,9 @@ src/platform/packages/shared/kbn-es-errors @elastic/kibana-core src/platform/packages/shared/kbn-es-query @elastic/kibana-data-discovery src/platform/packages/shared/kbn-es-types @elastic/kibana-core @elastic/obs-knowledge-team src/platform/packages/shared/kbn-esql-ast @elastic/kibana-esql +src/platform/packages/shared/kbn-esql-types @elastic/kibana-esql src/platform/packages/shared/kbn-esql-utils @elastic/kibana-esql src/platform/packages/shared/kbn-esql-validation-autocomplete @elastic/kibana-esql -src/platform/packages/shared/kbn-esql-variables-types @elastic/kibana-esql src/platform/packages/shared/kbn-event-annotation-common @elastic/kibana-visualizations src/platform/packages/shared/kbn-event-annotation-components @elastic/kibana-visualizations src/platform/packages/shared/kbn-expect @elastic/kibana-operations @elastic/appex-qa diff --git a/.github/workflows/comment-on-asciidoc-changes.yml b/.github/workflows/comment-on-asciidoc-changes.yml deleted file mode 100644 index 8e5f836b1489a..0000000000000 --- a/.github/workflows/comment-on-asciidoc-changes.yml +++ /dev/null @@ -1,21 +0,0 @@ ---- -name: Comment on PR for .asciidoc changes - -on: - # We need to use pull_request_target to be able to comment on PRs from forks - pull_request_target: - types: - - synchronize - - opened - - reopened - branches: - - main - - master - - "9.0" - -jobs: - comment-on-asciidoc-change: - permissions: - contents: read - pull-requests: write - uses: elastic/docs-builder/.github/workflows/comment-on-asciidoc-changes.yml@main diff --git a/.github/workflows/docs-build.yml b/.github/workflows/docs-build.yml new file mode 100644 index 0000000000000..ba05a8fa319b6 --- /dev/null +++ b/.github/workflows/docs-build.yml @@ -0,0 +1,22 @@ +name: docs-build + +on: + push: + branches: + - main + pull_request_target: + types: + - opened + - reopened + - synchronize + +jobs: + docs-preview: + uses: elastic/docs-builder/.github/workflows/preview-build.yml@main + with: + path-pattern: docs/** + permissions: + deployments: write + id-token: write + contents: read + pull-requests: read diff --git a/.github/workflows/docs-cleanup.yml b/.github/workflows/docs-cleanup.yml new file mode 100644 index 0000000000000..f83e017b5f7c5 --- /dev/null +++ b/.github/workflows/docs-cleanup.yml @@ -0,0 +1,14 @@ +name: docs-cleanup + +on: + pull_request_target: + types: + - closed + +jobs: + docs-preview: + uses: elastic/docs-builder/.github/workflows/preview-cleanup.yml@main + permissions: + contents: none + id-token: write + deployments: write diff --git a/api_docs/actions.mdx b/api_docs/actions.mdx index 6ed21b6dafd1b..4c511d9563acd 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-28 +date: 2025-03-03 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 5ffaf3af820f0..c838d8bd36e10 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-28 +date: 2025-03-03 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 0b37c34b26ce6..1128df5da5ce1 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-28 +date: 2025-03-03 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 e38bb34477daf..9ba97fbc01bd0 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-28 +date: 2025-03-03 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 b9a279437d5da..fadffb5d26c6e 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-28 +date: 2025-03-03 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 62ecfbb637c51..cd90ef3b7bd76 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-28 +date: 2025-03-03 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 09685cb5ab538..76db83d012593 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-28 +date: 2025-03-03 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 d7f44bfa1f2e6..bfb43d831d3e6 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-28 +date: 2025-03-03 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 2cdb3e97eb537..dacd0dc911c4c 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-28 +date: 2025-03-03 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 3906708d5868e..865568a9acf26 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-28 +date: 2025-03-03 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 2f6d39713691c..3634483a08caf 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-28 +date: 2025-03-03 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 7dce636cc09d0..356de7713c603 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-28 +date: 2025-03-03 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 ef7ddc0001e9e..f11332d5ca339 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-28 +date: 2025-03-03 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 9479801978431..b06fab2e305be 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-28 +date: 2025-03-03 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 d71b44633a457..9d85d0326c696 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-28 +date: 2025-03-03 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 723ed583bbc2f..f0bae680dbc09 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-28 +date: 2025-03-03 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 7e18f16638f72..4a373ac7c9c5d 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-28 +date: 2025-03-03 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 5539400a5d521..b7f9b1e8b5644 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-28 +date: 2025-03-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'contentManagement'] --- import contentManagementObj from './content_management.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sh | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 150 | 0 | 126 | 6 | +| 150 | 0 | 126 | 7 | ## Client diff --git a/api_docs/controls.devdocs.json b/api_docs/controls.devdocs.json index 0459d443f0aea..d6adb537d2e19 100644 --- a/api_docs/controls.devdocs.json +++ b/api_docs/controls.devdocs.json @@ -1993,43 +1993,143 @@ }, { "parentPluginId": "controls", - "id": "def-public.ESQL_CONTROL", - "type": "string", - "tags": [], - "label": "ESQL_CONTROL", - "description": [], - "signature": [ - "\"esqlControl\"" - ], - "path": "src/platform/plugins/shared/controls/common/constants.ts", - "deprecated": false, - "trackAdoption": false, - "initialIsOpen": false - }, - { - "parentPluginId": "controls", - "id": "def-public.OPTIONS_LIST_CONTROL", - "type": "string", + "id": "def-public.DefaultControlApi", + "type": "Type", "tags": [], - "label": "OPTIONS_LIST_CONTROL", + "label": "DefaultControlApi", "description": [], "signature": [ - "\"optionsListControl\"" + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PublishesDataLoading", + "text": "PublishesDataLoading" + }, + " & ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PublishesBlockingError", + "text": "PublishesBlockingError" + }, + " & ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PublishesUnsavedChanges", + "text": "PublishesUnsavedChanges" + }, + " & Partial<", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PublishesTitle", + "text": "PublishesTitle" + }, + " & ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PublishesDisabledActionIds", + "text": "PublishesDisabledActionIds" + }, + " & ", + "HasCustomPrepend", + "> & ", + "CanClearSelections", + " & ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.HasType", + "text": "HasType" + }, + " & ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.HasUniqueId", + "text": "HasUniqueId" + }, + " & ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.HasSerializableState", + "text": "HasSerializableState" + }, + "<", + { + "pluginId": "controls", + "scope": "common", + "docId": "kibControlsPluginApi", + "section": "def-common.DefaultControlState", + "text": "DefaultControlState" + }, + "> & ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.HasParentApi", + "text": "HasParentApi" + }, + "<", + { + "pluginId": "controls", + "scope": "public", + "docId": "kibControlsPluginApi", + "section": "def-public.ControlGroupApi", + "text": "ControlGroupApi" + }, + "> & { setDataLoading: (loading: boolean) => void; setBlockingError: (error: Error | undefined) => void; grow: ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PublishingSubject", + "text": "PublishingSubject" + }, + "; width: ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PublishingSubject", + "text": "PublishingSubject" + }, + "<", + { + "pluginId": "controls", + "scope": "common", + "docId": "kibControlsPluginApi", + "section": "def-common.ControlWidth", + "text": "ControlWidth" + }, + " | undefined>; }" ], - "path": "src/platform/plugins/shared/controls/common/constants.ts", + "path": "src/platform/plugins/shared/controls/public/controls/types.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false }, { "parentPluginId": "controls", - "id": "def-public.RANGE_SLIDER_CONTROL", + "id": "def-public.ESQL_CONTROL", "type": "string", "tags": [], - "label": "RANGE_SLIDER_CONTROL", + "label": "ESQL_CONTROL", "description": [], "signature": [ - "\"rangeSliderControl\"" + "\"esqlControl\"" ], "path": "src/platform/plugins/shared/controls/common/constants.ts", "deprecated": false, @@ -2038,15 +2138,674 @@ }, { "parentPluginId": "controls", - "id": "def-public.TIME_SLIDER_CONTROL", - "type": "string", + "id": "def-public.ESQLControlApi", + "type": "Type", "tags": [], - "label": "TIME_SLIDER_CONTROL", + "label": "ESQLControlApi", "description": [], "signature": [ - "\"timeSlider\"" - ], - "path": "src/platform/plugins/shared/controls/common/constants.ts", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PublishesDataLoading", + "text": "PublishesDataLoading" + }, + " & ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PublishesBlockingError", + "text": "PublishesBlockingError" + }, + " & ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PublishesUnsavedChanges", + "text": "PublishesUnsavedChanges" + }, + " & Partial<", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PublishesTitle", + "text": "PublishesTitle" + }, + " & ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PublishesDisabledActionIds", + "text": "PublishesDisabledActionIds" + }, + " & ", + "HasCustomPrepend", + "> & ", + "CanClearSelections", + " & ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.HasType", + "text": "HasType" + }, + " & ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.HasUniqueId", + "text": "HasUniqueId" + }, + " & ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.HasSerializableState", + "text": "HasSerializableState" + }, + "<", + { + "pluginId": "controls", + "scope": "common", + "docId": "kibControlsPluginApi", + "section": "def-common.DefaultControlState", + "text": "DefaultControlState" + }, + "> & ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.HasParentApi", + "text": "HasParentApi" + }, + "<", + { + "pluginId": "controls", + "scope": "public", + "docId": "kibControlsPluginApi", + "section": "def-public.ControlGroupApi", + "text": "ControlGroupApi" + }, + "> & { setDataLoading: (loading: boolean) => void; setBlockingError: (error: Error | undefined) => void; grow: ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PublishingSubject", + "text": "PublishingSubject" + }, + "; width: ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PublishingSubject", + "text": "PublishingSubject" + }, + "<", + { + "pluginId": "controls", + "scope": "common", + "docId": "kibControlsPluginApi", + "section": "def-common.ControlWidth", + "text": "ControlWidth" + }, + " | undefined>; } & ", + { + "pluginId": "@kbn/esql-variables-types", + "scope": "public", + "docId": "kibKbnEsqlVariablesTypesPluginApi", + "section": "def-public.PublishesESQLVariable", + "text": "PublishesESQLVariable" + }, + " & ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.HasEditCapabilities", + "text": "HasEditCapabilities" + }, + " & Pick<", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PublishesTitle", + "text": "PublishesTitle" + }, + ", \"defaultTitle$\">" + ], + "path": "src/platform/plugins/shared/controls/public/controls/esql_control/types.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "controls", + "id": "def-public.OPTIONS_LIST_CONTROL", + "type": "string", + "tags": [], + "label": "OPTIONS_LIST_CONTROL", + "description": [], + "signature": [ + "\"optionsListControl\"" + ], + "path": "src/platform/plugins/shared/controls/common/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "controls", + "id": "def-public.OptionsListControlApi", + "type": "Type", + "tags": [], + "label": "OptionsListControlApi", + "description": [], + "signature": [ + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PublishesDataLoading", + "text": "PublishesDataLoading" + }, + " & ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PublishesBlockingError", + "text": "PublishesBlockingError" + }, + " & ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PublishesUnsavedChanges", + "text": "PublishesUnsavedChanges" + }, + " & Partial<", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PublishesTitle", + "text": "PublishesTitle" + }, + " & ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PublishesDisabledActionIds", + "text": "PublishesDisabledActionIds" + }, + " & ", + "HasCustomPrepend", + "> & ", + "CanClearSelections", + " & ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.HasType", + "text": "HasType" + }, + " & ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.HasUniqueId", + "text": "HasUniqueId" + }, + " & ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.HasSerializableState", + "text": "HasSerializableState" + }, + "<", + { + "pluginId": "controls", + "scope": "common", + "docId": "kibControlsPluginApi", + "section": "def-common.DefaultControlState", + "text": "DefaultControlState" + }, + "> & ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.HasParentApi", + "text": "HasParentApi" + }, + "<", + { + "pluginId": "controls", + "scope": "public", + "docId": "kibControlsPluginApi", + "section": "def-public.ControlGroupApi", + "text": "ControlGroupApi" + }, + "> & { setDataLoading: (loading: boolean) => void; setBlockingError: (error: Error | undefined) => void; grow: ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PublishingSubject", + "text": "PublishingSubject" + }, + "; width: ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PublishingSubject", + "text": "PublishingSubject" + }, + "<", + { + "pluginId": "controls", + "scope": "common", + "docId": "kibControlsPluginApi", + "section": "def-common.ControlWidth", + "text": "ControlWidth" + }, + " | undefined>; } & Omit<", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PublishesTitle", + "text": "PublishesTitle" + }, + ", \"hideTitle$\"> & ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.HasEditCapabilities", + "text": "HasEditCapabilities" + }, + " & ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PublishesDataViews", + "text": "PublishesDataViews" + }, + " & ", + "PublishesField", + " & ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PublishesFilters", + "text": "PublishesFilters" + }, + " & { untilFiltersReady: () => Promise; } & { setSelectedOptions: (options: ", + "OptionsListSelection", + "[] | undefined) => void; }" + ], + "path": "src/platform/plugins/shared/controls/public/controls/data_controls/options_list_control/types.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "controls", + "id": "def-public.RANGE_SLIDER_CONTROL", + "type": "string", + "tags": [], + "label": "RANGE_SLIDER_CONTROL", + "description": [], + "signature": [ + "\"rangeSliderControl\"" + ], + "path": "src/platform/plugins/shared/controls/common/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "controls", + "id": "def-public.RangesliderControlApi", + "type": "Type", + "tags": [], + "label": "RangesliderControlApi", + "description": [], + "signature": [ + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PublishesDataLoading", + "text": "PublishesDataLoading" + }, + " & ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PublishesBlockingError", + "text": "PublishesBlockingError" + }, + " & ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PublishesUnsavedChanges", + "text": "PublishesUnsavedChanges" + }, + " & Partial<", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PublishesTitle", + "text": "PublishesTitle" + }, + " & ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PublishesDisabledActionIds", + "text": "PublishesDisabledActionIds" + }, + " & ", + "HasCustomPrepend", + "> & ", + "CanClearSelections", + " & ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.HasType", + "text": "HasType" + }, + " & ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.HasUniqueId", + "text": "HasUniqueId" + }, + " & ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.HasSerializableState", + "text": "HasSerializableState" + }, + "<", + { + "pluginId": "controls", + "scope": "common", + "docId": "kibControlsPluginApi", + "section": "def-common.DefaultControlState", + "text": "DefaultControlState" + }, + "> & ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.HasParentApi", + "text": "HasParentApi" + }, + "<", + { + "pluginId": "controls", + "scope": "public", + "docId": "kibControlsPluginApi", + "section": "def-public.ControlGroupApi", + "text": "ControlGroupApi" + }, + "> & { setDataLoading: (loading: boolean) => void; setBlockingError: (error: Error | undefined) => void; grow: ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PublishingSubject", + "text": "PublishingSubject" + }, + "; width: ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PublishingSubject", + "text": "PublishingSubject" + }, + "<", + { + "pluginId": "controls", + "scope": "common", + "docId": "kibControlsPluginApi", + "section": "def-common.ControlWidth", + "text": "ControlWidth" + }, + " | undefined>; } & Omit<", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PublishesTitle", + "text": "PublishesTitle" + }, + ", \"hideTitle$\"> & ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.HasEditCapabilities", + "text": "HasEditCapabilities" + }, + " & ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PublishesDataViews", + "text": "PublishesDataViews" + }, + " & ", + "PublishesField", + " & ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PublishesFilters", + "text": "PublishesFilters" + }, + " & { untilFiltersReady: () => Promise; }" + ], + "path": "src/platform/plugins/shared/controls/public/controls/data_controls/range_slider/types.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "controls", + "id": "def-public.TIME_SLIDER_CONTROL", + "type": "string", + "tags": [], + "label": "TIME_SLIDER_CONTROL", + "description": [], + "signature": [ + "\"timeSlider\"" + ], + "path": "src/platform/plugins/shared/controls/common/constants.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, + { + "parentPluginId": "controls", + "id": "def-public.TimesliderControlApi", + "type": "Type", + "tags": [], + "label": "TimesliderControlApi", + "description": [], + "signature": [ + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PublishesDataLoading", + "text": "PublishesDataLoading" + }, + " & ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PublishesBlockingError", + "text": "PublishesBlockingError" + }, + " & ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PublishesUnsavedChanges", + "text": "PublishesUnsavedChanges" + }, + " & Partial<", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PublishesTitle", + "text": "PublishesTitle" + }, + " & ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PublishesDisabledActionIds", + "text": "PublishesDisabledActionIds" + }, + " & ", + "HasCustomPrepend", + "> & ", + "CanClearSelections", + " & ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.HasType", + "text": "HasType" + }, + " & ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.HasUniqueId", + "text": "HasUniqueId" + }, + " & ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.HasSerializableState", + "text": "HasSerializableState" + }, + "<", + { + "pluginId": "controls", + "scope": "common", + "docId": "kibControlsPluginApi", + "section": "def-common.DefaultControlState", + "text": "DefaultControlState" + }, + "> & ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.HasParentApi", + "text": "HasParentApi" + }, + "<", + { + "pluginId": "controls", + "scope": "public", + "docId": "kibControlsPluginApi", + "section": "def-public.ControlGroupApi", + "text": "ControlGroupApi" + }, + "> & { setDataLoading: (loading: boolean) => void; setBlockingError: (error: Error | undefined) => void; grow: ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PublishingSubject", + "text": "PublishingSubject" + }, + "; width: ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PublishingSubject", + "text": "PublishingSubject" + }, + "<", + { + "pluginId": "controls", + "scope": "common", + "docId": "kibControlsPluginApi", + "section": "def-common.ControlWidth", + "text": "ControlWidth" + }, + " | undefined>; } & Pick<", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PublishesTitle", + "text": "PublishesTitle" + }, + ", \"defaultTitle$\"> & ", + { + "pluginId": "@kbn/presentation-publishing", + "scope": "public", + "docId": "kibKbnPresentationPublishingPluginApi", + "section": "def-public.PublishesTimeslice", + "text": "PublishesTimeslice" + } + ], + "path": "src/platform/plugins/shared/controls/public/controls/timeslider_control/types.ts", "deprecated": false, "trackAdoption": false, "initialIsOpen": false diff --git a/api_docs/controls.mdx b/api_docs/controls.mdx index 0320a25ab81fc..9359bbc711ba0 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-28 +date: 2025-03-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'controls'] --- import controlsObj from './controls.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 | |-------------------|-----------|------------------------|-----------------| -| 137 | 0 | 133 | 15 | +| 142 | 0 | 138 | 15 | ## Client diff --git a/api_docs/custom_integrations.mdx b/api_docs/custom_integrations.mdx index dcae009ddf26c..4377a855ad052 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-28 +date: 2025-03-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'customIntegrations'] --- import customIntegrationsObj from './custom_integrations.devdocs.json'; diff --git a/api_docs/dashboard.devdocs.json b/api_docs/dashboard.devdocs.json index c9a76cbbf5008..28afc108c2fc9 100644 --- a/api_docs/dashboard.devdocs.json +++ b/api_docs/dashboard.devdocs.json @@ -1555,7 +1555,30 @@ "path": "src/platform/plugins/shared/dashboard/server/types.ts", "deprecated": false, "trackAdoption": false, - "children": [], + "children": [ + { + "parentPluginId": "dashboard", + "id": "def-server.DashboardPluginStart.contentClient", + "type": "Object", + "tags": [], + "label": "contentClient", + "description": [ + "\nUse contentClient.getForRequest to get a scoped client to perform CRUD and search operations for dashboards using the methods available in the {@link DashboardStorage} class.\n" + ], + "signature": [ + "{ getForRequest: ({ requestHandlerContext, version, }: { requestHandlerContext: ", + "RequestHandlerContext", + "; request: ", + "KibanaRequest", + "; version?: number | undefined; }) => ", + "IContentClient", + "; } | undefined" + ], + "path": "src/platform/plugins/shared/dashboard/server/types.ts", + "deprecated": false, + "trackAdoption": false + } + ], "lifecycle": "start", "initialIsOpen": true } diff --git a/api_docs/dashboard.mdx b/api_docs/dashboard.mdx index fd3ba18af8765..baae01a48b02a 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-28 +date: 2025-03-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dashboard'] --- import dashboardObj from './dashboard.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 | |-------------------|-----------|------------------------|-----------------| -| 92 | 0 | 89 | 12 | +| 93 | 0 | 89 | 12 | ## Client diff --git a/api_docs/dashboard_enhanced.mdx b/api_docs/dashboard_enhanced.mdx index b40ad9ad7caff..07b709b9fb0c4 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-28 +date: 2025-03-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dashboardEnhanced'] --- import dashboardEnhancedObj from './dashboard_enhanced.devdocs.json'; diff --git a/api_docs/data.mdx b/api_docs/data.mdx index d97f6e1e72b10..dcd4ee53d86d4 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-28 +date: 2025-03-03 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 | |-------------------|-----------|------------------------|-----------------| -| 3219 | 31 | 2602 | 26 | +| 3219 | 31 | 2602 | 27 | ## Client diff --git a/api_docs/data_quality.mdx b/api_docs/data_quality.mdx index 9b688c955fe22..a4153e9ea1f82 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-28 +date: 2025-03-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataQuality'] --- import dataQualityObj from './data_quality.devdocs.json'; diff --git a/api_docs/data_query.devdocs.json b/api_docs/data_query.devdocs.json index 375478df7a19a..36ade62514405 100644 --- a/api_docs/data_query.devdocs.json +++ b/api_docs/data_query.devdocs.json @@ -3350,7 +3350,9 @@ "label": "timefilter", "description": [], "signature": [ - "{ isTimeRangeSelectorEnabled: () => boolean; isAutoRefreshSelectorEnabled: () => boolean; isTimeTouched: () => boolean; isRefreshIntervalTouched: () => boolean; getEnabledUpdated$: () => ", + "{ readonly useTimefilter: () => ", + "TimefilterHook", + "; isTimeRangeSelectorEnabled: () => boolean; isAutoRefreshSelectorEnabled: () => boolean; isTimeTouched: () => boolean; isRefreshIntervalTouched: () => boolean; getEnabledUpdated$: () => ", "Observable", "; getTimeUpdate$: () => ", "Observable", @@ -3754,7 +3756,9 @@ "label": "TimefilterContract", "description": [], "signature": [ - "{ isTimeRangeSelectorEnabled: () => boolean; isAutoRefreshSelectorEnabled: () => boolean; isTimeTouched: () => boolean; isRefreshIntervalTouched: () => boolean; getEnabledUpdated$: () => ", + "{ readonly useTimefilter: () => ", + "TimefilterHook", + "; isTimeRangeSelectorEnabled: () => boolean; isAutoRefreshSelectorEnabled: () => boolean; isTimeTouched: () => boolean; isRefreshIntervalTouched: () => boolean; getEnabledUpdated$: () => ", "Observable", "; getTimeUpdate$: () => ", "Observable", diff --git a/api_docs/data_query.mdx b/api_docs/data_query.mdx index 1536ef3d1c161..e1b6d5d39bb35 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-28 +date: 2025-03-03 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 | |-------------------|-----------|------------------------|-----------------| -| 3219 | 31 | 2602 | 26 | +| 3219 | 31 | 2602 | 27 | ## Client diff --git a/api_docs/data_search.mdx b/api_docs/data_search.mdx index 3567b72c04175..e3c362a92654f 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-28 +date: 2025-03-03 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 | |-------------------|-----------|------------------------|-----------------| -| 3219 | 31 | 2602 | 26 | +| 3219 | 31 | 2602 | 27 | ## Client diff --git a/api_docs/data_usage.mdx b/api_docs/data_usage.mdx index a3a5ba7a2a58c..0d67a40b56465 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-28 +date: 2025-03-03 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 8d858f548b6f6..472b7a9c8c77b 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-28 +date: 2025-03-03 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 3f0a3bb6fed0b..2a6ca7f4e6d87 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-28 +date: 2025-03-03 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 dfd7744216539..73b2a7d7aa49f 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-28 +date: 2025-03-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViewManagement'] --- import dataViewManagementObj from './data_view_management.devdocs.json'; diff --git a/api_docs/data_views.mdx b/api_docs/data_views.mdx index 71bbb42909848..f979a521d9ca7 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-28 +date: 2025-03-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'dataViews'] --- import dataViewsObj from './data_views.devdocs.json'; diff --git a/api_docs/data_visualizer.mdx b/api_docs/data_visualizer.mdx index c41b31f118618..1b126007f9323 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-28 +date: 2025-03-03 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 70f9b4cb8fc18..ad598329396d1 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-28 +date: 2025-03-03 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 dbd1da3da27bd..cae4e5816c79c 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-28 +date: 2025-03-03 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/deprecations_by_plugin.mdx b/api_docs/deprecations_by_plugin.mdx index 51598fad9fb99..6cb79bd67fc0d 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-28 +date: 2025-03-03 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/deprecations_by_team.mdx b/api_docs/deprecations_by_team.mdx index 64e890cd93e5f..28ac9bf7d41fe 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-28 +date: 2025-03-03 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- diff --git a/api_docs/dev_tools.mdx b/api_docs/dev_tools.mdx index e0151a6ea5dfd..50b898c985543 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-28 +date: 2025-03-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'devTools'] --- import devToolsObj from './dev_tools.devdocs.json'; diff --git a/api_docs/discover.devdocs.json b/api_docs/discover.devdocs.json index 236f5eb79e621..9bed3cd9c31a1 100644 --- a/api_docs/discover.devdocs.json +++ b/api_docs/discover.devdocs.json @@ -1266,7 +1266,9 @@ "label": "timefilter", "description": [], "signature": [ - "{ isTimeRangeSelectorEnabled: () => boolean; isAutoRefreshSelectorEnabled: () => boolean; isTimeTouched: () => boolean; isRefreshIntervalTouched: () => boolean; getEnabledUpdated$: () => ", + "{ readonly useTimefilter: () => ", + "TimefilterHook", + "; isTimeRangeSelectorEnabled: () => boolean; isAutoRefreshSelectorEnabled: () => boolean; isTimeTouched: () => boolean; isRefreshIntervalTouched: () => boolean; getEnabledUpdated$: () => ", "Observable", "; getTimeUpdate$: () => ", "Observable", diff --git a/api_docs/discover.mdx b/api_docs/discover.mdx index 21307c274ffb8..102ec5a63b749 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-28 +date: 2025-03-03 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 cc9df90d72079..6ad8d63e3cc77 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-28 +date: 2025-03-03 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 fbd6f6a43cf21..bc4fa7ad49778 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-28 +date: 2025-03-03 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 12414925b13c9..0405c6cff4ee2 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-28 +date: 2025-03-03 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 4a9cd82c6404c..e6ca444f70b14 100644 --- a/api_docs/elastic_assistant.devdocs.json +++ b/api_docs/elastic_assistant.devdocs.json @@ -1442,7 +1442,7 @@ "description": [], "signature": [ "KibanaRequest", - " | undefined; model?: string | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; langSmithProject?: string | undefined; langSmithApiKey?: string | undefined; } | { subAction: \"invokeAI\" | \"invokeStream\"; anonymizationFields: { id: string; field: string; namespace?: string | undefined; timestamp?: string | undefined; createdBy?: string | undefined; updatedBy?: string | undefined; createdAt?: string | undefined; updatedAt?: string | undefined; allowed?: boolean | undefined; anonymized?: boolean | undefined; }[]; apiConfig: { connectorId: string; actionTypeId: string; provider?: \"Other\" | \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; defaultSystemPromptId?: string | undefined; }; endpointIds: string[]; insightType: \"incompatible_antivirus\" | \"noisy_process_tree\"; model?: string | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; langSmithProject?: string | undefined; langSmithApiKey?: string | undefined; }, any>" + " | undefined; model?: string | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; langSmithProject?: string | undefined; langSmithApiKey?: string | undefined; } | { subAction: \"invokeAI\" | \"invokeStream\"; anonymizationFields: { id: string; field: string; namespace?: string | undefined; timestamp?: string | undefined; createdBy?: string | undefined; updatedBy?: string | undefined; createdAt?: string | undefined; updatedAt?: string | undefined; allowed?: boolean | undefined; anonymized?: boolean | undefined; }[]; apiConfig: { connectorId: string; actionTypeId: string; provider?: \"Other\" | \"OpenAI\" | \"Azure OpenAI\" | undefined; model?: string | undefined; defaultSystemPromptId?: string | undefined; }; endpointIds: string[]; insightType: \"incompatible_antivirus\" | \"noisy_process_tree\"; model?: string | undefined; replacements?: Zod.objectOutputType<{}, Zod.ZodString, \"strip\"> | undefined; langSmithProject?: string | undefined; langSmithApiKey?: string | undefined; }, any>" ], "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 1c131644ea469..062f29c2cdeb7 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-28 +date: 2025-03-03 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 61c0e8cc2087c..5ed6db81d13b9 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-28 +date: 2025-03-03 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 140a46936ff82..ab0ce18909d0a 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-28 +date: 2025-03-03 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 8cc9c7e51b8b2..cd87701e571c2 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-28 +date: 2025-03-03 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 3cdad1aa9b708..88b77abf8a03f 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-28 +date: 2025-03-03 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 86046fb93d0f9..703f11f26916c 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-28 +date: 2025-03-03 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 ed6e34edf32f5..e6445796bd113 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-28 +date: 2025-03-03 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 33ded69212144..468ce1fc01afc 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-28 +date: 2025-03-03 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 5ff5cb84c912c..e9cd1d4810abd 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-28 +date: 2025-03-03 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 c2ed0ceca3750..e843e6015882b 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-28 +date: 2025-03-03 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 a5b4991b54727..1e868c737d129 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-28 +date: 2025-03-03 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 797ad1495bef1..97fd3473a30ce 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-28 +date: 2025-03-03 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 4ba705911ea22..ca48dee6e644c 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-28 +date: 2025-03-03 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 03bc0f02e1a49..ac21a07cb1c0b 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-28 +date: 2025-03-03 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 02a9527fb5708..dabd39d1ab3a0 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-28 +date: 2025-03-03 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 cccf6377feee9..4ed37ba7770e0 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-28 +date: 2025-03-03 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 1a78058fa3cab..f24eca437decc 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-28 +date: 2025-03-03 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 6a3fc7046dcb5..76ff2acd51960 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-28 +date: 2025-03-03 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 f3e1b7062dd48..612ac32f6d603 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-28 +date: 2025-03-03 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 3f79ba0e47e65..8b8fcab2e3103 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-28 +date: 2025-03-03 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 eae64787ab561..4e5421702962d 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-28 +date: 2025-03-03 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 aaafa46ca6432..0e13dde695336 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-28 +date: 2025-03-03 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 cd85bd72d61b8..cbb8632039423 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-28 +date: 2025-03-03 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 83ed08ae56eab..d6bc1f4c1d4bf 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-28 +date: 2025-03-03 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 6e08a01b51453..49fd416e4817f 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-28 +date: 2025-03-03 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 231ec0589d9f0..8055aa3955463 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-28 +date: 2025-03-03 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 01f946a0afc64..12e26e6c36e28 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-28 +date: 2025-03-03 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 4dded89185fad..284acc288fb07 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-28 +date: 2025-03-03 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 c3c2da5c063e8..841495422e6ab 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-28 +date: 2025-03-03 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 b914e5de845c4..6f7617e2b6e66 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-28 +date: 2025-03-03 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 0b0aaab70532d..e8404e800fbee 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-28 +date: 2025-03-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fieldsMetadata'] --- import fieldsMetadataObj from './fields_metadata.devdocs.json'; diff --git a/api_docs/file_upload.mdx b/api_docs/file_upload.mdx index 139347ffd944f..847a00c6e75cd 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-28 +date: 2025-03-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'fileUpload'] --- import fileUploadObj from './file_upload.devdocs.json'; diff --git a/api_docs/files.mdx b/api_docs/files.mdx index 295c0a81469ad..9409e74faa5e5 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-28 +date: 2025-03-03 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 d6d359a9d3901..2275e6f2cde7a 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-28 +date: 2025-03-03 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 293aaa1bdbd1f..fb07773f62c30 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-28 +date: 2025-03-03 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 761e19bbe9b7b..be105cdb0926d 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-28 +date: 2025-03-03 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 ecf77b1359787..923229e247fe0 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-28 +date: 2025-03-03 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 d959fd5061f2f..3e88cd25189dc 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-28 +date: 2025-03-03 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 1610aa6377b22..77913854a9cb3 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-28 +date: 2025-03-03 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 02cf1f5ca352c..87c52f13563dc 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-28 +date: 2025-03-03 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 112d5cb94f05a..b13536bafbb6e 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-28 +date: 2025-03-03 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 85e6df4e47ce1..86f38aae0332a 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-28 +date: 2025-03-03 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 f17a5ec65f669..296cbc4518293 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-28 +date: 2025-03-03 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 5971da32e3ed5..62af6d67a1e78 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-28 +date: 2025-03-03 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 92f780ca2c261..4ddc8985bc642 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-28 +date: 2025-03-03 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 831e0a7f5cafa..09cb876002ad5 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-28 +date: 2025-03-03 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 6ef4f7ecef12a..9928569407f40 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-28 +date: 2025-03-03 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 9b0edfd66a5e1..481ca82b60c77 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-28 +date: 2025-03-03 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 1197019be40d3..54931b9954197 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-28 +date: 2025-03-03 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 8a2d7a481bde6..883680937a067 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-28 +date: 2025-03-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/actions-types'] --- import kbnActionsTypesObj from './kbn_actions_types.devdocs.json'; diff --git a/api_docs/kbn_ai_assistant.devdocs.json b/api_docs/kbn_ai_assistant.devdocs.json index 061c48a48d452..d8c8853773df6 100644 --- a/api_docs/kbn_ai_assistant.devdocs.json +++ b/api_docs/kbn_ai_assistant.devdocs.json @@ -1073,7 +1073,7 @@ "label": "useConfirmModal", "description": [], "signature": [ - "({\n title,\n children,\n confirmButtonText,\n}: { title: React.ReactNode; children: React.ReactNode; confirmButtonText: React.ReactNode; }) => { element: React.ReactNode; confirm: () => Promise; }" + "({\n title,\n children,\n confirmButtonText,\n}: { title: React.ReactNode; children: React.ReactNode; confirmButtonText: React.ReactNode; }) => { element: React.ReactNode; confirm: (checkBoxLabel: string) => Promise; }" ], "path": "x-pack/platform/packages/shared/kbn-ai-assistant/src/hooks/use_confirm_modal.tsx", "deprecated": false, diff --git a/api_docs/kbn_ai_assistant.mdx b/api_docs/kbn_ai_assistant.mdx index 2e41364c17443..556f109cebc4f 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-28 +date: 2025-03-03 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 7654263ad862e..a289c7d34eae7 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-28 +date: 2025-03-03 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 978eefaeae1b7..1e4b0593b7bc5 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-28 +date: 2025-03-03 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 f259c9fd4c449..3e84df38ebb40 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-28 +date: 2025-03-03 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 eb24c5e92f8ab..35bafa2b95f37 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-28 +date: 2025-03-03 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 c5985ddbdb27d..4030740f6cd86 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-28 +date: 2025-03-03 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 18d26c969323c..4eee19a9451c2 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-28 +date: 2025-03-03 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 c827428e8d3c8..b53c6cf47a28e 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-28 +date: 2025-03-03 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 f5dcafbd86ab1..31dae221fc52a 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-28 +date: 2025-03-03 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 7439939ab794f..385c80f9b846e 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-28 +date: 2025-03-03 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 19e976410622d..8e2a018035e91 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-28 +date: 2025-03-03 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 7d1b780b1b2c4..49b49e371e134 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-28 +date: 2025-03-03 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 0dcf5b6c7c40e..6ce66df3093d1 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-28 +date: 2025-03-03 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.mdx b/api_docs/kbn_alerts_ui_shared.mdx index 2ccbe7a2849ec..fc5656d3af6fa 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-28 +date: 2025-03-03 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 1c85bce04d2dc..98dddf7ac364d 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-28 +date: 2025-03-03 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 d952909bbb82d..5f7e8b58fc172 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-28 +date: 2025-03-03 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 b42fc3c033688..80b64e1f2652a 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-28 +date: 2025-03-03 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 df281bd8f353e..a5da503c1ca85 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-28 +date: 2025-03-03 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 19b8e12b82950..9cf653289f776 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-28 +date: 2025-03-03 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 e2719d09b6ebe..442495f19b7b6 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-28 +date: 2025-03-03 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 05d6a153784c1..cb18c0aaeb7a4 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-28 +date: 2025-03-03 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 50e5c5b1a75b4..45bd1e48e5670 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-28 +date: 2025-03-03 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 f0c2339e63b7a..40e542e4a643c 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-28 +date: 2025-03-03 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 fbc7c9546aaba..6a8ba1c5abbe7 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-28 +date: 2025-03-03 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 b46a88ed8ef43..d0fbb5a840b45 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-28 +date: 2025-03-03 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 986ce9e9e0978..e4999bdb59c75 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-28 +date: 2025-03-03 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 f5a22b4ae7ffd..be8e0d772397a 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-28 +date: 2025-03-03 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 89f4a85863d2f..0fab311cdc9f7 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-28 +date: 2025-03-03 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 208ee69ec2d8d..a48b2b1d99ce2 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-28 +date: 2025-03-03 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 821e20d505451..4e947ed1d4aba 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-28 +date: 2025-03-03 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 5182a65e64939..75fc1b9dd17db 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-28 +date: 2025-03-03 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 402da62fda155..de720dbf40302 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-28 +date: 2025-03-03 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 7f9991d5e3221..ee43584da06f5 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-28 +date: 2025-03-03 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 20382e6a1a574..3de118b5391f4 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-28 +date: 2025-03-03 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 80adf09d05266..ec66a9b2c7197 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-28 +date: 2025-03-03 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 2f808548e24e9..5c869a728dbcb 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-28 +date: 2025-03-03 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.mdx b/api_docs/kbn_cloud_security_posture.mdx index 2e64596436cf5..d6bca09501f3a 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-28 +date: 2025-03-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cloud-security-posture'] --- import kbnCloudSecurityPostureObj from './kbn_cloud_security_posture.devdocs.json'; diff --git a/api_docs/kbn_cloud_security_posture_common.mdx b/api_docs/kbn_cloud_security_posture_common.mdx index a8ba4d855dde5..7411303fe9342 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-28 +date: 2025-03-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/cloud-security-posture-common'] --- import kbnCloudSecurityPostureCommonObj from './kbn_cloud_security_posture_common.devdocs.json'; diff --git a/api_docs/kbn_cloud_security_posture_graph.mdx b/api_docs/kbn_cloud_security_posture_graph.mdx index 116e5dd253d51..577b3ef5375e3 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-28 +date: 2025-03-03 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 324a2d8ded2bc..08d86f215218e 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-28 +date: 2025-03-03 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 74c6df6be9aca..c79ac37ce5b4b 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-28 +date: 2025-03-03 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 ac38fbb48f8e7..6889fa95a1e74 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-28 +date: 2025-03-03 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 2db36754bc9dd..e6ff4684c0dd2 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-28 +date: 2025-03-03 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 c4672862b7109..8984c4faf40d0 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-28 +date: 2025-03-03 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 6fedbf3ace407..71d4d8057e312 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-28 +date: 2025-03-03 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 4f6ab2b75ca88..fbce26c773eed 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-28 +date: 2025-03-03 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 bf08a892f267d..bcd5db19b5f63 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-28 +date: 2025-03-03 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 0e90b7a5f401b..0c6d353827224 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-28 +date: 2025-03-03 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 b521c772a1ce8..764fefe4b48d6 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-28 +date: 2025-03-03 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 b8146f319f08d..96d92fc557afb 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-28 +date: 2025-03-03 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 5b8d2bfa7bd54..0ad5255eeae8c 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-28 +date: 2025-03-03 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 af5e56fae8afc..9b653fb92e3d6 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-28 +date: 2025-03-03 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 f50392328b3e9..c9199ecd8c635 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-28 +date: 2025-03-03 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 ad1a4f240859c..dc41e387fc771 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-28 +date: 2025-03-03 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 c7476febc9f3e..d8219d23b6c84 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-28 +date: 2025-03-03 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 e69e7a74870ee..0490c85281fef 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-28 +date: 2025-03-03 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 49af1fbf99d22..4ce5b41e52c15 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-28 +date: 2025-03-03 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 ae58f973f2528..f33634871d4cc 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-28 +date: 2025-03-03 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 3cf7b6471dede..00db9c7dd1d5a 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-28 +date: 2025-03-03 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 eacfff8f2478e..ebeb597388416 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-28 +date: 2025-03-03 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 76e9120e5fd01..ed548e3b28994 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-28 +date: 2025-03-03 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 0180811c79907..172e98b67c6c1 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-28 +date: 2025-03-03 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 e8b9e9390655d..fa73046874593 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-28 +date: 2025-03-03 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 b24d6082827b8..78e3a11037aae 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-28 +date: 2025-03-03 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 6c9c0294d6266..3a4638855a0ca 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-28 +date: 2025-03-03 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 91269a72f0d58..2c35059bf3488 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-28 +date: 2025-03-03 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 28ea1ef540095..f7bc0ff46fa0b 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-28 +date: 2025-03-03 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 310ebca05c44c..ec1d1f98e9cb7 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-28 +date: 2025-03-03 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 5ba642250cb71..415acd213aa38 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-28 +date: 2025-03-03 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 82d65111ee93d..951f85a8de085 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-28 +date: 2025-03-03 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 a1ea401f13027..05a396eccef9f 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-28 +date: 2025-03-03 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 6e4cc8aa2c137..35199671b3f7c 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-28 +date: 2025-03-03 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 af1118f185b4e..b8340ba386a2a 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-28 +date: 2025-03-03 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 a6be6b2dfef26..ac810f183b9c8 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-28 +date: 2025-03-03 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 87a62caabc732..ebb1265d0d05e 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-28 +date: 2025-03-03 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 6b571778d257e..da28f29b667fc 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-28 +date: 2025-03-03 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 97dca24f22592..42123c0199e0c 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-28 +date: 2025-03-03 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 a73580fd52bfd..38b21f7c8faeb 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-28 +date: 2025-03-03 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 e17ac05ba9bda..d2bdbafd596e7 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-28 +date: 2025-03-03 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 8a82bcb364bb2..1c63551ed49d0 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-28 +date: 2025-03-03 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 1bf0de04509f8..cc3e0a9bad2d3 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-28 +date: 2025-03-03 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 d30371110cc33..79c878c1c057c 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-28 +date: 2025-03-03 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 de48ec6af4abb..41f28c42834ee 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-28 +date: 2025-03-03 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 c5143acd31cbf..e7160483cfbda 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-28 +date: 2025-03-03 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 6809119dbb45e..889f6e59dc792 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-28 +date: 2025-03-03 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 37cb995d0c140..dc1ad381f7abc 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-28 +date: 2025-03-03 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 a541c8af0c389..86a1a43ad51dd 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-28 +date: 2025-03-03 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 009876afc7b26..3615bc8289c36 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-28 +date: 2025-03-03 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 a6c0693afb8bd..b2cdbfb59917a 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-28 +date: 2025-03-03 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 ca0a1f9ad0da2..3e09cb8984c56 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-28 +date: 2025-03-03 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 55b7c34722f84..0227ed4eeba72 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-28 +date: 2025-03-03 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 7d2bda828b3bf..f30b199145b2d 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-28 +date: 2025-03-03 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 c36b5674a66c0..afdde1ec8a1aa 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-28 +date: 2025-03-03 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 261bd897d4853..794fb4dfb118a 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-28 +date: 2025-03-03 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 f9c7bcea8b291..247f507d7297d 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-28 +date: 2025-03-03 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 bf12653881037..f542d06bc6a5f 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-28 +date: 2025-03-03 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 e9d56750e04c5..ec63d57f0ae06 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-28 +date: 2025-03-03 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 8ba4d0c0d0ebf..81e89176cb07c 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-28 +date: 2025-03-03 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 18096b46dd37d..55591d2cf6dc4 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-28 +date: 2025-03-03 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 bf8a497b034e7..a0986d397ee27 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-28 +date: 2025-03-03 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 6f7ddbf68d5b1..d6f9e86ab219a 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-28 +date: 2025-03-03 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 89479536898a7..1d64429b152e5 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-28 +date: 2025-03-03 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 13e1676ba30e2..e28fb1d97015e 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-28 +date: 2025-03-03 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 dc7973cf95239..da423d2ccd38f 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-28 +date: 2025-03-03 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 dad7bd8ca6827..4af2a22e043b3 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-28 +date: 2025-03-03 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 2d1d887e2d507..42a5ed108e9bb 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-28 +date: 2025-03-03 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 6e9b9fbc976f1..fcd40d58e1e6b 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-28 +date: 2025-03-03 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 9d0b23003a5a9..55bb57704c328 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-28 +date: 2025-03-03 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 31a7ed3a28ab4..75daa2dda6e3d 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-28 +date: 2025-03-03 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 1ed2eb7a3efbf..9a9fb812f112c 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-28 +date: 2025-03-03 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 1eb78a894a1e5..727eaab4b3d81 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-28 +date: 2025-03-03 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 0c38fb5f9840c..a15e14fe99e0c 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-28 +date: 2025-03-03 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 c8aca6cd08461..751a73c3a330c 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-28 +date: 2025-03-03 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 8625c6e9009b4..d0b960ab0e03e 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-28 +date: 2025-03-03 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 527360fea15f6..337c86306dfe9 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-28 +date: 2025-03-03 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 5b32845d80801..8d042a26ae880 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-28 +date: 2025-03-03 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 b3428517eae4b..3ebd3783fb2e2 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-28 +date: 2025-03-03 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 8313e63ef2a72..18f2e4eabadb7 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-28 +date: 2025-03-03 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 d52c6f3d25eca..c8a671f9e08ee 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-28 +date: 2025-03-03 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 699bb7690ad09..fc950003b67a0 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-28 +date: 2025-03-03 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 3a9497a9bc81c..b6e0f158b1301 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-28 +date: 2025-03-03 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 9a32e4989623e..eadcf068399fb 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-28 +date: 2025-03-03 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 73ec5c0b9b243..dc3d1ac2b4ce2 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-28 +date: 2025-03-03 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 2854d554fdea2..32ba24e57c937 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-28 +date: 2025-03-03 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 14e7d9798f44e..f0458452b802e 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-28 +date: 2025-03-03 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 c33558f74607d..78ad9ba5e987a 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-28 +date: 2025-03-03 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 1430007065cae..d81eea8e6d0f3 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-28 +date: 2025-03-03 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 1a228c23e382a..e20f6052f2ffc 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-28 +date: 2025-03-03 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 1c7207fa24a1d..1b4d3413b1016 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-28 +date: 2025-03-03 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 6615b836f728f..625114e314f5c 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-28 +date: 2025-03-03 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 e3d6de00c9eff..c640c0f350394 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-28 +date: 2025-03-03 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 db788ddc0626c..2016e0c237e1d 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-28 +date: 2025-03-03 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 042647b3df8da..adaae59ac4a28 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-28 +date: 2025-03-03 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.mdx b/api_docs/kbn_core_http_server.mdx index 895e2079dee6e..71c7d683bdef5 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-28 +date: 2025-03-03 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 022dac5186e57..6518a63bd5366 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-28 +date: 2025-03-03 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 9c20c42383045..21abbbca9d871 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-28 +date: 2025-03-03 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 8b2e43f046ea6..d04d2099aebfe 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-28 +date: 2025-03-03 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 2b728d95394a1..0ebde9ee11c09 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-28 +date: 2025-03-03 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 3f97049e03d31..726073506436d 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-28 +date: 2025-03-03 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 e2cd84a9995d0..b8dd78c5719c3 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-28 +date: 2025-03-03 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 f0e797969744b..4f72019ffe2e5 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-28 +date: 2025-03-03 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 d4cc0138d8347..b8e68b12dfaae 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-28 +date: 2025-03-03 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 06a35b5010110..4060312f04950 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-28 +date: 2025-03-03 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 3baa79b56bf21..199850132b11e 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-28 +date: 2025-03-03 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 12d4c45a86dd3..ed8c2b917b470 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-28 +date: 2025-03-03 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 1cd0a2cd75dda..b68bd895910a0 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-28 +date: 2025-03-03 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 78deb20c7b24a..0d11501cffb84 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-28 +date: 2025-03-03 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 06cbe1bb6fa85..01ce5854153f8 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-28 +date: 2025-03-03 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 c00f1a28da9e9..befd65bed9eda 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-28 +date: 2025-03-03 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 7631096c5c6df..689d5747d7c53 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-28 +date: 2025-03-03 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 36dba297226a2..5d053747ed30f 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-28 +date: 2025-03-03 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 8bf1902ad15f9..70a5b1ffa37ac 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-28 +date: 2025-03-03 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 f56c67c797e92..7f613d11b1327 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-28 +date: 2025-03-03 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 254d2e7122376..1084dd55f8835 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-28 +date: 2025-03-03 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 81af5ce8db22c..8f3d961fec9a9 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-28 +date: 2025-03-03 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 7f2c79c9fcef0..39ee1b6fd65db 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-28 +date: 2025-03-03 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 f2ef81911415b..f0366d603af93 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-28 +date: 2025-03-03 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 548a88dcaaacb..018abb0408dc9 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-28 +date: 2025-03-03 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 f18dbbb812c66..af2ed4247ad59 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-28 +date: 2025-03-03 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 2daa32a6406c5..7223473f8391b 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-28 +date: 2025-03-03 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 072ca207dabee..b995f57369bc6 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-28 +date: 2025-03-03 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 3267ddf13d128..2e726d35da6af 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-28 +date: 2025-03-03 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 e398ad24bbb16..0bfef6124a194 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-28 +date: 2025-03-03 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 6c2ee9b846b68..43328228b4de0 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-28 +date: 2025-03-03 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 0db38a649b554..aca8f0df406f5 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-28 +date: 2025-03-03 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 0bfa1a5c882f5..b30b7789e9a83 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-28 +date: 2025-03-03 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 00324afd1ee9a..2c34e7c69e3c4 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-28 +date: 2025-03-03 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 8dae249987758..dffebef42e9ea 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-28 +date: 2025-03-03 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 c1dba5d6efed7..11f760827668c 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-28 +date: 2025-03-03 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 1831f65b4e9e9..0a2b9d8c3d99a 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-28 +date: 2025-03-03 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 cc3697e45e748..3c8ce8c226faf 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-28 +date: 2025-03-03 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 1c1e4fa380a1b..25ee7c064987b 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-28 +date: 2025-03-03 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 75ff313c82e2e..4c52b8db03d9b 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-28 +date: 2025-03-03 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 7f64ba20ffb22..40291c487b1fc 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-28 +date: 2025-03-03 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 653a72c2a2a46..df12d05faff5a 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-28 +date: 2025-03-03 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 f2418458dfa42..3b07254a49f0f 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-28 +date: 2025-03-03 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 5fffc07582ab2..f69b8e48deee7 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-28 +date: 2025-03-03 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 ba1ec7bf70fbd..2022af0cd30e7 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-28 +date: 2025-03-03 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 548fc05c679a2..f48578adde798 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-28 +date: 2025-03-03 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 145130186bfe5..9184773a95492 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-28 +date: 2025-03-03 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 61db1b03f5332..55ab757b3990f 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-28 +date: 2025-03-03 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 6dce07dacce25..4d0469bf41a34 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-28 +date: 2025-03-03 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 02c42a23596fb..c9c4580504b50 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-28 +date: 2025-03-03 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 812c193f7ef97..258f141497817 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-28 +date: 2025-03-03 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 2c2ec04aa0c2d..0e976ba0fbbd9 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-28 +date: 2025-03-03 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 82f438cec2d23..dc1ada8608ec5 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-28 +date: 2025-03-03 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 d60c0a868edad..6e9a4f1a786f3 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-28 +date: 2025-03-03 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 882ba4fe42785..15a0c082cbc7e 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-28 +date: 2025-03-03 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 7a42746de8276..3718cb5d0ec50 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-28 +date: 2025-03-03 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 a88bceaca7993..f2a17fa6016b1 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-28 +date: 2025-03-03 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 4159c84df67ec..2c0860ff1ced0 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-28 +date: 2025-03-03 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 59aafe64427d0..998b0533572a4 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-28 +date: 2025-03-03 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 753a4fc0a89c5..e0b3442960da8 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-28 +date: 2025-03-03 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 0c019d053e110..15aeec8049efb 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-28 +date: 2025-03-03 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 f2406248425cc..3a38e7f810052 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-28 +date: 2025-03-03 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 5abfc7749fcb7..a455c1f7bb7b8 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-28 +date: 2025-03-03 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 f99e7e4893b1e..c56b46cabcb12 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-28 +date: 2025-03-03 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 dbf6dba22db49..c537fa988316a 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-28 +date: 2025-03-03 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 d9b8ee32e2b50..4fb1acf7a533f 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-28 +date: 2025-03-03 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 e4df8d0119d93..8efa74083f66a 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-28 +date: 2025-03-03 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 bd1f3c7d48213..ffcf34570dfe7 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-28 +date: 2025-03-03 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 07e0f53dc79d3..3f95fbaef5dc9 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-28 +date: 2025-03-03 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 741694a67c40e..d719b5daf83e3 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-28 +date: 2025-03-03 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 e28e77b7f89e7..2b75cb9f34f8e 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-28 +date: 2025-03-03 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 17231188dda1b..4744e5b3f56b8 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-28 +date: 2025-03-03 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 f8b80d9affb5d..d1bee2e292900 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-28 +date: 2025-03-03 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 e5920eb3f9e6b..5e71230b235a4 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-28 +date: 2025-03-03 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 67c3f0fdcbb38..29580c3918966 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-28 +date: 2025-03-03 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 a8a9311faff1e..bea96be7ad223 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-28 +date: 2025-03-03 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 8a37525436116..7ab39c323f41f 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-28 +date: 2025-03-03 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 5c1286a22fd95..2c7771b3d65d3 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-28 +date: 2025-03-03 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 17b4aeec6cb24..8bf3a07050bec 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-28 +date: 2025-03-03 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 789f464904f93..2d8b977f3952c 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-28 +date: 2025-03-03 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 eeea4e7df1362..6a44b59ee94ec 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-28 +date: 2025-03-03 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 01283579c5122..29806ed4f8fa8 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-28 +date: 2025-03-03 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 82ebb3223b618..dc4f6d5115ad0 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-28 +date: 2025-03-03 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 5705ed384db09..be07b4711ec73 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-28 +date: 2025-03-03 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 a99e13df8fc2c..969e10bc65246 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-28 +date: 2025-03-03 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 7ed49540fcd1c..b3a7112ff75c3 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-28 +date: 2025-03-03 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 ce778ec9c3cea..a44e9050e235b 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-28 +date: 2025-03-03 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 e0127d3e6ac60..b07028aba8dba 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-28 +date: 2025-03-03 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 749e0844a31b4..10709bbb1c1f3 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-28 +date: 2025-03-03 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 187a62a167402..06f510dd84944 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-28 +date: 2025-03-03 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 7a91f4c2ee74b..f949947821d93 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-28 +date: 2025-03-03 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 ec2ff8ef8db09..9f63bbdb238b8 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-28 +date: 2025-03-03 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 a8c99e89f8287..8f4b5f7a49360 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-28 +date: 2025-03-03 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 3b7548d530d9f..8b39621181f6a 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-28 +date: 2025-03-03 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 ac15df093dde4..31f8d70881991 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-28 +date: 2025-03-03 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 999bcbc4933d3..89663923f7cd3 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-28 +date: 2025-03-03 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 c737db3dd25bf..dcaba492a5fb2 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-28 +date: 2025-03-03 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 c12863eb9c82d..4201bf3064377 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-28 +date: 2025-03-03 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 c6bcfa3b9d486..61cfe003fb2c9 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-28 +date: 2025-03-03 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 9fa835587348d..553ac17b19e5e 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-28 +date: 2025-03-03 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 07bf9e6854d56..6c86363f6421c 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-28 +date: 2025-03-03 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 a96417754a4e0..fd7933f26d622 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-28 +date: 2025-03-03 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 e32b8c62d7c3c..48c4b39fc18da 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-28 +date: 2025-03-03 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 98991695d9a59..40b24b2f7602e 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-28 +date: 2025-03-03 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 44ef544d8680b..f9a0f251170bf 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-28 +date: 2025-03-03 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 d3040b024c36d..adc80a9783a7f 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-28 +date: 2025-03-03 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 e791cc5f60a99..ea7b337c0874f 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-28 +date: 2025-03-03 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 b70c36b9eafb0..5d7d1e3a46fad 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-28 +date: 2025-03-03 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 971a71176f693..7ad58cc16e81d 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-28 +date: 2025-03-03 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 12733bf59760a..d931ab0c31208 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-28 +date: 2025-03-03 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 dc9911782fa07..5a31f873ca243 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-28 +date: 2025-03-03 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 c9b3a3ace405f..a6f2b9d171899 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-28 +date: 2025-03-03 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 01ca5e93155fc..9092a9b3d147b 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-28 +date: 2025-03-03 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 bb6cf9c8ef951..5c8dad27e579d 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-28 +date: 2025-03-03 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 1aaf05323cc11..8701dffd40451 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-28 +date: 2025-03-03 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 e00af519089f8..8def43eae9209 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-28 +date: 2025-03-03 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 63a3d58bf3408..3c00c63aabe6d 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-28 +date: 2025-03-03 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 d6511673820c0..122ea8ffe0713 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-28 +date: 2025-03-03 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 308f1b41fccce..ef401b6852702 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-28 +date: 2025-03-03 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 01c69ee00c7d8..be60bdb20a59f 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-28 +date: 2025-03-03 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 1ce37871144a5..e01381ae646c3 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-28 +date: 2025-03-03 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 5773f579fba04..f18b354312c20 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-28 +date: 2025-03-03 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 b5c98ba3d1166..6fb6defb35fb8 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-28 +date: 2025-03-03 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 273fb252c1604..52aea955cda84 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-28 +date: 2025-03-03 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 ea12288c3c9d7..213416947df19 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-28 +date: 2025-03-03 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 d310b49b22c7a..74ab0bc9e66de 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-28 +date: 2025-03-03 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 1af9bdfe7a6bf..11b07f9414efc 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-28 +date: 2025-03-03 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 dcd6de562f5bd..3640fa8b53252 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-28 +date: 2025-03-03 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 825abc68c6294..cb4f63bb321e6 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-28 +date: 2025-03-03 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 bafbd0c8f7940..aa0788298c736 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-28 +date: 2025-03-03 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 b30dbc4953006..e244a874ab466 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-28 +date: 2025-03-03 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 ef17d4bbeab00..17e6f153d9f98 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-28 +date: 2025-03-03 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 1bf7e5dafd180..f7f2b741f4c8d 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-28 +date: 2025-03-03 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 34690d506b7b8..af47535196baa 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-28 +date: 2025-03-03 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 ae20ce0a05b96..a509c47ad4b83 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-28 +date: 2025-03-03 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 d9ef6f6ee6db3..f487318d10266 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-28 +date: 2025-03-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/discover-utils'] --- import kbnDiscoverUtilsObj from './kbn_discover_utils.devdocs.json'; diff --git a/api_docs/kbn_doc_links.devdocs.json b/api_docs/kbn_doc_links.devdocs.json index ce9e212c857ca..16acd3d36e749 100644 --- a/api_docs/kbn_doc_links.devdocs.json +++ b/api_docs/kbn_doc_links.devdocs.json @@ -297,7 +297,7 @@ "label": "enterpriseSearch", "description": [], "signature": [ - "{ readonly aiSearchDoc: string; readonly aiSearchHelp: string; readonly apiKeys: string; readonly behavioralAnalytics: string; readonly behavioralAnalyticsCORS: string; readonly behavioralAnalyticsEvents: string; readonly buildConnector: string; readonly bulkApi: string; readonly configuration: string; readonly connectors: string; readonly connectorsClientDeploy: string; readonly connectorsMappings: string; readonly connectorsAzureBlobStorage: string; readonly connectorsBox: string; readonly connectorsClients: string; readonly connectorsConfluence: string; readonly connectorsContentExtraction: string; readonly connectorsDropbox: string; readonly connectorsGithub: string; readonly connectorsGoogleCloudStorage: string; readonly connectorsGoogleDrive: string; readonly connectorsGmail: string; readonly connectorsJira: string; readonly connectorsMicrosoftSQL: string; readonly connectorsMongoDB: string; readonly connectorsMySQL: string; readonly connectorsNative: string; readonly connectorsNetworkDrive: string; readonly connectorsNotion: string; readonly connectorsOneDrive: string; readonly connectorsOracle: string; readonly connectorsOutlook: string; readonly connectorsPostgreSQL: string; readonly connectorsRedis: string; readonly connectorsS3: string; readonly connectorsSalesforce: string; readonly connectorsServiceNow: string; readonly connectorsSharepoint: string; readonly connectorsSharepointOnline: string; readonly connectorsTeams: string; readonly connectorsSlack: string; readonly connectorsZoom: string; readonly crawlerExtractionRules: string; readonly crawlerManaging: string; readonly crawlerOverview: string; readonly deployTrainedModels: string; readonly documentLevelSecurity: string; readonly e5Model: string; readonly elser: string; readonly engines: string; readonly indexApi: string; readonly inferenceApiCreate: string; readonly ingestionApis: string; readonly ingestPipelines: string; readonly knnSearch: string; readonly knnSearchCombine: string; readonly languageAnalyzers: string; readonly languageClients: string; readonly licenseManagement: string; readonly machineLearningStart: string; readonly mailService: string; readonly mlDocumentEnrichment: string; readonly searchApplicationsTemplates: string; readonly searchApplicationsSearchApi: string; readonly searchApplications: string; readonly searchApplicationsSearch: string; readonly searchLabs: string; readonly searchLabsRepo: string; readonly semanticSearch: string; readonly searchTemplates: string; readonly semanticTextField: string; readonly start: string; readonly supportedNlpModels: string; readonly syncRules: string; readonly syncRulesAdvanced: string; readonly trainedModels: string; readonly textEmbedding: string; readonly troubleshootSetup: string; readonly usersAccess: string; }" + "{ readonly aiSearchDoc: string; readonly aiSearchHelp: string; readonly apiKeys: string; readonly behavioralAnalytics: string; readonly behavioralAnalyticsCORS: string; readonly behavioralAnalyticsEvents: string; readonly buildConnector: string; readonly bulkApi: string; readonly configuration: string; readonly connectors: string; readonly connectorsClientDeploy: string; readonly connectorsMappings: string; readonly connectorsAzureBlobStorage: string; readonly connectorsBox: string; readonly connectorsClients: string; readonly connectorsConfluence: string; readonly connectorsContentExtraction: string; readonly connectorsDropbox: string; readonly connectorsGithub: string; readonly connectorsGoogleCloudStorage: string; readonly connectorsGoogleDrive: string; readonly connectorsGmail: string; readonly connectorsJira: string; readonly connectorsMicrosoftSQL: string; readonly connectorsMongoDB: string; readonly connectorsMySQL: string; readonly connectorsNative: string; readonly connectorsNetworkDrive: string; readonly connectorsNotion: string; readonly connectorsOneDrive: string; readonly connectorsOracle: string; readonly connectorsOutlook: string; readonly connectorsPostgreSQL: string; readonly connectorsRedis: string; readonly connectorsS3: string; readonly connectorsSalesforce: string; readonly connectorsServiceNow: string; readonly connectorsSharepoint: string; readonly connectorsSharepointOnline: string; readonly connectorsTeams: string; readonly connectorsSlack: string; readonly connectorsZoom: string; readonly crawlerExtractionRules: string; readonly crawlerManaging: string; readonly crawlerOverview: string; readonly deployTrainedModels: string; readonly documentLevelSecurity: string; readonly e5Model: string; readonly elser: string; readonly engines: string; readonly indexApi: string; readonly inferenceApiCreate: string; readonly inferenceApisConfigureChunking: string; readonly ingestionApis: string; readonly ingestPipelines: string; readonly knnSearch: string; readonly knnSearchCombine: string; readonly languageAnalyzers: string; readonly languageClients: string; readonly licenseManagement: string; readonly machineLearningStart: string; readonly mailService: string; readonly mlDocumentEnrichment: string; readonly searchApplicationsTemplates: string; readonly searchApplicationsSearchApi: string; readonly searchApplications: string; readonly searchApplicationsSearch: string; readonly searchLabs: string; readonly searchLabsRepo: string; readonly semanticSearch: string; readonly searchTemplates: string; readonly semanticTextField: string; readonly start: string; readonly supportedNlpModels: string; readonly syncRules: string; readonly syncRulesAdvanced: string; readonly trainedModels: string; readonly textEmbedding: string; readonly troubleshootSetup: string; readonly usersAccess: string; }" ], "path": "src/platform/packages/shared/kbn-doc-links/src/types.ts", "deprecated": false, diff --git a/api_docs/kbn_doc_links.mdx b/api_docs/kbn_doc_links.mdx index c91d2ca728342..c179c91a6c288 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-28 +date: 2025-03-03 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 1aeeb32bab214..b3254d6770bca 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-28 +date: 2025-03-03 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 5bc25eb8b6f86..e49dffecbb196 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-28 +date: 2025-03-03 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 70e26d278cdb2..2316069bef255 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-28 +date: 2025-03-03 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 597d64dca8bf5..5a0ffc261809b 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-28 +date: 2025-03-03 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 843cc3497d89a..a2b88dcbd7016 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-28 +date: 2025-03-03 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 2f1d3d2cc667f..d81a7139f654a 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-28 +date: 2025-03-03 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.devdocs.json b/api_docs/kbn_elastic_assistant_common.devdocs.json index 819e3e844b2a0..3831bc3c4180e 100644 --- a/api_docs/kbn_elastic_assistant_common.devdocs.json +++ b/api_docs/kbn_elastic_assistant_common.devdocs.json @@ -3468,7 +3468,7 @@ "label": "ExecuteConnectorRequestBody", "description": [], "signature": [ - "{ actionTypeId: string; subAction: \"invokeAI\" | \"invokeStream\"; replacements: {} & { [k: string]: string; }; message?: string | undefined; size?: number | undefined; allow?: string[] | undefined; conversationId?: string | undefined; model?: string | undefined; alertsIndexPattern?: string | undefined; allowReplacement?: string[] | undefined; langSmithProject?: string | undefined; langSmithApiKey?: string | undefined; }" + "{ actionTypeId: string; subAction: \"invokeAI\" | \"invokeStream\"; replacements: {} & { [k: string]: string; }; message?: string | undefined; size?: number | undefined; allow?: string[] | undefined; conversationId?: string | undefined; model?: string | undefined; alertsIndexPattern?: string | undefined; allowReplacement?: string[] | undefined; langSmithProject?: string | undefined; langSmithApiKey?: string | undefined; screenContext?: { timeZone?: string | undefined; } | undefined; }" ], "path": "x-pack/platform/packages/shared/kbn-elastic-assistant-common/impl/schemas/actions_connector/post_actions_connector_execute_route.gen.ts", "deprecated": false, @@ -3483,7 +3483,7 @@ "label": "ExecuteConnectorRequestBodyInput", "description": [], "signature": [ - "{ actionTypeId: string; subAction: \"invokeAI\" | \"invokeStream\"; replacements: {} & { [k: string]: string; }; message?: string | undefined; size?: number | undefined; allow?: string[] | undefined; conversationId?: string | undefined; model?: string | undefined; alertsIndexPattern?: string | undefined; allowReplacement?: string[] | undefined; langSmithProject?: string | undefined; langSmithApiKey?: string | undefined; }" + "{ actionTypeId: string; subAction: \"invokeAI\" | \"invokeStream\"; replacements: {} & { [k: string]: string; }; message?: string | undefined; size?: number | undefined; allow?: string[] | undefined; conversationId?: string | undefined; model?: string | undefined; alertsIndexPattern?: string | undefined; allowReplacement?: string[] | undefined; langSmithProject?: string | undefined; langSmithApiKey?: string | undefined; screenContext?: { timeZone?: string | undefined; } | undefined; }" ], "path": "x-pack/platform/packages/shared/kbn-elastic-assistant-common/impl/schemas/actions_connector/post_actions_connector_execute_route.gen.ts", "deprecated": false, @@ -4480,7 +4480,7 @@ "label": "PostEvaluateBody", "description": [], "signature": [ - "{ size: number; alertsIndexPattern: string; replacements: {} & { [k: string]: string; }; graphs: string[]; datasetName: string; connectorIds: string[]; langSmithProject?: string | undefined; langSmithApiKey?: string | undefined; evaluatorConnectorId?: string | undefined; runName?: string | undefined; }" + "{ size: number; alertsIndexPattern: string; replacements: {} & { [k: string]: string; }; graphs: string[]; datasetName: string; connectorIds: string[]; langSmithProject?: string | undefined; langSmithApiKey?: string | undefined; screenContext?: { timeZone?: string | undefined; } | undefined; evaluatorConnectorId?: string | undefined; runName?: string | undefined; }" ], "path": "x-pack/platform/packages/shared/kbn-elastic-assistant-common/impl/schemas/evaluation/post_evaluate_route.gen.ts", "deprecated": false, @@ -4495,7 +4495,7 @@ "label": "PostEvaluateRequestBody", "description": [], "signature": [ - "{ size: number; alertsIndexPattern: string; replacements: {} & { [k: string]: string; }; graphs: string[]; datasetName: string; connectorIds: string[]; langSmithProject?: string | undefined; langSmithApiKey?: string | undefined; evaluatorConnectorId?: string | undefined; runName?: string | undefined; }" + "{ size: number; alertsIndexPattern: string; replacements: {} & { [k: string]: string; }; graphs: string[]; datasetName: string; connectorIds: string[]; langSmithProject?: string | undefined; langSmithApiKey?: string | undefined; screenContext?: { timeZone?: string | undefined; } | undefined; evaluatorConnectorId?: string | undefined; runName?: string | undefined; }" ], "path": "x-pack/platform/packages/shared/kbn-elastic-assistant-common/impl/schemas/evaluation/post_evaluate_route.gen.ts", "deprecated": false, @@ -4510,7 +4510,7 @@ "label": "PostEvaluateRequestBodyInput", "description": [], "signature": [ - "{ graphs: string[]; datasetName: string; connectorIds: string[]; size?: number | undefined; alertsIndexPattern?: string | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; langSmithProject?: string | undefined; langSmithApiKey?: string | undefined; evaluatorConnectorId?: string | undefined; runName?: string | undefined; }" + "{ graphs: string[]; datasetName: string; connectorIds: string[]; size?: number | undefined; alertsIndexPattern?: string | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; langSmithProject?: string | undefined; langSmithApiKey?: string | undefined; screenContext?: { timeZone?: string | undefined; } | undefined; evaluatorConnectorId?: string | undefined; runName?: string | undefined; }" ], "path": "x-pack/platform/packages/shared/kbn-elastic-assistant-common/impl/schemas/evaluation/post_evaluate_route.gen.ts", "deprecated": false, @@ -4823,6 +4823,23 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.ScreenContext", + "type": "Type", + "tags": [], + "label": "ScreenContext", + "description": [ + "\nUser screen context" + ], + "signature": [ + "{ timeZone?: string | undefined; }" + ], + "path": "x-pack/platform/packages/shared/kbn-elastic-assistant-common/impl/schemas/common_attributes.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/elastic-assistant-common", "id": "def-common.SecurityAlertContentReference", @@ -6484,7 +6501,7 @@ "label": "ExecuteConnectorRequestBody", "description": [], "signature": [ - "Zod.ZodObject<{ conversationId: Zod.ZodOptional>; message: Zod.ZodOptional; model: Zod.ZodOptional; subAction: Zod.ZodEnum<[\"invokeAI\", \"invokeStream\"]>; actionTypeId: Zod.ZodString; alertsIndexPattern: Zod.ZodOptional; allow: Zod.ZodOptional>; allowReplacement: Zod.ZodOptional>; replacements: Zod.ZodObject<{}, \"strip\", Zod.ZodString, Zod.objectOutputType<{}, Zod.ZodString, \"strip\">, Zod.objectInputType<{}, Zod.ZodString, \"strip\">>; size: Zod.ZodOptional; langSmithProject: Zod.ZodOptional; langSmithApiKey: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { actionTypeId: string; subAction: \"invokeAI\" | \"invokeStream\"; replacements: {} & { [k: string]: string; }; message?: string | undefined; size?: number | undefined; allow?: string[] | undefined; conversationId?: string | undefined; model?: string | undefined; alertsIndexPattern?: string | undefined; allowReplacement?: string[] | undefined; langSmithProject?: string | undefined; langSmithApiKey?: string | undefined; }, { actionTypeId: string; subAction: \"invokeAI\" | \"invokeStream\"; replacements: {} & { [k: string]: string; }; message?: string | undefined; size?: number | undefined; allow?: string[] | undefined; conversationId?: string | undefined; model?: string | undefined; alertsIndexPattern?: string | undefined; allowReplacement?: string[] | undefined; langSmithProject?: string | undefined; langSmithApiKey?: string | undefined; }>" + "Zod.ZodObject<{ conversationId: Zod.ZodOptional>; message: Zod.ZodOptional; model: Zod.ZodOptional; subAction: Zod.ZodEnum<[\"invokeAI\", \"invokeStream\"]>; actionTypeId: Zod.ZodString; alertsIndexPattern: Zod.ZodOptional; allow: Zod.ZodOptional>; allowReplacement: Zod.ZodOptional>; replacements: Zod.ZodObject<{}, \"strip\", Zod.ZodString, Zod.objectOutputType<{}, Zod.ZodString, \"strip\">, Zod.objectInputType<{}, Zod.ZodString, \"strip\">>; size: Zod.ZodOptional; langSmithProject: Zod.ZodOptional; langSmithApiKey: Zod.ZodOptional; screenContext: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { timeZone?: string | undefined; }, { timeZone?: string | undefined; }>>; }, \"strip\", Zod.ZodTypeAny, { actionTypeId: string; subAction: \"invokeAI\" | \"invokeStream\"; replacements: {} & { [k: string]: string; }; message?: string | undefined; size?: number | undefined; allow?: string[] | undefined; conversationId?: string | undefined; model?: string | undefined; alertsIndexPattern?: string | undefined; allowReplacement?: string[] | undefined; langSmithProject?: string | undefined; langSmithApiKey?: string | undefined; screenContext?: { timeZone?: string | undefined; } | undefined; }, { actionTypeId: string; subAction: \"invokeAI\" | \"invokeStream\"; replacements: {} & { [k: string]: string; }; message?: string | undefined; size?: number | undefined; allow?: string[] | undefined; conversationId?: string | undefined; model?: string | undefined; alertsIndexPattern?: string | undefined; allowReplacement?: string[] | undefined; langSmithProject?: string | undefined; langSmithApiKey?: string | undefined; screenContext?: { timeZone?: string | undefined; } | undefined; }>" ], "path": "x-pack/platform/packages/shared/kbn-elastic-assistant-common/impl/schemas/actions_connector/post_actions_connector_execute_route.gen.ts", "deprecated": false, @@ -7339,7 +7356,7 @@ "label": "PostEvaluateBody", "description": [], "signature": [ - "Zod.ZodObject<{ graphs: Zod.ZodArray; datasetName: Zod.ZodString; evaluatorConnectorId: Zod.ZodOptional; connectorIds: Zod.ZodArray; runName: Zod.ZodOptional; alertsIndexPattern: Zod.ZodDefault>; langSmithApiKey: Zod.ZodOptional; langSmithProject: Zod.ZodOptional; replacements: Zod.ZodDefault, Zod.objectInputType<{}, Zod.ZodString, \"strip\">>>>; size: Zod.ZodDefault>; }, \"strip\", Zod.ZodTypeAny, { size: number; alertsIndexPattern: string; replacements: {} & { [k: string]: string; }; graphs: string[]; datasetName: string; connectorIds: string[]; langSmithProject?: string | undefined; langSmithApiKey?: string | undefined; evaluatorConnectorId?: string | undefined; runName?: string | undefined; }, { graphs: string[]; datasetName: string; connectorIds: string[]; size?: number | undefined; alertsIndexPattern?: string | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; langSmithProject?: string | undefined; langSmithApiKey?: string | undefined; evaluatorConnectorId?: string | undefined; runName?: string | undefined; }>" + "Zod.ZodObject<{ graphs: Zod.ZodArray; datasetName: Zod.ZodString; evaluatorConnectorId: Zod.ZodOptional; connectorIds: Zod.ZodArray; runName: Zod.ZodOptional; alertsIndexPattern: Zod.ZodDefault>; langSmithApiKey: Zod.ZodOptional; langSmithProject: Zod.ZodOptional; replacements: Zod.ZodDefault, Zod.objectInputType<{}, Zod.ZodString, \"strip\">>>>; screenContext: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { timeZone?: string | undefined; }, { timeZone?: string | undefined; }>>; size: Zod.ZodDefault>; }, \"strip\", Zod.ZodTypeAny, { size: number; alertsIndexPattern: string; replacements: {} & { [k: string]: string; }; graphs: string[]; datasetName: string; connectorIds: string[]; langSmithProject?: string | undefined; langSmithApiKey?: string | undefined; screenContext?: { timeZone?: string | undefined; } | undefined; evaluatorConnectorId?: string | undefined; runName?: string | undefined; }, { graphs: string[]; datasetName: string; connectorIds: string[]; size?: number | undefined; alertsIndexPattern?: string | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; langSmithProject?: string | undefined; langSmithApiKey?: string | undefined; screenContext?: { timeZone?: string | undefined; } | undefined; evaluatorConnectorId?: string | undefined; runName?: string | undefined; }>" ], "path": "x-pack/platform/packages/shared/kbn-elastic-assistant-common/impl/schemas/evaluation/post_evaluate_route.gen.ts", "deprecated": false, @@ -7354,7 +7371,7 @@ "label": "PostEvaluateRequestBody", "description": [], "signature": [ - "Zod.ZodObject<{ graphs: Zod.ZodArray; datasetName: Zod.ZodString; evaluatorConnectorId: Zod.ZodOptional; connectorIds: Zod.ZodArray; runName: Zod.ZodOptional; alertsIndexPattern: Zod.ZodDefault>; langSmithApiKey: Zod.ZodOptional; langSmithProject: Zod.ZodOptional; replacements: Zod.ZodDefault, Zod.objectInputType<{}, Zod.ZodString, \"strip\">>>>; size: Zod.ZodDefault>; }, \"strip\", Zod.ZodTypeAny, { size: number; alertsIndexPattern: string; replacements: {} & { [k: string]: string; }; graphs: string[]; datasetName: string; connectorIds: string[]; langSmithProject?: string | undefined; langSmithApiKey?: string | undefined; evaluatorConnectorId?: string | undefined; runName?: string | undefined; }, { graphs: string[]; datasetName: string; connectorIds: string[]; size?: number | undefined; alertsIndexPattern?: string | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; langSmithProject?: string | undefined; langSmithApiKey?: string | undefined; evaluatorConnectorId?: string | undefined; runName?: string | undefined; }>" + "Zod.ZodObject<{ graphs: Zod.ZodArray; datasetName: Zod.ZodString; evaluatorConnectorId: Zod.ZodOptional; connectorIds: Zod.ZodArray; runName: Zod.ZodOptional; alertsIndexPattern: Zod.ZodDefault>; langSmithApiKey: Zod.ZodOptional; langSmithProject: Zod.ZodOptional; replacements: Zod.ZodDefault, Zod.objectInputType<{}, Zod.ZodString, \"strip\">>>>; screenContext: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { timeZone?: string | undefined; }, { timeZone?: string | undefined; }>>; size: Zod.ZodDefault>; }, \"strip\", Zod.ZodTypeAny, { size: number; alertsIndexPattern: string; replacements: {} & { [k: string]: string; }; graphs: string[]; datasetName: string; connectorIds: string[]; langSmithProject?: string | undefined; langSmithApiKey?: string | undefined; screenContext?: { timeZone?: string | undefined; } | undefined; evaluatorConnectorId?: string | undefined; runName?: string | undefined; }, { graphs: string[]; datasetName: string; connectorIds: string[]; size?: number | undefined; alertsIndexPattern?: string | undefined; replacements?: Zod.objectInputType<{}, Zod.ZodString, \"strip\"> | undefined; langSmithProject?: string | undefined; langSmithApiKey?: string | undefined; screenContext?: { timeZone?: string | undefined; } | undefined; evaluatorConnectorId?: string | undefined; runName?: string | undefined; }>" ], "path": "x-pack/platform/packages/shared/kbn-elastic-assistant-common/impl/schemas/evaluation/post_evaluate_route.gen.ts", "deprecated": false, @@ -7601,6 +7618,21 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "@kbn/elastic-assistant-common", + "id": "def-common.ScreenContext", + "type": "Object", + "tags": [], + "label": "ScreenContext", + "description": [], + "signature": [ + "Zod.ZodObject<{ timeZone: Zod.ZodOptional; }, \"strip\", Zod.ZodTypeAny, { timeZone?: string | undefined; }, { timeZone?: string | undefined; }>" + ], + "path": "x-pack/platform/packages/shared/kbn-elastic-assistant-common/impl/schemas/common_attributes.gen.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/elastic-assistant-common", "id": "def-common.SecurityAlertContentReference", diff --git a/api_docs/kbn_elastic_assistant_common.mdx b/api_docs/kbn_elastic_assistant_common.mdx index 62fad806e188f..fe5636d34c44d 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-28 +date: 2025-03-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/elastic-assistant-common'] --- import kbnElasticAssistantCommonObj from './kbn_elastic_assistant_common.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/security-generative-ai](https://github.com/orgs/elastic/teams/ | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 506 | 0 | 434 | 0 | +| 508 | 0 | 435 | 0 | ## Common diff --git a/api_docs/kbn_entities_schema.mdx b/api_docs/kbn_entities_schema.mdx index 52fbec3e5ccc6..bfabb89c22b86 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-28 +date: 2025-03-03 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 2495f593490ef..43946c978cc33 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-28 +date: 2025-03-03 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 ab84816769758..38995b33ed3b9 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-28 +date: 2025-03-03 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 f335253b78467..32c5b8dfa40e7 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-28 +date: 2025-03-03 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 6822eda9c35db..cae913a5bf4a0 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-28 +date: 2025-03-03 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 88e629fee124d..320d5f11d9c98 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-28 +date: 2025-03-03 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 4076a87476d03..03bbccce59ccb 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-28 +date: 2025-03-03 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 07f959c187205..f3acdc85fb618 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-28 +date: 2025-03-03 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 b5b8d6be0c426..dd55cab7aba02 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-28 +date: 2025-03-03 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 a72412fd47319..102de8890385c 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-28 +date: 2025-03-03 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 cdc6afd13ac77..82661280de70b 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-28 +date: 2025-03-03 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 c17ae875356a6..c3440ffce5248 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-28 +date: 2025-03-03 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 f0285c81abf0f..f22cea93323f1 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-28 +date: 2025-03-03 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 cc800783ce042..2b616f0a3adf1 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-28 +date: 2025-03-03 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 cfbd40d3d841e..0eb1b796fe63c 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-28 +date: 2025-03-03 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 4fc55ca43f8bb..074c45eaaab64 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-28 +date: 2025-03-03 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 89907ae58197f..a6f0983f44d1d 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-28 +date: 2025-03-03 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 88c60bc7702cf..0354cb5979eff 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-28 +date: 2025-03-03 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 bbc500b1fd323..21610d43e183e 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-28 +date: 2025-03-03 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 e93287ac01075..c48439c2ad6c3 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-28 +date: 2025-03-03 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.mdx b/api_docs/kbn_ftr_common_functional_services.mdx index f398b4e37d66d..38e1026707a0a 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-28 +date: 2025-03-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ftr-common-functional-services'] --- import kbnFtrCommonFunctionalServicesObj from './kbn_ftr_common_functional_services.devdocs.json'; diff --git a/api_docs/kbn_ftr_common_functional_ui_services.mdx b/api_docs/kbn_ftr_common_functional_ui_services.mdx index b81ec51353e7c..4fbcef3d6dbb8 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-28 +date: 2025-03-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/ftr-common-functional-ui-services'] --- import kbnFtrCommonFunctionalUiServicesObj from './kbn_ftr_common_functional_ui_services.devdocs.json'; diff --git a/api_docs/kbn_gen_ai_functional_testing.mdx b/api_docs/kbn_gen_ai_functional_testing.mdx index 947b5262b01c1..5572f26ce9cbd 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-28 +date: 2025-03-03 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 3e49085086f70..7d2ef3b98def4 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-28 +date: 2025-03-03 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 d733766717dff..1c186d79b5d30 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-28 +date: 2025-03-03 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 779dcdd5eef87..f12b44515629e 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-28 +date: 2025-03-03 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 300a1a542dd76..50cab3fb16973 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-28 +date: 2025-03-03 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 4f55343f38a76..700133011428e 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-28 +date: 2025-03-03 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 69dbdcbd66d6d..9a7e08bf13ba9 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-28 +date: 2025-03-03 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 86193ea75ffc2..40cb3b2245bb5 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-28 +date: 2025-03-03 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 e0c6006e21848..0f7c35b854ddc 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-28 +date: 2025-03-03 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 3ac89a8bba5ff..8508c19efad35 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-28 +date: 2025-03-03 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 333bf97f0b962..169378324367a 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-28 +date: 2025-03-03 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 cb98c03cc4806..ca44d90e7f591 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-28 +date: 2025-03-03 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 d5683649b6a03..1efc29beec9dd 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-28 +date: 2025-03-03 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 9b9ea05391e2f..0cdd70df97b43 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-28 +date: 2025-03-03 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 fe42a1b776561..06fdd103ca6c0 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-28 +date: 2025-03-03 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 63db29c0f1fba..840cd99d713b4 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-28 +date: 2025-03-03 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.mdx b/api_docs/kbn_index_lifecycle_management_common_shared.mdx index 1ff39ab1462bf..68186c4e4615f 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-28 +date: 2025-03-03 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 668e009e9193a..fdd9e14be6809 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-28 +date: 2025-03-03 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 c5a1f5a12ab93..4c2852884ec49 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-28 +date: 2025-03-03 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 1e756e4c3df5b..628d2a42c5d69 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-28 +date: 2025-03-03 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.mdx b/api_docs/kbn_inference_langchain.mdx index 85183e249d112..db8d01b76a26a 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-28 +date: 2025-03-03 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 8177ba530844e..6554e33508f75 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-28 +date: 2025-03-03 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 d4a898829abf5..71fe955fa5023 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-28 +date: 2025-03-03 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 c2541a9ec883f..42953c36d6798 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-28 +date: 2025-03-03 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 1ccff548c9119..356caa20492b8 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-28 +date: 2025-03-03 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 d88d7517cd689..e5faae802bd7f 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-28 +date: 2025-03-03 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 f0c45ee97732e..92b14b6dc5d79 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-28 +date: 2025-03-03 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 cca3847834dcc..409ce683413c7 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-28 +date: 2025-03-03 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 3b9e8e7409708..6d494a8be418d 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-28 +date: 2025-03-03 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 89c72f2cf4b80..f87dfb6e25b23 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-28 +date: 2025-03-03 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 df470d80dac09..2568fd06a3729 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-28 +date: 2025-03-03 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 528f3aadcf4de..8483d965c4c1c 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-28 +date: 2025-03-03 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 18e2844b0b0d1..fa005b40c9986 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-28 +date: 2025-03-03 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 32d856617e679..3133b7704cdd5 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-28 +date: 2025-03-03 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 64fac00b55b25..fb6cd7e8f4b73 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-28 +date: 2025-03-03 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 6290ecb41eaf1..1f7d395cc9470 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-28 +date: 2025-03-03 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 87390bdfa49c3..0258bdf0058aa 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-28 +date: 2025-03-03 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 09482ec64f332..50687f233cc30 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-28 +date: 2025-03-03 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 9c80e02427d66..7479e0bbc70f4 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-28 +date: 2025-03-03 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 e329dbd000af3..7bdccd64a3c20 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-28 +date: 2025-03-03 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 712e391ce3069..2eb091779848f 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-28 +date: 2025-03-03 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 bbae9c022986e..f1240deb10929 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-28 +date: 2025-03-03 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 3d67addd412e5..fea46a04b40ec 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-28 +date: 2025-03-03 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 367c00cacbcba..01f1ac414c160 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-28 +date: 2025-03-03 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 06d34bb72c950..3a58b164b4671 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-28 +date: 2025-03-03 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 2c285d28a1894..2ac7a4f0d5a98 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-28 +date: 2025-03-03 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 b74691f81dd2b..c62509d458389 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-28 +date: 2025-03-03 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 7b42c524b71ed..8b3601aedc42f 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-28 +date: 2025-03-03 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.devdocs.json b/api_docs/kbn_management_settings_ids.devdocs.json index 79d6baf8df18c..a75856e6de74b 100644 --- a/api_docs/kbn_management_settings_ids.devdocs.json +++ b/api_docs/kbn_management_settings_ids.devdocs.json @@ -1614,6 +1614,21 @@ "trackAdoption": false, "initialIsOpen": false }, + { + "parentPluginId": "@kbn/management-settings-ids", + "id": "def-common.SECURITY_SOLUTION_ENABLE_ASSET_INVENTORY_SETTING", + "type": "string", + "tags": [], + "label": "SECURITY_SOLUTION_ENABLE_ASSET_INVENTORY_SETTING", + "description": [], + "signature": [ + "\"securitySolution:enableAssetInventory\"" + ], + "path": "src/platform/packages/shared/kbn-management/settings/setting_ids/index.ts", + "deprecated": false, + "trackAdoption": false, + "initialIsOpen": false + }, { "parentPluginId": "@kbn/management-settings-ids", "id": "def-common.SECURITY_SOLUTION_ENABLE_GRAPH_VISUALIZATION_SETTING", diff --git a/api_docs/kbn_management_settings_ids.mdx b/api_docs/kbn_management_settings_ids.mdx index 3de48e296f4eb..8fb39194e403e 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-28 +date: 2025-03-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/management-settings-ids'] --- import kbnManagementSettingsIdsObj from './kbn_management_settings_ids.devdocs.json'; @@ -21,7 +21,7 @@ Contact [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sh | Public API count | Any count | Items lacking comments | Missing exports | |-------------------|-----------|------------------------|-----------------| -| 136 | 0 | 135 | 0 | +| 137 | 0 | 136 | 0 | ## Common diff --git a/api_docs/kbn_management_settings_section_registry.mdx b/api_docs/kbn_management_settings_section_registry.mdx index 5ecfaa1b9474c..adb70daf08add 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-28 +date: 2025-03-03 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 1706485a3921c..30d267a116ab6 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-28 +date: 2025-03-03 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 70bfc7cc6c4d8..670e4fb710252 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-28 +date: 2025-03-03 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 f6ce3b15df599..244a18145c9ab 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-28 +date: 2025-03-03 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 49da6c49e4da8..e630e06e71fc9 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-28 +date: 2025-03-03 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 ce676c9854a44..af2b3335773da 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-28 +date: 2025-03-03 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 3115db5ca7fce..f76fc93c582b5 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-28 +date: 2025-03-03 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 77b55598f315d..d240ea2f84163 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-28 +date: 2025-03-03 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 516ffc29e1ffb..c4a8a75e005eb 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-28 +date: 2025-03-03 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 d098dde13aafc..f6d5fc92c3243 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-28 +date: 2025-03-03 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 308581fb6c225..cad178e7306f1 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-28 +date: 2025-03-03 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 dc4e9b4bb7440..415a832d3fbf5 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-28 +date: 2025-03-03 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 ecb04e92d1c3d..b3c1dd87e755b 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-28 +date: 2025-03-03 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 b09b821ee2d08..a77f1cd3b81c0 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-28 +date: 2025-03-03 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.devdocs.json b/api_docs/kbn_ml_date_picker.devdocs.json index dd3e0343f41dd..7fe2f04228b7e 100644 --- a/api_docs/kbn_ml_date_picker.devdocs.json +++ b/api_docs/kbn_ml_date_picker.devdocs.json @@ -668,7 +668,9 @@ "\ntimefilter service." ], "signature": [ - "{ isTimeRangeSelectorEnabled: () => boolean; isAutoRefreshSelectorEnabled: () => boolean; isTimeTouched: () => boolean; isRefreshIntervalTouched: () => boolean; getEnabledUpdated$: () => ", + "{ readonly useTimefilter: () => ", + "TimefilterHook", + "; isTimeRangeSelectorEnabled: () => boolean; isAutoRefreshSelectorEnabled: () => boolean; isTimeTouched: () => boolean; isRefreshIntervalTouched: () => boolean; getEnabledUpdated$: () => ", "Observable", "; getTimeUpdate$: () => ", "Observable", diff --git a/api_docs/kbn_ml_date_picker.mdx b/api_docs/kbn_ml_date_picker.mdx index 018c4f5e823e6..642052c0229f3 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-28 +date: 2025-03-03 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 d70a9e668ab73..63979a1ed290a 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-28 +date: 2025-03-03 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 1f26105880039..a0b2952850dac 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-28 +date: 2025-03-03 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 27caaeca43f4d..b8e765231eae5 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-28 +date: 2025-03-03 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 c11d8e1c927e8..df690279087c9 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-28 +date: 2025-03-03 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 25caabccf1ff7..9b347dffdb69f 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-28 +date: 2025-03-03 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 82c7aeca6dc43..9d841d9afe470 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-28 +date: 2025-03-03 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 19cc19b63cb26..921d7b96469f1 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-28 +date: 2025-03-03 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 f962e4ceb1dd4..c34214dd9b950 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-28 +date: 2025-03-03 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 bd65e70740ee8..4195e9182c588 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-28 +date: 2025-03-03 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 e3d7ec24c5073..e54d538259534 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-28 +date: 2025-03-03 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 f4d8ab255b793..57b0155dc3c01 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-28 +date: 2025-03-03 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 ae422bc715f8b..ce53ce15c31b8 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-28 +date: 2025-03-03 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 492d6d17b4d72..ce6cda15e49fd 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-28 +date: 2025-03-03 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 33abcf8a7b7fb..7ade676f772fc 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-28 +date: 2025-03-03 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 ba13909c1e15f..e6c32b33a6cc0 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-28 +date: 2025-03-03 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 e8d5b869b2084..5308256661798 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-28 +date: 2025-03-03 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.mdx b/api_docs/kbn_ml_trained_models_utils.mdx index c1551b6dd832f..9073a888e086e 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-28 +date: 2025-03-03 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 52657624ad187..4973cfca8d308 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-28 +date: 2025-03-03 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 1ee7fdffa71d3..541533b1c4e37 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-28 +date: 2025-03-03 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 2aa236d47332a..96433e2933ac1 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-28 +date: 2025-03-03 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 f9e673792c7ef..c4983c976bcf8 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-28 +date: 2025-03-03 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 5e23476409673..ce9ec48ffbd9f 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-28 +date: 2025-03-03 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 b4d8f6253d2d1..4efab54394604 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-28 +date: 2025-03-03 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 8ab4215b1d8d9..ad012678dda85 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-28 +date: 2025-03-03 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 48f512566f71a..5ee1e76afa538 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-28 +date: 2025-03-03 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 c95e3647c9377..35eb8e75c9a2d 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-28 +date: 2025-03-03 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 f3f61a13758fb..eb32f914dfcc7 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-28 +date: 2025-03-03 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 05271c09cd353..b04c85e3bbcc5 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-28 +date: 2025-03-03 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 46062e3d7bcf2..c4146fb920347 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-28 +date: 2025-03-03 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 a2f1e1db4a472..161760c887507 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-28 +date: 2025-03-03 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 93e6d2fa0b964..6c5f797b02df4 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-28 +date: 2025-03-03 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 40993c2bb3c24..63e7c42df3b98 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-28 +date: 2025-03-03 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 67579a560182b..bb0c150cc380b 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-28 +date: 2025-03-03 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 5faae61f838b9..26d001784d9c1 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-28 +date: 2025-03-03 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 e187d98ce7da3..ac5ec7a3fcfc7 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-28 +date: 2025-03-03 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 ffc7f2a337dd4..d0e4ceb5484d1 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-28 +date: 2025-03-03 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 40a73c69a8310..18086db912f92 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-28 +date: 2025-03-03 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 225a0ea4bdc6a..f2275f47929c6 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-28 +date: 2025-03-03 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 a3b2b98f2b162..9d4faf132716f 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-28 +date: 2025-03-03 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 c5cd46ffab3a3..e95dd7fd75856 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-28 +date: 2025-03-03 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 a9c7ae268dcaf..4139d8c7cf004 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-28 +date: 2025-03-03 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 73bc310525bff..73af8d0818490 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-28 +date: 2025-03-03 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 46653ee784357..bf9799d1e46be 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-28 +date: 2025-03-03 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 9e930ab7dc503..dcf7fe25514c7 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-28 +date: 2025-03-03 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 5aba6165e83bb..736a9b8e20d3a 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-28 +date: 2025-03-03 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 3bf67ede53ce4..def62d717d546 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-28 +date: 2025-03-03 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 583ae5551f8f7..011a741757271 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-28 +date: 2025-03-03 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 fad36daf29eb2..25065b14d9412 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-28 +date: 2025-03-03 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 993b1fbf1dc6f..868b77f8e6756 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-28 +date: 2025-03-03 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 fbc5885e943d3..adfc45fc63d74 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-28 +date: 2025-03-03 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 f340b3ba3b122..a0a2d2aab8292 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-28 +date: 2025-03-03 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 c3abda5e258bb..d2cca204d4edb 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-28 +date: 2025-03-03 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 0eb1671f3f295..e01699e69e779 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-28 +date: 2025-03-03 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 efba9111a6de4..d00461a008d3d 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-28 +date: 2025-03-03 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 7c5c4ef155e47..f53bb886023b2 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-28 +date: 2025-03-03 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 240be5740f36b..e1cd6703279cc 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-28 +date: 2025-03-03 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 7799cb67b61fb..0780d4ea88388 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-28 +date: 2025-03-03 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 ca67257fd388b..cf661b135dade 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-28 +date: 2025-03-03 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 dc4d4d54c21b8..f8acfd420c87a 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-28 +date: 2025-03-03 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 9b8eb0754c3a2..36831a6e251da 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-28 +date: 2025-03-03 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 1628f463426d1..527c99b29da94 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-28 +date: 2025-03-03 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 d2ca5e66a5a60..097ab786b2039 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-28 +date: 2025-03-03 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 b5465cab9c698..afdddd8059220 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-28 +date: 2025-03-03 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 d0db061c8e824..f9c3d2f8b4c02 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-28 +date: 2025-03-03 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 a934834c33430..1ee8b8c406a96 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-28 +date: 2025-03-03 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 8293a472626a0..ab0534e543c65 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-28 +date: 2025-03-03 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 58c85080ceb14..a7f6f8d52d6b3 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-28 +date: 2025-03-03 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 27817d1e26996..667e832cbc43e 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-28 +date: 2025-03-03 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 20bd8edcf038c..d87a1e2b3420c 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-28 +date: 2025-03-03 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 dc11c869983dc..58837ad07a09b 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-28 +date: 2025-03-03 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 4e307e05b5626..14103efa3775c 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-28 +date: 2025-03-03 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 c968136916616..50b0a7189e38b 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-28 +date: 2025-03-03 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 a5219178312b8..d369619fb8a57 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-28 +date: 2025-03-03 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 1741ee641c9b8..6ac3be4051e7f 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-28 +date: 2025-03-03 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 0dd7fcb4336bc..003b28424be50 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-28 +date: 2025-03-03 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 86ffe4d6d3d3a..9f701a8fbc1b1 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-28 +date: 2025-03-03 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 cc4f1c76e4bbc..def6dc2226e85 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-28 +date: 2025-03-03 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 4e4951add4d5c..6cd5d0e60b931 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-28 +date: 2025-03-03 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 afa8fa6122a81..e14d5b11fd2c9 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-28 +date: 2025-03-03 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 bdd57f2dae10d..aaad4fb88f5b0 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-28 +date: 2025-03-03 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 edcd9477aa67b..af7e8a2a5156b 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-28 +date: 2025-03-03 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 9ff3d3c026dd3..cbe06396fda29 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-28 +date: 2025-03-03 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 d8e15af5c8bc6..7bab775093ae8 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-28 +date: 2025-03-03 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 8541b799bba4f..911478da920da 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-28 +date: 2025-03-03 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 02ce614e740f0..012a16f7a6dff 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-28 +date: 2025-03-03 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 36971ba0b065e..1a6277e8213bc 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-28 +date: 2025-03-03 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 5100c8affcf38..6e936bc8ccbf3 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-28 +date: 2025-03-03 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 24da8acdd25ec..08a7e77b1eec5 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-28 +date: 2025-03-03 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 9632fabc1edd0..c6ece037df57e 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-28 +date: 2025-03-03 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 339a979777238..87c55f69234d2 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-28 +date: 2025-03-03 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 b4d3f20fbf590..cc38e339f8b67 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-28 +date: 2025-03-03 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 96638e0197b56..0c2bae2c00d9c 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-28 +date: 2025-03-03 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 501d721889531..4e4446b3a3a33 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-28 +date: 2025-03-03 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 af2e69980d4d6..3712af024dedb 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-28 +date: 2025-03-03 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 c81f66ed1ad1a..80948e5957536 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-28 +date: 2025-03-03 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 a84f4ce7dab9b..49c607d173c56 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-28 +date: 2025-03-03 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 f370e6ac04437..8d4c08d27ee9f 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-28 +date: 2025-03-03 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 ebd36484d6f37..a91804b5ce900 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-28 +date: 2025-03-03 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 de5476a5e832a..6ecc40e8f893d 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-28 +date: 2025-03-03 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 0e555388462e8..49bf5e7aca6ef 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-28 +date: 2025-03-03 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 42492f5c8fae8..4a40b9cb706fd 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-28 +date: 2025-03-03 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 fffcab023a24e..5e4b4a61679d4 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-28 +date: 2025-03-03 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 4500d192fbd8b..95aa5c34e5175 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-28 +date: 2025-03-03 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 bf02881277e7a..551a9d8f43f33 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-28 +date: 2025-03-03 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 e7fe88160e861..ad4244a54c33d 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-28 +date: 2025-03-03 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 cbfc66aa10814..d87ecac360121 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-28 +date: 2025-03-03 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 2bcbb6ba7dee5..3a5041d97fa13 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-28 +date: 2025-03-03 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 d07f3aa8879f7..5a78b2fe45474 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-28 +date: 2025-03-03 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 5e0b70a0ca2d1..f6ed1164f40d0 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-28 +date: 2025-03-03 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 f10d6484612a3..95362e1d09f7f 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-28 +date: 2025-03-03 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 6018bdf0b3716..7683f56960301 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-28 +date: 2025-03-03 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 f2734056eb18c..c59560433902b 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-28 +date: 2025-03-03 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 336717fcf1cc3..0c1b19479c998 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-28 +date: 2025-03-03 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 0fcb3d50971bb..5db3c5ebaa24b 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-28 +date: 2025-03-03 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 af7ffe5fa2596..51b8e8bebcafd 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-28 +date: 2025-03-03 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 3c4726235380c..4257a50522651 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-28 +date: 2025-03-03 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 64be80c9f25a1..1f45fed50350e 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-28 +date: 2025-03-03 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 6735e2ad481ae..f1377423c5c7d 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-28 +date: 2025-03-03 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 10162691fcff1..9124e599e9e8a 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-28 +date: 2025-03-03 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 7c1e5f3319493..d8e395a9c7172 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-28 +date: 2025-03-03 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 957f3dba95da9..3c165ff1c0dec 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-28 +date: 2025-03-03 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 7acacac9a8b42..63a291fa31e86 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-28 +date: 2025-03-03 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 301f945da928f..9284d4f58be49 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-28 +date: 2025-03-03 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 8d1338182e518..ca9149d309fc5 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-28 +date: 2025-03-03 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 9bfda3c781d16..1029afaf6f72c 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-28 +date: 2025-03-03 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 4f1a607cbccae..f5d069213401a 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-28 +date: 2025-03-03 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 766628a2c61ad..8f4c2fbd678a8 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-28 +date: 2025-03-03 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 d1b768e5aab67..5b6298a7bc98d 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-28 +date: 2025-03-03 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 8a1c6ac00decc..2985c60218789 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-28 +date: 2025-03-03 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 eb5475e24f4c2..7f3f08be4f441 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-28 +date: 2025-03-03 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 8c184cca5ff37..35f2e253f4479 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-28 +date: 2025-03-03 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 19ba40e0770cb..d0bdfae28628d 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-28 +date: 2025-03-03 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 1e7810989de53..41eed705f6cf3 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-28 +date: 2025-03-03 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 48e0b91599d04..7b43bc38a1f6c 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-28 +date: 2025-03-03 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 6f7600b327f6b..cc1e1a788073a 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-28 +date: 2025-03-03 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 53399f0484932..9eacf2c442117 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-28 +date: 2025-03-03 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 54f87528375fd..45cfc5bd21a4d 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-28 +date: 2025-03-03 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 e6624d805d1bb..81aaae6cf7724 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-28 +date: 2025-03-03 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 9305698bbaa83..baa548dad0fcf 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-28 +date: 2025-03-03 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 17c7a441d3a3f..21bc94a8a267b 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-28 +date: 2025-03-03 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 92a85eea9a059..0b36c103f96b7 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-28 +date: 2025-03-03 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 75ccf7b93e7c0..a2ec54fb1af98 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-28 +date: 2025-03-03 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 e601d6dded4ee..d5703aee1cf74 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-28 +date: 2025-03-03 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 c23aebc15d3b0..c0690f3af3031 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-28 +date: 2025-03-03 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 e162380fc6a76..ae34e9fa781b3 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-28 +date: 2025-03-03 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 ab7d1154dbe19..bc141b0e894c7 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-28 +date: 2025-03-03 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 51803bcf28910..efbbcad8ca552 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-28 +date: 2025-03-03 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 2b0f6312688b4..d8f146bffc57c 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-28 +date: 2025-03-03 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 6315d8aef27c9..8e1be81db6175 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-28 +date: 2025-03-03 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 bf5404a376d41..ba7b484f11844 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-28 +date: 2025-03-03 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 fe9e65a8d4206..82a98539521e6 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-28 +date: 2025-03-03 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 55d8eef83eff0..eca9a117acb4c 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-28 +date: 2025-03-03 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 ee93022896e12..24be272e4a670 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-28 +date: 2025-03-03 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 0d334aad62aa3..492a8c61600a8 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-28 +date: 2025-03-03 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 97a37785d5b4d..15c8783a57cec 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-28 +date: 2025-03-03 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 9b11018627927..df83a795ba9ff 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-28 +date: 2025-03-03 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 ded5a6fa6e6f3..972f435b66670 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-28 +date: 2025-03-03 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 3b9da1186445e..8761394947960 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-28 +date: 2025-03-03 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 b67c7ba83a5b8..aa91ae000f10c 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-28 +date: 2025-03-03 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 e703ea6cb8d0a..2829ac1e92e03 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-28 +date: 2025-03-03 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 95b55a022b74d..d37045e302298 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-28 +date: 2025-03-03 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 faea522826785..38dfd26298f6c 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-28 +date: 2025-03-03 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 1b13766ee382f..026f9bf3d3ce6 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-28 +date: 2025-03-03 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 44b47ff42ac1f..c0456bd42c342 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-28 +date: 2025-03-03 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 59857e64c93c7..12b1d58c66d18 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-28 +date: 2025-03-03 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 9bbedfdf8b471..84b89b3dd9aeb 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-28 +date: 2025-03-03 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 465bcc8e2e761..e97e0096e1053 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-28 +date: 2025-03-03 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 ad552520f1b03..36b59ca6c18b0 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-28 +date: 2025-03-03 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 07506735576a2..2bdd20086ff18 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-28 +date: 2025-03-03 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 f43b0099c64a2..2058db0bd9b85 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-28 +date: 2025-03-03 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 5c0d63cb79ff3..33d0b85dffa0e 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-28 +date: 2025-03-03 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 d752b956bf3a7..f782c5fee01cf 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-28 +date: 2025-03-03 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 0f12ff428d378..d191a94222a0b 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-28 +date: 2025-03-03 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 68e79791abde8..ed7fba22f259c 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-28 +date: 2025-03-03 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 1bd038cd03ca7..a81e20e3cec92 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-28 +date: 2025-03-03 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 e0e080016ff34..461de54ebb6cd 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-28 +date: 2025-03-03 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 2b62ae8c2c638..7f2059ad89825 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-28 +date: 2025-03-03 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 113d088e377bd..895eaa1ef0c37 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-28 +date: 2025-03-03 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 82bf8ce0c51e2..6611be6722b5e 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-28 +date: 2025-03-03 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 f2950d67d7c80..62656ae1cf4c6 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-28 +date: 2025-03-03 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 acfd9fbaa5ad3..b0321ed809f63 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-28 +date: 2025-03-03 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 d3b1b2d158e8c..02e3d8db333d4 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-28 +date: 2025-03-03 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 95f452668effb..68ed6c1ea6bbd 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-28 +date: 2025-03-03 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 74516d6636ade..24a984e8ef88d 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-28 +date: 2025-03-03 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 30f0ff0838bb0..80b3a8d0cd864 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-28 +date: 2025-03-03 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 bf9ff03796bdb..b8a7d08c90983 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-28 +date: 2025-03-03 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 883345366a417..9e23eb0583c9d 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-28 +date: 2025-03-03 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 b950a61dd2806..1ada154fc5eb1 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-28 +date: 2025-03-03 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 01823388af933..5fea63232250a 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-28 +date: 2025-03-03 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 f6d4d613fbb46..405df5ef0cb4f 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-28 +date: 2025-03-03 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 a4e4f5ef9fd35..afceb81fa01c3 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-28 +date: 2025-03-03 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 3ebcc5d2a115b..694cc3984efd5 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-28 +date: 2025-03-03 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 0dc3bd3b2ddf1..c4786002ada87 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-28 +date: 2025-03-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/storybook'] --- import kbnStorybookObj from './kbn_storybook.devdocs.json'; diff --git a/api_docs/kbn_streams_schema.mdx b/api_docs/kbn_streams_schema.mdx index 2be7e9ff8ed47..7d4e2fa7a7030 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-28 +date: 2025-03-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', '@kbn/streams-schema'] --- import kbnStreamsSchemaObj from './kbn_streams_schema.devdocs.json'; diff --git a/api_docs/kbn_synthetics_e2e.mdx b/api_docs/kbn_synthetics_e2e.mdx index 2ef1e119c2ddb..62a1124e9e4bd 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-28 +date: 2025-03-03 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 0d0f97e4d5793..1b35056743331 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-28 +date: 2025-03-03 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 0b409bdf7b64d..d68de1db7a63c 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-28 +date: 2025-03-03 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 3198c370dc113..009fad35f74b4 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-28 +date: 2025-03-03 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 0a06e889ef31c..7a4dacc9b03c2 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-28 +date: 2025-03-03 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 fb11c5559e094..b1fdbd9295d81 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-28 +date: 2025-03-03 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 7dd6670c2e5cb..f809da4fac01f 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-28 +date: 2025-03-03 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 9d6c2fb7bc114..f9eea2c4a10c4 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-28 +date: 2025-03-03 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 530cb60ff8637..8aa187ba09762 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-28 +date: 2025-03-03 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 91bad76c7a804..0a4c59d7d1c50 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-28 +date: 2025-03-03 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 2c13e874ba787..9d26e4ff68e99 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-28 +date: 2025-03-03 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 4c56de7103e13..9cff60eb0b0ab 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-28 +date: 2025-03-03 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 70a381b0cb5ea..c2f5e1a15d4e3 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-28 +date: 2025-03-03 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 e478f333406f0..ea6495cf40a3c 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-28 +date: 2025-03-03 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 45eaceac50146..781ee1e2a3de0 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-28 +date: 2025-03-03 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 ed459377254e3..76c478b40063c 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-28 +date: 2025-03-03 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 2f672fe911656..4cb43e793b37a 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-28 +date: 2025-03-03 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 0c01351dffcc8..1ad44e5f90c3c 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-28 +date: 2025-03-03 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 687b39d9bbccc..9387230a81780 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-28 +date: 2025-03-03 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 9e41836dc164c..8e77bd11b7987 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-28 +date: 2025-03-03 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 5ba04cb3c837f..3291c1ee7f3f6 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-28 +date: 2025-03-03 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 6222039a91183..708666b5ea8a6 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-28 +date: 2025-03-03 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 ce83754c446e4..b472fc7432f18 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-28 +date: 2025-03-03 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 b05a017512075..917f93ad89be0 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-28 +date: 2025-03-03 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 094efd6ea8131..06afa66cb88c9 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-28 +date: 2025-03-03 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 d913b0aa96ce8..80b812a19cc3b 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-28 +date: 2025-03-03 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 433e3a4ccdeed..855c29602547c 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-28 +date: 2025-03-03 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 7f63c8a73fc3b..bb30fe5dcfec5 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-28 +date: 2025-03-03 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 e6776db75aed3..8ed4f5b7ecaa7 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-28 +date: 2025-03-03 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 ccfed2177d8e0..1a48da5d90468 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-28 +date: 2025-03-03 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 ad6a948b7cde8..2299b94f0dd4d 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-28 +date: 2025-03-03 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 5f9ca27b56cb2..8f5e4539e8a17 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-28 +date: 2025-03-03 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 745ba6c743c2d..c4886e8f84cd7 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-28 +date: 2025-03-03 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 ee6f156173e15..54fdc99c98981 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-28 +date: 2025-03-03 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 719d5786182a6..43f849b343877 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-28 +date: 2025-03-03 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 d8156d3369cfd..6314b8f286155 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-28 +date: 2025-03-03 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 da6f11973a13f..c5a2f909d679a 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-28 +date: 2025-03-03 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 bc0c4eddb992d..8f2574d8dca23 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-28 +date: 2025-03-03 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 8f693dbc4457f..389da27d0df62 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-28 +date: 2025-03-03 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 4d71f573a7454..6b7bf831f75b2 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-28 +date: 2025-03-03 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 2d6b28058b308..9858dc304f7ce 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-28 +date: 2025-03-03 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 84c4ae3519608..fba007efc3cfd 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-28 +date: 2025-03-03 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 509fca5efe958..b656eb391935d 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-28 +date: 2025-03-03 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 79b95fd72d9e2..d4780a541d6ec 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-28 +date: 2025-03-03 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 e8efc65722b1e..76fde39bae3a1 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-28 +date: 2025-03-03 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 f435da7a13d42..9710535dff0d6 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-28 +date: 2025-03-03 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 d90c101436c41..16556731cf575 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-28 +date: 2025-03-03 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 5739c31ade119..cd07f728b6621 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-28 +date: 2025-03-03 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 afe9cc23e39c1..5c01ed1b36717 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-28 +date: 2025-03-03 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 64a5ebd0b48f8..9def04949ddf9 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-28 +date: 2025-03-03 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 0bbd99effb793..f464b61425545 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-28 +date: 2025-03-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'metricsDataAccess'] --- import metricsDataAccessObj from './metrics_data_access.devdocs.json'; diff --git a/api_docs/ml.mdx b/api_docs/ml.mdx index 76d4ef8f064bf..e6fcf44794338 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-28 +date: 2025-03-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'ml'] --- import mlObj from './ml.devdocs.json'; diff --git a/api_docs/mock_idp_plugin.mdx b/api_docs/mock_idp_plugin.mdx index fb2d24c465d23..98ea29dddb4dd 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-28 +date: 2025-03-03 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 ae14946d4182d..1023ea4caf26c 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-28 +date: 2025-03-03 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 8c8837bff6951..9817253961ffc 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-28 +date: 2025-03-03 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 0f02176505c44..24d9dbc5de1b5 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-28 +date: 2025-03-03 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 f844a1b34ae21..436b02abce532 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-28 +date: 2025-03-03 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 43355b6962928..8e826b6d599ce 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-28 +date: 2025-03-03 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 88bedfe945607..097549fc4961a 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-28 +date: 2025-03-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'notifications'] --- import notificationsObj from './notifications.devdocs.json'; diff --git a/api_docs/observability.mdx b/api_docs/observability.mdx index f2b4b39949386..64304f354b26b 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-28 +date: 2025-03-03 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 e7e40d9aab134..34d436cb72519 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-28 +date: 2025-03-03 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 444fa01e32ca3..047ea2daf13cd 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-28 +date: 2025-03-03 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 cca8bfd62e4d6..d498fb1e43d9c 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-28 +date: 2025-03-03 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 bdab6afe2b4b3..1825323d5f46b 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-28 +date: 2025-03-03 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 5586d2e3ba79a..7a40c0aae0590 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-28 +date: 2025-03-03 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 fc004919220f6..dd431771c75a0 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-28 +date: 2025-03-03 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 f8f30fad25e92..5822b96a80eaf 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-28 +date: 2025-03-03 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 488dfa2cfdef3..7086248b6dc5d 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-28 +date: 2025-03-03 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 95b87510412fd..364423da382b5 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-28 +date: 2025-03-03 tags: ['contributor', 'dev', 'apidocs', 'kibana'] --- @@ -21,7 +21,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | API Count | Any Count | Missing comments | Missing exports | |--------------|----------|-----------------|--------| -| 56622 | 253 | 42284 | 2748 | +| 56631 | 253 | 42291 | 2750 | ## Plugin Directory @@ -48,14 +48,14 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | cloudLinks | [@elastic/kibana-core](https://github.com/orgs/elastic/teams/kibana-core) | Adds the links to the Elastic Cloud console | 0 | 0 | 0 | 0 | | | [@elastic/kibana-cloud-security-posture](https://github.com/orgs/elastic/teams/kibana-cloud-security-posture) | The cloud security posture plugin | 13 | 0 | 2 | 2 | | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 39 | 0 | 30 | 0 | -| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Content management app | 150 | 0 | 126 | 6 | -| | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | The Controls Plugin contains embeddable components intended to create a simple query interface for end users, and a powerful editing suite that allows dashboard authors to build controls | 137 | 0 | 133 | 15 | +| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Content management app | 150 | 0 | 126 | 7 | +| | [@elastic/kibana-presentation](https://github.com/orgs/elastic/teams/kibana-presentation) | The Controls Plugin contains embeddable components intended to create a simple query interface for end users, and a powerful editing suite that allows dashboard authors to build controls | 142 | 0 | 138 | 15 | | crossClusterReplication | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 0 | 0 | 0 | 0 | | customBranding | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | Enables customization of Kibana | 0 | 0 | 0 | 0 | | | [@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) | Adds the Dashboard app to Kibana | 93 | 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. | 3219 | 31 | 2602 | 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 | 27 | | | [@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 | @@ -525,7 +525,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/security-threat-hunting-explore](https://github.com/orgs/elastic/teams/security-threat-hunting-explore) | - | 16 | 0 | 8 | 0 | | | [@elastic/obs-ux-logs-team](https://github.com/orgs/elastic/teams/obs-ux-logs-team) | - | 42 | 0 | 41 | 0 | | | [@elastic/security-generative-ai](https://github.com/orgs/elastic/teams/security-generative-ai) | - | 172 | 0 | 144 | 9 | -| | [@elastic/security-generative-ai](https://github.com/orgs/elastic/teams/security-generative-ai) | - | 506 | 0 | 434 | 0 | +| | [@elastic/security-generative-ai](https://github.com/orgs/elastic/teams/security-generative-ai) | - | 508 | 0 | 435 | 0 | | | [@elastic/obs-entities](https://github.com/orgs/elastic/teams/obs-entities) | - | 51 | 0 | 51 | 0 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 55 | 0 | 40 | 7 | | | [@elastic/kibana-operations](https://github.com/orgs/elastic/teams/kibana-operations) | - | 32 | 0 | 19 | 1 | @@ -596,7 +596,7 @@ tags: ['contributor', 'dev', 'apidocs', 'kibana'] | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 23 | 0 | 7 | 0 | | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 8 | 0 | 2 | 3 | | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 45 | 0 | 0 | 0 | -| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 136 | 0 | 135 | 0 | +| | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 137 | 0 | 136 | 0 | | | [@elastic/appex-sharedux](https://github.com/orgs/elastic/teams/appex-sharedux) | - | 20 | 0 | 11 | 0 | | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 89 | 0 | 10 | 0 | | | [@elastic/kibana-management](https://github.com/orgs/elastic/teams/kibana-management) | - | 56 | 0 | 6 | 0 | diff --git a/api_docs/presentation_panel.mdx b/api_docs/presentation_panel.mdx index 3cfb84a7c1b3d..4944f418aa5f9 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-28 +date: 2025-03-03 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 2dfa37e526738..4461933589e2a 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-28 +date: 2025-03-03 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 c2b537ad366a1..be20910212bb9 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-28 +date: 2025-03-03 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 28ca51e7a4a94..5d1fea5cae94a 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-28 +date: 2025-03-03 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 bc761a0a699c6..c16f5b32219fc 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-28 +date: 2025-03-03 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 b382489c2839d..8ab06cc184399 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-28 +date: 2025-03-03 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 c8b8c849ef215..cd444413d0c40 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-28 +date: 2025-03-03 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 bbdaa6722488a..c3acd7a8c7951 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-28 +date: 2025-03-03 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 afa4b3a865744..247717e188ca5 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-28 +date: 2025-03-03 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 bf7450d2f3a97..e15ad37b8191c 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-28 +date: 2025-03-03 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 1b1445f47d3e3..e2c0083a04126 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-28 +date: 2025-03-03 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 35ec93bf0e1df..420c47f1df853 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-28 +date: 2025-03-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'savedObjectsFinder'] --- import savedObjectsFinderObj from './saved_objects_finder.devdocs.json'; diff --git a/api_docs/saved_objects_management.mdx b/api_docs/saved_objects_management.mdx index bd8f6388f9f0e..63639b8b78adc 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-28 +date: 2025-03-03 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 90921528edcd1..16bb8e2812501 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-28 +date: 2025-03-03 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 175f312097401..ec868379ac6c2 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-28 +date: 2025-03-03 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 434853a9f82ed..44759a3df5843 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-28 +date: 2025-03-03 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 99c2c7fdbfc98..8793259eb8800 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-28 +date: 2025-03-03 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 5fbe6b5ff8261..11adaf682b659 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-28 +date: 2025-03-03 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 bae29367ed21a..550e7ba69e5f3 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-28 +date: 2025-03-03 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 b6c7c374d55d0..382b4726cc0e1 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-28 +date: 2025-03-03 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 634cec1b42659..f834488921ec0 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-28 +date: 2025-03-03 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 18d350a5c66f2..c63452888ee28 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-28 +date: 2025-03-03 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 3ae3f14cf10be..436f71c517f46 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-28 +date: 2025-03-03 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 d2ea2bc22c598..3bfb694e6a144 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-28 +date: 2025-03-03 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 547689c8cdf66..3d4635eeec419 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-28 +date: 2025-03-03 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 8c76828fde86c..b80d2cf34f3ba 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-28 +date: 2025-03-03 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 86da7385dd9ae..66bab932ee200 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-28 +date: 2025-03-03 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 dc455d572b811..294a885d18d94 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-28 +date: 2025-03-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'security'] --- import securityObj from './security.devdocs.json'; diff --git a/api_docs/security_solution.devdocs.json b/api_docs/security_solution.devdocs.json index b41bfc88c6314..15dc024f785b9 100644 --- a/api_docs/security_solution.devdocs.json +++ b/api_docs/security_solution.devdocs.json @@ -474,7 +474,7 @@ "\nExperimental flag needed to enable the link" ], "signature": [ - "\"assistantModelEvaluation\" | \"defendInsights\" | \"alertSuppressionForSequenceEqlRuleEnabled\" | \"excludePoliciesInFilterEnabled\" | \"kubernetesEnabled\" | \"donutChartEmbeddablesEnabled\" | \"previewTelemetryUrlEnabled\" | \"extendedRuleExecutionLoggingEnabled\" | \"socTrendsEnabled\" | \"responseActionUploadEnabled\" | \"automatedProcessActionsEnabled\" | \"responseActionsSentinelOneV1Enabled\" | \"responseActionsSentinelOneV2Enabled\" | \"responseActionsSentinelOneGetFileEnabled\" | \"responseActionsSentinelOneKillProcessEnabled\" | \"responseActionsSentinelOneProcessesEnabled\" | \"responseActionsCrowdstrikeManualHostIsolationEnabled\" | \"endpointManagementSpaceAwarenessEnabled\" | \"securitySolutionNotesDisabled\" | \"newUserDetailsFlyoutManagedUser\" | \"riskScoringPersistence\" | \"riskScoringRoutesEnabled\" | \"esqlRulesDisabled\" | \"protectionUpdatesEnabled\" | \"disableTimelineSaveTour\" | \"riskEnginePrivilegesRouteEnabled\" | \"sentinelOneDataInAnalyzerEnabled\" | \"sentinelOneManualHostActionsEnabled\" | \"crowdstrikeDataInAnalyzerEnabled\" | \"responseActionsTelemetryEnabled\" | \"jamfDataInAnalyzerEnabled\" | \"prebuiltRulesCustomizationEnabled\" | \"malwareOnWriteScanOptionAvailable\" | \"unifiedManifestEnabled\" | \"valueListItemsModalEnabled\" | \"storeGapsInEventLogEnabled\" | \"filterProcessDescendantsForEventFiltersEnabled\" | \"dataIngestionHubEnabled\" | \"entityStoreDisabled\" | \"serviceEntityStoreEnabled\" | \"siemMigrationsDisabled\" | \"newExpandableFlyoutNavigationDisabled\" | \"crowdstrikeRunScriptEnabled\" | \"assetInventoryUXEnabled\" | \"responseActionsMSDefenderEndpointEnabled\" | \"eventCollectionDataReductionBannerEnabled\" | undefined" + "\"assistantModelEvaluation\" | \"defendInsights\" | \"alertSuppressionForSequenceEqlRuleEnabled\" | \"excludePoliciesInFilterEnabled\" | \"kubernetesEnabled\" | \"donutChartEmbeddablesEnabled\" | \"previewTelemetryUrlEnabled\" | \"extendedRuleExecutionLoggingEnabled\" | \"socTrendsEnabled\" | \"responseActionUploadEnabled\" | \"automatedProcessActionsEnabled\" | \"responseActionsSentinelOneV1Enabled\" | \"responseActionsSentinelOneV2Enabled\" | \"responseActionsSentinelOneGetFileEnabled\" | \"responseActionsSentinelOneKillProcessEnabled\" | \"responseActionsSentinelOneProcessesEnabled\" | \"responseActionsCrowdstrikeManualHostIsolationEnabled\" | \"endpointManagementSpaceAwarenessEnabled\" | \"securitySolutionNotesDisabled\" | \"newUserDetailsFlyoutManagedUser\" | \"riskScoringPersistence\" | \"riskScoringRoutesEnabled\" | \"esqlRulesDisabled\" | \"protectionUpdatesEnabled\" | \"disableTimelineSaveTour\" | \"riskEnginePrivilegesRouteEnabled\" | \"sentinelOneDataInAnalyzerEnabled\" | \"sentinelOneManualHostActionsEnabled\" | \"crowdstrikeDataInAnalyzerEnabled\" | \"responseActionsTelemetryEnabled\" | \"jamfDataInAnalyzerEnabled\" | \"prebuiltRulesCustomizationEnabled\" | \"malwareOnWriteScanOptionAvailable\" | \"unifiedManifestEnabled\" | \"valueListItemsModalEnabled\" | \"storeGapsInEventLogEnabled\" | \"filterProcessDescendantsForEventFiltersEnabled\" | \"dataIngestionHubEnabled\" | \"entityStoreDisabled\" | \"serviceEntityStoreEnabled\" | \"siemMigrationsDisabled\" | \"newExpandableFlyoutNavigationDisabled\" | \"crowdstrikeRunScriptEnabled\" | \"responseActionsMSDefenderEndpointEnabled\" | \"eventCollectionDataReductionBannerEnabled\" | undefined" ], "path": "x-pack/solutions/security/plugins/security_solution/public/common/links/types.ts", "deprecated": false, @@ -554,7 +554,7 @@ "\nExperimental flag needed to disable the link. Opposite of experimentalKey" ], "signature": [ - "\"assistantModelEvaluation\" | \"defendInsights\" | \"alertSuppressionForSequenceEqlRuleEnabled\" | \"excludePoliciesInFilterEnabled\" | \"kubernetesEnabled\" | \"donutChartEmbeddablesEnabled\" | \"previewTelemetryUrlEnabled\" | \"extendedRuleExecutionLoggingEnabled\" | \"socTrendsEnabled\" | \"responseActionUploadEnabled\" | \"automatedProcessActionsEnabled\" | \"responseActionsSentinelOneV1Enabled\" | \"responseActionsSentinelOneV2Enabled\" | \"responseActionsSentinelOneGetFileEnabled\" | \"responseActionsSentinelOneKillProcessEnabled\" | \"responseActionsSentinelOneProcessesEnabled\" | \"responseActionsCrowdstrikeManualHostIsolationEnabled\" | \"endpointManagementSpaceAwarenessEnabled\" | \"securitySolutionNotesDisabled\" | \"newUserDetailsFlyoutManagedUser\" | \"riskScoringPersistence\" | \"riskScoringRoutesEnabled\" | \"esqlRulesDisabled\" | \"protectionUpdatesEnabled\" | \"disableTimelineSaveTour\" | \"riskEnginePrivilegesRouteEnabled\" | \"sentinelOneDataInAnalyzerEnabled\" | \"sentinelOneManualHostActionsEnabled\" | \"crowdstrikeDataInAnalyzerEnabled\" | \"responseActionsTelemetryEnabled\" | \"jamfDataInAnalyzerEnabled\" | \"prebuiltRulesCustomizationEnabled\" | \"malwareOnWriteScanOptionAvailable\" | \"unifiedManifestEnabled\" | \"valueListItemsModalEnabled\" | \"storeGapsInEventLogEnabled\" | \"filterProcessDescendantsForEventFiltersEnabled\" | \"dataIngestionHubEnabled\" | \"entityStoreDisabled\" | \"serviceEntityStoreEnabled\" | \"siemMigrationsDisabled\" | \"newExpandableFlyoutNavigationDisabled\" | \"crowdstrikeRunScriptEnabled\" | \"assetInventoryUXEnabled\" | \"responseActionsMSDefenderEndpointEnabled\" | \"eventCollectionDataReductionBannerEnabled\" | undefined" + "\"assistantModelEvaluation\" | \"defendInsights\" | \"alertSuppressionForSequenceEqlRuleEnabled\" | \"excludePoliciesInFilterEnabled\" | \"kubernetesEnabled\" | \"donutChartEmbeddablesEnabled\" | \"previewTelemetryUrlEnabled\" | \"extendedRuleExecutionLoggingEnabled\" | \"socTrendsEnabled\" | \"responseActionUploadEnabled\" | \"automatedProcessActionsEnabled\" | \"responseActionsSentinelOneV1Enabled\" | \"responseActionsSentinelOneV2Enabled\" | \"responseActionsSentinelOneGetFileEnabled\" | \"responseActionsSentinelOneKillProcessEnabled\" | \"responseActionsSentinelOneProcessesEnabled\" | \"responseActionsCrowdstrikeManualHostIsolationEnabled\" | \"endpointManagementSpaceAwarenessEnabled\" | \"securitySolutionNotesDisabled\" | \"newUserDetailsFlyoutManagedUser\" | \"riskScoringPersistence\" | \"riskScoringRoutesEnabled\" | \"esqlRulesDisabled\" | \"protectionUpdatesEnabled\" | \"disableTimelineSaveTour\" | \"riskEnginePrivilegesRouteEnabled\" | \"sentinelOneDataInAnalyzerEnabled\" | \"sentinelOneManualHostActionsEnabled\" | \"crowdstrikeDataInAnalyzerEnabled\" | \"responseActionsTelemetryEnabled\" | \"jamfDataInAnalyzerEnabled\" | \"prebuiltRulesCustomizationEnabled\" | \"malwareOnWriteScanOptionAvailable\" | \"unifiedManifestEnabled\" | \"valueListItemsModalEnabled\" | \"storeGapsInEventLogEnabled\" | \"filterProcessDescendantsForEventFiltersEnabled\" | \"dataIngestionHubEnabled\" | \"entityStoreDisabled\" | \"serviceEntityStoreEnabled\" | \"siemMigrationsDisabled\" | \"newExpandableFlyoutNavigationDisabled\" | \"crowdstrikeRunScriptEnabled\" | \"responseActionsMSDefenderEndpointEnabled\" | \"eventCollectionDataReductionBannerEnabled\" | undefined" ], "path": "x-pack/solutions/security/plugins/security_solution/public/common/links/types.ts", "deprecated": false, @@ -1828,7 +1828,7 @@ "label": "experimentalFeatures", "description": [], "signature": [ - "{ readonly alertSuppressionForSequenceEqlRuleEnabled: boolean; readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly automatedProcessActionsEnabled: boolean; readonly responseActionsSentinelOneV1Enabled: boolean; readonly responseActionsSentinelOneV2Enabled: boolean; readonly responseActionsSentinelOneGetFileEnabled: boolean; readonly responseActionsSentinelOneKillProcessEnabled: boolean; readonly responseActionsSentinelOneProcessesEnabled: boolean; readonly responseActionsCrowdstrikeManualHostIsolationEnabled: boolean; readonly endpointManagementSpaceAwarenessEnabled: boolean; readonly securitySolutionNotesDisabled: boolean; readonly assistantModelEvaluation: boolean; readonly newUserDetailsFlyoutManagedUser: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly esqlRulesDisabled: boolean; readonly protectionUpdatesEnabled: boolean; readonly disableTimelineSaveTour: boolean; readonly riskEnginePrivilegesRouteEnabled: boolean; readonly sentinelOneDataInAnalyzerEnabled: boolean; readonly sentinelOneManualHostActionsEnabled: boolean; readonly crowdstrikeDataInAnalyzerEnabled: boolean; readonly responseActionsTelemetryEnabled: boolean; readonly jamfDataInAnalyzerEnabled: boolean; readonly prebuiltRulesCustomizationEnabled: boolean; readonly malwareOnWriteScanOptionAvailable: boolean; readonly unifiedManifestEnabled: boolean; readonly valueListItemsModalEnabled: boolean; readonly storeGapsInEventLogEnabled: boolean; readonly filterProcessDescendantsForEventFiltersEnabled: boolean; readonly dataIngestionHubEnabled: boolean; readonly entityStoreDisabled: boolean; readonly serviceEntityStoreEnabled: boolean; readonly siemMigrationsDisabled: boolean; readonly defendInsights: boolean; readonly newExpandableFlyoutNavigationDisabled: boolean; readonly crowdstrikeRunScriptEnabled: boolean; readonly assetInventoryUXEnabled: boolean; readonly responseActionsMSDefenderEndpointEnabled: boolean; readonly eventCollectionDataReductionBannerEnabled: boolean; }" + "{ readonly alertSuppressionForSequenceEqlRuleEnabled: boolean; readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly automatedProcessActionsEnabled: boolean; readonly responseActionsSentinelOneV1Enabled: boolean; readonly responseActionsSentinelOneV2Enabled: boolean; readonly responseActionsSentinelOneGetFileEnabled: boolean; readonly responseActionsSentinelOneKillProcessEnabled: boolean; readonly responseActionsSentinelOneProcessesEnabled: boolean; readonly responseActionsCrowdstrikeManualHostIsolationEnabled: boolean; readonly endpointManagementSpaceAwarenessEnabled: boolean; readonly securitySolutionNotesDisabled: boolean; readonly assistantModelEvaluation: boolean; readonly newUserDetailsFlyoutManagedUser: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly esqlRulesDisabled: boolean; readonly protectionUpdatesEnabled: boolean; readonly disableTimelineSaveTour: boolean; readonly riskEnginePrivilegesRouteEnabled: boolean; readonly sentinelOneDataInAnalyzerEnabled: boolean; readonly sentinelOneManualHostActionsEnabled: boolean; readonly crowdstrikeDataInAnalyzerEnabled: boolean; readonly responseActionsTelemetryEnabled: boolean; readonly jamfDataInAnalyzerEnabled: boolean; readonly prebuiltRulesCustomizationEnabled: boolean; readonly malwareOnWriteScanOptionAvailable: boolean; readonly unifiedManifestEnabled: boolean; readonly valueListItemsModalEnabled: boolean; readonly storeGapsInEventLogEnabled: boolean; readonly filterProcessDescendantsForEventFiltersEnabled: boolean; readonly dataIngestionHubEnabled: boolean; readonly entityStoreDisabled: boolean; readonly serviceEntityStoreEnabled: boolean; readonly siemMigrationsDisabled: boolean; readonly defendInsights: boolean; readonly newExpandableFlyoutNavigationDisabled: boolean; readonly crowdstrikeRunScriptEnabled: boolean; readonly responseActionsMSDefenderEndpointEnabled: boolean; readonly eventCollectionDataReductionBannerEnabled: boolean; }" ], "path": "x-pack/solutions/security/plugins/security_solution/public/types.ts", "deprecated": false, @@ -3057,7 +3057,7 @@ "\nThe security solution generic experimental features" ], "signature": [ - "{ readonly alertSuppressionForSequenceEqlRuleEnabled: boolean; readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly automatedProcessActionsEnabled: boolean; readonly responseActionsSentinelOneV1Enabled: boolean; readonly responseActionsSentinelOneV2Enabled: boolean; readonly responseActionsSentinelOneGetFileEnabled: boolean; readonly responseActionsSentinelOneKillProcessEnabled: boolean; readonly responseActionsSentinelOneProcessesEnabled: boolean; readonly responseActionsCrowdstrikeManualHostIsolationEnabled: boolean; readonly endpointManagementSpaceAwarenessEnabled: boolean; readonly securitySolutionNotesDisabled: boolean; readonly assistantModelEvaluation: boolean; readonly newUserDetailsFlyoutManagedUser: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly esqlRulesDisabled: boolean; readonly protectionUpdatesEnabled: boolean; readonly disableTimelineSaveTour: boolean; readonly riskEnginePrivilegesRouteEnabled: boolean; readonly sentinelOneDataInAnalyzerEnabled: boolean; readonly sentinelOneManualHostActionsEnabled: boolean; readonly crowdstrikeDataInAnalyzerEnabled: boolean; readonly responseActionsTelemetryEnabled: boolean; readonly jamfDataInAnalyzerEnabled: boolean; readonly prebuiltRulesCustomizationEnabled: boolean; readonly malwareOnWriteScanOptionAvailable: boolean; readonly unifiedManifestEnabled: boolean; readonly valueListItemsModalEnabled: boolean; readonly storeGapsInEventLogEnabled: boolean; readonly filterProcessDescendantsForEventFiltersEnabled: boolean; readonly dataIngestionHubEnabled: boolean; readonly entityStoreDisabled: boolean; readonly serviceEntityStoreEnabled: boolean; readonly siemMigrationsDisabled: boolean; readonly defendInsights: boolean; readonly newExpandableFlyoutNavigationDisabled: boolean; readonly crowdstrikeRunScriptEnabled: boolean; readonly assetInventoryUXEnabled: boolean; readonly responseActionsMSDefenderEndpointEnabled: boolean; readonly eventCollectionDataReductionBannerEnabled: boolean; }" + "{ readonly alertSuppressionForSequenceEqlRuleEnabled: boolean; readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly automatedProcessActionsEnabled: boolean; readonly responseActionsSentinelOneV1Enabled: boolean; readonly responseActionsSentinelOneV2Enabled: boolean; readonly responseActionsSentinelOneGetFileEnabled: boolean; readonly responseActionsSentinelOneKillProcessEnabled: boolean; readonly responseActionsSentinelOneProcessesEnabled: boolean; readonly responseActionsCrowdstrikeManualHostIsolationEnabled: boolean; readonly endpointManagementSpaceAwarenessEnabled: boolean; readonly securitySolutionNotesDisabled: boolean; readonly assistantModelEvaluation: boolean; readonly newUserDetailsFlyoutManagedUser: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly esqlRulesDisabled: boolean; readonly protectionUpdatesEnabled: boolean; readonly disableTimelineSaveTour: boolean; readonly riskEnginePrivilegesRouteEnabled: boolean; readonly sentinelOneDataInAnalyzerEnabled: boolean; readonly sentinelOneManualHostActionsEnabled: boolean; readonly crowdstrikeDataInAnalyzerEnabled: boolean; readonly responseActionsTelemetryEnabled: boolean; readonly jamfDataInAnalyzerEnabled: boolean; readonly prebuiltRulesCustomizationEnabled: boolean; readonly malwareOnWriteScanOptionAvailable: boolean; readonly unifiedManifestEnabled: boolean; readonly valueListItemsModalEnabled: boolean; readonly storeGapsInEventLogEnabled: boolean; readonly filterProcessDescendantsForEventFiltersEnabled: boolean; readonly dataIngestionHubEnabled: boolean; readonly entityStoreDisabled: boolean; readonly serviceEntityStoreEnabled: boolean; readonly siemMigrationsDisabled: boolean; readonly defendInsights: boolean; readonly newExpandableFlyoutNavigationDisabled: boolean; readonly crowdstrikeRunScriptEnabled: boolean; readonly responseActionsMSDefenderEndpointEnabled: boolean; readonly eventCollectionDataReductionBannerEnabled: boolean; }" ], "path": "x-pack/solutions/security/plugins/security_solution/server/plugin_contract.ts", "deprecated": false, @@ -3230,7 +3230,7 @@ "label": "ExperimentalFeatures", "description": [], "signature": [ - "{ readonly alertSuppressionForSequenceEqlRuleEnabled: boolean; readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly automatedProcessActionsEnabled: boolean; readonly responseActionsSentinelOneV1Enabled: boolean; readonly responseActionsSentinelOneV2Enabled: boolean; readonly responseActionsSentinelOneGetFileEnabled: boolean; readonly responseActionsSentinelOneKillProcessEnabled: boolean; readonly responseActionsSentinelOneProcessesEnabled: boolean; readonly responseActionsCrowdstrikeManualHostIsolationEnabled: boolean; readonly endpointManagementSpaceAwarenessEnabled: boolean; readonly securitySolutionNotesDisabled: boolean; readonly assistantModelEvaluation: boolean; readonly newUserDetailsFlyoutManagedUser: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly esqlRulesDisabled: boolean; readonly protectionUpdatesEnabled: boolean; readonly disableTimelineSaveTour: boolean; readonly riskEnginePrivilegesRouteEnabled: boolean; readonly sentinelOneDataInAnalyzerEnabled: boolean; readonly sentinelOneManualHostActionsEnabled: boolean; readonly crowdstrikeDataInAnalyzerEnabled: boolean; readonly responseActionsTelemetryEnabled: boolean; readonly jamfDataInAnalyzerEnabled: boolean; readonly prebuiltRulesCustomizationEnabled: boolean; readonly malwareOnWriteScanOptionAvailable: boolean; readonly unifiedManifestEnabled: boolean; readonly valueListItemsModalEnabled: boolean; readonly storeGapsInEventLogEnabled: boolean; readonly filterProcessDescendantsForEventFiltersEnabled: boolean; readonly dataIngestionHubEnabled: boolean; readonly entityStoreDisabled: boolean; readonly serviceEntityStoreEnabled: boolean; readonly siemMigrationsDisabled: boolean; readonly defendInsights: boolean; readonly newExpandableFlyoutNavigationDisabled: boolean; readonly crowdstrikeRunScriptEnabled: boolean; readonly assetInventoryUXEnabled: boolean; readonly responseActionsMSDefenderEndpointEnabled: boolean; readonly eventCollectionDataReductionBannerEnabled: boolean; }" + "{ readonly alertSuppressionForSequenceEqlRuleEnabled: boolean; readonly excludePoliciesInFilterEnabled: boolean; readonly kubernetesEnabled: boolean; readonly donutChartEmbeddablesEnabled: boolean; readonly previewTelemetryUrlEnabled: boolean; readonly extendedRuleExecutionLoggingEnabled: boolean; readonly socTrendsEnabled: boolean; readonly responseActionUploadEnabled: boolean; readonly automatedProcessActionsEnabled: boolean; readonly responseActionsSentinelOneV1Enabled: boolean; readonly responseActionsSentinelOneV2Enabled: boolean; readonly responseActionsSentinelOneGetFileEnabled: boolean; readonly responseActionsSentinelOneKillProcessEnabled: boolean; readonly responseActionsSentinelOneProcessesEnabled: boolean; readonly responseActionsCrowdstrikeManualHostIsolationEnabled: boolean; readonly endpointManagementSpaceAwarenessEnabled: boolean; readonly securitySolutionNotesDisabled: boolean; readonly assistantModelEvaluation: boolean; readonly newUserDetailsFlyoutManagedUser: boolean; readonly riskScoringPersistence: boolean; readonly riskScoringRoutesEnabled: boolean; readonly esqlRulesDisabled: boolean; readonly protectionUpdatesEnabled: boolean; readonly disableTimelineSaveTour: boolean; readonly riskEnginePrivilegesRouteEnabled: boolean; readonly sentinelOneDataInAnalyzerEnabled: boolean; readonly sentinelOneManualHostActionsEnabled: boolean; readonly crowdstrikeDataInAnalyzerEnabled: boolean; readonly responseActionsTelemetryEnabled: boolean; readonly jamfDataInAnalyzerEnabled: boolean; readonly prebuiltRulesCustomizationEnabled: boolean; readonly malwareOnWriteScanOptionAvailable: boolean; readonly unifiedManifestEnabled: boolean; readonly valueListItemsModalEnabled: boolean; readonly storeGapsInEventLogEnabled: boolean; readonly filterProcessDescendantsForEventFiltersEnabled: boolean; readonly dataIngestionHubEnabled: boolean; readonly entityStoreDisabled: boolean; readonly serviceEntityStoreEnabled: boolean; readonly siemMigrationsDisabled: boolean; readonly defendInsights: boolean; readonly newExpandableFlyoutNavigationDisabled: boolean; readonly crowdstrikeRunScriptEnabled: boolean; readonly responseActionsMSDefenderEndpointEnabled: boolean; readonly eventCollectionDataReductionBannerEnabled: boolean; }" ], "path": "x-pack/solutions/security/plugins/security_solution/common/experimental_features.ts", "deprecated": false, @@ -3311,7 +3311,7 @@ "\nA list of allowed values that can be used in `xpack.securitySolution.enableExperimental`.\nThis object is then used to validate and parse the value entered." ], "signature": [ - "{ readonly alertSuppressionForSequenceEqlRuleEnabled: true; readonly excludePoliciesInFilterEnabled: false; readonly kubernetesEnabled: false; readonly donutChartEmbeddablesEnabled: false; readonly previewTelemetryUrlEnabled: false; readonly extendedRuleExecutionLoggingEnabled: false; readonly socTrendsEnabled: false; readonly responseActionUploadEnabled: true; readonly automatedProcessActionsEnabled: true; readonly responseActionsSentinelOneV1Enabled: true; readonly responseActionsSentinelOneV2Enabled: true; readonly responseActionsSentinelOneGetFileEnabled: true; readonly responseActionsSentinelOneKillProcessEnabled: true; readonly responseActionsSentinelOneProcessesEnabled: true; readonly responseActionsCrowdstrikeManualHostIsolationEnabled: true; readonly endpointManagementSpaceAwarenessEnabled: false; readonly securitySolutionNotesDisabled: false; readonly assistantModelEvaluation: false; readonly newUserDetailsFlyoutManagedUser: false; readonly riskScoringPersistence: true; readonly riskScoringRoutesEnabled: true; readonly esqlRulesDisabled: false; readonly protectionUpdatesEnabled: true; readonly disableTimelineSaveTour: false; readonly riskEnginePrivilegesRouteEnabled: true; readonly sentinelOneDataInAnalyzerEnabled: true; readonly sentinelOneManualHostActionsEnabled: true; readonly crowdstrikeDataInAnalyzerEnabled: true; readonly responseActionsTelemetryEnabled: false; readonly jamfDataInAnalyzerEnabled: true; readonly prebuiltRulesCustomizationEnabled: false; readonly malwareOnWriteScanOptionAvailable: true; readonly unifiedManifestEnabled: true; readonly valueListItemsModalEnabled: true; readonly storeGapsInEventLogEnabled: false; readonly filterProcessDescendantsForEventFiltersEnabled: true; readonly dataIngestionHubEnabled: false; readonly entityStoreDisabled: false; readonly serviceEntityStoreEnabled: true; readonly siemMigrationsDisabled: false; readonly defendInsights: true; readonly newExpandableFlyoutNavigationDisabled: false; readonly crowdstrikeRunScriptEnabled: true; readonly assetInventoryUXEnabled: false; readonly responseActionsMSDefenderEndpointEnabled: true; readonly eventCollectionDataReductionBannerEnabled: false; }" + "{ readonly alertSuppressionForSequenceEqlRuleEnabled: true; readonly excludePoliciesInFilterEnabled: false; readonly kubernetesEnabled: false; readonly donutChartEmbeddablesEnabled: false; readonly previewTelemetryUrlEnabled: false; readonly extendedRuleExecutionLoggingEnabled: false; readonly socTrendsEnabled: false; readonly responseActionUploadEnabled: true; readonly automatedProcessActionsEnabled: true; readonly responseActionsSentinelOneV1Enabled: true; readonly responseActionsSentinelOneV2Enabled: true; readonly responseActionsSentinelOneGetFileEnabled: true; readonly responseActionsSentinelOneKillProcessEnabled: true; readonly responseActionsSentinelOneProcessesEnabled: true; readonly responseActionsCrowdstrikeManualHostIsolationEnabled: true; readonly endpointManagementSpaceAwarenessEnabled: false; readonly securitySolutionNotesDisabled: false; readonly assistantModelEvaluation: false; readonly newUserDetailsFlyoutManagedUser: false; readonly riskScoringPersistence: true; readonly riskScoringRoutesEnabled: true; readonly esqlRulesDisabled: false; readonly protectionUpdatesEnabled: true; readonly disableTimelineSaveTour: false; readonly riskEnginePrivilegesRouteEnabled: true; readonly sentinelOneDataInAnalyzerEnabled: true; readonly sentinelOneManualHostActionsEnabled: true; readonly crowdstrikeDataInAnalyzerEnabled: true; readonly responseActionsTelemetryEnabled: false; readonly jamfDataInAnalyzerEnabled: true; readonly prebuiltRulesCustomizationEnabled: false; readonly malwareOnWriteScanOptionAvailable: true; readonly unifiedManifestEnabled: true; readonly valueListItemsModalEnabled: true; readonly storeGapsInEventLogEnabled: false; readonly filterProcessDescendantsForEventFiltersEnabled: true; readonly dataIngestionHubEnabled: false; readonly entityStoreDisabled: false; readonly serviceEntityStoreEnabled: true; readonly siemMigrationsDisabled: false; readonly defendInsights: true; readonly newExpandableFlyoutNavigationDisabled: false; readonly crowdstrikeRunScriptEnabled: true; readonly responseActionsMSDefenderEndpointEnabled: true; readonly eventCollectionDataReductionBannerEnabled: false; }" ], "path": "x-pack/solutions/security/plugins/security_solution/common/experimental_features.ts", "deprecated": false, diff --git a/api_docs/security_solution.mdx b/api_docs/security_solution.mdx index 9e173b7f8848a..b29d6292478b5 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-28 +date: 2025-03-03 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 5295b00c31309..4aa8b9caa2cc9 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-28 +date: 2025-03-03 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 e54b3eac2646e..ff34bb5f9ab5c 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-28 +date: 2025-03-03 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 f9e169d7eb89b..470c91ab67709 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-28 +date: 2025-03-03 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 d525ae39b7de1..bf8d933329822 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-28 +date: 2025-03-03 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 59a15ec8fd897..f894ab294025f 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-28 +date: 2025-03-03 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 4e051d8f762cb..35b38dc7e79d9 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-28 +date: 2025-03-03 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 657b71c12e123..7b066b07ec84b 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-28 +date: 2025-03-03 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 f305c909c730c..568abf90895a4 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-28 +date: 2025-03-03 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 ee99c11edc8a3..40becb200d8f7 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-28 +date: 2025-03-03 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 623f982736e68..53cc895d7bdff 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-28 +date: 2025-03-03 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 44f9ee144b0c6..ca96a1728470c 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-28 +date: 2025-03-03 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 9f4dbf8a672fb..8027e0e1f7941 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-28 +date: 2025-03-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'stackConnectors'] --- import stackConnectorsObj from './stack_connectors.devdocs.json'; diff --git a/api_docs/streams.mdx b/api_docs/streams.mdx index 9869f9e750bb1..22b643e90f9be 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-28 +date: 2025-03-03 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 173137ef1c961..3ee0ccb71e20c 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-28 +date: 2025-03-03 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 30bc14372f85b..c55c549736f8b 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-28 +date: 2025-03-03 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 1905f9be66133..78e38580eefd9 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-28 +date: 2025-03-03 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 7f528d0c1674a..42b5d7fb34d0c 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-28 +date: 2025-03-03 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 b837d004f2b57..4269804e700fc 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-28 +date: 2025-03-03 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 bff09fc70755a..bab19ddcb791e 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-28 +date: 2025-03-03 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 8c12214f9a8fe..9b4c782888c8f 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-28 +date: 2025-03-03 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 2c887a6aaf6fc..fceabd8172e22 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-28 +date: 2025-03-03 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 85a00aff92b1c..220fe11a8288e 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-28 +date: 2025-03-03 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 b4a62ca6f5dd2..b33cf38b0ef61 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-28 +date: 2025-03-03 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 14e032b53a9af..3683cd9e3311a 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-28 +date: 2025-03-03 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 f4a462d30c33a..5a163e4bf1ced 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-28 +date: 2025-03-03 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 bab26f66a61d0..57dee7500597c 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-28 +date: 2025-03-03 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 8c8ecdf56a179..88188e189bb19 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-28 +date: 2025-03-03 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 85579eb73894d..dbe69dd6d9a30 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-28 +date: 2025-03-03 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 04e5d574e1fad..6e4b310e35af2 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-28 +date: 2025-03-03 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 35e5f41e8d0ca..4d902a93de715 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-28 +date: 2025-03-03 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 97c58128c2bf8..6a2be4b1108e0 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-28 +date: 2025-03-03 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 0a5206cec3989..df5cc207769ad 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-28 +date: 2025-03-03 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 5776f9db045f2..48c2d2870c1b6 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-28 +date: 2025-03-03 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 efc0fc3857ce0..6f6ee7b773261 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-28 +date: 2025-03-03 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 6d77ebba06c06..8b9407f96d443 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-28 +date: 2025-03-03 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 22362b5b42e42..0c1be123c8e68 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-28 +date: 2025-03-03 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 8e3a2179ad3b2..baf3bf6f83ebf 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-28 +date: 2025-03-03 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 eb24670bb5318..151ee44ea3917 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-28 +date: 2025-03-03 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 3e39b903f7b59..4cdaef8a1bba0 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-28 +date: 2025-03-03 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 1774624e7f4ed..ad898b4861083 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-28 +date: 2025-03-03 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 1457cc4a0036f..08125ec2d2882 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-28 +date: 2025-03-03 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 7d061166a1c00..0f9f1039f8188 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-28 +date: 2025-03-03 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 245dfedd7c9e3..07b54fea10497 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-28 +date: 2025-03-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visTypeXy'] --- import visTypeXyObj from './vis_type_xy.devdocs.json'; diff --git a/api_docs/visualizations.devdocs.json b/api_docs/visualizations.devdocs.json index 1186b27dd9128..4018fb89760bc 100644 --- a/api_docs/visualizations.devdocs.json +++ b/api_docs/visualizations.devdocs.json @@ -4087,7 +4087,9 @@ "label": "timefilter", "description": [], "signature": [ - "{ isTimeRangeSelectorEnabled: () => boolean; isAutoRefreshSelectorEnabled: () => boolean; isTimeTouched: () => boolean; isRefreshIntervalTouched: () => boolean; getEnabledUpdated$: () => ", + "{ readonly useTimefilter: () => ", + "TimefilterHook", + "; isTimeRangeSelectorEnabled: () => boolean; isAutoRefreshSelectorEnabled: () => boolean; isTimeTouched: () => boolean; isRefreshIntervalTouched: () => boolean; getEnabledUpdated$: () => ", "Observable", "; getTimeUpdate$: () => ", "Observable", diff --git a/api_docs/visualizations.mdx b/api_docs/visualizations.mdx index 4ac8e797534d1..8066f953114c2 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-28 +date: 2025-03-03 tags: ['contributor', 'dev', 'apidocs', 'kibana', 'visualizations'] --- import visualizationsObj from './visualizations.devdocs.json'; diff --git a/examples/controls_example/public/app/control_group_renderer_examples/search_example.tsx b/examples/controls_example/public/app/control_group_renderer_examples/search_example.tsx index 2325840c21927..651377e7393ba 100644 --- a/examples/controls_example/public/app/control_group_renderer_examples/search_example.tsx +++ b/examples/controls_example/public/app/control_group_renderer_examples/search_example.tsx @@ -12,6 +12,7 @@ import { lastValueFrom } from 'rxjs'; import { v4 as uuidv4 } from 'uuid'; import { + EuiButton, EuiCallOut, EuiLoadingSpinner, EuiPanel, @@ -19,12 +20,16 @@ import { EuiText, EuiTitle, } from '@elastic/eui'; -import { ControlGroupRenderer, ControlGroupRendererApi } from '@kbn/controls-plugin/public'; +import { + ControlGroupRenderer, + ControlGroupRendererApi, + DefaultControlApi, + OptionsListControlApi, +} from '@kbn/controls-plugin/public'; import type { DataPublicPluginStart } from '@kbn/data-plugin/public'; import type { DataView } from '@kbn/data-views-plugin/public'; import type { Filter, Query, TimeRange } from '@kbn/es-query'; import type { NavigationPublicPluginStart } from '@kbn/navigation-plugin/public'; - import { PLUGIN_ID } from '../../constants'; interface Props { @@ -33,6 +38,8 @@ interface Props { navigation: NavigationPublicPluginStart; } +const DEST_COUNTRY_CONTROL_ID = 'DEST_COUNTRY_CONTROL_ID'; + export const SearchExample = ({ data, dataView, navigation }: Props) => { const [controlFilters, setControlFilters] = useState([]); const [controlGroupAPI, setControlGroupAPI] = useState(); @@ -107,7 +114,8 @@ export const SearchExample = ({ data, dataView, navigation }: Props) => {

Pass filters, query, and time range to narrow controls. Combine search bar filters with - controls filters to narrow results. + controls filters to narrow results. Programmatically interact with individual controls by + accessing their API from controlGroupApi.children$.

@@ -130,16 +138,21 @@ export const SearchExample = ({ data, dataView, navigation }: Props) => { query={query} showSearchBar={true} /> + { - await builder.addDataControlFromField(initialState, { - dataViewId: dataView.id!, - title: 'Destintion country', - fieldName: 'geo.dest', - width: 'medium', - grow: false, - }); + await builder.addDataControlFromField( + initialState, + { + dataViewId: dataView.id!, + title: 'Destintion country', + fieldName: 'geo.dest', + width: 'medium', + grow: false, + }, + DEST_COUNTRY_CONTROL_ID + ); await builder.addDataControlFromField(initialState, { dataViewId: dataView.id!, fieldName: 'bytes', @@ -155,9 +168,42 @@ export const SearchExample = ({ data, dataView, navigation }: Props) => { onApiAvailable={setControlGroupAPI} timeRange={timeRange} /> + {isSearching ? :

Hits: {hits}

}
+ + + { + if (controlGroupAPI) { + Object.values(controlGroupAPI.children$.getValue()).forEach((controlApi) => { + (controlApi as DefaultControlApi)?.clearSelections(); + }); + } + }} + > + Clear all controls + + + { + if (controlGroupAPI) { + const controlApi = controlGroupAPI.children$.getValue()[ + DEST_COUNTRY_CONTROL_ID + ] as Partial; + if (controlApi && controlApi.setSelectedOptions) { + controlApi.setSelectedOptions(['CN']); + } + } + }} + > + Set destination country to CN + ); diff --git a/oas_docs/bundle.json b/oas_docs/bundle.json index 64924423c40a5..693d4c89c7782 100644 --- a/oas_docs/bundle.json +++ b/oas_docs/bundle.json @@ -25956,12 +25956,101 @@ "proxy_id": { "nullable": true, "type": "string" + }, + "secrets": { + "additionalProperties": false, + "properties": { + "ssl": { + "additionalProperties": false, + "properties": { + "es_key": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + }, + { + "type": "string" + } + ] + }, + "key": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + }, + { + "type": "string" + } + ] + } + }, + "type": "object" + } + }, + "type": "object" + }, + "ssl": { + "additionalProperties": false, + "nullable": true, + "properties": { + "certificate": { + "type": "string" + }, + "certificate_authorities": { + "items": { + "type": "string" + }, + "type": "array" + }, + "client_auth": { + "enum": [ + "optional", + "required", + "none" + ], + "type": "string" + }, + "es_certificate": { + "type": "string" + }, + "es_certificate_authorities": { + "items": { + "type": "string" + }, + "type": "array" + }, + "es_key": { + "type": "string" + }, + "key": { + "type": "string" + } + }, + "type": "object" } }, "required": [ - "id", "name", - "host_urls" + "host_urls", + "id" ], "type": "object" }, @@ -26069,6 +26158,95 @@ "proxy_id": { "nullable": true, "type": "string" + }, + "secrets": { + "additionalProperties": false, + "properties": { + "ssl": { + "additionalProperties": false, + "properties": { + "es_key": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + }, + { + "type": "string" + } + ] + }, + "key": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + }, + { + "type": "string" + } + ] + } + }, + "type": "object" + } + }, + "type": "object" + }, + "ssl": { + "additionalProperties": false, + "nullable": true, + "properties": { + "certificate": { + "type": "string" + }, + "certificate_authorities": { + "items": { + "type": "string" + }, + "type": "array" + }, + "client_auth": { + "enum": [ + "optional", + "required", + "none" + ], + "type": "string" + }, + "es_certificate": { + "type": "string" + }, + "es_certificate_authorities": { + "items": { + "type": "string" + }, + "type": "array" + }, + "es_key": { + "type": "string" + }, + "key": { + "type": "string" + } + }, + "type": "object" } }, "required": [ @@ -26117,12 +26295,101 @@ "proxy_id": { "nullable": true, "type": "string" + }, + "secrets": { + "additionalProperties": false, + "properties": { + "ssl": { + "additionalProperties": false, + "properties": { + "es_key": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + }, + { + "type": "string" + } + ] + }, + "key": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + }, + { + "type": "string" + } + ] + } + }, + "type": "object" + } + }, + "type": "object" + }, + "ssl": { + "additionalProperties": false, + "nullable": true, + "properties": { + "certificate": { + "type": "string" + }, + "certificate_authorities": { + "items": { + "type": "string" + }, + "type": "array" + }, + "client_auth": { + "enum": [ + "optional", + "required", + "none" + ], + "type": "string" + }, + "es_certificate": { + "type": "string" + }, + "es_certificate_authorities": { + "items": { + "type": "string" + }, + "type": "array" + }, + "es_key": { + "type": "string" + }, + "key": { + "type": "string" + } + }, + "type": "object" } }, "required": [ - "id", "name", - "host_urls" + "host_urls", + "id" ], "type": "object" } @@ -26295,12 +26562,101 @@ "proxy_id": { "nullable": true, "type": "string" + }, + "secrets": { + "additionalProperties": false, + "properties": { + "ssl": { + "additionalProperties": false, + "properties": { + "es_key": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + }, + { + "type": "string" + } + ] + }, + "key": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + }, + { + "type": "string" + } + ] + } + }, + "type": "object" + } + }, + "type": "object" + }, + "ssl": { + "additionalProperties": false, + "nullable": true, + "properties": { + "certificate": { + "type": "string" + }, + "certificate_authorities": { + "items": { + "type": "string" + }, + "type": "array" + }, + "client_auth": { + "enum": [ + "optional", + "required", + "none" + ], + "type": "string" + }, + "es_certificate": { + "type": "string" + }, + "es_certificate_authorities": { + "items": { + "type": "string" + }, + "type": "array" + }, + "es_key": { + "type": "string" + }, + "key": { + "type": "string" + } + }, + "type": "object" } }, "required": [ - "id", "name", - "host_urls" + "host_urls", + "id" ], "type": "object" } @@ -26394,6 +26750,95 @@ "proxy_id": { "nullable": true, "type": "string" + }, + "secrets": { + "additionalProperties": false, + "properties": { + "ssl": { + "additionalProperties": false, + "properties": { + "es_key": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + }, + { + "type": "string" + } + ] + }, + "key": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + }, + { + "type": "string" + } + ] + } + }, + "type": "object" + } + }, + "type": "object" + }, + "ssl": { + "additionalProperties": false, + "nullable": true, + "properties": { + "certificate": { + "type": "string" + }, + "certificate_authorities": { + "items": { + "type": "string" + }, + "type": "array" + }, + "client_auth": { + "enum": [ + "optional", + "required", + "none" + ], + "type": "string" + }, + "es_certificate": { + "type": "string" + }, + "es_certificate_authorities": { + "items": { + "type": "string" + }, + "type": "array" + }, + "es_key": { + "type": "string" + }, + "key": { + "type": "string" + } + }, + "type": "object" } }, "required": [ @@ -26441,12 +26886,101 @@ "proxy_id": { "nullable": true, "type": "string" + }, + "secrets": { + "additionalProperties": false, + "properties": { + "ssl": { + "additionalProperties": false, + "properties": { + "es_key": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + }, + { + "type": "string" + } + ] + }, + "key": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + }, + { + "type": "string" + } + ] + } + }, + "type": "object" + } + }, + "type": "object" + }, + "ssl": { + "additionalProperties": false, + "nullable": true, + "properties": { + "certificate": { + "type": "string" + }, + "certificate_authorities": { + "items": { + "type": "string" + }, + "type": "array" + }, + "client_auth": { + "enum": [ + "optional", + "required", + "none" + ], + "type": "string" + }, + "es_certificate": { + "type": "string" + }, + "es_certificate_authorities": { + "items": { + "type": "string" + }, + "type": "array" + }, + "es_key": { + "type": "string" + }, + "key": { + "type": "string" + } + }, + "type": "object" } }, "required": [ - "id", "name", - "host_urls" + "host_urls", + "id" ], "type": "object" } diff --git a/oas_docs/bundle.serverless.json b/oas_docs/bundle.serverless.json index 6d3e356f8d5f9..63525bb631a3d 100644 --- a/oas_docs/bundle.serverless.json +++ b/oas_docs/bundle.serverless.json @@ -25956,12 +25956,101 @@ "proxy_id": { "nullable": true, "type": "string" + }, + "secrets": { + "additionalProperties": false, + "properties": { + "ssl": { + "additionalProperties": false, + "properties": { + "es_key": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + }, + { + "type": "string" + } + ] + }, + "key": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + }, + { + "type": "string" + } + ] + } + }, + "type": "object" + } + }, + "type": "object" + }, + "ssl": { + "additionalProperties": false, + "nullable": true, + "properties": { + "certificate": { + "type": "string" + }, + "certificate_authorities": { + "items": { + "type": "string" + }, + "type": "array" + }, + "client_auth": { + "enum": [ + "optional", + "required", + "none" + ], + "type": "string" + }, + "es_certificate": { + "type": "string" + }, + "es_certificate_authorities": { + "items": { + "type": "string" + }, + "type": "array" + }, + "es_key": { + "type": "string" + }, + "key": { + "type": "string" + } + }, + "type": "object" } }, "required": [ - "id", "name", - "host_urls" + "host_urls", + "id" ], "type": "object" }, @@ -26069,6 +26158,95 @@ "proxy_id": { "nullable": true, "type": "string" + }, + "secrets": { + "additionalProperties": false, + "properties": { + "ssl": { + "additionalProperties": false, + "properties": { + "es_key": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + }, + { + "type": "string" + } + ] + }, + "key": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + }, + { + "type": "string" + } + ] + } + }, + "type": "object" + } + }, + "type": "object" + }, + "ssl": { + "additionalProperties": false, + "nullable": true, + "properties": { + "certificate": { + "type": "string" + }, + "certificate_authorities": { + "items": { + "type": "string" + }, + "type": "array" + }, + "client_auth": { + "enum": [ + "optional", + "required", + "none" + ], + "type": "string" + }, + "es_certificate": { + "type": "string" + }, + "es_certificate_authorities": { + "items": { + "type": "string" + }, + "type": "array" + }, + "es_key": { + "type": "string" + }, + "key": { + "type": "string" + } + }, + "type": "object" } }, "required": [ @@ -26117,12 +26295,101 @@ "proxy_id": { "nullable": true, "type": "string" + }, + "secrets": { + "additionalProperties": false, + "properties": { + "ssl": { + "additionalProperties": false, + "properties": { + "es_key": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + }, + { + "type": "string" + } + ] + }, + "key": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + }, + { + "type": "string" + } + ] + } + }, + "type": "object" + } + }, + "type": "object" + }, + "ssl": { + "additionalProperties": false, + "nullable": true, + "properties": { + "certificate": { + "type": "string" + }, + "certificate_authorities": { + "items": { + "type": "string" + }, + "type": "array" + }, + "client_auth": { + "enum": [ + "optional", + "required", + "none" + ], + "type": "string" + }, + "es_certificate": { + "type": "string" + }, + "es_certificate_authorities": { + "items": { + "type": "string" + }, + "type": "array" + }, + "es_key": { + "type": "string" + }, + "key": { + "type": "string" + } + }, + "type": "object" } }, "required": [ - "id", "name", - "host_urls" + "host_urls", + "id" ], "type": "object" } @@ -26295,12 +26562,101 @@ "proxy_id": { "nullable": true, "type": "string" + }, + "secrets": { + "additionalProperties": false, + "properties": { + "ssl": { + "additionalProperties": false, + "properties": { + "es_key": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + }, + { + "type": "string" + } + ] + }, + "key": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + }, + { + "type": "string" + } + ] + } + }, + "type": "object" + } + }, + "type": "object" + }, + "ssl": { + "additionalProperties": false, + "nullable": true, + "properties": { + "certificate": { + "type": "string" + }, + "certificate_authorities": { + "items": { + "type": "string" + }, + "type": "array" + }, + "client_auth": { + "enum": [ + "optional", + "required", + "none" + ], + "type": "string" + }, + "es_certificate": { + "type": "string" + }, + "es_certificate_authorities": { + "items": { + "type": "string" + }, + "type": "array" + }, + "es_key": { + "type": "string" + }, + "key": { + "type": "string" + } + }, + "type": "object" } }, "required": [ - "id", "name", - "host_urls" + "host_urls", + "id" ], "type": "object" } @@ -26394,6 +26750,95 @@ "proxy_id": { "nullable": true, "type": "string" + }, + "secrets": { + "additionalProperties": false, + "properties": { + "ssl": { + "additionalProperties": false, + "properties": { + "es_key": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + }, + { + "type": "string" + } + ] + }, + "key": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + }, + { + "type": "string" + } + ] + } + }, + "type": "object" + } + }, + "type": "object" + }, + "ssl": { + "additionalProperties": false, + "nullable": true, + "properties": { + "certificate": { + "type": "string" + }, + "certificate_authorities": { + "items": { + "type": "string" + }, + "type": "array" + }, + "client_auth": { + "enum": [ + "optional", + "required", + "none" + ], + "type": "string" + }, + "es_certificate": { + "type": "string" + }, + "es_certificate_authorities": { + "items": { + "type": "string" + }, + "type": "array" + }, + "es_key": { + "type": "string" + }, + "key": { + "type": "string" + } + }, + "type": "object" } }, "required": [ @@ -26441,12 +26886,101 @@ "proxy_id": { "nullable": true, "type": "string" + }, + "secrets": { + "additionalProperties": false, + "properties": { + "ssl": { + "additionalProperties": false, + "properties": { + "es_key": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + }, + { + "type": "string" + } + ] + }, + "key": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + }, + { + "type": "string" + } + ] + } + }, + "type": "object" + } + }, + "type": "object" + }, + "ssl": { + "additionalProperties": false, + "nullable": true, + "properties": { + "certificate": { + "type": "string" + }, + "certificate_authorities": { + "items": { + "type": "string" + }, + "type": "array" + }, + "client_auth": { + "enum": [ + "optional", + "required", + "none" + ], + "type": "string" + }, + "es_certificate": { + "type": "string" + }, + "es_certificate_authorities": { + "items": { + "type": "string" + }, + "type": "array" + }, + "es_key": { + "type": "string" + }, + "key": { + "type": "string" + } + }, + "type": "object" } }, "required": [ - "id", "name", - "host_urls" + "host_urls", + "id" ], "type": "object" } diff --git a/oas_docs/output/kibana.serverless.yaml b/oas_docs/output/kibana.serverless.yaml index 24af10be0be64..30ac0dc59283b 100644 --- a/oas_docs/output/kibana.serverless.yaml +++ b/oas_docs/output/kibana.serverless.yaml @@ -24602,10 +24602,65 @@ paths: proxy_id: nullable: true type: string + secrets: + additionalProperties: false + type: object + properties: + ssl: + additionalProperties: false + type: object + properties: + es_key: + anyOf: + - additionalProperties: false + type: object + properties: + id: + type: string + required: + - id + - type: string + key: + anyOf: + - additionalProperties: false + type: object + properties: + id: + type: string + required: + - id + - type: string + ssl: + additionalProperties: false + nullable: true + type: object + properties: + certificate: + type: string + certificate_authorities: + items: + type: string + type: array + client_auth: + enum: + - optional + - required + - none + type: string + es_certificate: + type: string + es_certificate_authorities: + items: + type: string + type: array + es_key: + type: string + key: + type: string required: - - id - name - host_urls + - id type: array page: type: number @@ -24678,6 +24733,61 @@ paths: proxy_id: nullable: true type: string + secrets: + additionalProperties: false + type: object + properties: + ssl: + additionalProperties: false + type: object + properties: + es_key: + anyOf: + - additionalProperties: false + type: object + properties: + id: + type: string + required: + - id + - type: string + key: + anyOf: + - additionalProperties: false + type: object + properties: + id: + type: string + required: + - id + - type: string + ssl: + additionalProperties: false + nullable: true + type: object + properties: + certificate: + type: string + certificate_authorities: + items: + type: string + type: array + client_auth: + enum: + - optional + - required + - none + type: string + es_certificate: + type: string + es_certificate_authorities: + items: + type: string + type: array + es_key: + type: string + key: + type: string required: - name - host_urls @@ -24713,10 +24823,65 @@ paths: proxy_id: nullable: true type: string + secrets: + additionalProperties: false + type: object + properties: + ssl: + additionalProperties: false + type: object + properties: + es_key: + anyOf: + - additionalProperties: false + type: object + properties: + id: + type: string + required: + - id + - type: string + key: + anyOf: + - additionalProperties: false + type: object + properties: + id: + type: string + required: + - id + - type: string + ssl: + additionalProperties: false + nullable: true + type: object + properties: + certificate: + type: string + certificate_authorities: + items: + type: string + type: array + client_auth: + enum: + - optional + - required + - none + type: string + es_certificate: + type: string + es_certificate_authorities: + items: + type: string + type: array + es_key: + type: string + key: + type: string required: - - id - name - host_urls + - id required: - item '400': @@ -24833,10 +24998,65 @@ paths: proxy_id: nullable: true type: string + secrets: + additionalProperties: false + type: object + properties: + ssl: + additionalProperties: false + type: object + properties: + es_key: + anyOf: + - additionalProperties: false + type: object + properties: + id: + type: string + required: + - id + - type: string + key: + anyOf: + - additionalProperties: false + type: object + properties: + id: + type: string + required: + - id + - type: string + ssl: + additionalProperties: false + nullable: true + type: object + properties: + certificate: + type: string + certificate_authorities: + items: + type: string + type: array + client_auth: + enum: + - optional + - required + - none + type: string + es_certificate: + type: string + es_certificate_authorities: + items: + type: string + type: array + es_key: + type: string + key: + type: string required: - - id - name - host_urls + - id required: - item '400': @@ -24898,6 +25118,61 @@ paths: proxy_id: nullable: true type: string + secrets: + additionalProperties: false + type: object + properties: + ssl: + additionalProperties: false + type: object + properties: + es_key: + anyOf: + - additionalProperties: false + type: object + properties: + id: + type: string + required: + - id + - type: string + key: + anyOf: + - additionalProperties: false + type: object + properties: + id: + type: string + required: + - id + - type: string + ssl: + additionalProperties: false + nullable: true + type: object + properties: + certificate: + type: string + certificate_authorities: + items: + type: string + type: array + client_auth: + enum: + - optional + - required + - none + type: string + es_certificate: + type: string + es_certificate_authorities: + items: + type: string + type: array + es_key: + type: string + key: + type: string required: - proxy_id responses: @@ -24932,10 +25207,65 @@ paths: proxy_id: nullable: true type: string + secrets: + additionalProperties: false + type: object + properties: + ssl: + additionalProperties: false + type: object + properties: + es_key: + anyOf: + - additionalProperties: false + type: object + properties: + id: + type: string + required: + - id + - type: string + key: + anyOf: + - additionalProperties: false + type: object + properties: + id: + type: string + required: + - id + - type: string + ssl: + additionalProperties: false + nullable: true + type: object + properties: + certificate: + type: string + certificate_authorities: + items: + type: string + type: array + client_auth: + enum: + - optional + - required + - none + type: string + es_certificate: + type: string + es_certificate_authorities: + items: + type: string + type: array + es_key: + type: string + key: + type: string required: - - id - name - host_urls + - id required: - item '400': diff --git a/oas_docs/output/kibana.yaml b/oas_docs/output/kibana.yaml index 445efda44d4f9..1c6b407d933f6 100644 --- a/oas_docs/output/kibana.yaml +++ b/oas_docs/output/kibana.yaml @@ -26675,10 +26675,65 @@ paths: proxy_id: nullable: true type: string + secrets: + additionalProperties: false + type: object + properties: + ssl: + additionalProperties: false + type: object + properties: + es_key: + anyOf: + - additionalProperties: false + type: object + properties: + id: + type: string + required: + - id + - type: string + key: + anyOf: + - additionalProperties: false + type: object + properties: + id: + type: string + required: + - id + - type: string + ssl: + additionalProperties: false + nullable: true + type: object + properties: + certificate: + type: string + certificate_authorities: + items: + type: string + type: array + client_auth: + enum: + - optional + - required + - none + type: string + es_certificate: + type: string + es_certificate_authorities: + items: + type: string + type: array + es_key: + type: string + key: + type: string required: - - id - name - host_urls + - id type: array page: type: number @@ -26750,6 +26805,61 @@ paths: proxy_id: nullable: true type: string + secrets: + additionalProperties: false + type: object + properties: + ssl: + additionalProperties: false + type: object + properties: + es_key: + anyOf: + - additionalProperties: false + type: object + properties: + id: + type: string + required: + - id + - type: string + key: + anyOf: + - additionalProperties: false + type: object + properties: + id: + type: string + required: + - id + - type: string + ssl: + additionalProperties: false + nullable: true + type: object + properties: + certificate: + type: string + certificate_authorities: + items: + type: string + type: array + client_auth: + enum: + - optional + - required + - none + type: string + es_certificate: + type: string + es_certificate_authorities: + items: + type: string + type: array + es_key: + type: string + key: + type: string required: - name - host_urls @@ -26785,10 +26895,65 @@ paths: proxy_id: nullable: true type: string + secrets: + additionalProperties: false + type: object + properties: + ssl: + additionalProperties: false + type: object + properties: + es_key: + anyOf: + - additionalProperties: false + type: object + properties: + id: + type: string + required: + - id + - type: string + key: + anyOf: + - additionalProperties: false + type: object + properties: + id: + type: string + required: + - id + - type: string + ssl: + additionalProperties: false + nullable: true + type: object + properties: + certificate: + type: string + certificate_authorities: + items: + type: string + type: array + client_auth: + enum: + - optional + - required + - none + type: string + es_certificate: + type: string + es_certificate_authorities: + items: + type: string + type: array + es_key: + type: string + key: + type: string required: - - id - name - host_urls + - id required: - item '400': @@ -26903,10 +27068,65 @@ paths: proxy_id: nullable: true type: string + secrets: + additionalProperties: false + type: object + properties: + ssl: + additionalProperties: false + type: object + properties: + es_key: + anyOf: + - additionalProperties: false + type: object + properties: + id: + type: string + required: + - id + - type: string + key: + anyOf: + - additionalProperties: false + type: object + properties: + id: + type: string + required: + - id + - type: string + ssl: + additionalProperties: false + nullable: true + type: object + properties: + certificate: + type: string + certificate_authorities: + items: + type: string + type: array + client_auth: + enum: + - optional + - required + - none + type: string + es_certificate: + type: string + es_certificate_authorities: + items: + type: string + type: array + es_key: + type: string + key: + type: string required: - - id - name - host_urls + - id required: - item '400': @@ -26967,6 +27187,61 @@ paths: proxy_id: nullable: true type: string + secrets: + additionalProperties: false + type: object + properties: + ssl: + additionalProperties: false + type: object + properties: + es_key: + anyOf: + - additionalProperties: false + type: object + properties: + id: + type: string + required: + - id + - type: string + key: + anyOf: + - additionalProperties: false + type: object + properties: + id: + type: string + required: + - id + - type: string + ssl: + additionalProperties: false + nullable: true + type: object + properties: + certificate: + type: string + certificate_authorities: + items: + type: string + type: array + client_auth: + enum: + - optional + - required + - none + type: string + es_certificate: + type: string + es_certificate_authorities: + items: + type: string + type: array + es_key: + type: string + key: + type: string required: - proxy_id responses: @@ -27001,10 +27276,65 @@ paths: proxy_id: nullable: true type: string + secrets: + additionalProperties: false + type: object + properties: + ssl: + additionalProperties: false + type: object + properties: + es_key: + anyOf: + - additionalProperties: false + type: object + properties: + id: + type: string + required: + - id + - type: string + key: + anyOf: + - additionalProperties: false + type: object + properties: + id: + type: string + required: + - id + - type: string + ssl: + additionalProperties: false + nullable: true + type: object + properties: + certificate: + type: string + certificate_authorities: + items: + type: string + type: array + client_auth: + enum: + - optional + - required + - none + type: string + es_certificate: + type: string + es_certificate_authorities: + items: + type: string + type: array + es_key: + type: string + key: + type: string required: - - id - name - host_urls + - id required: - item '400': diff --git a/package.json b/package.json index 793a76488191d..d631a0509391e 100644 --- a/package.json +++ b/package.json @@ -498,10 +498,10 @@ "@kbn/esql-ast-inspector-plugin": "link:examples/esql_ast_inspector", "@kbn/esql-datagrid": "link:src/platform/plugins/shared/esql_datagrid", "@kbn/esql-editor": "link:src/platform/packages/private/kbn-esql-editor", + "@kbn/esql-types": "link:src/platform/packages/shared/kbn-esql-types", "@kbn/esql-utils": "link:src/platform/packages/shared/kbn-esql-utils", "@kbn/esql-validation-autocomplete": "link:src/platform/packages/shared/kbn-esql-validation-autocomplete", "@kbn/esql-validation-example-plugin": "link:examples/esql_validation_example", - "@kbn/esql-variables-types": "link:src/platform/packages/shared/kbn-esql-variables-types", "@kbn/eui-provider-dev-warning": "link:test/plugin_functional/plugins/eui_provider_dev_warning", "@kbn/event-annotation-common": "link:src/platform/packages/shared/kbn-event-annotation-common", "@kbn/event-annotation-components": "link:src/platform/packages/shared/kbn-event-annotation-components", @@ -1224,10 +1224,10 @@ "rbush": "^3.0.1", "re-resizable": "^6.9.9", "re2js": "0.4.3", - "react": "^17.0.2", + "react": "~18.2.0", "react-18": "npm:react@~18.2.0", "react-diff-view": "^3.2.1", - "react-dom": "^17.0.2", + "react-dom": "~18.2.0", "react-dom-18": "npm:react-dom@~18.2.0", "react-dropzone": "^11.7.1", "react-fast-compare": "^2.0.4", @@ -1662,7 +1662,7 @@ "@types/react-router": "^5.1.20", "@types/react-router-config": "^5.0.7", "@types/react-router-dom": "^5.3.3", - "@types/react-test-renderer": "^17.0.2", + "@types/react-test-renderer": "~18.0.0", "@types/react-virtualized": "^9.21.30", "@types/react-window": "^1.8.8", "@types/react-window-infinite-loader": "^1.0.9", @@ -1767,7 +1767,7 @@ "fetch-mock": "^10.1.0", "file-loader": "^4.2.0", "find-cypress-specs": "^1.41.4", - "form-data": "^4.0.1", + "form-data": "^4.0.2", "geckodriver": "^5.0.0", "gulp-brotli": "^3.0.0", "gulp-postcss": "^9.0.1", @@ -1832,7 +1832,7 @@ "prettier": "^2.8.8", "proxy": "^2.1.1", "react-is": "~18.2.0", - "react-test-renderer": "^17.0.2", + "react-test-renderer": "~18.2.0", "recast": "^0.23.9", "regenerate": "^1.4.0", "resolve": "^1.22.0", diff --git a/packages/kbn-babel-preset/styled_components_files.js b/packages/kbn-babel-preset/styled_components_files.js index 79d32b2ff7ceb..00a7c3077a096 100644 --- a/packages/kbn-babel-preset/styled_components_files.js +++ b/packages/kbn-babel-preset/styled_components_files.js @@ -28,6 +28,7 @@ module.exports = { /x-pack[\/\\]platform[\/\\]packages[\/\\]shared[\/\\]kbn-elastic-assistant[\/\\]impl[\/\\]data_anonymization_editor[\/\\]context_editor[\/\\]get_columns[\/\\]index.tsx/, /x-pack[\/\\]platform[\/\\]plugins[\/\\]shared[\/\\]fleet[\/\\]public[\/\\]applications[\/\\]fleet[\/\\]components[\/\\]fleet_server_instructions[\/\\]components[\/\\]fleet_server_hosts_form.tsx/, /x-pack[\/\\]platform[\/\\]plugins[\/\\]shared[\/\\]fleet[\/\\]public[\/\\]applications[\/\\]fleet[\/\\]components[\/\\]fleet_server_instructions[\/\\]index.tsx/, + /x-pack[\/\\]platform[\/\\]plugins[\/\\]shared[\/\\]fleet[\/\\]public[\/\\]applications[\/\\]fleet[\/\\]components[\/\\]fleet_server_instructions[\/\\]steps[\/\\]add_fleet_server_host.tsx/, /x-pack[\/\\]platform[\/\\]plugins[\/\\]shared[\/\\]fleet[\/\\]public[\/\\]applications[\/\\]fleet[\/\\]components[\/\\]fleet_server_instructions[\/\\]steps[\/\\]create_service_token.tsx/, /x-pack[\/\\]platform[\/\\]plugins[\/\\]shared[\/\\]fleet[\/\\]public[\/\\]applications[\/\\]fleet[\/\\]components[\/\\]generate_service_token.tsx/, /x-pack[\/\\]platform[\/\\]plugins[\/\\]shared[\/\\]fleet[\/\\]public[\/\\]applications[\/\\]fleet[\/\\]components[\/\\]search_bar.tsx/, diff --git a/packages/kbn-check-mappings-update-cli/current_mappings.json b/packages/kbn-check-mappings-update-cli/current_mappings.json index 79989dedb7629..2015a1b3dc1bc 100644 --- a/packages/kbn-check-mappings-update-cli/current_mappings.json +++ b/packages/kbn-check-mappings-update-cli/current_mappings.json @@ -1713,6 +1713,7 @@ } }, "fleet-fleet-server-host": { + "dynamic": false, "properties": { "host_urls": { "index": false, diff --git a/src/platform/packages/shared/kbn-esql-utils/src/types.ts b/packages/kbn-optimizer/src/common/webpack_helpers.ts similarity index 77% rename from src/platform/packages/shared/kbn-esql-utils/src/types.ts rename to packages/kbn-optimizer/src/common/webpack_helpers.ts index da5562af411b3..9acb96906a430 100644 --- a/src/platform/packages/shared/kbn-esql-utils/src/types.ts +++ b/packages/kbn-optimizer/src/common/webpack_helpers.ts @@ -7,6 +7,8 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -export enum TextBasedLanguages { - ESQL = 'ESQL', +import webpack from 'webpack'; + +export function isRuntimeModule(module: any): boolean { + return module instanceof webpack.RuntimeModule; } diff --git a/packages/kbn-optimizer/src/worker/populate_bundle_cache_plugin.ts b/packages/kbn-optimizer/src/worker/populate_bundle_cache_plugin.ts index 41c2b027d1886..3f568da8d4eb9 100644 --- a/packages/kbn-optimizer/src/worker/populate_bundle_cache_plugin.ts +++ b/packages/kbn-optimizer/src/worker/populate_bundle_cache_plugin.ts @@ -17,7 +17,6 @@ import { isIgnoredModule, isConcatenatedModule, isDelegatedModule, - isRuntimeModule, getModulePath, } from '@kbn/optimizer-webpack-helpers'; @@ -30,6 +29,7 @@ import { ParsedDllManifest, } from '../common'; import { BundleRemoteModule } from './bundle_remote_module'; +import { isRuntimeModule } from '../common/webpack_helpers'; interface InputFileSystem { readFile: ( diff --git a/src/core/server/integration_tests/ci_checks/saved_objects/check_registered_types.test.ts b/src/core/server/integration_tests/ci_checks/saved_objects/check_registered_types.test.ts index 030fe94c2f617..722965bedf88f 100644 --- a/src/core/server/integration_tests/ci_checks/saved_objects/check_registered_types.test.ts +++ b/src/core/server/integration_tests/ci_checks/saved_objects/check_registered_types.test.ts @@ -109,7 +109,7 @@ describe('checking migration metadata changes on all registered SO types', () => "file-upload-usage-collection-telemetry": "06e0a8c04f991e744e09d03ab2bd7f86b2088200", "fileShare": "5be52de1747d249a221b5241af2838264e19aaa1", "fleet-agent-policies": "f69f7c5639f4cf9e85077c904e161f3574ac3ca2", - "fleet-fleet-server-host": "69be15f6b6f2a2875ad3c7050ddea7a87f505417", + "fleet-fleet-server-host": "232d98738d5321b86edc426e21a9ca2f607da999", "fleet-message-signing-keys": "93421f43fed2526b59092a4e3c65d64bc2266c0f", "fleet-package-policies": "b1ded996118af658bc420a737ff3c4d784641fc7", "fleet-preconfiguration-deletion-record": "c52ea1e13c919afe8a5e8e3adbb7080980ecc08e", diff --git a/src/platform/packages/private/kbn-esql-editor/src/esql_editor.tsx b/src/platform/packages/private/kbn-esql-editor/src/esql_editor.tsx index b2e8f29ca428f..b5f075fb2f095 100644 --- a/src/platform/packages/private/kbn-esql-editor/src/esql_editor.tsx +++ b/src/platform/packages/private/kbn-esql-editor/src/esql_editor.tsx @@ -31,11 +31,8 @@ import memoize from 'lodash/memoize'; import React, { memo, useCallback, useEffect, useMemo, useRef, useState } from 'react'; import { createPortal } from 'react-dom'; import { css } from '@emotion/react'; -import { - type ESQLRealField, - ESQLVariableType, - type ESQLControlVariable, -} from '@kbn/esql-validation-autocomplete'; +import { ESQLVariableType, type ESQLControlVariable } from '@kbn/esql-types'; +import { type ESQLRealField } from '@kbn/esql-validation-autocomplete'; import { FieldType } from '@kbn/esql-validation-autocomplete/src/definitions/types'; import { EditorFooter } from './editor_footer'; import { fetchFieldsFromESQL } from './fetch_fields_from_esql'; diff --git a/src/platform/packages/private/kbn-esql-editor/src/types.ts b/src/platform/packages/private/kbn-esql-editor/src/types.ts index 41171606dd7dc..d7974a1d9f0e8 100644 --- a/src/platform/packages/private/kbn-esql-editor/src/types.ts +++ b/src/platform/packages/private/kbn-esql-editor/src/types.ts @@ -17,7 +17,7 @@ import type { UsageCollectionStart } from '@kbn/usage-collection-plugin/public'; import type { Storage } from '@kbn/kibana-utils-plugin/public'; import type { UiActionsStart } from '@kbn/ui-actions-plugin/public'; import type { DataPublicPluginStart } from '@kbn/data-plugin/public'; -import type { ESQLControlVariable } from '@kbn/esql-validation-autocomplete'; +import type { ESQLControlVariable } from '@kbn/esql-types'; export interface ESQLEditorProps { /** The aggregate type query */ diff --git a/src/platform/packages/private/kbn-esql-editor/tsconfig.json b/src/platform/packages/private/kbn-esql-editor/tsconfig.json index 85dda7f030af0..56e1d3fbbcf7b 100644 --- a/src/platform/packages/private/kbn-esql-editor/tsconfig.json +++ b/src/platform/packages/private/kbn-esql-editor/tsconfig.json @@ -33,7 +33,8 @@ "@kbn/content-management-favorites-common", "@kbn/kibana-utils-plugin", "@kbn/ui-actions-plugin", - "@kbn/shared-ux-table-persist" + "@kbn/shared-ux-table-persist", + "@kbn/esql-types" ], "exclude": [ "target/**/*", diff --git a/src/platform/packages/private/kbn-optimizer-webpack-helpers/index.ts b/src/platform/packages/private/kbn-optimizer-webpack-helpers/index.ts index 53d78dd588044..5ccc379498e70 100644 --- a/src/platform/packages/private/kbn-optimizer-webpack-helpers/index.ts +++ b/src/platform/packages/private/kbn-optimizer-webpack-helpers/index.ts @@ -27,5 +27,4 @@ export { isExternalModule, isIgnoredModule, isNormalModule, - isRuntimeModule, } from './src/webpack_helpers'; diff --git a/src/platform/packages/private/kbn-optimizer-webpack-helpers/src/webpack_helpers.ts b/src/platform/packages/private/kbn-optimizer-webpack-helpers/src/webpack_helpers.ts index 2f0a97c935be2..1465a6f068049 100644 --- a/src/platform/packages/private/kbn-optimizer-webpack-helpers/src/webpack_helpers.ts +++ b/src/platform/packages/private/kbn-optimizer-webpack-helpers/src/webpack_helpers.ts @@ -7,9 +7,9 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import webpack from 'webpack'; +import type { Stats } from 'webpack'; -export function isFailureStats(stats: webpack.Stats) { +export function isFailureStats(stats: Stats) { if (stats.hasErrors()) { return true; } @@ -29,7 +29,7 @@ export const STATS_WARNINGS_FILTER = new RegExp( ].join('') ); -export function failedStatsToErrorMessage(stats: webpack.Stats) { +export function failedStatsToErrorMessage(stats: Stats) { const details = stats.toString({ ...stats.compilation.createStatsOptions('minimal'), colors: true, @@ -169,7 +169,3 @@ export function getModulePath(module: WebpackNormalModule) { const queryIndex = module.resource.indexOf('?'); return queryIndex === -1 ? module.resource : module.resource.slice(0, queryIndex); } - -export function isRuntimeModule(module: any): boolean { - return module instanceof webpack.RuntimeModule; -} diff --git a/src/platform/packages/shared/deeplinks/security/deep_links.ts b/src/platform/packages/shared/deeplinks/security/deep_links.ts index bf312230d4cf1..e03f659378edf 100644 --- a/src/platform/packages/shared/deeplinks/security/deep_links.ts +++ b/src/platform/packages/shared/deeplinks/security/deep_links.ts @@ -29,11 +29,6 @@ export enum SecurityPageName { cloudSecurityPostureDashboard = 'cloud_security_posture-dashboard', cloudSecurityPostureFindings = 'cloud_security_posture-findings', cloudSecurityPostureRules = 'cloud_security_posture-rules', - /* - * Warning: Computed values are not permitted in an enum with string valued members - * All cloud defend page names must match `CloudDefendPageId` in x-pack/solutions/security/plugins/cloud_defend/public/common/navigation/types.ts - */ - cloudDefend = 'cloud_defend', cloudDefendPolicies = 'cloud_defend-policies', dashboards = 'dashboards', dataQuality = 'data_quality', diff --git a/src/platform/packages/shared/kbn-es-query/src/expressions/types.ts b/src/platform/packages/shared/kbn-es-query/src/expressions/types.ts index 1cb794e8e2c50..8a62bcf54a55e 100644 --- a/src/platform/packages/shared/kbn-es-query/src/expressions/types.ts +++ b/src/platform/packages/shared/kbn-es-query/src/expressions/types.ts @@ -6,7 +6,7 @@ * 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 type { ESQLControlVariable } from '@kbn/esql-validation-autocomplete'; +import type { ESQLControlVariable } from '@kbn/esql-types'; import { Filter, Query, TimeRange } from '../filters'; export interface ExecutionContextSearch { diff --git a/src/platform/packages/shared/kbn-es-query/tsconfig.json b/src/platform/packages/shared/kbn-es-query/tsconfig.json index 6ad761f90dc1f..e032b9531c04f 100644 --- a/src/platform/packages/shared/kbn-es-query/tsconfig.json +++ b/src/platform/packages/shared/kbn-es-query/tsconfig.json @@ -16,7 +16,7 @@ "@kbn/utility-types", "@kbn/i18n", "@kbn/safer-lodash-set", - "@kbn/esql-validation-autocomplete" + "@kbn/esql-types" ], "exclude": [ "target/**/*", diff --git a/src/platform/packages/shared/kbn-esql-types/BUILD.bazel b/src/platform/packages/shared/kbn-esql-types/BUILD.bazel new file mode 100644 index 0000000000000..46c3267d8f0e7 --- /dev/null +++ b/src/platform/packages/shared/kbn-esql-types/BUILD.bazel @@ -0,0 +1,31 @@ +load("@build_bazel_rules_nodejs//:index.bzl", "js_library") + +SRCS = glob( + [ + "**/*.ts", + "**/*functions.json", + ], + exclude = [ + "**/*.config.js", + "**/*.mock.*", + "**/*.test.*", + "**/*.stories.*", + "**/__snapshots__/**", + "**/integration_tests/**", + "**/mocks/**", + "**/scripts/**", + "**/storybook/**", + "**/test_fixtures/**", + "**/test_helpers/**", + ], +) + +SHARED_DEPS = [] + +js_library( + name = "kbn-esql-types", + package_name = "@kbn/esql-types", + srcs = ["package.json"] + SRCS, + deps = SHARED_DEPS, + visibility = ["//visibility:public"], +) diff --git a/src/platform/packages/shared/kbn-esql-types/README.md b/src/platform/packages/shared/kbn-esql-types/README.md new file mode 100644 index 0000000000000..6c4c2d9f76a54 --- /dev/null +++ b/src/platform/packages/shared/kbn-esql-types/README.md @@ -0,0 +1,3 @@ +# @kbn/esql-types + +Gathers types of esql usage across kibana. \ No newline at end of file diff --git a/src/platform/packages/shared/kbn-esql-types/index.ts b/src/platform/packages/shared/kbn-esql-types/index.ts new file mode 100644 index 0000000000000..b236edcaf96f9 --- /dev/null +++ b/src/platform/packages/shared/kbn-esql-types/index.ts @@ -0,0 +1,17 @@ +/* + * 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". + */ + +export { + ESQLVariableType, + type ESQLControlVariable, + type PublishesESQLVariable, + type PublishesESQLVariables, + apiPublishesESQLVariable, + apiPublishesESQLVariables, +} from './src/variables_types'; diff --git a/src/platform/packages/shared/kbn-esql-types/jest.config.js b/src/platform/packages/shared/kbn-esql-types/jest.config.js new file mode 100644 index 0000000000000..303bd483126a9 --- /dev/null +++ b/src/platform/packages/shared/kbn-esql-types/jest.config.js @@ -0,0 +1,14 @@ +/* + * 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". + */ + +module.exports = { + preset: '@kbn/test', + rootDir: '../../../../..', + roots: ['/src/platform/packages/shared/kbn-esql-types'], +}; diff --git a/src/platform/packages/shared/kbn-esql-types/kibana.jsonc b/src/platform/packages/shared/kbn-esql-types/kibana.jsonc new file mode 100644 index 0000000000000..cdf7bfdd871fb --- /dev/null +++ b/src/platform/packages/shared/kbn-esql-types/kibana.jsonc @@ -0,0 +1,9 @@ +{ + "type": "shared-common", + "id": "@kbn/esql-types", + "owner": [ + "@elastic/kibana-esql" + ], + "group": "platform", + "visibility": "shared" +} \ No newline at end of file diff --git a/src/platform/packages/shared/kbn-esql-variables-types/package.json b/src/platform/packages/shared/kbn-esql-types/package.json similarity index 61% rename from src/platform/packages/shared/kbn-esql-variables-types/package.json rename to src/platform/packages/shared/kbn-esql-types/package.json index 743099b750ff3..4b69fd8961876 100644 --- a/src/platform/packages/shared/kbn-esql-variables-types/package.json +++ b/src/platform/packages/shared/kbn-esql-types/package.json @@ -1,7 +1,6 @@ { - "name": "@kbn/esql-variables-types", + "name": "@kbn/esql-types", "private": true, "version": "1.0.0", - "author": "Kibana ES|QL", "license": "Elastic License 2.0 OR AGPL-3.0-only OR SSPL-1.0" } \ No newline at end of file diff --git a/src/platform/packages/shared/kbn-esql-variables-types/index.ts b/src/platform/packages/shared/kbn-esql-types/src/variables_types.ts similarity index 74% rename from src/platform/packages/shared/kbn-esql-variables-types/index.ts rename to src/platform/packages/shared/kbn-esql-types/src/variables_types.ts index 0e2bf9bb12fb3..0395d3dfab453 100644 --- a/src/platform/packages/shared/kbn-esql-variables-types/index.ts +++ b/src/platform/packages/shared/kbn-esql-types/src/variables_types.ts @@ -6,12 +6,23 @@ * 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 type { ESQLControlVariable } from '@kbn/esql-validation-autocomplete'; -import { PublishingSubject } from '@kbn/presentation-publishing'; -/** - * This should all be moved into a package and reorganized into separate files etc - */ +import { BehaviorSubject } from 'rxjs'; + +type PublishingSubject = Omit, 'next'>; + +export enum ESQLVariableType { + TIME_LITERAL = 'time_literal', + FIELDS = 'fields', + VALUES = 'values', + FUNCTIONS = 'functions', +} + +export interface ESQLControlVariable { + key: string; + value: string | number; + type: ESQLVariableType; +} export interface PublishesESQLVariable { esqlVariable$: PublishingSubject; diff --git a/src/platform/packages/shared/kbn-esql-types/tsconfig.json b/src/platform/packages/shared/kbn-esql-types/tsconfig.json new file mode 100644 index 0000000000000..0171c64efb992 --- /dev/null +++ b/src/platform/packages/shared/kbn-esql-types/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../../../../tsconfig.base.json", + "compilerOptions": { + "outDir": "target/types" + }, + "include": ["*.ts", "src/**/*", "__mocks__/**/*.ts"], + "kbn_references": [ + ], + "exclude": ["target/**/*"] +} diff --git a/src/platform/packages/shared/kbn-esql-utils/index.ts b/src/platform/packages/shared/kbn-esql-utils/index.ts index 33a6047a1c98c..92486790d4c94 100644 --- a/src/platform/packages/shared/kbn-esql-utils/index.ts +++ b/src/platform/packages/shared/kbn-esql-utils/index.ts @@ -34,7 +34,6 @@ export { isESQLColumnSortable, isESQLColumnGroupable, isESQLFieldGroupable, - TextBasedLanguages, sanitazeESQLInput, queryCannotBeSampled, mapVariableToColumn, diff --git a/src/platform/packages/shared/kbn-esql-utils/src/index.ts b/src/platform/packages/shared/kbn-esql-utils/src/index.ts index 0df4dabf455ca..3aba3dcf456ba 100644 --- a/src/platform/packages/shared/kbn-esql-utils/src/index.ts +++ b/src/platform/packages/shared/kbn-esql-utils/src/index.ts @@ -7,7 +7,6 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -export { TextBasedLanguages } from './types'; export { getESQLAdHocDataview, getIndexForESQLQuery } from './utils/get_esql_adhoc_dataview'; export { getInitialESQLQuery } from './utils/get_initial_esql_query'; export { getESQLWithSafeLimit } from './utils/get_esql_with_safe_limit'; diff --git a/src/platform/packages/shared/kbn-esql-utils/src/utils/query_parsing_helpers.test.ts b/src/platform/packages/shared/kbn-esql-utils/src/utils/query_parsing_helpers.test.ts index fc7c7fc7d44a4..86d79f1d8a4bc 100644 --- a/src/platform/packages/shared/kbn-esql-utils/src/utils/query_parsing_helpers.test.ts +++ b/src/platform/packages/shared/kbn-esql-utils/src/utils/query_parsing_helpers.test.ts @@ -7,7 +7,7 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ import type { DatatableColumn } from '@kbn/expressions-plugin/common'; -import { ESQLVariableType, type ESQLControlVariable } from '@kbn/esql-validation-autocomplete'; +import { ESQLVariableType, type ESQLControlVariable } from '@kbn/esql-types'; import { getIndexPatternFromESQLQuery, getLimitFromESQLQuery, diff --git a/src/platform/packages/shared/kbn-esql-utils/src/utils/query_parsing_helpers.ts b/src/platform/packages/shared/kbn-esql-utils/src/utils/query_parsing_helpers.ts index 7d9f08b26dce5..ad1b78d7a4b82 100644 --- a/src/platform/packages/shared/kbn-esql-utils/src/utils/query_parsing_helpers.ts +++ b/src/platform/packages/shared/kbn-esql-utils/src/utils/query_parsing_helpers.ts @@ -15,7 +15,7 @@ import type { ESQLSingleAstItem, ESQLCommandOption, } from '@kbn/esql-ast'; -import type { ESQLControlVariable } from '@kbn/esql-validation-autocomplete'; +import type { ESQLControlVariable } from '@kbn/esql-types'; import type { DatatableColumn } from '@kbn/expressions-plugin/common'; const DEFAULT_ESQL_LIMIT = 1000; diff --git a/src/platform/packages/shared/kbn-esql-utils/src/utils/run_query.test.ts b/src/platform/packages/shared/kbn-esql-utils/src/utils/run_query.test.ts index 9a77606ccdac0..52893fbf56efe 100644 --- a/src/platform/packages/shared/kbn-esql-utils/src/utils/run_query.test.ts +++ b/src/platform/packages/shared/kbn-esql-utils/src/utils/run_query.test.ts @@ -6,7 +6,7 @@ * 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 { ESQLVariableType, type ESQLControlVariable } from '@kbn/esql-validation-autocomplete'; +import { ESQLVariableType, type ESQLControlVariable } from '@kbn/esql-types'; import { getStartEndParams, getNamedParams } from './run_query'; describe('run query helpers', () => { diff --git a/src/platform/packages/shared/kbn-esql-utils/src/utils/run_query.ts b/src/platform/packages/shared/kbn-esql-utils/src/utils/run_query.ts index e9acfc54b4a33..1107d8086167c 100644 --- a/src/platform/packages/shared/kbn-esql-utils/src/utils/run_query.ts +++ b/src/platform/packages/shared/kbn-esql-utils/src/utils/run_query.ts @@ -15,7 +15,8 @@ import type { TimeRange } from '@kbn/es-query'; import { esFieldTypeToKibanaFieldType } from '@kbn/field-types'; import type { ESQLColumn, ESQLSearchResponse, ESQLSearchParams } from '@kbn/es-types'; import { lastValueFrom } from 'rxjs'; -import { type ESQLControlVariable, ESQLVariableType } from '@kbn/esql-validation-autocomplete'; +import { type ESQLControlVariable } from '@kbn/esql-types'; +import { ESQLVariableType } from '@kbn/esql-types'; export const hasStartEndParams = (query: string) => /\?_tstart|\?_tend/i.test(query); diff --git a/src/platform/packages/shared/kbn-esql-utils/tsconfig.json b/src/platform/packages/shared/kbn-esql-utils/tsconfig.json index 3c45073c44be8..0ab50bd5722a5 100644 --- a/src/platform/packages/shared/kbn-esql-utils/tsconfig.json +++ b/src/platform/packages/shared/kbn-esql-utils/tsconfig.json @@ -20,6 +20,7 @@ "@kbn/crypto-browser", "@kbn/data-view-utils", "@kbn/esql-ast", + "@kbn/esql-types", "@kbn/search-types", "@kbn/expressions-plugin", "@kbn/field-types", @@ -27,6 +28,5 @@ "@kbn/i18n", "@kbn/datemath", "@kbn/es-query", - "@kbn/esql-validation-autocomplete" ] } diff --git a/src/platform/packages/shared/kbn-esql-validation-autocomplete/BUILD.bazel b/src/platform/packages/shared/kbn-esql-validation-autocomplete/BUILD.bazel index 429bc5b8aaddd..8bc7a11d15c8d 100644 --- a/src/platform/packages/shared/kbn-esql-validation-autocomplete/BUILD.bazel +++ b/src/platform/packages/shared/kbn-esql-validation-autocomplete/BUILD.bazel @@ -22,6 +22,7 @@ SRCS = glob( SHARED_DEPS = [ "//src/platform/packages/shared/kbn-i18n", + "//src/platform/packages/shared/kbn-esql-types", "@npm//fastest-levenshtein", ] diff --git a/src/platform/packages/shared/kbn-esql-validation-autocomplete/index.ts b/src/platform/packages/shared/kbn-esql-validation-autocomplete/index.ts index 4e0f6b3962ae3..181195b3978cd 100644 --- a/src/platform/packages/shared/kbn-esql-validation-autocomplete/index.ts +++ b/src/platform/packages/shared/kbn-esql-validation-autocomplete/index.ts @@ -8,7 +8,6 @@ */ export type { SuggestionRawDefinition, ItemKind } from './src/autocomplete/types'; -export { ESQLVariableType, type ESQLControlVariable } from './src/shared/types'; export type { CodeAction } from './src/code_actions/types'; export type { FunctionDefinition, diff --git a/src/platform/packages/shared/kbn-esql-validation-autocomplete/src/autocomplete/__tests__/autocomplete.command.stats.test.ts b/src/platform/packages/shared/kbn-esql-validation-autocomplete/src/autocomplete/__tests__/autocomplete.command.stats.test.ts index 64efda15d13e9..5d158eda45e01 100644 --- a/src/platform/packages/shared/kbn-esql-validation-autocomplete/src/autocomplete/__tests__/autocomplete.command.stats.test.ts +++ b/src/platform/packages/shared/kbn-esql-validation-autocomplete/src/autocomplete/__tests__/autocomplete.command.stats.test.ts @@ -6,10 +6,9 @@ * 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 { ESQLVariableType } from '@kbn/esql-types'; import { FieldType, FunctionReturnType } from '../../definitions/types'; import { ESQL_COMMON_NUMERIC_TYPES, ESQL_NUMBER_TYPES } from '../../shared/esql_types'; -import { ESQLVariableType } from '../../shared/types'; import { getDateHistogramCompletionItem } from '../commands/stats/util'; import { allStarConstant } from '../complete_items'; import { roundParameterTypes } from './constants'; diff --git a/src/platform/packages/shared/kbn-esql-validation-autocomplete/src/autocomplete/__tests__/autocomplete.command.where.test.ts b/src/platform/packages/shared/kbn-esql-validation-autocomplete/src/autocomplete/__tests__/autocomplete.command.where.test.ts index da071122d08f6..1fdc6fa2ae769 100644 --- a/src/platform/packages/shared/kbn-esql-validation-autocomplete/src/autocomplete/__tests__/autocomplete.command.where.test.ts +++ b/src/platform/packages/shared/kbn-esql-validation-autocomplete/src/autocomplete/__tests__/autocomplete.command.where.test.ts @@ -6,9 +6,8 @@ * 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 { ESQLVariableType } from '@kbn/esql-types'; import { ESQL_COMMON_NUMERIC_TYPES } from '../../shared/esql_types'; -import { ESQLVariableType } from '../../shared/types'; import { pipeCompleteItem } from '../complete_items'; import { getDateLiterals } from '../factories'; import { log10ParameterTypes, powParameterTypes } from './constants'; diff --git a/src/platform/packages/shared/kbn-esql-validation-autocomplete/src/autocomplete/autocomplete.test.ts b/src/platform/packages/shared/kbn-esql-validation-autocomplete/src/autocomplete/autocomplete.test.ts index d5c0620be0999..18443d14218c3 100644 --- a/src/platform/packages/shared/kbn-esql-validation-autocomplete/src/autocomplete/autocomplete.test.ts +++ b/src/platform/packages/shared/kbn-esql-validation-autocomplete/src/autocomplete/autocomplete.test.ts @@ -959,9 +959,10 @@ describe('autocomplete', () => { { filterText: '_source', text: '_source, ', command: TRIGGER_SUGGESTION_COMMAND }, ]); // no comma if there are no more fields - testSuggestions('FROM a METADATA _id, _ignored, _index, _source, _index_mode, _version/', [ - { filterText: '_version', text: '_version | ', command: TRIGGER_SUGGESTION_COMMAND }, - ]); + testSuggestions( + 'FROM a METADATA _id, _ignored, _index, _source, _index_mode, _score, _version/', + [{ filterText: '_version', text: '_version | ', command: TRIGGER_SUGGESTION_COMMAND }] + ); }); describe.each(['KEEP', 'DROP'])('%s ', (commandName) => { diff --git a/src/platform/packages/shared/kbn-esql-validation-autocomplete/src/autocomplete/autocomplete.ts b/src/platform/packages/shared/kbn-esql-validation-autocomplete/src/autocomplete/autocomplete.ts index 68c835d74de5a..f628458f25e47 100644 --- a/src/platform/packages/shared/kbn-esql-validation-autocomplete/src/autocomplete/autocomplete.ts +++ b/src/platform/packages/shared/kbn-esql-validation-autocomplete/src/autocomplete/autocomplete.ts @@ -16,6 +16,7 @@ import { type ESQLFunction, type ESQLSingleAstItem, } from '@kbn/esql-ast'; +import { ESQLVariableType, type ESQLControlVariable } from '@kbn/esql-types'; import { ESQL_NUMBER_TYPES, isNumericType } from '../shared/esql_types'; import type { EditorContext, ItemKind, SuggestionRawDefinition, GetColumnsByTypeFn } from './types'; import { @@ -84,12 +85,7 @@ import { getPolicyHelper, getSourcesHelper, } from '../shared/resources_helpers'; -import type { - ESQLCallbacks, - ESQLSourceResult, - ESQLControlVariable, - ESQLVariableType, -} from '../shared/types'; +import type { ESQLCallbacks, ESQLSourceResult } from '../shared/types'; import { getFunctionsToIgnoreForStats, getQueryForFields, diff --git a/src/platform/packages/shared/kbn-esql-validation-autocomplete/src/autocomplete/commands/stats/index.ts b/src/platform/packages/shared/kbn-esql-validation-autocomplete/src/autocomplete/commands/stats/index.ts index cf9a1888b9461..5fb905629d55b 100644 --- a/src/platform/packages/shared/kbn-esql-validation-autocomplete/src/autocomplete/commands/stats/index.ts +++ b/src/platform/packages/shared/kbn-esql-validation-autocomplete/src/autocomplete/commands/stats/index.ts @@ -6,7 +6,7 @@ * 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 { ESQLVariableType } from '@kbn/esql-types'; import { CommandSuggestParams } from '../../../definitions/types'; import type { SuggestionRawDefinition } from '../../types'; import { @@ -15,7 +15,6 @@ import { getFunctionSuggestions, getControlSuggestionIfSupported, } from '../../factories'; -import { ESQLVariableType } from '../../../shared/types'; import { commaCompleteItem, pipeCompleteItem } from '../../complete_items'; import { pushItUpInTheList } from '../../helper'; import { byCompleteItem, getDateHistogramCompletionItem, getPosition } from './util'; diff --git a/src/platform/packages/shared/kbn-esql-validation-autocomplete/src/autocomplete/factories.ts b/src/platform/packages/shared/kbn-esql-validation-autocomplete/src/autocomplete/factories.ts index 2938757064655..a73d9d646a9bd 100644 --- a/src/platform/packages/shared/kbn-esql-validation-autocomplete/src/autocomplete/factories.ts +++ b/src/platform/packages/shared/kbn-esql-validation-autocomplete/src/autocomplete/factories.ts @@ -9,6 +9,7 @@ import { i18n } from '@kbn/i18n'; import { memoize } from 'lodash'; +import { ESQLVariableType, type ESQLControlVariable } from '@kbn/esql-types'; import { SuggestionRawDefinition } from './types'; import { groupingFunctionDefinitions } from '../definitions/generated/grouping_functions'; import { aggFunctionDefinitions } from '../definitions/generated/aggregation_functions'; @@ -29,7 +30,6 @@ import { ESQLRealField } from '../validation/types'; import { isNumericType } from '../shared/esql_types'; import { getTestFunctions } from '../shared/test_functions'; import { operatorsDefinitions } from '../definitions/all_operators'; -import { ESQLVariableType, ESQLControlVariable } from '../shared/types'; const techPreviewLabel = i18n.translate( 'kbn-esql-validation-autocomplete.esql.autocomplete.techPreviewLabel', diff --git a/src/platform/packages/shared/kbn-esql-validation-autocomplete/src/autocomplete/helper.ts b/src/platform/packages/shared/kbn-esql-validation-autocomplete/src/autocomplete/helper.ts index e635aaa92dc01..8fc421bda3751 100644 --- a/src/platform/packages/shared/kbn-esql-validation-autocomplete/src/autocomplete/helper.ts +++ b/src/platform/packages/shared/kbn-esql-validation-autocomplete/src/autocomplete/helper.ts @@ -16,6 +16,7 @@ import { type ESQLSource, } from '@kbn/esql-ast'; import { uniqBy } from 'lodash'; +import { ESQLVariableType } from '@kbn/esql-types'; import { isParameterType, type FunctionDefinition, @@ -49,7 +50,6 @@ import { EDITOR_MARKER } from '../shared/constants'; import { ESQLRealField, ESQLVariable, ReferenceMaps } from '../validation/types'; import { listCompleteItem } from './complete_items'; import { removeMarkerArgFromArgsList } from '../shared/context'; -import { ESQLVariableType } from '../shared/types'; function extractFunctionArgs(args: ESQLAstItem[]): ESQLFunction[] { return args.flatMap((arg) => (isAssignment(arg) ? arg.args[1] : arg)).filter(isFunctionItem); diff --git a/src/platform/packages/shared/kbn-esql-validation-autocomplete/src/autocomplete/types.ts b/src/platform/packages/shared/kbn-esql-validation-autocomplete/src/autocomplete/types.ts index 7b686cbb56134..cad0ddba0db54 100644 --- a/src/platform/packages/shared/kbn-esql-validation-autocomplete/src/autocomplete/types.ts +++ b/src/platform/packages/shared/kbn-esql-validation-autocomplete/src/autocomplete/types.ts @@ -6,7 +6,7 @@ * 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 type { ESQLVariableType } from '../shared/types'; +import type { ESQLVariableType } from '@kbn/esql-types'; // This is a subset of the Monaco's editor CompletitionItemKind type export type ItemKind = diff --git a/src/platform/packages/shared/kbn-esql-validation-autocomplete/src/definitions/generated/aggregation_functions.ts b/src/platform/packages/shared/kbn-esql-validation-autocomplete/src/definitions/generated/aggregation_functions.ts index 97de3f4d4d6a0..73b31d9290196 100644 --- a/src/platform/packages/shared/kbn-esql-validation-autocomplete/src/definitions/generated/aggregation_functions.ts +++ b/src/platform/packages/shared/kbn-esql-validation-autocomplete/src/definitions/generated/aggregation_functions.ts @@ -1717,6 +1717,26 @@ const valuesDefinition: FunctionDefinition = { ], returnType: 'boolean', }, + { + params: [ + { + name: 'field', + type: 'cartesian_point', + optional: false, + }, + ], + returnType: 'cartesian_point', + }, + { + params: [ + { + name: 'field', + type: 'cartesian_shape', + optional: false, + }, + ], + returnType: 'cartesian_shape', + }, { params: [ { @@ -1747,6 +1767,26 @@ const valuesDefinition: FunctionDefinition = { ], returnType: 'double', }, + { + params: [ + { + name: 'field', + type: 'geo_point', + optional: false, + }, + ], + returnType: 'geo_point', + }, + { + params: [ + { + name: 'field', + type: 'geo_shape', + optional: false, + }, + ], + returnType: 'geo_shape', + }, { params: [ { diff --git a/src/platform/packages/shared/kbn-esql-validation-autocomplete/src/definitions/types.ts b/src/platform/packages/shared/kbn-esql-validation-autocomplete/src/definitions/types.ts index a3aa51c696d61..02e9aaf00a81a 100644 --- a/src/platform/packages/shared/kbn-esql-validation-autocomplete/src/definitions/types.ts +++ b/src/platform/packages/shared/kbn-esql-validation-autocomplete/src/definitions/types.ts @@ -6,7 +6,7 @@ * 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 type { ESQLVariableType, ESQLControlVariable } from '@kbn/esql-types'; import type { ESQLAstItem, ESQLCommand, @@ -16,12 +16,7 @@ import type { ESQLSource, } from '@kbn/esql-ast'; import { GetColumnsByTypeFn, SuggestionRawDefinition } from '../autocomplete/types'; -import type { - ESQLCallbacks, - ESQLControlVariable, - ESQLVariableType, - ESQLSourceResult, -} from '../shared/types'; +import type { ESQLCallbacks, ESQLSourceResult } from '../shared/types'; /** * All supported field types in ES|QL. This is all the types diff --git a/src/platform/packages/shared/kbn-esql-validation-autocomplete/src/shared/constants.ts b/src/platform/packages/shared/kbn-esql-validation-autocomplete/src/shared/constants.ts index 33567217bfe95..c75fdeb59f650 100644 --- a/src/platform/packages/shared/kbn-esql-validation-autocomplete/src/shared/constants.ts +++ b/src/platform/packages/shared/kbn-esql-validation-autocomplete/src/shared/constants.ts @@ -15,7 +15,15 @@ export const SINGLE_TICK_REGEX = /`/g; export const DOUBLE_BACKTICK = '``'; export const SINGLE_BACKTICK = '`'; -export const METADATA_FIELDS = ['_version', '_id', '_index', '_source', '_ignored', '_index_mode']; +export const METADATA_FIELDS = [ + '_version', + '_id', + '_index', + '_source', + '_ignored', + '_index_mode', + '_score', +]; export const FULL_TEXT_SEARCH_FUNCTIONS = ['match', 'match_operator', 'qstr', 'kql']; export const UNSUPPORTED_COMMANDS_BEFORE_QSTR = new Set([ diff --git a/src/platform/packages/shared/kbn-esql-validation-autocomplete/src/shared/types.ts b/src/platform/packages/shared/kbn-esql-validation-autocomplete/src/shared/types.ts index d5c1b8ded942e..aafd56ff9c579 100644 --- a/src/platform/packages/shared/kbn-esql-validation-autocomplete/src/shared/types.ts +++ b/src/platform/packages/shared/kbn-esql-validation-autocomplete/src/shared/types.ts @@ -6,6 +6,7 @@ * 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 { ESQLVariableType, type ESQLControlVariable } from '@kbn/esql-types'; import type { ESQLRealField, JoinIndexAutocompleteItem } from '../validation/types'; /** @internal **/ @@ -36,19 +37,6 @@ export interface ESQLSourceResult { type?: string; } -export interface ESQLControlVariable { - key: string; - value: string | number; - type: ESQLVariableType; -} - -export enum ESQLVariableType { - TIME_LITERAL = 'time_literal', - FIELDS = 'fields', - VALUES = 'values', - FUNCTIONS = 'functions', -} - export interface ESQLCallbacks { getSources?: CallbackFn<{}, ESQLSourceResult>; getColumnsFor?: CallbackFn<{ query: string }, ESQLRealField>; diff --git a/src/platform/packages/shared/kbn-esql-validation-autocomplete/tsconfig.json b/src/platform/packages/shared/kbn-esql-validation-autocomplete/tsconfig.json index d262131493eaf..ad51b743a3689 100644 --- a/src/platform/packages/shared/kbn-esql-validation-autocomplete/tsconfig.json +++ b/src/platform/packages/shared/kbn-esql-validation-autocomplete/tsconfig.json @@ -14,7 +14,8 @@ "kbn_references": [ "@kbn/i18n", "@kbn/esql-ast", - "@kbn/utility-types" + "@kbn/utility-types", + "@kbn/esql-types", ], "exclude": [ "target/**/*", diff --git a/src/platform/packages/shared/kbn-esql-variables-types/README.md b/src/platform/packages/shared/kbn-esql-variables-types/README.md deleted file mode 100644 index 681bab7815a07..0000000000000 --- a/src/platform/packages/shared/kbn-esql-variables-types/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# @kbn/esql-variables-types - -This package contains types important for the ES|QL variables. diff --git a/src/platform/packages/shared/kbn-esql-variables-types/kibana.jsonc b/src/platform/packages/shared/kbn-esql-variables-types/kibana.jsonc deleted file mode 100644 index 7bbcf074645c1..0000000000000 --- a/src/platform/packages/shared/kbn-esql-variables-types/kibana.jsonc +++ /dev/null @@ -1,9 +0,0 @@ -{ - "type": "shared-browser", - "id": "@kbn/esql-variables-types", - "owner": [ - "@elastic/kibana-esql", - ], - "group": "platform", - "visibility": "shared" -} \ No newline at end of file diff --git a/src/platform/packages/shared/kbn-esql-variables-types/tsconfig.json b/src/platform/packages/shared/kbn-esql-variables-types/tsconfig.json deleted file mode 100644 index 871403f5170cf..0000000000000 --- a/src/platform/packages/shared/kbn-esql-variables-types/tsconfig.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extends": "../../../../../tsconfig.base.json", - "compilerOptions": { - "outDir": "target/types", - "types": [ - "jest", - "node" - ] - }, - "include": [ - "**/*.ts", - ], - "exclude": [ - "target/**/*", - ], - "kbn_references": [ - "@kbn/presentation-publishing", - "@kbn/esql-validation-autocomplete", - ] -} diff --git a/src/platform/packages/shared/kbn-scout/src/common/services/clients.ts b/src/platform/packages/shared/kbn-scout/src/common/services/clients.ts index ed5efd8e77786..20018ec9584e4 100644 --- a/src/platform/packages/shared/kbn-scout/src/common/services/clients.ts +++ b/src/platform/packages/shared/kbn-scout/src/common/services/clients.ts @@ -8,7 +8,6 @@ */ import { createEsClientForTesting, KbnClient } from '@kbn/test'; -import { ToolingLog } from '@kbn/tooling-log'; import { ScoutLogger } from './logger'; import { ScoutTestConfig, EsClient } from '../../types'; @@ -17,7 +16,7 @@ interface ClientOptions { url: string; username: string; password: string; - log: ScoutLogger | ToolingLog; + log: ScoutLogger; } function createClientUrlWithAuth({ serviceName, url, username, password, log }: ClientOptions) { @@ -25,9 +24,7 @@ function createClientUrlWithAuth({ serviceName, url, username, password, log }: clientUrl.username = username; clientUrl.password = password; - if (log instanceof ScoutLogger) { - log.serviceLoaded(`${serviceName}Client`); - } + log.serviceLoaded(`${serviceName}Client`); return clientUrl.toString(); } @@ -35,7 +32,7 @@ function createClientUrlWithAuth({ serviceName, url, username, password, log }: let esClientInstance: EsClient | null = null; let kbnClientInstance: KbnClient | null = null; -export function getEsClient(config: ScoutTestConfig, log: ScoutLogger | ToolingLog) { +export function getEsClient(config: ScoutTestConfig, log: ScoutLogger) { if (!esClientInstance) { const { username, password } = config.auth; const elasticsearchUrl = createClientUrlWithAuth({ diff --git a/src/platform/packages/shared/kbn-scout/src/common/utils/index.ts b/src/platform/packages/shared/kbn-scout/src/common/utils/index.ts index ab112412b64a1..5829f7eeaf2e2 100644 --- a/src/platform/packages/shared/kbn-scout/src/common/utils/index.ts +++ b/src/platform/packages/shared/kbn-scout/src/common/utils/index.ts @@ -14,7 +14,19 @@ export async function silence(log: ToolingLog, milliseconds: number) { await Rx.firstValueFrom( log.getWritten$().pipe( Rx.startWith(null), - Rx.switchMap(() => Rx.timer(milliseconds)) + Rx.switchMap((message) => { + if ( + // TODO: remove workaround to ignore ES authc debug logs for stateful run + message?.args[0]?.includes( + 'Authentication of [kibana_system] using realm [reserved/reserved]' + ) || + message?.args[0]?.includes('realm [reserved] authenticated user [kibana_system]') + ) { + return Rx.of(null); + } else { + return Rx.timer(milliseconds); + } + }) ) ); } diff --git a/src/platform/packages/shared/kbn-scout/src/servers/run_elasticsearch.ts b/src/platform/packages/shared/kbn-scout/src/servers/run_elasticsearch.ts index 24c8a49da2d9a..1179cd090769c 100644 --- a/src/platform/packages/shared/kbn-scout/src/servers/run_elasticsearch.ts +++ b/src/platform/packages/shared/kbn-scout/src/servers/run_elasticsearch.ts @@ -13,7 +13,12 @@ import type { ToolingLog } from '@kbn/tooling-log'; import { REPO_ROOT } from '@kbn/repo-info'; import type { ArtifactLicense, ServerlessProjectType } from '@kbn/es'; import { isServerlessProjectType } from '@kbn/es/src/utils'; -import { createTestEsCluster, esTestConfig, cleanupElasticsearch } from '@kbn/test'; +import { + createTestEsCluster, + esTestConfig, + cleanupElasticsearch, + createEsClientForTesting, +} from '@kbn/test'; import { Config } from '../config'; interface RunElasticsearchOptions { @@ -81,6 +86,27 @@ export async function runElasticsearch( logsDir, config, }); + + // TODO: Remove this once we find out why SAML callback randomly fails with 401 + log.info('Enable authc debug logs for ES'); + const clientUrl = new URL( + Url.format({ + protocol: options.config.get('servers.elasticsearch.protocol'), + hostname: options.config.get('servers.elasticsearch.hostname'), + port: options.config.get('servers.elasticsearch.port'), + }) + ); + clientUrl.username = options.config.get('servers.kibana.username'); + clientUrl.password = options.config.get('servers.kibana.password'); + const esClient = createEsClientForTesting({ + esUrl: clientUrl.toString(), + }); + await esClient.cluster.putSettings({ + persistent: { + 'logger.org.elasticsearch.xpack.security.authc': 'debug', + }, + }); + return async () => { await cleanupElasticsearch(node, config.serverless, logsDir, log); }; diff --git a/src/platform/packages/shared/kbn-scout/src/servers/start_servers.ts b/src/platform/packages/shared/kbn-scout/src/servers/start_servers.ts index 876f60f18f02e..32eb2030c978d 100644 --- a/src/platform/packages/shared/kbn-scout/src/servers/start_servers.ts +++ b/src/platform/packages/shared/kbn-scout/src/servers/start_servers.ts @@ -16,7 +16,7 @@ import { runElasticsearch } from './run_elasticsearch'; import { getExtraKbnOpts, runKibanaServer } from './run_kibana_server'; import { StartServerOptions } from './flags'; import { loadServersConfig } from '../config'; -import { getEsClient, silence } from '../common'; +import { silence } from '../common'; export async function startServers(log: ToolingLog, options: StartServerOptions) { const runStartTime = Date.now(); @@ -32,14 +32,6 @@ export async function startServers(log: ToolingLog, options: StartServerOptions) logsDir: options.logsDir, }); - log.info('Enable authc debug logs for ES'); - const client = getEsClient(config.getScoutTestConfig(), log); - await client.cluster.putSettings({ - persistent: { - 'logger.org.elasticsearch.xpack.security.authc': 'debug', - }, - }); - await runKibanaServer({ procs, config, diff --git a/src/platform/packages/shared/kbn-test/src/jest/setup/react_testing_library.js b/src/platform/packages/shared/kbn-test/src/jest/setup/react_testing_library.js index ce54bcf8326cb..fd9d755a62490 100644 --- a/src/platform/packages/shared/kbn-test/src/jest/setup/react_testing_library.js +++ b/src/platform/packages/shared/kbn-test/src/jest/setup/react_testing_library.js @@ -80,8 +80,5 @@ console.error = (...args) => { * Tracking issue to clean this up https://github.com/elastic/kibana/issues/199100 */ if (REACT_VERSION.startsWith('18.')) { - if (!process.env.CI) { - console.warn('Running with React@18 and muting the legacy ReactDOM.render warning'); - } muteLegacyRootWarning(); } diff --git a/src/platform/packages/shared/shared-ux/error_boundary/src/ui/error_boundary.test.tsx b/src/platform/packages/shared/shared-ux/error_boundary/src/ui/error_boundary.test.tsx index db872bd1140bd..e5d7c8043e2f8 100644 --- a/src/platform/packages/shared/shared-ux/error_boundary/src/ui/error_boundary.test.tsx +++ b/src/platform/packages/shared/shared-ux/error_boundary/src/ui/error_boundary.test.tsx @@ -118,7 +118,7 @@ describe('', () => { ).toBe(true); expect( mockDeps.analytics.reportEvent.mock.calls[0][1].error_stack.startsWith( - 'Error: This is an error to show the test user!' + 'FatalReactError: This is an error to show the test user!' ) ).toBe(true); }); diff --git a/src/platform/packages/shared/shared-ux/error_boundary/src/ui/section_error_boundary.test.tsx b/src/platform/packages/shared/shared-ux/error_boundary/src/ui/section_error_boundary.test.tsx index f031393ee743a..e50026ea22375 100644 --- a/src/platform/packages/shared/shared-ux/error_boundary/src/ui/section_error_boundary.test.tsx +++ b/src/platform/packages/shared/shared-ux/error_boundary/src/ui/section_error_boundary.test.tsx @@ -114,7 +114,7 @@ describe('', () => { ).toBe(true); expect( mockDeps.analytics.reportEvent.mock.calls[0][1].error_stack.startsWith( - 'Error: This is an error to show the test user!' + 'FatalReactError: This is an error to show the test user!' ) ).toBe(true); }); diff --git a/src/platform/plugins/private/url_forwarding/public/forward_app/forward_app.ts b/src/platform/plugins/private/url_forwarding/public/forward_app/forward_app.ts index 188c01dcce6ca..e2db1d96fe241 100644 --- a/src/platform/plugins/private/url_forwarding/public/forward_app/forward_app.ts +++ b/src/platform/plugins/private/url_forwarding/public/forward_app/forward_app.ts @@ -16,7 +16,6 @@ export const createLegacyUrlForwardApp = ( forwards: ForwardDefinition[] ): App => ({ id: 'kibana', - chromeless: true, title: 'Legacy URL migration', appRoute: '/app/kibana#/', visibleIn: [], diff --git a/src/platform/plugins/shared/chart_expressions/expression_legacy_metric/public/components/metric.scss b/src/platform/plugins/shared/chart_expressions/expression_legacy_metric/public/components/metric.scss deleted file mode 100644 index 59d06546da494..0000000000000 --- a/src/platform/plugins/shared/chart_expressions/expression_legacy_metric/public/components/metric.scss +++ /dev/null @@ -1,56 +0,0 @@ -// Prefix all styles with "mtr" to avoid conflicts. -// Examples -// mtrChart -// mtrChart__legend -// mtrChart__legend--small -// mtrChart__legend-isLoading - -.legacyMtrVis { - height: 100%; - width: 100%; - display: flex; - flex-direction: row; - justify-content: center; - align-items: center; - flex-wrap: wrap; - overflow: auto; - @include euiScrollBar; -} - -.legacyMtrVis__value { - @include euiTextTruncate; - font-weight: $euiFontWeightBold; -} - -.legacyMtrVis__container { - text-align: center; - padding: $euiSize; - display: flex; - flex-direction: column; -} - -.legacyMtrVis__container--light { - color: $euiColorEmptyShade; -} - -.legacyMtrVis__container-isfull { - min-height: 100%; - min-width: max-content; - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; - flex: 1 0 100%; -} - -.legacyMtrVis__container-isFilterable { - cursor: pointer; - transition: transform $euiAnimSpeedNormal $euiAnimSlightResistance; - transform: translate(0, 0); - - &:hover, - &:focus { - box-shadow: none; - transform: translate(0, -2px); - } -} \ No newline at end of file diff --git a/src/platform/plugins/shared/chart_expressions/expression_legacy_metric/public/components/metric_component.tsx b/src/platform/plugins/shared/chart_expressions/expression_legacy_metric/public/components/metric_component.tsx index e4e5078c84dd8..f7ae231413aea 100644 --- a/src/platform/plugins/shared/chart_expressions/expression_legacy_metric/public/components/metric_component.tsx +++ b/src/platform/plugins/shared/chart_expressions/expression_legacy_metric/public/components/metric_component.tsx @@ -24,8 +24,6 @@ import { formatValue, shouldApplyColor } from '../utils'; import { needsLightText } from '../utils/palette'; import { withAutoScale } from './with_auto_scale'; -import './metric.scss'; - export interface MetricVisComponentProps { visParams: Pick; visData: Datatable; diff --git a/src/platform/plugins/shared/chart_expressions/expression_legacy_metric/public/components/metric_value.tsx b/src/platform/plugins/shared/chart_expressions/expression_legacy_metric/public/components/metric_value.tsx index 8199a2ec1f842..e65d83f95794f 100644 --- a/src/platform/plugins/shared/chart_expressions/expression_legacy_metric/public/components/metric_value.tsx +++ b/src/platform/plugins/shared/chart_expressions/expression_legacy_metric/public/components/metric_value.tsx @@ -10,6 +10,8 @@ import React, { CSSProperties, useLayoutEffect } from 'react'; import classNames from 'classnames'; import { i18n } from '@kbn/i18n'; +import { UseEuiTheme, euiTextTruncate } from '@elastic/eui'; +import { css } from '@emotion/react'; import type { MetricOptions, MetricStyle, MetricVisParam } from '../../common/types'; interface MetricVisValueProps { @@ -24,6 +26,7 @@ interface MetricVisValueProps { export const MetricVisValue = (props: MetricVisValueProps) => { const { style, metric, onFilter, labelConfig, colorFullBackground, autoScale } = props; + const containerClassName = classNames('legacyMtrVis__container', { 'legacyMtrVis__container--light': metric.lightText, 'legacyMtrVis__container-isfilterable': onFilter, @@ -38,11 +41,13 @@ export const MetricVisValue = (props: MetricVisValueProps) => { const metricComponent = (
{ return metricComponent; }; + +const styles = { + legacyMtrVisValue: ({ euiTheme }: UseEuiTheme) => + css` + ${euiTextTruncate()}; + font-weight: ${euiTheme.font.weight.bold}; + `, + legacyMtrVisContainer: ({ euiTheme }: UseEuiTheme) => + css({ + '&.legacyMtrVis__container': { + textAlign: 'center', + padding: euiTheme.size.base, + display: 'flex', + flexDirection: 'column', + }, + '&.legacyMtrVis__container--light': { + color: euiTheme.colors.emptyShade, + }, + '&.legacyMtrVis__container-isfull': { + minHeight: '100%', + minWidth: 'max-content', + display: 'flex', + flexDirection: 'column', + justifyContent: 'center', + alignItems: 'center', + flex: '1 0 100%', + }, + '&.legacyMtrVis__container-isfilterable': { + cursor: 'pointer', + transition: `transform ${euiTheme.animation.normal} ${euiTheme.animation.resistance}`, + transform: 'translate(0, 0)', + + '&:hover, &:focus': { + boxShadow: 'none', + transform: 'translate(0, -2px)', + }, + }, + }), +}; diff --git a/src/platform/plugins/shared/chart_expressions/expression_legacy_metric/public/expression_renderers/metric_vis_renderer.tsx b/src/platform/plugins/shared/chart_expressions/expression_legacy_metric/public/expression_renderers/metric_vis_renderer.tsx index 45573fbdd13b4..e086508040259 100644 --- a/src/platform/plugins/shared/chart_expressions/expression_legacy_metric/public/expression_renderers/metric_vis_renderer.tsx +++ b/src/platform/plugins/shared/chart_expressions/expression_legacy_metric/public/expression_renderers/metric_vis_renderer.tsx @@ -27,6 +27,7 @@ import { extractContainerType, extractVisualizationType, } from '@kbn/chart-expressions-common'; +import { css } from '@emotion/react'; import { ExpressionLegacyMetricPluginStart } from '../plugin'; import { EXPRESSION_METRIC_NAME, MetricVisRenderConfig, VisParams } from '../../common'; @@ -113,10 +114,11 @@ export const getMetricVisRenderer: (
, + setSelectedOptions: (options: OptionsListSelection[] | undefined) => { + selections.setSelectedOptions(options); + }, }, { ...dataControl.comparators, diff --git a/src/platform/plugins/shared/controls/public/controls/data_controls/options_list_control/types.ts b/src/platform/plugins/shared/controls/public/controls/data_controls/options_list_control/types.ts index 58ef14e32c38e..1b82d7e8b06dd 100644 --- a/src/platform/plugins/shared/controls/public/controls/data_controls/options_list_control/types.ts +++ b/src/platform/plugins/shared/controls/public/controls/data_controls/options_list_control/types.ts @@ -18,7 +18,9 @@ import type { } from '../../../../common/options_list'; import type { DataControlApi } from '../types'; -export type OptionsListControlApi = DataControlApi; +export type OptionsListControlApi = DataControlApi & { + setSelectedOptions: (options: OptionsListSelection[] | undefined) => void; +}; export interface OptionsListComponentState extends Omit { diff --git a/src/platform/plugins/shared/controls/public/controls/esql_control/esql_control_selections.ts b/src/platform/plugins/shared/controls/public/controls/esql_control/esql_control_selections.ts index f30ed60492318..c56857e2f3915 100644 --- a/src/platform/plugins/shared/controls/public/controls/esql_control/esql_control_selections.ts +++ b/src/platform/plugins/shared/controls/public/controls/esql_control/esql_control_selections.ts @@ -8,8 +8,8 @@ */ import deepEqual from 'react-fast-compare'; import { BehaviorSubject, combineLatest } from 'rxjs'; +import { ESQLVariableType, type ESQLControlVariable } from '@kbn/esql-types'; import { PublishingSubject, StateComparators } from '@kbn/presentation-publishing'; -import { ESQLControlVariable, ESQLVariableType } from '@kbn/esql-validation-autocomplete'; import type { ESQLControlState } from '@kbn/esql/public'; export function initializeESQLControlSelections(initialState: ESQLControlState) { diff --git a/src/platform/plugins/shared/controls/public/controls/esql_control/get_esql_control_factory.tsx b/src/platform/plugins/shared/controls/public/controls/esql_control/get_esql_control_factory.tsx index 982b34fc5dd75..f7a599e22cca0 100644 --- a/src/platform/plugins/shared/controls/public/controls/esql_control/get_esql_control_factory.tsx +++ b/src/platform/plugins/shared/controls/public/controls/esql_control/get_esql_control_factory.tsx @@ -12,7 +12,7 @@ import { i18n } from '@kbn/i18n'; import { BehaviorSubject } from 'rxjs'; import { css } from '@emotion/react'; import { EuiComboBox } from '@elastic/eui'; -import { apiPublishesESQLVariables } from '@kbn/esql-variables-types'; +import { apiPublishesESQLVariables } from '@kbn/esql-types'; import { useBatchedPublishingSubjects, apiHasParentApi } from '@kbn/presentation-publishing'; import { tracksOverlays } from '@kbn/presentation-containers'; import type { ESQLControlState } from '@kbn/esql/public'; diff --git a/src/platform/plugins/shared/controls/public/controls/esql_control/types.ts b/src/platform/plugins/shared/controls/public/controls/esql_control/types.ts index fe79a25f6b81e..f2aeeef62fcb9 100644 --- a/src/platform/plugins/shared/controls/public/controls/esql_control/types.ts +++ b/src/platform/plugins/shared/controls/public/controls/esql_control/types.ts @@ -6,7 +6,7 @@ * 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 { PublishesESQLVariable } from '@kbn/esql-variables-types'; +import { PublishesESQLVariable } from '@kbn/esql-types'; import type { HasEditCapabilities, PublishesTitle } from '@kbn/presentation-publishing'; import type { DefaultControlApi } from '../types'; diff --git a/src/platform/plugins/shared/controls/public/index.ts b/src/platform/plugins/shared/controls/public/index.ts index 9b99f81693c6a..3daca3f95edc2 100644 --- a/src/platform/plugins/shared/controls/public/index.ts +++ b/src/platform/plugins/shared/controls/public/index.ts @@ -21,8 +21,12 @@ export { } from './actions/constants'; export type { ControlGroupApi, ControlStateTransform } from './control_group/types'; - export type { DataControlApi, DataControlFactory } from './controls/data_controls/types'; +export type { DefaultControlApi } from './controls/types'; +export type { OptionsListControlApi } from './controls/data_controls/options_list_control/types'; +export type { RangesliderControlApi } from './controls/data_controls/range_slider/types'; +export type { ESQLControlApi } from './controls/esql_control/types'; +export type { TimesliderControlApi } from './controls/timeslider_control/types'; export { ControlGroupRenderer, diff --git a/src/platform/plugins/shared/controls/tsconfig.json b/src/platform/plugins/shared/controls/tsconfig.json index 4a3cef45061f8..a6733169ba549 100644 --- a/src/platform/plugins/shared/controls/tsconfig.json +++ b/src/platform/plugins/shared/controls/tsconfig.json @@ -39,9 +39,8 @@ "@kbn/shared-ux-utility", "@kbn/std", "@kbn/react-hooks", - "@kbn/esql-validation-autocomplete", - "@kbn/esql-variables-types", "@kbn/esql", + "@kbn/esql-types", ], "exclude": ["target/**/*"] } diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_api/types.ts b/src/platform/plugins/shared/dashboard/public/dashboard_api/types.ts index 094ebbe62c73b..2e6edcf137ec3 100644 --- a/src/platform/plugins/shared/dashboard/public/dashboard_api/types.ts +++ b/src/platform/plugins/shared/dashboard/public/dashboard_api/types.ts @@ -16,7 +16,7 @@ import { import { RefreshInterval, SearchSessionInfoProvider } from '@kbn/data-plugin/public'; import type { DefaultEmbeddableApi, EmbeddablePackageState } from '@kbn/embeddable-plugin/public'; import { Filter, Query, TimeRange } from '@kbn/es-query'; -import { PublishesESQLVariables } from '@kbn/esql-variables-types'; +import { PublishesESQLVariables } from '@kbn/esql-types'; import { IKbnUrlStateStorage } from '@kbn/kibana-utils-plugin/public'; import { CanExpandPanels, diff --git a/src/platform/plugins/shared/dashboard/public/dashboard_api/unified_search_manager.ts b/src/platform/plugins/shared/dashboard/public/dashboard_api/unified_search_manager.ts index b38ca7b2b175e..92ad14f34b805 100644 --- a/src/platform/plugins/shared/dashboard/public/dashboard_api/unified_search_manager.ts +++ b/src/platform/plugins/shared/dashboard/public/dashboard_api/unified_search_manager.ts @@ -24,7 +24,7 @@ import { compareFilters, isFilterPinned, } from '@kbn/es-query'; -import { ESQLControlVariable } from '@kbn/esql-validation-autocomplete'; +import { ESQLControlVariable } from '@kbn/esql-types'; import { PublishingSubject, StateComparators } from '@kbn/presentation-publishing'; import fastIsEqual from 'fast-deep-equal'; import { cloneDeep } from 'lodash'; diff --git a/src/platform/plugins/shared/dashboard/tsconfig.json b/src/platform/plugins/shared/dashboard/tsconfig.json index 42d640a2c4d40..7f2c5c3a85b61 100644 --- a/src/platform/plugins/shared/dashboard/tsconfig.json +++ b/src/platform/plugins/shared/dashboard/tsconfig.json @@ -81,10 +81,9 @@ "@kbn/visualization-utils", "@kbn/std", "@kbn/core-rendering-browser", - "@kbn/esql-variables-types", "@kbn/grid-layout", - "@kbn/esql-validation-autocomplete", - "@kbn/ui-actions-browser" + "@kbn/ui-actions-browser", + "@kbn/esql-types" ], "exclude": ["target/**/*"] } diff --git a/src/platform/plugins/shared/discover/public/application/main/components/top_nav/discover_topnav.tsx b/src/platform/plugins/shared/discover/public/application/main/components/top_nav/discover_topnav.tsx index d7d1d607e24c8..b2b7a61debcf1 100644 --- a/src/platform/plugins/shared/discover/public/application/main/components/top_nav/discover_topnav.tsx +++ b/src/platform/plugins/shared/discover/public/application/main/components/top_nav/discover_topnav.tsx @@ -10,8 +10,6 @@ import React, { useCallback, useEffect, useMemo, useRef } from 'react'; import { DataViewType } from '@kbn/data-views-plugin/public'; import type { DataViewPickerProps } from '@kbn/unified-search-plugin/public'; -import { ENABLE_ESQL } from '@kbn/esql-utils'; -import { TextBasedLanguages } from '@kbn/esql-utils'; import { DiscoverFlyouts, dismissAllFlyoutsExceptFor } from '@kbn/discover-utils'; import { useSavedSearchInitial } from '../../state_management/discover_state_provider'; import { ESQL_TRANSITION_MODAL_KEY } from '../../../../../common/constants'; @@ -49,8 +47,7 @@ export const DiscoverTopNav = ({ onCancelClick, }: DiscoverTopNavProps) => { const services = useDiscoverServices(); - const { dataViewEditor, navigation, dataViewFieldEditor, data, uiSettings, setHeaderActionMenu } = - services; + const { dataViewEditor, navigation, dataViewFieldEditor, data, setHeaderActionMenu } = services; const query = useAppStateSelector((state) => state.query); const { savedDataViews, managedDataViews, adHocDataViews } = useInternalStateSelector(selectDataViewsForPicker); @@ -174,9 +171,6 @@ export const DiscoverTopNav = ({ ); const dataViewPickerProps: DataViewPickerProps = useMemo(() => { - const isESQLModeEnabled = uiSettings.get(ENABLE_ESQL); - const supportedTextBasedLanguages = isESQLModeEnabled ? [TextBasedLanguages.ESQL] : []; - return { trigger: { label: dataView?.getName() || '', @@ -188,7 +182,6 @@ export const DiscoverTopNav = ({ onDataViewCreated: createNewDataView, onCreateDefaultAdHocDataView: stateContainer.actions.createAndAppendAdHocDataView, onChangeDataView: stateContainer.actions.onChangeDataView, - textBasedLanguages: supportedTextBasedLanguages, adHocDataViews, managedDataViews, savedDataViews, @@ -202,7 +195,6 @@ export const DiscoverTopNav = ({ managedDataViews, savedDataViews, stateContainer, - uiSettings, ]); const onESQLDocsFlyoutVisibilityChanged = useCallback((isOpen: boolean) => { diff --git a/src/platform/plugins/shared/esql/public/triggers/esql_controls/control_flyout/helpers.ts b/src/platform/plugins/shared/esql/public/triggers/esql_controls/control_flyout/helpers.ts index 3de541435cd34..72f3e7919cad0 100644 --- a/src/platform/plugins/shared/esql/public/triggers/esql_controls/control_flyout/helpers.ts +++ b/src/platform/plugins/shared/esql/public/triggers/esql_controls/control_flyout/helpers.ts @@ -7,7 +7,8 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ import { monaco } from '@kbn/monaco'; -import { timeUnits, ESQLVariableType } from '@kbn/esql-validation-autocomplete'; +import { ESQLVariableType } from '@kbn/esql-types'; +import { timeUnits } from '@kbn/esql-validation-autocomplete'; function inKnownTimeInterval(timeIntervalUnit: string): boolean { return timeUnits.some((unit) => unit === timeIntervalUnit.toLowerCase()); diff --git a/src/platform/plugins/shared/esql/public/triggers/esql_controls/control_flyout/identifier_control_form.test.tsx b/src/platform/plugins/shared/esql/public/triggers/esql_controls/control_flyout/identifier_control_form.test.tsx index ed6d57fb31f14..bf33ec7cd635f 100644 --- a/src/platform/plugins/shared/esql/public/triggers/esql_controls/control_flyout/identifier_control_form.test.tsx +++ b/src/platform/plugins/shared/esql/public/triggers/esql_controls/control_flyout/identifier_control_form.test.tsx @@ -11,7 +11,7 @@ import React from 'react'; import { render, within, fireEvent } from '@testing-library/react'; import { monaco } from '@kbn/monaco'; import { dataPluginMock } from '@kbn/data-plugin/public/mocks'; -import { ESQLVariableType } from '@kbn/esql-validation-autocomplete'; +import { ESQLVariableType } from '@kbn/esql-types'; import { IdentifierControlForm } from './identifier_control_form'; import { ESQLControlState, EsqlControlType } from '../types'; diff --git a/src/platform/plugins/shared/esql/public/triggers/esql_controls/control_flyout/identifier_control_form.tsx b/src/platform/plugins/shared/esql/public/triggers/esql_controls/control_flyout/identifier_control_form.tsx index d16572e5a6f61..40306c6a5734c 100644 --- a/src/platform/plugins/shared/esql/public/triggers/esql_controls/control_flyout/identifier_control_form.tsx +++ b/src/platform/plugins/shared/esql/public/triggers/esql_controls/control_flyout/identifier_control_form.tsx @@ -20,11 +20,8 @@ import { import { css } from '@emotion/react'; import { monaco } from '@kbn/monaco'; import type { ISearchGeneric } from '@kbn/search-types'; -import { - ESQLVariableType, - ESQLControlVariable, - aggFunctionDefinitions, -} from '@kbn/esql-validation-autocomplete'; +import { ESQLVariableType, type ESQLControlVariable } from '@kbn/esql-types'; +import { aggFunctionDefinitions } from '@kbn/esql-validation-autocomplete'; import { getESQLQueryColumnsRaw } from '@kbn/esql-utils'; import type { ESQLControlState, ControlWidthOptions } from '../types'; import { diff --git a/src/platform/plugins/shared/esql/public/triggers/esql_controls/control_flyout/index.tsx b/src/platform/plugins/shared/esql/public/triggers/esql_controls/control_flyout/index.tsx index 07f0c86d855a7..6681843a6f8f5 100644 --- a/src/platform/plugins/shared/esql/public/triggers/esql_controls/control_flyout/index.tsx +++ b/src/platform/plugins/shared/esql/public/triggers/esql_controls/control_flyout/index.tsx @@ -8,7 +8,7 @@ */ import React, { useCallback } from 'react'; -import { ESQLVariableType, ESQLControlVariable } from '@kbn/esql-validation-autocomplete'; +import { ESQLVariableType, type ESQLControlVariable } from '@kbn/esql-types'; import type { ISearchGeneric } from '@kbn/search-types'; import { monaco } from '@kbn/monaco'; import type { ESQLControlState } from '../types'; diff --git a/src/platform/plugins/shared/esql/public/triggers/esql_controls/control_flyout/shared_form_components.tsx b/src/platform/plugins/shared/esql/public/triggers/esql_controls/control_flyout/shared_form_components.tsx index a654cd0e880c1..bc6763fa3032d 100644 --- a/src/platform/plugins/shared/esql/public/triggers/esql_controls/control_flyout/shared_form_components.tsx +++ b/src/platform/plugins/shared/esql/public/triggers/esql_controls/control_flyout/shared_form_components.tsx @@ -10,7 +10,7 @@ import React, { useCallback } from 'react'; import { i18n } from '@kbn/i18n'; import { css } from '@emotion/react'; -import { ESQLControlVariable } from '@kbn/esql-validation-autocomplete'; +import { ESQLControlVariable } from '@kbn/esql-types'; import { TooltipWrapper } from '@kbn/visualization-utils'; import { EuiFieldText, diff --git a/src/platform/plugins/shared/esql/public/triggers/esql_controls/control_flyout/value_control_form.test.tsx b/src/platform/plugins/shared/esql/public/triggers/esql_controls/control_flyout/value_control_form.test.tsx index 6a0c3e9e78609..ecafe01f08f27 100644 --- a/src/platform/plugins/shared/esql/public/triggers/esql_controls/control_flyout/value_control_form.test.tsx +++ b/src/platform/plugins/shared/esql/public/triggers/esql_controls/control_flyout/value_control_form.test.tsx @@ -12,7 +12,7 @@ import { render, within, fireEvent } from '@testing-library/react'; import { dataPluginMock } from '@kbn/data-plugin/public/mocks'; import { IUiSettingsClient } from '@kbn/core/public'; import { coreMock } from '@kbn/core/server/mocks'; -import { ESQLVariableType } from '@kbn/esql-validation-autocomplete'; +import { ESQLVariableType } from '@kbn/esql-types'; import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public'; import { __IntlProvider as IntlProvider } from '@kbn/i18n-react'; import { ValueControlForm } from './value_control_form'; diff --git a/src/platform/plugins/shared/esql/public/triggers/esql_controls/control_flyout/value_control_form.tsx b/src/platform/plugins/shared/esql/public/triggers/esql_controls/control_flyout/value_control_form.tsx index e881d642e688f..e88b0fda63e01 100644 --- a/src/platform/plugins/shared/esql/public/triggers/esql_controls/control_flyout/value_control_form.tsx +++ b/src/platform/plugins/shared/esql/public/triggers/esql_controls/control_flyout/value_control_form.tsx @@ -22,7 +22,8 @@ import { import { css } from '@emotion/react'; import { FormattedMessage } from '@kbn/i18n-react'; import type { ISearchGeneric } from '@kbn/search-types'; -import { ESQLVariableType, ESQLControlVariable } from '@kbn/esql-validation-autocomplete'; +import { ESQLVariableType } from '@kbn/esql-types'; +import { ESQLControlVariable } from '@kbn/esql-types'; import { getIndexPatternFromESQLQuery, getESQLResults, diff --git a/src/platform/plugins/shared/esql/public/triggers/esql_controls/esql_control_action.test.ts b/src/platform/plugins/shared/esql/public/triggers/esql_controls/esql_control_action.test.ts index 07f9b50e43d75..8c027c605fba4 100644 --- a/src/platform/plugins/shared/esql/public/triggers/esql_controls/esql_control_action.test.ts +++ b/src/platform/plugins/shared/esql/public/triggers/esql_controls/esql_control_action.test.ts @@ -9,7 +9,7 @@ import { dataPluginMock } from '@kbn/data-plugin/public/mocks'; import { coreMock } from '@kbn/core/public/mocks'; -import { ESQLVariableType } from '@kbn/esql-validation-autocomplete'; +import { ESQLVariableType } from '@kbn/esql-types'; import { CreateESQLControlAction } from './esql_control_action'; describe('update ES|QL query action', () => { diff --git a/src/platform/plugins/shared/esql/public/triggers/esql_controls/esql_control_action.ts b/src/platform/plugins/shared/esql/public/triggers/esql_controls/esql_control_action.ts index 32a4a3a1fd97b..bbda601a78e90 100644 --- a/src/platform/plugins/shared/esql/public/triggers/esql_controls/esql_control_action.ts +++ b/src/platform/plugins/shared/esql/public/triggers/esql_controls/esql_control_action.ts @@ -11,7 +11,8 @@ import { i18n } from '@kbn/i18n'; import type { Action } from '@kbn/ui-actions-plugin/public'; import type { CoreStart } from '@kbn/core/public'; import type { ISearchGeneric } from '@kbn/search-types'; -import type { ESQLVariableType, ESQLControlVariable } from '@kbn/esql-validation-autocomplete'; +import type { ESQLVariableType } from '@kbn/esql-types'; +import type { ESQLControlVariable } from '@kbn/esql-types'; import { monaco } from '@kbn/monaco'; import type { ESQLControlState } from './types'; import { isActionCompatible, executeAction } from './esql_control_helpers'; diff --git a/src/platform/plugins/shared/esql/public/triggers/esql_controls/esql_control_helpers.tsx b/src/platform/plugins/shared/esql/public/triggers/esql_controls/esql_control_helpers.tsx index 1313d6c690a14..afd9b89e98738 100644 --- a/src/platform/plugins/shared/esql/public/triggers/esql_controls/esql_control_helpers.tsx +++ b/src/platform/plugins/shared/esql/public/triggers/esql_controls/esql_control_helpers.tsx @@ -12,7 +12,7 @@ import { KibanaContextProvider } from '@kbn/kibana-react-plugin/public'; import { KibanaRenderContextProvider } from '@kbn/react-kibana-context-render'; import type { CoreStart } from '@kbn/core/public'; import type { ISearchGeneric } from '@kbn/search-types'; -import type { ESQLVariableType, ESQLControlVariable } from '@kbn/esql-validation-autocomplete'; +import type { ESQLVariableType, ESQLControlVariable } from '@kbn/esql-types'; import { toMountPoint } from '@kbn/react-kibana-mount'; import { monaco } from '@kbn/monaco'; import { untilPluginStartServicesReady } from '../../kibana_services'; diff --git a/src/platform/plugins/shared/esql/public/triggers/esql_controls/types.ts b/src/platform/plugins/shared/esql/public/triggers/esql_controls/types.ts index 5787d8e485724..87301feab97e0 100644 --- a/src/platform/plugins/shared/esql/public/triggers/esql_controls/types.ts +++ b/src/platform/plugins/shared/esql/public/triggers/esql_controls/types.ts @@ -6,7 +6,7 @@ * 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 type { ESQLVariableType } from '@kbn/esql-validation-autocomplete'; +import type { ESQLVariableType } from '@kbn/esql-types'; export enum EsqlControlType { STATIC_VALUES = 'STATIC_VALUES', diff --git a/src/platform/plugins/shared/esql/public/variables_service.test.ts b/src/platform/plugins/shared/esql/public/variables_service.test.ts index 5ef6cf8a3d759..15331fc515b14 100644 --- a/src/platform/plugins/shared/esql/public/variables_service.test.ts +++ b/src/platform/plugins/shared/esql/public/variables_service.test.ts @@ -6,7 +6,7 @@ * 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 { ESQLVariableType } from '@kbn/esql-validation-autocomplete'; +import { ESQLVariableType } from '@kbn/esql-types'; import { EsqlVariablesService } from './variables_service'; describe('EsqlVariablesService', () => { diff --git a/src/platform/plugins/shared/esql/public/variables_service.ts b/src/platform/plugins/shared/esql/public/variables_service.ts index a748e81f3bb19..ce63c733847d9 100644 --- a/src/platform/plugins/shared/esql/public/variables_service.ts +++ b/src/platform/plugins/shared/esql/public/variables_service.ts @@ -7,7 +7,7 @@ * License v3.0 only", or the "Server Side Public License, v 1". */ -import type { ESQLControlVariable } from '@kbn/esql-validation-autocomplete'; +import type { ESQLControlVariable } from '@kbn/esql-types'; export class EsqlVariablesService { esqlVariables: ESQLControlVariable[] = []; diff --git a/src/platform/plugins/shared/esql/tsconfig.json b/src/platform/plugins/shared/esql/tsconfig.json index 7c36e9f7d74af..1d32d6dcde8f5 100644 --- a/src/platform/plugins/shared/esql/tsconfig.json +++ b/src/platform/plugins/shared/esql/tsconfig.json @@ -34,6 +34,7 @@ "@kbn/core-test-helpers-kbn-server", "@kbn/i18n-react", "@kbn/visualization-utils", + "@kbn/esql-types", ], "exclude": [ "target/**/*", diff --git a/src/platform/plugins/shared/home/public/assets/elasticsearch_logs/screenshot.webp b/src/platform/plugins/shared/home/public/assets/elasticsearch_logs/screenshot.webp new file mode 100644 index 0000000000000..250293b4202ea Binary files /dev/null and b/src/platform/plugins/shared/home/public/assets/elasticsearch_logs/screenshot.webp differ diff --git a/src/platform/plugins/shared/share/public/url_service/redirect/components/page.tsx b/src/platform/plugins/shared/share/public/url_service/redirect/components/page.tsx index c5f2a93450092..943e9db87c2e8 100644 --- a/src/platform/plugins/shared/share/public/url_service/redirect/components/page.tsx +++ b/src/platform/plugins/shared/share/public/url_service/redirect/components/page.tsx @@ -10,7 +10,7 @@ import * as React from 'react'; import useObservable from 'react-use/lib/useObservable'; -import { EuiPageTemplate } from '@elastic/eui'; +import { EuiPageTemplate, EuiDelayRender } from '@elastic/eui'; import type { CustomBrandingSetup } from '@kbn/core-custom-branding-browser'; import type { ChromeDocTitle, ThemeServiceSetup } from '@kbn/core/public'; import { KibanaThemeProvider } from '@kbn/react-kibana-context-theme'; @@ -42,7 +42,7 @@ export const Page: React.FC = ({ if (error) { return ( - + @@ -51,9 +51,11 @@ export const Page: React.FC = ({ return ( - - - + + + + + ); }; diff --git a/src/platform/plugins/shared/share/public/url_service/redirect/redirect_manager.ts b/src/platform/plugins/shared/share/public/url_service/redirect/redirect_manager.ts index c4dd843deed00..96813a6372d3c 100644 --- a/src/platform/plugins/shared/share/public/url_service/redirect/redirect_manager.ts +++ b/src/platform/plugins/shared/share/public/url_service/redirect/redirect_manager.ts @@ -35,8 +35,11 @@ export class RedirectManager { application.register({ id: 'r', title: 'Redirect endpoint', - chromeless: true, + visibleIn: [], mount: async (params) => { + const abortController = new AbortController(); + this.onMount(params.history.location, abortController.signal); + const { render } = await import('./render'); const [start] = await core.getStartServices(); const { chrome, uiSettings, userProfile } = start; @@ -50,9 +53,8 @@ export class RedirectManager { homeHref: getHomeHref(http, uiSettings), }); - this.onMount(params.history.location); - return () => { + abortController.abort(); unmount(); }; }, @@ -92,11 +94,11 @@ export class RedirectManager { }); } - public onMount(location: Location) { + public onMount(location: Location, abortSignal?: AbortSignal) { const pathname = location.pathname; const isShortUrlRedirectBySlug = pathname.startsWith('/s/'); if (isShortUrlRedirectBySlug) { - this.navigateToShortUrlBySlug(pathname.substring('/s/'.length)); + this.navigateToShortUrlBySlug(pathname.substring('/s/'.length), abortSignal); return; } const urlLocationSearch = location.search; @@ -104,17 +106,23 @@ export class RedirectManager { this.navigate(options); } - private navigateToShortUrlBySlug(slug: string) { + private navigateToShortUrlBySlug(slug: string, abortSignal?: AbortSignal) { (async () => { const urlService = this.deps.url; const shortUrls = urlService.shortUrls.get(null); const shortUrl = await shortUrls.resolve(slug); + + if (abortSignal?.aborted) + return; /* it means that the user navigated away before the short url resolved */ + const locatorId = shortUrl.data.locator.id; const locator = urlService.locators.get(locatorId); if (!locator) throw new Error(`Locator "${locatorId}" not found.`); const locatorState = shortUrl.data.locator.state; await locator.navigate(locatorState, { replace: true }); })().catch((error) => { + if (abortSignal?.aborted) return; + this.error$.next(error); // eslint-disable-next-line no-console console.error(error); diff --git a/src/platform/plugins/shared/unified_search/public/__stories__/search_bar.stories.tsx b/src/platform/plugins/shared/unified_search/public/__stories__/search_bar.stories.tsx index 1d952d728b230..576d777d65e38 100644 --- a/src/platform/plugins/shared/unified_search/public/__stories__/search_bar.stories.tsx +++ b/src/platform/plugins/shared/unified_search/public/__stories__/search_bar.stories.tsx @@ -579,7 +579,6 @@ storiesOf('SearchBar', module) onChangeDataView: action('onChangeDataView'), onAddField: action('onAddField'), onDataViewCreated: action('onDataViewCreated'), - textBasedLanguages: ['ESQL'], }, } as SearchBarProps) ) @@ -595,7 +594,6 @@ storiesOf('SearchBar', module) onChangeDataView: action('onChangeDataView'), onAddField: action('onAddField'), onDataViewCreated: action('onDataViewCreated'), - textBasedLanguages: ['ESQL'], }, query: { esql: 'from dataview | project field1, field2' }, } as unknown as SearchBarProps) @@ -612,7 +610,6 @@ storiesOf('SearchBar', module) onChangeDataView: action('onChangeDataView'), onAddField: action('onAddField'), onDataViewCreated: action('onDataViewCreated'), - textBasedLanguages: ['ESQL'], }, query: { esql: 'from dataview | project field1, field2, field 3, field 4, field 5 | where field5 > 5 | stats var = avg(field3)', @@ -631,7 +628,6 @@ storiesOf('SearchBar', module) onChangeDataView: action('onChangeDataView'), onAddField: action('onAddField'), onDataViewCreated: action('onDataViewCreated'), - textBasedLanguages: ['ESQL'], }, textBasedLanguageModeErrors: [ new Error( diff --git a/src/platform/plugins/shared/unified_search/public/dataview_picker/data_view_picker.tsx b/src/platform/plugins/shared/unified_search/public/dataview_picker/data_view_picker.tsx index 9a77dad540783..85c30edc3b6e1 100644 --- a/src/platform/plugins/shared/unified_search/public/dataview_picker/data_view_picker.tsx +++ b/src/platform/plugins/shared/unified_search/public/dataview_picker/data_view_picker.tsx @@ -10,7 +10,6 @@ import React from 'react'; import type { EuiButtonProps, EuiSelectableProps } from '@elastic/eui'; import type { DataView, DataViewListItem, DataViewSpec } from '@kbn/data-views-plugin/public'; -import { TextBasedLanguages } from '@kbn/esql-utils'; import { ChangeDataView } from './change_dataview'; export type ChangeDataViewTriggerProps = EuiButtonProps & { @@ -69,12 +68,6 @@ export interface DataViewPickerProps { onDataViewCreated?: () => void; onCreateDefaultAdHocDataView?: (dataViewSpec: DataViewSpec) => void; - /** - * List of the supported text based languages (SQL, ESQL) etc. - * Defined per application, if not provided, no text based languages - * will be available. - */ - textBasedLanguages?: TextBasedLanguages[]; /** * Makes the picker disabled by disabling the popover trigger */ @@ -93,7 +86,6 @@ export const DataViewPicker = ({ onDataViewCreated, trigger, selectableProps, - textBasedLanguages, onCreateDefaultAdHocDataView, isDisabled, }: DataViewPickerProps) => { @@ -111,7 +103,6 @@ export const DataViewPicker = ({ managedDataViews={managedDataViews} savedDataViews={savedDataViews} selectableProps={selectableProps} - textBasedLanguages={textBasedLanguages} isDisabled={isDisabled} /> ); diff --git a/test/functional/page_objects/visualize_editor_page.ts b/test/functional/page_objects/visualize_editor_page.ts index 95ee763b7de11..b8391e298e140 100644 --- a/test/functional/page_objects/visualize_editor_page.ts +++ b/test/functional/page_objects/visualize_editor_page.ts @@ -504,7 +504,7 @@ export class VisualizeEditorPageObject extends FtrService { public async clickMetricByIndex(index: number) { const metrics = await this.find.allByCssSelector( - '[data-test-subj="visualizationLoader"] .legacyMtrVis .legacyMtrVis__container' + '[data-test-subj="visualizationLoader"] [data-test-subj="legacyMtrVis"] .legacyMtrVis__container' ); expect(metrics.length).greaterThan(index); await metrics[index].click(); diff --git a/tsconfig.base.json b/tsconfig.base.json index e305fba217e23..f5580bf413c2a 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -880,14 +880,14 @@ "@kbn/esql-datagrid/*": ["src/platform/plugins/shared/esql_datagrid/*"], "@kbn/esql-editor": ["src/platform/packages/private/kbn-esql-editor"], "@kbn/esql-editor/*": ["src/platform/packages/private/kbn-esql-editor/*"], + "@kbn/esql-types": ["src/platform/packages/shared/kbn-esql-types"], + "@kbn/esql-types/*": ["src/platform/packages/shared/kbn-esql-types/*"], "@kbn/esql-utils": ["src/platform/packages/shared/kbn-esql-utils"], "@kbn/esql-utils/*": ["src/platform/packages/shared/kbn-esql-utils/*"], "@kbn/esql-validation-autocomplete": ["src/platform/packages/shared/kbn-esql-validation-autocomplete"], "@kbn/esql-validation-autocomplete/*": ["src/platform/packages/shared/kbn-esql-validation-autocomplete/*"], "@kbn/esql-validation-example-plugin": ["examples/esql_validation_example"], "@kbn/esql-validation-example-plugin/*": ["examples/esql_validation_example/*"], - "@kbn/esql-variables-types": ["src/platform/packages/shared/kbn-esql-variables-types"], - "@kbn/esql-variables-types/*": ["src/platform/packages/shared/kbn-esql-variables-types/*"], "@kbn/eui-provider-dev-warning": ["test/plugin_functional/plugins/eui_provider_dev_warning"], "@kbn/eui-provider-dev-warning/*": ["test/plugin_functional/plugins/eui_provider_dev_warning/*"], "@kbn/event-annotation-common": ["src/platform/packages/shared/kbn-event-annotation-common"], diff --git a/x-pack/platform/plugins/private/canvas/shareable_runtime/webpack/ci_stats_plugin.ts b/x-pack/platform/plugins/private/canvas/shareable_runtime/webpack/ci_stats_plugin.ts index 7bc0105ef13b9..229ccfcf32c53 100644 --- a/x-pack/platform/plugins/private/canvas/shareable_runtime/webpack/ci_stats_plugin.ts +++ b/x-pack/platform/plugins/private/canvas/shareable_runtime/webpack/ci_stats_plugin.ts @@ -5,11 +5,9 @@ * 2.0. */ -/* eslint-disable import/no-extraneous-dependencies */ - import Path from 'path'; -import webpack from 'webpack'; +import type { Compiler } from 'webpack'; import { ToolingLog } from '@kbn/tooling-log'; import { CiStatsReporter } from '@kbn/ci-stats-reporter'; import { isNormalModule, isConcatenatedModule } from '@kbn/optimizer-webpack-helpers'; @@ -28,7 +26,7 @@ export class CiStatsPlugin { } ) {} - public apply(compiler: webpack.Compiler) { + public apply(compiler: Compiler) { const log = new ToolingLog({ level: 'error', writeTo: process.stdout, diff --git a/x-pack/platform/plugins/private/telemetry_collection_xpack/schema/xpack_security.json b/x-pack/platform/plugins/private/telemetry_collection_xpack/schema/xpack_security.json index 1ab6ba490f0b5..cb9881403ebe8 100644 --- a/x-pack/platform/plugins/private/telemetry_collection_xpack/schema/xpack_security.json +++ b/x-pack/platform/plugins/private/telemetry_collection_xpack/schema/xpack_security.json @@ -1,292 +1,5 @@ { "properties": { - "cloud_defend": { - "properties": { - "indices": { - "properties": { - "alerts": { - "properties": { - "doc_count": { - "type": "long" - }, - "deleted": { - "type": "long" - }, - "size_in_bytes": { - "type": "long" - }, - "last_doc_timestamp": { - "type": "date" - } - } - }, - "file": { - "properties": { - "doc_count": { - "type": "long" - }, - "deleted": { - "type": "long" - }, - "size_in_bytes": { - "type": "long" - }, - "last_doc_timestamp": { - "type": "date" - } - } - }, - "process": { - "properties": { - "doc_count": { - "type": "long" - }, - "deleted": { - "type": "long" - }, - "size_in_bytes": { - "type": "long" - }, - "last_doc_timestamp": { - "type": "date" - } - } - }, - "latestPackageVersion": { - "type": "keyword" - }, - "packageStatus": { - "properties": { - "status": { - "type": "keyword" - }, - "installedPackagePolicies": { - "type": "long" - }, - "healthyAgents": { - "type": "long" - } - } - } - } - }, - "pods_stats": { - "type": "array", - "items": { - "properties": { - "account_id": { - "type": "keyword" - }, - "container_image_name": { - "type": "keyword" - }, - "container_image_tag": { - "type": "keyword" - }, - "pod_name": { - "type": "keyword" - }, - "total_doc_count": { - "type": "long" - }, - "process_doc_count": { - "type": "long" - }, - "file_doc_count": { - "type": "long" - }, - "alert_doc_count": { - "type": "long" - } - } - } - }, - "accounts_stats": { - "type": "array", - "items": { - "properties": { - "account_id": { - "type": "keyword" - }, - "cloud_provider": { - "type": "keyword" - }, - "kubernetes_version": { - "type": "keyword" - }, - "total_doc_count": { - "type": "long" - }, - "file_doc_count": { - "type": "long" - }, - "process_doc_count": { - "type": "long" - }, - "alert_doc_count": { - "type": "long" - }, - "agents_count": { - "type": "short" - }, - "nodes_count": { - "type": "short" - }, - "pods_count": { - "type": "short" - } - } - } - }, - "installation_stats": { - "type": "array", - "items": { - "properties": { - "package_policy_id": { - "type": "keyword" - }, - "package_version": { - "type": "keyword" - }, - "agent_policy_id": { - "type": "keyword" - }, - "created_at": { - "type": "date" - }, - "agent_count": { - "type": "long" - }, - "policy_yaml": { - "type": "keyword" - }, - "selectors": { - "type": "array", - "items": { - "properties": { - "type": { - "type": "keyword" - }, - "name": { - "type": "keyword" - }, - "operation": { - "type": "array", - "items": { - "type": "keyword" - } - }, - "containerImageFullName": { - "type": "array", - "items": { - "type": "keyword" - } - }, - "containerImageName": { - "type": "array", - "items": { - "type": "keyword" - } - }, - "containerImageTag": { - "type": "array", - "items": { - "type": "keyword" - } - }, - "kubernetesClusterId": { - "type": "array", - "items": { - "type": "keyword" - } - }, - "kubernetesClusterName": { - "type": "array", - "items": { - "type": "keyword" - } - }, - "kubernetesNamespace": { - "type": "array", - "items": { - "type": "keyword" - } - }, - "kubernetesPodLabel": { - "type": "array", - "items": { - "type": "keyword" - } - }, - "kubernetesPodName": { - "type": "array", - "items": { - "type": "keyword" - } - }, - "targetFilePath": { - "type": "array", - "items": { - "type": "keyword" - } - }, - "ignoreVolumeFiles": { - "type": "boolean" - }, - "ignoreVolumeMounts": { - "type": "boolean" - }, - "processExecutable": { - "type": "array", - "items": { - "type": "keyword" - } - }, - "processName": { - "type": "array", - "items": { - "type": "keyword" - } - }, - "sessionLeaderInteractive": { - "type": "boolean" - } - } - } - }, - "responses": { - "type": "array", - "items": { - "properties": { - "type": { - "type": "keyword" - }, - "match": { - "type": "array", - "items": { - "type": "keyword" - } - }, - "exclude": { - "type": "array", - "items": { - "type": "keyword" - } - }, - "actions": { - "type": "array", - "items": { - "type": "keyword" - } - } - } - } - } - } - } - } - } - }, "cloud_security_posture": { "properties": { "indices": { 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 d1b3412d7f664..d6d51b6782264 100644 --- a/x-pack/platform/plugins/private/translations/translations/fr-FR.json +++ b/x-pack/platform/plugins/private/translations/translations/fr-FR.json @@ -33936,7 +33936,6 @@ "xpack.securitySolution.appLinks.category.entityAnalytics": "Analyse des entités", "xpack.securitySolution.appLinks.category.investigations": "Investigations", "xpack.securitySolution.appLinks.category.management": "Gestion", - "xpack.securitySolution.appLinks.cloudDefendPoliciesDescription": "Sécurisez les charges de travail conteneurisées dans Kubernetes contre les attaques et les dérives grâce à des politiques d'exécution granulaires et flexibles.", "xpack.securitySolution.appLinks.cloudSecurityPostureBenchmarksDescription": "Voir les règles de benchmark pour la gestion du niveau de sécurité du cloud.", "xpack.securitySolution.appLinks.cloudSecurityPostureDashboardDescription": "Un aperçu des résultats de toutes les intégrations CSP.", "xpack.securitySolution.appLinks.coverageOverviewDashboard": "Couverture MITRE ATT&CK", @@ -38327,8 +38326,6 @@ "xpack.securitySolution.navigation.rules": "Règles", "xpack.securitySolution.navigation.timelines": "Chronologies", "xpack.securitySolution.navigation.users": "Utilisateurs", - "xpack.securitySolution.navLinks.assets.cloud_defend.description": "Hôtes du cloud exécutant Elastic Defend", - "xpack.securitySolution.navLinks.assets.cloud_defend.title": "Cloud", "xpack.securitySolution.navLinks.assets.fleet.agents.title": "Agents", "xpack.securitySolution.navLinks.assets.fleet.dataStreams.title": "Flux de données", "xpack.securitySolution.navLinks.assets.fleet.description": "Gestion centralisée des agents Elastic Agent", 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 18c6edbdf1789..1ed63c0b14cbf 100644 --- a/x-pack/platform/plugins/private/translations/translations/ja-JP.json +++ b/x-pack/platform/plugins/private/translations/translations/ja-JP.json @@ -33798,7 +33798,6 @@ "xpack.securitySolution.appLinks.category.entityAnalytics": "エンティティ分析", "xpack.securitySolution.appLinks.category.investigations": "調査", "xpack.securitySolution.appLinks.category.management": "管理", - "xpack.securitySolution.appLinks.cloudDefendPoliciesDescription": "粒度の高い柔軟なランタイムポリシーによって、Kubernetesのコンテナーワークロードを攻撃とドリフトから保護します。", "xpack.securitySolution.appLinks.cloudSecurityPostureBenchmarksDescription": "Cloud Security Posture Managementのベンチマークルールを表示します。", "xpack.securitySolution.appLinks.cloudSecurityPostureDashboardDescription": "すべてのCSP統合の結果の概要。", "xpack.securitySolution.appLinks.coverageOverviewDashboard": "MITRE ATT&CKの範囲", @@ -38188,8 +38187,6 @@ "xpack.securitySolution.navigation.rules": "ルール", "xpack.securitySolution.navigation.timelines": "タイムライン", "xpack.securitySolution.navigation.users": "ユーザー", - "xpack.securitySolution.navLinks.assets.cloud_defend.description": "Elastic Defendを実行しているクラウドホスト", - "xpack.securitySolution.navLinks.assets.cloud_defend.title": "クラウド", "xpack.securitySolution.navLinks.assets.fleet.agents.title": "エージェント", "xpack.securitySolution.navLinks.assets.fleet.dataStreams.title": "データストリーム", "xpack.securitySolution.navLinks.assets.fleet.description": "ElasticElasticエージェントの集中管理", 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 bc26887d91071..dabf905b637a9 100644 --- a/x-pack/platform/plugins/private/translations/translations/zh-CN.json +++ b/x-pack/platform/plugins/private/translations/translations/zh-CN.json @@ -33274,7 +33274,6 @@ "xpack.securitySolution.appLinks.category.entityAnalytics": "实体分析", "xpack.securitySolution.appLinks.category.investigations": "调查", "xpack.securitySolution.appLinks.category.management": "管理", - "xpack.securitySolution.appLinks.cloudDefendPoliciesDescription": "通过细粒度、灵活的运行时策略保护 Kubernetes 中的容器工作负载,使其免于受到攻击和出现漂移。", "xpack.securitySolution.appLinks.cloudSecurityPostureBenchmarksDescription": "查看用于云安全态势管理的基准规则。", "xpack.securitySolution.appLinks.cloudSecurityPostureDashboardDescription": "所有 CSP 集成中的结果概述。", "xpack.securitySolution.appLinks.coverageOverviewDashboard": "MITRE ATT&CK 支持", @@ -37623,8 +37622,6 @@ "xpack.securitySolution.navigation.rules": "规则", "xpack.securitySolution.navigation.timelines": "时间线", "xpack.securitySolution.navigation.users": "用户", - "xpack.securitySolution.navLinks.assets.cloud_defend.description": "运行 Elastic Defend 的云主机", - "xpack.securitySolution.navLinks.assets.cloud_defend.title": "云", "xpack.securitySolution.navLinks.assets.fleet.agents.title": "代理", "xpack.securitySolution.navLinks.assets.fleet.dataStreams.title": "数据流", "xpack.securitySolution.navLinks.assets.fleet.description": "Elastic 代理的集中管理", diff --git a/x-pack/platform/plugins/shared/alerting/public/hooks/use_delete_maintenance_window.test.tsx b/x-pack/platform/plugins/shared/alerting/public/hooks/use_delete_maintenance_window.test.tsx new file mode 100644 index 0000000000000..353aca0f98e45 --- /dev/null +++ b/x-pack/platform/plugins/shared/alerting/public/hooks/use_delete_maintenance_window.test.tsx @@ -0,0 +1,69 @@ +/* + * 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 { waitFor, renderHook } from '@testing-library/react'; + +import { AppMockRenderer, createAppMockRenderer } from '../lib/test_utils'; +import { useDeleteMaintenanceWindow } from './use_delete_maintenance_window'; + +const mockAddDanger = jest.fn(); +const mockAddSuccess = jest.fn(); + +jest.mock('../utils/kibana_react', () => { + const originalModule = jest.requireActual('../utils/kibana_react'); + return { + ...originalModule, + useKibana: () => { + const { services } = originalModule.useKibana(); + return { + services: { + ...services, + notifications: { toasts: { addSuccess: mockAddSuccess, addDanger: mockAddDanger } }, + }, + }; + }, + }; +}); +jest.mock('../services/maintenance_windows_api/delete', () => ({ + deleteMaintenanceWindow: jest.fn(), +})); + +const { deleteMaintenanceWindow } = jest.requireMock('../services/maintenance_windows_api/delete'); + +let appMockRenderer: AppMockRenderer; + +describe('useDeleteMaintenanceWindow', () => { + beforeEach(() => { + jest.clearAllMocks(); + + appMockRenderer = createAppMockRenderer(); + }); + + it('should call onSuccess if api succeeds', async () => { + const { result } = renderHook(() => useDeleteMaintenanceWindow(), { + wrapper: appMockRenderer.AppWrapper, + }); + + result.current.mutate({ maintenanceWindowId: '123' }); + + await waitFor(() => expect(mockAddSuccess).toBeCalledWith('Deleted maintenance window')); + }); + + it('should call onError if api fails', async () => { + deleteMaintenanceWindow.mockRejectedValue(''); + + const { result } = renderHook(() => useDeleteMaintenanceWindow(), { + wrapper: appMockRenderer.AppWrapper, + }); + + result.current.mutate({ maintenanceWindowId: '123' }); + + await waitFor(() => + expect(mockAddDanger).toBeCalledWith('Failed to delete maintenance window.') + ); + }); +}); diff --git a/x-pack/platform/plugins/shared/alerting/public/hooks/use_delete_maintenance_window.tsx b/x-pack/platform/plugins/shared/alerting/public/hooks/use_delete_maintenance_window.tsx new file mode 100644 index 0000000000000..11502e6884592 --- /dev/null +++ b/x-pack/platform/plugins/shared/alerting/public/hooks/use_delete_maintenance_window.tsx @@ -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 { i18n } from '@kbn/i18n'; +import { useMutation } from '@tanstack/react-query'; +import { useKibana } from '../utils/kibana_react'; +import { deleteMaintenanceWindow } from '../services/maintenance_windows_api/delete'; + +export const useDeleteMaintenanceWindow = () => { + const { + http, + notifications: { toasts }, + } = useKibana().services; + + const mutationFn = ({ maintenanceWindowId }: { maintenanceWindowId: string }) => { + return deleteMaintenanceWindow({ http, maintenanceWindowId }); + }; + + return useMutation(mutationFn, { + onSuccess: () => { + toasts.addSuccess( + i18n.translate('xpack.alerting.maintenanceWindowsDeleteSuccess', { + defaultMessage: 'Deleted maintenance window', + }) + ); + }, + onError: () => { + toasts.addDanger( + i18n.translate('xpack.alerting.maintenanceWindowsDeleteFailure', { + defaultMessage: 'Failed to delete maintenance window.', + }) + ); + }, + }); +}; diff --git a/x-pack/platform/plugins/shared/alerting/public/pages/maintenance_windows/components/maintenance_windows_list.tsx b/x-pack/platform/plugins/shared/alerting/public/pages/maintenance_windows/components/maintenance_windows_list.tsx index 363e00414a8d8..255d8cdeef5d3 100644 --- a/x-pack/platform/plugins/shared/alerting/public/pages/maintenance_windows/components/maintenance_windows_list.tsx +++ b/x-pack/platform/plugins/shared/alerting/public/pages/maintenance_windows/components/maintenance_windows_list.tsx @@ -32,6 +32,7 @@ import { TableActionsPopover, TableActionsPopoverProps } from './table_actions_p import { useFinishMaintenanceWindow } from '../../../hooks/use_finish_maintenance_window'; import { useArchiveMaintenanceWindow } from '../../../hooks/use_archive_maintenance_window'; import { useFinishAndArchiveMaintenanceWindow } from '../../../hooks/use_finish_and_archive_maintenance_window'; +import { useDeleteMaintenanceWindow } from '../../../hooks/use_delete_maintenance_window'; interface MaintenanceWindowsListProps { isLoading: boolean; @@ -143,9 +144,24 @@ export const MaintenanceWindowsList = React.memo( [finishAndArchiveMaintenanceWindow, refreshData] ); + const { mutate: deleteMaintenanceWindow, isLoading: isLoadingDelete } = + useDeleteMaintenanceWindow(); + + const onDelete = useCallback( + (id: string) => + deleteMaintenanceWindow({ maintenanceWindowId: id }, { onSuccess: () => refreshData() }), + [deleteMaintenanceWindow, refreshData] + ); + const isMutatingOrLoading = useMemo(() => { - return isLoadingFinish || isLoadingArchive || isLoadingFinishAndArchive || isLoading; - }, [isLoadingFinish, isLoadingArchive, isLoadingFinishAndArchive, isLoading]); + return ( + isLoadingFinish || + isLoadingArchive || + isLoadingFinishAndArchive || + isLoadingDelete || + isLoading + ); + }, [isLoadingFinish, isLoadingArchive, isLoadingFinishAndArchive, isLoadingDelete, isLoading]); const actions: Array> = useMemo( () => [ @@ -161,12 +177,13 @@ export const MaintenanceWindowsList = React.memo( onCancel={onCancel} onArchive={onArchive} onCancelAndArchive={onCancelAndArchive} + onDelete={onDelete} /> ); }, }, ], - [isMutatingOrLoading, onArchive, onCancel, onCancelAndArchive, onEdit] + [isMutatingOrLoading, onArchive, onCancel, onCancelAndArchive, onDelete, onEdit] ); const columns = useMemo( diff --git a/x-pack/platform/plugins/shared/alerting/public/pages/maintenance_windows/components/table_actions_popover.test.tsx b/x-pack/platform/plugins/shared/alerting/public/pages/maintenance_windows/components/table_actions_popover.test.tsx index 4fdc2dddda820..de45d47c7579f 100644 --- a/x-pack/platform/plugins/shared/alerting/public/pages/maintenance_windows/components/table_actions_popover.test.tsx +++ b/x-pack/platform/plugins/shared/alerting/public/pages/maintenance_windows/components/table_actions_popover.test.tsx @@ -48,6 +48,7 @@ describe('TableActionsPopover', () => { onCancel={() => {}} onArchive={() => {}} onCancelAndArchive={() => {}} + onDelete={() => {}} /> ); @@ -64,12 +65,14 @@ describe('TableActionsPopover', () => { onCancel={() => {}} onArchive={() => {}} onCancelAndArchive={() => {}} + onDelete={() => {}} /> ); fireEvent.click(result.getByTestId('table-actions-icon-button')); expect(result.getByTestId('table-actions-edit')).toBeInTheDocument(); expect(result.getByTestId('table-actions-cancel')).toBeInTheDocument(); expect(result.getByTestId('table-actions-cancel-and-archive')).toBeInTheDocument(); + expect(result.getByTestId('table-actions-delete')).toBeInTheDocument(); }); test('it shows the correct actions when a maintenance window is upcoming', () => { @@ -82,11 +85,13 @@ describe('TableActionsPopover', () => { onCancel={() => {}} onArchive={() => {}} onCancelAndArchive={() => {}} + onDelete={() => {}} /> ); fireEvent.click(result.getByTestId('table-actions-icon-button')); expect(result.getByTestId('table-actions-edit')).toBeInTheDocument(); expect(result.getByTestId('table-actions-archive')).toBeInTheDocument(); + expect(result.getByTestId('table-actions-delete')).toBeInTheDocument(); }); test('it shows the correct actions when a maintenance window is finished', () => { @@ -99,11 +104,13 @@ describe('TableActionsPopover', () => { onCancel={() => {}} onArchive={() => {}} onCancelAndArchive={() => {}} + onDelete={() => {}} /> ); fireEvent.click(result.getByTestId('table-actions-icon-button')); expect(result.getByTestId('table-actions-edit')).toBeInTheDocument(); expect(result.getByTestId('table-actions-archive')).toBeInTheDocument(); + expect(result.getByTestId('table-actions-delete')).toBeInTheDocument(); }); test('it shows the correct actions when a maintenance window is archived', () => { @@ -116,10 +123,12 @@ describe('TableActionsPopover', () => { onCancel={() => {}} onArchive={() => {}} onCancelAndArchive={() => {}} + onDelete={() => {}} /> ); fireEvent.click(result.getByTestId('table-actions-icon-button')); expect(result.getByTestId('table-actions-unarchive')).toBeInTheDocument(); + expect(result.getByTestId('table-actions-delete')).toBeInTheDocument(); }); test('it shows the success toast when maintenance window id is copied', async () => { @@ -138,6 +147,7 @@ describe('TableActionsPopover', () => { onCancel={() => {}} onArchive={() => {}} onCancelAndArchive={() => {}} + onDelete={() => {}} /> ); @@ -150,4 +160,30 @@ describe('TableActionsPopover', () => { Object.assign(navigator, global.window.navigator.clipboard); }); + + test('it calls onDelete function when maintenance window is deleted', async () => { + const onDelete = jest.fn(); + const user = userEvent.setup(); + const result = appMockRenderer.render( + {}} + onCancel={() => {}} + onArchive={() => {}} + onCancelAndArchive={() => {}} + onDelete={onDelete} + /> + ); + + await user.click(await result.findByTestId('table-actions-icon-button')); + expect(await result.findByTestId('table-actions-delete')).toBeInTheDocument(); + + await user.click(await result.findByTestId('table-actions-delete')); + const deleteModalConfirmButton = await result.findByTestId('confirmModalConfirmButton'); + expect(deleteModalConfirmButton).toBeInTheDocument(); + await user.click(deleteModalConfirmButton); + expect(onDelete).toHaveBeenCalledWith('123'); + }); }); diff --git a/x-pack/platform/plugins/shared/alerting/public/pages/maintenance_windows/components/table_actions_popover.tsx b/x-pack/platform/plugins/shared/alerting/public/pages/maintenance_windows/components/table_actions_popover.tsx index 76a3881d50478..c7419933818b6 100644 --- a/x-pack/platform/plugins/shared/alerting/public/pages/maintenance_windows/components/table_actions_popover.tsx +++ b/x-pack/platform/plugins/shared/alerting/public/pages/maintenance_windows/components/table_actions_popover.tsx @@ -27,12 +27,13 @@ export interface TableActionsPopoverProps { onCancel: (id: string) => void; onArchive: (id: string, archive: boolean) => void; onCancelAndArchive: (id: string) => void; + onDelete: (id: string) => void; } -type ModalType = 'cancel' | 'cancelAndArchive' | 'archive' | 'unarchive'; +type ModalType = 'cancel' | 'cancelAndArchive' | 'archive' | 'unarchive' | 'delete'; type ActionType = ModalType | 'edit' | 'copyId'; export const TableActionsPopover: React.FC = React.memo( - ({ id, status, isLoading, onEdit, onCancel, onArchive, onCancelAndArchive }) => { + ({ id, status, isLoading, onEdit, onCancel, onArchive, onCancelAndArchive, onDelete }) => { const [isPopoverOpen, setIsPopoverOpen] = useState(false); const [isModalVisible, setIsModalVisible] = useState(false); const [modalType, setModalType] = useState(); @@ -104,6 +105,18 @@ export const TableActionsPopover: React.FC = React.mem }, subtitle: i18n.UNARCHIVE_MODAL_SUBTITLE, }, + delete: { + props: { + title: i18n.DELETE_MODAL_TITLE, + onConfirm: () => { + closeModal(); + onDelete(id); + }, + cancelButtonText: i18n.CANCEL, + confirmButtonText: i18n.DELETE_MODAL_TITLE, + }, + subtitle: i18n.DELETE_MODAL_SUBTITLE, + }, }; let m; if (isModalVisible && modalType) { @@ -121,7 +134,16 @@ export const TableActionsPopover: React.FC = React.mem ); } return m; - }, [id, modalType, isModalVisible, closeModal, onArchive, onCancel, onCancelAndArchive]); + }, [ + id, + modalType, + isModalVisible, + closeModal, + onArchive, + onCancel, + onCancelAndArchive, + onDelete, + ]); const items = useMemo(() => { const menuItems = { @@ -170,7 +192,7 @@ export const TableActionsPopover: React.FC = React.mem { closePopover(); showModal('cancelAndArchive'); @@ -183,7 +205,7 @@ export const TableActionsPopover: React.FC = React.mem { closePopover(); showModal('archive'); @@ -205,12 +227,25 @@ export const TableActionsPopover: React.FC = React.mem {i18n.TABLE_ACTION_UNARCHIVE} ), + delete: ( + { + closePopover(); + showModal('delete'); + }} + > + {i18n.TABLE_ACTION_DELETE} + + ), }; const statusMenuItemsMap: Record = { - running: ['edit', 'copyId', 'cancel', 'cancelAndArchive'], - upcoming: ['edit', 'copyId', 'archive'], - finished: ['edit', 'copyId', 'archive'], - archived: ['copyId', 'unarchive'], + running: ['edit', 'copyId', 'cancel', 'cancelAndArchive', 'delete'], + upcoming: ['edit', 'copyId', 'archive', 'delete'], + finished: ['edit', 'copyId', 'archive', 'delete'], + archived: ['copyId', 'unarchive', 'delete'], }; return statusMenuItemsMap[status].map((type) => menuItems[type]); }, [status, closePopover, onEdit, id, toasts, showModal]); diff --git a/x-pack/platform/plugins/shared/alerting/public/pages/maintenance_windows/translations.ts b/x-pack/platform/plugins/shared/alerting/public/pages/maintenance_windows/translations.ts index 1ee3f4b3ae246..2a61019a292ec 100644 --- a/x-pack/platform/plugins/shared/alerting/public/pages/maintenance_windows/translations.ts +++ b/x-pack/platform/plugins/shared/alerting/public/pages/maintenance_windows/translations.ts @@ -626,6 +626,20 @@ export const CANCEL_AND_ARCHIVE_MODAL_SUBTITLE = i18n.translate( } ); +export const DELETE_MODAL_TITLE = i18n.translate( + 'xpack.alerting.maintenanceWindows.deleteModal.title', + { + defaultMessage: 'Delete maintenance window', + } +); + +export const DELETE_MODAL_SUBTITLE = i18n.translate( + 'xpack.alerting.maintenanceWindows.deleteModal.subtitle', + { + defaultMessage: "You won't be able to recover a deleted maintenance window.", + } +); + export const ARCHIVE = i18n.translate('xpack.alerting.maintenanceWindows.archive', { defaultMessage: 'Archive', }); @@ -660,6 +674,13 @@ export const TABLE_ACTION_UNARCHIVE = i18n.translate( } ); +export const TABLE_ACTION_DELETE = i18n.translate( + 'xpack.alerting.maintenanceWindows.table.delete', + { + defaultMessage: 'Delete', + } +); + export const UNARCHIVE_MODAL_TITLE = i18n.translate( 'xpack.alerting.maintenanceWindows.unarchiveModal.title', { diff --git a/x-pack/platform/plugins/shared/alerting/public/services/maintenance_windows_api/delete.test.ts b/x-pack/platform/plugins/shared/alerting/public/services/maintenance_windows_api/delete.test.ts new file mode 100644 index 0000000000000..5646bedb01193 --- /dev/null +++ b/x-pack/platform/plugins/shared/alerting/public/services/maintenance_windows_api/delete.test.ts @@ -0,0 +1,34 @@ +/* + * 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. + */ + +/* + * 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 { httpServiceMock } from '@kbn/core/public/mocks'; +import { deleteMaintenanceWindow } from './delete'; + +const http = httpServiceMock.createStartContract(); + +beforeEach(() => jest.resetAllMocks()); + +describe('deleteMaintenanceWindow', () => { + test('should call delete maintenance window api', async () => { + await deleteMaintenanceWindow({ + http, + maintenanceWindowId: '123', + }); + expect(http.delete.mock.calls[0]).toMatchInlineSnapshot(` + Array [ + "/internal/alerting/rules/maintenance_window/123", + ] + `); + }); +}); diff --git a/x-pack/platform/plugins/shared/alerting/public/services/maintenance_windows_api/delete.ts b/x-pack/platform/plugins/shared/alerting/public/services/maintenance_windows_api/delete.ts new file mode 100644 index 0000000000000..ee0197def2cb5 --- /dev/null +++ b/x-pack/platform/plugins/shared/alerting/public/services/maintenance_windows_api/delete.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 { HttpSetup } from '@kbn/core/public'; +import { INTERNAL_ALERTING_API_MAINTENANCE_WINDOW_PATH } from '../../../common'; + +export const deleteMaintenanceWindow = async ({ + http, + maintenanceWindowId, +}: { + http: HttpSetup; + maintenanceWindowId: string; +}): Promise => { + await http.delete>( + `${INTERNAL_ALERTING_API_MAINTENANCE_WINDOW_PATH}/${encodeURIComponent(maintenanceWindowId)}` + ); +}; diff --git a/x-pack/platform/plugins/shared/fleet/common/types/models/agent_policy.ts b/x-pack/platform/plugins/shared/fleet/common/types/models/agent_policy.ts index 54ec04c00e44e..9b07d2e3b8ba9 100644 --- a/x-pack/platform/plugins/shared/fleet/common/types/models/agent_policy.ts +++ b/x-pack/platform/plugins/shared/fleet/common/types/models/agent_policy.ts @@ -10,8 +10,10 @@ import type { SecurityRoleDescriptor } from '@elastic/elasticsearch/lib/api/type import type { agentPolicyStatuses } from '../../constants'; import type { MonitoringType, PolicySecretReference, ValueOf } from '..'; +import type { SOSecret } from '..'; + import type { PackagePolicy, PackagePolicyPackage } from './package_policy'; -import type { Output, OutputSecret } from './output'; +import type { Output } from './output'; export type AgentPolicyStatus = typeof agentPolicyStatuses; @@ -126,6 +128,7 @@ export interface FullAgentPolicyInput { }; streams?: FullAgentPolicyInputStream[]; processors?: FullAgentPolicyAddFields[]; + ssl?: BaseSSLConfig; [key: string]: any; } @@ -145,6 +148,7 @@ export type FullAgentPolicyOutputPermissions = Record & { proxy_url?: string; proxy_headers?: any; + ssl?: BaseSSLConfig; [key: string]: any; }; @@ -221,19 +225,22 @@ export interface FullAgentPolicy { }; } +export interface BaseSSLConfig { + verification_mode?: string; + certificate_authorities?: string[]; + renegotiation?: string; + certificate?: string; + key?: string; + client_authentication?: string; +} + export interface FullAgentPolicyFleetConfig { hosts: string[]; proxy_url?: string; proxy_headers?: any; - ssl?: { - verification_mode?: string; - certificate_authorities?: string[]; - renegotiation?: string; - certificate?: string; - key?: OutputSecret; - }; + ssl?: BaseSSLConfig; secrets?: { - ssl?: { key?: OutputSecret }; + ssl?: { key?: SOSecret }; }; } diff --git a/x-pack/platform/plugins/shared/fleet/common/types/models/fleet_server_policy_config.ts b/x-pack/platform/plugins/shared/fleet/common/types/models/fleet_server_policy_config.ts index 1e634df2b766d..9d73679544d7b 100644 --- a/x-pack/platform/plugins/shared/fleet/common/types/models/fleet_server_policy_config.ts +++ b/x-pack/platform/plugins/shared/fleet/common/types/models/fleet_server_policy_config.ts @@ -4,8 +4,17 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ +import type { ValueOf } from '..'; -// SO definition for this type is declared in server/types/interfaces +import type { SOSecret } from './secret'; + +export const clientAuth = { + Optional: 'optional', + Required: 'required', + None: 'none', +} as const; + +export type ClientAuth = typeof clientAuth; export interface NewFleetServerHost { name: string; host_urls: string[]; @@ -13,6 +22,21 @@ export interface NewFleetServerHost { is_preconfigured: boolean; is_internal?: boolean; proxy_id?: string | null; + ssl?: { + certificate_authorities?: string[]; + certificate?: string; + key?: string; + es_certificate_authorities?: string[]; + es_certificate?: string; + es_key?: string; + client_auth?: ValueOf; + } | null; + secrets?: { + ssl?: { + key?: SOSecret; + es_key?: SOSecret; + }; + }; } export interface FleetServerHost extends NewFleetServerHost { diff --git a/x-pack/platform/plugins/shared/fleet/common/types/models/output.ts b/x-pack/platform/plugins/shared/fleet/common/types/models/output.ts index 886a36c650ec0..7e96913613a44 100644 --- a/x-pack/platform/plugins/shared/fleet/common/types/models/output.ts +++ b/x-pack/platform/plugins/shared/fleet/common/types/models/output.ts @@ -13,6 +13,7 @@ import type { kafkaTopicWhenType } from '../../constants'; import type { kafkaAcknowledgeReliabilityLevel } from '../../constants'; import type { kafkaVerificationModes } from '../../constants'; import type { kafkaConnectionType } from '../../constants'; +import type { SOSecret } from '..'; export type OutputType = typeof outputType; export type KafkaCompressionType = typeof kafkaCompressionType; @@ -23,12 +24,6 @@ export type KafkaPartitionType = typeof kafkaPartitionType; export type KafkaTopicWhenType = typeof kafkaTopicWhenType; export type KafkaAcknowledgeReliabilityLevel = typeof kafkaAcknowledgeReliabilityLevel; export type KafkaVerificationMode = typeof kafkaVerificationModes; -export type OutputSecret = - | string - | { - id: string; - hash?: string; - }; export type OutputPreset = 'custom' | 'balanced' | 'throughput' | 'scale' | 'latency'; @@ -54,7 +49,7 @@ interface NewBaseOutput { allow_edit?: string[]; secrets?: { ssl?: { - key?: OutputSecret; + key?: SOSecret; }; }; preset?: OutputPreset; @@ -68,10 +63,10 @@ export interface NewRemoteElasticsearchOutput extends NewBaseOutput { type: OutputType['RemoteElasticsearch']; service_token?: string | null; secrets?: { - service_token?: OutputSecret; - kibana_api_key?: OutputSecret; + service_token?: SOSecret; + kibana_api_key?: SOSecret; ssl?: { - key?: OutputSecret; + key?: SOSecret; }; }; sync_integrations?: boolean; @@ -81,6 +76,11 @@ export interface NewRemoteElasticsearchOutput extends NewBaseOutput { export interface NewLogstashOutput extends NewBaseOutput { type: OutputType['Logstash']; + secrets?: { + ssl?: { + key?: SOSecret; + }; + }; } export type NewOutput = @@ -141,9 +141,9 @@ export interface KafkaOutput extends NewBaseOutput { broker_timeout?: number; required_acks?: ValueOf; secrets?: { - password?: OutputSecret; + password?: SOSecret; ssl?: { - key?: OutputSecret; + key?: SOSecret; }; }; } diff --git a/x-pack/platform/plugins/shared/fleet/common/types/models/secret.ts b/x-pack/platform/plugins/shared/fleet/common/types/models/secret.ts index 93051f71c98ae..dfced5f59747c 100644 --- a/x-pack/platform/plugins/shared/fleet/common/types/models/secret.ts +++ b/x-pack/platform/plugins/shared/fleet/common/types/models/secret.ts @@ -21,10 +21,18 @@ export interface SecretPath { path: string[]; value: PackagePolicyConfigRecordEntry; } -export interface OutputSecretPath { +export interface SOSecretPath { path: string; value: string | { id: string }; } + +export type SOSecret = + | string + | { + id: string; + hash?: string; + }; + // this is used in the top level secret_refs array on package and agent policies export interface PolicySecretReference { id: string; diff --git a/x-pack/platform/plugins/shared/fleet/common/types/rest_spec/fleet_server_hosts.ts b/x-pack/platform/plugins/shared/fleet/common/types/rest_spec/fleet_server_hosts.ts index f07e96a0b927b..5eace8d921e97 100644 --- a/x-pack/platform/plugins/shared/fleet/common/types/rest_spec/fleet_server_hosts.ts +++ b/x-pack/platform/plugins/shared/fleet/common/types/rest_spec/fleet_server_hosts.ts @@ -5,7 +5,7 @@ * 2.0. */ -import type { FleetServerHost } from '../models'; +import type { FleetServerHost, NewFleetServerHost } from '../models'; import type { ListResult } from './common'; @@ -15,24 +15,11 @@ export interface PutFleetServerHostsRequest { params: { itemId: string; }; - body: { - name?: string; - host_urls?: string[]; - is_default?: boolean; - is_internal?: boolean; - proxy_id?: string | null; - }; + body: Partial; } export interface PostFleetServerHostsRequest { - body: { - id?: string; - name?: string; - host_urls?: string[]; - is_default?: boolean; - is_internal?: boolean; - proxy_id?: string | null; - }; + body: Partial; } export interface PostFleetServerHostsResponse { diff --git a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/components/fleet_server_instructions/advanced_tab.tsx b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/components/fleet_server_instructions/advanced_tab.tsx index 2eacab9bbaa49..0af2e35691a18 100644 --- a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/components/fleet_server_instructions/advanced_tab.tsx +++ b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/components/fleet_server_instructions/advanced_tab.tsx @@ -73,7 +73,7 @@ export const AdvancedTab: React.FunctionComponent = ({ getInstallFleetServerStep({ isFleetServerReady, serviceToken, - fleetServerHost: fleetServerHostForm.fleetServerHost?.host_urls[0], + fleetServerHost: fleetServerHostForm.fleetServerHost, fleetServerPolicyId: fleetServerPolicyId || selectedPolicyId, deploymentMode, disabled: !Boolean(serviceToken), diff --git a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/components/fleet_server_instructions/hooks/use_fleet_server_host.ts b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/components/fleet_server_instructions/hooks/use_fleet_server_host.ts index 9ebb918095e89..67ff4279ad2b1 100644 --- a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/components/fleet_server_instructions/hooks/use_fleet_server_host.ts +++ b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/components/fleet_server_instructions/hooks/use_fleet_server_host.ts @@ -13,13 +13,18 @@ import { useInput, useSwitchInput, validateInputs, + useSecretInput, + useRadioInput, } from '../../../hooks'; import type { FleetServerHost } from '../../../types'; +import type { FleetServerHostSSLInputsType } from '../../../sections/settings/components/fleet_server_hosts_flyout/use_fleet_server_host_form'; import { validateName, validateFleetServerHosts, } from '../../../sections/settings/components/fleet_server_hosts_flyout/use_fleet_server_host_form'; +import type { ClientAuth, NewFleetServerHost, ValueOf } from '../../../../../../common/types'; +import { clientAuth } from '../../../../../../common/types'; export interface FleetServerHostForm { fleetServerHosts: FleetServerHost[]; @@ -28,11 +33,7 @@ export interface FleetServerHostForm { fleetServerHost?: FleetServerHost | null; setFleetServerHost: React.Dispatch>; error?: string; - inputs: { - hostUrlsInput: ReturnType; - nameInput: ReturnType; - isDefaultInput: ReturnType; - }; + inputs: FleetServerHostSSLInputsType; } export const useFleetServerHost = (): FleetServerHostForm => { @@ -44,16 +45,82 @@ export const useFleetServerHost = (): FleetServerHostForm => { const isDefaultInput = useSwitchInput(false, isPreconfigured || fleetServerHost?.is_default); const hostUrlsInput = useComboInput('hostUrls', [], validateFleetServerHosts, isPreconfigured); - const inputs = useMemo( + const sslCertificateAuthoritiesInput = useComboInput( + 'sslCertificateAuthoritiesComboxBox', + fleetServerHost?.ssl?.certificate_authorities ?? [], + undefined, + undefined + ); + const sslCertificateInput = useInput( + fleetServerHost?.ssl?.certificate ?? '', + () => undefined, + undefined + ); + + const sslEsCertificateAuthoritiesInput = useComboInput( + 'sslEsCertificateAuthoritiesComboxBox', + fleetServerHost?.ssl?.es_certificate_authorities ?? [], + undefined, + undefined + ); + const sslEsCertificateInput = useInput( + fleetServerHost?.ssl?.es_certificate ?? '', + () => undefined, + undefined + ); + + const sslClientAuthInput = useRadioInput( + fleetServerHost?.ssl?.client_auth ?? clientAuth.None, + undefined + ); + + const sslKeyInput = useInput(fleetServerHost?.ssl?.key ?? '', undefined, undefined); + const sslESKeyInput = useInput(fleetServerHost?.ssl?.es_key ?? '', undefined, undefined); + + const sslKeySecretInput = useSecretInput( + (fleetServerHost as FleetServerHost)?.secrets?.ssl?.key, + undefined, + undefined + ); + + const sslESKeySecretInput = useSecretInput( + (fleetServerHost as FleetServerHost)?.secrets?.ssl?.es_key, + undefined, + undefined + ); + + const inputs: FleetServerHostSSLInputsType = useMemo( () => ({ nameInput, isDefaultInput, hostUrlsInput, + sslCertificateAuthoritiesInput, + sslCertificateInput, + sslEsCertificateAuthoritiesInput, + sslEsCertificateInput, + sslKeyInput, + sslESKeyInput, + sslKeySecretInput, + sslESKeySecretInput, + sslClientAuthInput, }), - [nameInput, isDefaultInput, hostUrlsInput] + [ + nameInput, + isDefaultInput, + hostUrlsInput, + sslCertificateAuthoritiesInput, + sslCertificateInput, + sslEsCertificateAuthoritiesInput, + sslEsCertificateInput, + sslKeyInput, + sslESKeyInput, + sslKeySecretInput, + sslESKeySecretInput, + sslClientAuthInput, + ] ); - const validate = useCallback(() => validateInputs(inputs), [inputs]); + const validate = useCallback(() => validateInputs({ ...inputs }), [inputs]); const { data, resendRequest: refreshGetFleetServerHosts } = useGetFleetServerHosts(); @@ -76,12 +143,33 @@ export const useFleetServerHost = (): FleetServerHostForm => { return; } setIsFleetServerHostSubmitted(false); - const newFleetServerHost = { - name: inputs.nameInput.value, - host_urls: inputs.hostUrlsInput.value, - is_default: inputs.isDefaultInput.value, + const newFleetServerHost: Partial = { + name: nameInput.value, + host_urls: hostUrlsInput.value, + is_default: isDefaultInput.value, + ssl: { + certificate: sslCertificateInput.value, + key: sslKeyInput.value || undefined, + certificate_authorities: sslCertificateAuthoritiesInput.value.filter((val) => val !== ''), + es_certificate: sslEsCertificateInput.value, + es_key: sslESKeyInput.value || undefined, + es_certificate_authorities: sslEsCertificateAuthoritiesInput.value.filter( + (val) => val !== '' + ), + ...(sslClientAuthInput.value !== clientAuth.None && { + client_auth: sslClientAuthInput.value as ValueOf, + }), + }, + ...(((!sslKeyInput.value && sslKeySecretInput.value) || + (!sslESKeyInput.value && sslESKeySecretInput.value)) && { + secrets: { + ssl: { + key: sslKeySecretInput.value || undefined, + es_key: sslESKeySecretInput.value || undefined, + }, + }, + }), }; - const res = await sendPostFleetServerHost(newFleetServerHost); if (res.error) { throw res.error; @@ -97,10 +185,19 @@ export const useFleetServerHost = (): FleetServerHostForm => { return res.data.item; }, [ validate, + nameInput.value, + hostUrlsInput.value, + isDefaultInput.value, + sslCertificateInput.value, + sslKeyInput.value, + sslCertificateAuthoritiesInput.value, + sslEsCertificateInput.value, + sslESKeyInput.value, + sslEsCertificateAuthoritiesInput.value, + sslClientAuthInput.value, + sslKeySecretInput.value, + sslESKeySecretInput.value, refreshGetFleetServerHosts, - inputs.nameInput.value, - inputs.hostUrlsInput.value, - inputs.isDefaultInput.value, ]); return { diff --git a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/components/fleet_server_instructions/quick_start_tab.tsx b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/components/fleet_server_instructions/quick_start_tab.tsx index 959b1d08d7863..00e5d27312803 100644 --- a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/components/fleet_server_instructions/quick_start_tab.tsx +++ b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/components/fleet_server_instructions/quick_start_tab.tsx @@ -53,7 +53,7 @@ export const QuickStartTab: React.FunctionComponent = ({ onClose }) => { }), getInstallFleetServerStep({ isFleetServerReady, - fleetServerHost: fleetServerHost?.host_urls[0], + fleetServerHost, fleetServerPolicyId, serviceToken, deploymentMode: 'quickstart', diff --git a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/components/fleet_server_instructions/steps/add_fleet_server_host.tsx b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/components/fleet_server_instructions/steps/add_fleet_server_host.tsx index a2f8441c4e5fd..7321bb08135ac 100644 --- a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/components/fleet_server_instructions/steps/add_fleet_server_host.tsx +++ b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/components/fleet_server_instructions/steps/add_fleet_server_host.tsx @@ -5,9 +5,9 @@ * 2.0. */ -import React, { useState, useCallback } from 'react'; +import React, { useState, useCallback, useEffect } from 'react'; import type { EuiStepProps } from '@elastic/eui'; -import { EuiIconTip } from '@elastic/eui'; +import { EuiAccordion, EuiIconTip } from '@elastic/eui'; import { EuiSwitch, EuiButton, @@ -24,12 +24,22 @@ import { import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; +import styled from 'styled-components'; + import type { FleetServerHost } from '../../../types'; -import { useStartServices, useLink } from '../../../hooks'; +import { useStartServices, useLink, useFleetStatus } from '../../../hooks'; import type { FleetServerHostForm } from '../hooks'; import { MultiRowInput } from '../../../sections/settings/components/multi_row_input'; import { FleetServerHostSelect } from '../components'; +import { SSLFormSection } from '../../../sections/settings/components/fleet_server_hosts_flyout/ssl_form_section'; +import { ExperimentalFeaturesService } from '../../../services'; + +const StyledEuiAccordion = styled(EuiAccordion)` + .ingest-active-button { + color: ${(props) => props.theme.eui.euiColorPrimary}; + } +`; export const getAddFleetServerHostStep = ({ fleetServerHostForm, @@ -70,6 +80,69 @@ export const AddFleetServerHostStepContent = ({ const [submittedFleetServerHost, setSubmittedFleetServerHost] = useState(); const { notifications } = useStartServices(); const { getHref } = useLink(); + const { enableSSLSecrets } = ExperimentalFeaturesService.get(); + + const [isFirstLoad, setIsFirstLoad] = React.useState(true); + const [isConvertedToSecret, setIsConvertedToSecret] = React.useState({ + sslKey: false, + sslESKey: false, + }); + const [secretsToggleState, setSecretsToggleState] = useState<'disabled' | true | false>(true); + const useSecretsStorage = secretsToggleState === true; + + const fleetStatus = useFleetStatus(); + if (fleetStatus.isSecretsStorageEnabled !== undefined && secretsToggleState === 'disabled') { + setSecretsToggleState(fleetStatus.isSecretsStorageEnabled); + } + + const onToggleSecretStorage = (secretEnabled: boolean) => { + if (secretsToggleState === 'disabled') { + return; + } + + setSecretsToggleState(secretEnabled); + }; + + useEffect(() => { + if (!isFirstLoad) return; + setIsFirstLoad(false); + // populate the secret input with the value of the plain input in order to re-save the key with secret storage + if (useSecretsStorage && enableSSLSecrets) { + if (inputs.sslKeyInput.value && !inputs.sslKeySecretInput.value) { + inputs.sslKeySecretInput.setValue(inputs.sslKeyInput.value); + inputs.sslKeyInput.clear(); + setIsConvertedToSecret({ ...isConvertedToSecret, sslKey: true }); + } + if (inputs.sslESKeyInput.value && !inputs.sslESKeySecretInput.value) { + inputs.sslESKeySecretInput.setValue(inputs.sslESKeyInput.value); + inputs.sslESKeyInput.clear(); + setIsConvertedToSecret({ ...isConvertedToSecret, sslESKey: true }); + } + } + }, [ + inputs.sslKeyInput, + inputs.sslKeySecretInput, + isFirstLoad, + setIsFirstLoad, + isConvertedToSecret, + inputs.sslESKeyInput, + inputs.sslESKeySecretInput, + secretsToggleState, + useSecretsStorage, + enableSSLSecrets, + ]); + + const onToggleSecretAndClearValue = (secretEnabled: boolean) => { + if (secretEnabled) { + inputs.sslKeyInput.clear(); + inputs.sslESKeyInput.clear(); + } else { + inputs.sslKeySecretInput.setValue(''); + inputs.sslESKeySecretInput.setValue(''); + } + setIsConvertedToSecret({ ...isConvertedToSecret, sslKey: false, sslESKey: false }); + onToggleSecretStorage(secretEnabled); + }; const onSubmit = useCallback(async () => { try { @@ -170,6 +243,27 @@ export const AddFleetServerHostStepContent = ({ {error && {error}} + + + } + buttonClassName="ingest-active-button" + > + + + + {fleetServerHosts.length > 0 ? ( = ({ serviceToken, fleetServerHost, fleetServerPolicyId, deploymentMode }) => { diff --git a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/components/fleet_server_instructions/utils/install_command_utils.test.ts b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/components/fleet_server_instructions/utils/install_command_utils.test.ts index 21bdf033c2b3d..47b1bd67ac0d2 100644 --- a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/components/fleet_server_instructions/utils/install_command_utils.test.ts +++ b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/components/fleet_server_instructions/utils/install_command_utils.test.ts @@ -8,6 +8,14 @@ import { getInstallCommandForPlatform } from './install_command_utils'; describe('getInstallCommandForPlatform', () => { + const fleetServerHost = { + id: 'host-id1', + name: 'host', + host_urls: ['http://fleetserver:8220'], + is_default: false, + is_preconfigured: false, + }; + describe('without policy id', () => { it('should return the correct command if the the policyId is not set for linux', () => { expect( @@ -441,7 +449,7 @@ describe('getInstallCommandForPlatform', () => { esOutputHost: 'http://elasticsearch:9200', serviceToken: 'service-token-1', policyId: 'policy-1', - fleetServerHost: 'http://fleetserver:8220', + fleetServerHost, isProductionDeployment: true, }) ).toMatchInlineSnapshot(` @@ -467,7 +475,7 @@ describe('getInstallCommandForPlatform', () => { esOutputHost: 'http://elasticsearch:9200', serviceToken: 'service-token-1', policyId: 'policy-1', - fleetServerHost: 'http://fleetserver:8220', + fleetServerHost, isProductionDeployment: true, }) ).toMatchInlineSnapshot(` @@ -495,7 +503,7 @@ describe('getInstallCommandForPlatform', () => { esOutputHost: 'http://elasticsearch:9200', serviceToken: 'service-token-1', policyId: 'policy-1', - fleetServerHost: 'http://fleetserver:8220', + fleetServerHost, isProductionDeployment: true, }) ).toMatchInlineSnapshot(` @@ -521,7 +529,7 @@ describe('getInstallCommandForPlatform', () => { esOutputHost: 'http://elasticsearch:9200', serviceToken: 'service-token-1', policyId: 'policy-1', - fleetServerHost: 'http://fleetserver:8220', + fleetServerHost, isProductionDeployment: true, }) ).toMatchInlineSnapshot(` @@ -547,7 +555,7 @@ describe('getInstallCommandForPlatform', () => { esOutputHost: 'http://elasticsearch:9200', serviceToken: 'service-token-1', policyId: 'policy-1', - fleetServerHost: 'http://fleetserver:8220', + fleetServerHost, isProductionDeployment: true, }); @@ -577,7 +585,7 @@ describe('getInstallCommandForPlatform', () => { esOutputHost: 'http://elasticsearch:9200', serviceToken: 'service-token-1', policyId: 'policy-1', - fleetServerHost: 'http://fleetserver:8220', + fleetServerHost, isProductionDeployment: true, }) ).toMatchInlineSnapshot(` @@ -604,7 +612,7 @@ describe('getInstallCommandForPlatform', () => { esOutputHost: 'http://elasticsearch:9200', serviceToken: 'service-token-1', policyId: 'policy-1', - fleetServerHost: 'http://fleetserver:8220', + fleetServerHost, isProductionDeployment: true, }) ).toMatchInlineSnapshot(` @@ -633,7 +641,7 @@ describe('getInstallCommandForPlatform', () => { esOutputHost: 'http://elasticsearch:9200', serviceToken: 'service-token-1', policyId: 'policy-1', - fleetServerHost: 'http://fleetserver:8220', + fleetServerHost, isProductionDeployment: true, }) ).toMatchInlineSnapshot(` @@ -660,7 +668,7 @@ describe('getInstallCommandForPlatform', () => { esOutputHost: 'http://elasticsearch:9200', serviceToken: 'service-token-1', policyId: 'policy-1', - fleetServerHost: 'http://fleetserver:8220', + fleetServerHost, isProductionDeployment: true, }) ).toMatchInlineSnapshot(` @@ -680,6 +688,78 @@ describe('getInstallCommandForPlatform', () => { --install-servers" `); }); + + describe('with full fleet server hosts settings', () => { + it('should return the command with correct SSL options', () => { + const fullFleetServerHost = { + ...fleetServerHost, + ssl: { + certificate_authorities: ['cert authorities'], + certificate: 'path/to/cert', + es_certificate: 'path/to/EScert', + }, + }; + const res = getInstallCommandForPlatform({ + platform: 'deb_x86_64', + esOutputHost: 'http://elasticsearch:9200', + serviceToken: 'service-token-1', + policyId: 'policy-1', + fleetServerHost: fullFleetServerHost, + isProductionDeployment: true, + }); + + expect(res).toMatchInlineSnapshot(` + "curl -L -O https://artifacts.elastic.co/downloads/beats/elastic-agent/elastic-agent--amd64.deb + sudo dpkg -i elastic-agent--amd64.deb + sudo systemctl enable elastic-agent + sudo systemctl start elastic-agent + sudo elastic-agent enroll --url=http://fleetserver:8220 \\\\ + --fleet-server-es=http://elasticsearch:9200 \\\\ + --fleet-server-service-token=service-token-1 \\\\ + --fleet-server-policy=policy-1 \\\\ + --certificate-authorities='cert authorities' \\\\ + --fleet-server-es-ca='path/to/EScert' \\\\ + --fleet-server-cert='path/to/cert' \\\\ + --fleet-server-cert-key= \\\\ + --fleet-server-port=8220 \\\\ + --install-servers" + `); + }); + it('should return the command with SSL options and placeholders', () => { + const fullFleetServerHost = { + ...fleetServerHost, + ssl: { + certificate_authorities: ['cert authorities'], + certificate: 'path/to/cert', + }, + }; + const res = getInstallCommandForPlatform({ + platform: 'deb_x86_64', + esOutputHost: 'http://elasticsearch:9200', + serviceToken: 'service-token-1', + policyId: 'policy-1', + fleetServerHost: fullFleetServerHost, + isProductionDeployment: true, + }); + + expect(res).toMatchInlineSnapshot(` + "curl -L -O https://artifacts.elastic.co/downloads/beats/elastic-agent/elastic-agent--amd64.deb + sudo dpkg -i elastic-agent--amd64.deb + sudo systemctl enable elastic-agent + sudo systemctl start elastic-agent + sudo elastic-agent enroll --url=http://fleetserver:8220 \\\\ + --fleet-server-es=http://elasticsearch:9200 \\\\ + --fleet-server-service-token=service-token-1 \\\\ + --fleet-server-policy=policy-1 \\\\ + --certificate-authorities='cert authorities' \\\\ + --fleet-server-es-ca= \\\\ + --fleet-server-cert='path/to/cert' \\\\ + --fleet-server-cert-key= \\\\ + --fleet-server-port=8220 \\\\ + --install-servers" + `); + }); + }); }); describe('with simple proxy settings', () => { @@ -697,7 +777,7 @@ describe('getInstallCommandForPlatform', () => { }, serviceToken: 'service-token-1', policyId: 'policy-1', - fleetServerHost: 'http://fleetserver:8220', + fleetServerHost, downloadSource: { id: 'download-src', name: 'download-src', @@ -738,7 +818,7 @@ describe('getInstallCommandForPlatform', () => { }, serviceToken: 'service-token-1', policyId: 'policy-1', - fleetServerHost: 'http://fleetserver:8220', + fleetServerHost, downloadSource: { id: 'download-src', name: 'download-src', @@ -781,7 +861,7 @@ describe('getInstallCommandForPlatform', () => { }, serviceToken: 'service-token-1', policyId: 'policy-1', - fleetServerHost: 'http://fleetserver:8220', + fleetServerHost, downloadSource: { id: 'download-src', name: 'download-src', @@ -822,7 +902,7 @@ describe('getInstallCommandForPlatform', () => { }, serviceToken: 'service-token-1', policyId: 'policy-1', - fleetServerHost: 'http://fleetserver:8220', + fleetServerHost, downloadSource: { id: 'download-src', name: 'download-src', @@ -863,7 +943,7 @@ describe('getInstallCommandForPlatform', () => { }, serviceToken: 'service-token-1', policyId: 'policy-1', - fleetServerHost: 'http://fleetserver:8220', + fleetServerHost, downloadSource: { id: 'download-src', name: 'download-src', @@ -908,7 +988,7 @@ describe('getInstallCommandForPlatform', () => { }, serviceToken: 'service-token-1', policyId: 'policy-1', - fleetServerHost: 'http://fleetserver:8220', + fleetServerHost, downloadSource: { id: 'download-src', name: 'download-src', @@ -950,7 +1030,7 @@ describe('getInstallCommandForPlatform', () => { }, serviceToken: 'service-token-1', policyId: 'policy-1', - fleetServerHost: 'http://fleetserver:8220', + fleetServerHost, downloadSource: { id: 'download-src', name: 'download-src', @@ -994,7 +1074,7 @@ describe('getInstallCommandForPlatform', () => { }, serviceToken: 'service-token-1', policyId: 'policy-1', - fleetServerHost: 'http://fleetserver:8220', + fleetServerHost, downloadSource: { id: 'download-src', name: 'download-src', @@ -1036,7 +1116,7 @@ describe('getInstallCommandForPlatform', () => { }, serviceToken: 'service-token-1', policyId: 'policy-1', - fleetServerHost: 'http://fleetserver:8220', + fleetServerHost, downloadSource: { id: 'download-src', name: 'download-src', @@ -1083,7 +1163,7 @@ describe('getInstallCommandForPlatform', () => { }, serviceToken: 'service-token-1', policyId: 'policy-1', - fleetServerHost: 'http://fleetserver:8220', + fleetServerHost, downloadSource: { id: 'download-src', name: 'download-src', @@ -1161,7 +1241,7 @@ describe('getInstallCommandForPlatform', () => { }, serviceToken: 'service-token-1', policyId: 'policy-1', - fleetServerHost: 'http://fleetserver:8220', + fleetServerHost, downloadSource: { id: 'download-src', name: 'download-src', @@ -1240,7 +1320,7 @@ describe('getInstallCommandForPlatform', () => { }, serviceToken: 'service-token-1', policyId: 'policy-1', - fleetServerHost: 'http://fleetserver:8220', + fleetServerHost, downloadSource: { id: 'download-src', name: 'download-src', @@ -1292,7 +1372,7 @@ describe('getInstallCommandForPlatform', () => { }, serviceToken: 'service-token-1', policyId: 'policy-1', - fleetServerHost: 'http://fleetserver:8220', + fleetServerHost, downloadSource: { id: 'download-src', name: 'download-src', @@ -1372,7 +1452,7 @@ describe('getInstallCommandForPlatform', () => { }, serviceToken: 'service-token-1', policyId: 'policy-1', - fleetServerHost: 'http://fleetserver:8220', + fleetServerHost, downloadSource: { id: 'download-src', name: 'download-src', diff --git a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/components/fleet_server_instructions/utils/install_command_utils.ts b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/components/fleet_server_instructions/utils/install_command_utils.ts index dab86442d8e76..104d9a04cfed1 100644 --- a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/components/fleet_server_instructions/utils/install_command_utils.ts +++ b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/components/fleet_server_instructions/utils/install_command_utils.ts @@ -5,7 +5,7 @@ * 2.0. */ -import type { DownloadSource, FleetProxy } from '../../../../../../common/types'; +import type { DownloadSource, FleetProxy, FleetServerHost } from '../../../../../../common/types'; import { getDownloadBaseUrl, getDownloadSourceProxyArgs, @@ -120,7 +120,7 @@ export function getInstallCommandForPlatform({ esOutputProxy?: FleetProxy | undefined; serviceToken: string; policyId?: string; - fleetServerHost?: string; + fleetServerHost?: FleetServerHost | null; isProductionDeployment?: boolean; sslCATrustedFingerprint?: string; kibanaVersion?: string; @@ -134,7 +134,7 @@ export function getInstallCommandForPlatform({ const commandArguments = []; if (isProductionDeployment && fleetServerHost) { - commandArguments.push(['url', fleetServerHost]); + commandArguments.push(['url', fleetServerHost?.host_urls[0]]); } commandArguments.push(['fleet-server-es', esOutputHost]); @@ -148,11 +148,22 @@ export function getInstallCommandForPlatform({ } if (isProductionDeployment) { - commandArguments.push(['certificate-authorities', '']); + const certificateAuthorities = fleetServerHost?.ssl?.certificate_authorities + ? `'${fleetServerHost?.ssl?.certificate_authorities}'` + : ''; + const fleetServerCert = fleetServerHost?.ssl?.certificate + ? `'${fleetServerHost?.ssl?.certificate}'` + : ''; + + commandArguments.push(['certificate-authorities', certificateAuthorities]); + if (!sslCATrustedFingerprint) { - commandArguments.push(['fleet-server-es-ca', '']); + const esCert = fleetServerHost?.ssl?.es_certificate + ? `'${fleetServerHost?.ssl?.es_certificate}'` + : ''; + commandArguments.push(['fleet-server-es-ca', esCert]); } - commandArguments.push(['fleet-server-cert', '']); + commandArguments.push(['fleet-server-cert', fleetServerCert]); commandArguments.push(['fleet-server-cert-key', '']); } diff --git a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/settings/components/fleet_server_hosts_flyout/index.tsx b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/settings/components/fleet_server_hosts_flyout/index.tsx index 218dc8340d392..9fea7be420e3b 100644 --- a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/settings/components/fleet_server_hosts_flyout/index.tsx +++ b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/settings/components/fleet_server_hosts_flyout/index.tsx @@ -5,7 +5,7 @@ * 2.0. */ -import React, { useMemo } from 'react'; +import React, { useMemo, useState, useEffect } from 'react'; import { FormattedMessage } from '@kbn/i18n-react'; import { i18n } from '@kbn/i18n'; import { @@ -30,11 +30,14 @@ import { import { MultiRowInput } from '../multi_row_input'; import { MAX_FLYOUT_WIDTH } from '../../../../constants'; -import { useStartServices } from '../../../../hooks'; +import { useFleetStatus, useStartServices } from '../../../../hooks'; import type { FleetServerHost, FleetProxy } from '../../../../types'; import { TextInput } from '../form'; import { ProxyWarning } from '../fleet_proxies_table/proxy_warning'; +import { ExperimentalFeaturesService } from '../../../../services'; + +import { SSLFormSection } from './ssl_form_section'; import { useFleetServerHostsForm } from './use_fleet_server_host_form'; export interface FleetServerHostsFlyoutProps { @@ -60,6 +63,70 @@ export const FleetServerHostsFlyout: React.FunctionComponent(true); + + const useSecretsStorage = secretsToggleState === true; + + const fleetStatus = useFleetStatus(); + if (fleetStatus.isSecretsStorageEnabled !== undefined && secretsToggleState === 'disabled') { + setSecretsToggleState(fleetStatus.isSecretsStorageEnabled); + } + + const onToggleSecretStorage = (secretEnabled: boolean) => { + if (secretsToggleState === 'disabled') { + return; + } + + setSecretsToggleState(secretEnabled); + }; + + useEffect(() => { + if (!isFirstLoad) return; + setIsFirstLoad(false); + // populate the secret input with the value of the plain input in order to re-save the key with secret storage + if (useSecretsStorage && enableSSLSecrets) { + if (inputs.sslKeyInput.value && !inputs.sslKeySecretInput.value) { + inputs.sslKeySecretInput.setValue(inputs.sslKeyInput.value); + inputs.sslKeyInput.clear(); + setIsConvertedToSecret({ ...isConvertedToSecret, sslKey: true }); + } + if (inputs.sslESKeyInput.value && !inputs.sslESKeySecretInput.value) { + inputs.sslESKeySecretInput.setValue(inputs.sslESKeyInput.value); + inputs.sslESKeyInput.clear(); + setIsConvertedToSecret({ ...isConvertedToSecret, sslESKey: true }); + } + } + }, [ + inputs.sslKeyInput, + inputs.sslKeySecretInput, + isFirstLoad, + setIsFirstLoad, + isConvertedToSecret, + inputs.sslESKeyInput, + inputs.sslESKeySecretInput, + secretsToggleState, + useSecretsStorage, + enableSSLSecrets, + ]); + + const onToggleSecretAndClearValue = (secretEnabled: boolean) => { + if (secretEnabled) { + inputs.sslKeyInput.clear(); + inputs.sslESKeyInput.clear(); + } else { + inputs.sslKeySecretInput.setValue(''); + inputs.sslESKeySecretInput.setValue(''); + } + setIsConvertedToSecret({ ...isConvertedToSecret, sslKey: false, sslESKey: false }); + onToggleSecretStorage(secretEnabled); + }; + return ( @@ -196,16 +263,16 @@ export const FleetServerHostsFlyout: React.FunctionComponent inputs.proxyIdInput.setValue(options?.[0]?.value ?? '')} + {...inputs.proxyIdInput?.props} + onChange={(options) => inputs?.proxyIdInput?.setValue(options?.[0]?.value ?? '')} selectedOptions={ - inputs.proxyIdInput.value !== '' - ? proxiesOptions.filter((option) => option.value === inputs.proxyIdInput.value) + inputs?.proxyIdInput?.value !== '' + ? proxiesOptions.filter((option) => option.value === inputs.proxyIdInput?.value) : [] } options={proxiesOptions} singleSelection={{ asPlainText: true }} - isDisabled={inputs.proxyIdInput.props.disabled} + isDisabled={inputs.proxyIdInput?.props.disabled} isClearable={true} placeholder={i18n.translate( 'xpack.fleet.settings.fleetServerHostsFlyout.proxyIdPlaceholder', @@ -230,6 +297,13 @@ export const FleetServerHostsFlyout: React.FunctionComponent + + @@ -249,6 +323,7 @@ export const FleetServerHostsFlyout: React.FunctionComponent void; +} + +export const SSLFormSection: React.FunctionComponent = (props) => { + const { inputs, useSecretsStorage, isConvertedToSecret, onToggleSecretAndClearValue } = props; + + const clientAuthenticationsOptions = [ + { + id: clientAuth.None, + label: 'None', + 'data-test-subj': 'clientAuthNoneRadioButton', + }, + { + id: clientAuth.Required, + label: 'Required', + 'data-test-subj': 'clientAuthUsernamePasswordRadioButton', + }, + { + id: clientAuth.Optional, + label: 'Optional', + 'data-test-subj': 'clientAuthSSLRadioButton', + }, + ]; + return ( + <> + + + } + {...inputs.sslCertificateInput.formRowProps} + > + + + {!useSecretsStorage ? ( + + } + {...inputs.sslKeyInput.formRowProps} + useSecretsStorage={useSecretsStorage} + onToggleSecretStorage={onToggleSecretAndClearValue} + disabled={!useSecretsStorage} + > + + + ) : ( + + + + )} + + + + } + {...inputs.sslEsCertificateInput.formRowProps} + > + + + {!useSecretsStorage ? ( + + } + {...inputs.sslESKeyInput.formRowProps} + useSecretsStorage={useSecretsStorage} + onToggleSecretStorage={onToggleSecretAndClearValue} + disabled={!useSecretsStorage} + > + + + ) : ( + + + + )} + + + } + > + + + + ); +}; diff --git a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/settings/components/fleet_server_hosts_flyout/use_fleet_server_host_form.test.tsx b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/settings/components/fleet_server_hosts_flyout/use_fleet_server_host_form.test.tsx index 87555b034680b..05e15863d836e 100644 --- a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/settings/components/fleet_server_hosts_flyout/use_fleet_server_host_form.test.tsx +++ b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/settings/components/fleet_server_hosts_flyout/use_fleet_server_host_form.test.tsx @@ -70,7 +70,37 @@ describe('useFleetServerHostsForm', () => { await testRenderer.waitFor(() => expect(onSuccess).toBeCalled()); }); - it('should allow the user to correct and submit a invalid form', async () => { + it('should submit a valid form with SSL options', async () => { + const testRenderer = createFleetTestRendererMock(); + const onSuccess = jest.fn(); + testRenderer.startServices.http.post.mockResolvedValue({}); + const { result } = testRenderer.renderHook(() => + useFleetServerHostsForm( + { + id: 'id1', + name: 'fleet server 1', + host_urls: [], + is_default: false, + is_preconfigured: false, + ssl: { + certificate_authorities: ['cert authorities'], + es_certificate_authorities: ['ES cert authorities'], + certificate: 'path/to/cert', + es_certificate: 'path/to/EScert', + }, + }, + onSuccess + ) + ); + + act(() => result.current.inputs.hostUrlsInput.props.onChange(['https://test.fr'])); + + await act(() => result.current.submit()); + + await testRenderer.waitFor(() => expect(onSuccess).toBeCalled()); + }); + + it('should allow the user to correct and submit an invalid form', async () => { const testRenderer = createFleetTestRendererMock(); const onSuccess = jest.fn(); testRenderer.startServices.http.post.mockResolvedValue({}); diff --git a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/settings/components/fleet_server_hosts_flyout/use_fleet_server_host_form.tsx b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/settings/components/fleet_server_hosts_flyout/use_fleet_server_host_form.tsx index 2ceaf67805a8d..b55b90705a326 100644 --- a/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/settings/components/fleet_server_hosts_flyout/use_fleet_server_host_form.tsx +++ b/x-pack/platform/plugins/shared/fleet/public/applications/fleet/sections/settings/components/fleet_server_hosts_flyout/use_fleet_server_host_form.tsx @@ -4,12 +4,12 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -// copy this one import React, { useCallback, useMemo, useState } from 'react'; import { i18n } from '@kbn/i18n'; import { FormattedMessage } from '@kbn/i18n-react'; +import { useRadioInput } from '../../../../hooks'; import { sendPostFleetServerHost, sendPutFleetServerHost, @@ -19,13 +19,32 @@ import { useStartServices, useSwitchInput, validateInputs, + useSecretInput, } from '../../../../hooks'; import { isDiffPathProtocol } from '../../../../../../../common/services'; import { useConfirmModal } from '../../hooks/use_confirm_modal'; import type { FleetServerHost } from '../../../../types'; +import type { ClientAuth, NewFleetServerHost, ValueOf } from '../../../../../../../common/types'; +import { clientAuth } from '../../../../../../../common/types'; const URL_REGEX = /^(https):\/\/[^\s$.?#].[^\s]*$/gm; +export interface FleetServerHostSSLInputsType { + nameInput: ReturnType; + hostUrlsInput: ReturnType; + isDefaultInput: ReturnType; + proxyIdInput?: ReturnType; + sslCertificateInput: ReturnType; + sslKeyInput: ReturnType; + sslKeySecretInput: ReturnType; + sslCertificateAuthoritiesInput: ReturnType; + sslEsCertificateInput: ReturnType; + sslESKeyInput: ReturnType; + sslESKeySecretInput: ReturnType; + sslEsCertificateAuthoritiesInput: ReturnType; + sslClientAuthInput: ReturnType; +} + const ConfirmTitle = () => ( undefined, isEditDisabled); - const inputs = useMemo( + const sslCertificateAuthoritiesInput = useComboInput( + 'sslCertificateAuthoritiesComboxBox', + fleetServerHost?.ssl?.certificate_authorities ?? [], + undefined, + isEditDisabled + ); + const sslCertificateInput = useInput( + fleetServerHost?.ssl?.certificate ?? '', + () => undefined, + isEditDisabled + ); + + const sslEsCertificateAuthoritiesInput = useComboInput( + 'sslEsCertificateAuthoritiesComboxBox', + fleetServerHost?.ssl?.es_certificate_authorities ?? [], + undefined, + isEditDisabled + ); + const sslEsCertificateInput = useInput( + fleetServerHost?.ssl?.es_certificate ?? '', + () => undefined, + isEditDisabled + ); + const sslKeyInput = useInput(fleetServerHost?.ssl?.key ?? '', undefined, isEditDisabled); + const sslESKeyInput = useInput(fleetServerHost?.ssl?.es_key ?? '', undefined, isEditDisabled); + + const sslKeySecretInput = useSecretInput( + (fleetServerHost as FleetServerHost)?.secrets?.ssl?.key, + undefined, + isEditDisabled + ); + + const sslESKeySecretInput = useSecretInput( + (fleetServerHost as FleetServerHost)?.secrets?.ssl?.es_key, + undefined, + isEditDisabled + ); + + const sslClientAuthInput = useRadioInput( + fleetServerHost?.ssl?.client_auth ?? clientAuth.None, + isEditDisabled + ); + + const inputs: FleetServerHostSSLInputsType = useMemo( () => ({ nameInput, isDefaultInput, hostUrlsInput, proxyIdInput, + sslCertificateAuthoritiesInput, + sslCertificateInput, + sslEsCertificateAuthoritiesInput, + sslEsCertificateInput, + sslKeyInput, + sslESKeyInput, + sslKeySecretInput, + sslESKeySecretInput, + sslClientAuthInput, }), - [nameInput, isDefaultInput, hostUrlsInput, proxyIdInput] + [ + nameInput, + isDefaultInput, + hostUrlsInput, + proxyIdInput, + sslCertificateAuthoritiesInput, + sslCertificateInput, + sslEsCertificateAuthoritiesInput, + sslEsCertificateInput, + sslKeyInput, + sslESKeyInput, + sslKeySecretInput, + sslESKeySecretInput, + sslClientAuthInput, + ] ); - - const validate = useCallback(() => validateInputs(inputs), [inputs]); + const validate = useCallback(() => validateInputs({ ...inputs }), [inputs]); const submit = useCallback(async () => { try { @@ -167,12 +251,35 @@ export function useFleetServerHostsForm( return; } setIsLoading(true); - const data = { + const data: Partial = { name: nameInput.value, host_urls: hostUrlsInput.value, is_default: isDefaultInput.value, proxy_id: proxyIdInput.value !== '' ? proxyIdInput.value : null, + ssl: { + certificate: sslCertificateInput.value, + key: sslKeyInput.value || undefined, + certificate_authorities: sslCertificateAuthoritiesInput.value.filter((val) => val !== ''), + es_certificate: sslEsCertificateInput.value, + es_key: sslESKeyInput.value || undefined, + es_certificate_authorities: sslEsCertificateAuthoritiesInput.value.filter( + (val) => val !== '' + ), + ...(sslClientAuthInput.value !== clientAuth.None && { + client_auth: sslClientAuthInput.value as ValueOf, + }), + }, + ...(((!sslKeyInput.value && sslKeySecretInput.value) || + (!sslESKeyInput.value && sslESKeySecretInput.value)) && { + secrets: { + ssl: { + key: sslKeySecretInput.value || undefined, + es_key: sslESKeySecretInput.value || undefined, + }, + }, + }), }; + if (fleetServerHost) { const res = await sendPutFleetServerHost(fleetServerHost.id, data); if (res.error) { @@ -200,24 +307,32 @@ export function useFleetServerHostsForm( }); } }, [ - fleetServerHost, + validate, + confirm, nameInput.value, hostUrlsInput.value, isDefaultInput.value, proxyIdInput.value, - validate, - notifications, - confirm, + sslCertificateInput.value, + sslKeyInput.value, + sslCertificateAuthoritiesInput.value, + sslEsCertificateInput.value, + sslESKeyInput.value, + sslEsCertificateAuthoritiesInput.value, + sslClientAuthInput.value, + sslKeySecretInput.value, + sslESKeySecretInput.value, + fleetServerHost, + notifications.toasts, onSuccess, ]); + const hasChanged = Object.values(inputs).some((input) => input.hasChanged); + const isDisabled = isEditDisabled || isLoading || - (!hostUrlsInput.hasChanged && - !isDefaultInput.hasChanged && - !nameInput.hasChanged && - !proxyIdInput.hasChanged) || + !hasChanged || hostUrlsInput.props.isInvalid || nameInput.props.isInvalid; diff --git a/x-pack/platform/plugins/shared/fleet/public/hooks/use_input.ts b/x-pack/platform/plugins/shared/fleet/public/hooks/use_input.ts index a860462911f7e..21f73add70d7f 100644 --- a/x-pack/platform/plugins/shared/fleet/public/hooks/use_input.ts +++ b/x-pack/platform/plugins/shared/fleet/public/hooks/use_input.ts @@ -173,6 +173,7 @@ export function useRadioInput(defaultValue: string, disabled = false) { setValue, value, hasChanged, + validate: () => true, }; } diff --git a/x-pack/platform/plugins/shared/fleet/server/collectors/fleet_server_collector.ts b/x-pack/platform/plugins/shared/fleet/server/collectors/fleet_server_collector.ts index dc73286236f71..54a3152585545 100644 --- a/x-pack/platform/plugins/shared/fleet/server/collectors/fleet_server_collector.ts +++ b/x-pack/platform/plugins/shared/fleet/server/collectors/fleet_server_collector.ts @@ -11,7 +11,7 @@ import { PACKAGE_POLICY_SAVED_OBJECT_TYPE, SO_SEARCH_LIMIT } from '../constants' import { packagePolicyService } from '../services'; import { getAgentStatusForAgentPolicy } from '../services/agents'; -import { listFleetServerHosts } from '../services/fleet_server_host'; +import { fleetServerHostService } from '../services/fleet_server_host'; const DEFAULT_USAGE = { total_all_statuses: 0, @@ -45,7 +45,7 @@ export const getFleetServerUsage = async ( return DEFAULT_USAGE; } - const fleetServerHosts = await listFleetServerHosts(soClient); + const fleetServerHosts = await fleetServerHostService.list(soClient); const numHostsUrls = fleetServerHosts.items.flatMap((host) => host.host_urls).length; // Find all policies with Fleet server than query agent status diff --git a/x-pack/platform/plugins/shared/fleet/server/routes/fleet_server_hosts/handler.test.ts b/x-pack/platform/plugins/shared/fleet/server/routes/fleet_server_hosts/handler.test.ts index 4ddcd47ad9ab4..db206287ee750 100644 --- a/x-pack/platform/plugins/shared/fleet/server/routes/fleet_server_hosts/handler.test.ts +++ b/x-pack/platform/plugins/shared/fleet/server/routes/fleet_server_hosts/handler.test.ts @@ -7,7 +7,7 @@ import { SERVERLESS_DEFAULT_FLEET_SERVER_HOST_ID } from '../../constants'; import { agentPolicyService, appContextService } from '../../services'; -import * as fleetServerService from '../../services/fleet_server_host'; +import { fleetServerHostService } from '../../services/fleet_server_host'; import { withDefaultErrorHandler } from '../../services/security/fleet_router'; import { postFleetServerHost, putFleetServerHostHandler } from './handler'; @@ -32,13 +32,9 @@ describe('fleet server hosts handler', () => { beforeEach(() => { jest.spyOn(appContextService, 'getLogger').mockReturnValue({ error: jest.fn() } as any); - jest - .spyOn(fleetServerService, 'createFleetServerHost') - .mockResolvedValue({ id: 'host1' } as any); - jest - .spyOn(fleetServerService, 'updateFleetServerHost') - .mockResolvedValue({ id: 'host1' } as any); - jest.spyOn(fleetServerService, 'getFleetServerHost').mockResolvedValue({ + jest.spyOn(fleetServerHostService, 'create').mockResolvedValue({ id: 'host1' } as any); + jest.spyOn(fleetServerHostService, 'update').mockResolvedValue({ id: 'host1' } as any); + jest.spyOn(fleetServerHostService, 'get').mockResolvedValue({ id: SERVERLESS_DEFAULT_FLEET_SERVER_HOST_ID, host_urls: ['http://elasticsearch:9200'], } as any); @@ -90,6 +86,54 @@ describe('fleet server hosts handler', () => { expect(res).toEqual({ body: { item: { id: 'host1' } } }); }); + it('should return error if both ssl.key and secrets.ssl.key are provided', async () => { + jest + .spyOn(appContextService, 'getCloud') + .mockReturnValue({ isServerlessEnabled: false } as any); + + const res = await postFleetServerHostWithErrorHandler( + mockContext, + { + body: { + id: 'host1', + host_urls: ['http://localhost:8080'], + ssl: { key: 'token1' }, + secrets: { ssl: { key: 'token1' } }, + }, + } as any, + mockResponse as any + ); + + expect(res).toEqual({ + body: { message: 'Cannot specify both ssl.key and secrets.ssl.key' }, + statusCode: 400, + }); + }); + + it('should return error if both ssl.es_key and secrets.ssl.es_key are provided', async () => { + jest + .spyOn(appContextService, 'getCloud') + .mockReturnValue({ isServerlessEnabled: false } as any); + + const res = await postFleetServerHostWithErrorHandler( + mockContext, + { + body: { + id: 'host1', + host_urls: ['http://localhost:8080'], + ssl: { es_key: 'token1' }, + secrets: { ssl: { es_key: 'token1' } }, + }, + } as any, + mockResponse as any + ); + + expect(res).toEqual({ + body: { message: 'Cannot specify both ssl.es_key and secrets.ssl.es_key' }, + statusCode: 400, + }); + }); + it('should return error on put in serverless if host url is different from default', async () => { jest.spyOn(appContextService, 'getCloud').mockReturnValue({ isServerlessEnabled: true } as any); diff --git a/x-pack/platform/plugins/shared/fleet/server/routes/fleet_server_hosts/handler.ts b/x-pack/platform/plugins/shared/fleet/server/routes/fleet_server_hosts/handler.ts index 52d370e3062b6..418ec99c1fe58 100644 --- a/x-pack/platform/plugins/shared/fleet/server/routes/fleet_server_hosts/handler.ts +++ b/x-pack/platform/plugins/shared/fleet/server/routes/fleet_server_hosts/handler.ts @@ -10,24 +10,29 @@ import type { RequestHandler, SavedObjectsClientContract } from '@kbn/core/serve import { SavedObjectsErrorHelpers } from '@kbn/core/server'; import { isEqual } from 'lodash'; +import Boom from '@hapi/boom'; + import { SERVERLESS_DEFAULT_FLEET_SERVER_HOST_ID } from '../../constants'; import { FleetServerHostUnauthorizedError } from '../../errors'; -import { agentPolicyService, appContextService } from '../../services'; - -import { - createFleetServerHost, - deleteFleetServerHost, - getFleetServerHost, - listFleetServerHosts, - updateFleetServerHost, -} from '../../services/fleet_server_host'; +import { agentPolicyService, appContextService, fleetServerHostService } from '../../services'; + import type { + FleetServerHost, GetOneFleetServerHostRequestSchema, PostFleetServerHostRequestSchema, PutFleetServerHostRequestSchema, } from '../../types'; +function ensureNoDuplicateSecrets(fleetServerHost: Partial) { + if (fleetServerHost.ssl?.key && fleetServerHost.secrets?.ssl?.key) { + throw Boom.badRequest('Cannot specify both ssl.key and secrets.ssl.key'); + } + if (fleetServerHost.ssl?.es_key && fleetServerHost.secrets?.ssl?.es_key) { + throw Boom.badRequest('Cannot specify both ssl.es_key and secrets.ssl.es_key'); + } +} + async function checkFleetServerHostsWriteAPIsAllowed( soClient: SavedObjectsClientContract, hostUrls: string[] @@ -38,7 +43,7 @@ async function checkFleetServerHostsWriteAPIsAllowed( } // Fleet Server hosts must have the default host URL in serverless. - const serverlessDefaultFleetServerHost = await getFleetServerHost( + const serverlessDefaultFleetServerHost = await fleetServerHostService.get( soClient, SERVERLESS_DEFAULT_FLEET_SERVER_HOST_ID ); @@ -62,8 +67,11 @@ export const postFleetServerHost: RequestHandler< await checkFleetServerHostsWriteAPIsAllowed(soClient, request.body.host_urls); const { id, ...data } = request.body; - const FleetServerHost = await createFleetServerHost( + ensureNoDuplicateSecrets(data); + + const FleetServerHost = await fleetServerHostService.create( soClient, + esClient, { ...data, is_preconfigured: false }, { id } ); @@ -83,7 +91,7 @@ export const getFleetServerHostHandler: RequestHandler< > = async (context, request, response) => { const soClient = (await context.core).savedObjects.client; try { - const item = await getFleetServerHost(soClient, request.params.itemId); + const item = await fleetServerHostService.get(soClient, request.params.itemId); const body = { item, }; @@ -108,7 +116,7 @@ export const deleteFleetServerHostHandler: RequestHandler< const soClient = coreContext.savedObjects.client; const esClient = coreContext.elasticsearch.client.asInternalUser; - await deleteFleetServerHost(soClient, esClient, request.params.itemId); + await fleetServerHostService.delete(soClient, esClient, request.params.itemId); const body = { id: request.params.itemId, }; @@ -139,8 +147,14 @@ export const putFleetServerHostHandler: RequestHandler< if (request.body.host_urls) { await checkFleetServerHostsWriteAPIsAllowed(soClient, request.body.host_urls); } + ensureNoDuplicateSecrets(request.body); - const item = await updateFleetServerHost(soClient, request.params.itemId, request.body); + const item = await fleetServerHostService.update( + soClient, + esClient, + request.params.itemId, + request.body + ); const body = { item, }; @@ -165,7 +179,7 @@ export const putFleetServerHostHandler: RequestHandler< export const getAllFleetServerHostsHandler: RequestHandler = async (context, request, response) => { const soClient = (await context.core).savedObjects.client; - const res = await listFleetServerHosts(soClient); + const res = await fleetServerHostService.list(soClient); const body = { items: res.items, page: res.page, diff --git a/x-pack/platform/plugins/shared/fleet/server/routes/fleet_server_hosts/index.test.ts b/x-pack/platform/plugins/shared/fleet/server/routes/fleet_server_hosts/index.test.ts index 198fb6e8a6bcc..86df366f8db57 100644 --- a/x-pack/platform/plugins/shared/fleet/server/routes/fleet_server_hosts/index.test.ts +++ b/x-pack/platform/plugins/shared/fleet/server/routes/fleet_server_hosts/index.test.ts @@ -11,12 +11,7 @@ import type { FleetRequestHandlerContext } from '../..'; import { xpackMocks } from '../../mocks'; import { ListResponseSchema } from '../schema/utils'; import { FleetServerHostSchema, FleetServerHostResponseSchema } from '../../types'; -import { - createFleetServerHost, - getFleetServerHost, - listFleetServerHosts, - updateFleetServerHost, -} from '../../services/fleet_server_host'; +import { fleetServerHostService } from '../../services'; import { getAllFleetServerHostsHandler, @@ -33,13 +28,13 @@ jest.mock('../../services', () => ({ agentPolicyService: { bumpAllAgentPolicies: jest.fn().mockResolvedValue({}), }, -})); - -jest.mock('../../services/fleet_server_host', () => ({ - listFleetServerHosts: jest.fn(), - createFleetServerHost: jest.fn(), - updateFleetServerHost: jest.fn(), - getFleetServerHost: jest.fn(), + fleetServerHostService: { + list: jest.fn(), + get: jest.fn(), + create: jest.fn(), + update: jest.fn().mockResolvedValue({}), + delete: jest.fn(), + }, })); describe('schema validation', () => { @@ -68,7 +63,7 @@ describe('schema validation', () => { page: 1, perPage: 20, }; - (listFleetServerHosts as jest.Mock).mockResolvedValue(expectedResponse); + (fleetServerHostService.list as jest.Mock).mockResolvedValue(expectedResponse); await getAllFleetServerHostsHandler(context, {} as any, response); expect(response.ok).toHaveBeenCalledWith({ @@ -89,7 +84,7 @@ describe('schema validation', () => { proxy_id: 'proxy1', }, }; - (createFleetServerHost as jest.Mock).mockResolvedValue(expectedResponse.item); + (fleetServerHostService.create as jest.Mock).mockResolvedValue(expectedResponse.item); await postFleetServerHost( context, { @@ -119,7 +114,7 @@ describe('schema validation', () => { proxy_id: null, }, }; - (updateFleetServerHost as jest.Mock).mockResolvedValue(expectedResponse.item); + (fleetServerHostService.update as jest.Mock).mockResolvedValue(expectedResponse.item); await putFleetServerHostHandler( context, { @@ -150,7 +145,7 @@ describe('schema validation', () => { proxy_id: null, }, }; - (getFleetServerHost as jest.Mock).mockResolvedValue(expectedResponse.item); + (fleetServerHostService.get as jest.Mock).mockResolvedValue(expectedResponse.item); await getFleetServerHostHandler( context, { body: {}, params: { itemId: 'host1' } } as any, diff --git a/x-pack/platform/plugins/shared/fleet/server/routes/health_check/handler.test.ts b/x-pack/platform/plugins/shared/fleet/server/routes/health_check/handler.test.ts index 37c204c141a04..c44be569fc8b2 100644 --- a/x-pack/platform/plugins/shared/fleet/server/routes/health_check/handler.test.ts +++ b/x-pack/platform/plugins/shared/fleet/server/routes/health_check/handler.test.ts @@ -6,7 +6,7 @@ */ import fetch from 'node-fetch'; -import * as fleetServerService from '../../services/fleet_server_host'; +import { fleetServerHostService } from '../../services/fleet_server_host'; import { PostHealthCheckResponseSchema } from '../../types'; @@ -42,7 +42,7 @@ describe('Fleet server health_check handler', () => { }); it('should return a bad request error if the requested fleet server host has no host_urls', async () => { - jest.spyOn(fleetServerService, 'getFleetServerHost').mockResolvedValue({ + jest.spyOn(fleetServerHostService, 'get').mockResolvedValue({ id: 'default-fleet-server', name: 'Default', is_default: true, @@ -70,7 +70,7 @@ describe('Fleet server health_check handler', () => { name: 'Default', }; - jest.spyOn(fleetServerService, 'getFleetServerHost').mockResolvedValue({ + jest.spyOn(fleetServerHostService, 'get').mockResolvedValue({ id: 'default-fleet-server', name: 'Default', is_default: true, @@ -105,7 +105,7 @@ describe('Fleet server health_check handler', () => { it('should return an error when host id is not found', async () => { jest - .spyOn(fleetServerService, 'getFleetServerHost') + .spyOn(fleetServerHostService, 'get') .mockRejectedValue({ output: { statusCode: 404 }, isBoom: true }); const res = await postHealthCheckHandler( @@ -123,7 +123,7 @@ describe('Fleet server health_check handler', () => { }); it('should return status `offline` when fetch request gets aborted', async () => { - jest.spyOn(fleetServerService, 'getFleetServerHost').mockResolvedValue({ + jest.spyOn(fleetServerHostService, 'get').mockResolvedValue({ id: 'default-fleet-server', name: 'Default', is_default: true, diff --git a/x-pack/platform/plugins/shared/fleet/server/routes/health_check/handler.ts b/x-pack/platform/plugins/shared/fleet/server/routes/health_check/handler.ts index 276edd9c6bb32..8ee5144083511 100644 --- a/x-pack/platform/plugins/shared/fleet/server/routes/health_check/handler.ts +++ b/x-pack/platform/plugins/shared/fleet/server/routes/health_check/handler.ts @@ -8,7 +8,7 @@ import type { TypeOf } from '@kbn/config-schema'; import fetch from 'node-fetch'; -import { getFleetServerHost } from '../../services/fleet_server_host'; +import { fleetServerHostService } from '../../services/fleet_server_host'; import type { FleetRequestHandler, PostHealthCheckRequestSchema } from '../../types'; @@ -23,7 +23,7 @@ export const postHealthCheckHandler: FleetRequestHandler< const soClient = coreContext.savedObjects.client; try { - const fleetServerHost = await getFleetServerHost(soClient, id); + const fleetServerHost = await fleetServerHostService.get(soClient, id); if ( !fleetServerHost || diff --git a/x-pack/platform/plugins/shared/fleet/server/saved_objects/index.ts b/x-pack/platform/plugins/shared/fleet/server/saved_objects/index.ts index 63f1c0a1c5e6b..bbbf37df3ef30 100644 --- a/x-pack/platform/plugins/shared/fleet/server/saved_objects/index.ts +++ b/x-pack/platform/plugins/shared/fleet/server/saved_objects/index.ts @@ -1147,6 +1147,7 @@ export const getSavedObjectTypes = ( importableAndExportable: false, }, mappings: { + dynamic: false, properties: { name: { type: 'keyword' }, is_default: { type: 'boolean' }, @@ -1167,6 +1168,14 @@ export const getSavedObjectTypes = ( }, ], }, + '2': { + changes: [ + { + type: 'mappings_addition', + addedMappings: {}, + }, + ], + }, }, }, [FLEET_PROXY_SAVED_OBJECT_TYPE]: { @@ -1253,11 +1262,16 @@ export const OUTPUT_INCLUDE_AAD_FIELDS = new Set([ 'channel_buffer_size', ]); +// dangerouslyExposeValue added to allow the user with access to the SO to see and edit these values through the UI export const OUTPUT_ENCRYPTED_FIELDS = new Set([ { key: 'ssl', dangerouslyExposeValue: true }, { key: 'password', dangerouslyExposeValue: true }, ]); +export const FLEET_SERVER_HOST_ENCRYPTED_FIELDS = new Set([ + { key: 'ssl', dangerouslyExposeValue: true }, +]); + export function registerEncryptedSavedObjects( encryptedSavedObjects: EncryptedSavedObjectsPluginSetup ) { @@ -1277,4 +1291,10 @@ export function registerEncryptedSavedObjects( attributesToEncrypt: new Set(['token']), attributesToIncludeInAAD: new Set(['policy_id', 'token_plain']), }); + encryptedSavedObjects.registerType({ + type: FLEET_SERVER_HOST_SAVED_OBJECT_TYPE, + attributesToEncrypt: FLEET_SERVER_HOST_ENCRYPTED_FIELDS, + // enforceRandomId allows to create an SO with an arbitrary id + enforceRandomId: false, + }); } diff --git a/x-pack/platform/plugins/shared/fleet/server/services/agent_policies/full_agent_policy.test.ts b/x-pack/platform/plugins/shared/fleet/server/services/agent_policies/full_agent_policy.test.ts index 180439e5af6ef..042b2b6df9208 100644 --- a/x-pack/platform/plugins/shared/fleet/server/services/agent_policies/full_agent_policy.test.ts +++ b/x-pack/platform/plugins/shared/fleet/server/services/agent_policies/full_agent_policy.test.ts @@ -16,6 +16,7 @@ import { agentPolicyService } from '../agent_policy'; import { agentPolicyUpdateEventHandler } from '../agent_policy_update'; import { appContextService } from '../app_context'; import { getPackageInfo } from '../epm/packages'; +import { getFleetServerHostsForAgentPolicy } from '../fleet_server_host'; import { generateFleetConfig, @@ -26,6 +27,7 @@ import { import { getMonitoringPermissions } from './monitoring_permissions'; jest.mock('../epm/packages'); +jest.mock('../fleet_server_host'); const mockedGetElasticAgentMonitoringPermissions = getMonitoringPermissions as jest.Mock< ReturnType @@ -34,6 +36,9 @@ const mockedAgentPolicyService = agentPolicyService as jest.Mocked>; +const mockedGetFleetServerHostsForAgentPolicy = getFleetServerHostsForAgentPolicy as jest.Mock< + ReturnType +>; function mockAgentPolicy(data: Partial) { mockedAgentPolicyService.get.mockResolvedValue({ @@ -51,18 +56,6 @@ function mockAgentPolicy(data: Partial) { }); } -jest.mock('../fleet_server_host', () => { - return { - getFleetServerHostsForAgentPolicy: async () => { - return { - id: '93f74c0-e876-11ea-b7d3-8b2acec6f75c', - is_default: true, - host_urls: ['http://fleetserver:8220'], - }; - }, - }; -}); - jest.mock('../agent_policy'); jest.mock('../output', () => { @@ -154,6 +147,14 @@ function getAgentPolicyUpdateMock() { describe('getFullAgentPolicy', () => { beforeEach(() => { + mockedGetFleetServerHostsForAgentPolicy.mockResolvedValue({ + name: 'default Fleet Server', + id: '93f74c0-e876-11ea-b7d3-8b2acec6f75c', + is_default: true, + host_urls: ['http://fleetserver:8220'], + is_preconfigured: false, + }); + getAgentPolicyUpdateMock().mockClear(); mockedAgentPolicyService.get.mockReset(); mockedGetElasticAgentMonitoringPermissions.mockReset(); @@ -1028,6 +1029,42 @@ describe('getFullAgentPolicy', () => { }, }); }); + + it('should have ssl options in outputs when fleet server host has es ssl options', async () => { + mockedGetFleetServerHostsForAgentPolicy.mockResolvedValue({ + name: 'default Fleet Server', + id: '93f74c0-e876-11ea-b7d3-8b2acec6f75c', + is_default: true, + host_urls: ['http://fleetserver:8220'], + is_preconfigured: false, + ssl: { + certificate_authorities: ['/tmp/ssl/ca.crt'], + certificate: 'my-cert', + key: 'my-key', + es_certificate_authorities: ['/tmp/ssl/es-ca.crt'], + es_certificate: 'my-es-cert', + es_key: 'my-es-key', + }, + }); + + mockAgentPolicy({}); + const agentPolicy = await getFullAgentPolicy(savedObjectsClientMock.create(), 'agent-policy'); + expect(agentPolicy?.outputs).toMatchObject({ + default: { + hosts: ['http://127.0.0.1:9201'], + preset: 'balanced', + type: 'elasticsearch', + }, + 'fleetserver-output-93f74c0-e876-11ea-b7d3-8b2acec6f75c': { + ssl: { + certificate: 'my-es-cert', + certificate_authorities: ['/tmp/ssl/es-ca.crt'], + key: 'my-es-key', + }, + type: 'elasticsearch', + }, + }); + }); }); describe('getFullMonitoringSettings', () => { @@ -1309,7 +1346,7 @@ ssl.test: 123 type: 'logstash', }, undefined, - true + false ); expect(policyOutput).toMatchInlineSnapshot(` diff --git a/x-pack/platform/plugins/shared/fleet/server/services/agent_policies/full_agent_policy.ts b/x-pack/platform/plugins/shared/fleet/server/services/agent_policies/full_agent_policy.ts index 8483af7ef5f9a..40f4a1216369c 100644 --- a/x-pack/platform/plugins/shared/fleet/server/services/agent_policies/full_agent_policy.ts +++ b/x-pack/platform/plugins/shared/fleet/server/services/agent_policies/full_agent_policy.ts @@ -28,6 +28,7 @@ import type { AgentPolicy, } from '../../types'; import type { + FullAgentPolicyInput, FullAgentPolicyMonitoring, FullAgentPolicyOutputPermissions, PackageInfo, @@ -44,7 +45,7 @@ import { getPackageInfo } from '../epm/packages'; import { pkgToPkgKey, splitPkgKey } from '../epm/registry'; import { appContextService } from '../app_context'; -import { getOutputSecretReferences } from '../secrets'; +import { getFleetServerHostsSecretReferences, getOutputSecretReferences } from '../secrets'; import { getMonitoringPermissions } from './monitoring_permissions'; import { storedPackagePoliciesToAgentInputs } from '.'; @@ -87,7 +88,7 @@ export async function getFullAgentPolicy( outputs, proxies, dataOutput, - fleetServerHosts, + fleetServerHost, monitoringOutput, downloadSourceUri, downloadSourceProxyUri, @@ -119,6 +120,7 @@ export async function getFullAgentPolicy( packageInfoCache.set(pkgKey, packageInfo); }) ); + const bootstrapOutputConfig = generateFleetServerOutputSSLConfig(fleetServerHost); const inputs = ( await storedPackagePoliciesToAgentInputs( @@ -134,7 +136,18 @@ export async function getFullAgentPolicy( if (output) { input.use_output = getOutputIdForAgentPolicy(output); } - + if (input.type === 'fleet-server' && fleetServerHost) { + const sslInputConfig = generateSSLConfigForFleetServerInput(fleetServerHost); + if (sslInputConfig) { + input = { + ...input, + ...sslInputConfig, + ...(bootstrapOutputConfig + ? { use_output: `fleetserver-output-${fleetServerHost.id}` } + : {}), + }; + } + } return input; }); const features = (agentPolicy.agent_features || []).reduce((acc, { name, ...featureConfig }) => { @@ -143,6 +156,10 @@ export async function getFullAgentPolicy( }, {} as NonNullable['features']); const outputSecretReferences = outputs.flatMap((output) => getOutputSecretReferences(output)); + const fleetserverHostSecretReferences = fleetServerHost + ? getFleetServerHostsSecretReferences(fleetServerHost) + : []; + const packagePolicySecretReferences = (agentPolicy?.package_policies || []).flatMap( (policy) => policy.secret_references || [] ); @@ -150,18 +167,22 @@ export async function getFullAgentPolicy( const fullAgentPolicy: FullAgentPolicy = { id: agentPolicy.id, outputs: { + ...(bootstrapOutputConfig ? bootstrapOutputConfig : {}), ...outputs.reduce((acc, output) => { acc[getOutputIdForAgentPolicy(output)] = transformOutputToFullPolicyOutput( output, output.proxy_id ? proxies.find((proxy) => output.proxy_id === proxy.id) : undefined, standalone ); - return acc; }, {}), }, inputs, - secret_references: [...outputSecretReferences, ...packagePolicySecretReferences], + secret_references: [ + ...outputSecretReferences, + ...fleetserverHostSecretReferences, + ...packagePolicySecretReferences, + ], revision: agentPolicy.revision, agent: { download: { @@ -267,8 +288,8 @@ export async function getFullAgentPolicy( }, {}); // only add fleet server hosts if not in standalone - if (!standalone && fleetServerHosts) { - fullAgentPolicy.fleet = generateFleetConfig(agentPolicy, fleetServerHosts, proxies, outputs); + if (!standalone && fleetServerHost) { + fullAgentPolicy.fleet = generateFleetConfig(agentPolicy, fleetServerHost, proxies, outputs); } const settingsValues = getSettingsValuesForAgentPolicy( @@ -318,18 +339,17 @@ export async function getFullAgentPolicy( if (agentPolicy.overrides) { return deepMerge(fullAgentPolicy, agentPolicy.overrides); } - return fullAgentPolicy; } export function generateFleetConfig( agentPolicy: AgentPolicy, - fleetServerHosts: FleetServerHost, + fleetServerHost: FleetServerHost, proxies: FleetProxy[], outputs: Output[] ): FullAgentPolicy['fleet'] { const config: FullAgentPolicy['fleet'] = { - hosts: fleetServerHosts.host_urls, + hosts: fleetServerHost.host_urls, }; // generating the ssl configs for checking into Fleet @@ -370,8 +390,8 @@ export function generateFleetConfig( } } - const fleetServerHostproxy = fleetServerHosts.proxy_id - ? proxies.find((proxy) => proxy.id === fleetServerHosts.proxy_id) + const fleetServerHostproxy = fleetServerHost.proxy_id + ? proxies.find((proxy) => proxy.id === fleetServerHost.proxy_id) : null; if (fleetServerHostproxy) { config.proxy_url = fleetServerHostproxy.url; @@ -398,6 +418,40 @@ export function generateFleetConfig( return config; } +// Generate the SSL configs for fleet-server type input +// Corresponding to --fleet-server-cert, --fleet-server-cert-key, --certificate-authorites cli options +function generateSSLConfigForFleetServerInput(fleetServerHost: FleetServerHost) { + const inputConfig: Partial = {}; + + if (fleetServerHost?.ssl) { + inputConfig.ssl = { + ...(fleetServerHost.ssl.certificate_authorities && { + certificate_authorities: fleetServerHost.ssl.certificate_authorities, + }), + ...(fleetServerHost.ssl.certificate && { + certificate: fleetServerHost.ssl.certificate, + }), + ...(fleetServerHost.ssl.key && + !fleetServerHost?.secrets?.ssl?.key && { + key: fleetServerHost.ssl.key, + }), + ...(fleetServerHost.ssl.client_auth && { + client_authentication: fleetServerHost.ssl.client_auth, + }), + }; + } + + if (fleetServerHost?.secrets) { + inputConfig.secrets = { + ...(fleetServerHost?.secrets?.ssl?.key && + !fleetServerHost?.ssl?.key && { + ssl: { key: fleetServerHost.secrets?.ssl?.key }, + }), + }; + } + return inputConfig; +} + export function transformOutputToFullPolicyOutput( output: Output, proxy?: FleetProxy, @@ -576,6 +630,45 @@ export function transformOutputToFullPolicyOutput( return newOutput; } +// Generate the SSL configs for fleet server connection to ES +// Corresponding to --fleet-server-es-ca, --fleet-server-es-cert, --fleet-server-es-cert-key cli options +// This function generates a `bootstrap output` to be sent directly to elastic-agent +function generateFleetServerOutputSSLConfig(fleetServerHost: FleetServerHost | undefined): + | { + [key: string]: FullAgentPolicyOutput; + } + | undefined { + if (!fleetServerHost || (!fleetServerHost?.ssl && !fleetServerHost.secrets)) return undefined; + + const outputConfig: FullAgentPolicyOutput = { type: 'elasticsearch' }; + if (fleetServerHost?.ssl) { + outputConfig.ssl = { + ...(fleetServerHost.ssl.es_certificate_authorities && { + certificate_authorities: fleetServerHost.ssl.es_certificate_authorities, + }), + ...(fleetServerHost.ssl.es_certificate && { + certificate: fleetServerHost.ssl.es_certificate, + }), + ...(fleetServerHost.ssl.es_key && + !fleetServerHost?.secrets?.ssl?.es_key && { + key: fleetServerHost.ssl.es_key, + }), + }; + } + if (fleetServerHost?.secrets) { + outputConfig.secrets = { + ...(fleetServerHost?.secrets?.ssl?.es_key && + !fleetServerHost?.ssl?.es_key && { + ssl: { key: fleetServerHost.secrets?.ssl?.es_key }, + }), + }; + } + + return { + [`fleetserver-output-${fleetServerHost?.id}`]: outputConfig, + }; +} + export function getFullMonitoringSettings( agentPolicy: Pick< AgentPolicy, diff --git a/x-pack/platform/plugins/shared/fleet/server/services/agent_policies/related_saved_objects.ts b/x-pack/platform/plugins/shared/fleet/server/services/agent_policies/related_saved_objects.ts index c10edcfeb6edf..0d3b609f76c18 100644 --- a/x-pack/platform/plugins/shared/fleet/server/services/agent_policies/related_saved_objects.ts +++ b/x-pack/platform/plugins/shared/fleet/server/services/agent_policies/related_saved_objects.ts @@ -55,7 +55,7 @@ export async function fetchRelatedSavedObjects( .getLogger() ?.warn(`Unable to get fleet server hosts for policy ${agentPolicy?.id}: ${err.message}`); - return; + return undefined; }), ]); @@ -94,6 +94,6 @@ export async function fetchRelatedSavedObjects( monitoringOutput, downloadSourceUri, downloadSourceProxyUri, - fleetServerHosts, + fleetServerHost: fleetServerHosts, }; } 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 efe2f934541cc..f49fe64f18075 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 @@ -17,7 +17,7 @@ import type { AgentPolicy, NewAgentPolicy } from '../../types'; import { appContextService } from '../app_context'; import { listEnrollmentApiKeys } from '../api_keys'; -import { listFleetServerHosts } from '../fleet_server_host'; +import { fleetServerHostService } from '../fleet_server_host'; import { agentlessAgentService } from './agentless_agent'; @@ -48,8 +48,8 @@ mockedAppContextService.getSecuritySetup.mockImplementation(() => ({ const mockedListEnrollmentApiKeys = listEnrollmentApiKeys as jest.Mock< ReturnType >; -const mockedListFleetServerHosts = listFleetServerHosts as jest.Mock< - ReturnType +const mockedFleetServerHostService = fleetServerHostService as jest.Mocked< + typeof fleetServerHostService >; function getAgentPolicyCreateMock() { @@ -115,7 +115,7 @@ describe('Agentless Agent service', () => { jest .spyOn(appContextService, 'getKibanaVersion') .mockReturnValue('mocked-kibana-version-infinite'); - mockedListFleetServerHosts.mockResolvedValue({ + mockedFleetServerHostService.list.mockResolvedValue({ items: [ { id: 'mocked-fleet-server-id', @@ -215,7 +215,7 @@ describe('Agentless Agent service', () => { jest .spyOn(appContextService, 'getKibanaVersion') .mockReturnValue('mocked-kibana-version-infinite'); - mockedListFleetServerHosts.mockResolvedValue({ + mockedFleetServerHostService.list.mockResolvedValue({ items: [ { id: 'mocked-fleet-server-id', @@ -314,7 +314,7 @@ describe('Agentless Agent service', () => { jest .spyOn(appContextService, 'getKibanaVersion') .mockReturnValue('mocked-kibana-version-infinite'); - mockedListFleetServerHosts.mockResolvedValue({ + mockedFleetServerHostService.list.mockResolvedValue({ items: [ { id: 'mocked-fleet-server-id', @@ -425,7 +425,7 @@ describe('Agentless Agent service', () => { jest .spyOn(appContextService, 'getKibanaVersion') .mockReturnValue('mocked-kibana-version-infinite'); - mockedListFleetServerHosts.mockResolvedValue({ + mockedFleetServerHostService.list.mockResolvedValue({ items: [ { id: 'mocked-fleet-server-id', @@ -620,7 +620,7 @@ describe('Agentless Agent service', () => { .spyOn(appContextService, 'getKibanaVersion') .mockReturnValue('mocked-kibana-version-infinite'); - mockedListFleetServerHosts.mockResolvedValue({ + mockedFleetServerHostService.list.mockResolvedValue({ items: [ { id: 'mocked-fleet-server-id', @@ -681,7 +681,7 @@ describe('Agentless Agent service', () => { .spyOn(appContextService, 'getKibanaVersion') .mockReturnValue('mocked-kibana-version-infinite'); - mockedListFleetServerHosts.mockResolvedValue({ + mockedFleetServerHostService.list.mockResolvedValue({ items: [ { id: 'mocked-fleet-server-id', @@ -737,7 +737,7 @@ describe('Agentless Agent service', () => { } as any); jest.spyOn(appContextService, 'getCloud').mockReturnValue({ isCloudEnabled: true } as any); - mockedListFleetServerHosts.mockResolvedValue({ + mockedFleetServerHostService.list.mockResolvedValue({ items: [ { id: 'mocked-fleet-server-id', @@ -806,7 +806,7 @@ describe('Agentless Agent service', () => { jest .spyOn(appContextService, 'getKibanaVersion') .mockReturnValue('mocked-kibana-version-infinite'); - mockedListFleetServerHosts.mockResolvedValue({ + mockedFleetServerHostService.list.mockResolvedValue({ items: [ { id: 'mocked-fleet-server-id', @@ -946,7 +946,7 @@ describe('Agentless Agent service', () => { }, } as any); jest.spyOn(appContextService, 'getCloud').mockReturnValue({ isCloudEnabled: true } as any); - mockedListFleetServerHosts.mockResolvedValue({ items: [] } as any); + mockedFleetServerHostService.list.mockResolvedValue({ items: [] } as any); mockedListEnrollmentApiKeys.mockResolvedValue({ items: [ { @@ -984,7 +984,7 @@ describe('Agentless Agent service', () => { }, } as any); jest.spyOn(appContextService, 'getCloud').mockReturnValue({ isCloudEnabled: true } as any); - mockedListFleetServerHosts.mockResolvedValue({ + mockedFleetServerHostService.list.mockResolvedValue({ items: [ { id: 'mocked', @@ -1025,7 +1025,7 @@ describe('Agentless Agent service', () => { }, } as any); jest.spyOn(appContextService, 'getCloud').mockReturnValue({ isCloudEnabled: true } as any); - mockedListFleetServerHosts.mockResolvedValue({ + mockedFleetServerHostService.list.mockResolvedValue({ items: [ { id: 'mocked-fleet-server-id', @@ -1085,7 +1085,7 @@ describe('Agentless Agent service', () => { }, } as any); jest.spyOn(appContextService, 'getCloud').mockReturnValue({ isCloudEnabled: true } as any); - mockedListFleetServerHosts.mockResolvedValue({ + mockedFleetServerHostService.list.mockResolvedValue({ items: [ { id: 'mocked-fleet-server-id', @@ -1145,7 +1145,7 @@ describe('Agentless Agent service', () => { }, } as any); jest.spyOn(appContextService, 'getCloud').mockReturnValue({ isCloudEnabled: true } as any); - mockedListFleetServerHosts.mockResolvedValue({ + mockedFleetServerHostService.list.mockResolvedValue({ items: [ { id: 'mocked-fleet-server-id', @@ -1205,7 +1205,7 @@ describe('Agentless Agent service', () => { }, } as any); jest.spyOn(appContextService, 'getCloud').mockReturnValue({ isCloudEnabled: true } as any); - mockedListFleetServerHosts.mockResolvedValue({ + mockedFleetServerHostService.list.mockResolvedValue({ items: [ { id: 'mocked-fleet-server-id', @@ -1265,7 +1265,7 @@ describe('Agentless Agent service', () => { }, } as any); jest.spyOn(appContextService, 'getCloud').mockReturnValue({ isCloudEnabled: true } as any); - mockedListFleetServerHosts.mockResolvedValue({ + mockedFleetServerHostService.list.mockResolvedValue({ items: [ { id: 'mocked-fleet-server-id', @@ -1325,7 +1325,7 @@ describe('Agentless Agent service', () => { }, } as any); jest.spyOn(appContextService, 'getCloud').mockReturnValue({ isCloudEnabled: true } as any); - mockedListFleetServerHosts.mockResolvedValue({ + mockedFleetServerHostService.list.mockResolvedValue({ items: [ { id: 'mocked-fleet-server-id', @@ -1385,7 +1385,7 @@ describe('Agentless Agent service', () => { }, } as any); jest.spyOn(appContextService, 'getCloud').mockReturnValue({ isCloudEnabled: true } as any); - mockedListFleetServerHosts.mockResolvedValue({ + mockedFleetServerHostService.list.mockResolvedValue({ items: [ { id: 'mocked-fleet-server-id', @@ -1445,7 +1445,7 @@ describe('Agentless Agent service', () => { }, } as any); jest.spyOn(appContextService, 'getCloud').mockReturnValue({ isCloudEnabled: true } as any); - mockedListFleetServerHosts.mockResolvedValue({ + mockedFleetServerHostService.list.mockResolvedValue({ items: [ { id: 'mocked-fleet-server-id', 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 fe618b3eeb12b..2091ac3069333 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 @@ -34,7 +34,7 @@ import { import { appContextService } from '../app_context'; import { listEnrollmentApiKeys } from '../api_keys'; -import { listFleetServerHosts } from '../fleet_server_host'; +import { fleetServerHostService } from '../fleet_server_host'; import type { AgentlessConfig } from '../utils/agentless'; import { prependAgentlessApiBasePathToEndpoint, isAgentlessEnabled } from '../utils/agentless'; import { @@ -336,7 +336,7 @@ class AgentlessAgentService { kuery: `policy_id:"${policyId}"`, }); - const { items: fleetHosts } = await listFleetServerHosts(soClient); + const { items: fleetHosts } = await fleetServerHostService.list(soClient); // Tech Debt: change this when we add the internal fleet server config to use the internal fleet server host // https://github.com/elastic/security-team/issues/9695 const defaultFleetHost = diff --git a/x-pack/platform/plugins/shared/fleet/server/services/epm/package_service.ts b/x-pack/platform/plugins/shared/fleet/server/services/epm/package_service.ts index 14a35b1d5d1f8..af03016524f17 100644 --- a/x-pack/platform/plugins/shared/fleet/server/services/epm/package_service.ts +++ b/x-pack/platform/plugins/shared/fleet/server/services/epm/package_service.ts @@ -84,6 +84,7 @@ export interface PackageClient { pkgVersion?: string; spaceId?: string; force?: boolean; + keepFailedInstallation?: boolean; }): Promise; installCustomIntegration(options: { @@ -225,10 +226,17 @@ class PackageClientImpl implements PackageClient { pkgVersion?: string; spaceId?: string; force?: boolean; + keepFailedInstallation?: boolean; }): Promise { await this.#runPreflight(INSTALL_PACKAGES_AUTHZ); - const { pkgName, pkgVersion, spaceId = DEFAULT_SPACE_ID, force = false } = options; + const { + pkgName, + pkgVersion, + spaceId = DEFAULT_SPACE_ID, + force = false, + keepFailedInstallation, + } = options; // If pkgVersion isn't specified, find the latest package version const pkgKeyProps = pkgVersion @@ -244,6 +252,7 @@ class PackageClientImpl implements PackageClient { esClient: this.internalEsClient, savedObjectsClient: this.internalSoClient, neverIgnoreVerificationError: !force, + keepFailedInstallation, }); } diff --git a/x-pack/platform/plugins/shared/fleet/server/services/epm/packages/install.ts b/x-pack/platform/plugins/shared/fleet/server/services/epm/packages/install.ts index 88608aa8e04f2..a71805be76b18 100644 --- a/x-pack/platform/plugins/shared/fleet/server/services/epm/packages/install.ts +++ b/x-pack/platform/plugins/shared/fleet/server/services/epm/packages/install.ts @@ -261,6 +261,7 @@ export async function handleInstallPackageFailure({ esClient, spaceId, authorizationHeader, + keepFailedInstallation, }: { savedObjectsClient: SavedObjectsClientContract; error: FleetError | Boom.Boom | Error; @@ -270,6 +271,7 @@ export async function handleInstallPackageFailure({ esClient: ElasticsearchClient; spaceId: string; authorizationHeader?: HTTPAuthorizationHeader | null; + keepFailedInstallation?: boolean; }) { if (error instanceof ConcurrentInstallOperationError) { return; @@ -305,6 +307,9 @@ export async function handleInstallPackageFailure({ logger.error( `Uninstalling ${pkgkey} after error installing: [${error.toString()}] with install type: ${installType}` ); + if (keepFailedInstallation) { + return; + } await removeInstallation({ savedObjectsClient, pkgName, pkgVersion, esClient }); return; } @@ -387,6 +392,7 @@ interface InstallRegistryPackageParams { ignoreMappingUpdateErrors?: boolean; skipDataStreamRollover?: boolean; retryFromLastState?: boolean; + keepFailedInstallation?: boolean; } export interface CustomPackageDatasetConfiguration { @@ -450,6 +456,7 @@ async function installPackageFromRegistry({ ignoreMappingUpdateErrors = false, skipDataStreamRollover = false, retryFromLastState = false, + keepFailedInstallation = false, }: InstallRegistryPackageParams): Promise { const logger = appContextService.getLogger(); // TODO: change epm API to /packageName/version so we don't need to do this @@ -551,6 +558,7 @@ async function installPackageFromRegistry({ skipDataStreamRollover, retryFromLastState, useStreaming, + keepFailedInstallation, }); } catch (e) { sendEvent({ @@ -590,6 +598,7 @@ async function installPackageWithStateMachine(options: { skipDataStreamRollover?: boolean; retryFromLastState?: boolean; useStreaming?: boolean; + keepFailedInstallation?: boolean; }): Promise { const packageInfo = options.packageInstallContext.packageInfo; @@ -610,6 +619,7 @@ async function installPackageWithStateMachine(options: { packageInstallContext, retryFromLastState, useStreaming, + keepFailedInstallation, } = options; let { telemetryEvent } = options; const logger = appContextService.getLogger(); @@ -735,6 +745,7 @@ async function installPackageWithStateMachine(options: { spaceId, esClient, authorizationHeader, + keepFailedInstallation, }); sendEvent({ ...telemetryEvent!, @@ -896,6 +907,7 @@ export async function installPackage(args: InstallPackageParams): Promise; - -const mockedUpdateFleetServerHost = updateFleetServerHost as jest.MockedFunction< - typeof updateFleetServerHost ->; - const mockedOutputService = outputService as jest.Mocked; const mockedDownloadSourceService = downloadSourceService as jest.Mocked< typeof downloadSourceService @@ -61,7 +56,8 @@ describe('Fleet proxies service', () => { mockedDownloadSourceService.listAllForProxyId.mockReset(); mockedOutputService.update.mockReset(); soClientMock.delete.mockReset(); - mockedUpdateFleetServerHost.mockReset(); + mockedFleetServerHostService.update.mockReset(); + mockedFleetServerHostService.listAllForProxyId.mockReset(); mockedDownloadSourceService.listAllForProxyId.mockImplementation(async () => ({ items: [], total: 0, @@ -93,7 +89,7 @@ describe('Fleet proxies service', () => { perPage: 10, }; }); - mockedListFleetServerHostsForProxyId.mockImplementation(async (_, proxyId) => { + mockedFleetServerHostService.listAllForProxyId.mockImplementation(async (_, proxyId) => { if (proxyId === PROXY_IDS.RELATED_PRECONFIGURED) { return { items: [ @@ -178,7 +174,7 @@ describe('Fleet proxies service', () => { fromPreconfiguration: true, }); expect(mockedOutputService.update).toBeCalled(); - expect(mockedUpdateFleetServerHost).toBeCalled(); + expect(mockedFleetServerHostService.update).toBeCalled(); expect(soClientMock.delete).toBeCalled(); }); }); diff --git a/x-pack/platform/plugins/shared/fleet/server/services/fleet_proxies.ts b/x-pack/platform/plugins/shared/fleet/server/services/fleet_proxies.ts index e60c15577bdc2..4c28350683a6b 100644 --- a/x-pack/platform/plugins/shared/fleet/server/services/fleet_proxies.ts +++ b/x-pack/platform/plugins/shared/fleet/server/services/fleet_proxies.ts @@ -30,7 +30,7 @@ import type { import { appContextService } from './app_context'; -import { listFleetServerHostsForProxyId, updateFleetServerHost } from './fleet_server_host'; +import { fleetServerHostService } from './fleet_server_host'; import { outputService } from './output'; import { downloadSourceService } from './download_source'; @@ -206,7 +206,7 @@ async function updateRelatedSavedObject( await pMap( fleetServerHosts, (fleetServerHost) => - updateFleetServerHost(soClient, fleetServerHost.id, { + fleetServerHostService.update(soClient, esClient, fleetServerHost.id, { ...omit(fleetServerHost, 'id'), proxy_id: null, }), @@ -237,7 +237,7 @@ export async function getFleetProxyRelatedSavedObjects( ) { const [{ items: fleetServerHosts }, { items: outputs }, { items: downloadSources }] = await Promise.all([ - listFleetServerHostsForProxyId(soClient, proxyId), + fleetServerHostService.listAllForProxyId(soClient, proxyId), outputService.listAllForProxyId(soClient, proxyId), downloadSourceService.listAllForProxyId(soClient, proxyId), ]); diff --git a/x-pack/platform/plugins/shared/fleet/server/services/fleet_server_host.test.ts b/x-pack/platform/plugins/shared/fleet/server/services/fleet_server_host.test.ts index 8e3b2eb56e4a2..d9d271f9d2ed8 100644 --- a/x-pack/platform/plugins/shared/fleet/server/services/fleet_server_host.test.ts +++ b/x-pack/platform/plugins/shared/fleet/server/services/fleet_server_host.test.ts @@ -15,15 +15,18 @@ import { GLOBAL_SETTINGS_SAVED_OBJECT_TYPE, FLEET_SERVER_HOST_SAVED_OBJECT_TYPE, DEFAULT_FLEET_SERVER_HOST_ID, + PACKAGE_POLICY_SAVED_OBJECT_TYPE, } from '../constants'; import { appContextService } from './app_context'; -import { deleteFleetServerHost, migrateSettingsToFleetServerHost } from './fleet_server_host'; +import { fleetServerHostService, migrateSettingsToFleetServerHost } from './fleet_server_host'; import { agentPolicyService } from './agent_policy'; +import { getAgentsByKuery } from './agents'; jest.mock('./app_context'); jest.mock('./agent_policy'); +jest.mock('./agents'); const mockedAppContextService = appContextService as jest.Mocked; mockedAppContextService.getSecuritySetup.mockImplementation(() => ({ @@ -31,63 +34,46 @@ mockedAppContextService.getSecuritySetup.mockImplementation(() => ({ })); mockedAppContextService.getExperimentalFeatures.mockReturnValue({} as any); - let mockedLogger: jest.Mocked; +const mockedGetAgentsByKuery = getAgentsByKuery as jest.MockedFunction; -describe('migrateSettingsToFleetServerHost', () => { - beforeEach(() => { - mockedLogger = loggerMock.create(); - mockedAppContextService.getLogger.mockReturnValue(mockedLogger); - }); - - it('should not migrate settings if a default fleet server policy config exists', async () => { - const soClient = savedObjectsClientMock.create(); - soClient.find.mockImplementation(({ type }) => { - if (type === FLEET_SERVER_HOST_SAVED_OBJECT_TYPE) { - return { saved_objects: [{ id: 'test123' }] } as any; - } - - throw new Error('Not mocked'); - }); - - await migrateSettingsToFleetServerHost(soClient); +function getMockedSoClient(options?: { id?: string; findHosts?: boolean; findSettings?: boolean }) { + const soClient = savedObjectsClientMock.create(); + mockedAppContextService.getInternalUserSOClient.mockReturnValue(soClient); - expect(soClient.create).not.toBeCalled(); + soClient.get.mockImplementation(async (t: string, id: string) => { + return { + id: 'test1', + attributes: {}, + } as any; }); - it('should not migrate settings if there is not old settings', async () => { - const soClient = savedObjectsClientMock.create(); - soClient.find.mockImplementation(({ type }) => { - if (type === FLEET_SERVER_HOST_SAVED_OBJECT_TYPE) { - return { saved_objects: [] } as any; - } - - if (type === GLOBAL_SETTINGS_SAVED_OBJECT_TYPE) { - return { - saved_objects: [], - } as any; - } - - throw new Error('Not mocked'); - }); - - soClient.create.mockResolvedValue({ - id: DEFAULT_FLEET_SERVER_HOST_ID, + soClient.create.mockImplementation(async (type, data, createOptions) => { + return { + id: createOptions?.id || 'generated-id', + type, attributes: {}, - } as any); - - await migrateSettingsToFleetServerHost(soClient); - expect(soClient.create).not.toBeCalled(); + references: [], + }; }); - it('should migrate settings to new saved object', async () => { - const soClient = savedObjectsClientMock.create(); - soClient.find.mockImplementation(({ type }) => { - if (type === FLEET_SERVER_HOST_SAVED_OBJECT_TYPE) { - return { saved_objects: [] } as any; + soClient.find.mockImplementation(({ type }) => { + if (type === FLEET_SERVER_HOST_SAVED_OBJECT_TYPE) { + if (options?.findHosts) { + return { + saved_objects: [ + { + id: 'test123', + attributes: { name: 'fleetServerHost', host_urls: [], is_default: true }, + }, + ], + } as any; } + return { saved_objects: [] } as any; + } - if (type === GLOBAL_SETTINGS_SAVED_OBJECT_TYPE) { + if (type === GLOBAL_SETTINGS_SAVED_OBJECT_TYPE) { + if (options?.findSettings) { return { saved_objects: [ { @@ -99,15 +85,99 @@ describe('migrateSettingsToFleetServerHost', () => { } as any; } - throw new Error('Not mocked'); - }); + return { + saved_objects: [], + } as any; + } - soClient.create.mockResolvedValue({ - id: DEFAULT_FLEET_SERVER_HOST_ID, - attributes: {}, + if (type === PACKAGE_POLICY_SAVED_OBJECT_TYPE) { + return { + saved_objects: [ + { + id: 'existing-package-policy', + type: 'ingest-package-policies', + score: 1, + references: [], + version: '1.0.0', + attributes: { + name: 'fleet-server', + description: '', + namespace: 'default', + enabled: true, + policy_id: 'fleet-server-id-1', + policy_ids: ['fleet-server-id-1'], + package: { + name: 'fleet-server', + title: 'Fleet Server', + version: '0.9.0', + }, + inputs: [], + }, + }, + ], + } as any; + } + throw new Error('Not mocked'); + }); + + return soClient; +} + +describe('migrateSettingsToFleetServerHost', () => { + beforeEach(() => { + mockedLogger = loggerMock.create(); + mockedAppContextService.getLogger.mockReturnValue(mockedLogger); + mockedAppContextService.getEncryptedSavedObjectsSetup.mockReturnValue({ + canEncrypt: true, + } as any); + }); + const esMock = elasticsearchServiceMock.createInternalClient(); + + it('should not migrate settings if a default fleet server policy config exists', async () => { + const soClient = getMockedSoClient({ id: DEFAULT_FLEET_SERVER_HOST_ID, findHosts: true }); + await migrateSettingsToFleetServerHost(soClient, esMock); + + expect(soClient.create).not.toBeCalled(); + }); + + it('should not migrate settings if there is no old settings', async () => { + const soClient = getMockedSoClient({ id: DEFAULT_FLEET_SERVER_HOST_ID }); + mockedGetAgentsByKuery.mockResolvedValueOnce({ agents: [] } as any); + + await migrateSettingsToFleetServerHost(soClient, esMock); + expect(soClient.create).not.toBeCalled(); + }); + + it('should migrate settings to new saved object', async () => { + const soClient = getMockedSoClient({ findSettings: true }); + + mockedGetAgentsByKuery.mockResolvedValueOnce({ + agents: [ + { + id: '1', + local_metadata: { + elastic: { + agent: { + version: '10.0.0', + }, + }, + }, + }, + { + id: '2', + local_metadata: { + elastic: { + agent: { + version: '10.0.0', + }, + }, + }, + }, + ], } as any); - await migrateSettingsToFleetServerHost(soClient); + await migrateSettingsToFleetServerHost(soClient, esMock); + expect(soClient.create).toBeCalledWith( FLEET_SERVER_HOST_SAVED_OBJECT_TYPE, expect.objectContaining({ @@ -119,18 +189,67 @@ describe('migrateSettingsToFleetServerHost', () => { }) ); }); + + it('should not work if getEncryptedSavedObjectsSetup is not set', async () => { + const soClient = getMockedSoClient({ findSettings: true }); + + mockedAppContextService.getEncryptedSavedObjectsSetup.mockReturnValue({ + canEncrypt: false, + } as any); + await expect(() => migrateSettingsToFleetServerHost(soClient, esMock)).rejects.toThrow( + 'Fleet server host needs encrypted saved object api key to be set' + ); + }); }); -describe('deleteFleetServerHost', () => { - it('should removeFleetServerHostFromAll agent policies without force if not deleted from preconfiguration', async () => { - const soMock = savedObjectsClientMock.create(); +describe('create', () => { + beforeEach(() => { + mockedLogger = loggerMock.create(); + mockedAppContextService.getLogger.mockReturnValue(mockedLogger); + mockedAppContextService.getEncryptedSavedObjectsSetup.mockReturnValue({ + canEncrypt: true, + } as any); + }); + afterEach(() => { + jest.resetAllMocks(); + }); - soMock.get.mockResolvedValue({ - id: 'test1', - attributes: {}, + it('should throw if encryptedSavedObject is not configured', async () => { + const soMock = getMockedSoClient(); + const esMock = elasticsearchServiceMock.createInternalClient(); + mockedAppContextService.getEncryptedSavedObjectsSetup.mockReturnValue({ + canEncrypt: false, } as any); + + await expect( + fleetServerHostService.create( + soMock, + esMock, + { + name: 'Test', + host_urls: [], + is_default: false, + is_preconfigured: false, + }, + { id: 'output-test' } + ) + ).rejects.toThrow(`Fleet server host needs encrypted saved object api key to be set`); + }); +}); + +describe('delete fleetServerHost', () => { + beforeEach(() => { + mockedLogger = loggerMock.create(); + mockedAppContextService.getLogger.mockReturnValue(mockedLogger); + }); + afterEach(() => { + jest.resetAllMocks(); + }); + + it('should removeFleetServerHostFromAll agent policies without force if not deleted from preconfiguration', async () => { + const soMock = getMockedSoClient(); const esMock = elasticsearchServiceMock.createInternalClient(); - await deleteFleetServerHost(soMock, esMock, 'test1', {}); + await fleetServerHostService.delete(soMock, esMock, 'test1', {}); expect(jest.mocked(agentPolicyService.removeFleetServerHostFromAll)).toBeCalledWith( esMock, @@ -141,14 +260,10 @@ describe('deleteFleetServerHost', () => { ); }); it('should removeFleetServerHostFromAll agent policies with force if deleted from preconfiguration', async () => { - const soMock = savedObjectsClientMock.create(); + const soMock = getMockedSoClient(); - soMock.get.mockResolvedValue({ - id: 'test1', - attributes: {}, - } as any); const esMock = elasticsearchServiceMock.createInternalClient(); - await deleteFleetServerHost(soMock, esMock, 'test1', { + await (fleetServerHostService.delete as jest.Mock)(soMock, esMock, 'test1', { fromPreconfiguration: true, }); diff --git a/x-pack/platform/plugins/shared/fleet/server/services/fleet_server_host.ts b/x-pack/platform/plugins/shared/fleet/server/services/fleet_server_host.ts index 404ddd4d7110d..86fc43b2e6900 100644 --- a/x-pack/platform/plugins/shared/fleet/server/services/fleet_server_host.ts +++ b/x-pack/platform/plugins/shared/fleet/server/services/fleet_server_host.ts @@ -5,12 +5,17 @@ * 2.0. */ +import { omit } from 'lodash'; + import type { ElasticsearchClient, SavedObjectsClientContract, SavedObject, + KibanaRequest, } from '@kbn/core/server'; +import type { Nullable } from 'tough-cookie'; + import { normalizeHostsForAgents } from '../../common/services'; import { GLOBAL_SETTINGS_SAVED_OBJECT_TYPE, @@ -25,215 +30,360 @@ import type { FleetServerHost, NewFleetServerHost, AgentPolicy, + PolicySecretReference, } from '../types'; -import { FleetServerHostUnauthorizedError, FleetServerHostNotFoundError } from '../errors'; +import { + FleetServerHostUnauthorizedError, + FleetServerHostNotFoundError, + FleetEncryptedSavedObjectEncryptionKeyRequired, +} from '../errors'; import { appContextService } from './app_context'; import { agentPolicyService } from './agent_policy'; import { escapeSearchQueryPhrase } from './saved_object'; +import { + deleteFleetServerHostsSecrets, + deleteSecrets, + extractAndUpdateFleetServerHostsSecrets, + extractAndWriteFleetServerHostsSecrets, + isSecretStorageEnabled, +} from './secrets'; + +function savedObjectToFleetServerHost( + so: SavedObject +): FleetServerHost { + const { ssl, proxy_id: proxyId, ...attributes } = so.attributes; + + return { + id: so.id, + ...attributes, + ...(ssl ? { ssl: JSON.parse(ssl as string) } : {}), + ...(proxyId ? { proxy_id: proxyId } : {}), + }; +} -function savedObjectToFleetServerHost(so: SavedObject) { - const data = { ...so.attributes }; +const fakeRequest = { + headers: {}, + getBasePath: () => '', + path: '/', + route: { settings: {} }, + url: { + href: '/', + }, + raw: { + req: { + url: '/', + }, + }, +} as unknown as KibanaRequest; - if (data.proxy_id === null) { - delete data.proxy_id; +class FleetServerHostService { + private get encryptedSoClient() { + return appContextService.getInternalUserSOClient(fakeRequest); } - return { id: so.id, ...data }; -} + public async create( + soClient: SavedObjectsClientContract, + esClient: ElasticsearchClient, + fleetServerHost: NewFleetServerHost, + options?: { + id?: string; + overwrite?: boolean; + fromPreconfiguration?: boolean; + secretHashes?: Record; + } + ): Promise { + const logger = appContextService.getLogger(); + const data: FleetServerHostSOAttributes = { ...omit(fleetServerHost, ['ssl', 'secrets']) }; -export async function createFleetServerHost( - soClient: SavedObjectsClientContract, - data: NewFleetServerHost, - options?: { id?: string; overwrite?: boolean; fromPreconfiguration?: boolean } -): Promise { - const logger = appContextService.getLogger(); - if (data.is_default) { - const defaultItem = await getDefaultFleetServerHost(soClient); - if (defaultItem && defaultItem.id !== options?.id) { - await updateFleetServerHost( - soClient, - defaultItem.id, - { is_default: false }, - { fromPreconfiguration: options?.fromPreconfiguration } + if (!appContextService.getEncryptedSavedObjectsSetup()?.canEncrypt) { + throw new FleetEncryptedSavedObjectEncryptionKeyRequired( + `Fleet server host needs encrypted saved object api key to be set` ); } - } - if (data.host_urls) { - data.host_urls = data.host_urls.map(normalizeHostsForAgents); + if (fleetServerHost.is_default) { + const defaultItem = await this.getDefaultFleetServerHost(soClient); + if (defaultItem && defaultItem.id !== options?.id) { + await this.update( + soClient, + esClient, + defaultItem.id, + { is_default: false }, + { fromPreconfiguration: options?.fromPreconfiguration } + ); + } + } + + if (fleetServerHost.host_urls) { + data.host_urls = fleetServerHost.host_urls.map(normalizeHostsForAgents); + } + if (fleetServerHost.ssl) { + data.ssl = JSON.stringify(fleetServerHost.ssl); + } + + // Store secret values if enabled; if not, store plain text values + if (await isSecretStorageEnabled(esClient, soClient)) { + const { fleetServerHost: fleetServerHostWithSecrets } = + await extractAndWriteFleetServerHostsSecrets({ + fleetServerHost, + esClient, + secretHashes: fleetServerHost.is_preconfigured ? options?.secretHashes : undefined, + }); + if (fleetServerHostWithSecrets.secrets) + data.secrets = fleetServerHostWithSecrets.secrets as FleetServerHostSOAttributes['secrets']; + } else { + if ( + (!fleetServerHost.ssl?.key && fleetServerHost.secrets?.ssl?.key) || + (!fleetServerHost.ssl?.es_key && fleetServerHost.secrets?.ssl?.es_key) + ) { + data.ssl = JSON.stringify({ ...fleetServerHost.ssl, ...fleetServerHost.secrets.ssl }); + } + } + const res = await this.encryptedSoClient.create( + FLEET_SERVER_HOST_SAVED_OBJECT_TYPE, + data, + { id: options?.id, overwrite: options?.overwrite } + ); + logger.debug(`Created fleet server host ${options?.id}`); + return savedObjectToFleetServerHost(res); } - logger.debug(`Creating fleet server host with ${data}`); - const res = await soClient.create( - FLEET_SERVER_HOST_SAVED_OBJECT_TYPE, - data, - { id: options?.id, overwrite: options?.overwrite } - ); - logger.debug(`Created fleet server host ${options?.id}`); - return savedObjectToFleetServerHost(res); -} -export async function getFleetServerHost( - soClient: SavedObjectsClientContract, - id: string -): Promise { - const res = await soClient.get( - FLEET_SERVER_HOST_SAVED_OBJECT_TYPE, - id - ); + public async get(soClient: SavedObjectsClientContract, id: string): Promise { + // add code to retrieve encrypted fields + const res = await this.encryptedSoClient.get( + FLEET_SERVER_HOST_SAVED_OBJECT_TYPE, + id + ); - return savedObjectToFleetServerHost(res); -} + return savedObjectToFleetServerHost(res); + } -export async function listFleetServerHosts(soClient: SavedObjectsClientContract) { - const res = await soClient.find({ - type: FLEET_SERVER_HOST_SAVED_OBJECT_TYPE, - perPage: SO_SEARCH_LIMIT, - }); + public async list(soClient: SavedObjectsClientContract) { + const res = await this.encryptedSoClient.find({ + type: FLEET_SERVER_HOST_SAVED_OBJECT_TYPE, + perPage: SO_SEARCH_LIMIT, + }); + + return { + items: res.saved_objects.map(savedObjectToFleetServerHost), + total: res.total, + page: res.page, + perPage: res.per_page, + }; + } - return { - items: res.saved_objects.map(savedObjectToFleetServerHost), - total: res.total, - page: res.page, - perPage: res.per_page, - }; -} + public async listAllForProxyId(soClient: SavedObjectsClientContract, proxyId: string) { + const res = await this.encryptedSoClient.find({ + type: FLEET_SERVER_HOST_SAVED_OBJECT_TYPE, + perPage: SO_SEARCH_LIMIT, + searchFields: ['proxy_id'], + search: escapeSearchQueryPhrase(proxyId), + }); + + return { + items: res.saved_objects.map(savedObjectToFleetServerHost), + total: res.total, + page: res.page, + perPage: res.per_page, + }; + } -export async function listFleetServerHostsForProxyId( - soClient: SavedObjectsClientContract, - proxyId: string -) { - const res = await soClient.find({ - type: FLEET_SERVER_HOST_SAVED_OBJECT_TYPE, - perPage: SO_SEARCH_LIMIT, - searchFields: ['proxy_id'], - search: escapeSearchQueryPhrase(proxyId), - }); + // export async function deleteFleetServerHost( + public async delete( + soClient: SavedObjectsClientContract, + esClient: ElasticsearchClient, + id: string, + options?: { fromPreconfiguration?: boolean } + ) { + const logger = appContextService.getLogger(); + logger.debug(`Deleting fleet server host ${id}`); - return { - items: res.saved_objects.map(savedObjectToFleetServerHost), - total: res.total, - page: res.page, - perPage: res.per_page, - }; -} + const fleetServerHost = await this.get(soClient, id); -export async function deleteFleetServerHost( - soClient: SavedObjectsClientContract, - esClient: ElasticsearchClient, - id: string, - options?: { fromPreconfiguration?: boolean } -) { - const logger = appContextService.getLogger(); - logger.debug(`Deleting fleet server host ${id}`); + if (fleetServerHost.is_preconfigured && !options?.fromPreconfiguration) { + throw new FleetServerHostUnauthorizedError( + `Cannot delete ${id} preconfigured fleet server host` + ); + } + + if (fleetServerHost.is_default) { + throw new FleetServerHostUnauthorizedError( + `Default Fleet Server hosts ${id} cannot be deleted.` + ); + } - const fleetServerHost = await getFleetServerHost(soClient, id); + await agentPolicyService.removeFleetServerHostFromAll(esClient, id, { + force: options?.fromPreconfiguration, + }); - if (fleetServerHost.is_preconfigured && !options?.fromPreconfiguration) { - throw new FleetServerHostUnauthorizedError( - `Cannot delete ${id} preconfigured fleet server host` + const soDeleteResult = await this.encryptedSoClient.delete( + FLEET_SERVER_HOST_SAVED_OBJECT_TYPE, + id ); - } + await deleteFleetServerHostsSecrets({ + fleetServerHost, + esClient: appContextService.getInternalUserESClient(), + }); - if (fleetServerHost.is_default) { - throw new FleetServerHostUnauthorizedError( - `Default Fleet Server hosts ${id} cannot be deleted.` - ); + return soDeleteResult; } - await agentPolicyService.removeFleetServerHostFromAll(esClient, id, { - force: options?.fromPreconfiguration, - }); + public async update( + soClient: SavedObjectsClientContract, + esClient: ElasticsearchClient, + id: string, + data: Partial, + options?: { fromPreconfiguration?: boolean; secretHashes?: Record } + ) { + let secretsToDelete: PolicySecretReference[] = []; - return await soClient.delete(FLEET_SERVER_HOST_SAVED_OBJECT_TYPE, id); -} + const logger = appContextService.getLogger(); + logger.debug(`Updating fleet server host ${id}`); -export async function updateFleetServerHost( - soClient: SavedObjectsClientContract, - id: string, - data: Partial, - options?: { fromPreconfiguration?: boolean } -) { - const logger = appContextService.getLogger(); - logger.debug(`Updating fleet server host ${id}`); + const originalItem = await this.get(soClient, id); + const updateData: Nullable> = { + ...omit(data, ['ssl', 'secrets']), + }; + + if (data.is_preconfigured && !options?.fromPreconfiguration) { + throw new FleetServerHostUnauthorizedError( + `Cannot update ${id} preconfigured fleet server host` + ); + } + + if (data.is_default) { + const defaultItem = await this.getDefaultFleetServerHost(soClient); + if (defaultItem && defaultItem.id !== id) { + await this.update( + soClient, + esClient, + defaultItem.id, + { + is_default: false, + }, + { fromPreconfiguration: options?.fromPreconfiguration } + ); + } + } + + if (data.host_urls) { + updateData.host_urls = data.host_urls.map(normalizeHostsForAgents); + } - const originalItem = await getFleetServerHost(soClient, id); + if (data.ssl) { + updateData.ssl = JSON.stringify(data.ssl); + } else if (data.ssl === null) { + // Explicitly set to null to allow to delete the field + updateData.ssl = null; + } + + // Store secret values if enabled; if not, store plain text values + if (await isSecretStorageEnabled(esClient, soClient)) { + const secretsRes = await extractAndUpdateFleetServerHostsSecrets({ + oldFleetServerHost: originalItem, + fleetServerHostUpdate: data, + esClient, + secretHashes: data.is_preconfigured ? options?.secretHashes : undefined, + }); + + updateData.secrets = secretsRes.fleetServerHostUpdate + .secrets as FleetServerHostSOAttributes['secrets']; + secretsToDelete = secretsRes.secretsToDelete; + } else { + if ( + (!data.ssl?.key && data.secrets?.ssl?.key) || + (!data.ssl?.es_key && data.secrets?.ssl?.es_key) + ) { + updateData.ssl = JSON.stringify({ ...data.ssl, ...data.secrets.ssl }); + } + } - if (data.is_preconfigured && !options?.fromPreconfiguration) { - throw new FleetServerHostUnauthorizedError( - `Cannot update ${id} preconfigured fleet server host` + await this.encryptedSoClient.update( + FLEET_SERVER_HOST_SAVED_OBJECT_TYPE, + id, + updateData ); - } - if (data.is_default) { - const defaultItem = await getDefaultFleetServerHost(soClient); - if (defaultItem && defaultItem.id !== id) { - await updateFleetServerHost( - soClient, - defaultItem.id, - { - is_default: false, - }, - { fromPreconfiguration: options?.fromPreconfiguration } - ); + if (secretsToDelete.length) { + try { + await deleteSecrets({ esClient, ids: secretsToDelete.map((s) => s.id) }); + } catch (err) { + logger.warn(`Error cleaning up secrets for output ${id}: ${err.message}`); + } } - } - if (data.host_urls) { - data.host_urls = data.host_urls.map(normalizeHostsForAgents); + logger.debug(`Updated fleet server host ${id}`); + return { + ...originalItem, + ...updateData, + }; } - await soClient.update(FLEET_SERVER_HOST_SAVED_OBJECT_TYPE, id, data); - logger.debug(`Updated fleet server host ${id}`); - return { - ...originalItem, - ...data, - }; -} + public async bulkGet( + soClient: SavedObjectsClientContract, + ids: string[], + { ignoreNotFound = false } = { ignoreNotFound: true } + ) { + if (ids.length === 0) { + return []; + } -export async function bulkGetFleetServerHosts( - soClient: SavedObjectsClientContract, - ids: string[], - { ignoreNotFound = false } = { ignoreNotFound: true } -) { - if (ids.length === 0) { - return []; + const res = await this.encryptedSoClient.bulkGet( + ids.map((id) => ({ + id, + type: FLEET_SERVER_HOST_SAVED_OBJECT_TYPE, + })) + ); + + return res.saved_objects + .map((so) => { + if (so.error) { + if (!ignoreNotFound || so.error.statusCode !== 404) { + throw so.error; + } + return undefined; + } + + return savedObjectToFleetServerHost(so); + }) + .filter( + (fleetServerHostOrUndefined): fleetServerHostOrUndefined is FleetServerHost => + typeof fleetServerHostOrUndefined !== 'undefined' + ); } - const res = await soClient.bulkGet( - ids.map((id) => ({ - id, + // /** + // * Get the default Fleet server policy hosts or throw if it does not exists + // */ + public async getDefaultFleetServerHost( + soClient: SavedObjectsClientContract + ): Promise { + const res = await this.encryptedSoClient.find({ type: FLEET_SERVER_HOST_SAVED_OBJECT_TYPE, - })) - ); + filter: `${FLEET_SERVER_HOST_SAVED_OBJECT_TYPE}.attributes.is_default:true`, + }); - return res.saved_objects - .map((so) => { - if (so.error) { - if (!ignoreNotFound || so.error.statusCode !== 404) { - throw so.error; - } - return undefined; - } + if (res.saved_objects.length === 0) { + return null; + } - return savedObjectToFleetServerHost(so); - }) - .filter( - (fleetServerHostOrUndefined): fleetServerHostOrUndefined is FleetServerHost => - typeof fleetServerHostOrUndefined !== 'undefined' - ); + return savedObjectToFleetServerHost(res.saved_objects[0]); + } } +export const fleetServerHostService = new FleetServerHostService(); + export async function getFleetServerHostsForAgentPolicy( soClient: SavedObjectsClientContract, agentPolicy: Pick ) { if (agentPolicy.fleet_server_host_id) { - return getFleetServerHost(soClient, agentPolicy.fleet_server_host_id); + return fleetServerHostService.get(soClient, agentPolicy.fleet_server_host_id); } - const defaultFleetServerHost = await getDefaultFleetServerHost(soClient); + const defaultFleetServerHost = await fleetServerHostService.getDefaultFleetServerHost(soClient); if (!defaultFleetServerHost) { throw new FleetServerHostNotFoundError('Default Fleet Server host is not setup'); } @@ -241,29 +391,14 @@ export async function getFleetServerHostsForAgentPolicy( return defaultFleetServerHost; } -/** - * Get the default Fleet server policy hosts or throw if it does not exists - */ -export async function getDefaultFleetServerHost( - soClient: SavedObjectsClientContract -): Promise { - const res = await soClient.find({ - type: FLEET_SERVER_HOST_SAVED_OBJECT_TYPE, - filter: `${FLEET_SERVER_HOST_SAVED_OBJECT_TYPE}.attributes.is_default:true`, - }); - - if (res.saved_objects.length === 0) { - return null; - } - - return savedObjectToFleetServerHost(res.saved_objects[0]); -} - /** * Migrate Global setting fleet server hosts to their own saved object */ -export async function migrateSettingsToFleetServerHost(soClient: SavedObjectsClientContract) { - const defaultFleetServerHost = await getDefaultFleetServerHost(soClient); +export async function migrateSettingsToFleetServerHost( + soClient: SavedObjectsClientContract, + esClient: ElasticsearchClient +) { + const defaultFleetServerHost = await fleetServerHostService.getDefaultFleetServerHost(soClient); if (defaultFleetServerHost) { return; } @@ -282,8 +417,9 @@ export async function migrateSettingsToFleetServerHost(soClient: SavedObjectsCli } // Migrate - await createFleetServerHost( + await fleetServerHostService.create( soClient, + esClient, { name: 'Default', host_urls: oldSettings.attributes.fleet_server_hosts, diff --git a/x-pack/platform/plugins/shared/fleet/server/services/index.ts b/x-pack/platform/plugins/shared/fleet/server/services/index.ts index 9db62cc61c2ed..71710fc3bc88f 100644 --- a/x-pack/platform/plugins/shared/fleet/server/services/index.ts +++ b/x-pack/platform/plugins/shared/fleet/server/services/index.ts @@ -38,6 +38,7 @@ export { outputService } from './output'; export { downloadSourceService } from './download_source'; export { settingsService }; export { dataStreamService } from './data_streams'; +export { fleetServerHostService } from './fleet_server_host'; // Plugin services export { appContextService } from './app_context'; diff --git a/x-pack/platform/plugins/shared/fleet/server/services/preconfiguration/fleet_proxies.ts b/x-pack/platform/plugins/shared/fleet/server/services/preconfiguration/fleet_proxies.ts index d09494e52d30b..ef13c7354a260 100644 --- a/x-pack/platform/plugins/shared/fleet/server/services/preconfiguration/fleet_proxies.ts +++ b/x-pack/platform/plugins/shared/fleet/server/services/preconfiguration/fleet_proxies.ts @@ -18,7 +18,7 @@ import { listFleetProxies, updateFleetProxy, } from '../fleet_proxies'; -import { listFleetServerHostsForProxyId } from '../fleet_server_host'; +import { fleetServerHostService } from '../fleet_server_host'; import { agentPolicyService } from '../agent_policy'; import { outputService } from '../output'; @@ -96,7 +96,7 @@ async function createOrUpdatePreconfiguredFleetProxies( ); // Bump all the agent policy that use that proxy const [{ items: fleetServerHosts }, { items: outputs }] = await Promise.all([ - listFleetServerHostsForProxyId(soClient, id), + fleetServerHostService.listAllForProxyId(soClient, id), outputService.listAllForProxyId(soClient, id), ]); if ( @@ -146,7 +146,7 @@ async function cleanPreconfiguredFleetProxies( } const [{ items: fleetServerHosts }, { items: outputs }] = await Promise.all([ - listFleetServerHostsForProxyId(soClient, existingFleetProxy.id), + fleetServerHostService.listAllForProxyId(soClient, existingFleetProxy.id), outputService.listAllForProxyId(soClient, existingFleetProxy.id), ]); const isUsed = fleetServerHosts.length > 0 || outputs.length > 0; diff --git a/x-pack/platform/plugins/shared/fleet/server/services/preconfiguration/fleet_server_host.test.ts b/x-pack/platform/plugins/shared/fleet/server/services/preconfiguration/fleet_server_host.test.ts index de7578129a09b..899a393dc6536 100644 --- a/x-pack/platform/plugins/shared/fleet/server/services/preconfiguration/fleet_server_host.test.ts +++ b/x-pack/platform/plugins/shared/fleet/server/services/preconfiguration/fleet_server_host.test.ts @@ -8,12 +8,9 @@ import { savedObjectsClientMock, elasticsearchServiceMock } from '@kbn/core/serv import { securityMock } from '@kbn/security-plugin/server/mocks'; import { appContextService } from '../app_context'; -import { - getDefaultFleetServerHost, - createFleetServerHost, - bulkGetFleetServerHosts, - updateFleetServerHost, -} from '../fleet_server_host'; +import { fleetServerHostService } from '../fleet_server_host'; + +import type { FleetServerHost } from '../../../common/types'; import { createCloudFleetServerHostIfNeeded, @@ -21,8 +18,7 @@ import { getPreconfiguredFleetServerHostFromConfig, createOrUpdatePreconfiguredFleetServerHosts, } from './fleet_server_host'; - -import type { FleetServerHost } from '../../../common/types'; +import { hashSecret } from './outputs'; jest.mock('../fleet_server_host'); jest.mock('../app_context'); @@ -33,17 +29,8 @@ mockedAppContextService.getSecuritySetup.mockImplementation(() => ({ ...securityMock.createSetup(), })); -const mockedGetDefaultFleetServerHost = getDefaultFleetServerHost as jest.MockedFunction< - typeof getDefaultFleetServerHost ->; -const mockedCreateFleetServerHost = createFleetServerHost as jest.MockedFunction< - typeof createFleetServerHost ->; -const mockedUpdateFleetServerHost = updateFleetServerHost as jest.MockedFunction< - typeof updateFleetServerHost ->; -const mockedBulkGetFleetServerHosts = bulkGetFleetServerHosts as jest.MockedFunction< - typeof bulkGetFleetServerHosts +const mockedFleetServerHostService = fleetServerHostService as jest.Mocked< + typeof fleetServerHostService >; describe('getPreconfiguredFleetServerHostFromConfig', () => { @@ -64,6 +51,30 @@ describe('getPreconfiguredFleetServerHostFromConfig', () => { expect(res).toEqual(config.fleetServerHosts); }); + it('should work with preconfigured fleetServerHosts that have SSL options', () => { + const config = { + fleetServerHosts: [ + { + id: 'id1', + name: 'fleet server 1', + host_urls: [], + is_default: false, + is_preconfigured: false, + ssl: { + certificate_authorities: ['cert authorities'], + es_certificate_authorities: ['es cert authorities'], + certificate: 'path/to/cert', + es_certificate: 'path/to/EScert', + }, + }, + ], + }; + + const res = getPreconfiguredFleetServerHostFromConfig(config); + + expect(res).toEqual(config.fleetServerHosts); + }); + it('should work with agents.fleet_server.hosts', () => { const config = { agents: { fleet_server: { hosts: ['http://test.fr'] } }, @@ -217,19 +228,22 @@ describe('getCloudFleetServersHosts', () => { describe('createCloudFleetServerHostIfNeeded', () => { afterEach(() => { - mockedCreateFleetServerHost.mockReset(); + mockedFleetServerHostService.create.mockReset(); mockedAppContextService.getCloud.mockReset(); }); it('should do nothing if there is no cloud fleet server hosts', async () => { const soClient = savedObjectsClientMock.create(); + const esClient = elasticsearchServiceMock.createClusterClient().asInternalUser; - await createCloudFleetServerHostIfNeeded(soClient); + await createCloudFleetServerHostIfNeeded(soClient, esClient); - expect(mockedCreateFleetServerHost).not.toBeCalled(); + expect(mockedFleetServerHostService.create).not.toBeCalled(); }); it('should do nothing if there is already an host configured', async () => { const soClient = savedObjectsClientMock.create(); + const esClient = elasticsearchServiceMock.createClusterClient().asInternalUser; + mockedAppContextService.getCloud.mockReturnValue({ cloudId: 'dXMtZWFzdC0xLmF3cy5mb3VuZC5pbyRjZWM2ZjI2MWE3NGJmMjRjZTMzYmI4ODExYjg0Mjk0ZiRjNmMyY2E2ZDA0MjI0OWFmMGNjN2Q3YTllOTYyNTc0Mw==', @@ -242,17 +256,19 @@ describe('createCloudFleetServerHostIfNeeded', () => { projectId: undefined, }, }); - mockedGetDefaultFleetServerHost.mockResolvedValue({ + mockedFleetServerHostService.get.mockResolvedValue({ id: 'test', } as any); - await createCloudFleetServerHostIfNeeded(soClient); + await createCloudFleetServerHostIfNeeded(soClient, esClient); - expect(mockedCreateFleetServerHost).not.toBeCalled(); + expect(mockedFleetServerHostService.create).not.toBeCalled(); }); it('should create a new fleet server hosts if there is no host configured', async () => { const soClient = savedObjectsClientMock.create(); + const esClient = elasticsearchServiceMock.createClusterClient().asInternalUser; + mockedAppContextService.getCloud.mockReturnValue({ cloudId: 'dXMtZWFzdC0xLmF3cy5mb3VuZC5pbyRjZWM2ZjI2MWE3NGJmMjRjZTMzYmI4ODExYjg0Mjk0ZiRjNmMyY2E2ZDA0MjI0OWFmMGNjN2Q3YTllOTYyNTc0Mw==', @@ -266,16 +282,17 @@ describe('createCloudFleetServerHostIfNeeded', () => { projectId: undefined, }, }); - mockedGetDefaultFleetServerHost.mockResolvedValue(null); + mockedFleetServerHostService.get.mockResolvedValue(null as any); soClient.create.mockResolvedValue({ id: 'test-id', attributes: {}, } as any); - await createCloudFleetServerHostIfNeeded(soClient); + await createCloudFleetServerHostIfNeeded(soClient, esClient); - expect(mockedCreateFleetServerHost).toBeCalledTimes(1); - expect(mockedCreateFleetServerHost).toBeCalledWith( + expect(mockedFleetServerHostService.create).toBeCalledTimes(1); + expect(mockedFleetServerHostService.create).toBeCalledWith( + expect.anything(), expect.anything(), expect.objectContaining({ host_urls: ['https://deployment-id-1.fleet.us-east-1.aws.found.io'], @@ -287,8 +304,10 @@ describe('createCloudFleetServerHostIfNeeded', () => { }); describe('createOrUpdatePreconfiguredFleetServerHosts', () => { - beforeEach(() => { - mockedBulkGetFleetServerHosts.mockResolvedValue([ + let secretHash: string; + beforeEach(async () => { + secretHash = await hashSecret('secretKey'); + mockedFleetServerHostService.bulkGet.mockResolvedValue([ { id: 'fleet-123', name: 'TEST', @@ -301,11 +320,88 @@ describe('createOrUpdatePreconfiguredFleetServerHosts', () => { is_default: false, is_internal: false, host_urls: ['http://test-internal.fr'], + is_preconfigured: true, + }, + { + id: 'fleet-with-secrets', + name: 'TEST_SECRETS', + is_default: false, + is_internal: false, + host_urls: ['http://test-internal.fr'], + is_preconfigured: true, + secrets: { + ssl: { + key: { id: 'test123', hash: secretHash }, + }, + }, }, ] as FleetServerHost[]); }); afterEach(() => { - mockedBulkGetFleetServerHosts.mockReset(); + mockedFleetServerHostService.bulkGet.mockReset(); + jest.resetAllMocks(); + }); + + it('should create a preconfigured fleet server host that does not exist', async () => { + const soClient = savedObjectsClientMock.create(); + const esClient = elasticsearchServiceMock.createClusterClient().asInternalUser; + + await createOrUpdatePreconfiguredFleetServerHosts(soClient, esClient, [ + { + id: 'new-fleet-server-host', + name: 'TEST_1', + is_default: false, + is_internal: false, + host_urls: ['http://test-internal.fr'], + is_preconfigured: true, + }, + ]); + expect(mockedFleetServerHostService.create).toBeCalledWith( + expect.anything(), + expect.anything(), + expect.objectContaining({ + name: 'TEST_1', + }), + expect.anything() + ); + expect(mockedFleetServerHostService.update).not.toBeCalled(); + }); + + it('should create a preconfigured fleet server host with secrets that does not exist', async () => { + const soClient = savedObjectsClientMock.create(); + const esClient = elasticsearchServiceMock.createClusterClient().asInternalUser; + + await createOrUpdatePreconfiguredFleetServerHosts(soClient, esClient, [ + { + id: 'new-fleet-server-host', + name: 'TEST_1', + is_default: false, + is_internal: false, + host_urls: ['http://test-internal.fr'], + is_preconfigured: true, + secrets: { + ssl: { + key: 'unsecureKey1', + es_key: 'unsecureKey2', + }, + }, + }, + ]); + expect(mockedFleetServerHostService.create).toBeCalledWith( + expect.anything(), + expect.anything(), + expect.objectContaining({ + name: 'TEST_1', + secrets: { + ssl: { + key: 'unsecureKey1', + es_key: 'unsecureKey2', + }, + }, + }), + expect.anything() + ); + expect(mockedFleetServerHostService.update).not.toBeCalled(); }); it('should update preconfigured fleet server hosts if is_internal flag changes', async () => { @@ -319,11 +415,224 @@ describe('createOrUpdatePreconfiguredFleetServerHosts', () => { is_default: false, is_internal: true, host_urls: ['http://test-internal.fr'], - is_preconfigured: false, + is_preconfigured: true, + }, + ]); + + expect(mockedFleetServerHostService.create).not.toBeCalled(); + expect(mockedFleetServerHostService.update).toBeCalledWith( + expect.anything(), + expect.anything(), + 'fleet-internal', + expect.objectContaining({ + is_internal: true, + }), + { fromPreconfiguration: true, secretHashes: {} } + ); + }); + + it('should update preconfigured fleet server hosts if host_urls change', async () => { + const soClient = savedObjectsClientMock.create(); + const esClient = elasticsearchServiceMock.createClusterClient().asInternalUser; + + await createOrUpdatePreconfiguredFleetServerHosts(soClient, esClient, [ + { + id: 'fleet-internal', + name: 'TEST_INTERNAL', + is_default: false, + is_internal: false, + host_urls: ['http://test-internal.fr', 'http://test.fr'], + is_preconfigured: true, + }, + ]); + + expect(mockedFleetServerHostService.create).not.toBeCalled(); + expect(mockedFleetServerHostService.update).toBeCalledWith( + expect.anything(), + expect.anything(), + 'fleet-internal', + expect.objectContaining({ + host_urls: ['http://test-internal.fr', 'http://test.fr'], + }), + { fromPreconfiguration: true, secretHashes: {} } + ); + }); + + it('should update preconfigured fleet server hosts if proxy_id change', async () => { + const soClient = savedObjectsClientMock.create(); + const esClient = elasticsearchServiceMock.createClusterClient().asInternalUser; + + await createOrUpdatePreconfiguredFleetServerHosts(soClient, esClient, [ + { + id: 'fleet-internal', + name: 'TEST_INTERNAL', + is_default: false, + is_internal: false, + host_urls: ['http://test-internal.fr'], + is_preconfigured: true, + proxy_id: 'proxy-test', + }, + ]); + + expect(mockedFleetServerHostService.create).not.toBeCalled(); + expect(mockedFleetServerHostService.update).toBeCalledWith( + expect.anything(), + expect.anything(), + 'fleet-internal', + expect.objectContaining({ + proxy_id: 'proxy-test', + }), + { fromPreconfiguration: true, secretHashes: {} } + ); + }); + + it('should update preconfigured fleet server hosts if preconfigured host exists and changed to have ssl', async () => { + const soClient = savedObjectsClientMock.create(); + const esClient = elasticsearchServiceMock.createClusterClient().asInternalUser; + + await createOrUpdatePreconfiguredFleetServerHosts(soClient, esClient, [ + { + id: 'fleet-internal', + name: 'TEST_INTERNAL', + is_default: false, + is_internal: false, + host_urls: ['http://test-internal.fr'], + is_preconfigured: true, + ssl: { + key: 'unsecureKey1', + es_key: 'unsecureKey2', + }, + }, + ]); + + expect(mockedFleetServerHostService.create).not.toBeCalled(); + expect(mockedFleetServerHostService.update).toBeCalledWith( + expect.anything(), + expect.anything(), + 'fleet-internal', + expect.objectContaining({ + ssl: { + key: 'unsecureKey1', + es_key: 'unsecureKey2', + }, + }), + expect.anything() + ); + }); + + it('should update preconfigured fleet server hosts if preconfigured host exists and changed to have secrets', async () => { + const soClient = savedObjectsClientMock.create(); + const esClient = elasticsearchServiceMock.createClusterClient().asInternalUser; + + await createOrUpdatePreconfiguredFleetServerHosts(soClient, esClient, [ + { + id: 'fleet-internal', + name: 'TEST_INTERNAL', + is_default: false, + is_internal: false, + host_urls: ['http://test-internal.fr'], + is_preconfigured: true, + secrets: { + ssl: { + key: 'unsecureKey1', + es_key: 'unsecureKey2', + }, + }, + }, + ]); + + expect(mockedFleetServerHostService.create).not.toBeCalled(); + expect(mockedFleetServerHostService.update).toBeCalledWith( + expect.anything(), + expect.anything(), + 'fleet-internal', + expect.objectContaining({ + secrets: { + ssl: { + key: 'unsecureKey1', + es_key: 'unsecureKey2', + }, + }, + }), + expect.anything() + ); + }); + it('should update preconfigured fleet server hosts if preconfigured host with secrets exists and changes', async () => { + const soClient = savedObjectsClientMock.create(); + const esClient = elasticsearchServiceMock.createClusterClient().asInternalUser; + + await createOrUpdatePreconfiguredFleetServerHosts(soClient, esClient, [ + { + id: 'fleet-with-secrets', + name: 'TEST_SECRETS', + is_default: false, + is_internal: false, + host_urls: ['http://test-internal.fr'], + is_preconfigured: true, + secrets: { + ssl: { + key: 'secretKey', + es_key: 'secretKey2', + }, + }, }, ]); - expect(mockedCreateFleetServerHost).not.toBeCalled(); - expect(mockedUpdateFleetServerHost).toBeCalled(); + expect(mockedFleetServerHostService.create).not.toBeCalled(); + expect(mockedFleetServerHostService.update).toBeCalledWith( + expect.anything(), + expect.anything(), + 'fleet-with-secrets', + expect.objectContaining({ + secrets: { + ssl: { + key: 'secretKey', + es_key: 'secretKey2', + }, + }, + }), + expect.anything() + ); + }); + + it('should not update preconfigured fleet server hosts if no fields changed', async () => { + const soClient = savedObjectsClientMock.create(); + const esClient = elasticsearchServiceMock.createClusterClient().asInternalUser; + + await createOrUpdatePreconfiguredFleetServerHosts(soClient, esClient, [ + { + id: 'fleet-internal', + name: 'TEST_INTERNAL', + is_default: false, + is_internal: false, + host_urls: ['http://test-internal.fr'], + is_preconfigured: true, + }, + ]); + expect(mockedFleetServerHostService.create).not.toBeCalled(); + expect(mockedFleetServerHostService.update).not.toBeCalled(); + }); + + it('should not update preconfigured fleet server hosts with secrets if no fields changed', async () => { + const soClient = savedObjectsClientMock.create(); + const esClient = elasticsearchServiceMock.createClusterClient().asInternalUser; + + await createOrUpdatePreconfiguredFleetServerHosts(soClient, esClient, [ + { + id: 'fleet-with-secrets', + name: 'TEST_SECRETS', + is_default: false, + is_internal: false, + host_urls: ['http://test-internal.fr'], + is_preconfigured: true, + secrets: { + ssl: { + key: 'secretKey', + }, + }, + }, + ]); + expect(mockedFleetServerHostService.create).not.toBeCalled(); + expect(mockedFleetServerHostService.update).not.toBeCalled(); }); }); diff --git a/x-pack/platform/plugins/shared/fleet/server/services/preconfiguration/fleet_server_host.ts b/x-pack/platform/plugins/shared/fleet/server/services/preconfiguration/fleet_server_host.ts index aae140b5843b0..8245a0fce532c 100644 --- a/x-pack/platform/plugins/shared/fleet/server/services/preconfiguration/fleet_server_host.ts +++ b/x-pack/platform/plugins/shared/fleet/server/services/preconfiguration/fleet_server_host.ts @@ -15,17 +15,12 @@ import { FleetError } from '../../errors'; import type { FleetServerHost } from '../../types'; import { appContextService } from '../app_context'; -import { - bulkGetFleetServerHosts, - createFleetServerHost, - deleteFleetServerHost, - listFleetServerHosts, - updateFleetServerHost, - getDefaultFleetServerHost, -} from '../fleet_server_host'; +import { fleetServerHostService } from '../fleet_server_host'; + import { agentPolicyService } from '../agent_policy'; import { isDifferent } from './utils'; +import { hashSecret, isSecretDifferent } from './outputs'; export function getCloudFleetServersHosts() { const cloudSetup = appContextService.getCloud(); @@ -81,7 +76,7 @@ export async function ensurePreconfiguredFleetServerHosts( esClient, preconfiguredFleetServerHosts ); - await createCloudFleetServerHostIfNeeded(soClient); + await createCloudFleetServerHostIfNeeded(soClient, esClient); await cleanPreconfiguredFleetServerHosts(soClient, esClient, preconfiguredFleetServerHosts); } @@ -90,7 +85,7 @@ export async function createOrUpdatePreconfiguredFleetServerHosts( esClient: ElasticsearchClient, preconfiguredFleetServerHosts: FleetServerHost[] ) { - const existingFleetServerHosts = await bulkGetFleetServerHosts( + const existingFleetServerHosts = await fleetServerHostService.bulkGet( soClient, preconfiguredFleetServerHosts.map(({ id }) => id), { ignoreNotFound: true } @@ -105,36 +100,37 @@ export async function createOrUpdatePreconfiguredFleetServerHosts( const { id, ...data } = preconfiguredFleetServerHost; const isCreate = !existingHost; + const isUpdateWithNewData = - (existingHost && - (!existingHost.is_preconfigured || - existingHost.is_default !== preconfiguredFleetServerHost.is_default || - existingHost.name !== preconfiguredFleetServerHost.name || - isDifferent(existingHost.is_internal, preconfiguredFleetServerHost.is_internal) || - isDifferent( - existingHost.host_urls.map(normalizeHostsForAgents), - preconfiguredFleetServerHost.host_urls.map(normalizeHostsForAgents) - ))) || - isDifferent(existingHost?.proxy_id, preconfiguredFleetServerHost.proxy_id); + existingHost && + (!existingHost.is_preconfigured || + (await isPreconfiguredFleetServerHostDifferentFromCurrent( + existingHost, + preconfiguredFleetServerHost + ))); + + const secretHashes = await hashSecrets(preconfiguredFleetServerHost); if (isCreate) { - await createFleetServerHost( + await fleetServerHostService.create( soClient, + esClient, { ...data, is_preconfigured: true, }, - { id, overwrite: true, fromPreconfiguration: true } + { id, overwrite: true, fromPreconfiguration: true, secretHashes } ); } else if (isUpdateWithNewData) { - await updateFleetServerHost( + await fleetServerHostService.update( soClient, + esClient, id, { ...data, is_preconfigured: true, }, - { fromPreconfiguration: true } + { fromPreconfiguration: true, secretHashes } ); if (data.is_default) { await agentPolicyService.bumpAllAgentPolicies(esClient); @@ -146,16 +142,20 @@ export async function createOrUpdatePreconfiguredFleetServerHosts( ); } -export async function createCloudFleetServerHostIfNeeded(soClient: SavedObjectsClientContract) { +export async function createCloudFleetServerHostIfNeeded( + soClient: SavedObjectsClientContract, + esClient: ElasticsearchClient +) { const cloudServerHosts = getCloudFleetServersHosts(); if (!cloudServerHosts || cloudServerHosts.length === 0) { return; } - const defaultFleetServerHost = await getDefaultFleetServerHost(soClient); + const defaultFleetServerHost = await fleetServerHostService.getDefaultFleetServerHost(soClient); if (!defaultFleetServerHost) { - await createFleetServerHost( + await fleetServerHostService.create( soClient, + esClient, { name: 'Default', is_default: true, @@ -172,7 +172,7 @@ export async function cleanPreconfiguredFleetServerHosts( esClient: ElasticsearchClient, preconfiguredFleetServerHosts: FleetServerHost[] ) { - const existingFleetServerHosts = await listFleetServerHosts(soClient); + const existingFleetServerHosts = await fleetServerHostService.list(soClient); const existingPreconfiguredHosts = existingFleetServerHosts.items.filter( (o) => o.is_preconfigured === true ); @@ -186,8 +186,9 @@ export async function cleanPreconfiguredFleetServerHosts( } if (existingFleetServerHost.is_default) { - await updateFleetServerHost( + await fleetServerHostService.update( soClient, + esClient, existingFleetServerHost.id, { is_preconfigured: false }, { @@ -195,7 +196,7 @@ export async function cleanPreconfiguredFleetServerHosts( } ); } else { - await deleteFleetServerHost(soClient, esClient, existingFleetServerHost.id, { + await fleetServerHostService.delete(soClient, esClient, existingFleetServerHost.id, { fromPreconfiguration: true, }); } @@ -207,3 +208,53 @@ function getConfigFleetServerHosts(config?: FleetConfigType) { ? config?.agents?.fleet_server?.hosts : undefined; } + +async function hashSecrets(preconfiguredFleetServerHost: FleetServerHost) { + let secrets: Record = {}; + if (typeof preconfiguredFleetServerHost.secrets?.ssl?.key === 'string') { + const key = await hashSecret(preconfiguredFleetServerHost.secrets?.ssl?.key); + secrets = { + ssl: { + key, + }, + }; + } + if (typeof preconfiguredFleetServerHost.secrets?.ssl?.key === 'string') { + const esKey = await hashSecret(preconfiguredFleetServerHost.secrets?.ssl?.key); + secrets = { + ...(secrets ? secrets : {}), + ssl: { es_key: esKey }, + }; + } + return secrets; +} + +async function isPreconfiguredFleetServerHostDifferentFromCurrent( + existingFleetServerHost: FleetServerHost, + preconfiguredFleetServerHost: Partial +): Promise { + const secretFieldsAreDifferent = async (): Promise => { + const sslKeyHashIsDifferent = await isSecretDifferent( + preconfiguredFleetServerHost.secrets?.ssl?.key, + existingFleetServerHost.secrets?.ssl?.key + ); + const sslESKeyHashIsDifferent = await isSecretDifferent( + preconfiguredFleetServerHost.secrets?.ssl?.es_key, + existingFleetServerHost.secrets?.ssl?.es_key + ); + return sslKeyHashIsDifferent || sslESKeyHashIsDifferent; + }; + + return ( + existingFleetServerHost.is_default !== preconfiguredFleetServerHost.is_default || + existingFleetServerHost.name !== preconfiguredFleetServerHost.name || + isDifferent(existingFleetServerHost.is_internal, preconfiguredFleetServerHost.is_internal) || + isDifferent( + existingFleetServerHost.host_urls.map(normalizeHostsForAgents), + preconfiguredFleetServerHost?.host_urls?.map(normalizeHostsForAgents) + ) || + isDifferent(existingFleetServerHost?.proxy_id, preconfiguredFleetServerHost.proxy_id) || + isDifferent(existingFleetServerHost?.ssl, preconfiguredFleetServerHost?.ssl) || + secretFieldsAreDifferent() + ); +} diff --git a/x-pack/platform/plugins/shared/fleet/server/services/preconfiguration/outputs.ts b/x-pack/platform/plugins/shared/fleet/server/services/preconfiguration/outputs.ts index 53b992f4108c8..ee7c693e33176 100644 --- a/x-pack/platform/plugins/shared/fleet/server/services/preconfiguration/outputs.ts +++ b/x-pack/platform/plugins/shared/fleet/server/services/preconfiguration/outputs.ts @@ -19,7 +19,7 @@ import type { PreconfiguredOutput, Output, NewOutput, - OutputSecret, + SOSecret, KafkaOutput, NewRemoteElasticsearchOutput, } from '../../../common/types'; @@ -255,13 +255,13 @@ export async function cleanPreconfiguredOutputs( } } -const hasHash = (secret?: OutputSecret): secret is { id: string; hash: string } => { +const hasHash = (secret?: SOSecret): secret is { id: string; hash: string } => { return !!secret && typeof secret !== 'string' && !!secret.hash; }; -async function isSecretDifferent( - preconfiguredValue: OutputSecret | undefined, - existingSecret: OutputSecret | undefined +export async function isSecretDifferent( + preconfiguredValue: SOSecret | undefined, + existingSecret: SOSecret | undefined ): Promise { if (!existingSecret && preconfiguredValue) { return true; diff --git a/x-pack/platform/plugins/shared/fleet/server/services/secrets.test.ts b/x-pack/platform/plugins/shared/fleet/server/services/secrets.test.ts index d0528dc8f4a48..0db43d86f7889 100644 --- a/x-pack/platform/plugins/shared/fleet/server/services/secrets.test.ts +++ b/x-pack/platform/plugins/shared/fleet/server/services/secrets.test.ts @@ -24,10 +24,12 @@ import { appContextService } from './app_context'; import { getPolicySecretPaths, diffSecretPaths, - diffOutputSecretPaths, + diffSOSecretPaths, extractAndWriteSecrets, extractAndUpdateSecrets, extractAndUpdateOutputSecrets, + extractAndWriteFleetServerHostsSecrets, + extractAndUpdateFleetServerHostsSecrets, } from './secrets'; describe('secrets', () => { @@ -1440,11 +1442,152 @@ describe('secrets', () => { expect(result.secretsToDelete).toEqual([{ id: 'token' }]); }); }); + describe('extractAndWriteFleetServerHostsSecrets', () => { + const esClientMock = elasticsearchServiceMock.createInternalClient(); + + esClientMock.transport.request.mockImplementation(async (req) => { + return { + id: uuidv4(), + }; + }); + + beforeEach(() => { + esClientMock.transport.request.mockClear(); + }); + + it('should create new secrets', async () => { + const fleetServerHost = { + id: 'id1', + name: 'fleet server 1', + host_urls: [], + is_default: false, + is_preconfigured: false, + ssl: { + certificate_authorities: ['cert authorities'], + es_certificate_authorities: ['es cert authorities'], + certificate: 'path/to/cert', + es_certificate: 'path/to/EScert', + }, + secrets: { + ssl: { + key: 'key1', + es_key: 'key2', + }, + }, + }; + const res = await extractAndWriteFleetServerHostsSecrets({ + fleetServerHost, + esClient: esClientMock, + }); + expect(res.fleetServerHost).toEqual({ + ...fleetServerHost, + secrets: { + ssl: { + es_key: { + id: expect.any(String), + }, + key: { + id: expect.any(String), + }, + }, + }, + }); + expect(res.secretReferences).toEqual([{ id: expect.anything() }, { id: expect.anything() }]); + }); + }); + + describe('extractAndUpdateFleetServerHostsSecrets', () => { + const esClientMock = elasticsearchServiceMock.createInternalClient(); + + esClientMock.transport.request.mockImplementation(async (req) => { + return { + id: uuidv4(), + }; + }); + + beforeEach(() => { + esClientMock.transport.request.mockClear(); + }); + + it('should update existing secrets', async () => { + const fleetServerHost = { + id: 'id1', + name: 'fleet server 1', + host_urls: [], + is_default: false, + is_preconfigured: false, + ssl: { + certificate_authorities: ['cert authorities'], + es_certificate_authorities: ['es cert authorities'], + certificate: 'path/to/cert', + es_certificate: 'path/to/EScert', + }, + secrets: { + ssl: { + key: 'key1', + es_key: 'key2', + }, + }, + }; + const updatedFleetServerHost = { + ...fleetServerHost, + secrets: { + ssl: { + key: 'newkey1', + es_key: 'newkey2', + }, + }, + }; + const res = await extractAndUpdateFleetServerHostsSecrets({ + oldFleetServerHost: fleetServerHost, + fleetServerHostUpdate: updatedFleetServerHost, + esClient: esClientMock, + }); + expect(res.fleetServerHostUpdate).toEqual({ + ...fleetServerHost, + secrets: { + ssl: { + es_key: { + id: expect.any(String), + }, + key: { + id: expect.any(String), + }, + }, + }, + }); + expect(res.secretReferences).toEqual([{ id: expect.anything() }, { id: expect.anything() }]); + expect(res.secretsToDelete).toEqual([{ id: undefined }, { id: undefined }]); + }); + }); }); -describe('diffOutputSecretPaths', () => { +describe('diffSOSecretPaths', () => { + const paths1 = [ + { + path: 'somepath1', + value: { + id: 'secret-1', + }, + }, + { + path: 'somepath2', + value: { + id: 'secret-2', + }, + }, + ]; + + const paths2 = [ + paths1[0], + { + path: 'somepath2', + value: 'newvalue', + }, + ]; + it('should return empty array if no secrets', () => { - expect(diffOutputSecretPaths([], [])).toEqual({ + expect(diffSOSecretPaths([], [])).toEqual({ toCreate: [], toDelete: [], noChange: [], @@ -1459,7 +1602,7 @@ describe('diffOutputSecretPaths', () => { }, }, ]; - expect(diffOutputSecretPaths(paths, paths)).toEqual({ + expect(diffSOSecretPaths(paths, paths)).toEqual({ toCreate: [], toDelete: [], noChange: paths, @@ -1487,37 +1630,14 @@ describe('diffOutputSecretPaths', () => { }, ]; - expect(diffOutputSecretPaths(paths, paths.slice().reverse())).toEqual({ + expect(diffSOSecretPaths(paths, paths.slice().reverse())).toEqual({ toCreate: [], toDelete: [], noChange: paths, }); }); it('single secret modified', () => { - const paths1 = [ - { - path: 'somepath1', - value: { - id: 'secret-1', - }, - }, - { - path: 'somepath2', - value: { - id: 'secret-2', - }, - }, - ]; - - const paths2 = [ - paths1[0], - { - path: 'somepath2', - value: 'newvalue', - }, - ]; - - expect(diffOutputSecretPaths(paths1, paths2)).toEqual({ + expect(diffSOSecretPaths(paths1, paths2)).toEqual({ toCreate: [ { path: 'somepath2', @@ -1536,7 +1656,7 @@ describe('diffOutputSecretPaths', () => { }); }); it('double secret modified', () => { - const paths1 = [ + const pathsDouble1 = [ { path: 'somepath1', value: { @@ -1551,7 +1671,7 @@ describe('diffOutputSecretPaths', () => { }, ]; - const paths2 = [ + const pathsDouble2 = [ { path: 'somepath1', value: 'newvalue1', @@ -1562,7 +1682,7 @@ describe('diffOutputSecretPaths', () => { }, ]; - expect(diffOutputSecretPaths(paths1, paths2)).toEqual({ + expect(diffSOSecretPaths(pathsDouble1, pathsDouble2)).toEqual({ toCreate: [ { path: 'somepath1', @@ -1590,9 +1710,8 @@ describe('diffOutputSecretPaths', () => { noChange: [], }); }); - it('single secret added', () => { - const paths1 = [ + const pathsSingle1 = [ { path: 'somepath1', value: { @@ -1601,7 +1720,7 @@ describe('diffOutputSecretPaths', () => { }, ]; - const paths2 = [ + const pathsSingle2 = [ paths1[0], { path: 'somepath2', @@ -1609,7 +1728,7 @@ describe('diffOutputSecretPaths', () => { }, ]; - expect(diffOutputSecretPaths(paths1, paths2)).toEqual({ + expect(diffSOSecretPaths(pathsSingle1, pathsSingle2)).toEqual({ toCreate: [ { path: 'somepath2', diff --git a/x-pack/platform/plugins/shared/fleet/server/services/secrets.ts b/x-pack/platform/plugins/shared/fleet/server/services/secrets.ts index acbd9073e8f2e..cb59c57b2dc98 100644 --- a/x-pack/platform/plugins/shared/fleet/server/services/secrets.ts +++ b/x-pack/platform/plugins/shared/fleet/server/services/secrets.ts @@ -11,10 +11,12 @@ import { get, keyBy } from 'lodash'; import { set } from '@kbn/safer-lodash-set'; import type { + FleetServerHost, + SOSecretPath, KafkaOutput, + NewFleetServerHost, NewRemoteElasticsearchOutput, Output, - OutputSecretPath, } from '../../common/types'; import { packageHasNoPolicyTemplates } from '../../common/services/policy_template'; @@ -256,138 +258,6 @@ export async function extractAndWriteSecrets(opts: { }; } -export async function extractAndWriteOutputSecrets(opts: { - output: NewOutput; - esClient: ElasticsearchClient; - secretHashes?: Record; -}): Promise<{ output: NewOutput; secretReferences: PolicySecretReference[] }> { - const { output, esClient, secretHashes = {} } = opts; - - const secretPaths = getOutputSecretPaths(output.type, output).filter( - (path) => typeof path.value === 'string' - ); - - if (secretPaths.length === 0) { - return { output, secretReferences: [] }; - } - - const secrets = await createSecrets({ - esClient, - values: secretPaths.map(({ value }) => value as string), - }); - - const outputWithSecretRefs = JSON.parse(JSON.stringify(output)); - secretPaths.forEach((secretPath, i) => { - const pathWithoutPrefix = secretPath.path.replace('secrets.', ''); - const maybeHash = get(secretHashes, pathWithoutPrefix); - set(outputWithSecretRefs, secretPath.path, { - id: secrets[i].id, - ...(typeof maybeHash === 'string' && { hash: maybeHash }), - }); - }); - - return { - output: outputWithSecretRefs, - secretReferences: secrets.map(({ id }) => ({ id })), - }; -} - -function getOutputSecretPaths( - outputType: NewOutput['type'], - output: NewOutput | Partial -): OutputSecretPath[] { - const outputSecretPaths: OutputSecretPath[] = []; - - if (outputType === 'kafka') { - const kafkaOutput = output as KafkaOutput; - if (kafkaOutput?.secrets?.password) { - outputSecretPaths.push({ - path: 'secrets.password', - value: kafkaOutput.secrets.password, - }); - } - } - - if (outputType === 'remote_elasticsearch') { - const remoteESOutput = output as NewRemoteElasticsearchOutput; - if (remoteESOutput.secrets?.service_token) { - outputSecretPaths.push({ - path: 'secrets.service_token', - value: remoteESOutput.secrets.service_token, - }); - } - if (remoteESOutput.secrets?.kibana_api_key) { - outputSecretPaths.push({ - path: 'secrets.kibana_api_key', - value: remoteESOutput.secrets.kibana_api_key, - }); - } - } - - // common to all outputs - if (output?.secrets?.ssl?.key) { - outputSecretPaths.push({ - path: 'secrets.ssl.key', - value: output.secrets.ssl.key, - }); - } - - return outputSecretPaths; -} - -export async function deleteOutputSecrets(opts: { - output: Output; - esClient: ElasticsearchClient; -}): Promise { - const { output, esClient } = opts; - - const outputType = output.type; - const outputSecretPaths = getOutputSecretPaths(outputType, output); - - if (outputSecretPaths.length === 0) { - return Promise.resolve(); - } - - const secretIds = outputSecretPaths.map(({ value }) => (value as { id: string }).id); - - try { - return deleteSecrets({ esClient, ids: secretIds }); - } catch (err) { - appContextService.getLogger().warn(`Error deleting secrets: ${err}`); - } -} - -export function getOutputSecretReferences(output: Output): PolicySecretReference[] { - const outputSecretPaths: PolicySecretReference[] = []; - - if (typeof output.secrets?.ssl?.key === 'object') { - outputSecretPaths.push({ - id: output.secrets.ssl.key.id, - }); - } - - if (output.type === 'kafka' && typeof output?.secrets?.password === 'object') { - outputSecretPaths.push({ - id: output.secrets.password.id, - }); - } - - if (output.type === 'remote_elasticsearch') { - if (typeof output?.secrets?.service_token === 'object') { - outputSecretPaths.push({ - id: output.secrets.service_token.id, - }); - } - if (typeof output?.secrets?.kibana_api_key === 'object') { - outputSecretPaths.push({ - id: output.secrets.kibana_api_key.id, - }); - } - } - - return outputSecretPaths; -} - export async function extractAndUpdateSecrets(opts: { oldPackagePolicy: PackagePolicy; packagePolicyUpdate: UpdatePackagePolicy; @@ -443,59 +313,6 @@ export async function extractAndUpdateSecrets(opts: { secretsToDelete, }; } -export async function extractAndUpdateOutputSecrets(opts: { - oldOutput: Output; - outputUpdate: Partial; - esClient: ElasticsearchClient; - secretHashes?: Record; -}): Promise<{ - outputUpdate: Partial; - secretReferences: PolicySecretReference[]; - secretsToDelete: PolicySecretReference[]; -}> { - const { oldOutput, outputUpdate, esClient, secretHashes } = opts; - const outputType = outputUpdate.type || oldOutput.type; - const oldSecretPaths = getOutputSecretPaths(oldOutput.type, oldOutput); - const updatedSecretPaths = getOutputSecretPaths(outputType, outputUpdate); - - if (!oldSecretPaths.length && !updatedSecretPaths.length) { - return { outputUpdate, secretReferences: [], secretsToDelete: [] }; - } - - const { toCreate, toDelete, noChange } = diffOutputSecretPaths( - oldSecretPaths, - updatedSecretPaths - ); - - const createdSecrets = await createSecrets({ - esClient, - values: toCreate.map((secretPath) => secretPath.value as string), - }); - - const outputWithSecretRefs = JSON.parse(JSON.stringify(outputUpdate)); - toCreate.forEach((secretPath, i) => { - const pathWithoutPrefix = secretPath.path.replace('secrets.', ''); - const maybeHash = get(secretHashes, pathWithoutPrefix); - - set(outputWithSecretRefs, secretPath.path, { - id: createdSecrets[i].id, - ...(typeof maybeHash === 'string' && { hash: maybeHash }), - }); - }); - - const secretReferences = [ - ...noChange.map((secretPath) => ({ id: (secretPath.value as { id: string }).id })), - ...createdSecrets.map(({ id }) => ({ id })), - ]; - - return { - outputUpdate: outputWithSecretRefs, - secretReferences, - secretsToDelete: toDelete.map((secretPath) => ({ - id: (secretPath.value as { id: string }).id, - })), - }; -} function isSecretVar(varDef: RegistryVarsEntry) { return varDef.secret === true; @@ -547,38 +364,6 @@ export function diffSecretPaths( return { toCreate: [...toCreate, ...remainingNewPaths], toDelete, noChange }; } -export function diffOutputSecretPaths( - oldPaths: OutputSecretPath[], - newPaths: OutputSecretPath[] -): { toCreate: OutputSecretPath[]; toDelete: OutputSecretPath[]; noChange: OutputSecretPath[] } { - const toCreate: OutputSecretPath[] = []; - const toDelete: OutputSecretPath[] = []; - const noChange: OutputSecretPath[] = []; - const newPathsByPath = keyBy(newPaths, 'path'); - - for (const oldPath of oldPaths) { - if (!newPathsByPath[oldPath.path]) { - toDelete.push(oldPath); - } - - const newPath = newPathsByPath[oldPath.path]; - if (newPath && newPath.value) { - const newValue = newPath.value; - if (typeof newValue === 'string') { - toCreate.push(newPath); - toDelete.push(oldPath); - } else { - noChange.push(newPath); - } - } - delete newPathsByPath[oldPath.path]; - } - - const remainingNewPaths = Object.values(newPathsByPath); - - return { toCreate: [...toCreate, ...remainingNewPaths], toDelete, noChange }; -} - // Given a package policy and a package, // returns an array of lodash style paths to all secrets and their current values export function getPolicySecretPaths( @@ -850,3 +635,393 @@ function getPolicyWithSecretReferences( return result; } + +/** + * Common functions for SO objects + * Currently used for outputs and fleet server hosts + */ + +/** + * diffSOSecretPaths + * Makes the diff betwwen old and new secrets paths + */ +export function diffSOSecretPaths( + oldPaths: SOSecretPath[], + newPaths: SOSecretPath[] +): { toCreate: SOSecretPath[]; toDelete: SOSecretPath[]; noChange: SOSecretPath[] } { + const toCreate: SOSecretPath[] = []; + const toDelete: SOSecretPath[] = []; + const noChange: SOSecretPath[] = []; + const newPathsByPath = keyBy(newPaths, 'path'); + + for (const oldPath of oldPaths) { + if (!newPathsByPath[oldPath.path]) { + toDelete.push(oldPath); + } + + const newPath = newPathsByPath[oldPath.path]; + if (newPath && newPath.value) { + const newValue = newPath.value; + if (typeof newValue === 'string') { + toCreate.push(newPath); + toDelete.push(oldPath); + } else { + noChange.push(newPath); + } + } + delete newPathsByPath[oldPath.path]; + } + + const remainingNewPaths = Object.values(newPathsByPath); + + return { toCreate: [...toCreate, ...remainingNewPaths], toDelete, noChange }; +} + +/** + * deleteSOSecrets + * Given an array of secret paths, deletes the corresponding secrets + */ +export async function deleteSOSecrets( + esClient: ElasticsearchClient, + secretPaths: SOSecretPath[] +): Promise { + if (secretPaths.length === 0) { + return Promise.resolve(); + } + + const secretIds = secretPaths.map(({ value }) => (value as { id: string }).id); + + try { + return deleteSecrets({ esClient, ids: secretIds }); + } catch (err) { + appContextService.getLogger().warn(`Error deleting secrets: ${err}`); + } +} + +/** + * extractAndWriteSOSecrets + * Takes a generic object T and its secret paths + * Creates new secrets and returns the references + */ +async function extractAndWriteSOSecrets(opts: { + soObject: T; + esClient: ElasticsearchClient; + secretPaths: SOSecretPath[]; + secretHashes?: Record; +}): Promise<{ soObjectWithSecrets: T; secretReferences: PolicySecretReference[] }> { + const { soObject, esClient, secretPaths, secretHashes = {} } = opts; + + if (secretPaths.length === 0) { + return { soObjectWithSecrets: soObject, secretReferences: [] }; + } + + const secrets = await createSecrets({ + esClient, + values: secretPaths.map(({ value }) => value as string), + }); + + const objectWithSecretRefs = JSON.parse(JSON.stringify(soObject)); + secretPaths.forEach((secretPath, i) => { + const pathWithoutPrefix = secretPath.path.replace('secrets.', ''); + const maybeHash = get(secretHashes, pathWithoutPrefix); + set(objectWithSecretRefs, secretPath.path, { + id: secrets[i].id, + ...(typeof maybeHash === 'string' && { hash: maybeHash }), + }); + }); + + return { + soObjectWithSecrets: objectWithSecretRefs, + secretReferences: secrets.map(({ id }) => ({ id })), + }; +} + +/** + * extractAndUpdateSOSecrets + * Takes a generic object T to update and its old and new secret paths + * Updates secrets and returns the references + */ +async function extractAndUpdateSOSecrets(opts: { + updatedSoObject: Partial; + oldSecretPaths: SOSecretPath[]; + updatedSecretPaths: SOSecretPath[]; + esClient: ElasticsearchClient; + secretHashes?: Record; +}): Promise<{ + updatedSoObject: Partial; + secretReferences: PolicySecretReference[]; + secretsToDelete: PolicySecretReference[]; +}> { + const { updatedSoObject, oldSecretPaths, updatedSecretPaths, esClient, secretHashes } = opts; + + if (!oldSecretPaths.length && !updatedSecretPaths.length) { + return { updatedSoObject, secretReferences: [], secretsToDelete: [] }; + } + + const { toCreate, toDelete, noChange } = diffSOSecretPaths(oldSecretPaths, updatedSecretPaths); + + const createdSecrets = await createSecrets({ + esClient, + values: toCreate.map((secretPath) => secretPath.value as string), + }); + + const soObjectWithSecretRefs = JSON.parse(JSON.stringify(updatedSoObject)); + toCreate.forEach((secretPath, i) => { + const pathWithoutPrefix = secretPath.path.replace('secrets.', ''); + const maybeHash = get(secretHashes, pathWithoutPrefix); + + set(soObjectWithSecretRefs, secretPath.path, { + id: createdSecrets[i].id, + ...(typeof maybeHash === 'string' && { hash: maybeHash }), + }); + }); + + const secretReferences = [ + ...noChange.map((secretPath) => ({ id: (secretPath.value as { id: string }).id })), + ...createdSecrets.map(({ id }) => ({ id })), + ]; + + return { + updatedSoObject: soObjectWithSecretRefs, + secretReferences, + secretsToDelete: toDelete.map((secretPath) => ({ + id: (secretPath.value as { id: string }).id, + })), + }; +} + +// Outputs functions +export async function extractAndWriteOutputSecrets(opts: { + output: NewOutput; + esClient: ElasticsearchClient; + secretHashes?: Record; +}): Promise<{ output: NewOutput; secretReferences: PolicySecretReference[] }> { + const { output, esClient, secretHashes = {} } = opts; + const secretPaths = getOutputSecretPaths(output.type, output).filter( + (path) => typeof path.value === 'string' + ); + const secretRes = await extractAndWriteSOSecrets({ + soObject: output, + secretPaths, + esClient, + secretHashes, + }); + return { output: secretRes.soObjectWithSecrets, secretReferences: secretRes.secretReferences }; +} + +export async function extractAndUpdateOutputSecrets(opts: { + oldOutput: Output; + outputUpdate: Partial; + esClient: ElasticsearchClient; + secretHashes?: Record; +}): Promise<{ + outputUpdate: Partial; + secretReferences: PolicySecretReference[]; + secretsToDelete: PolicySecretReference[]; +}> { + const { oldOutput, outputUpdate, esClient, secretHashes } = opts; + const outputType = outputUpdate.type || oldOutput.type; + const oldSecretPaths = getOutputSecretPaths(oldOutput.type, oldOutput); + const updatedSecretPaths = getOutputSecretPaths(outputType, outputUpdate); + + const secretRes = await extractAndUpdateSOSecrets({ + updatedSoObject: outputUpdate, + oldSecretPaths, + updatedSecretPaths, + esClient, + secretHashes: outputUpdate.is_preconfigured ? secretHashes : undefined, + }); + return { + outputUpdate: secretRes.updatedSoObject, + secretReferences: secretRes.secretReferences, + secretsToDelete: secretRes.secretsToDelete, + }; +} + +function getOutputSecretPaths( + outputType: NewOutput['type'], + output: NewOutput | Partial +): SOSecretPath[] { + const outputSecretPaths: SOSecretPath[] = []; + + if (outputType === 'kafka') { + const kafkaOutput = output as KafkaOutput; + if (kafkaOutput?.secrets?.password) { + outputSecretPaths.push({ + path: 'secrets.password', + value: kafkaOutput.secrets.password, + }); + } + } + + if (outputType === 'remote_elasticsearch') { + const remoteESOutput = output as NewRemoteElasticsearchOutput; + if (remoteESOutput.secrets?.service_token) { + outputSecretPaths.push({ + path: 'secrets.service_token', + value: remoteESOutput.secrets.service_token, + }); + } + if (remoteESOutput.secrets?.kibana_api_key) { + outputSecretPaths.push({ + path: 'secrets.kibana_api_key', + value: remoteESOutput.secrets.kibana_api_key, + }); + } + } + + // common to all outputs + if (output?.secrets?.ssl?.key) { + outputSecretPaths.push({ + path: 'secrets.ssl.key', + value: output.secrets.ssl.key, + }); + } + + return outputSecretPaths; +} + +export async function deleteOutputSecrets(opts: { + output: Output; + esClient: ElasticsearchClient; +}): Promise { + const { output, esClient } = opts; + + const outputType = output.type; + const outputSecretPaths = getOutputSecretPaths(outputType, output); + + await deleteSOSecrets(esClient, outputSecretPaths); +} + +export function getOutputSecretReferences(output: Output): PolicySecretReference[] { + const outputSecretPaths: PolicySecretReference[] = []; + + if (typeof output.secrets?.ssl?.key === 'object') { + outputSecretPaths.push({ + id: output.secrets.ssl.key.id, + }); + } + + if (output.type === 'kafka' && typeof output?.secrets?.password === 'object') { + outputSecretPaths.push({ + id: output.secrets.password.id, + }); + } + + if (output.type === 'remote_elasticsearch') { + if (typeof output?.secrets?.service_token === 'object') { + outputSecretPaths.push({ + id: output.secrets.service_token.id, + }); + } + if (typeof output?.secrets?.kibana_api_key === 'object') { + outputSecretPaths.push({ + id: output.secrets.kibana_api_key.id, + }); + } + } + + return outputSecretPaths; +} +// Fleet server hosts functions +function getFleetServerHostsSecretPaths( + fleetServerHost: NewFleetServerHost | Partial +): SOSecretPath[] { + const secretPaths: SOSecretPath[] = []; + + if (fleetServerHost?.secrets?.ssl?.key) { + secretPaths.push({ + path: 'secrets.ssl.key', + value: fleetServerHost.secrets.ssl.key, + }); + } + if (fleetServerHost?.secrets?.ssl?.es_key) { + secretPaths.push({ + path: 'secrets.ssl.es_key', + value: fleetServerHost.secrets.ssl.es_key, + }); + } + + return secretPaths; +} + +export async function extractAndWriteFleetServerHostsSecrets(opts: { + fleetServerHost: NewFleetServerHost; + esClient: ElasticsearchClient; + secretHashes?: Record; +}): Promise<{ fleetServerHost: NewFleetServerHost; secretReferences: PolicySecretReference[] }> { + const { fleetServerHost, esClient, secretHashes = {} } = opts; + + const secretPaths = getFleetServerHostsSecretPaths(fleetServerHost).filter( + (path) => typeof path.value === 'string' + ); + const secretRes = await extractAndWriteSOSecrets({ + soObject: fleetServerHost, + secretPaths, + esClient, + secretHashes, + }); + return { + fleetServerHost: secretRes.soObjectWithSecrets, + secretReferences: secretRes.secretReferences, + }; +} + +export async function extractAndUpdateFleetServerHostsSecrets(opts: { + oldFleetServerHost: NewFleetServerHost; + fleetServerHostUpdate: Partial; + esClient: ElasticsearchClient; + secretHashes?: Record; +}): Promise<{ + fleetServerHostUpdate: Partial; + secretReferences: PolicySecretReference[]; + secretsToDelete: PolicySecretReference[]; +}> { + const { oldFleetServerHost, fleetServerHostUpdate, esClient, secretHashes } = opts; + const oldSecretPaths = getFleetServerHostsSecretPaths(oldFleetServerHost); + const updatedSecretPaths = getFleetServerHostsSecretPaths(fleetServerHostUpdate); + const secretsRes = await extractAndUpdateSOSecrets({ + updatedSoObject: fleetServerHostUpdate, + oldSecretPaths, + updatedSecretPaths, + esClient, + secretHashes, + }); + return { + fleetServerHostUpdate: secretsRes.updatedSoObject, + secretReferences: secretsRes.secretReferences, + secretsToDelete: secretsRes.secretsToDelete, + }; +} + +export async function deleteFleetServerHostsSecrets(opts: { + fleetServerHost: NewFleetServerHost; + esClient: ElasticsearchClient; +}): Promise { + const { fleetServerHost, esClient } = opts; + + const secretPaths = getFleetServerHostsSecretPaths(fleetServerHost).filter( + (path) => typeof path.value === 'string' + ); + + await deleteSOSecrets(esClient, secretPaths); +} + +export function getFleetServerHostsSecretReferences( + fleetServerHost: FleetServerHost +): PolicySecretReference[] { + const secretPaths: PolicySecretReference[] = []; + + if (typeof fleetServerHost.secrets?.ssl?.key === 'object') { + secretPaths.push({ + id: fleetServerHost.secrets.ssl.key.id, + }); + } + if (typeof fleetServerHost.secrets?.ssl?.es_key === 'object') { + secretPaths.push({ + id: fleetServerHost.secrets.ssl.es_key.id, + }); + } + + return secretPaths; +} diff --git a/x-pack/platform/plugins/shared/fleet/server/services/settings.test.ts b/x-pack/platform/plugins/shared/fleet/server/services/settings.test.ts index 9a75dc72abf3e..1b2a92c9a95b5 100644 --- a/x-pack/platform/plugins/shared/fleet/server/services/settings.test.ts +++ b/x-pack/platform/plugins/shared/fleet/server/services/settings.test.ts @@ -19,14 +19,14 @@ import { DeleteUnenrolledAgentsPreconfiguredError } from '../errors'; import { appContextService } from './app_context'; import { getSettings, saveSettings, settingsSetup } from './settings'; import { auditLoggingService } from './audit_logging'; -import { listFleetServerHosts } from './fleet_server_host'; +import { fleetServerHostService } from './fleet_server_host'; jest.mock('./app_context'); jest.mock('./audit_logging'); jest.mock('./fleet_server_host'); -const mockListFleetServerHosts = listFleetServerHosts as jest.MockedFunction< - typeof listFleetServerHosts +const mockedFleetServerHostService = fleetServerHostService as jest.Mocked< + typeof fleetServerHostService >; const mockedAuditLoggingService = auditLoggingService as jest.Mocked; const mockedAppContextService = appContextService as jest.Mocked; @@ -36,6 +36,7 @@ mockedAppContextService.getSecuritySetup.mockImplementation(() => ({ describe('settingsSetup', () => { afterEach(() => { + jest.resetAllMocks(); mockedAppContextService.getCloud.mockReset(); mockedAppContextService.getConfig.mockReset(); }); @@ -86,7 +87,7 @@ describe('settingsSetup', () => { type: 'so_type', }); - mockListFleetServerHosts.mockResolvedValueOnce({ + mockedFleetServerHostService.list.mockResolvedValueOnce({ items: [ { id: 'fleet-server-host', @@ -126,7 +127,7 @@ describe('getSettings', () => { total: 1, }); - mockListFleetServerHosts.mockResolvedValueOnce({ + mockedFleetServerHostService.list.mockResolvedValueOnce({ items: [ { id: 'fleet-server-host', @@ -182,6 +183,9 @@ describe('getSettings', () => { }); describe('saveSettings', () => { + afterEach(() => { + mockedAuditLoggingService.writeCustomSoAuditLog.mockReset(); + }); describe('when settings object exists', () => { it('should call audit logger', async () => { const soClient = savedObjectsClientMock.create(); @@ -212,7 +216,7 @@ describe('saveSettings', () => { type: GLOBAL_SETTINGS_SAVED_OBJECT_TYPE, }); - mockListFleetServerHosts.mockResolvedValueOnce({ + mockedFleetServerHostService.list.mockResolvedValueOnce({ items: [ { id: 'fleet-server-host', @@ -229,11 +233,7 @@ describe('saveSettings', () => { await saveSettings(soClient, newData); - expect(mockedAuditLoggingService.writeCustomSoAuditLog).toHaveBeenCalledWith({ - action: 'create', - id: GLOBAL_SETTINGS_ID, - savedObjectType: GLOBAL_SETTINGS_SAVED_OBJECT_TYPE, - }); + expect(mockedAuditLoggingService.writeCustomSoAuditLog).toHaveBeenCalled(); }); describe('when settings object does not exist', () => { @@ -293,7 +293,7 @@ describe('saveSettings', () => { per_page: 10, total: 1, }); - mockListFleetServerHosts.mockResolvedValueOnce({ + mockedFleetServerHostService.list.mockResolvedValueOnce({ items: [ { id: 'fleet-server-host', @@ -349,7 +349,7 @@ describe('saveSettings', () => { per_page: 10, total: 1, }); - mockListFleetServerHosts.mockResolvedValueOnce({ + mockedFleetServerHostService.list.mockResolvedValueOnce({ items: [ { id: 'fleet-server-host', diff --git a/x-pack/platform/plugins/shared/fleet/server/services/setup.test.ts b/x-pack/platform/plugins/shared/fleet/server/services/setup.test.ts index 2527409c43bb6..6dbad62ec71ac 100644 --- a/x-pack/platform/plugins/shared/fleet/server/services/setup.test.ts +++ b/x-pack/platform/plugins/shared/fleet/server/services/setup.test.ts @@ -5,8 +5,11 @@ * 2.0. */ -import type { SavedObjectsClientContract } from '@kbn/core/server'; +import { savedObjectsClientMock } from '@kbn/core/server/mocks'; import type { ElasticsearchClientMock } from '@kbn/core/server/mocks'; +import { loggerMock } from '@kbn/logging-mocks'; + +import type { Logger } from '@kbn/core/server'; import { MessageSigningError } from '../../common/errors'; import { createAppContextStartContractMock, xpackMocks } from '../mocks'; @@ -16,12 +19,19 @@ import { ensurePreconfiguredPackagesAndPolicies } from '.'; import { appContextService } from './app_context'; import { getInstallations } from './epm/packages'; import { setupUpgradeManagedPackagePolicies } from './setup/managed_package_policies'; +import { getPreconfiguredDeleteUnenrolledAgentsSettingFromConfig } from './preconfiguration/delete_unenrolled_agent_setting'; import { setupFleet } from './setup'; +import { isPackageInstalled } from './epm/packages/install'; +import { upgradeAgentPolicySchemaVersion } from './setup/upgrade_agent_policy_schema_version'; +import { createOrUpdateFleetSyncedIntegrationsIndex } from './setup/fleet_synced_integrations'; +jest.mock('./app_context'); jest.mock('./preconfiguration'); jest.mock('./preconfiguration/outputs'); jest.mock('./preconfiguration/fleet_proxies'); jest.mock('./preconfiguration/space_settings'); +jest.mock('./preconfiguration/fleet_server_host'); +jest.mock('./preconfiguration/delete_unenrolled_agent_setting'); jest.mock('./settings'); jest.mock('./output'); jest.mock('./download_source'); @@ -35,6 +45,13 @@ jest.mock('./epm/elasticsearch/template/install', () => { }; }); jest.mock('./backfill_agentless'); +jest.mock('./epm/packages/install'); +jest.mock('./setup/upgrade_agent_policy_schema_version'); +jest.mock('./setup/fleet_synced_integrations'); + +const mockedAppContextService = appContextService as jest.Mocked; + +let mockedLogger: jest.Mocked; const mockedMethodThrowsError = (mockFn: jest.Mock) => mockFn.mockImplementation(() => { @@ -47,17 +64,30 @@ const mockedMethodThrowsCustom = (mockFn: jest.Mock) => throw new CustomTestError('method mocked to throw'); }); +function getMockedSoClient() { + const soClient = savedObjectsClientMock.create(); + mockedAppContextService.getInternalUserSOClient.mockReturnValue(soClient); + + soClient.get.mockResolvedValue({ attributes: {} } as any); + soClient.find.mockResolvedValue({ saved_objects: [] } as any); + soClient.bulkGet.mockResolvedValue({ saved_objects: [] } as any); + soClient.create.mockResolvedValue({ attributes: {} } as any); + soClient.delete.mockResolvedValue({}); + + return soClient; +} + describe('setupFleet', () => { let context: ReturnType; - let soClient: jest.Mocked; let esClient: ElasticsearchClientMock; beforeEach(async () => { context = xpackMocks.createRequestHandlerContext(); // prevents `Logger not set.` and other appContext errors - appContextService.start(createAppContextStartContractMock()); - soClient = context.core.savedObjects.client; + mockedAppContextService.start(createAppContextStartContractMock()); esClient = context.core.elasticsearch.client.asInternalUser; + mockedLogger = loggerMock.create(); + mockedAppContextService.getLogger.mockReturnValue(mockedLogger); (getInstallations as jest.Mock).mockResolvedValueOnce({ saved_objects: [], @@ -68,22 +98,21 @@ describe('setupFleet', () => { }); (setupUpgradeManagedPackagePolicies as jest.Mock).mockResolvedValue([]); - - soClient.get.mockResolvedValue({ attributes: {} } as any); - soClient.find.mockResolvedValue({ saved_objects: [] } as any); - soClient.bulkGet.mockResolvedValue({ saved_objects: [] } as any); - soClient.create.mockResolvedValue({ attributes: {} } as any); - soClient.delete.mockResolvedValue({}); + (getPreconfiguredDeleteUnenrolledAgentsSettingFromConfig as jest.Mock).mockResolvedValue([]); + (isPackageInstalled as jest.Mock).mockResolvedValue(true); + (upgradeAgentPolicySchemaVersion as jest.Mock).mockResolvedValue(undefined); + (createOrUpdateFleetSyncedIntegrationsIndex as jest.Mock).mockResolvedValue(undefined); }); afterEach(async () => { jest.clearAllMocks(); - appContextService.stop(); + mockedAppContextService.stop(); }); describe('should reject with any error thrown underneath', () => { it('SO client throws plain Error', async () => { - mockedMethodThrowsError(setupUpgradeManagedPackagePolicies as jest.Mock); + const soClient = getMockedSoClient(); + mockedMethodThrowsError(getPreconfiguredDeleteUnenrolledAgentsSettingFromConfig as jest.Mock); const setupPromise = setupFleet(soClient, esClient); await expect(setupPromise).rejects.toThrow('SO method mocked to throw'); @@ -91,6 +120,8 @@ describe('setupFleet', () => { }); it('SO client throws other error', async () => { + const soClient = getMockedSoClient(); + mockedMethodThrowsCustom(setupUpgradeManagedPackagePolicies as jest.Mock); const setupPromise = setupFleet(soClient, esClient); @@ -100,33 +131,19 @@ describe('setupFleet', () => { }); it('should not return non fatal errors when upgrade result has no errors', async () => { - const result = await setupFleet(soClient, esClient); - - expect(result).toEqual({ - isInitialized: true, - nonFatalErrors: [], - }); - }); - - it('should return non fatal errors when generateKeyPair result has errors', async () => { - const messageSigninError = new MessageSigningError('test'); - jest - .mocked(appContextService.getMessageSigningService()!.generateKeyPair) - .mockRejectedValue(messageSigninError); + const soClient = getMockedSoClient(); const result = await setupFleet(soClient, esClient); expect(result).toEqual({ isInitialized: true, - nonFatalErrors: [ - { - error: messageSigninError, - }, - ], + nonFatalErrors: [], }); }); it('should create and delete lock if not exists', async () => { + const soClient = getMockedSoClient(); + soClient.get.mockRejectedValue({ isBoom: true, output: { statusCode: 404 } } as any); const result = await setupFleet(soClient, esClient, { useLock: true }); @@ -144,6 +161,8 @@ describe('setupFleet', () => { }); it('should return not initialized if lock exists', async () => { + const soClient = getMockedSoClient(); + const result = await setupFleet(soClient, esClient, { useLock: true }); expect(result).toEqual({ @@ -155,6 +174,8 @@ describe('setupFleet', () => { }); it('should return not initialized if lock could not be created', async () => { + const soClient = getMockedSoClient(); + soClient.get.mockRejectedValue({ isBoom: true, output: { statusCode: 404 } } as any); soClient.create.mockRejectedValue({ isBoom: true, output: { statusCode: 409 } } as any); const result = await setupFleet(soClient, esClient, { useLock: true }); @@ -167,6 +188,8 @@ describe('setupFleet', () => { }); it('should delete previous lock if created more than 1 hour ago', async () => { + const soClient = getMockedSoClient(); + soClient.get.mockResolvedValue({ attributes: { started_at: new Date(Date.now() - 60 * 60 * 1000 - 1000).toISOString() }, } as any); @@ -180,4 +203,28 @@ describe('setupFleet', () => { expect(soClient.create).toHaveBeenCalled(); expect(soClient.delete).toHaveBeenCalledTimes(2); }); + + it('should return non fatal errors when generateKeyPair result has errors', async () => { + const soClient = getMockedSoClient(); + + const messageSigningError = new MessageSigningError('test'); + mockedAppContextService.getMessageSigningService.mockImplementation(() => ({ + generateKeyPair: jest.fn().mockRejectedValueOnce(messageSigningError), + rotateKeyPair: jest.fn(), + isEncryptionAvailable: true, + sign: jest.fn(), + getPublicKey: jest.fn(), + })); + + const result = await setupFleet(soClient, esClient); + + expect(result).toEqual({ + isInitialized: true, + nonFatalErrors: [ + { + error: messageSigningError, + }, + ], + }); + }); }); diff --git a/x-pack/platform/plugins/shared/fleet/server/services/setup.ts b/x-pack/platform/plugins/shared/fleet/server/services/setup.ts index f8d01840f012a..b57369be072e7 100644 --- a/x-pack/platform/plugins/shared/fleet/server/services/setup.ts +++ b/x-pack/platform/plugins/shared/fleet/server/services/setup.ts @@ -186,7 +186,7 @@ async function createSetupSideEffects( let packages = packagesOrUndefined ?? []; logger.debug('Setting Fleet server config'); - await migrateSettingsToFleetServerHost(soClient); + await migrateSettingsToFleetServerHost(soClient, esClient); logger.debug('Setting up Fleet download source'); const defaultDownloadSource = await downloadSourceService.ensureDefault(soClient); // Need to be done before outputs and fleet server hosts as these object can reference a proxy diff --git a/x-pack/platform/plugins/shared/fleet/server/tasks/sync_integrations_on_remote.test.ts b/x-pack/platform/plugins/shared/fleet/server/tasks/sync_integrations_on_remote.test.ts new file mode 100644 index 0000000000000..05ffd0fa7cbae --- /dev/null +++ b/x-pack/platform/plugins/shared/fleet/server/tasks/sync_integrations_on_remote.test.ts @@ -0,0 +1,407 @@ +/* + * 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 { PackageNotFoundError } from '../errors'; +import { outputService } from '../services'; + +import { syncIntegrationsOnRemote } from './sync_integrations_on_remote'; + +jest.mock('../services'); + +const outputServiceMock = outputService as jest.Mocked; + +describe('syncIntegrationsOnRemote', () => { + const abortController = new AbortController(); + let esClientMock: any; + let getIndicesMock: jest.Mock; + let searchMock: jest.Mock; + let packageClientMock: any; + let loggerMock: any; + + beforeEach(() => { + getIndicesMock = jest.fn(); + searchMock = jest.fn(); + esClientMock = { + indices: { + get: getIndicesMock, + }, + search: searchMock, + }; + outputServiceMock.list.mockResolvedValue({ + items: [ + { + type: 'elasticsearch', + hosts: ['http://localhost:9200'], + }, + ], + } as any); + packageClientMock = { + getInstallation: jest.fn(), + installPackage: jest.fn(), + }; + loggerMock = { + debug: jest.fn(), + error: jest.fn(), + warn: jest.fn(), + info: jest.fn(), + }; + }); + + it('should throw error if multiple synced integrations ccr indices exist', async () => { + getIndicesMock.mockResolvedValue({ + 'fleet-synced-integrations-ccr-remote1': {}, + 'fleet-synced-integrations-ccr-remote2': {}, + }); + + await expect( + syncIntegrationsOnRemote(esClientMock, {} as any, {} as any, abortController, loggerMock) + ).rejects.toThrowError( + 'Not supported to sync multiple indices with prefix fleet-synced-integrations-ccr-*' + ); + }); + + function getSyncedIntegrationsCCRDoc(syncEnabled: boolean) { + return { + hits: { + hits: [ + { + _source: { + remote_es_hosts: [ + { + hosts: ['http://localhost:9200'], + sync_integrations: syncEnabled, + }, + ], + integrations: [ + { + package_name: 'nginx', + package_version: '2.2.0', + updated_at: '2021-01-01T00:00:00.000Z', + }, + { + package_name: 'system', + package_version: '2.2.0', + updated_at: '2021-01-01T00:00:00.000Z', + }, + ], + }, + }, + ], + }, + }; + } + + it('should do nothing if no matching remote output has sync enabled', async () => { + getIndicesMock.mockResolvedValue({ + 'fleet-synced-integrations-ccr-remote1': {}, + }); + searchMock.mockResolvedValue(getSyncedIntegrationsCCRDoc(false)); + + await syncIntegrationsOnRemote( + esClientMock, + {} as any, + packageClientMock, + abortController, + loggerMock + ); + + expect(packageClientMock.getInstallation).not.toHaveBeenCalled(); + }); + + it('should do nothing if sync enabled and packages are installed', async () => { + getIndicesMock.mockResolvedValue({ + 'fleet-synced-integrations-ccr-remote1': {}, + }); + searchMock.mockResolvedValue(getSyncedIntegrationsCCRDoc(true)); + packageClientMock.getInstallation.mockImplementation((packageName: string) => + packageName === 'nginx' + ? { + install_status: 'installed', + version: '2.2.0', + } + : { + install_status: 'installed', + version: '2.3.0', + } + ); + + await syncIntegrationsOnRemote( + esClientMock, + {} as any, + packageClientMock, + abortController, + loggerMock + ); + + expect(packageClientMock.installPackage).not.toHaveBeenCalled(); + }); + + it('should install package if lower version is installed', async () => { + getIndicesMock.mockResolvedValue({ + 'fleet-synced-integrations-ccr-remote1': {}, + }); + searchMock.mockResolvedValue(getSyncedIntegrationsCCRDoc(true)); + packageClientMock.getInstallation.mockImplementation((packageName: string) => + packageName === 'nginx' + ? { + install_status: 'installed', + version: '2.1.0', + } + : { + install_status: 'installed', + version: '2.2.0', + } + ); + packageClientMock.installPackage.mockResolvedValue({ + status: 'installed', + }); + + await syncIntegrationsOnRemote( + esClientMock, + {} as any, + packageClientMock, + abortController, + loggerMock + ); + + expect(packageClientMock.installPackage).toHaveBeenCalledWith({ + pkgName: 'nginx', + pkgVersion: '2.2.0', + keepFailedInstallation: true, + force: true, + }); + }); + + it('should keep installing all packages when one throws error', async () => { + getIndicesMock.mockResolvedValue({ + 'fleet-synced-integrations-ccr-remote1': {}, + }); + searchMock.mockResolvedValue(getSyncedIntegrationsCCRDoc(true)); + packageClientMock.getInstallation.mockImplementation((packageName: string) => + packageName === 'nginx' + ? { + install_status: 'installed', + version: '2.1.0', + } + : { + install_status: 'installed', + version: '2.0.0', + } + ); + packageClientMock.installPackage.mockImplementation(({ pkgName }: any) => { + if (pkgName === 'nginx') { + throw new Error('failed to install'); + } else { + return { + status: 'installed', + }; + } + }); + + await syncIntegrationsOnRemote( + esClientMock, + {} as any, + packageClientMock, + abortController, + loggerMock + ); + + expect(packageClientMock.installPackage).toHaveBeenCalledTimes(2); + }); + + it('should try to install latest package on PackageNotFoundError', async () => { + getIndicesMock.mockResolvedValue({ + 'fleet-synced-integrations-ccr-remote1': {}, + }); + searchMock.mockResolvedValue(getSyncedIntegrationsCCRDoc(true)); + packageClientMock.getInstallation.mockImplementation((packageName: string) => + packageName === 'nginx' + ? undefined + : { + install_status: 'installed', + version: '2.2.0', + } + ); + packageClientMock.installPackage.mockImplementation(({ pkgName, pkgVersion }: any) => { + if (pkgVersion === '2.2.0') { + return { + error: new PackageNotFoundError('not found'), + }; + } + return { + status: 'installed', + }; + }); + + await syncIntegrationsOnRemote( + esClientMock, + {} as any, + packageClientMock, + abortController, + loggerMock + ); + + expect(packageClientMock.installPackage).toHaveBeenCalledTimes(2); + }); + + it('should not retry if max retry attempts reached', async () => { + getIndicesMock.mockResolvedValue({ + 'fleet-synced-integrations-ccr-remote1': {}, + }); + searchMock.mockResolvedValue(getSyncedIntegrationsCCRDoc(true)); + packageClientMock.getInstallation.mockImplementation((packageName: string) => + packageName === 'nginx' + ? { + install_status: 'install_failed', + version: '2.1.0', + latest_install_failed_attempts: [ + { + created_at: new Date().toISOString(), + }, + { + created_at: '2025-01-28T08:11:44.395Z', + }, + { + created_at: '2025-01-27T08:11:44.395Z', + }, + { + created_at: '2025-01-26T08:11:44.395Z', + }, + { + created_at: '2025-01-25T08:11:44.395Z', + }, + ], + } + : { + install_status: 'installed', + version: '2.2.0', + } + ); + packageClientMock.installPackage.mockResolvedValue({ + status: 'installed', + }); + + await syncIntegrationsOnRemote( + esClientMock, + {} as any, + packageClientMock, + abortController, + loggerMock + ); + + expect(packageClientMock.installPackage).not.toHaveBeenCalled(); + }); + + it('should not retry if retry time not passed', async () => { + getIndicesMock.mockResolvedValue({ + 'fleet-synced-integrations-ccr-remote1': {}, + }); + searchMock.mockResolvedValue(getSyncedIntegrationsCCRDoc(true)); + packageClientMock.getInstallation.mockImplementation((packageName: string) => + packageName === 'nginx' + ? { + install_status: 'install_failed', + version: '2.1.0', + latest_install_failed_attempts: [ + { + created_at: new Date().toISOString(), + }, + { + created_at: '2025-01-28T08:11:44.395Z', + }, + { + created_at: '2025-01-27T08:11:44.395Z', + }, + { + created_at: '2025-01-26T08:11:44.395Z', + }, + ], + } + : { + install_status: 'installed', + version: '2.2.0', + } + ); + packageClientMock.installPackage.mockResolvedValue({ + status: 'installed', + }); + + await syncIntegrationsOnRemote( + esClientMock, + {} as any, + packageClientMock, + abortController, + loggerMock + ); + + expect(packageClientMock.installPackage).not.toHaveBeenCalled(); + }); + + it('should retry if retry time passed', async () => { + getIndicesMock.mockResolvedValue({ + 'fleet-synced-integrations-ccr-remote1': {}, + }); + searchMock.mockResolvedValue(getSyncedIntegrationsCCRDoc(true)); + packageClientMock.getInstallation.mockImplementation((packageName: string) => + packageName === 'nginx' + ? { + install_status: 'install_failed', + version: '2.1.0', + latest_install_failed_attempts: [ + { + created_at: '2025-02-28T04:11:44.395Z', + }, + ], + } + : { + install_status: 'installed', + version: '2.2.0', + } + ); + packageClientMock.installPackage.mockResolvedValue({ + status: 'installed', + }); + + await syncIntegrationsOnRemote( + esClientMock, + {} as any, + packageClientMock, + abortController, + loggerMock + ); + + expect(packageClientMock.installPackage).toHaveBeenCalled(); + }); + + it('should do nothing if sync enabled and the package is installing', async () => { + getIndicesMock.mockResolvedValue({ + 'fleet-synced-integrations-ccr-remote1': {}, + }); + searchMock.mockResolvedValue(getSyncedIntegrationsCCRDoc(true)); + packageClientMock.getInstallation.mockImplementation((packageName: string) => + packageName === 'nginx' + ? { + install_status: 'installing', + version: '2.1.0', + } + : { + install_status: 'installed', + version: '2.3.0', + } + ); + + await syncIntegrationsOnRemote( + esClientMock, + {} as any, + packageClientMock, + abortController, + loggerMock + ); + + expect(packageClientMock.installPackage).not.toHaveBeenCalled(); + }); +}); diff --git a/x-pack/platform/plugins/shared/fleet/server/tasks/sync_integrations_on_remote.ts b/x-pack/platform/plugins/shared/fleet/server/tasks/sync_integrations_on_remote.ts new file mode 100644 index 0000000000000..d98d4f565cfd5 --- /dev/null +++ b/x-pack/platform/plugins/shared/fleet/server/tasks/sync_integrations_on_remote.ts @@ -0,0 +1,170 @@ +/* + * 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 { ElasticsearchClient, SavedObjectsClient, Logger } from '@kbn/core/server'; + +import semverGte from 'semver/functions/gte'; + +import type { PackageClient } from '../services'; +import { outputService } from '../services'; + +import { PackageNotFoundError } from '../errors'; + +import type { SyncIntegrationsData } from './sync_integrations_task'; + +const FLEET_SYNCED_INTEGRATIONS_CCR_INDEX_PREFIX = 'fleet-synced-integrations-ccr-*'; + +const MAX_RETRY_ATTEMPTS = 5; +const RETRY_BACKOFF_MINUTES = [5, 10, 20, 40, 60]; + +const getSyncedIntegrationsCCRDoc = async ( + esClient: ElasticsearchClient, + abortController: AbortController +): Promise => { + const indices = await esClient.indices.get( + { + index: FLEET_SYNCED_INTEGRATIONS_CCR_INDEX_PREFIX, + }, + { signal: abortController.signal } + ); + + const indexNames = Object.keys(indices); + if (indexNames.length > 1) { + throw new Error( + `Not supported to sync multiple indices with prefix ${FLEET_SYNCED_INTEGRATIONS_CCR_INDEX_PREFIX}` + ); + } + + if (indexNames.length === 0) { + return undefined; + } + + const response = await esClient.search( + { + index: indexNames[0], + }, + { signal: abortController.signal } + ); + if (response.hits.hits.length === 0) { + return undefined; + } + return response.hits.hits[0]._source as SyncIntegrationsData; +}; + +async function getSyncIntegrationsEnabled( + soClient: SavedObjectsClient, + remoteEsHosts: SyncIntegrationsData['remote_es_hosts'] | undefined +): Promise { + const outputs = await outputService.list(soClient); + const esHosts = outputs.items + .filter((output) => output.type === 'elasticsearch') + .flatMap((output) => output.hosts); + + const isSyncIntegrationsEnabled = remoteEsHosts?.some((remoteEsHost) => { + return ( + remoteEsHost.sync_integrations && remoteEsHost.hosts.some((host) => esHosts.includes(host)) + ); + }); + return isSyncIntegrationsEnabled ?? false; +} + +async function installPackageIfNotInstalled( + pkg: { package_name: string; package_version: string }, + packageClient: PackageClient, + logger: Logger, + abortController: AbortController +) { + const installation = await packageClient.getInstallation(pkg.package_name); + if ( + installation?.install_status === 'installed' && + semverGte(installation.version, pkg.package_version) + ) { + return; + } + + if (installation?.install_status === 'installing') { + return; + } + + if (installation?.install_status === 'install_failed') { + const attempt = installation.latest_install_failed_attempts?.length ?? 0; + + if (attempt >= MAX_RETRY_ATTEMPTS) { + return; + } + const lastRetryAttemptTime = installation.latest_install_failed_attempts?.[0].created_at; + // retry install if backoff time has passed since the last attempt + const shouldRetryInstall = + attempt > 0 && + lastRetryAttemptTime && + Date.now() - Date.parse(lastRetryAttemptTime) > + RETRY_BACKOFF_MINUTES[attempt - 1] * 60 * 1000; + + if (!shouldRetryInstall) { + return; + } + } + + try { + const installResult = await packageClient.installPackage({ + pkgName: pkg.package_name, + pkgVersion: pkg.package_version, + keepFailedInstallation: true, + // using force flag because the package version might not be the latest on this cluster + force: true, + }); + if (installResult.status === 'installed') { + logger.info(`Package ${pkg.package_name} installed with version ${pkg.package_version}`); + } + if (installResult.error instanceof PackageNotFoundError) { + if (abortController.signal.aborted) { + throw new Error('Task was aborted'); + } + logger.warn( + `Package ${pkg.package_name} with version ${pkg.package_version} not found, trying to install latest version` + ); + const installLatestResult = await packageClient.installPackage({ + pkgName: pkg.package_name, + keepFailedInstallation: true, + force: true, + }); + if (installLatestResult.status === 'installed') { + logger.info(`Package ${pkg.package_name} installed with version ${pkg.package_version}`); + } + } + } catch (error) { + logger.error( + `Failed to install package ${pkg.package_name} with version ${pkg.package_version}, error: ${error}` + ); + } +} + +export const syncIntegrationsOnRemote = async ( + esClient: ElasticsearchClient, + soClient: SavedObjectsClient, + packageClient: PackageClient, + abortController: AbortController, + logger: Logger +) => { + const syncIntegrationsDoc = await getSyncedIntegrationsCCRDoc(esClient, abortController); + + const isSyncIntegrationsEnabled = await getSyncIntegrationsEnabled( + soClient, + syncIntegrationsDoc?.remote_es_hosts + ); + + if (!isSyncIntegrationsEnabled) { + return; + } + + for (const pkg of syncIntegrationsDoc?.integrations ?? []) { + if (abortController.signal.aborted) { + throw new Error('Task was aborted'); + } + await installPackageIfNotInstalled(pkg, packageClient, logger, abortController); + } +}; diff --git a/x-pack/platform/plugins/shared/fleet/server/tasks/sync_integrations_task.test.ts b/x-pack/platform/plugins/shared/fleet/server/tasks/sync_integrations_task.test.ts index e258f8ab89765..466f34b55d07f 100644 --- a/x-pack/platform/plugins/shared/fleet/server/tasks/sync_integrations_task.test.ts +++ b/x-pack/platform/plugins/shared/fleet/server/tasks/sync_integrations_task.test.ts @@ -14,7 +14,7 @@ import { getDeleteTaskRunResult } from '@kbn/task-manager-plugin/server/task'; import type { CoreSetup } from '@kbn/core/server'; import { loggingSystemMock } from '@kbn/core/server/mocks'; -import { createAppContextStartContractMock } from '../mocks'; +import { createAppContextStartContractMock, createMockPackageService } from '../mocks'; import { appContextService, outputService } from '../services'; @@ -53,6 +53,8 @@ jest.mock('../services/epm/packages/get', () => ({ }), })); +jest.mock('./sync_integrations_on_remote'); + const MOCK_TASK_INSTANCE = { id: `${TYPE}:${VERSION}`, runAt: new Date(), @@ -79,7 +81,11 @@ describe('SyncIntegrationsTask', () => { beforeEach(() => { mockContract = createAppContextStartContractMock(); appContextService.start(mockContract); - mockCore = coreSetupMock(); + mockCore = coreSetupMock({ + pluginStartContract: { + packageService: createMockPackageService(), + }, + }); mockTaskManagerSetup = tmSetupMock(); mockTask = new SyncIntegrationsTask({ core: mockCore, @@ -197,5 +203,68 @@ describe('SyncIntegrationsTask', () => { expect(esClient.update).not.toHaveBeenCalled(); }); + + it('Should update fleet-synced-integrations doc if sync flag changed from true to false', async () => { + mockOutputService.list.mockResolvedValue({ + items: [ + { + type: 'remote_elasticsearch', + name: 'remote2', + hosts: ['https://remote2:9200'], + sync_integrations: false, + }, + ], + } as any); + esClient.get.mockResolvedValue({ + _source: { + remote_es_hosts: [ + { hosts: ['https://remote1:9200'], name: 'remote1', sync_integrations: true }, + ], + }, + } as any); + await runTask(); + + expect(esClient.update).toHaveBeenCalled(); + }); + + it('Should not update fleet-synced-integrations doc if sync flag already false', async () => { + mockOutputService.list.mockResolvedValue({ + items: [ + { + type: 'remote_elasticsearch', + name: 'remote2', + hosts: ['https://remote2:9200'], + sync_integrations: false, + }, + ], + } as any); + esClient.get.mockResolvedValue({ + _source: { + remote_es_hosts: [ + { hosts: ['https://remote1:9200'], name: 'remote1', sync_integrations: false }, + ], + }, + } as any); + await runTask(); + + expect(esClient.update).not.toHaveBeenCalled(); + }); + + it('Should not update fleet-synced-integrations doc if sync doc does not exist', async () => { + mockOutputService.list.mockResolvedValue({ + items: [ + { + type: 'remote_elasticsearch', + name: 'remote2', + hosts: ['https://remote2:9200'], + sync_integrations: false, + }, + ], + } as any); + esClient.get.mockRejectedValue({ statusCode: 404 }); + await runTask(); + + expect(esClient.update).not.toHaveBeenCalled(); + }); }); }); diff --git a/x-pack/platform/plugins/shared/fleet/server/tasks/sync_integrations_task.ts b/x-pack/platform/plugins/shared/fleet/server/tasks/sync_integrations_task.ts index 758759938fb6c..a449d6972e1ec 100644 --- a/x-pack/platform/plugins/shared/fleet/server/tasks/sync_integrations_task.ts +++ b/x-pack/platform/plugins/shared/fleet/server/tasks/sync_integrations_task.ts @@ -22,12 +22,14 @@ import { appContextService, outputService } from '../services'; import { getInstalledPackageSavedObjects } from '../services/epm/packages/get'; import { FLEET_SYNCED_INTEGRATIONS_INDEX_NAME } from '../services/setup/fleet_synced_integrations'; +import { syncIntegrationsOnRemote } from './sync_integrations_on_remote'; + export const TYPE = 'fleet:sync-integrations-task'; -export const VERSION = '1.0.0'; +export const VERSION = '1.0.1'; const TITLE = 'Fleet Sync Integrations Task'; const SCOPE = ['fleet']; const INTERVAL = '5m'; -const TIMEOUT = '1m'; +const TIMEOUT = '5m'; interface SyncIntegrationsTaskSetupContract { core: CoreSetup; @@ -39,7 +41,7 @@ interface SyncIntegrationsTaskStartContract { taskManager: TaskManagerStartContract; } -interface SyncIntegrationsData { +export interface SyncIntegrationsData { remote_es_hosts: Array<{ name: string; hosts: string[]; @@ -127,7 +129,7 @@ export class SyncIntegrationsTask { this.logger.info(`[runTask()] started`); - const [coreStart] = await core.getStartServices(); + const [coreStart, _startDeps, { packageService }] = (await core.getStartServices()) as any; const esClient = coreStart.elasticsearch.client.asInternalUser; const soClient = new SavedObjectsClient(coreStart.savedObjects.createInternalRepository()); @@ -137,23 +139,19 @@ export class SyncIntegrationsTask { return; } - const indexExists = await esClient.indices.exists( - { - index: FLEET_SYNCED_INTEGRATIONS_INDEX_NAME, - }, - { signal: this.abortController.signal } - ); - - if (!indexExists) { - this.logger.info( - `[SyncIntegrationsTask] index ${FLEET_SYNCED_INTEGRATIONS_INDEX_NAME} does not exist` - ); - return; - } - try { + // write integrations on main cluster await this.updateSyncedIntegrationsData(esClient, soClient); + // sync integrations on remote cluster + await syncIntegrationsOnRemote( + esClient, + soClient, + packageService.asInternalUser, + this.abortController, + this.logger + ); + this.endRun('success'); } catch (err) { if (err instanceof errors.RequestAbortedError) { @@ -166,10 +164,46 @@ export class SyncIntegrationsTask { } }; + private syncedIntegrationsIndexExists = async (esClient: ElasticsearchClient) => { + return await esClient.indices.exists( + { + index: FLEET_SYNCED_INTEGRATIONS_INDEX_NAME, + }, + { signal: this.abortController.signal } + ); + }; + + private hadAnyRemoteESSyncEnabled = async (esClient: ElasticsearchClient): Promise => { + try { + const res = await esClient.get({ + id: FLEET_SYNCED_INTEGRATIONS_INDEX_NAME, + index: FLEET_SYNCED_INTEGRATIONS_INDEX_NAME, + }); + if (!(res._source as any)?.remote_es_hosts.some((host: any) => host.sync_integrations)) { + return false; + } + } catch (error) { + if (error.statusCode === 404) { + return false; + } + throw error; + } + return true; + }; + private updateSyncedIntegrationsData = async ( esClient: ElasticsearchClient, soClient: SavedObjectsClient ) => { + const indexExists = await this.syncedIntegrationsIndexExists(esClient); + + if (!indexExists) { + this.logger.info( + `[SyncIntegrationsTask] index ${FLEET_SYNCED_INTEGRATIONS_INDEX_NAME} does not exist` + ); + return; + } + const outputs = await outputService.list(soClient); const remoteESOutputs = outputs.items.filter( (output) => output.type === outputType.RemoteElasticsearch @@ -179,7 +213,10 @@ export class SyncIntegrationsTask { ); if (!isSyncEnabled) { - return; + const hadAnyRemoteESSyncEnabled = await this.hadAnyRemoteESSyncEnabled(esClient); + if (!hadAnyRemoteESSyncEnabled) { + return; + } } const newDoc: SyncIntegrationsData = { diff --git a/x-pack/platform/plugins/shared/fleet/server/types/models/preconfiguration.ts b/x-pack/platform/plugins/shared/fleet/server/types/models/preconfiguration.ts index 5c49ef98aabcf..cd41c741a3dac 100644 --- a/x-pack/platform/plugins/shared/fleet/server/types/models/preconfiguration.ts +++ b/x-pack/platform/plugins/shared/fleet/server/types/models/preconfiguration.ts @@ -9,7 +9,7 @@ import { schema } from '@kbn/config-schema'; import semverValid from 'semver/functions/valid'; import { PRECONFIGURATION_LATEST_KEYWORD } from '../../constants'; -import type { PreconfiguredOutput } from '../../../common/types'; +import { clientAuth, type PreconfiguredOutput } from '../../../common/types'; import { ElasticSearchSchema, @@ -35,6 +35,13 @@ const varsSchema = schema.maybe( ) ); +const secretRefSchema = schema.oneOf([ + schema.object({ + id: schema.string(), + }), + schema.string(), +]); + export const PreconfiguredPackagesSchema = schema.arrayOf( schema.object({ name: schema.string(), @@ -109,6 +116,31 @@ export const PreconfiguredFleetServerHostsSchema = schema.arrayOf( is_internal: schema.maybe(schema.boolean()), host_urls: schema.arrayOf(schema.string(), { minSize: 1 }), proxy_id: schema.nullable(schema.string()), + secrets: schema.maybe( + schema.object({ + ssl: schema.maybe(schema.object({ key: schema.maybe(secretRefSchema) })), + }) + ), + ssl: schema.maybe( + schema.oneOf([ + schema.literal(null), + schema.object({ + certificate_authorities: schema.maybe(schema.arrayOf(schema.string())), + certificate: schema.maybe(schema.string()), + key: schema.maybe(schema.string()), + es_certificate_authorities: schema.maybe(schema.arrayOf(schema.string())), + es_certificate: schema.maybe(schema.string()), + es_key: schema.maybe(schema.string()), + client_auth: schema.maybe( + schema.oneOf([ + schema.literal(clientAuth.Optional), + schema.literal(clientAuth.Required), + schema.literal(clientAuth.None), + ]) + ), + }), + ]) + ), }), { defaultValue: [] } ); diff --git a/x-pack/platform/plugins/shared/fleet/server/types/rest_spec/fleet_server_policy_config.ts b/x-pack/platform/plugins/shared/fleet/server/types/rest_spec/fleet_server_policy_config.ts index 94100e24c2f6c..26042e074d838 100644 --- a/x-pack/platform/plugins/shared/fleet/server/types/rest_spec/fleet_server_policy_config.ts +++ b/x-pack/platform/plugins/shared/fleet/server/types/rest_spec/fleet_server_policy_config.ts @@ -7,7 +7,51 @@ import { schema } from '@kbn/config-schema'; -export const FleetServerHostSchema = schema.object({ +import { clientAuth } from '../../../common/types'; + +const secretRefSchema = schema.oneOf([ + schema.object({ + id: schema.string(), + }), + schema.string(), +]); + +export const FleetServerHostBaseSchema = schema.object({ + name: schema.maybe(schema.string()), + host_urls: schema.maybe(schema.arrayOf(schema.string(), { minSize: 1 })), + is_default: schema.maybe(schema.boolean({ defaultValue: false })), + is_internal: schema.maybe(schema.boolean()), + proxy_id: schema.nullable(schema.string()), + secrets: schema.maybe( + schema.object({ + ssl: schema.maybe( + schema.object({ key: schema.maybe(secretRefSchema), es_key: schema.maybe(secretRefSchema) }) + ), + }) + ), + ssl: schema.maybe( + schema.oneOf([ + schema.literal(null), + schema.object({ + certificate_authorities: schema.maybe(schema.arrayOf(schema.string())), + certificate: schema.maybe(schema.string()), + key: schema.maybe(schema.string()), + es_certificate_authorities: schema.maybe(schema.arrayOf(schema.string())), + es_certificate: schema.maybe(schema.string()), + es_key: schema.maybe(schema.string()), + client_auth: schema.maybe( + schema.oneOf([ + schema.literal(clientAuth.Optional), + schema.literal(clientAuth.Required), + schema.literal(clientAuth.None), + ]) + ), + }), + ]) + ), +}); + +export const FleetServerHostSchema = FleetServerHostBaseSchema.extends({ id: schema.string(), name: schema.string(), host_urls: schema.arrayOf(schema.string(), { minSize: 1 }), @@ -33,13 +77,7 @@ export const GetOneFleetServerHostRequestSchema = { export const PutFleetServerHostRequestSchema = { params: schema.object({ itemId: schema.string() }), - body: schema.object({ - name: schema.maybe(schema.string()), - host_urls: schema.maybe(schema.arrayOf(schema.string(), { minSize: 1 })), - is_default: schema.maybe(schema.boolean({ defaultValue: false })), - is_internal: schema.maybe(schema.boolean()), - proxy_id: schema.nullable(schema.string()), - }), + body: FleetServerHostBaseSchema, }; export const GetAllFleetServerHostRequestSchema = {}; diff --git a/x-pack/platform/plugins/shared/fleet/server/types/rest_spec/settings.ts b/x-pack/platform/plugins/shared/fleet/server/types/rest_spec/settings.ts index 64684e51350d4..15829153940e4 100644 --- a/x-pack/platform/plugins/shared/fleet/server/types/rest_spec/settings.ts +++ b/x-pack/platform/plugins/shared/fleet/server/types/rest_spec/settings.ts @@ -12,6 +12,7 @@ import { isDiffPathProtocol } from '../../../common/services'; import { OutputSchema } from '../models'; import { FleetProxySchema } from './fleet_proxies'; +import { FleetServerHostSchema } from './fleet_server_policy_config'; export const GetSettingsRequestSchema = {}; @@ -113,17 +114,7 @@ export const GetEnrollmentSettingsResponseSchema = schema.object({ }) ), has_active: schema.boolean(), - host: schema.maybe( - schema.object({ - id: schema.string(), - name: schema.string(), - host_urls: schema.arrayOf(schema.string()), - is_default: schema.boolean(), - is_preconfigured: schema.boolean(), - is_internal: schema.maybe(schema.boolean()), - proxy_id: schema.maybe(schema.oneOf([schema.literal(null), schema.string()])), - }) - ), + host: schema.maybe(FleetServerHostSchema), host_proxy: schema.maybe(FleetProxySchema), es_output: schema.maybe(OutputSchema), es_output_proxy: schema.maybe(FleetProxySchema), diff --git a/x-pack/platform/plugins/shared/fleet/server/types/so_attributes.ts b/x-pack/platform/plugins/shared/fleet/server/types/so_attributes.ts index 1463eab95161a..5102b73a62a9b 100644 --- a/x-pack/platform/plugins/shared/fleet/server/types/so_attributes.ts +++ b/x-pack/platform/plugins/shared/fleet/server/types/so_attributes.ts @@ -111,6 +111,13 @@ export interface FleetServerHostSOAttributes { is_preconfigured: boolean; is_internal?: boolean; proxy_id?: string | null; + secrets?: { + ssl?: { + key?: { id: string }; + es_key?: { id: string }; + }; + }; + ssl?: string | null; } export interface PackagePolicySOAttributes { diff --git a/x-pack/platform/plugins/shared/lens/public/app_plugin/shared/edit_on_the_fly/helpers.ts b/x-pack/platform/plugins/shared/lens/public/app_plugin/shared/edit_on_the_fly/helpers.ts index 4cdea9dc52742..08344d8f4aaed 100644 --- a/x-pack/platform/plugins/shared/lens/public/app_plugin/shared/edit_on_the_fly/helpers.ts +++ b/x-pack/platform/plugins/shared/lens/public/app_plugin/shared/edit_on_the_fly/helpers.ts @@ -13,7 +13,7 @@ import { } from '@kbn/esql-utils'; import { isEqual, cloneDeep } from 'lodash'; import { type AggregateQuery, buildEsQuery } from '@kbn/es-query'; -import type { ESQLControlVariable } from '@kbn/esql-validation-autocomplete'; +import type { ESQLControlVariable } from '@kbn/esql-types'; import type { ESQLRow } from '@kbn/es-types'; import { getLensAttributesFromSuggestion, diff --git a/x-pack/platform/plugins/shared/lens/public/react_embeddable/data_loader.test.ts b/x-pack/platform/plugins/shared/lens/public/react_embeddable/data_loader.test.ts index 94d6b5e6aed10..8a43783e58dc0 100644 --- a/x-pack/platform/plugins/shared/lens/public/react_embeddable/data_loader.test.ts +++ b/x-pack/platform/plugins/shared/lens/public/react_embeddable/data_loader.test.ts @@ -35,7 +35,7 @@ import { import { PublishesSearchSession } from '@kbn/presentation-publishing/interfaces/fetch/publishes_search_session'; import { isObject } from 'lodash'; import { createMockDatasource, defaultDoc } from '../mocks'; -import { ESQLControlVariable, ESQLVariableType } from '@kbn/esql-validation-autocomplete'; +import { ESQLVariableType, type ESQLControlVariable } from '@kbn/esql-types'; import * as Logger from './logger'; import { buildObservableVariable } from './helper'; diff --git a/x-pack/platform/plugins/shared/lens/public/react_embeddable/data_loader.ts b/x-pack/platform/plugins/shared/lens/public/react_embeddable/data_loader.ts index ce14bfc76cc85..da9c9ae071f3c 100644 --- a/x-pack/platform/plugins/shared/lens/public/react_embeddable/data_loader.ts +++ b/x-pack/platform/plugins/shared/lens/public/react_embeddable/data_loader.ts @@ -7,7 +7,7 @@ import type { DefaultInspectorAdapters } from '@kbn/expressions-plugin/common'; import { apiPublishesUnifiedSearch, fetch$ } from '@kbn/presentation-publishing'; -import type { ESQLControlVariable } from '@kbn/esql-validation-autocomplete'; +import type { ESQLControlVariable } from '@kbn/esql-types'; import { type KibanaExecutionContext } from '@kbn/core/public'; import { BehaviorSubject, diff --git a/x-pack/platform/plugins/shared/lens/public/react_embeddable/expressions/merged_search_context.ts b/x-pack/platform/plugins/shared/lens/public/react_embeddable/expressions/merged_search_context.ts index 5dc59a28eec97..bd2575baf7249 100644 --- a/x-pack/platform/plugins/shared/lens/public/react_embeddable/expressions/merged_search_context.ts +++ b/x-pack/platform/plugins/shared/lens/public/react_embeddable/expressions/merged_search_context.ts @@ -4,7 +4,7 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import type { ESQLControlVariable } from '@kbn/esql-validation-autocomplete'; +import type { ESQLControlVariable } from '@kbn/esql-types'; import type { DataPublicPluginStart, FilterManager } from '@kbn/data-plugin/public'; import { type AggregateQuery, diff --git a/x-pack/platform/plugins/shared/lens/public/react_embeddable/initializers/initialize_internal_api.ts b/x-pack/platform/plugins/shared/lens/public/react_embeddable/initializers/initialize_internal_api.ts index 7b2cb38b36e87..e34ea644c02d4 100644 --- a/x-pack/platform/plugins/shared/lens/public/react_embeddable/initializers/initialize_internal_api.ts +++ b/x-pack/platform/plugins/shared/lens/public/react_embeddable/initializers/initialize_internal_api.ts @@ -7,7 +7,7 @@ import { BehaviorSubject } from 'rxjs'; import { initializeTitleManager } from '@kbn/presentation-publishing'; -import { apiPublishesESQLVariables } from '@kbn/esql-variables-types'; +import { apiPublishesESQLVariables } from '@kbn/esql-types'; import type { DataView } from '@kbn/data-views-plugin/common'; import { buildObservableVariable, createEmptyLensState } from '../helper'; import type { diff --git a/x-pack/platform/plugins/shared/lens/public/react_embeddable/initializers/utils.test.ts b/x-pack/platform/plugins/shared/lens/public/react_embeddable/initializers/utils.test.ts index a058e16b49873..8e3d014166806 100644 --- a/x-pack/platform/plugins/shared/lens/public/react_embeddable/initializers/utils.test.ts +++ b/x-pack/platform/plugins/shared/lens/public/react_embeddable/initializers/utils.test.ts @@ -4,7 +4,7 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import { ESQLVariableType } from '@kbn/esql-validation-autocomplete'; +import { ESQLVariableType } from '@kbn/esql-types'; import { getEmbeddableVariables } from './utils'; describe('getEmbeddableVariables', () => { diff --git a/x-pack/platform/plugins/shared/lens/public/react_embeddable/initializers/utils.ts b/x-pack/platform/plugins/shared/lens/public/react_embeddable/initializers/utils.ts index e457fb206e620..74a9a6f5a0d38 100644 --- a/x-pack/platform/plugins/shared/lens/public/react_embeddable/initializers/utils.ts +++ b/x-pack/platform/plugins/shared/lens/public/react_embeddable/initializers/utils.ts @@ -5,7 +5,7 @@ * 2.0. */ import { type AggregateQuery, type Query, isOfAggregateQueryType } from '@kbn/es-query'; -import type { ESQLControlVariable } from '@kbn/esql-validation-autocomplete'; +import type { ESQLControlVariable } from '@kbn/esql-types'; import { ENABLE_ESQL, getESQLQueryVariables } from '@kbn/esql-utils'; import type { LensEmbeddableStartServices } from '../types'; diff --git a/x-pack/platform/plugins/shared/lens/public/react_embeddable/types.ts b/x-pack/platform/plugins/shared/lens/public/react_embeddable/types.ts index 8758152a54f0d..b068e5e2944b8 100644 --- a/x-pack/platform/plugins/shared/lens/public/react_embeddable/types.ts +++ b/x-pack/platform/plugins/shared/lens/public/react_embeddable/types.ts @@ -13,7 +13,7 @@ import type { TimeRange, } from '@kbn/es-query'; import type { Adapters, InspectorOptions } from '@kbn/inspector-plugin/public'; -import type { ESQLControlVariable } from '@kbn/esql-validation-autocomplete'; +import type { ESQLControlVariable } from '@kbn/esql-types'; import type { HasEditCapabilities, HasLibraryTransforms, diff --git a/x-pack/platform/plugins/shared/lens/tsconfig.json b/x-pack/platform/plugins/shared/lens/tsconfig.json index c856a3dff581d..c3bf41d4efdb7 100644 --- a/x-pack/platform/plugins/shared/lens/tsconfig.json +++ b/x-pack/platform/plugins/shared/lens/tsconfig.json @@ -119,8 +119,7 @@ "@kbn/core-chrome-browser", "@kbn/core-capabilities-common", "@kbn/presentation-panel-plugin", - "@kbn/esql-validation-autocomplete", - "@kbn/esql-variables-types", + "@kbn/esql-types", ], "exclude": ["target/**/*"] } diff --git a/x-pack/platform/plugins/shared/ml/public/application/app.tsx b/x-pack/platform/plugins/shared/ml/public/application/app.tsx index 3d65b34441bb9..5523de66e0eab 100644 --- a/x-pack/platform/plugins/shared/ml/public/application/app.tsx +++ b/x-pack/platform/plugins/shared/ml/public/application/app.tsx @@ -28,6 +28,7 @@ import type { PageDependencies } from './routing/router'; import { EnabledFeaturesContextProvider, MlServerInfoContextProvider } from './contexts/ml'; import type { StartServices } from './contexts/kibana'; import { getMlGlobalServices } from './util/get_services'; +import { MlTelemetryContextProvider } from './contexts/ml/ml_telemetry_context'; export type MlDependencies = Omit< MlSetupDependencies, @@ -154,7 +155,9 @@ const App: FC = ({ experimentalFeatures={experimentalFeatures} > - + + + diff --git a/x-pack/platform/plugins/shared/ml/public/application/contexts/ml/ml_telemetry_context.tsx b/x-pack/platform/plugins/shared/ml/public/application/contexts/ml/ml_telemetry_context.tsx new file mode 100644 index 0000000000000..67e4f0a653ed5 --- /dev/null +++ b/x-pack/platform/plugins/shared/ml/public/application/contexts/ml/ml_telemetry_context.tsx @@ -0,0 +1,36 @@ +/* + * 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, { type FC, type PropsWithChildren, createContext, useContext } from 'react'; +import type { ITelemetryClient } from '../../services/telemetry/types'; + +interface MlTelemetryClientContextValue { + telemetryClient: ITelemetryClient; +} + +export const MlTelemetryContext = createContext( + undefined +); + +export const MlTelemetryContextProvider: FC> = ({ + children, + telemetryClient, +}) => { + return ( + + {children} + + ); +}; + +export function useMlTelemetryClient() { + const context = useContext(MlTelemetryContext); + if (context === undefined) { + throw new Error('useMlTelemetryClient must be used within a MlTelemetryContextProvider'); + } + return context; +} diff --git a/x-pack/platform/plugins/shared/ml/public/application/model_management/deployment_params_mapper.test.ts b/x-pack/platform/plugins/shared/ml/public/application/model_management/deployment_params_mapper.test.ts index 4193251d76f3a..42182bf6bf54c 100644 --- a/x-pack/platform/plugins/shared/ml/public/application/model_management/deployment_params_mapper.test.ts +++ b/x-pack/platform/plugins/shared/ml/public/application/model_management/deployment_params_mapper.test.ts @@ -24,13 +24,12 @@ describe('DeploymentParamsMapper', () => { let mapper: DeploymentParamsMapper; - mapper = new DeploymentParamsMapper(modelId, mlServerLimits, cloudInfo, true); + mapper = new DeploymentParamsMapper(mlServerLimits, cloudInfo, true); describe('DeploymentParamsMapper', () => { describe('running in serverless', () => { beforeEach(() => { mapper = new DeploymentParamsMapper( - modelId, { max_single_ml_node_processors: 16, total_ml_processors: 32, @@ -62,38 +61,42 @@ describe('DeploymentParamsMapper', () => { it('maps UI params to API correctly', () => { expect( - mapper.mapUiToApiDeploymentParams({ + mapper.mapUiToApiDeploymentParams(modelId, { deploymentId: 'test-deployment', optimized: 'optimizedForSearch', adaptiveResources: false, vCPUUsage: 'low', }) ).toEqual({ - number_of_allocations: 1, - deployment_id: 'test-deployment', - model_id: 'test-model', - priority: 'normal', - threads_per_allocation: 2, + modelId: 'test-model', + deploymentParams: { + number_of_allocations: 1, + deployment_id: 'test-deployment', + priority: 'normal', + threads_per_allocation: 2, + }, }); expect( - mapper.mapUiToApiDeploymentParams({ + mapper.mapUiToApiDeploymentParams(modelId, { deploymentId: 'test-deployment', optimized: 'optimizedForIngest', adaptiveResources: false, vCPUUsage: 'low', }) ).toEqual({ - deployment_id: 'test-deployment', - model_id: 'test-model', - priority: 'normal', - threads_per_allocation: 1, - number_of_allocations: 2, + modelId: 'test-model', + deploymentParams: { + deployment_id: 'test-deployment', + threads_per_allocation: 1, + priority: 'normal', + number_of_allocations: 2, + }, }); }); it('overrides vCPUs levels and enforces adaptive allocations if static support is not configured', () => { - mapper = new DeploymentParamsMapper(modelId, mlServerLimits, cloudInfo, false, { + mapper = new DeploymentParamsMapper(mlServerLimits, cloudInfo, false, { modelDeployment: { allowStaticAllocations: false, vCPURange: { @@ -121,37 +124,41 @@ describe('DeploymentParamsMapper', () => { }); expect( - mapper.mapUiToApiDeploymentParams({ + mapper.mapUiToApiDeploymentParams(modelId, { deploymentId: 'test-deployment', optimized: 'optimizedForSearch', adaptiveResources: false, vCPUUsage: 'low', }) ).toEqual({ - adaptive_allocations: { + modelId: 'test-model', + adaptiveAllocationsParams: { enabled: true, max_number_of_allocations: 1, min_number_of_allocations: 0, }, - deployment_id: 'test-deployment', - model_id: 'test-model', - priority: 'normal', - threads_per_allocation: 2, + deploymentParams: { + deployment_id: 'test-deployment', + priority: 'normal', + threads_per_allocation: 2, + }, }); expect( - mapper.mapUiToApiDeploymentParams({ + mapper.mapUiToApiDeploymentParams(modelId, { deploymentId: 'test-deployment', optimized: 'optimizedForIngest', adaptiveResources: false, vCPUUsage: 'low', }) ).toEqual({ - deployment_id: 'test-deployment', - model_id: 'test-model', - priority: 'normal', - threads_per_allocation: 1, - adaptive_allocations: { + modelId: 'test-model', + deploymentParams: { + deployment_id: 'test-deployment', + priority: 'normal', + threads_per_allocation: 1, + }, + adaptiveAllocationsParams: { enabled: true, max_number_of_allocations: 2, min_number_of_allocations: 0, @@ -163,7 +170,6 @@ describe('DeploymentParamsMapper', () => { describe('32 cores, 16 single', () => { beforeEach(() => { mapper = new DeploymentParamsMapper( - modelId, { max_single_ml_node_processors: 16, total_ml_processors: 32, @@ -185,7 +191,6 @@ describe('DeploymentParamsMapper', () => { describe('when autoscaling is disabled', () => { beforeEach(() => { mapper = new DeploymentParamsMapper( - modelId, mlServerLimits, { isMlAutoscalingEnabled: false, @@ -196,110 +201,124 @@ describe('DeploymentParamsMapper', () => { it('should map UI params to API request correctly', () => { expect( - mapper.mapUiToApiDeploymentParams({ + mapper.mapUiToApiDeploymentParams(modelId, { deploymentId: 'test-deployment', optimized: 'optimizedForSearch', adaptiveResources: false, vCPUUsage: 'low', }) ).toEqual({ - model_id: modelId, - deployment_id: 'test-deployment', - priority: 'normal', - threads_per_allocation: 2, - number_of_allocations: 1, + modelId, + deploymentParams: { + deployment_id: 'test-deployment', + priority: 'normal', + threads_per_allocation: 2, + number_of_allocations: 1, + }, }); expect( - mapper.mapUiToApiDeploymentParams({ + mapper.mapUiToApiDeploymentParams(modelId, { deploymentId: 'test-deployment', optimized: 'optimizedForSearch', adaptiveResources: false, vCPUUsage: 'medium', }) ).toEqual({ - model_id: modelId, - deployment_id: 'test-deployment', - priority: 'normal', - threads_per_allocation: 8, - number_of_allocations: 1, + modelId, + deploymentParams: { + deployment_id: 'test-deployment', + priority: 'normal', + threads_per_allocation: 8, + number_of_allocations: 1, + }, }); expect( - mapper.mapUiToApiDeploymentParams({ + mapper.mapUiToApiDeploymentParams(modelId, { deploymentId: 'test-deployment', optimized: 'optimizedForSearch', adaptiveResources: false, vCPUUsage: 'high', }) ).toEqual({ - model_id: modelId, - deployment_id: 'test-deployment', - priority: 'normal', - threads_per_allocation: 8, - number_of_allocations: 1, + modelId, + deploymentParams: { + deployment_id: 'test-deployment', + priority: 'normal', + threads_per_allocation: 8, + number_of_allocations: 1, + }, }); expect( - mapper.mapUiToApiDeploymentParams({ + mapper.mapUiToApiDeploymentParams(modelId, { deploymentId: 'test-deployment', optimized: 'optimizedForIngest', adaptiveResources: false, vCPUUsage: 'low', }) ).toEqual({ - model_id: modelId, - deployment_id: 'test-deployment', - priority: 'normal', - threads_per_allocation: 1, - number_of_allocations: 2, + modelId, + deploymentParams: { + deployment_id: 'test-deployment', + priority: 'normal', + threads_per_allocation: 1, + number_of_allocations: 2, + }, }); expect( - mapper.mapUiToApiDeploymentParams({ + mapper.mapUiToApiDeploymentParams(modelId, { deploymentId: 'test-deployment', optimized: 'optimizedForIngest', adaptiveResources: false, vCPUUsage: 'medium', }) ).toEqual({ - model_id: modelId, - deployment_id: 'test-deployment', - priority: 'normal', - threads_per_allocation: 1, - number_of_allocations: 5, + modelId, + deploymentParams: { + deployment_id: 'test-deployment', + priority: 'normal', + threads_per_allocation: 1, + number_of_allocations: 5, + }, }); expect( - mapper.mapUiToApiDeploymentParams({ + mapper.mapUiToApiDeploymentParams(modelId, { deploymentId: 'test-deployment', optimized: 'optimizedForIngest', adaptiveResources: false, vCPUUsage: 'high', }) ).toEqual({ - model_id: modelId, - deployment_id: 'test-deployment', - priority: 'normal', - threads_per_allocation: 1, - number_of_allocations: 10, + modelId, + deploymentParams: { + deployment_id: 'test-deployment', + priority: 'normal', + threads_per_allocation: 1, + number_of_allocations: 10, + }, }); }); it('should map UI params to API request correctly with adaptive resources', () => { expect( - mapper.mapUiToApiDeploymentParams({ + mapper.mapUiToApiDeploymentParams(modelId, { deploymentId: 'test-deployment', optimized: 'optimizedForSearch', adaptiveResources: true, vCPUUsage: 'low', }) ).toEqual({ - model_id: modelId, - deployment_id: 'test-deployment', - priority: 'normal', - threads_per_allocation: 2, - adaptive_allocations: { + modelId, + deploymentParams: { + deployment_id: 'test-deployment', + priority: 'normal', + threads_per_allocation: 2, + }, + adaptiveAllocationsParams: { enabled: true, min_number_of_allocations: 1, max_number_of_allocations: 1, @@ -307,18 +326,20 @@ describe('DeploymentParamsMapper', () => { }); expect( - mapper.mapUiToApiDeploymentParams({ + mapper.mapUiToApiDeploymentParams(modelId, { deploymentId: 'test-deployment', optimized: 'optimizedForSearch', adaptiveResources: true, vCPUUsage: 'medium', }) ).toEqual({ - model_id: modelId, - deployment_id: 'test-deployment', - priority: 'normal', - threads_per_allocation: 8, - adaptive_allocations: { + modelId, + deploymentParams: { + deployment_id: 'test-deployment', + priority: 'normal', + threads_per_allocation: 8, + }, + adaptiveAllocationsParams: { enabled: true, min_number_of_allocations: 1, max_number_of_allocations: 1, @@ -326,18 +347,20 @@ describe('DeploymentParamsMapper', () => { }); expect( - mapper.mapUiToApiDeploymentParams({ + mapper.mapUiToApiDeploymentParams(modelId, { deploymentId: 'test-deployment', optimized: 'optimizedForSearch', adaptiveResources: true, vCPUUsage: 'high', }) ).toEqual({ - model_id: modelId, - deployment_id: 'test-deployment', - priority: 'normal', - threads_per_allocation: 8, - adaptive_allocations: { + modelId, + deploymentParams: { + deployment_id: 'test-deployment', + priority: 'normal', + threads_per_allocation: 8, + }, + adaptiveAllocationsParams: { enabled: true, min_number_of_allocations: 1, max_number_of_allocations: 1, @@ -456,7 +479,6 @@ describe('DeploymentParamsMapper', () => { describe('when autoscaling is enabled', () => { beforeEach(() => { mapper = new DeploymentParamsMapper( - modelId, mlServerLimits, { isMlAutoscalingEnabled: true, @@ -467,65 +489,73 @@ describe('DeploymentParamsMapper', () => { it('should map UI params to API request correctly', () => { expect( - mapper.mapUiToApiDeploymentParams({ + mapper.mapUiToApiDeploymentParams(modelId, { deploymentId: 'test-deployment', optimized: 'optimizedForSearch', adaptiveResources: false, vCPUUsage: 'low', }) ).toEqual({ - model_id: modelId, - deployment_id: 'test-deployment', - priority: 'normal', - threads_per_allocation: 2, - number_of_allocations: 1, + modelId, + deploymentParams: { + deployment_id: 'test-deployment', + priority: 'normal', + threads_per_allocation: 2, + number_of_allocations: 1, + }, }); expect( - mapper.mapUiToApiDeploymentParams({ + mapper.mapUiToApiDeploymentParams(modelId, { deploymentId: 'test-deployment', optimized: 'optimizedForSearch', adaptiveResources: false, vCPUUsage: 'medium', }) ).toEqual({ - model_id: modelId, - deployment_id: 'test-deployment', - priority: 'normal', - threads_per_allocation: 8, - number_of_allocations: 4, + modelId, + deploymentParams: { + deployment_id: 'test-deployment', + priority: 'normal', + threads_per_allocation: 8, + number_of_allocations: 4, + }, }); expect( - mapper.mapUiToApiDeploymentParams({ + mapper.mapUiToApiDeploymentParams(modelId, { deploymentId: 'test-deployment', optimized: 'optimizedForSearch', adaptiveResources: false, vCPUUsage: 'high', }) ).toEqual({ - model_id: modelId, - deployment_id: 'test-deployment', - priority: 'normal', - threads_per_allocation: 8, - number_of_allocations: 12499, + modelId, + deploymentParams: { + deployment_id: 'test-deployment', + priority: 'normal', + threads_per_allocation: 8, + number_of_allocations: 12499, + }, }); }); it('should map UI params to API request correctly with adaptive resources', () => { expect( - mapper.mapUiToApiDeploymentParams({ + mapper.mapUiToApiDeploymentParams(modelId, { deploymentId: 'test-deployment', optimized: 'optimizedForSearch', adaptiveResources: true, vCPUUsage: 'low', }) ).toEqual({ - model_id: modelId, - deployment_id: 'test-deployment', - priority: 'normal', - threads_per_allocation: 2, - adaptive_allocations: { + modelId, + deploymentParams: { + deployment_id: 'test-deployment', + priority: 'normal', + threads_per_allocation: 2, + }, + adaptiveAllocationsParams: { enabled: true, min_number_of_allocations: 0, max_number_of_allocations: 1, @@ -533,18 +563,20 @@ describe('DeploymentParamsMapper', () => { }); expect( - mapper.mapUiToApiDeploymentParams({ + mapper.mapUiToApiDeploymentParams(modelId, { deploymentId: 'test-deployment', optimized: 'optimizedForSearch', adaptiveResources: true, vCPUUsage: 'medium', }) ).toEqual({ - model_id: modelId, - deployment_id: 'test-deployment', - priority: 'normal', - threads_per_allocation: 8, - adaptive_allocations: { + modelId, + deploymentParams: { + deployment_id: 'test-deployment', + priority: 'normal', + threads_per_allocation: 8, + }, + adaptiveAllocationsParams: { enabled: true, min_number_of_allocations: 1, max_number_of_allocations: 4, @@ -552,18 +584,20 @@ describe('DeploymentParamsMapper', () => { }); expect( - mapper.mapUiToApiDeploymentParams({ + mapper.mapUiToApiDeploymentParams(modelId, { deploymentId: 'test-deployment', optimized: 'optimizedForSearch', adaptiveResources: true, vCPUUsage: 'high', }) ).toEqual({ - model_id: modelId, - deployment_id: 'test-deployment', - priority: 'normal', - threads_per_allocation: 8, - adaptive_allocations: { + modelId, + deploymentParams: { + deployment_id: 'test-deployment', + priority: 'normal', + threads_per_allocation: 8, + }, + adaptiveAllocationsParams: { enabled: true, max_number_of_allocations: 12499, min_number_of_allocations: 1, @@ -571,18 +605,20 @@ describe('DeploymentParamsMapper', () => { }); expect( - mapper.mapUiToApiDeploymentParams({ + mapper.mapUiToApiDeploymentParams(modelId, { deploymentId: 'test-deployment', optimized: 'optimizedForIngest', adaptiveResources: true, vCPUUsage: 'low', }) ).toEqual({ - model_id: modelId, - deployment_id: 'test-deployment', - priority: 'normal', - threads_per_allocation: 1, - adaptive_allocations: { + modelId, + deploymentParams: { + deployment_id: 'test-deployment', + priority: 'normal', + threads_per_allocation: 1, + }, + adaptiveAllocationsParams: { enabled: true, min_number_of_allocations: 0, max_number_of_allocations: 2, @@ -590,18 +626,20 @@ describe('DeploymentParamsMapper', () => { }); expect( - mapper.mapUiToApiDeploymentParams({ + mapper.mapUiToApiDeploymentParams(modelId, { deploymentId: 'test-deployment', optimized: 'optimizedForIngest', adaptiveResources: true, vCPUUsage: 'medium', }) ).toEqual({ - model_id: modelId, - deployment_id: 'test-deployment', - priority: 'normal', - threads_per_allocation: 1, - adaptive_allocations: { + modelId, + deploymentParams: { + deployment_id: 'test-deployment', + priority: 'normal', + threads_per_allocation: 1, + }, + adaptiveAllocationsParams: { enabled: true, min_number_of_allocations: 1, max_number_of_allocations: 32, @@ -609,18 +647,20 @@ describe('DeploymentParamsMapper', () => { }); expect( - mapper.mapUiToApiDeploymentParams({ + mapper.mapUiToApiDeploymentParams(modelId, { deploymentId: 'test-deployment', optimized: 'optimizedForIngest', adaptiveResources: true, vCPUUsage: 'high', }) ).toEqual({ - model_id: modelId, - deployment_id: 'test-deployment', - priority: 'normal', - threads_per_allocation: 1, - adaptive_allocations: { + modelId, + deploymentParams: { + deployment_id: 'test-deployment', + priority: 'normal', + threads_per_allocation: 1, + }, + adaptiveAllocationsParams: { enabled: true, min_number_of_allocations: 1, max_number_of_allocations: 99999, diff --git a/x-pack/platform/plugins/shared/ml/public/application/model_management/deployment_params_mapper.ts b/x-pack/platform/plugins/shared/ml/public/application/model_management/deployment_params_mapper.ts index d9bdeae9ec94d..f6e73b39dbdd3 100644 --- a/x-pack/platform/plugins/shared/ml/public/application/model_management/deployment_params_mapper.ts +++ b/x-pack/platform/plugins/shared/ml/public/application/model_management/deployment_params_mapper.ts @@ -12,6 +12,7 @@ import type { CloudInfo } from '../services/ml_server_info'; import type { MlServerLimits } from '../../../common/types/ml_server_info'; import type { AdaptiveAllocations } from '../../../server/lib/ml_client/types'; import type { DeploymentParamsUI } from './deployment_setup'; +import type { StartAllocationParams } from '../services/ml_api_service/trained_models'; export type MlStartTrainedModelDeploymentRequestNew = MlStartTrainedModelDeploymentRequest & AdaptiveAllocations; @@ -81,7 +82,6 @@ export class DeploymentParamsMapper { } constructor( - private readonly modelId: string, private readonly mlServerLimits: MlServerLimits, private readonly cloudInfo: CloudInfo, private readonly showNodeInfo: boolean, @@ -189,8 +189,9 @@ export class DeploymentParamsMapper { * @param input */ public mapUiToApiDeploymentParams( + modelId: string, input: DeploymentParamsUI - ): MlStartTrainedModelDeploymentRequestNew { + ): StartAllocationParams { const resultInput: DeploymentParamsUI = Object.create(input); if (!this.showNodeInfo && this.nlpSettings?.modelDeployment.allowStaticAllocations === false) { // Enforce adaptive resources for serverless projects with prohibited static allocations @@ -200,21 +201,22 @@ export class DeploymentParamsMapper { const allocationParams = this.getAllocationsParams(resultInput); return { - model_id: this.modelId, - deployment_id: resultInput.deploymentId, - priority: 'normal', - threads_per_allocation: this.getNumberOfThreads(resultInput), - ...(resultInput.adaptiveResources - ? { - adaptive_allocations: { - enabled: true, - min_number_of_allocations: allocationParams.min_number_of_allocations, - max_number_of_allocations: allocationParams.max_number_of_allocations, - }, - } - : { - number_of_allocations: allocationParams.number_of_allocations, - }), + modelId, + deploymentParams: { + deployment_id: resultInput.deploymentId, + threads_per_allocation: this.getNumberOfThreads(resultInput), + priority: 'normal', + ...(!resultInput.adaptiveResources && { + number_of_allocations: allocationParams.number_of_allocations, + }), + }, + ...(resultInput.adaptiveResources && { + adaptiveAllocationsParams: { + enabled: true, + min_number_of_allocations: allocationParams.min_number_of_allocations, + max_number_of_allocations: allocationParams.max_number_of_allocations, + }, + }), }; } diff --git a/x-pack/platform/plugins/shared/ml/public/application/model_management/deployment_setup.tsx b/x-pack/platform/plugins/shared/ml/public/application/model_management/deployment_setup.tsx index fb86af0de2e4d..e7f1827b69955 100644 --- a/x-pack/platform/plugins/shared/ml/public/application/model_management/deployment_setup.tsx +++ b/x-pack/platform/plugins/shared/ml/public/application/model_management/deployment_setup.tsx @@ -53,7 +53,6 @@ import { type TrainedModelDeploymentStatsResponse, } from '../../../common/types/trained_models'; import { type CloudInfo, getNewJobLimits } from '../services/ml_server_info'; -import type { MlStartTrainedModelDeploymentRequestNew } from './deployment_params_mapper'; import { DeploymentParamsMapper } from './deployment_params_mapper'; import type { HttpService } from '../services/http_service'; @@ -924,9 +923,8 @@ export const getUserInputModelDeploymentParamsProvider = modelId: string, initialParams?: TrainedModelDeploymentStatsResponse, deploymentIds?: string[] - ): Promise => { + ): Promise => { const deploymentParamsMapper = new DeploymentParamsMapper( - modelId, getNewJobLimits(), cloudInfo, showNodeInfo, @@ -953,7 +951,8 @@ export const getUserInputModelDeploymentParamsProvider = modelId={modelId} onConfigChange={(config) => { modalSession.close(); - resolve(deploymentParamsMapper.mapUiToApiDeploymentParams(config)); + + resolve(config); }} onClose={() => { modalSession.close(); diff --git a/x-pack/platform/plugins/shared/ml/public/application/model_management/hooks/use_init_trained_models_service.ts b/x-pack/platform/plugins/shared/ml/public/application/model_management/hooks/use_init_trained_models_service.ts index 66b916641205e..4bdf83fdb5781 100644 --- a/x-pack/platform/plugins/shared/ml/public/application/model_management/hooks/use_init_trained_models_service.ts +++ b/x-pack/platform/plugins/shared/ml/public/application/model_management/hooks/use_init_trained_models_service.ts @@ -9,11 +9,15 @@ import { useEffect, useMemo } from 'react'; import { BehaviorSubject } from 'rxjs'; import { useStorage } from '@kbn/ml-local-storage'; import { ML_SCHEDULED_MODEL_DEPLOYMENTS } from '../../../../common/types/storage'; -import type { TrainedModelsService } from '../trained_models_service'; +import type { ScheduledDeployment, TrainedModelsService } from '../trained_models_service'; import { useMlKibana } from '../../contexts/kibana'; import { useToastNotificationService } from '../../services/toast_notification_service'; import { useSavedObjectsApiService } from '../../services/ml_api_service/saved_objects'; -import type { StartAllocationParams } from '../../services/ml_api_service/trained_models'; +import { useEnabledFeatures, useMlServerInfo } from '../../contexts/ml'; +import { useCloudCheck } from '../../components/node_available_warning/hooks'; +import { getNewJobLimits } from '../../services/ml_server_info'; +import { DeploymentParamsMapper } from '../deployment_params_mapper'; +import { useMlTelemetryClient } from '../../contexts/ml/ml_telemetry_context'; /** * Hook that initializes the shared TrainedModelsService instance with storage @@ -29,19 +33,32 @@ export function useInitTrainedModelsService( }, } = useMlKibana(); + const { telemetryClient } = useMlTelemetryClient(); + const { displayErrorToast, displaySuccessToast } = useToastNotificationService(); const savedObjectsApiService = useSavedObjectsApiService(); + const { showNodeInfo } = useEnabledFeatures(); + const { nlpSettings } = useMlServerInfo(); + const cloudInfo = useCloudCheck(); + const mlServerLimits = getNewJobLimits(); + + const deploymentParamsMapper = useMemo( + () => new DeploymentParamsMapper(mlServerLimits, cloudInfo, showNodeInfo, nlpSettings), + // eslint-disable-next-line react-hooks/exhaustive-deps + [] + ); + const defaultScheduledDeployments = useMemo(() => [], []); const [scheduledDeployments, setScheduledDeployments] = useStorage< typeof ML_SCHEDULED_MODEL_DEPLOYMENTS, - StartAllocationParams[] + ScheduledDeployment[] >(ML_SCHEDULED_MODEL_DEPLOYMENTS, defaultScheduledDeployments); const scheduledDeployments$ = useMemo( - () => new BehaviorSubject(scheduledDeployments), + () => new BehaviorSubject(scheduledDeployments), // eslint-disable-next-line react-hooks/exhaustive-deps [] ); @@ -54,6 +71,8 @@ export function useInitTrainedModelsService( displaySuccessToast, savedObjectsApiService, canManageSpacesAndSavedObjects, + telemetryService: telemetryClient, + deploymentParamsMapper, }); return () => { diff --git a/x-pack/platform/plugins/shared/ml/public/application/model_management/model_actions.tsx b/x-pack/platform/plugins/shared/ml/public/application/model_management/model_actions.tsx index f716d50caa437..11bb8405b6408 100644 --- a/x-pack/platform/plugins/shared/ml/public/application/model_management/model_actions.tsx +++ b/x-pack/platform/plugins/shared/ml/public/application/model_management/model_actions.tsx @@ -245,20 +245,7 @@ export function useModelActions({ if (!modelDeploymentParams) return; - trainedModelsService.startModelDeployment( - item.model_id, - { - priority: modelDeploymentParams.priority!, - threads_per_allocation: modelDeploymentParams.threads_per_allocation!, - number_of_allocations: modelDeploymentParams.number_of_allocations, - deployment_id: modelDeploymentParams.deployment_id, - }, - { - ...(modelDeploymentParams.adaptive_allocations?.enabled - ? { adaptive_allocations: modelDeploymentParams.adaptive_allocations } - : {}), - } - ); + trainedModelsService.startModelDeployment(item.model_id, modelDeploymentParams); }, }, { @@ -296,18 +283,7 @@ export function useModelActions({ if (!deploymentParams) return; - trainedModelsService.updateModelDeployment( - item.model_id, - deploymentParams.deployment_id!, - { - ...(deploymentParams.adaptive_allocations - ? { adaptive_allocations: deploymentParams.adaptive_allocations } - : { - number_of_allocations: deploymentParams.number_of_allocations!, - adaptive_allocations: { enabled: false }, - }), - } - ); + trainedModelsService.updateModelDeployment(item.model_id, deploymentParams); }, }, { 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 0df129135e9a1..52554db04b8fa 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 @@ -7,10 +7,8 @@ import { BehaviorSubject, throwError, of } from 'rxjs'; import type { Observable } from 'rxjs'; import type { SavedObjectsApiService } from '../services/ml_api_service/saved_objects'; -import type { - StartAllocationParams, - TrainedModelsApiService, -} from '../services/ml_api_service/trained_models'; +import type { TrainedModelsApiService } from '../services/ml_api_service/trained_models'; +import type { ScheduledDeployment } from './trained_models_service'; import { TrainedModelsService } from './trained_models_service'; import type { StartTrainedModelDeploymentResponse, @@ -19,6 +17,9 @@ import type { import { MODEL_STATE } from '@kbn/ml-trained-models-utils'; import { i18n } from '@kbn/i18n'; import type { MlTrainedModelConfig } from '@elastic/elasticsearch/lib/api/types'; +import type { ITelemetryClient } from '../services/telemetry/types'; +import type { DeploymentParamsUI } from './deployment_setup'; +import type { DeploymentParamsMapper } from './deployment_params_mapper'; // Helper that resolves on the next microtask tick const flushPromises = () => @@ -28,8 +29,10 @@ describe('TrainedModelsService', () => { let mockTrainedModelsApiService: jest.Mocked; let mockSavedObjectsApiService: jest.Mocked; let trainedModelsService: TrainedModelsService; - let scheduledDeploymentsSubject: BehaviorSubject; + let scheduledDeploymentsSubject: BehaviorSubject; let mockSetScheduledDeployments: jest.Mock; + let mockTelemetryService: jest.Mocked; + let mockDeploymentParamsMapper: jest.Mocked; const startModelAllocationResponseMock = { assignment: { @@ -65,6 +68,13 @@ describe('TrainedModelsService', () => { } as const, }; + const deploymentParamsUiMock: DeploymentParamsUI = { + deploymentId: 'my-deployment-id', + optimized: 'optimizedForIngest', + adaptiveResources: false, + vCPUUsage: 'low', + }; + const mockDisplayErrorToast = jest.fn(); const mockDisplaySuccessToast = jest.fn(); @@ -72,11 +82,15 @@ describe('TrainedModelsService', () => { jest.clearAllMocks(); jest.useFakeTimers(); - scheduledDeploymentsSubject = new BehaviorSubject([]); - mockSetScheduledDeployments = jest.fn((deployments: StartAllocationParams[]) => { + scheduledDeploymentsSubject = new BehaviorSubject([]); + mockSetScheduledDeployments = jest.fn((deployments: ScheduledDeployment[]) => { scheduledDeploymentsSubject.next(deployments); }); + mockTelemetryService = { + trackTrainedModelsDeploymentCreated: jest.fn(), + }; + mockTrainedModelsApiService = { getTrainedModelsList: jest.fn(), installElasticTrainedModelConfig: jest.fn(), @@ -91,6 +105,24 @@ describe('TrainedModelsService', () => { trainedModelsSpaces: jest.fn(), } as unknown as jest.Mocked; + mockDeploymentParamsMapper = { + mapUiToApiDeploymentParams: jest.fn().mockReturnValue({ + modelId: 'test-model', + deploymentParams: { + deployment_id: 'my-deployment-id', + priority: 'normal', + threads_per_allocation: 1, + number_of_allocations: 1, + }, + }), + mapApiToUiDeploymentParams: jest.fn().mockReturnValue({ + deploymentId: 'my-deployment-id', + optimized: 'optimizedForIngest', + adaptiveResources: false, + vCPUUsage: 'low', + }), + } as unknown as jest.Mocked; + trainedModelsService = new TrainedModelsService(mockTrainedModelsApiService); trainedModelsService.init({ scheduledDeployments$: scheduledDeploymentsSubject, @@ -99,6 +131,8 @@ describe('TrainedModelsService', () => { displaySuccessToast: mockDisplaySuccessToast, savedObjectsApiService: mockSavedObjectsApiService, canManageSpacesAndSavedObjects: true, + telemetryService: mockTelemetryService, + deploymentParamsMapper: mockDeploymentParamsMapper, }); mockTrainedModelsApiService.getTrainedModelsList.mockResolvedValue([]); @@ -216,7 +250,7 @@ describe('TrainedModelsService', () => { it('deploys a model successfully', async () => { const mockModel = { - model_id: 'deploy-model', + model_id: 'test-model', state: MODEL_STATE.DOWNLOADED, type: ['pytorch'], } as unknown as TrainedModelUIItem; @@ -228,23 +262,20 @@ describe('TrainedModelsService', () => { ); // Start deployment - trainedModelsService.startModelDeployment('deploy-model', { - priority: 'low', - threads_per_allocation: 1, - deployment_id: 'my-deployment-id', - }); + trainedModelsService.startModelDeployment('test-model', deploymentParamsUiMock); // Advance timers enough to pass the debounceTime(100) jest.advanceTimersByTime(100); await flushPromises(); expect(mockTrainedModelsApiService.startModelAllocation).toHaveBeenCalledWith({ - modelId: 'deploy-model', - deploymentParams: { - priority: 'low', - threads_per_allocation: 1, + modelId: 'test-model', + deploymentParams: expect.objectContaining({ deployment_id: 'my-deployment-id', - }, + priority: expect.any(String), + number_of_allocations: expect.any(Number), + threads_per_allocation: expect.any(Number), + }), adaptiveAllocationsParams: undefined, }); expect(mockDisplaySuccessToast).toHaveBeenCalledWith({ @@ -256,6 +287,7 @@ describe('TrainedModelsService', () => { values: { deploymentId: 'my-deployment-id' }, }), }); + expect(mockTelemetryService.trackTrainedModelsDeploymentCreated).toHaveBeenCalled(); }); it('handles startModelDeployment error', async () => { @@ -275,11 +307,7 @@ describe('TrainedModelsService', () => { ) as unknown as Observable ); - trainedModelsService.startModelDeployment('error-model', { - priority: 'low', - threads_per_allocation: 1, - deployment_id: 'my-deployment-id', - }); + trainedModelsService.startModelDeployment('error-model', deploymentParamsUiMock); // Advance timers enough to pass the debounceTime(100) jest.advanceTimersByTime(100); @@ -297,25 +325,15 @@ describe('TrainedModelsService', () => { it('updates model deployment successfully', async () => { mockTrainedModelsApiService.updateModelDeployment.mockResolvedValueOnce({ acknowledge: true }); - trainedModelsService.updateModelDeployment('update-model', 'my-deployment-id', { - adaptive_allocations: { - enabled: true, - min_number_of_allocations: 1, - max_number_of_allocations: 2, - }, - }); + trainedModelsService.updateModelDeployment('test-model', deploymentParamsUiMock); await flushPromises(); expect(mockTrainedModelsApiService.updateModelDeployment).toHaveBeenCalledWith( - 'update-model', + 'test-model', 'my-deployment-id', - { - adaptive_allocations: { - enabled: true, - min_number_of_allocations: 1, - max_number_of_allocations: 2, - }, - } + expect.objectContaining({ + number_of_allocations: expect.any(Number), + }) ); expect(mockDisplaySuccessToast).toHaveBeenCalledWith({ @@ -333,13 +351,7 @@ describe('TrainedModelsService', () => { const updateError = new Error('Update error'); mockTrainedModelsApiService.updateModelDeployment.mockRejectedValueOnce(updateError); - trainedModelsService.updateModelDeployment('update-model', 'my-deployment-id', { - adaptive_allocations: { - enabled: true, - min_number_of_allocations: 1, - max_number_of_allocations: 2, - }, - }); + trainedModelsService.updateModelDeployment('update-model', deploymentParamsUiMock); await flushPromises(); expect(mockDisplayErrorToast).toHaveBeenCalledWith( @@ -365,29 +377,21 @@ describe('TrainedModelsService', () => { .mockReturnValueOnce(of(startModelAllocationResponseMock)); // First deployment - trainedModelsService.startModelDeployment('test-model', { - deployment_id: 'first-deployment', - priority: 'low', - threads_per_allocation: 1, - }); + trainedModelsService.startModelDeployment('test-model', deploymentParamsUiMock); jest.advanceTimersByTime(100); await flushPromises(); expect(mockDisplayErrorToast).toHaveBeenCalledWith( expect.any(Error), - expect.stringContaining('first-deployment') + expect.stringContaining('my-deployment-id') ); jest.advanceTimersByTime(100); await flushPromises(); // Second deployment - trainedModelsService.startModelDeployment('test-model', { - deployment_id: 'second-deployment', - priority: 'low', - threads_per_allocation: 1, - }); + trainedModelsService.startModelDeployment('test-model', deploymentParamsUiMock); jest.advanceTimersByTime(100); await flushPromises(); @@ -395,7 +399,7 @@ describe('TrainedModelsService', () => { expect(mockTrainedModelsApiService.startModelAllocation).toHaveBeenCalledTimes(2); expect(mockDisplaySuccessToast).toHaveBeenCalledWith( expect.objectContaining({ - text: expect.stringContaining('second-deployment'), + text: expect.stringContaining('my-deployment-id'), }) ); }); 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 f461875caffe1..c8a8827c9c510 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 @@ -40,13 +40,14 @@ import { type TrainedModelUIItem, } from '../../../common/types/trained_models'; import type { - CommonDeploymentParams, - AdaptiveAllocationsParams, - StartAllocationParams, + UpdateAllocationParams, 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'; +import type { ITelemetryClient } from '../services/telemetry/types'; +import type { DeploymentParamsUI } from './deployment_setup'; +import type { DeploymentParamsMapper } from './deployment_params_mapper'; interface ModelDownloadStatus { [modelId: string]: ModelDownloadState; @@ -55,12 +56,18 @@ interface ModelDownloadStatus { const DOWNLOAD_POLL_INTERVAL = 3000; interface TrainedModelsServiceInit { - scheduledDeployments$: BehaviorSubject; - setScheduledDeployments: (deployments: StartAllocationParams[]) => void; + scheduledDeployments$: BehaviorSubject; + setScheduledDeployments: (deployments: ScheduledDeployment[]) => void; displayErrorToast: (error: ErrorType, title?: string) => void; displaySuccessToast: (toast: { title: string; text: string }) => void; savedObjectsApiService: SavedObjectsApiService; canManageSpacesAndSavedObjects: boolean; + telemetryService: ITelemetryClient; + deploymentParamsMapper: DeploymentParamsMapper; +} + +export interface ScheduledDeployment extends DeploymentParamsUI { + modelId: string; } export class TrainedModelsService { @@ -72,7 +79,7 @@ export class TrainedModelsService { private pollingSubscription?: Subscription; private abortedDownloads = new Set(); private downloadStatusFetchInProgress = false; - private setScheduledDeployments?: (deployingModels: StartAllocationParams[]) => void; + private setScheduledDeployments?: (deployingModels: ScheduledDeployment[]) => void; private displayErrorToast?: ( error: ErrorType, title?: string, @@ -81,12 +88,14 @@ export class TrainedModelsService { ) => void; private displaySuccessToast?: (toast: { title: string; text: string }) => void; private subscription!: Subscription; - private _scheduledDeployments$ = new BehaviorSubject([]); + private _scheduledDeployments$ = new BehaviorSubject([]); private destroySubscription?: Subscription; private readonly _isLoading$ = new BehaviorSubject(true); private savedObjectsApiService!: SavedObjectsApiService; private canManageSpacesAndSavedObjects!: boolean; private isInitialized = false; + private telemetryService!: ITelemetryClient; + private deploymentParamsMapper!: DeploymentParamsMapper; constructor(private readonly trainedModelsApiService: TrainedModelsApiService) {} @@ -97,6 +106,8 @@ export class TrainedModelsService { displaySuccessToast, savedObjectsApiService, canManageSpacesAndSavedObjects, + telemetryService, + deploymentParamsMapper, }: TrainedModelsServiceInit) { // Always cancel any pending destroy when trying to initialize if (this.destroySubscription) { @@ -109,12 +120,14 @@ export class TrainedModelsService { this.subscription = new Subscription(); this.isInitialized = true; this.canManageSpacesAndSavedObjects = canManageSpacesAndSavedObjects; + this.deploymentParamsMapper = deploymentParamsMapper; this.setScheduledDeployments = setScheduledDeployments; this._scheduledDeployments$ = scheduledDeployments$; this.displayErrorToast = displayErrorToast; this.displaySuccessToast = displaySuccessToast; this.savedObjectsApiService = savedObjectsApiService; + this.telemetryService = telemetryService; this.setupFetchingSubscription(); this.setupDeploymentSubscription(); @@ -126,11 +139,11 @@ export class TrainedModelsService { distinctUntilChanged(isEqual) ); - public get scheduledDeployments$(): Observable { + public get scheduledDeployments$(): Observable { return this._scheduledDeployments$; } - public get scheduledDeployments(): StartAllocationParams[] { + public get scheduledDeployments(): ScheduledDeployment[] { return this._scheduledDeployments$.getValue(); } @@ -147,15 +160,10 @@ export class TrainedModelsService { this._reloadSubject$.next(timestamp); } - public startModelDeployment( - modelId: string, - deploymentParams: CommonDeploymentParams, - adaptiveAllocationsParams?: AdaptiveAllocationsParams - ) { + public startModelDeployment(modelId: string, deploymentParams: DeploymentParamsUI) { const newDeployment = { modelId, - deploymentParams, - adaptiveAllocationsParams, + ...deploymentParams, }; const currentDeployments = this._scheduledDeployments$.getValue(); this.setScheduledDeployments?.([...currentDeployments, newDeployment]); @@ -184,12 +192,14 @@ export class TrainedModelsService { }); } - public updateModelDeployment( - modelId: string, - deploymentId: string, - config: AdaptiveAllocationsParams - ) { - from(this.trainedModelsApiService.updateModelDeployment(modelId, deploymentId, config)) + public updateModelDeployment(modelId: string, config: DeploymentParamsUI) { + from( + this.trainedModelsApiService.updateModelDeployment( + modelId, + config.deploymentId!, + this.getUpdateModelAllocationParams(modelId, config) + ) + ) .pipe( finalize(() => { this.fetchModels(); @@ -203,7 +213,7 @@ export class TrainedModelsService { }), text: i18n.translate('xpack.ml.trainedModels.modelsList.updateSuccessText', { defaultMessage: '"{deploymentId}" has been updated successfully.', - values: { deploymentId }, + values: { deploymentId: config.deploymentId }, }), }); }, @@ -212,7 +222,7 @@ export class TrainedModelsService { error, i18n.translate('xpack.ml.trainedModels.modelsList.updateFailed', { defaultMessage: 'Failed to update "{deploymentId}"', - values: { deploymentId }, + values: { deploymentId: config.deploymentId }, }) ); }, @@ -311,7 +321,7 @@ export class TrainedModelsService { // If removing by deploymentId, filter deployments matching that ID. if (deploymentId) { - updated = updated.filter((d) => d.deploymentParams.deployment_id !== deploymentId); + updated = updated.filter((d) => d.deploymentId !== deploymentId); } this.setScheduledDeployments?.(updated); @@ -462,18 +472,34 @@ export class TrainedModelsService { ); } - private handleDeployment$(deployment: StartAllocationParams) { + private handleDeployment$(deployment: ScheduledDeployment) { return of(deployment).pipe( // Wait for the model to be ready for deployment (downloaded or started) switchMap(() => { return this.waitForModelReady(deployment.modelId); }), tap(() => this.setDeployingStateForModel(deployment.modelId)), - exhaustMap(() => { + map(() => + this.deploymentParamsMapper.mapUiToApiDeploymentParams(deployment.modelId, deployment) + ), + exhaustMap((apiParams) => { return firstValueFrom( - this.trainedModelsApiService.startModelAllocation(deployment).pipe( + this.trainedModelsApiService.startModelAllocation(apiParams).pipe( tap({ - next: () => { + next: ({ assignment }) => { + this.telemetryService.trackTrainedModelsDeploymentCreated({ + model_id: apiParams.modelId, + optimized: deployment.optimized, + adaptive_resources: deployment.adaptiveResources, + vcpu_usage: deployment.vCPUUsage, + number_of_allocations: apiParams.deploymentParams.number_of_allocations, + threads_per_allocation: assignment.task_parameters.threads_per_allocation, + min_number_of_allocations: + assignment.adaptive_allocations?.min_number_of_allocations, + max_number_of_allocations: + assignment.adaptive_allocations?.max_number_of_allocations, + }); + this.displaySuccessToast?.({ title: i18n.translate('xpack.ml.trainedModels.modelsList.startSuccess', { defaultMessage: 'Deployment started', @@ -481,7 +507,7 @@ export class TrainedModelsService { text: i18n.translate('xpack.ml.trainedModels.modelsList.startSuccessText', { defaultMessage: '"{deploymentId}" has started successfully.', values: { - deploymentId: deployment.deploymentParams.deployment_id, + deploymentId: deployment.deploymentId, }, }), }); @@ -493,7 +519,7 @@ export class TrainedModelsService { i18n.translate('xpack.ml.trainedModels.modelsList.startFailed', { defaultMessage: 'Failed to start "{deploymentId}"', values: { - deploymentId: deployment.deploymentParams.deployment_id, + deploymentId: deployment.deploymentId, }, }) ); @@ -502,7 +528,7 @@ export class TrainedModelsService { }), finalize(() => { this.removeScheduledDeployments({ - deploymentId: deployment.deploymentParams.deployment_id!, + deploymentId: deployment.deploymentId, }); // Manually update the BehaviorSubject to ensure proper cleanup // if user navigates away, as localStorage hook won't be available to handle updates @@ -518,11 +544,29 @@ export class TrainedModelsService { ); } - private isModelAlreadyDeployed(model: TrainedModelUIItem, deployment: StartAllocationParams) { + private getUpdateModelAllocationParams( + modelId: string, + uiParams: DeploymentParamsUI + ): UpdateAllocationParams { + const apiParams = this.deploymentParamsMapper.mapUiToApiDeploymentParams(modelId, uiParams); + + return apiParams.adaptiveAllocationsParams + ? { + adaptive_allocations: apiParams.adaptiveAllocationsParams, + } + : { + number_of_allocations: apiParams.deploymentParams.number_of_allocations!, + adaptive_allocations: { + enabled: false, + }, + }; + } + + private isModelAlreadyDeployed(model: TrainedModelUIItem, deployment: ScheduledDeployment) { return !!( model && isNLPModelItem(model) && - (model.deployment_ids.includes(deployment.deploymentParams.deployment_id!) || + (model.deployment_ids.includes(deployment.deploymentId!) || model.state === MODEL_STATE.STARTING) ); } 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 3904217152878..8f4c9cc662d47 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 @@ -63,11 +63,9 @@ export type CommonDeploymentParams = { }; export interface AdaptiveAllocationsParams { - adaptive_allocations?: { - enabled: boolean; - min_number_of_allocations?: number; - max_number_of_allocations?: number; - }; + enabled: boolean; + min_number_of_allocations?: number; + max_number_of_allocations?: number; } export interface StartAllocationParams { @@ -75,13 +73,13 @@ export interface StartAllocationParams { deploymentParams: CommonDeploymentParams; adaptiveAllocationsParams?: AdaptiveAllocationsParams; } - export interface DeleteModelParams { modelId: string; options?: { with_pipelines?: boolean; force?: boolean }; } -export interface UpdateAllocationParams extends AdaptiveAllocationsParams { +export interface UpdateAllocationParams { number_of_allocations?: number; + adaptive_allocations?: AdaptiveAllocationsParams; } /** @@ -247,7 +245,13 @@ export function trainedModelsApiProvider(httpService: HttpService) { path: `${ML_INTERNAL_BASE_PATH}/trained_models/${modelId}/deployment/_start`, method: 'POST', query: deploymentParams, - ...(adaptiveAllocationsParams ? { body: JSON.stringify(adaptiveAllocationsParams) } : {}), + ...(adaptiveAllocationsParams + ? { + body: JSON.stringify({ + adaptive_allocations: adaptiveAllocationsParams, + }), + } + : {}), version: '1', }); }, diff --git a/x-pack/platform/plugins/shared/ml/public/application/services/telemetry/events.ts b/x-pack/platform/plugins/shared/ml/public/application/services/telemetry/events.ts new file mode 100644 index 0000000000000..45a07b12f22dc --- /dev/null +++ b/x-pack/platform/plugins/shared/ml/public/application/services/telemetry/events.ts @@ -0,0 +1,76 @@ +/* + * 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 { SchemaObject } from '@elastic/ebt'; +import { + TrainedModelsTelemetryEventTypes, + type TrainedModelsDeploymentEbtProps, + type TrainedModelsTelemetryEvent, +} from './types'; + +const trainedModelsDeploymentSchema: SchemaObject['properties'] = { + model_id: { + type: 'keyword', + _meta: { + description: 'The ID of the trained model', + }, + }, + optimized: { + type: 'keyword', + _meta: { + description: 'The optimized setting of the deployment', + }, + }, + adaptive_resources: { + type: 'boolean', + _meta: { + description: 'Whether adaptive resources are enabled', + }, + }, + vcpu_usage: { + type: 'keyword', + _meta: { + description: 'The vCPU/VCU usage level', + }, + }, + number_of_allocations: { + type: 'integer', + _meta: { + description: 'The number of allocations', + optional: true, + }, + }, + threads_per_allocation: { + type: 'integer', + _meta: { + description: 'The number of threads per allocation', + }, + }, + min_number_of_allocations: { + type: 'integer', + _meta: { + description: 'The minimum number of allocations', + optional: true, + }, + }, + max_number_of_allocations: { + type: 'integer', + _meta: { + description: 'The maximum number of allocations', + optional: true, + }, + }, +}; + +const trainedModelsDeploymentCreatedEventType: TrainedModelsTelemetryEvent = { + eventType: TrainedModelsTelemetryEventTypes.DEPLOYMENT_CREATED, + schema: trainedModelsDeploymentSchema, +}; + +export const trainedModelsEbtEvents = { + trainedModelsDeploymentCreatedEventType, +}; diff --git a/x-pack/platform/plugins/shared/ml/public/application/services/telemetry/telemetry_client.ts b/x-pack/platform/plugins/shared/ml/public/application/services/telemetry/telemetry_client.ts new file mode 100644 index 0000000000000..2b5cf03c33ffc --- /dev/null +++ b/x-pack/platform/plugins/shared/ml/public/application/services/telemetry/telemetry_client.ts @@ -0,0 +1,18 @@ +/* + * 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 { AnalyticsServiceSetup } from '@kbn/core-analytics-browser'; +import type { ITelemetryClient, TrainedModelsDeploymentEbtProps } from './types'; +import { TrainedModelsTelemetryEventTypes } from './types'; + +export class TelemetryClient implements ITelemetryClient { + constructor(private analytics: AnalyticsServiceSetup) {} + + public trackTrainedModelsDeploymentCreated = (eventProps: TrainedModelsDeploymentEbtProps) => { + this.analytics.reportEvent(TrainedModelsTelemetryEventTypes.DEPLOYMENT_CREATED, eventProps); + }; +} diff --git a/x-pack/platform/plugins/shared/ml/public/application/services/telemetry/telemetry_service.ts b/x-pack/platform/plugins/shared/ml/public/application/services/telemetry/telemetry_service.ts new file mode 100644 index 0000000000000..6afa8b793e17e --- /dev/null +++ b/x-pack/platform/plugins/shared/ml/public/application/services/telemetry/telemetry_service.ts @@ -0,0 +1,37 @@ +/* + * 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 { AnalyticsServiceSetup } from '@kbn/core/public'; +import { trainedModelsEbtEvents } from './events'; +import { TelemetryClient } from './telemetry_client'; +import type { ITelemetryClient } from './types'; + +interface TelemetryServiceSetupParams { + analytics: AnalyticsServiceSetup; +} + +export class TelemetryService { + private analytics?: AnalyticsServiceSetup; + + constructor() {} + + public setup({ analytics }: TelemetryServiceSetupParams) { + this.analytics = analytics; + + analytics.registerEventType(trainedModelsEbtEvents.trainedModelsDeploymentCreatedEventType); + } + + public start(): ITelemetryClient { + if (!this.analytics) { + throw new Error( + 'The TelemetryService.setup() method has not been invoked, be sure to call it during the plugin setup.' + ); + } + + return new TelemetryClient(this.analytics); + } +} diff --git a/x-pack/platform/plugins/shared/ml/public/application/services/telemetry/types.ts b/x-pack/platform/plugins/shared/ml/public/application/services/telemetry/types.ts new file mode 100644 index 0000000000000..4b9de880c73bc --- /dev/null +++ b/x-pack/platform/plugins/shared/ml/public/application/services/telemetry/types.ts @@ -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 type { RootSchema } from '@kbn/core/public'; + +export interface TrainedModelsDeploymentEbtProps { + model_id: string; + max_number_of_allocations?: number; + min_number_of_allocations?: number; + threads_per_allocation: number; + number_of_allocations?: number; + optimized: 'optimizedForIngest' | 'optimizedForSearch'; + adaptive_resources: boolean; + vcpu_usage: 'low' | 'medium' | 'high'; +} + +export enum TrainedModelsTelemetryEventTypes { + DEPLOYMENT_CREATED = 'Trained Models Deployment Created', +} + +export interface TrainedModelsTelemetryEvent { + eventType: TrainedModelsTelemetryEventTypes.DEPLOYMENT_CREATED; + schema: RootSchema; +} + +export interface ITelemetryClient { + trackTrainedModelsDeploymentCreated: (eventProps: TrainedModelsDeploymentEbtProps) => void; +} diff --git a/x-pack/platform/plugins/shared/ml/public/embeddables/job_creation/aiops/show_flyout.tsx b/x-pack/platform/plugins/shared/ml/public/embeddables/job_creation/aiops/show_flyout.tsx index aee9deef41c3a..16fe9e8134b3e 100644 --- a/x-pack/platform/plugins/shared/ml/public/embeddables/job_creation/aiops/show_flyout.tsx +++ b/x-pack/platform/plugins/shared/ml/public/embeddables/job_creation/aiops/show_flyout.tsx @@ -15,6 +15,7 @@ import type { DashboardStart } from '@kbn/dashboard-plugin/public'; import type { DataView, DataViewField } from '@kbn/data-views-plugin/common'; import type { QueryDslQueryContainer } from '@elastic/elasticsearch/lib/api/types'; import type { TimeRange } from '@kbn/es-query'; + import { createFlyout, type FlyoutComponentProps } from '../common/create_flyout'; import { CreateCategorizationJobFlyout } from './flyout'; @@ -27,6 +28,7 @@ export async function showPatternAnalysisToADJobFlyout( share: SharePluginStart, data: DataPublicPluginStart, dashboardService: DashboardStart, + lens?: LensPublicStart ): Promise { const Comp: FC = ({ onClose }) => ( diff --git a/x-pack/platform/plugins/shared/ml/public/plugin.ts b/x-pack/platform/plugins/shared/ml/public/plugin.ts index 1fd294d994120..9f634ca9cbcbd 100644 --- a/x-pack/platform/plugins/shared/ml/public/plugin.ts +++ b/x-pack/platform/plugins/shared/ml/public/plugin.ts @@ -75,6 +75,8 @@ import type { ElasticModels } from './application/services/elastic_models_servic import type { MlApi } from './application/services/ml_api_service'; import type { MlCapabilities } from '../common/types/capabilities'; import { AnomalySwimLane } from './shared_components'; +import { TelemetryService } from './application/services/telemetry/telemetry_service'; +import type { ITelemetryClient } from './application/services/telemetry/types'; export interface MlStartDependencies { cases?: CasesPublicStart; @@ -99,6 +101,7 @@ export interface MlStartDependencies { triggersActionsUi?: TriggersAndActionsUIPublicPluginStart; uiActions: UiActionsStart; unifiedSearch: UnifiedSearchPublicPluginStart; + telemetry: ITelemetryClient; } export interface MlSetupDependencies { @@ -157,6 +160,8 @@ export class MlPlugin implements Plugin { }, }; + private telemetry = new TelemetryService(); + constructor(private initializerContext: PluginInitializerContext) { this.isServerless = initializerContext.env.packageInfo.buildFlavor === 'serverless'; initEnabledFeatures(this.enabledFeatures, initializerContext.config.get()); @@ -170,6 +175,10 @@ export class MlPlugin implements Plugin { ): { locator?: LocatorPublic; elasticModels?: ElasticModels } { this.sharedMlServices = getMlSharedServices(core.http); + this.telemetry.setup({ analytics: core.analytics }); + + const telemetryClient = this.telemetry.start(); + core.application.register({ id: PLUGIN_ID, title: i18n.translate('xpack.ml.plugin.title', { @@ -213,6 +222,7 @@ export class MlPlugin implements Plugin { unifiedSearch: pluginsStart.unifiedSearch, usageCollection: pluginsSetup.usageCollection, spaces: pluginsStart.spaces, + telemetry: telemetryClient, }, params, this.isServerless, diff --git a/x-pack/platform/plugins/shared/ml/tsconfig.json b/x-pack/platform/plugins/shared/ml/tsconfig.json index 1f4d44eda8dc2..82f32e5a0c7e1 100644 --- a/x-pack/platform/plugins/shared/ml/tsconfig.json +++ b/x-pack/platform/plugins/shared/ml/tsconfig.json @@ -139,5 +139,6 @@ "@kbn/charts-theme", "@kbn/response-ops-rule-params", "@kbn/unsaved-changes-prompt", + "@kbn/core-analytics-browser", ] } diff --git a/x-pack/solutions/observability/plugins/apm/common/rules/apm_rule_types.ts b/x-pack/solutions/observability/plugins/apm/common/rules/apm_rule_types.ts index d1629348a4e23..c9457f09b23b0 100644 --- a/x-pack/solutions/observability/plugins/apm/common/rules/apm_rule_types.ts +++ b/x-pack/solutions/observability/plugins/apm/common/rules/apm_rule_types.ts @@ -307,3 +307,7 @@ export const ANOMALY_DETECTOR_SELECTOR_OPTIONS = [ // Client side registrations: // x-pack/solutions/observability/plugins/apm/public/components/alerting//index.tsx // x-pack/solutions/observability/plugins/apm/public/components/alerting/register_apm_alerts + +export interface AdditionalContext { + [x: string]: any; +} diff --git a/x-pack/solutions/observability/plugins/apm/common/rules/default_action_message.ts b/x-pack/solutions/observability/plugins/apm/common/rules/default_action_message.ts index e9ae0fa6a99c2..836b44d6141ca 100644 --- a/x-pack/solutions/observability/plugins/apm/common/rules/default_action_message.ts +++ b/x-pack/solutions/observability/plugins/apm/common/rules/default_action_message.ts @@ -26,7 +26,7 @@ export const errorCountMessage = i18n.translate( export const errorCountRecoveryMessage = i18n.translate( 'xpack.apm.alertTypes.errorCount.defaultRecoveryMessage', { - defaultMessage: `'{{context.reason}}' + defaultMessage: `Recovered: '{{context.reason}}' '{{rule.name}}' has recovered. @@ -61,7 +61,7 @@ export const transactionDurationMessage = i18n.translate( export const transactionDurationRecoveryMessage = i18n.translate( 'xpack.apm.alertTypes.transactionDuration.defaultRecoveryMessage', { - defaultMessage: `'{{context.reason}}' + defaultMessage: `Recovered: '{{context.reason}}' '{{rule.name}}' has recovered. @@ -97,7 +97,7 @@ export const transactionErrorRateMessage = i18n.translate( export const transactionErrorRateRecoveryMessage = i18n.translate( 'xpack.apm.alertTypes.transactionErrorRate.defaultRecoveryMessage', { - defaultMessage: `'{{context.reason}}' + defaultMessage: `Recovered: '{{context.reason}}' '{{rule.name}}' has recovered. @@ -132,7 +132,7 @@ export const anomalyMessage = i18n.translate( export const anomalyRecoveryMessage = i18n.translate( 'xpack.apm.alertTypes.transactionDurationAnomaly.defaultRecoveryMessage', { - defaultMessage: `'{{context.reason}}' + defaultMessage: `Recovered: '{{context.reason}}' '{{rule.name}}' has recovered. diff --git a/x-pack/solutions/observability/plugins/apm/public/components/alerting/rule_types/register_apm_rule_types.ts b/x-pack/solutions/observability/plugins/apm/public/components/alerting/rule_types/register_apm_rule_types.ts index 633308babcf10..54e83a3b6c198 100644 --- a/x-pack/solutions/observability/plugins/apm/public/components/alerting/rule_types/register_apm_rule_types.ts +++ b/x-pack/solutions/observability/plugins/apm/public/components/alerting/rule_types/register_apm_rule_types.ts @@ -13,8 +13,11 @@ import { getAlertUrlErrorCount, getAlertUrlTransaction } from '../../../../commo import { anomalyMessage, errorCountMessage, + errorCountRecoveryMessage, transactionDurationMessage, + transactionDurationRecoveryMessage, transactionErrorRateMessage, + transactionErrorRateRecoveryMessage, } from '../../../../common/rules/default_action_message'; import type { AlertParams } from './anomaly_rule_type'; @@ -49,6 +52,7 @@ export function registerApmRuleTypes(observabilityRuleTypeRegistry: Observabilit }), requiresAppContext: false, defaultActionMessage: errorCountMessage, + defaultRecoveryMessage: errorCountRecoveryMessage, priority: 80, }); @@ -80,6 +84,7 @@ export function registerApmRuleTypes(observabilityRuleTypeRegistry: Observabilit alertDetailsAppSection: lazy(() => import('../ui_components/alert_details_app_section')), requiresAppContext: false, defaultActionMessage: transactionDurationMessage, + defaultRecoveryMessage: transactionDurationRecoveryMessage, priority: 60, }); @@ -108,6 +113,7 @@ export function registerApmRuleTypes(observabilityRuleTypeRegistry: Observabilit }), requiresAppContext: false, defaultActionMessage: transactionErrorRateMessage, + defaultRecoveryMessage: transactionErrorRateRecoveryMessage, priority: 70, }); diff --git a/x-pack/solutions/observability/plugins/apm/public/context/apm_plugin/mock_apm_plugin_context.tsx b/x-pack/solutions/observability/plugins/apm/public/context/apm_plugin/mock_apm_plugin_context.tsx index e09a83e9165c4..eed4453c0c765 100644 --- a/x-pack/solutions/observability/plugins/apm/public/context/apm_plugin/mock_apm_plugin_context.tsx +++ b/x-pack/solutions/observability/plugins/apm/public/context/apm_plugin/mock_apm_plugin_context.tsx @@ -209,6 +209,7 @@ export function MockApmPluginContextWrapper({ } performance.mark = jest.fn(); + performance.clearMeasures = jest.fn(); const contextHistory = useHistory(); diff --git a/x-pack/solutions/observability/plugins/apm/server/routes/alerts/rule_types/error_count/register_error_count_rule_type.test.ts b/x-pack/solutions/observability/plugins/apm/server/routes/alerts/rule_types/error_count/register_error_count_rule_type.test.ts index a27b0ca78e510..e27167206b5c0 100644 --- a/x-pack/solutions/observability/plugins/apm/server/routes/alerts/rule_types/error_count/register_error_count_rule_type.test.ts +++ b/x-pack/solutions/observability/plugins/apm/server/routes/alerts/rule_types/error_count/register_error_count_rule_type.test.ts @@ -1025,4 +1025,113 @@ describe('Error count alert', () => { }, }); }); + it('sends recovered alerts with their context', async () => { + const { services, dependencies, executor } = createRuleTypeMocks(); + + registerErrorCountRuleType(dependencies); + + const params = { + threshold: 2, + windowSize: 5, + windowUnit: 'm', + }; + + services.scopedClusterClient.asCurrentUser.search.mockResponse({ + hits: { + hits: [], + total: { + relation: 'eq', + value: 1, + }, + }, + aggregations: { + error_counts: { + buckets: [], + }, + }, + took: 0, + timed_out: false, + _shards: { + failed: 0, + skipped: 0, + successful: 1, + total: 1, + }, + }); + services.alertsClient.getRecoveredAlerts.mockReturnValue([ + { + alert: { + getId: jest.fn().mockReturnValue('test-id'), + getUuid: jest.fn().mockReturnValue('test-uuid'), + scheduledExecutionOptions: undefined, + meta: [], + state: [], + context: {}, + id: 'synthtrace-high-cardinality-0_Synthtrace: many_errors', + alertAsData: undefined, + }, + hit: { + 'processor.event': 'error', + 'kibana.alert.evaluation.value': 60568922, + 'kibana.alert.evaluation.threshold': 24999998, + 'kibana.alert.reason': + 'Error count is 60568922 in the last 5 days for service: synthtrace-high-cardinality-0, env: Synthtrace: many_errors. Alert when > 24999998.', + 'agent.name': 'java', + 'service.environment': 'Synthtrace: many_errors', + 'service.name': 'synthtrace-high-cardinality-0', + 'kibana.alert.rule.category': 'Error count threshold', + 'kibana.alert.rule.consumer': 'alerts', + 'kibana.alert.rule.execution.uuid': '8ecb0754-1220-4b6b-b95d-87b3594e925a', + 'kibana.alert.rule.name': 'Error count threshold rule', + 'kibana.alert.rule.parameters': [], + 'kibana.alert.rule.producer': 'apm', + 'kibana.alert.rule.revision': 8, + 'kibana.alert.rule.rule_type_id': 'apm.error_rate', + 'kibana.alert.rule.tags': [], + 'kibana.alert.rule.uuid': '63028cf5-c059-4a6b-b375-fd9007233223', + 'kibana.space_ids': [], + '@timestamp': '2025-02-20T12:11:51.960Z', + 'event.action': 'active', + 'event.kind': 'signal', + 'kibana.alert.rule.execution.timestamp': '2025-02-20T12:11:51.960Z', + 'kibana.alert.action_group': 'threshold_met', + 'kibana.alert.flapping': true, + 'kibana.alert.flapping_history': [], + 'kibana.alert.instance.id': 'synthtrace-high-cardinality-0_Synthtrace: many_errors', + 'kibana.alert.maintenance_window_ids': [], + 'kibana.alert.consecutive_matches': 2, + 'kibana.alert.status': 'active', + 'kibana.alert.uuid': '81617b97-02d2-413a-9f64-77161de80df4', + 'kibana.alert.workflow_status': 'open', + 'kibana.alert.duration.us': 12012000, + 'kibana.alert.start': '2025-02-20T12:11:39.948Z', + 'kibana.alert.time_range': [], + 'kibana.version': '9.1.0', + tags: [], + 'kibana.alert.previous_action_group': 'threshold_met', + }, + }, + ]); + + await executor({ params }); + + expect(services.alertsClient.setAlertData).toHaveBeenCalledTimes(1); + + expect(services.alertsClient.setAlertData).toHaveBeenCalledWith({ + context: { + alertDetailsUrl: 'http://localhost:5601/eyr/app/observability/alerts/test-uuid', + environment: 'Synthtrace: many_errors', + errorGroupingKey: undefined, + interval: '5 mins', + reason: + 'Error count is 60568922 in the last 5 days for service: synthtrace-high-cardinality-0, env: Synthtrace: many_errors. Alert when > 24999998.', + serviceName: 'synthtrace-high-cardinality-0', + threshold: 2, + triggerValue: 60568922, + viewInAppUrl: + 'http://localhost:5601/eyr/app/apm/services/synthtrace-high-cardinality-0/errors?environment=Synthtrace%3A%20many_errors', + }, + id: 'test-id', + }); + }); }); diff --git a/x-pack/solutions/observability/plugins/apm/server/routes/alerts/rule_types/error_count/register_error_count_rule_type.ts b/x-pack/solutions/observability/plugins/apm/server/routes/alerts/rule_types/error_count/register_error_count_rule_type.ts index f3db00f0433b5..c1c269e081f12 100644 --- a/x-pack/solutions/observability/plugins/apm/server/routes/alerts/rule_types/error_count/register_error_count_rule_type.ts +++ b/x-pack/solutions/observability/plugins/apm/server/routes/alerts/rule_types/error_count/register_error_count_rule_type.ts @@ -43,6 +43,7 @@ import { import type { THRESHOLD_MET_GROUP, ApmRuleParamsType, + AdditionalContext, } from '../../../../../common/rules/apm_rule_types'; import { APM_SERVER_FEATURE_ID, @@ -105,6 +106,7 @@ export function registerErrorCountRuleType({ actionGroups: ruleTypeConfig.actionGroups, defaultActionGroupId: ruleTypeConfig.defaultActionGroupId, validate: { params: errorCountParamsSchema }, + doesSetRecoveryContext: true, schemas: { params: { type: 'config-schema', @@ -269,6 +271,53 @@ export function registerErrorCountRuleType({ }); } ); + // Handle recovered alerts context + const recoveredAlerts = alertsClient.getRecoveredAlerts() ?? []; + for (const recoveredAlert of recoveredAlerts) { + const alertHits = recoveredAlert.hit as AdditionalContext; + const recoveredAlertId = recoveredAlert.alert.getId(); + const alertUuid = recoveredAlert.alert.getUuid(); + const alertDetailsUrl = getAlertDetailsUrl(basePath, spaceId, alertUuid); + const groupByFields: Record = allGroupByFields.reduce( + (acc, sourceField: string) => { + if (alertHits?.[sourceField] !== undefined) { + acc[sourceField] = alertHits[sourceField]; + } + return acc; + }, + {} as Record + ); + + const relativeViewInAppUrl = getAlertUrlErrorCount( + groupByFields[SERVICE_NAME], + getEnvironmentEsField(groupByFields[SERVICE_ENVIRONMENT])?.[SERVICE_ENVIRONMENT] + ); + const viewInAppUrl = addSpaceIdToPath( + basePath.publicBaseUrl, + spaceId, + relativeViewInAppUrl + ); + const groupByActionVariables = getGroupByActionVariables(groupByFields); + const recoveredContext = { + alertDetailsUrl, + interval: formatDurationFromTimeUnitChar( + ruleParams.windowSize, + ruleParams.windowUnit as TimeUnitChar + ), + reason: alertHits?.[ALERT_REASON], + // When group by doesn't include error.grouping_key, the context.error.grouping_key action variable will contain value of the Error Grouping Key filter + errorGroupingKey: ruleParams.errorGroupingKey, + threshold: ruleParams.threshold, + triggerValue: alertHits?.[ALERT_EVALUATION_VALUE], + viewInAppUrl, + ...groupByActionVariables, + }; + + alertsClient.setAlertData({ + id: recoveredAlertId, + context: recoveredContext, + }); + } return { state: {} }; }, diff --git a/x-pack/solutions/observability/plugins/apm/server/routes/alerts/rule_types/transaction_duration/register_transaction_duration_rule_type.test.ts b/x-pack/solutions/observability/plugins/apm/server/routes/alerts/rule_types/transaction_duration/register_transaction_duration_rule_type.test.ts index 9b59a5a0eeb54..a3c738fb537b6 100644 --- a/x-pack/solutions/observability/plugins/apm/server/routes/alerts/rule_types/transaction_duration/register_transaction_duration_rule_type.test.ts +++ b/x-pack/solutions/observability/plugins/apm/server/routes/alerts/rule_types/transaction_duration/register_transaction_duration_rule_type.test.ts @@ -411,4 +411,126 @@ describe('registerTransactionDurationRuleType', () => { }, }); }); + it('sends recovered alert with their context', async () => { + const { services, dependencies, executor } = createRuleTypeMocks(); + + registerTransactionDurationRuleType(dependencies); + + services.scopedClusterClient.asCurrentUser.search.mockResponse({ + hits: { + hits: [], + total: { + relation: 'eq', + value: 0, + }, + }, + aggregations: { + series: { + buckets: [], + }, + }, + took: 0, + timed_out: false, + _shards: { + failed: 0, + skipped: 0, + successful: 1, + total: 1, + }, + }); + + services.alertsClient.getRecoveredAlerts.mockReturnValue([ + { + alert: { + getId: jest.fn().mockReturnValue('test-id'), + getUuid: jest.fn().mockReturnValue('test-uuid'), + scheduledExecutionOptions: undefined, + meta: {}, + state: {}, + context: {}, + id: 'synthtrace-high-cardinality-0_Synthtrace: many_errors_request', + alertAsData: undefined, + }, + hit: { + 'processor.event': 'transaction', + 'kibana.alert.evaluation.value': 1000000, + 'kibana.alert.evaluation.threshold': 149000, + 'kibana.alert.reason': + 'Avg. latency is 1,000 ms in the last 5 days for service: synthtrace-high-cardinality-0, env: Synthtrace: many_errors, type: request. Alert when > 149 ms.', + 'agent.name': 'java', + labels: { custom_label: [] }, + 'service.environment': 'Synthtrace: many_errors', + 'service.name': 'synthtrace-high-cardinality-0', + 'transaction.type': 'request', + 'kibana.alert.rule.category': 'Latency threshold', + 'kibana.alert.rule.consumer': 'alerts', + 'kibana.alert.rule.execution.uuid': '646b1ca4-5799-4b3f-b253-593941da2c2f', + 'kibana.alert.rule.name': 'Latency threshold rule', + 'kibana.alert.rule.parameters': { + aggregationType: 'avg', + threshold: 149, + windowSize: 5, + windowUnit: 'd', + environment: 'ENVIRONMENT_ALL', + }, + 'kibana.alert.rule.producer': 'apm', + 'kibana.alert.rule.revision': 15, + 'kibana.alert.rule.rule_type_id': 'apm.transaction_duration', + 'kibana.alert.rule.tags': [], + 'kibana.alert.rule.uuid': '9c4a8e4f-b55c-426c-b4cc-fd2c9cb8bf89', + 'kibana.space_ids': ['default'], + '@timestamp': '2025-02-20T12:40:40.956Z', + 'event.action': 'open', + 'event.kind': 'signal', + 'kibana.alert.rule.execution.timestamp': '2025-02-20T12:40:40.956Z', + 'kibana.alert.action_group': 'threshold_met', + 'kibana.alert.flapping': false, + 'kibana.alert.flapping_history': [true], + 'kibana.alert.instance.id': + 'synthtrace-high-cardinality-0_Synthtrace: many_errors_request', + 'kibana.alert.maintenance_window_ids': [], + 'kibana.alert.consecutive_matches': 1, + 'kibana.alert.status': 'active', + 'kibana.alert.uuid': 'b60476e6-f4e3-47a1-ac1a-a53616411b66', + 'kibana.alert.severity_improving': false, + 'kibana.alert.workflow_status': 'open', + 'kibana.alert.duration.us': 0, + 'kibana.alert.start': '2025-02-20T12:40:40.956Z', + 'kibana.alert.time_range': { gte: '2025-02-20T12:40:40.956Z' }, + 'kibana.version': '9.1.0', + tags: [], + }, + }, + ]); + services.alertsClient.report.mockReturnValue({ uuid: 'test-uuid' }); + + const params = { + threshold: 3000, + windowSize: 5, + windowUnit: 'm', + transactionType: 'request', + serviceName: 'opbeans-java', + aggregationType: 'avg', + transactionName: 'GET /orders', + }; + await executor({ params }); + expect(services.alertsClient.setAlertData).toHaveBeenCalledTimes(1); + expect(services.alertsClient.setAlertData).toHaveBeenCalledWith({ + context: { + alertDetailsUrl: 'http://localhost:5601/eyr/app/observability/alerts/test-uuid', + environment: 'Synthtrace: many_errors', + interval: '5 mins', + reason: + 'Avg. latency is 1,000 ms in the last 5 days for service: synthtrace-high-cardinality-0, env: Synthtrace: many_errors, type: request. Alert when > 149 ms.', + serviceName: 'synthtrace-high-cardinality-0', + threshold: 3000, + transactionName: 'GET /orders', + transactionType: 'request', + triggerValue: '1,000 ms', + viewInAppUrl: + 'http://localhost:5601/eyr/app/apm/services/synthtrace-high-cardinality-0?transactionType=request&environment=Synthtrace%3A%20many_errors', + }, + id: 'test-id', + }); + }); }); diff --git a/x-pack/solutions/observability/plugins/apm/server/routes/alerts/rule_types/transaction_duration/register_transaction_duration_rule_type.ts b/x-pack/solutions/observability/plugins/apm/server/routes/alerts/rule_types/transaction_duration/register_transaction_duration_rule_type.ts index b75f2d01fa4b2..2a8ce60e86261 100644 --- a/x-pack/solutions/observability/plugins/apm/server/routes/alerts/rule_types/transaction_duration/register_transaction_duration_rule_type.ts +++ b/x-pack/solutions/observability/plugins/apm/server/routes/alerts/rule_types/transaction_duration/register_transaction_duration_rule_type.ts @@ -47,6 +47,7 @@ import { import type { THRESHOLD_MET_GROUP, ApmRuleParamsType, + AdditionalContext, } from '../../../../../common/rules/apm_rule_types'; import { APM_SERVER_FEATURE_ID, @@ -114,6 +115,7 @@ export function registerTransactionDurationRuleType({ actionGroups: ruleTypeConfig.actionGroups, defaultActionGroupId: ruleTypeConfig.defaultActionGroupId, validate: { params: transactionDurationParamsSchema }, + doesSetRecoveryContext: true, schemas: { params: { type: 'config-schema', @@ -233,7 +235,7 @@ export function registerTransactionDurationRuleType({ for (const bucket of response.aggregations.series.buckets) { const groupByFields = bucket.key.reduce((obj, bucketKey, bucketIndex) => { - obj[allGroupByFields[bucketIndex]] = bucketKey; + obj[allGroupByFields[bucketIndex]] = bucketKey as string; return obj; }, {} as Record); @@ -322,6 +324,57 @@ export function registerTransactionDurationRuleType({ context, }); } + // Handle recovered alerts context + const recoveredAlerts = alertsClient.getRecoveredAlerts() ?? []; + for (const recoveredAlert of recoveredAlerts) { + const alertHits = recoveredAlert.hit as AdditionalContext; + const recoveredAlertId = recoveredAlert.alert.getId(); + const alertUuid = recoveredAlert.alert.getUuid(); + const alertDetailsUrl = getAlertDetailsUrl(basePath, spaceId, alertUuid); + const groupByFields: Record = allGroupByFields.reduce( + (acc, sourceField: string) => { + if (alertHits?.[sourceField] !== undefined) { + acc[sourceField] = alertHits[sourceField]; + } + return acc; + }, + {} as Record + ); + const viewInAppUrl = addSpaceIdToPath( + basePath.publicBaseUrl, + spaceId, + getAlertUrlTransaction( + groupByFields[SERVICE_NAME], + getEnvironmentEsField(groupByFields[SERVICE_ENVIRONMENT])?.[SERVICE_ENVIRONMENT], + groupByFields[TRANSACTION_TYPE] + ) + ); + + const durationFormatter = getDurationFormatter(alertHits?.[ALERT_EVALUATION_VALUE]); + const transactionDurationFormatted = durationFormatter( + alertHits?.[ALERT_EVALUATION_VALUE] + ).formatted; + const groupByActionVariables = getGroupByActionVariables(groupByFields); + const recoveredContext = { + alertDetailsUrl, + interval: formatDurationFromTimeUnitChar( + ruleParams.windowSize, + ruleParams.windowUnit as TimeUnitChar + ), + reason: alertHits?.[ALERT_REASON], + // When group by doesn't include transaction.name, the context.transaction.name action variable will contain value of the Transaction Name filter + transactionName: ruleParams.transactionName, + threshold: ruleParams.threshold, + triggerValue: transactionDurationFormatted, + viewInAppUrl, + ...groupByActionVariables, + }; + + alertsClient.setAlertData({ + id: recoveredAlertId, + context: recoveredContext, + }); + } return { state: {} }; }, diff --git a/x-pack/solutions/observability/plugins/apm/server/routes/alerts/rule_types/transaction_error_rate/register_transaction_error_rate_rule_type.test.ts b/x-pack/solutions/observability/plugins/apm/server/routes/alerts/rule_types/transaction_error_rate/register_transaction_error_rate_rule_type.test.ts index 98eda3ef9e904..bd5ab35a757d9 100644 --- a/x-pack/solutions/observability/plugins/apm/server/routes/alerts/rule_types/transaction_error_rate/register_transaction_error_rate_rule_type.test.ts +++ b/x-pack/solutions/observability/plugins/apm/server/routes/alerts/rule_types/transaction_error_rate/register_transaction_error_rate_rule_type.test.ts @@ -596,4 +596,119 @@ describe('Transaction error rate alert', () => { }, }); }); + + it('sends the recovered alerts with their context', async () => { + const { services, dependencies, executor } = createRuleTypeMocks(); + + registerTransactionErrorRateRuleType({ + ...dependencies, + }); + services.scopedClusterClient.asCurrentUser.search.mockResponse({ + hits: { + hits: [], + total: { + relation: 'eq', + value: 1, + }, + }, + aggregations: { + series: { + buckets: [], + }, + }, + took: 0, + timed_out: false, + _shards: { + failed: 0, + skipped: 0, + successful: 1, + total: 1, + }, + }); + services.alertsClient.getRecoveredAlerts.mockReturnValue([ + { + alert: { + getId: jest.fn().mockReturnValue('test-id'), + getUuid: jest.fn().mockReturnValue('test-uuid'), + scheduledExecutionOptions: undefined, + meta: [], + state: [], + context: {}, + id: 'synthtrace-high-cardinality-0_Synthtrace: many_errors_request', + alertAsData: undefined, + }, + hit: { + 'processor.event': 'transaction', + 'kibana.alert.evaluation.value': 100, + 'kibana.alert.evaluation.threshold': 30, + 'kibana.alert.reason': + 'Failed transactions is 100% in the last 5 days for service: synthtrace-high-cardinality-0, env: Synthtrace: many_errors, type: request. Alert when > 30%.', + 'agent.name': 'java', + labels: [], + 'service.environment': 'Synthtrace: many_errors', + 'service.name': 'synthtrace-high-cardinality-0', + 'transaction.type': 'request', + 'kibana.alert.rule.category': 'Failed transaction rate threshold', + 'kibana.alert.rule.consumer': 'alerts', + 'kibana.alert.rule.execution.uuid': '3cf39cc5-b538-492e-b45d-35b01b5f56c3', + 'kibana.alert.rule.name': 'Failed transaction rate threshold rule', + 'kibana.alert.rule.parameters': [], + 'kibana.alert.rule.producer': 'apm', + 'kibana.alert.rule.revision': 1, + 'kibana.alert.rule.rule_type_id': 'apm.transaction_error_rate', + 'kibana.alert.rule.tags': [], + 'kibana.alert.rule.uuid': '7afe1f67-4730-46ed-8cf3-9d0671eca409', + 'kibana.space_ids': [], + '@timestamp': '2025-02-20T11:21:08.787Z', + 'event.action': 'active', + 'event.kind': 'signal', + 'kibana.alert.rule.execution.timestamp': '2025-02-20T11:21:08.787Z', + 'kibana.alert.action_group': 'threshold_met', + 'kibana.alert.flapping': false, + 'kibana.alert.flapping_history': [], + 'kibana.alert.instance.id': + 'synthtrace-high-cardinality-0_Synthtrace: many_errors_request', + 'kibana.alert.maintenance_window_ids': [], + 'kibana.alert.consecutive_matches': 2, + 'kibana.alert.status': 'active', + 'kibana.alert.uuid': 'a1c070ea-5bba-4bbb-8564-8f0e545ccb24', + 'kibana.alert.workflow_status': 'open', + 'kibana.alert.duration.us': 21018000, + 'kibana.alert.start': '2025-02-20T11:20:47.769Z', + 'kibana.alert.time_range': [], + 'kibana.version': '9.1.0', + tags: [], + 'kibana.alert.previous_action_group': 'threshold_met', + }, + }, + ]); + + const params = { + threshold: 10, + windowSize: 5, + windowUnit: 'm', + }; + + await executor({ params }); + + expect(services.alertsClient.setAlertData).toHaveBeenCalledTimes(1); + + expect(services.alertsClient.setAlertData).toHaveBeenCalledWith({ + context: { + alertDetailsUrl: 'http://localhost:5601/eyr/app/observability/alerts/test-uuid', + environment: 'Synthtrace: many_errors', + interval: '5 mins', + reason: + 'Failed transactions is 100% in the last 5 days for service: synthtrace-high-cardinality-0, env: Synthtrace: many_errors, type: request. Alert when > 30%.', + serviceName: 'synthtrace-high-cardinality-0', + threshold: 10, + transactionName: undefined, + transactionType: 'request', + triggerValue: '100', + viewInAppUrl: + 'http://localhost:5601/eyr/app/apm/services/synthtrace-high-cardinality-0?transactionType=request&environment=Synthtrace%3A%20many_errors', + }, + id: 'test-id', + }); + }); }); diff --git a/x-pack/solutions/observability/plugins/apm/server/routes/alerts/rule_types/transaction_error_rate/register_transaction_error_rate_rule_type.ts b/x-pack/solutions/observability/plugins/apm/server/routes/alerts/rule_types/transaction_error_rate/register_transaction_error_rate_rule_type.ts index 7857872d2954a..e7f6a1f8e2761 100644 --- a/x-pack/solutions/observability/plugins/apm/server/routes/alerts/rule_types/transaction_error_rate/register_transaction_error_rate_rule_type.ts +++ b/x-pack/solutions/observability/plugins/apm/server/routes/alerts/rule_types/transaction_error_rate/register_transaction_error_rate_rule_type.ts @@ -48,6 +48,7 @@ import { EventOutcome } from '../../../../../common/event_outcome'; import type { THRESHOLD_MET_GROUP, ApmRuleParamsType, + AdditionalContext, } from '../../../../../common/rules/apm_rule_types'; import { APM_SERVER_FEATURE_ID, @@ -112,6 +113,7 @@ export function registerTransactionErrorRateRuleType({ actionGroups: ruleTypeConfig.actionGroups, defaultActionGroupId: ruleTypeConfig.defaultActionGroupId, validate: { params: transactionErrorRateParamsSchema }, + doesSetRecoveryContext: true, schemas: { params: { type: 'config-schema', @@ -318,6 +320,54 @@ export function registerTransactionErrorRateRuleType({ }); }); + // Handle recovered alerts context + const recoveredAlerts = alertsClient.getRecoveredAlerts() ?? []; + for (const recoveredAlert of recoveredAlerts) { + const alertHits = recoveredAlert.hit as AdditionalContext; + const recoveredAlertId = recoveredAlert.alert.getId(); + const alertUuid = recoveredAlert.alert.getUuid(); + const alertDetailsUrl = getAlertDetailsUrl(basePath, spaceId, alertUuid); + const groupByFields: Record = allGroupByFields.reduce( + (acc, sourceField: string) => { + if (alertHits?.[sourceField] !== undefined) { + acc[sourceField] = alertHits[sourceField]; + } + return acc; + }, + {} as Record + ); + const viewInAppUrl = addSpaceIdToPath( + basePath.publicBaseUrl, + spaceId, + getAlertUrlTransaction( + groupByFields[SERVICE_NAME], + getEnvironmentEsField(groupByFields[SERVICE_ENVIRONMENT])?.[SERVICE_ENVIRONMENT], + groupByFields[TRANSACTION_TYPE] + ) + ); + + const groupByActionVariables = getGroupByActionVariables(groupByFields); + const recoveredContext = { + alertDetailsUrl, + interval: formatDurationFromTimeUnitChar( + ruleParams.windowSize, + ruleParams.windowUnit as TimeUnitChar + ), + reason: alertHits?.[ALERT_REASON], + // When group by doesn't include transaction.name, the context.transaction.name action variable will contain value of the Transaction Name filter + transactionName: ruleParams.transactionName, + threshold: ruleParams.threshold, + triggerValue: asDecimalOrInteger(alertHits?.[ALERT_EVALUATION_VALUE]), + viewInAppUrl, + ...groupByActionVariables, + }; + + alertsClient.setAlertData({ + id: recoveredAlertId, + context: recoveredContext, + }); + } + return { state: {} }; }, alerts: ApmRuleTypeAlertDefinition, diff --git a/x-pack/solutions/observability/plugins/apm/server/routes/alerts/test_utils/index.ts b/x-pack/solutions/observability/plugins/apm/server/routes/alerts/test_utils/index.ts index b3f66f1198ed8..c9eaba521b8de 100644 --- a/x-pack/solutions/observability/plugins/apm/server/routes/alerts/test_utils/index.ts +++ b/x-pack/solutions/observability/plugins/apm/server/routes/alerts/test_utils/index.ts @@ -52,6 +52,7 @@ export const createRuleTypeMocks = () => { alertsClient: { report: jest.fn(), setAlertData: jest.fn(), + getRecoveredAlerts: jest.fn(), }, }; diff --git a/x-pack/solutions/observability/plugins/infra/public/alerting/inventory/index.ts b/x-pack/solutions/observability/plugins/infra/public/alerting/inventory/index.ts index 11b8b12950c1b..6cba509e90a8e 100644 --- a/x-pack/solutions/observability/plugins/infra/public/alerting/inventory/index.ts +++ b/x-pack/solutions/observability/plugins/infra/public/alerting/inventory/index.ts @@ -42,7 +42,9 @@ const inventoryDefaultActionMessage = i18n.translate( const inventoryDefaultRecoveryMessage = i18n.translate( 'xpack.infra.metrics.alerting.inventory.threshold.defaultRecoveryMessage', { - defaultMessage: `'{{rule.name}}' has recovered. + defaultMessage: `Recovered '{{context.reason}}' + + '{{rule.name}}' has recovered. - Affected: '{{context.group}}' - Metric: '{{context.metric}}' diff --git a/x-pack/solutions/observability/plugins/infra/public/alerting/log_threshold/log_threshold_rule_type.tsx b/x-pack/solutions/observability/plugins/infra/public/alerting/log_threshold/log_threshold_rule_type.tsx index 897eee17fa34a..04e4cc4d230a9 100644 --- a/x-pack/solutions/observability/plugins/infra/public/alerting/log_threshold/log_threshold_rule_type.tsx +++ b/x-pack/solutions/observability/plugins/infra/public/alerting/log_threshold/log_threshold_rule_type.tsx @@ -35,7 +35,9 @@ const logThresholdDefaultActionMessage = i18n.translate( const logThresholdDefaultRecoveryMessage = i18n.translate( 'xpack.infra.logs.alerting.threshold.defaultRecoveryMessage', { - defaultMessage: `'{{rule.name}}' has recovered. + defaultMessage: `Recovered: '{{context.reason}}' + + '{{rule.name}}' has recovered. [View alert details]('{{context.alertDetailsUrl}}') `, diff --git a/x-pack/solutions/observability/plugins/infra/public/alerting/metric_threshold/index.ts b/x-pack/solutions/observability/plugins/infra/public/alerting/metric_threshold/index.ts index 4f00f9ed0455f..1d025b1f5e0f7 100644 --- a/x-pack/solutions/observability/plugins/infra/public/alerting/metric_threshold/index.ts +++ b/x-pack/solutions/observability/plugins/infra/public/alerting/metric_threshold/index.ts @@ -42,7 +42,9 @@ const metricThresholdDefaultActionMessage = i18n.translate( const metricThresholdDefaultRecoveryMessage = i18n.translate( 'xpack.infra.metrics.alerting.metric.threshold.defaultRecoveryMessage', { - defaultMessage: `'{{rule.name}}' has recovered. + defaultMessage: `Recovered: '{{context.reason}}' + + '{{rule.name}}' has recovered. - Affected: '{{context.group}}' - Metric: '{{context.metric}}' diff --git a/x-pack/solutions/observability/plugins/infra/public/pages/metrics/metrics_explorer/hooks/use_metric_explorer_state.test.tsx b/x-pack/solutions/observability/plugins/infra/public/pages/metrics/metrics_explorer/hooks/use_metric_explorer_state.test.tsx index 48f1c786737d6..59030e0865707 100644 --- a/x-pack/solutions/observability/plugins/infra/public/pages/metrics/metrics_explorer/hooks/use_metric_explorer_state.test.tsx +++ b/x-pack/solutions/observability/plugins/infra/public/pages/metrics/metrics_explorer/hooks/use_metric_explorer_state.test.tsx @@ -88,6 +88,7 @@ describe('useMetricsExplorerState', () => { pathname, })); performance.mark = jest.fn(); + performance.clearMeasures = jest.fn(); }); afterEach(() => { diff --git a/x-pack/solutions/observability/plugins/infra/server/lib/alerting/inventory_metric_threshold/inventory_metric_threshold_executor.ts b/x-pack/solutions/observability/plugins/infra/server/lib/alerting/inventory_metric_threshold/inventory_metric_threshold_executor.ts index 62cc1594e4fd9..56451d5441459 100644 --- a/x-pack/solutions/observability/plugins/infra/server/lib/alerting/inventory_metric_threshold/inventory_metric_threshold_executor.ts +++ b/x-pack/solutions/observability/plugins/infra/server/lib/alerting/inventory_metric_threshold/inventory_metric_threshold_executor.ts @@ -350,6 +350,7 @@ export const createInventoryMetricThresholdExecutor = assetDetailsLocator, inventoryLocator, }), + reason: alertHits?.[ALERT_REASON], originalAlertState: translateActionGroupToAlertState(originalActionGroup), originalAlertStateWasALERT: originalActionGroup === FIRED_ACTIONS_ID, originalAlertStateWasWARNING: originalActionGroup === WARNING_ACTIONS_ID, diff --git a/x-pack/solutions/observability/plugins/infra/server/lib/alerting/log_threshold/log_threshold_executor.ts b/x-pack/solutions/observability/plugins/infra/server/lib/alerting/log_threshold/log_threshold_executor.ts index 81bf6226bed2b..83248d0debd4f 100644 --- a/x-pack/solutions/observability/plugins/infra/server/lib/alerting/log_threshold/log_threshold_executor.ts +++ b/x-pack/solutions/observability/plugins/infra/server/lib/alerting/log_threshold/log_threshold_executor.ts @@ -920,6 +920,7 @@ const processRecoveredAlerts = ({ groupByKeys: groupByKeysObjectForRecovered[recoveredAlertId], timestamp: startedAt.toISOString(), viewInAppUrl, + reason: alertHits?.[ALERT_REASON], ...additionalContext, }; diff --git a/x-pack/solutions/observability/plugins/infra/server/lib/alerting/metric_threshold/metric_threshold_executor.ts b/x-pack/solutions/observability/plugins/infra/server/lib/alerting/metric_threshold/metric_threshold_executor.ts index 144b4ebe18580..53f4fec84d896 100644 --- a/x-pack/solutions/observability/plugins/infra/server/lib/alerting/metric_threshold/metric_threshold_executor.ts +++ b/x-pack/solutions/observability/plugins/infra/server/lib/alerting/metric_threshold/metric_threshold_executor.ts @@ -472,7 +472,7 @@ export const createMetricThresholdExecutor = metricsExplorerLocator, additionalContext, }), - + reason: alertHits?.[ALERT_REASON], originalAlertState: translateActionGroupToAlertState(originalActionGroup), originalAlertStateWasALERT: originalActionGroup === FIRED_ACTIONS.id, originalAlertStateWasWARNING: originalActionGroup === WARNING_ACTIONS.id, diff --git a/x-pack/solutions/observability/plugins/observability/public/rules/register_observability_rule_types.ts b/x-pack/solutions/observability/plugins/observability/public/rules/register_observability_rule_types.ts index 9667d9fb2b16e..82d0b80b03c62 100644 --- a/x-pack/solutions/observability/plugins/observability/public/rules/register_observability_rule_types.ts +++ b/x-pack/solutions/observability/plugins/observability/public/rules/register_observability_rule_types.ts @@ -44,7 +44,9 @@ const thresholdDefaultActionMessage = i18n.translate( const thresholdDefaultRecoveryMessage = i18n.translate( 'xpack.observability.customThreshold.rule.alerting.threshold.defaultRecoveryMessage', { - defaultMessage: `'{{rule.name}}' has recovered. + defaultMessage: `Recovered: '{{context.reason}}' + + '{{rule.name}}' has recovered. [View alert details]('{{context.alertDetailsUrl}}') `, diff --git a/x-pack/solutions/observability/plugins/observability/server/lib/rules/custom_threshold/custom_threshold_executor.test.ts b/x-pack/solutions/observability/plugins/observability/server/lib/rules/custom_threshold/custom_threshold_executor.test.ts index 804ae09e5ee9e..62719718067e9 100644 --- a/x-pack/solutions/observability/plugins/observability/server/lib/rules/custom_threshold/custom_threshold_executor.test.ts +++ b/x-pack/solutions/observability/plugins/observability/server/lib/rules/custom_threshold/custom_threshold_executor.test.ts @@ -1660,6 +1660,47 @@ describe('The custom threshold alert type', () => { }, }); }); + test('includes reason message in the recovered alert context pulled from the last active alert ', async () => { + setEvaluationResults([{}]); + const mockedSetContext = jest.fn(); + services.alertsClient.getRecoveredAlerts.mockImplementation((params: any) => { + return [ + { + alert: { + meta: [], + state: [], + context: {}, + id: 'host-0', + getId: jest.fn().mockReturnValue('host-0'), + getUuid: jest.fn().mockReturnValue('mockedUuid'), + getStart: jest.fn().mockReturnValue('2024-07-18T08:09:05.697Z'), + }, + hit: { + 'host.name': 'host-0', + 'kibana.alert.reason': 'This is reason msg for the alert', + }, + }, + ]; + }); + services.alertFactory.done.mockImplementation(() => { + return { + getRecoveredAlerts: jest.fn().mockReturnValue([ + { + setContext: mockedSetContext, + getId: jest.fn().mockReturnValue('mockedId'), + }, + ]), + }; + }); + await execute(COMPARATORS.GREATER_THAN, [0.9]); + expect(services.alertsClient.setAlertData).toBeCalledWith( + expect.objectContaining({ + context: expect.objectContaining({ + reason: 'This is reason msg for the alert', + }), + }) + ); + }); }); describe("querying a metric that hasn't reported data", () => { diff --git a/x-pack/solutions/observability/plugins/observability/server/lib/rules/custom_threshold/custom_threshold_executor.ts b/x-pack/solutions/observability/plugins/observability/server/lib/rules/custom_threshold/custom_threshold_executor.ts index bf6ff9e8916df..caf8671995913 100644 --- a/x-pack/solutions/observability/plugins/observability/server/lib/rules/custom_threshold/custom_threshold_executor.ts +++ b/x-pack/solutions/observability/plugins/observability/server/lib/rules/custom_threshold/custom_threshold_executor.ts @@ -324,6 +324,7 @@ export const createCustomThresholdExecutor = ({ searchConfiguration: params.searchConfiguration, startedAt: indexedStartedAt, }), + reason: alertHits?.[ALERT_REASON], ...additionalContext, }; diff --git a/x-pack/solutions/observability/plugins/slo/public/rules/register_burn_rate_rule_type.ts b/x-pack/solutions/observability/plugins/slo/public/rules/register_burn_rate_rule_type.ts index cd0b5ec478362..21f767fc6b404 100644 --- a/x-pack/solutions/observability/plugins/slo/public/rules/register_burn_rate_rule_type.ts +++ b/x-pack/solutions/observability/plugins/slo/public/rules/register_burn_rate_rule_type.ts @@ -32,7 +32,7 @@ const sloBurnRateDefaultActionMessage = i18n.translate( const sloBurnRateDefaultRecoveryMessage = i18n.translate( 'xpack.slo.rules.burnRate.defaultRecoveryMessage', { - defaultMessage: `'{{context.reason}}' + defaultMessage: `Recovered: '{{context.reason}}' '{{rule.name}}' has recovered. diff --git a/x-pack/solutions/security/packages/kbn-securitysolution-exception-list-components/src/exception_item_card/conditions/entry_content/__snapshots__/entry_content.test.tsx.snap b/x-pack/solutions/security/packages/kbn-securitysolution-exception-list-components/src/exception_item_card/conditions/entry_content/__snapshots__/entry_content.test.tsx.snap index eb7dec6c2dbb0..53c33d983575f 100644 --- a/x-pack/solutions/security/packages/kbn-securitysolution-exception-list-components/src/exception_item_card/conditions/entry_content/__snapshots__/entry_content.test.tsx.snap +++ b/x-pack/solutions/security/packages/kbn-securitysolution-exception-list-components/src/exception_item_card/conditions/entry_content/__snapshots__/entry_content.test.tsx.snap @@ -27,7 +27,6 @@ exports[`EntryContent should render a nested value 1`] = ` class="euiExpression__description emotion-euiExpression__description-subdued-isUppercase" /> - = { policies: { diff --git a/x-pack/solutions/security/plugins/cloud_defend/public/index.ts b/x-pack/solutions/security/plugins/cloud_defend/public/index.ts index 9dcf8bd5b2760..cca2e7edecb56 100755 --- a/x-pack/solutions/security/plugins/cloud_defend/public/index.ts +++ b/x-pack/solutions/security/plugins/cloud_defend/public/index.ts @@ -8,7 +8,6 @@ import { CloudDefendPlugin } from './plugin'; export type { CloudDefendSecuritySolutionContext } from './types'; export { getSecuritySolutionLink } from './common/navigation/security_solution_links'; -export { CLOUD_DEFEND_BASE_PATH } from './common/navigation/constants'; export type { CloudDefendPageId } from './common/navigation/types'; // This exports static code and TypeScript types, diff --git a/x-pack/solutions/security/plugins/cloud_defend/server/lib/telemetry/collectors/accounts_stats_collector.ts b/x-pack/solutions/security/plugins/cloud_defend/server/lib/telemetry/collectors/accounts_stats_collector.ts deleted file mode 100644 index af29fad6e5918..0000000000000 --- a/x-pack/solutions/security/plugins/cloud_defend/server/lib/telemetry/collectors/accounts_stats_collector.ts +++ /dev/null @@ -1,218 +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 type { ElasticsearchClient } from '@kbn/core-elasticsearch-server'; -import type { Logger } from '@kbn/core/server'; -import type { - AggregationsMultiBucketBase, - SearchRequest, -} from '@elastic/elasticsearch/lib/api/types'; -import type { CloudDefendAccountsStats } from './types'; -import { LOGS_CLOUD_DEFEND_PATTERN } from '../../../../common/constants'; - -interface Value { - value: number; -} - -interface KubernetesVersion { - metrics: { 'orchestrator.version': string }; -} - -interface CloudProvider { - metrics: { 'cloud.provider': string }; -} - -interface AccountsStats { - accounts: { - buckets: AccountEntity[]; - }; -} -interface AccountEntity { - key: string; // aggregation bucket key (currently: orchestrator.cluster.id) - doc_count: number; // total doc count (process + file + alerts) - process_doc_count: AggregationsMultiBucketBase; - file_doc_count: AggregationsMultiBucketBase; - alert_doc_count: AggregationsMultiBucketBase; - cloud_provider: { top: CloudProvider[] }; - kubernetes_version: { top: KubernetesVersion[] }; - agents_count: Value; - nodes_count: Value; - pods_count: Value; - resources: { - pods_count: Value; - }; -} - -const getAccountsStatsQuery = (): SearchRequest => ({ - index: LOGS_CLOUD_DEFEND_PATTERN, - query: { - match_all: {}, - }, - aggs: { - accounts: { - terms: { - field: 'orchestrator.cluster.id', - order: { - _count: 'desc', - }, - size: 100, - }, - aggs: { - nodes_count: { - cardinality: { - field: 'cloud.instance.name', - }, - }, - agents_count: { - cardinality: { - field: 'agent.id', - }, - }, - kubernetes_version: { - top_metrics: { - metrics: { - field: 'orchestrator.version', - }, - size: 1, - sort: { - '@timestamp': 'desc', - }, - }, - }, - cloud_provider: { - top_metrics: { - metrics: { - field: 'cloud.provider', - }, - size: 1, - sort: { - '@timestamp': 'desc', - }, - }, - }, - file_doc_count: { - filter: { - bool: { - filter: [ - { - bool: { - should: [ - { - term: { - 'event.category': 'file', - }, - }, - ], - minimum_should_match: 1, - }, - }, - ], - }, - }, - }, - process_doc_count: { - filter: { - bool: { - filter: [ - { - bool: { - should: [ - { - term: { - 'event.category': 'process', - }, - }, - ], - minimum_should_match: 1, - }, - }, - ], - }, - }, - }, - alert_doc_count: { - filter: { - bool: { - filter: [ - { - bool: { - should: [ - { - term: { - 'event.kind': 'alert', - }, - }, - ], - minimum_should_match: 1, - }, - }, - ], - }, - }, - }, - pods_count: { - cardinality: { - field: 'orchestrator.resource.name', - }, - }, - }, - }, - }, - - size: 0, - _source: false, -}); - -const getCloudDefendAccountsStats = ( - aggregatedResourcesStats: AccountsStats, - logger: Logger -): CloudDefendAccountsStats[] => { - const accounts = aggregatedResourcesStats.accounts.buckets; - - const cloudDefendAccountsStats = accounts.map((account) => ({ - account_id: account.key, - total_doc_count: account.doc_count, - file_doc_count: account.file_doc_count.doc_count, - process_doc_count: account.process_doc_count.doc_count, - alert_doc_count: account.alert_doc_count.doc_count, - kubernetes_version: account.kubernetes_version?.top?.[0]?.metrics['orchestrator.version'], - cloud_provider: account.cloud_provider?.top?.[0]?.metrics['cloud.provider'], - agents_count: account.agents_count.value, - nodes_count: account.nodes_count.value, - pods_count: account.pods_count.value, - })); - logger.info('CloudDefend telemetry: accounts stats was sent'); - - return cloudDefendAccountsStats; -}; - -export const getAccountsStats = async ( - esClient: ElasticsearchClient, - logger: Logger -): Promise => { - try { - const isIndexExists = await esClient.indices.exists({ - index: LOGS_CLOUD_DEFEND_PATTERN, - }); - - if (isIndexExists) { - const accountsStatsResponse = await esClient.search( - getAccountsStatsQuery() - ); - - const cloudDefendAccountsStats = accountsStatsResponse.aggregations - ? getCloudDefendAccountsStats(accountsStatsResponse.aggregations, logger) - : []; - - return cloudDefendAccountsStats; - } - - return []; - } catch (e) { - logger.error(`Failed to get account stats ${e}`); - return []; - } -}; diff --git a/x-pack/solutions/security/plugins/cloud_defend/server/lib/telemetry/collectors/indices_stats_collector.ts b/x-pack/solutions/security/plugins/cloud_defend/server/lib/telemetry/collectors/indices_stats_collector.ts deleted file mode 100644 index 2c1279952391d..0000000000000 --- a/x-pack/solutions/security/plugins/cloud_defend/server/lib/telemetry/collectors/indices_stats_collector.ts +++ /dev/null @@ -1,107 +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 type { CoreStart, Logger, SavedObjectsClientContract } from '@kbn/core/server'; -import type { ElasticsearchClient } from '@kbn/core-elasticsearch-server'; -import { getCloudDefendStatus } from '../../../routes/status/status'; -import type { CloudDefendPluginStart, CloudDefendPluginStartDeps } from '../../../types'; - -import type { CloudDefendIndicesStats, IndexStats } from './types'; -import { - ALERTS_INDEX_PATTERN, - FILE_INDEX_PATTERN, - PROCESS_INDEX_PATTERN, -} from '../../../../common/constants'; - -const getIndexDocCount = (esClient: ElasticsearchClient, index: string) => - esClient.indices.stats({ index }); - -const getLatestDocTimestamp = async ( - esClient: ElasticsearchClient, - index: string -): Promise => { - const latestTimestamp = await esClient.search({ - index, - query: { - match_all: {}, - }, - sort: '@timestamp:desc', - size: 1, - fields: ['@timestamp'], - _source: false, - }); - - const latestEventTimestamp = latestTimestamp.hits?.hits[0]?.fields; - - return latestEventTimestamp ? latestEventTimestamp['@timestamp'][0] : null; -}; - -const getIndexStats = async ( - esClient: ElasticsearchClient, - index: string, - logger: Logger -): Promise => { - try { - const lastDocTimestamp = await getLatestDocTimestamp(esClient, index); - - if (lastDocTimestamp) { - const indexStats = await getIndexDocCount(esClient, index); - return { - doc_count: indexStats._all.primaries?.docs ? indexStats._all.primaries?.docs?.count : 0, - deleted: indexStats._all.primaries?.docs?.deleted - ? indexStats._all.primaries?.docs?.deleted - : 0, - size_in_bytes: indexStats._all.primaries?.store - ? indexStats._all.primaries?.store.size_in_bytes - : 0, - last_doc_timestamp: lastDocTimestamp, - }; - } - - return {}; - } catch (e) { - logger.error(`Failed to get index stats for ${index}`); - return {}; - } -}; - -export const getIndicesStats = async ( - esClient: ElasticsearchClient, - soClient: SavedObjectsClientContract, - coreServices: Promise<[CoreStart, CloudDefendPluginStartDeps, CloudDefendPluginStart]>, - logger: Logger -): Promise => { - const [alerts, file, process] = await Promise.all([ - getIndexStats(esClient, ALERTS_INDEX_PATTERN, logger), - getIndexStats(esClient, FILE_INDEX_PATTERN, logger), - getIndexStats(esClient, PROCESS_INDEX_PATTERN, logger), - ]); - - const [, cloudDefendPluginStartDeps] = await coreServices; - - const { status, latestPackageVersion, installedPackagePolicies, healthyAgents } = - await getCloudDefendStatus({ - logger, - esClient, - soClient, - agentPolicyService: cloudDefendPluginStartDeps.fleet.agentPolicyService, - agentService: cloudDefendPluginStartDeps.fleet.agentService, - packagePolicyService: cloudDefendPluginStartDeps.fleet.packagePolicyService, - packageService: cloudDefendPluginStartDeps.fleet.packageService, - }); - - return { - alerts, - file, - process, - latestPackageVersion, - packageStatus: { - status, - installedPackagePolicies, - healthyAgents, - }, - }; -}; diff --git a/x-pack/solutions/security/plugins/cloud_defend/server/lib/telemetry/collectors/installation_stats_collector.ts b/x-pack/solutions/security/plugins/cloud_defend/server/lib/telemetry/collectors/installation_stats_collector.ts deleted file mode 100644 index 98c4a3c49c07b..0000000000000 --- a/x-pack/solutions/security/plugins/cloud_defend/server/lib/telemetry/collectors/installation_stats_collector.ts +++ /dev/null @@ -1,89 +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 type { CoreStart, Logger, SavedObjectsClientContract } from '@kbn/core/server'; -import type { ElasticsearchClient } from '@kbn/core-elasticsearch-server'; -import { - AgentPolicy, - PackagePolicy, - PACKAGE_POLICY_SAVED_OBJECT_TYPE, - SO_SEARCH_LIMIT, -} from '@kbn/fleet-plugin/common'; -import { agentPolicyService } from '@kbn/fleet-plugin/server/services'; -import type { CloudDefendInstallationStats } from './types'; -import type { CloudDefendPluginStart, CloudDefendPluginStartDeps } from '../../../types'; -import { INTEGRATION_PACKAGE_NAME, INPUT_CONTROL } from '../../../../common/constants'; -import { - getInputFromPolicy, - getSelectorsAndResponsesFromYaml, -} from '../../../../common/utils/helpers'; - -export const getInstallationStats = async ( - esClient: ElasticsearchClient, - soClient: SavedObjectsClientContract, - coreServices: Promise<[CoreStart, CloudDefendPluginStartDeps, CloudDefendPluginStart]>, - logger: Logger -): Promise => { - const [, cloudDefendServerPluginStartDeps] = await coreServices; - - const cloudDefendContext = { - logger, - esClient, - soClient, - agentPolicyService: cloudDefendServerPluginStartDeps.fleet.agentPolicyService, - packagePolicyService: cloudDefendServerPluginStartDeps.fleet.packagePolicyService, - }; - - const getInstalledPackagePolicies = async ( - packagePolicies: PackagePolicy[], - agentPolicies: AgentPolicy[] - ) => { - const installationStats = packagePolicies.map( - (packagePolicy: PackagePolicy): CloudDefendInstallationStats => { - const agentCounts = - agentPolicies?.find((agentPolicy) => agentPolicy?.id === packagePolicy.policy_id) - ?.agents ?? 0; - - const input = getInputFromPolicy(packagePolicy, INPUT_CONTROL); - const policyYaml = input?.vars?.configuration?.value; - const { selectors, responses } = getSelectorsAndResponsesFromYaml(policyYaml); - - return { - package_policy_id: packagePolicy.id, - package_version: packagePolicy.package?.version as string, - created_at: packagePolicy.created_at, - agent_policy_id: packagePolicy.policy_ids[0], - agent_count: agentCounts, - policy_yaml: policyYaml, - selectors, - responses, - }; - } - ); - return installationStats; - }; - - const packagePolicies = await cloudDefendContext.packagePolicyService.list(soClient, { - perPage: SO_SEARCH_LIMIT, - kuery: `${PACKAGE_POLICY_SAVED_OBJECT_TYPE}.package.name:"${INTEGRATION_PACKAGE_NAME}"`, - }); - - const agentPolicies = await agentPolicyService.list(soClient, { - perPage: SO_SEARCH_LIMIT, - kuery: '', - esClient, - withAgentCount: true, - }); - - if (!packagePolicies) return []; - - const installationStats: CloudDefendInstallationStats[] = await getInstalledPackagePolicies( - packagePolicies.items, - agentPolicies?.items || [] - ); - - return installationStats; -}; diff --git a/x-pack/solutions/security/plugins/cloud_defend/server/lib/telemetry/collectors/pods_stats_collector.ts b/x-pack/solutions/security/plugins/cloud_defend/server/lib/telemetry/collectors/pods_stats_collector.ts deleted file mode 100644 index 311411ca92cad..0000000000000 --- a/x-pack/solutions/security/plugins/cloud_defend/server/lib/telemetry/collectors/pods_stats_collector.ts +++ /dev/null @@ -1,210 +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 type { ElasticsearchClient } from '@kbn/core-elasticsearch-server'; -import type { Logger } from '@kbn/core/server'; -import type { SearchRequest } from '@elastic/elasticsearch/lib/api/types'; -import type { CloudDefendPodsStats } from './types'; -import { LOGS_CLOUD_DEFEND_PATTERN } from '../../../../common/constants'; - -interface PodsStats { - accounts: { - buckets: AccountEntity[]; - }; -} - -interface Bucket { - key: string; -} - -export interface AccountEntity { - key: string; // orchestrator.cluster.id - doc_count: number; - pods: { - buckets: Pod[]; - }; -} - -interface Pod { - key: string; // orchestrator.resource.name - container_image_name: { - buckets: Bucket[]; - }; - container_image_tag: { - buckets: Bucket[]; - }; - doc_count: number; - file_doc_count: { - doc_count: number; - }; - process_doc_count: { - doc_count: number; - }; - alert_doc_count: { - doc_count: number; - }; -} - -const getPodsStatsQuery = (index: string): SearchRequest => ({ - index, - query: { - match_all: {}, - }, - aggs: { - accounts: { - terms: { - field: 'orchestrator.cluster.id', - order: { - _count: 'desc', - }, - size: 100, - }, - aggs: { - // all cloud-defend logs are from the viewpoint of an orchestrator.resource.type = "pod" - // so no need to filter by orchestrator.resource.type. - pods: { - terms: { - field: 'orchestrator.resource.name', - order: { - _count: 'desc', - }, - size: 100, - }, - aggs: { - container_image_name: { - terms: { - field: 'container.image.name', - size: 1, - }, - }, - container_image_tag: { - terms: { - field: 'container.image.tag', - size: 1, - }, - }, - file_doc_count: { - filter: { - bool: { - filter: [ - { - bool: { - should: [ - { - term: { - 'event.category': 'file', - }, - }, - ], - minimum_should_match: 1, - }, - }, - ], - }, - }, - }, - process_doc_count: { - filter: { - bool: { - filter: [ - { - bool: { - should: [ - { - term: { - 'event.category': 'process', - }, - }, - ], - minimum_should_match: 1, - }, - }, - ], - }, - }, - }, - alert_doc_count: { - filter: { - bool: { - filter: [ - { - bool: { - should: [ - { - term: { - 'event.kind': 'alert', - }, - }, - ], - minimum_should_match: 1, - }, - }, - ], - }, - }, - }, - }, - }, - }, - }, - }, - - size: 0, - _source: false, -}); - -const getCloudDefendPodsStats = ( - aggregatedPodsStats: PodsStats, - logger: Logger -): CloudDefendPodsStats[] => { - const accounts = aggregatedPodsStats.accounts.buckets; - const podsStats = accounts.map((account) => { - const accountId = account.key; - return account.pods.buckets.map((pod) => { - return { - account_id: accountId, - pod_name: pod.key, - container_image_name: pod.container_image_name?.buckets?.[0]?.key, - container_image_tag: pod.container_image_tag?.buckets?.[0]?.key, - total_doc_count: pod.doc_count, - file_doc_count: pod.file_doc_count.doc_count, - process_doc_count: pod.process_doc_count.doc_count, - alert_doc_count: pod.alert_doc_count.doc_count, - }; - }); - }); - logger.info('Cloud defend telemetry: pods stats was sent'); - - return podsStats.flat(2); -}; - -export const getPodsStats = async ( - esClient: ElasticsearchClient, - logger: Logger -): Promise => { - try { - const isIndexExists = await esClient.indices.exists({ - index: LOGS_CLOUD_DEFEND_PATTERN, - }); - - if (isIndexExists) { - const podsStatsResponse = await esClient.search( - getPodsStatsQuery(LOGS_CLOUD_DEFEND_PATTERN) - ); - - const cloudDefendPodsStats = podsStatsResponse.aggregations - ? getCloudDefendPodsStats(podsStatsResponse.aggregations, logger) - : []; - - return cloudDefendPodsStats; - } - - return []; - } catch (e) { - logger.error(`Failed to get pods stats ${e}`); - return []; - } -}; diff --git a/x-pack/solutions/security/plugins/cloud_defend/server/lib/telemetry/collectors/register.ts b/x-pack/solutions/security/plugins/cloud_defend/server/lib/telemetry/collectors/register.ts deleted file mode 100644 index 6b7d53e57f89e..0000000000000 --- a/x-pack/solutions/security/plugins/cloud_defend/server/lib/telemetry/collectors/register.ts +++ /dev/null @@ -1,72 +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 { CollectorFetchContext, UsageCollectionSetup } from '@kbn/usage-collection-plugin/server'; -import type { CoreStart, Logger } from '@kbn/core/server'; -import { CloudDefendPluginStart, CloudDefendPluginStartDeps } from '../../../types'; -import { getIndicesStats } from './indices_stats_collector'; -import { getPodsStats } from './pods_stats_collector'; -import { cloudDefendUsageSchema } from './schema'; -import { CloudDefendUsage } from './types'; -import { getAccountsStats } from './accounts_stats_collector'; -import { getInstallationStats } from './installation_stats_collector'; - -export function registerCloudDefendUsageCollector( - logger: Logger, - coreServices: Promise<[CoreStart, CloudDefendPluginStartDeps, CloudDefendPluginStart]>, - usageCollection?: UsageCollectionSetup -): void { - // usageCollection is an optional dependency, so make sure to return if it is not registered - if (!usageCollection) { - logger.debug('Usage collection disabled'); - return; - } - - // Create usage collector - const cloudDefendUsageCollector = usageCollection.makeUsageCollector({ - type: 'cloud_defend', - isReady: async () => { - await coreServices; - return true; - }, - fetch: async (collectorFetchContext: CollectorFetchContext) => { - logger.debug('Starting cloud_defend usage collection'); - - const [indicesStats, accountsStats, podsStats, installationStats] = await Promise.all([ - getIndicesStats( - collectorFetchContext.esClient, - collectorFetchContext.soClient, - coreServices, - logger - ), - getAccountsStats(collectorFetchContext.esClient, logger), - getPodsStats(collectorFetchContext.esClient, logger), - getInstallationStats( - collectorFetchContext.esClient, - collectorFetchContext.soClient, - coreServices, - logger - ), - ]).catch((err) => { - logger.error(err); - - return err; - }); - - return { - indices: indicesStats, - accounts_stats: accountsStats, - pods_stats: podsStats, - installation_stats: installationStats, - }; - }, - schema: cloudDefendUsageSchema, - }); - - // Register usage collector - usageCollection.registerCollector(cloudDefendUsageCollector); -} diff --git a/x-pack/solutions/security/plugins/cloud_defend/server/lib/telemetry/collectors/schema.ts b/x-pack/solutions/security/plugins/cloud_defend/server/lib/telemetry/collectors/schema.ts deleted file mode 100644 index 55c6677128c09..0000000000000 --- a/x-pack/solutions/security/plugins/cloud_defend/server/lib/telemetry/collectors/schema.ts +++ /dev/null @@ -1,132 +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 type { MakeSchemaFrom } from '@kbn/usage-collection-plugin/server'; -import type { CloudDefendUsage } from './types'; - -export const cloudDefendUsageSchema: MakeSchemaFrom = { - indices: { - alerts: { - doc_count: { - type: 'long', - }, - deleted: { - type: 'long', - }, - size_in_bytes: { - type: 'long', - }, - last_doc_timestamp: { - type: 'date', - }, - }, - file: { - doc_count: { - type: 'long', - }, - deleted: { - type: 'long', - }, - size_in_bytes: { - type: 'long', - }, - last_doc_timestamp: { - type: 'date', - }, - }, - process: { - doc_count: { - type: 'long', - }, - deleted: { - type: 'long', - }, - size_in_bytes: { - type: 'long', - }, - last_doc_timestamp: { - type: 'date', - }, - }, - latestPackageVersion: { type: 'keyword' }, - packageStatus: { - status: { type: 'keyword' }, - installedPackagePolicies: { type: 'long' }, - healthyAgents: { type: 'long' }, - }, - }, - pods_stats: { - type: 'array', - items: { - account_id: { type: 'keyword' }, - container_image_name: { type: 'keyword' }, - container_image_tag: { type: 'keyword' }, - pod_name: { type: 'keyword' }, - total_doc_count: { type: 'long' }, - process_doc_count: { type: 'long' }, - file_doc_count: { type: 'long' }, - alert_doc_count: { type: 'long' }, - }, - }, - accounts_stats: { - type: 'array', - items: { - account_id: { type: 'keyword' }, - cloud_provider: { type: 'keyword' }, - kubernetes_version: { type: 'keyword' }, - total_doc_count: { type: 'long' }, - file_doc_count: { type: 'long' }, - process_doc_count: { type: 'long' }, - alert_doc_count: { type: 'long' }, - agents_count: { type: 'short' }, - nodes_count: { type: 'short' }, - pods_count: { type: 'short' }, - }, - }, - installation_stats: { - type: 'array', - items: { - package_policy_id: { type: 'keyword' }, - package_version: { type: 'keyword' }, - agent_policy_id: { type: 'keyword' }, - created_at: { type: 'date' }, - agent_count: { type: 'long' }, - policy_yaml: { type: 'keyword' }, - selectors: { - type: 'array', - items: { - type: { type: 'keyword' }, - name: { type: 'keyword' }, - operation: { type: 'array', items: { type: 'keyword' } }, - containerImageFullName: { type: 'array', items: { type: 'keyword' } }, - containerImageName: { type: 'array', items: { type: 'keyword' } }, - containerImageTag: { type: 'array', items: { type: 'keyword' } }, - kubernetesClusterId: { type: 'array', items: { type: 'keyword' } }, - kubernetesClusterName: { type: 'array', items: { type: 'keyword' } }, - kubernetesNamespace: { type: 'array', items: { type: 'keyword' } }, - kubernetesPodLabel: { type: 'array', items: { type: 'keyword' } }, - kubernetesPodName: { type: 'array', items: { type: 'keyword' } }, - targetFilePath: { type: 'array', items: { type: 'keyword' } }, - ignoreVolumeFiles: { type: 'boolean' }, - ignoreVolumeMounts: { type: 'boolean' }, - processExecutable: { type: 'array', items: { type: 'keyword' } }, - processName: { type: 'array', items: { type: 'keyword' } }, - sessionLeaderInteractive: { type: 'boolean' }, - }, - }, - responses: { - type: 'array', - items: { - type: { type: 'keyword' }, - match: { type: 'array', items: { type: 'keyword' } }, - exclude: { type: 'array', items: { type: 'keyword' } }, - actions: { type: 'array', items: { type: 'keyword' } }, - }, - }, - }, - }, -}; diff --git a/x-pack/solutions/security/plugins/cloud_defend/server/lib/telemetry/collectors/types.ts b/x-pack/solutions/security/plugins/cloud_defend/server/lib/telemetry/collectors/types.ts deleted file mode 100644 index 6aca6936af649..0000000000000 --- a/x-pack/solutions/security/plugins/cloud_defend/server/lib/telemetry/collectors/types.ts +++ /dev/null @@ -1,121 +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. - */ -// for some reason we can't reference common/index.ts because -// the `node scripts/check_telemetry.js --fix` command fails with the error -// ERROR Error: Error extracting collector in x-pack/solutions/security/plugins/cloud_defend/server/lib/telemetry/collectors/register.ts -// Error: Unable to find identifier in source Selector -// at createFailError (dev_cli_errors.ts:27:24) -// at parseUsageCollection (ts_parser.ts:226:32) -// at parseUsageCollection.next () -// at extractCollectors (extract_collectors.ts:58:32) -// at extractCollectors.next () -// at Task.task (extract_collectors_task.ts:43:53) -// at runMicrotasks () -// at processTicksAndRejections (node:internal/process/task_queues:96:5) -// -// I guess the intermediate import/export is causing problems -// for now we will just point to the current version (v1) -import type { - Selector, - Response, - SelectorType, - SelectorCondition, - ResponseAction, -} from '../../../../common/v1'; - -export interface CloudDefendUsage { - indices: CloudDefendIndicesStats; - pods_stats: CloudDefendPodsStats[]; - accounts_stats: CloudDefendAccountsStats[]; - installation_stats: CloudDefendInstallationStats[]; -} - -export interface PackageSetupStatus { - status: string; - installedPackagePolicies: number; - healthyAgents: number; -} - -export interface CloudDefendIndicesStats { - alerts: IndexStats | {}; - file: IndexStats | {}; - process: IndexStats | {}; - latestPackageVersion: string; - packageStatus: PackageSetupStatus; -} - -export interface IndexStats { - doc_count: number; - deleted: number; - size_in_bytes: number; - last_doc_timestamp: string | null; -} - -export interface CloudDefendPodsStats { - account_id: string; - pod_name: string; - container_image_name: string; - container_image_tag: string; - total_doc_count: number; - file_doc_count: number; - process_doc_count: number; - alert_doc_count: number; -} - -export interface CloudDefendAccountsStats { - account_id: string; - total_doc_count: number; - cloud_provider: string; - kubernetes_version: string | null; - file_doc_count: number; - process_doc_count: number; - alert_doc_count: number; - agents_count: number; - nodes_count: number; - pods_count: number; -} - -export type CloudDefendSelectorTypeCounts = { - [key in SelectorType]: number; -}; - -export type CloudDefendResponseTypeCounts = { - [key in SelectorType]: number; -}; - -export type CloudDefendConditionsCounts = { - [key in SelectorCondition]?: number; -}; - -export type CloudDefendActionCounts = { - [key in ResponseAction]?: number; -}; - -export interface CloudDefendPolicyYamlStats { - policy_yaml: string; - policy_json: string; // to be used for further digging in BigQuery - selector_counts: CloudDefendSelectorTypeCounts; - response_counts: CloudDefendResponseTypeCounts; - selector_conditions_counts: CloudDefendConditionsCounts; - response_actions_counts: CloudDefendActionCounts; - response_match_names: string[]; - response_exclude_names: string[]; -} - -type CloudDefendSelector = Omit; -type CloudDefendResponse = Omit; - -export interface CloudDefendInstallationStats { - package_policy_id: string; - package_version: string; - agent_policy_id: string; - created_at: string; - agent_count: number; - policy_yaml: string; - selectors: CloudDefendSelector[]; - responses: CloudDefendResponse[]; -} diff --git a/x-pack/solutions/security/plugins/cloud_defend/server/plugin.ts b/x-pack/solutions/security/plugins/cloud_defend/server/plugin.ts index 5e889bc12e69b..05faa8556fd1c 100644 --- a/x-pack/solutions/security/plugins/cloud_defend/server/plugin.ts +++ b/x-pack/solutions/security/plugins/cloud_defend/server/plugin.ts @@ -23,7 +23,6 @@ import { setupRoutes } from './routes/setup_routes'; import { isCloudDefendPackage } from '../common/utils/helpers'; import { isSubscriptionAllowed } from '../common/utils/subscription'; import { onPackagePolicyPostCreateCallback } from './lib/fleet_util'; -import { registerCloudDefendUsageCollector } from './lib/telemetry/collectors/register'; export class CloudDefendPlugin implements Plugin { private readonly logger: Logger; @@ -44,9 +43,6 @@ export class CloudDefendPlugin implements Plugin => { + const params = { + llm, + tools, + streamRunnable: isStream, + prompt, + } as const; + + if (isOpenAI || llmType === 'inference') { + return createOpenAIToolsAgent(params); + } + + if (llmType && TOOL_CALLING_LLM_TYPES.has(llmType)) { + return createToolCallingAgent(params); + } + + return createStructuredChatAgent(params); +}; 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 8e85b20b06c8a..7f8502cf4b4c7 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 @@ -5,15 +5,13 @@ * 2.0. */ -import { Annotation, END, START, StateGraph } from '@langchain/langgraph'; -import { AgentAction, AgentFinish, AgentStep } from '@langchain/core/agents'; +import { END, START, StateGraph } from '@langchain/langgraph'; import { AgentRunnableSequence } from 'langchain/dist/agents/agent'; import { StructuredTool } from '@langchain/core/tools'; import type { Logger } from '@kbn/logging'; -import { BaseMessage } from '@langchain/core/messages'; import { BaseChatModel } from '@langchain/core/language_models/chat_models'; -import { ConversationResponse, Replacements } from '@kbn/elastic-assistant-common'; +import { Replacements } from '@kbn/elastic-assistant-common'; import { PublicMethodsOf } from '@kbn/utility-types'; import { ActionsClient } from '@kbn/actions-plugin/server'; import { SavedObjectsClientContract } from '@kbn/core-saved-objects-api-server'; @@ -29,6 +27,7 @@ import { getPersistedConversation } from './nodes/get_persisted_conversation'; import { persistConversationChanges } from './nodes/persist_conversation_changes'; import { respond } from './nodes/respond'; import { NodeType } from './constants'; +import { getStateAnnotation } from './state'; export const DEFAULT_ASSISTANT_GRAPH_ID = 'Default Security Assistant Graph'; @@ -61,78 +60,6 @@ export const getDefaultAssistantGraph = ({ getFormattedTime, }: GetDefaultAssistantGraphParams) => { try { - // Default graph state - const graphAnnotation = Annotation.Root({ - input: Annotation({ - reducer: (x: string, y?: string) => y ?? x, - default: () => '', - }), - lastNode: Annotation({ - reducer: (x: string, y?: string) => y ?? x, - default: () => 'start', - }), - steps: Annotation({ - reducer: (x: AgentStep[], y: AgentStep[]) => x.concat(y), - default: () => [], - }), - hasRespondStep: Annotation({ - reducer: (x: boolean, y?: boolean) => y ?? x, - default: () => false, - }), - agentOutcome: Annotation({ - reducer: ( - x: AgentAction | AgentFinish | undefined, - y?: AgentAction | AgentFinish | undefined - ) => y ?? x, - default: () => undefined, - }), - messages: Annotation({ - reducer: (x: BaseMessage[], y: BaseMessage[]) => y ?? x, - default: () => [], - }), - chatTitle: Annotation({ - reducer: (x: string, y?: string) => y ?? x, - default: () => '', - }), - llmType: Annotation({ - reducer: (x: string, y?: string) => y ?? x, - default: () => 'unknown', - }), - isStream: Annotation({ - reducer: (x: boolean, y?: boolean) => y ?? x, - default: () => false, - }), - isOssModel: Annotation({ - reducer: (x: boolean, y?: boolean) => y ?? x, - default: () => false, - }), - connectorId: Annotation({ - reducer: (x: string, y?: string) => y ?? x, - default: () => '', - }), - conversation: Annotation({ - reducer: (x: ConversationResponse | undefined, y?: ConversationResponse | undefined) => - y ?? x, - default: () => undefined, - }), - conversationId: Annotation({ - reducer: (x: string, y?: string) => y ?? x, - default: () => '', - }), - responseLanguage: Annotation({ - reducer: (x: string, y?: string) => y ?? x, - default: () => 'English', - }), - provider: Annotation({ - reducer: (x: string, y?: string) => y ?? x, - default: () => '', - }), - formattedTime: Annotation({ - reducer: (x: string, y?: string) => y ?? x, - default: getFormattedTime ?? (() => ''), - }), - }); - // Default node parameters const nodeParams: NodeParamsBase = { actionsClient, @@ -140,8 +67,10 @@ export const getDefaultAssistantGraph = ({ savedObjectsClient, }; + const stateAnnotation = getStateAnnotation({ getFormattedTime }); + // Put together a new graph using default state from above - const graph = new StateGraph(graphAnnotation) + const graph = new StateGraph(stateAnnotation) .addNode(NodeType.GET_PERSISTED_CONVERSATION, (state: AgentState) => getPersistedConversation({ ...nodeParams, 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 3bfd41329ebae..da1d2244e5c5e 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 @@ -7,11 +7,6 @@ import { StructuredTool } from '@langchain/core/tools'; import { getDefaultArguments } from '@kbn/langchain/server'; -import { - createOpenAIToolsAgent, - createStructuredChatAgent, - createToolCallingAgent, -} from 'langchain/agents'; import { APMTracer } from '@kbn/langchain/server/tracers/apm'; import { TelemetryTracer } from '@kbn/langchain/server/tracers/telemetry'; import { pruneContentReferences, MessageMetadata } from '@kbn/elastic-assistant-common'; @@ -25,12 +20,13 @@ import { getLlmClass } from '../../../../routes/utils'; import { EsAnonymizationFieldsSchema } from '../../../../ai_assistant_data_clients/anonymization_fields/types'; import { AssistantToolParams } from '../../../../types'; import { AgentExecutor } from '../../executors/types'; -import { formatPrompt, formatPromptStructured } from './prompts'; +import { formatPrompt } from './prompts'; 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'; +import { agentRunableFactory } from './agentRunnable'; export const callAssistantGraph: AgentExecutor = async ({ abortSignal, @@ -179,28 +175,21 @@ export const callAssistantGraph: AgentExecutor = async ({ savedObjectsClient, }); - const agentRunnable = - isOpenAI || llmType === 'inference' - ? await createOpenAIToolsAgent({ - llm: createLlmInstance(), - tools, - prompt: formatPrompt(defaultSystemPrompt, systemPrompt), - streamRunnable: isStream, - }) - : llmType && ['bedrock', 'gemini'].includes(llmType) - ? await createToolCallingAgent({ - llm: createLlmInstance(), - tools, - prompt: formatPrompt(defaultSystemPrompt, systemPrompt), - streamRunnable: isStream, - }) - : // used with OSS models - await createStructuredChatAgent({ - llm: createLlmInstance(), - tools, - prompt: formatPromptStructured(defaultSystemPrompt, systemPrompt), - streamRunnable: isStream, - }); + const chatPromptTemplate = formatPrompt({ + prompt: defaultSystemPrompt, + additionalPrompt: systemPrompt, + llmType, + isOpenAI, + }); + + const agentRunnable = await agentRunableFactory({ + llm: createLlmInstance(), + isOpenAI, + llmType, + tools, + isStream, + prompt: chatPromptTemplate, + }); const apmTracer = new APMTracer({ projectName: traceOptions?.projectName ?? 'default' }, logger); const telemetryTracer = telemetryParams @@ -214,6 +203,7 @@ export const callAssistantGraph: AgentExecutor = async ({ logger ) : undefined; + const { provider } = !llmType || llmType === 'inference' ? await resolveProviderAndModel({ @@ -240,7 +230,7 @@ export const callAssistantGraph: AgentExecutor = async ({ ...(llmType === 'bedrock' ? { signal: abortSignal } : {}), getFormattedTime: () => getFormattedTime({ - screenContextTimezone: request.body.screenContext?.timeZone, + screenContextTimezone: screenContext?.timeZone, uiSettingsDateFormatTimezone, }), }); diff --git a/x-pack/solutions/security/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/prompts.ts b/x-pack/solutions/security/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/prompts.ts index bc28f00e5d76e..79327648dde34 100644 --- a/x-pack/solutions/security/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/prompts.ts +++ b/x-pack/solutions/security/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/prompts.ts @@ -6,8 +6,9 @@ */ import { ChatPromptTemplate } from '@langchain/core/prompts'; +import { TOOL_CALLING_LLM_TYPES } from './agentRunnable'; -export const formatPrompt = (prompt: string, additionalPrompt?: string) => +const formatPromptToolcalling = (prompt: string, additionalPrompt?: string) => ChatPromptTemplate.fromMessages([ ['system', additionalPrompt ? `${prompt}\n\n${additionalPrompt}` : prompt], ['placeholder', '{knowledge_history}'], @@ -16,7 +17,7 @@ export const formatPrompt = (prompt: string, additionalPrompt?: string) => ['placeholder', '{agent_scratchpad}'], ]); -export const formatPromptStructured = (prompt: string, additionalPrompt?: string) => +const formatPromptStructured = (prompt: string, additionalPrompt?: string) => ChatPromptTemplate.fromMessages([ ['system', additionalPrompt ? `${prompt}\n\n${additionalPrompt}` : prompt], ['placeholder', '{knowledge_history}'], @@ -26,3 +27,20 @@ export const formatPromptStructured = (prompt: string, additionalPrompt?: string '{input}\n\n{agent_scratchpad}\n\n(reminder to respond in a JSON blob no matter what)', ], ]); + +export const formatPrompt = ({ + isOpenAI, + llmType, + prompt, + additionalPrompt, +}: { + isOpenAI: boolean; + llmType: string | undefined; + prompt: string; + additionalPrompt?: string; +}) => { + if (isOpenAI || llmType === 'inference' || (llmType && TOOL_CALLING_LLM_TYPES.has(llmType))) { + return formatPromptToolcalling(prompt, additionalPrompt); + } + return formatPromptStructured(prompt, additionalPrompt); +}; diff --git a/x-pack/solutions/security/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/state.ts b/x-pack/solutions/security/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/state.ts new file mode 100644 index 0000000000000..f1ab308adfefb --- /dev/null +++ b/x-pack/solutions/security/plugins/elastic_assistant/server/lib/langchain/graphs/default_assistant_graph/state.ts @@ -0,0 +1,86 @@ +/* + * 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 { ConversationResponse } from '@kbn/elastic-assistant-common'; +import { BaseMessage } from '@langchain/core/messages'; +import { Annotation } from '@langchain/langgraph'; +import { AgentStep, AgentAction, AgentFinish } from 'langchain/agents'; + +export const getStateAnnotation = ({ getFormattedTime }: { getFormattedTime?: () => string }) => { + const graphAnnotation = Annotation.Root({ + input: Annotation({ + reducer: (x: string, y?: string) => y ?? x, + default: () => '', + }), + lastNode: Annotation({ + reducer: (x: string, y?: string) => y ?? x, + default: () => 'start', + }), + steps: Annotation({ + reducer: (x: AgentStep[], y: AgentStep[]) => x.concat(y), + default: () => [], + }), + hasRespondStep: Annotation({ + reducer: (x: boolean, y?: boolean) => y ?? x, + default: () => false, + }), + agentOutcome: Annotation({ + reducer: ( + x: AgentAction | AgentFinish | undefined, + y?: AgentAction | AgentFinish | undefined + ) => y ?? x, + default: () => undefined, + }), + messages: Annotation({ + reducer: (x: BaseMessage[], y: BaseMessage[]) => y ?? x, + default: () => [], + }), + chatTitle: Annotation({ + reducer: (x: string, y?: string) => y ?? x, + default: () => '', + }), + llmType: Annotation({ + reducer: (x: string, y?: string) => y ?? x, + default: () => 'unknown', + }), + isStream: Annotation({ + reducer: (x: boolean, y?: boolean) => y ?? x, + default: () => false, + }), + isOssModel: Annotation({ + reducer: (x: boolean, y?: boolean) => y ?? x, + default: () => false, + }), + connectorId: Annotation({ + reducer: (x: string, y?: string) => y ?? x, + default: () => '', + }), + conversation: Annotation({ + reducer: (x: ConversationResponse | undefined, y?: ConversationResponse | undefined) => + y ?? x, + default: () => undefined, + }), + conversationId: Annotation({ + reducer: (x: string, y?: string) => y ?? x, + default: () => '', + }), + responseLanguage: Annotation({ + reducer: (x: string, y?: string) => y ?? x, + default: () => 'English', + }), + provider: Annotation({ + reducer: (x: string, y?: string) => y ?? x, + default: () => '', + }), + formattedTime: Annotation({ + reducer: (x: string, y?: string) => y ?? x, + default: getFormattedTime ?? (() => ''), + }), + }); + + return graphAnnotation; +}; 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 bb440f034605a..ae82fec6ceeca 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 @@ -26,21 +26,13 @@ import { import { buildRouteValidationWithZod } from '@kbn/elastic-assistant-common/impl/schemas/common'; import { getDefaultArguments } from '@kbn/langchain/server'; import { StructuredTool } from '@langchain/core/tools'; -import { - AgentFinish, - createOpenAIToolsAgent, - createStructuredChatAgent, - createToolCallingAgent, -} from 'langchain/agents'; +import { AgentFinish } from 'langchain/agents'; import { omit } from 'lodash/fp'; import { localToolPrompts, promptGroupId as toolsGroupId } from '../../lib/prompt/tool_prompts'; import { promptGroupId } from '../../lib/prompt/local_prompt_object'; import { getFormattedTime, getModelOrOss } from '../../lib/prompt/helpers'; import { getAttackDiscoveryPrompts } from '../../lib/attack_discovery/graphs/default_attack_discovery_graph/nodes/helpers/prompts'; -import { - formatPrompt, - formatPromptStructured, -} from '../../lib/langchain/graphs/default_assistant_graph/prompts'; +import { formatPrompt } from '../../lib/langchain/graphs/default_assistant_graph/prompts'; import { getPrompt as localGetPrompt, promptDictionary } from '../../lib/prompt'; import { buildResponse } from '../../lib/build_response'; import { AssistantDataClients } from '../../lib/langchain/executors/types'; @@ -57,6 +49,7 @@ import { import { getLlmClass, getLlmType, isOpenSourceModel } from '../utils'; import { getGraphsFromNames } from './get_graphs_from_names'; import { DEFAULT_DATE_FORMAT_TZ } from '../../../common/constants'; +import { agentRunableFactory } from '../../lib/langchain/graphs/default_assistant_graph/agentRunnable'; const DEFAULT_SIZE = 20; const ROUTE_HANDLER_TIMEOUT = 10 * 60 * 1000; // 10 * 60 seconds = 10 minutes @@ -356,27 +349,20 @@ export const postEvaluateRoute = ( savedObjectsClient, }); - const agentRunnable = - isOpenAI || llmType === 'inference' - ? await createOpenAIToolsAgent({ - llm, - tools, - prompt: formatPrompt(defaultSystemPrompt), - streamRunnable: false, - }) - : llmType && ['bedrock', 'gemini'].includes(llmType) - ? createToolCallingAgent({ - llm, - tools, - prompt: formatPrompt(defaultSystemPrompt), - streamRunnable: false, - }) - : await createStructuredChatAgent({ - llm, - tools, - prompt: formatPromptStructured(defaultSystemPrompt), - streamRunnable: false, - }); + const chatPromptTemplate = formatPrompt({ + prompt: defaultSystemPrompt, + llmType, + isOpenAI, + }); + + const agentRunnable = await agentRunableFactory({ + llm: createLlmInstance(), + isOpenAI, + llmType, + tools, + isStream: false, + prompt: chatPromptTemplate, + }); const uiSettingsDateFormatTimezone = await ctx.core.uiSettings.client.get( DEFAULT_DATE_FORMAT_TZ diff --git a/x-pack/solutions/security/plugins/elastic_assistant/server/types.ts b/x-pack/solutions/security/plugins/elastic_assistant/server/types.ts index 5730336d17b31..1dfe451a915f8 100755 --- a/x-pack/solutions/security/plugins/elastic_assistant/server/types.ts +++ b/x-pack/solutions/security/plugins/elastic_assistant/server/types.ts @@ -24,7 +24,7 @@ import { } from '@kbn/core/server'; import type { LlmTasksPluginStart } from '@kbn/llm-tasks-plugin/server'; import { type MlPluginSetup } from '@kbn/ml-plugin/server'; -import { DynamicStructuredTool, Tool } from '@langchain/core/tools'; +import { StructuredToolInterface } from '@langchain/core/tools'; import { SpacesPluginSetup, SpacesPluginStart } from '@kbn/spaces-plugin/server'; import { TaskManagerSetupContract } from '@kbn/task-manager-plugin/server'; import { @@ -224,7 +224,7 @@ export interface AssistantTool { description: string; sourceRegister: string; isSupported: (params: AssistantToolParams) => boolean; - getTool: (params: AssistantToolParams) => Tool | DynamicStructuredTool | null; + getTool: (params: AssistantToolParams) => StructuredToolInterface | null; } export type AssistantToolLlm = diff --git a/x-pack/solutions/security/plugins/security_solution/common/api/detection_engine/prebuilt_rules/common/prebuilt_rules_filter.ts b/x-pack/solutions/security/plugins/security_solution/common/api/detection_engine/prebuilt_rules/common/prebuilt_rules_filter.ts new file mode 100644 index 0000000000000..12a5fc449f571 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/common/api/detection_engine/prebuilt_rules/common/prebuilt_rules_filter.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 { z } from '@kbn/zod'; + +export enum RuleCustomizationStatus { + CUSTOMIZED = 'CUSTOMIZED', + NOT_CUSTOMIZED = 'NOT_CUSTOMIZED', +} + +export type PrebuiltRulesFilter = z.infer; +export const PrebuiltRulesFilter = z.object({ + /** + * Tags to filter by + */ + tags: z.array(z.string()).optional(), + /** + * Rule name to filter by + */ + name: z.string().optional(), + /** + * Rule customization status to filter by + */ + customization_status: z.nativeEnum(RuleCustomizationStatus).optional(), +}); diff --git a/x-pack/solutions/security/plugins/security_solution/common/api/detection_engine/prebuilt_rules/common/review_prebuilt_rules_upgrade_filter.ts b/x-pack/solutions/security/plugins/security_solution/common/api/detection_engine/prebuilt_rules/common/review_prebuilt_rules_upgrade_filter.ts new file mode 100644 index 0000000000000..8b99489fb4bb4 --- /dev/null +++ b/x-pack/solutions/security/plugins/security_solution/common/api/detection_engine/prebuilt_rules/common/review_prebuilt_rules_upgrade_filter.ts @@ -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 { z } from '@kbn/zod'; +import { PrebuiltRulesFilter } from './prebuilt_rules_filter'; + +export enum RuleCustomizationStatus { + CUSTOMIZED = 'CUSTOMIZED', + NOT_CUSTOMIZED = 'NOT_CUSTOMIZED', +} + +export type ReviewPrebuiltRuleUpgradeFilter = z.infer; +export const ReviewPrebuiltRuleUpgradeFilter = PrebuiltRulesFilter.merge( + z.object({ + /** + * Rule IDs to return upgrade info for + */ + rule_ids: z.array(z.string()).optional(), + }) +); diff --git a/x-pack/solutions/security/plugins/security_solution/common/api/detection_engine/prebuilt_rules/get_prebuilt_rules_status/get_prebuilt_rules_status_route.ts b/x-pack/solutions/security/plugins/security_solution/common/api/detection_engine/prebuilt_rules/get_prebuilt_rules_status/get_prebuilt_rules_status_route.ts index e76ba63cfa17d..1a9e70f84cd2c 100644 --- a/x-pack/solutions/security/plugins/security_solution/common/api/detection_engine/prebuilt_rules/get_prebuilt_rules_status/get_prebuilt_rules_status_route.ts +++ b/x-pack/solutions/security/plugins/security_solution/common/api/detection_engine/prebuilt_rules/get_prebuilt_rules_status/get_prebuilt_rules_status_route.ts @@ -8,6 +8,18 @@ export interface GetPrebuiltRulesStatusResponseBody { /** Aggregated info about all prebuilt rules */ stats: PrebuiltRulesStatusStats; + + /** + * Aggregated info about upgradeable prebuilt rules. This fields is optional + * for backward compatibility. After one serverless release cycle, it can be + * made required. + * */ + aggregated_fields?: { + upgradeable_rules: { + /** List of all tags of the current versions of upgradeable rules */ + tags: string[]; + }; + }; } export interface PrebuiltRulesStatusStats { diff --git a/x-pack/solutions/security/plugins/security_solution/common/api/detection_engine/prebuilt_rules/index.ts b/x-pack/solutions/security/plugins/security_solution/common/api/detection_engine/prebuilt_rules/index.ts index 02ab5c8a3cc0c..df1b5851f5474 100644 --- a/x-pack/solutions/security/plugins/security_solution/common/api/detection_engine/prebuilt_rules/index.ts +++ b/x-pack/solutions/security/plugins/security_solution/common/api/detection_engine/prebuilt_rules/index.ts @@ -22,3 +22,4 @@ export * from './model/diff/three_way_diff/three_way_diff_outcome'; export * from './model/diff/three_way_diff/three_way_diff'; export * from './model/diff/three_way_diff/three_way_diff_conflict'; export * from './model/diff/three_way_diff/three_way_merge_outcome'; +export * from './common/prebuilt_rules_filter'; diff --git a/x-pack/solutions/security/plugins/security_solution/common/api/detection_engine/prebuilt_rules/perform_rule_upgrade/perform_rule_upgrade_route.ts b/x-pack/solutions/security/plugins/security_solution/common/api/detection_engine/prebuilt_rules/perform_rule_upgrade/perform_rule_upgrade_route.ts index ac75bbb56e0bf..de3bb4fc27e1a 100644 --- a/x-pack/solutions/security/plugins/security_solution/common/api/detection_engine/prebuilt_rules/perform_rule_upgrade/perform_rule_upgrade_route.ts +++ b/x-pack/solutions/security/plugins/security_solution/common/api/detection_engine/prebuilt_rules/perform_rule_upgrade/perform_rule_upgrade_route.ts @@ -10,6 +10,7 @@ import { mapValues } from 'lodash'; import { RuleResponse } from '../../model/rule_schema/rule_schemas.gen'; import { AggregatedPrebuiltRuleError, DiffableAllFields } from '../model'; import { RuleSignatureId, RuleVersion } from '../../model'; +import { PrebuiltRulesFilter } from '../common/prebuilt_rules_filter'; export type Mode = z.infer; export const Mode = z.enum(['ALL_RULES', 'SPECIFIC_RULES']); @@ -111,21 +112,31 @@ export const RuleUpgradeSpecifier = z.object({ fields: RuleFieldsToUpgrade.optional(), }); +export type UpgradeConflictResolution = z.infer; +export const UpgradeConflictResolution = z.enum(['SKIP', 'OVERWRITE']); +export type UpgradeConflictResolutionEnum = typeof UpgradeConflictResolution.enum; +export const UpgradeConflictResolutionEnum = UpgradeConflictResolution.enum; + export type UpgradeSpecificRulesRequest = z.infer; export const UpgradeSpecificRulesRequest = z.object({ mode: z.literal('SPECIFIC_RULES'), rules: z.array(RuleUpgradeSpecifier).min(1), pick_version: PickVersionValues.optional(), + on_conflict: UpgradeConflictResolution.optional(), + dry_run: z.boolean().optional(), }); export type UpgradeAllRulesRequest = z.infer; export const UpgradeAllRulesRequest = z.object({ mode: z.literal('ALL_RULES'), pick_version: PickVersionValues.optional(), + filter: PrebuiltRulesFilter.optional(), + on_conflict: UpgradeConflictResolution.optional(), + dry_run: z.boolean().optional(), }); export type SkipRuleUpgradeReason = z.infer; -export const SkipRuleUpgradeReason = z.enum(['RULE_UP_TO_DATE']); +export const SkipRuleUpgradeReason = z.enum(['RULE_UP_TO_DATE', 'CONFLICT']); export type SkipRuleUpgradeReasonEnum = typeof SkipRuleUpgradeReason.enum; export const SkipRuleUpgradeReasonEnum = SkipRuleUpgradeReason.enum; diff --git a/x-pack/solutions/security/plugins/security_solution/common/api/detection_engine/prebuilt_rules/review_rule_upgrade/review_rule_upgrade_route.ts b/x-pack/solutions/security/plugins/security_solution/common/api/detection_engine/prebuilt_rules/review_rule_upgrade/review_rule_upgrade_route.ts index 2f2d6e3bd1c26..3fd95412b9311 100644 --- a/x-pack/solutions/security/plugins/security_solution/common/api/detection_engine/prebuilt_rules/review_rule_upgrade/review_rule_upgrade_route.ts +++ b/x-pack/solutions/security/plugins/security_solution/common/api/detection_engine/prebuilt_rules/review_rule_upgrade/review_rule_upgrade_route.ts @@ -5,35 +5,86 @@ * 2.0. */ -import type { RuleObjectId, RuleSignatureId, RuleTagArray } from '../../model'; +import { z } from '@kbn/zod'; +import { SortOrder, type RuleObjectId, type RuleSignatureId, type RuleTagArray } from '../../model'; import type { PartialRuleDiff } from '../model'; -import type { RuleResponse } from '../../model/rule_schema'; +import type { RuleResponse, RuleVersion } from '../../model/rule_schema'; +import { FindRulesSortField } from '../../rule_management'; +import { PrebuiltRulesFilter } from '../common/prebuilt_rules_filter'; + +export type ReviewRuleUpgradeSort = z.infer; +export const ReviewRuleUpgradeSort = z.object({ + /** + * Field to sort by + */ + field: FindRulesSortField.optional(), + /** + * Sort order + */ + order: SortOrder.optional(), +}); + +export type ReviewRuleUpgradeRequestBody = z.infer; +export const ReviewRuleUpgradeRequestBody = z + .object({ + filter: PrebuiltRulesFilter.optional(), + sort: ReviewRuleUpgradeSort.optional(), + + page: z.coerce.number().int().min(1).optional().default(1), + /** + * Rules per page + */ + per_page: z.coerce.number().int().min(0).optional().default(20), + }) + .nullable(); export interface ReviewRuleUpgradeResponseBody { - /** Aggregated info about all rules available for upgrade */ + /** + * @deprecated Use the prebuilt rule status API instead. The field is kept + * here for backward compatibility but can be removed after one Serverless + * release. + */ stats: RuleUpgradeStatsForReview; /** Info about individual rules: one object per each rule available for upgrade */ rules: RuleUpgradeInfoForReview[]; + + /** The requested page number */ + page: number; + + /** The requested number of items per page */ + per_page: number; + + /** The total number of rules available for upgrade that match the filter criteria */ + total: number; } export interface RuleUpgradeStatsForReview { - /** Number of installed prebuilt rules available for upgrade (stock + customized) */ + /** + * @deprecated Always 0 + */ num_rules_to_upgrade_total: number; - /** Number of installed prebuilt rules with upgrade conflicts (SOLVABLE or NON_SOLVABLE) */ + /** + * @deprecated Always 0 + */ num_rules_with_conflicts: number; - /** Number of installed prebuilt rules with NON_SOLVABLE upgrade conflicts */ + /** + * @deprecated Always 0 + */ num_rules_with_non_solvable_conflicts: number; - /** A union of all tags of all rules available for upgrade */ + /** + * @deprecated Always an empty array + */ tags: RuleTagArray; } export interface RuleUpgradeInfoForReview { id: RuleObjectId; rule_id: RuleSignatureId; + version: RuleVersion; current_rule: RuleResponse; target_rule: RuleResponse; diff: PartialRuleDiff; 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 7cf21a50307f2..7fb27693cc8af 100644 --- a/x-pack/solutions/security/plugins/security_solution/common/constants.ts +++ b/x-pack/solutions/security/plugins/security_solution/common/constants.ts @@ -115,7 +115,6 @@ export const THREAT_INTELLIGENCE_PATH = '/threat_intelligence' as const; export const INVESTIGATIONS_PATH = '/investigations' as const; export const MACHINE_LEARNING_PATH = '/ml' as const; export const ASSETS_PATH = '/assets' as const; -export const CLOUD_DEFEND_PATH = '/cloud_defend' as const; export const ENDPOINTS_PATH = `${MANAGEMENT_PATH}/endpoints` as const; export const POLICIES_PATH = `${MANAGEMENT_PATH}/policy` as const; export const TRUSTED_APPS_PATH = `${MANAGEMENT_PATH}/trusted_apps` as const; @@ -388,7 +387,7 @@ export const STARTED_TRANSFORM_STATES = new Set([ ]); /** - * How many rules to update at a time is set to 50 from errors coming from + * How many rules to update at a time is set to 20 from errors coming from * the slow environments such as cloud when the rule updates are > 100 we were * seeing timeout issues. * @@ -403,14 +402,14 @@ export const STARTED_TRANSFORM_STATES = new Set([ * Lastly, we saw weird issues where Chrome on upstream 408 timeouts will re-call the REST route * which in turn could create additional connections we want to avoid. * - * See file import_rules_route.ts for another area where 50 was chosen, therefore I chose - * 50 here to mimic it as well. If you see this re-opened or what similar to it, consider - * reducing the 50 above to a lower number. + * See file import_rules_route.ts for another area where 20 was chosen, therefore I chose + * 20 here to mimic it as well. If you see this re-opened or what similar to it, consider + * reducing the 20 above to a lower number. * * See the original ticket here: * https://github.com/elastic/kibana/issues/94418 */ -export const MAX_RULES_TO_UPDATE_IN_PARALLEL = 50; +export const MAX_RULES_TO_UPDATE_IN_PARALLEL = 20; export const LIMITED_CONCURRENCY_ROUTE_TAG_PREFIX = `${APP_ID}:limitedConcurrency`; diff --git a/x-pack/solutions/security/plugins/security_solution/common/detection_engine/rule_management/rule_fields.ts b/x-pack/solutions/security/plugins/security_solution/common/detection_engine/rule_management/rule_fields.ts index 5d72cd15a96ae..610b2231e8ee7 100644 --- a/x-pack/solutions/security/plugins/security_solution/common/detection_engine/rule_management/rule_fields.ts +++ b/x-pack/solutions/security/plugins/security_solution/common/detection_engine/rule_management/rule_fields.ts @@ -22,3 +22,4 @@ export const TAGS_FIELD = 'alert.attributes.tags'; export const PARAMS_TYPE_FIELD = 'alert.attributes.params.type'; export const PARAMS_IMMUTABLE_FIELD = 'alert.attributes.params.immutable'; export const LAST_RUN_OUTCOME_FIELD = 'alert.attributes.lastRun.outcome'; +export const IS_CUSTOMIZED_FIELD = 'alert.attributes.params.ruleSource.isCustomized'; diff --git a/x-pack/solutions/security/plugins/security_solution/common/detection_engine/rule_management/rule_filtering.ts b/x-pack/solutions/security/plugins/security_solution/common/detection_engine/rule_management/rule_filtering.ts index 52ace0cfac5da..692f2fa55a5e5 100644 --- a/x-pack/solutions/security/plugins/security_solution/common/detection_engine/rule_management/rule_filtering.ts +++ b/x-pack/solutions/security/plugins/security_solution/common/detection_engine/rule_management/rule_filtering.ts @@ -7,10 +7,11 @@ import type { Type } from '@kbn/securitysolution-io-ts-alerting-types'; import type { RuleExecutionStatus } from '../../api/detection_engine'; -import { RuleExecutionStatusEnum } from '../../api/detection_engine'; +import { RuleCustomizationStatus, RuleExecutionStatusEnum } from '../../api/detection_engine'; import { prepareKQLStringParam } from '../../utils/kql'; import { ENABLED_FIELD, + IS_CUSTOMIZED_FIELD, LAST_RUN_OUTCOME_FIELD, PARAMS_IMMUTABLE_FIELD, PARAMS_TYPE_FIELD, @@ -23,6 +24,8 @@ export const KQL_FILTER_IMMUTABLE_RULES = `${PARAMS_IMMUTABLE_FIELD}: true`; export const KQL_FILTER_MUTABLE_RULES = `${PARAMS_IMMUTABLE_FIELD}: false`; export const KQL_FILTER_ENABLED_RULES = `${ENABLED_FIELD}: true`; export const KQL_FILTER_DISABLED_RULES = `${ENABLED_FIELD}: false`; +export const KQL_FILTER_CUSTOMIZED_RULES = `${IS_CUSTOMIZED_FIELD}: true`; +export const KQL_FILTER_NOT_CUSTOMIZED_RULES = `${IS_CUSTOMIZED_FIELD}: false`; interface RulesFilterOptions { filter: string; @@ -32,6 +35,7 @@ interface RulesFilterOptions { tags: string[]; excludeRuleTypes: Type[]; ruleExecutionStatus: RuleExecutionStatus; + customizationStatus: RuleCustomizationStatus; ruleIds: string[]; } @@ -50,6 +54,7 @@ export function convertRulesFilterToKQL({ tags, excludeRuleTypes = [], ruleExecutionStatus, + customizationStatus, }: Partial): string { const kql: string[] = []; @@ -85,6 +90,12 @@ export function convertRulesFilterToKQL({ kql.push(`${LAST_RUN_OUTCOME_FIELD}: "failed"`); } + if (customizationStatus === RuleCustomizationStatus.CUSTOMIZED) { + kql.push(KQL_FILTER_CUSTOMIZED_RULES); + } else if (customizationStatus === RuleCustomizationStatus.NOT_CUSTOMIZED) { + kql.push(KQL_FILTER_NOT_CUSTOMIZED_RULES); + } + return kql.join(' AND '); } diff --git a/x-pack/solutions/security/plugins/security_solution/public/app/solution_navigation/links/sections/assets_links.ts b/x-pack/solutions/security/plugins/security_solution/public/app/solution_navigation/links/sections/assets_links.ts index b6bb88d7dd321..82ef40fbebf9e 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/app/solution_navigation/links/sections/assets_links.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/app/solution_navigation/links/sections/assets_links.ts @@ -6,11 +6,11 @@ */ import { SecurityPageName, ExternalPageName } from '@kbn/security-solution-navigation'; -import { ASSETS_PATH, CLOUD_DEFEND_PATH } from '../../../../../common/constants'; +import { ASSETS_PATH } from '../../../../../common/constants'; import { SECURITY_FEATURE_ID } from '../../../../../common'; import type { LinkItem } from '../../../../common/links/types'; import type { SolutionNavLink } from '../../../../common/links'; -import { IconEcctlLazy, IconFleetLazy } from './lazy_icons'; +import { IconFleetLazy } from './lazy_icons'; import * as i18n from './assets_translations'; // appLinks configures the Security Solution pages links @@ -24,19 +24,6 @@ const assetsAppLink: LinkItem = { links: [], // endpoints and cloudDefend links are added in createAssetsLinkFromManage }; -// TODO: define this Cloud Defend app link in security_solution plugin -const assetsCloudDefendAppLink: LinkItem = { - id: SecurityPageName.cloudDefend, - title: i18n.CLOUD_DEFEND_TITLE, - description: i18n.CLOUD_DEFEND_DESCRIPTION, - path: CLOUD_DEFEND_PATH, - capabilities: [`${SECURITY_FEATURE_ID}.show`], - landingIcon: IconEcctlLazy, - isBeta: true, - hideTimeline: true, - links: [], -}; - export const createAssetsLinkFromManage = (manageLink: LinkItem): LinkItem => { const assetsSubLinks = []; @@ -54,8 +41,6 @@ export const createAssetsLinkFromManage = (manageLink: LinkItem): LinkItem => { assetsSubLinks.push({ ...endpointsLink, links: endpointsSubLinks }); } - assetsSubLinks.push(assetsCloudDefendAppLink); - return { ...assetsAppLink, links: assetsSubLinks, diff --git a/x-pack/solutions/security/plugins/security_solution/public/app/solution_navigation/links/sections/assets_translations.ts b/x-pack/solutions/security/plugins/security_solution/public/app/solution_navigation/links/sections/assets_translations.ts index c6bd6072b2106..96d68eb2581e6 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/app/solution_navigation/links/sections/assets_translations.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/app/solution_navigation/links/sections/assets_translations.ts @@ -11,19 +11,6 @@ export const ASSETS_TITLE = i18n.translate('xpack.securitySolution.navLinks.asse defaultMessage: 'Assets', }); -export const CLOUD_DEFEND_TITLE = i18n.translate( - 'xpack.securitySolution.navLinks.assets.cloud_defend.title', - { - defaultMessage: 'Cloud', - } -); -export const CLOUD_DEFEND_DESCRIPTION = i18n.translate( - 'xpack.securitySolution.navLinks.assets.cloud_defend.description', - { - defaultMessage: 'Cloud hosts running Elastic Defend', - } -); - export const FLEET_TITLE = i18n.translate('xpack.securitySolution.navLinks.assets.fleet.title', { defaultMessage: 'Fleet', }); diff --git a/x-pack/solutions/security/plugins/security_solution/public/app/solution_navigation/links/sections/icons/ecctl.tsx b/x-pack/solutions/security/plugins/security_solution/public/app/solution_navigation/links/sections/icons/ecctl.tsx deleted file mode 100644 index 994ca883ed2c4..0000000000000 --- a/x-pack/solutions/security/plugins/security_solution/public/app/solution_navigation/links/sections/icons/ecctl.tsx +++ /dev/null @@ -1,41 +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 type { SVGProps } from 'react'; -import React from 'react'; -export const IconEcctl: React.FC> = ({ ...props }) => ( - - - - - - -); - -// eslint-disable-next-line import/no-default-export -export default IconEcctl; diff --git a/x-pack/solutions/security/plugins/security_solution/public/app/solution_navigation/links/sections/lazy_icons.tsx b/x-pack/solutions/security/plugins/security_solution/public/app/solution_navigation/links/sections/lazy_icons.tsx index c49c4695b1493..31b084d8c3523 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/app/solution_navigation/links/sections/lazy_icons.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/app/solution_navigation/links/sections/lazy_icons.tsx @@ -20,7 +20,6 @@ const withSuspenseIcon = (Component: React.ComponentType< export const IconLensLazy = withSuspenseIcon(React.lazy(() => import('./icons/lens'))); export const IconEndpointLazy = withSuspenseIcon(React.lazy(() => import('./icons/endpoint'))); export const IconFleetLazy = withSuspenseIcon(React.lazy(() => import('./icons/fleet'))); -export const IconEcctlLazy = withSuspenseIcon(React.lazy(() => import('./icons/ecctl'))); export const IconTimelineLazy = withSuspenseIcon(React.lazy(() => import('./icons/timeline'))); export const IconOsqueryLazy = withSuspenseIcon(React.lazy(() => import('./icons/osquery'))); diff --git a/x-pack/solutions/security/plugins/security_solution/public/cloud_defend/index.ts b/x-pack/solutions/security/plugins/security_solution/public/cloud_defend/index.ts index 4ec2329d36bd5..48b89223de096 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/cloud_defend/index.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/cloud_defend/index.ts @@ -6,12 +6,11 @@ */ import type { SecuritySubPlugin } from '../app/types'; -import { routes } from './routes'; export class CloudDefend { public setup() {} public start(): SecuritySubPlugin { - return { routes }; + return { routes: [] }; } } diff --git a/x-pack/solutions/security/plugins/security_solution/public/cloud_defend/links.ts b/x-pack/solutions/security/plugins/security_solution/public/cloud_defend/links.ts deleted file mode 100644 index cbc0a710a7ba1..0000000000000 --- a/x-pack/solutions/security/plugins/security_solution/public/cloud_defend/links.ts +++ /dev/null @@ -1,27 +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 { getSecuritySolutionLink } from '@kbn/cloud-defend-plugin/public'; -import { i18n } from '@kbn/i18n'; -import type { SecurityPageName } from '../../common/constants'; -import { SECURITY_FEATURE_ID } from '../../common/constants'; -import type { LinkItem } from '../common/links/types'; -import { IconCloudDefend } from '../common/icons/cloud_defend'; - -const commonLinkProperties: Partial = { - hideTimeline: true, - capabilities: [`${SECURITY_FEATURE_ID}.show`], -}; - -export const cloudDefendLink: LinkItem = { - ...getSecuritySolutionLink('policies'), - description: i18n.translate('xpack.securitySolution.appLinks.cloudDefendPoliciesDescription', { - defaultMessage: - 'Secure container workloads in Kubernetes from attacks and drift through granular and flexible runtime policies.', - }), - landingIcon: IconCloudDefend, - ...commonLinkProperties, -}; diff --git a/x-pack/solutions/security/plugins/security_solution/public/cloud_defend/routes.tsx b/x-pack/solutions/security/plugins/security_solution/public/cloud_defend/routes.tsx deleted file mode 100644 index 18bd7641addf3..0000000000000 --- a/x-pack/solutions/security/plugins/security_solution/public/cloud_defend/routes.tsx +++ /dev/null @@ -1,51 +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 React from 'react'; -import type { - CloudDefendPageId, - CloudDefendSecuritySolutionContext, -} from '@kbn/cloud-defend-plugin/public'; -import { CLOUD_DEFEND_BASE_PATH } from '@kbn/cloud-defend-plugin/public'; -import type { SecurityPageName, SecuritySubPluginRoutes } from '../app/types'; -import { useKibana } from '../common/lib/kibana'; -import { SecuritySolutionPageWrapper } from '../common/components/page_wrapper'; -import { SpyRoute } from '../common/utils/route/spy_routes'; -import { FiltersGlobal } from '../common/components/filters_global'; -import { PluginTemplateWrapper } from '../common/components/plugin_template_wrapper'; - -// This exists only for the type signature cast -const CloudDefendSpyRoute = ({ pageName, ...rest }: { pageName?: CloudDefendPageId }) => ( - -); - -const cloudDefendSecuritySolutionContext: CloudDefendSecuritySolutionContext = { - getFiltersGlobalComponent: () => FiltersGlobal, - getSpyRouteComponent: () => CloudDefendSpyRoute, -}; - -const CloudDefend = () => { - const { cloudDefend } = useKibana().services; - const CloudDefendRouter = cloudDefend.getCloudDefendRouter(); - - return ( - - - - - - ); -}; - -CloudDefend.displayName = 'CloudDefend'; - -export const routes: SecuritySubPluginRoutes = [ - { - path: CLOUD_DEFEND_BASE_PATH, - component: CloudDefend, - }, -]; diff --git a/x-pack/solutions/security/plugins/security_solution/public/common/icons/cloud_defend.tsx b/x-pack/solutions/security/plugins/security_solution/public/common/icons/cloud_defend.tsx deleted file mode 100644 index 44cd0f39250b5..0000000000000 --- a/x-pack/solutions/security/plugins/security_solution/public/common/icons/cloud_defend.tsx +++ /dev/null @@ -1,50 +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 type { SVGProps } from 'react'; -import React from 'react'; -export const IconCloudDefend: React.FC> = ({ ...props }) => ( - - - - - - - - - - - - - -); diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/api/api.ts b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/api/api.ts index 5f5fded87ac45..400a18a8103b9 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/api/api.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/api/api.ts @@ -15,14 +15,14 @@ import type { ActionType, AsApiContract } from '@kbn/actions-plugin/common'; import type { ActionResult } from '@kbn/actions-plugin/server'; import { convertRulesFilterToKQL } from '../../../../common/detection_engine/rule_management/rule_filtering'; import type { - UpgradeSpecificRulesRequest, - PickVersionValues, PerformRuleUpgradeResponseBody, InstallSpecificRulesRequest, PerformRuleInstallationResponseBody, GetPrebuiltRulesStatusResponseBody, ReviewRuleUpgradeResponseBody, ReviewRuleInstallationResponseBody, + ReviewRuleUpgradeRequestBody, + PerformRuleUpgradeRequestBody, } from '../../../../common/api/detection_engine/prebuilt_rules'; import type { BulkDuplicateRules, @@ -637,13 +637,16 @@ export const getPrebuiltRulesStatus = async ({ */ export const reviewRuleUpgrade = async ({ signal, + request, }: { signal: AbortSignal | undefined; + request: ReviewRuleUpgradeRequestBody; }): Promise => KibanaServices.get().http.fetch(REVIEW_RULE_UPGRADE_URL, { method: 'POST', version: '1', signal, + body: JSON.stringify(request), }); /** @@ -685,23 +688,13 @@ export const performInstallSpecificRules = async ( }), }); -export interface PerformUpgradeRequest { - rules: UpgradeSpecificRulesRequest['rules']; - pickVersion: PickVersionValues; -} - -export const performUpgradeSpecificRules = async ({ - rules, - pickVersion, -}: PerformUpgradeRequest): Promise => +export const performUpgradeRules = async ( + body: PerformRuleUpgradeRequestBody +): Promise => KibanaServices.get().http.fetch(PERFORM_RULE_UPGRADE_URL, { method: 'POST', version: '1', - body: JSON.stringify({ - mode: 'SPECIFIC_RULES', - rules, - pick_version: pickVersion, - }), + body: JSON.stringify(body), }); export const bootstrapPrebuiltRules = async (): Promise => diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/api/hooks/prebuilt_rules/use_fetch_prebuilt_rules_status_query.ts b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/api/hooks/prebuilt_rules/use_fetch_prebuilt_rules_status_query.ts index 0c0515e61b818..376877326a5e9 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/api/hooks/prebuilt_rules/use_fetch_prebuilt_rules_status_query.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/api/hooks/prebuilt_rules/use_fetch_prebuilt_rules_status_query.ts @@ -4,24 +4,24 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ -import { useCallback } from 'react'; import type { UseQueryOptions } from '@tanstack/react-query'; import { useQuery, useQueryClient } from '@tanstack/react-query'; -import type { PrebuiltRulesStatusStats } from '../../../../../../common/api/detection_engine/prebuilt_rules'; +import { useCallback } from 'react'; +import type { GetPrebuiltRulesStatusResponseBody } from '../../../../../../common/api/detection_engine/prebuilt_rules'; +import { GET_PREBUILT_RULES_STATUS_URL } from '../../../../../../common/api/detection_engine/prebuilt_rules'; import { getPrebuiltRulesStatus } from '../../api'; import { DEFAULT_QUERY_OPTIONS } from '../constants'; -import { GET_PREBUILT_RULES_STATUS_URL } from '../../../../../../common/api/detection_engine/prebuilt_rules'; export const PREBUILT_RULES_STATUS_QUERY_KEY = ['GET', GET_PREBUILT_RULES_STATUS_URL]; export const useFetchPrebuiltRulesStatusQuery = ( - options?: UseQueryOptions + options?: UseQueryOptions ) => { - return useQuery( + return useQuery( PREBUILT_RULES_STATUS_QUERY_KEY, async ({ signal }) => { const response = await getPrebuiltRulesStatus({ signal }); - return response.stats; + return response; }, { ...DEFAULT_QUERY_OPTIONS, diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/api/hooks/prebuilt_rules/use_fetch_prebuilt_rules_upgrade_review_query.ts b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/api/hooks/prebuilt_rules/use_fetch_prebuilt_rules_upgrade_review_query.ts index 532114b1d4b62..4b779918febc3 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/api/hooks/prebuilt_rules/use_fetch_prebuilt_rules_upgrade_review_query.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/api/hooks/prebuilt_rules/use_fetch_prebuilt_rules_upgrade_review_query.ts @@ -9,7 +9,10 @@ import type { UseQueryOptions } from '@tanstack/react-query'; import { useQuery, useQueryClient } from '@tanstack/react-query'; import { reviewRuleUpgrade } from '../../api'; import { REVIEW_RULE_UPGRADE_URL } from '../../../../../../common/api/detection_engine/prebuilt_rules/urls'; -import type { ReviewRuleUpgradeResponseBody } from '../../../../../../common/api/detection_engine/prebuilt_rules'; +import type { + ReviewRuleUpgradeRequestBody, + ReviewRuleUpgradeResponseBody, +} from '../../../../../../common/api/detection_engine/prebuilt_rules'; import { DEFAULT_QUERY_OPTIONS } from '../constants'; import { retryOnRateLimitedError } from './retry_on_rate_limited_error'; import { cappedExponentialBackoff } from './capped_exponential_backoff'; @@ -17,12 +20,13 @@ import { cappedExponentialBackoff } from './capped_exponential_backoff'; export const REVIEW_RULE_UPGRADE_QUERY_KEY = ['POST', REVIEW_RULE_UPGRADE_URL]; export const useFetchPrebuiltRulesUpgradeReviewQuery = ( + request: ReviewRuleUpgradeRequestBody, options?: UseQueryOptions ) => { return useQuery( - REVIEW_RULE_UPGRADE_QUERY_KEY, + [...REVIEW_RULE_UPGRADE_QUERY_KEY, request], async ({ signal }) => { - const response = await reviewRuleUpgrade({ signal }); + const response = await reviewRuleUpgrade({ signal, request }); return response; }, { diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/api/hooks/prebuilt_rules/use_perform_specific_rules_upgrade_mutation.ts b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/api/hooks/prebuilt_rules/use_perform_rules_upgrade_mutation.ts similarity index 79% rename from x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/api/hooks/prebuilt_rules/use_perform_specific_rules_upgrade_mutation.ts rename to x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/api/hooks/prebuilt_rules/use_perform_rules_upgrade_mutation.ts index 84b074449603d..ecb604d63d4e0 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/api/hooks/prebuilt_rules/use_perform_specific_rules_upgrade_mutation.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/api/hooks/prebuilt_rules/use_perform_rules_upgrade_mutation.ts @@ -6,10 +6,12 @@ */ import type { UseMutationOptions } from '@tanstack/react-query'; import { useMutation } from '@tanstack/react-query'; -import type { PerformRuleUpgradeResponseBody } from '../../../../../../common/api/detection_engine/prebuilt_rules'; +import type { + PerformRuleUpgradeRequestBody, + PerformRuleUpgradeResponseBody, +} from '../../../../../../common/api/detection_engine/prebuilt_rules'; import { PERFORM_RULE_UPGRADE_URL } from '../../../../../../common/api/detection_engine/prebuilt_rules/urls'; -import type { PerformUpgradeRequest } from '../../api'; -import { performUpgradeSpecificRules } from '../../api'; +import { performUpgradeRules } from '../../api'; import { useInvalidateFetchCoverageOverviewQuery } from '../use_fetch_coverage_overview_query'; import { useInvalidateFetchRuleManagementFiltersQuery } from '../use_fetch_rule_management_filters_query'; import { useInvalidateFetchRulesSnoozeSettingsQuery } from '../use_fetch_rules_snooze_settings_query'; @@ -19,14 +21,14 @@ import { useInvalidateFetchPrebuiltRulesUpgradeReviewQuery } from './use_fetch_p import { retryOnRateLimitedError } from './retry_on_rate_limited_error'; import { cappedExponentialBackoff } from './capped_exponential_backoff'; -export const PERFORM_SPECIFIC_RULES_UPGRADE_KEY = [ - 'POST', - 'SPECIFIC_RULES', - PERFORM_RULE_UPGRADE_URL, -]; +export const PERFORM_RULES_UPGRADE_KEY = ['POST', PERFORM_RULE_UPGRADE_URL]; -export const usePerformSpecificRulesUpgradeMutation = ( - options?: UseMutationOptions +export const usePerformRulesUpgradeMutation = ( + options?: UseMutationOptions< + PerformRuleUpgradeResponseBody, + unknown, + PerformRuleUpgradeRequestBody + > ) => { const invalidateFindRulesQuery = useInvalidateFindRulesQuery(); const invalidateFetchRulesSnoozeSettings = useInvalidateFetchRulesSnoozeSettingsQuery(); @@ -37,13 +39,13 @@ export const usePerformSpecificRulesUpgradeMutation = ( const invalidateRuleStatus = useInvalidateFetchPrebuiltRulesStatusQuery(); const invalidateFetchCoverageOverviewQuery = useInvalidateFetchCoverageOverviewQuery(); - return useMutation( - (args: PerformUpgradeRequest) => { - return performUpgradeSpecificRules(args); + return useMutation( + (args: PerformRuleUpgradeRequestBody) => { + return performUpgradeRules(args); }, { ...options, - mutationKey: PERFORM_SPECIFIC_RULES_UPGRADE_KEY, + mutationKey: PERFORM_RULES_UPGRADE_KEY, onSettled: (...args) => { invalidatePrePackagedRulesStatus(); invalidateFindRulesQuery(); diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/logic/prebuilt_rules/use_perform_rule_upgrade.ts b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/logic/prebuilt_rules/use_perform_rule_upgrade.ts index 33f36ffe14da2..e1ae2768dacc6 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/logic/prebuilt_rules/use_perform_rule_upgrade.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/logic/prebuilt_rules/use_perform_rule_upgrade.ts @@ -5,18 +5,22 @@ * 2.0. */ import { useAppToasts } from '../../../../common/hooks/use_app_toasts'; -import { usePerformSpecificRulesUpgradeMutation } from '../../api/hooks/prebuilt_rules/use_perform_specific_rules_upgrade_mutation'; +import { usePerformRulesUpgradeMutation } from '../../api/hooks/prebuilt_rules/use_perform_rules_upgrade_mutation'; import * as i18n from './translations'; -export const usePerformUpgradeSpecificRules = () => { +export const usePerformUpgradeRules = () => { const { addError, addSuccess } = useAppToasts(); - return usePerformSpecificRulesUpgradeMutation({ + return usePerformRulesUpgradeMutation({ onError: (err) => { addError(err, { title: i18n.RULE_UPGRADE_FAILED }); }, - onSuccess: (result) => { + onSuccess: (result, vars) => { + if (vars.dry_run) { + // This is a preflight check, no need to show toast + return; + } addSuccess(getSuccessToastMessage(result)); }, }); diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/logic/prebuilt_rules/use_prebuilt_rules_upgrade_review.ts b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/logic/prebuilt_rules/use_prebuilt_rules_upgrade_review.ts index 6e8f008c5ede5..bb0b04174d0dd 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/logic/prebuilt_rules/use_prebuilt_rules_upgrade_review.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/logic/prebuilt_rules/use_prebuilt_rules_upgrade_review.ts @@ -5,7 +5,10 @@ * 2.0. */ import type { UseQueryOptions } from '@tanstack/react-query'; -import type { ReviewRuleUpgradeResponseBody } from '../../../../../common/api/detection_engine/prebuilt_rules'; +import type { + ReviewRuleUpgradeRequestBody, + ReviewRuleUpgradeResponseBody, +} from '../../../../../common/api/detection_engine/prebuilt_rules'; import { useAppToasts } from '../../../../common/hooks/use_app_toasts'; import * as i18n from '../translations'; @@ -18,11 +21,12 @@ import { useFetchPrebuiltRulesUpgradeReviewQuery } from '../../api/hooks/prebuil * @returns useQuery result */ export const usePrebuiltRulesUpgradeReview = ( + request: ReviewRuleUpgradeRequestBody, options?: UseQueryOptions ) => { const { addError } = useAppToasts(); - return useFetchPrebuiltRulesUpgradeReviewQuery({ + return useFetchPrebuiltRulesUpgradeReviewQuery(request, { onError: (error) => addError(error, { title: i18n.RULE_AND_TIMELINE_FETCH_FAILURE }), ...options, }); diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/logic/types.ts b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/logic/types.ts index e91639dd0454c..98383e93b444c 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/logic/types.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management/logic/types.ts @@ -11,7 +11,10 @@ import type { RuleSnooze } from '@kbn/alerting-plugin/common'; import type { Type } from '@kbn/securitysolution-io-ts-alerting-types'; import type { NamespaceType } from '@kbn/securitysolution-io-ts-list-types'; import type { RuleSnoozeSettings } from '@kbn/triggers-actions-ui-plugin/public/types'; -import type { WarningSchema } from '../../../../common/api/detection_engine'; +import type { + RuleCustomizationStatus, + WarningSchema, +} from '../../../../common/api/detection_engine'; import type { RuleExecutionStatus } from '../../../../common/api/detection_engine/rule_monitoring'; import { SortOrder } from '../../../../common/api/detection_engine'; @@ -103,7 +106,7 @@ export interface FilterOptions { excludeRuleTypes?: Type[]; enabled?: boolean; // undefined is to display all the rules ruleExecutionStatus?: RuleExecutionStatus; // undefined means "all" - ruleSource?: RuleCustomizationEnum[]; // undefined is to display all the rules + ruleSource?: RuleCustomizationStatus[]; // undefined is to display all the rules showRulesWithGaps?: boolean; gapSearchRange?: GapRangeValue; } @@ -209,8 +212,3 @@ export interface FindRulesReferencedByExceptionsProps { lists: FindRulesReferencedByExceptionsListProp[]; signal?: AbortSignal; } - -export enum RuleCustomizationEnum { - customized = 'CUSTOMIZED', - not_customized = 'NOT_CUSTOMIZED', -} diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management_ui/components/rule_update_callouts/rule_update_callouts.tsx b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management_ui/components/rule_update_callouts/rule_update_callouts.tsx index c4eacb4a01ff5..6ca59501dbd7a 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management_ui/components/rule_update_callouts/rule_update_callouts.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management_ui/components/rule_update_callouts/rule_update_callouts.tsx @@ -21,8 +21,8 @@ import { AllRulesTabs } from '../rules_table/rules_table_toolbar'; export const RuleUpdateCallouts = () => { const { data: prebuiltRulesStatus } = usePrebuiltRulesStatus(); - const rulesToInstallCount = prebuiltRulesStatus?.num_prebuilt_rules_to_install ?? 0; - const rulesToUpgradeCount = prebuiltRulesStatus?.num_prebuilt_rules_to_upgrade ?? 0; + const rulesToInstallCount = prebuiltRulesStatus?.stats.num_prebuilt_rules_to_install ?? 0; + const rulesToUpgradeCount = prebuiltRulesStatus?.stats.num_prebuilt_rules_to_upgrade ?? 0; // Check against rulesInstalledCount since we don't want to show banners if we're showing the empty prompt const shouldDisplayNewRulesCallout = rulesToInstallCount > 0; diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/add_prebuilt_rules_table/add_prebuilt_rules_table_context.tsx b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/add_prebuilt_rules_table/add_prebuilt_rules_table_context.tsx index bb949ba436995..59d66a402dc88 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/add_prebuilt_rules_table/add_prebuilt_rules_table_context.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/add_prebuilt_rules_table/add_prebuilt_rules_table_context.tsx @@ -144,7 +144,7 @@ export const AddPrebuiltRulesTableContextProvider = ({ enabled: isUpgradeReviewRequestEnabled({ canUserCRUD, isUpgradingSecurityPackages, - prebuiltRulesStatus, + prebuiltRulesStatus: prebuiltRulesStatus?.stats, }), }); diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/rules_table_toolbar.tsx b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/rules_table_toolbar.tsx index e3618a1383598..eb9d17ebfbe9c 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/rules_table_toolbar.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/rules_table_toolbar.tsx @@ -33,7 +33,7 @@ export const RulesTableToolbar = React.memo(() => { const installedTotal = (ruleManagementFilters?.rules_summary.custom_count ?? 0) + (ruleManagementFilters?.rules_summary.prebuilt_installed_count ?? 0); - const updateTotal = prebuiltRulesStatus?.num_prebuilt_rules_to_upgrade ?? 0; + const updateTotal = prebuiltRulesStatus?.stats.num_prebuilt_rules_to_upgrade ?? 0; const shouldDisplayRuleUpdatesTab = !loading && canUserCRUD && updateTotal > 0; diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/upgrade_prebuilt_rules_table/translations.tsx b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/upgrade_prebuilt_rules_table/translations.tsx index 73fb4e9381d73..a5b2754e939ad 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/upgrade_prebuilt_rules_table/translations.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/upgrade_prebuilt_rules_table/translations.tsx @@ -34,13 +34,6 @@ export const BULK_UPDATE_BUTTON_TOOLTIP_NO_PERMISSIONS = i18n.translate( } ); -export const BULK_UPDATE_ALL_RULES_BUTTON_TOOLTIP_CONFLICTS = i18n.translate( - 'xpack.securitySolution.detectionEngine.rules.upgradeRules.bulkButtons.allRules.conflicts', - { - defaultMessage: 'All rules have conflicts. Update them individually.', - } -); - export const BULK_UPDATE_SELECTED_RULES_BUTTON_TOOLTIP_CONFLICTS = i18n.translate( 'xpack.securitySolution.detectionEngine.rules.upgradeRules.bulkButtons.selectedRules.conflicts', { diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/upgrade_prebuilt_rules_table/upgrade_prebuilt_rules_table.tsx b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/upgrade_prebuilt_rules_table/upgrade_prebuilt_rules_table.tsx index dfe8c5787417c..959f20ef72c20 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/upgrade_prebuilt_rules_table/upgrade_prebuilt_rules_table.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/upgrade_prebuilt_rules_table/upgrade_prebuilt_rules_table.tsx @@ -10,7 +10,7 @@ import { EuiEmptyPrompt, EuiFlexGroup, EuiFlexItem, - EuiInMemoryTable, + EuiBasicTable, EuiProgress, EuiSkeletonLoading, EuiSkeletonText, @@ -19,9 +19,10 @@ import { import React, { useCallback, useState } from 'react'; import type { RuleUpgradeState } from '../../../../rule_management/model/prebuilt_rule_upgrade'; import * as i18n from '../../../../../detections/pages/detection_engine/rules/translations'; -import { RULES_TABLE_INITIAL_PAGE_SIZE, RULES_TABLE_PAGE_SIZE_OPTIONS } from '../constants'; +import { RULES_TABLE_PAGE_SIZE_OPTIONS } from '../constants'; import { RulesChangelogLink } from '../rules_changelog_link'; import { UpgradePrebuiltRulesTableButtons } from './upgrade_prebuilt_rules_table_buttons'; +import type { UpgradePrebuiltRulesSortingOptions } from './upgrade_prebuilt_rules_table_context'; import { useUpgradePrebuiltRulesTableContext } from './upgrade_prebuilt_rules_table_context'; import { UpgradePrebuiltRulesTableFilters } from './upgrade_prebuilt_rules_table_filters'; import { useUpgradePrebuiltRulesTableColumns } from './use_upgrade_prebuilt_rules_table_columns'; @@ -44,20 +45,32 @@ export const UpgradePrebuiltRulesTable = React.memo(() => { ruleUpgradeStates, hasRulesToUpgrade, isLoading, + isFetching, isRefetching, isUpgradingSecurityPackages, + pagination, + sortingOptions, }, + actions: { setPagination, setSortingOptions }, } = useUpgradePrebuiltRulesTableContext(); const [selected, setSelected] = useState([]); const rulesColumns = useUpgradePrebuiltRulesTableColumns(); const shouldShowProgress = isUpgradingSecurityPackages || isRefetching; - const [pageIndex, setPageIndex] = useState(0); const handleTableChange = useCallback( - ({ page: { index } }: CriteriaWithPagination) => { - setPageIndex(index); + ({ page: { index, size }, sort }: CriteriaWithPagination) => { + setPagination({ + page: index + 1, + perPage: size, + }); + if (sort) { + setSortingOptions({ + field: sort.field as UpgradePrebuiltRulesSortingOptions['field'], + order: sort.direction, + }); + } }, - [setPageIndex] + [setPagination, setSortingOptions] ); return ( @@ -104,23 +117,31 @@ export const UpgradePrebuiltRulesTable = React.memo(() => { - true, onSelectionChange: setSelected, initialSelected: selected, }} + sorting={{ + sort: { + // EuiBasicTable has incorrect `sort.field` types which accept only `keyof Item` and reject fields in dot notation + field: sortingOptions.field as keyof RuleUpgradeState, + direction: sortingOptions.order, + }, + }} itemId="rule_id" data-test-subj="rules-upgrades-table" columns={rulesColumns} - onTableChange={handleTableChange} + onChange={handleTableChange} /> ) diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/upgrade_prebuilt_rules_table/upgrade_prebuilt_rules_table_buttons.tsx b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/upgrade_prebuilt_rules_table/upgrade_prebuilt_rules_table_buttons.tsx index 37e189f5e4b79..5498e8961c06a 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/upgrade_prebuilt_rules_table/upgrade_prebuilt_rules_table_buttons.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/upgrade_prebuilt_rules_table/upgrade_prebuilt_rules_table_buttons.tsx @@ -21,13 +21,7 @@ export const UpgradePrebuiltRulesTableButtons = ({ selectedRules, }: UpgradePrebuiltRulesTableButtonsProps) => { const { - state: { - ruleUpgradeStates, - hasRulesToUpgrade, - loadingRules, - isRefetching, - isUpgradingSecurityPackages, - }, + state: { hasRulesToUpgrade, loadingRules, isRefetching, isUpgradingSecurityPackages }, actions: { upgradeRules, upgradeAllRules }, } = useUpgradePrebuiltRulesTableContext(); const { isRulesCustomizationEnabled } = usePrebuiltRulesCustomizationStatus(); @@ -43,14 +37,10 @@ export const UpgradePrebuiltRulesTableButtons = ({ const doAllSelectedRulesHaveConflicts = isRulesCustomizationEnabled && selectedRules.every(({ hasUnresolvedConflicts }) => hasUnresolvedConflicts); - const doAllRulesHaveConflicts = - isRulesCustomizationEnabled && - ruleUpgradeStates.every(({ hasUnresolvedConflicts }) => hasUnresolvedConflicts); const { selectedRulesButtonTooltip, allRulesButtonTooltip } = useBulkUpdateButtonsTooltipContent({ canUserEditRules, doAllSelectedRulesHaveConflicts, - doAllRulesHaveConflicts, isPrebuiltRulesCustomizationEnabled: isRulesCustomizationEnabled, }); @@ -83,12 +73,7 @@ export const UpgradePrebuiltRulesTableButtons = ({ fill iconType="plusInCircle" onClick={upgradeAllRules} - disabled={ - !canUserEditRules || - !hasRulesToUpgrade || - isRequestInProgress || - doAllRulesHaveConflicts - } + disabled={!canUserEditRules || !hasRulesToUpgrade || isRequestInProgress} data-test-subj="upgradeAllRulesButton" > {i18n.UPDATE_ALL} @@ -103,12 +88,10 @@ export const UpgradePrebuiltRulesTableButtons = ({ const useBulkUpdateButtonsTooltipContent = ({ canUserEditRules, doAllSelectedRulesHaveConflicts, - doAllRulesHaveConflicts, isPrebuiltRulesCustomizationEnabled, }: { canUserEditRules: boolean | null; doAllSelectedRulesHaveConflicts: boolean; - doAllRulesHaveConflicts: boolean; isPrebuiltRulesCustomizationEnabled: boolean; }) => { if (!canUserEditRules) { @@ -125,13 +108,6 @@ const useBulkUpdateButtonsTooltipContent = ({ }; } - if (doAllRulesHaveConflicts) { - return { - selectedRulesButtonTooltip: i18n.BULK_UPDATE_SELECTED_RULES_BUTTON_TOOLTIP_CONFLICTS, - allRulesButtonTooltip: i18n.BULK_UPDATE_ALL_RULES_BUTTON_TOOLTIP_CONFLICTS, - }; - } - if (doAllSelectedRulesHaveConflicts) { return { selectedRulesButtonTooltip: i18n.BULK_UPDATE_SELECTED_RULES_BUTTON_TOOLTIP_CONFLICTS, diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/upgrade_prebuilt_rules_table/upgrade_prebuilt_rules_table_context.tsx b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/upgrade_prebuilt_rules_table/upgrade_prebuilt_rules_table_context.tsx index 3be956c7cbf94..b0c7f93234c99 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/upgrade_prebuilt_rules_table/upgrade_prebuilt_rules_table_context.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/upgrade_prebuilt_rules_table/upgrade_prebuilt_rules_table_context.tsx @@ -10,8 +10,11 @@ import type { Dispatch, SetStateAction } from 'react'; import React, { createContext, useCallback, useContext, useMemo, useState } from 'react'; import { PrebuiltRulesCustomizationDisabledReason } from '../../../../../../common/detection_engine/prebuilt_rules/prebuilt_rule_customization_status'; import type { + FindRulesSortField, + PrebuiltRulesFilter, RuleFieldsToUpgrade, RuleUpgradeSpecifier, + SortOrder, } from '../../../../../../common/api/detection_engine'; import { usePrebuiltRulesCustomizationStatus } from '../../../../rule_management/logic/prebuilt_rules/use_prebuilt_rules_customization_status'; import type { RuleUpgradeState } from '../../../../rule_management/model/prebuilt_rule_upgrade'; @@ -24,13 +27,11 @@ import type { } from '../../../../../../common/api/detection_engine/model/rule_schema'; import { invariant } from '../../../../../../common/utils/invariant'; import { TabContentPadding } from '../../../../rule_management/components/rule_details/rule_details_flyout'; -import { usePerformUpgradeSpecificRules } from '../../../../rule_management/logic/prebuilt_rules/use_perform_rule_upgrade'; +import { usePerformUpgradeRules } from '../../../../rule_management/logic/prebuilt_rules/use_perform_rule_upgrade'; import { usePrebuiltRulesUpgradeReview } from '../../../../rule_management/logic/prebuilt_rules/use_prebuilt_rules_upgrade_review'; import { RuleDiffTab } from '../../../../rule_management/components/rule_details/rule_diff_tab'; import { FieldUpgradeStateEnum } from '../../../../rule_management/model/prebuilt_rule_upgrade/field_upgrade_state_enum'; import { useRulePreviewFlyout } from '../use_rule_preview_flyout'; -import type { UpgradePrebuiltRulesTableFilterOptions } from './use_filter_prebuilt_rules_to_upgrade'; -import { useFilterPrebuiltRulesToUpgrade } from './use_filter_prebuilt_rules_to_upgrade'; import { usePrebuiltRulesUpgradeState } from './use_prebuilt_rules_upgrade_state'; import { useOutdatedMlJobsUpgradeModal } from './use_ml_jobs_upgrade_modal'; import { useUpgradeWithConflictsModal } from './use_upgrade_with_conflicts_modal'; @@ -39,9 +40,21 @@ import { UpgradeFlyoutSubHeader } from './upgrade_flyout_subheader'; import * as ruleDetailsI18n from '../../../../rule_management/components/rule_details/translations'; import * as i18n from './translations'; import { CustomizationDisabledCallout } from './customization_disabled_callout'; +import { RULES_TABLE_INITIAL_PAGE_SIZE } from '../constants'; +import type { PaginationOptions } from '../../../../rule_management/logic'; +import { usePrebuiltRulesStatus } from '../../../../rule_management/logic/prebuilt_rules/use_prebuilt_rules_status'; const REVIEW_PREBUILT_RULES_UPGRADE_REFRESH_INTERVAL = 5 * 60 * 1000; +export interface UpgradePrebuiltRulesSortingOptions { + field: + | 'current_rule.name' + | 'current_rule.risk_score' + | 'current_rule.severity' + | 'current_rule.last_updated'; + order: SortOrder; +} + export interface UpgradePrebuiltRulesTableState { /** * Rule upgrade state after applying `filterOptions` @@ -50,7 +63,7 @@ export interface UpgradePrebuiltRulesTableState { /** * Currently selected table filter */ - filterOptions: UpgradePrebuiltRulesTableFilterOptions; + filterOptions: PrebuiltRulesFilter; /** * All unique tags for all rules */ @@ -63,6 +76,10 @@ export interface UpgradePrebuiltRulesTableState { * Is true then there is no cached data and the query is currently fetching. */ isLoading: boolean; + /** + * Is true whenever a request is in-flight, which includes initial loading as well as background refetches. + */ + isFetching: boolean; /** * Will be true if the query has been fetched. */ @@ -84,6 +101,14 @@ export interface UpgradePrebuiltRulesTableState { * The timestamp for when the rules were successfully fetched */ lastUpdated: number; + /** + * Current pagination state + */ + pagination: PaginationOptions; + /** + * Currently selected table sorting + */ + sortingOptions: UpgradePrebuiltRulesSortingOptions; } export const PREBUILT_RULE_UPDATE_FLYOUT_ANCHOR = 'updatePrebuiltRulePreview'; @@ -92,7 +117,9 @@ export interface UpgradePrebuiltRulesTableActions { reFetchRules: () => void; upgradeRules: (ruleIds: RuleSignatureId[]) => void; upgradeAllRules: () => void; - setFilterOptions: Dispatch>; + setFilterOptions: Dispatch>; + setPagination: Dispatch>; + setSortingOptions: Dispatch>; openRulePreview: (ruleId: string) => void; } @@ -121,35 +148,71 @@ export const UpgradePrebuiltRulesTableContextProvider = ({ }: UpgradePrebuiltRulesTableContextProviderProps) => { const { isRulesCustomizationEnabled, customizationDisabledReason } = usePrebuiltRulesCustomizationStatus(); + + // Use the data from the prebuilt rules status API to determine if there are + // rules to upgrade because it returns information about all rules without filters + const { data: prebuiltRulesStatusResponse } = usePrebuiltRulesStatus(); + const hasRulesToUpgrade = + (prebuiltRulesStatusResponse?.stats.num_prebuilt_rules_to_upgrade ?? 0) > 0; + const tags = prebuiltRulesStatusResponse?.aggregated_fields?.upgradeable_rules.tags; + const [loadingRules, setLoadingRules] = useState([]); - const [filterOptions, setFilterOptions] = useState({ - filter: '', - tags: [], - ruleSource: [], - }); + const [filterOptions, setFilterOptions] = useState({}); const isUpgradingSecurityPackages = useIsUpgradingSecurityPackages(); + const [pagination, setPagination] = useState({ + page: 1, + perPage: RULES_TABLE_INITIAL_PAGE_SIZE, + }); + const [sortingOptions, setSortingOptions] = useState({ + field: 'current_rule.last_updated', + order: 'asc', + }); + + const findRulesSortField = useMemo( + () => + (( + { + 'current_rule.name': 'name', + 'current_rule.risk_score': 'risk_score', + 'current_rule.severity': 'severity', + 'current_rule.last_updated': 'updated_at', + } as const + )[sortingOptions.field]), + [sortingOptions.field] + ); const { - data: { rules: ruleUpgradeInfos, stats: { tags } } = { - rules: [], - stats: { tags: [] }, - }, + data: upgradeReviewResponse, refetch, dataUpdatedAt, isFetched, isLoading, + isFetching, isRefetching, - } = usePrebuiltRulesUpgradeReview({ - refetchInterval: REVIEW_PREBUILT_RULES_UPGRADE_REFRESH_INTERVAL, - keepPreviousData: true, // Use this option so that the state doesn't jump between "success" and "loading" on page change - }); + } = usePrebuiltRulesUpgradeReview( + { + page: pagination.page, + per_page: pagination.perPage, + sort: { + field: findRulesSortField, + order: sortingOptions.order, + }, + filter: filterOptions, + }, + { + refetchInterval: REVIEW_PREBUILT_RULES_UPGRADE_REFRESH_INTERVAL, + keepPreviousData: true, // Use this option so that the state doesn't jump between "success" and "loading" on page change + } + ); + + const upgradeableRules = useMemo( + () => upgradeReviewResponse?.rules ?? [], + [upgradeReviewResponse] + ); + const { rulesUpgradeState, setRuleFieldResolvedValue } = - usePrebuiltRulesUpgradeState(ruleUpgradeInfos); + usePrebuiltRulesUpgradeState(upgradeableRules); const ruleUpgradeStates = useMemo(() => Object.values(rulesUpgradeState), [rulesUpgradeState]); - const filteredRuleUpgradeStates = useFilterPrebuiltRulesToUpgrade({ - filterOptions, - data: ruleUpgradeStates, - }); const { modal: confirmLegacyMlJobsUpgradeModal, @@ -158,7 +221,7 @@ export const UpgradePrebuiltRulesTableContextProvider = ({ } = useOutdatedMlJobsUpgradeModal(); const { modal: upgradeConflictsModal, confirmConflictsUpgrade } = useUpgradeWithConflictsModal(); - const { mutateAsync: upgradeSpecificRulesRequest } = usePerformUpgradeSpecificRules(); + const { mutateAsync: upgradeRulesRequest } = usePerformUpgradeRules(); const upgradeRulesToResolved = useCallback( async (ruleIds: RuleSignatureId[]) => { @@ -189,8 +252,9 @@ export const UpgradePrebuiltRulesTableContextProvider = ({ return; } - await upgradeSpecificRulesRequest({ - pickVersion: 'MERGED', + await upgradeRulesRequest({ + mode: 'SPECIFIC_RULES', + pick_version: 'MERGED', rules: ruleUpgradeSpecifiers, }); } catch { @@ -201,7 +265,7 @@ export const UpgradePrebuiltRulesTableContextProvider = ({ setLoadingRules((prev) => prev.filter((id) => !upgradedRuleIdsSet.has(id))); } }, - [confirmLegacyMLJobs, confirmConflictsUpgrade, rulesUpgradeState, upgradeSpecificRulesRequest] + [confirmLegacyMLJobs, confirmConflictsUpgrade, rulesUpgradeState, upgradeRulesRequest] ); const upgradeRulesToTarget = useCallback( @@ -220,8 +284,9 @@ export const UpgradePrebuiltRulesTableContextProvider = ({ return; } - await upgradeSpecificRulesRequest({ - pickVersion: 'TARGET', + await upgradeRulesRequest({ + mode: 'SPECIFIC_RULES', + pick_version: 'TARGET', rules: ruleUpgradeSpecifiers, }); } catch { @@ -232,7 +297,7 @@ export const UpgradePrebuiltRulesTableContextProvider = ({ setLoadingRules((prev) => prev.filter((id) => !upgradedRuleIdsSet.has(id))); } }, - [confirmLegacyMLJobs, rulesUpgradeState, upgradeSpecificRulesRequest] + [confirmLegacyMLJobs, rulesUpgradeState, upgradeRulesRequest] ); const upgradeRules = useCallback( @@ -246,11 +311,50 @@ export const UpgradePrebuiltRulesTableContextProvider = ({ [isRulesCustomizationEnabled, upgradeRulesToResolved, upgradeRulesToTarget] ); - const upgradeAllRules = useCallback( - // Upgrade all rules, ignoring filter and selection - () => upgradeRules(ruleUpgradeInfos.map((rule) => rule.rule_id)), - [ruleUpgradeInfos, upgradeRules] - ); + const upgradeAllRules = useCallback(async () => { + setLoadingRules((prev) => [...prev, ...upgradeableRules.map((rule) => rule.rule_id)]); + + try { + // Handle MLJobs modal + if (!(await confirmLegacyMLJobs())) { + return; + } + + const dryRunResults = await upgradeRulesRequest({ + mode: 'ALL_RULES', + pick_version: isRulesCustomizationEnabled ? 'MERGED' : 'TARGET', + filter: filterOptions, + dry_run: true, + on_conflict: 'SKIP', + }); + + const hasConflicts = dryRunResults.results.skipped.some( + (skippedRule) => skippedRule.reason === 'CONFLICT' + ); + + if (hasConflicts && !(await confirmConflictsUpgrade())) { + return; + } + + await upgradeRulesRequest({ + mode: 'ALL_RULES', + pick_version: isRulesCustomizationEnabled ? 'MERGED' : 'TARGET', + filter: filterOptions, + on_conflict: 'SKIP', + }); + } catch { + // Error is handled by the mutation's onError callback, so no need to do anything here + } finally { + setLoadingRules([]); + } + }, [ + upgradeableRules, + confirmLegacyMLJobs, + upgradeRulesRequest, + isRulesCustomizationEnabled, + filterOptions, + confirmConflictsUpgrade, + ]); const subHeaderFactory = useCallback( (rule: RuleResponse) => @@ -377,12 +481,8 @@ export const UpgradePrebuiltRulesTableContextProvider = ({ setRuleFieldResolvedValue, ] ); - const filteredRules = useMemo( - () => filteredRuleUpgradeStates.map(({ target_rule: targetRule }) => targetRule), - [filteredRuleUpgradeStates] - ); const { rulePreviewFlyout, openRulePreview } = useRulePreviewFlyout({ - rules: filteredRules, + rules: ruleUpgradeStates.map(({ target_rule: targetRule }) => targetRule), subHeaderFactory, ruleActionsFactory, extraTabsFactory, @@ -399,6 +499,8 @@ export const UpgradePrebuiltRulesTableContextProvider = ({ upgradeAllRules, setFilterOptions, openRulePreview, + setPagination, + setSortingOptions, }), [refetch, upgradeRules, upgradeAllRules, openRulePreview] ); @@ -406,31 +508,41 @@ export const UpgradePrebuiltRulesTableContextProvider = ({ const providerValue = useMemo( () => ({ state: { - ruleUpgradeStates: filteredRuleUpgradeStates, - hasRulesToUpgrade: isFetched && ruleUpgradeInfos.length > 0, + ruleUpgradeStates, + hasRulesToUpgrade, filterOptions, - tags, + tags: tags ?? [], isFetched, isLoading: isLoading || areMlJobsLoading, + isFetching, isRefetching, isUpgradingSecurityPackages, loadingRules, lastUpdated: dataUpdatedAt, + pagination: { + ...pagination, + total: upgradeReviewResponse?.total ?? 0, + }, + sortingOptions, }, actions, }), [ - ruleUpgradeInfos.length, - filteredRuleUpgradeStates, + ruleUpgradeStates, + hasRulesToUpgrade, filterOptions, tags, isFetched, isLoading, areMlJobsLoading, + isFetching, isRefetching, isUpgradingSecurityPackages, loadingRules, dataUpdatedAt, + pagination, + upgradeReviewResponse?.total, + sortingOptions, actions, ] ); diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/upgrade_prebuilt_rules_table/upgrade_prebuilt_rules_table_filters.tsx b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/upgrade_prebuilt_rules_table/upgrade_prebuilt_rules_table_filters.tsx index d8b8f618cf43d..b62f987b8abe2 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/upgrade_prebuilt_rules_table/upgrade_prebuilt_rules_table_filters.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/upgrade_prebuilt_rules_table/upgrade_prebuilt_rules_table_filters.tsx @@ -9,11 +9,11 @@ import { EuiFilterGroup, EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; import { isEqual } from 'lodash/fp'; import React, { useCallback } from 'react'; import styled from 'styled-components'; +import type { RuleCustomizationStatus } from '../../../../../../common/api/detection_engine'; import { usePrebuiltRulesCustomizationStatus } from '../../../../rule_management/logic/prebuilt_rules/use_prebuilt_rules_customization_status'; -import type { RuleCustomizationEnum } from '../../../../rule_management/logic'; -import * as i18n from './translations'; -import { TagsFilterPopover } from '../rules_table_filters/tags_filter_popover'; import { RuleSearchField } from '../rules_table_filters/rule_search_field'; +import { TagsFilterPopover } from '../rules_table_filters/tags_filter_popover'; +import * as i18n from './translations'; import { useUpgradePrebuiltRulesTableContext } from './upgrade_prebuilt_rules_table_context'; import { RuleCustomizationFilterPopover } from './upgrade_rule_customization_filter_popover'; @@ -33,13 +33,13 @@ const UpgradePrebuiltRulesTableFiltersComponent = () => { const { isRulesCustomizationEnabled } = usePrebuiltRulesCustomizationStatus(); - const { tags: selectedTags, ruleSource: selectedRuleSource = [] } = filterOptions; + const { tags: selectedTags, customization_status: customizationStatus } = filterOptions; const handleOnSearch = useCallback( - (filterString: string) => { + (nameString: string) => { setFilterOptions((filters) => ({ ...filters, - filter: filterString.trim(), + name: nameString.trim(), })); }, [setFilterOptions] @@ -57,22 +57,20 @@ const UpgradePrebuiltRulesTableFiltersComponent = () => { [selectedTags, setFilterOptions] ); - const handleSelectedRuleSource = useCallback( - (newRuleSource: RuleCustomizationEnum[]) => { - if (!isEqual(newRuleSource, selectedRuleSource)) { - setFilterOptions((filters) => ({ - ...filters, - ruleSource: newRuleSource, - })); - } + const handleCustomizationStatusChange = useCallback( + (newCustomizationStatus: RuleCustomizationStatus | undefined) => { + setFilterOptions((filters) => ({ + ...filters, + customization_status: newCustomizationStatus, + })); }, - [selectedRuleSource, setFilterOptions] + [setFilterOptions] ); return ( @@ -81,8 +79,8 @@ const UpgradePrebuiltRulesTableFiltersComponent = () => { {isRulesCustomizationEnabled && ( @@ -90,7 +88,7 @@ const UpgradePrebuiltRulesTableFiltersComponent = () => { diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/upgrade_prebuilt_rules_table/upgrade_rule_customization_filter_popover.tsx b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/upgrade_prebuilt_rules_table/upgrade_rule_customization_filter_popover.tsx index 234943e333272..05e68f4ebbccb 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/upgrade_prebuilt_rules_table/upgrade_rule_customization_filter_popover.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/upgrade_prebuilt_rules_table/upgrade_rule_customization_filter_popover.tsx @@ -5,23 +5,22 @@ * 2.0. */ -import React, { useState, useMemo } from 'react'; import type { EuiSelectableOption } from '@elastic/eui'; import { EuiFilterButton, EuiPopover, EuiSelectable } from '@elastic/eui'; -import { RuleCustomizationEnum } from '../../../../rule_management/logic'; +import React, { useMemo, useState } from 'react'; +import { RuleCustomizationStatus } from '../../../../../../common/api/detection_engine'; import * as i18n from '../../../../../detections/pages/detection_engine/rules/translations'; -import { toggleSelectedGroup } from '../../../../../common/components/ml_popover/jobs_table/filters/toggle_selected_group'; interface RuleCustomizationFilterPopoverProps { - selectedRuleSource: RuleCustomizationEnum[]; - onSelectedRuleSourceChanged: (newRuleSource: RuleCustomizationEnum[]) => void; + customizationStatus: RuleCustomizationStatus | undefined; + onCustomizationStatusChanged: (newRuleSource: RuleCustomizationStatus | undefined) => void; } const RULE_CUSTOMIZATION_POPOVER_WIDTH = 200; const RuleCustomizationFilterPopoverComponent = ({ - selectedRuleSource, - onSelectedRuleSourceChanged, + customizationStatus, + onCustomizationStatusChanged, }: RuleCustomizationFilterPopoverProps) => { const [isRuleCustomizationPopoverOpen, setIsRuleCustomizationPopoverOpen] = useState(false); @@ -29,18 +28,16 @@ const RuleCustomizationFilterPopoverComponent = ({ () => [ { label: i18n.MODIFIED_LABEL, - key: RuleCustomizationEnum.customized, - checked: selectedRuleSource.includes(RuleCustomizationEnum.customized) ? 'on' : undefined, + key: RuleCustomizationStatus.CUSTOMIZED, + checked: customizationStatus === RuleCustomizationStatus.CUSTOMIZED ? 'on' : undefined, }, { label: i18n.UNMODIFIED_LABEL, - key: RuleCustomizationEnum.not_customized, - checked: selectedRuleSource.includes(RuleCustomizationEnum.not_customized) - ? 'on' - : undefined, + key: RuleCustomizationStatus.NOT_CUSTOMIZED, + checked: customizationStatus === RuleCustomizationStatus.NOT_CUSTOMIZED ? 'on' : undefined, }, ], - [selectedRuleSource] + [customizationStatus] ); const handleSelectableOptionsChange = ( @@ -48,10 +45,8 @@ const RuleCustomizationFilterPopoverComponent = ({ _: unknown, changedOption: EuiSelectableOption ) => { - toggleSelectedGroup( - changedOption.key ?? '', - selectedRuleSource, - onSelectedRuleSourceChanged as (args: string[]) => void + onCustomizationStatusChanged( + changedOption.checked === 'on' ? (changedOption.key as RuleCustomizationStatus) : undefined ); }; @@ -62,8 +57,8 @@ const RuleCustomizationFilterPopoverComponent = ({ onClick={() => setIsRuleCustomizationPopoverOpen(!isRuleCustomizationPopoverOpen)} numFilters={selectableOptions.length} isSelected={isRuleCustomizationPopoverOpen} - hasActiveFilters={selectedRuleSource.length > 0} - numActiveFilters={selectedRuleSource.length} + hasActiveFilters={customizationStatus != null} + numActiveFilters={customizationStatus != null ? 1 : 0} data-test-subj="rule-customization-filter-popover-button" > {i18n.RULE_SOURCE} diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/upgrade_prebuilt_rules_table/use_filter_prebuilt_rules_to_upgrade.ts b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/upgrade_prebuilt_rules_table/use_filter_prebuilt_rules_to_upgrade.ts deleted file mode 100644 index f0a818fd2532e..0000000000000 --- a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/upgrade_prebuilt_rules_table/use_filter_prebuilt_rules_to_upgrade.ts +++ /dev/null @@ -1,48 +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 { useMemo } from 'react'; -import type { RuleUpgradeState } from '../../../../rule_management/model/prebuilt_rule_upgrade'; -import { RuleCustomizationEnum, type FilterOptions } from '../../../../rule_management/logic/types'; - -export type UpgradePrebuiltRulesTableFilterOptions = Pick< - FilterOptions, - 'filter' | 'tags' | 'ruleSource' ->; - -interface UseFilterPrebuiltRulesToUpgradeParams { - data: RuleUpgradeState[]; - filterOptions: UpgradePrebuiltRulesTableFilterOptions; -} - -export const useFilterPrebuiltRulesToUpgrade = ({ - data, - filterOptions, -}: UseFilterPrebuiltRulesToUpgradeParams): RuleUpgradeState[] => { - return useMemo(() => { - const { filter, tags, ruleSource } = filterOptions; - - return data.filter((ruleInfo) => { - if (filter && !ruleInfo.current_rule.name.toLowerCase().includes(filter.toLowerCase())) { - return false; - } - - if (tags?.length && !tags.every((tag) => ruleInfo.current_rule.tags.includes(tag))) { - return false; - } - - if (ruleSource?.length === 1 && ruleInfo.current_rule.rule_source.type === 'external') { - if (ruleSource.includes(RuleCustomizationEnum.customized)) { - return ruleInfo.current_rule.rule_source.is_customized; - } - return ruleInfo.current_rule.rule_source.is_customized === false; - } - - return true; - }); - }, [filterOptions, data]); -}; diff --git a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/upgrade_prebuilt_rules_table/use_prebuilt_rules_upgrade_state.test.ts b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/upgrade_prebuilt_rules_table/use_prebuilt_rules_upgrade_state.test.ts index 28b24a4efe9a5..3a35e783975e9 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/upgrade_prebuilt_rules_table/use_prebuilt_rules_upgrade_state.test.ts +++ b/x-pack/solutions/security/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/upgrade_prebuilt_rules_table/use_prebuilt_rules_upgrade_state.test.ts @@ -429,6 +429,7 @@ function createRuleUpgradeInfoMock( num_fields_with_non_solvable_conflicts: 0, fields: {}, }, + version: 1, revision: 1, ...rewrites, }; diff --git a/x-pack/solutions/security/plugins/security_solution/public/detections/components/rules/pre_packaged_rules/add_elastic_rules_button.tsx b/x-pack/solutions/security/plugins/security_solution/public/detections/components/rules/pre_packaged_rules/add_elastic_rules_button.tsx index d62c080ace66f..e0f87a3ee22cc 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/detections/components/rules/pre_packaged_rules/add_elastic_rules_button.tsx +++ b/x-pack/solutions/security/plugins/security_solution/public/detections/components/rules/pre_packaged_rules/add_elastic_rules_button.tsx @@ -33,7 +33,7 @@ export const AddElasticRulesButton = ({ }); const { data: preBuiltRulesStatus } = usePrebuiltRulesStatus(); - const newRulesCount = preBuiltRulesStatus?.num_prebuilt_rules_to_install ?? 0; + const newRulesCount = preBuiltRulesStatus?.stats.num_prebuilt_rules_to_install ?? 0; const ButtonComponent = fill ? EuiButton : EuiButtonEmpty; diff --git a/x-pack/solutions/security/plugins/security_solution/public/explore/network/components/arrows/__snapshots__/index.test.tsx.snap b/x-pack/solutions/security/plugins/security_solution/public/explore/network/components/arrows/__snapshots__/index.test.tsx.snap index 49e00e866c68f..227c44d807209 100644 --- a/x-pack/solutions/security/plugins/security_solution/public/explore/network/components/arrows/__snapshots__/index.test.tsx.snap +++ b/x-pack/solutions/security/plugins/security_solution/public/explore/network/components/arrows/__snapshots__/index.test.tsx.snap @@ -1017,20 +1017,20 @@ exports[`arrows ArrowBody renders correctly against snapshot 1`] = ` .css-10uvw04{background-color:#CAD3E2;height:3px;width:25px;}